| | |
| | | package cc.mrbird.febs.mall.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.enumerates.*; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.common.utils.AppContants; |
| | | import cc.mrbird.febs.common.utils.RedisUtils; |
| | | import cc.mrbird.febs.mall.entity.AppVersion; |
| | | import cc.mrbird.febs.mall.entity.DataDictionaryCustom; |
| | | import cc.mrbird.febs.mall.mapper.AppVersionMapper; |
| | | import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | | import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; |
| | | import cc.mrbird.febs.mall.service.ICommonService; |
| | | import cc.mrbird.febs.mall.service.IMallAchieveService; |
| | | import cc.mrbird.febs.mall.service.IMallMoneyFlowService; |
| | | import cc.mrbird.febs.pay.service.IAliPayService; |
| | | import cc.mrbird.febs.pay.service.IPayService; |
| | | import cc.mrbird.febs.pay.service.UnipayService; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | private final RedisUtils redisUtils; |
| | | private final DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | private final AppVersionMapper appVersionMapper; |
| | | |
| | | |
| | | private final MallGoodsMapper mallGoodsMapper; |
| | | private final MallMemberMapper memberMapper; |
| | | private final IApiMallMemberWalletService memberWalletService; |
| | | private final IMallMoneyFlowService mallMoneyFlowService; |
| | | private final MallAchieveRecordMapper mallAchieveRecordMapper; |
| | | private final MallMemberWalletMapper mallMemberWalletMapper; |
| | | private final MallOrderInfoMapper mallOrderInfoMapper; |
| | | |
| | | @Override |
| | | public boolean verifyCode(String account, String code) { |
| | |
| | | dataDictionaryCustomMapper.updateById(dic); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 支付金额后的操作 |
| | | * 减少积分,增加流水 |
| | | * 购买套餐后,升级会员等级 |
| | | * 增加支付金额流水 |
| | | * 增加补贴额度 |
| | | * 增加贡献值,增加流水 |
| | | * 产生一条业绩记录 |
| | | * @param orderId |
| | | */ |
| | | @Override |
| | | public void changeWallet(Long orderId, int payType) { |
| | | MallOrderInfo orderInfo = this.mallOrderInfoMapper.selectById(orderId); |
| | | Long memberId = orderInfo.getMemberId(); |
| | | boolean hasTc = false; |
| | | //总贡献值 |
| | | BigDecimal starSum = BigDecimal.ZERO; |
| | | /** |
| | | * 总补贴额度 |
| | | * 所有合伙人补贴至消费礼包的三倍额度需要复购一次。 |
| | | */ |
| | | BigDecimal scoreSum = BigDecimal.ZERO; |
| | | BigDecimal achieveSum = BigDecimal.ZERO; |
| | | List<MallOrderItem> orderItems = this.mallOrderInfoMapper.getMallOrderItemByOrderId(orderInfo.getId()); |
| | | if (CollUtil.isNotEmpty(orderItems)) { |
| | | for (MallOrderItem orderItem : orderItems) { |
| | | MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); |
| | | /** |
| | | * 购买套餐赠送贡献值 |
| | | * 补贴3倍额度 |
| | | */ |
| | | if (mallGoods.getIsNormal() == 2) { |
| | | hasTc = true; |
| | | BigDecimal star = (mallGoods.getStar()==null ? BigDecimal.ZERO : mallGoods.getStar()) |
| | | .multiply(new BigDecimal(orderItem.getCnt())); |
| | | starSum = starSum.add(star); |
| | | // scoreSum = scoreSum.add( |
| | | // new BigDecimal(mallGoods.getPresentPrice()) |
| | | // .multiply(new BigDecimal(3)) |
| | | // .multiply(new BigDecimal(orderItem.getCnt())) |
| | | // .abs() |
| | | // .setScale(2,BigDecimal.ROUND_DOWN)); |
| | | String goodsName = mallGoods.getGoodsName(); |
| | | /** |
| | | * 1-2档投资级别,2.5倍 |
| | | * 3-4档投资级别,2.8倍 |
| | | * 5-6档投资级别,3倍 |
| | | * 目前紧急修改成按照商品名称 |
| | | */ |
| | | BigDecimal basePercent = new BigDecimal("3"); |
| | | if(goodsName.equals("礼包一")){ |
| | | basePercent = new BigDecimal("1.5"); |
| | | } |
| | | if(goodsName.equals("礼包二")){ |
| | | basePercent = new BigDecimal("2.5"); |
| | | } |
| | | if(goodsName.equals("礼包三") || goodsName.equals("礼包四")){ |
| | | basePercent = new BigDecimal("2.8"); |
| | | } |
| | | if(goodsName.equals("礼包五") || goodsName.equals("礼包六")){ |
| | | basePercent = new BigDecimal("3"); |
| | | } |
| | | scoreSum = scoreSum.add( |
| | | new BigDecimal(mallGoods.getPresentPrice()) |
| | | .multiply(new BigDecimal(orderItem.getCnt())) |
| | | .multiply(basePercent) |
| | | .abs() |
| | | .setScale(2,BigDecimal.ROUND_DOWN)); |
| | | achieveSum = achieveSum.add( |
| | | new BigDecimal(mallGoods.getPresentPrice()) |
| | | .multiply(new BigDecimal(orderItem.getCnt())) |
| | | .abs() |
| | | .setScale(2,BigDecimal.ROUND_DOWN)); |
| | | } |
| | | } |
| | | /** |
| | | * 增加贡献值,增加流水 |
| | | */ |
| | | if (starSum.compareTo(BigDecimal.ZERO) > 0) { |
| | | //系统设置的个人贡献点最大值 |
| | | DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.STAR_GET.getType(), |
| | | DataDictionaryEnum.STAR_GET.getCode()); |
| | | if(ObjectUtil.isNotEmpty(starGetDic)){ |
| | | String starGetStr = StrUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue(); |
| | | BigDecimal starGet = new BigDecimal(starGetStr); |
| | | |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); |
| | | BigDecimal star = new BigDecimal(mallMemberWallet.getStar()); |
| | | if(starGet.compareTo(star.add(starSum)) < 0){ |
| | | if(starGet.compareTo(BigDecimal.ZERO) == 0){ |
| | | mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | starSum, |
| | | MoneyFlowTypeEnum.STAR.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | FlowTypeEnum.STAR.getValue(), |
| | | 2); |
| | | } |
| | | if(starGet.compareTo(star) > 0){ |
| | | BigDecimal subtract = starGet.subtract(star); |
| | | if(subtract.compareTo(starSum) < 0){ |
| | | starSum = subtract; |
| | | } |
| | | mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | starSum, |
| | | MoneyFlowTypeEnum.STAR.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | FlowTypeEnum.STAR.getValue(), |
| | | 2); |
| | | } |
| | | }else{ |
| | | mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | starSum, |
| | | MoneyFlowTypeEnum.STAR.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | FlowTypeEnum.STAR.getValue(), |
| | | 2); |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 增加补贴额度 |
| | | */ |
| | | if (scoreSum.compareTo(BigDecimal.ZERO) > 0) { |
| | | // MallMember mallMember = memberMapper.selectById(memberId); |
| | | // if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) >= 5){ |
| | | // scoreSum = scoreSum.multiply(new BigDecimal(3)); |
| | | // } |
| | | // if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) >= 3 |
| | | // &&MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) < 5){ |
| | | // scoreSum = scoreSum.multiply(new BigDecimal(2.8)); |
| | | // } |
| | | // if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) < 3){ |
| | | // scoreSum = scoreSum.multiply(new BigDecimal(2.5)); |
| | | // } |
| | | memberWalletService.add(scoreSum, memberId, "totalScore"); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | scoreSum, |
| | | MoneyFlowTypeEnum.TOTAL_SCORE.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | "", |
| | | scoreSum.toString(), |
| | | memberId, |
| | | 1, |
| | | FlowTypeEnum.TOTAL_SCORE.getValue(), |
| | | 2); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 购买套餐后,升级会员等级 |
| | | */ |
| | | if (hasTc) { |
| | | MallMember mallMember = memberMapper.selectById(memberId); |
| | | if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { |
| | | mallMember.setLevel(AgentLevelEnum.SECOND_LEVEL.name()); |
| | | memberMapper.updateById(mallMember); |
| | | } |
| | | } |
| | | /** |
| | | * 增加支付金额流水 |
| | | */ |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | orderInfo.getAmount().subtract(orderInfo.getScoreAmount()).negate(), |
| | | MoneyFlowTypeEnum.PAY.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | payType); |
| | | /** |
| | | * 减少积分,增加流水 |
| | | */ |
| | | if (orderInfo.getScoreCnt().compareTo(BigDecimal.ZERO) > 0) { |
| | | int reduce = memberWalletService.reduce(orderInfo.getScoreCnt(), memberId, "prizeScore"); |
| | | if (reduce == 2) { |
| | | throw new FebsException("积分不足"); |
| | | } |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | orderInfo.getScoreCnt().negate(), |
| | | MoneyFlowTypeEnum.PAY.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | FlowTypeEnum.PRIZE_SCORE.getValue()); |
| | | } |
| | | /** |
| | | * 产生一条业绩记录 |
| | | */ |
| | | if(achieveSum.compareTo(BigDecimal.ZERO) > 0){ |
| | | MallAchieveRecord mallAchieveRecord = new MallAchieveRecord(); |
| | | mallAchieveRecord.setMemberId(memberId); |
| | | mallAchieveRecord.setAchieveTime(new Date()); |
| | | mallAchieveRecord.setAmount(achieveSum.subtract(orderInfo.getScoreAmount())); |
| | | mallAchieveRecord.setOrderId(orderId); |
| | | mallAchieveRecord.setPayTime(orderInfo.getPayTime()); |
| | | mallAchieveRecordMapper.insert(mallAchieveRecord); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<DataDictionaryCustom> findMemberDicByType() { |
| | | List<DataDictionaryCustom> dataDictionaryCustoms = new ArrayList<>(); |
| | | List<String> levelType = MemberLevelNewEnum.ZERO_LEVEL.getLevelType(); |
| | | if(CollUtil.isNotEmpty(levelType)){ |
| | | for(String level : levelType){ |
| | | DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | level, level |
| | | ); |
| | | dataDictionaryCustoms.add(dataDictionaryCustom); |
| | | } |
| | | } |
| | | return dataDictionaryCustoms; |
| | | } |
| | | } |