From 441d81870507e15214d9c8cbf64e6f3cddb14404 Mon Sep 17 00:00:00 2001
From: gongzuming <gongzuming>
Date: 星期一, 02 九月 2024 17:02:09 +0800
Subject: [PATCH] 优化积分

---
 src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java |    2 +-
 src/main/resources/mapper/point/CustomerPointDetailMapper.xml            |    3 +++
 src/main/定时任务说明.txt                                                      |    3 ++-
 src/main/java/com/mzl/flower/schedule/PointScheduleService.java          |   13 +++----------
 src/main/java/com/mzl/flower/service/point/CustomerPointService.java     |   12 +++++++-----
 5 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java b/src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java
index 6482846..b1b6235 100644
--- a/src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java
@@ -19,5 +19,5 @@
 
     List<CustomerPointDetailVO> queryPage(@Param("dto") CustomerPointDetailQueryDTO dto, Page page);
 
-    List<ExpiredPointDTO> tongjiExpiredPoint(@Param("lastYear") LocalDate lastYear);
+    List<ExpiredPointDTO> tongjiExpiredPoint(@Param("lastYear") LocalDate lastYear,@Param("userId") String userId);
 }
diff --git a/src/main/java/com/mzl/flower/schedule/PointScheduleService.java b/src/main/java/com/mzl/flower/schedule/PointScheduleService.java
index ca05ac0..ad3cd3d 100644
--- a/src/main/java/com/mzl/flower/schedule/PointScheduleService.java
+++ b/src/main/java/com/mzl/flower/schedule/PointScheduleService.java
@@ -39,12 +39,12 @@
     /**
      * 定时计算用户过期积分
      */
-    @Scheduled(cron = "0 20 9 * * ?")
+    @Scheduled(cron = "0 10 1 * * ?")
     public void calculatingExpiredPoint() {
         log.info("过期积分计算开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
         LocalDate now = LocalDate.now().minusDays(1);//前一天
         LocalDate lastYear = now.minus(1, ChronoUnit.YEARS); // 日期减去一年
-        List<ExpiredPointDTO> pointDTOS = customerPointDetailMapper.tongjiExpiredPoint(lastYear);
+        List<ExpiredPointDTO> pointDTOS = customerPointDetailMapper.tongjiExpiredPoint(lastYear,null);
         if(pointDTOS != null && pointDTOS.size() > 0){
             for (ExpiredPointDTO pointDTO : pointDTOS) {
                 if(pointDTO.getAddPoint().intValue()> pointDTO.getReducePoint().intValue()){ //积分增加大于减少
@@ -65,14 +65,7 @@
                             .eq(CustomerPoint::getCustomerId, pointDTO.getCustomerId())
                             .eq(CustomerPoint::getUserId, pointDTO.getUserId()));
                     if(customerPoint == null ){
-                        customerPoint = new CustomerPoint();
-                        customerPoint.setCustomerId(pointDTO.getCustomerId());
-                        customerPoint.setUserId(pointDTO.getUserId());
-                        customerPoint.setTotalPoint(0);
-                        customerPoint.setUsedPoint(0);
-                        customerPoint.setExpiredPoint(0);
-                        customerPoint.create("sys");
-                        customerPointMapper.insert(customerPoint);
+                        log.error("用户积分记录不存在,userId={},customerId={}",pointDTO.getUserId(),pointDTO.getCustomerId());
                     }else {
                         customerPoint.setExpiredPoint(expiredPoint);
                         customerPointMapper.updateById(customerPoint);
diff --git a/src/main/java/com/mzl/flower/service/point/CustomerPointService.java b/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
index 04800ee..a75a7a9 100644
--- a/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
+++ b/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
@@ -85,13 +85,15 @@
         if(POINT_CHANGE_TYPE.add.name().equals(detail.getChangeType())){
             point.setTotalPoint(point.getTotalPoint() + detail.getPoint());
         }else if(POINT_CHANGE_TYPE.reduce.name().equals(detail.getChangeType())){
-            if(point.getTotalPoint()!= null && point.getTotalPoint()!=0 && point.getTotalPoint()>= detail.getPoint()){
-                point.setTotalPoint(point.getTotalPoint() - detail.getPoint());
+            Integer balancePoint = point.getTotalPoint() - point.getUsedPoint()-point.getExpiredPoint();//可用积分
+            balancePoint = balancePoint.intValue()>0?balancePoint.intValue():0;
+            if(balancePoint.intValue() >= detail.getPoint().intValue()){
+                point.setUsedPoint(point.getUsedPoint() + detail.getPoint());
             }else{
                 //积分不足,直接清0
-                point.setTotalPoint(0);
-                detail.setPoint(point.getTotalPoint());
-                detail.setRemarks(detail.getRemarks()+",积分不足,扣除剩余积分"+point.getTotalPoint());
+                point.setUsedPoint(point.getUsedPoint() + balancePoint);
+                detail.setPoint(balancePoint);
+                detail.setRemarks(detail.getRemarks()+",积分不足,扣除积分"+balancePoint);
             }
         }
         if(isAdd){
diff --git a/src/main/resources/mapper/point/CustomerPointDetailMapper.xml b/src/main/resources/mapper/point/CustomerPointDetailMapper.xml
index 6e4689e..6c228fb 100644
--- a/src/main/resources/mapper/point/CustomerPointDetailMapper.xml
+++ b/src/main/resources/mapper/point/CustomerPointDetailMapper.xml
@@ -32,6 +32,9 @@
                and p.record_date <= #{lastYear}
             ]]>
         </if>
+        <if test="userId!=null and userId!=''">
+            and p.user_id = #{userId}
+        </if>
         GROUP BY
         p.user_id,
         p.customer_id
diff --git "a/src/main/\345\256\232\346\227\266\344\273\273\345\212\241\350\257\264\346\230\216.txt" "b/src/main/\345\256\232\346\227\266\344\273\273\345\212\241\350\257\264\346\230\216.txt"
index f6775e5..4f7d204 100644
--- "a/src/main/\345\256\232\346\227\266\344\273\273\345\212\241\350\257\264\346\230\216.txt"
+++ "b/src/main/\345\256\232\346\227\266\344\273\273\345\212\241\350\257\264\346\230\216.txt"
@@ -6,4 +6,5 @@
 6、计算上月供应商销售数量:每月1日凌晨执行一次
 7、自动收货:每隔1小时执行一次
 8、结算:每日凌晨0点钟执行
-9、确认转账:每隔10分钟执行一次
\ No newline at end of file
+9、确认转账:每隔10分钟执行一次
+10、统计过期积分:凌晨1:10执行一次
\ No newline at end of file

--
Gitblit v1.9.3