From f29c8786807015d78b9be8a33397f69478d92a76 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期六, 12 七月 2025 16:52:27 +0800
Subject: [PATCH] 1.设备优化 2.配煤计算器

---
 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java                 |   51 ++++++
 main-business/src/main/java/com/ruoyi/business/controller/PendingInventoryController.java                       |    7 +
 main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java                                          |    3 
 basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java                                          |    3 
 main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java                    |   58 +++++---
 basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java                                                |   10 +
 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java                |   70 +++++++++
 main-business/src/main/resources/db/migration/postgresql/V20250613112800__create_table_production_inventory.sql |    2 
 main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java                                          |    2 
 main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java                    |   15 -
 main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java                             |    2 
 basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java                                        |    3 
 main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageRecordDto.java                                 |    2 
 basic-server/src/main/java/com/ruoyi/basic/entity/CoalField.java                                                |    1 
 main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java                         |   41 ++---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java                                    |   36 ++++
 basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java                               |    6 
 main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java                                     |   47 ++----
 basic-server/src/main/resources/mapper/CoalFieldMapper.xml                                                      |    6 
 main-business/src/main/java/com/ruoyi/business/dto/EquipmentManagementDto.java                                  |    4 
 20 files changed, 273 insertions(+), 96 deletions(-)

diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java
index 6824305..3eae657 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java
@@ -6,5 +6,15 @@
 @Data
 public class CoalFieldDto extends CoalField {
 
+    private String fieldName;
+
+    public CoalFieldDto(String name) {
+        this.fieldName = name;
+    }
+
+    public static CoalFieldDto from(String name) {
+        return new CoalFieldDto(name);
+    }
+
     private String searchAll;
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/entity/CoalField.java b/basic-server/src/main/java/com/ruoyi/basic/entity/CoalField.java
index 6897630..79c97be 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/entity/CoalField.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/entity/CoalField.java
@@ -37,4 +37,5 @@
      */
     @TableField(value = "field_description")
     private String fieldDescription;
+
 }
\ No newline at end of file
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java
index 7a61957..86f532d 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java
@@ -4,6 +4,8 @@
 import com.ruoyi.basic.entity.CoalField;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.Set;
+
 /**
  * <p>
  * 鐓よ川淇℃伅琛紝璁板綍鐓ょ偔璐ㄩ噺妫�娴嬬浉鍏虫暟鎹� Mapper 鎺ュ彛
@@ -15,4 +17,5 @@
 @Mapper
 public interface CoalFieldMapper extends BaseMapper<CoalField> {
 
+    Set<String> getFieldNamesByNames(Set<String> fieldNames);
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java b/basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java
index 574cc98..1980cec 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -25,4 +26,6 @@
     int delCoalFieldByIds(Long[] ids);
 
     List<CoalField> selectAllList(CoalFieldDto coalFieldDto);
+
+    Set<String> getFieldNamesByNames(Set<String> collect);
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java
index 67a6c5e..73d18d2 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java
@@ -16,6 +16,7 @@
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -80,6 +81,11 @@
         return coalFieldMapper.selectList(null);
     }
 
+    @Override
+    public Set<String> getFieldNamesByNames(Set<String> fieldNames) {
+        return coalFieldMapper.getFieldNamesByNames(fieldNames);
+    }
+
     private String generateNextFieldNumber() {
         // 鑾峰彇鎵�鏈夊凡瀛樺湪鐨� CoalField 璁板綍锛屽寘鎷凡鍒犻櫎鐨�
         LambdaQueryWrapper<CoalField> queryWrapper = new LambdaQueryWrapper<>();
diff --git a/basic-server/src/main/resources/mapper/CoalFieldMapper.xml b/basic-server/src/main/resources/mapper/CoalFieldMapper.xml
index 55beb38..d945f3f 100644
--- a/basic-server/src/main/resources/mapper/CoalFieldMapper.xml
+++ b/basic-server/src/main/resources/mapper/CoalFieldMapper.xml
@@ -24,5 +24,11 @@
                 update_time,
             id, fields, field_name, field_description
     </sql>
+    <select id="getFieldNamesByNames" resultType="java.lang.String">
+        SELECT field_name FROM coal_field WHERE field_name IN
+        <foreach collection="fieldNames" item="name" open="(" separator="," close=")">
+            #{fieldNames}
+        </foreach>
+    </select>
 
 </mapper>
\ No newline at end of file
diff --git a/main-business/src/main/java/com/ruoyi/business/controller/PendingInventoryController.java b/main-business/src/main/java/com/ruoyi/business/controller/PendingInventoryController.java
index 16940ff..0bee476 100644
--- a/main-business/src/main/java/com/ruoyi/business/controller/PendingInventoryController.java
+++ b/main-business/src/main/java/com/ruoyi/business/controller/PendingInventoryController.java
@@ -58,4 +58,11 @@
         return R.ok(pendingInventoryService.delByIds(ids));
     }
 
+    /**
+     * 閰嶇叅璁$畻鍣ㄥ埌寰呭叆搴�
+     */
+    @PostMapping("/addPending")
+    public R addPending(@RequestBody PendingInventoryDto pendingInventoryDto) {
+        return R.ok(pendingInventoryService.addPending(pendingInventoryDto));
+    }
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/EquipmentManagementDto.java b/main-business/src/main/java/com/ruoyi/business/dto/EquipmentManagementDto.java
index 858a31a..7d85bf7 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/EquipmentManagementDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/EquipmentManagementDto.java
@@ -5,4 +5,8 @@
 
 @Data
 public class EquipmentManagementDto extends EquipmentManagement {
+
+    private String searchAll;//鎼滅储
+
+    private Integer usedNo;//宸蹭娇鐢ㄦ暟閲�
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageRecordDto.java b/main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageRecordDto.java
index 9710cd0..dbfe153 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageRecordDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageRecordDto.java
@@ -9,4 +9,6 @@
     private String equipmentNo; //璁惧缂栧彿
 
     private String equipmentName; //璁惧鍚嶇О
+
+    private String userName; //棰嗙敤浜�
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java b/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java
index c7aa0cc..cfb3036 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java
@@ -6,6 +6,7 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 @Data
 public class PendingInventoryDto extends PendingInventory {
@@ -13,41 +14,27 @@
     @JsonProperty("pId")
     private Long pId;
 
-    /**
-     * 姝e紡搴搃d
-     */
     @JsonProperty("officialId")
-    private Long officialId;
+    private Long officialId;//姝e紡搴搃d
 
-    private List<Map<String, String>> fieldValue;
+    private List<Map<String, String>> fieldValue;//鐓ょ鏂规瀛楁list
 
-    /**
-     * 瀛楁鍊�
-     */
-    private String coalValue;
-    /**
-     * 瀛楁
-     */
-    private String fields;
-    /**
-     * 瀛楁鍚�
-     */
-    private String fieldName;
+    private String coalValue;//鐓ょ鏂规瀛楁鍊�
 
-    /**
-     * 瀛楁鍚�
-     */
-    private Integer type;
+    private String fields;//鐓ょ鏂规瀛楁
 
-    /**
-     * 鐓ょ
-     */
-    private String coal;
+    private String fieldName; //鐓ょ鏂规瀛楁鍚�
 
-    /**
-     * 鐧昏浜�
-     */
-    private String registrant;
+    private Integer type; //绫诲瀷
 
-    private String searchAll;
+    private String coal;//鐓ょ
+
+    private String registrant;//鐧昏浜�
+
+    private String searchAll;//鎼滅储
+
+    private List<Map<String, Object>> coalResultList;//閰嶇叅璁$畻鍣ㄧ叅绉嶄俊鎭痩ist
+
+    private List<Map<String, Object>> fieldsResultList;//閰嶇叅璁$畻鍣ㄦ柟妗堝瓧娈典俊鎭痩ist
+
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java b/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
index 0567117..32560a2 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
@@ -6,7 +6,5 @@
 @Data
 public class SalesRecordDto extends SalesRecord {
 
-    private String searchAll;
-
     private String coal;
 }
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 33620d6..6012216 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
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.MyBaseEntity;
 import lombok.Data;
 
@@ -31,6 +32,7 @@
      * 閿�鍞棩鏈�
      */
     @TableField(value = "sale_date")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate saleDate;
     /**
      * 瀹㈡埛id
@@ -116,5 +118,6 @@
      * 鐧昏鏃ユ湡
      */
     @TableField(value = "registration_date")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate registrationDate;
 }
\ No newline at end of file
diff --git a/main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java b/main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java
index e82d59e..6a93210 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java
@@ -23,4 +23,6 @@
     int delByIds(Long[] ids);
 
     int addOrEditCoalValue(PendingInventoryDto pendingInventoryDto);
+
+    int addPending(PendingInventoryDto pendingInventoryDto);
 }
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 dbad9ab..863d663 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
@@ -4,13 +4,14 @@
 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.ProductionMasterDto;
 import com.ruoyi.business.entity.EquipmentManagement;
-import com.ruoyi.business.entity.Production;
+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.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
@@ -33,10 +34,52 @@
 
     private final EquipmentManagementMapper equipmentManagementMapper;
 
+    private final EquipmentUsageRecordMapper equipmentUsageRecordMapper;
+
     public IPage<EquipmentManagementDto> selectProductionList(Page<EquipmentManagement> page, EquipmentManagementDto equipmentManagementDto) {
-        Page<EquipmentManagement> entityPage = equipmentManagementMapper.selectPage(page, null);
+        // 1. 鏋勫缓鏌ヨ鏉′欢锛坰earchAll 妯$硦鏌ヨ锛�
+        LambdaQueryWrapper<EquipmentManagement> queryWrapper = new LambdaQueryWrapper<>();
+
+        if (StringUtils.isNotBlank(equipmentManagementDto.getSearchAll())) {
+            String searchValue = equipmentManagementDto.getSearchAll();
+            queryWrapper.and(wrapper ->
+                    wrapper.like(EquipmentManagement::getEquipmentNo, searchValue)
+                            .or()
+                            .like(EquipmentManagement::getEquipmentName, searchValue)
+                            .or()
+                            .like(EquipmentManagement::getSpecification, searchValue)
+            );
+        }
+
+        // 2. 鎵ц鍒嗛〉鏌ヨ
+        Page<EquipmentManagement> entityPage = equipmentManagementMapper.selectPage(page, queryWrapper);
+
+        // 3. 杞崲涓� DTO 鍒嗛〉
         IPage<EquipmentManagementDto> dtoPage = new Page<>();
-        BeanUtils.copyProperties(entityPage, dtoPage);
+        BeanUtils.copyProperties(entityPage, dtoPage, "records");
+
+        // 4. 鏌ヨ姣忎釜璁惧鐨勪娇鐢ㄦ�婚噺锛坲sageQuantity锛夊苟璁剧疆鍒� DTO
+        List<EquipmentManagementDto> dtoRecords = entityPage.getRecords().stream()
+                .map(entity -> {
+                    EquipmentManagementDto dto = new EquipmentManagementDto();
+                    BeanUtils.copyProperties(entity, dto);
+
+                    // 鏌ヨ璇ヨ澶囩殑浣跨敤鎬婚噺锛坲sageQuantity锛�
+                    LambdaQueryWrapper<EquipmentUsageRecord> usageQueryWrapper = new LambdaQueryWrapper<>();
+                    usageQueryWrapper.eq(EquipmentUsageRecord::getEquipmentId, entity.getId());
+
+                    // 璁$畻鎬讳娇鐢ㄩ噺
+                    Integer totalUsage = equipmentUsageRecordMapper.selectList(usageQueryWrapper).stream()
+                            .mapToInt(EquipmentUsageRecord::getUsageQuantity)
+                            .sum();
+
+                    // 璁剧疆浣跨敤鎬婚噺
+                    dto.setUsedNo(totalUsage);
+                    return dto;
+                })
+                .toList();
+
+        dtoPage.setRecords(dtoRecords);
         return dtoPage;
     }
 
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 a1d8661..7b78a37 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
@@ -4,6 +4,7 @@
 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.ruoyi.business.dto.EquipmentUsageRecordDto;
 import com.ruoyi.business.entity.EquipmentManagement;
@@ -12,9 +13,12 @@
 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.transaction.annotation.Transactional;
 
 import java.util.HashMap;
 import java.util.List;
@@ -37,7 +41,9 @@
 
     private final EquipmentUsageRecordMapper equipmentUsageRecordMapper;
 
-    private  final EquipmentManagementMapper equipmentManagementMapper;
+    private final EquipmentManagementMapper equipmentManagementMapper;
+
+    private final SysUserMapper sysUserMapper;
 
     @Override
     public IPage<EquipmentUsageRecordDto> selectUsageRecordList(Page<EquipmentUsageRecord> page, EquipmentUsageRecordDto equipmentUsageRecordDto) {
@@ -46,7 +52,8 @@
         BeanUtils.copyProperties(entityPage, dtoPage);
 
         List<Long> eqIds = entityPage.getRecords().stream().map(EquipmentUsageRecord::getEquipmentId).toList();
-        //鎵归噺鏌ヨ
+        List<Long> userIds = entityPage.getRecords().stream().map(EquipmentUsageRecord::getUserId).toList();
+        //鎵归噺鏌ヨ璁惧
         Map<Long, EquipmentManagement> equipmentManagementMap;
         if (!eqIds.isEmpty()) {
             List<EquipmentManagement> infos = equipmentManagementMapper.selectList(new LambdaQueryWrapper<EquipmentManagement>().in(EquipmentManagement::getId, eqIds));
@@ -54,15 +61,26 @@
         } else {
             equipmentManagementMap = new HashMap<>();
         }
+        //浜哄憳鏌ヨ
+        Map<Long, SysUser> userMap;
+        if (!userIds.isEmpty()) {
+            List<SysUser> sysUsers = sysUserMapper.selectList(userIds);
+            userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+        }else {
+            userMap = new HashMap<>();
+        }
         //鍖归厤鏁版嵁
         List<EquipmentUsageRecordDto> dtoRecords = entityPage.getRecords().stream().map(entity -> {
             EquipmentUsageRecordDto dto = new EquipmentUsageRecordDto();
             BeanUtils.copyProperties(entity, dto);
-
             EquipmentManagement equipment = equipmentManagementMap.get(entity.getEquipmentId());
             if (equipment != null) {
                 dto.setEquipmentNo(equipment.getEquipmentNo());
                 dto.setEquipmentName(equipment.getEquipmentName());
+            }
+            SysUser sysUser = userMap.get(entity.getUserId());
+            if (sysUser != null) {
+                dto.setUserName(sysUser.getNickName());
             }
             return dto;
         }).toList();
@@ -72,12 +90,58 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int addOrEditUsageRecord(EquipmentUsageRecordDto equipmentUsageRecordDto) {
         EquipmentUsageRecord equipmentUsageRecord = new EquipmentUsageRecord();
         BeanUtils.copyProperties(equipmentUsageRecordDto, equipmentUsageRecord);
+
+        // 鑾峰彇璁惧ID鍜岄鐢ㄦ暟閲�
+        Long equipmentId = equipmentUsageRecordDto.getEquipmentId();
+        Integer newUsageQuantity = equipmentUsageRecordDto.getUsageQuantity();
+
+        // 鏌ヨ璁惧淇℃伅锛堝甫涔愯閿佺増鏈彿锛�
+        EquipmentManagement equipment = equipmentManagementMapper.selectById(equipmentId);
+        if (equipment == null) {
+            throw new RuntimeException("璁惧涓嶅瓨鍦�");
+        }
+
         if (Objects.isNull(equipmentUsageRecordDto.getId())) {
+            // 妫�鏌ュ簱瀛樻槸鍚﹀厖瓒�
+            if (equipment.getQuantity() < newUsageQuantity) {
+                throw new RuntimeException("搴撳瓨涓嶈冻锛屽綋鍓嶅簱瀛橈細" + equipment.getQuantity());
+            }
+
+            // 鎵e噺搴撳瓨
+            equipment.setQuantity(equipment.getQuantity() - newUsageQuantity);
+            equipmentManagementMapper.updateById(equipment);
+
+            // 鍒涘缓棰嗙敤璁板綍
             return equipmentUsageRecordMapper.insert(equipmentUsageRecord);
         } else {
+            // 1. 鏌ヨ鍘熼鐢ㄨ褰�
+            EquipmentUsageRecord originalRecord = equipmentUsageRecordMapper.selectById(equipmentUsageRecordDto.getId());
+            if (originalRecord == null) {
+                throw new RuntimeException("棰嗙敤璁板綍涓嶅瓨鍦�");
+            }
+
+            // 2. 璁$畻搴撳瓨鍙樺寲閲忥紙鏂版暟閲� - 鏃ф暟閲忥級
+            int quantityDelta = newUsageQuantity - originalRecord.getUsageQuantity();
+
+            if (quantityDelta != 0) {
+                // 3. 妫�鏌ヨ皟鏁村悗搴撳瓨鏄惁鍏呰冻锛堣�冭檻澧炲姞鍜屽噺灏戜袱绉嶆儏鍐碉級
+                int newInventory = equipment.getQuantity() - quantityDelta;
+                if (newInventory < 0) {
+                    throw new RuntimeException("搴撳瓨涓嶈冻锛岃皟鏁村悗搴撳瓨灏嗕负锛�" + newInventory);
+                }
+
+                // 4. 璋冩暣搴撳瓨
+                equipment.setQuantity(newInventory);
+                if (equipmentManagementMapper.updateById(equipment) == 0) {
+                    throw new RuntimeException("搴撳瓨鏇存柊澶辫触锛屽彲鑳藉凡琚叾浠栨搷浣滀慨鏀�");
+                }
+            }
+
+            // 5. 鏇存柊棰嗙敤璁板綍
             return equipmentUsageRecordMapper.updateById(equipmentUsageRecord);
         }
     }
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
index d76fcf5..275e084 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
@@ -6,18 +6,24 @@
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.CoalFieldDto;
 import com.ruoyi.basic.entity.CoalField;
 import com.ruoyi.basic.entity.CoalInfo;
 import com.ruoyi.basic.entity.CoalValue;
 import com.ruoyi.basic.mapper.CoalFieldMapper;
 import com.ruoyi.basic.mapper.CoalInfoMapper;
+import com.ruoyi.basic.mapper.CoalPlanMapper;
 import com.ruoyi.basic.mapper.CoalValueMapper;
+import com.ruoyi.basic.service.CoalFieldService;
+import com.ruoyi.basic.service.CoalPlanService;
 import com.ruoyi.business.dto.PendingInventoryDto;
 import com.ruoyi.business.entity.OfficialInventory;
 import com.ruoyi.business.entity.PendingInventory;
 import com.ruoyi.business.entity.SalesRecord;
+import com.ruoyi.business.mapper.InventorySummaryMapper;
 import com.ruoyi.business.mapper.OfficialInventoryMapper;
 import com.ruoyi.business.mapper.PendingInventoryMapper;
+import com.ruoyi.business.mapper.SalesRecordMapper;
 import com.ruoyi.business.service.InputInventoryRecordService;
 import com.ruoyi.business.service.InventorySummaryService;
 import com.ruoyi.business.service.PendingInventoryService;
@@ -29,6 +35,7 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -36,6 +43,7 @@
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -65,32 +73,32 @@
 
     private final InventorySummaryService inventorySummaryService;
 
+    private final CoalFieldService coalFieldService;
+
+    private final CoalPlanService coalPlanService;
+
     @Override
     public IPage<PendingInventoryDto> selectPendingInventoryList(Page page, PendingInventoryDto pendingInventoryDto) {
         // 1. 鏋勫缓涓绘煡璇�
         LambdaQueryWrapper<PendingInventory> queryWrapper = new LambdaQueryWrapper<>();
-        if (StringUtils.isNotBlank(pendingInventoryDto.getSearchAll())) {
-            String searchValue = pendingInventoryDto.getSearchAll();
-            // 1. 鍏堝皾璇曚綔涓烘棩鏈熸煡璇�
-            try {
-                LocalDate RegistrationDate = LocalDate.parse(searchValue);
-                queryWrapper.eq(PendingInventory::getRegistrationDate, RegistrationDate);
-            } catch (DateTimeParseException e) {
-                // 2. 濡傛灉涓嶆槸鏃ユ湡锛屽垯浣滀负鐓ょ鍚嶇О鏌ヨ
-                LambdaQueryWrapper<CoalInfo> coalQueryWrapper = new LambdaQueryWrapper<>();
-                coalQueryWrapper.like(CoalInfo::getCoal, searchValue);
-                List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalQueryWrapper);
-                if (!coalInfos.isEmpty()) {
-                    // 鎻愬彇鎵�鏈夊尮閰嶇殑鐓ょID
-                    List<Long> coalIds = coalInfos.stream()
-                            .map(CoalInfo::getId)
-                            .collect(Collectors.toList());
-                    // 浣跨敤in鏌ヨ鍖归厤浠绘剰涓�涓叅绉岻D
-                    queryWrapper.in(PendingInventory::getCoalId, coalIds);
-                } else {
-                    // 3. 濡傛灉鎵句笉鍒扮叅绉嶏紝鍙互杩斿洖绌虹粨鏋�
-                    queryWrapper.eq(PendingInventory::getCoalId, "-1"); // 浣跨敤涓嶅彲鑳藉瓨鍦ㄧ殑ID
-                }
+        if (pendingInventoryDto.getRegistrationDate() != null) {
+            queryWrapper.eq(PendingInventory::getRegistrationDate, pendingInventoryDto.getRegistrationDate());
+        }
+
+        // 鎸夌叅绉嶅悕绉版煡璇�
+        if (StringUtils.isNotBlank(pendingInventoryDto.getCoal())) {
+            LambdaQueryWrapper<CoalInfo> coalQueryWrapper = new LambdaQueryWrapper<>();
+            coalQueryWrapper.like(CoalInfo::getCoal, pendingInventoryDto.getCoal());
+            List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalQueryWrapper);
+
+            if (!coalInfos.isEmpty()) {
+                List<Long> coalIds = coalInfos.stream()
+                        .map(CoalInfo::getId)
+                        .collect(Collectors.toList());
+                queryWrapper.in(PendingInventory::getCoalId, coalIds);
+            } else {
+                // 濡傛灉娌℃湁鍖归厤鐨勭叅绉嶏紝鐩存帴杩斿洖绌虹粨鏋�
+                queryWrapper.eq(PendingInventory::getCoalId, -1L); // 浣跨敤涓嶅彲鑳藉瓨鍦ㄧ殑ID
             }
         }
 
@@ -286,4 +294,10 @@
         }
         return i;
     }
+
+    @Override
+    @Transactional
+    public int addPending(PendingInventoryDto pendingInventoryDto) {
+      return 1;
+    }
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java
index 6a2d46c..eef4183 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java
@@ -287,10 +287,8 @@
         LocalDate currentDate = LocalDate.now();
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         String formattedDate = currentDate.format(formatter);
-        // 甯搁噺瀹氫箟锛氫繚鐣�2浣嶅皬鏁帮紝鍥涜垗浜斿叆妯″紡
         final int SCALE = 2;
         final RoundingMode ROUNDING_MODE = RoundingMode.HALF_UP;
-        // 绋庣巼13%锛岀敤瀛楃涓叉瀯閫燘igDecimal閬垮厤绮惧害璇樊
         final BigDecimal TAX_RATE = new BigDecimal("1.13");
 
         for (Production p : list) {
@@ -300,24 +298,23 @@
             pending.setUnit("t");
             pending.setSupplierName(formattedDate + " - " + "鐢熶骇鍔犲伐鍏ュ簱");
 
-            // 1. 闈炵┖澶勭悊锛氶伩鍏峮ull瀵艰嚧鐨勮繍绠楀紓甯�
+            // 闈炵┖澶勭悊
             BigDecimal totalCost = p.getTotalCost() == null ? BigDecimal.ZERO : p.getTotalCost();
             BigDecimal productionQuantity = p.getProductionQuantity() == null ? BigDecimal.ZERO : p.getProductionQuantity();
 
-            // 2. 鍚◣鎬讳环 = 鍚◣鍗曚环 * 浜ч噺 鈫� 淇濈暀2浣嶅皬鏁�
+            // 鍚◣鎬讳环
             BigDecimal totalPriceIncludingTax = totalCost.multiply(productionQuantity)
                     .setScale(SCALE, ROUNDING_MODE);
             pending.setTotalPriceIncludingTax(totalPriceIncludingTax);
 
-            // 3. 鍚◣鍗曚环 鈫� 鐩存帴淇濈暀2浣嶅皬鏁�
+            // 鍚◣鍗曚环
             pending.setPriceIncludingTax(totalCost.setScale(SCALE, ROUNDING_MODE));
 
-            // 4. 涓嶅惈绋庡崟浠� = 鍚◣鍗曚环 / 1.13 鈫� 鍏堥珮绮惧害璁$畻锛屽啀淇濈暀2浣�
-            BigDecimal priceExcludingTax = totalCost.divide(TAX_RATE, 10, ROUNDING_MODE) // 涓棿淇濈暀10浣嶉槻璇樊
-                    .setScale(SCALE, ROUNDING_MODE);   // 鏈�缁堜繚鐣�2浣�
+            // 涓嶅惈绋庡崟浠凤紙鐩存帴淇濈暀2浣嶅皬鏁帮級
+            BigDecimal priceExcludingTax = totalCost.divide(TAX_RATE, SCALE, ROUNDING_MODE);
             pending.setPriceExcludingTax(priceExcludingTax);
 
-            // 5. 涓嶅惈绋庢�讳环 = 涓嶅惈绋庡崟浠� * 浜ч噺 鈫� 淇濈暀2浣嶅皬鏁�
+            // 涓嶅惈绋庢�讳环
             BigDecimal totalPriceExcludingTax = priceExcludingTax.multiply(productionQuantity)
                     .setScale(SCALE, ROUNDING_MODE);
             pending.setTotalPriceExcludingTax(totalPriceExcludingTax);
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 145cf5b..01c3e54 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
@@ -69,28 +69,25 @@
         // 1. 鍒涘缓鏌ヨ鏉′欢锛屾寜鍒涘缓鏃堕棿鍊掑簭鎺掑簭
         LambdaQueryWrapper<SalesRecord> queryWrapper = new LambdaQueryWrapper<>();
 
-        if (StringUtils.isNotBlank(salesRecordDto.getSearchAll())) {
-            String searchValue = salesRecordDto.getSearchAll();
-            // 1. 鍏堝皾璇曚綔涓烘棩鏈熸煡璇�
-            try {
-                LocalDate saleDate = LocalDate.parse(searchValue);
-                queryWrapper.eq(SalesRecord::getSaleDate, saleDate);
-            } catch (DateTimeParseException e) {
-                // 2. 濡傛灉涓嶆槸鏃ユ湡锛屽垯浣滀负鐓ょ鍚嶇О鏌ヨ
-                LambdaQueryWrapper<CoalInfo> coalQueryWrapper = new LambdaQueryWrapper<>();
-                coalQueryWrapper.like(CoalInfo::getCoal, searchValue);
-                List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalQueryWrapper);
-                if (!coalInfos.isEmpty()) {
-                    // 鎻愬彇鎵�鏈夊尮閰嶇殑鐓ょID
-                    List<Long> coalIds = coalInfos.stream()
-                            .map(CoalInfo::getId)
-                            .collect(Collectors.toList());
-                    // 浣跨敤in鏌ヨ鍖归厤浠绘剰涓�涓叅绉岻D
-                    queryWrapper.in(SalesRecord::getCoalId, coalIds);
-                } else {
-                    // 3. 濡傛灉鎵句笉鍒扮叅绉嶏紝鍙互杩斿洖绌虹粨鏋�
-                    queryWrapper.eq(SalesRecord::getCoalId, "-1"); // 浣跨敤涓嶅彲鑳藉瓨鍦ㄧ殑ID
-                }
+        // 鎸夋棩鏈熸煡璇�
+        if (salesRecordDto.getSaleDate() != null) {
+            queryWrapper.eq(SalesRecord::getSaleDate, salesRecordDto.getSaleDate());
+        }
+
+        // 鎸夌叅绉嶅悕绉版煡璇�
+        if (StringUtils.isNotBlank(salesRecordDto.getCoal())) {
+            LambdaQueryWrapper<CoalInfo> coalQueryWrapper = new LambdaQueryWrapper<>();
+            coalQueryWrapper.like(CoalInfo::getCoal, salesRecordDto.getCoal());
+            List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalQueryWrapper);
+
+            if (!coalInfos.isEmpty()) {
+                List<Long> coalIds = coalInfos.stream()
+                        .map(CoalInfo::getId)
+                        .collect(Collectors.toList());
+                queryWrapper.in(SalesRecord::getCoalId, coalIds);
+            } else {
+                // 濡傛灉娌℃湁鍖归厤鐨勭叅绉嶏紝鐩存帴杩斿洖绌虹粨鏋�
+                queryWrapper.eq(SalesRecord::getCoalId, -1L); // 浣跨敤涓嶅彲鑳藉瓨鍦ㄧ殑ID
             }
         }
 
diff --git a/main-business/src/main/resources/db/migration/postgresql/V20250613112800__create_table_production_inventory.sql b/main-business/src/main/resources/db/migration/postgresql/V20250613112800__create_table_production_inventory.sql
index 2243aab..45c8d38 100644
--- a/main-business/src/main/resources/db/migration/postgresql/V20250613112800__create_table_production_inventory.sql
+++ b/main-business/src/main/resources/db/migration/postgresql/V20250613112800__create_table_production_inventory.sql
@@ -16,7 +16,7 @@
 );
 
 -- 娣诲姞琛ㄦ敞閲�
-COMMENT ON TABLE production_inventory IS '鐢熶骇涓昏〃';
+COMMENT ON TABLE production_inventory IS '鐢熶骇搴撳瓨浣跨敤璁板綍琛�';
 
 -- 娣诲姞瀛楁娉ㄩ噴
 COMMENT ON COLUMN production_inventory.id IS '涓婚敭ID';
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java
index 595d5fb..321646e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java
@@ -1,12 +1,15 @@
 package com.ruoyi.web.controller.init;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.basic.dto.CoalFieldDto;
 import com.ruoyi.basic.entity.City;
+import com.ruoyi.basic.entity.CoalField;
 import com.ruoyi.basic.entity.District;
 import com.ruoyi.basic.entity.Province;
-import com.ruoyi.basic.mapper.CityMapper;
-import com.ruoyi.basic.mapper.DistrictMapper;
-import com.ruoyi.basic.mapper.ProvinceMapper;
+import com.ruoyi.basic.mapper.*;
+import com.ruoyi.basic.service.CoalFieldService;
+import com.ruoyi.basic.service.CoalPlanService;
+import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.web.controller.init.dto.AreaDTO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,7 +18,11 @@
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Slf4j
 @Component
@@ -26,6 +33,10 @@
     private CityMapper cityMapper;
     @Autowired
     private DistrictMapper districtMapper;
+    @Autowired
+    private CoalFieldService coalFieldService;
+    @Autowired
+    private CoalPlanService coalPlanService;
 
     /**
      * 椤圭洰鍚姩鏃堕渶瑕佹墽琛岀殑鏂规硶
@@ -37,6 +48,8 @@
     public void run(String... args) throws Exception {
         // 鍒濆鍖栫渷甯傚尯
         initRegion();
+        // 鍒濆鏂板閰嶇叅璁$畻鍣ㄤ腑鐨勫瓧娈靛拰鏂规
+        initCoalFields();
     }
 
     private void initRegion() {
@@ -105,4 +118,21 @@
 
 
     }
+
+    private void initCoalFields() {
+
+        List<CoalFieldDto> fields = Stream.of("鍙戠儹閲�", "纭垎", "鐏板垎", "姘村垎")
+                .map(CoalFieldDto::from)
+                .toList();
+        // 鎵归噺鑾峰彇宸插瓨鍦ㄧ殑 fieldNames
+        Set<String> existingFieldNames = coalFieldService.getFieldNamesByNames(
+                fields.stream().map(CoalFieldDto::getFieldName).collect(Collectors.toSet())
+        );
+
+        fields.forEach(field -> {
+            if (!existingFieldNames.contains(field.getFieldName())) {
+                coalFieldService.addOrEditCoalField(field);
+            }
+        });
+    }
 }

--
Gitblit v1.9.3