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 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() .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")); } }