package com.mzl.flower.schedule; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mzl.flower.constant.Constants; import com.mzl.flower.dto.response.point.ExpiredPointDTO; import com.mzl.flower.entity.flower.FlowerCategory; import com.mzl.flower.entity.partner.Partner; 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.utils.DateUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.List; @Component @Slf4j public class PointScheduleService { private final CustomerPointMapper customerPointMapper; private final CustomerPointDetailMapper customerPointDetailMapper; public PointScheduleService(CustomerPointMapper customerPointMapper, CustomerPointDetailMapper customerPointDetailMapper) { this.customerPointMapper = customerPointMapper; this.customerPointDetailMapper = customerPointDetailMapper; } /** * 定时计算用户过期积分 */ @Scheduled(cron = "0 20 9 * * ?") 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); 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(now); customerPointDetail.create("sys"); customerPointDetail.setRemarks(DateUtils.toString(now,"yyyy-MM-dd")+"过期积分结算"); customerPointDetailMapper.insert(customerPointDetail); //更新用户积分记录 CustomerPoint customerPoint = customerPointMapper.selectOne(new LambdaQueryWrapper() .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); }else { customerPoint.setExpiredPoint(expiredPoint); customerPointMapper.updateById(customerPoint); } } } } log.info("过期积分计算结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); } }