|
@@ -41,18 +41,29 @@ public class ElderContractUpdateJob implements JobHandler {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void updateElderContractStatus(Long tenantId){
|
|
private void updateElderContractStatus(Long tenantId){
|
|
|
- // 获取该租户所有的长者合同
|
|
|
|
|
|
|
+ LocalDate nowLocalDate = LocalDate.now();
|
|
|
|
|
+
|
|
|
|
|
+ // 1) 修复:将“进行中(1)”但日期不匹配的合同纠正为“未开始(2)”或“过期(0)”
|
|
|
|
|
+ // 使用批量 SQL,避免逐条 update
|
|
|
|
|
+ Date nowDate = Date.from(nowLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
|
|
|
+ int fixToNotStartedCount = elderlyContractMapper.batchUpdateStatusToNotStarted(tenantId, nowDate);
|
|
|
|
|
+ int fixToExpiredCount = elderlyContractMapper.batchUpdateStatusToExpired(tenantId, nowDate);
|
|
|
|
|
+ if (fixToNotStartedCount > 0 || fixToExpiredCount > 0) {
|
|
|
|
|
+ logger.info("租户{}合同状态修复:进行中->未开始 {} 条,进行中->过期 {} 条", tenantId, fixToNotStartedCount, fixToExpiredCount);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2) 原有逻辑:到期的旧合同置为过期(0),并将符合条件的未开始合同置为进行中(1)
|
|
|
|
|
+ // 这里先重新查询一次进行中合同(避免上一步修复后状态已变化造成遗漏/误判)
|
|
|
List<ElderlyContractDO> elderlyContractDOList = elderlyContractMapper.selectList(new LambdaQueryWrapperX<ElderlyContractDO>()
|
|
List<ElderlyContractDO> elderlyContractDOList = elderlyContractMapper.selectList(new LambdaQueryWrapperX<ElderlyContractDO>()
|
|
|
.eq(ElderlyContractDO::getTenantId, tenantId)
|
|
.eq(ElderlyContractDO::getTenantId, tenantId)
|
|
|
.eq(ElderlyContractDO::getStatus, 1));
|
|
.eq(ElderlyContractDO::getStatus, 1));
|
|
|
for (ElderlyContractDO elderlyContractDO : elderlyContractDOList) {
|
|
for (ElderlyContractDO elderlyContractDO : elderlyContractDOList) {
|
|
|
- LocalDate nowLocalDate = LocalDate.now();
|
|
|
|
|
LocalDate expireLocalDate = elderlyContractDO.getExpireTime().toInstant()
|
|
LocalDate expireLocalDate = elderlyContractDO.getExpireTime().toInstant()
|
|
|
.atZone(ZoneId.systemDefault())
|
|
.atZone(ZoneId.systemDefault())
|
|
|
.toLocalDate();
|
|
.toLocalDate();
|
|
|
// 判断合同今天是否是到期时间
|
|
// 判断合同今天是否是到期时间
|
|
|
- if(expireLocalDate.isBefore(nowLocalDate)){ // 当天不属于过期,过了一天才算,所以+1
|
|
|
|
|
- // 查询未开始的合同,并且开始时间大于等于今天
|
|
|
|
|
|
|
+ if(expireLocalDate.isBefore(nowLocalDate)){ // 到期当日不算过期,次日才算
|
|
|
|
|
+ // 查询未开始的合同(同一老人),并且截止时间 >= 今天(意味着该合同今天仍有效或未来有效)
|
|
|
List<ElderlyContractDO> futureContractList = elderlyContractMapper.selectList(new LambdaQueryWrapperX<ElderlyContractDO>()
|
|
List<ElderlyContractDO> futureContractList = elderlyContractMapper.selectList(new LambdaQueryWrapperX<ElderlyContractDO>()
|
|
|
.eq(ElderlyContractDO::getElderId, elderlyContractDO.getElderId())
|
|
.eq(ElderlyContractDO::getElderId, elderlyContractDO.getElderId())
|
|
|
.eq(ElderlyContractDO::getStatus, 2)
|
|
.eq(ElderlyContractDO::getStatus, 2)
|