Procházet zdrojové kódy

胚子修改、积分使用规则

lhm před 3 roky
rodič
revize
576a8d20b6
21 změnil soubory, kde provedl 1319 přidání a 19 odebrání
  1. 151 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkActivitiesScoreController.java
  2. 23 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkActivitiesScoreDao.java
  3. 79 0
      kmall-admin/src/main/java/com/kmall/admin/dto/ScoreReductionDTO.java
  4. 4 4
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkActivitiesEntity.java
  5. 219 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkActivitiesScoreEntity.java
  6. 15 1
      kmall-admin/src/main/java/com/kmall/admin/entity/vip/Mall2PointsRulesEntity.java
  7. 27 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java
  8. 28 9
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  9. 151 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesScoreServiceImpl.java
  10. 99 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkActivitiesScoreService.java
  11. 22 0
      kmall-admin/src/main/resources/XmlTemplate/ScoreReductionDTOList.xml
  12. 185 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkActivitiesScoreDao.xml
  13. 0 3
      kmall-admin/src/main/resources/spring/spring-context.xml
  14. 2 1
      kmall-admin/src/main/resources/spring/spring-mvc.xml
  15. 1 0
      kmall-admin/src/main/resources/spring/spring-shiro.xml
  16. 89 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkactivitiesscore.html
  17. 214 0
      kmall-admin/src/main/webapp/js/mk/mkactivitiesscore.js
  18. 7 1
      kmall-admin/src/main/webapp/js/mk/mkactivityform.js
  19. binární
      kmall-admin/src/main/webapp/statics/file/activities_score_yyyy_mm_dd_v1.0.0.xlsx
  20. 2 0
      kmall-common/src/main/java/com/kmall/common/constant/JxlsXmlTemplateName.java
  21. 1 0
      kmall-manager/src/main/resources/conf/redis.properties

+ 151 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkActivitiesScoreController.java

@@ -0,0 +1,151 @@
+package com.kmall.admin.controller.mk;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.dto.FullReductionDto;
+import com.kmall.admin.dto.ScoreReductionDTO;
+import com.kmall.admin.entity.mk.MkActivitiesScoreEntity;
+import com.kmall.admin.service.mk.MkActivitiesScoreService;
+import com.kmall.common.constant.JxlsXmlTemplateName;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.common.utils.excel.ExcelUtil;
+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.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+
+/**
+ * 营销方式-积分抵扣Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-12-02 16:06:26
+ */
+@Controller
+@RequestMapping("mkactivitiesscore")
+public class MkActivitiesScoreController {
+    @Autowired
+    private MkActivitiesScoreService mkActivitiesScoreService;
+    @Autowired
+    private ExcelUtil excelUtil;
+
+    private final static Logger log = LoggerFactory.getLogger(MkActivitiesScoreController.class);
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+//    @RequiresPermissions("mkactivitiesscore:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkActivitiesScoreEntity> mkActivitiesScoreList = mkActivitiesScoreService.queryList(query);
+        int total = mkActivitiesScoreService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkActivitiesScoreList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+//    @RequiresPermissions("mkactivitiesscore:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        MkActivitiesScoreEntity mkActivitiesScore = mkActivitiesScoreService.queryObject(id);
+
+        return R.ok().put("mkActivitiesScore", mkActivitiesScore);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+//    @RequiresPermissions("mkactivitiesscore:save")
+    @ResponseBody
+    public R save(@RequestBody MkActivitiesScoreEntity mkActivitiesScore) {
+        mkActivitiesScoreService.save(mkActivitiesScore);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+//    @RequiresPermissions("mkactivitiesscore:update")
+    @ResponseBody
+    public R update(@RequestBody MkActivitiesScoreEntity mkActivitiesScore) {
+        mkActivitiesScoreService.update(mkActivitiesScore);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+//    @RequiresPermissions("mkactivitiesscore:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        mkActivitiesScoreService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<MkActivitiesScoreEntity> list = mkActivitiesScoreService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 导入excel
+     */
+    @PostMapping("/upload")
+    @ResponseBody
+    public R storeUpload(@RequestParam("file") MultipartFile file, String storeId, String mkaId) {
+        List<ScoreReductionDTO> scoreReductionDTOList = new ArrayList<>();//信息
+        try {
+
+            ScoreReductionDTO scoreReductionDTO= new ScoreReductionDTO();
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("ScoreReductionDTO", scoreReductionDTO);
+            beans.put("ScoreReductionDTOList", scoreReductionDTOList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.SCORE_REDUCTION_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            log.error("导入积分抵扣商品详情失败:", e);
+            return R.error("导入失败!");
+        }
+        try {
+            mkActivitiesScoreService.uploadExcel(scoreReductionDTOList,storeId,mkaId);
+        } catch (RuntimeException e){
+            log.error("积分抵扣商品详情导入数据写入表失败:", e);
+            return R.error(e.getMessage());
+        }
+        //上传文件
+        return R.ok("导入成功!");
+    }
+}

+ 23 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkActivitiesScoreDao.java

@@ -0,0 +1,23 @@
+package com.kmall.admin.dao.mk;
+
+
+import com.kmall.admin.entity.mk.MkActivitiesScoreEntity;
+import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+
+/**
+ * 营销方式-积分抵扣Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-12-02 16:06:26
+ */
+public interface MkActivitiesScoreDao extends BaseDao<MkActivitiesScoreEntity> {
+
+    MkActivitiesScoreEntity queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(@Param("prodBarcode") String prodBarcode,
+                                                                            @Param("sku") String sku,
+                                                                            @Param("storeId") Integer storeId,
+                                                                            @Param("nowTime") Date nowTime);
+}

+ 79 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/ScoreReductionDTO.java

@@ -0,0 +1,79 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 积分抵扣导入字段
+ * @author lhm
+ * @createDate 2021-12-02
+ */
+public class ScoreReductionDTO implements Serializable {
+
+    private static final long serialVersionUID = 635463165464L;
+
+    private String prodBarcode;
+    private String sku;
+    private Integer storeId;
+    private BigDecimal scoreLimit;
+    private Date deadline;
+    private String deadlineStr;
+    private String reject;
+
+    public String getProdBarcode() {
+        return prodBarcode;
+    }
+
+    public void setProdBarcode(String prodBarcode) {
+        this.prodBarcode = prodBarcode;
+    }
+
+    public String getSku() {
+        return sku;
+    }
+
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    public Integer getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    public BigDecimal getScoreLimit() {
+        return scoreLimit;
+    }
+
+    public void setScoreLimit(BigDecimal scoreLimit) {
+        this.scoreLimit = scoreLimit;
+    }
+
+    public Date getDeadline() {
+        return deadline;
+    }
+
+    public void setDeadline(Date deadline) {
+        this.deadline = deadline;
+    }
+
+    public String getDeadlineStr() {
+        return deadlineStr;
+    }
+
+    public void setDeadlineStr(String deadlineStr) {
+        this.deadlineStr = deadlineStr;
+    }
+
+    public String getReject() {
+        return reject;
+    }
+
+    public void setReject(String reject) {
+        this.reject = reject;
+    }
+}

+ 4 - 4
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkActivitiesEntity.java

@@ -11,7 +11,7 @@ import java.util.Date;
  * @email admin@qhdswl.com
  * @date 2020-09-22 10:16:14
  */
-public class MkActivitiesEntity implements Serializable, Comparable {
+public class MkActivitiesEntity implements Serializable, Comparable<MkActivitiesEntity> {
     private static final long serialVersionUID = 1L;
 
     /**
@@ -99,7 +99,7 @@ public class MkActivitiesEntity implements Serializable, Comparable {
     private String storeName;
 
     /**
-     * 优先级
+     * 优先级,数字越小,优先级越高
      */
     private Integer priority;
 
@@ -349,8 +349,8 @@ public class MkActivitiesEntity implements Serializable, Comparable {
      * @return  结果
      */
     @Override
-    public int compareTo(Object o) {
-        if (this.getPriority() > ((MkActivitiesEntity) o).getPriority()) {
+    public int compareTo(MkActivitiesEntity o) {
+        if (this.getPriority() > o.getPriority()) {
             return 1;
         } else {
             return -1;

+ 219 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkActivitiesScoreEntity.java

@@ -0,0 +1,219 @@
+package com.kmall.admin.entity.mk;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 营销方式-积分抵扣实体
+ * 表名 mk_activities_score
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-12-02 16:06:26
+ */
+public class MkActivitiesScoreEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+    private Integer id;
+    /**
+     * 商品条码
+     */
+    private String prodBarcode;
+    /**
+     * sku
+     */
+    private String sku;
+    /**
+     * 门店id
+     */
+    private Integer storeId;
+    /**
+     * 抵扣比例
+     */
+    private BigDecimal scoreLimit;
+    /**
+     * 营销活动编号
+     */
+    private Long mkaId;
+    /**
+     * 截止日期
+     */
+    private Date deadline;
+    /**
+     * 是否参与,0:参与 1:不参与
+     */
+    private String reject;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+
+    /**
+     * 设置:
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取:
+     */
+    public Integer getId() {
+        return id;
+    }
+    /**
+     * 设置:商品条码
+     */
+    public void setProdBarcode(String prodBarcode) {
+        this.prodBarcode = prodBarcode;
+    }
+
+    /**
+     * 获取:商品条码
+     */
+    public String getProdBarcode() {
+        return prodBarcode;
+    }
+    /**
+     * 设置:sku
+     */
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    /**
+     * 获取:sku
+     */
+    public String getSku() {
+        return sku;
+    }
+    /**
+     * 设置:门店id
+     */
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    /**
+     * 获取:门店id
+     */
+    public Integer getStoreId() {
+        return storeId;
+    }
+    /**
+     * 设置:抵扣比例
+     */
+    public void setScoreLimit(BigDecimal scoreLimit) {
+        this.scoreLimit = scoreLimit;
+    }
+
+    /**
+     * 获取:抵扣比例
+     */
+    public BigDecimal getScoreLimit() {
+        return scoreLimit;
+    }
+    /**
+     * 设置:营销活动编号
+     */
+    public void setMkaId(Long mkaId) {
+        this.mkaId = mkaId;
+    }
+
+    /**
+     * 获取:营销活动编号
+     */
+    public Long getMkaId() {
+        return mkaId;
+    }
+    /**
+     * 设置:截止日期
+     */
+    public void setDeadline(Date deadline) {
+        this.deadline = deadline;
+    }
+
+    /**
+     * 获取:截止日期
+     */
+    public Date getDeadline() {
+        return deadline;
+    }
+
+    public String getReject() {
+        return reject;
+    }
+
+    public void setReject(String reject) {
+        this.reject = reject;
+    }
+
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+}

+ 15 - 1
kmall-admin/src/main/java/com/kmall/admin/entity/vip/Mall2PointsRulesEntity.java

@@ -12,7 +12,7 @@ import java.util.Date;
  * @email admin@qhdswl.com
  * @date 2020-06-15 10:44:07
  */
-public class Mall2PointsRulesEntity implements Serializable {
+public class Mall2PointsRulesEntity implements Serializable, Comparable<Mall2PointsRulesEntity> {
     private static final long serialVersionUID = 1L;
 
     /**
@@ -249,4 +249,18 @@ public class Mall2PointsRulesEntity implements Serializable {
     public void setPointsTypeStr(String pointsTypeStr) {
         this.pointsTypeStr = pointsTypeStr;
     }
+
+    /**
+     * 排序用
+     * @param o 传进来的对象
+     * @return  结果
+     */
+    @Override
+    public int compareTo(Mall2PointsRulesEntity o) {
+        if (this.getPointsType() < o.getPointsType()) {
+            return 1;
+        } else {
+            return -1;
+        }
+    }
 }

+ 27 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java

@@ -134,4 +134,31 @@ public class Constants {
         }
     }
 
+    /**
+     * 会员积分生成规则类型
+     */
+    public enum MemberScoreRulesEnum{
+        ZERO(0, "门店"),
+        ONE(1, "商品分类"),
+        TWO(2, "商品")
+        ;
+
+        private final Integer code;
+
+        private final String type;
+
+        MemberScoreRulesEnum(Integer code, String type) {
+            this.code = code;
+            this.type = type;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+
+        public String getType() {
+            return type;
+        }
+    }
+
 }

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

@@ -54,6 +54,7 @@ import com.kmall.admin.service.mk.MkActivitiesService;
 import com.kmall.admin.service.mk.store.MkStoreCampMinusService;
 import com.kmall.admin.service.mk.store.MkStoreTicketDiscountService;
 import com.kmall.admin.service.record.NewRetailOrderRestoreStockRecordService;
+import com.kmall.admin.service.vip.Mall2PointsRulesService;
 import com.kmall.admin.utils.CalculateTax;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.admin.utils.data.response.ResponseMessage;
@@ -197,6 +198,8 @@ public class OrderServiceImpl implements OrderService {
     @Autowired
     private Mall2PointsRulesDao pointsRulesDao; // 积分规则
     @Autowired
+    private Mall2PointsRulesService mall2PointsRulesService;
+    @Autowired
     private Mall2MemberPointsDao memberPointsDao; // 用户积分
     @Autowired
     private Mall2MemberConsumptionRecordsDao memberConsumptionRecordsDao; // 会员消费记录
@@ -2496,8 +2499,8 @@ public class OrderServiceImpl implements OrderService {
                 if (stockMap.containsKey(sku)) {
                     // 当前出区数
                     Integer exitRegionNumber = goodsDto.getExitRegionNumber();
-                    // 保税仓库存 + 门店库存 - 出区数 >= 购买数
-                    if (!((warehouseStock + stockNum) - exitRegionNumber >= sellVolume)) {
+                    // 保税仓库存 + 门店库存 - 出区数 > 购买数
+                    if (!((warehouseStock + stockNum) - exitRegionNumber > sellVolume)) {
                         // 库存不足
                         LOGGER.error("sku:【{}】库存不足,门店可用库存:【{}】,仓库可用库存:【{}】,购买数量:【{}】", sku, stockNum, warehouseStock, sellVolume);
                         throw new ServiceException(String.format("sku:【%s】库存不足,门店可用库存:【%s】,仓库可用库存:【%s】,购买数量:【%s】", sku, stockNum, warehouseStock, sellVolume));
@@ -2739,20 +2742,36 @@ public class OrderServiceImpl implements OrderService {
                 saleRecordDao.save(saleRecordEntity);
             }
 
-            // TODO 查询积分规则,根据积分生成规则进行增加会员积分
-            Mall2PointsRulesEntity pointsRules = null;
-
+            // TODO 查询当前时间积分规则,根据积分生成规则进行增加会员积分
+            Integer userEntityId = userEntity.getId();
+            Integer memberScore = order.getActual_price().intValue();
+            //List<Mall2PointsRulesEntity> mall2PointsRulesEntities = mall2PointsRulesService.queryListByTime(new Date()).stream().sorted().collect(Collectors.toList());
+            /*mall2PointsRulesEntities.forEach(mall2PointsRulesEntity -> {
+                // 查询明细
+                Integer pointsType = mall2PointsRulesEntity.getPointsType();
+                if (pointsType.equals(Constants.MemberScoreRulesEnum.TWO.getCode())) {
+                    // 商品,优先级最高,查询
+
+
+                } else if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.getCode())) {
+                    // 商品类别
+                } else if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
+                    // 门店
+                } else {
+                    LOGGER.error("未知的积分生成规则类型:{}", pointsType);
+                }
+            });*/
             // 增加该会员的积分
-            Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntity.getId());
+            Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntityId);
             if (memberPointsEntity == null) {
                 memberPointsEntity = new Mall2MemberPointsEntity();
-                memberPointsEntity.setUserId(userEntity.getId() + "");
-                memberPointsEntity.setPoints(order.getActual_price().intValue());
+                memberPointsEntity.setUserId(userEntityId + "");
+                memberPointsEntity.setPoints(memberScore);
                 memberPointsEntity.setCreaterSn(userId + "");
                 memberPointsEntity.setCreateTime(new Date());
                 memberPointsDao.save(memberPointsEntity);
             } else {
-                memberPointsEntity.setPoints(order.getActual_price().add(new BigDecimal(memberPointsEntity.getPoints())).intValue());
+                memberPointsEntity.setPoints(memberScore + memberPointsEntity.getPoints());
                 memberPointsEntity.setModerSn(userId + "");
                 memberPointsEntity.setModTime(new Date());
                 memberPointsDao.update(memberPointsEntity);

+ 151 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesScoreServiceImpl.java

@@ -0,0 +1,151 @@
+package com.kmall.admin.service.impl.mk;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dao.mk.MkActivitiesScoreDao;
+import com.kmall.admin.dto.ScoreReductionDTO;
+import com.kmall.admin.entity.mk.MkActivitiesScoreEntity;
+import com.kmall.admin.service.mk.MkActivitiesScoreService;
+import com.kmall.common.utils.*;
+import org.springframework.aop.framework.AopContext;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+/**
+ * 营销方式-积分抵扣Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-12-02 16:06:26
+ */
+@Service("mkActivitiesScoreService")
+public class MkActivitiesScoreServiceImpl implements MkActivitiesScoreService {
+    @Autowired
+    private MkActivitiesScoreDao mkActivitiesScoreDao;
+
+    @Override
+    public MkActivitiesScoreEntity queryObject(Integer id) {
+        return mkActivitiesScoreDao.queryObject(id);
+    }
+
+    @Override
+    public List<MkActivitiesScoreEntity> queryList(Map<String, Object> map) {
+        return mkActivitiesScoreDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return mkActivitiesScoreDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(MkActivitiesScoreEntity mkActivitiesScore) {
+        return mkActivitiesScoreDao.save(mkActivitiesScore);
+    }
+
+    @Override
+    public int update(MkActivitiesScoreEntity mkActivitiesScore) {
+        return mkActivitiesScoreDao.update(mkActivitiesScore);
+    }
+
+    @Override
+    public int delete(Integer id) {
+        return mkActivitiesScoreDao.delete(id);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]ids) {
+        return mkActivitiesScoreDao.deleteBatch(ids);
+    }
+
+    /**
+     * 导入
+     *
+     * @param scoreReductionDTOList 导入的数据
+     * @param storeId               门店id
+     * @param mkaId                 活动id
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void uploadExcel(List<ScoreReductionDTO> scoreReductionDTOList, String storeId, String mkaId) {
+
+        if (!CollectionUtils.isEmpty(scoreReductionDTOList)) {
+            List<MkActivitiesScoreEntity> mkActivitiesScoreEntities = new ArrayList<>();
+
+            scoreReductionDTOList.forEach(scoreReductionDTO -> {
+                Map<String, Object> valideDate = MapBeanUtil.fromObject(scoreReductionDTO);
+                // 校验excel传入的数据
+                ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+                builder.put("storeId", "门店编号");
+                builder.put("sku", "商品SKU");
+                builder.put("prodBarcode", "商品条码");
+                builder.put("scoreLimit", "抵扣比例");
+                builder.put("reject", "是否参与");
+                builder.put("deadlineStr", "截止日期");
+
+                R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+                if (Integer.valueOf(r.get("code").toString()) != 0) {
+                    throw new RRException(r.get("msg").toString());
+                }
+
+                Date nowTime = new Date();
+
+                MkActivitiesScoreEntity mkActivitiesScoreEntity = queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(scoreReductionDTO.getProdBarcode(), scoreReductionDTO.getSku(), scoreReductionDTO.getStoreId(), nowTime);
+
+                if (Objects.nonNull(mkActivitiesScoreEntity)) {
+                    throw new RRException("该商品已经参与本次活动,商品{"+mkActivitiesScoreEntity.getProdBarcode()+"},sku,{"+mkActivitiesScoreEntity.getSku()+"}", 500);
+                }
+
+                MkActivitiesScoreEntity scoreEntity = new MkActivitiesScoreEntity();
+                BeanUtils.copyProperties(scoreReductionDTO, scoreEntity);
+                Date updateTime = new Date();
+                DateTime dateTime = DateUtil.parseDate(scoreReductionDTO.getDeadlineStr());
+                scoreEntity.setDeadline(dateTime);
+                scoreEntity.setMkaId(Long.parseLong(mkaId));
+                scoreEntity.setCreaterSn("0");
+                scoreEntity.setCreateTime(updateTime);
+                scoreEntity.setModerSn("0");
+                scoreEntity.setUpdateTime(updateTime);
+
+                mkActivitiesScoreEntities.add(scoreEntity);
+            });
+
+            ((MkActivitiesScoreService) AopContext.currentProxy()).saveBatch(mkActivitiesScoreEntities);
+
+        }
+
+    }
+
+    /**
+     * 查询当前时间商品是否有活动信息
+     *
+     * @param prodBarcode 条码
+     * @param sku         sku
+     * @param storeId     门店id
+     * @param nowTime     当前时间
+     * @return 实体
+     */
+    @Override
+    public MkActivitiesScoreEntity queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(String prodBarcode, String sku, Integer storeId, Date nowTime) {
+        return mkActivitiesScoreDao.queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(prodBarcode, sku, storeId, nowTime);
+    }
+
+    /**
+     * 批量新增
+     *
+     * @param mkActivitiesScoreEntities 新增数据
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveBatch(List<MkActivitiesScoreEntity> mkActivitiesScoreEntities) {
+        mkActivitiesScoreDao.saveBatch(mkActivitiesScoreEntities);
+    }
+}

+ 99 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkActivitiesScoreService.java

@@ -0,0 +1,99 @@
+package com.kmall.admin.service.mk;
+
+
+import com.kmall.admin.dto.ScoreReductionDTO;
+import com.kmall.admin.entity.mk.MkActivitiesScoreEntity;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 营销方式-积分抵扣Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-12-02 16:06:26
+ */
+public interface MkActivitiesScoreService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param id 主键
+     * @return 实体
+     */
+    MkActivitiesScoreEntity queryObject(Integer id);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<MkActivitiesScoreEntity> queryList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param mkActivitiesScore 实体
+     * @return 保存条数
+     */
+    int save(MkActivitiesScoreEntity mkActivitiesScore);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param mkActivitiesScore 实体
+     * @return 更新条数
+     */
+    int update(MkActivitiesScoreEntity mkActivitiesScore);
+
+    /**
+     * 根据主键删除
+     *
+     * @param id
+     * @return 删除条数
+     */
+    int delete(Integer id);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param ids
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[]ids);
+
+    /**
+     * 导入
+     * @param scoreReductionDTOList 导入的数据
+     * @param storeId               门店id
+     * @param mkaId                 活动id
+     */
+    void uploadExcel(List<ScoreReductionDTO> scoreReductionDTOList, String storeId, String mkaId);
+
+    /**
+     * 查询当前时间商品是否有活动信息
+     * @param prodBarcode   条码
+     * @param sku           sku
+     * @param storeId       storeId
+     * @param nowTime       当前时间
+     * @return              实体
+     */
+    MkActivitiesScoreEntity queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(String prodBarcode, String sku, Integer storeId, Date nowTime);
+
+    /**
+     * 批量新增
+     * @param mkActivitiesScoreEntities 新增数据
+     */
+    void saveBatch(List<MkActivitiesScoreEntity> mkActivitiesScoreEntities);
+}

+ 22 - 0
kmall-admin/src/main/resources/XmlTemplate/ScoreReductionDTOList.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workbook>
+    <worksheet name="Sheet1">
+        <section startRow="0" endRow="0"/>
+        <loop startRow="1" endRow="1" items="ScoreReductionDTOList" var="ScoreReductionDTO"
+              varType="com.kmall.admin.dto.ScoreReductionDTO">
+            <section startRow="1" endRow="1">
+                <mapping row="1" col="0">ScoreReductionDTO.storeId</mapping>
+                <mapping row="1" col="1">ScoreReductionDTO.prodBarcode</mapping>
+                <mapping row="1" col="2">ScoreReductionDTO.sku</mapping>
+                <mapping row="1" col="3">ScoreReductionDTO.scoreLimit</mapping>
+                <mapping row="1" col="4">ScoreReductionDTO.reject</mapping>
+                <mapping row="1" col="5">ScoreReductionDTO.deadlineStr</mapping>
+            </section>
+            <loopbreakcondition>
+                <rowcheck offset="0">
+                    <cellcheck offset="0"></cellcheck>
+                </rowcheck>
+            </loopbreakcondition>
+        </loop>
+    </worksheet>
+</workbook>

+ 185 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkActivitiesScoreDao.xml

@@ -0,0 +1,185 @@
+<?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.mk.MkActivitiesScoreDao">
+
+    <resultMap type="com.kmall.admin.entity.mk.MkActivitiesScoreEntity" id="mkActivitiesScoreMap">
+        <result property="id" column="id"/>
+        <result property="prodBarcode" column="prod_barcode"/>
+        <result property="sku" column="sku"/>
+        <result property="storeId" column="store_id"/>
+        <result property="scoreLimit" column="score_limit"/>
+        <result property="mkaId" column="mka_id"/>
+        <result property="deadline" column="deadline"/>
+        <result property="reject" column="reject"/>
+        <result property="createTime" column="create_time"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.mk.MkActivitiesScoreEntity">
+		select
+			`id`,
+			`prod_barcode`,
+			`sku`,
+			`store_id`,
+			`score_limit`,
+			`mka_id`,
+			`deadline`,
+			`reject`,
+			`create_time`,
+			`creater_sn`,
+			`moder_sn`,
+			`update_time`
+		from mk_activities_score
+		where id = #{id}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.mk.MkActivitiesScoreEntity">
+		select
+    		`id`,
+    		`prod_barcode`,
+    		`sku`,
+    		`store_id`,
+    		`score_limit`,
+    		`mka_id`,
+    		`deadline`,
+    		`reject`,
+    		`create_time`,
+    		`creater_sn`,
+    		`moder_sn`,
+    		`update_time`
+		from mk_activities_score
+		WHERE 1=1
+		<if test="name != null and name.trim() != ''">
+			AND name LIKE concat('%',#{name},'%')
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mk_activities_score
+		WHERE 1=1
+        <if test="name != null and name.trim() != ''">
+            AND name LIKE concat('%',#{name},'%')
+        </if>
+	</select>
+
+	<select id="queryEntityByProdBarcodeAndSkuAndStoreIdAndTime"
+			resultType="com.kmall.admin.entity.mk.MkActivitiesScoreEntity">
+		select
+    		`id`,
+    		`prod_barcode`,
+    		`sku`,
+    		`store_id`,
+    		`score_limit`,
+    		`mka_id`,
+    		`deadline`,
+    		`reject`,
+    		`create_time`,
+    		`creater_sn`,
+    		`moder_sn`,
+    		`update_time`
+		from mk_activities_score
+		where prod_barcode = #{prodBarcode} and sku = #{sku} and store_id = #{storeId} and (deadline &gt; #{nowTime})
+	</select>
+
+	<insert id="save" parameterType="com.kmall.admin.entity.mk.MkActivitiesScoreEntity" useGeneratedKeys="true" keyProperty="id">
+		insert into mk_activities_score(
+			`prod_barcode`,
+			`sku`,
+			`store_id`,
+			`score_limit`,
+			`mka_id`,
+			`deadline`,
+			`reject`,
+			`create_time`,
+			`creater_sn`,
+			`moder_sn`,
+			`update_time`)
+		values(
+			#{prodBarcode},
+			#{sku},
+			#{storeId},
+			#{scoreLimit},
+			#{mkaId},
+			#{deadline},
+			#{reject},
+			#{createTime},
+			#{createrSn},
+			#{moderSn},
+			#{updateTime})
+	</insert>
+
+	<insert id="saveBatch" parameterType="com.kmall.admin.entity.mk.MkActivitiesScoreEntity">
+		insert into mk_activities_score(
+			`prod_barcode`,
+			`sku`,
+			`store_id`,
+			`score_limit`,
+			`mka_id`,
+			`deadline`,
+			`reject`,
+			`create_time`,
+			`creater_sn`,
+			`moder_sn`,
+			`update_time`)
+		values
+		<foreach collection="list" item="item" separator=",">
+			(
+				#{item.prodBarcode},
+				#{item.sku},
+				#{item.storeId},
+				#{item.scoreLimit},
+				#{item.mkaId},
+				#{item.deadline},
+				#{item.reject},
+				#{item.createTime},
+				#{item.createrSn},
+				#{item.moderSn},
+				#{item.updateTime}
+			)
+		</foreach>
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.mk.MkActivitiesScoreEntity">
+		update mk_activities_score 
+		<set>
+			<if test="prodBarcode != null">`prod_barcode` = #{prodBarcode}, </if>
+			<if test="sku != null">`sku` = #{sku}, </if>
+			<if test="storeId != null">`store_id` = #{storeId}, </if>
+			<if test="scoreLimit != null">`score_limit` = #{scoreLimit}, </if>
+			<if test="mkaId != null">`mka_id` = #{mkaId}, </if>
+			<if test="deadline != null">`deadline` = #{deadline}, </if>
+			<if test="reject != null">`reject` = #{reject}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="updateTime != null">`update_time` = #{updateTime}</if>
+		</set>
+		where id = #{id}
+	</update>
+	
+	<delete id="delete">
+		delete from mk_activities_score where id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mk_activities_score where id in 
+		<foreach item="id" collection="array" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</delete>
+
+</mapper>

+ 0 - 3
kmall-admin/src/main/resources/spring/spring-context.xml

@@ -21,7 +21,4 @@
         <context:exclude-filter type="aspectj" expression="com.kmall.admin.websocket.**"/>
     </context:component-scan>
 
-    <!-- 暴露代理对象,用来保证调用当前bean的其他方法事务不失效,获取当前bean代理对象:((需要转换的Service) AopContext.currentProxy()) -->
-    <aop:aspectj-autoproxy expose-proxy="true"/>
-
 </beans>

+ 2 - 1
kmall-admin/src/main/resources/spring/spring-mvc.xml

@@ -20,7 +20,8 @@
         <context:exclude-filter type="aspectj" expression="com.kmall.admin.task.**"/>
     </context:component-scan>
 
-    <aop:aspectj-autoproxy proxy-target-class="true"/>
+    <!-- 暴露代理对象,用来保证调用当前bean的其他方法事务不失效,获取当前bean代理对象:((需要转换的Service) AopContext.currentProxy()) -->
+    <aop:aspectj-autoproxy proxy-target-class="true" expose-proxy="true"/>
     <mvc:annotation-driven>
         <mvc:message-converters register-defaults="true">
             <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">

+ 1 - 0
kmall-admin/src/main/resources/spring/spring-shiro.xml

@@ -101,6 +101,7 @@
     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
           depends-on="lifecycleBeanPostProcessor">
         <property name="proxyTargetClass" value="true"/>
+        <property name="exposeProxy" value="true"/>
     </bean>
     <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
         <property name="securityManager" ref="securityManager"/>

+ 89 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkactivitiesscore.html

@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>营销方式-积分抵扣</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-input v-model="q.name" @on-enter="query" placeholder="名称"/>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group" style="width: 100%;margin-top: 8px;">
+                <i-col style="display: inline-grid;">
+                    <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                            :format="['xls','xlsx']"
+                            action="../mkactivitiesscore/upload" :before-upload="beforeUpload"  :data="uploadData" >
+                        <i-button type="ghost" icon="ios-cloud-upload-outline">导入</i-button>
+                    </Upload>
+                </i-col>
+                <a href="../statics/file/activities_score_yyyy_mm_dd_v1.0.0.xlsx">积分抵扣模板下载</a>
+            </div>
+            <div class="buttons-group">
+<!--                #if($shiro.hasPermission("mkactivitiesscore:save"))-->
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+<!--                #end-->
+<!--                #if($shiro.hasPermission("mkactivitiesscore:update"))-->
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+<!--                #end-->
+<!--                #if($shiro.hasPermission("mkactivitiesscore:delete"))-->
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+<!--                #end-->
+                <i-button type="warning" @click="reloadMkactivities" v-show="!isMkactivitiesShow">返回营销方式页</i-button>
+            </div>
+        </Row>
+	    <ta2ble id="jqGrid"></ta2ble>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="mkActivitiesScore" :rules="ruleValidate" :label-width="80">
+            <Form-item label="商品条码" prop="prodBarcode">
+                <i-input v-model="mkActivitiesScore.prodBarcode" placeholder="商品条码"/>
+            </Form-item>
+            <Form-item label="sku" prop="sku">
+                <i-input v-model="mkActivitiesScore.sku" placeholder="sku"/>
+            </Form-item>
+            <Form-item label="门店id" prop="storeId">
+                <i-input v-model="mkActivitiesScore.storeId" placeholder="门店id"/>
+            </Form-item>
+            <Form-item label="抵扣比例" prop="scoreLimit">
+                <i-input v-model="mkActivitiesScore.scoreLimit" placeholder="抵扣比例"/>
+            </Form-item>
+            <Form-item label="营销活动编号" prop="mkaId">
+                <i-input v-model="mkActivitiesScore.mkaId" placeholder="营销活动编号"/>
+            </Form-item>
+            <Form-item label="截止日期" prop="deadline">
+                <i-input v-model="mkActivitiesScore.deadline" placeholder="截止日期"/>
+            </Form-item>
+            <!--<Form-item label="创建时间" prop="createTime">
+                <i-input v-model="mkActivitiesScore.createTime" placeholder="创建时间"/>
+            </Form-item>
+            <Form-item label="创建人编号" prop="createrSn">
+                <i-input v-model="mkActivitiesScore.createrSn" placeholder="创建人编号"/>
+            </Form-item>
+            <Form-item label="修改人编号" prop="moderSn">
+                <i-input v-model="mkActivitiesScore.moderSn" placeholder="修改人编号"/>
+            </Form-item>
+            <Form-item label="修改时间" prop="updateTime">
+                <i-input v-model="mkActivitiesScore.updateTime" placeholder="修改时间"/>
+            </Form-item>-->
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/mk/mkactivitiesscore.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 214 - 0
kmall-admin/src/main/webapp/js/mk/mkactivitiesscore.js

@@ -0,0 +1,214 @@
+$(function () {
+
+	let flag = getQueryString("flag");
+	if(flag != null && flag == "false"){
+		vm.isMkactivitiesShow = false;
+	}
+	let mkCode = getQueryString("mkCode");
+	if(mkCode){
+		vm.mkCode = mkCode;
+	}
+
+	let storeId = getQueryString("storeId");
+	console.log(storeId);
+	if(storeId){
+		vm.storeId = storeId;
+	}
+	let mkaId = getQueryString("mkaId");
+	if(mkaId){
+		vm.mkaId = mkaId;
+	}
+
+	$("#jqGrid").jqGrid({
+        url: '../mkactivitiesscore/list',
+        datatype: "json",
+        colModel: [
+			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+			{label: '商品条码', name: 'prodBarcode', index: 'prod_barcode', width: 80},
+			{label: 'sku', name: 'sku', index: 'sku', width: 80},
+			{label: '门店id', name: 'storeId', index: 'store_id', width: 80},
+			{label: '抵扣比例', name: 'scoreLimit', index: 'score_limit', width: 80},
+			{label: '营销活动编号', name: 'mkaId', index: 'mka_id', width: 80},
+			{label: '截止日期', name: 'deadline', index: 'deadline', width: 80},
+			{label: '创建时间', name: 'createTime', index: 'create_time', width: 80},
+			{label: '创建人编号', name: 'createrSn', index: 'creater_sn', width: 80},
+			{label: '修改人编号', name: 'moderSn', index: 'moder_sn', width: 80},
+			{label: '修改时间', name: 'updateTime', index: 'update_time', width: 80}],
+		viewrecords: true,
+		postData: {'mkaId': vm.mkaId},
+        height: 550,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        rownumbers: true,
+        rownumWidth: 25,
+        autowidth: true,
+        multiselect: true,
+        pager: "#jqGridPager",
+        jsonReader: {
+            root: "page.list",
+            page: "page.currPage",
+            total: "page.totalPage",
+            records: "page.totalCount"
+        },
+        prmNames: {
+            page: "page",
+            rows: "limit",
+            order: "order"
+        },
+        gridComplete: function () {
+            $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "hidden"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		mkActivitiesScore: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+		    name: ''
+		},
+		isMkactivitiesShow: true,
+		mkCode: '',
+		uploadData:[],
+		storeId : '',
+		mkaId : ''
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.mkActivitiesScore = {};
+		},
+		update: function (event) {
+            let id = getSelectedRow();
+			if (id == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getInfo(id)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.mkActivitiesScore.id == null ? "../mkactivitiesscore/save" : "../mkactivitiesscore/update";
+
+			//添加上层的门店编号与营销方式编号
+			vm.mkActivitiesHalfPrice.shopSn = vm.storeId;
+			vm.mkActivitiesHalfPrice.mkaId = vm.mkaId;
+
+            $.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.mkActivitiesScore),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let ids = getSelectedRows();
+			if (ids == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../mkactivitiesscore/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(ids),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(id){
+			$.get("../mkactivitiesscore/info/"+id, function (r) {
+                vm.mkActivitiesScore = r.mkActivitiesScore;
+            });
+		},
+        reloadSearch: function() {
+            vm.q = {
+                name: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'name': vm.q.name},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        },
+        //返回营销方式页
+		reloadMkactivities: function () {
+			window.location.href = "/mk/mkactivityform.html?mkCode="+vm.mkCode;
+		},
+		uploadExcelSuccess: function (data) {
+			// console.log(data);
+			if(data.code==0){
+				alert('导入成功', function (index) {
+					$("#jqGrid").trigger("reloadGrid");
+				});
+			}else{
+				alert(data.msg);
+			}
+		},
+		uploadExcelError: function () {
+			alert('上传出现异常,请重试!');
+		},
+		uploadExcelFormatError: function (file) {
+			this.$Notice.warning({
+				title: '文件格式不正确',
+				desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
+			});
+		},beforeUpload(){
+			vm.uploadData = {
+				storeId: vm.storeId,
+				mkaId : vm.mkaId
+			}
+			let promise = new Promise((resolve) => {
+				this.$nextTick(function () {
+					resolve(true);
+				});
+			});
+			return promise; //通过返回一个promis对象解决
+
+		}
+	}
+});

+ 7 - 1
kmall-admin/src/main/webapp/js/mk/mkactivityform.js

@@ -185,6 +185,10 @@ let vm = new Vue({
                 id: 'lscx',
                 name: '临时促销'
             }, {
+                id: 'jfdk',
+                name: '积分抵扣'
+            }
+            /*, {
                 id: 'yhq',
                 name: '优惠券'
             }, {
@@ -208,7 +212,7 @@ let vm = new Vue({
             }, {
                 id: 'drjbj',
                 name: '第二件半价'
-            }
+            }*/
         ],
 	},
 	methods: {
@@ -504,6 +508,8 @@ let vm = new Vue({
             // "/mk/mkstorecampminus.html"
             if(mkaTopic === 'lscx')
                 url = "/mk/mkactivitiespromotion.html";
+            else if(mkaTopic === 'jfdk')
+                url = "/mk/mkactivitiesscore.html";
             else if(mkaTopic === 'yhq')
                 url = "/mk/mkactivitiescoupon.html";
             else if(mkaTopic === 'rchd')

binární
kmall-admin/src/main/webapp/statics/file/activities_score_yyyy_mm_dd_v1.0.0.xlsx


+ 2 - 0
kmall-common/src/main/java/com/kmall/common/constant/JxlsXmlTemplateName.java

@@ -40,6 +40,8 @@ public class JxlsXmlTemplateName {
     public static final String HALF_PRICE_DTO_LIST = "/XmlTemplate/HalfPriceDtoList.xml";
     // 满赠商品导入
     public static final String FREE_GOODS_DTO_LIST = "/XmlTemplate/FreeGoodsDtoList.xml";
+    // 积分抵扣商品导入
+    public static final String SCORE_REDUCTION_DTO_LIST = "/XmlTemplate/ScoreReductionDTOList.xml";
     // 优惠券商品导入
     public static final String COUPON_MERCHANDISE_DTO_LIST = "/XmlTemplate/CouponMerchandiseDtoList.xml";
     // 组合价商品导入

+ 1 - 0
kmall-manager/src/main/resources/conf/redis.properties

@@ -6,6 +6,7 @@ redis.env=prod
 # \u5F00\u53D1\u73AF\u5883
 redis.dev.keyPrefix=platform
 redis.dev.host=127.0.0.1
+#redis.dev.host=183.3.221.143
 redis.dev.port=6379
 redis.dev.password=Abc-123#*.-
 redis.dev.pool.maxIdle=200