package com.ycl.task; import com.ycl.platform.domain.entity.CheckResult; import com.ycl.platform.domain.entity.ContractResultRecord; import com.ycl.platform.domain.entity.ContractScore; import com.ycl.platform.domain.entity.TContract; import com.ycl.platform.service.ICheckResultService; import com.ycl.platform.service.IContractScoreService; import com.ycl.platform.service.ITContractService; import com.ycl.utils.DateUtils; import com.ycl.utils.bean.BeanUtils; import jakarta.annotation.PostConstruct; import lombok.Data; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; /** * @author ghl * @since 2024/4/28 下午 4:14 */ @Component @Data public class ContractResultTask { private final ITContractService contractService; private final IContractScoreService contractScoreService; private final ICheckResultService checkResultService; private String startTime; private String endTime; /** * 每个月1号执行 */ @Scheduled(cron = "0 0 0 1 * ?") // @PostConstruct // 多表 public void contractResultTask() { // 查询有效期内的合同 List list = contractService.selectUsingContract(); getLastMonth(); for (TContract tContract : list) { // 上个月扣分记录 List contractScore = contractScoreService.getDateRangeScoreByContractId(tContract.getId(), startTime, endTime); // 新增考核结果 CheckResult checkResult = new CheckResult(); checkResult.setUnitId(tContract.getUnitId()); checkResult.setContractId(tContract.getId()); checkResult.setPublish(0); checkResult.setCheckTime(DateUtils.getNowDate()); checkResultService.save(checkResult); // 新增考核结果记录 List contractResultRecord = new ArrayList<>(); BeanUtils.copyBeanProp(contractResultRecord, contractScore); checkResultService.saveBatchRecord(contractResultRecord); } } /** * 获取上个月的第一天和最后一天 */ public void getLastMonth() { LocalDate currentDate = LocalDate.now().minusMonths(1); LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1); String firstDay = firstDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); LocalDate lastDayOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth()); String lastDay = lastDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); this.startTime = firstDay; this.endTime = lastDay; } }