Przeglądaj źródła

1.添加自动审核条件限制

slambb 4 lat temu
rodzic
commit
1691c6bf71
29 zmienionych plików z 665 dodań i 54 usunięć
  1. 2 2
      src/main/java/com/td/boss/game/comcntorder/service/ComCntOrderService.java
  2. 10 0
      src/main/java/com/td/boss/game/comcnttosnb/service/ComCntToSnbService.java
  3. 28 3
      src/main/java/com/td/boss/game/comcnttosnb/service/ComCntToSnbServiceImpl.java
  4. 8 1
      src/main/java/com/td/boss/game/comcnttosnb/vo/ComCntToSnbVo.java
  5. 17 3
      src/main/java/com/td/boss/game/comsnbapply/controller/ComSnbApplyController.java
  6. 2 0
      src/main/java/com/td/boss/game/comsnbapply/pojo/ComSnbApply.java
  7. 5 3
      src/main/java/com/td/boss/game/comsnbapply/scheduled/BackService.java
  8. 4 0
      src/main/java/com/td/boss/game/comsnbapply/service/ComSnbApplyService.java
  9. 19 0
      src/main/java/com/td/boss/game/comsnbapply/service/ComSnbApplyServiceImpl.java
  10. 16 0
      src/main/java/com/td/boss/game/comsnbapply/vo/ComSnbApplyBetweenVo.java
  11. 2 0
      src/main/java/com/td/boss/game/comsnbapply/vo/ComSnbApplySimpleVo.java
  12. 2 0
      src/main/java/com/td/boss/game/comsnbapply/vo/ComSnbApplyVo.java
  13. 6 2
      src/main/java/com/td/boss/game/comsnbtran/repository/ComSnbTranRepository.java
  14. 2 0
      src/main/java/com/td/boss/game/comsnbtran/service/ComSnbTranService.java
  15. 6 0
      src/main/java/com/td/boss/game/comsnbtran/service/ComSnbTranServiceImpl.java
  16. 27 0
      src/main/java/com/td/boss/game/comsnbtran/vo/ComSnbTranAbnormalVo.java
  17. 2 2
      src/main/java/com/td/boss/game/comsnbtran/vo/ComSnbTranTranTypeSumVo.java
  18. 66 5
      src/main/java/com/td/boss/sys/sysGame/controller/sysGamePropertyController.java
  19. 2 0
      src/main/java/com/td/boss/sys/syssettingtask/pojo/SysSettingTask.java
  20. 2 0
      src/main/java/com/td/boss/sys/syssettingtask/vo/SysSettingTaskVo.java
  21. 47 2
      src/main/resources/static/sys/aComApplySNBToCNT/js/applySNBToCNT.js
  22. 101 10
      src/main/resources/static/sys/aComCNTAndSNB/js/CNTAndSNB.js
  23. 22 0
      src/main/resources/static/sys/aComCntToSnb/aComCntToSnb.css
  24. 132 0
      src/main/resources/static/sys/aComCntToSnb/aComCntToSnb.js
  25. 24 4
      src/main/resources/static/sys/aComUser/js/user.js
  26. 1 1
      src/main/resources/static/sys/aComUser/js/userPlayerGoods.js
  27. 51 16
      src/main/resources/view/sys/aComApplySNBToCNT/applySNBToCNT.html
  28. 17 0
      src/main/resources/view/sys/aComCNTAnbSNB/CNTAndSNB.html
  29. 42 0
      src/main/resources/view/sys/aComCntToSnb/aComCntToSnb.html

+ 2 - 2
src/main/java/com/td/boss/game/comcntorder/service/ComCntOrderService.java

@@ -15,10 +15,10 @@ public interface ComCntOrderService extends CommonService<ComCntOrderVo, ComCntO
 
     List<ComCntOrder>  findByUserIdAndPayType(String userId,Integer payType);
 
-    //返回一个全部总量
+    //返回一个全部总量,需要去除负数情况,负数另外计算
     List<ComCntOrderPayTypeSumVo> findAllCNTSumGroupByPayType();
 
-    //返回一个日期查找的总量
+    //返回一个日期查找的总量,需要去除负数情况,负数另外计算
     List<ComCntOrderPayTypeSumVo> findAllCNTSumGroupByPayTypeFromDate(Date startTime, Date endTime);
 
 

+ 10 - 0
src/main/java/com/td/boss/game/comcnttosnb/service/ComCntToSnbService.java

@@ -1,10 +1,15 @@
 package com.td.boss.game.comcnttosnb.service;
 
+import cn.hutool.core.date.DateTime;
 import com.td.boss.common.pojo.Result;
 import com.td.boss.common.service.CommonService;
+import com.td.boss.game.comcntorder.pojo.ComCntOrder;
 import com.td.boss.game.comcnttosnb.pojo.ComCntToSnb;
 import com.td.boss.game.comcnttosnb.vo.ComCntToSnbVo;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * Cnt转Snb服务实现
  *
@@ -26,4 +31,9 @@ public interface ComCntToSnbService extends CommonService<ComCntToSnbVo, ComCntT
      * @param userId 用户id
      */
     Result<String> receiveByUserId(String userId);
+
+
+    //根据时间段,导出全部数据
+    List<ComCntToSnb> getBetweenTimeList(Date begin, Date end);
+
 }

+ 28 - 3
src/main/java/com/td/boss/game/comcnttosnb/service/ComCntToSnbServiceImpl.java

@@ -1,15 +1,18 @@
 package com.td.boss.game.comcnttosnb.service;
 
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import com.td.boss.common.pojo.Result;
 import com.td.boss.common.service.CommonServiceImpl;
 import com.td.boss.config.enums.ResultEnum;
+import com.td.boss.game.comcntorder.pojo.ComCntOrder;
 import com.td.boss.game.comcnttosnb.pojo.ComCntToSnb;
 import com.td.boss.game.comcnttosnb.repository.ComCntToSnbRespository;
 import com.td.boss.game.comcnttosnb.vo.ComCntToSnbVo;
+import com.td.boss.game.complayerland.pojo.ComPlayerDisasterLog;
 import com.td.boss.game.comsnbtran.service.ComSnbTranService;
 import com.td.boss.game.comsnbtran.vo.ComSnbTranVo;
 import com.td.boss.game.comusers.service.ComUsersService;
@@ -19,12 +22,19 @@ import com.td.boss.util.RedisData;
 import com.td.boss.util.RedisLock;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 @Slf4j
 @Service
@@ -132,9 +142,9 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
             snbTran.setTranId(Convert.toStr(comCntToSnb.getId()));
             snbTran.setUserId(userId);
             snbTran.setTranName("领取SNB");
-//            snbTran.setTranType();
-            snbTran.setTranAmount(0);
-//            snbTran.setTranPrice();
+            snbTran.setTranType(8);
+            snbTran.setTranAmount(1);
+            snbTran.setTranPrice(0);
             snbTran.setTranDescribe(StrUtil.format("user领取SNB、本次领取:{},剩余:{}", thisReceiveQuantity, comCntToSnb.getTotalQuantity().subtract(comCntToSnb.getReceivedQuantity())));
             snbTran.setIsAdd(1);
             snbTran.setBeforeSnb(comUsersVo.getSnb());
@@ -160,4 +170,19 @@ public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, Com
             redisLock.unlock(redisKey, String.valueOf(time));
         }
     }
+
+
+
+    @Override
+    public List<ComCntToSnb> getBetweenTimeList(Date begin, Date end) {
+        Specification specification = new Specification<ComCntToSnb>() {
+            @Override
+            public Predicate toPredicate(Root<ComCntToSnb> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+                List<Predicate> predicates = new ArrayList<>();
+                predicates.add(criteriaBuilder.between(root.get("beginTime"), begin, end));
+                return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
+            }
+        };
+        return comCntToSnbRespository.findAll(specification);
+    }
 }

+ 8 - 1
src/main/java/com/td/boss/game/comcnttosnb/vo/ComCntToSnbVo.java

@@ -1,5 +1,6 @@
 package com.td.boss.game.comcnttosnb.vo;
 
+import com.td.boss.common.pojo.PageCondition;
 import lombok.Data;
 
 import javax.persistence.*;
@@ -14,9 +15,15 @@ import java.util.Date;
  * @date 2022/03/05
  */
 @Data
-public class ComCntToSnbVo implements Serializable {
+public class ComCntToSnbVo extends PageCondition implements Serializable {
 
     private Long id;
+
+    /**
+     * 钱包地址
+     */
+    private String address;
+
     /**
      * 需要返还的总数
      */

+ 17 - 3
src/main/java/com/td/boss/game/comsnbapply/controller/ComSnbApplyController.java

@@ -1,5 +1,7 @@
 package com.td.boss.game.comsnbapply.controller;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.td.boss.common.controller.*;
 import com.td.boss.common.pojo.PageInfo;
 import com.td.boss.common.pojo.Result;
@@ -18,6 +20,7 @@ import com.td.boss.util.RedisLock;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -45,6 +48,8 @@ public class ComSnbApplyController extends CommonController<ComSnbApplyVo, ComSn
         comSnbApplyVo.setIsState(isState);
         comSnbApplyVo.setPage(page + 1);
         comSnbApplyVo.setRows(limit);
+        comSnbApplyVo.setSidx("desc");
+        comSnbApplyVo.setSord("createTime");
         return comSnbApplyService.page(comSnbApplyVo);
     }
 
@@ -71,11 +76,19 @@ public class ComSnbApplyController extends CommonController<ComSnbApplyVo, ComSn
             List<ComSnbApply> comSnbApplies = comSnbApplyService.findAllByUserIdAndIsState(userId, 0);
             List<ComSnbApply> comSnbApplies2 = comSnbApplyService.findAllByUserIdAndIsState(userId, 1);
             comSnbApplies2.stream().sequential().collect(Collectors.toCollection(() -> comSnbApplies));
-
+            //记录一个当前申请的数据
+            List<ComSnbApply> todayComSnbApply = new ArrayList<>();
+            Date now = new Date();
+            DateTime begin = DateUtil.beginOfDay(now);
+            DateTime end = DateUtil.endOfDay(now);
             for (int i = 0; i < comSnbApplies.size(); i++) {
                 if (applyAmount.equals(comSnbApplies.get(i).getSnb())) {
                     return Result.of(null, false, ResultEnum.APPLY_SNB_HAS_APPLY.getMessage(), ResultEnum.APPLY_SNB_HAS_APPLY.getCode());
                 }
+                //如果日期在指定范围内
+                if (DateUtil.isIn(comSnbApplies.get(i).getCreateTime(), begin, end)) {
+                    todayComSnbApply.add(comSnbApplies.get(i));
+                }
             }
             Integer _applySnb = comSnbApplies.stream().mapToInt(ComSnbApply::getSnb).sum();
             //加上当前的
@@ -93,6 +106,7 @@ public class ComSnbApplyController extends CommonController<ComSnbApplyVo, ComSn
             comSnbApplyVo.setSnb(applyAmount);
             comSnbApplyVo.setSnbDescribe("applySnbToCnt,发起兑换记录snb!");
             comSnbApplyVo.setIsState(0);
+            comSnbApplyVo.setCount(todayComSnbApply.size() + 1); //当日申请的次数 + 1
             comSnbApplyVo.setCreateTime(new Date());
             comSnbApplyVo.setUpdateTime(new Date());
 
@@ -127,7 +141,7 @@ public class ComSnbApplyController extends CommonController<ComSnbApplyVo, ComSn
                 return Result.of(null, false, ResultEnum.APPLY_SNB_STATE_ERROR.getMessage(), ResultEnum.APPLY_SNB_STATE_ERROR.getCode());
             }
             //判断申请的snb
-            if(comSnbApplyVo.getSnb()<= 0){
+            if (comSnbApplyVo.getSnb() <= 0) {
                 comSnbApplyVo.setIsState(2);
                 comSnbApplyService.save(comSnbApplyVo);
                 return Result.of(null, false, ResultEnum.APPLY_SNB_AMOUNT_ERROR.getMessage(), ResultEnum.APPLY_SNB_AMOUNT_ERROR.getCode());
@@ -135,7 +149,7 @@ public class ComSnbApplyController extends CommonController<ComSnbApplyVo, ComSn
             ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
             double _allSnbDouble = DoubleUtil.add(comUsersVo.getSnb().doubleValue(), comUsersVo.getSnbPart());
 
-            if (DoubleUtil.compare(_allSnbDouble,0.0).equals(1) && DoubleUtil.compare(_allSnbDouble, comSnbApplyVo.getSnb().doubleValue()).equals(-1)) {
+            if (DoubleUtil.compare(_allSnbDouble, 0.0).equals(1) && DoubleUtil.compare(_allSnbDouble, comSnbApplyVo.getSnb().doubleValue()).equals(-1)) {
                 //snb不足时候
                 comSnbApplyVo.setIsState(2);
                 comSnbApplyService.save(comSnbApplyVo);

+ 2 - 0
src/main/java/com/td/boss/game/comsnbapply/pojo/ComSnbApply.java

@@ -22,6 +22,8 @@ public class ComSnbApply implements Serializable {
 
     private String snbDescribe;//
 
+    private Integer count;//当天兑换的count
+
     private Date createTime;//
 
     private Date updateTime;//

+ 5 - 3
src/main/java/com/td/boss/game/comsnbapply/scheduled/BackService.java

@@ -60,9 +60,11 @@ public class BackService {
         List<ComSnbApplyVo> comSnbApplyVos = comSnbApplyService.list(getComSnbApplyVo).getData();
         //log.info("审查任务数量:{}个", comSnbApplyVos.size());
         for (ComSnbApplyVo comSnbApplyVo : comSnbApplyVos) {
-            //snb 在[max,min]区间,才能过审
-            if (comSnbApplyVo.getSnb() <= SysSettingTaskUtil.getSysSettingTask().getConditionSnbMax() &&
-                    comSnbApplyVo.getSnb() >= SysSettingTaskUtil.getSysSettingTask().getConditionSnbMin() ) {
+            //1.snb 在[max,min]区间,才能过审 2.如果申请次数不超过限制次数,则过审
+            if (comSnbApplyVo.getSnb() <= SysSettingTaskUtil.getSysSettingTask().getConditionSnbMax()
+                    && comSnbApplyVo.getSnb() >= SysSettingTaskUtil.getSysSettingTask().getConditionSnbMin()
+                    && comSnbApplyVo.getCount() <= SysSettingTaskUtil.getSysSettingTask().getApplyCount()
+            ) {
                 //全部给通过
                 comSnbApplyVo.setIsState(1);
             }

+ 4 - 0
src/main/java/com/td/boss/game/comsnbapply/service/ComSnbApplyService.java

@@ -4,6 +4,7 @@ import com.td.boss.common.service.*;
 import com.td.boss.game.comsnbapply.pojo.ComSnbApply;
 import com.td.boss.game.comsnbapply.vo.ComSnbApplyVo;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 
@@ -19,4 +20,7 @@ public interface ComSnbApplyService extends CommonService<ComSnbApplyVo, ComSnbA
 
     List<ComSnbApply> saveAll(List<ComSnbApply> comSnbApplies);
 
+
+    List<ComSnbApply> getBetweenTimeList(Date begin, Date end);
+
 }

+ 19 - 0
src/main/java/com/td/boss/game/comsnbapply/service/ComSnbApplyServiceImpl.java

@@ -5,10 +5,17 @@ import com.td.boss.game.comsnbapply.pojo.ComSnbApply;
 import com.td.boss.game.comsnbapply.vo.ComSnbApplyVo;
 import com.td.boss.game.comsnbapply.repository.ComSnbApplyRepository;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -47,4 +54,16 @@ public class ComSnbApplyServiceImpl extends CommonServiceImpl<ComSnbApplyVo, Com
         return comSnbApplyRepository.saveAll(comSnbApplies);
     }
 
+    @Override
+    public List<ComSnbApply> getBetweenTimeList(Date begin, Date end) {
+        Specification specification = new Specification<ComSnbApply>() {
+            @Override
+            public Predicate toPredicate(Root<ComSnbApply> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+                List<Predicate> predicates = new ArrayList<>();
+                predicates.add(criteriaBuilder.between(root.get("createTime"), begin, end));
+                return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
+            }
+        };
+        return comSnbApplyRepository.findAll(specification);
+    }
 }

+ 16 - 0
src/main/java/com/td/boss/game/comsnbapply/vo/ComSnbApplyBetweenVo.java

@@ -0,0 +1,16 @@
+package com.td.boss.game.comsnbapply.vo;
+
+import com.td.boss.common.pojo.PageCondition;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComSnbApplyBetweenVo implements Serializable {
+
+    private Date beginTime;//
+
+    private Date endTime;//
+
+}

+ 2 - 0
src/main/java/com/td/boss/game/comsnbapply/vo/ComSnbApplySimpleVo.java

@@ -16,6 +16,8 @@ public class ComSnbApplySimpleVo implements Serializable {
 
     private String snbDescribe;//
 
+    private Integer count;//当天兑换的count
+
     private Date createTime;//
 
     private Date updateTime;//

+ 2 - 0
src/main/java/com/td/boss/game/comsnbapply/vo/ComSnbApplyVo.java

@@ -18,6 +18,8 @@ public class ComSnbApplyVo extends PageCondition implements Serializable {
 
     private String snbDescribe;//
 
+    private Integer count;//当天兑换的count
+
     private Date createTime;//
 
     private Date updateTime;//

+ 6 - 2
src/main/java/com/td/boss/game/comsnbtran/repository/ComSnbTranRepository.java

@@ -2,6 +2,7 @@ package com.td.boss.game.comsnbtran.repository;
 
 import com.td.boss.common.repository.*;
 import com.td.boss.game.comsnbtran.pojo.ComSnbTran;
+import com.td.boss.game.comsnbtran.vo.ComSnbTranAbnormalVo;
 import com.td.boss.game.comsnbtran.vo.ComSnbTranTranTypeSumVo;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -21,15 +22,18 @@ public interface ComSnbTranRepository extends CommonRepository<ComSnbTran, Strin
      * 返回一个降序的pay_type 统计
      * @return
      */
-    @Query(value = "SELECT new com.td.boss.game.comsnbtran.vo.ComSnbTranTranTypeSumVo(u.tranType,sum(u.tranSnb)) from ComSnbTran u GROUP BY u.tranType ORDER BY sum(u.tranSnb) desc", nativeQuery = false)
+    @Query(value = "SELECT new com.td.boss.game.comsnbtran.vo.ComSnbTranTranTypeSumVo(u.tranType,sum(u.tranSnb+u.tranSnbPart)) from ComSnbTran u GROUP BY u.tranType ORDER BY sum(u.tranSnb + u.tranSnbPart) desc", nativeQuery = false)
     List<ComSnbTranTranTypeSumVo> findSnbSumByTranType();
 
+
+    @Query(value = "SELECT new com.td.boss.game.comsnbtran.vo.ComSnbTranAbnormalVo(u.userId,max(u.tranPrice),u.createTime) from ComSnbTran  as u WHERE u.tranPrice <0 GROUP BY u.tranPrice", nativeQuery = false)
+    List<ComSnbTranAbnormalVo> findSnbAbnormalData();
     /**
      * 根据开始结束时间获取payType 统计数据
      * @param startTime
      * @param endTime
      * @return
      */
-    @Query(value = "SELECT new com.td.boss.game.comsnbtran.vo.ComSnbTranTranTypeSumVo(u.tranType,sum(u.tranSnb)) FROM  ComSnbTran u  where u.createTime >= :startTime and u.createTime<= :endTime GROUP BY u.tranType ORDER BY sum(u.tranSnb) desc")
+    @Query(value = "SELECT new com.td.boss.game.comsnbtran.vo.ComSnbTranTranTypeSumVo(u.tranType,sum(u.tranSnb+u.tranSnbPart)) FROM  ComSnbTran u  where u.createTime >= :startTime and u.createTime<= :endTime GROUP BY u.tranType ORDER BY sum(u.tranSnb+u.tranSnbPart) desc")
     List<ComSnbTranTranTypeSumVo> findCNTSumByPayTypeFromDate(Date startTime, Date endTime);
 }

+ 2 - 0
src/main/java/com/td/boss/game/comsnbtran/service/ComSnbTranService.java

@@ -3,6 +3,7 @@ package com.td.boss.game.comsnbtran.service;
 import com.td.boss.common.service.*;
 import com.td.boss.game.comcntorder.vo.ComCntOrderPayTypeSumVo;
 import com.td.boss.game.comsnbtran.pojo.ComSnbTran;
+import com.td.boss.game.comsnbtran.vo.ComSnbTranAbnormalVo;
 import com.td.boss.game.comsnbtran.vo.ComSnbTranTranTypeSumVo;
 import com.td.boss.game.comsnbtran.vo.ComSnbTranVo;
 import org.springframework.data.domain.Page;
@@ -17,6 +18,7 @@ public interface ComSnbTranService extends CommonService<ComSnbTranVo, ComSnbTra
 
     List<ComSnbTranTranTypeSumVo> findAllSNBSumGroupByPayType();
 
+    List<ComSnbTranAbnormalVo> findAllComSnbTranAbnormal();
 
     //按日期返回一个snb消费记录
     List<ComSnbTranTranTypeSumVo> findAllSNBSumGroupByPayTypeFromDate(Date startTime, Date endTime);

+ 6 - 0
src/main/java/com/td/boss/game/comsnbtran/service/ComSnbTranServiceImpl.java

@@ -3,6 +3,7 @@ package com.td.boss.game.comsnbtran.service;
 import com.td.boss.common.service.*;
 import com.td.boss.game.comcntorder.vo.ComCntOrderPayTypeSumVo;
 import com.td.boss.game.comsnbtran.pojo.ComSnbTran;
+import com.td.boss.game.comsnbtran.vo.ComSnbTranAbnormalVo;
 import com.td.boss.game.comsnbtran.vo.ComSnbTranTranTypeSumVo;
 import com.td.boss.game.comsnbtran.vo.ComSnbTranVo;
 import com.td.boss.game.comsnbtran.repository.ComSnbTranRepository;
@@ -37,6 +38,11 @@ public class ComSnbTranServiceImpl extends CommonServiceImpl<ComSnbTranVo, ComSn
         return comSnbTranRepository.findSnbSumByTranType();
     }
 
+    @Override
+    public List<ComSnbTranAbnormalVo> findAllComSnbTranAbnormal() {
+        return comSnbTranRepository.findSnbAbnormalData();
+    }
+
     @Override
     public List<ComSnbTranTranTypeSumVo> findAllSNBSumGroupByPayTypeFromDate(Date startTime, Date endTime) {
         return comSnbTranRepository.findCNTSumByPayTypeFromDate(startTime, endTime);

+ 27 - 0
src/main/java/com/td/boss/game/comsnbtran/vo/ComSnbTranAbnormalVo.java

@@ -0,0 +1,27 @@
+package com.td.boss.game.comsnbtran.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.Date;
+
+/**
+ * @author:slambb
+ * @date:2022/1/25
+ */
+@Getter
+@Setter
+@ToString
+public class ComSnbTranAbnormalVo {
+    private String userId;
+    private Integer tranPrice;
+    private Date createTime;
+    //user_id, max(tran_price),create_time
+    public ComSnbTranAbnormalVo(String userId, Integer tranPrice,Date createTime) {
+        this.userId = userId;
+        this.tranPrice = tranPrice;
+        this.createTime = createTime;
+    }
+
+}

+ 2 - 2
src/main/java/com/td/boss/game/comsnbtran/vo/ComSnbTranTranTypeSumVo.java

@@ -13,9 +13,9 @@ import lombok.ToString;
 @ToString
 public class ComSnbTranTranTypeSumVo {
     private Integer tranType;
-    private Long snbSum;
+    private Double snbSum;
 
-    public ComSnbTranTranTypeSumVo(Integer tranType, Long snbSum) {
+    public ComSnbTranTranTypeSumVo(Integer tranType, Double snbSum) {
         this.tranType = tranType;
         this.snbSum = snbSum;
     }

+ 66 - 5
src/main/java/com/td/boss/sys/sysGame/controller/sysGamePropertyController.java

@@ -3,12 +3,16 @@ package com.td.boss.sys.sysGame.controller;
 import com.td.boss.annotation.Decrypt;
 import com.td.boss.annotation.Encrypt;
 import com.td.boss.common.controller.CommonController;
+import com.td.boss.common.pojo.PageCondition;
 import com.td.boss.common.pojo.PageInfo;
 import com.td.boss.common.pojo.Result;
 import com.td.boss.game.comcntorder.service.ComCntOrderService;
 import com.td.boss.game.comcntorder.vo.ComCntOrderDateVo;
 import com.td.boss.game.comcntorder.vo.ComCntOrderPayTypeSumVo;
 import com.td.boss.game.comcntorder.vo.ComCntOrderVo;
+import com.td.boss.game.comcnttosnb.pojo.ComCntToSnb;
+import com.td.boss.game.comcnttosnb.service.ComCntToSnbService;
+import com.td.boss.game.comcnttosnb.vo.ComCntToSnbVo;
 import com.td.boss.game.comconfigland.pojo.ComConfigLand;
 import com.td.boss.game.comconfigland.service.ComConfigLandService;
 import com.td.boss.game.comconfigland.vo.ComConfigLandVo;
@@ -22,8 +26,10 @@ import com.td.boss.game.complayergoods.service.ComPlayerGoodsService;
 import com.td.boss.game.complayergoods.vo.ComPlayerGoodsTypeSumVo;
 import com.td.boss.game.comsnbapply.pojo.ComSnbApply;
 import com.td.boss.game.comsnbapply.service.ComSnbApplyService;
+import com.td.boss.game.comsnbapply.vo.ComSnbApplyBetweenVo;
 import com.td.boss.game.comsnbapply.vo.ComSnbApplyVo;
 import com.td.boss.game.comsnbtran.service.ComSnbTranService;
+import com.td.boss.game.comsnbtran.vo.ComSnbTranAbnormalVo;
 import com.td.boss.game.comsnbtran.vo.ComSnbTranDateVo;
 import com.td.boss.game.comsnbtran.vo.ComSnbTranTranTypeSumVo;
 import com.td.boss.game.comusers.pojo.ComUsers;
@@ -39,6 +45,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
@@ -70,6 +77,9 @@ public class sysGamePropertyController extends CommonController<ComUsersVo, ComU
     @Autowired
     private ComSnbApplyService comSnbApplyService;
 
+    @Autowired
+    private ComCntToSnbService comCntToSnbService;
+
 
     @GetMapping("CNTAndSNB")
     public ModelAndView CNTAndSNB() {
@@ -122,6 +132,21 @@ public class sysGamePropertyController extends CommonController<ComUsersVo, ComU
         return Result.of(pageInfo);
     }
 
+
+    @PostMapping("findAllSNBErrorInfo")
+    @Decrypt
+    @Encrypt
+    public Result<PageInfo<ComSnbTranAbnormalVo>> findAllSNBErrorInfo(ComCntOrderVo comCntOrderVo) {
+        List<ComSnbTranAbnormalVo> comSnbTranTranTypeSumVoList = comSnbTranService.findAllComSnbTranAbnormal();
+        PageInfo<ComSnbTranAbnormalVo> pageInfo = new PageInfo<>();
+        pageInfo.setPage(1);//页码
+        pageInfo.setPageSize(5);//页面大小
+        pageInfo.setRows(comSnbTranTranTypeSumVoList);//分页结果
+        pageInfo.setRecords(comSnbTranTranTypeSumVoList.size());//总记录数
+        pageInfo.setTotal(1);//总页数
+        return Result.of(pageInfo);
+    }
+
     @PostMapping("findAllSNBSumGroupByPayTypeFromDate")
     @Decrypt
     @Encrypt
@@ -240,12 +265,14 @@ public class sysGamePropertyController extends CommonController<ComUsersVo, ComU
         return comFruitService.save(comFruitVo);
     }
 
-
+    /**
+     * 审核SNB部分
+     */
     @GetMapping("applySnbToCntView")
     public ModelAndView usersApplySnbToCnt() {
         ModelAndView modelAndView = new ModelAndView("sys/aComApplySNBToCNT/applySNBToCNT", "sysSettingTask",
                 SysSettingTaskUtil.getSysSettingTask());
-        modelAndView.getModelMap().addAttribute("applyState",0);
+        modelAndView.getModelMap().addAttribute("applyState", 0);
         return modelAndView;
     }
 
@@ -262,6 +289,7 @@ public class sysGamePropertyController extends CommonController<ComUsersVo, ComU
     @Decrypt
     @Encrypt
     public Result<ComSnbApplyVo> updateApplySnbToCntData(ComSnbApplyVo comSnbApplyVo) {
+        comSnbApplyVo.setUpdateTime(new Date());
         return comSnbApplyService.save(comSnbApplyVo);
     }
 
@@ -272,11 +300,44 @@ public class sysGamePropertyController extends CommonController<ComUsersVo, ComU
         //再保存新的
         List<ComSnbApply> comSnbApplies = comSnbApplyService.findAllByIn(Arrays.asList(sysApplySNBToCNTVo.getApplyIdList().split(",")));
         for (ComSnbApply comSnbApply : comSnbApplies) {
-           if(!comSnbApply.getIsState().equals(3)){
-               comSnbApply.setIsState(sysApplySNBToCNTVo.getIsState());
-           }
+            if (!comSnbApply.getIsState().equals(3)) {
+                comSnbApply.setIsState(sysApplySNBToCNTVo.getIsState());
+                comSnbApply.setUpdateTime(new Date());
+            }
         }
         comSnbApplyService.saveAll(comSnbApplies);
         return Result.of("success");
     }
+
+    @PostMapping("findBetweenApplySnbToCntDataPage")
+    @Decrypt
+    @Encrypt
+    public Result<List<ComSnbApplyVo>> findBetweenApplySnbToCntDataPage(ComSnbApplyBetweenVo comSnbApplyBetweenVo) {
+        List<ComSnbApplyVo> comSnbApplyVoList = CopyUtil.copyList(comSnbApplyService.getBetweenTimeList(comSnbApplyBetweenVo.getBeginTime(), comSnbApplyBetweenVo.getEndTime()), ComSnbApplyVo.class);
+        return Result.of(comSnbApplyVoList);
+    }
+
+
+    //领取snb页面
+    @GetMapping("comCntToSnbView")
+    public ModelAndView comCntToSnbView() {
+        ModelAndView modelAndView = new ModelAndView("sys/aComCntToSnb/aComCntToSnb");
+        return modelAndView;
+    }
+
+    @PostMapping("findComCntToSnbPage")
+    @Decrypt
+    @Encrypt
+    public Result<PageInfo<ComCntToSnbVo>> findComCntToSnbPage(ComCntToSnbVo comCntToSnbVo) {
+        return comCntToSnbService.page(comCntToSnbVo);
+    }
+
+    @PostMapping("findBetweenComCntToSnbPage")
+    @Decrypt
+    @Encrypt
+    public Result<List<ComCntToSnb>> findBetweenComCntToSnbPage(
+            @RequestParam(value = "beginTime") Date beginTime,
+            @RequestParam(value = "endTime") Date endTime) {
+        return Result.of(comCntToSnbService.getBetweenTimeList(beginTime, endTime));
+    }
 }

+ 2 - 0
src/main/java/com/td/boss/sys/syssettingtask/pojo/SysSettingTask.java

@@ -18,6 +18,8 @@ public class SysSettingTask implements Serializable {
 
     private Integer conditionSnbMin;//自动过审时候限制snb条件,最小值
 
+    private Integer applyCount;//当天的提现次数
+
     private Date createTime;//创建时间
 
     private Date updateTime;//修改时间

+ 2 - 0
src/main/java/com/td/boss/sys/syssettingtask/vo/SysSettingTaskVo.java

@@ -14,6 +14,8 @@ public class SysSettingTaskVo extends PageCondition implements Serializable {
 
     private Integer conditionSnbMin;//自动过审时候限制snb条件,最小值
 
+    private Integer applyCount;//当天的提现次数
+
     private Date createTime;//创建时间
 
     private Date updateTime;//修改时间

+ 47 - 2
src/main/resources/static/sys/aComApplySNBToCNT/js/applySNBToCNT.js

@@ -22,7 +22,7 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             , limitName: 'rows' //每页数据量的参数名,默认:limit
         }
         , where: {
-            isState: applyState
+            isState: applyState, sidx: "desc", sord: "createTime"
         }
         , response: {
             statusName: 'flag' //规定数据状态的字段名称,默认:code
@@ -68,6 +68,7 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
                 , {field: 'address', title: '用户address'}
                 , {field: 'snb', title: '申请的Snb', sort: true}
                 , {field: 'snbDescribe', title: '描述'}
+                , {field: 'count',title:'申请下标'}
                 , {field: 'createTime', title: '创建时间', sort: true}
                 , {field: 'updateTime', title: '更新时间', sort: true}
                 , {fixed: 'right', title: '操作', toolbar: '#barDemo', width: 150}
@@ -76,6 +77,7 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
         , page: true
         , height: height
         , cellMinWidth: 80
+        , autoSort: false
     });
 
 
@@ -227,9 +229,34 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
                 }
             });
 
+        },
+
+        exports: function () {
+            $.post(ctx + "/sys/sysProperty/findBetweenApplySnbToCntDataPage", {
+                beginTime: commonUtil.parseTime(startDate),
+                endTime: commonUtil.parseTime(endDate)
+            }, function (res) {
+                // console.log(res);
+                table.exportFile(tableApplySNBToCNT.config.id,res.data,'xls');
+            });
         }
     };
 
+    laydate.render({
+        elem: '#cntDate'
+        , type: 'datetime'
+        , value: commonUtil.parseTime(startDate) + ' - ' + commonUtil.parseTime(endDate)
+        , isInitValue: true
+        , range: true
+        , done: function (_value, _date, _endDate) {
+            // console.log(_value, _date, _endDate)
+            let _array = _value.split(' - ');
+            startDate = _array[0];
+            endDate = _array[1];
+            // console.log(startDate, endDate)
+        }
+    });
+
     $('.addressTable .layui-btn').on('click', function () {
         let type = $(this).data('type');
         active[type] ? active[type].call(this) : '';
@@ -250,6 +277,23 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             , url: ctx + "/sys/sysProperty/findApplySnbToCntPage"
             , where: {
                 isState: data.index
+            } , done: function (res, curr, count) {
+                console.log(applyState)
+
+                // if(0 === applyState){
+                //     $('.layuibtn1').css("display","inline-block");
+                //     $('.layuibtn2').css("display","inline-block");
+                //     $('.layuibtn3').css("display","inline-block");
+                //     $('.layuibtn4').css("display","inline-block");
+                //     $('.layuibtn5').css("display","inline-block");
+                // }else{
+                //
+                //     $('.layuibtn1').css("display","inline-block");
+                //     $('.layuibtn2').css("display","none");
+                //     $('.layuibtn3').css("display","none");
+                //     $('.layuibtn4').css("display","none");
+                //     $('.layuibtn5').css("display","none");
+                // }
             }
         });
     });
@@ -284,4 +328,5 @@ function sysSettingTaskFormSave() {
         $("#sysSettingTaskForm").form(data.data);
         $("#applyAutoExamine").val(data.data.applyAutoExamine)
     });
-}
+}
+

+ 101 - 10
src/main/resources/static/sys/aComCNTAndSNB/js/CNTAndSNB.js

@@ -2,6 +2,7 @@ let tableSumCNT;
 let tableDateSumCNT;
 let tableSumSNB;
 let tableDateSumSNB;
+let tableErrorSNB;
 let tree;
 let startDate = new Date(new Date(new Date().toLocaleDateString()).getTime()),
     endDate = new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1);
@@ -51,6 +52,10 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
                         return '<span style="color: red">土地租赁</span>';
                     } else if (d.payType == 4) {
                         return '<span style="color: red">购买种子</span>';
+                    } else if (d.payType == 2) {
+                        return '<span style="color: red">自然灾害防护</span>';
+                    } else if (d.payType == 3) {
+                        return '<span style="color: red">野兽灾害防护</span>';
                     } else {
                         return '待添加:' + d.payType;
                     }
@@ -105,6 +110,10 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
                         return '<span style="color: red">土地租赁</span>';
                     } else if (d.payType == 4) {
                         return '<span style="color: red">购买种子</span>';
+                    } else if (d.payType == 2) {
+                        return '<span style="color: red">自然灾害防护</span>';
+                    } else if (d.payType == 3) {
+                        return '<span style="color: red">野兽灾害防护</span>';
                     } else {
                         return '待添加:' + d.payType;
                     }
@@ -152,16 +161,29 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
         , cols: [[
             {
                 field: 'tranType', title: '交易类型', templet: function (d) {
-                    if (d.tranType == 3) {  // 自定义内容
-                        return '<span style="color: red">购买种子</span>';
-                    } else if (d.tranType == 0) {
-                        return '<span style="color: green">出售水果</span>';
+
+                    if (d.tranType == 0) {  // 自定义内容
+                        return '<span style="color: green">出售果实</span>';
                     } else if (d.tranType == 1) {
                         return '<span style="color: red">SNB兑换CNT冻结</span>';
                     } else if (d.tranType == 2) {
                         return '<span style="color: green">SNB兑换CNT解冻</span>';
+                    } else if (d.tranType == 3) {
+                        return '<span style="color: red">购买种子</span>';
+                    } else if (d.tranType == 4) {
+                        return '<span style="color: red">偷取果实</span>';
+                    } else if (d.tranType == 5) {
+                        return '<span style="color: red">购买装备</span>';
+                    } else if (d.tranType == 6) {
+                        return '<span style="color: red">购买装备</span>';
+                    } else if (d.tranType == 7) {
+                        return '<span style="color: red">购买狗粮</span>';
+                    } else if (d.tranType == 8) {
+                        return '<span style="color: red">释放SNB</span>';
+                    } else if (d.tranType == 9) {
+                        return '<span style="color: red">幸运值</span>';
                     } else {
-                        return '待添加:' + d.payType;
+                        return '<span style="color: red">待添加:</span>' + d.tranType;
                     }
                 }
             }
@@ -210,16 +232,28 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
         , cols: [
             [{
                 field: 'tranType', title: '交易类型', templet: function (d) {
-                    if (d.tranType == 3) {  // 自定义内容
-                        return '<span style="color: red">购买种子</span>';
-                    } else if (d.tranType == 0) {
-                        return '<span style="color: green">出售水果</span>';
+                    if (d.tranType == 0) {  // 自定义内容
+                        return '<span style="color: green">出售果实</span>';
                     } else if (d.tranType == 1) {
                         return '<span style="color: red">SNB兑换CNT冻结</span>';
                     } else if (d.tranType == 2) {
                         return '<span style="color: green">SNB兑换CNT解冻</span>';
+                    } else if (d.tranType == 3) {
+                        return '<span style="color: red">购买种子</span>';
+                    } else if (d.tranType == 4) {
+                        return '<span style="color: red">偷取果实</span>';
+                    } else if (d.tranType == 5) {
+                        return '<span style="color: red">购买装备</span>';
+                    } else if (d.tranType == 6) {
+                        return '<span style="color: red">购买装备</span>';
+                    } else if (d.tranType == 7) {
+                        return '<span style="color: red">购买狗粮</span>';
+                    } else if (d.tranType == 8) {
+                        return '<span style="color: red">释放SNB</span>';
+                    } else if (d.tranType == 9) {
+                        return '<span style="color: red">幸运值</span>';
                     } else {
-                        return '待添加:' + d.payType;
+                        return '<span style="color: red">待添加:</span>' + d.tranType;
                     }
                 }
             }
@@ -231,6 +265,46 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
         , cellMinWidth: 80
     });
 
+    tableErrorSNB = table.render({
+        elem: '#snbErrorTable'
+        , url: ctx + "/sys/sysProperty/findAllSNBErrorInfo"
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            var data = res.data;
+            // console.log("返回的地址数据:", data);
+            //这里应该是反回一个用户,后台做成了页面数据。但是只带一条数据
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#snbErrorTableToolbarDemo'
+        , title: 'SNB异常消费统计'
+        , cols: [[
+            {field: 'userId', title: '用户id'}
+            , {field: 'tranPrice', title: '交易金额'}
+            , {field: 'createTime', title: '交易时间'}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: false
+        , height: height
+        , cellMinWidth: 80
+    });
 
     //头工具栏事件
     table.on('toolbar(test)', function (obj) {
@@ -238,6 +312,9 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             case 'snbReload':
                 sumSnbReload();
                 break;
+            case 'snbErrorReload':
+                sumErrorSnbReload();
+                break;
             case 'cntReload':
                 sumCntReload();
                 break;
@@ -297,6 +374,20 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
 
 function sumSnbReload() {
     tableSumSNB.reload({
+        page: false
+        , method: 'POST'
+        , url: ctx + "/sys/sysProperty/findAllSNBErrorInfo"
+        , done: function (res, curr, count) {
+            // console.log(res, curr, count);
+            //this.where={};
+            //不清空,有问题:搜索条件会保留
+            //清空,  有问题:分页的时候没有搜索条件了,分页会受到影响
+        }
+    });
+}
+
+function  sumErrorSnbReload() {
+    tableErrorSNB.reload({
         page: false
         , method: 'POST'
         , url: ctx + "/sys/sysProperty/findAllSNBGroupByPayType"

+ 22 - 0
src/main/resources/static/sys/aComCntToSnb/aComCntToSnb.css

@@ -0,0 +1,22 @@
+body {
+    padding: 20px;
+    background-color: #F2F2F2;
+}
+
+.layui-form-label {
+    width: 120px !important;
+}
+
+.layui-input-block {
+    display: -webkit-box !important;
+}
+
+.layui-table-tool-temp {
+    padding-right: 0;
+}
+
+#queryByLoginName {
+    display: unset;
+    width: 100px;
+    margin-left: 10px;
+}

+ 132 - 0
src/main/resources/static/sys/aComCntToSnb/aComCntToSnb.js

@@ -0,0 +1,132 @@
+let tableCTB;
+let tree;
+let startDate = new Date(new Date(new Date().toLocaleDateString()).getTime()),
+    endDate = new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1);
+let snbStartDate = startDate, snbEndDate = endDate;
+let applyState = 0;
+layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], function () {
+    let table = layui.table;
+    let form = layui.form;//select、单选、复选等依赖form
+    let element = layui.element; //导航的hover效果、二级菜单等功能,需要依赖element模块
+    let laydate = layui.laydate;
+    tree = layui.tree;
+    let height = document.documentElement.clientHeight;
+
+    tableCTB = table.render({
+        elem: '#ctbTable'
+        , url: ctx + "/sys/sysProperty/findComCntToSnbPage"
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        , where: {
+            isState: applyState
+        }
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            var data = res.data;
+            // console.log("返回的地址数据:", data);
+            //这里应该是反回一个用户,后台做成了页面数据。但是只带一条数据
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#ctbTableToolbarDemo'
+        , title: 'SNB释放列表'
+        , cols: [
+            [
+
+                {field: 'id', title: 'ID'}
+                , {field: 'address', title: '用户address'}
+                , {field: 'totalQuantity', title: '返还的总数', sort: true}
+                , {field: 'receivedQuantity', title: '已领取数量', sort: true}
+                , {field: 'totalDay', title: '领取总天数', sort: true}
+                , {field: 'receivedDay', title: '已领取天数', sort: true}
+                , {field: 'beginTime', title: '开始时间', sort: true},
+                {
+                    field: 'status', title: '状态', sort: true, templet: function (d) {
+                        if (d.status == 0) {
+                            return '<span style="color: red ">不可领取</span>';
+                        } else if (d.status == 1) {
+                            return '<span style="color: green">可以领取</span>';
+                        }  else {
+                            return '待添加:' + d.status;
+                        }
+                    }
+                }
+            ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: true
+        , limit: 20
+        , height: height
+        , cellMinWidth: 80
+    });
+
+
+    //头工具栏事件
+    table.on('toolbar(test)', function (obj) {
+        let data = obj.data;
+        switch (obj.event) {
+            case 'ctbReload':
+                ctbReloadFunction();
+                break;
+        }
+    });
+
+    let $ = layui.$, active = {
+        reload: function () {
+            let addressReload = $('#addressReload');
+            // console.log("reload");
+            tableCTB.reload({
+                page: {
+                    curr: 1 //重新从第 1 页开始
+                }
+                , method: 'POST'
+                , url: ctx + "/sys/sysProperty/findComCntToSnbPage"
+                , where: {
+                    address: addressReload.val().length != 0 ? addressReload.val() : null,
+                    isState: applyState
+                }
+                , done: function (res, curr, count) {
+                    // console.log(res, curr, count);
+                    // this.where={};
+                    //不清空,有问题:搜索条件会保留
+                    //清空,  有问题:分页的时候没有搜索条件了,分页会受到影响
+                }
+            });
+
+        }
+    };
+
+    $('.addressTable .layui-btn').on('click', function () {
+        let type = $(this).data('type');
+        active[type] ? active[type].call(this) : '';
+    });
+
+});
+
+function ctbReloadFunction() {
+    tableCTB.reload({
+        page: true
+        , method: 'POST'
+        , url: ctx + "/sys/sysProperty/findComCntToSnbPage"
+        , done: function (res, curr, count) {
+            // console.log(res, curr, count);
+            // this.where={};
+            //不清空,有问题:搜索条件会保留
+            //清空,  有问题:分页的时候没有搜索条件了,分页会受到影响
+        }
+    });
+}

+ 24 - 4
src/main/resources/static/sys/aComUser/js/user.js

@@ -260,12 +260,26 @@ function initSNBTable(table, data) {
                         return '<span style="color: green">转CNT解冻</span>';
                     } else if (d.tranType == 3) {
                         return '<span style="color: red">购买种子</span>';
+                    } else if (d.tranType == 4) {
+                        return '<span style="color: red">偷取果实</span>';
+                    } else if (d.tranType == 5) {
+                        return '<span style="color: red">购买装备</span>';
+                    } else if (d.tranType == 6) {
+                        return '<span style="color: red">购买装备</span>';
+                    } else if (d.tranType == 7) {
+                        return '<span style="color: red">购买狗粮</span>';
+                    } else if (d.tranType == 8) {
+                        return '<span style="color: red">释放SNB</span>';
+                    } else if (d.tranType == 9) {
+                        return '<span style="color: red">幸运值</span>';
                     } else {
                         return '<span style="color: red">待添加:</span>' + d.tranType;
                     }
                 }
             }
-            , {field: 'tranAmount', title: '交易数量'}
+            , {field: 'tranAmount', title: '交易数量',templet: function (d) {
+                    return (d.tranAmount + d.tranAmountPart).toFixed(5);
+                }}
             , {field: 'tranPrice', title: '交易价格'}
             , {field: 'tranDescribe', title: '交易描述'}
             , {
@@ -277,9 +291,15 @@ function initSNBTable(table, data) {
                     }
                 }
             }
-            , {field: 'beforeSnb', title: '交易之前的snb'}
-            , {field: 'tranSnb', title: '交易的snb'}
-            , {field: 'afterSnb', title: '交易完成后的snb'}
+            , {field: 'beforeSnb', title: '交易之前的snb',templet: function (d) {
+                    return (d.beforeSnb + d.beforeSnbPart).toFixed(5);
+                }}
+            , {field: 'tranSnb', title: '交易的snb', templet: function (d) {
+                    return (d.tranSnb + d.tranSnbPart).toFixed(5);
+                }}
+            , {field: 'afterSnb', title: '交易完成后的snb',templet: function (d) {
+                    return (d.afterSnb + d.afterSnbPart).toFixed(5);
+                }}
             , {field: 'createTime', title: '创建时间'}
             , {field: 'updateTime', title: '更新时间', hide: true}
         ]]

+ 1 - 1
src/main/resources/static/sys/aComUser/js/userPlayerGoods.js

@@ -80,7 +80,7 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             , {field: 'name', title: '物品名称'}
             , {field: 'amount', title: '数量'}
             , {field: 'amountPart', title: '小数部分数量'}
-            , {fixed: 'right', title: '操作', toolbar: '#userPlayerGoodsTableBarDemo'}
+            , {fixed: 'right', title: '操作', toolbar: '#userPlayerGoodsTableBarDemo' ,hide:true}
         ]]
         , defaultToolbar: ['', 'exports', 'print']
         , page: true

+ 51 - 16
src/main/resources/view/sys/aComApplySNBToCNT/applySNBToCNT.html

@@ -18,7 +18,8 @@
                         <div class="layui-inline">
                             <label class="layui-form-label">自动审查</label>
                             <div class="layui-input-block">
-                                <input id="applyAutoExamine" th:value="${sysSettingTask.applyAutoExamine}"  hidden="hidden"/>
+                                <input id="applyAutoExamine" th:value="${sysSettingTask.applyAutoExamine}"
+                                       hidden="hidden"/>
                                 <input type="radio" name="applyAutoExamine" value="Y" title="是">
                                 <input type="radio" name="applyAutoExamine" value="N" title="否">
                             </div>
@@ -26,18 +27,31 @@
                         <div class="layui-inline">
                             <label class="layui-form-label">snb筛选范围</label>
                             <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="conditionSnbMin" placeholder="min"  th:value="${sysSettingTask.conditionSnbMin}" autocomplete="off" class="layui-input">
+                                <input type="text" name="conditionSnbMin" placeholder="min"
+                                       th:value="${sysSettingTask.conditionSnbMin}" autocomplete="off"
+                                       class="layui-input">
                             </div>
                             <div class="layui-form-mid">-</div>
                             <div class="layui-input-inline" style="width: 100px;">
-                                <input type="text" name="conditionSnbMax" placeholder="max"  th:value="${sysSettingTask.conditionSnbMax}" autocomplete="off" class="layui-input">
+                                <input type="text" name="conditionSnbMax" placeholder="max"
+                                       th:value="${sysSettingTask.conditionSnbMax}" autocomplete="off"
+                                       class="layui-input">
+                            </div>
+                        </div>
+                        <div class="layui-inline">
+                            <label class="layui-form-label">当天下标限制的次数</label>
+                            <div class="layui-input-inline" style="width: 100px;">
+                                <input type="text" name="applyCount" placeholder="下标次数"
+                                       th:value="${sysSettingTask.applyCount}" autocomplete="off" class="layui-input">
                             </div>
                         </div>
 
                         <div class="layui-inline">
                             <label class="layui-form-label">更新时间</label>
                             <div class="layui-input-block">
-                                <input type="text" name="updateTime" th:value="${#dates.format(sysSettingTask.updateTime, 'yyyy-MM-dd HH:mm:ss')}" autocomplete="off"
+                                <input type="text" name="updateTime"
+                                       th:value="${#dates.format(sysSettingTask.updateTime, 'yyyy-MM-dd HH:mm:ss')}"
+                                       autocomplete="off"
                                        placeholder="更新时间"
                                        class="layui-input" readonly="readonly" disabled="disabled">
                             </div>
@@ -49,18 +63,31 @@
                     </div>
 
                     <!-- 隐藏域 -->
-                    <input type="text" name="id"  th:value="${sysSettingTask.id}" hidden="hidden"/>
-                    <input type="text" name="createTime"  th:value="${#dates.format(sysSettingTask.createTime, 'yyyy-MM-dd HH:mm:ss')}" hidden="hidden"/>
+                    <input type="text" name="id" th:value="${sysSettingTask.id}" hidden="hidden"/>
+                    <input type="text" name="createTime"
+                           th:value="${#dates.format(sysSettingTask.createTime, 'yyyy-MM-dd HH:mm:ss')}"
+                           hidden="hidden"/>
                 </form>
             </div>
             <div class="layui-card-body">
-                <div class="addressTable" style="margin-bottom: 20px;">
-                    钱包地址:
+                <div class="layui-inline addressTable" style="margin-bottom: 20px;">
+                    <div class="layui-inline">
+                        钱包地址:
+                        <div class="layui-inline">
+                            <input class="layui-input" name="id" id="addressReload" autocomplete="off">
+                        </div>
+                        <button class="layui-btn" data-type="reload">搜索</button>
+                    </div>
                     <div class="layui-inline">
-                        <input class="layui-input" name="id" id="addressReload" autocomplete="off">
+                        <label class="layui-form-label" style="margin-left: 20px;">日期范围的数据:</label>
+                        <div class="layui-input-inline" style="width: 300px;">
+                            <input type="text" class="layui-input" id="cntDate" placeholder=" - ">
+                        </div>
+                        <button class="layui-btn" data-type="exports">导出</button>
                     </div>
-                    <button class="layui-btn" data-type="reload">搜索</button>
                 </div>
+
+
                 <div class="layui-tab" lay-filter="test">
                     <ul class="layui-tab-title">
                         <li class="layui-this" lay-id="0">申请中</li>
@@ -77,17 +104,25 @@
                 <script type="text/html" id="applySnbTableToolbarDemo">
 
                     <div class="layui-btn-container">
-                        <button class="layui-btn" lay-event="applySnbTableReload">刷新</button>
-                        <button class="layui-btn" lay-event="batchApproval">批量同意</button>
-                        <button class="layui-btn" lay-event="batchRejection">批量驳回</button>
-                        <button class="layui-btn" lay-event="getCheckLength">获取选中数目</button>
-                        <button class="layui-btn" lay-event="isAll">验证是否全选</button>
+                        <button class="layui-btn layuibtn1" lay-event="applySnbTableReload">刷新</button>
+                        {{# if(applyState == 0 || applyState == 2){ }}
+                        <button class="layui-btn layuibtn2" lay-event="batchApproval">批量同意</button>
+                        {{# } }}
+                        {{# if(applyState == 1){ }}
+                        <button class="layui-btn layuibtn3" lay-event="batchRejection">批量驳回</button>
+                        {{# } }}
+                        <button class="layui-btn layuibtn4" lay-event="getCheckLength">获取选中数目</button>
+                        <button class="layui-btn layuibtn5" lay-event="isAll">验证是否全选</button>
                     </div>
+
+
                 </script>
 
                 <script type="text/html" id="barDemo">
-                    {{# if(d.isState == 0){ }}
+                    {{# if(d.isState == 0 || d.isState == 2){ }}
                     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="agree">同意</a>
+                    {{# } }}
+                    {{# if(d.isState == 1){ }}
                     <a class="layui-btn layui-btn-xs" lay-event="reject">驳回</a>
                     {{# } }}
                 </script>

+ 17 - 0
src/main/resources/view/sys/aComCNTAnbSNB/CNTAndSNB.html

@@ -85,6 +85,23 @@
             </div>
         </div>
     </div>
+
+    <div class="layui-col-md6">
+        <div class="layui-card">
+            <div class="layui-card-header">SNB异常统计</div>
+            <div class="layui-card-body">
+                <!-- 表格主体 -->
+                <table class="layui-hide" id="snbErrorTable" lay-filter="test"></table>
+                <!-- 模板 -->
+                <script type="text/html" id="snbErrorTableToolbarDemo">
+                    <div class="layui-btn-container">
+                        <button class="layui-btn layui-btn-sm" lay-event="snbErrorReload">刷新</button>
+                    </div>
+                </script>
+            </div>
+        </div>
+
+    </div>
 </div>
 </body>
 <!-- js -->

+ 42 - 0
src/main/resources/view/sys/aComCntToSnb/aComCntToSnb.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<!--解决idea thymeleaf 表达式模板报红波浪线-->
+<!--suppress ALL -->
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <!-- 引入公用部分 -->
+    <script th:replace="common/head::static"></script>
+    <!-- 游戏数据用户相关样式 -->
+    <link th:href="@{/sys/aComCntToSnb/aComCntToSnb.css}" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div class="layui-row layui-col-space15">
+    <div class="layui-col-md12">
+        <div class="layui-card">
+            <div class="layui-card-body">
+                <div class="addressTable" style="margin-bottom: 20px;">
+                    钱包地址:
+                    <div class="layui-inline">
+                        <input class="layui-input" name="id" id="addressReload" autocomplete="off">
+                    </div>
+                    <button class="layui-btn" data-type="reload">搜索</button>
+                </div>
+
+                <!-- 表格主体 -->
+                <table class="layui-hide" id="ctbTable" lay-filter="test"></table>
+
+                <!-- 模板 -->
+                <script type="text/html" id="ctbTableToolbarDemo">
+
+                    <div class="layui-btn-container">
+                        <button class="layui-btn" lay-event="ctbReload">刷新</button>
+                    </div>
+                </script>
+
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+<!-- js -->
+<script th:src="@{/sys/aComCntToSnb/aComCntToSnb.js}"></script>
+</html>