| | |
| | | package cc.mrbird.febs.mall.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.enumerates.RunVipDataDictionaryEnum; |
| | | import cc.mrbird.febs.common.enumerates.YesOrNoEnum; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.common.utils.LoginUserUtil; |
| | | import cc.mrbird.febs.common.utils.MallUtils; |
| | | import cc.mrbird.febs.mall.conversion.RunVipConversion; |
| | | import cc.mrbird.febs.mall.entity.MallMember; |
| | | import cc.mrbird.febs.mall.entity.RunVip; |
| | | import cc.mrbird.febs.mall.dto.ApiChargeListDto; |
| | | import cc.mrbird.febs.mall.dto.ApiGoChargeDto; |
| | | import cc.mrbird.febs.mall.dto.ApiGoChargeInfoDto; |
| | | import cc.mrbird.febs.mall.dto.ApiMemberChargeFailDto; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; |
| | | import cc.mrbird.febs.mall.mapper.MallChargeMapper; |
| | | import cc.mrbird.febs.mall.mapper.MallMemberPaymentMapper; |
| | | import cc.mrbird.febs.mall.mapper.RunVipMapper; |
| | | import cc.mrbird.febs.mall.service.IRunVipService; |
| | | import cc.mrbird.febs.mall.vo.ApiChargeInfoVo; |
| | | import cc.mrbird.febs.mall.vo.ApiChargeVo; |
| | | import cc.mrbird.febs.mall.vo.ApiGoChargeVo; |
| | | import cc.mrbird.febs.mall.vo.ApiRunVipVo; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class RunVipServiceImpl extends ServiceImpl<RunVipMapper, RunVip> implements IRunVipService { |
| | | |
| | | private final DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | private final MallMemberPaymentMapper mallMemberPaymentMapper; |
| | | private final MallChargeMapper mallChargeMapper; |
| | | private final AgentProducer agentProducer; |
| | | @Override |
| | | public List<ApiRunVipVo> vipInfo() { |
| | | MallMember member = LoginUserUtil.getLoginUser(); |
| | |
| | | |
| | | return apiRunVipVos; |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse goCharge(ApiGoChargeDto apiGoChargeDto) { |
| | | |
| | | Long memberId = LoginUserUtil.getLoginUser().getId(); |
| | | |
| | | Long runVipId = apiGoChargeDto.getRunVipId(); |
| | | RunVip runVip = this.baseMapper.selectById(runVipId); |
| | | if(runVip.getState() != YesOrNoEnum.YES.getValue()){ |
| | | throw new FebsException("会员套餐已下架"); |
| | | } |
| | | //价格 |
| | | BigDecimal presentAmount = runVip.getPresentPrice().multiply(new BigDecimal(apiGoChargeDto.getVipCnt())).setScale(2,BigDecimal.ROUND_DOWN); |
| | | |
| | | Long addressId = apiGoChargeDto.getAddressId(); |
| | | MallMemberPayment mallMemberPayment = mallMemberPaymentMapper.selectById(addressId); |
| | | if(ObjectUtil.isEmpty(mallMemberPayment)){ |
| | | return new FebsResponse().fail().message("请先绑定你的地址"); |
| | | } |
| | | |
| | | String sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getType(), |
| | | RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getCode() |
| | | ).getValue(); |
| | | String failMinutes = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | RunVipDataDictionaryEnum.CHARGE_SYS_FAIL_TIME.getType(), |
| | | RunVipDataDictionaryEnum.CHARGE_SYS_FAIL_TIME.getCode() |
| | | ).getValue(); |
| | | DateTime failTime = DateUtil.offsetMinute(DateUtil.date(), Integer.parseInt(failMinutes)); |
| | | |
| | | MallCharge mallCharge = new MallCharge(); |
| | | mallCharge.setMemberId(memberId); |
| | | mallCharge.setOrderNo(MallUtils.getOrderNum()); |
| | | mallCharge.setState(YesOrNoEnum.ING.getValue()); |
| | | mallCharge.setType(mallMemberPayment.getBankNo()); |
| | | mallCharge.setAddress(mallMemberPayment.getBank()); |
| | | mallCharge.setAmount(presentAmount); |
| | | mallCharge.setFailTime(failTime); |
| | | mallCharge.setSysAddress(sysAddress); |
| | | mallCharge.setVipCode(runVip.getVipCode()); |
| | | mallCharge.setVipName(runVip.getVipName()); |
| | | mallCharge.setVipCnt(apiGoChargeDto.getVipCnt()); |
| | | mallChargeMapper.insert(mallCharge); |
| | | |
| | | ApiGoChargeVo apiGoChargeVo = new ApiGoChargeVo(); |
| | | apiGoChargeVo.setFailTime(mallCharge.getFailTime()); |
| | | apiGoChargeVo.setAddress(mallCharge.getAddress()); |
| | | apiGoChargeVo.setAmount(mallCharge.getAmount()); |
| | | apiGoChargeVo.setSysAddress(mallCharge.getSysAddress()); |
| | | |
| | | /** |
| | | * 充值接口调用后,发送一个延时队列 |
| | | * 功能:延迟时间为【failMinutes】后,更新充值记录为失败。 |
| | | */ |
| | | ApiMemberChargeFailDto apiMemberChargeFailDto = new ApiMemberChargeFailDto(); |
| | | apiMemberChargeFailDto.setChargeId(mallCharge.getId()); |
| | | apiMemberChargeFailDto.setFailTime(Integer.parseInt(failMinutes) * 60L* 1000L); |
| | | agentProducer.sendMemberChargeFailMsg(apiMemberChargeFailDto); |
| | | |
| | | return new FebsResponse().success().data(apiGoChargeVo); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse goChargeInfo(ApiGoChargeInfoDto apiGoChargeInfoDto) { |
| | | Long memberId = LoginUserUtil.getLoginUser().getId(); |
| | | String orderNo = apiGoChargeInfoDto.getOrderNo(); |
| | | |
| | | LambdaQueryWrapper<MallCharge> objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | objectLambdaQueryWrapper.eq(MallCharge::getMemberId,memberId); |
| | | objectLambdaQueryWrapper.eq(MallCharge::getOrderNo,orderNo); |
| | | MallCharge mallCharge = mallChargeMapper.selectOne(objectLambdaQueryWrapper); |
| | | |
| | | ApiGoChargeVo apiGoChargeVo = new ApiGoChargeVo(); |
| | | apiGoChargeVo.setFailTime(mallCharge.getFailTime()); |
| | | apiGoChargeVo.setAddress(mallCharge.getAddress()); |
| | | apiGoChargeVo.setAmount(mallCharge.getAmount()); |
| | | apiGoChargeVo.setSysAddress(mallCharge.getSysAddress()); |
| | | return new FebsResponse().success().data(apiGoChargeVo); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse getChargeInfo() { |
| | | Long memberId = LoginUserUtil.getLoginUser().getId(); |
| | | ApiChargeInfoVo apiChargeInfoVo = new ApiChargeInfoVo(); |
| | | |
| | | String sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getType(), |
| | | RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getCode() |
| | | ).getValue(); |
| | | apiChargeInfoVo.setChargeAddress(sysAddress); |
| | | List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(RunVipDataDictionaryEnum.CHARGE_TYPE_TRC.getType()); |
| | | List<String> coinTypeList = dataDictionaryCustoms.stream().map(DataDictionaryCustom::getValue).collect(Collectors.toList()); |
| | | apiChargeInfoVo.setCoinType(coinTypeList); |
| | | return new FebsResponse().success().data(apiChargeInfoVo); |
| | | } |
| | | |
| | | @Override |
| | | public List<ApiChargeVo> getChargeList(ApiChargeListDto apiChargeListDto) { |
| | | Long memberId = LoginUserUtil.getLoginUser().getId(); |
| | | apiChargeListDto.setMemberId(memberId); |
| | | Page<ApiChargeVo> page = new Page<>(apiChargeListDto.getPageNum(), apiChargeListDto.getPageSize()); |
| | | return mallChargeMapper.selectChargeListInPage(apiChargeListDto, page); |
| | | } |
| | | } |