From 1704e30de33833817a5fce4c4ab0b94ac8ce1cc6 Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期一, 31 八月 2026 17:32:31 +0800
Subject: [PATCH] fix: 修复多处表单验证与数据流转的缺陷,优化系统消息推送逻辑

---
 src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 58 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
index fbf03ad..3f0db85 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -13,6 +13,12 @@
 import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import com.ruoyi.device.service.IDeviceMaintenanceService;
+import com.ruoyi.project.system.service.ISysNoticeService;
+import com.ruoyi.project.system.service.impl.UnipushService;
+import com.ruoyi.project.system.domain.SysNotice;
+import java.util.Collections;
+import com.ruoyi.common.utils.SecurityUtils;
+import lombok.extern.slf4j.Slf4j;
 import com.ruoyi.device.vo.DeviceMaintenanceVo;
 import com.ruoyi.device.vo.DeviceRepairVo;
 import com.ruoyi.framework.web.domain.AjaxResult;
@@ -21,7 +27,11 @@
 import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
 import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService;
 import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
+import com.ruoyi.device.service.IDeviceRepairSparePartService;
+import com.ruoyi.device.pojo.DeviceRepairSparePart;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -33,12 +43,16 @@
 
 @Service
 @RequiredArgsConstructor
+@Slf4j
 public class DeviceMaintenanceServiceImpl extends ServiceImpl<DeviceMaintenanceMapper, DeviceMaintenance> implements IDeviceMaintenanceService {
 
     private final DeviceMaintenanceMapper deviceMaintenanceMapper;
     private final SparePartsMapper sparePartsMapper;
     private final SparePartsRequisitionRecordService sparePartsRequisitionRecordService;
+    private final IDeviceRepairSparePartService deviceRepairSparePartService;
     private final FileUtil fileUtil;
+    private final ISysNoticeService sysNoticeService;
+    private final UnipushService unipushService;
 
     @Override
     public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) {
@@ -53,6 +67,34 @@
         if (save){
             // 澶勭悊鍥剧墖涓婁紶
             fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("file", RecordTypeEnum.DEVICE_MAINTENANCE, deviceMaintenance.getId(), deviceMaintenance.getStorageBlobDTOs());
+            
+            // 鎺ㄩ�佺郴缁熸秷鎭粰鎵ц浜�
+            if (deviceMaintenance.getExecutorId() != null) {
+                SysNotice notice = new SysNotice();
+                notice.setNoticeTitle("鏂颁繚鍏昏鍒掓彁閱�");
+                notice.setNoticeType("1"); // 1 閫氱煡
+                String dateStr = deviceMaintenance.getMaintenancePlanTime() != null ? 
+                        deviceMaintenance.getMaintenancePlanTime().toLocalDate().toString() : 
+                        java.time.LocalDate.now().toString();
+                notice.setNoticeContent("浣犳湁涓�涓柊鐨勮澶囦繚鍏昏鍒� 锛�" + dateStr + " " + deviceMaintenance.getDeviceName());
+                notice.setStatus("0"); // 姝e父
+                notice.setConsigneeId(deviceMaintenance.getExecutorId());
+                try {
+                    Long currentUserId = SecurityUtils.getLoginUser().getUserId();
+                    notice.setSenderId(currentUserId);
+                } catch (Exception e) {
+                    notice.setSenderId(0L); // 鍏滃簳
+                }
+                notice.setTenantId(deviceMaintenance.getTenantId());
+                sysNoticeService.insertNotice(notice);
+                
+                try {
+                    unipushService.sendClientMessage(Collections.singletonList(notice));
+                } catch (Exception e) {
+                    log.error("鎺ㄩ�佹柊淇濆吇璁″垝绯荤粺娑堟伅澶辫触", e);
+                }
+            }
+            
             return AjaxResult.success();
         }
         return AjaxResult.error();
@@ -62,6 +104,12 @@
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenanceDto deviceMaintenance) {
         DeviceMaintenance oldDeviceMaintenance = this.getById(deviceMaintenance.getId());
+        
+        // 娓呯悊鏃х殑澶囦欢浣跨敤璁板綍锛岄槻姝㈤噸澶嶇疮璁�
+        deviceRepairSparePartService.remove(new QueryWrapper<DeviceRepairSparePart>()
+                .eq("source_id", deviceMaintenance.getId())
+                .eq("source_type", 2));
+
         // 澶勭悊澶囦欢浣跨敤鎯呭喌
         if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceMaintenance.getSparePartsUseList())) {
             List<Long> sparePartIds = new ArrayList<>();
@@ -84,6 +132,14 @@
                         record.setSparePartsId(sparePartUse.getId());
                         record.setQuantity(sparePartUse.getQuantity());
                         sparePartsRequisitionRecordService.save(record);
+
+                        // 鎻掑叆璁板綍鍒� device_repair_spare_part
+                        DeviceRepairSparePart partRecord = new DeviceRepairSparePart();
+                        partRecord.setSourceId(deviceMaintenance.getId());
+                        partRecord.setSourceType(2); // 2 淇濆吇
+                        partRecord.setSparePartId(sparePartUse.getId());
+                        partRecord.setQuantity(sparePartUse.getQuantity());
+                        deviceRepairSparePartService.save(partRecord);
                     } else {
                         return AjaxResult.error("澶囦欢 " + spareParts.getName() + " 鏁伴噺涓嶈冻");
                     }
@@ -122,6 +178,8 @@
     public DeviceMaintenanceVo detailById(Long id) {
         DeviceMaintenanceVo vo = deviceMaintenanceMapper.detailById(id);
         vo.setStorageBlobVOs(fileUtil.getStorageBlobVOsByRecordTypeAndRecordId(RecordTypeEnum.DEVICE_MAINTENANCE, id));
+        List<DeviceRepairSparePart> parts = deviceRepairSparePartService.getListWithPartName(id, 2);
+        vo.setSparePartsUseListDetails(parts);
         return vo;
     }
 }

--
Gitblit v1.9.3