Explorar o código

Merge remote-tracking branch 'origin/master' into feature/系统日志前端优化1210

qng %!s(int64=3) %!d(string=hai) anos
pai
achega
0a90c65ef6
Modificáronse 30 ficheiros con 1038 adicións e 270 borrados
  1. 20 8
      kmall-admin/src/main/java/com/kmall/admin/controller/BrandController.java
  2. 42 0
      kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongMemberScoreChangeDetailRecordDao.java
  3. 168 0
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeDetailRecordEntity.java
  4. 13 0
      kmall-admin/src/main/java/com/kmall/admin/entity/vip/Mall2MemberConsumptionRecordsEntity.java
  5. 1 1
      kmall-admin/src/main/java/com/kmall/admin/haikong/client/HaiKongWarehouseTemplate.java
  6. 5 1
      kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java
  7. 1 1
      kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberOrderSyncResendTask.java
  8. 50 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/vo/OrderGiftScoreRulesVo.java
  9. 146 12
      kmall-admin/src/main/java/com/kmall/admin/haikong/vo/PointsRulesAndDetailVO.java
  10. 14 3
      kmall-admin/src/main/java/com/kmall/admin/haikong/vo/QueryGoodsVO.java
  11. 42 0
      kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongMemberScoreChangeDetailRecordService.java
  12. 39 45
      kmall-admin/src/main/java/com/kmall/admin/service/impl/BrandServiceImpl.java
  13. 32 32
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  14. 206 99
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  15. 73 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaiKongMemberScoreChangeDetailRecordServiceImpl.java
  16. 5 6
      kmall-admin/src/main/resources/XmlTemplate/BrandDtoList.xml
  17. 98 0
      kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeDetailRecordDao.xml
  18. 6 0
      kmall-admin/src/main/resources/mybatis/mapper/shop/AddressInfoDao.xml
  19. 19 13
      kmall-admin/src/main/resources/mybatis/mapper/vip/Mall2MemberConsumptionRecordsDao.xml
  20. 2 2
      kmall-admin/src/main/resources/mybatis/mapper/vip/Mall2PointsRulesDao.xml
  21. 6 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/addressinfo.html
  22. 4 3
      kmall-admin/src/main/webapp/js/sale/sale.js
  23. 7 3
      kmall-admin/src/main/webapp/js/shop/addressinfo.js
  24. 2 4
      kmall-admin/src/main/webapp/js/shop/category.js
  25. 24 9
      kmall-admin/src/main/webapp/js/shop/merch.js
  26. 2 9
      kmall-admin/src/main/webapp/js/shop/supplier.js
  27. 2 9
      kmall-admin/src/main/webapp/js/shop/syscusnationcode.js
  28. 2 9
      kmall-admin/src/main/webapp/js/shop/syscusunitcode.js
  29. 7 1
      kmall-admin/src/main/webapp/js/shop/thirdmerchantbiz.js
  30. BIN=BIN
      kmall-admin/src/main/webapp/statics/file/brand_export_yyyy_mm_dd_v1.0.0.xls

+ 20 - 8
kmall-admin/src/main/java/com/kmall/admin/controller/BrandController.java

@@ -17,6 +17,8 @@ import com.kmall.common.utils.excel.ExcelExport;
 import com.kmall.common.utils.excel.ExcelUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -31,19 +33,21 @@ import java.util.*;
  * @author Scott
  * @email
  * @date 2017-08-19 17:59:15
+ *
+ * @author zhuhh
+ * @date 2021-12-9 15:57:53
  */
 @RestController
 @RequestMapping("brand")
 public class BrandController {
+    private static final Logger logger = LoggerFactory.getLogger(BrandController.class);
+
     @Autowired
     private BrandService brandService;
 
     @Autowired
     private ExcelUtil excelUtil;
 
-    @Autowired
-    private CategoryService categoryService;
-
     /**
      * 查看列表
      */
@@ -223,11 +227,14 @@ public class BrandController {
 
     /**
      * 导入品牌
+     *
+     * @author zhuhh
+     * @date 2021-12-9 15:59:33
      */
     @RequestMapping("/upload")
     @ResponseBody
     public R upload(@RequestParam("file") MultipartFile file) {
-        List<BrandEntity> brandEntityList = new ArrayList<>();//信息
+        List<BrandEntity> brandEntityList = new ArrayList<>();
         try {
             BrandEntity brandEntity = new BrandEntity();
             Map<String, Object> beans = new HashMap<String, Object>();
@@ -238,16 +245,21 @@ public class BrandController {
             }
             excelUtil.readExcel(JxlsXmlTemplateName.BRAND_DTO_LIST, beans, file.getInputStream());
         } catch (Exception e) {
-            e.printStackTrace();
-            return R.error("导入失败!");
+            logger.error("读取文件失败!", e);
+            return R.error("读取文件失败!");
         }
         try {
+            if (brandEntityList == null || brandEntityList.size() == 0) {
+                logger.error("读取数据为空!");
+                return R.error("读取数据为空!");
+            }
+
             brandService.uploadExcel(brandEntityList);
         } catch (Exception e) {
-            e.printStackTrace();
+            logger.error("保存数据失败!", e);
             return R.error(e.getMessage());
         }
-        //上传文件
+        // 上传文件
         return R.ok("导入成功!");
     }
 

+ 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);
+}

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

@@ -0,0 +1,168 @@
+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 Integer giftScore;
+
+    /**
+     * 生成积分规则
+     * 0:门店 1:分类 2:商品 3:无规则
+     */
+    private Integer generateRules;
+
+    /**
+     * 生成积分规则比例,无规则为0
+     */
+    private BigDecimal generateRatio;
+
+    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 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;
+    }
+
+    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 +
+                ", giftScore=" + giftScore +
+                ", generateRules=" + generateRules +
+                ", generateRatio=" + generateRatio +
+                ", 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;
+    }
 }

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/haikong/client/HaiKongWarehouseTemplate.java

@@ -52,7 +52,7 @@ public class HaiKongWarehouseTemplate {
                 "&format=xml" + "&sign_method=md5" + "&customerId=" + haiKongProperties.getWareCustomerId() +
                 "&timestamp=" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss") +
                 "&app_key=" + haiKongProperties.getWareAppId() + "&v=1.0";
-        String signUrl = WareSysSignUtils.getSignRequest(url, xmlStr, "GREE1001");
+        String signUrl = WareSysSignUtils.getSignRequest(url, xmlStr, haiKongProperties.getWareAppSecret());
 
         Request.Builder builder = new Request.Builder();
 

+ 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();

+ 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 +
+                '}';
+    }
+}

+ 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);
+
+}

+ 39 - 45
kmall-admin/src/main/java/com/kmall/admin/service/impl/BrandServiceImpl.java

@@ -12,6 +12,7 @@ import com.kmall.common.utils.RRException;
 import com.kmall.common.utils.ValidatorUtil;
 import com.kmall.manager.manager.express.sf.ServiceException;
 import com.kmall.manager.manager.redis.JedisUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -235,55 +236,48 @@ public class BrandServiceImpl implements BrandService {
     @Override
     @Transactional
     public void uploadExcel(List<BrandEntity> brandEntityList) {
-        if (brandEntityList != null && brandEntityList.size() > 0) {
-            for (int i = 0; i < brandEntityList.size(); i++) {
-                BrandEntity brandEntity = brandEntityList.get(i);
-                Integer brandId = brandEntity.getId();
-                Integer isShow = brandEntity.getIsShow();
-                Integer isNew = brandEntity.getIsNew();
-                // 品牌唯一标识符正则校验
-                String uniqueIdentifier = brandEntity.getUniqueIdentifier();
-
-                if (isShow.intValue() != 0 && isShow.intValue() != 1 && isNew.intValue() != 0 && isNew != 1) {
-                    throw new ServiceException("第" + (i + 1) + "行的是否显示或者是否新品牌只可填(0:否 1:是)");
-                }
+        for (int i = 0; i < brandEntityList.size(); i++) {
+            BrandEntity brandEntity = brandEntityList.get(i);
+            String name = brandEntity.getName();
+            Integer isShow = brandEntity.getIsShow();
+            Integer isNew = brandEntity.getIsNew();
+            // 品牌唯一标识符正则校验
+            String uniqueIdentifier = brandEntity.getUniqueIdentifier();
+
+            if (isShow.intValue() != 0 && isShow.intValue() != 1 && isNew.intValue() != 0 && isNew != 1) {
+                throw new ServiceException("第" + (i + 1) + "行的是否显示或者是否新品牌只可填(0:否 1:是)");
+            }
 
+            if (StringUtils.isNotBlank(uniqueIdentifier)) {
+                String regex = "(^[0-9a-zA-Z_&]{1,10}$)";
+                if (!Pattern.matches(regex, uniqueIdentifier)) {
+                    throw new RuntimeException("请输入正确的品牌唯一简码,有问题的简码:" + uniqueIdentifier);
+                }
+            }
 
+            // 数据库查询是否存在对应名字的对象
+            BrandEntity isExist = brandDao.queryByName(name);
 
-                // 如果是0就添加数据
-                if (brandId.intValue() == 0) {
-
-
-                    String regex = "(^[0-9a-zA-Z_&]{1,10}$)";
-                    if(!Pattern.matches(regex,uniqueIdentifier)){
-                        throw new RuntimeException("请输入正确的品牌唯一简码,有问题的简码:"+uniqueIdentifier);
-                    }
-
-                    // 如果是正确的,根据唯一简码查询该简码是否存在
-                    BrandEntity queryBrandEntity = brandDao.queryByUniqueIdentifier(uniqueIdentifier);
-
-                    if (Objects.nonNull(queryBrandEntity)){
-                        throw new ServiceException("第" + (i + 1) + "行的该品牌:【" + queryBrandEntity.getName() + "】已存在!");
-                    }
-                    BrandEntity insertBrandEntity = new BrandEntity();
-                    insertBrandEntity.setName(brandEntity.getName());
-                    insertBrandEntity.setSimpleDesc(brandEntity.getSimpleDesc());
-                    insertBrandEntity.setUniqueIdentifier(uniqueIdentifier);
-                    insertBrandEntity.setIsShow(isShow);
-                    insertBrandEntity.setIsNew(isNew);
-                    this.save(insertBrandEntity);
-                } else {
-                    String regex = "(^[0-9a-zA-Z_&]{1,10}$)";
-                    if(!Pattern.matches(regex,uniqueIdentifier)){
-                        throw new RuntimeException("请输入正确的品牌唯一简码,有问题的简码:"+uniqueIdentifier);
-                    }
-                    BrandEntity updateBrandEntity = brandDao.queryObject(brandId);
-                    if (Objects.isNull(updateBrandEntity)) {
-                        throw new ServiceException("第" + (i + 1) + "行的该品牌编号:【" + brandId + "】不存在!");
-                    }
-                    BeanUtils.copyProperties(brandEntity,updateBrandEntity);
-                    this.update(updateBrandEntity);
+            // 不存在则添加
+            if (isExist == null) {
+                // 如果是正确的,根据唯一简码查询该简码是否存在
+                BrandEntity queryBrandEntity = brandDao.queryByUniqueIdentifier(uniqueIdentifier);
+                if (Objects.nonNull(queryBrandEntity)) {
+                    throw new ServiceException("第" + (i + 1) + "行的该品牌:【" + queryBrandEntity.getName() + "】已存在!");
                 }
+
+                BrandEntity insertBrandEntity = new BrandEntity();
+                insertBrandEntity.setName(brandEntity.getName());
+                insertBrandEntity.setSimpleDesc(brandEntity.getSimpleDesc());
+                insertBrandEntity.setUniqueIdentifier(uniqueIdentifier);
+                insertBrandEntity.setIsShow(isShow);
+                insertBrandEntity.setIsNew(isNew);
+                this.save(insertBrandEntity);
+
+            } else {
+                // 存在则修改
+                BeanUtils.copyProperties(brandEntity, isExist);
+                this.update(isExist);
             }
         }
     }

+ 32 - 32
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -1151,22 +1151,22 @@ public class GoodsServiceImpl implements GoodsService {
                     // 查询数据库中是否有一级分类
                     String firstLevel = goodsDto.getFirstLevel();
                     CategoryEntity firstCategory = categoryDao.queryByName(firstLevel);
-                    if(firstCategory == null){
-                        // 一级分类不存在
-                        // 新增一级分类
-                        CategoryEntity firstCategoryEntity = initCategory(firstLevel, 0, Dict.Level.item_L1);
-                        categoryDao.save(firstCategoryEntity);
-                        // 新增二级分类
-                        CategoryEntity secondCategoryEntity = initCategory(secondLevel, firstCategoryEntity.getId(), Dict.Level.item_L2);
-                        categoryDao.save(secondCategoryEntity);
-                        categoryId = secondCategoryEntity.getId()+"";
-                    }else{
-                        // 新增二级分类
-                        CategoryEntity saveCategoryEntity = initCategory(secondLevel, firstCategory.getId(), Dict.Level.item_L2);
-                        categoryDao.save(saveCategoryEntity);
-                        categoryId = saveCategoryEntity.getId()+"";
-
-                    }
+                    // if(firstCategory == null){
+                    //     // 一级分类不存在
+                    //     // 新增一级分类
+                    //     CategoryEntity firstCategoryEntity = initCategory(firstLevel, 0, Dict.Level.item_L1);
+                    //     categoryDao.save(firstCategoryEntity);
+                    //     // 新增二级分类
+                    //     CategoryEntity secondCategoryEntity = initCategory(secondLevel, firstCategoryEntity.getId(), Dict.Level.item_L2);
+                    //     categoryDao.save(secondCategoryEntity);
+                    //     categoryId = secondCategoryEntity.getId()+"";
+                    // }else{
+                    //     // 新增二级分类
+                    //     CategoryEntity saveCategoryEntity = initCategory(secondLevel, firstCategory.getId(), Dict.Level.item_L2);
+                    //     categoryDao.save(saveCategoryEntity);
+                    //     categoryId = saveCategoryEntity.getId()+"";
+                    //
+                    // }
                     categoryCacheData.put("categoryId",categoryId);
                     JedisUtil.setMap(secondLevel,categoryCacheData,0);
                     goodsEntity.setCategoryId(Integer.parseInt(categoryId));
@@ -1200,22 +1200,22 @@ public class GoodsServiceImpl implements GoodsService {
                 // 查询数据库中是否有一级分类
                 String firstLevel = goodsDto.getFirstLevel();
                 CategoryEntity firstCategory = categoryDao.queryByName(firstLevel);
-                if(firstCategory == null){
-                    // 一级分类不存在
-                    // 新增一级分类
-                    CategoryEntity firstCategoryEntity = initCategory(firstLevel, 0, Dict.Level.item_L1);
-                    categoryDao.save(firstCategoryEntity);
-                    // 新增二级分类
-                    CategoryEntity secondCategoryEntity = initCategory(secondLevel, firstCategoryEntity.getId(), Dict.Level.item_L2);
-                    categoryDao.save(secondCategoryEntity);
-                    categoryId = secondCategoryEntity.getId()+"";
-                }else{
-                    // 新增二级分类
-                    CategoryEntity saveCategoryEntity = initCategory(secondLevel, firstCategory.getId(), Dict.Level.item_L2);
-                    categoryDao.save(saveCategoryEntity);
-                    categoryId = saveCategoryEntity.getId()+"";
-
-                }
+                // if(firstCategory == null){
+                //     // 一级分类不存在
+                //     // 新增一级分类
+                //     CategoryEntity firstCategoryEntity = initCategory(firstLevel, 0, Dict.Level.item_L1);
+                //     categoryDao.save(firstCategoryEntity);
+                //     // 新增二级分类
+                //     CategoryEntity secondCategoryEntity = initCategory(secondLevel, firstCategoryEntity.getId(), Dict.Level.item_L2);
+                //     categoryDao.save(secondCategoryEntity);
+                //     categoryId = secondCategoryEntity.getId()+"";
+                // }else{
+                //     // 新增二级分类
+                //     CategoryEntity saveCategoryEntity = initCategory(secondLevel, firstCategory.getId(), Dict.Level.item_L2);
+                //     categoryDao.save(saveCategoryEntity);
+                //     categoryId = saveCategoryEntity.getId()+"";
+                //
+                // }
                 categoryCacheData.put("categoryId",categoryId);
                 JedisUtil.setMap(secondLevel,categoryCacheData,0);
                 goodsEntity.setCategoryId(Integer.parseInt(categoryId));

+ 206 - 99
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;
@@ -37,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;
@@ -47,6 +46,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;
@@ -61,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;
@@ -252,6 +251,7 @@ public class OrderServiceImpl implements OrderService {
      */
     @Autowired
     private MkActivitiesPromotionService mkActivitiesPromotionService;
+
     /**
      * 日志记录
      */
@@ -269,6 +269,13 @@ public class OrderServiceImpl implements OrderService {
      */
     @Autowired
     private HaiKongMemberScoreChangeRecordService haiKongMemberScoreChangeRecordService;
+
+    /**
+     * 会员积分变动商品详情
+     */
+    @Autowired
+    private HaiKongMemberScoreChangeDetailRecordService haiKongMemberScoreChangeDetailRecordService;
+
     /**
      * 接口重发信息
      */
@@ -2209,6 +2216,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 +2315,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 +2330,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 +2482,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 +2490,141 @@ 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)) {
+            // 无会员码,不参与积分赠送
+            Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap = new HashMap<>();
+            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);
+                            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:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", sku, ratio);
+                                LOGGER.info("商品SKU:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                orderGiftScoreRulesVo.setGiftScore(0);
+                                orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                             }
-                        } else {
-                            // 不包含sku,则需要判断是否有其他规则
-                            nonGoodsSkuList.add(sku);
+                            giftGoodsScoreDetailMap.put(pointsDetailNameId, orderGiftScoreRulesVo);
+                            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();
+                            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) {
+                                        // 算出所积的分
+                                        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);
+                                }
                             }
-                        } 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();
+                            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) {
+                                    // 算出所积的分
+                                    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);
+                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 +2634,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, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
+                // 积分变动接口,下单扣减
+                Integer score = memberScore.get();
+                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, 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 +3062,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 +3073,19 @@ public class OrderServiceImpl implements OrderService {
      * 同步会员积分变动记录
      * @param openId    会员openid
      * @param order     订单信息
+     * @param changeEvent 变动事件
+     * @param changeReason 变动原因
+     * @param goodsList 商品详情
+     * @param giftGoodsScoreDetailMap 赠送积分详情
      * @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,
+                                             Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap,
+                                             String changeEvent) {
         HaiKongMemberScoreChangeRecordEntity haiKongMemberScoreChangeRecordEntity = new HaiKongMemberScoreChangeRecordEntity();
         MemberScoreChangeDTO memberScoreChangeDTO = new MemberScoreChangeDTO();
         String changeId = UUID.randomUUID(true).toString();
@@ -3046,10 +3114,31 @@ 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);
         }
+        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(sku);
+            entity.setDeductionScore(goodsEntity.getDeductionScore());
+            return entity;
+        }).collect(Collectors.toList());
+        haiKongMemberScoreChangeDetailRecordService.saveBatch(recordEntityList);
     }
 
     private boolean orderQuery(OrderVo order, OrderProcessRecordEntity processRecordEntity) {
@@ -4009,7 +4098,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 +4145,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 +4186,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 +4218,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 +4275,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 +4303,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 +4332,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 +4474,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 +4493,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);
+    }
+}

+ 5 - 6
kmall-admin/src/main/resources/XmlTemplate/BrandDtoList.xml

@@ -5,12 +5,11 @@
         <loop startRow="1" endRow="1" items="BrandEntityList" var="BrandEntity"
               varType="com.kmall.admin.entity.BrandEntity">
             <section startRow="1" endRow="1">
-                <mapping row="1" col="0">BrandEntity.id</mapping>
-                <mapping row="1" col="1">BrandEntity.name</mapping>
-                <mapping row="1" col="2">BrandEntity.uniqueIdentifier</mapping>
-                <mapping row="1" col="3">BrandEntity.simpleDesc</mapping>
-                <mapping row="1" col="4">BrandEntity.isShow</mapping>
-                <mapping row="1" col="5">BrandEntity.isNew</mapping>
+                <mapping row="1" col="0">BrandEntity.name</mapping>
+                <mapping row="1" col="1">BrandEntity.uniqueIdentifier</mapping>
+                <mapping row="1" col="2">BrandEntity.simpleDesc</mapping>
+                <mapping row="1" col="3">BrandEntity.isShow</mapping>
+                <mapping row="1" col="4">BrandEntity.isNew</mapping>
             </section>
             <loopbreakcondition>
                 <rowcheck offset="0">

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

@@ -0,0 +1,98 @@
+<?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="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>
+
+    <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`,
+            `gift_score`,
+            `generate_rules`,
+            `generate_ratio`,
+            `modify_time`,
+            `create_time`
+        )
+        values
+        (
+            #{orderSn},
+            #{productBarcode},
+            #{sku},
+            #{retailPrice},
+            #{actualPrice},
+            #{sellVolume},
+            #{deductionScore},
+            #{giftScore},
+            #{generateRules},
+            #{generateRatio},
+            #{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`,
+            `gift_score`,
+            `generate_rules`,
+            `generate_ratio`,
+            `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.giftScore},
+                #{item.generateRules},
+                #{item.generateRatio},
+                #{item.modifyTime},
+                #{item.createTime}
+            )
+        </foreach>
+    </insert>
+
+    <delete id="deleteBatchByOrderSn">
+        delete from haikong_member_score_change_detail_record where order_sn = #{orderSn}
+    </delete>
+
+</mapper>

+ 6 - 0
kmall-admin/src/main/resources/mybatis/mapper/shop/AddressInfoDao.xml

@@ -105,6 +105,12 @@
 		<if test="storeId != null and storeId.trim() != ''">
 			AND adi.store_id LIKE concat('%',#{storeId},'%')
 		</if>
+		<if test="expressName != null and expressName.trim() != ''">
+			AND ecs.express_name LIKE concat('%',#{expressName},'%')
+		</if>
+		<if test="storeName != null and storeName.trim() != ''">
+			AND ms.store_name LIKE concat('%',#{storeName},'%')
+		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}

+ 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

+ 6 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/addressinfo.html

@@ -12,6 +12,12 @@
                 <i-col span="4">
                     <i-input v-model="q.storeId" @on-enter="query" placeholder="门店id"/>
                 </i-col>
+                <i-col span="4">
+                    <i-input v-model="q.storeName" @on-enter="query" placeholder="门店名称"/>
+                </i-col>
+                <i-col span="4">
+                    <i-input v-model="q.expressName" @on-enter="query" placeholder="快递名称"/>
+                </i-col>
                 <i-button @click="query">查询</i-button>
                 <i-button @click="reloadSearch">重置</i-button>
             </div>

+ 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,

+ 7 - 3
kmall-admin/src/main/webapp/js/shop/addressinfo.js

@@ -70,7 +70,9 @@ let vm = new Vue({
 			],*/
 		},
 		q: {
-			storeId: ''
+			storeId: '',
+			expressName: '',
+			storeName: ''
 		}
 	},
 	methods: {
@@ -222,7 +224,9 @@ let vm = new Vue({
 		},
         reloadSearch: function() {
             vm.q = {
-				storeId: ''
+				storeId: '',
+				expressName: '',
+				storeName: ''
             }
             vm.reload();
 		},
@@ -231,7 +235,7 @@ let vm = new Vue({
 			vm.status='';
             let page = $("#jqGrid").jqGrid('getGridParam', 'page');
 			$("#jqGrid").jqGrid('setGridParam', {
-                postData: {'storeId': vm.q.storeId},
+                postData: {'storeId': vm.q.storeId, 'expressName': vm.q.expressName, 'storeName': vm.q.storeName},
                 page: page
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');

+ 2 - 4
kmall-admin/src/main/webapp/js/shop/category.js

@@ -411,24 +411,22 @@ var vm = new Vue({
             } else {
                 alert(data.msg);
             }
-            setTimeout(exportMsg, 100);
         },
         uploadExcelError: function () {
             alert('上传出现异常,请重试!');
-            setTimeout(exportMsg, 100);
         },
         uploadExcelProgress: function (event, file, fileList) {
-            exportMsg = this.$Message.loading({
+            const exportMsg = this.$Message.loading({
                 content: 'Loading...',
                 duration: 0
             });
+            setTimeout(exportMsg, 100);
         },
         uploadExcelFormatError: function (file) {
             this.$Notice.warning({
                 title: '文件格式不正确',
                 desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
             });
-            setTimeout(exportMsg, 100);
         }
         // 上传方法结束----
     },

+ 24 - 9
kmall-admin/src/main/webapp/js/shop/merch.js

@@ -53,22 +53,37 @@ let vm = new Vue({
 	data: {
         showList: true,
         title: null,
-		merch: {merchSn:'',merchName:'',merchShortName:'',sortOrder:'',isShow:1},
-		ruleValidate: {
+        merch: {merchSn:'',merchName:'',merchShortName:'',sortOrder:'',isShow:1},
+        ruleValidate: {
             merchSn: [
-				{required: true, message: '商户编号不能为空', trigger: 'blur'}
-			],
+                {required: true, message: '商户编号不能为空', trigger: 'blur'},
+                {max: 32, message: '商户编号长度不能超过32', trigger: 'blur'}
+            ],
             merchName: [
-                {required: true, message: '商户名称不能为空', trigger: 'blur'}
+                {required: true, message: '商户名称不能为空', trigger: 'blur'},
+                {max: 32, message: '商户名称长度不能超过32', trigger: 'blur'}
             ],
             merchShortName: [
-                {required: true, message: '商户简称不能为空', trigger: 'blur'}
+                {required: true, message: '商户简称不能为空', trigger: 'blur'},
+                {max: 10, message: '商户简称长度不能超过10', trigger: 'blur'}
+            ],
+            sortOrder: [
+                {
+                    type: 'integer', message: '排序只能输入正整数,最大不超过9999', trigger: 'blur', min: 0, max: 9999,
+                    transform(value) {
+                        return Number(value);
+                    }
+                },
+                {pattern: /^[1-9]\d*$/, message: '排序只能输入正整数', trigger: 'blur'}
+            ],
+            remark: [
+                {max: 32, message: '备注长度不能超过32', trigger: 'blur'}
             ]
-		},
-		q: {
+        },
+        q: {
             merchName: '',
             merchSn: ''
-		}
+        }
 	},
 	methods: {
 		query: function () {

+ 2 - 9
kmall-admin/src/main/webapp/js/shop/supplier.js

@@ -193,29 +193,22 @@ let vm = new Vue({
             } else {
                 alert(data.msg);
             }
-            setTimeout(exportMsg, 100);
         },
         uploadExcelError: function () {
             alert('上传出现异常,请重试!');
-            setTimeout(exportMsg, 100);
         },
         uploadExcelProgress: function (event, file, fileList) {
-            console.log("上传中")
-            console.log(event)
-            console.log(file)
-            console.log(fileList)
-            console.log("上传中")
-            exportMsg = this.$Message.loading({
+		    const exportMsg = this.$Message.loading({
                 content: 'Loading...',
                 duration: 0
             });
+            setTimeout(exportMsg, 100);
         },
         uploadExcelFormatError: function (file) {
             this.$Notice.warning({
                 title: '文件格式不正确',
                 desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
             });
-            setTimeout(exportMsg, 100);
         }
         // 上传方法结束----
 	}

+ 2 - 9
kmall-admin/src/main/webapp/js/shop/syscusnationcode.js

@@ -182,29 +182,22 @@ let vm = new Vue({
             } else {
                 alert(data.msg);
             }
-            setTimeout(exportMsg, 100);
         },
         uploadExcelError: function () {
             alert('上传出现异常,请重试!');
-            setTimeout(exportMsg, 100);
         },
         uploadExcelProgress: function (event, file, fileList) {
-            console.log("上传中")
-            console.log(event)
-            console.log(file)
-            console.log(fileList)
-            console.log("上传中")
-            exportMsg = this.$Message.loading({
+            const exportMsg = this.$Message.loading({
                 content: 'Loading...',
                 duration: 0
             });
+            setTimeout(exportMsg, 100);
         },
         uploadExcelFormatError: function (file) {
             this.$Notice.warning({
                 title: '文件格式不正确',
                 desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
             });
-            setTimeout(exportMsg, 100);
         }
         // 上传方法结束----
 	}

+ 2 - 9
kmall-admin/src/main/webapp/js/shop/syscusunitcode.js

@@ -176,29 +176,22 @@ let vm = new Vue({
             } else {
                 alert(data.msg);
             }
-            setTimeout(exportMsg, 100);
         },
         uploadExcelError: function () {
             alert('上传出现异常,请重试!');
-            setTimeout(exportMsg, 100);
         },
         uploadExcelProgress: function (event, file, fileList) {
-            console.log("上传中")
-            console.log(event)
-            console.log(file)
-            console.log(fileList)
-            console.log("上传中")
-            exportMsg = this.$Message.loading({
+            const exportMsg = this.$Message.loading({
                 content: 'Loading...',
                 duration: 0
             });
+            setTimeout(exportMsg, 100);
         },
         uploadExcelFormatError: function (file) {
             this.$Notice.warning({
                 title: '文件格式不正确',
                 desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
             });
-            setTimeout(exportMsg, 100);
         }
         // 上传方法结束----
 	}

+ 7 - 1
kmall-admin/src/main/webapp/js/shop/thirdmerchantbiz.js

@@ -98,7 +98,13 @@ let vm = new Vue({
 		ruleValidate: {
 			name: [
 				{required: true, message: '名称不能为空', trigger: 'blur'}
-			]
+			],
+            thirdPartyMerchCode: [
+                {max: 32, message: '第三方商户代码长度不能超过32', trigger: 'blur'}
+            ],
+            thirdPartyMerchName: [
+                {max: 64, message: '第三方商户名称长度不能超过64', trigger: 'blur'}
+            ]
 		},
 		q: {
 		    name: ''

BIN=BIN
kmall-admin/src/main/webapp/statics/file/brand_export_yyyy_mm_dd_v1.0.0.xls