|  |  |  | 
|---|
|  |  |  | package cc.mrbird.febs.mall.service.impl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; | 
|---|
|  |  |  | import cc.mrbird.febs.common.enumerates.OrderRefundStatusEnum; | 
|---|
|  |  |  | import cc.mrbird.febs.common.enumerates.OrderStatusEnum; | 
|---|
|  |  |  | 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.LoginUserUtil; | 
|---|
|  |  |  | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.OrderDetailVo; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.OrderListVo; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.OrderRefundVo; | 
|---|
|  |  |  | import cc.mrbird.febs.pay.service.IPayService; | 
|---|
|  |  |  | import cc.mrbird.febs.rabbit.producter.AgentProducer; | 
|---|
|  |  |  | import cn.hutool.core.collection.CollUtil; | 
|---|
|  |  |  | import cn.hutool.core.date.DateUnit; | 
|---|
|  |  |  | 
|---|
|  |  |  | private final RedisUtils redisUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private final AgentProducer agentProducer; | 
|---|
|  |  |  | private final IPayService payService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (sku.getStock() < item.getCnt()) { | 
|---|
|  |  |  | throw new FebsException("库存不足"); | 
|---|
|  |  |  | throw new FebsException(sku.getSkuName() + "库存不足"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); | 
|---|
|  |  |  | if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) { | 
|---|
|  |  |  | throw new FebsException(mallGoods.getGoodsName() + "已下架"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MallOrderItem orderItem = new MallOrderItem(); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new FebsException("订单状态不能支付"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String orderNo = ""; | 
|---|
|  |  |  | String payResultStr = ""; | 
|---|
|  |  |  | switch (payOrderDto.getType()) { | 
|---|
|  |  |  | case "1": | 
|---|
|  |  |  | orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo()); | 
|---|
|  |  |  | orderInfo.setPayImage(payOrderDto.getPayImage()); | 
|---|
|  |  |  | //                orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo()); | 
|---|
|  |  |  | //                orderInfo.setPayImage(payOrderDto.getPayImage()); | 
|---|
|  |  |  | orderInfo.setPayMethod("微信支付"); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "2": | 
|---|
|  |  |  | orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo()); | 
|---|
|  |  |  | orderInfo.setPayImage(payOrderDto.getPayImage()); | 
|---|
|  |  |  | if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) { | 
|---|
|  |  |  | payResultStr = orderInfo.getPayOrderNo(); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | payResultStr = payService.aliPay(orderInfo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | orderInfo.setPayOrderNo(payResultStr); | 
|---|
|  |  |  | orderInfo.setPayMethod("支付宝支付"); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "3": | 
|---|
|  |  |  | orderNo = balancePay(orderInfo, payOrderDto.getTradePwd()); | 
|---|
|  |  |  | payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | orderInfo.setPayOrderNo(orderInfo.getOrderNo()); | 
|---|
|  |  |  | orderInfo.setPayMethod("积分支付"); | 
|---|
|  |  |  | orderInfo.setPayMethod("余额支付"); | 
|---|
|  |  |  | orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); | 
|---|
|  |  |  | orderInfo.setPayTime(new Date()); | 
|---|
|  |  |  | orderInfo.setPayResult("1"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                MallMember mallMember = memberMapper.selectById(member.getId()); | 
|---|
|  |  |  | //                if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { | 
|---|
|  |  |  | //                    mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); | 
|---|
|  |  |  | //                    memberMapper.updateById(mallMember); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 静态倍数 | 
|---|
|  |  |  | List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId()); | 
|---|
|  |  |  | if (CollUtil.isNotEmpty(orderItems)) { | 
|---|
|  |  |  | for (MallOrderItem orderItem : orderItems) { | 
|---|
|  |  |  | MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId()); | 
|---|
|  |  |  | BigDecimal score = sku.getOriginalPrice().multiply(mallGoods.getStaticMultiple()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | memberWalletService.add(score, member.getId(), "score"); | 
|---|
|  |  |  | memberService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.SCORE.getValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.BALANCE.getValue()); | 
|---|
|  |  |  | //                agentProducer.sendAutoLevelUpMsg(member.getId()); | 
|---|
|  |  |  | //                agentProducer.sendReturnMoneyMsg(orderInfo.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | default: | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); | 
|---|
|  |  |  | orderInfo.setPayTime(new Date()); | 
|---|
|  |  |  | orderInfo.setPayResult("1"); | 
|---|
|  |  |  | this.baseMapper.updateById(orderInfo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Map<String, Object> map = new HashMap<>(); | 
|---|
|  |  |  | map.put("orderNo", orderNo); | 
|---|
|  |  |  | map.put("orderInfo", payResultStr); | 
|---|
|  |  |  | map.put("orderNo", orderInfo.getOrderNo()); | 
|---|
|  |  |  | map.put("orderId", orderInfo.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | agentProducer.sendAutoLevelUpMsg(member.getId()); | 
|---|
|  |  |  | agentProducer.sendReturnMoneyMsg(orderInfo.getId()); | 
|---|
|  |  |  | return map; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new FebsException("支付密码错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | memberWalletService.reduceBalance(orderInfo.getAmount(), mallMember.getId()); | 
|---|
|  |  |  | memberWalletService.reduce(orderInfo.getAmount(), mallMember.getId(), "balance"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return orderInfo.getOrderNo(); | 
|---|
|  |  |  | } | 
|---|