| | |
| | | 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.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 org.springframework.scheduling.annotation.Scheduled; |
| | | 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; |
| | | |
| | | /** |
| | |
| | | * @since 2024/4/28 下午 4:14 |
| | | */ |
| | | |
| | | @Component |
| | | @Slf4j |
| | | @Data |
| | | @Component("contractResultTask") |
| | | public class ContractResultTask { |
| | | |
| | | private final ITContractService contractService; |
| | | private final IContractScoreService contractScoreService; |
| | | private final ICheckResultService checkResultService; |
| | | |
| | | 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号执行,统计考核结果 |
| | | */ |
| | | @Scheduled(cron = "0 0 0 1 * ?") |
| | | @Transactional |
| | | // @PostConstruct //启动时执行一次 |
| | | public void contractResultTask() { |
| | | // 查询有效期内的合同 |
| | | List<TContract> list = contractService.selectUsingContract(); |
| | |
| | | // 上个月扣分记录 |
| | | List<ContractScore> contractScore = contractScoreService.getDateRangeScoreByContractId(tContract.getId(), startTime, endTime); |
| | | // 新增考核结果 |
| | | CheckResult checkResult = getCheckResult(tContract, contractScore); |
| | | checkResultService.save(checkResult); |
| | | // 新增考核结果记录 |
| | | List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, checkResult); |
| | | checkResultService.saveBatchRecord(contractResultRecord); |
| | | //获取上个月时间 |
| | | 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); |
| | | // 新增核算明细记录 |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 保存考核记录 |
| | | * |
| | | * @param contractScore 扣分 |
| | | * @param checkResult 考核结果 |
| | | * @param contractScore 扣分 |
| | | * @param contractResult 考核结果 |
| | | * @return 考核记录 |
| | | */ |
| | | private List<ContractResultRecord> getContractResultRecord(List<ContractScore> contractScore, CheckResult checkResult) { |
| | | private List<ContractResultRecord> getContractResultRecord(List<ContractScore> contractScore, ContractResult contractResult) { |
| | | return contractScore.stream().map( |
| | | item -> { |
| | | ContractResultRecord record = new ContractResultRecord(); |
| | | BeanUtils.copyProperties(item, record); |
| | | record.setResultId(checkResult.getId()); |
| | | record.setResultId(contractResult.getId()); |
| | | record.setCreateTime(DateUtils.getNowDate()); |
| | | return record; |
| | | } |
| | |
| | | * @param contractScore 扣分 |
| | | * @return 考核结果 |
| | | */ |
| | | private CheckResult getCheckResult(TContract tContract, List<ContractScore> contractScore) { |
| | | CheckResult checkResult = new CheckResult(); |
| | | checkResult.setUnitId(tContract.getUnitId()); |
| | | checkResult.setContractId(tContract.getId()); |
| | | checkResult.setPublish(0); |
| | | checkResult.setDeleted("0"); |
| | | checkResult.setCheckTime(DateUtils.getNowDate()); |
| | | checkResult.setScore(contractScore.isEmpty() ? new BigDecimal("100") : new BigDecimal("100").subtract(contractScore.stream().map(ContractScore::getScore).reduce(BigDecimal::add).get())); |
| | | return checkResult; |
| | | private ContractResult getCheckResult(TContract tContract, List<ContractScore> contractScore) { |
| | | ContractResult contractResult = new ContractResult(); |
| | | contractResult.setUnitId(tContract.getUnitId()); |
| | | 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())); |
| | | return contractResult; |
| | | } |
| | | |
| | | |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |