Просмотр исходного кода

fix(user): 优化会员折扣计算逻辑和订单实体注释

- 重构ConfirmOrderListener中的会员折扣计算代码,添加详细计算说明注释
- 调整会员折扣相关的积分使用和折扣范围逻辑
- 优化会员等级折扣计算方法,支持多类别和折扣范围限制
- 更新ConfirmOrderOrder中确认订单事件顺序常量注释为中文说明
- 修正Order实体类中的字段注释,完善订单相关字段的中文描述
- 统一代码版权信息为“广州亚米信息科技有限公司”及相关声明
Sheep 1 день назад
Родитель
Сommit
b4f647c278

+ 41 - 41
yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java

@@ -1,11 +1,11 @@
 /*
- * Copyright (c) 2018-2999 楠炲灝绐炴禍姘辫儗娣団剝浼呯粔鎴炲Η閺堝妾洪崗顒€寰?All rights reserved.
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
  *
  * https://www.gz-yami.com/
  *
- * 閺堫亞绮¢崗浣筋啅閿涘奔绗夐崣顖氫粵閸熷棔绗熼悽銊┾偓鏃撶磼
+ * 未经允许,不可做商业用途!
  *
- * 閻楀牊娼堥幍鈧張澶涚礉娓氬灚娼堣箛鍛敀閿?
+ * 版权所有,侵权必究!
  */
 
 package com.yami.shop.api.controller;
@@ -75,17 +75,17 @@ public class OrderController {
     private SysConfigService sysConfigService;
 
     /**
-     * 瀵湱鐛ュ鈧崗鎶藉帳缂冪敿ey
+     * 弹窗开关配置key
      */
     private static final String POPUP_SWITCH = "POPUP_SWITCH";
 
     /**
-     * 閻㈢喐鍨氱拋銏犲礋
+     * 生成订单
      */
     @PostMapping("/confirm")
     @ApiOperation(value = "Confirm order", notes = "Build order confirmation data from cart items or direct-buy items")
     public ResponseEntity<ShopCartOrderMergerDto> confirm(@Valid @RequestBody OrderParam orderParam) {
-        // 濡偓閺屻儱鑴婄粣妤€绱戦崗绛圭礉婵″倹鐏夊鈧崥顖氬灟閺嗗倸浠犳稉瀣礋
+        // 检查弹窗开关,如果开启则暂停下单
         String popupSwitch = sysConfigService.getValue(POPUP_SWITCH);
         if ("true".equalsIgnoreCase(popupSwitch)) {
             throw new GlobalException("Ordering is temporarily unavailable");
@@ -123,7 +123,7 @@ public class OrderController {
         UserAddr userAddr = userAddrService.getUserAddrByUserId(orderParam.getAddrId(), userId);
         validateGuizhouAddress(userAddr);
         UserAddrDto userAddrDto = mapperFacade.map(userAddr, UserAddrDto.class);
-        // 缂佸嫯顥婇懢宄板絿閻劍鍩涢幓鎰唉閻ㄥ嫯鍠橀悧鈺勬簠閸熷棗鎼фい?
+        // 组装获取用户提交的购物车商品项
         OrderItemParam orderItem = orderParam.getOrderItem();
         if (null != orderItem) {
             orderItem.setChannelId(orderParam.getChannelId());
@@ -136,22 +136,22 @@ public class OrderController {
         if (CollectionUtil.isEmpty(shopCartItems)) {
             throw new GlobalException("No valid cart items were found");
         }
-        // 閺嶈宓佹惔妤呮懙缂佸嫯顥婄拹顓℃簠娑擃厾娈戦崯鍡楁惂娣団剝浼呴敍宀冪箲閸ョ偞鐦℃稉顏勭暗闁捐桨鑵戦惃鍕枠閻椻晞婧呴崯鍡楁惂娣団剝浼?
+        // 获取购物车列表
         List<ShopCartDto> shopCarts = basketService.getShopCarts(shopCartItems, 0L);
 
         Long point = pointsRecordMapper.statisticsPoint(userId, orderParam.getChannelId());
         double v = 0.0;
-        // 鐏忓棜顩︽潻鏂挎礀缂佹瑥澧犵粩顖滄畱鐎瑰本鏆i惃鍕吂閸楁洑淇婇幁?
+        // 将要返回给前端的完整的订单信息
         ShopCartOrderMergerDto shopCartOrderMergerDto = new ShopCartOrderMergerDto();
         shopCartOrderMergerDto.setUserAddr(userAddrDto);
         shopCartOrderMergerDto.setIsScorePay(orderParam.getIsScorePay());
         if (null != point) {
             v = ((double) point / 100);
-            //閹崵娈戦崣顖滄暏缁夘垰鍨?
+            // 总的可用积分
 //        shopCartOrderMergerDto.setTotalAvailableScore(point);
         }
 
-        // 閹碘偓閺堝绨甸柧铏规畱鐠併垹宕熸穱鈩冧紖
+        // 所有店铺的订单信息
         List<ShopCartOrderDto> shopCartOrders = new ArrayList<>();
 
         double actualTotal = 0.0;
@@ -161,18 +161,18 @@ public class OrderController {
         double totalTransfee = 0.0;
         double weight = 0.0;
 
-        // 閹碘偓閺堝绨甸柧鐑樺閺堝娈戦崯鍡楁惂item
+        // 所有店铺所有的商品item
         List<ShopCartItemDto> allCartItem = new ArrayList<>();
 
 //        List<CouponOrderDto> coupons = new ArrayList<>();
         for (ShopCartDto shopCart : shopCarts) {
-            // 濮e繋閲滄惔妤呮懙閻ㄥ嫯顓归崡鏇氫繆閹?
+            // 每个店铺的订单信息
             ShopCartOrderDto shopCartOrder = new ShopCartOrderDto();
             shopCartOrder.setShopId(shopCart.getShopId());
             shopCartOrder.setShopName(shopCart.getShopName());
 
             List<ShopCartItemDiscountDto> shopCartItemDiscounts = shopCart.getShopCartItemDiscounts();
-            // 鎼存鎽垫稉顓犳畱閹碘偓閺堝鏅㈤崫渚€銆嶆穱鈩冧紖
+            // 获取店铺下所有的商品项
             List<ShopCartItemDto> shopAllShopCartItems = new ArrayList<>();
             for (ShopCartItemDiscountDto shopCartItemDiscount : shopCartItemDiscounts) {
                 List<ShopCartItemDto> discountShopCartItems = shopCartItemDiscount.getShopCartItems();
@@ -192,7 +192,7 @@ public class OrderController {
         }
         shopCartOrderMergerDto.setDvyType(orderParam.getDvyType());
 
-        //閺嶈宓佹禒閿嬬壐鏉╂稖顢戞惔妤呮懙閵嗕焦寮ч崙蹇嬧偓浣告櫌閸濅線銆嶉惃鍕幆閺嶇厧宕屾惔蹇旀惙娴?
+        // 根据价格进行店铺、满减、商品项的价格升序操作
         for (int n = 0; n < shopCartOrders.size(); n++) {
             shopCartOrders = shopCartOrders.stream().sorted(Comparator.comparing(ShopCartOrderDto::getActualTotal)).collect(Collectors.toList());
             ShopCartOrderDto shopCartOrderDto = shopCartOrders.get(n);
@@ -205,7 +205,7 @@ public class OrderController {
                 double totalAmount = shopCartItemDiscount.getShopCartItems().stream().mapToDouble(ProductItemDto::getActualTotal).sum();
                 shopCartItemDiscount.setTotalAmount(totalAmount);
             }
-            // 婵″倹鐏夐弰顖涘閹碉絿澹掗崚顐㈢毈閻ㄥ嫭鍎忛崘鍏哥瑓閿涘苯顕遍懛鏉戠杽闂勫懘鍣炬0婵呰礋0閺勵垽绱濋弨鐟板綁閺堚偓鐏忓繑鏁禒姗€鍣炬0婵呰礋0.01閸?楠炴湹绗栨导妯诲劕闁叉垿顤傞崙蹇撳箵0.01閵?
+            // 如果优惠后金额小于等于0,则设为0.01
             if (shopCartOrderDto.getActualTotal() <= 0) {
                 shopCartOrderDto.setActualTotal(0.01);
                 shopCartOrderDto.setShopReduce(Arith.sub(shopCartOrderDto.getShopReduce(), 0.01));
@@ -220,10 +220,10 @@ public class OrderController {
         }
         //v
         shopCartOrderMergerDto.setActualTotal(Arith.sub(actualTotal, v) < 0 ? 0 : Arith.sub(actualTotal, v));
-        shopCartOrderMergerDto.setTotalUsableScore(Arith.sub(actualTotal, v) < 0 ? actualTotal : v);//閹鍙″☉鍫b偓妤冩畱缁夘垰鍨?
+        shopCartOrderMergerDto.setTotalUsableScore(Arith.sub(actualTotal, v) < 0 ? actualTotal : v);//总共消耗的积分
 //        shopCartOrderMergerDto.setTotalAvailableScore(point);
 
-        shopCartOrderMergerDto.setTotalAvailableScore((long) Arith.mul(shopCartOrderMergerDto.getTotalUsableScore(), 100));//閹鍙″☉鍫b偓妤冩畱缁夘垰鍨?
+        shopCartOrderMergerDto.setTotalAvailableScore((long) Arith.mul(shopCartOrderMergerDto.getTotalUsableScore(), 100));//总共消耗的积分
         shopCartOrderMergerDto.setTotal(total);
         shopCartOrderMergerDto.setTotalCount(totalCount);
         shopCartOrderMergerDto.setOrderReduce(allOrderReduce);
@@ -234,19 +234,19 @@ public class OrderController {
 
         applicationContext.publishEvent(new PlatformConfirmOrderEvent(shopCartOrderMergerDto, orderParam, allCartItem));
 
-        // ============  闁俺绻冪拋銏犲礋妞ゅ湱娈戦柌鎴︻杺閿涘矁顓哥粻妤€鍤拋銏犲礋閹鍣炬0? ==============
+        // 订单金额计算说明
 
-        //閹碘偓閺堝顓归崡鏇炵杽闂勫懘鍣炬0?
+        // 重新计算订单金额
         actualTotal = 0.00;
-        //閹碘偓閺堝顓归崡鏇氱喘閹娀鍣炬0?
+        // 重新计算优惠金额
         allOrderReduce = 0.00;
         totalTransfee = 0.00;
         for (ShopCartOrderDto shopCartOrder : shopCartOrders) {
-            //鐠併垹宕熺€圭偤妾柌鎴︻杺
+            // 店铺实际支付金额
             double orderActualTotal = 0.00;
-            //閸熷棗顔嶆导妯诲劕闁叉垿顤?
+            // 店铺优惠金额
             double orderReduceAmount = 0.00;
-            //閸熷棗顔嶆导妯诲劕闁叉垿顤?
+            // 平台优惠金额
             double orderPlatformAmount = 0.00;
 
             for (ShopCartItemDiscountDto shopCartItemDiscount : shopCartOrder.getShopCartItemDiscounts()) {
@@ -261,9 +261,9 @@ public class OrderController {
             }
             shopCartOrder.setActualTotal(Arith.add(orderActualTotal, shopCartOrder.getTransfee()));
 //            shopCartOrder.setActualTotal(100.0);
-            //閺€鎯у弳娴兼ɑ鍎柌鎴︻杺
+            // 设置店铺优惠金额
             shopCartOrder.setShopReduce(Arith.add(orderReduceAmount, shopCartOrder.getFreeTransfee()));
-            //閺€鎯у弳楠炲啿褰存导妯诲劕闁叉垿顤?婵″倹鐏夐悽銊﹀煕缁涘楠囬崗宥堝殰閽€銉ョ暗鏉╂劘鍨傛稊鐔活洣閺€鎹愮箻閸?
+            // 设置平台优惠金额
             shopCartOrder.setPlatformAmount(Arith.add(orderPlatformAmount, shopCartOrder.getFreeTransfee()));
 
             actualTotal = Arith.add(actualTotal, shopCartOrder.getActualTotal());
@@ -271,7 +271,7 @@ public class OrderController {
             totalTransfee = Arith.add(totalTransfee, shopCartOrder.getTransfee());
         }
         shopCartOrderMergerDto.setActualTotal(Arith.sub(actualTotal, v) < 0 ? 0 : Arith.sub(actualTotal, v));
-        shopCartOrderMergerDto.setTotalUsableScore(Arith.sub(actualTotal, v) < 0 ? actualTotal : v);//閹鍙″☉鍫b偓妤冩畱缁夘垰鍨?
+        shopCartOrderMergerDto.setTotalUsableScore(Arith.sub(actualTotal, v) < 0 ? actualTotal : v);//总共消耗的积分
         shopCartOrderMergerDto.setTotalAvailableScore((long) Arith.mul(shopCartOrderMergerDto.getTotalUsableScore(), 100));
         shopCartOrderMergerDto.setTotalTransfee(totalTransfee);
         shopCartOrderMergerDto.setOrderReduce(allOrderReduce);
@@ -284,24 +284,24 @@ public class OrderController {
     }
 
     /**
-     * 鐠愵厾澧挎潪?缁斿宓嗙拹顓濇嫳  閹绘劒姘︾拋銏犲礋,閺嶈宓佹惔妤呮懙閹峰棗宕?
+     * 提交订单
      */
     @PostMapping("/submit")
     @ApiOperation(value = "Submit order", notes = "Submit the confirmed order and create order numbers")
     public ResponseEntity<OrderNumbersDto> submitOrders(@Valid @RequestBody SubmitOrderParam submitOrderParam) {
-        //閹碉絽鍣虹粔顖氬瀻,閸忓牐骞忛崣鏍х秼閸撳秶鏁ら幋椋庢畱閹碘偓娴犮儳袧閸掑棴绱濈拋锛勭暬閹碉綁娅庢稊瀣倵閺勵垰鎯佹潻姗€娓剁憰浣镐簳娣団剝鏁禒?
+        // 获取当前用户
         String userId = SecurityUtils.getUser().getUserId();
         ShopCartOrderMergerDto mergerOrder = orderService.getConfirmOrderCache(userId + submitOrderParam.getUuid());
 
         if (mergerOrder == null) {
             throw new GlobalException("Order confirmation has expired, please confirm again");
         }
-        // 閺嶏繝鐛欓崯鍡楁惂閺勵垰鎯侀崚鐘绘珟
+        // 校验订单是否过期
 
 
         List<OrderShopParam> orderShopParams = submitOrderParam.getOrderShopParam();
         List<ShopCartOrderDto> shopCartOrders = mergerOrder.getShopCartOrders();
-        // 鐠佸墽鐤嗘径鍥ㄦ暈
+        // 设置用户备注
         if (CollectionUtil.isNotEmpty(orderShopParams)) {
             for (ShopCartOrderDto shopCartOrder : shopCartOrders) {
                 for (OrderShopParam orderShopParam : orderShopParams) {
@@ -321,7 +321,7 @@ public class OrderController {
         orderNumbers.deleteCharAt(orderNumbers.length() - 1);
 
         boolean isShopCartOrder = false;
-        // 缁夊娅庣紓鎾崇摠
+        // 删除购物车缓存
         for (ShopCartOrderDto shopCartOrder : shopCartOrders) {
             for (ShopCartItemDiscountDto shopCartItemDiscount : shopCartOrder.getShopCartItemDiscounts()) {
                 for (ShopCartItemDto shopCartItem : shopCartItemDiscount.getShopCartItems()) {
@@ -334,16 +334,16 @@ public class OrderController {
                 }
             }
         }
-        // 鐠愵厾澧挎潪锔藉絹娴溿倛顓归崡鏇熸(閸楄櫕婀佺拹顓犲⒖鏉烆毌D閺?
+        // 清除订单确认缓存
         if (isShopCartOrder) {
             basketService.removeShopCartItemsCacheByUserId(userId);
         }
         orderService.removeConfirmOrderCache(userId + submitOrderParam.getUuid());
         for (Order order : orders) {
             if (!order.getNextPay()) {
-                //娑撳秵濯堕崡鏇炴嫲瀹稿弶濯堕崡鏇熷腹閸掔増鎹i崡?
+                // 创建会员订单
 //                if (order.getSplitStatus() == 1 || order.getOrderLevel() == 1) {
-                    //閹恒劑鈧焦鎹i崡姘愁吂閸?
+                    // 异步创建会员订单
                     hbOrderService.createOrderAsync(order.getOrderNumber());
 //                }
             }
@@ -357,24 +357,24 @@ public class OrderController {
     @ApiImplicitParam(name = "orderNumbers", value = "Comma-separated order numbers", required = true, dataType = "String")
     public ResponseEntity<OrderPayInfoParam> getOrderPayInfoByOrderNumber(@RequestParam("orderNumbers") String orderNumbers) {
         List<String> orderNumberList = Arrays.asList(orderNumbers.split(","));
-        //閼惧嘲褰囩拋銏犲礋娣団剝浼?
+        // 根据订单号获取订单支付信息
         List<Order> orderList = orderService.getOrderPayInfoByOrderNumber(orderNumberList);
         List<String> prodNameList = Lists.newArrayList();
         Long addrOrderId = null;
         Date endTime = null;
         int totalScore = 0;
         double totalFee = 0.0;
-        //閼惧嘲褰囬崯鍡楁惂閸氬秹娉﹂崥?
+        // 计算订单总积分和总金额
         for (Order order : orderList) {
             for (OrderItem orderItem : order.getOrderItems()) {
                 prodNameList.add(orderItem.getProdName());
                 totalScore += orderItem.getUseScore() != null ? orderItem.getUseScore() : 0;
             }
-            //缁楊兛绔村▎鈥虫儕閻滎垽绱濋懢宄板絿鐠併垹宕熼崷鏉挎絻id閿涘矁顓归崡鏇$箖閺堢喐妞傞梻?
+            // 获取收货地址
             if (Objects.isNull(addrOrderId)) {
                 addrOrderId = order.getAddrOrderId();
                 if (Objects.equals(2, order.getOrderType())) {
-                    // 閼惧嘲褰囩粔鎺撴絻鐠併垹宕熼惃鍕絿濞戝牐顓归崡鏇熸闂?
+                    // 秒杀订单取消时间
                     Integer maxCancelTime = 0;
                     SubmitSeckillOrderEvent event = new SubmitSeckillOrderEvent(order, maxCancelTime);
                     applicationContext.publishEvent(event);
@@ -389,7 +389,7 @@ public class OrderController {
             }
             totalFee = Arith.add(totalFee, order.getActualTotal());
         }
-        //閸愭瑥鍙嗛崯鍡楁惂閸氬秲鈧焦鏁圭拹褍婀撮崸鈧?閻絻鐦?
+        // 获取收货地址详情
         UserAddrOrder userAddrOrder = userAddrOrderService.getById(addrOrderId);
         String addr = userAddrOrder.getProvince() + userAddrOrder.getCity() + userAddrOrder.getArea() + userAddrOrder.getAddr();
         OrderPayInfoParam orderPayInfoParam = new OrderPayInfoParam();
@@ -456,7 +456,7 @@ public class OrderController {
     }
 
     private boolean containsGuizhou(String text) {
-        return text != null && text.contains("??");
+        return text != null && text.contains("贵州");
     }
 
     private String safeString(String text) {

+ 65 - 65
yami-shop-api/src/main/java/com/yami/shop/api/listener/SubmitOrderListener.java

@@ -1,11 +1,11 @@
 /*
- * Copyright (c) 2018-2999 骞垮窞浜氱背淇℃伅绉戞妧鏈夐檺鍏徃 All rights reserved.
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
  *
  * https://www.gz-yami.com/
  *
- * 鏈粡鍏佽锛屼笉鍙仛鍟嗕笟鐢ㄩ€旓紒
+ * 未经允许,不可做商业用途!
  *
- * 鐗堟潈鎵€鏈夛紝渚垫潈蹇呯┒锛?
+ * 版权所有,侵权必究!
  */
 
 package com.yami.shop.api.listener;
@@ -45,7 +45,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 /**
- * 纭璁㈠崟淇℃伅鏃剁殑榛樿鎿嶄綔
+ * 订单提交监听器
  *
  * @author LGH
  */
@@ -72,7 +72,7 @@ public class SubmitOrderListener {
     private final BasketMapper basketMapper;
 
     /**
-     * 璁$畻璁㈠崟閲戦
+     * 默认订单提交监听器
      */
     @EventListener(SubmitOrderEvent.class)
     @Order(SubmitOrderOrder.DEFAULT)
@@ -83,24 +83,24 @@ public class SubmitOrderListener {
 
         ShopCartOrderMergerDto mergerOrder = event.getMergerOrder();
 
-        // 璁㈠崟鍟嗗搧鍙傛暟
+        // 获取所有店铺的订单
         List<ShopCartOrderDto> shopCartOrders = mergerOrder.getShopCartOrders();
 
         List<Long> basketIds = new ArrayList<>();
-        // 鍟嗗搧skuid涓簁ey 闇€瑕佹洿鏂扮殑sku涓簐alue鐨刴ap
+        // 库存检查Map
         Map<Long, Sku> skuStocksMap = new HashMap<>(16);
-        // 鍟嗗搧productid涓簁ey 闇€瑕佹洿鏂扮殑product涓簐alue鐨刴ap
+        // 商品库存检查Map
         Map<Long, Product> prodStocksMap = new HashMap<>(16);
 
-        // 鎶婅鍗曞湴鍧€淇濆瓨鍒版暟鎹簱
+        // 保存收货地址
         UserAddrOrder userAddrOrder = mapperFacade.map(mergerOrder.getUserAddr(), UserAddrOrder.class);
         if (userAddrOrder == null) {
-            throw new GlobalException("璇峰~鍐欐敹璐у湴鍧€");
+            throw new GlobalException("请填写收货地址");
         }
         userAddrOrder.setUserId(userId);
         userAddrOrder.setCreateTime(now);
         userAddrOrderService.save(userAddrOrder);
-        //鎵€鏈夊綋鍓嶇敤鎴峰彲鐢ㄧ殑绉垎璁板綍
+        // 查询用户可用积分记录
         List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
                         .eq(PointsRecord::getUserId, userId)
                         .eq(PointsRecord::getChannelId, mergerOrder.getChannelId())
@@ -116,32 +116,32 @@ public class SubmitOrderListener {
                         .thenComparing(PointsRecord::getId))
                 .collect(Collectors.toList());
         ;
-        // 灏嗚褰曟坊鍔犲埌闃熷垪涓?
+        // 积分记录队列
         ArrayDeque<PointsRecord> expiryQueue = new ArrayDeque<>(pointsRecords);
-        // 璁㈠崟鍦板潃id
+        // 收货地址ID
         Long addrOrderId = userAddrOrder.getAddrOrderId();
 
         if (CollectionUtils.isNotEmpty(shopCartOrders)) {
-            // 姣忎釜搴楅摵鐢熸垚涓€涓鍗?
+            // 遍历每个店铺订单
             for (ShopCartOrderDto shopCartOrderDto : shopCartOrders) {
-                //鍏戞崲浜烘皯甯佹槸鍒?蹇呴』瑕佸疄鏃剁粺璁¤绠?
+                // 获取用户可用积分
                 Long point = pointsRecordMapper.statisticsPoint(userId, mergerOrder.getChannelId());
-                // 浣跨敤闆姳绠楁硶鐢熸垚鐨勮鍗曞彿
+                // 生成订单号
                 String orderNumber = "FD" + snowflake.nextId();
                 shopCartOrderDto.setOrderNumber(orderNumber);
 
                 Long shopId = shopCartOrderDto.getShopId();
-                // 璁㈠崟淇℃伅
+                // 创建订单对象
                 com.yami.shop.bean.model.Order order = new com.yami.shop.bean.model.Order();
                 order.setIsPayed(0);
                 order.setHbOrderStatus(OrderStatus.UNPAY.value());
                 order.setOrderType(OrderType.ORDINARY.value());
-                //杩欎釜杩愯垂鏄凡缁忕畻杩囩殑浜?
+                // 获取订单实际金额
                 double actualTotal = shopCartOrderDto.getActualTotal();
-                //浼佷笟鐢ㄦ埛鎵嶈繘杩欎釜鍒ゆ柇,骞朵笖璇ョ敤鎴风殑绉垎蹇呴』澶т簬0
+                // 判断是否使用积分支付
                 if (null != point && point > 0) {
                     order.setOrderType(OrderType.SCORE.value());
-                    // 璁$畻鍟嗗搧閲戦鍜岀Н鍒?
+                    // 计算积分抵扣金额
                     Double mul = Arith.mul(actualTotal, 100);
                     Double vp = Double.valueOf(point);
                     if (vp >= mul) {
@@ -149,14 +149,14 @@ public class SubmitOrderListener {
                         order.setIsPayed(1);
                         order.setPayTime(new Date());
                         order.setHbOrderStatus(OrderStatus.CONSIGNMENT.value());
-                        //绉垎瀹屽叏瓒冲鏀粯
+                        // 设置抵扣积分数
                         order.setOffsetPoints(Long.valueOf(String.valueOf(mul).split("\\.")[0]));
-                        actualTotal = 0.0;//鍓╀笅闇€瑕佷粯鐨勯挶
+                        actualTotal = 0.0;//剩余需要付的钱
                     } else {
-                        //绉垎涓嶅鎶垫墸
+                        // 积分不足,计算剩余需支付金额
                         double sub = Arith.sub(mul, vp);
                         order.setOffsetPoints(point);
-                        //鍓╀笅闇€瑕佷粯鐨勯挶
+                        // 设置剩余需支付金额
                         actualTotal = sub / 100;
                         mergerOrder.setNextPay(Boolean.TRUE);
                     }
@@ -165,7 +165,7 @@ public class SubmitOrderListener {
                 }
                 double sumItemA = 0.0;
                 boolean hasXsbMemberDiscount = false;
-                // 璁㈠崟鍟嗗搧鍚嶇О
+                // 拼接商品名称
                 StringBuilder orderProdName = new StringBuilder(100);
                 List<OrderItem> orderItems = new ArrayList<>();
                 List<ShopCartItemDiscountDto> shopCartItemDiscounts = shopCartOrderDto.getShopCartItemDiscounts();
@@ -190,7 +190,7 @@ public class SubmitOrderListener {
                         orderItem.setRecTime(now);
                         orderItem.setCommSts(0);
                         orderItem.setBasketDate(shopCartItem.getBasketDate());
-                        //骞冲彴鐨勮ˉ璐翠紭鎯犻噾棰?
+                        // 设置平台分摊优惠
                         orderItem.setPlatformShareReduce(shopCartItem.getPlatformShareReduce());
                         if (XSB.equalsIgnoreCase(shopCartItem.getBusinessType())) {
                             Double memberDiscountShareAmount = shopCartItem.getMemberDiscountShareAmount();
@@ -200,33 +200,33 @@ public class SubmitOrderListener {
                             orderItem.setMemberDiscountShareAmount(0.0);
                         }
                         Double actualItem = shopCartItem.getActualTotal();
-                        //鍚庡彴鍏呭€肩殑绉垎
+                        // 计算积分抵扣后的实际金额
                         if (null != point && point > 0) {
                             Double useActualItem = actualItem;
-                            if (!isUseTransfee) {//姣忎釜璁㈠崟澧炲姞杩愯垂锛岄兘鍙墸涓€娆?
+                            if (!isUseTransfee) {//每个订单增加运费,都只扣丢?
                                 Double transfee = shopCartOrderDto.getTransfee();
                                 useActualItem = Arith.add(useActualItem, transfee);
                                 isUseTransfee = Boolean.TRUE;
                             }
-                            //鎶婇挶鎹㈢畻鎴愮Н鍒?
+                            // 使用积分抵扣
                             actualItem = this.doGetOrderItemPoints(Arith.mul(useActualItem, 100), expiryQueue, orderNumber, userId, mergerOrder.getChannelId());
-                            //鎶婄Н鍒嗘崲绠楁垚閽?
+                            // 判断是否需要继续支付
                             if (actualItem > 0) {
                                 actualItem = Arith.div(actualItem, 100);
                             }
                         }
-                        //鐢ㄤ簬鍒ゅ畾鏄惁闇€瑕佸井淇℃敮浠?
+                        // 累计订单商品实际金额
                         sumItemA = Arith.add(sumItemA, actualItem);
-                        // 瀹為檯璁㈠崟椤规敮浠橀噾棰?
-                        // 鏍规嵁platform鏉ヨ绠楁槸鍚︿紭鍏堟墸鍑忕Н鍒嗘姷鎵?
+                        // 设置订单商品项
+                        
                         orderItem.setActualTotal(actualItem);
-                        // 鍒嗘憡浼樻儬閲戦
+                        // 设置商品项实际金额
                         orderItem.setShareReduce(shopCartItem.getShareReduce());
                         orderProdName.append(orderItem.getProdName()).append(",");
-                        //鎺ㄥ箍鍛樺崱鍙?
+                        // 设置分销卡号
                         orderItem.setDistributionCardNo(shopCartItem.getDistributionCardNo());
                         orderItem.setWeight( shopCartItem.getWeight());
-                        //浣跨敤绉垎浠锋牸
+                        // 设置使用积分数
                         orderItem.setUseScore((int) Arith.mul(Arith.sub(shopCartItem.getActualTotal(), actualItem), 100));
                         orderItems.add(orderItem);
 
@@ -244,15 +244,15 @@ public class SubmitOrderListener {
 
                 order.setShopId(shopId);
                 order.setOrderNumber(orderNumber);
-                // 璁㈠崟鍟嗗搧鍚嶇О
+                // 设置商品名称
                 order.setProdName(orderProdName.toString());
-                // 鐢ㄦ埛id
+                // 设置用户ID
                 order.setUserId(userId);
-                // 鍟嗗搧鎬婚
+                // 设置订单总金额
                 order.setTotal(shopCartOrderDto.getTotal());
-                // 瀹為檯鎬婚
+                // 设置订单实际金额
                 order.setActualTotal(actualTotal);
-                order.setNextPay(sumItemA > 0);//true鏄渶瑕佸井淇℃敮浠?
+                order.setNextPay(sumItemA > 0);//true是需要微信支?
                 order.setChannelId(Long.valueOf(mergerOrder.getChannelId()));
                 order.setUpdateTime(now);
                 order.setCreateTime(now);
@@ -276,7 +276,7 @@ public class SubmitOrderListener {
                 order.setScore(shopCartOrderDto.getUseScore());
                 order.setDvyType(mergerOrder.getDvyType());
                 event.getOrders().add(order);
-                // 鎻掑叆璁㈠崟缁撶畻琛?
+                // 创建订单结算记录
                 OrderSettlement orderSettlement = new OrderSettlement();
                 orderSettlement.setUserId(userId);
                 orderSettlement.setIsClearing(0);
@@ -286,7 +286,7 @@ public class SubmitOrderListener {
                 orderSettlement.setPayStatus(0);
                 orderSettlement.setVersion(0);
                 orderSettlement.setPayScore(0);
-                //濡傛灉鐢ㄤ娇鐢ㄧН鍒嗭紝缁撶畻琛ㄥ皢绉垎浠锋牸鎻掑叆
+                // 判断是否积分支付
                 if (mergerOrder.getIsScorePay() != null && mergerOrder.getIsScorePay() == 1) {
                     orderSettlement.setPayScore(shopCartOrderDto.getUseScore());
                 }
@@ -294,7 +294,7 @@ public class SubmitOrderListener {
             }
         }
 
-        // 鍒犻櫎璐墿杞︾殑鍟嗗搧淇℃伅
+        // 删除购物车商品
         if (!basketIds.isEmpty()) {
             basketMapper.deleteShopCartItemsByBasketIds(userId, basketIds);
         }
@@ -304,14 +304,14 @@ public class SubmitOrderListener {
     private Product checkAndGetProd(Long prodId, ShopCartItemDto shopCartItem, Map<Long, Product> prodStocksMap,Long shopId) {
         Product product = productService.getProductByProdIdAndShopId(prodId, shopId);
         if (product == null) {
-            throw new GlobalException("璐墿杞﹀寘鍚棤娉曡瘑鍒殑鍟嗗搧");
+            throw new GlobalException("购物车包含无法识别的商品");
         }
 
         if (product.getStatus() != 1) {
             throw new GlobalException("Product[" + product.getProdName() + "] is unavailable");
         }
 
-        // 鍟嗗搧闇€瑕佹敼鍙樼殑搴撳瓨
+        // 检查商品库存
         Product mapProduct = prodStocksMap.get(prodId);
 
         if (mapProduct == null) {
@@ -327,9 +327,9 @@ public class SubmitOrderListener {
             prodStocksMap.put(product.getProdId(), mapProduct);
         }
 
-        // -1涓烘棤闄愬簱瀛?
+        // 检查库存是否足够
         if (product.getTotalStocks() != -1 && mapProduct.getTotalStocks() > product.getTotalStocks()) {
-            throw new GlobalException("鍟嗗搧锛歔" + product.getProdName() + "]搴撳瓨涓嶈冻5");
+            throw new GlobalException("商品:[" + product.getProdName() + "]库存不足");
         }
 
         return product;
@@ -337,24 +337,24 @@ public class SubmitOrderListener {
 
     @SuppressWarnings({"Duplicates"})
     private Sku checkAndGetSku(Long skuId, ShopCartItemDto shopCartItem, Map<Long, Sku> skuStocksMap) {
-        // 鑾峰彇sku淇℃伅
+        // 获取SKU信息
         Sku sku = skuService.getSkuBySkuId(skuId);
         if (sku == null) {
-            throw new GlobalException("璐墿杞﹀寘鍚棤娉曡瘑鍒殑鍟嗗搧");
+            throw new GlobalException("购物车包含无法识别的商品");
         }
 
         if (sku.getStatus() != 1) {
             throw new GlobalException("Product[" + sku.getProdName() + "] is unavailable");
         }
-        // -1涓烘棤闄愬簱瀛?
+        // 检查SKU库存
         if (sku.getActualStocks() != -1 && shopCartItem.getProdCount() > sku.getActualStocks()) {
-            throw new GlobalException("鍟嗗搧锛歔" + sku.getProdName() + "]搴撳瓨涓嶈冻6");
+            throw new GlobalException("商品:[" + sku.getProdName() + "]库存不足");
         }
 
         if (sku.getActualStocks() != -1) {
             Sku mapSku = new Sku();
             mapSku.setProdId(sku.getProdId());
-            // 杩欓噷鐨勫簱瀛樻槸鏀瑰彉鐨勫簱瀛?
+            // 设置SKU库存
             mapSku.setStocks(shopCartItem.getProdCount());
             mapSku.setSkuId(sku.getSkuId());
             mapSku.setProdName(sku.getProdName());
@@ -365,24 +365,24 @@ public class SubmitOrderListener {
 
     @SuppressWarnings({"Duplicates"})
     private Sku checkAndGetSku(Long skuId, Long channelId, ShopCartItemDto shopCartItem, Map<Long, Sku> skuStocksMap) {
-        // 鑾峰彇sku淇℃伅
+        // 获取SKU信息(带渠道)
         Sku sku = skuService.getSkuBySkuId(skuId, channelId, shopCartItem.getShopId());
         if (sku == null) {
-            throw new GlobalException("璐墿杞﹀寘鍚棤娉曡瘑鍒殑鍟嗗搧");
+            throw new GlobalException("购物车包含无法识别的商品");
         }
 
         if (sku.getStatus() != 1) {
             throw new GlobalException("Product[" + sku.getProdName() + "] is unavailable");
         }
-        // -1涓烘棤闄愬簱瀛?
+        // 检查SKU库存(带渠道)
         if (sku.getActualStocks() != -1 && shopCartItem.getProdCount() > sku.getActualStocks()) {
-            throw new GlobalException("鍟嗗搧锛歔" + sku.getProdName() + "]搴撳瓨涓嶈冻7");
+            throw new GlobalException("商品:[" + sku.getProdName() + "]库存不足");
         }
 
         if (sku.getActualStocks() != -1) {
             Sku mapSku = new Sku();
             mapSku.setProdId(sku.getProdId());
-            // 杩欓噷鐨勫簱瀛樻槸鏀瑰彉鐨勫簱瀛?
+            // 设置SKU库存(带渠道)
             mapSku.setStocks(shopCartItem.getProdCount());
             mapSku.setSkuId(sku.getSkuId());
             mapSku.setProdName(sku.getProdName());
@@ -397,15 +397,15 @@ public class SubmitOrderListener {
         PointsRecord pr = new PointsRecord();
         if (pointsRecord != null) {
             Long point = pointsRecordMapper.statisticsPoint(userId, channelId);
-            //鍒ゅ畾鍙敤閲戦
+            // 获取可用积分
             BigDecimal points = pointsRecord.getPoints() != null ? pointsRecord.getPoints() : BigDecimal.ZERO;
             BigDecimal variablePoints = pointsRecord.getVariablePoints() != null ? pointsRecord.getVariablePoints() : BigDecimal.ZERO;
-            //鍏呭€艰褰曚腑鍙敤鐨勮褰?
+            // 计算可用积分余额
             double available = points.subtract(variablePoints).doubleValue();
             BeanUtil.copyProperties(pointsRecord, pr);
             if (available > actualTotal) {
-                //閽卞凡缁忔姷鎵e畬锛屼絾鏄綋鏉$Н鍒嗚繕鏈夊墿浣欙紝鎵€浠ヤ笉瑕侀噸鏂版妸鍓╀綑鐨勬斁鍏ラ槦鍒椼€傞挶灏戠Н鍒嗗
-                //鍓╀綑鐨勭Н鍒?
+                // 积分足够抵扣
+                
                 pointsRecord.setVariablePoints(variablePoints.add(BigDecimal.valueOf(actualTotal)));
                 pr.setVariablePoints(BigDecimal.valueOf(actualTotal));
                 expiryQueue.addFirst(pointsRecord);
@@ -414,13 +414,13 @@ public class SubmitOrderListener {
                 actualTotal = 0.0;
             } else if (actualTotal > available) {
                 actualTotal = Arith.sub(actualTotal, available);
-                //鎶婂綋鍓嶇Н鍒嗗凡鎵e畬,浣嗘槸杩樻湁閽便€傞挶澶氱Н鍒嗗皯
+                // 积分部分抵扣
                 pointsRecord.setVariablePoints(BigDecimal.valueOf(available));
                 pr.setVariablePoints(BigDecimal.valueOf(available));
                 pr.setPointsAudit(3);
                 pointsRecord.setPointsAudit(3);
             } else {
-                //鎭板ソ绛変簬
+                // 积分刚好抵扣
                 pr.setPointsAudit(3);
                 pointsRecord.setPointsAudit(3);
                 pointsRecord.setVariablePoints(variablePoints.add(BigDecimal.valueOf(actualTotal)));
@@ -436,7 +436,7 @@ public class SubmitOrderListener {
                 pr.setCreationDate(new Date());
                 pointsRecordMapper.insert(pr);
             }
-            //  鎻掑叆鏁版嵁搴?
+            // 递归处理剩余金额
             if (actualTotal > 0.0) {
                 actualTotal = this.doGetOrderItemPoints(actualTotal, expiryQueue, orderNumber, userId, channelId);
             }

+ 60 - 60
yami-shop-bean/src/main/java/com/yami/shop/bean/model/Order.java

@@ -1,11 +1,11 @@
 /*
- * Copyright (c) 2018-2999 楠炲灝绐炴禍姘辫儗娣団剝浼呯粔鎴炲Η閺堝愭洪崗顒寰 All rights reserved.
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
  *
  * https://www.gz-yami.com/
  *
- * 閺堫亞绮¢崗浣筋啅閿涘奔绗夐崣顖氫粵閸熷棔绗熼悽銊┾偓鏃撶磼
+ * 未经允许,不可做商业用途!
  *
- * 閻楀牊娼堥幍鈧閺堝涚礉娓氬灚娼堣箛鍛鈹掗敍?
+ * 版权所有,侵权必究!
  */
 
 package com.yami.shop.bean.model;
@@ -26,128 +26,128 @@ import java.util.List;
 public class Order implements Serializable {
     private static final long serialVersionUID = 6222259729062826852L;
     /**
-     * 鐠併垹宕烮D
+     * 订单ID
      */
     @TableId
     private Long orderId;
 
     /**
-     * 鎼存呮懙id
+     * 店铺ID
      */
     private Long shopId;
     @TableField(exist = false)
     private String shopName;
     /**
-     * 濞撶娀浜綢D
+     * 渠道ID
      */
     private Long channelId;
     @TableField(exist = false)
     private String channelName;
 
     /**
-     * 娴溠冩惂閸氬秶袨,婢舵矮閲滄禍褍鎼х亸鍡曠窗娴犮儵鈧妤褰块梾鏂跨磻
+     * 商品名称
      */
     private String prodName;
 
     /**
-     * 鐠併垼鍠橀悽銊﹀煕ID
+     * 用户ID
      */
     private String userId;
     /**
-     * 閻栨儼顓归崡鏇犵椽閸?
+     * 父订单号
      */
     private String parentOrderNumber;
 
     /**
-     * 鐠併垼鍠樺ù浣规寜閸?
+     * 订单编号
      */
     private String orderNumber;
 
     /**
-     * 閹璇测偓?
+     * 订单总金额
      */
     private Double total;
 
     /**
-     * 鐎圭偤妾閹璇测偓?
+     * 订单实际金额
      */
     private Double actualTotal;
 
     /**
-     * 閺顖欑帛閺傜懓绱 1 瀵邦喕淇婇弨顖欑帛 2 閺顖欑帛鐎?
+     * 支付方式
      */
     private Integer payType;
 
     /**
-     * 閻銊﹀煕婢跺洦鏁
+     * 用户备注
      */
     private String remarks;
 
     /**
-     * 閸楁牕顔嶆径鍥ㄦ暈
+     * 商家备注
      */
     private String shopRemarks;
 
 
     /**
-     * 濞村嘲宕ョ拋銏犲礋閻樿埖鈧?
-     * 0-瀵板懏鏁娴?20-鐠併垹宕熷稿弶甯撮崡?瀵板懏瀚炵拹?,30-鐠併垹宕熷板懘鍘ら柅渚婄礄閹凤綀鎻g瑰本鍨/閼奉亝褰佺猾鏄忣吂閸楁洑璐熷板懓鍤滈幓鎰剁礆,40-鐠併垹宕熼柊宥夆偓浣疯厬 ,50-鐠併垹宕熼崣鏍ㄧХ瀵板懎顓搁弽?60-鐠併垹宕熷告彃褰囧☉?70-鐠併垹宕熷告煡鈧浣芥彧,80-鐠併垹宕熷告彃鐣閹?
+     * 订单状态
+     * 订单状态
      */
     private Integer hbOrderStatus;
 
     /**
-     * 濞村嘲宕ラ悧鈺傜ウ閻樿埖鈧?
-     * 20:瀹稿弶濮犻崡鏇绱30:闁板秹鈧浣告喅閸掓澘绨甸敍?0:閸欐牞鎻g瑰本鍨氶敍?0:闁板秹鈧浣稿礋閸欐牗绉,100:瀹告煡鈧浣芥彧
+     * 物流状态
+     * 物流状态
      */
     private Integer hbLogisticStatus;
 
     /**
-     * 闁板秹鈧浣鸿閸ㄥ剁礄1:韫囶偊鈧?2:閼奉亝褰 3閿涙艾寮烽弮鍫曞帳闁?10-閸熷棗顔嶆潪顒冨殰闁渚婄礆
+     * 配送类型
      */
     private Integer dvyType;
 
     /**
-     * 闁板秹鈧浣规煙瀵寤擠
+     * 物流公司ID
      */
     private Long dvyId;
 
     /**
-     * 閻椻晜绁﹂崡鏇炲娇
+     * 物流单号
      */
     private String dvyFlowId;
 
     /**
-     * 鐠併垹宕熸潻鎰鍨
+     * 运费金额
      */
     private Double freightAmount;
 
     /**
-     * 閻銊﹀煕鐠併垹宕熼崷鏉挎絻Id
+     * 收货地址ID
      */
     private Long addrOrderId;
 
     /**
-     * 閺勵垰鎯佹稉楦跨Т闁插秷顓归崡鏇绱0-閺堫亣绉撮柌宥忕礉1-鐡掑懘鍣 閿?
+     * 订单拆单状态
      */
     private Integer orderSplitStatus;
     /**
-     * 鐎涙劘顓归崡鏇熸殶闁插繐鎳¢崥?
+     * 拆单数量
      */
     private Integer orderSplitNumber;
     /**
-     * 閺勵垰鎯侀懛顏勫З閹峰棗宕(0-閹靛濮╅幏鍡楀礋閿?-閼奉亜濮╅幏鍡楀礋)
+     * 是否自动拆单
      */
     private Integer autoSplit;
     /**
-     * 閺勵垰鎯侀棁鈧鐟曚焦濯堕崡鏇绱0-閹峰棗宕熸稉瀛樻傛穱婵嗙摠閿?-娑撳秵濯堕崡鏇绱2-瀵板懏濯堕崡鏇绱3-閹峰棗宕熸稉顓ㄧ礉4-瀹稿弶濯堕崡鏇绱
+     * 拆单状态
      */
     private Integer splitStatus;
     /**
-     * 鐠併垹宕熺粵澶岄獓閿?-閻栨儼顓归崡鏇绱1-鐎涙劘顓归崡鏇绱
+     * 订单层级
      */
     private Integer orderLevel;
     /**
-     * 閹峰棗宕熼幙宥勭稊娴滅瘨D
+     * 拆单用户ID
      */
     private Long splitUserId;
 
@@ -167,99 +167,99 @@ public class Order implements Serializable {
 
 
     /**
-     * 鐠併垹宕熼崯鍡楁惂閹缁樻殶
+     * 商品数量
      */
     private Integer productNums;
-    @ApiModelProperty("閻楃數澧伴懞杈顓归崡鏄砫")
+    @ApiModelProperty("订单字段说明")
     private  String qnhOrderId;
 
     @ApiModelProperty("QNH order status")
     private  String qnhOrderStatus;
 
     /**
-     * 鐠併垼鍠橀弮鍫曟?
+     * 创建时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
     /**
-     * 鐠併垹宕熼弴瀛樻煀閺冨爼妫
+     * 更新时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
     /**
-     * 娴犳ɑ顑欓弮鍫曟?
+     * 支付时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date payTime;
 
     /**
-     * 閸欐垼鎻i弮鍫曟?
+     * 发货时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date dvyTime;
 
     /**
-     * 鐎瑰本鍨氶弮鍫曟?
+     * 完成时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date finallyTime;
 
 
     /**
-     * 鐠併垹宕熼崣鏍ㄧХ閸樼喎娲
+     * 取消原因
      */
     private String cancelReason;
 
     /**
-     * 閸欐牗绉烽弮鍫曟?
+     * 取消时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date cancelTime;
 
     /**
-     * 閺勵垰鎯佸歌尙绮¢弨顖欑帛閿?閿涙艾鍑$紒蹇旀暜娴犳跨箖閿?閿涙熬绱濆▽鈩冩箒閺顖欑帛鏉?
+     * 是否已支付
      */
     private Integer isPayed;
 
     /**
-     * 閻銊﹀煕鐠併垹宕熼崚鐘绘珟閻樿埖鈧渚婄礉0閿涙碍鐥呴張澶婂灩闂勩倧绱 1閿涙艾娲栭弨鍓佺彲閿?2閿涙碍妗堟稊鍛鍨归梽?
+     * 删除状态
      */
     private Integer deleteStatus;
 
     /**
-     * 鐠併垹宕熼柅鈧濞嗗墽濮搁幀渚婄礄1:閻㈠疇顕闁鈧濞?2:闁鈧濞嗙偓鍨氶崝?3:闁銊ュ瀻闁鈧濞嗙偓鍨氶崝?4:闁鈧濞嗘儳銇戠拹銉绱
+     * 退款状态
      */
     private Integer refundStatus;
 
     /**
-     * 楠炲啿褰存导妯诲劕閹濠氼杺
+     * 平台优惠金额
      */
     private Double platformAmount;
 
     /**
-     * 娴兼ɑ鍎閹濠氼杺
+     * 优惠金额
      */
     private Double reduceAmount;
 
     /**
-     * 浼氬憳浼樻儬閲戦
+     * 会员折扣金额
      */
     private Double memberDiscountAmount;
 
     /**
-     * 浼氬憳浼樻儬璇存槑
+     * 会员折扣描述
      */
     private String memberDiscountDesc;
 
     /**
-     * 鐠併垹宕熺猾璇茬烽崣鍌濃偓鍍秗derType ,1閸ャ垼鍠樼拋銏犲礋 2缁夋帗娼冪拋銏犲礋,3缁夘垰鍨庣拋銏犲礋
+     * 订单类型
      */
     private Integer orderType;
 
     /**
-     * 鐠併垹宕熼崗鎶芥4閸樼喎娲 (1:鐡掑懏妞傞張顏呮暜娴?2:闁鈧濞嗘儳鍙ч梻?4:娑旀澘顔嶉崣鏍ㄧХ 15:瀹告煡鈧姘崇箖鐠愌冨煂娴犳ɑ顑欐禍銈嗘)
+     * 关闭类型
      */
     private Integer closeType;
 
@@ -268,13 +268,13 @@ public class Order implements Serializable {
 
 
     /**
-     * 娑旀澘顔嶉弰鐢敌
+     * 订单字段说明
      */
     @TableField(exist = false)
     @ApiModelProperty("Nickname")
     private String nickName;
     /**
-     * 娑旀澘顔嶉幍瀣婧閸?
+     * 订单字段说明
      */
     @TableField(exist = false)
     @ApiModelProperty("User mobile")
@@ -288,40 +288,40 @@ public class Order implements Serializable {
     private List<OrderItem> orderItems;
 
     /**
-     * 閻銊﹀煕鐠併垹宕熼崷鏉挎絻
+     * 收货地址信息
      */
     @TableField(exist = false)
     private UserAddrOrder userAddrOrder;
 
     /**
-     * 闁鈧濞嗘崘顓归崡鏇犵椽閸?
+     * 退款单号
      */
     @TableField(exist = false)
     private String refundSn;
 
     /**
-     * 鐠併垹宕熼幍鈧閻銊袧閸?
+     * 使用积分
      */
     @TableField(exist = false)
     private Integer score;
     /**
-     * 鐠囧嫯顔戦悩鑸碘偓渚婄窗 0 閺堫亣鐦庢禒? 1 瀹歌尪鐦庢禒?
+     * 评论状态
      */
     private Integer commSts;
     /**
-     * 闁鈧濞嗗墽濮搁幀?
+     * 退款状态
      */
     @TableField(exist = false)
     private Integer returnMoneySts;
 
     /**
-     * 闁鈧濞嗗墽琚閸?
+     * 退款类型
      */
     @TableField(exist = false)
     private Integer refundType;
 
     /**
-     * 娴滃繑宕闁叉垿顤
+     * 损失金额
      */
     @TableField(exist = false)
     private Double lossAmount;
@@ -330,7 +330,7 @@ public class Order implements Serializable {
     private Integer payScore;
 
     /**
-     * 閺勵垰鎯侀棁鈧鐟曚焦鏁娴?
+     * 是否需要下一步支付
      */
     @TableField(exist = false)
     private Boolean nextPay = Boolean.FALSE;
@@ -343,13 +343,13 @@ public class Order implements Serializable {
 
 
     /**
-     * 鐎涙劘顓归崡鏇氫繆閹?
+     * 子订单列表
      */
     @TableField(exist = false)
     private List<Order> subOrders;
 
     /**
-     * 自提核验(明文码),长度不超过50
+     * 自提码
      */
     private String selfPickCode;
 

+ 37 - 37
yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderItem.java

@@ -1,11 +1,11 @@
 /*
- * Copyright (c) 2018-2999 骞垮窞浜氱背淇℃伅绉戞妧鏈夐檺鍏徃 All rights reserved.
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
  *
  * https://www.gz-yami.com/
  *
- * 鏈粡鍏佽锛屼笉鍙仛鍟嗕笟鐢ㄩ€旓紒
+ * 未经允许,不可做商业用途!
  *
- * 鐗堟潈鎵€鏈夛紝渚垫潈蹇呯┒锛?
+ * 版权所有,侵权必究!
  */
 
 package com.yami.shop.bean.model;
@@ -25,7 +25,7 @@ public class OrderItem implements Serializable {
 
     private static final long serialVersionUID = 7307405761190788407L;
     /**
-     * 璁㈠崟椤笽D
+     * 订单项ID
      */
     @TableId(type = IdType.AUTO)
     private Long orderItemId;
@@ -33,161 +33,161 @@ public class OrderItem implements Serializable {
     private Long shopId;
 
     /**
-     * 璁㈠崟orderNumber
+     * 订单编号
      */
     private String orderNumber;
 
     /**
-     * 浜у搧ID
+     * 产品ID
      */
     private Long prodId;
 
     /**
-     * 浜у搧SkuID
+     * 产品SkuID
      */
 
     private Long skuId;
 
     /**
-     * 璐墿杞︿骇鍝佷釜鏁?
+     * 购买数量
      */
     private Integer prodCount;
 
     /**
-     * 鍟嗗搧閲嶉噺锛坓锛?
+     * 商品重量
      */
     private Double weight;
     /**
-     * 宸叉媶鍗曟暟閲?
+     * 拆分数量
      */
     private Integer splitCount;
 
     /**
-     * 浜у搧鍚嶇О
+     * 商品名称
      */
     private String prodName;
 
     /**
-     * sku鍚嶇О
+     * SKU名称
      */
     private String skuName;
 
     /**
-     * 浜у搧涓诲浘鐗囪矾寰?
+     * 商品图片
      */
     private String pic;
 
     /**
-     * 浜у搧浠锋牸
+     * 商品单价
      */
     private Double price;
 
     /**
-     * 鐢ㄦ埛Id
+     * 用户ID
      */
 
     private String userId;
 
     /**
-     * 鍟嗗搧鎬婚噾棰?
+     * 商品总金额
      */
     private Double productTotalAmount;
 
     /**
-     * 璐墿鏃堕棿
+     * 下单时间
      */
 
     private Date recTime;
 
     /**
-     * 璇勮鐘舵€侊細 0 鏈瘎浠? 1 宸茶瘎浠?
+     * 评论状态
      */
     private Integer commSts;
 
     /**
-     * 鎺ㄥ箍鍛樹娇鐢ㄧ殑鎺ㄩ攢鍗″彿
+     * 分销卡号
      */
     private String distributionCardNo;
 
     /**
-     * 鍔犲叆璐墿杞︾殑鏃堕棿
+     * 加入购物车时间
      */
     private Date basketDate;
 
     /**
-     * 鍟嗗搧瀹為檯閲戦 = 鍟嗗搧鎬婚噾棰?- 鍒嗘憡鐨勪紭鎯犻噾棰?
+     * 实际金额
      */
     private Double actualTotal;
 
     /**
-     * 鍒嗘憡鐨勪紭鎯犻噾棰?
+     * 分摊优惠
      */
     private Double shareReduce;
 
     /**
-     * 会员优惠分摊金额
+     * 会员折扣分摊金额
      */
     private Double memberDiscountShareAmount;
 
     /**
-     * 浣跨敤绉垎
+     * 使用积分
      */
     private Integer useScore;
     /**
-     * 鐘舵€?-1寰呭彂璐?0鍏ㄩ儴鍙戣揣 鍏朵粬鏁伴噺涓哄墿浣欏緟鍙戣揣鏁伴噺
+     * 状态
      */
     private Integer status;
     /**
-     * 璁㈠崟纭鏀惰揣鑾峰彇鐨勭Н鍒?
+     * 获得积分
      */
     private Integer gainScore;
 //
 //    /**
-//     * 琛ヨ创鐨勪紭鎯犻噾棰?
+// 订单项字段说明
 //     */
 //    private Double subsidyAmount;
 
     /**
-     * 骞冲彴琛ヨ创鐨勪紭鎯犻噾棰?
+     * 平台分摊优惠
      */
     private Double platformShareReduce;
 
     /**
-     * 鍒嗛攢浣i噾
+     * 分销金额
      */
     private Double distributionAmount;
 
     /**
-     * 涓婄骇鍒嗛攢浣i噾
+     * 上级分销金额
      */
     private Double distributionParentAmount;
 
     /**
-     * 鍗曚釜orderItem鐨勯厤閫佺被鍨?1:蹇€?2:鑷彁 3锛氭棤闇€蹇€?
+     * 配送类型
      */
     private Integer dvyType;
 
     /**
-     * 鍙戣揣鏀瑰彉鐨勬暟閲?
+     * 变更数量
      */
     @TableField(exist = false)
     private Integer changeNum;
 
 
     /**
-     * 閫€娆剧紪鍙凤紙閫€娆剧紪鍙蜂负null鏃讹紝璇存槑璁㈠崟涓烘甯哥姸鎬侊級
+     * 退款单号
      */
     @TableField(exist = false)
     private String refundSn;
 
     /**
-     * 閫€娆剧姸鎬?
+     * 退款状态
      */
     @TableField(exist = false)
     private Integer returnMoneySts;
 
     /**
-     * 璁㈠崟鍑忓皯閲戦
+     * 变更金额
      */
     @TableField(exist = false)
     private Double chageAmount;
@@ -211,13 +211,13 @@ public class OrderItem implements Serializable {
     private String spec;
 
     /**
-     * 娴峰崥鍟嗗搧ID
+     * 海博SKU ID
      */
     @TableField(exist = false)
     private String hbSkuId;
 
     /**
-     * 鍟嗗搧缂栫爜
+     * SKU编码
      */
     @TableField(exist = false)
     private String skuCode;

+ 12 - 12
yami-shop-bean/src/main/java/com/yami/shop/bean/order/ConfirmOrderOrder.java

@@ -1,58 +1,58 @@
 /*
- * Copyright (c) 2018-2999 骞垮窞浜氱背淇℃伅绉戞妧鏈夐檺鍏徃 All rights reserved.
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
  *
  * https://www.gz-yami.com/
  *
- * 鏈粡鍏佽锛屼笉鍙仛鍟嗕笟鐢ㄩ€旓紒
+ * 未经允许,不可做商业用途!
  *
- * 鐗堟潈鎵€鏈夛紝渚垫潈蹇呯┒锛?
+ * 版权所有,侵权必究!
  */
 
 package com.yami.shop.bean.order;
 
 /**
- * 鎻愪氦璁㈠崟浜嬩欢鍏堝悗椤哄簭
+ * 确认订单事件顺序常量
  * @author LGH
  */
 public interface ConfirmOrderOrder {
 
     /**
-     * 娌℃湁浠讳綍娲诲姩鏃剁殑椤哄簭
+     * 默认顺序
      */
     int DEFAULT = 0;
 
     /**
-     * 婊″噺锛屾帓鍦―EFAULT鍚庨潰
+     * 折扣计算顺序
      */
     int DISCOUNT = 100;
 
     /**
-     * 会员优惠,排在DISCOUNT后面
+     * 会员折扣顺序
      */
     int MEMBER = 150;
 
     /**
-     * 浼樻儬鍒革紝鎺掑湪DISCOUNT鍚庨潰
+     * 优惠券计算顺序
      */
     int COUPON = 200;
 
     /**
-     * 鍒嗛攢锛屾帓鍦–OUPON鍚庨潰
+     * 分销计算顺序
      */
     int DISTRIBUTION = 300;
 
     /**
-     * 骞冲彴浼樻儬鍒?
+     * 平台优惠券顺序
      */
     int PLATFORM_COUPON = 400;
 
     /**
-     * 绛夌骇
+     * 等级计算顺序
      */
     int LEVEL = 500;
 
     /**
-     * 绉垎
+     * 积分计算顺序
      */
     int SCORE = 600;
 

Разница между файлами не показана из-за своего большого размера
+ 178 - 190
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderRefundServiceImpl.java


+ 43 - 44
yami-shop-user/yami-shop-user-api/src/main/java/com/yami/shop/user/api/listener/ConfirmOrderListener.java

@@ -34,7 +34,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 /**
- * 閻犱緤绱曢悾鑽ゆ媼閵忕姴绀嬮柡鍐ㄥ濞堟垹绮旈姘€婚柛娆忥攻閸ㄦ岸姊归崹顔瑰亾閸忕厧啸闁绘粍婢橀幏浼村箮濡鈷忓ǎ鍥e墲娴?
+ * 确认订单监听器(会员折扣和等级折扣)
  */
 @Component("userConfirmOrderListener")
 @AllArgsConstructor
@@ -47,16 +47,16 @@ public class ConfirmOrderListener {
     private final XsbMemberSupportService xsbMemberSupportService;
 
     /**
-     * 閻犱緤绱曢悾鑽ょ矓椤栨艾鐎婚柟鍓佹暩楠炲洭宕仦钘夌€婚柟?
+     * 积分支付确认订单监听器
      */
     @EventListener(ScoreConfirmOrderEvent.class)
     @Order(ConfirmOrderOrder.SCORE)
     public void scoreSubmitOrderListener(ScoreConfirmOrderEvent event) {
         System.out.println(JSONObject.toJSONString(event));
-//        //闁兼儳鍢茶ぐ鍥偨閵婏箑鐓曠紒娑橆槺妤犲洨绮旈姘€婚悹鍥峰缁繒鎮?
+// 获取用户扩展信息
 //        UserExtension extension = userExtensionService.getOne(
 //                new LambdaQueryWrapper<UserExtension>().eq(UserExtension::getUserId, SecurityUtils.getUser().getUserId()));
-//        //闁兼儳鍢茶ぐ鍥煀瀹ュ洨鏋傚ǎ鍥e墲娴?
+// 获取积分配置
 //        ScoreConfigParam scoreParam = sysConfigService.getSysConfigObject(Constant.SCORE_CONFIG,ScoreConfigParam.class);
 //        if(Objects.nonNull(scoreParam)  && scoreParam.getShopScoreSwitch() != null && !scoreParam.getShopScoreSwitch()){
 //            return;
@@ -66,33 +66,33 @@ public class ConfirmOrderListener {
 //        if(orderParam.getUserUseScore() != null && orderParam.getUserUseScore() < 0 && extension.getScore() < 0){
 //            return;
 //        }
-//        //閻犱緤绱曢悾鑽ょ矓椤栨艾鐎婚柡鍫氬亾濠㈣埖纰嶆慨鐑芥偝娴兼潙娅ㄥΛ?
+// 计算总积分抵扣金额
 //        double totalScoreAmount = 0.0;
 //        List<Category> categories = categoryService.listByShopId(Constant.PLATFORM_SHOP_ID);
 //        Map<Long, Double> categoryMap = CategoryScale.getScaleByCategory(categories,scoreParam,0);
-//        // 缂佸鍨伴崹搴ㄥ箮閻㈤潧绠涢梺鍙夊灴椤ゅ倿宕i婊勬殢濞戞挸锕?= 閻犱降鍨瑰畷鐔煎矗椤栨瑥鈻忛柣顫妿琚ч柛鎺戞閻︻喗绗?* ((閻庡湱鍋ゅ顖炲箑鐠囨祴鍋?/100闁?
+// 根据配置范围计算
 //        if(scoreParam.getUseDiscountRange() == 0){
-//            // 濠碘€冲€归悘澶愬嫉婢跺瞼鎼肩紒鐙欏倻鍠橀柟顖滃█閸g偓锛愬┑鎾剁閺夆晜锕㈠〒鍫曞礄韫囨挸绠电紒娑橆槺妤犲洭鎯冮崟顏嗗枠闁诡垳濞€閸g偓锛愬┑鍕ㄥ亾娴g晫绠ラ悹鎰潐婢х娀寮伴姘辨澖闂傚嫬鎳橀崳鐐紣濠垫挾绀夐柛鏍ф嚇閸嬫牠寮幆鎵閻犳劙鈧稖绀?
+// 计算实际总金额
 //            double actualTotal = Arith.sub(shopCartOrderMergerDto.getActualTotal(),shopCartOrderMergerDto.getTotalTransfee());
 //            totalScoreAmount = Arith.div(Arith.mul(actualTotal, scoreParam.getUseDiscount()), 100);
 //        }else{
-//            //闁兼儳鍢茶ぐ鍥ㄥ緞瑜忕悮顐︽儍閸曨剛妲峰〒姘儏閼荤喐娼浣哥亣map
+// 遍历所有商品项
 //            for (ShopCartItemDto shopCartItem : event.getAllCartItem()) {
 //                if(!categoryMap.containsKey(shopCartItem.getCategoryId())) {
 //                    continue;
 //                }
-//                // 闁哥喎妫楅幖褔骞€婵犳凹鏉洪柛鎴濈箰楠炴捇宕崱妤婂晙濞村吋蓱閸庮剟濡存担鎼佹尙闁告瑩顣︾槐顓㈠箚閻欏懐绀夐悘蹇氶哺濡叉悂宕崱妤佹儌濡炪倕婀卞▓鎴犫偓鍦仱濡绢垶鏌岄幋锔绘澓
+// 计算商品实际金额
 //                double actualTotal = Arith.sub(Arith.sub(shopCartItem.getProductTotalAmount(), shopCartItem.getShareReduce()),shopCartItem.getPlatformShareReduce());
 //                double scoreReduce = Arith.div(Arith.mul(actualTotal, categoryMap.get(shopCartItem.getCategoryId())),100);
 //                totalScoreAmount = Arith.add(totalScoreAmount,scoreReduce);
 //            }
 //        }
-//        //閻犱緤绱曢悾濠氭偨閵婏箑鐓曢柛娆樺灣閺併倗绮旈姘€?濠碘€冲€归悘澶嬪緞瑜岀花顒勫箑鐠囨彃褰欓柣銊ュ琚ч柛鎺戞婵炲洭鎮介妸锔炬Х濞撴艾顑囧ú鍧楀箳閵夈倕鈻忛柣銏╃厜缁辨繃淇婇崒娑氫函閻忓繐绻嬬花顒勫冀鐟欏嫬绁︽慨锝嗘煣缁躲儲鎷呯捄銊︽殢
+// 计算可用积分
 //        int canUseScore = (int) Arith.mul(totalScoreAmount, scoreParam.getShopUseScore());
 ////        totalScoreAmount = Arith.div(canUseScore, scoreParam.getShopUseScore(),2);
 //        Integer userUseScore = extension.getScore();
 //        Integer totalUsableScore = extension.getScore();
-//        //濠碘€冲€归悘澶愬及椤栨粍鏆忛柟瀵稿厴閳ь剙顦扮€氥劑鎯冮崟顓夋繈宕氶崱妯绘濡増绻愮槐婵嬪礆濞嗘垶鏆忔慨婵勫€楄ⅶ闁告帒妫欓弳鐔革紣?
+// 判断是否使用积分支付
 //        if(orderParam.getUserUseScore() != null && orderParam.getIsScorePay() == 1 && orderParam.getUserUseScore() >= 0){
 //            userUseScore = Math.min(orderParam.getUserUseScore(),userUseScore);
 //        }else{
@@ -104,19 +104,19 @@ public class ConfirmOrderListener {
 //        }
 //        int maxScore = Math.min(totalUsableScore,canUseScore);
 //        userUseScore = Math.min(userUseScore, canUseScore);
-//        // 濠碘€冲€归悘澶嬬▔閸濆嫨浜eù?00闁汇劌瀚惁顔界瑹鐎e墎绀夐柛鎺撶懅琚ч柛鎺戞濞撳墎鎲版担瑙勬10濞达綀娉曢弫?
+// 调整积分使用量
 //        if(scoreParam.getShopUseScore() > 100){
 //            userUseScore = userUseScore - userUseScore % 10;
 //            maxScore = maxScore - maxScore % 10;
 //        }
-//        // 閻犱緤绱曢悾濠氬嫉閳ь剚寰勮瑜版煡骞庨崹顐⑩拸闂佸弶鍨块·鍌炴晬鐏炲€熷珯濞戞挻鏌ㄩ々褔寮稿鍐瘓闁轰焦婢橀妵鍥ㄧ鎼存繆鈷堝ù锝呯Т濞叉捇鎳滃鍕畨闁稿繈鍎荤槐婵囨交濮椻偓濞撳爼宕烽妸顭戝悁缂佺姵銇炵粩鎾焼瀹ュ懐鏉介梻鍕噸婵炲洭鎮介妸顬繈宕?
+// 计算总积分金额
 //        totalScoreAmount = Arith.div(userUseScore,scoreParam.getShopUseScore(),2);
 //        userUseScore = (int) Arith.mul(totalScoreAmount, scoreParam.getShopUseScore());
-//        //闁活潿鍔嶉崺娑㈡焻婢跺顏ョ紒澶樺灠閸ㄥ酣骞庨悽闈涚疀闁挎稑鐬肩划宥囨啑閸涱垍婵嬪礆閸℃洑绻嗛柟?
+// 遍历店铺订单
 //        List<ShopCartOrderDto> shopCartOrders = shopCartOrderMergerDto.getShopCartOrders();
 //        double totalScoreReduce = 0.0;
 //        int totalScore = 0;
-//        //闂侇偅淇虹换鍍╫r i闁瑰灚鍎抽崵顓㈠嫉閳ь剟宕ユ惔婵堫伇濡炪倗娅㈢槐婵堜焊閸℃凹鍚€缂佺姵顨呮禍绋款啅椤旂偓鐣?缂佸鍨伴崹搴g磼濞嗘劖浠橀柛姘捣濞堟垿寮甸埀顒佸緞瑜忓▓鎴炵▔閳ь剚銇?
+// 会员折扣计算说明
 //        for (int shopIndex = 0; shopIndex < shopCartOrders.size(); shopIndex++) {
 //            ShopCartOrderDto shopCartOrder = shopCartOrders.get(shopIndex);
 //            double reduceSum = 0.0;
@@ -127,9 +127,9 @@ public class ConfirmOrderListener {
 //                for (int itemIndex = 0; itemIndex< shopCartItems.size(); itemIndex++) {
 //                    ShopCartItemDto shopCartItem = shopCartItems.get(itemIndex);
 //                    double scoreReduceProd = 0.0;
-//                    //闁告帇鍊栭弻鍥及椤栨碍鍎婇柡鍫氬亾闁告艾绨肩粩瀛樸亜?
+// 判断是否为最后一个商品项
 //                    boolean isEnd =  shopIndex == shopCartOrders.size() - 1 && discountIndex ==shopCartItemDiscounts.size() - 1 && itemIndex == shopCartItems.size() - 1;
-//                    //閻犱緤绱曢悾濠氬疮閸℃鎯傞柛鎺戞閹诧繝鎯冮崟顖氭濡増绻愮槐婵嬫閳ь剛鎲版担椋庮啋濞寸姰鍎查惁顔界瑹?
+// 根据范围计算积分抵扣
 //                    if(scoreParam.getUseDiscountRange() == 0){
 //                        scoreReduceProd = Arith.div(Arith.mul(shopCartItem.getActualTotal(),scoreParam.getUseDiscount()),100,2);
 //                    }else if(categoryMap.containsKey(shopCartItem.getCategoryId())){
@@ -137,9 +137,9 @@ public class ConfirmOrderListener {
 //                    }
 //                    int useScore = (int) Arith.mul(Arith.round(Arith.mul(scoreReduceProd,scale),2), scoreParam.getShopUseScore());
 //                    scoreReduceProd = Arith.div(useScore, scoreParam.getShopUseScore(),2);
-//                    //濠碘€冲€归悘澶嬪緞瑜岀花顒勫矗椤栨粍鏆忓☉鎾筹躬濡炬椽宕氬▎鎴炵函闁规亽鍎抽悺鎴炵鎼搭垳绀夐柟瀛樼墳閳ь剙鎳庨々褔寮稿鍕﹂柡鍫氬亾闁告艾绨肩粩瀛樸亜閸︻厽绾柟鎭掑劚閻ㄣ垽宕滈埡鈧紞鎴︽儍閸曨剙啸闁圭缍侀崳鐐紣濠靛棗寮块梺顔哄姀缁佸瓨绂嶉崼鐔镐粯闁告艾绨肩粩瀛樼▔椤忓海绀夌紒澶樺灠閸ㄥ酣宕畝鍕濡増绻勫ú鍧楀箳閵壯呮惣濞?濞达綀娉曢弫銈夋儍?- 鐎规瓕灏欑划锟犲箮閸偄鈷忛柣?
+// 判断是否超出总额度
 //                    if(Arith.add(totalScoreReduce,scoreReduceProd) > totalScoreAmount || isEnd){
-//                        //闁告垵绻愰獮鎾广亹閹惧啿顤呴柟顒冾嚙閸欙繝鎯冮崟顓夋繈宕氶崱顓犵闁告垵绻愰獮鎾存償濡ゅ懏鎳欑€瑰憡褰冮崹搴ㄥ箺婵犲嫭鐣辩紒澶樺灠閸?
+// 计算实际使用积分
 //                        useScore = userUseScore - totalScore - shopScore;
 //                        scoreReduceProd = Arith.sub(totalScoreAmount ,totalScoreReduce);
 //                    }
@@ -148,7 +148,7 @@ public class ConfirmOrderListener {
 //                    reduceSum = Arith.add(reduceSum, scoreReduceProd);
 //                    shopScore += useScore;
 //                    if (orderParam.getIsScorePay() != null && orderParam.getIsScorePay() == 1) {
-//                        double platformReduce = shopCartItem.getPlatformShareReduce() == null?0:shopCartItem.getPlatformShareReduce();
+// 设置积分支付信息
 //                        shopCartItem.setPlatformShareReduce(Arith.add(platformReduce, scoreReduceProd));
 //                        shopCartItem.setScorePayReduce(scoreReduceProd);
 //                        shopCartItem.setScorePrice(useScore);
@@ -157,19 +157,19 @@ public class ConfirmOrderListener {
 //                    }
 //                }
 //            }
-//            //閻犱礁澧介悿鍡樻償濡ゅ懏鎳欓柣銊ュ閻ゅ嫰姊介崨顔瑰亾鐠囨祴鍋撶粭琛″亾娴g洅婵嬪礆閸℃洜鍠橀柟顖滃█閸g偓锛愬┑鍡樺閻犱降鍨瑰畷鐔稿濡鍔曢梺鍙夊灴椤?
+// 设置店铺积分抵扣
 //            shopCartOrder.setScoreReduce(reduceSum);
 //            shopCartOrder.setActualTotal(Arith.sub(shopCartOrder.getActualTotal(),reduceSum));
-//            //闁衡偓閹冨汲濞村吋蓱閸庮剟鏌岄幋锔绘澓
+// 更新店铺优惠金额
 //            shopCartOrder.setShopReduce(Arith.add(shopCartOrder.getShopReduce(),reduceSum));
-//            //闁衡偓閹冨汲妤犵偛鍟胯ぐ瀛樺濡鍔曢梺鍙夊灴椤?濠碘€冲€归悘澶愭偨閵婏箑鐓曠紒娑橆槺妤犲洭宕楀鍫濇闁解偓閵夈儳鏆楅弶鈺傚姌閸ㄥ倹绋婇悢娲绘矗闁衡偓閹规劗绠婚柛?
+// 设置平台优惠金额
 //            shopCartOrder.setPlatformAmount(Arith.add(shopCartOrder.getPlatformAmount(),reduceSum));
 //            totalScore += shopScore;
 //            if (orderParam.getIsScorePay() != null && orderParam.getIsScorePay() == 1) {
 //                shopCartOrder.setUseScore(shopScore);
 //            }
 //        }
-//        //閻犱礁澧介悿鍡欐媼閵忕姴绀嬮柣銊ュ閻ゅ嫰姊介崨顔瑰亾鐠囨祴鍋撻悡搴㈠閻犱降鍨瑰畷鐔稿濡鍔曢梺鍙夊灴椤?
+// 设置合并订单积分信息
 //        shopCartOrderMergerDto.setTotalScoreAmount(totalScoreReduce);
 //        shopCartOrderMergerDto.setShopUseScore(scoreParam.getShopUseScore());
 //        shopCartOrderMergerDto.setTotalUsableScore(totalScore);
@@ -265,8 +265,7 @@ public class ConfirmOrderListener {
         }
         ShopCartOrderMergerDto shopCartOrderMergerDto = event.getShopCartOrderMergerDto();
         List<ShopCartOrderDto> shopCartOrders = shopCartOrderMergerDto.getShopCartOrders();
-        //闁兼儳鍢茶ぐ鍥礆閸℃瑨顫︽慨锝嗘煣缁?
-        //闁哄牃鍋撻柛姘唉椤撳摜绮诲Δ浣哥亣闂傗偓閸喒鍋撻崗鐓庮潙闁?
+        // 初始化用户等级
         if (extension.getLevel() == null) {
             extension.setLevel(Constant.USER_LEVEL_INIT);
         }
@@ -275,18 +274,18 @@ public class ConfirmOrderListener {
 //        double levelDiscountActualTotal= 0.0;
         double discount = Arith.sub(10, level.getDiscount());
 
-        //閻忓繐妫楅崹搴g尵閺勫繑绁柟瀛樹粣ap
+        // 获取等级分类配置
         List<Long> categoryIds = level.getCategoryIds();
         Map<Long, Long> categoryMap = new HashMap<>(100);
         if (CollectionUtils.isNotEmpty(categoryIds)) {
             categoryIds.forEach(categoryId -> categoryMap.put(categoryId, categoryId));
         }
-        //閻犱緤绱曢悾濠氬箮濡鈷忛柟顒€顭烽·?
+        // 计算等级优惠总额
         double maxlevelFeeTotal = getLevelFeeTotal(shopCartOrders, level, categoryMap);
-        //闂侇偅淇虹换鍍╫r i闁瑰灚鍎抽崵顓㈠嫉閳ь剟宕ユ惔婵堫伇濡炪倗娅㈢槐婵堜焊閸℃凹鍚€缂佺姵顨呮禍绋款啅椤旂偓鐣?缂佸鍨伴崹搴g磼濞嗘劖浠橀柛姘捣濞堟垿寮甸埀顒佸緞瑜忓▓鎴炵▔閳ь剚銇?
+        // 遍历店铺订单
         for (int shopIndex = 0; shopIndex < shopCartOrders.size(); shopIndex++) {
             ShopCartOrderDto shopCartOrder = shopCartOrders.get(shopIndex);
-            //濠碘€冲€归悘澶愬矗椤栨粍鏆忛柤鐓庡暙濞叉寧绋夋ウ鍨闁解偓閵夈儳鏆楀☉鎾崇С鐠愮喕銇愰幘鍐差枀閹煎瓨顨婇幗鐢告儎鐎涙ê澶嶅☉鎾愁儎缁旀潙鈻庨垾铏剷闁?
+            // 判断店铺范围
             if (level.getDiscountRange() == 1 && !Objects.equals(shopCartOrder.getShopId(), 1L)) {
                 continue;
             }
@@ -297,25 +296,25 @@ public class ConfirmOrderListener {
                 for (int itemIndex = 0; itemIndex < shopCartItems.size(); itemIndex++) {
                     ShopCartItemDto shopCartItem = shopCartItems.get(itemIndex);
                     double prodDiscount = 0.0;
-                    //闁告帇鍊栭弻鍥及椤栨碍鍎婇柡鍫氬亾闁告艾绨肩粩瀛樸亜?
+                    // 判断是否为最后一个商品
                     boolean isEnd = shopIndex == shopCartOrders.size() - 1 && discountIndex == shopCartItemDiscounts.size() - 1 && itemIndex == shopCartItems.size() - 1;
-                    //闁硅埖蓱婢?
+                    // 计算商品折扣
                     if (level.getDiscountType() == 0 || categoryMap.containsKey(shopCartItem.getCategoryId())) {
                         prodDiscount = Arith.div(Arith.mul(shopCartItem.getActualTotal(), discount), 10, 2);
                         if (isEnd || Arith.add(Arith.add(levelDiscount, reduceSum), prodDiscount) > maxlevelFeeTotal) {
-                            //闁诡剛绮慨宀勫箥閿濆娅ㄥΛ鐗堢箓閸f椽宕㈢拠鑼Ъ闁告挸绉堕悿顔炬媼閿涘嫭鐣遍柟鑸瞪戞晶鎼佹煂閹达富鏉洪柨娑樿嫰濮樸劍绋夐悜妯讳粯闁告艾绨肩粩瀛樼鐠虹儤娅岄柛婵呯閸ㄥ酣骞楁繝鍕暠缂佹稑顦辨鍥ㄥ濡鍔曢梺鍙夊灴椤?
+                            // 调整最后一个商品的折扣金额
                             prodDiscount = Arith.sub(Arith.sub(maxlevelFeeTotal, levelDiscount), reduceSum);
                         }
                     }
-                    //閻犱緤绱曢悾濠氬疮閸℃鎯傞柛鎺戞閹诧繝鎯冮崟顖氭濡?
+                    // 设置平台分摊优惠
                     shopCartItem.setPlatformShareReduce(Arith.add(shopCartItem.getPlatformShareReduce(), prodDiscount));
                     reduceSum = Arith.add(reduceSum, Arith.round(prodDiscount, 2));
                 }
             }
-            //閻犱礁澧介悿鍡樻償濡ゅ懏鎳欓柣銊ュ閻ゅ嫰姊介崨顔瑰亾鐠囨祴鍋撶粭琛″亾娴g洅婵嬪礆閸℃洜鍠橀柟顖滃█閸g偓锛愬┑鍡樺閻犱降鍨瑰畷鐔稿濡鍔曢梺鍙夊灴椤?
+            // 设置等级优惠金额
             shopCartOrder.setLevelReduce(reduceSum);
             levelDiscount = Arith.add(levelDiscount, reduceSum);
-            //闁告帇鍊栭弻鍥偨閵婏箑鐓曠紒娑橆槺妤犲洭寮伴姘剨闁煎浜i幆鈧幖瀛橆殔鐎垫﹢鏌?
+            // 免运费处理
             //&& level.getCategoryIds()
             if (Objects.equals(shopCartOrder.getShopId(), Constant.MAIN_SHOP) && level.getIsFreeFee() == 1) {
                 freeTransfee = shopCartOrder.getTransfee();
@@ -324,22 +323,22 @@ public class ConfirmOrderListener {
             }
         }
         shopCartOrderMergerDto.setTotalLevelAmount(levelDiscount);
-        //閻犱礁澧介悿鍡樻交閹邦垰鐎ù鍏忌戦崕顒勬煂閹达富鏉?
+        // 设置免运费金额
         shopCartOrderMergerDto.setFreeTransfee(freeTransfee);
     }
 
     /**
-     * 閻犱緤绱曢悾濠氬礄閻戞ǚ鍋撶拠鎻掑綑闁告瑯鍨禍鎺楀箮濡鈷忛柣銊ュ閸g偓锛?
+     * 计算等级优惠总额
      *
-     * @param shopCartOrders 闁稿繈鍔戦崕鎾疮閸℃鎯傚?
-     * @param level          缂佹稑顦辨?
-     * @param categoryMap    闁告帒妫涚悮?
-     * @return 闁诡剛绮慨宀勫箥閿濆娅ㄥΛ?
+     * @param shopCartOrders 店铺订单列表
+     * @param level 用户等级
+     * @param categoryMap 分类映射
+     * @return 等级优惠总额
      */
     private double getLevelFeeTotal(List<ShopCartOrderDto> shopCartOrders, UserLevel level, Map<Long, Long> categoryMap) {
         double totalFee = 0.0;
         for (ShopCartOrderDto shopCartOrder : shopCartOrders) {
-            //濠碘€冲€归悘澶愬矗椤栨粍鏆忛柤鐓庡暙濞叉寧绋夋ウ鍨闁解偓閵夈儳鏆楀☉鎾崇С鐠愮喕銇愰幘鍐差枀閹煎瓨顨婇幗鐢告儎鐎涙ê澶嶅☉鎾愁儎缁旀潙鈻庨垾铏剷闁?
+            // 判断店铺范围
             if (level.getDiscountRange() == 1 && !Objects.equals(shopCartOrder.getShopId(), 1L)) {
                 continue;
             }
@@ -347,7 +346,7 @@ public class ConfirmOrderListener {
             for (ShopCartItemDiscountDto shopCartItemDiscount : shopCartItemDiscounts) {
                 List<ShopCartItemDto> shopCartItems = shopCartItemDiscount.getShopCartItems();
                 for (ShopCartItemDto shopCartItem : shopCartItems) {
-                    //闁硅埖蓱婢?
+                    // 判断是否在等级分类范围内
                     if (level.getDiscountType() == 0 || categoryMap.containsKey(shopCartItem.getCategoryId())) {
                         totalFee = Arith.add(totalFee, shopCartItem.getActualTotal());
                     }

Некоторые файлы не были показаны из-за большого количества измененных файлов