1
0
Pārlūkot izejas kodu

author:wcq
update:营销方式枚举增加赠送积分,下单时增加赠送积分的活动计算活动赠送积分,三张相关记录表记录活动赠送积分信息

wcq 3 gadi atpakaļ
vecāks
revīzija
1f95697e19
19 mainītis faili ar 285 papildinājumiem un 41 dzēšanām
  1. 10 1
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkActivitiesPresentIntegralDao.java
  2. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/vip/Mall2PointsRulesDao.java
  3. 15 1
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeDetailRecordEntity.java
  4. 12 0
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeRecordEntity.java
  5. 5 0
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/IntegralGoBackEntity.java
  6. 14 0
      kmall-admin/src/main/java/com/kmall/admin/entity/vip/Mall2MemberConsumptionRecordsEntity.java
  7. 42 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/constant/ActivityGiveTypeEnum.java
  8. 16 1
      kmall-admin/src/main/java/com/kmall/admin/haikong/dto/MemberScoreChangeDTO.java
  9. 15 1
      kmall-admin/src/main/java/com/kmall/admin/haikong/vo/OrderGiftScoreRulesVo.java
  10. 88 28
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  11. 13 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesPresentIntegralServiceImpl.java
  12. 2 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/vip/Mall2PointsRulesServiceImpl.java
  13. 9 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkActivitiesPresentIntegralService.java
  14. 2 1
      kmall-admin/src/main/java/com/kmall/admin/service/vip/Mall2PointsRulesService.java
  15. 6 0
      kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeDetailRecordDao.xml
  16. 7 0
      kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeRecordDao.xml
  17. 13 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkActivitiesPresentIntegralDao.xml
  18. 14 5
      kmall-admin/src/main/resources/mybatis/mapper/vip/Mall2MemberConsumptionRecordsDao.xml
  19. 1 0
      kmall-admin/src/main/resources/mybatis/mapper/vip/Mall2PointsRulesDao.xml

+ 10 - 1
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkActivitiesPresentIntegralDao.java

@@ -3,6 +3,8 @@ package com.kmall.admin.dao.mk;
 import com.kmall.admin.entity.mk.MkActivitiesPresentIntegralEntity;
 import com.kmall.manager.dao.BaseDao;
 
+import java.util.List;
+
 /**
  * 营销活动-赠送积分Dao
  *
@@ -11,5 +13,12 @@ import com.kmall.manager.dao.BaseDao;
  * @date 2022-04-14 10:20:48
  */
 public interface MkActivitiesPresentIntegralDao extends BaseDao<MkActivitiesPresentIntegralEntity> {
-
+    /**
+     * 根据门店id和当前时间和活动类型查询有那些sku参加了积分抵扣活动
+     * @param storeId
+     * @param currentTime
+     * @param mkaTopic
+     * @return
+     */
+    List<MkActivitiesPresentIntegralEntity> querySkuByNow(String storeId, String currentTime, String mkaTopic);
 }

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/dao/vip/Mall2PointsRulesDao.java

@@ -28,7 +28,7 @@ public interface Mall2PointsRulesDao extends BaseDao<Mall2PointsRulesEntity> {
      * @param nowTime 当前时间
      * @return 积分生成规则
      */
-    List<PointsRulesAndDetailVO> queryListByTime(Date nowTime);
+    List<PointsRulesAndDetailVO> queryListByTime(Date nowTime, String pointsStoreId);
 
     Integer saveMall2PointsRulesDetil(List<Mall2RulesDto> pointsRulesList);
 

+ 15 - 1
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeDetailRecordEntity.java

@@ -25,8 +25,14 @@ public class HaiKongMemberScoreChangeDetailRecordEntity {
     private Integer sellVolume;
 
     private Integer deductionScore;
-
+    /**
+     * 订单赠送积分
+     */
     private Integer giftScore;
+    /**
+     * 活动赠送积分
+     */
+    private Integer activityGiftScore;
 
     /**
      * 生成积分规则
@@ -43,6 +49,14 @@ public class HaiKongMemberScoreChangeDetailRecordEntity {
 
     private Date modifyTime;
 
+    public Integer getActivityGiftScore() {
+        return activityGiftScore;
+    }
+
+    public void setActivityGiftScore(Integer activityGiftScore) {
+        this.activityGiftScore = activityGiftScore;
+    }
+
     public Integer getId() {
         return id;
     }

+ 12 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeRecordEntity.java

@@ -20,6 +20,10 @@ public class HaiKongMemberScoreChangeRecordEntity {
      * 变动的积分数量
      */
     private Integer score;
+    /**
+     * 活动赠送积分变动值
+     */
+    private Integer activityScore;
 
     /**
      * 外部订单号(kmall订单号)
@@ -47,6 +51,14 @@ public class HaiKongMemberScoreChangeRecordEntity {
      */
     private String statementId;
 
+    public Integer getActivityScore() {
+        return activityScore;
+    }
+
+    public void setActivityScore(Integer activityScore) {
+        this.activityScore = activityScore;
+    }
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     private Date createTime;
 

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/IntegralGoBackEntity.java

@@ -24,6 +24,11 @@ public class IntegralGoBackEntity implements Serializable {
      */
     private Integer rollback_score;
     /**
+     * 回退活动积分数量
+     */
+    private Integer rollback_activity_score;
+
+    /**
      * 渠道自定义积分变动唯一标识,用于平台幂等性保证
      */
     private String change_id;

+ 14 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/vip/Mall2MemberConsumptionRecordsEntity.java

@@ -124,6 +124,20 @@ public class Mall2MemberConsumptionRecordsEntity implements Serializable {
     private Integer orderGiftScore;
 
     /**
+     * 活动赠送积分
+     */
+    private Integer activityGiftScore;
+
+
+    public Integer getActivityGiftScore() {
+        return activityGiftScore;
+    }
+
+    public void setActivityGiftScore(Integer activityGiftScore) {
+        this.activityGiftScore = activityGiftScore;
+    }
+
+    /**
      * 设置:主键
      */
     public void setMmcrId(Integer mmcrId) {

+ 42 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/constant/ActivityGiveTypeEnum.java

@@ -0,0 +1,42 @@
+package com.kmall.admin.haikong.constant;
+
+/**
+ * 积分赠送方式
+ */
+public enum ActivityGiveTypeEnum {
+
+    /**
+     * 固定值
+     */
+    FIXED_VALUE("1", "固定值"),
+    /**
+     * 倍率
+     */
+    MULTIPLYING_POWER("2", "倍率"),
+    ;
+
+
+    /**
+     * code
+     */
+    private String code;
+    /**
+     * 名称
+     */
+    private String name;
+
+    ActivityGiveTypeEnum(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+
+}

+ 16 - 1
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/MemberScoreChangeDTO.java

@@ -15,8 +15,14 @@ public class MemberScoreChangeDTO implements Serializable {
 
     @JsonProperty("open_id")
     private String openId;
-
+    /**
+     * 积分变动
+     */
     private Integer score;
+    /**
+     * 活动积分变动
+     */
+    private Integer activityScore;
 
     /**
      * 外部订单号
@@ -40,6 +46,15 @@ public class MemberScoreChangeDTO implements Serializable {
     @JsonProperty("change_id")
     private String changeId;
 
+
+    public Integer getActivityScore() {
+        return activityScore;
+    }
+
+    public void setActivityScore(Integer activityScore) {
+        this.activityScore = activityScore;
+    }
+
     public String getOpenId() {
         return openId;
     }

+ 15 - 1
kmall-admin/src/main/java/com/kmall/admin/haikong/vo/OrderGiftScoreRulesVo.java

@@ -10,11 +10,25 @@ import java.math.BigDecimal;
 public class OrderGiftScoreRulesVo {
 
     private Integer generateType;
-
+    /**
+     * 下单赠送积分
+     */
     private Integer giftScore;
+    /**
+     * 活动赠送积分
+     */
+    private Integer activityGiftScore;
 
     private BigDecimal generateRatio;
 
+    public Integer getActivityGiftScore() {
+        return activityGiftScore;
+    }
+
+    public void setActivityGiftScore(Integer activityGiftScore) {
+        this.activityGiftScore = activityGiftScore;
+    }
+
     public Integer getGenerateType() {
         return generateType;
     }

+ 88 - 28
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -26,6 +26,7 @@ import com.kmall.admin.dto.*;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.haikong.*;
 import com.kmall.admin.entity.mk.MkActivitiesEntity;
+import com.kmall.admin.entity.mk.MkActivitiesPresentIntegralEntity;
 import com.kmall.admin.entity.mk.MkActivitiesScoreEntity;
 import com.kmall.admin.entity.mk.store.MkStorePromOrderRealEntity;
 import com.kmall.admin.entity.record.NewRetailOrderRestoreStockRecordEntity;
@@ -46,6 +47,7 @@ import com.kmall.admin.haikong.config.HaiKongProperties;
 import com.kmall.admin.haikong.utils.Response;
 import com.kmall.admin.service.*;
 import com.kmall.admin.service.haikong.*;
+import com.kmall.admin.service.mk.MkActivitiesPresentIntegralService;
 import com.kmall.admin.service.mk.MkActivitiesScoreService;
 import com.kmall.admin.service.mk.MkActivitiesService;
 import com.kmall.admin.service.mk.store.MkStoreCampMinusService;
@@ -234,6 +236,8 @@ public class OrderServiceImpl implements OrderService {
     @Autowired
     private MkActivitiesService mkActivitiesService;
 
+    @Autowired
+    private MkActivitiesPresentIntegralService mkActivitiesPresentIntegralService;
     /**
      * 满赠
      */
@@ -2625,37 +2629,41 @@ public class OrderServiceImpl implements OrderService {
 
             // 查询当前时间积分规则以及明细,根据积分生成规则进行增加会员积分
             Integer userEntityId = userEntity.getId();
-            // 总的积分:基础积分
+            // 总的积分:基础积分  AtomicReference 用来保证此integer的操作线程安全
             AtomicReference<Integer> memberScore = new AtomicReference<>(0);
+            // 订单总赠送积分
+            AtomicReference<Integer> activityGiftScore = new AtomicReference<>(0);
             // 无会员码,不参与积分赠送
             Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap = new HashMap<>();
+            // memberCode为不为空 判断 下单时有没有传入会员码
             if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
                 /**
-                 * todo A门店、B门店的积分规则进行赠送,而是都使用了同一个门店或商品赠送规则
+                 * 修复A门店、B门店的积分规则进行赠送,而是都使用了同一个门店或商品赠送规则
                  * 修改为各用各的
+                 * 根据门店id 和时间查询积分赠送规则
                  */
-//                 查询门店有没有设置积分规则
-                Mall2PointsRulesDto mall2PointsRulesEntityQuery = new Mall2PointsRulesDto();
-                mall2PointsRulesEntityQuery.setIsValid(Dict.isValid.item_0.getItem());
-                mall2PointsRulesEntityQuery.setPointsType(Integer.valueOf(Dict.pointsType.item_0.getItem()));
-                mall2PointsRulesEntityQuery.setNowTime(new Date());
-                mall2PointsRulesEntityQuery.setPointsStoreId(Long.toString(store.getId()));
-                List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList = mall2PointsRulesService.queryList(mall2PointsRulesEntityQuery);
-                if (pointsRulesAndDetailVOList.isEmpty()){
-                    // 如果查不出来就用原来的处理方式 说明门店没有进行配置
-                    pointsRulesAndDetailVOList= mall2PointsRulesService.queryListByTime(new Date());
-                }
-
+                List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList= mall2PointsRulesService.queryListByTime(new Date(), store.getId().toString());
 
                 // 商品map,key===>sku value===>金额
                 Map<String, BigDecimal> goodsMap = goodsEntities.stream().collect(Collectors.toMap(GoodsEntity::getSku, GoodsEntity::getActualPaymentAmount, (k1, k2) -> k2));
                 // 商品数据map,key===>sku value===>商品实体
                 Map<String, GoodsEntity> goodsDataMap = goodsEntities.stream().collect(Collectors.toMap(GoodsEntity::getSku, goodsEntity -> goodsEntity, (k1, k2) -> k2));
+                // 根据门店、时间和活动类型 查询参加积分赠送活动的sku,转换为map
+                //  ,sku为key,对象为值,判断sku是否在此之中,在则计算赠送积分算完
+                List<MkActivitiesPresentIntegralEntity> mkActivitiesEntityList = mkActivitiesPresentIntegralService.querySkuByNow(store.getId().toString(), DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"), Constants.ActivityTopicEnum.ZSJF.getTopicCode());
+                Map<String, MkActivitiesPresentIntegralEntity> mkActivitiesEntityMap = new HashMap<>();
+                if(!CollectionUtils.isEmpty(mkActivitiesEntityList) && mkActivitiesEntityList.size() > 0){
+                    // 不为空 则处理
+                    mkActivitiesEntityMap = mkActivitiesEntityList.stream()
+                            .collect(Collectors.toMap(MkActivitiesPresentIntegralEntity::getSku
+                                    , mkActivitiesPresentIntegralEntity -> mkActivitiesPresentIntegralEntity, (k1, k2) -> k2));
+                }
+
                 // 订单全部的sku
                 Set<String> goodsSkuList = goodsMap.keySet();
                 // 订单全部商品的分类列表,只有二级分类才能设置生成规则
                 Set<Integer> categorySet = goodsEntities.stream().map(GoodsEntity::getCategoryId).collect(Collectors.toSet());
-                pointsRulesAndDetailVOList.forEach(pointsRulesAndDetailVO -> {
+                for(PointsRulesAndDetailVO pointsRulesAndDetailVO : pointsRulesAndDetailVOList){
                     Integer pointsType = pointsRulesAndDetailVO.getPointsType();
                     // 可以是sku、门店id、分类id
                     String pointsDetailNameId = pointsRulesAndDetailVO.getPointsDetailNameId();
@@ -2669,9 +2677,10 @@ public class OrderServiceImpl implements OrderService {
                             BigDecimal money = goodsMap.get(pointsDetailNameId);
                             OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
                             orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.TWO.getCode());
+                            BigDecimal bigDecimal = new BigDecimal(0);
                             if (ratio.compareTo(BigDecimal.ZERO) > 0) {
                                 // 算出所积的分
-                                BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
+                                bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
                                 int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
                                 memberScore.set(giftScore);
                                 orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
@@ -2682,15 +2691,18 @@ public class OrderServiceImpl implements OrderService {
                                 orderGiftScoreRulesVo.setGiftScore(0);
                                 orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                             }
+                            // 在这里计算赠送积分,并放入
+                            // 判断此sku是否参加活动 并计算活动积分
+                            getGiftScore(activityGiftScore, bigDecimal, mkActivitiesEntityMap, pointsDetailNameId, orderGiftScoreRulesVo);
                             giftGoodsScoreDetailMap.put(pointsDetailNameId, orderGiftScoreRulesVo);
                             goodsDataMap.remove(pointsDetailNameId);
                         }
-
+                        break;
                     }
                     if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.getCode())) {
                         Collection<GoodsEntity> values = goodsDataMap.values();
                         Collection<GoodsEntity> entityCollection = DeepCopyUtils.depCopyHashSet(new HashSet<>(values));
-                        entityCollection.forEach(goodsEntity -> {
+                        for(GoodsEntity goodsEntity : entityCollection){
                             // 商品类别
                             Integer categoryId = goodsEntity.getCategoryId();
                             String sku = goodsEntity.getSku();
@@ -2700,9 +2712,10 @@ public class OrderServiceImpl implements OrderService {
                                 if (categoryId.equals(Integer.parseInt(pointsDetailNameId))) {
                                     // 订单中该sku的总金额
                                     BigDecimal money = goodsMap.get(sku);
+                                    BigDecimal bigDecimal = new BigDecimal(0);
                                     if (ratio.compareTo(BigDecimal.ZERO) > 0) {
                                         // 算出所积的分
-                                        BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
+                                        bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
                                         int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
                                         memberScore.set(giftScore);
                                         orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
@@ -2713,26 +2726,30 @@ public class OrderServiceImpl implements OrderService {
                                         orderGiftScoreRulesVo.setGiftScore(0);
                                         orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                                     }
+                                    // 判断此sku是否参加活动 并计算活动积分
+                                    getGiftScore(activityGiftScore, bigDecimal, mkActivitiesEntityMap, sku, orderGiftScoreRulesVo);
                                     giftGoodsScoreDetailMap.put(sku, orderGiftScoreRulesVo);
                                     goodsDataMap.remove(sku);
                                 }
                             }
-                        });
+                        }
+                        break;
                     }
                     if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
                         // 门店
                         Collection<GoodsEntity> goodsEntityCollection = goodsDataMap.values();
-                        goodsEntityCollection.forEach(goodsEntity -> {
+                        for(GoodsEntity goodsEntity : goodsEntityCollection){
                             Integer storeId1 = goodsEntity.getStoreId();
                             String sku = goodsEntity.getSku();
                             OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
                             orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.ZERO.getCode());
+                            BigDecimal bigDecimal = new BigDecimal(0);
                             if (storeId.equals(storeId1)) {
                                 // 订单中该sku的总金额
                                 BigDecimal money = goodsMap.get(sku);
                                 if (ratio.compareTo(BigDecimal.ZERO) != 0) {
                                     // 算出所积的分
-                                    BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
+                                    bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
                                     int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
                                     memberScore.set(giftScore);
                                     orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
@@ -2744,10 +2761,15 @@ public class OrderServiceImpl implements OrderService {
                                     orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                                 }
                             }
+
+                            // 判断此sku是否参加活动 并计算活动积分
+                            getGiftScore(activityGiftScore, bigDecimal, mkActivitiesEntityMap, sku, orderGiftScoreRulesVo);
                             giftGoodsScoreDetailMap.put(sku, orderGiftScoreRulesVo);
-                        });
+                        }
                     }
-                });
+                    break;
+                }
+
                 goodsSkuList.forEach(s -> {
                     if (!giftGoodsScoreDetailMap.containsKey(s)) {
                         OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
@@ -2801,6 +2823,7 @@ public class OrderServiceImpl implements OrderService {
             consumptionRecords.setMemberCode(memberCode);
             consumptionRecords.setMemberPhone(memberPhone);
             consumptionRecords.setOrderGiftScore(memberScore.get());
+            consumptionRecords.setActivityGiftScore(activityGiftScore.get());
             consumptionRecords.setDeductionScore(deductionScore);
             consumptionRecords.setCreaterSn(userId + "");
             consumptionRecords.setCreateTime(new Date());
@@ -2811,11 +2834,11 @@ public class OrderServiceImpl implements OrderService {
                 syncMemberConsumeRecord(memberPhone, order, deductionScore);
                 if (deductionScore > 0) {
                     // 积分变动接口,下单扣减
-                    syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
+                    syncMemberScoreChangeRecord(openId, order, deductionScore,null, "下单扣减", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
                 }
                 Integer score = memberScore.get();
                 if (score > 0) {
-                    syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
+                    syncMemberScoreChangeRecord(openId, order, score,activityGiftScore, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
                 }
             }
 
@@ -2860,6 +2883,37 @@ public class OrderServiceImpl implements OrderService {
     }
 
     /**
+     * 计算sku实际赠送积分 和 订单总赠送积分
+     * @param activityGiftScore
+     * @param baseScore
+     * @param mkActivitiesEntityMap
+     * @param sku
+     */
+    private void getGiftScore(AtomicReference<Integer> activityGiftScore, BigDecimal baseScore
+            , Map<String, MkActivitiesPresentIntegralEntity> mkActivitiesEntityMap, String sku, OrderGiftScoreRulesVo orderGiftScoreRulesVo) {
+        if(mkActivitiesEntityMap.containsKey(sku)){
+            // 存在表示它参加赠送积分活动
+            MkActivitiesPresentIntegralEntity mkActivitiesPresentIntegralEntity = mkActivitiesEntityMap.get(sku);
+            // 计算活动积分
+            if(ActivityGiveTypeEnum.FIXED_VALUE.getCode().equals(mkActivitiesPresentIntegralEntity.getActivityGiveType())){
+                // 固定值  那赠送积分就是固定值
+                BigDecimal giftScoreTmp = mkActivitiesPresentIntegralEntity.getActivityGiveNum();
+                // 此sku赠送的积分加上之前赠送的积分 算出来订单赠送总分
+                int giftScore = giftScoreTmp.add(new BigDecimal(activityGiftScore.get())).intValue();
+                activityGiftScore.set(giftScore);
+                orderGiftScoreRulesVo.setActivityGiftScore(giftScoreTmp.intValue());
+            } else if(ActivityGiveTypeEnum.MULTIPLYING_POWER.getCode().equals(mkActivitiesPresentIntegralEntity.getActivityGiveType())){
+                // 计算积分  sku实际积分 * 赠送倍率 = 赠送积分
+                BigDecimal giftScoreTmp = baseScore.multiply(mkActivitiesPresentIntegralEntity.getActivityGiveNum()).setScale(0, BigDecimal.ROUND_FLOOR);
+                // 赠送积分加上 之前的积分 算出订单总赠送积分
+                int giftScore = giftScoreTmp.add(new BigDecimal(activityGiftScore.get())).intValue();
+                activityGiftScore.set(giftScore);
+                orderGiftScoreRulesVo.setActivityGiftScore(giftScoreTmp.intValue());
+            }
+        }
+    }
+
+    /**
      * 免税mall创建订单
      * @param order             订单信息:包含订单信息,支付信息,跨境信息
      * @param orderGoodsVoList  订单详情数据
@@ -3412,15 +3466,17 @@ public class OrderServiceImpl implements OrderService {
      * 同步会员积分变动记录
      * @param openId    会员openid
      * @param order     订单信息
-     * @param changeEvent 变动事件
+     * @param score     变动积分
+     * @param activityScore
      * @param changeReason 变动原因
      * @param goodsList 商品详情
      * @param giftGoodsScoreDetailMap 赠送积分详情
-     * @param score     变动积分
+     * @param changeEvent 变动事件
      */
     private void syncMemberScoreChangeRecord(String openId,
                                              OrderVo order,
                                              Integer score,
+                                             AtomicReference<Integer> activityScore,
                                              String changeReason,
                                              List<QueryGoodsVO> goodsList,
                                              Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap,
@@ -3434,6 +3490,9 @@ public class OrderServiceImpl implements OrderService {
         memberScoreChangeDTO.setOpenId(openId);
         memberScoreChangeDTO.setOutBizNo(order.getOrder_sn());
         memberScoreChangeDTO.setScore(score);
+        if(!Objects.isNull(activityScore)){
+            memberScoreChangeDTO.setActivityScore(activityScore.get());
+        }
         BeanUtils.copyProperties(memberScoreChangeDTO, haiKongMemberScoreChangeRecordEntity);
         Date date = new Date();
         haiKongMemberScoreChangeRecordEntity.setCreateTime(date);
@@ -3471,6 +3530,7 @@ public class OrderServiceImpl implements OrderService {
                     entity.setGenerateRatio(orderGiftScoreRulesVo.getGenerateRatio());
                     entity.setGenerateRules(orderGiftScoreRulesVo.getGenerateType());
                     entity.setGiftScore(orderGiftScoreRulesVo.getGiftScore());
+                    entity.setActivityGiftScore(orderGiftScoreRulesVo.getActivityGiftScore());
                 }
                 entity.setOrderSn(order.getOrder_sn());
                 entity.setRetailPrice(goodsEntity.getRetailPrice());

+ 13 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesPresentIntegralServiceImpl.java

@@ -55,4 +55,17 @@ public class MkActivitiesPresentIntegralServiceImpl implements MkActivitiesPrese
     public int deleteBatch(Long[]mapIds) {
         return mkActivitiesPresentIntegralDao.deleteBatch(mapIds);
     }
+
+    /**
+     * 根据门店id和当前时间和活动类型查询有那些sku参加了积分抵扣活动
+     *
+     * @param storeId
+     * @param currentTime
+     * @param mkaTopic
+     * @return
+     */
+    @Override
+    public List<MkActivitiesPresentIntegralEntity> querySkuByNow(String storeId, String currentTime, String mkaTopic) {
+        return mkActivitiesPresentIntegralDao.querySkuByNow(storeId,currentTime,mkaTopic);
+    }
 }

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/vip/Mall2PointsRulesServiceImpl.java

@@ -262,8 +262,8 @@ public class Mall2PointsRulesServiceImpl implements Mall2PointsRulesService {
      * @return 积分生成规则
      */
     @Override
-    public List<PointsRulesAndDetailVO> queryListByTime(Date nowTime) {
-        return mall2PointsRulesDao.queryListByTime(nowTime);
+    public List<PointsRulesAndDetailVO> queryListByTime(Date nowTime, String storeId) {
+        return mall2PointsRulesDao.queryListByTime(nowTime, storeId);
     }
 
     @Override

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkActivitiesPresentIntegralService.java

@@ -69,4 +69,13 @@ public interface MkActivitiesPresentIntegralService {
      * @return 删除条数
      */
     int deleteBatch(Long[]mapIds);
+
+    /**
+     * 根据门店id和当前时间和活动类型查询有那些sku参加了积分抵扣活动
+     * @param storeId
+     * @param currentTime
+     * @param mkaTopic
+     * @return
+     */
+    List<MkActivitiesPresentIntegralEntity> querySkuByNow(String storeId, String currentTime, String mkaTopic);
 }

+ 2 - 1
kmall-admin/src/main/java/com/kmall/admin/service/vip/Mall2PointsRulesService.java

@@ -94,9 +94,10 @@ public interface Mall2PointsRulesService {
     /**
      * 查询当前时间的积分规则及其明细
      * @param nowTime 当前时间
+     * @param storeId 门店id
      * @return        积分生成规则
      */
-    List<PointsRulesAndDetailVO> queryListByTime(Date nowTime);
+    List<PointsRulesAndDetailVO> queryListByTime(Date nowTime, String storeId);
 
     int querymall2PointsRulesDetilTotal(Query query);
 

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

@@ -11,6 +11,7 @@
         <result column="sell_volume" property="sellVolume" />
         <result column="deduction_score" property="deductionScore" />
         <result column="gift_score" property="giftScore" />
+        <result column="activity_gift_score" property="activityGiftScore" />
         <result column="generate_rules" property="generateRules" />
         <result column="generate_ratio" property="generateRatio" />
         <result column="modify_time" property="modifyTime" />
@@ -34,6 +35,7 @@
             `sell_volume`,
             `deduction_score`,
             `gift_score`,
+            `activity_gift_score`,
             `generate_rules`,
             `generate_ratio`,
             `modify_time`,
@@ -49,6 +51,7 @@
             #{sellVolume},
             #{deductionScore},
             #{giftScore},
+            #{activityGiftScore},
             #{generateRules},
             #{generateRatio},
             #{modifyTime},
@@ -67,6 +70,7 @@
             `sell_volume`,
             `deduction_score`,
             `gift_score`,
+            `activity_gift_score`,
             `generate_rules`,
             `generate_ratio`,
             `modify_time`,
@@ -83,6 +87,7 @@
                 #{item.sellVolume},
                 #{item.deductionScore},
                 #{item.giftScore},
+                #{item.activityGiftScore},
                 #{item.generateRules},
                 #{item.generateRatio},
                 #{item.modifyTime},
@@ -106,6 +111,7 @@
         `sell_volume`,
         `deduction_score`,
         `gift_score`,
+        `activity_gift_score`,
         `generate_rules`,
         `generate_ratio`,
         `create_time`,

+ 7 - 0
kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeRecordDao.xml

@@ -5,6 +5,7 @@
         <id column="id" property="id" />
         <result column="open_id" property="openId" />
         <result column="score" property="score" />
+        <result column="activity_score" property="activityScore" />
         <result column="out_biz_no" property="outBizNo" />
         <result column="change_reason" property="changeReason" />
         <result column="change_event" property="changeEvent" />
@@ -18,6 +19,7 @@
     <resultMap id="IntegralGoBack" type="com.kmall.admin.entity.haikong.IntegralGoBackEntity">
         <result column="open_id" property="open_id" />
         <result column="score" property="rollback_score" />
+        <result column="activity_score" property="rollback_activity_score" />
         <result column="statement_id" property="statement_id" />
         <result column="change_id" property="change_id" />
     </resultMap>
@@ -55,6 +57,7 @@
         (
             `open_id`,
             `score`,
+            `activity_score`,
             `out_biz_no`,
             `change_reason`,
             `change_event`,
@@ -68,6 +71,7 @@
         (
             #{openId},
             #{score},
+            #{activityScore},
             #{outBizNo},
             #{changeReason},
             #{changeEvent},
@@ -84,6 +88,7 @@
         <set>
             <if test="openId != null">`open_id` = #{openId}, </if>
             <if test="score != null">`score` = #{score}, </if>
+            <if test="activityScore != null">`activity_score` = #{activityScore}, </if>
             <if test="outBizNo != null">`out_biz_no` = #{outBizNo}, </if>
             <if test="changeReason != null">`change_reason` = #{changeReason}, </if>
             <if test="changeId != null">`change_id` = #{changeId}, </if>
@@ -129,6 +134,7 @@
         SELECT
             open_id,
             score,
+            activity_score,
             statement_id,
             change_id
         FROM
@@ -141,6 +147,7 @@
         `id`,
         `open_id`,
         `score`,
+        `activity_score`,
         `out_biz_no`,
         `change_reason`,
         `change_event`,

+ 13 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkActivitiesPresentIntegralDao.xml

@@ -155,5 +155,18 @@
 			#{mapId}
 		</foreach>
 	</delete>
+	<select id="querySkuByNow" resultMap="mkActivitiesPresentIntegralMap">
+		select
+			mapi.*
+		from mk_activities_present_integral mapi
+		left join mk_activities ma on ma.mka_id = mapi.mka_id
+		where
+			ma.mka_store_id = #{storeId}
+			and ma.mka_start_time &lt; #{currentTime}
+			and ma.mkd_end_time &gt; #{currentTime}
+			and ma.mka_status = 1
+			and ma.mka_topic = #{mkaTopic}
+	</select>
+
 
 </mapper>

+ 14 - 5
kmall-admin/src/main/resources/mybatis/mapper/vip/Mall2MemberConsumptionRecordsDao.xml

@@ -24,6 +24,8 @@
         <result property="beforeScore" column="before_score"/>
         <result property="afterScore" column="after_score"/>
         <result property="orderGiftScore" column="order_gift_score"/>
+		<result property="activityGiftScore" column="activity_gift_score"/>
+
     </resultMap>
 
 	<select id="queryObject" resultType="com.kmall.admin.entity.vip.Mall2MemberConsumptionRecordsEntity">
@@ -47,7 +49,8 @@
 			`score_limit`,
 			`before_score`,
 			`after_score`,
-			`order_gift_score`
+			`order_gift_score`,
+			`activity_gift_score`
 		from mall2_member_consumption_records
 		where mmcr_id = #{id}
 	</select>
@@ -75,7 +78,8 @@
 			records.`score_limit`,
 			records.`before_score`,
 			records.`after_score`,
-			records.`order_gift_score`
+			records.`order_gift_score`,
+			records.`activity_gift_score`
 		from mall2_member_consumption_records records
 		left join mall_user mu on mu.id = records.user_id
 		left join mall_store store on store.id = records.shop_sn
@@ -132,7 +136,8 @@
 			`score_limit`,
 			`before_score`,
 			`after_score`,
-			`order_gift_score`
+			`order_gift_score`,
+			`activity_gift_score`
 		from mall2_member_consumption_records
 		where `order_sn` = #{orderSn}
 	</select>
@@ -158,7 +163,8 @@
 			`score_limit`,
 			`before_score`,
 			`after_score`,
-			`order_gift_score`)
+			`order_gift_score`,
+			`activity_gift_score`)
 		values(
 			#{mmcrId},
 			#{userId},
@@ -179,7 +185,8 @@
 			#{scoreLimit},
 			#{beforeScore},
 			#{afterScore},
-			#{orderGiftScore})
+			#{orderGiftScore},
+			#{activityGiftScore})
 	</insert>
 
 	<update id="update" parameterType="com.kmall.admin.entity.vip.Mall2MemberConsumptionRecordsEntity">
@@ -204,6 +211,8 @@
 			<if test="beforeScore != null">`before_score` = #{beforeScore},</if>
 			<if test="afterScore != null">`after_score` = #{afterScore},</if>
 			<if test="orderGiftScore != null">`order_gift_score` = #{orderGiftScore}</if>
+			<if test="activityGiftScore != null">`activity_gift_score` = #{activityGiftScore}</if>
+
 		</set>
 		where mmcr_id = #{mmcrId}
 	</update>

+ 1 - 0
kmall-admin/src/main/resources/mybatis/mapper/vip/Mall2PointsRulesDao.xml

@@ -156,6 +156,7 @@
     	from mall2_points_rules mpr
     	left join mall2_points_rules_detil mprs on mpr.mpr_id = mprs.father_id
     	where mprs.id is not null and mpr.is_valid = 0 and mpr.points_begin_time &lt;= #{nowTime} and mpr.points_end_time &gt;= #{nowTime}
+    	and mprs.points_store_id = #{pointsStoreId}
     	order by mpr.points_type desc
 	</select>