ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
@@ -1,21 +1,28 @@
package com.ycl.task;
import com.ycl.platform.domain.entity.ContractResult;
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.domain.entity.*;
import com.ycl.platform.mapper.CalculateRecordMapper;
import com.ycl.platform.service.CalculateRecordService;
import com.ycl.platform.service.IContractResultService;
import com.ycl.platform.service.IContractScoreService;
import com.ycl.platform.service.ITContractService;
import com.ycl.utils.DateUtils;
import com.ycl.utils.bean.BeanUtils;
import enumeration.general.CalculateReportStatusEnum;
import enumeration.general.PublishType;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
@@ -23,6 +30,7 @@
 * @since 2024/4/28 下午 4:14
 */
@Slf4j
@Data
@Component("contractResultTask")
public class ContractResultTask {
@@ -30,15 +38,63 @@
    private final ITContractService contractService;
    private final IContractScoreService contractScoreService;
    private final IContractResultService checkResultService;
    private final CalculateRecordMapper calculateRecordMapper;
    private String startTime;
    private String endTime;
    @Transactional
    public void contractResultTaskByDay(){
        // 查询有效期内的合同
        List<TContract> list = contractService.selectUsingContract();
        String startTime = "2025-06-17 00:00:00";
        String endTime = "2025-06-17 23:59:59";
//        getDayStartAndEnd(startTime,endTime);
        for (TContract tContract : list) {
            // 获得昨天的扣分记录
            List<ContractScore> contractScore = contractScoreService.getDateRangeScoreByContractId(tContract.getId(), startTime, endTime);
            System.out.println("打印昨日扣分记录");
            System.out.println(contractScore);
            if (CollectionUtils.isEmpty(contractScore)){
                log.error("昨日扣分记录列表为空");
                return;
            }
            // 新增考核结果
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DATE, -1);
            ContractResult contractResult = getCheckResult(tContract, contractScore);
            contractResult.setWhichMonth(calendar.get(Calendar.MONTH)+1);
            contractResult.setWhichYear(calendar.get(Calendar.YEAR));
            contractResult.setWhichDay(calendar.get(Calendar.DAY_OF_MONTH));
            checkResultService.save(contractResult);
//            // 新增考核结果记录
//            List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, contractResult);
//            checkResultService.saveBatchRecord(contractResultRecord);
            // 新增核算明细记录
            CalculateRecord calculateRecord = new CalculateRecord();
            //改为直接去查
//            calculateRecord.setScore(contractResult.getScore());
            calculateRecord.setContractId(Integer.parseInt(tContract.getId()+""));
            calculateRecord.setCreateTime(new Date());
            calculateRecord.setUpdateTime(new Date());
            calculateRecord.setStatus(PublishType.UNPUBLISHED.getCode());
            calculateRecord.setWhichYear(calendar.get(Calendar.YEAR));
            calculateRecord.setWhichMonth(calendar.get(Calendar.MONTH)+1);
            calculateRecord.setWhichDay(calendar.get(Calendar.DAY_OF_MONTH));
            System.out.println("新增核算记录");
            System.out.println(calculateRecord);
            calculateRecordMapper.insert(calculateRecord);
        }
    }
    /**
     * 每个月1号执行,统计考核结果
     */
    @Transactional
    // @PostConstruct //启动时执行一次
    public void contractResultTask() {
        // 查询有效期内的合同
        List<TContract> list = contractService.selectUsingContract();
@@ -47,11 +103,28 @@
            // 上个月扣分记录
            List<ContractScore> contractScore = contractScoreService.getDateRangeScoreByContractId(tContract.getId(), startTime, endTime);
            // 新增考核结果
            //获取上个月时间
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.MONTH, -1);
            ContractResult contractResult = getCheckResult(tContract, contractScore);
            contractResult.setWhichMonth(calendar.get(Calendar.MONTH)+1);
            contractResult.setWhichYear(calendar.get(Calendar.YEAR));
            checkResultService.save(contractResult);
            // 新增考核结果记录
            List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, contractResult);
            checkResultService.saveBatchRecord(contractResultRecord);
//            // 新增考核结果记录
//            List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, contractResult);
//            checkResultService.saveBatchRecord(contractResultRecord);
            // 新增核算明细记录
            CalculateRecord calculateRecord = new CalculateRecord();
            //改为直接去查
//            calculateRecord.setScore(contractResult.getScore());
            calculateRecord.setContractId(Integer.parseInt(tContract.getId()+""));
            calculateRecord.setCreateTime(new Date());
            calculateRecord.setUpdateTime(new Date());
            calculateRecord.setStatus(PublishType.UNPUBLISHED.getCode());
            calculateRecord.setWhichYear(calendar.get(Calendar.YEAR));
            calculateRecord.setWhichMonth(calendar.get(Calendar.MONTH)+1);
            calculateRecordMapper.insert(calculateRecord);
        }
    }
@@ -87,7 +160,8 @@
        contractResult.setContractId(tContract.getId());
        contractResult.setPublish(0);
        contractResult.setCheckTime(DateUtils.getNowDate());
        contractResult.setScore(contractScore.isEmpty() ? new BigDecimal("100") : new BigDecimal("100").subtract(contractScore.stream().map(ContractScore::getScore).reduce(BigDecimal::add).get()));
        //改为直接去查
//        contractResult.setScore(contractScore.isEmpty() ? new BigDecimal("100") : new BigDecimal("100").subtract(contractScore.stream().map(ContractScore::getScore).reduce(BigDecimal::add).get()));
        return contractResult;
    }
@@ -104,5 +178,19 @@
        this.startTime = firstDay;
        this.endTime = lastDay;
    }
    /**
    * 获取今天的开始时间与结束时间
    * */
    public void getDayStartAndEnd(String startTime,String endTime) {
        LocalDate today = LocalDate.now().minusDays(1);
        LocalDateTime startOfDay = today.atStartOfDay(); // 00:00:00
        LocalDateTime endOfDay = today.atTime(LocalTime.MAX); // 23:59:59.999999999
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        startTime = startOfDay.format(formatter);
        endTime = endOfDay.format(formatter);
    }
}