From 2656ae9bce8544d81da66c07aaede5386d6fbebb Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 25 七月 2025 15:41:01 +0800
Subject: [PATCH] 1.序列化问题 2.设备领用逻辑优化

---
 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java  |    6 
 main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java          |   93 +++++++++++++-----
 main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java                           |    2 
 main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java          |    6 
 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java |  113 ++++++++++------------
 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java |   37 +++---
 main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java                   |    2 
 main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java    |   13 -
 main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java                     |    4 
 9 files changed, 156 insertions(+), 120 deletions(-)

diff --git a/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java b/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java
index 466c033..72cf267 100644
--- a/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java
+++ b/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java
@@ -1,19 +1,14 @@
 package com.ruoyi.business.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.business.dto.EquipmentManagementDto;
 import com.ruoyi.business.dto.EquipmentUsageDetailDto;
-import com.ruoyi.business.entity.EquipmentManagement;
-import com.ruoyi.business.entity.EquipmentUsageDetail;
-import com.ruoyi.business.mapper.EquipmentUsageDetailMapper;
-import com.ruoyi.business.service.EquipmentManagementService;
 import com.ruoyi.business.service.EquipmentUsageDetailService;
 import com.ruoyi.common.core.domain.R;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
 
 /**
  * <p>
@@ -35,8 +30,8 @@
      * 璁惧棰嗙敤褰掕繕璁板綍鏌ヨ
      */
     @GetMapping("/list")
-    public R<IPage<EquipmentUsageDetailDto>> list(Page<EquipmentUsageDetail> page,EquipmentUsageDetailDto equipmentUsageDetailDto) {
-        IPage<EquipmentUsageDetailDto> list = equipmentUsageDetailService.selectEquipmentUsageDetailList(page,equipmentUsageDetailDto);
+    public R<List<EquipmentUsageDetailDto>> list(EquipmentUsageDetailDto equipmentUsageDetailDto) {
+        List<EquipmentUsageDetailDto> list = equipmentUsageDetailService.selectEquipmentUsageDetailList(equipmentUsageDetailDto);
         return R.ok(list);
     }
 
diff --git a/main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java b/main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java
index 7ad6c05..9e03627 100644
--- a/main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java
+++ b/main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import com.ruoyi.common.core.domain.MyBaseEntity;
 
@@ -80,5 +81,6 @@
      * 鏄惁鑰楁潗绫�
      */
     @TableField(value = "is_consumables")
+    @JsonProperty("isConsumables")
     private boolean isConsumables;
 }
\ No newline at end of file
diff --git a/main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java b/main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java
index 7bd1688..809680e 100644
--- a/main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java
+++ b/main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.MyBaseEntity;
 import lombok.Data;
@@ -131,5 +132,6 @@
      * 鏄惁娣诲姞鑷冲緟琛ュ簱
      */
     @TableField(value = "is_add")
+    @JsonProperty("isAdd")
     private boolean isAdd;
 }
\ No newline at end of file
diff --git a/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java b/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java
index 6dd1ff2..0ef1273 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java
@@ -1,10 +1,10 @@
 package com.ruoyi.business.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.business.dto.EquipmentUsageDetailDto;
 import com.ruoyi.business.entity.EquipmentUsageDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
 
 /**
  * <p>
@@ -16,5 +16,5 @@
  */
 public interface EquipmentUsageDetailService extends IService<EquipmentUsageDetail> {
 
-    IPage<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(Page<EquipmentUsageDetail> page, EquipmentUsageDetailDto equipmentUsageDetailDto);
+    List<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(EquipmentUsageDetailDto equipmentUsageDetailDto);
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java
index e2fe1bf..9c88381 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java
@@ -3,23 +3,22 @@
 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.business.dto.EquipmentManagementDto;
 import com.ruoyi.business.entity.EquipmentManagement;
 import com.ruoyi.business.entity.EquipmentUsageRecord;
 import com.ruoyi.business.mapper.EquipmentManagementMapper;
 import com.ruoyi.business.mapper.EquipmentUsageRecordMapper;
 import com.ruoyi.business.service.EquipmentManagementService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.business.vo.EquipmentManagementVo;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
-import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.beans.Transient;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
@@ -108,6 +107,7 @@
                     vo.setId(equipment.getId());               // 璁惧id
                     vo.setEquipmentName(equipment.getEquipmentName()); // 璁惧鍚嶇О
                     vo.setQuantity(equipment.getQuantity());    // 鏁伴噺
+                    vo.setConsumables(equipment.isConsumables());    // 鏄惁鑰楁潗绫�
                     return vo;
                 })
                 .toList();
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java
index cb19b1a..3f0025b 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java
@@ -1,9 +1,7 @@
 package com.ruoyi.business.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.ruoyi.business.dto.EquipmentManagementDto;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.business.dto.EquipmentUsageDetailDto;
 import com.ruoyi.business.entity.EquipmentManagement;
 import com.ruoyi.business.entity.EquipmentUsageDetail;
@@ -11,14 +9,11 @@
 import com.ruoyi.business.mapper.EquipmentManagementMapper;
 import com.ruoyi.business.mapper.EquipmentUsageDetailMapper;
 import com.ruoyi.business.mapper.EquipmentUsageRecordMapper;
-import com.ruoyi.business.service.EquipmentManagementService;
 import com.ruoyi.business.service.EquipmentUsageDetailService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.business.service.EquipmentUsageRecordService;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.bean.BeanUtils;
-import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -47,72 +42,70 @@
 
 
     @Override
-    public IPage<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(Page<EquipmentUsageDetail> page,EquipmentUsageDetailDto equipmentUsageDetailDto) {
-        // 蹇呴』浼犻�抲sageId鍙傛暟
+    public List<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(EquipmentUsageDetailDto equipmentUsageDetailDto) {
+        // 蹇呴』浼犻�� usageId 鍙傛暟
         if (equipmentUsageDetailDto.getUsageId() == null) {
             throw new BaseException("璇烽�夋嫨浣跨敤璁板綍");
         }
+
+        // 鏌ヨ鏄庣粏鍒楄〃锛堜笉鍒嗛〉锛�
         LambdaQueryWrapper<EquipmentUsageDetail> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EquipmentUsageDetail::getUsageId, equipmentUsageDetailDto.getUsageId());
+        List<EquipmentUsageDetail> details = equipmentUsageDetailMapper.selectList(queryWrapper);
 
-        Page<EquipmentUsageDetail> entityPage = equipmentUsageDetailMapper.selectPage(page, queryWrapper);
-        IPage<EquipmentUsageDetailDto> dtoPage = new Page<>();
-        BeanUtils.copyProperties(entityPage, dtoPage);
-        // 鍏堣幏鍙栦富琛ㄨ褰�
-        List<Long> usageIds = entityPage.getRecords().stream()
+        // 濡傛灉娌℃湁鏁版嵁锛岀洿鎺ヨ繑鍥炵┖鍒楄〃
+        if (details.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        // 鑾峰彇鎵�鏈夊叧鑱旂殑 usageId
+        List<Long> usageIds = details.stream()
                 .map(EquipmentUsageDetail::getUsageId)
                 .distinct()
                 .collect(Collectors.toList());
 
-        if (!usageIds.isEmpty()) {
-            // 鏌ヨ鍏宠仈鐨勪娇鐢ㄨ褰�
-            List<EquipmentUsageRecord> usageRecords = equipmentUsageRecordMapper.selectList(
-                    new LambdaQueryWrapper<EquipmentUsageRecord>()
-                            .in(EquipmentUsageRecord::getId, usageIds)
-            );
+        // 鏌ヨ鍏宠仈鐨勪娇鐢ㄨ褰�
+        List<EquipmentUsageRecord> usageRecords = equipmentUsageRecordMapper.selectList(
+                new LambdaQueryWrapper<EquipmentUsageRecord>()
+                        .in(EquipmentUsageRecord::getId, usageIds)
+        );
 
-            // 鑾峰彇鎵�鏈夎澶嘔D
-            List<Long> equipmentIds = usageRecords.stream()
-                    .map(EquipmentUsageRecord::getEquipmentId)
-                    .distinct()
-                    .collect(Collectors.toList());
+        // 鑾峰彇鎵�鏈夎澶嘔D
+        List<Long> equipmentIds = usageRecords.stream()
+                .map(EquipmentUsageRecord::getEquipmentId)
+                .distinct()
+                .collect(Collectors.toList());
 
-            // 鏌ヨ璁惧淇℃伅
-            Map<Long, EquipmentManagement> equipmentMap;
-            if (!equipmentIds.isEmpty()) {
-                equipmentMap = equipmentManagementMapper.selectList(
-                        new LambdaQueryWrapper<EquipmentManagement>()
-                                .in(EquipmentManagement::getId, equipmentIds)
-                ).stream().collect(Collectors.toMap(EquipmentManagement::getId, Function.identity()));
-            } else {
-                equipmentMap = new HashMap<>();
+        // 鏌ヨ璁惧淇℃伅
+        Map<Long, EquipmentManagement> equipmentMap;
+        if (!equipmentIds.isEmpty()) {
+            equipmentMap = equipmentManagementMapper.selectList(
+                    new LambdaQueryWrapper<EquipmentManagement>()
+                            .in(EquipmentManagement::getId, equipmentIds)
+            ).stream().collect(Collectors.toMap(EquipmentManagement::getId, Function.identity()));
+        } else {
+            equipmentMap = new HashMap<>();
+        }
+
+        // 鏋勫缓 usageId 鈫� equipmentId 鐨勬槧灏�
+        Map<Long, Long> usageIdToEquipmentIdMap = usageRecords.stream()
+                .collect(Collectors.toMap(EquipmentUsageRecord::getId, EquipmentUsageRecord::getEquipmentId));
+
+        // 杞崲涓� DTO 骞跺~鍏呰澶囦俊鎭�
+        return details.stream().map(detail -> {
+            EquipmentUsageDetailDto detailDto = new EquipmentUsageDetailDto();
+            BeanUtils.copyProperties(detail, detailDto);
+
+            // 鑾峰彇鍏宠仈鐨勮澶囦俊鎭�
+            Long equipmentId = usageIdToEquipmentIdMap.get(detail.getUsageId());
+            if (equipmentId != null && equipmentMap.containsKey(equipmentId)) {
+                EquipmentManagement equipment = equipmentMap.get(equipmentId);
+                detailDto.setEquipmentNo(equipment.getEquipmentNo());
+                detailDto.setEquipmentName(equipment.getEquipmentName());
+                detailDto.setSpecification(equipment.getSpecification());
             }
 
-            // 鏋勫缓浣跨敤璁板綍ID鍒拌澶嘔D鐨勬槧灏�
-            Map<Long, Long> usageIdToEquipmentIdMap = usageRecords.stream()
-                    .collect(Collectors.toMap(EquipmentUsageRecord::getId, EquipmentUsageRecord::getEquipmentId));
-
-            // 杞崲DTO骞跺~鍏呰澶囦俊鎭�
-            List<EquipmentUsageDetailDto> dtoList = entityPage.getRecords().stream().map(detail -> {
-                EquipmentUsageDetailDto detailDto = new EquipmentUsageDetailDto();
-                BeanUtils.copyProperties(detail, detailDto);
-
-                // 鑾峰彇鍏宠仈鐨勮澶嘔D
-                Long equipmentId = usageIdToEquipmentIdMap.get(detail.getUsageId());
-                if (equipmentId != null && equipmentMap.containsKey(equipmentId)) {
-                    EquipmentManagement equipment = equipmentMap.get(equipmentId);
-                    detailDto.setEquipmentNo(equipment.getEquipmentNo());
-                    detailDto.setEquipmentName(equipment.getEquipmentName());
-                    detailDto.setSpecification(equipment.getSpecification());
-                }
-
-                return detailDto;
-            }).collect(Collectors.toList());
-
-            dtoPage.setRecords(dtoList);
-        } else {
-            dtoPage.setRecords(Collections.emptyList());
-        }
-        return dtoPage;
+            return detailDto;
+        }).collect(Collectors.toList());
     }
 }
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 13c1d08..c272fa3 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
@@ -3,9 +3,7 @@
 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.ruoyi.basic.entity.Supply;
-import com.ruoyi.basic.mapper.CoalInfoMapper;
-import com.ruoyi.business.dto.EquipmentManagementDto;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.business.dto.EquipmentUsageRecordDto;
 import com.ruoyi.business.entity.EquipmentManagement;
 import com.ruoyi.business.entity.EquipmentUsageDetail;
@@ -14,12 +12,11 @@
 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;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.system.mapper.SysUserMapper;
-import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDate;
@@ -133,7 +130,7 @@
             }
 
             // 澶勭悊褰掕繕閫昏緫
-            if (equipmentUsageRecordDto.getEquipmentStatus() == 2) {
+            if (equipmentUsageRecordDto.getEquipmentStatus() != 1) {
                 result = handleReturnOperation(equipmentUsageRecordDto, equipment, originalRecord, userId, username);
             } else {
                 // 澶勭悊鏅�氱紪杈戦�昏緫锛堥潪褰掕繕鐘舵�侊級
@@ -173,7 +170,7 @@
 
     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");
@@ -185,18 +182,19 @@
             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())) {
-//
-//        }
+        int newReturnQuantity = originalRecord.getReturnQuantity() + returnQuantity;
+        updateRecord.setReturnQuantity(newReturnQuantity);
 
-        // 鎭㈠搴撳瓨
+        // 鍒ゆ柇鏄惁鍏ㄩ儴褰掕繕
+        boolean isFullReturn = newReturnQuantity == originalRecord.getUsageQuantity();
+        int newStatus = isFullReturn ? 3 : 2; // 3琛ㄧず鍏ㄩ儴褰掕繕锛�2琛ㄧず閮ㄥ垎褰掕繕
+        updateRecord.setEquipmentStatus(newStatus);
+        updateRecord.setUsageEndTime(LocalDate.now());
+
+        // 鎭㈠搴撳瓨鏁伴噺
         equipment.setQuantity(equipment.getQuantity() + returnQuantity);
         equipmentManagementMapper.updateById(equipment);
 
@@ -205,10 +203,11 @@
 
         // 淇濆瓨褰掕繕鏄庣粏璁板綍
         if (result > 0) {
-            String remark = "璁惧褰掕繕" + (updateRecord.getEquipmentStatus() == 2 ? "锛堝叏閮ㄥ綊杩橈級" : "锛堥儴鍒嗗綊杩橈級");
-            saveUsageDetail(originalRecord.getId(), originalRecord.getEquipmentId(), 2, returnQuantity, userId, username, remark);
+            String remark = isFullReturn ? "璁惧褰掕繕锛堝叏閮ㄥ綊杩橈級" : "璁惧褰掕繕锛堥儴鍒嗗綊杩橈級";
+            int operationType = isFullReturn ? 3 : 2; // 涓庝富璁板綍鐘舵�佷繚鎸佷竴鑷�
+            saveUsageDetail(originalRecord.getId(), originalRecord.getEquipmentId(),
+                    operationType, returnQuantity, userId, username, remark);
         }
-
         return result;
     }
 
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
index 1a9c849..da90280 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
@@ -9,7 +9,6 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.basic.entity.CoalInfo;
 import com.ruoyi.basic.entity.Customer;
-import com.ruoyi.basic.entity.Supply;
 import com.ruoyi.basic.mapper.CoalInfoMapper;
 import com.ruoyi.basic.mapper.CustomerMapper;
 import com.ruoyi.business.dto.SalesRecordDto;
@@ -40,13 +39,9 @@
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
 import java.time.temporal.TemporalAdjusters;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-import java.util.*;
 
 /**
  * <p>
@@ -153,23 +148,20 @@
         // 鍙傛暟鏍¢獙
         validateSalesRecordDto(salesRecordDto);
 
-        // 鏇存柊姝e紡搴撳緟琛ュ簱鏁伴噺
+        // 鑾峰彇鐓ょ搴撳瓨淇℃伅
         OfficialInventory officialInventory = officialInventoryMapper.selectById(salesRecordDto.getCoalId());
         if (officialInventory == null) {
             throw new BaseException("姝e紡搴撶叅绉嶄俊鎭笉瀛樺湪");
         }
-        if (salesRecordDto.getSaleQuantity().compareTo(officialInventory.getInventoryQuantity()) > 0) {
-            throw new BaseException("閿�鍞暟閲忎笉鑳藉ぇ浜庡簱瀛樻暟閲�");
-        }
-        officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(salesRecordDto.getSaleQuantity()));
 
-        if (salesRecordDto.isAdd()){
-            officialInventory.setPendingReplenishment(salesRecordDto.getSaleQuantity());
-        }
-        officialInventoryMapper.updateById(officialInventory);
+        // 澶勭悊閿�鍞暟閲忓彉鏇撮�昏緫
+        SalesRecord existingRecord = salesRecordDto.getId() == null ? null : salesRecordMapper.selectById(salesRecordDto.getId());
+        handleQuantityChanges(salesRecordDto, officialInventory, existingRecord);
 
         // 鏋勫缓閿�鍞褰曞疄浣�
         SalesRecord salesRecord = buildSalesRecord(salesRecordDto, officialInventory.getCoalId());
+        // 璁剧疆閿�鍞褰曚腑鐨勫簱瀛樻暟閲�
+        salesRecord.setInventoryQuantity(officialInventory.getInventoryQuantity());
 
         // 澶勭悊鏂板/鏇存柊閫昏緫
         if (salesRecordDto.getId() == null) {
@@ -179,18 +171,52 @@
         }
     }
 
-    private void validateSalesRecordDto(SalesRecordDto dto) {
-        if (dto == null) {
-            throw new BaseException("閿�鍞褰曟暟鎹笉鑳戒负绌�");
+    private void handleQuantityChanges(SalesRecordDto dto, OfficialInventory officialInventory, SalesRecord existingRecord) {
+        if (existingRecord == null) {
+            // 鏂板璁板綍
+            if (dto.getSaleQuantity().compareTo(officialInventory.getInventoryQuantity()) > 0) {
+                throw new BaseException("閿�鍞暟閲忎笉鑳藉ぇ浜庡簱瀛樻暟閲�");
+            }
+            // 鏇存柊搴撳瓨鏁伴噺
+            officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(dto.getSaleQuantity()));
+            // 璁剧疆寰呰ˉ搴撴暟閲�
+            if (dto.isAdd()) {
+                officialInventory.setPendingReplenishment(
+                        officialInventory.getPendingReplenishment() == null ?
+                                dto.getSaleQuantity() :
+                                officialInventory.getPendingReplenishment().add(dto.getSaleQuantity())
+                );
+            }
+        } else {
+            // 鏇存柊璁板綍
+            // 姣旇緝閿�鍞暟閲忔槸鍚︽湁鍙樺寲
+            int quantityComparison = dto.getSaleQuantity().compareTo(existingRecord.getSaleQuantity());
+            if (quantityComparison != 0) {
+                // 璁$畻鏁伴噺宸��
+                BigDecimal quantityDiff = dto.getSaleQuantity().subtract(existingRecord.getSaleQuantity());
+
+                // 妫�鏌ユ柊鏁伴噺鏄惁浼氬鑷村簱瀛樹笉瓒�
+                if (quantityComparison > 0 && quantityDiff.compareTo(officialInventory.getInventoryQuantity()) > 0) {
+                    throw new BaseException("閿�鍞暟閲忓鍔犲悗涓嶈兘澶т簬搴撳瓨鏁伴噺");
+                }
+
+                // 鏇存柊搴撳瓨鏁伴噺
+                officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(quantityDiff));
+
+                // 鏇存柊寰呰ˉ搴撴暟閲忥紙濡傛灉鏄渶瑕佽ˉ搴撶殑璁板綍锛�
+                if (dto.isAdd()) {
+                    BigDecimal pendingDiff = officialInventory.getPendingReplenishment() == null ?
+                            quantityDiff :
+                            officialInventory.getPendingReplenishment().add(quantityDiff);
+                    officialInventory.setPendingReplenishment(pendingDiff);
+                }
+            }
         }
-        if (dto.getRegistrantId() == null) {
-            throw new BaseException("鐧昏浜篒D涓嶈兘涓虹┖");
-        }
-        if (dto.getCustomerId() == null) {
-            throw new BaseException("瀹㈡埛ID涓嶈兘涓虹┖");
-        }
-        if (dto.getCoalId() == null) {
-            throw new BaseException("璇烽�夋嫨涓�鏉$叅绉嶄俊鎭�");
+
+        // 鏇存柊搴撳瓨璁板綍
+        int updateResult = officialInventoryMapper.updateById(officialInventory);
+        if (updateResult <= 0) {
+            throw new BaseException("搴撳瓨鏇存柊澶辫触");
         }
     }
 
@@ -234,6 +260,21 @@
         return record;
     }
 
+    private void validateSalesRecordDto(SalesRecordDto dto) {
+        if (dto == null) {
+            throw new BaseException("閿�鍞褰曟暟鎹笉鑳戒负绌�");
+        }
+        if (dto.getRegistrantId() == null) {
+            throw new BaseException("鐧昏浜篒D涓嶈兘涓虹┖");
+        }
+        if (dto.getCustomerId() == null) {
+            throw new BaseException("瀹㈡埛ID涓嶈兘涓虹┖");
+        }
+        if (dto.getCoalId() == null) {
+            throw new BaseException("璇烽�夋嫨涓�鏉$叅绉嶄俊鎭�");
+        }
+    }
+
     private int insertSalesRecord(SalesRecord record) {
         int result = salesRecordMapper.insert(record);
         if (result <= 0) {
diff --git a/main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java b/main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java
index 3ec641c..b137ddf 100644
--- a/main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java
+++ b/main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java
@@ -1,5 +1,6 @@
 package com.ruoyi.business.vo;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
 @Data
@@ -10,4 +11,7 @@
     private String equipmentName; //璁惧鍚嶇О
 
     private Integer quantity; //鏁伴噺
+
+    @JsonProperty("isConsumables")
+    private boolean isConsumables; //鏄惁鑰楁潗绫�
 }

--
Gitblit v1.9.3