From bb1d7eeda426e66393cf4403cb3ef082db696bd9 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 07 八月 2026 15:42:19 +0800
Subject: [PATCH] feat(report): 新增会计报表功能并完善设备维护和首页统计

---
 src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 93 insertions(+), 8 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 779714f..e426bfe 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -1,13 +1,16 @@
 package com.ruoyi.device.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.DeviceMaintenanceBatchCompleteDto;
 import com.ruoyi.device.dto.DeviceMaintenanceDto;
 import com.ruoyi.device.execl.DeviceMaintenanceExeclDto;
 import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
@@ -15,7 +18,7 @@
 import com.ruoyi.device.service.IDeviceMaintenanceService;
 import com.ruoyi.device.vo.DeviceMaintenanceVo;
 import com.ruoyi.device.vo.DeviceRepairVo;
-import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
 import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
 import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
@@ -27,6 +30,9 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -48,19 +54,19 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R<?> saveDeviceRepair(DeviceMaintenanceDto deviceMaintenance) {
+    public AjaxResult saveDeviceRepair(DeviceMaintenanceDto deviceMaintenance) {
         boolean save = this.save(deviceMaintenance);
         if (save){
             // 澶勭悊鍥剧墖涓婁紶
             fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("file", RecordTypeEnum.DEVICE_MAINTENANCE, deviceMaintenance.getId(), deviceMaintenance.getStorageBlobDTOs());
-            return R.ok();
+            return AjaxResult.success();
         }
-        return R.fail();
+        return AjaxResult.error();
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R<?> updateDeviceDeviceMaintenance(DeviceMaintenanceDto deviceMaintenance) {
+    public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenanceDto deviceMaintenance) {
         DeviceMaintenance oldDeviceMaintenance = this.getById(deviceMaintenance.getId());
         // 澶勭悊澶囦欢浣跨敤鎯呭喌
         if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceMaintenance.getSparePartsUseList())) {
@@ -85,7 +91,7 @@
                         record.setQuantity(sparePartUse.getQuantity());
                         sparePartsRequisitionRecordService.save(record);
                     } else {
-                        return R.fail("澶囦欢 " + spareParts.getName() + " 鏁伴噺涓嶈冻");
+                        return AjaxResult.error("澶囦欢 " + spareParts.getName() + " 鏁伴噺涓嶈冻");
                     }
                 }
             }
@@ -95,12 +101,91 @@
             }
         }
 
+        // 鑻ヨ缃簡瀹為檯淇濆吇鏃ユ湡锛屽垯鑷姩鏍囪涓哄畬缁�
+        if (deviceMaintenance.getMaintenanceActuallyTime() != null && deviceMaintenance.getStatus() == null) {
+            deviceMaintenance.setStatus(1);
+        }
+
         if (this.updateById(deviceMaintenance)) {
             // 澶勭悊鍥剧墖涓婁紶
             fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("file", RecordTypeEnum.DEVICE_MAINTENANCE, deviceMaintenance.getId(), deviceMaintenance.getStorageBlobDTOs());
-            return R.ok();
+            return AjaxResult.success();
         }
-        return R.fail();
+        return AjaxResult.error();
+    }
+
+    @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() + " 鏉′繚鍏昏褰�");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult batchComplete(DeviceMaintenanceBatchCompleteDto dto) {
+        if (dto.getMaintenancePlanDate() == null) {
+            return AjaxResult.error("璁″垝淇濆吇鏃ユ湡涓嶈兘涓虹┖");
+        }
+        LambdaQueryWrapper<DeviceMaintenance> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DeviceMaintenance::getStatus, 0)
+               .apply("DATE(maintenance_plan_time) = {0}", dto.getMaintenancePlanDate().toString());
+        List<DeviceMaintenance> list = this.list(wrapper);
+        if (list.isEmpty()) {
+            return AjaxResult.success("璇ユ棩鏈熶笅娌℃湁寰呬繚鍏荤殑璁板綍");
+        }
+        list.forEach(task -> {
+            task.setStatus(1);
+            if (StringUtils.isNotBlank(dto.getMaintenanceActuallyName())) {
+                task.setMaintenanceActuallyName(dto.getMaintenanceActuallyName());
+            }
+            if (dto.getMaintenanceActuallyTime() != null) {
+                task.setMaintenanceActuallyTime(dto.getMaintenanceActuallyTime());
+            }
+            if (StringUtils.isNotBlank(dto.getMaintenanceResult())) {
+                task.setMaintenanceResult(dto.getMaintenanceResult());
+            }
+        });
+        this.updateBatchById(list);
+        return AjaxResult.success("鍏卞畬鎴� " + list.size() + " 鏉′繚鍏昏褰�");
     }
 
     @Override

--
Gitblit v1.9.3