|
|
@@ -30,6 +30,7 @@ import com.platform.dao.entity.upms.SysConfig;
|
|
|
import com.platform.dao.entity.upms.SysFile;
|
|
|
import com.platform.dao.enums.*;
|
|
|
import com.platform.dao.mapper.check.*;
|
|
|
+import com.platform.dao.mapper.repair.RepairApplicationFormMapper;
|
|
|
import com.platform.dao.mapper.sb.SbInfoMapper;
|
|
|
import com.platform.dao.mapper.sb.SbPositionMapper;
|
|
|
import com.platform.dao.mapper.upms.SysFileMapper;
|
|
|
@@ -115,6 +116,8 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
|
|
|
private SbPositionMapper sbPositionMapper;
|
|
|
@Autowired
|
|
|
private CheckRequirementMapper requirementMapper;
|
|
|
+ @Autowired
|
|
|
+ private RepairApplicationFormMapper repairApplicationFormMapper;
|
|
|
|
|
|
@Value("${upload.root-dir}")
|
|
|
private String UPLOAD_ROOT_FOLDER;
|
|
|
@@ -269,11 +272,37 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
|
|
|
List<CheckJobVO> list = mapper.selectList(dto);
|
|
|
|
|
|
if (list.size() > 0) {
|
|
|
- List<String> ids = list.stream().map(CheckJobVO::getId).collect(Collectors.toList());
|
|
|
- Weekend<CheckJob> weekend = new Weekend<>(CheckJob.class);
|
|
|
- WeekendCriteria<CheckJob, Object> weekendCriteria = weekend.weekendCriteria();
|
|
|
- weekendCriteria.andIn(CheckJob::getId, ids);
|
|
|
- mapper.deleteByExample(weekend);
|
|
|
+ Set<String> allNotInUseSbIds = list.stream()
|
|
|
+ .map(CheckJobVO::getSbId)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+
|
|
|
+ // 排除存在审核中/进行中报修单的设备(避免误删流程中的设备保养任务)
|
|
|
+ // 状态:PROCESSING(2)、WAIT_SUBMIT(3)、NOT_ACCEPTANCE(4)、REBACK(5)
|
|
|
+ List<Integer> activeStatusList = Arrays.asList(
|
|
|
+ RepairApplicationFormStatusEnum.PROCESSING.getValue(),
|
|
|
+ RepairApplicationFormStatusEnum.WAIT_SUBMIT.getValue(),
|
|
|
+ RepairApplicationFormStatusEnum.NOT_ACCEPTANCE.getValue(),
|
|
|
+ RepairApplicationFormStatusEnum.REBACK.getValue());
|
|
|
+ List<String> sbIdsInProgress = repairApplicationFormMapper.selectSbIdsWithStatus(
|
|
|
+ new ArrayList<>(allNotInUseSbIds), activeStatusList);
|
|
|
+
|
|
|
+ Set<String> protectedSbIds = new HashSet<>(sbIdsInProgress);
|
|
|
+ log.info("设备停用清理保养任务:非在用设备 {} 台,其中 {} 台有审核中/进行中工单,将保留其保养任务",
|
|
|
+ allNotInUseSbIds.size(), protectedSbIds.size());
|
|
|
+
|
|
|
+ // 过滤掉有进行中工单的设备
|
|
|
+ List<CheckJobVO> toDeleteList = list.stream()
|
|
|
+ .filter(job -> !protectedSbIds.contains(job.getSbId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (toDeleteList.size() > 0) {
|
|
|
+ List<String> ids = toDeleteList.stream().map(CheckJobVO::getId).collect(Collectors.toList());
|
|
|
+ Weekend<CheckJob> weekend = new Weekend<>(CheckJob.class);
|
|
|
+ WeekendCriteria<CheckJob, Object> weekendCriteria = weekend.weekendCriteria();
|
|
|
+ weekendCriteria.andIn(CheckJob::getId, ids);
|
|
|
+ mapper.deleteByExample(weekend);
|
|
|
+ log.info("已删除 {} 条停用设备的保养任务", ids.size());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -2621,6 +2650,105 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void generateJobsForSb(String sbId) {
|
|
|
+ if (StringUtils.isBlank(sbId)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ log.info("开始为设备 {} 重新生成保养任务", sbId);
|
|
|
+
|
|
|
+ // 查询该设备关联的所有启用保养标准
|
|
|
+ Weekend<CheckStandard> standardWeekend = new Weekend<>(CheckStandard.class);
|
|
|
+ standardWeekend.weekendCriteria()
|
|
|
+ .andEqualTo(CheckStandard::getSbId, sbId)
|
|
|
+ .andEqualTo(CheckStandard::getEnable, 1);
|
|
|
+ List<CheckStandard> standardList = standardMapper.selectByExample(standardWeekend);
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(standardList)) {
|
|
|
+ log.info("设备 {} 没有启用的保养标准,跳过生成", sbId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<CheckJob> jobList = new ArrayList<>();
|
|
|
+ int generatedCount = 0;
|
|
|
+
|
|
|
+ for (CheckStandard standard : standardList) {
|
|
|
+ // 查询该标准是否已有未完成的任务
|
|
|
+ Weekend<CheckJob> jobWeekend = new Weekend<>(CheckJob.class);
|
|
|
+ jobWeekend.weekendCriteria()
|
|
|
+ .andEqualTo(CheckJob::getSbId, sbId)
|
|
|
+ .andEqualTo(CheckJob::getStandardId, standard.getId())
|
|
|
+ .andNotEqualTo(CheckJob::getStatus, CheckJobStatusEnum.FINISHED.getValue());
|
|
|
+ List<CheckJob> existingJobs = mapper.selectByExample(jobWeekend);
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(existingJobs)) {
|
|
|
+ log.debug("保养标准 {} 设备 {} 已有待执行任务,跳过", standard.getId(), sbId);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成新的保养任务
|
|
|
+ CheckJob checkJob = new CheckJob();
|
|
|
+ checkJob.setId(IdGeneratorUtils.getObjectId());
|
|
|
+ checkJob.setName(standard.getName());
|
|
|
+ checkJob.setType(standard.getType() != null ? standard.getType() : 2);
|
|
|
+ checkJob.setSbId(sbId);
|
|
|
+ checkJob.setStandardId(standard.getId());
|
|
|
+ checkJob.setRequirement(standard.getRequirement());
|
|
|
+ checkJob.setRemark(standard.getRemark());
|
|
|
+ checkJob.setStatus(CheckJobStatusEnum.NOT_EXECUTE.getValue());
|
|
|
+ checkJob.setReceiveOvertime(false);
|
|
|
+ checkJob.setSbStatus(SbInfoStatusEnum.IN_USE.getValue());
|
|
|
+ checkJob.setStandardHours(standard.getStandardHours());
|
|
|
+ checkJob.setRealHours(standard.getRealHours());
|
|
|
+ checkJob.setCreatedTime(LocalDateTime.now());
|
|
|
+ checkJob.setUpdateTime(LocalDateTime.now());
|
|
|
+
|
|
|
+ // 设置开始时间和结束时间
|
|
|
+ LocalDate startDate = LocalDate.now();
|
|
|
+ checkJob.setStartTime(startDate);
|
|
|
+ if (standard.getPeriod() != null && standard.getPeriodType() != null) {
|
|
|
+ LocalDate endDate = calculateEndDate(startDate, standard.getPeriod(), standard.getPeriodType());
|
|
|
+ checkJob.setEndTime(endDate);
|
|
|
+ } else {
|
|
|
+ checkJob.setEndTime(startDate.plusDays(7));
|
|
|
+ }
|
|
|
+
|
|
|
+ jobList.add(checkJob);
|
|
|
+ generatedCount++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(jobList)) {
|
|
|
+ mapper.insertListforComplex(jobList);
|
|
|
+ log.info("为设备 {} 生成了 {} 条新的保养任务", sbId, generatedCount);
|
|
|
+ } else {
|
|
|
+ log.info("设备 {} 无需生成新任务", sbId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算结束日期
|
|
|
+ */
|
|
|
+ private LocalDate calculateEndDate(LocalDate startDate, Integer period, Integer periodType) {
|
|
|
+ if (period == null || periodType == null) {
|
|
|
+ return startDate.plusDays(7);
|
|
|
+ }
|
|
|
+ switch (periodType) {
|
|
|
+ case CommonConstants.DAY:
|
|
|
+ return startDate.plusDays(period);
|
|
|
+ case CommonConstants.WEEK:
|
|
|
+ return startDate.plusWeeks(period);
|
|
|
+ case CommonConstants.MONTH:
|
|
|
+ return startDate.plusMonths(period);
|
|
|
+ case CommonConstants.SEASON:
|
|
|
+ return startDate.plusMonths(period * 3L);
|
|
|
+ case CommonConstants.YEAR:
|
|
|
+ return startDate.plusYears(period);
|
|
|
+ default:
|
|
|
+ return startDate.plusDays(period);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 下载PDF文件
|
|
|
*
|