From 35309b932b738d5a8537e53207d28004a8da0f89 Mon Sep 17 00:00:00 2001
From: gongzuming <gongzuming>
Date: 星期五, 20 九月 2024 17:17:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master-v2'

---
 src/main/java/com/mzl/flower/schedule/PointScheduleService.java |   96 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 96 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/mzl/flower/schedule/PointScheduleService.java b/src/main/java/com/mzl/flower/schedule/PointScheduleService.java
new file mode 100644
index 0000000..9a6a612
--- /dev/null
+++ b/src/main/java/com/mzl/flower/schedule/PointScheduleService.java
@@ -0,0 +1,96 @@
+package com.mzl.flower.schedule;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.mzl.flower.constant.Constants;
+import com.mzl.flower.dto.response.point.ExpiredPointDTO;
+import com.mzl.flower.entity.point.CustomerPoint;
+import com.mzl.flower.entity.point.CustomerPointDetail;
+import com.mzl.flower.mapper.point.CustomerPointDetailMapper;
+import com.mzl.flower.mapper.point.CustomerPointMapper;
+import com.mzl.flower.mapper.point.PointGoodsRecordMapper;
+import com.mzl.flower.utils.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.List;
+
+@Component
+@Slf4j
+public class PointScheduleService {
+
+
+    private final CustomerPointMapper customerPointMapper;
+
+    private final CustomerPointDetailMapper customerPointDetailMapper;
+
+    private final PointGoodsRecordMapper pointGoodsRecordMapper;
+
+    public PointScheduleService(CustomerPointMapper customerPointMapper, CustomerPointDetailMapper customerPointDetailMapper, PointGoodsRecordMapper pointGoodsRecordMapper) {
+        this.customerPointMapper = customerPointMapper;
+        this.customerPointDetailMapper = customerPointDetailMapper;
+        this.pointGoodsRecordMapper = pointGoodsRecordMapper;
+    }
+
+
+    /**
+     * 定时计算用户过期积分
+     */
+    @Scheduled(cron = "0 10 0 * * ?")
+    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,null);
+        if(pointDTOS != null && pointDTOS.size() > 0){
+            for (ExpiredPointDTO pointDTO : pointDTOS) {
+                if(pointDTO.getAddPoint().intValue()> pointDTO.getReducePoint().intValue()){ //积分增加大于减少
+                    Integer expiredPoint = pointDTO.getAddPoint().intValue() - pointDTO.getReducePoint().intValue();
+                    CustomerPointDetail customerPointDetail = new CustomerPointDetail();
+                    customerPointDetail.setUserId(pointDTO.getUserId());
+                    customerPointDetail.setCustomerId(pointDTO.getCustomerId());
+                    customerPointDetail.setChangeType(Constants.POINT_CHANGE_TYPE.reduce.name());
+                    customerPointDetail.setType(Constants.POINT_TYPE.expired.name());
+                    customerPointDetail.setPoint(expiredPoint);
+                    customerPointDetail.setRecordDate(lastYear);
+                    customerPointDetail.create("sys");
+                    customerPointDetail.setRemarks(DateUtils.toString(now,"yyyy-MM-dd")+"过期积分结算,过期积分"+expiredPoint);
+                    customerPointDetailMapper.insert(customerPointDetail);
+
+                    //更新用户积分记录
+                    CustomerPoint customerPoint = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>()
+                            .eq(CustomerPoint::getCustomerId, pointDTO.getCustomerId())
+                            .eq(CustomerPoint::getUserId, pointDTO.getUserId()));
+                    if(customerPoint == null ){
+                        log.error("用户积分记录不存在,userId={},customerId={}",pointDTO.getUserId(),pointDTO.getCustomerId());
+                    }else {
+                        Integer expiredPointTotal = customerPoint.getExpiredPoint()==null?0:customerPoint.getExpiredPoint();
+                        customerPoint.setExpiredPoint(expiredPoint+expiredPointTotal);
+                        customerPointMapper.updateById(customerPoint);
+                    }
+
+                }
+            }
+        }
+
+
+        log.info("过期积分计算结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
+
+    /**
+     * 积分兑换券过期
+     */
+    @Scheduled(cron = "0 46 11 * * ?")
+    public void expiredPointGoodsRecord() {
+        log.info("积分兑换券过期计算开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+        pointGoodsRecordMapper.updateExpiredPointGoodsRecord();
+        log.info("积分兑换券过期计算开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
+
+}

--
Gitblit v1.9.3