package com.ycl.task;
|
|
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;
|
|
/**
|
* @author ghl
|
* @since 2024/4/28 下午 4:14
|
*/
|
|
@Slf4j
|
@Data
|
@Component("contractResultTask")
|
public class ContractResultTask {
|
|
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
|
public void contractResultTask() {
|
// 查询有效期内的合同
|
List<TContract> list = contractService.selectUsingContract();
|
getLastMonth();
|
for (TContract tContract : list) {
|
// 上个月扣分记录
|
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);
|
// 新增核算明细记录
|
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 contractResult 考核结果
|
* @return 考核记录
|
*/
|
private List<ContractResultRecord> getContractResultRecord(List<ContractScore> contractScore, ContractResult contractResult) {
|
return contractScore.stream().map(
|
item -> {
|
ContractResultRecord record = new ContractResultRecord();
|
BeanUtils.copyProperties(item, record);
|
record.setResultId(contractResult.getId());
|
record.setCreateTime(DateUtils.getNowDate());
|
return record;
|
}
|
).toList();
|
}
|
|
/**
|
* 计算考核结果
|
*
|
* @param tContract 合同
|
* @param contractScore 扣分
|
* @return 考核结果
|
*/
|
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;
|
}
|
|
|
/**
|
* 获取上个月的第一天和最后一天
|
*/
|
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;
|
}
|
/**
|
* 获取今天的开始时间与结束时间
|
* */
|
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);
|
}
|
|
}
|