Sfoglia il codice sorgente

积分变动记录商品详情完善

lhm 3 anni fa
parent
commit
44070742b6

+ 40 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeDetailRecordEntity.java

@@ -26,6 +26,19 @@ public class HaiKongMemberScoreChangeDetailRecordEntity {
 
     private Integer deductionScore;
 
+    private Integer giftScore;
+
+    /**
+     * 生成积分规则
+     * 0:门店 1:分类 2:商品 3:无规则
+     */
+    private Integer generateRules;
+
+    /**
+     * 生成积分规则比例,无规则为0
+     */
+    private BigDecimal generateRatio;
+
     private Date createTime;
 
     private Date modifyTime;
@@ -94,6 +107,30 @@ public class HaiKongMemberScoreChangeDetailRecordEntity {
         this.deductionScore = deductionScore;
     }
 
+    public Integer getGiftScore() {
+        return giftScore;
+    }
+
+    public void setGiftScore(Integer giftScore) {
+        this.giftScore = giftScore;
+    }
+
+    public Integer getGenerateRules() {
+        return generateRules;
+    }
+
+    public void setGenerateRules(Integer generateRules) {
+        this.generateRules = generateRules;
+    }
+
+    public BigDecimal getGenerateRatio() {
+        return generateRatio;
+    }
+
+    public void setGenerateRatio(BigDecimal generateRatio) {
+        this.generateRatio = generateRatio;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }
@@ -121,6 +158,9 @@ public class HaiKongMemberScoreChangeDetailRecordEntity {
                 ", actualPrice=" + actualPrice +
                 ", sellVolume=" + sellVolume +
                 ", deductionScore=" + deductionScore +
+                ", giftScore=" + giftScore +
+                ", generateRules=" + generateRules +
+                ", generateRatio=" + generateRatio +
                 ", createTime=" + createTime +
                 ", modifyTime=" + modifyTime +
                 '}';

+ 50 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/vo/OrderGiftScoreRulesVo.java

@@ -0,0 +1,50 @@
+package com.kmall.admin.haikong.vo;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单赠送积分
+ * @author lhm
+ * @createDate 2021-12-10
+ */
+public class OrderGiftScoreRulesVo {
+
+    private Integer generateType;
+
+    private Integer giftScore;
+
+    private BigDecimal generateRatio;
+
+    public Integer getGenerateType() {
+        return generateType;
+    }
+
+    public void setGenerateType(Integer generateType) {
+        this.generateType = generateType;
+    }
+
+    public Integer getGiftScore() {
+        return giftScore;
+    }
+
+    public void setGiftScore(Integer giftScore) {
+        this.giftScore = giftScore;
+    }
+
+    public BigDecimal getGenerateRatio() {
+        return generateRatio;
+    }
+
+    public void setGenerateRatio(BigDecimal generateRatio) {
+        this.generateRatio = generateRatio;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderGiftScoreRulesVo{" +
+                "generateType=" + generateType +
+                ", giftScore=" + giftScore +
+                ", generateRatio=" + generateRatio +
+                '}';
+    }
+}

+ 57 - 11
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -38,9 +38,7 @@ import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.haikong.constant.*;
 import com.kmall.admin.haikong.dto.*;
 import com.kmall.admin.haikong.utils.ListUtils;
-import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceResponseVO;
-import com.kmall.admin.haikong.vo.PointsRulesAndDetailVO;
-import com.kmall.admin.haikong.vo.QueryGoodsVO;
+import com.kmall.admin.haikong.vo.*;
 import com.kmall.admin.haikong.client.HaiKongMemberTemplate;
 import com.kmall.admin.haikong.client.HaiKongWarehouseTemplate;
 import com.kmall.admin.haikong.client.VmcShopTemplate;
@@ -63,7 +61,6 @@ import com.kmall.admin.utils.data.response.ResponseMessageData;
 import com.kmall.admin.utils.jackson.JacksonUtil;
 import com.kmall.admin.utils.oms.OmsSign;
 import com.kmall.admin.utils.pdf.BarcodeUtil;
-import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceVO;
 import com.kmall.admin.websocket.WebSocketServer;
 import com.kmall.api.entity.OrderGoodsRestoreVo;
 import com.kmall.api.entity.OrderGoodsVo;
@@ -2494,6 +2491,7 @@ public class OrderServiceImpl implements OrderService {
             // 总的积分:基础积分
             AtomicReference<Integer> memberScore = new AtomicReference<>(0);
             // 无会员码,不参与积分赠送
+            Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap = new HashMap<>();
             if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
                 List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList = mall2PointsRulesService.queryListByTime(new Date());
                 // 商品map,key===>sku value===>金额
@@ -2516,13 +2514,21 @@ public class OrderServiceImpl implements OrderService {
                             // 商品积分生成规则包含这个sku
                             // 订单中该sku的总金额
                             BigDecimal money = goodsMap.get(pointsDetailNameId);
+                            OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
+                            orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.TWO.getCode());
                             if (ratio.compareTo(BigDecimal.ZERO) > 0) {
                                 // 算出所积的分
-                                memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
+                                int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
+                                memberScore.set(giftScore);
+                                orderGiftScoreRulesVo.setGiftScore(giftScore);
+                                orderGiftScoreRulesVo.setGenerateRatio(ratio);
                             } else {
                                 // 积分比例设置为0,该商品不记积分。
                                 LOGGER.info("商品SKU:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                orderGiftScoreRulesVo.setGiftScore(0);
+                                orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                             }
+                            giftGoodsScoreDetailMap.put(pointsDetailNameId, orderGiftScoreRulesVo);
                             goodsDataMap.remove(pointsDetailNameId);
                         }
 
@@ -2533,17 +2539,25 @@ public class OrderServiceImpl implements OrderService {
                             // 商品类别
                             Integer categoryId = goodsEntity.getCategoryId();
                             String sku = goodsEntity.getSku();
+                            OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
+                            orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.ONE.getCode());
                             if (categorySet.contains(categoryId)) {
                                 if (categoryId.equals(Integer.parseInt(pointsDetailNameId))) {
                                     // 订单中该sku的总金额
                                     BigDecimal money = goodsMap.get(sku);
                                     if (ratio.compareTo(BigDecimal.ZERO) > 0) {
                                         // 算出所积的分
-                                        memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
+                                        int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
+                                        memberScore.set(giftScore);
+                                        orderGiftScoreRulesVo.setGiftScore(giftScore);
+                                        orderGiftScoreRulesVo.setGenerateRatio(ratio);
                                     } else {
                                         // 积分比例设置为0,该商品不记积分。
                                         LOGGER.info("分类:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                        orderGiftScoreRulesVo.setGiftScore(0);
+                                        orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                                     }
+                                    giftGoodsScoreDetailMap.put(sku, orderGiftScoreRulesVo);
                                     goodsDataMap.remove(sku);
                                 }
                             }
@@ -2555,20 +2569,37 @@ public class OrderServiceImpl implements OrderService {
                         goodsEntityCollection.forEach(goodsEntity -> {
                             Integer storeId1 = goodsEntity.getStoreId();
                             String sku = goodsEntity.getSku();
+                            OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
+                            orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.ZERO.getCode());
                             if (storeId.equals(storeId1)) {
                                 // 订单中该sku的总金额
                                 BigDecimal money = goodsMap.get(sku);
                                 if (ratio.compareTo(BigDecimal.ZERO) != 0) {
                                     // 算出所积的分
-                                    memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
+                                    int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
+                                    memberScore.set(giftScore);
+                                    orderGiftScoreRulesVo.setGiftScore(giftScore);
+                                    orderGiftScoreRulesVo.setGenerateRatio(ratio);
                                 } else {
                                     // 积分比例设置为0,该商品不记积分。
                                     LOGGER.info("门店:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                    orderGiftScoreRulesVo.setGiftScore(0);
+                                    orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                                 }
                             }
+                            giftGoodsScoreDetailMap.put(sku, orderGiftScoreRulesVo);
                         });
                     }
                 });
+                goodsSkuList.forEach(s -> {
+                    if (!giftGoodsScoreDetailMap.containsKey(s)) {
+                        OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
+                        orderGiftScoreRulesVo.setGiftScore(0);
+                        orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
+                        orderGiftScoreRulesVo.setGenerateType(3);
+                        giftGoodsScoreDetailMap.put(s, orderGiftScoreRulesVo);
+                    }
+                });
 
                 // 增加该会员的积分
                 Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntityId);
@@ -2621,10 +2652,10 @@ public class OrderServiceImpl implements OrderService {
             if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
                 // 同步会员订单消费记录
                 syncMemberConsumeRecord(memberPhone, order, deductionScore);
-                syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
+                syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
                 // 积分变动接口,下单扣减
                 Integer score = memberScore.get();
-                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
+                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
             }
 
             // 生成取票码
@@ -3045,9 +3076,16 @@ public class OrderServiceImpl implements OrderService {
      * @param changeEvent 变动事件
      * @param changeReason 变动原因
      * @param goodsList 商品详情
+     * @param giftGoodsScoreDetailMap 赠送积分详情
      * @param score     变动积分
      */
-    private void syncMemberScoreChangeRecord(String openId, OrderVo order, Integer score, String changeReason, List<QueryGoodsVO> goodsList, String changeEvent) {
+    private void syncMemberScoreChangeRecord(String openId,
+                                             OrderVo order,
+                                             Integer score,
+                                             String changeReason,
+                                             List<QueryGoodsVO> goodsList,
+                                             Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap,
+                                             String changeEvent) {
         HaiKongMemberScoreChangeRecordEntity haiKongMemberScoreChangeRecordEntity = new HaiKongMemberScoreChangeRecordEntity();
         MemberScoreChangeDTO memberScoreChangeDTO = new MemberScoreChangeDTO();
         String changeId = UUID.randomUUID(true).toString();
@@ -3081,14 +3119,22 @@ public class OrderServiceImpl implements OrderService {
             haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
             haiKongMemberScoreChangeRecordService.save(haiKongMemberScoreChangeRecordEntity);
         }
+        LOGGER.info("保存会员系统积分变动详情记录中......");
         List<HaiKongMemberScoreChangeDetailRecordEntity> recordEntityList = goodsList.stream().map(goodsEntity -> {
             HaiKongMemberScoreChangeDetailRecordEntity entity = new HaiKongMemberScoreChangeDetailRecordEntity();
+            String sku = goodsEntity.getSku();
+            OrderGiftScoreRulesVo orderGiftScoreRulesVo = giftGoodsScoreDetailMap.get(sku);
+            if (Objects.nonNull(orderGiftScoreRulesVo)) {
+                entity.setGenerateRatio(orderGiftScoreRulesVo.getGenerateRatio());
+                entity.setGenerateRules(orderGiftScoreRulesVo.getGenerateType());
+                entity.setGiftScore(orderGiftScoreRulesVo.getGiftScore());
+            }
             entity.setOrderSn(order.getOrder_sn());
             entity.setRetailPrice(goodsEntity.getRetailPrice());
             entity.setActualPrice(goodsEntity.getTotalPrice());
             entity.setProductBarcode(goodsEntity.getProdBarcode());
             entity.setSellVolume(goodsEntity.getSellVolume());
-            entity.setSku(goodsEntity.getSku());
+            entity.setSku(sku);
             entity.setDeductionScore(goodsEntity.getDeductionScore());
             return entity;
         }).collect(Collectors.toList());

+ 15 - 0
kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeDetailRecordDao.xml

@@ -10,6 +10,9 @@
         <result column="actual_price" property="actualPrice" />
         <result column="sell_volume" property="sellVolume" />
         <result column="deduction_score" property="deductionScore" />
+        <result column="gift_score" property="giftScore" />
+        <result column="generate_rules" property="generateRules" />
+        <result column="generate_ratio" property="generateRatio" />
         <result column="modify_time" property="modifyTime" />
         <result column="create_time" property="createTime" />
     </resultMap>
@@ -30,6 +33,9 @@
             `actual_price`,
             `sell_volume`,
             `deduction_score`,
+            `gift_score`,
+            `generate_rules`,
+            `generate_ratio`,
             `modify_time`,
             `create_time`
         )
@@ -42,6 +48,9 @@
             #{actualPrice},
             #{sellVolume},
             #{deductionScore},
+            #{giftScore},
+            #{generateRules},
+            #{generateRatio},
             #{modifyTime},
             #{createTime}
         )
@@ -57,6 +66,9 @@
             `actual_price`,
             `sell_volume`,
             `deduction_score`,
+            `gift_score`,
+            `generate_rules`,
+            `generate_ratio`,
             `modify_time`,
             `create_time`
         )
@@ -70,6 +82,9 @@
                 #{item.actualPrice},
                 #{item.sellVolume},
                 #{item.deductionScore},
+                #{item.giftScore},
+                #{item.generateRules},
+                #{item.generateRatio},
                 #{item.modifyTime},
                 #{item.createTime}
             )