From f0efc10af370936b4db47b8428eb1ca4686431f9 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 06 八月 2026 15:11:56 +0800
Subject: [PATCH] feat(home): 添加报表日期范围筛选功能并完善设备维护管理

---
 src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java |  136 ++++++++++++++++++++++++++++++++++++++------
 1 files changed, 116 insertions(+), 20 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 9c92254..29b9c3a 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -4,6 +4,9 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.utils.FileUtil;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.device.dto.DeviceMaintenanceDto;
@@ -11,23 +14,35 @@
 import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import com.ruoyi.device.service.IDeviceMaintenanceService;
+import com.ruoyi.device.vo.DeviceMaintenanceVo;
+import com.ruoyi.device.vo.DeviceRepairVo;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
+import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
+import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
+import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 
 @Service
+@RequiredArgsConstructor
 public class DeviceMaintenanceServiceImpl extends ServiceImpl<DeviceMaintenanceMapper, DeviceMaintenance> implements IDeviceMaintenanceService {
 
-
-
-    @Autowired
-    private DeviceMaintenanceMapper deviceMaintenanceMapper;
+    private final DeviceMaintenanceMapper deviceMaintenanceMapper;
+    private final SparePartsMapper sparePartsMapper;
+    private final SparePartsRequisitionRecordService sparePartsRequisitionRecordService;
+    private final FileUtil fileUtil;
 
     @Override
     public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) {
@@ -36,17 +51,57 @@
     }
 
     @Override
-    public AjaxResult saveDeviceRepair(DeviceMaintenance deviceMaintenance) {
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult saveDeviceRepair(DeviceMaintenanceDto deviceMaintenance) {
         boolean save = this.save(deviceMaintenance);
         if (save){
+            // 澶勭悊鍥剧墖涓婁紶
+            fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("file", RecordTypeEnum.DEVICE_MAINTENANCE, deviceMaintenance.getId(), deviceMaintenance.getStorageBlobDTOs());
             return AjaxResult.success();
         }
         return AjaxResult.error();
     }
 
     @Override
-    public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenance deviceMaintenance) {
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenanceDto deviceMaintenance) {
+        DeviceMaintenance oldDeviceMaintenance = this.getById(deviceMaintenance.getId());
+        // 澶勭悊澶囦欢浣跨敤鎯呭喌
+        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceMaintenance.getSparePartsUseList())) {
+            List<Long> sparePartIds = new ArrayList<>();
+            for (DeviceMaintenance.SparePartUse sparePartUse : deviceMaintenance.getSparePartsUseList()) {
+                // 鑾峰彇澶囦欢淇℃伅
+                SpareParts spareParts = sparePartsMapper.selectById(sparePartUse.getId());
+                if (spareParts != null) {
+                    // 妫�鏌ユ暟閲忔槸鍚﹁冻澶�
+                    if (spareParts.getQuantity().compareTo(new BigDecimal(sparePartUse.getQuantity())) >= 0) {
+                        // 鏇存柊鏁伴噺
+                        spareParts.setQuantity(spareParts.getQuantity().subtract(new BigDecimal(sparePartUse.getQuantity())));
+                        sparePartsMapper.updateById(spareParts);
+                        sparePartIds.add(sparePartUse.getId());
+
+                        // 鍒涘缓澶囦欢棰嗙敤璁板綍
+                        SparePartsRequisitionRecord record = new SparePartsRequisitionRecord();
+                        record.setSourceType(1); // 1 淇濆吇
+                        record.setSourceId(deviceMaintenance.getId());
+                        record.setDeviceLedgerId(oldDeviceMaintenance.getDeviceLedgerId());
+                        record.setSparePartsId(sparePartUse.getId());
+                        record.setQuantity(sparePartUse.getQuantity());
+                        sparePartsRequisitionRecordService.save(record);
+                    } else {
+                        return AjaxResult.error("澶囦欢 " + spareParts.getName() + " 鏁伴噺涓嶈冻");
+                    }
+                }
+            }
+            // 鏇存柊澶囦欢IDs瀛楁
+            if (!sparePartIds.isEmpty()) {
+                deviceMaintenance.setSparePartsIds(StringUtils.join(sparePartIds, ","));
+            }
+        }
+
         if (this.updateById(deviceMaintenance)) {
+            // 澶勭悊鍥剧墖涓婁紶
+            fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("file", RecordTypeEnum.DEVICE_MAINTENANCE, deviceMaintenance.getId(), deviceMaintenance.getStorageBlobDTOs());
             return AjaxResult.success();
         }
         return AjaxResult.error();
@@ -54,18 +109,13 @@
 
     @Override
     public void export(HttpServletResponse response, Long[] ids) {
-        ArrayList<Long> arrayList = new ArrayList<>();
-        Arrays.stream(ids).map(id -> {
-            return arrayList.add( id);
-        });
-        List<DeviceMaintenance> supplierManageList = deviceMaintenanceMapper.selectBatchIds(arrayList);
+        List<DeviceMaintenance> supplierManageList = deviceMaintenanceMapper.selectList(null);
         ArrayList<DeviceMaintenanceExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
-        supplierManageList.stream().forEach(deviceMaintenance -> {
+        supplierManageList.forEach(deviceMaintenance -> {
             DeviceMaintenanceExeclDto deviceRepairExeclDto = new DeviceMaintenanceExeclDto();
             BeanUtils.copyProperties(deviceMaintenance,deviceRepairExeclDto);
-            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "寰呯淮淇�" : "瀹岀粨");
-            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() == 0 ? "缁翠慨" : "瀹屽ソ");
-
+            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "寰呯淮淇�" : deviceMaintenance.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
+//            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "缁翠慨" : "瀹屽ソ");
             deviceLedgerExeclDtos.add(deviceRepairExeclDto);
         });
         ExcelUtil<DeviceMaintenanceExeclDto> util = new ExcelUtil<DeviceMaintenanceExeclDto>(DeviceMaintenanceExeclDto.class);
@@ -73,8 +123,54 @@
     }
 
     @Override
-    public DeviceMaintenanceDto detailById(Long id) {
+    public DeviceMaintenanceVo detailById(Long id) {
+        DeviceMaintenanceVo vo = deviceMaintenanceMapper.detailById(id);
+        vo.setStorageBlobVOs(fileUtil.getStorageBlobVOsByRecordTypeAndRecordId(RecordTypeEnum.DEVICE_MAINTENANCE, id));
+        return vo;
+    }
 
-        return deviceMaintenanceMapper.detailById(id);
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult complete(Long id) {
+        DeviceMaintenance record = this.getById(id);
+        if (record == null) {
+            return AjaxResult.error("淇濆吇璁板綍涓嶅瓨鍦�");
+        }
+        if (record.getStatus() != null && record.getStatus() == 1) {
+            return AjaxResult.error("璇ヤ繚鍏昏褰曞凡瀹屾垚");
+        }
+        record.setStatus(1);
+        record.setMaintenanceActuallyName(SecurityUtils.getLoginUser().getNickName());
+        record.setMaintenanceActuallyTime(LocalDateTime.now());
+        this.updateById(record);
+        return AjaxResult.success();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult batchComplete(String dateStr) {
+        if (StringUtils.isBlank(dateStr)) {
+            return AjaxResult.error("鏃ユ湡鍙傛暟涓嶈兘涓虹┖");
+        }
+        LocalDate date = LocalDate.parse(dateStr);
+        LocalDateTime startOfDay = date.atStartOfDay();
+        LocalDateTime endOfDay = date.atTime(LocalTime.MAX);
+        List<DeviceMaintenance> records = this.lambdaQuery()
+                .eq(DeviceMaintenance::getStatus, 0)
+                .ge(DeviceMaintenance::getCreateTime, startOfDay)
+                .le(DeviceMaintenance::getCreateTime, endOfDay)
+                .list();
+        if (records.isEmpty()) {
+            return AjaxResult.error("璇ユ棩鏈熶笅娌℃湁寰呭畬鎴愮殑淇濆吇璁板綍");
+        }
+        String nickName = SecurityUtils.getLoginUser().getNickName();
+        LocalDateTime now = LocalDateTime.now();
+        for (DeviceMaintenance record : records) {
+            record.setStatus(1);
+            record.setMaintenanceActuallyName(nickName);
+            record.setMaintenanceActuallyTime(now);
+        }
+        this.updateBatchById(records);
+        return AjaxResult.success("宸插畬鎴� " + records.size() + " 鏉′繚鍏昏褰�");
     }
 }

--
Gitblit v1.9.3