Jelajahi Sumber

首次提交

Yangzw 2 bulan lalu
induk
melakukan
bdddf0257e

+ 28 - 83
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -5,9 +5,7 @@ import cn.hutool.core.lang.Assert;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.RandomUtil;
 import cn.hutool.extra.spring.SpringUtil;
-import cn.hutool.json.JSONUtil;
 import cn.newfeifan.mall.framework.common.core.KeyValue;
 import cn.newfeifan.mall.framework.common.enums.UserTypeEnum;
 import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
@@ -22,7 +20,6 @@ import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofit.PtProfitDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharepath.SharePathDO;
 import cn.newfeifan.mall.module.distri.dal.mysql.orderpercentage.OrderPercentageMapper;
 import cn.newfeifan.mall.module.distri.enums.CaclEnum;
-import cn.newfeifan.mall.module.distri.enums.ConsumptionEnum;
 import cn.newfeifan.mall.module.distri.enums.SocialStatusEnum;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
 import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
@@ -265,8 +262,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum));
         order.setUserIp(getClientIP()).setTerminal(getTerminal());
         // 支付 + 退款信息
-        order.setAdjustPrice(0).setPayStatus(false);
-        order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0);
+        order.setPayStatus(false);
+        order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus());
         // 物流信息
         order.setDeliveryType(createReqVO.getDeliveryType());
         if (Objects.equals(createReqVO.getDeliveryType(), DeliveryTypeEnum.EXPRESS.getType())) {
@@ -276,7 +273,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                     .setReceiverAreaId(address.getAreaId()).setReceiverDetailAddress(address.getDetailAddress());
         } else if (Objects.equals(createReqVO.getDeliveryType(), DeliveryTypeEnum.PICK_UP.getType())) {
             order.setReceiverName(createReqVO.getReceiverName()).setReceiverMobile(createReqVO.getReceiverMobile());
-            order.setPickUpVerifyCode(RandomUtil.randomNumbers(8)); // 随机一个核销码,长度为 8 位
         } else if (Objects.equals(createReqVO.getDeliveryType(), DeliveryTypeEnum.VIRTUAL_PRODUCT.getType())) {
             MemberAddressRespDTO address = addressApi.getAddress(createReqVO.getAddressId(), userId);
             order.setReceiverName(createReqVO.getReceiverName()).setReceiverMobile(createReqVO.getReceiverMobile())
@@ -326,8 +322,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         Long payOrderId = payOrderApi.createOrder(payOrderCreateReqDTO);
 
         // 更新到交易单上
-        tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setPayOrderId(payOrderId));
-        order.setPayOrderId(payOrderId);
+        tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()));
     }
 
     @Override
@@ -342,7 +337,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         // 2. 更新 TradeOrderDO 状态为已支付,等待发货
         int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(),
                 new TradeOrderDO().setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()).setPayStatus(true)
-                        .setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode()));
+                        .setPayTime(LocalDateTime.now()));
         if (updateCount == 0) {
             throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID);
         }
@@ -378,12 +373,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                     id, JsonUtils.toJsonString(order));
             throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID);
         }
-        // 校验支付订单匹配
-        if (ObjectUtil.notEqual(order.getPayOrderId(), payOrderId)) { // 支付单号
-            log.error("[validateOrderPaid][order({}) 支付单不匹配({}),请进行处理!order 数据是:{}]",
-                    id, payOrderId, JsonUtils.toJsonString(order));
-            throw exception(ORDER_UPDATE_PAID_FAIL_PAY_ORDER_ID_ERROR);
-        }
 
         // 校验支付单是否存在
         PayOrderRespDTO payOrder = payOrderApi.getOrder(payOrderId);
@@ -398,7 +387,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             throw exception(ORDER_UPDATE_PAID_FAIL_PAY_ORDER_STATUS_NOT_SUCCESS);
         }
         // 校验支付金额一致
-        if (ObjectUtil.notEqual(payOrder.getPrice(), order.getPayPrice())) {
+        if (ObjectUtil.notEqual(payOrder.getPrice(), order.getPayIntegral())) {
             log.error("[validateOrderPaid][order({}) payOrder({}) 支付金额不匹配,请进行处理!order 数据是:{},payOrder 数据是:{}]",
                     id, payOrderId, JsonUtils.toJsonString(order), JsonUtils.toJsonString(payOrder));
             throw exception(ORDER_UPDATE_PAID_FAIL_PAY_PRICE_NOT_MATCH);
@@ -696,9 +685,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 if (payIntegral > 0) {
                     integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, tradeOrderId, orderNum);
                 }
-                if (order.getPayConsumptionPoints() > 0) {
-                    integralService.updateUserConsumptionPoints(userId, ConsumptionEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, order.getPayConsumptionPoints(), tradeOrderId, orderNum);
-                }
 
                 count++;
             } catch (Throwable e) {
@@ -752,7 +738,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_CANCEL_AFTER_SALE)
     public void cancelOrderByAfterSale(TradeOrderDO order, Integer refundPrice) {
         // 1. 更新订单
-        if (refundPrice < order.getPayPrice()) {
+        if (refundPrice < order.getPayIntegral()) {
             return;
         }
         tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
@@ -803,19 +789,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         if (order.getPayStatus()) {
             throw exception(ORDER_UPDATE_PRICE_FAIL_PAID);
         }
-        // 1.2 校验调价金额是否变化
-        if (order.getAdjustPrice() > 0) {
-            throw exception(ORDER_UPDATE_PRICE_FAIL_ALREADY);
-        }
         // 1.3 支付价格不能为 0
-        int newPayPrice = order.getPayPrice() + order.getAdjustPrice();
+        int newPayPrice = order.getPayIntegral().intValue();
         if (newPayPrice <= 0) {
             throw exception(ORDER_UPDATE_PRICE_FAIL_PRICE_ERROR);
         }
 
         // 2. 更新订单
-        tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
-                .setAdjustPrice(reqVO.getAdjustPrice()).setPayPrice(newPayPrice));
+        tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setPayIntegral((long) newPayPrice));
 
         // 3. 更新 TradeOrderItem,需要做 adjustPrice 的分摊
         List<TradeOrderItemDO> orderOrderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
@@ -823,17 +804,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         List<TradeOrderItemDO> updateItems = new ArrayList<>();
         for (int i = 0; i < orderOrderItems.size(); i++) {
             TradeOrderItemDO item = orderOrderItems.get(i);
-            updateItems.add(new TradeOrderItemDO().setId(item.getId()).setAdjustPrice(dividePrices.get(i))
-                    .setPayPrice(item.getPayPrice() + dividePrices.get(i)));
+            updateItems.add(new TradeOrderItemDO().setId(item.getId())
+                    .setPayIntegral(item.getPayIntegral() + dividePrices.get(i)));
         }
         tradeOrderItemMapper.updateBatch(updateItems);
 
-        // 4. 更新支付订单
-        payOrderApi.updatePayOrderPrice(order.getPayOrderId(), newPayPrice);
-
         // 5. 记录订单日志
         TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus(),
-                MapUtil.<String, Object>builder().put("oldPayPrice", MoneyUtils.fenToYuanStr(order.getPayPrice()))
+                MapUtil.<String, Object>builder().put("oldPayPrice", MoneyUtils.fenToYuanStr(order.getPayIntegral().intValue()))
                         .put("newPayPrice", MoneyUtils.fenToYuanStr(newPayPrice)).build());
     }
 
@@ -860,16 +838,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         getSelf().pickUpOrder(tradeOrderMapper.selectById(id));
     }
 
-    @Override
-    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_PICK_UP_RECEIVE)
-    public void pickUpOrderByAdmin(String pickUpVerifyCode) {
-        getSelf().pickUpOrder(tradeOrderMapper.selectOneByPickUpVerifyCode(pickUpVerifyCode));
-    }
-
-    @Override
-    public TradeOrderDO getByPickUpVerifyCode(String pickUpVerifyCode) {
-        return tradeOrderMapper.selectOneByPickUpVerifyCode(pickUpVerifyCode);
-    }
 
     @Transactional(rollbackFor = Exception.class)
     public void pickUpOrder(TradeOrderDO order) {
@@ -903,14 +871,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         tradeOrderHandlers.forEach(handler -> handler.afterCancelOrderItem(order, orderItem));
 
         // 2.1 更新订单的退款金额、积分
-        Integer orderRefundPrice = order.getRefundPrice() + refundPrice;
-        Integer orderRefundPoint = order.getRefundPoint() + orderItem.getUsePoint();
+        Integer orderRefundPrice = order.getRefundIntegral().intValue() + refundPrice;
         Integer refundStatus = isAllOrderItemAfterSaleSuccess(order.getId()) ?
                 TradeOrderRefundStatusEnum.ALL.getStatus() // 如果都售后成功,则需要取消订单
                 : TradeOrderRefundStatusEnum.PART.getStatus();
         tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
                 .setRefundStatus(refundStatus)
-                .setRefundPrice(orderRefundPrice).setRefundPoint(orderRefundPoint));
+                .setRefundIntegral(Long.valueOf(orderRefundPrice)));
         // 2.2 如果全部退款,则进行取消订单
         getSelf().cancelOrderByAfterSale(order, orderRefundPrice);
     }
@@ -1005,9 +972,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateOrderCombinationInfo(Long orderId, Long activityId, Long combinationRecordId, Long headId) {
-        tradeOrderMapper.updateById(
-                new TradeOrderDO().setId(orderId).setCombinationActivityId(activityId)
-                        .setCombinationRecordId(combinationRecordId).setCombinationHeadId(headId));
     }
 
     @Override
@@ -1116,7 +1080,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         /*
          * 购物本人自得 百分比
          */
-        String grossProfitUserQuotaPerc = orderPercentageDO.getGrossProfitUserQuotaPerc();
+        String grossProfitUserQuotaPerc = "0";
 
         /*
          * 推荐人(上一级) 百分比
@@ -1149,7 +1113,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             // 2. 更新 TradeOrderDO 状态为已支付,等待发货
             int updateCount = tradeOrderMapper.updateByIdAndStatus(tradeOrderId, order.getStatus(),
                     new TradeOrderDO().setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()).setPayStatus(true)
-                            .setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode()));
+                            .setPayTime(LocalDateTime.now()));
 
 //            System.out.println("#########updateOrderPaid####updateCount:"+updateCount);
 
@@ -1226,7 +1190,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 //记录用户在此订单项获得的冻结积分
                 TradeOrderItemDO toid = new TradeOrderItemDO();
                 toid.setId(tradeOrderItemDO.getId());
-                toid.setIncreaseIntegral(itemFreezeAmount);
                 toid.setAncestorIncreaseIntegral(ancestorItemFreezeAmount);//20240504 add by Ben
                 toid.setFreezeHighQuota(freezeHighQuotaInt);
                 tradeOrderItemMapper.updateById(toid);
@@ -1247,13 +1210,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 // 游客收益
                 PtProfitDO ptProfitDO = ptProfitService.getPtProfit();
 
-                ptProfitDO.setVisitorEarnings(ptProfitDO.getVisitorEarnings() + totalAncestorFreezeAmount);
                 ptProfitDO.setPtTotalAdd(ptProfitDO.getPtTotalAdd() + totalAncestorFreezeAmount);
                 ptProfitService.updatePtProfit(cn.newfeifan.mall.framework.common.util.object.BeanUtils.toBean(ptProfitDO, PtProfitSaveReqVO.class));
 
-                // 记录日志
-                ptProfitLogService.addMessage(user.getId(), null, CaclEnum.RECOMMENDED_PERSON_QUOTA, totalAncestorFreezeAmount,
-                        ptProfitDO.getVisitorEarnings(), null, null, JSONUtil.toJsonStr(orderPercentageDO), tradeOrderId, OrderNum);
             }
 
             //修改购物者本人获得的冻结峰值
@@ -1281,10 +1240,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         String title = WcChatMessageTemplateIdEnum.ORDER_NO_DELIVERY2.getName();
 
         DecimalFormat df = new DecimalFormat("0.00");
-        String formattedPrice = df.format((double) order.getPayPrice() / 100);
+        String formattedPrice = df.format((double) order.getPayIntegral() / 100);
         String alert = "订单金额: " + formattedPrice;
         alert += "\n单据编号: " + order.getNo();
-        alert += "\n客户名称: " + memberUserService.getUser(order.getUserId()).getNickname();
+        alert += "\n客户名称: " + memberUserService.getUser(order.getUserId()).getUsername();
 
         List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectListByOrderId(order.getId());
         List<String> productNames = tradeOrderItemDOS.stream().map(TradeOrderItemDO::getSpuName).collect(Collectors.toList());
@@ -1323,7 +1282,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
 
         // 计算,毛利中100 之外的百分比
-        BigDecimal otherOneHundred = oneHundred.subtract(new BigDecimal(orderPercentageDO.getGrossProfitUserQuotaPerc()))
+        BigDecimal otherOneHundred = oneHundred
                 .subtract(new BigDecimal(orderPercentageDO.getGrossProfitAncestorQuotaPerc()))
                 .subtract(new BigDecimal(orderPercentageDO.getGrossProfitPlatformQuotaPerc()));
 
@@ -1345,7 +1304,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 BigDecimal productCount = new BigDecimal(j.getCount());
                 BigDecimal oneGrossProfit = onePrice.subtract(oneCostPrice).multiply(productCount);
                 profit[0] = profit[0].add(oneGrossProfit);  // 注意这里的改动
-                profit[1] = profit[1].add(new BigDecimal(j.getIncreaseIntegral()));     //自得积分
                 profit[2] = profit[2].add(new BigDecimal(j.getAncestorIncreaseIntegral()));     //直推奖
                 profit[3] = profit[3].add(new BigDecimal(j.getFreezeHighQuota()));     //用户获得冻结最大可用额度
 
@@ -1369,7 +1327,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             }
 
             // 用户所得: 毛利 * 0.35
-            BigDecimal descendantQuota = profit[1];
+            BigDecimal descendantQuota = BigDecimal.valueOf(0L);
 
             // 直推奖: 毛利 * 0.3 (上一级)
             BigDecimal ancestorQuota = profit[2];
@@ -1393,8 +1351,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             // 获取当前下单人关系
             SharePathDO sharePath = sharePathService.getSharePathByDescendant(k.getUserId());
             // 如果sharePath为空, 则说明没有直推人关系
-            IntegralDO integralDOAncestor = integralService.selectByUser(sharePath.getAncestor());      //父级
-            IntegralDO integralDO = integralService.selectByUser(sharePath.getDescendant());            //自己
+            IntegralDO integralDOAncestor = integralService.selectByUser(sharePath.getReferrerId());      //父级
+            IntegralDO integralDO = integralService.selectByUser(sharePath.getUserId());            //自己
             IntegralDO ptIntegral = integralService.selectByUser(1L);                         //pt
 
 
@@ -1500,14 +1458,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                     .orderId(k.getId())
                     .profitStatus(CaclEnum.RECOMMENDED_PERSON_QUOTA.getType())
                     .orderNo(k.getNo())
-                    .userId(sharePath.getAncestor())
                     .amount(amount)
-                    .afterAmount(integralDOAncestor.getCurrentQuota())
-                    .freezeAmount(-amount)
-                    .afterFreezeAmount(integralDOAncestor.getFreezeQuota())
-                    .ancestorQuotaAmount(ptReplenish)
-                    .maxAvailablePointsAmount(-amount)
-                    .afterMaxAvailablePointsAmount(ancestorHighQuota - amount)
+                    .afterAmount(integralDOAncestor.getRedCurrentQuota())
                     .percentTemplate(percentTemplate)
                     .generateUserId(integralDO.getUserId())
                     .build();
@@ -1518,15 +1470,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                     .orderId(k.getId())
                     .profitStatus(CaclEnum.DIRECT_REFERRAL_QUOTA.getType())
                     .orderNo(k.getNo())
-                    .userId(sharePath.getDescendant())
                     .amount(descendantQuotaInt)
-                    .afterAmount(integralDO.getCurrentQuota())
-                    .freezeAmount(-descendantQuotaInt)
-                    .afterFreezeAmount(integralDO.getFreezeQuota())
-                    .maxAvailablePointsAmount(highQuotaInt)
-                    .afterMaxAvailablePointsAmount(integralDO.getHighQuota() + new BigDecimal(orderPercentageDO.getBaseMaxQuota()).longValue())
-                    .freezeHighQuota(-highQuotaInt)
-                    .afterFreezeHighQuota(integralDO.getFreezeHighQuota())
+                    .afterAmount(integralDO.getRedCurrentQuota())
                     .percentTemplate(percentTemplate)
                     .generateUserId(integralDO.getUserId())
                     .build();
@@ -1599,10 +1544,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         integralDO.setFreezeHighQuota(integralDO.getFreezeHighQuota() - highQuota);
         // todo 增加累计额度
 
-        integralDO.setCurrentQuota(integralDO.getCurrentQuota() + descendantQuota);
+        integralDO.setRedCurrentQuota(integralDO.getRedCurrentQuota() + descendantQuota);
         integralDO.setFreezeQuota(integralDO.getFreezeQuota() - descendantQuota);
         // 增加推荐人额度
-        integralDOAncestor.setCurrentQuota(integralDOAncestor.getCurrentQuota() + ancestorQuota);
+        integralDOAncestor.setRedCurrentQuota(integralDOAncestor.getRedCurrentQuota() + ancestorQuota);
         // 减少推荐人的可获取额度
         integralDOAncestor.setHighQuota(integralDOAncestor.getHighQuota() - ancestorQuota);
         integralDOAncestor.setAncestorQuota(integralDOAncestor.getAncestorQuota() + ancestorQuota);
@@ -1610,7 +1555,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         integralService.updateIntegral(cn.newfeifan.mall.framework.common.util.object.BeanUtils.toBean(integralDOAncestor, IntegralSaveReqVO.class));
 
         // 增加平台额度
-        pt.setCurrentQuota(pt.getCurrentQuota() + ptA + ptB);
+        pt.setRedCurrentQuota(pt.getRedCurrentQuota() + ptA + ptB);
 
         integralService.updateIntegral(cn.newfeifan.mall.framework.common.util.object.BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
         integralService.updateIntegral(cn.newfeifan.mall.framework.common.util.object.BeanUtils.toBean(pt, IntegralSaveReqVO.class));
@@ -1620,11 +1565,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     private void sentWcChatMessage(TradeOrderDO order) {
         List<String> params = new ArrayList<>();
         DecimalFormat df = new DecimalFormat("0.00");
-        String formattedPrice = df.format((double) order.getPayPrice() / 100);
+        String formattedPrice = df.format((double) order.getPayIntegral() / 100);
 
         params.add("¥ " + formattedPrice);
         params.add(order.getNo());
-        params.add(memberUserService.getUser(order.getUserId()).getNickname());
+        params.add(memberUserService.getUser(order.getUserId()).getUsername());
 
         List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectListByOrderId(order.getId());
         List<String> productNames = tradeOrderItemDOS.stream().map(TradeOrderItemDO::getSpuName).collect(Collectors.toList());