| | |
| | | private final MallMemberBankSignMapper mallMemberBankSignMapper; |
| | | private final MallMemberBankMapper mallMemberBankMapper; |
| | | private final MallShopApplyMapper mallShopApplyMapper; |
| | | private final DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | private final MallAchieveRecordMapper mallAchieveRecordMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | } |
| | | mallOrderItemMapper.insert(orderItem); |
| | | } |
| | | |
| | | /** |
| | | * 使用积分折扣现金 |
| | | */ |
| | | DataDictionaryCustom scorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.SCORE_PERCENT.getType(), |
| | | DataDictionaryEnum.SCORE_PERCENT.getCode() |
| | | ); |
| | | DataDictionaryCustom scoreChangeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.SCORE_CHANGE.getType(), |
| | | DataDictionaryEnum.SCORE_CHANGE.getCode() |
| | | ); |
| | | BigDecimal score = ObjectUtil.isEmpty(addOrderDto.getScore()) ? BigDecimal.ZERO : addOrderDto.getScore(); |
| | | orderInfo.setScoreCnt(score); |
| | | if(ObjectUtil.isNotEmpty(scorePercentDic)){ |
| | | BigDecimal scoreChange = BigDecimal.ONE; |
| | | if(ObjectUtil.isNotEmpty(scoreChangeDic)){ |
| | | scoreChange = new BigDecimal(scoreChangeDic.getValue()).abs().setScale(2,BigDecimal.ROUND_DOWN); |
| | | } |
| | | //折扣现金 |
| | | BigDecimal scorePercentAmount = score.divide(scoreChange,BigDecimal.ROUND_DOWN).setScale(2,BigDecimal.ROUND_DOWN); |
| | | orderInfo.setScoreAmount(scorePercentAmount); |
| | | } |
| | | orderInfo.setAmount(total); |
| | | if(2 == deliverType){ |
| | | orderInfo.setDeliverType(2); |
| | |
| | | orderInfo.setPayTime(new Date()); |
| | | orderInfo.setPayResult("1"); |
| | | |
| | | boolean hasTc = false; |
| | | // 静态倍数 |
| | | List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId()); |
| | | if (CollUtil.isNotEmpty(orderItems)) { |
| | | for (MallOrderItem orderItem : orderItems) { |
| | | MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); |
| | | BigDecimal score = BigDecimal.ZERO; |
| | | MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId()); |
| | | if (mallGoods.getIsNormal() == 2) { |
| | | hasTc = true; |
| | | score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti()).multiply(new BigDecimal(orderItem.getCnt())); |
| | | // BigDecimal staticMulti = mallGoods.getStaticMulti() == null ? BigDecimal.ZERO : mallGoods.getStaticMulti(); |
| | | // score = sku.getPresentPrice().multiply(staticMulti); |
| | | // 普通商品也及时结算,不再10天结算 |
| | | } else { |
| | | score = sku.getPresentPrice(); |
| | | } |
| | | changeWallet(orderInfo.getId(), member.getId()); |
| | | |
| | | if (score.compareTo(BigDecimal.ZERO) > 0) { |
| | | memberWalletService.add(score, member.getId(), "score"); |
| | | mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue()); |
| | | |
| | | // 添加业绩 |
| | | mallAchieveService.add(orderItem.getId()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 购买套餐后,升级为普通会员 |
| | | if (hasTc) { |
| | | MallMember mallMember = memberMapper.selectById(member.getId()); |
| | | if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { |
| | | mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); |
| | | memberMapper.updateById(mallMember); |
| | | } |
| | | } |
| | | |
| | | mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); |
| | | agentProducer.sendAutoLevelUpMsg(member.getId()); |
| | | agentProducer.sendOrderReturn(orderInfo.getId()); |
| | | // agentProducer.sendOrderReturn(orderInfo.getId()); |
| | | break; |
| | | case "4": |
| | | if (orderInfo.getOrderType() != 2) { |
| | |
| | | mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue()); |
| | | break; |
| | | case "5": |
| | | // AgreementSignDto agreementSignDto = new AgreementSignDto(); |
| | | // agreementSignDto.setOrderNo(orderInfo.getOrderNo()); |
| | | // agreementSignDto.setSmsCode(payOrderDto.getSmsCode()); |
| | | // String agreementSignStr = unipayService.agreementSign(agreementSignDto); |
| | | // if("fail".equals(agreementSignStr)){ |
| | | // throw new FebsException("支付失败"); |
| | | // }else{ |
| | | // JSONObject jsonObject = JSONUtil.parseObj(agreementSignStr); |
| | | // payResultStr = (String) jsonObject.get("biz_code"); |
| | | // String signData = (String) jsonObject.get("data"); |
| | | // String signBizMsg = (String) jsonObject.get("biz_msg"); |
| | | // |
| | | // JSONObject signDatajsonObject = JSONUtil.parseObj(signData); |
| | | // String err_msg = (String) signDatajsonObject.get("err_msg"); |
| | | // if(!"JS000000".equals(payResultStr)){ |
| | | // throw new FebsException(signBizMsg); |
| | | // } |
| | | // if(ObjectUtil.isNotNull(signDatajsonObject.get("err_code"))){ |
| | | // throw new FebsException(err_msg); |
| | | // } |
| | | // } |
| | | |
| | | AgreementPayDto agreementPayDto = new AgreementPayDto(); |
| | | agreementPayDto.setOrderNo(orderInfo.getOrderNo()); |
| | | |
| | |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 支付金额后的操作 |
| | | * 减少积分,增加流水 |
| | | * 购买套餐后,升级会员等级 |
| | | * 增加支付金额流水 |
| | | * 增加补贴额度 |
| | | * 增加贡献值,增加流水 |
| | | * 产生一条业绩记录 |
| | | * @param orderId |
| | | * @param memberId |
| | | */ |
| | | public void changeWallet(Long orderId,Long memberId){ |
| | | MallOrderInfo orderInfo = this.baseMapper.selectById(orderId); |
| | | boolean hasTc = false; |
| | | //总贡献值 |
| | | BigDecimal starSum = BigDecimal.ZERO; |
| | | /** |
| | | * 总补贴额度 |
| | | * 所有合伙人补贴至消费礼包的三倍额度需要复购一次。 |
| | | */ |
| | | BigDecimal scoreSum = BigDecimal.ZERO; |
| | | List<MallOrderItem> orderItems = this.baseMapper.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(); |
| | | starSum = starSum.add(star); |
| | | scoreSum = scoreSum.add( |
| | | new BigDecimal(mallGoods.getPresentPrice()) |
| | | .multiply(new BigDecimal(3)) |
| | | .abs() |
| | | .setScale(2,BigDecimal.ROUND_DOWN)); |
| | | } |
| | | } |
| | | /** |
| | | * 增加贡献值,增加流水 |
| | | */ |
| | | if (starSum.compareTo(BigDecimal.ZERO) > 0) { |
| | | memberWalletService.add(starSum, memberId, "star"); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | starSum, |
| | | MoneyFlowTypeEnum.STAR.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | FlowTypeEnum.STAR.getValue()); |
| | | } |
| | | /** |
| | | * 增加补贴额度 |
| | | */ |
| | | if (scoreSum.compareTo(BigDecimal.ZERO) > 0) { |
| | | memberWalletService.add(scoreSum, memberId, "totalScore"); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | memberId, |
| | | scoreSum, |
| | | MoneyFlowTypeEnum.TOTAL_SCORE.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | FlowTypeEnum.TOTAL_SCORE.getValue()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 购买套餐后,升级会员等级 |
| | | */ |
| | | 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(), |
| | | FlowTypeEnum.BALANCE.getValue()); |
| | | /** |
| | | * 减少积分,增加流水 |
| | | */ |
| | | 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()); |
| | | /** |
| | | * 产生一条业绩记录 |
| | | */ |
| | | MallAchieveRecord mallAchieveRecord = new MallAchieveRecord(); |
| | | mallAchieveRecord.setMemberId(memberId); |
| | | mallAchieveRecord.setAchieveTime(new Date()); |
| | | mallAchieveRecord.setAmount(orderInfo.getAmount().subtract(orderInfo.getScoreAmount())); |
| | | mallAchieveRecord.setOrderId(orderId); |
| | | mallAchieveRecord.setPayTime(orderInfo.getPayTime()); |
| | | mallAchieveRecordMapper.insert(mallAchieveRecord); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String str = "{\"biz_code\":\"JS000000\",\"biz_msg\":\"成功\",\"data\":\"{\\\"order_status\\\":\\\"P2000\\\",\\\"jp_order_no\\\":\\\"100120220826446740396081496064\\\",\\\"err_msg\\\":\\\"短信验证码不符\\\",\\\"err_code\\\":\\\"CP110026\\\",\\\"sign_no\\\":\\\"\\\",\\\"mch_order_no\\\":\\\"NO_2022082618263952399\\\"}\",\"mch_no\":\"888118000001971\",\"rand_str\":\"an2w7ulf5ru6upkk5bdg441kdi3gnpvu\",\"resp_code\":\"SUCCESS\",\"sec_key\":\"\",\"sign\":\"NiJXRTSIZ9xZMUOwEHiEHdZXmgL2cHUU5WUa1NbMRRzui0DIiuZSW4e31LjnBxwVwmy3uuPMP+tqhY8VLyC8uCFOdGdZI7e72VuRvyvaiW7/sqCrsfgPOBEjiGE/CmSMRoEXv9HmqCyNBF6iHSEhQJql5Yge30dQdyB6xFfqjk0=\",\"sign_type\":\"2\"}"; |
| | | |
| | |
| | | throw new FebsException("支付密码错误"); |
| | | } |
| | | |
| | | int reduce = memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field); |
| | | int reduce = memberWalletService.reduce(orderInfo.getAmount().subtract(orderInfo.getScoreAmount()).add(orderInfo.getCarriage()), mallMember.getId(), field); |
| | | if (reduce == 2) { |
| | | throw new FebsException("余额不足"); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public boolean judgeCreateOrder(AddOrderDto addOrderDto) { |
| | | boolean flag = false; |
| | | |
| | | if (CollUtil.isEmpty(addOrderDto.getItems())) { |
| | | return false; |
| | | } |
| | | |
| | | BigDecimal total = BigDecimal.ZERO; |
| | | for (AddOrderItemDto item : addOrderDto.getItems()) { |
| | | MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId()); |
| | | BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); |
| | | total = total.add(amount); |
| | | } |
| | | /** |
| | | * 使用积分折扣现金 |
| | | */ |
| | | DataDictionaryCustom scorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.SCORE_PERCENT.getType(), |
| | | DataDictionaryEnum.SCORE_PERCENT.getCode() |
| | | ); |
| | | DataDictionaryCustom scoreChangeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.SCORE_CHANGE.getType(), |
| | | DataDictionaryEnum.SCORE_CHANGE.getCode() |
| | | ); |
| | | BigDecimal score = ObjectUtil.isEmpty(addOrderDto.getScore()) ? BigDecimal.ZERO : addOrderDto.getScore(); |
| | | if(ObjectUtil.isNotEmpty(scorePercentDic)){ |
| | | //商品的现金折扣比例 |
| | | BigDecimal scorePercent = new BigDecimal(scorePercentDic.getValue()).divide(new BigDecimal(100), BigDecimal.ROUND_DOWN); |
| | | //最大折扣金额对应需要的总积分数目 |
| | | BigDecimal scorePercentMaxAmount = total.multiply(scorePercent); |
| | | BigDecimal scoreChange = BigDecimal.ONE; |
| | | if(ObjectUtil.isNotEmpty(scoreChangeDic)){ |
| | | scoreChange = new BigDecimal(scoreChangeDic.getValue()).abs().setScale(2,BigDecimal.ROUND_DOWN); |
| | | } |
| | | scorePercentMaxAmount = scorePercentMaxAmount.multiply(scoreChange); |
| | | if(scorePercentMaxAmount.compareTo(score) < 0){ |
| | | return false; |
| | | } |
| | | }else{ |
| | | flag = true; |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | } |