Kaynağa Gözat

Merge remote-tracking branch 'upsteam/master'

zhh 3 yıl önce
ebeveyn
işleme
726de06697

+ 42 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongMemberScoreChangeDetailRecordDao.java

@@ -0,0 +1,42 @@
+package com.kmall.admin.dao.haikong;
+
+import com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeDetailRecordEntity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 同步会员系统积分,订单详情
+ * @author lhm
+ * @createDate 2021-12-09
+ */
+public interface HaiKongMemberScoreChangeDetailRecordDao {
+
+    /**
+     * 根据订单编号查询详情
+     * @param orderSn   订单编号
+     * @return
+     */
+    List<HaiKongMemberScoreChangeDetailRecordEntity> queryListByOrderSn(@Param("orderSn") String orderSn);
+
+    /**
+     * 新增
+     * @param haiKongMemberScoreChangeDetailRecordEntity    实体
+     * @return  结果
+     */
+    int save(HaiKongMemberScoreChangeDetailRecordEntity haiKongMemberScoreChangeDetailRecordEntity);
+
+    /**
+     * 根据订单编号批量删除详情
+     * @param orderSn   订单编号
+     * @return          结果
+     */
+    int deleteBatchByOrderSn(@Param("orderSn") String orderSn);
+
+    /**
+     * 批量新增
+     * @param entities  实体集合
+     * @return          结果
+     */
+    int saveBatch(List<HaiKongMemberScoreChangeDetailRecordEntity> entities);
+}

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

@@ -0,0 +1,128 @@
+package com.kmall.admin.entity.haikong;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 积分变动明细记录
+ * @author lhm
+ * @createDate 2021-12-09
+ */
+public class HaiKongMemberScoreChangeDetailRecordEntity {
+
+    private Integer id;
+
+    private String orderSn;
+
+    private String productBarcode;
+
+    private String sku;
+
+    private BigDecimal retailPrice;
+
+    private BigDecimal actualPrice;
+
+    private Integer sellVolume;
+
+    private Integer deductionScore;
+
+    private Date createTime;
+
+    private Date modifyTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getOrderSn() {
+        return orderSn;
+    }
+
+    public void setOrderSn(String orderSn) {
+        this.orderSn = orderSn;
+    }
+
+    public String getProductBarcode() {
+        return productBarcode;
+    }
+
+    public void setProductBarcode(String productBarcode) {
+        this.productBarcode = productBarcode;
+    }
+
+    public String getSku() {
+        return sku;
+    }
+
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    public BigDecimal getRetailPrice() {
+        return retailPrice;
+    }
+
+    public void setRetailPrice(BigDecimal retailPrice) {
+        this.retailPrice = retailPrice;
+    }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+
+    public Integer getSellVolume() {
+        return sellVolume;
+    }
+
+    public void setSellVolume(Integer sellVolume) {
+        this.sellVolume = sellVolume;
+    }
+
+    public Integer getDeductionScore() {
+        return deductionScore;
+    }
+
+    public void setDeductionScore(Integer deductionScore) {
+        this.deductionScore = deductionScore;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getModifyTime() {
+        return modifyTime;
+    }
+
+    public void setModifyTime(Date modifyTime) {
+        this.modifyTime = modifyTime;
+    }
+
+    @Override
+    public String toString() {
+        return "HaiKongMemberScoreChangeDetailRecordEntity{" +
+                "id=" + id +
+                ", orderSn='" + orderSn + '\'' +
+                ", productBarcode='" + productBarcode + '\'' +
+                ", sku='" + sku + '\'' +
+                ", retailPrice=" + retailPrice +
+                ", actualPrice=" + actualPrice +
+                ", sellVolume=" + sellVolume +
+                ", deductionScore=" + deductionScore +
+                ", createTime=" + createTime +
+                ", modifyTime=" + modifyTime +
+                '}';
+    }
+}

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

@@ -119,6 +119,11 @@ public class Mall2MemberConsumptionRecordsEntity implements Serializable {
     private Integer afterScore;
 
     /**
+     * 订单赠送积分
+     */
+    private Integer orderGiftScore;
+
+    /**
      * 设置:主键
      */
     public void setMmcrId(Integer mmcrId) {
@@ -373,4 +378,12 @@ public class Mall2MemberConsumptionRecordsEntity implements Serializable {
     public void setChange_id(String change_id) {
         this.change_id = change_id;
     }
+
+    public Integer getOrderGiftScore() {
+        return orderGiftScore;
+    }
+
+    public void setOrderGiftScore(Integer orderGiftScore) {
+        this.orderGiftScore = orderGiftScore;
+    }
 }

+ 5 - 1
kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java

@@ -34,7 +34,11 @@ public class Constants {
         /**
          * 优惠券活动
          */
-        YHQ("yhq", "优惠券", 5)
+        YHQ("yhq", "优惠券", 5),
+        /**
+         * 积分抵扣
+         */
+        JFDK("jfdk", "积分抵扣", 99),
         ;
 
         private final String topicCode;

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberOrderSyncResendTask.java

@@ -41,7 +41,7 @@ public class MemberOrderSyncResendTask {
     private HaiKongMemberOrderSyncResendService haiKongMemberOrderSyncResendService;
 
     //    @Scheduled(cron = "0 55 0/2 * * ?")
-    @Scheduled(cron = "0/20 0/2 * * * ?")
+//    @Scheduled(cron = "0/20 0/2 * * * ?")
     public void resend() {
         // 查询等待发送和发送失败的记录
         List<HaiKongMemberOrderSyncResendEntity> haiKongMemberOrderSyncResendEntities = haiKongMemberOrderSyncResendService.queryListByResendStatus();

+ 146 - 12
kmall-admin/src/main/java/com/kmall/admin/haikong/vo/PointsRulesAndDetailVO.java

@@ -3,6 +3,8 @@ package com.kmall.admin.haikong.vo;
 import com.kmall.admin.dto.Mall2RulesDto;
 import com.kmall.admin.entity.vip.Mall2PointsRulesEntity;
 
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -12,31 +14,163 @@ import java.util.List;
  */
 public class PointsRulesAndDetailVO {
 
-    private Mall2PointsRulesEntity mall2PointsRulesEntity;
+    private Integer mprId;
 
-    private List<Mall2RulesDto> mall2PointsRulesDetailList;
+    private Integer pointsType;
 
-    public Mall2PointsRulesEntity getMall2PointsRulesEntity() {
-        return mall2PointsRulesEntity;
+    private Date pointsBeginTime;
+
+    private Date pointsEndTime;
+
+    private String isValid;
+
+    private BigDecimal ratio;
+
+    private Integer id;
+
+    private Integer fatherId;
+
+    private String pointRulesType;
+
+    private String pointsDetailName;
+
+    private String pointsDetailNameId;
+
+    private String pointsStoreName;
+
+    private String pointsStoreId;
+
+    private String remark;
+
+    public Integer getMprId() {
+        return mprId;
+    }
+
+    public void setMprId(Integer mprId) {
+        this.mprId = mprId;
+    }
+
+    public Integer getPointsType() {
+        return pointsType;
+    }
+
+    public void setPointsType(Integer pointsType) {
+        this.pointsType = pointsType;
+    }
+
+    public Date getPointsBeginTime() {
+        return pointsBeginTime;
+    }
+
+    public void setPointsBeginTime(Date pointsBeginTime) {
+        this.pointsBeginTime = pointsBeginTime;
+    }
+
+    public Date getPointsEndTime() {
+        return pointsEndTime;
+    }
+
+    public void setPointsEndTime(Date pointsEndTime) {
+        this.pointsEndTime = pointsEndTime;
+    }
+
+    public String getIsValid() {
+        return isValid;
+    }
+
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
+
+    public BigDecimal getRatio() {
+        return ratio;
+    }
+
+    public void setRatio(BigDecimal ratio) {
+        this.ratio = ratio;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getFatherId() {
+        return fatherId;
+    }
+
+    public void setFatherId(Integer fatherId) {
+        this.fatherId = fatherId;
+    }
+
+    public String getPointRulesType() {
+        return pointRulesType;
+    }
+
+    public void setPointRulesType(String pointRulesType) {
+        this.pointRulesType = pointRulesType;
+    }
+
+    public String getPointsDetailName() {
+        return pointsDetailName;
+    }
+
+    public void setPointsDetailName(String pointsDetailName) {
+        this.pointsDetailName = pointsDetailName;
+    }
+
+    public String getPointsDetailNameId() {
+        return pointsDetailNameId;
+    }
+
+    public void setPointsDetailNameId(String pointsDetailNameId) {
+        this.pointsDetailNameId = pointsDetailNameId;
+    }
+
+    public String getPointsStoreName() {
+        return pointsStoreName;
+    }
+
+    public void setPointsStoreName(String pointsStoreName) {
+        this.pointsStoreName = pointsStoreName;
+    }
+
+    public String getPointsStoreId() {
+        return pointsStoreId;
     }
 
-    public void setMall2PointsRulesEntity(Mall2PointsRulesEntity mall2PointsRulesEntity) {
-        this.mall2PointsRulesEntity = mall2PointsRulesEntity;
+    public void setPointsStoreId(String pointsStoreId) {
+        this.pointsStoreId = pointsStoreId;
     }
 
-    public List<Mall2RulesDto> getMall2PointsRulesDetailList() {
-        return mall2PointsRulesDetailList;
+    public String getRemark() {
+        return remark;
     }
 
-    public void setMall2PointsRulesDetailList(List<Mall2RulesDto> mall2PointsRulesDetailList) {
-        this.mall2PointsRulesDetailList = mall2PointsRulesDetailList;
+    public void setRemark(String remark) {
+        this.remark = remark;
     }
 
     @Override
     public String toString() {
         return "PointsRulesAndDetailVO{" +
-                "mall2PointsRulesEntity=" + mall2PointsRulesEntity +
-                ", mall2PointsRulesDetailList=" + mall2PointsRulesDetailList +
+                "mprId=" + mprId +
+                ", pointsType='" + pointsType + '\'' +
+                ", pointsBeginTime=" + pointsBeginTime +
+                ", pointsEndTime=" + pointsEndTime +
+                ", isValid='" + isValid + '\'' +
+                ", ratio=" + ratio +
+                ", id=" + id +
+                ", fatherId=" + fatherId +
+                ", pointRulesType='" + pointRulesType + '\'' +
+                ", pointsDetailName='" + pointsDetailName + '\'' +
+                ", pointsDetailNameId='" + pointsDetailNameId + '\'' +
+                ", pointsStoreName='" + pointsStoreName + '\'' +
+                ", pointsStoreId='" + pointsStoreId + '\'' +
+                ", remark='" + remark + '\'' +
                 '}';
     }
 }

+ 14 - 3
kmall-admin/src/main/java/com/kmall/admin/haikong/vo/QueryGoodsVO.java

@@ -156,6 +156,8 @@ public class QueryGoodsVO {
      */
     private String productId;
 
+    private Integer deductionScore;
+
 
     public String getProdBarcode() {
         return prodBarcode;
@@ -389,13 +391,21 @@ public class QueryGoodsVO {
         this.productId = productId;
     }
 
+    public Integer getDeductionScore() {
+        return deductionScore;
+    }
+
+    public void setDeductionScore(Integer deductionScore) {
+        this.deductionScore = deductionScore;
+    }
+
     @Override
     public String toString() {
         return "QueryGoodsVO{" +
-                "prodBarcode='" + prodBarcode + '\'' +
+                "id=" + id +
+                ", prodBarcode='" + prodBarcode + '\'' +
                 ", sku='" + sku + '\'' +
                 ", merchSn='" + merchSn + '\'' +
-                ", id=" + id +
                 ", thirdPartyMerchCode='" + thirdPartyMerchCode + '\'' +
                 ", storeId=" + storeId +
                 ", sellVolume=" + sellVolume +
@@ -417,10 +427,11 @@ public class QueryGoodsVO {
                 ", ciqProdModel='" + ciqProdModel + '\'' +
                 ", toBeRestored=" + toBeRestored +
                 ", exitRegionNumber=" + exitRegionNumber +
-                ", productId=" + productId +
                 ", totalPrice=" + totalPrice +
                 ", lastSaleTime=" + lastSaleTime +
                 ", activity='" + activity + '\'' +
+                ", productId='" + productId + '\'' +
+                ", deductionScore=" + deductionScore +
                 '}';
     }
 

+ 42 - 0
kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongMemberScoreChangeDetailRecordService.java

@@ -0,0 +1,42 @@
+package com.kmall.admin.service.haikong;
+
+import com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeDetailRecordEntity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author lhm
+ * @createDate 2021-12-09
+ */
+public interface HaiKongMemberScoreChangeDetailRecordService {
+
+    /**
+     * 根据订单编号查询详情
+     * @param orderSn   订单编号
+     * @return
+     */
+    List<HaiKongMemberScoreChangeDetailRecordEntity> queryListByOrderSn(@Param("orderSn") String orderSn);
+
+    /**
+     * 新增
+     * @param haiKongMemberScoreChangeDetailRecordEntity    实体
+     * @return  结果
+     */
+    int save(HaiKongMemberScoreChangeDetailRecordEntity haiKongMemberScoreChangeDetailRecordEntity);
+
+    /**
+     * 根据订单编号批量删除详情
+     * @param orderSn   订单编号
+     * @return          结果
+     */
+    int deleteBatchByOrderSn(@Param("orderSn") String orderSn);
+
+    /**
+     * 批量新增
+     * @param entities  实体集合
+     * @return          结果
+     */
+    int saveBatch(List<HaiKongMemberScoreChangeDetailRecordEntity> entities);
+
+}

+ 155 - 94
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -23,6 +23,7 @@ import com.kmall.admin.dao.vip.Mall2PointsRulesDao;
 import com.kmall.admin.dto.*;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.haikong.HaiKongMemberOrderSyncResendEntity;
+import com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeDetailRecordEntity;
 import com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeRecordEntity;
 import com.kmall.admin.entity.haikong.IntegralGoBackEntity;
 import com.kmall.admin.entity.mk.MkActivitiesEntity;
@@ -47,6 +48,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.HaiKongMemberOrderSyncResendService;
+import com.kmall.admin.service.haikong.HaiKongMemberScoreChangeDetailRecordService;
 import com.kmall.admin.service.haikong.HaiKongMemberScoreChangeRecordService;
 import com.kmall.admin.service.mk.MkActivitiesScoreService;
 import com.kmall.admin.service.mk.MkActivitiesService;
@@ -252,6 +254,7 @@ public class OrderServiceImpl implements OrderService {
      */
     @Autowired
     private MkActivitiesPromotionService mkActivitiesPromotionService;
+
     /**
      * 日志记录
      */
@@ -269,6 +272,13 @@ public class OrderServiceImpl implements OrderService {
      */
     @Autowired
     private HaiKongMemberScoreChangeRecordService haiKongMemberScoreChangeRecordService;
+
+    /**
+     * 会员积分变动商品详情
+     */
+    @Autowired
+    private HaiKongMemberScoreChangeDetailRecordService haiKongMemberScoreChangeDetailRecordService;
+
     /**
      * 接口重发信息
      */
@@ -2209,6 +2219,7 @@ public class OrderServiceImpl implements OrderService {
                 queryGoodsVo.setDisCountedPrice(new BigDecimal(String.valueOf(map.get("discountedPrice"))));
                 queryGoodsVo.setTotalPrice(new BigDecimal(String.valueOf(map.get("actualPaymentAmount"))));
                 queryGoodsVo.setActivity((String) map.get("activity"));
+                queryGoodsVo.setDeductionScore((Integer) map.get("deductionScore"));
                 queryGoodsVOList.add(queryGoodsVo);
             });
             // 将在循环中查询数据库改为一次性查询
@@ -2307,6 +2318,7 @@ public class OrderServiceImpl implements OrderService {
                     goodsEntity.setActualPaymentAmount(goodsDto.getTotalPrice());
                     goodsEntity.setSellVolume(goodsDto.getSellVolume());
                     goodsEntity.setActivity(goodsDto.getActivity());
+                    goodsEntity.setStoreId(storeId);
                     goodsEntities.add(goodsEntity);
                 } else {
                     // sku不存在
@@ -2321,7 +2333,7 @@ public class OrderServiceImpl implements OrderService {
 
             String openId = (String) param.get("openId");
             String memberCode = (String) param.get("memberCode");
-            UserEntity userEntity = userDao.queryByOpenId(openId);
+            UserEntity userEntity = userDao.queryByMobile((String) userInfo.get("customPhone"));
             if (userEntity == null) {
                 // 保存用户信息
                 userEntity = new UserEntity();
@@ -2473,7 +2485,6 @@ public class OrderServiceImpl implements OrderService {
                 saleRecordEntity.setOrderSn(order.getOrder_sn());
                 saleRecordEntity.setSallerId(userId + "");
                 saleRecordEntity.setSalesTime(new Date());
-//                saleRecordEntity.setDiscountId(topicId + "");
                 saleRecordEntity.setCreateTime(new Date());
                 saleRecordDao.save(saleRecordEntity);
             }
@@ -2482,87 +2493,107 @@ public class OrderServiceImpl implements OrderService {
             Integer userEntityId = userEntity.getId();
             // 总的积分:基础积分
             AtomicReference<Integer> memberScore = new AtomicReference<>(0);
-            List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList = mall2PointsRulesService.queryListByTime(new Date()).stream().sorted().collect(Collectors.toList());
-            // 商品map,key===>sku value===>金额
-            Map<String, BigDecimal> goodsMap = goodsEntities.stream().collect(Collectors.toMap(GoodsEntity::getSku, GoodsEntity::getActualPaymentAmount, (k1, k2) -> k2));
-            // 订单全部的sku
-            Set<String> goodsSkuList = goodsMap.keySet();
-            // 保存不在按商品计算积分的sku
-            List<String> nonGoodsSkuList = new ArrayList<>();
-            // 保存不在按分类计算积分的sku,剩下的就按门店计算,如果门店积分规则没有设置。。。。
-            List<String> nonCategorySkuList = new ArrayList<>();
-            pointsRulesAndDetailVOList.forEach(pointsRulesAndDetailVO -> {
-                Mall2PointsRulesEntity mall2PointsRulesEntity = pointsRulesAndDetailVO.getMall2PointsRulesEntity();
-                List<Mall2RulesDto> mall2PointsRulesDetailList = pointsRulesAndDetailVO.getMall2PointsRulesDetailList();
-                List<String> skuList = mall2PointsRulesDetailList.stream().map(Mall2RulesDto::getPointsRulesName).collect(Collectors.toList());
-                Integer pointsType = mall2PointsRulesEntity.getPointsType();
-                // 积分比例
-                BigDecimal ratio = mall2PointsRulesEntity.getRatio();
-                if (pointsType.equals(Constants.MemberScoreRulesEnum.TWO.getCode())) {
-                    // 商品,优先级最高,查询
-                    goodsSkuList.forEach(sku -> {
-                        if (skuList.contains(sku)) {
+            // 无会员码,不参与积分赠送
+            if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
+                List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList = mall2PointsRulesService.queryListByTime(new Date());
+                // 商品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
+                Set<String> goodsSkuList = goodsMap.keySet();
+                // 订单全部商品的分类列表,只有二级分类才能设置生成规则
+                Set<Integer> categorySet = goodsEntities.stream().map(GoodsEntity::getCategoryId).collect(Collectors.toSet());
+                pointsRulesAndDetailVOList.forEach(pointsRulesAndDetailVO -> {
+                    Integer pointsType = pointsRulesAndDetailVO.getPointsType();
+                    // 可以是sku、门店id、分类id
+                    String pointsDetailNameId = pointsRulesAndDetailVO.getPointsDetailNameId();
+                    // 积分比例
+                    BigDecimal ratio = pointsRulesAndDetailVO.getRatio();
+                    if (pointsType.equals(Constants.MemberScoreRulesEnum.TWO.getCode())) {
+                        // 商品,优先级最高,查询
+                        if (goodsSkuList.contains(pointsDetailNameId)) {
                             // 商品积分生成规则包含这个sku
                             // 订单中该sku的总金额
-                            BigDecimal money = goodsMap.get(sku);
-                            if (ratio.compareTo(BigDecimal.ZERO) != 0) {
+                            BigDecimal money = goodsMap.get(pointsDetailNameId);
+                            if (ratio.compareTo(BigDecimal.ZERO) > 0) {
                                 // 算出所积的分
                                 memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
                             } else {
                                 // 积分比例设置为0,该商品不记积分。
-                                LOGGER.info("商品SKU:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", sku, ratio);
+                                LOGGER.info("商品SKU:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
                             }
-                        } else {
-                            // 不包含sku,则需要判断是否有其他规则
-                            nonGoodsSkuList.add(sku);
+                            goodsDataMap.remove(pointsDetailNameId);
                         }
-                    });
 
-                }
-                if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.getCode())) {
-                    // 商品类别
-                    nonGoodsSkuList.forEach(sku -> {
-                        if (nonGoodsSkuList.contains(sku)) {
-                            // 订单中该sku的总金额
-                            BigDecimal money = goodsMap.get(sku);
-                            if (ratio.compareTo(BigDecimal.ZERO) != 0) {
-                                // 算出所积的分
-                                memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
+                    }
+                    if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.getCode())) {
+                        Collection<GoodsEntity> goodsEntityCollection = goodsDataMap.values();
+                        goodsEntityCollection.forEach(goodsEntity -> {
+                            // 商品类别
+                            Integer categoryId = goodsEntity.getCategoryId();
+                            String sku = goodsEntity.getSku();
+                            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());
+                                    } else {
+                                        // 积分比例设置为0,该商品不记积分。
+                                        LOGGER.info("分类:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                    }
+                                    goodsDataMap.remove(sku);
+                                }
                             }
-                        } else {
-                            nonCategorySkuList.add(sku);
-                        }
-                    });
-                }
-                if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
-                    // 门店
-                    nonCategorySkuList.forEach(sku -> {
-                        if (nonCategorySkuList.contains(sku)) {
-                            // 订单中该sku的总金额
-                            BigDecimal money = goodsMap.get(sku);
-                            if (ratio.compareTo(BigDecimal.ZERO) != 0) {
-                                // 算出所积的分
-                                memberScore.set(money.multiply(ratio).multiply(new BigDecimal(memberScore.get())).intValue());
+                        });
+                    }
+                    if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
+                        // 门店
+                        Collection<GoodsEntity> goodsEntityCollection = goodsDataMap.values();
+                        goodsEntityCollection.forEach(goodsEntity -> {
+                            Integer storeId1 = goodsEntity.getStoreId();
+                            String sku = goodsEntity.getSku();
+                            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());
+                                } else {
+                                    // 积分比例设置为0,该商品不记积分。
+                                    LOGGER.info("门店:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                }
                             }
-                        }
-                    });
+                        });
+                    }
+                });
+
+                // 增加该会员的积分
+                Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntityId);
+                if (memberPointsEntity == null) {
+                    memberPointsEntity = new Mall2MemberPointsEntity();
+                    memberPointsEntity.setUserId(userEntityId + "");
+                    memberPointsEntity.setPoints(memberScore.get());
+                    memberPointsEntity.setCreaterSn(userId + "");
+                    memberPointsEntity.setCreateTime(new Date());
+                    memberPointsDao.save(memberPointsEntity);
+                } else {
+                    memberPointsEntity.setPoints(memberScore.get() + memberPointsEntity.getPoints());
+                    memberPointsEntity.setModerSn(userId + "");
+                    memberPointsEntity.setModTime(new Date());
+                    Integer point = 0;
+                    if (Objects.isNull(memberPointsEntity.getPoints())) {
+                        point = memberScore.get();
+                    } else {
+                        point = memberPointsEntity.getPoints() + memberScore.get();
+                    }
+                    memberPointsEntity.setPoints(point);
+                    memberPointsDao.update(memberPointsEntity);
                 }
-            });
-            // 增加该会员的积分
-            Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntityId);
-            if (memberPointsEntity == null) {
-                memberPointsEntity = new Mall2MemberPointsEntity();
-                memberPointsEntity.setUserId(userEntityId + "");
-                memberPointsEntity.setPoints(memberScore.get());
-                memberPointsEntity.setCreaterSn(userId + "");
-                memberPointsEntity.setCreateTime(new Date());
-                memberPointsDao.save(memberPointsEntity);
-            } else {
-                memberPointsEntity.setPoints(memberScore.get() + memberPointsEntity.getPoints());
-                memberPointsEntity.setModerSn(userId + "");
-                memberPointsEntity.setModTime(new Date());
-                memberPointsDao.update(memberPointsEntity);
             }
+
             // 增加该会员的消费记录
             Mall2MemberConsumptionRecordsEntity consumptionRecords = new Mall2MemberConsumptionRecordsEntity();
             consumptionRecords.setUserId(userEntity.getId() + "");
@@ -2572,34 +2603,30 @@ public class OrderServiceImpl implements OrderService {
             // 积分消费记录
             Integer beforeScoreInteger = (Integer) param.get("beforeScore");
             Integer afterScoreStrInteger = (Integer) param.get("afterScore");
-            int deductionScore = (Integer) param.get("deductionScore");
+            int deductionScore = org.springframework.util.StringUtils.isEmpty((String) param.get("deductionScore")) ? 0 : Integer.parseInt((String) param.get("deductionScore"));
             String memberPhone = String.valueOf(param.get("memberPhone"));
-            BigDecimal scoreDeductionPrice = BigDecimal.valueOf((Integer) param.get("scoreDeductionPrice"));
+            BigDecimal scoreDeductionPrice = new BigDecimal(org.springframework.util.StringUtils.isEmpty((String) param.get("scoreDeductionPrice")) ? "0" : (String) param.get("scoreDeductionPrice"));
             consumptionRecords.setBeforeScore(beforeScoreInteger);
             consumptionRecords.setAfterScore(afterScoreStrInteger);
-            // TODO 需要新增字段:订单赠送积分
             consumptionRecords.setOrderTotalPrice(order.getActual_price());
             consumptionRecords.setScoreDeductionPrice(scoreDeductionPrice);
             consumptionRecords.setMemberCode(memberCode);
             consumptionRecords.setMemberPhone(memberPhone);
+            consumptionRecords.setOrderGiftScore(memberScore.get());
             consumptionRecords.setDeductionScore(deductionScore);
             consumptionRecords.setCreaterSn(userId + "");
             consumptionRecords.setCreateTime(new Date());
             memberConsumptionRecordsDao.save(consumptionRecords);
 
-            // 同步会员订单消费记录
-            /*if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
+            if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
+                // 同步会员订单消费记录
                 syncMemberConsumeRecord(memberPhone, order, deductionScore);
+                syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
+                // 积分变动接口,下单扣减
+                Integer score = memberScore.get();
+                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
             }
 
-            // 积分变动接口,下单扣减
-            if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
-                syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
-                // 下单赠送,一元积一分
-                Integer score = order.getActual_price().intValue();
-                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
-            }*/
-
             // 生成取票码
             PickUpCodeEntity pickUpCodeEntity = new PickUpCodeEntity();
             pickUpCodeEntity.setOrderSn(order.getOrder_sn());
@@ -3004,7 +3031,7 @@ public class OrderServiceImpl implements OrderService {
             haiKongMemberOrderSyncResendService.save(haiKongMemberOrderSyncResendEntity);
             LOGGER.info("请求会员系统同步消费订单接口成功!响应数据:{}", memberOrderSyncResponseJson);
         } catch (Exception e) {
-            LOGGER.error("请求会员系统同步消费订单接口失败!准备新增发送失败记录,等待重发!异常信息:", e);
+            LOGGER.error("请求会员系统同步消费订单接口出现异常!准备新增发送失败记录,等待重发!异常信息:", e);
             // 没有请求成功,写表,重发
             haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
             haiKongMemberOrderSyncResendService.save(haiKongMemberOrderSyncResendEntity);
@@ -3015,9 +3042,12 @@ public class OrderServiceImpl implements OrderService {
      * 同步会员积分变动记录
      * @param openId    会员openid
      * @param order     订单信息
+     * @param changeEvent 变动事件
+     * @param changeReason 变动原因
+     * @param goodsList 商品详情
      * @param score     变动积分
      */
-    private void syncMemberScoreChangeRecord(String openId, OrderVo order, Integer score, String changeReason, String changeEvent) {
+    private void syncMemberScoreChangeRecord(String openId, OrderVo order, Integer score, String changeReason, List<QueryGoodsVO> goodsList, String changeEvent) {
         HaiKongMemberScoreChangeRecordEntity haiKongMemberScoreChangeRecordEntity = new HaiKongMemberScoreChangeRecordEntity();
         MemberScoreChangeDTO memberScoreChangeDTO = new MemberScoreChangeDTO();
         String changeId = UUID.randomUUID(true).toString();
@@ -3046,10 +3076,23 @@ public class OrderServiceImpl implements OrderService {
             haiKongMemberScoreChangeRecordService.save(haiKongMemberScoreChangeRecordEntity);
             LOGGER.info("请求会员系统积分变动接口成功!响应数据:{}", changeMemberScoreResponseJson);
         } catch (Exception e) {
+            LOGGER.error("请求会员系统积分变动接口出现异常!准备新增发送失败记录,等待重发!异常信息:", e);
             // 失败重发
             haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
             haiKongMemberScoreChangeRecordService.save(haiKongMemberScoreChangeRecordEntity);
         }
+        List<HaiKongMemberScoreChangeDetailRecordEntity> recordEntityList = goodsList.stream().map(goodsEntity -> {
+            HaiKongMemberScoreChangeDetailRecordEntity entity = new HaiKongMemberScoreChangeDetailRecordEntity();
+            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.setDeductionScore(goodsEntity.getDeductionScore());
+            return entity;
+        }).collect(Collectors.toList());
+        haiKongMemberScoreChangeDetailRecordService.saveBatch(recordEntityList);
     }
 
     private boolean orderQuery(OrderVo order, OrderProcessRecordEntity processRecordEntity) {
@@ -4009,7 +4052,16 @@ public class OrderServiceImpl implements OrderService {
         // 与积分抵扣互斥的sku
         List<String> promotionSkuList = new ArrayList<>();
         // 判断活动类型并排序,再确定购物栏中商品是否满足活动条件
-        mkActivitiesEntityList.stream().sorted().forEach(mkActivitiesEntity -> {
+        mkActivitiesEntityList.stream().filter(mkActivitiesEntity -> {
+            if (!Constants.ActivityTopicEnum.JFDK.getTopicCode().equals(mkActivitiesEntity.getMkaTopic())) {
+                return true;
+            }
+            if (Objects.isNull(mkActivitiesEntity.getPriority())) {
+                LOGGER.error("活动:【{}】,活动ID:【{}】未设置优先级!请先设置优先级!", mkActivitiesEntity.getMkaTopic(), mkActivitiesEntity.getMkaId());
+                throw new ServiceException(String.format("活动:【%s】,活动ID:【%s】未设置优先级!请先设置优先级!", mkActivitiesEntity.getMkaTopic(), mkActivitiesEntity.getMkaId()));
+            }
+            return false;
+        }).sorted().forEach(mkActivitiesEntity -> {
             String mkaStoreId = mkActivitiesEntity.getMkaStoreId();
             Long mkaId = mkActivitiesEntity.getMkaId();
             String mkaTopic = mkActivitiesEntity.getMkaTopic();
@@ -4047,7 +4099,7 @@ public class OrderServiceImpl implements OrderService {
                             BeanUtils.copyProperties(goodsDetailsDto, goodsEntity);
                             goodsDetailsDto.setActualPaymentAmount(activityPrice);
                             goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
-                            goodsDetailsDto.setActivity("限时促销");
+                            goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.LSCX.getTopicName());
                             goodsDetailsDto.setDiscountedPrice(retailPrice.subtract(activityPrice));
                             goodsDetailsDtos.add(goodsDetailsDto);
                             activityFlag.set(false);
@@ -4088,7 +4140,7 @@ public class OrderServiceImpl implements OrderService {
                                     BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity, goodsEntity.getRetailPrice(), goodsService).setScale(3, RoundingMode.HALF_UP);
                                     goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
                                     goodsDetailsDto.setActualPaymentAmount(BigDecimal.ZERO);
-                                    goodsDetailsDto.setActivity("满赠商品");
+                                    goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.MZ.getTopicName());
                                     goodsDetailsDto.setGiftNumber(mkActivitiesFullGiftEntity.getGiftNumber());
                                     goodsDetailsDto.setDiscountedPrice(goodsEntity.getRetailPrice());
                                     // 添加进商品详情列表
@@ -4120,7 +4172,7 @@ public class OrderServiceImpl implements OrderService {
                                     BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity, goodsEntity.getRetailPrice(), goodsService).setScale(3, RoundingMode.HALF_UP);
                                     goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
                                     goodsDetailsDto.setActualPaymentAmount(BigDecimal.ZERO);
-                                    goodsDetailsDto.setActivity("满赠商品");
+                                    goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.MZ.getTopicName());
                                     goodsDetailsDto.setGiftNumber(mkActivitiesFullGiftEntity.getGiftNumber());
                                     goodsDetailsDto.setDiscountedPrice(goodsEntity.getRetailPrice());
                                     // 添加进商品详情列表
@@ -4177,7 +4229,7 @@ public class OrderServiceImpl implements OrderService {
                                     BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity, goodsEntity.getRetailPrice(), goodsService).setScale(3, RoundingMode.HALF_UP);
                                     goodsDetailsDto.setActualPaymentAmount(discountAfterPrice);
                                     goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
-                                    goodsDetailsDto.setActivity("优惠券活动");
+                                    goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.YHQ.getTopicName());
                                     goodsDetailsDto.setDiscountedPrice(retailPrice.subtract(discountAfterPrice));
                                     goodsDetailsDtos.add(goodsDetailsDto);
                                     activityFlag.set(false);
@@ -4205,7 +4257,7 @@ public class OrderServiceImpl implements OrderService {
                                     BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity, goodsEntity.getRetailPrice(), goodsService).setScale(3, RoundingMode.HALF_UP);
                                     goodsDetailsDto.setActualPaymentAmount(discountAfterPrice);
                                     goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
-                                    goodsDetailsDto.setActivity("优惠券活动");
+                                    goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.YHQ.getTopicName());
                                     goodsDetailsDto.setDiscountedPrice(retailPrice.subtract(discountAfterPrice));
                                     goodsDetailsDtos.add(goodsDetailsDto);
                                     activityFlag.set(false);
@@ -4234,7 +4286,7 @@ public class OrderServiceImpl implements OrderService {
                                         BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity, goodsEntity.getRetailPrice(), goodsService).setScale(3, RoundingMode.HALF_UP);
                                         goodsDetailsDto.setActualPaymentAmount(discountAfterPrice);
                                         goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
-                                        goodsDetailsDto.setActivity("优惠券活动");
+                                        goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.YHQ.getTopicName());
                                         goodsDetailsDto.setDiscountedPrice(retailPrice.subtract(discountAfterPrice));
                                         goodsDetailsDtos.add(goodsDetailsDto);
                                         activityFlag.set(false);
@@ -4376,7 +4428,16 @@ public class OrderServiceImpl implements OrderService {
                 int scoreMayDeductionPrice = (int) (score / scoreLimit);
                 BigDecimal scoreMayDeductionPriceDecimal = new BigDecimal(scoreMayDeductionPrice);
                 // 过滤掉参与过限时特价并且与积分抵扣互斥的sku,以及未参加积分抵扣活动的sku
-                goodsDetailsDtos = goodsDetailsDtos.stream().filter(goodsDetailsDto -> !promotionSkuList.contains(goodsDetailsDto.getSku()) && scoreDeductionSkuList.contains(goodsDetailsDto.getSku())).collect(Collectors.toList());
+                goodsDetailsDtos = goodsDetailsDtos.stream().filter(goodsDetailsDto -> {
+                    if (!promotionSkuList.contains(goodsDetailsDto.getSku()) && scoreDeductionSkuList.contains(goodsDetailsDto.getSku())) {
+                        return true;
+                    }
+                    // 满赠商品不参与积分分摊计算
+                    if (!Constants.ActivityTopicEnum.MZ.getTopicName().equals(goodsDetailsDto.getActivity())) {
+                        return true;
+                    }
+                    return false;
+                }).collect(Collectors.toList());
                 // 总分摊积分
                 BigDecimal shareScore = BigDecimal.ZERO;
                 BigDecimal scoreIntegerDecimal = BigDecimal.valueOf(scoreInteger);
@@ -4386,7 +4447,7 @@ public class OrderServiceImpl implements OrderService {
                     GoodsDetailsDto goodsDetailsDto = goodsDetailsDtos.get(i);
                     // 抵扣积分分摊
                     int index = size - 1;
-                    goodsDetailsDto.setActivity("积分抵扣");
+                    goodsDetailsDto.setActivity(org.springframework.util.StringUtils.isEmpty(goodsDetailsDto.getActivity()) ? "积分抵扣" : goodsDetailsDto.getActivity() + ",积分抵扣");
                     String sku = goodsDetailsDto.getGoodsSn();
                     BigDecimal scoreLimitDecimal = skuScoreLimitMap.get(sku);
                     String prodBarcode = goodsDetailsDto.getProdBarcode();

+ 73 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaiKongMemberScoreChangeDetailRecordServiceImpl.java

@@ -0,0 +1,73 @@
+package com.kmall.admin.service.impl.haikong;
+
+import com.kmall.admin.dao.haikong.HaiKongMemberScoreChangeDetailRecordDao;
+import com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeDetailRecordEntity;
+import com.kmall.admin.service.haikong.HaiKongMemberScoreChangeDetailRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author lhm
+ * @createDate 2021-12-09
+ */
+@Service("haiKongMemberScoreChangeDetailRecordServiceImpl")
+public class HaiKongMemberScoreChangeDetailRecordServiceImpl implements HaiKongMemberScoreChangeDetailRecordService {
+
+    @Autowired
+    private HaiKongMemberScoreChangeDetailRecordDao haiKongMemberScoreChangeDetailRecordDao;
+
+    /**
+     * 根据订单编号查询详情
+     *
+     * @param orderSn 订单编号
+     * @return
+     */
+    @Override
+    public List<HaiKongMemberScoreChangeDetailRecordEntity> queryListByOrderSn(String orderSn) {
+        return haiKongMemberScoreChangeDetailRecordDao.queryListByOrderSn(orderSn);
+    }
+
+    /**
+     * 新增
+     *
+     * @param haiKongMemberScoreChangeDetailRecordEntity 实体
+     * @return 结果
+     */
+    @Override
+    public int save(HaiKongMemberScoreChangeDetailRecordEntity haiKongMemberScoreChangeDetailRecordEntity) {
+        Date date = new Date();
+        haiKongMemberScoreChangeDetailRecordEntity.setCreateTime(date);
+        haiKongMemberScoreChangeDetailRecordEntity.setModifyTime(date);
+        return haiKongMemberScoreChangeDetailRecordDao.save(haiKongMemberScoreChangeDetailRecordEntity);
+    }
+
+    /**
+     * 根据订单编号批量删除详情
+     *
+     * @param orderSn 订单编号
+     * @return 结果
+     */
+    @Override
+    public int deleteBatchByOrderSn(String orderSn) {
+        return haiKongMemberScoreChangeDetailRecordDao.deleteBatchByOrderSn(orderSn);
+    }
+
+    /**
+     * 批量新增
+     *
+     * @param entities 实体集合
+     * @return 结果
+     */
+    @Override
+    public int saveBatch(List<HaiKongMemberScoreChangeDetailRecordEntity> entities) {
+        entities.forEach(entity -> {
+            Date date = new Date();
+            entity.setCreateTime(date);
+            entity.setModifyTime(date);
+        });
+        return haiKongMemberScoreChangeDetailRecordDao.saveBatch(entities);
+    }
+}

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

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.kmall.admin.dao.haikong.HaiKongMemberScoreChangeDetailRecordDao">
+    <resultMap id="CommonResultMap" type="com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeDetailRecordEntity">
+        <id column="id" property="id" />
+        <result column="order_sn" property="orderSn" />
+        <result column="product_barcode" property="productBarcode" />
+        <result column="sku" property="sku" />
+        <result column="retail_price" property="retailPrice" />
+        <result column="actual_price" property="actualPrice" />
+        <result column="sell_volume" property="sellVolume" />
+        <result column="deduction_score" property="deductionScore" />
+        <result column="modify_time" property="modifyTime" />
+        <result column="create_time" property="createTime" />
+    </resultMap>
+
+    <select id="queryListByOrderSn" resultType="com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeDetailRecordEntity">
+        select *
+        from haikong_member_score_change_detail_record
+        where haikong_member_score_change_detail_record.order_sn = #{orderSn}
+    </select>
+
+    <insert id="save" parameterType="com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeDetailRecordEntity" useGeneratedKeys="true" keyProperty="id">
+        insert into haikong_member_score_change_detail_record
+        (
+            `order_sn`,
+            `product_barcode`,
+            `sku`,
+            `retail_price`,
+            `actual_price`,
+            `sell_volume`,
+            `deduction_score`,
+            `modify_time`,
+            `create_time`
+        )
+        values
+        (
+            #{orderSn},
+            #{productBarcode},
+            #{sku},
+            #{retailPrice},
+            #{actualPrice},
+            #{sellVolume},
+            #{deductionScore},
+            #{modifyTime},
+            #{createTime}
+        )
+    </insert>
+
+    <insert id="saveBatch">
+        insert into haikong_member_score_change_detail_record
+        (
+            `order_sn`,
+            `product_barcode`,
+            `sku`,
+            `retail_price`,
+            `actual_price`,
+            `sell_volume`,
+            `deduction_score`,
+            `modify_time`,
+            `create_time`
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+                #{item.orderSn},
+                #{item.productBarcode},
+                #{item.sku},
+                #{item.retailPrice},
+                #{item.actualPrice},
+                #{item.sellVolume},
+                #{item.deductionScore},
+                #{item.modifyTime},
+                #{item.createTime}
+            )
+        </foreach>
+    </insert>
+
+    <delete id="deleteBatchByOrderSn">
+        delete from haikong_member_score_change_detail_record where order_sn = #{orderSn}
+    </delete>
+
+</mapper>

+ 19 - 13
kmall-admin/src/main/resources/mybatis/mapper/vip/Mall2MemberConsumptionRecordsDao.xml

@@ -23,6 +23,7 @@
         <result property="scoreLimit" column="score_limit"/>
         <result property="beforeScore" column="before_score"/>
         <result property="afterScore" column="after_score"/>
+        <result property="orderGiftScore" column="order_gift_score"/>
     </resultMap>
 
 	<select id="queryObject" resultType="com.kmall.admin.entity.vip.Mall2MemberConsumptionRecordsEntity">
@@ -45,7 +46,8 @@
 			`score_deduction_price`,
 			`score_limit`,
 			`before_score`,
-			`after_score`
+			`after_score`,
+			`order_gift_score`
 		from mall2_member_consumption_records
 		where mmcr_id = #{id}
 	</select>
@@ -72,7 +74,8 @@
 			records.`score_deduction_price`,
 			records.`score_limit`,
 			records.`before_score`,
-			records.`after_score`
+			records.`after_score`,
+			records.`order_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
@@ -127,7 +130,8 @@
 			`score_deduction_price`,
 			`score_limit`,
 			`before_score`,
-			`after_score`)
+			`after_score`,
+			`order_gift_score`)
 		values(
 			#{mmcrId},
 			#{userId},
@@ -147,7 +151,8 @@
 			#{scoreDeductionPrice},
 			#{scoreLimit},
 			#{beforeScore},
-			#{afterScore})
+			#{afterScore},
+			#{orderGiftScore})
 	</insert>
 
 	<update id="update" parameterType="com.kmall.admin.entity.vip.Mall2MemberConsumptionRecordsEntity">
@@ -162,15 +167,16 @@
 			<if test="createTime != null">`create_time` = #{createTime}, </if>
 			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
 			<if test="modTime != null">`mod_time` = #{modTime}, </if>
-			<if test="tstm != null">`tstm` = #{tstm}</if>
-			<if test="deductionScore != null">`deduction_score` = #{deductionScore}</if>
-			<if test="memberCode != null">`member_code` = #{memberCode}</if>
-			<if test="memberPhone != null">`member_phone` = #{memberPhone}</if>
-			<if test="orderTotalPrice != null">`order_total_price` = #{orderTotalPrice}</if>
-			<if test="scoreDeductionPrice != null">`score_deduction_price` = #{scoreDeductionPrice}</if>
-			<if test="scoreLimit != null">`score_limit` = #{scoreLimit}</if>
-			<if test="beforeScore != null">`before_score` = #{beforeScore}</if>
-			<if test="afterScore != null">`after_score` = #{afterScore}</if>
+			<if test="tstm != null">`tstm` = #{tstm},</if>
+			<if test="deductionScore != null">`deduction_score` = #{deductionScore},</if>
+			<if test="memberCode != null">`member_code` = #{memberCode},</if>
+			<if test="memberPhone != null">`member_phone` = #{memberPhone},</if>
+			<if test="orderTotalPrice != null">`order_total_price` = #{orderTotalPrice},</if>
+			<if test="scoreDeductionPrice != null">`score_deduction_price` = #{scoreDeductionPrice},</if>
+			<if test="scoreLimit != null">`score_limit` = #{scoreLimit},</if>
+			<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>
 		</set>
 		where mmcr_id = #{mmcrId}
 	</update>

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

@@ -148,8 +148,8 @@
 			mprs.`id` as id,
 			mprs.`father_id` as fatherId,
 			mprs.`points_rules_type` as pointRulesType,
-			mprs.`points_detil_name` as pointsDetilName,
-			mprs.`points_detil_name_id` as pointsDetilNameId,
+			mprs.`points_detil_name` as pointsDetailName,
+			mprs.`points_detil_name_id` as pointsDetailNameId,
 			mprs.`points_store_name` as pointsStoreName,
 			mprs.`points_store_id` as pointsStoreId,
 			mprs.`remark` as remark

+ 4 - 3
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -625,7 +625,8 @@ let vm = new Vue({
 
             let result = [];
             for(let i=0; i<vm.searchGoods.length; i++){
-                if(vm.searchGoods[i].name.indexOf(vm.prodBarcode) > -1){
+                let goods = vm.searchGoods[i];
+                if(goods != null && goods.name.indexOf(vm.prodBarcode) > -1){
                     if(result.length <= 9){
                         result.push(vm.searchGoods[i]);
                     }else{
@@ -1963,8 +1964,8 @@ function toPayOrder(payCode){
                  'machineCode':vm.machineCode,
                  'memberCode': vm.memberCode,
                  'memberPhone': vm.memberPhone,
-                 'deductionScore': vm.deductionScore,
-                 'actualPrice': vm.actualPrice,
+                 'deductionScore': new BigNumber(vm.deductionScore).toString(),
+                 'actualPrice': new BigNumber(vm.actualPrice).toString(),
                  'scoreDeductionPrice': vm.scoreDeductionPrice,
                  'scoreLimit': vm.scoreLimit,
                  'beforeScore': vm.beforeScore,