积分规则其他设置
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPersonLevel.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPersonLevel.java
index 33027d8..b6dd60b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPersonLevel.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPersonLevel.java
@@ -22,7 +22,6 @@
   private Integer pointsLower;
 
   @Column(name = "POINTSUPPER")
-  @NotNull
   private Integer pointsUpper;
 
   @Column(name = "UPDATETIME")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/bean/LevelBean.java b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/LevelBean.java
index 964ef8c..cbfbee5 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/bean/LevelBean.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/LevelBean.java
@@ -26,6 +26,78 @@
   private String startDate;
   private String endDate;
   private String pointsName;
+  private String consumePointsLi;
+  private String taskPointsLi;
+  private String dayPointsLi;
+  private Integer pointsSum;
+  private Integer pointsCount;
+  private Integer refno;
+  private List<Integer> refnoList;
+
+  public Integer getRefno() {
+    return refno;
+  }
+
+  public void setRefno(Integer refno) {
+    this.refno = refno;
+  }
+
+  public List<Integer> getRefnoList() {
+    return refnoList;
+  }
+
+  public void setRefnoList(List<Integer> refnoList) {
+    this.refnoList = refnoList;
+  }
+
+  public Integer getPointsSum() {
+    return pointsSum;
+  }
+
+  public void setPointsSum(Integer pointsSum) {
+    this.pointsSum = pointsSum;
+  }
+
+  public Integer getPointsCount() {
+    return pointsCount;
+  }
+
+  public void setPointsCount(Integer pointsCount) {
+    this.pointsCount = pointsCount;
+  }
+
+  public LevelBean() {
+  }
+
+  public LevelBean(String name, String startDate, String endDate) {
+    this.name = name;
+    this.startDate = startDate;
+    this.endDate = endDate;
+  }
+
+  public String getConsumePointsLi() {
+    return consumePointsLi;
+  }
+
+  public void setConsumePointsLi(String consumePointsLi) {
+    this.consumePointsLi = consumePointsLi;
+  }
+
+  public String getTaskPointsLi() {
+    return taskPointsLi;
+  }
+
+  public void setTaskPointsLi(String taskPointsLi) {
+    this.taskPointsLi = taskPointsLi;
+  }
+
+  public String getDayPointsLi() {
+    return dayPointsLi;
+  }
+
+  public void setDayPointsLi(String dayPointsLi) {
+    this.dayPointsLi = dayPointsLi;
+  }
 
   public String getPointsName() {
     return pointsName;
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java
index e3f43e0..7d242d3 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java
@@ -2,16 +2,23 @@
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.framework.dao.DictionaryDao;
+import com.supwisdom.dlpay.framework.dao.SysparaDao;
 import com.supwisdom.dlpay.framework.domain.*;
 import com.supwisdom.dlpay.framework.security.OperUtil;
 import com.supwisdom.dlpay.framework.util.*;
+import com.supwisdom.dlpay.system.bean.CitizenCardSearchBean;
+import com.supwisdom.dlpay.system.bean.CitizenCardShowBean;
 import com.supwisdom.dlpay.system.bean.LevelBean;
 import com.supwisdom.dlpay.system.service.OperatorService;
+import com.supwisdom.dlpay.system.service.ParamService;
 import com.supwisdom.dlpay.system.service.PointsService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -37,8 +44,7 @@
   public JsonResult getDataList() {
     try {
       LevelBean levelBean = pointsService.getLevel();
-      return JsonResult.ok().put("datalist",levelBean.gettPersonLevels())
-                            .put("pointsdate",levelBean.getPointsdate());
+      return JsonResult.ok().put("datalist", levelBean.gettPersonLevels());
     } catch (Exception e) {
       e.printStackTrace();
       return JsonResult.error("系统查询错误");
@@ -55,13 +61,12 @@
     }
     for (TPersonLevel tPersonLevel : levelBean.gettPersonLevels()) {
       if (StringUtil.isEmpty(tPersonLevel.getName())
-          || tPersonLevel.getPointsLower() == null
-          || tPersonLevel.getPointsUpper() == null) {
+          || tPersonLevel.getPointsLower() == null) {
         return JsonResult.error("参数错误");
       }
-      if (tPersonLevel.getPointsLower() > tPersonLevel.getPointsUpper()) {
+     /* if (tPersonLevel.getPointsLower() > tPersonLevel.getPointsUpper()) {
         return JsonResult.error("积分下限必须小于积分上限");
-      }
+      }*/
       tPersonLevel.setUpdatetime(DateUtil.getNow());
       tPersonLevel.setOperatorid(operator.getOpercode());
     }
@@ -123,9 +128,9 @@
   @ResponseBody
   public PageResult<TPointsDetail> getTPointsByname(@RequestParam("name") String name,
                                                     @RequestParam("idno") String idno,
-                                                    @RequestParam(value = "startDate",required = false) String startDate,
-                                                    @RequestParam(value = "endDate",required = false) String endDate,
-                                                    @RequestParam(value = "pointsName",required = false) String pointsName,
+                                                    @RequestParam(value = "startDate", required = false) String startDate,
+                                                    @RequestParam(value = "endDate", required = false) String endDate,
+                                                    @RequestParam(value = "pointsName", required = false) String pointsName,
                                                     @RequestParam("page") Integer pageNo,
                                                     @RequestParam("limit") Integer pageSize) {
     try {
@@ -134,13 +139,13 @@
       searchBean.setIdno(idno);
       searchBean.setPageNo(pageNo);
       searchBean.setPageSize(pageSize);
-      if(!StringUtil.isEmpty(startDate)){
-        searchBean.setStartDate(DateUtil.formatDateStr(startDate,"yyyy年MM月dd日","yyyyMMdd"));
+      if (!StringUtil.isEmpty(startDate)) {
+        searchBean.setStartDate(DateUtil.formatDateStr(startDate, "yyyy年MM月dd日", "yyyyMMdd"));
       }
-      if(!StringUtil.isEmpty(endDate)){
-        searchBean.setEndDate(DateUtil.formatDateStr(endDate,"yyyy年MM月dd日","yyyyMMdd"));
+      if (!StringUtil.isEmpty(endDate)) {
+        searchBean.setEndDate(DateUtil.formatDateStr(endDate, "yyyy年MM月dd日", "yyyyMMdd"));
       }
-      if(!StringUtil.isEmpty(pointsName)){
+      if (!StringUtil.isEmpty(pointsName)) {
         searchBean.setPointsName(pointsName);
       }
       return pointsService.getTPointsByname(searchBean);
@@ -182,7 +187,6 @@
     try {
       LevelBean levelBean = pointsService.getConpoints();
       return JsonResult.ok().put("monthConsumeList", levelBean.getMonthList())
-          .put("pointslimit", levelBean.getPointslimit())
           .put("dayConsumeList", levelBean.getDayList());
     } catch (Exception e) {
       e.printStackTrace();
@@ -218,11 +222,10 @@
   }
 
 
-
   /*
-  * 活动日管理
-  *
-  * */
+   * 活动日管理
+   *
+   * */
   @GetMapping("/pointsActive/index")
   public String pointsActiveIndex() {
     return "system/level/pointsactiveindex";
@@ -265,11 +268,11 @@
     if (operator != null) {
       operator = operatorService.getOperatorByCode(operator.getOpercode());
     }
-    if( levelBean.getPointsActive()!=null){
+    if (levelBean.getPointsActive() != null) {
       levelBean.getPointsActive().setUpdatetime(DateUtil.getNow());
       levelBean.getPointsActive().setOperatorid(operator.getOpercode());
-      return pointsService.saveActive( levelBean.getPointsActive());
-    }else {
+      return pointsService.saveActive(levelBean.getPointsActive());
+    } else {
       return JsonResult.error("参数不能为空");
     }
   }
@@ -279,4 +282,56 @@
     return "system/level/pointsactiveadd";
   }
 
+  @PostMapping("/pointsSet/add")
+  @PreAuthorize("hasPermission('/user/add','')")
+  @ResponseBody
+  public JsonResult addPointsSet(@RequestBody LevelBean levelBean) {
+
+    if (!StringUtils.isEmpty(levelBean.getDayPointsLi()) &&
+        !StringUtils.isEmpty(levelBean.getTaskPointsLi()) &&
+        !StringUtils.isEmpty(levelBean.getConsumePointsLi())) {
+      return pointsService.addPointsSet(levelBean);
+    } else {
+      return JsonResult.error("参数不能为空");
+    }
+  }
+
+  @GetMapping("/pointsSet/list")
+  @PreAuthorize("hasPermission('/user/add','')")
+  @ResponseBody
+  public JsonResult getPointsSet() {
+    try {
+      return JsonResult.ok().put("data", pointsService.getPointsSet());
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统查询错误");
+    }
+  }
+
+
+  /*
+   * 发放积分统计
+   *
+   * */
+  @GetMapping("/pointsReport/index")
+  public String pointsReportIndex() {
+    return "system/level/pointsreport";
+  }
+
+  @GetMapping("/pointsReport/list")
+  @PreAuthorize("hasPermission('/user/card','')")
+  @ResponseBody
+  public PageResult<LevelBean> getPointsReportList(
+      @RequestParam(value = "startdate", required = false) String startdate,
+      @RequestParam(value = "enddate", required = false) String enddate,
+      @RequestParam(value = "name", required = false) String name) {
+    try {
+      LevelBean levelBean = new LevelBean(name, startdate, enddate);
+      return pointsService.getPointsReportList(levelBean);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
index c359f08..7da281c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
@@ -97,4 +97,22 @@
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   JsonResult saveActive(TPointsActive tPointsActive);
+
+
+  /*
+  *
+  * 其他设置
+  * */
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  JsonResult addPointsSet(LevelBean levelBean);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  LevelBean getPointsSet();
+
+
+  /*
+  *发放积分统计
+  *
+  * */
+  PageResult<LevelBean>  getPointsReportList(LevelBean levelBean);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
index ab51abf..6204189 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
@@ -14,6 +14,7 @@
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.TradeDict;
 import com.supwisdom.dlpay.system.bean.LevelBean;
+import com.supwisdom.dlpay.system.service.ParamService;
 import com.supwisdom.dlpay.system.service.PointsService;
 import com.supwisdom.dlpay.util.ConstantUtil;
 import org.slf4j.Logger;
@@ -25,6 +26,8 @@
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -34,6 +37,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
 public class PointsServiceImpl implements PointsService {
@@ -61,7 +65,12 @@
   private PersondtlDao persondtlDao;
   @Autowired
   private PointsActiveDao pointsActiveDao;
-
+  @Autowired
+  private ParamService paramService;
+  @Autowired
+  private SysparaDao sysparaDao;
+  @Autowired
+  private BusinessparaDao businessparaDao;
 
   @Override
   public LevelBean getLevel() {
@@ -69,28 +78,11 @@
     Sort sort = new Sort(Sort.Direction.ASC, "id");
     List<TPersonLevel> list = personLevelDao.findAll(sort);
     if (!StringUtil.isEmpty(list)) levelBean.settPersonLevels(list);
-    List<TDictionary> tDictionaries =  dictionaryDao.findAllByDicttype("pointsdate");
-    if(tDictionaries!=null&&tDictionaries.size()>0){
-      levelBean.setPointsdate(Integer.parseInt(tDictionaries.get(0).getDictval()));
-    }
     return levelBean;
   }
 
   @Override
   public JsonResult saveLevel(LevelBean levelBean) {
-    List<TDictionary> tDictionaries =  dictionaryDao.findAllByDicttype("pointsdate");
-    if(tDictionaries!=null&&tDictionaries.size()>0){
-      tDictionaries.get(0).setDictval(levelBean.getPointsdate()+"");
-      dictionaryDao.save(tDictionaries.get(0));
-    }else {
-      TDictionary tDictionary = new TDictionary();
-      tDictionary.setDictcaption("积分中心的过期时间");
-      tDictionary.setDicttype("pointsdate");
-      tDictionary.setDicttypename("积分过期天数");
-      tDictionary.setDictval(levelBean.getPointsdate()+"");
-      tDictionary.setTenantId("{tenantid}");
-      dictionaryDao.save(tDictionary);
-    }
     List<TPersonLevel> tPersonLevel = levelBean.gettPersonLevels();
     personLevelDao.saveAll(tPersonLevel);
     return JsonResult.ok("成功");
@@ -126,25 +118,25 @@
   @Override
   public PageResult getTPointsByname(LevelBean param) {
     TCard tCard = cardDao.findCardByCardnoAndCardtype(param.getIdno(), ConstantUtil.CARDTYPE_CITIZENCARD);
-    if(tCard==null||StringUtil.isEmpty(tCard.getUserid())){
+    if (tCard == null || StringUtil.isEmpty(tCard.getUserid())) {
       return new PageResult<>(99, "未查询到该用户的信息");
     }
-    TPerson tPerson = personDao.findByUseridAndAndName(tCard.getUserid(),param.getName());
-    if(tPerson==null){
+    TPerson tPerson = personDao.findByUseridAndAndName(tCard.getUserid(), param.getName());
+    if (tPerson == null) {
       return new PageResult<>(99, "未查询到该用户的信息");
     }
     Optional<TPointsMain> pointsMain = pointsMainDao.findById(tCard.getUserid());
     TPointsMain tPointsMain;
     TPersonLevel tPersonLevel;
-    if(pointsMain.orElse(null)==null){
+    if (pointsMain.orElse(null) == null) {
       tPointsMain = new TPointsMain();
       tPointsMain.setPoints(0);
       tPointsMain.setUpdatetime(DateUtil.getNow("yyyy-MM-dd HH:mm:ss"));
       tPersonLevel = personLevelDao.findTPersonLevelByPoints(tPointsMain.getPoints());
-      if(tPersonLevel==null){
+      if (tPersonLevel == null) {
         return new PageResult<>(99, "请设置0积分等级");
       }
-    }else{
+    } else {
       tPointsMain = pointsMain.orElse(null);
       tPointsMain.setUpdatetime(DateUtil.parseToDateFormat(tPointsMain.getUpdatetime()));
       Optional<TPersonLevel> tPersonLeveltemp = personLevelDao.findById(tPointsMain.getLevelid());
@@ -162,7 +154,7 @@
       public Predicate toPredicate(Root<TPointsdtl> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
         List<Predicate> predicates = new ArrayList<>();
         if (!StringUtil.isEmpty(tCard.getUserid())) {
-          predicates.add(criteriaBuilder.equal(root.get("userid").as(String.class),  tCard.getUserid().trim()));
+          predicates.add(criteriaBuilder.equal(root.get("userid").as(String.class), tCard.getUserid().trim()));
         }
         if (!StringUtil.isEmpty(param.getStartDate())) {
           predicates.add(criteriaBuilder.ge(root.get("transdate").as(Long.class), Long.valueOf(DateUtil.unParseToDateFormat(param.getStartDate()))));
@@ -177,7 +169,7 @@
       }
     }, pageable);
 
-    if(page.getContent()!=null&&page.getContent().size()>0){
+    if (page.getContent() != null && page.getContent().size() > 0) {
       page.getContent().get(0).settPointsMain(tPointsMain);
     }
     return new PageResult<>(page);
@@ -186,21 +178,16 @@
   @Override
   public PageResult getTPointsdetailByname(LevelBean param) {
     Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
-    return new PageResult<>(pointsDtlDao.findAllByUserid(param.getUserid(),pageable));
+    return new PageResult<>(pointsDtlDao.findAllByUserid(param.getUserid(), pageable));
   }
 
 
-
   @Override
   public LevelBean getConpoints() {
     Sort sort = new Sort(Sort.Direction.ASC, "id");
-    List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype("month",sort);
-    List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype("day",sort);
-    List<TDictionary> tDictionaries =  dictionaryDao.findAllByDicttype("pointslimit");
+    List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype("month", sort);
+    List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype("day", sort);
     LevelBean levelBean = new LevelBean();
-    if(tDictionaries!=null&&tDictionaries.size()>0){
-      levelBean.setPointslimit(Integer.parseInt(tDictionaries.get(0).getDictval()));
-    }
     if (!StringUtil.isEmpty(monthlist)) levelBean.setMonthList(monthlist);
     if (!StringUtil.isEmpty(daylist)) levelBean.setDayList(daylist);
     return levelBean;
@@ -208,19 +195,6 @@
 
   @Override
   public JsonResult saveConpoints(LevelBean levelBean) {
-    List<TDictionary> tDictionaries =  dictionaryDao.findAllByDicttype("pointslimit");
-    if(tDictionaries!=null&&tDictionaries.size()>0){
-      tDictionaries.get(0).setDictval(levelBean.getPointslimit()+"");
-      dictionaryDao.save(tDictionaries.get(0));
-    }else {
-      TDictionary tDictionary = new TDictionary();
-      tDictionary.setDictcaption("积分中心的单日积分上限");
-      tDictionary.setDicttype("pointslimit");
-      tDictionary.setDicttypename("单日积分上限");
-      tDictionary.setDictval(levelBean.getPointslimit()+"");
-      tDictionary.setTenantId("{tenantid}");
-      dictionaryDao.save(tDictionary);
-    }
     List<TConsumePoints> consumePoints = levelBean.gettConsumePoints();
     consumePointsDao.saveAll(consumePoints);
     return JsonResult.ok("成功");
@@ -240,75 +214,75 @@
   }
 
   @Override
-  public Boolean singleHandlePoints(String userid, Double amount,String billno) {
+  public Boolean singleHandlePoints(String userid, Double amount, String billno) {
     int rate = 1;
     // 1.根据当天日期判断当天是否该用户的特殊日期或者生日,得到实际倍率
-    TPerson person =  personDao.findByUseridAndIdtype(userid,"idcard");
-    if(person!=null&&!StringUtil.isEmpty(person.getIdno())){
+    TPerson person = personDao.findByUseridAndIdtype(userid, "idcard");
+    if (person != null && !StringUtil.isEmpty(person.getIdno())) {
       String nowDate = DateUtil.getNow("MMdd");
-      String brithdate = person.getIdno().substring(10,4);
-      if(nowDate.equals(brithdate)){
+      String brithdate = person.getIdno().substring(10, 4);
+      if (nowDate.equals(brithdate)) {
         rate = 2;
       }
     }
     //2. 查询用户的等级,获取单次消费获得积分的规则
     TPersonLevel personLevel;
     Optional<TPointsMain> pointsMain = pointsMainDao.findById(userid);
-    if(pointsMain.orElse(null)!=null){
+    if (pointsMain.orElse(null) != null) {
       Integer levelid = pointsMain.orElse(null).getLevelid();
-      if(levelid!=null){
+      if (levelid != null) {
         personLevel = personLevelDao.getOne(levelid);
-      }else {
-        if(pointsMain.orElse(null).getPoints()==null){
+      } else {
+        if (pointsMain.orElse(null).getPoints() == null) {
           pointsMain.orElse(null).setPoints(0);
         }
         personLevel = personLevelDao.findTPersonLevelByPoints(pointsMain.orElse(null).getPoints());
       }
-    }else {
+    } else {
       return false;
     }
     //3. 根据规则计算积分,得到的积分与当日积分上限进行比较,得到实际获得的积分
     int resultPoints = 0;
-    if(amount >= personLevel.getSingleConsumeAmount()){
+    if (amount >= personLevel.getSingleConsumeAmount()) {
       BigDecimal bigDecimal = new BigDecimal(amount);
-      BigDecimal result = bigDecimal.divide(new BigDecimal(personLevel.getSingleAmount()),0,BigDecimal.ROUND_DOWN);
+      BigDecimal result = bigDecimal.divide(new BigDecimal(personLevel.getSingleAmount()), 0, BigDecimal.ROUND_DOWN);
       int resultInt = result.intValue();
       //计算得到的积分
       resultPoints = resultInt * personLevel.getSinglePoints();
       //获得流水积分
-      List<TPointsdtl> tPointsdtls = pointsDtlDao.findAllByUseridAndTypeAndFlagstatus(userid,"","in");
+      List<TPointsdtl> tPointsdtls = pointsDtlDao.findAllByUseridAndTypeAndFlagstatus(userid, "", "in");
       int allPoints = tPointsdtls.stream().mapToInt(o -> Integer.parseInt(o.getPoints())).sum();
-      List<TDictionary> tDictionaries =  dictionaryDao.findAllByDicttype("pointslimit");
+      List<TDictionary> tDictionaries = dictionaryDao.findAllByDicttype("pointslimit");
       int pointslimit = 0;
-      if(tDictionaries!=null&&tDictionaries.size()>0){
+      if (tDictionaries != null && tDictionaries.size() > 0) {
         pointslimit = Integer.parseInt(tDictionaries.get(0).getDictval());
       }
-      if(allPoints<pointslimit){
-        if(allPoints+resultPoints>=pointslimit){
+      if (allPoints < pointslimit) {
+        if (allPoints + resultPoints >= pointslimit) {
           resultPoints = pointslimit - allPoints;
         }
       }
     }
     //4. 对积分的主子表和流水表进行添加,查询用户的积分,得到的积分去查询等级表更新用户的等级
-    insertDtl(userid, TradeDict.CONSUME_FLAG_SINGLE,resultPoints*rate,personLevel.getId(),billno);
+    insertDtl(userid, TradeDict.CONSUME_FLAG_SINGLE, resultPoints * rate, personLevel.getId(), billno);
     return null;
   }
 
   @Override
-  public Boolean dayHandlePoints(String userid,String billno) {
+  public Boolean dayHandlePoints(String userid, String billno) {
     // 1.根据用户id查询积分流水表获得当日的消费金额
-    List<TPersondtl> tPersondtl = persondtlDao.findAllByUseridAndTransdateAndReverseFlagAndStatus(userid, DateUtil.getNow("yyyyMMdd"),"none","success");
+    List<TPersondtl> tPersondtl = persondtlDao.findAllByUseridAndTransdateAndReverseFlagAndStatus(userid, DateUtil.getNow("yyyyMMdd"), "none", "success");
     Double allConsume = tPersondtl.stream().mapToDouble(o -> o.getAmount()).sum();
     // 2.循环日消费奖励规则
     Sort sort = new Sort(Sort.Direction.ASC, "id");
-    List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype("day",sort);
-    for(TConsumePoints temp:daylist){
+    List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype("day", sort);
+    for (TConsumePoints temp : daylist) {
       // 3.判断用户是否达到日消费奖励积分的额度,达到再次判断是否获得过该规则的奖励
-      if(allConsume>Double.parseDouble(temp.getConsumeamount())){
+      if (allConsume > Double.parseDouble(temp.getConsumeamount())) {
         TPointsdtl tPointsdtltemp = pointsDtlDao.findAllByUseridAndTransdateAndRefno(userid, DateUtil.getNow("yyyyMMdd"), temp.getId());
-        if(tPointsdtltemp==null){
+        if (tPointsdtltemp == null) {
           // 4.奖励的积分对积分主子表和流水表进行添加
-          insertDtl(userid, TradeDict.CONSUME_FLAG_DAY,temp.getPoints(),temp.getId(),billno);
+          insertDtl(userid, TradeDict.CONSUME_FLAG_DAY, temp.getPoints(), temp.getId(), billno);
         }
       }
     }
@@ -316,39 +290,39 @@
   }
 
   @Override
-  public Boolean monthHandlePoints(String userid,String billno) {
+  public Boolean monthHandlePoints(String userid, String billno) {
     // 1.根据用户id查询积分流水表获得当月的消费金额
-    List<TPersondtl> tPersondtl = persondtlDao.findAllByUseridAndTransdateStartingWithAndReverseFlagAndStatus(userid, DateUtil.getNow("yyyyMM"),"none","success");
+    List<TPersondtl> tPersondtl = persondtlDao.findAllByUseridAndTransdateStartingWithAndReverseFlagAndStatus(userid, DateUtil.getNow("yyyyMM"), "none", "success");
     Double allConsume = tPersondtl.stream().mapToDouble(o -> o.getAmount()).sum();
     // 2.循环月消费奖励规则
     Sort sort = new Sort(Sort.Direction.ASC, "id");
-    List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype("month",sort);
-    for(TConsumePoints temp:monthlist){
-    // 3.判断用户是否达到月消费奖励积分的额度,达到再次判断是否获得过该规则的奖励
-      if(allConsume>Double.parseDouble(temp.getConsumeamount())){
+    List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype("month", sort);
+    for (TConsumePoints temp : monthlist) {
+      // 3.判断用户是否达到月消费奖励积分的额度,达到再次判断是否获得过该规则的奖励
+      if (allConsume > Double.parseDouble(temp.getConsumeamount())) {
         TPointsdtl tPointsdtltemp = pointsDtlDao.findAllByUseridAndTransdateAndRefno(userid, DateUtil.getNow("yyyyMMdd"), temp.getId());
-        if(tPointsdtltemp==null){
+        if (tPointsdtltemp == null) {
           // 4.奖励的积分对积分主子表和流水表进行添加
-          insertDtl(userid, TradeDict.CONSUME_FLAG_DAY,temp.getPoints(),temp.getId(),billno);
+          insertDtl(userid, TradeDict.CONSUME_FLAG_DAY, temp.getPoints(), temp.getId(), billno);
         }
       }
     }
     return null;
   }
 
-  public Boolean insertDtl(String userid,String type,int points,Integer refno,String billno){
-      //主表流水
+  public Boolean insertDtl(String userid, String type, int points, Integer refno, String billno) {
+    //主表流水
     TPointsMain tPointsMain;
     Optional<TPointsMain> pointsMain = pointsMainDao.findById(userid);
-    if(pointsMain.orElse(null)!=null){
+    if (pointsMain.orElse(null) != null) {
       tPointsMain = pointsMain.orElse(null);
-      tPointsMain.setPoints(tPointsMain.getPoints()+points);
-      tPointsMain.setAccumPoints(tPointsMain.getAccumPoints()+points);
+      tPointsMain.setPoints(tPointsMain.getPoints() + points);
+      tPointsMain.setAccumPoints(tPointsMain.getAccumPoints() + points);
       TPersonLevel tPersonLevelByPoints = personLevelDao.findTPersonLevelByPoints(tPointsMain.getPoints());
-      if(tPersonLevelByPoints.getId()>tPointsMain.getLevelid()){
+      if (tPersonLevelByPoints.getId() > tPointsMain.getLevelid()) {
         tPointsMain.setLevelid(tPersonLevelByPoints.getId());
       }
-    }else{
+    } else {
       tPointsMain = new TPointsMain();
       tPointsMain.setUserid(userid);
       tPointsMain.setPoints(points);
@@ -362,11 +336,11 @@
     TPointsDetail tPointsDetail = new TPointsDetail();
     tPointsDetail.setUserid(userid);
     tPointsDetail.setPoints(points);
-    List<TDictionary> tDictionaries =  dictionaryDao.findAllByDicttype("pointsdate");
-    if(tDictionaries!=null&&tDictionaries.size()>0){
+    List<TDictionary> tDictionaries = dictionaryDao.findAllByDicttype("pointsdate");
+    if (tDictionaries != null && tDictionaries.size() > 0) {
       String outdate = DateUtil.getNowInterDay(Integer.parseInt(tDictionaries.get(0).getDictval()));
       tPointsDetail.setOutDate(outdate);
-    }else {
+    } else {
       return false;
     }
     TPointsDetail tPointsDetailresult = pointsDetailDao.save(tPointsDetail);
@@ -375,7 +349,7 @@
     tPointsdtl.setRefno(refno);
     tPointsdtl.setType(type);
     tPointsdtl.setUserid(userid);
-    tPointsdtl.setPoints("+"+points);
+    tPointsdtl.setPoints("+" + points);
     tPointsdtl.setStatus("init");
     tPointsdtl.setAftpoints(tPointsMainResult.getPoints());
     tPointsdtl.setBillno(billno);
@@ -392,19 +366,18 @@
   }
 
 
-
   @Override
   public PageResult getActiveList(LevelBean param) {
-    Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize(),Sort.by("id"));
+    Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize(), Sort.by("id"));
     Page<TPointsActive> page = pointsActiveDao.findAll(new Specification<TPointsActive>() {
       @Override
       public Predicate toPredicate(Root<TPointsActive> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
         List<Predicate> predicates = new ArrayList<>();
         if (!StringUtil.isEmpty(param.getName())) {
-          predicates.add(criteriaBuilder.like(root.get("name").as(String.class), "%" +param.getName().trim()  + "%"));
+          predicates.add(criteriaBuilder.like(root.get("name").as(String.class), "%" + param.getName().trim() + "%"));
         }
         if (!StringUtil.isEmpty(param.getType())) {
-          predicates.add(criteriaBuilder.equal(root.get("type").as(String.class),  param.getType().trim()));
+          predicates.add(criteriaBuilder.equal(root.get("type").as(String.class), param.getType().trim()));
         }
         return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
       }
@@ -423,17 +396,159 @@
 
   @Override
   public JsonResult saveActive(TPointsActive tPointsActive) {
-    if("no".equals(tPointsActive.getType())){
+    if ("no".equals(tPointsActive.getType())) {
       tPointsActive.setWeeknumber(null);
-      tPointsActive.setStartdate(DateUtil.formatDateStr(tPointsActive.getStartdate(),"yyyy年MM月dd日","yyyyMMdd"));
-      tPointsActive.setEnddate(DateUtil.formatDateStr(tPointsActive.getEnddate(),"yyyy年MM月dd日","yyyyMMdd"));
+      tPointsActive.setStartdate(DateUtil.formatDateStr(tPointsActive.getStartdate(), "yyyy年MM月dd日", "yyyyMMdd"));
+      tPointsActive.setEnddate(DateUtil.formatDateStr(tPointsActive.getEnddate(), "yyyy年MM月dd日", "yyyyMMdd"));
     }
-    if("year".equals(tPointsActive.getType())){
+    if ("year".equals(tPointsActive.getType())) {
       tPointsActive.setWeeknumber(null);
-      tPointsActive.setStartdate(DateUtil.formatDateStr(tPointsActive.getYearStartDate(),"MM月dd日","MMdd"));
-      tPointsActive.setEnddate(DateUtil.formatDateStr(tPointsActive.getYearEndDate(),"MM月dd日","MMdd"));
+      tPointsActive.setStartdate(DateUtil.formatDateStr(tPointsActive.getYearStartDate(), "MM月dd日", "MMdd"));
+      tPointsActive.setEnddate(DateUtil.formatDateStr(tPointsActive.getYearEndDate(), "MM月dd日", "MMdd"));
     }
     pointsActiveDao.save(tPointsActive);
     return JsonResult.ok("成功");
   }
+
+  @Override
+  public JsonResult addPointsSet(LevelBean levelBean) {
+
+    TBusinesspara tBusinesspara = new TBusinesspara();
+    tBusinesspara.setTenantId("{tenantid}");
+    tBusinesspara.setParakey("dayPointsLi");
+    tBusinesspara.setParaval(levelBean.getDayPointsLi());
+    businessparaDao.save(tBusinesspara);
+    tBusinesspara.setParakey("taskPointsLi");
+    tBusinesspara.setParaval(levelBean.getTaskPointsLi());
+    businessparaDao.save(tBusinesspara);
+    tBusinesspara.setParakey("consumePointsLi");
+    tBusinesspara.setParaval(levelBean.getConsumePointsLi());
+    businessparaDao.save(tBusinesspara);
+    return JsonResult.ok();
+  }
+
+  @Override
+  public LevelBean getPointsSet() {
+    TBusinesspara dayPointsLi = businessparaDao.findByParakey("dayPointsLi");
+    TBusinesspara taskPointsLi = businessparaDao.findByParakey("taskPointsLi");
+    TBusinesspara consumePointsLi = businessparaDao.findByParakey("consumePointsLi");
+    LevelBean levelBean1 = new LevelBean();
+    if (dayPointsLi != null && !StringUtils.isEmpty(dayPointsLi.getParaval())) {
+      levelBean1.setDayPointsLi(dayPointsLi.getParaval());
+    }
+    if (taskPointsLi != null && !StringUtils.isEmpty(taskPointsLi.getParaval())) {
+      levelBean1.setTaskPointsLi(taskPointsLi.getParaval());
+    }
+    if (consumePointsLi != null && !StringUtils.isEmpty(consumePointsLi.getParaval())) {
+      levelBean1.setConsumePointsLi(consumePointsLi.getParaval());
+    }
+    return levelBean1;
+  }
+
+
+  @Override
+  public PageResult getPointsReportList(LevelBean param) {
+    List<LevelBean> levelBeans = new ArrayList<>();
+    if (!StringUtil.isEmpty(param.getName())) {
+      LevelBean levelBean = getPointsDtlByType(param);
+      levelBeans.add(levelBean);
+      return new PageResult<>(levelBeans);
+    } else {
+      //统计每个任务获取的积分
+      List<TPointsTask> all = pointsTaskDao.findAll();
+      all.stream().forEach( e -> {
+        LevelBean levelBeanTask = new LevelBean();
+        levelBeanTask.setStartDate(param.getStartDate());
+        levelBeanTask.setEndDate(param.getEndDate());
+        levelBeanTask.setRefno(e.getTaskid());
+        levelBeanTask.setType("task");
+        LevelBean levelBean1 = getPointsDtlByType(levelBeanTask);
+        levelBean1.setPointsName(e.getTaskname());
+        levelBeans.add(levelBean1);
+      });
+      Integer taskSum = levelBeans.stream().mapToInt(o -> o.getPointsSum()).sum();
+      Integer taskCount = levelBeans.stream().mapToInt(o -> o.getPointsCount()).sum();
+      LevelBean taskLevelBean = new LevelBean();
+      taskLevelBean.setPointsSum(taskSum);
+      taskLevelBean.setPointsCount(taskCount);
+      taskLevelBean.setPointsName("日常任务积分合计");
+      levelBeans.add(taskLevelBean);
+      //统计单次消费积分
+      List<TPersonLevel> personLevels = personLevelDao.findAll();
+      List<Integer> personLevelTemp = personLevels.stream().map(TPersonLevel::getId).collect(Collectors.toList());
+      LevelBean personLevelBean = new LevelBean();
+      personLevelBean.setStartDate(param.getStartDate());
+      personLevelBean.setEndDate(param.getEndDate());
+    //  personLevelBean.setRefnoList(personLevelTemp);
+      personLevelBean.setType("consume");
+      LevelBean personLevelResult = getPointsDtlByType(personLevelBean);
+      personLevelResult.setPointsName("消费积分");
+      levelBeans.add(personLevelResult);
+      //统计日累计消费积分
+      Sort sort = new Sort(Sort.Direction.ASC, "id");
+      List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype("day", sort);
+      List<Integer> dayTemp = daylist.stream().map(TConsumePoints::getId).collect(Collectors.toList());
+      LevelBean dayTempBean = new LevelBean();
+      dayTempBean.setStartDate(param.getStartDate());
+      dayTempBean.setEndDate(param.getEndDate());
+     // dayTempBean.setRefnoList(dayTemp);
+      dayTempBean.setType("consumeday");
+      LevelBean dayTempResult = getPointsDtlByType(dayTempBean);
+      dayTempResult.setPointsName("日累计奖励积分");
+      levelBeans.add(dayTempResult);
+      //统计月累计消费积分
+      List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype("month", sort);
+      List<Integer> monthTemp = monthlist.stream().map(TConsumePoints::getId).collect(Collectors.toList());
+      LevelBean monthTempBean = new LevelBean();
+      monthTempBean.setStartDate(param.getStartDate());
+      monthTempBean.setEndDate(param.getEndDate());
+      //monthTempBean.setRefnoList(monthTemp);
+      monthTempBean.setType("consumemonth");
+      LevelBean monthTempResult = getPointsDtlByType(monthTempBean);
+      monthTempResult.setPointsName("月累计奖励积分");
+      levelBeans.add(monthTempResult);
+      //消费积分合计
+      LevelBean consume = new LevelBean();
+      consume.setPointsSum(personLevelResult.getPointsSum()+dayTempResult.getPointsSum()+monthTempResult.getPointsSum());
+      consume.setPointsCount(personLevelResult.getPointsCount()+dayTempResult.getPointsCount()+monthTempResult.getPointsCount());
+      consume.setPointsName("消费积分合计");
+      levelBeans.add(consume);
+      //all.stream().map(TPointsTask::getTaskid).collect(Collectors.toList());
+      return new PageResult<>(levelBeans);
+    }
+  }
+
+  LevelBean getPointsDtlByType(LevelBean param) {
+    List<TPointsdtl> tPointsdtls = pointsDtlDao.findAll(new Specification<TPointsdtl>() {
+      @Override
+      public Predicate toPredicate(Root<TPointsdtl> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+        List<Predicate> predicates = new ArrayList<>();
+        if (!StringUtil.isEmpty(param.getStartDate())) {
+          predicates.add(criteriaBuilder.ge(root.get("transdate").as(Long.class), Long.valueOf(DateUtil.unParseToDateFormat(param.getStartDate()))));
+        }
+        if (!StringUtil.isEmpty(param.getEndDate())) {
+          predicates.add(criteriaBuilder.le(root.get("transdate").as(Long.class), Long.valueOf(DateUtil.unParseToDateFormat(param.getEndDate()))));
+        }
+        if (param.getRefno()!=null) {
+          predicates.add(criteriaBuilder.equal(root.get("refno").as(Integer.class), param.getRefno()));
+        }
+        if (param.getType()!=null) {
+          predicates.add(criteriaBuilder.equal(root.get("type").as(String.class), param.getType()));
+        }
+        if (!CollectionUtils.isEmpty(param.getRefnoList())) {
+          CriteriaBuilder.In<Object> in = criteriaBuilder.in(root.get("refno"));
+          for (Integer refnoTemp:param.getRefnoList()){
+            in.value(refnoTemp);
+          }
+          predicates.add(criteriaBuilder.and(in));
+        }
+        return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+      }
+    });
+    Integer allPoints = tPointsdtls.stream().mapToInt(o -> Integer.parseInt(o.getPoints())).sum();
+    LevelBean levelBean = new LevelBean();
+    levelBean.setPointsSum(allPoints);
+    levelBean.setPointsCount(tPointsdtls.size());
+    return levelBean;
+  }
 }
diff --git a/payapi/src/main/resources/templates/system/level/index.html b/payapi/src/main/resources/templates/system/level/index.html
index 1766c08..ced51a0 100644
--- a/payapi/src/main/resources/templates/system/level/index.html
+++ b/payapi/src/main/resources/templates/system/level/index.html
@@ -3,6 +3,7 @@
         <li class="layui-this">会员等级设置</li>
         <li>日常任务积分设置</li>
         <li>消费奖励积分设置</li>
+        <li>其他设置</li>
         <span class="layui-breadcrumb pull-right">
           <a href="#">积分中心</a>
           <a><cite>积分规则管理</cite></a>
@@ -10,42 +11,69 @@
     </ul>
     <div class="layui-tab-content">
         <div class="layui-tab-item layui-show" style="background-color: white">
-            <form id="level-form" lay-filter="user-form" class="layui-form model-form">
+            <form id="level-form" lay-filter="user-form" class="layui-form model-form layui-form-pane">
                 <div style="margin: 20px">
                     <button type="button" class="layui-btn" id="add">添加等级</button>
                     <button type="button" class="layui-btn" lay-filter="level-form-submit" lay-submit>保存
                     </button>
                 </div>
-                <div style="margin: 20px;background-color: darkgray" id="levelstr" >
+                <div style="margin: 20px;background-color: darkgray" id="levelstr">
 
-                    <div class="levelclass layui-card" ><div class="layui-card-header">1级会员设置:</div>
+                    <div class="levelclass layui-card">
+                        <div class="layui-card-header" style="font-weight: 700">1级会员设置:</div>
                         <div class="layui-card-body">
-                            会员名称为  <input type="text" name="name" required lay-verify="required" autocomplete="off"
-                               class="layui-input"
-                               style="width: 150px;display: inline;height: 35px;margin: 6px" id="lename">
-                        ,累计积分为
-                        <input type="number" name="pointsLower" required lay-verify="required"
-                               autocomplete="off"
-                               class="layui-input"
-                               style="width: 80px;display: inline;height: 35px;margin: 6px" id="lelow">---
-                        <input type="number" name="pointsUpper" required lay-verify="required"
-                               autocomplete="off"
-                               class="layui-input"
-                               style="width: 80px;display: inline;height: 35px;margin: 6px" id="leupp">分。
-                        <input type="text" name="levelid" id="levelid1" style="display: none"/>
-                        <div style="margin-left: 85px">订单实付金额满
-                            <input type="number" name="singleConsumeAmount" id="singleConsumeAmount" class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" required lay-verify="required"/>元时,每消费
-                            <input type="number" name="singleAmount"  id="singleAmount" class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" required lay-verify="required"/>元,可获得
-                            <input type="number" name="singlePoints" id="singlePoints" class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" required lay-verify="required"/>积分;
-                        </div>
+                            <div style="display: flex;width: 398px;float: left;margin-left: 90px">
+                                <div style="display: inline;margin-top: 8px;margin-right: 15px">会员名称</div>
+                                <input type="text" name="name" required lay-verify="required"
+                                       autocomplete="off"
+                                       class="layui-input"
+                                       style="width: 210px;display: inline;height: 38px;text-align: center"
+                                       id="lename">
+                            </div>
+                            <div style="display: flex;width: 400px">
+                                <div style="display: inline;margin-top: 8px;margin-right: 15px">累计积分</div>
+                                <div class="layui-form-item" style="display: inline">
+                                    <label class="layui-form-label" style="width: 80px">大于</label>
+                                    <div class="layui-input-inline" style="margin-right: 0px;width: 150px">
+                                        <input type="number" name="pointsLower" required lay-verify="required"
+                                               autocomplete="off"
+                                               class="layui-input"
+                                               id="lelow" style="text-align: center">
+                                    </div>
+                                    <label class="layui-form-label" style="width: 60px">分</label>
+                                </div>
+                            </div>
+                            <input type="text" name="levelid" id="levelid1" style="display: none"/>
+                            <div style="display: flex;margin-left: 90px">
+                                <div style="display: inline;margin-top: 8px;margin-right: 15px">单笔消费</div>
+                                <div class="layui-form-item" style="display: inline">
+                                    <label class="layui-form-label" style="width: 80px">实付满</label>
+                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">
+                                        <input type="number" name="singleConsumeAmount"
+                                               id="singleConsumeAmount" class="layui-input"
+                                               style="text-align: center" required lay-verify="required"/>
+                                    </div>
+                                    <label class="layui-form-label" style="width: 110px">元,每消费</label>
+                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">
+                                        <input type="number" name="singleAmount" id="singleAmount"
+                                               class="layui-input" required style="text-align: center"
+                                               lay-verify="required"/>
+                                    </div>
+                                    <label class="layui-form-label" style="width: 110px">元,可获得</label>
+                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">
+                                        <input type="number" name="singlePoints" id="singlePoints"
+                                               class="layui-input" required style="text-align: center"
+                                               lay-verify="required"/>
+                                    </div>
+                                    <label class="layui-form-label" style="width: 60px">分</label>
+                                </div>
+                            </div>
                         </div>
                     </div>
+
+
                 </div>
-                <div style="margin: 20px">
-                    <div style="font-weight: 700">积分到期设置</div>
-                    <div>每隔<input type="number" name="pointsdate" id="pointsdate" class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" required lay-verify="required"/>
-                        日,清除积分。<span style="font-weight: 200">(不影响历史积分,从修改当日起生效。)</span></div>
-                </div>
+
             </form>
         </div>
         <div class="layui-tab-item" style="background-color: white">
@@ -77,13 +105,6 @@
                                 <input type="text" name="conPointsid" id="conPointsid" style="display: none"/>
                             </div>
                         </div>
-                        <div>单日消费积分上限
-                            <input type="text" name="pointslimit" required lay-verify="required"
-                                   autocomplete="off"
-                                   class="layui-input"
-                                   style="width: 60px;display: inline;height: 28px;margin: 6px"
-                                   id="pointslimit">积分。
-                        </div>
                     </div>
                 </div>
                 <div style="margin: 20px">
@@ -113,10 +134,60 @@
                 </div>
             </form>
         </div>
+        <div class="layui-tab-item" style="background-color: white">
+            <form id="set-form" lay-filter="set-form" class="layui-form model-form layui-form-pane">
+                <button type="button" class="layui-btn" lay-filter="set-form-submit" lay-submit
+                        style="margin-left: 20px">保存
+                </button>
+                <div class=" layui-card">
+                    <div class="layui-card-header" style="font-weight: 700">积分上限设置</div>
+                    <div class="layui-card-body">
+                        <div style="display:flex;width: 400px">
+                            <div style="display: inline;margin-top: 8px;margin-right: 15px">单日消费积分上限</div>
+                            <div class="layui-form-item" style="display: inline">
+                                <div class="layui-input-inline" style="margin-right: 0px;width: 150px">
+                                    <input type="number"  required lay-verify="required" autocomplete="off" class="layui-input"
+                                           id="consumePointsLi" style="text-align: center">
+                                </div>
+                                <label class="layui-form-label" style="width: 60px">分</label>
+                            </div>
+                        </div>
+                        <div style="display:flex;width: 400px">
+                            <div style="display: inline;margin-top: 8px;margin-right: 15px">单日任务积分上限</div>
+                            <div class="layui-form-item" style="display: inline">
+                                <div class="layui-input-inline" style="margin-right: 0px;width: 150px">
+                                    <input type="number"  required lay-verify="required" autocomplete="off"
+                                           class="layui-input"
+                                           id="taskPointsLi" style="text-align: center">
+                                </div>
+                                <label class="layui-form-label" style="width: 60px">分</label>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class=" layui-card">
+                    <div class="layui-card-header" style="font-weight: 700">积分到期设置</div>
+                    <div class="layui-card-body">
+                        <div style="display:flex;width: 600px">
+                            <div style="display: inline;margin-top: 8px;margin-right: 15px">每隔</div>
+                            <div class="layui-form-item" style="display: inline">
+                                <div class="layui-input-inline" style="margin-right: 0px;width: 150px">
+                                    <input type="number"  required lay-verify="required" autocomplete="off"
+                                           class="layui-input" id="dayPointsLi" style="text-align: center">
+                                </div>
+                                <label class="layui-form-label" style="width: 60px">日</label>
+                            </div>
+                            <div style="display: inline;margin-top: 8px;margin-right: 15px">
+                                清除积分。<span style="font-weight: 200">(不影响历史积分,从修改当日起生效。)</span></div>
+                        </div>
+                    </div>
+                </div>
+            </form>
+        </div>
     </div>
 </div>
 <script>
-    layui.use(['layer', 'upload', 'form', 'element', 'admin', 'table'], function () {
+    layui.use(['layer', 'upload', 'form', 'element', 'admin', 'table', 'layedit'], function () {
         //
         //   等级添加
         //
@@ -159,8 +230,8 @@
                 });
                 tPersonLevels.push(tperson);
             });
-            let pointsdate = $("#pointsdate").val();
-            var data = {'tPersonLevels': tPersonLevels,'pointsdate': pointsdate};
+
+            var data = {'tPersonLevels': tPersonLevels};
             var url = '[[@{/level/add}]]';
             layer.confirm('确认保存?', {
                 icon: 3, title: '提示'
@@ -181,7 +252,8 @@
                         layer.closeAll('loading');
                         if (result.code === 200) {
                             layer.msg(result.msg, {icon: 1});
-                            parent.location.reload();
+                            admin.refresh();
+                            // parent.location.reload();
                         } else if (result.code === 401) {
                             layer.msg(result.msg, {icon: 2, time: 1500}, function () {
                                 location.replace('[[@{/login}]]');
@@ -202,24 +274,48 @@
         });
         var x = 2;
         $("#add").click(function () {
-            let str = ' <div class="levelclass layui-card" ><div class="layui-card-header"> ' + x +
-                '级会员设置: </div>\n' +
-                '                        <div class="layui-card-body"> 会员名称为 ' +
-                '<input type="text" name="name" required lay-verify="required" autocomplete="off"' +
-                'class="layui-input" style="width: 150px;display: inline;height: 35px;margin: 6px">' +
-                '   ,累计积分为 ' +
-                '<input type="number" name="pointsLower" required lay-verify="required" autocomplete="off" class="layui-input"' +
-                'style="width: 80px;display: inline;height: 35px;margin: 6px">--- ' +
-                '<input type="number" name="pointsUpper" required lay-verify="required" autocomplete="off"' +
-                'class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px">分。 ' +
-                ' <input type="number" name="levelid' + x + '" id="levelid" style="display: none"/> ' +
+            let str = ' <div class="levelclass layui-card"><div class="layui-card-header" style="font-weight: 700"> ' + x +
+                '级会员设置:</div> <div class="layui-card-body"><div style="display: flex;width: 398px;float: left;margin-left: 90px">' +
+                '<div style="display: inline;margin-top: 8px;margin-right: 15px">   会员名称</div> ' +
+                '<input type="text" name="name" required lay-verify="required"  autocomplete="off"  class="layui-input"   ' +
+                'style="width: 210px;display: inline;height: 38px;text-align: center"  id="lename"></div>   ' +
+                '<div style="display: flex;width: 400px">\n' +
+                '                                <div style="display: inline;margin-top: 8px;margin-right: 15px">累计积分</div>\n' +
+                '                                <div class="layui-form-item" style="display: inline">\n' +
+                '                                    <label class="layui-form-label" style="width: 80px">大于</label>\n' +
+                '                                    <div class="layui-input-inline" style="margin-right: 0px;width: 150px">\n' +
+                '                                        <input type="number" name="pointsLower" required lay-verify="required"\n' +
+                '                                               autocomplete="off" style="text-align: center"' +
+                '                                               class="layui-input"\n' +
+                '                                               id="lelow">\n' +
+                '                                    </div>\n' +
+                '                                    <label class="layui-form-label" style="width: 60px">分</label>\n' +
+                '                                </div>\n' +
+                '                            </div>\n' +
+                '                            <input type="text" name="levelid" id="levelid' + x + '" style="display: none"/>\n' +
+                '                            <div style="display: flex;margin-left: 90px">\n' +
+                '                                <div style="display: inline;margin-top: 8px;margin-right: 15px">单笔消费</div>\n' +
+                '                                <div class="layui-form-item" style="display: inline">\n' +
+                '                                    <label class="layui-form-label" style="width: 80px">实付满</label>\n' +
+                '                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+                '                                        <input type="number" name="singleConsumeAmount" id="singleConsumeAmount" class="layui-input" style="text-align: center" required lay-verify="required"/>\n' +
+                '                                    </div>\n' +
+                '                                    <label class="layui-form-label" style="width: 110px">元,每消费</label>\n' +
+                '                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+                '                                        <input type="number" name="singleAmount" id="singleAmount" class="layui-input" required\n' +
+                '                                               lay-verify="required" style="text-align: center"/>\n' +
+                '                                    </div>\n' +
+                '                                    <label class="layui-form-label" style="width: 110px">元,可获得</label>\n' +
+                '                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+                '                                        <input type="number" name="singlePoints" id="singlePoints" class="layui-input" required\n' +
+                '                                               lay-verify="required" style="text-align: center"/>\n' +
+                '                                    </div>\n' +
+                '                                    <label class="layui-form-label" style="width: 60px">分</label>\n' +
                 '<button type="button" class="layui-btn layui-btn-danger removeclass" id="removeid' + x + '" style="display: inline">删除</button>' +
-                '<div style="margin-left: 85px">订单实付金额满\n' +
-                '<input type="number" name="singleConsumeAmount" class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" required lay-verify="required"/>元时,每消费\n' +
-                '<input type="number" name="singleAmount"  class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" required lay-verify="required"/>元,可获得\n' +
-                '<input type="number" name="singlePoints" class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" required lay-verify="required"/>积分;\n' +
-                '</div>  </div>'
-            '</div>';
+                '                                </div>\n' +
+                '                            </div>\n' +
+                '                        </div>\n' +
+                '                    </div>';
             if (x !== 2) {
                 let temp = x - 1;
                 document.getElementById("removeid" + temp).style.display = "none";
@@ -254,7 +350,7 @@
                                 if (tempp > 1) {
                                     document.getElementById("removeid" + tempp).style.display = "inline";
                                 }
-                                $(_this).parent().parent().remove();
+                                $(_this).parent().parent().parent().parent().remove();
                                 x--;
                             } else if (result.code === 401) {
                                 layer.msg(result.msg, {icon: 2, time: 1500}, function () {
@@ -275,7 +371,7 @@
                     if (tempp > 1) {
                         document.getElementById("removeid" + tempp).style.display = "inline";
                     }
-                    $(_this).parent().parent().remove();
+                    $(_this).parent().parent().parent().parent().remove();
                     x--;
                 }
                 layer.close(index);
@@ -308,27 +404,52 @@
                             $("#singleConsumeAmount").val(datalist[i].singleConsumeAmount);
                             $("#singleAmount").val(datalist[i].singleAmount);
                             $("#singlePoints").val(datalist[i].singlePoints);
-                            $("#pointsdate").val(result.pointsdate);
                         }
                         if (i > 0) {
-                            var strr = ' <div class="levelclass layui-card" ><div class="layui-card-header">  ' + x +
-                                '级会员设置: </div>\n' +
-                                '                        <div class="layui-card-body"> 会员名称为 ' +
-                                '<input type="text" name="name" required lay-verify="required" autocomplete="off"' + 'value="' + datalist[i].name + '"' +
-                                'class="layui-input" style="width: 150px;display: inline;height: 35px;margin: 6px">' +
-                                '   ,累计积分为 ' +
-                                '<input type="number" name="pointsLower" required lay-verify="required" autocomplete="off" class="layui-input"' + 'value="' + datalist[i].pointsLower + '"' +
-                                'style="width: 80px;display: inline;height: 35px;margin: 6px">--- ' +
-                                '<input type="number" name="pointsUpper" required lay-verify="required" autocomplete="off"' + 'value="' + datalist[i].pointsUpper + '"' +
-                                'class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px">分。 ' +
-                                ' <input type="text" name="levelid" id="levelid' + x + '" style="display: none" ' + 'value="' + datalist[i].id + '"/> ' +
+                            var strr = ' <div class="levelclass layui-card"><div class="layui-card-header" style="font-weight: 700"> ' + x +
+                                '级会员设置:</div> <div class="layui-card-body"><div style="display: flex;width: 398px;float: left;margin-left: 90px">' +
+                                '<div style="display: inline;margin-top: 8px;margin-right: 15px">   会员名称</div> ' +
+                                '<input type="text" name="name" required lay-verify="required"  autocomplete="off" ' + 'value="' + datalist[i].name + '"' +
+                                ' class="layui-input"   ' +
+                                'style="width: 210px;display: inline;height: 38px;text-align: center"  id="lename"></div>   ' +
+                                '<div style="display: flex;width: 400px">\n' +
+                                '                                <div style="display: inline;margin-top: 8px;margin-right: 15px">累计积分</div>\n' +
+                                '                                <div class="layui-form-item" style="display: inline">\n' +
+                                '                                    <label class="layui-form-label" style="width: 80px">大于</label>\n' +
+                                '                                    <div class="layui-input-inline" style="margin-right: 0px;width: 150px">\n' +
+                                '                                        <input type="number" name="pointsLower" required lay-verify="required"\n' + 'value="' + datalist[i].pointsLower + '"' +
+                                '                                               autocomplete="off" style="text-align: center" \n' +
+                                '                                               class="layui-input"\n' +
+                                '                                               id="lelow">\n' +
+                                '                                    </div>\n' +
+                                '                                    <label class="layui-form-label" style="width: 60px">分</label>\n' +
+                                '                                </div>\n' +
+                                '                            </div>\n' +
+                                '                            <input type="text" name="levelid" id="levelid' + x + '" style="display: none"' + ' value="' + datalist[i].id + '"/> ' +
+                                '                            <div style="display: flex;margin-left: 90px">\n' +
+                                '                                <div style="display: inline;margin-top: 8px;margin-right: 15px">单笔消费</div>\n' +
+                                '                                <div class="layui-form-item" style="display: inline">\n' +
+                                '                                    <label class="layui-form-label" style="width: 80px">实付满</label>\n' +
+                                '                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+                                '                                        <input type="number" name="singleConsumeAmount" style="text-align: center" id="singleConsumeAmount" class="layui-input" ' + 'value="' + datalist[i].singleConsumeAmount + '" required lay-verify="required"/>\n' +
+                                '                                    </div>\n' +
+                                '                                    <label class="layui-form-label" style="width: 110px">元,每消费</label>\n' +
+                                '                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+                                '                                        <input type="number" name="singleAmount" id="singleAmount" style="text-align: center" class="layui-input" ' + 'value="' + datalist[i].singleAmount + '" required\n' +
+                                '                                               lay-verify="required"/>\n' +
+                                '                                    </div>\n' +
+                                '                                    <label class="layui-form-label" style="width: 110px">元,可获得</label>\n' +
+                                '                                    <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+                                '                                        <input type="number" name="singlePoints" id="singlePoints" class="layui-input"  ' + 'value="' + datalist[i].singlePoints + '"required\n' +
+                                '                                               lay-verify="required" style="text-align: center"/>\n' +
+                                '                                    </div>\n' +
+                                '                                    <label class="layui-form-label" style="width: 60px">分</label>\n' +
                                 '<button type="button" class="layui-btn layui-btn-danger removeclass" id="removeid' + x + '" style="display: inline">删除</button>' +
-                                '<div style="margin-left: 85px">订单实付金额满\n' +
-                                '<input type="number" name="singleConsumeAmount" class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" ' + 'value="' + datalist[i].singleConsumeAmount + '"required lay-verify="required" />元时,每消费\n' +
-                                '<input type="number" name="singleAmount"  class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" ' + 'value="' + datalist[i].singleAmount + '" required lay-verify="required"/>元,可获得\n' +
-                                '<input type="number" name="singlePoints" class="layui-input" style="width: 80px;display: inline;height: 35px;margin: 6px" ' + 'value="' + datalist[i].singlePoints + '" required lay-verify="required"/>积分;\n' +
-                                '</div></div>'
-                            '</div>';
+                                '                                </div>\n' +
+                                '                            </div>\n' +
+                                '                        </div>\n' +
+                                '                    </div>'
+                            ;
                             if (x !== 2) {
                                 let temp = x - 1;
                                 document.getElementById("removeid" + temp).style.display = "none";
@@ -415,7 +536,6 @@
         form.on('submit(consume-form-submit)', function (data) {
             let token = $("meta[name='_csrf_token']").attr("value");
             let tConsumePoints = [];
-            let pointslimit;
             $('.consumeclass').each(function (index, e) {
                 let tConsumePoint = {}
                 $(this).find('input[type="text"]').each(function (index, e) {
@@ -442,8 +562,7 @@
                 });
                 tConsumePoints.push(tConsumePoint);
             });
-            pointslimit = $("#pointslimit").val();
-            var data = {'tConsumePoints': tConsumePoints,'pointslimit':pointslimit};
+            var data = {'tConsumePoints': tConsumePoints};
             layer.confirm('确认保存?', {
                 icon: 3, title: '提示'
 
@@ -629,90 +748,179 @@
         //
         let monthConsumeList = [];
         let dayConsumeList = [];
-        let getrulelist = function(){
+        let getrulelist = function () {
             $.ajax({
-            type: "GET",
-            dataType: "json",
-            url: '[[@{/consume/rulelist}]]',
-            headers: {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-            },
-            success: function (result) {
-                layer.closeAll('loading');
-                if (result.code === 200) {
-                    monthConsumeList = result.monthConsumeList
-                    dayConsumeList = result.dayConsumeList
-                    for(let temp=0;temp<=conx;temp++){
-                        $("#removecon"+temp).parent().remove();
-                    }
-                    for(let temp=0;temp<=conMonthx;temp++){
-                        $("#removeMonthcon"+temp).parent().remove();
-                    }
-                    conx = 2;
-                    conMonthx = 2;
-                    for (let i = 0; i < dayConsumeList.length; i++) {
-                        if (i === 0) {
-                            $("#conAmount").val(dayConsumeList[i].consumeamount);
-                            $("#conPoints").val(dayConsumeList[i].points);
-                            $("#conPointsid").val(dayConsumeList[i].id);
-                            $("#pointslimit").val(result.pointslimit);
+                type: "GET",
+                dataType: "json",
+                url: '[[@{/consume/rulelist}]]',
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                },
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code === 200) {
+                        monthConsumeList = result.monthConsumeList
+                        dayConsumeList = result.dayConsumeList
+                        for (let temp = 0; temp <= conx; temp++) {
+                            $("#removecon" + temp).parent().remove();
                         }
-                        if (i > 0) {
-                            let daystrr =  ' <div class="consumeclass">当日累计消费金额满 ' +
-                                '<input type="text" name="conAmount" required lay-verify="required" autocomplete="off" ' + 'value="' + dayConsumeList[i].consumeamount + '"' +
-                                'class="layui-input" style="width: 60px;display: inline;height: 28px;margin: 6px" id="lename">' +
-                                '元时,可额外获得 <input type="text" name="conPoints" required lay-verify="required" ' + 'value="' + dayConsumeList[i].points + '" ' +
-                                '  autocomplete="off"  class="layui-input" ' +
-                                'style="width: 60px;display: inline;height: 28px;margin: 6px" id="lelow">积分;' +
-                                ' <input type="text" name="conPointsid" id="conPointsid' + conx + '" style="display: none" ' + 'value="' + dayConsumeList[i].id + '"/> ' +
-                                '<button type="button" class="layui-btn layui-btn-danger removeconsume" id="removecon' + conx + '" style="display: inline">删除</button></div>';
-                            if (conx !== 2) {
-                                let temp = conx - 1;
-                                document.getElementById("removecon" + temp).style.display = "none";
+                        for (let temp = 0; temp <= conMonthx; temp++) {
+                            $("#removeMonthcon" + temp).parent().remove();
+                        }
+                        conx = 2;
+                        conMonthx = 2;
+                        for (let i = 0; i < dayConsumeList.length; i++) {
+                            if (i === 0) {
+                                $("#conAmount").val(dayConsumeList[i].consumeamount);
+                                $("#conPoints").val(dayConsumeList[i].points);
+                                $("#conPointsid").val(dayConsumeList[i].id);
                             }
-                            $("#consumeid").append(daystrr);
-                            conx++;
-                        }
-                    }
-                    for (let i = 0; i < monthConsumeList.length; i++) {
-                        if (i === 0) {
-                            $("#conMonthAmount").val(monthConsumeList[i].consumeamount);
-                            $("#conMonthPoints").val(monthConsumeList[i].points);
-                            $("#conMonthPointsid").val(monthConsumeList[i].id);
-                        }
-                        if (i > 0) {
-                            let monthstrr = ' <div class="consumeclass">当月累计消费金额满 ' +
-                                '<input type="text" name="conMonthAmount" required lay-verify="required" autocomplete="off" ' + 'value="' + monthConsumeList[i].consumeamount + '" ' +
-                                'class="layui-input" style="width: 60px;display: inline;height: 28px;margin: 6px" id="lename">' +
-                                '元时,可额外获得 <input type="text" name="conMonthPoints" required lay-verify="required" ' + 'value="' + monthConsumeList[i].points + '"' +
-                                '  autocomplete="off"  class="layui-input" ' +
-                                'style="width: 60px;display: inline;height: 28px;margin: 6px" id="lelow">积分;' +
-                                ' <input type="text" name="conMonthPointsid" id="conMonthPointsid' + conMonthx + '" style="display: none"  ' + 'value="' + monthConsumeList[i].id + '"/> ' +
-                                '<button type="button" class="layui-btn layui-btn-danger removeMonthconsume" id="removeMonthcon' + conMonthx + '" style="display: inline">删除</button></div>';
-                            if (conMonthx !== 2) {
-                                let temp = conMonthx - 1;
-                                document.getElementById("removeMonthcon" + temp).style.display = "none";
+                            if (i > 0) {
+                                let daystrr = ' <div class="consumeclass">当日累计消费金额满 ' +
+                                    '<input type="text" name="conAmount" required lay-verify="required" autocomplete="off" ' + 'value="' + dayConsumeList[i].consumeamount + '"' +
+                                    'class="layui-input" style="width: 60px;display: inline;height: 28px;margin: 6px" id="lename">' +
+                                    '元时,可额外获得 <input type="text" name="conPoints" required lay-verify="required" ' + 'value="' + dayConsumeList[i].points + '" ' +
+                                    '  autocomplete="off"  class="layui-input" ' +
+                                    'style="width: 60px;display: inline;height: 28px;margin: 6px" id="lelow">积分;' +
+                                    ' <input type="text" name="conPointsid" id="conPointsid' + conx + '" style="display: none" ' + 'value="' + dayConsumeList[i].id + '"/> ' +
+                                    '<button type="button" class="layui-btn layui-btn-danger removeconsume" id="removecon' + conx + '" style="display: inline">删除</button></div>';
+                                if (conx !== 2) {
+                                    let temp = conx - 1;
+                                    document.getElementById("removecon" + temp).style.display = "none";
+                                }
+                                $("#consumeid").append(daystrr);
+                                conx++;
                             }
-                            $("#consumeMonthid").append(monthstrr);
-                            conMonthx++;
                         }
+                        for (let i = 0; i < monthConsumeList.length; i++) {
+                            if (i === 0) {
+                                $("#conMonthAmount").val(monthConsumeList[i].consumeamount);
+                                $("#conMonthPoints").val(monthConsumeList[i].points);
+                                $("#conMonthPointsid").val(monthConsumeList[i].id);
+                            }
+                            if (i > 0) {
+                                let monthstrr = ' <div class="consumeclass">当月累计消费金额满 ' +
+                                    '<input type="text" name="conMonthAmount" required lay-verify="required" autocomplete="off" ' + 'value="' + monthConsumeList[i].consumeamount + '" ' +
+                                    'class="layui-input" style="width: 60px;display: inline;height: 28px;margin: 6px" id="lename">' +
+                                    '元时,可额外获得 <input type="text" name="conMonthPoints" required lay-verify="required" ' + 'value="' + monthConsumeList[i].points + '"' +
+                                    '  autocomplete="off"  class="layui-input" ' +
+                                    'style="width: 60px;display: inline;height: 28px;margin: 6px" id="lelow">积分;' +
+                                    ' <input type="text" name="conMonthPointsid" id="conMonthPointsid' + conMonthx + '" style="display: none"  ' + 'value="' + monthConsumeList[i].id + '"/> ' +
+                                    '<button type="button" class="layui-btn layui-btn-danger removeMonthconsume" id="removeMonthcon' + conMonthx + '" style="display: inline">删除</button></div>';
+                                if (conMonthx !== 2) {
+                                    let temp = conMonthx - 1;
+                                    document.getElementById("removeMonthcon" + temp).style.display = "none";
+                                }
+                                $("#consumeMonthid").append(monthstrr);
+                                conMonthx++;
+                            }
+                        }
+                    } else if (result.code === 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
                     }
-                } else if (result.code === 401) {
-                    layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                        location.replace('[[@{/login}]]');
-                    }, 1000);
-                } else {
-                    console.log('err:' + result.code);
-                    layer.msg(result.msg, {icon: 2});
+                },
+                error: function () {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败!", {icon: 2});
                 }
-            },
-            error: function () {
-                layer.closeAll('loading');
-                layer.msg("请求服务器失败!", {icon: 2});
-            }
-        });
+            });
         }
         getrulelist();
+
+
+
+        /*
+        * 其他设置
+        *
+        * */
+
+        /*
+        *
+        * 消费奖励积分设置
+        * */
+        form.on('submit(set-form-submit)', function (data) {
+            let token = $("meta[name='_csrf_token']").attr("value");
+            let consumePointsLi =  $("#consumePointsLi").val();
+            let taskPointsLi =  $("#taskPointsLi").val();
+            let dayPointsLi =  $("#dayPointsLi").val();
+            var data = {'consumePointsLi': consumePointsLi, 'taskPointsLi': taskPointsLi,'dayPointsLi': dayPointsLi};
+            layer.confirm('确认保存?', {
+                icon: 3, title: '提示'
+
+            }, function (index) {
+                layer.load(2);
+                $.ajax({
+                    type: "POST",
+                    dataType: "json",
+                    url: '[[@{/pointsSet/add}]]',
+                    headers: {
+                        'Accept': 'application/json',
+                        'Content-Type': 'application/json',
+                        'X-CSRF-TOKEN': token,
+                    },
+                    data: JSON.stringify(data),
+                    success: function (result) {
+                        layer.closeAll('loading');
+                        if (result.code === 200) {
+                            layer.msg(result.msg, {icon: 1});
+                            getPointsSet();
+                        } else if (result.code === 401) {
+                            layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                                location.replace('[[@{/login}]]');
+                            }, 1000);
+                        } else {
+                            console.log('err:' + result.code);
+                            layer.msg(result.msg, {icon: 2});
+                        }
+                    },
+                    error: function () {
+                        layer.closeAll('loading');
+                        layer.msg("请求服务器失败!", {icon: 2});
+                    }
+                });
+                layer.close(index);
+            });
+            return false;
+        });
+
+        let getPointsSet = function () {
+            $.ajax({
+                type: "GET",
+                dataType: "json",
+                url: '[[@{/pointsSet/list}]]',
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                },
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code === 200) {
+                       let  dataSet = result.data;
+                       console.log(dataSet)
+                        $("#consumePointsLi").val(dataSet.consumePointsLi);
+                        $("#taskPointsLi").val(dataSet.taskPointsLi);
+                        $("#dayPointsLi").val(dataSet.dayPointsLi);
+                    } else if (result.code === 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error: function () {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败!", {icon: 2});
+                }
+            });
+        }
+        getPointsSet();
     })
 </script>
diff --git a/payapi/src/main/resources/templates/system/level/pointsdetail.html b/payapi/src/main/resources/templates/system/level/pointsdetail.html
deleted file mode 100644
index 29d326f..0000000
--- a/payapi/src/main/resources/templates/system/level/pointsdetail.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<table class="layui-table" id="pointsDetailTable" lay-filter="pointsDetailTable-filter"></table>
-<script>
-    layui.use(['layer', 'table', 'admin', 'form', 'formSelects'], function () {
-        var layer = layui.layer;
-        var admin = layui.admin;
-        var form = layui.form;
-        var table = layui.table;
-        var bean = admin.getTempData('t_bean');
-        console.log(bean)
-        if (bean) {
-            table.render({
-                elem: '#pointsDetailTable',
-                url: '[[@{/pointsdetail/list}]]',
-                page: true,
-                where: {userid: bean.userid},
-                cols: [
-                    [
-                        {
-                            field: 'type',
-                            title: '积分来源',
-                            width: 140,
-                            align: 'center',
-                            fixed: 'left',
-                            sort: true
-                        },
-                        {field: 'points', title: '积分变化', width: 130, align: 'center'},
-                        {
-                            field: 'transtime',
-                            title: '时间',
-                            width: 160,
-                            align: 'center',
-                            templet: function (item) {
-                                let datetemp = item.transdate + item.transtime;
-                                return admin.formatDate(datetemp);
-                            }
-                        }
-                    ]
-                ]
-            });
-        }
-    });
-</script>
diff --git a/payapi/src/main/resources/templates/system/level/pointsreport.html b/payapi/src/main/resources/templates/system/level/pointsreport.html
new file mode 100644
index 0000000..c326e0c
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/level/pointsreport.html
@@ -0,0 +1,117 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">发放积分统计</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">积分中心</a>
+          <a><cite>发放积分统计</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            <div class="layui-inline">
+                <label class="layui-form-label">积分日期</label>
+                <div class="layui-input-inline" style="width: 120px;">
+                    <input type="text" name="startDate" id="startDate"
+                           placeholder="开始日期"
+                           autocomplete="off" class="layui-input"/>
+                </div>
+                -
+                <div class="layui-input-inline" style="width: 120px;">
+                    <input type="text" name="endDate" id="endDate" placeholder="结束日期"
+                           autocomplete="off"
+                           class="layui-input"/>
+                </div>
+            </div>
+            积分名称:
+            <select id="points-name">
+                <option value=""> 全部</option>
+                <option value="consume">消费获得</option>
+                <option value="task">任务获得</option>
+            </select>
+
+            <button id="btn-chkstatus-search" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-reset-sysparam" class="layui-btn layui-btn-primary" data-type="reset" ><i
+                    class="layui-icon"></i>清 空
+            </button>
+        </div>
+        <table class="layui-table" id="pointsReportTable" lay-filter="pointsReportTable"></table>
+    </div>
+</div>
+
+<script type="text/html" id="subjectday-toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-fold-subjectday" lay-event="subjectdayShowFold" style="color: #020202;background-color: #f2f2f2;font-weight: 700">
+            <div>累计获得积分:<span id="points" style="color: #0096f8">0</span> 累计失效积分:<span id="outPoints" style="color: #0096f8">0</span></div>
+        </button>
+    </div>
+</script>
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+        form.render("select");
+        laydate.render({
+            elem: '#startDate'
+            ,format: 'yyyy年MM月dd日'
+        });
+        laydate.render({
+            elem: '#endDate'
+            ,format: 'yyyy年MM月dd日'
+        });
+        // 渲染表格
+        table.render({
+            elem: '#pointsReportTable',
+            url: '[[@{/pointsReport/list}]]',
+            page: false,
+            toolbar:'#subjectday-toolbar',
+            defaultToolbar: [],
+            where: {startdate: null, enddate: null},
+            cols: [
+                [
+                    {
+                        field: 'pointsName',
+                        title: '积分名称',
+                        width: 300,
+                        align: 'center'
+
+                    },
+                    {
+                        field: 'pointsCount',
+                        title: '次数',
+                        width: 320,
+                        align: 'center'
+
+                    },
+                    {
+                        field: 'pointsSum',
+                        title: '积分',
+                        width: 320,
+                        align: 'center'
+
+                    }
+
+                ]
+            ]
+        });
+
+        // 搜索按钮点击事件
+        $('#btn-chkstatus-search').click(function () {
+            let name = $("#search-chkstatus-searchkey").val();
+            let startDate = $("#startDate").val();
+            let endDate = $("#endDate").val();
+            table.reload('userPointsTable', {where: {name: name, startdate:startDate,enddate:endDate}});
+        });
+
+        $('#btn-reset-sysparam').click(function () {
+            $("#search-chkstatus-searchkey").val("");
+            $("#startDate").val("");
+            $("#endDate").val("");
+        });
+
+
+    });
+</script>