From 0f8f4c5de1d817aa87c4c79e966d3cfbd0997aeb Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 23 七月 2025 16:55:56 +0800
Subject: [PATCH] 1.设备领用添加记录 2.采购添加运费

---
 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java |  191 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 135 insertions(+), 56 deletions(-)

diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java
index fde6bd6..13c1d08 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java
@@ -8,8 +8,10 @@
 import com.ruoyi.business.dto.EquipmentManagementDto;
 import com.ruoyi.business.dto.EquipmentUsageRecordDto;
 import com.ruoyi.business.entity.EquipmentManagement;
+import com.ruoyi.business.entity.EquipmentUsageDetail;
 import com.ruoyi.business.entity.EquipmentUsageRecord;
 import com.ruoyi.business.mapper.EquipmentManagementMapper;
+import com.ruoyi.business.mapper.EquipmentUsageDetailMapper;
 import com.ruoyi.business.mapper.EquipmentUsageRecordMapper;
 import com.ruoyi.business.service.EquipmentUsageRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -43,6 +45,8 @@
     private final EquipmentUsageRecordMapper equipmentUsageRecordMapper;
 
     private final EquipmentManagementMapper equipmentManagementMapper;
+
+    private final EquipmentUsageDetailMapper equipmentUsageDetailMapper;
 
     private final SysUserMapper sysUserMapper;
 
@@ -83,6 +87,15 @@
             if (sysUser != null) {
                 dto.setUserName(sysUser.getNickName());
             }
+            int totalReturnNo = equipmentUsageDetailMapper.selectList(
+                            new LambdaQueryWrapper<EquipmentUsageDetail>()
+                                    .eq(EquipmentUsageDetail::getUsageId, entity.getId())
+                                    .eq(EquipmentUsageDetail::getOperationType,2))
+                    .stream()
+                    .mapToInt(EquipmentUsageDetail::getQuantity)
+                    .sum();
+
+            dto.setTotalReturnNo(totalReturnNo);
             return dto;
         }).toList();
         dtoPage.setRecords(dtoRecords);
@@ -97,13 +110,10 @@
             throw new IllegalArgumentException("璁惧浣跨敤璁板綍鍙傛暟涓嶈兘涓虹┖");
         }
 
-        // 澶嶅埗灞炴�у埌瀹炰綋瀵硅薄
-        EquipmentUsageRecord equipmentUsageRecord = new EquipmentUsageRecord();
-        BeanUtils.copyProperties(equipmentUsageRecordDto, equipmentUsageRecord);
-
-        // 鑾峰彇璁惧ID鍜岄鐢ㄦ暟閲�
+        // 鑾峰彇璁惧ID鍜屾搷浣滄暟閲�
         Long equipmentId = equipmentUsageRecordDto.getEquipmentId();
-        Integer newUsageQuantity = equipmentUsageRecordDto.getUsageQuantity();
+        Long userId = equipmentUsageRecordDto.getUserId();
+        String username = sysUserMapper.selectUserById(userId).getNickName();
 
         // 鏌ヨ璁惧淇℃伅
         EquipmentManagement equipment = equipmentManagementMapper.selectById(equipmentId);
@@ -111,20 +121,10 @@
             throw new RuntimeException("璁惧涓嶅瓨鍦�");
         }
 
+        int result;
         // 鏂板璁板綍閫昏緫
         if (Objects.isNull(equipmentUsageRecordDto.getId())) {
-            // 妫�鏌ュ簱瀛樻槸鍚﹀厖瓒�
-            if (equipment.getQuantity() < newUsageQuantity) {
-                throw new RuntimeException("搴撳瓨涓嶈冻锛屽綋鍓嶅簱瀛橈細" + equipment.getQuantity());
-            }
-
-            // 鎵e噺搴撳瓨
-            equipment.setQuantity(equipment.getQuantity() - newUsageQuantity);
-            equipmentManagementMapper.updateById(equipment);
-
-            // 璁剧疆浣跨敤寮�濮嬫椂闂翠负褰撳墠鏃堕棿
-            equipmentUsageRecord.setUsageStartTime(LocalDate.now());
-            return equipmentUsageRecordMapper.insert(equipmentUsageRecord);
+            result = handleNewUsage(equipmentUsageRecordDto, equipment, userId, username);
         } else {
             // 缂栬緫璁板綍閫昏緫
             EquipmentUsageRecord originalRecord = equipmentUsageRecordMapper.selectById(equipmentUsageRecordDto.getId());
@@ -134,45 +134,124 @@
 
             // 澶勭悊褰掕繕閫昏緫
             if (equipmentUsageRecordDto.getEquipmentStatus() == 2) {
-                // 妫�鏌ュ綊杩樻暟閲忔槸鍚﹀悎娉�
-                if (newUsageQuantity > originalRecord.getUsageQuantity()) {
-                    throw new RuntimeException("褰掕繕鏁伴噺涓嶈兘瓒呰繃鍘熼鐢ㄦ暟閲�");
-                }
-
-                // 璁$畻瀹為檯褰掕繕鏁伴噺锛堝師棰嗙敤鏁伴噺 - 鏂伴鐢ㄦ暟閲忥級
-                int returnedQuantity = originalRecord.getUsageQuantity() - newUsageQuantity;
-
-                // 鎭㈠閮ㄥ垎搴撳瓨
-                equipment.setQuantity(equipment.getQuantity() + returnedQuantity);
-                equipmentManagementMapper.updateById(equipment);
-
-                // 濡傛灉鍏ㄩ儴褰掕繕锛岃缃綊杩樻椂闂�
-                if (newUsageQuantity == 0) {
-                    equipmentUsageRecord.setUsageEndTime(LocalDate.now());
-                }
-                return equipmentUsageRecordMapper.updateById(equipmentUsageRecord);
+                result = handleReturnOperation(equipmentUsageRecordDto, equipment, originalRecord, userId, username);
+            } else {
+                // 澶勭悊鏅�氱紪杈戦�昏緫锛堥潪褰掕繕鐘舵�侊級
+                result = handleEditOperation(equipmentUsageRecordDto, equipment, originalRecord, userId, username);
             }
-
-            // 澶勭悊鏅�氱紪杈戦�昏緫锛堥潪褰掕繕鐘舵�侊級
-            if (!newUsageQuantity.equals(originalRecord.getUsageQuantity())) {
-                // 璁$畻搴撳瓨鍙樺寲閲忥紙鏃ф暟閲� - 鏂版暟閲忥級
-                int quantityDelta = originalRecord.getUsageQuantity() - newUsageQuantity;
-
-                // 妫�鏌ヨ皟鏁村悗搴撳瓨鏄惁鍏呰冻
-                int newInventory = equipment.getQuantity() + quantityDelta;
-                if (newInventory < 0) {
-                    throw new RuntimeException("搴撳瓨涓嶈冻锛岃皟鏁村悗搴撳瓨灏嗕负锛�" + newInventory);
-                }
-
-                // 璋冩暣搴撳瓨
-                equipment.setQuantity(newInventory);
-                if (equipmentManagementMapper.updateById(equipment) == 0) {
-                    throw new RuntimeException("搴撳瓨鏇存柊澶辫触锛屽彲鑳藉凡琚叾浠栨搷浣滀慨鏀�");
-                }
-            }
-
-            // 鏇存柊棰嗙敤璁板綍
-            return equipmentUsageRecordMapper.updateById(equipmentUsageRecord);
         }
+        return result;
+    }
+
+    private int handleNewUsage(EquipmentUsageRecordDto dto, EquipmentManagement equipment, Long userId, String username) {
+        // 妫�鏌ュ簱瀛�
+        if (equipment.getQuantity() < dto.getUsageQuantity()) {
+            throw new RuntimeException("搴撳瓨涓嶈冻锛屽綋鍓嶅簱瀛橈細" + equipment.getQuantity());
+        }
+
+        // 鍒涘缓涓昏褰�
+        EquipmentUsageRecord record = new EquipmentUsageRecord();
+        BeanUtils.copyProperties(dto, record);
+        record.setUsageStartTime(LocalDate.now());
+        record.setEquipmentStatus(1); // 浣跨敤涓姸鎬�
+        record.setReturnQuantity(0);
+
+        // 鎵e噺搴撳瓨
+        equipment.setQuantity(equipment.getQuantity() - dto.getUsageQuantity());
+        equipmentManagementMapper.updateById(equipment);
+
+        // 淇濆瓨涓昏褰�
+        int result = equipmentUsageRecordMapper.insert(record);
+
+        // 淇濆瓨棰嗙敤鏄庣粏璁板綍
+        if (result > 0) {
+            saveUsageDetail(record.getId(), record.getEquipmentId(), 1, dto.getUsageQuantity(), userId, username, "璁惧棰嗙敤");
+        }
+
+        return result;
+    }
+
+    private int handleReturnOperation(EquipmentUsageRecordDto dto, EquipmentManagement equipment,
+                                      EquipmentUsageRecord originalRecord, Long userId, String username) {
+        // 鑾峰彇鏈褰掕繕鏁伴噺
+        Integer returnQuantity = dto.getReturnQuantity();
+        if (returnQuantity == null || returnQuantity <= 0) {
+            throw new RuntimeException("褰掕繕鏁伴噺蹇呴』澶т簬0");
+        }
+
+        // 璁$畻鍓╀綑鏈綊杩樻暟閲�
+        int remainingQuantity = originalRecord.getUsageQuantity() - originalRecord.getReturnQuantity();
+        if (returnQuantity > remainingQuantity) {
+            throw new RuntimeException("褰掕繕鏁伴噺涓嶈兘瓒呰繃鏈綊杩樻暟閲忥紝鍓╀綑鏈綊杩樻暟閲忥細" + remainingQuantity);
+        }
+
+        // 鏇存柊涓昏褰�
+        EquipmentUsageRecord updateRecord = new EquipmentUsageRecord();
+        updateRecord.setId(originalRecord.getId());
+        updateRecord.setReturnQuantity(originalRecord.getReturnQuantity() + returnQuantity);
+        updateRecord.setEquipmentStatus(2); // 宸插綊杩樼姸鎬�
+        updateRecord.setUsageEndTime(LocalDate.now());
+        // 濡傛灉鍏ㄩ儴褰掕繕锛屾洿鏂扮姸鎬佸拰鏃堕棿
+//        if (updateRecord.getReturnQuantity().equals(originalRecord.getUsageQuantity())) {
+//
+//        }
+
+        // 鎭㈠搴撳瓨
+        equipment.setQuantity(equipment.getQuantity() + returnQuantity);
+        equipmentManagementMapper.updateById(equipment);
+
+        // 鏇存柊涓昏褰�
+        int result = equipmentUsageRecordMapper.updateById(updateRecord);
+
+        // 淇濆瓨褰掕繕鏄庣粏璁板綍
+        if (result > 0) {
+            String remark = "璁惧褰掕繕" + (updateRecord.getEquipmentStatus() == 2 ? "锛堝叏閮ㄥ綊杩橈級" : "锛堥儴鍒嗗綊杩橈級");
+            saveUsageDetail(originalRecord.getId(), originalRecord.getEquipmentId(), 2, returnQuantity, userId, username, remark);
+        }
+
+        return result;
+    }
+
+    private int handleEditOperation(EquipmentUsageRecordDto dto, EquipmentManagement equipment,
+                                    EquipmentUsageRecord originalRecord, Long userId, String username) {
+        // 妫�鏌ラ鐢ㄦ暟閲忔槸鍚︽湁鍙樺寲
+        if (!dto.getUsageQuantity().equals(originalRecord.getUsageQuantity())) {
+            // 璁$畻搴撳瓨鍙樺寲閲忥紙鏃ф暟閲� - 鏂版暟閲忥級
+            int quantityDelta = originalRecord.getUsageQuantity() - dto.getUsageQuantity();
+
+            // 妫�鏌ヨ皟鏁村悗搴撳瓨鏄惁鍏呰冻
+            int newInventory = equipment.getQuantity() + quantityDelta;
+            if (newInventory < 0) {
+                throw new RuntimeException("搴撳瓨涓嶈冻锛岃皟鏁村悗搴撳瓨灏嗕负锛�" + newInventory);
+            }
+
+            // 璋冩暣搴撳瓨
+            equipment.setQuantity(newInventory);
+            if (equipmentManagementMapper.updateById(equipment) == 0) {
+                throw new RuntimeException("搴撳瓨鏇存柊澶辫触锛屽彲鑳藉凡琚叾浠栨搷浣滀慨鏀�");
+            }
+
+            // 璁板綍鏁伴噺鍙樻洿鏄庣粏
+            saveUsageDetail(originalRecord.getId(), originalRecord.getEquipmentId(), 3, dto.getUsageQuantity(), userId, username,
+                    "棰嗙敤鏁伴噺鍙樻洿锛�" + originalRecord.getUsageQuantity() + "鈫�" + dto.getUsageQuantity());
+        }
+
+        // 鏇存柊棰嗙敤璁板綍
+        EquipmentUsageRecord updateRecord = new EquipmentUsageRecord();
+        BeanUtils.copyProperties(dto, updateRecord);
+        return equipmentUsageRecordMapper.updateById(updateRecord);
+    }
+
+    private void saveUsageDetail(Long usageId, Long equipmentId, Integer operationType, Integer quantity,
+                                 Long operatorId, String operator, String remark) {
+        EquipmentUsageDetail detail = new EquipmentUsageDetail();
+        detail.setUsageId(usageId);
+        detail.setEquipmentId(equipmentId);
+        detail.setOperationType(operationType);
+        detail.setQuantity(quantity);
+        detail.setOperatorId(operatorId);
+        detail.setOperator(operator);
+        detail.setRemark(remark);
+        equipmentUsageDetailMapper.insert(detail);
     }
 }

--
Gitblit v1.9.3