| doc/20260515_device_maintenance_inspection_abnormal_acceptance.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| doc/20260515_设备巡检异常联动维修单_前端联调文档.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
doc/20260515_device_maintenance_inspection_abnormal_acceptance.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ ALTER TABLE `inspection_task` ADD COLUMN `inspection_project` VARCHAR(100) NULL COMMENT 'å·¡æ£é¡¹ç®' AFTER `task_name`; ALTER TABLE `inspection_task` ADD COLUMN `inspection_result` VARCHAR(1) NULL COMMENT 'å·¡æ£ç»æ 0å¼å¸¸ 1æ£å¸¸' AFTER `remarks`, ADD COLUMN `abnormal_description` VARCHAR(500) NULL COMMENT 'å¼å¸¸æè¿°' AFTER `inspection_result`, ADD COLUMN `device_repair_id` BIGINT NULL COMMENT 'å ³èç»´ä¿®åID' AFTER `abnormal_description`, ADD COLUMN `acceptance_user_id` BIGINT NULL COMMENT 'éªæ¶äººID' AFTER `device_repair_id`, ADD COLUMN `acceptance_name` VARCHAR(100) NULL COMMENT 'éªæ¶äºº' AFTER `acceptance_user_id`; ALTER TABLE `timing_task` ADD COLUMN `inspection_project` VARCHAR(100) NULL COMMENT 'å·¡æ£é¡¹ç®' AFTER `task_name`, ADD COLUMN `is_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT 'æ¯å¦å¯ç¨ 0å¦ 1æ¯' AFTER `is_active`; CREATE INDEX `idx_inspection_task_device_repair_id` ON `inspection_task` (`device_repair_id`); CREATE INDEX `idx_inspection_task_inspection_result` ON `inspection_task` (`inspection_result`); CREATE INDEX `idx_timing_task_is_enabled` ON `timing_task` (`is_enabled`); doc/20260515_É豸Ѳ¼ìÒì³£Áª¶¯Î¬ÐÞµ¥_ǰ¶ËÁªµ÷Îĵµ.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,170 @@ # 设å¤å·¡æ£ä¸å®æ¶å·¡æ£å端èè°ææ¡£ï¼inspectiontaskï¼ > æ´æ°æ¥æï¼2026-05-15 > éç¨æ¨¡åï¼è®¾å¤å·¡æ£ä»»å¡ `inspectiontask`ï¼`/inspectionTask`ï¼ä¸å®æ¶å·¡æ£ä»»å¡ï¼`/timingTask`ï¼ ## 1. æ¬æ¬¡æ¹å¨ 1. å·¡æ£ä»»å¡æ°å¢åæ®µï¼ - `inspectionProject`ï¼å·¡æ£é¡¹ç®ï¼ - `inspectionResult`ï¼å·¡æ£ç»æï¼`0`å¼å¸¸ / `1`æ£å¸¸ï¼å¿ å¡«ï¼ - `abnormalDescription`ï¼å¼å¸¸æè¿°ï¼ - `deviceRepairId`ï¼å ³èç»´ä¿®åIDï¼å¼å¸¸æ¶å端èªå¨åå¡«ï¼ - `acceptanceUserId`ï¼éªæ¶äººIDï¼ - `acceptanceName`ï¼éªæ¶äººï¼ 2. å¼å¸¸æ ¡éªè§åï¼ - `inspectionResult=1`ï¼æ£å¸¸ï¼ï¼ç §çéå¿ å¡«ã - `inspectionResult=0`ï¼å¼å¸¸ï¼ï¼å¿ é¡»æç §çï¼ä¸å¿ 须填å `abnormalDescription`ã 3. å¼å¸¸èå¨è§åï¼ - å¼å¸¸ä¿ååèªå¨çæ `device_repair` å¹¶åå¡« `deviceRepairId`ã 4. 宿¶ä»»å¡æ°å¢åæ®µï¼ - `inspectionProject`ï¼å·¡æ£é¡¹ç®ï¼ - `isEnabled`ï¼æ¯å¦å¯ç¨ï¼`0`å¦ / `1`æ¯ï¼ 5. 夿³¨å¸¦å ¥è§åï¼ - 宿¶ä»»å¡èªå¨çæå·¡æ£è®°å½æ¶ï¼è¥å®æ¶ä»»å¡ `remarks` æå¼ï¼ä¼æ¼æ¥å°å·¡æ£è®°å½å¤æ³¨ä¸ã ## 2. æ°æ®åºåæ´ èè°åæ§è¡ SQLï¼ - [doc/20260515_device_maintenance_inspection_abnormal_acceptance.sql](/D:/ç马/åé/å端/product-inventory-management-after-jdk25/doc/20260515_device_maintenance_inspection_abnormal_acceptance.sql) > 说æï¼è¯¥èæ¬å½åä½ç¨äº `inspection_task` ä¸ `timing_task` ä¸¤å¼ è¡¨ï¼æä»¶ååå²ä¿çæªæ¹ã ## 3. å·¡æ£ä»»å¡æ¥å£ ### 3.1 ä¿åæ¥å£ `POST /inspectionTask/addOrEditInspectionTask` | åæ®µ | ç±»å | å¿ å¡« | 说æ | |---|---|---|---| | id | long | å¦ | æå¼=ä¿®æ¹ï¼æ å¼=æ°å¢ | | taskId | int | å»ºè®®å¿ å¡« | 设å¤IDï¼ç¨äºå¼å¸¸èªå¨å»ºç»´ä¿®åï¼ | | taskName | string | å»ºè®®å¿ å¡« | 设å¤åç§° | | inspectionProject | string | å¦ | å·¡æ£é¡¹ç® | | inspectorId | string | å¦ | å·¡æ£äººIDï¼æ¯æéå·åé | | inspectionResult | string | æ¯ | `0`=å¼å¸¸ï¼`1`=æ£å¸¸ | | abnormalDescription | string | æ¡ä»¶å¿ å¡« | å¼å¸¸æ¶å¿ å¡« | | acceptanceUserId | long | å¦ | éªæ¶äººID | | acceptanceName | string | å¦ | éªæ¶äººå§å | | commonFileListDTO | array | æ¡ä»¶å¿ å¡« | éä»¶ç»1ï¼å¼å¸¸æ¶ä¸ç»è³å°ä¸ç»æå¾ï¼ | | commonFileListAfterDTO | array | æ¡ä»¶å¿ å¡« | éä»¶ç»2ï¼å¼å¸¸æ¶ä¸ç»è³å°ä¸ç»æå¾ï¼ | | commonFileListBeforeDTO | array | æ¡ä»¶å¿ å¡« | éä»¶ç»3ï¼å¼å¸¸æ¶ä¸ç»è³å°ä¸ç»æå¾ï¼ | å¼å¸¸ç¤ºä¾ï¼ ```json { "taskId": 1001, "taskName": "ç©ºåæºA-01", "inspectionProject": "润æ»ç³»ç»", "inspectorId": "12", "inspectionResult": "0", "abnormalDescription": "çµæºå¼åï¼æ¸©ååé«", "acceptanceUserId": 20, "commonFileListDTO": [ { "id": 90001, "application": "file" } ] } ``` æ£å¸¸ç¤ºä¾ï¼ ```json { "taskId": 1001, "taskName": "ç©ºåæºA-01", "inspectionProject": "ç¹æ£", "inspectorId": "12", "inspectionResult": "1", "acceptanceUserId": 20 } ``` ### 3.2 å表æ¥å£ `GET /inspectionTask/list` è¿åå 嫿°å¢åæ®µï¼ - `inspectionProject` - `inspectionResult` - `abnormalDescription` - `deviceRepairId` - `acceptanceUserId` - `acceptanceName` ## 4. 宿¶ä»»å¡æ¥å£ ### 4.1 ä¿åæ¥å£ `POST /timingTask/addOrEditTimingTask` æ°å¢/æ´æ°åæ®µï¼ | åæ®µ | ç±»å | å¿ å¡« | 说æ | |---|---|---|---| | inspectionProject | string | å¦ | å·¡æ£é¡¹ç® | | remarks | string | å¦ | 夿³¨ | | isEnabled | int | å¦ | `0`=ç¦ç¨ï¼`1`=å¯ç¨ï¼ä¸ä¼ é»è®¤å¯ç¨ | 示ä¾ï¼ ```json { "taskName": "ç©ºåæºA-01宿¶å·¡æ£", "inspectionProject": "æåº¦å·¡æ£", "taskId": 1001, "inspectorIds": "12,13", "frequencyType": "DAILY", "frequencyDetail": "09:00", "remarks": "éç¹æ£æ¥è½´æ¿æ¸©åº¦", "isEnabled": 1 } ``` ### 4.2 å¯ç¨ç¶æè¡ä¸º 1. `isEnabled=1`ï¼ä»»å¡è¿å ¥è°åº¦ï¼æé¢æ¬¡èªå¨çæå·¡æ£è®°å½ã 2. `isEnabled=0`ï¼ä»»å¡ä¸è°åº¦ï¼å·²åå¨è°åº¦ä¼è¢«ç§»é¤ã ### 4.3 夿³¨å¸¦å ¥è§å 宿¶ä»»å¡èªå¨çæå·¡æ£è®°å½æ¶ï¼ 1. å·¡æ£è®°å½å¤æ³¨åºå®åç¼ï¼`èªå¨çæèªå®æ¶ä»»å¡ID: {id}` 2. å½å®æ¶ä»»å¡ `remarks` é空æ¶ï¼æ¼æ¥ä¸ºï¼ `èªå¨çæèªå®æ¶ä»»å¡ID: {id}ï¼{remarks}` ## 5. å¼å¸¸èªå¨å»ºç»´ä¿®åè§å å½å·¡æ£è®°å½ `inspectionResult=0` æ¶ï¼ 1. è¥ `deviceRepairId` 为空ï¼å端èªå¨å建 `device_repair`ï¼ - `deviceLedgerId`ï¼æ¥èª `taskId` - `deviceName`ï¼ä¼å `taskName`ï¼å¦åå设å¤å°è´¦åç§° - `remark`ï¼å¼å¸¸æè¿° - `status`ï¼`0`ï¼å¾ ç»´ä¿®ï¼ 2. è¥å·²æå ³èç»´ä¿®åï¼ä» åæ¥æ´æ°ç»´ä¿®å `remark`ã ## 6. å端æ¹é 建议 1. å·¡æ£è¡¨åæ°å¢ `inspectionProject` è¾å ¥æ¡ã 2. å·¡æ£è¡¨åä¿çâæ£å¸¸/å¼å¸¸âè卿 ¡éªï¼ - å¼å¸¸æ¶å¼ºå¶å¼å¸¸æè¿° + è³å°ä¸ç»å¾çã 3. 宿¶ä»»å¡è¡¨åæ°å¢âæ¯å¦å¯ç¨âå¼å ³å¹¶æ å° `isEnabled`ã 4. 宿¶ä»»å¡è¡¨åæ°å¢ `inspectionProject` ä¸ `remarks` è¾å ¥é¡¹ã 5. å·¡æ£å表å±ç¤º `inspectionProject` å `deviceRepairId`ï¼æ¯æè·³è½¬ç»´ä¿®å详æ ï¼ã ## 7. èè°éªæ¶æ¸ å 1. å·¡æ£æ°å¢/ä¿®æ¹å¯æ£ç¡®æäº¤ `inspectionProject` å¹¶å¨åè¡¨åæ¾ã 2. å¼å¸¸å·¡æ£ï¼ææè¿°+æå¾ï¼ä¿åæåå¹¶åå¡« `deviceRepairId`ã 3. å¼å¸¸å·¡æ£ç¼ºæè¿°æç¼ºå¾çæ¶è¢«æ¦æªã 4. 宿¶ä»»å¡ `isEnabled=0` æ¶ä¸å触åèªå¨å·¡æ£è®°å½ã 5. 宿¶ä»»å¡ `isEnabled=1` æ¶æé¢æ¬¡çæå·¡æ£è®°å½ã 6. 宿¶ä»»å¡æ `remarks` æ¶ï¼èªå¨å·¡æ£è®°å½å¤æ³¨å¸¦ä¸è¯¥å 容ã src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
@@ -30,6 +30,10 @@ @Excel(name = "å·¡æ£ä»»å¡åç§°") private String taskName; @Schema(description = "å·¡æ£é¡¹ç®") @Excel(name = "å·¡æ£é¡¹ç®") private String inspectionProject; @Schema(description = "设å¤id") private Integer taskId; @@ -44,6 +48,22 @@ @Excel(name = "夿³¨") private String remarks; @Schema(description = "å·¡æ£ç»æ 0 å¼å¸¸ 1 æ£å¸¸") private String inspectionResult; @Schema(description = "å¼å¸¸æè¿°") private String abnormalDescription; @Schema(description = "å ³èç»´ä¿®åID") private Long deviceRepairId; @Schema(description = "éªæ¶äººID") private Long acceptanceUserId; @Schema(description = "éªæ¶äºº") @Excel(name = "éªæ¶äºº") private String acceptanceName; @Schema(description = "ä»»å¡ç»è®°äººID") private Long registrantId; src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -33,6 +33,10 @@ @Excel(name = "å·¡æ£ä»»å¡åç§°") private String taskName; @Schema(description = "å·¡æ£é¡¹ç®") @Excel(name = "å·¡æ£é¡¹ç®") private String inspectionProject; @Schema(description = "设å¤id") private Integer taskId; @@ -60,6 +64,10 @@ @Schema(description = "æ¯å¦æ¿æ´»") private boolean isActive; @Schema(description = "æ¯å¦å¯ç¨ 0å¦ 1æ¯") @Excel(name = "æ¯å¦å¯ç¨", readConverterExp = "0=å¦,1=æ¯") private Integer isEnabled; @Schema(description = "夿³¨") @Excel(name = "夿³¨") private String remarks; src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -5,12 +5,17 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.dto.StorageBlobDTO; import com.ruoyi.basic.enums.ApplicationTypeEnum; import com.ruoyi.basic.enums.RecordTypeEnum; import com.ruoyi.basic.utils.FileUtil; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.device.mapper.DeviceLedgerMapper; import com.ruoyi.device.mapper.DeviceRepairMapper; import com.ruoyi.device.pojo.DeviceLedger; import com.ruoyi.device.pojo.DeviceRepair; import com.ruoyi.inspectiontask.dto.InspectionTaskDto; import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper; import com.ruoyi.inspectiontask.pojo.InspectionTask; @@ -23,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -43,6 +49,14 @@ private final FileUtil fileUtil; private final DeviceRepairMapper deviceRepairMapper; private final DeviceLedgerMapper deviceLedgerMapper; private static final String INSPECTION_RESULT_ABNORMAL = "0"; private static final String INSPECTION_RESULT_NORMAL = "1"; private static final int REPAIR_STATUS_PENDING = 0; @Override public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) { LambdaQueryWrapper<InspectionTask> queryWrapper = new LambdaQueryWrapper<>(); @@ -50,14 +64,15 @@ if (StringUtils.isNotBlank(inspectionTaskDto.getTaskName())) { queryWrapper.like(InspectionTask::getTaskName, inspectionTaskDto.getTaskName()); } if (StringUtils.isNotBlank(inspectionTaskDto.getInspectionProject())) { queryWrapper.like(InspectionTask::getInspectionProject, inspectionTaskDto.getInspectionProject()); } IPage<InspectionTask> entityPage = inspectionTaskMapper.selectPage(page, queryWrapper); // æ æ°æ®æåè¿å if (CollectionUtils.isEmpty(entityPage.getRecords())) { return new Page<>(entityPage.getCurrent(), entityPage.getSize(), entityPage.getTotal()); } // è·åidéå List<Long> ids = entityPage.getRecords().stream().map(InspectionTask::getId).collect(Collectors.toList()); //ç»è®°äººids List<Long> registrantIds = entityPage.getRecords().stream().map(InspectionTask::getRegistrantId).collect(Collectors.toList()); // æ¹éæ¥è¯¢ç»è®°äºº @@ -68,9 +83,6 @@ } else { sysUserMap = new HashMap<>(); } //å·¡æ£äººids List<String> inspectorIds = entityPage.getRecords().stream().map(InspectionTask::getInspectorId).collect(Collectors.toList()); //è·åææä¸éå¤çç¨æ·ID Set<Long> allUserIds = entityPage.getRecords().stream() .map(InspectionTask::getInspectorId) // è·å"2,3"è¿æ ·çå符串 @@ -140,24 +152,230 @@ @Override @Transactional(rollbackFor = Exception.class) public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) { InspectionTask oldInspectionTask = null; if (Objects.nonNull(inspectionTaskDto.getId())) { oldInspectionTask = inspectionTaskMapper.selectById(inspectionTaskDto.getId()); if (oldInspectionTask == null) { throw new IllegalArgumentException("å·¡æ£ä»»å¡ä¸åå¨"); } } validateInspectionInput(inspectionTaskDto, oldInspectionTask); InspectionTask inspectionTask = new InspectionTask(); BeanUtils.copyProperties(inspectionTaskDto, inspectionTask); inspectionTask.setRegistrantId(SecurityUtils.getLoginUser().getUserId()); inspectionTask.setRegistrant(SecurityUtils.getLoginUser().getUsername()); fillAcceptanceInfo(inspectionTask, oldInspectionTask); int i; if (Objects.isNull(inspectionTaskDto.getId())) { i = inspectionTaskMapper.insert(inspectionTask); } else { i = inspectionTaskMapper.updateById(inspectionTask); } // ä¿åæä»¶ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId(), inspectionTaskDto.getCommonFileListDTO()); fileUtil.saveStorageAttachment(ApplicationTypeEnum.AFTER_FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId(), inspectionTaskDto.getCommonFileListAfterDTO()); fileUtil.saveStorageAttachment(ApplicationTypeEnum.BEFORE_FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId(), inspectionTaskDto.getCommonFileListBeforeDTO()); if (i <= 0) { return i; } Long linkedRepairId = syncRepairOrderIfAbnormal(inspectionTask, oldInspectionTask); if (linkedRepairId != null && !Objects.equals(linkedRepairId, inspectionTask.getDeviceRepairId())) { InspectionTask relationUpdate = new InspectionTask(); relationUpdate.setId(inspectionTask.getId()); relationUpdate.setDeviceRepairId(linkedRepairId); inspectionTaskMapper.updateById(relationUpdate); inspectionTask.setDeviceRepairId(linkedRepairId); } // ä¿åæä»¶ï¼å段ä¸ä¼ åä¿çåå²ï¼ saveInspectionAttachments(inspectionTask.getId(), inspectionTaskDto); return i; } private void validateInspectionInput(InspectionTaskDto inspectionTaskDto, InspectionTask oldInspectionTask) { String inspectionResult = inspectionTaskDto.getInspectionResult(); if (StringUtils.isBlank(inspectionResult) && oldInspectionTask != null) { inspectionResult = oldInspectionTask.getInspectionResult(); } if (StringUtils.isBlank(inspectionResult)) { throw new IllegalArgumentException("è¯·éæ©å·¡æ£ç»æ"); } if (!INSPECTION_RESULT_ABNORMAL.equals(inspectionResult) && !INSPECTION_RESULT_NORMAL.equals(inspectionResult)) { throw new IllegalArgumentException("å·¡æ£ç»æä» æ¯æï¼0-å¼å¸¸ï¼1-æ£å¸¸"); } inspectionTaskDto.setInspectionResult(inspectionResult); if (!INSPECTION_RESULT_ABNORMAL.equals(inspectionResult)) { return; } String abnormalDescription = inspectionTaskDto.getAbnormalDescription(); if (StringUtils.isBlank(abnormalDescription) && oldInspectionTask != null) { abnormalDescription = oldInspectionTask.getAbnormalDescription(); } if (StringUtils.isBlank(abnormalDescription)) { throw new IllegalArgumentException("å·¡æ£ç»æä¸ºå¼å¸¸æ¶ï¼å¼å¸¸æè¿°ä¸è½ä¸ºç©º"); } inspectionTaskDto.setAbnormalDescription(abnormalDescription); if (!hasAnyInspectionPhotoAfterSave(inspectionTaskDto, oldInspectionTask)) { throw new IllegalArgumentException("å·¡æ£ç»æä¸ºå¼å¸¸æ¶ï¼å¿ é¡»ä¸ä¼ è³å°ä¸å¼ ç §ç"); } } private boolean hasAnyInspectionPhotoAfterSave(InspectionTaskDto inspectionTaskDto, InspectionTask oldInspectionTask) { Long recordId = oldInspectionTask == null ? null : oldInspectionTask.getId(); return hasApplicationPhotoAfterSave(inspectionTaskDto.getCommonFileListDTO(), ApplicationTypeEnum.FILE, recordId) || hasApplicationPhotoAfterSave(inspectionTaskDto.getCommonFileListAfterDTO(), ApplicationTypeEnum.AFTER_FILE, recordId) || hasApplicationPhotoAfterSave(inspectionTaskDto.getCommonFileListBeforeDTO(), ApplicationTypeEnum.BEFORE_FILE, recordId); } private boolean hasApplicationPhotoAfterSave(List<StorageBlobDTO> requestPhotos, ApplicationTypeEnum applicationType, Long recordId) { if (requestPhotos != null) { return !requestPhotos.isEmpty(); } if (recordId == null) { return false; } return CollectionUtils.isNotEmpty(fileUtil.getStorageAttachmentsByApplicationAndRecordTypeAndRecordId(applicationType, RecordTypeEnum.INSPECTION_TASK, recordId)); } private void fillAcceptanceInfo(InspectionTask inspectionTask, InspectionTask oldInspectionTask) { Long acceptanceUserId = inspectionTask.getAcceptanceUserId(); if (acceptanceUserId == null && oldInspectionTask != null) { acceptanceUserId = oldInspectionTask.getAcceptanceUserId(); } if (acceptanceUserId != null) { inspectionTask.setAcceptanceUserId(acceptanceUserId); } String acceptanceName = inspectionTask.getAcceptanceName(); if (StringUtils.isBlank(acceptanceName) && acceptanceUserId != null) { SysUser acceptanceUser = sysUserMapper.selectUserById(acceptanceUserId); if (acceptanceUser != null) { acceptanceName = acceptanceUser.getNickName(); } } if (StringUtils.isBlank(acceptanceName) && oldInspectionTask != null) { acceptanceName = oldInspectionTask.getAcceptanceName(); } inspectionTask.setAcceptanceName(acceptanceName); } private Long syncRepairOrderIfAbnormal(InspectionTask inspectionTask, InspectionTask oldInspectionTask) { if (!INSPECTION_RESULT_ABNORMAL.equals(inspectionTask.getInspectionResult())) { return inspectionTask.getDeviceRepairId(); } Long linkedRepairId = inspectionTask.getDeviceRepairId(); if (linkedRepairId == null && oldInspectionTask != null) { linkedRepairId = oldInspectionTask.getDeviceRepairId(); } if (linkedRepairId != null) { DeviceRepair updateRepair = new DeviceRepair(); updateRepair.setId(linkedRepairId); updateRepair.setRemark(inspectionTask.getAbnormalDescription()); deviceRepairMapper.updateById(updateRepair); return linkedRepairId; } DeviceRepair deviceRepair = buildDeviceRepair(inspectionTask, oldInspectionTask); deviceRepairMapper.insert(deviceRepair); return deviceRepair.getId(); } private DeviceRepair buildDeviceRepair(InspectionTask inspectionTask, InspectionTask oldInspectionTask) { DeviceRepair deviceRepair = new DeviceRepair(); Long deviceLedgerId = resolveDeviceLedgerId(inspectionTask, oldInspectionTask); DeviceLedger deviceLedger = resolveDeviceLedger(deviceLedgerId); deviceRepair.setDeviceLedgerId(deviceLedgerId); deviceRepair.setDeviceName(resolveDeviceName(inspectionTask, oldInspectionTask, deviceLedger)); deviceRepair.setDeviceModel(deviceLedger == null ? null : deviceLedger.getDeviceModel()); deviceRepair.setRepairName(resolveRepairReporter(inspectionTask, oldInspectionTask)); deviceRepair.setRepairTime(new Date()); deviceRepair.setRemark(inspectionTask.getAbnormalDescription()); deviceRepair.setMachineryCategory(deviceLedger == null ? null : deviceLedger.getType()); deviceRepair.setStatus(REPAIR_STATUS_PENDING); return deviceRepair; } private Long resolveDeviceLedgerId(InspectionTask inspectionTask, InspectionTask oldInspectionTask) { Integer taskId = inspectionTask.getTaskId(); if (taskId == null && oldInspectionTask != null) { taskId = oldInspectionTask.getTaskId(); } if (taskId == null || taskId <= 0) { return null; } return taskId.longValue(); } private DeviceLedger resolveDeviceLedger(Long deviceLedgerId) { if (deviceLedgerId == null) { return null; } return deviceLedgerMapper.selectById(deviceLedgerId); } private String resolveDeviceName(InspectionTask inspectionTask, InspectionTask oldInspectionTask, DeviceLedger deviceLedger) { String taskName = inspectionTask.getTaskName(); if (StringUtils.isBlank(taskName) && oldInspectionTask != null) { taskName = oldInspectionTask.getTaskName(); } if (StringUtils.isNotBlank(taskName)) { return taskName; } return deviceLedger == null ? null : deviceLedger.getDeviceName(); } private String resolveRepairReporter(InspectionTask inspectionTask, InspectionTask oldInspectionTask) { String reporter = inspectionTask.getInspector(); if (StringUtils.isBlank(reporter) && oldInspectionTask != null) { reporter = oldInspectionTask.getInspector(); } if (StringUtils.isNotBlank(reporter)) { return reporter; } String inspectorNameByUserId = resolveInspectorNameByUserId(inspectionTask.getInspectorId()); if (StringUtils.isBlank(inspectorNameByUserId) && oldInspectionTask != null) { inspectorNameByUserId = resolveInspectorNameByUserId(oldInspectionTask.getInspectorId()); } if (StringUtils.isNotBlank(inspectorNameByUserId)) { return inspectorNameByUserId; } try { return SecurityUtils.getUsername(); } catch (Exception ignored) { return "system"; } } private String resolveInspectorNameByUserId(String inspectorIds) { if (StringUtils.isBlank(inspectorIds)) { return null; } String firstInspectorId = Arrays.stream(inspectorIds.split(",")) .map(String::trim) .filter(StringUtils::isNotBlank) .findFirst() .orElse(null); if (!StringUtils.isNumeric(firstInspectorId)) { return null; } SysUser sysUser = sysUserMapper.selectUserById(Long.parseLong(firstInspectorId)); return sysUser == null ? null : sysUser.getNickName(); } private void saveInspectionAttachments(Long inspectionTaskId, InspectionTaskDto inspectionTaskDto) { saveAttachmentIfPresent(inspectionTaskId, ApplicationTypeEnum.FILE, inspectionTaskDto.getCommonFileListDTO()); saveAttachmentIfPresent(inspectionTaskId, ApplicationTypeEnum.AFTER_FILE, inspectionTaskDto.getCommonFileListAfterDTO()); saveAttachmentIfPresent(inspectionTaskId, ApplicationTypeEnum.BEFORE_FILE, inspectionTaskDto.getCommonFileListBeforeDTO()); } private void saveAttachmentIfPresent(Long inspectionTaskId, ApplicationTypeEnum applicationTypeEnum, List<StorageBlobDTO> storageBlobDTOS) { if (storageBlobDTOS == null) { return; } fileUtil.saveStorageAttachment(applicationTypeEnum, RecordTypeEnum.INSPECTION_TASK, inspectionTaskId, storageBlobDTOS); } @Override @Transactional(rollbackFor = Exception.class) public int delByIds(Long[] ids) { src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -3,7 +3,7 @@ import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper; import com.ruoyi.inspectiontask.pojo.InspectionTask; import com.ruoyi.inspectiontask.pojo.TimingTask; import lombok.RequiredArgsConstructor; import com.ruoyi.common.utils.StringUtils; import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; @@ -47,6 +47,9 @@ TimingTask timingTask = tasks.isEmpty() ? null : tasks.get(0); if (timingTask == null) { throw new JobExecutionException("æ¾ä¸å°å®æ¶ä»»å¡: " + taskId); } if (timingTask.getIsEnabled() != null && timingTask.getIsEnabled() == 0) { return; } // if (!timingTask.isActive()) { @@ -100,10 +103,15 @@ // å¤å¶åºæ¬å±æ§ inspectionTask.setTaskName(timingTask.getTaskName()); inspectionTask.setInspectionProject(timingTask.getInspectionProject()); inspectionTask.setTaskId(timingTask.getTaskId()); inspectionTask.setInspectorId(timingTask.getInspectorIds()); inspectionTask.setInspectionLocation(timingTask.getInspectionLocation()); inspectionTask.setRemarks("èªå¨çæèªå®æ¶ä»»å¡ID: " + timingTask.getId()); String remarks = "èªå¨çæèªå®æ¶ä»»å¡ID: " + timingTask.getId(); if (StringUtils.isNotBlank(timingTask.getRemarks())) { remarks = remarks + "ï¼" + timingTask.getRemarks(); } inspectionTask.setRemarks(remarks); inspectionTask.setRegistrantId(timingTask.getRegistrantId()); inspectionTask.setFrequencyType(timingTask.getFrequencyType()); inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail()); src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -35,6 +35,8 @@ private final TimingTaskMapper timingTaskMapper; private final TimingTaskScheduler timingTaskScheduler; private final SysUserMapper sysUserMapper; private static final int ENABLED = 1; private static final int DISABLED = 0; @Override @@ -44,6 +46,12 @@ LambdaQueryWrapper<TimingTask> queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(timingTask.getTaskName())) { queryWrapper.like(TimingTask::getTaskName, timingTask.getTaskName()); } if (StringUtils.isNotBlank(timingTask.getInspectionProject())) { queryWrapper.like(TimingTask::getInspectionProject, timingTask.getInspectionProject()); } if (timingTask.getIsEnabled() != null) { queryWrapper.eq(TimingTask::getIsEnabled, timingTask.getIsEnabled()); } IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, queryWrapper); @@ -115,8 +123,17 @@ @Override @Transactional public int addOrEditTimingTask(TimingTaskDto timingTaskDto) throws SchedulerException { TimingTask oldTimingTask = null; if (Objects.nonNull(timingTaskDto.getId())) { oldTimingTask = timingTaskMapper.selectById(timingTaskDto.getId()); if (oldTimingTask == null) { throw new IllegalArgumentException("宿¶ä»»å¡ä¸åå¨"); } } TimingTask timingTask = new TimingTask(); BeanUtils.copyProperties(timingTaskDto, timingTask); timingTask.setIsEnabled(resolveEnabledValue(timingTask.getIsEnabled(), oldTimingTask)); timingTask.setActive(ENABLED == timingTask.getIsEnabled()); // 1. è§£æå符串为 LocalDateï¼åªå å«å¹´ææ¥ï¼ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate localDate = LocalDate.now(); @@ -132,13 +149,12 @@ // 设置å建人信æ¯åé»è®¤å¼ if (Objects.isNull(timingTaskDto.getId())) { timingTask.setRegistrationDate(LocalDate.now()); timingTask.setActive(true); // 计ç®é¦æ¬¡æ§è¡æ¶é´ LocalDateTime firstExecutionTime = calculateFirstExecutionTime(timingTask); timingTask.setNextExecutionTime(firstExecutionTime); int result = timingTaskMapper.insert(timingTask); if (result > 0) { if (result > 0 && isEnabled(timingTask.getIsEnabled(), timingTask.isActive())) { // æ°å¢æååæ·»å å°è°åº¦å¨ timingTaskScheduler.scheduleTimingTask(timingTask); } @@ -148,8 +164,17 @@ int result = timingTaskMapper.updateById(timingTask); if (result > 0) { // æ´æ°æååéæ°è°åº¦ä»»å¡ timingTaskScheduler.rescheduleTimingTask(timingTask); boolean oldEnabled = isEnabled(oldTimingTask == null ? null : oldTimingTask.getIsEnabled(), oldTimingTask != null && oldTimingTask.isActive()); boolean newEnabled = isEnabled(timingTask.getIsEnabled(), timingTask.isActive()); if (!newEnabled) { timingTaskScheduler.unscheduleTimingTask(timingTask.getId()); } else if (oldEnabled) { // æ´æ°æååéæ°è°åº¦ä»»å¡ timingTaskScheduler.rescheduleTimingTask(timingTask); } else { // ä»ç¦ç¨æ¹ä¸ºå¯ç¨æ¶éæ°å建è°åº¦ä»»å¡ timingTaskScheduler.scheduleTimingTask(timingTask); } } return result; } @@ -451,6 +476,26 @@ return days; } private Integer resolveEnabledValue(Integer requestEnabled, TimingTask oldTimingTask) { if (requestEnabled != null) { return requestEnabled; } if (oldTimingTask != null) { if (oldTimingTask.getIsEnabled() != null) { return oldTimingTask.getIsEnabled(); } return oldTimingTask.isActive() ? ENABLED : DISABLED; } return ENABLED; } private boolean isEnabled(Integer enabledValue, boolean activeFallback) { if (enabledValue != null) { return ENABLED == enabledValue; } return activeFallback; } @Override