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/EquipmentUsageDetailService.java                           |   20 +
 main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java                      |    4 
 main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageDetailDto.java                                   |   25 ++
 main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageRecord.java                                   |   10 
 main-business/src/main/java/com/ruoyi/business/entity/PurchaseRegistration.java                                   |    5 
 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java                  |  191 +++++++++++----
 main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java                      |    2 
 main-business/src/main/resources/db/migration/postgresql/V20250707155600__create_table_equipment_usage_record.sql |   76 +++--
 main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java                     |   43 +++
 main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageRecordDto.java                                   |    2 
 main-business/src/main/resources/db/migration/postgresql/V20250723134500__create_table_equipment_usage_detail.sql |   53 ++++
 main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageDetail.java                                   |   59 ++++
 main-business/src/main/resources/db/migration/postgresql/V20250604111200__create_table_official_inventory.sql     |    3 
 main-business/src/main/java/com/ruoyi/business/mapper/EquipmentUsageDetailMapper.java                             |   18 +
 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java                  |  118 +++++++++
 main-business/src/main/resources/db/migration/postgresql/V20250603160101__create_table_purchase_registration.sql  |    3 
 main-business/src/main/resources/mapper/EquipmentUsageDetailMapper.xml                                            |   31 ++
 17 files changed, 574 insertions(+), 89 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
new file mode 100644
index 0000000..466c033
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java
@@ -0,0 +1,43 @@
+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;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鏄庣粏琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author ld
+ * @since 2025-07-23
+ */
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/equipmentUsageDetail")
+public class EquipmentUsageDetailController {
+
+    private EquipmentUsageDetailService equipmentUsageDetailService;
+
+    /**
+     * 璁惧棰嗙敤褰掕繕璁板綍鏌ヨ
+     */
+    @GetMapping("/list")
+    public R<IPage<EquipmentUsageDetailDto>> list(Page<EquipmentUsageDetail> page,EquipmentUsageDetailDto equipmentUsageDetailDto) {
+        IPage<EquipmentUsageDetailDto> list = equipmentUsageDetailService.selectEquipmentUsageDetailList(page,equipmentUsageDetailDto);
+        return R.ok(list);
+    }
+
+}
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageDetailDto.java b/main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageDetailDto.java
new file mode 100644
index 0000000..4d5ea0b
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/dto/EquipmentUsageDetailDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.business.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.business.entity.EquipmentUsageDetail;
+import lombok.Data;
+
+@Data
+public class EquipmentUsageDetailDto extends EquipmentUsageDetail {
+
+    /**
+     * 璁惧缂栧彿
+     */
+    @TableField(value = "equipment_no")
+    private String equipmentNo;
+    /**
+     * 璁惧鍚嶇О
+     */
+    @TableField(value = "equipment_name")
+    private String equipmentName;
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    @TableField(value = "specification")
+    private String specification;
+}
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 dbfe153..81dfc76 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
@@ -11,4 +11,6 @@
     private String equipmentName; //璁惧鍚嶇О
 
     private String userName; //棰嗙敤浜�
+
+    private Integer totalReturnNo; //宸插綊杩樻�绘暟
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageDetail.java b/main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageDetail.java
new file mode 100644
index 0000000..fb5e628
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageDetail.java
@@ -0,0 +1,59 @@
+package com.ruoyi.business.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import com.ruoyi.common.core.domain.MyBaseEntity;
+
+/**
+ * 璁惧浣跨敤鏄庣粏琛� 瀹炰綋绫�
+ *
+ * @author ld
+ * @date 2025-07-23
+ */
+@Data
+@TableName("equipment_usage_detail")
+public class EquipmentUsageDetail extends MyBaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 鍏宠仈鐨勪娇鐢ㄨ褰旾D
+     */
+    @TableField(value = "usage_id")
+    private Long usageId;
+    /**
+     * 鍏宠仈鐨勮澶嘔D
+     */
+    @TableField(value = "equipment_id")
+    private Long equipmentId;
+    /**
+     * 鎿嶄綔绫诲瀷锛�1-棰嗙敤锛�2-褰掕繕
+     */
+    @TableField(value = "operation_type")
+    private Integer operationType;
+    /**
+     * 鎿嶄綔鏁伴噺
+     */
+    @TableField(value = "quantity")
+    private Integer quantity;
+    /**
+     * 鎿嶄綔浜篒D
+     */
+    @TableField(value = "operator_id")
+    private Long operatorId;
+    /**
+     * 鎿嶄綔浜�
+     */
+    @TableField(value = "operator")
+    private String operator;
+    /**
+     * 澶囨敞
+     */
+    @TableField(value = "remark")
+    private String remark;
+}
\ No newline at end of file
diff --git a/main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageRecord.java b/main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageRecord.java
index 5f20912..b9c9e9b 100644
--- a/main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageRecord.java
+++ b/main-business/src/main/java/com/ruoyi/business/entity/EquipmentUsageRecord.java
@@ -1,6 +1,7 @@
 package com.ruoyi.business.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import com.ruoyi.common.core.domain.MyBaseEntity;
 
@@ -29,10 +30,15 @@
     @TableField(value = "equipment_id")
     private Long equipmentId;
     /**
-     * 浣跨敤鏁伴噺
+     * 棰嗙敤鏁伴噺
      */
     @TableField(value = "usage_quantity")
     private Integer usageQuantity;
+    /**
+     * 褰掕繕鏁伴噺
+     */
+    @TableField(value = "return_quantity")
+    private Integer returnQuantity;
     /**
      * 浣跨敤浜篒D
      */
@@ -52,11 +58,13 @@
      * 浣跨敤寮�濮嬫椂闂�
      */
     @TableField(value = "usage_start_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate usageStartTime;
     /**
      * 浣跨敤缁撴潫鏃堕棿
      */
     @TableField(value = "usage_end_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate usageEndTime;
     /**
      * 澶囨敞淇℃伅
diff --git a/main-business/src/main/java/com/ruoyi/business/entity/PurchaseRegistration.java b/main-business/src/main/java/com/ruoyi/business/entity/PurchaseRegistration.java
index 482e72e..890aa3b 100644
--- a/main-business/src/main/java/com/ruoyi/business/entity/PurchaseRegistration.java
+++ b/main-business/src/main/java/com/ruoyi/business/entity/PurchaseRegistration.java
@@ -88,4 +88,9 @@
      */
     @TableField(value = "registration_date")
     private LocalDate registrationDate;
+    /**
+     * 杩愯垂
+     */
+    @TableField(value = "freight")
+    private BigDecimal freight;
 }
\ No newline at end of file
diff --git a/main-business/src/main/java/com/ruoyi/business/mapper/EquipmentUsageDetailMapper.java b/main-business/src/main/java/com/ruoyi/business/mapper/EquipmentUsageDetailMapper.java
new file mode 100644
index 0000000..5b83c3a
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/mapper/EquipmentUsageDetailMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.business.entity.EquipmentUsageDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鏄庣粏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author ld
+ * @since 2025-07-23
+ */
+@Mapper
+public interface EquipmentUsageDetailMapper extends BaseMapper<EquipmentUsageDetail> {
+
+}
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
new file mode 100644
index 0000000..6dd1ff2
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java
@@ -0,0 +1,20 @@
+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;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鏄庣粏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author ld
+ * @since 2025-07-23
+ */
+public interface EquipmentUsageDetailService extends IService<EquipmentUsageDetail> {
+
+    IPage<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(Page<EquipmentUsageDetail> page, EquipmentUsageDetailDto equipmentUsageDetailDto);
+}
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
new file mode 100644
index 0000000..cb19b1a
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java
@@ -0,0 +1,118 @@
+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.ruoyi.business.dto.EquipmentUsageDetailDto;
+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.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 java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鏄庣粏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author ld
+ * @since 2025-07-23
+ */
+@Service
+@RequiredArgsConstructor
+public class EquipmentUsageDetailServiceImpl extends ServiceImpl<EquipmentUsageDetailMapper, EquipmentUsageDetail> implements EquipmentUsageDetailService {
+
+    private final EquipmentUsageDetailMapper equipmentUsageDetailMapper;
+
+    private final EquipmentUsageRecordMapper equipmentUsageRecordMapper;
+
+    private final EquipmentManagementMapper equipmentManagementMapper;
+
+
+    @Override
+    public IPage<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(Page<EquipmentUsageDetail> page,EquipmentUsageDetailDto equipmentUsageDetailDto) {
+        // 蹇呴』浼犻�抲sageId鍙傛暟
+        if (equipmentUsageDetailDto.getUsageId() == null) {
+            throw new BaseException("璇烽�夋嫨浣跨敤璁板綍");
+        }
+        LambdaQueryWrapper<EquipmentUsageDetail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EquipmentUsageDetail::getUsageId, equipmentUsageDetailDto.getUsageId());
+
+        Page<EquipmentUsageDetail> entityPage = equipmentUsageDetailMapper.selectPage(page, queryWrapper);
+        IPage<EquipmentUsageDetailDto> dtoPage = new Page<>();
+        BeanUtils.copyProperties(entityPage, dtoPage);
+        // 鍏堣幏鍙栦富琛ㄨ褰�
+        List<Long> usageIds = entityPage.getRecords().stream()
+                .map(EquipmentUsageDetail::getUsageId)
+                .distinct()
+                .collect(Collectors.toList());
+
+        if (!usageIds.isEmpty()) {
+            // 鏌ヨ鍏宠仈鐨勪娇鐢ㄨ褰�
+            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());
+
+            // 鏌ヨ璁惧淇℃伅
+            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<>();
+            }
+
+            // 鏋勫缓浣跨敤璁板綍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;
+    }
+}
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);
     }
 }
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 1e6c5ad..e4532e2 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
@@ -316,7 +316,7 @@
             // 2. 鍑嗗寰呭叆搴撹褰�
             Long userId = SecurityUtils.getUserId();
             PendingInventory pendingInventory = new PendingInventory();
-            pendingInventory.setUnit("t");
+            pendingInventory.setUnit("鍚�");
             pendingInventory.setRegistrantId(userId);
             pendingInventory.setRegistrationDate(LocalDate.now());
             pendingInventory.setSupplierName("閰嶇叅璁$畻鍣ㄦ柟妗堝叆搴�");
@@ -352,7 +352,7 @@
 
             // 5. 璁剧疆浠锋牸鍜屾暟閲�
             BigDecimal cost = safeGetBigDecimal(map, "cost");
-            BigDecimal tonnage = safeGetBigDecimal(map, "totalTonnage");
+            BigDecimal tonnage = safeGetBigDecimal(map, "createCoalQuantity");
 
             if (cost == null || tonnage == null) {
                 throw new BaseException("鎴愭湰鎴栧惃浣嶄笉鑳戒负绌�");
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 eef4183..3dab18e 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
@@ -295,7 +295,7 @@
             PendingInventory pending = new PendingInventory();
             pending.setCoalId(p.getCoalId());
             pending.setInventoryQuantity(p.getProductionQuantity());
-            pending.setUnit("t");
+            pending.setUnit("鍚�");
             pending.setSupplierName(formattedDate + " - " + "鐢熶骇鍔犲伐鍏ュ簱");
 
             // 闈炵┖澶勭悊
diff --git a/main-business/src/main/resources/db/migration/postgresql/V20250603160101__create_table_purchase_registration.sql b/main-business/src/main/resources/db/migration/postgresql/V20250603160101__create_table_purchase_registration.sql
index d24a052..51c1cb1 100644
--- a/main-business/src/main/resources/db/migration/postgresql/V20250603160101__create_table_purchase_registration.sql
+++ b/main-business/src/main/resources/db/migration/postgresql/V20250603160101__create_table_purchase_registration.sql
@@ -15,6 +15,7 @@
     total_price_excluding_tax DECIMAL(10, 2) NOT NULL,           -- 涓嶅惈绋庢�讳环锛屼笉鍏佽涓虹┖
     registrant_id             BIGINT         NOT NULL,           -- 鐧昏浜篿d锛屼笉鍏佽涓虹┖
     registration_date         DATE           NOT NULL,           -- 鐧昏鏃ユ湡锛屼笉鍏佽涓虹┖
+    freight                   DECIMAL(10, 2) NOT NULL,           -- 杩愯垂
 
     deleted                   INT            NOT NULL DEFAULT 0, -- 杞垹闄ゆ爣蹇楋細0=鏈垹闄わ紝1=宸插垹闄�
     create_by                 VARCHAR(255),                      -- 鍒涘缓浜虹敤鎴峰悕
@@ -39,6 +40,8 @@
 COMMENT ON COLUMN purchase_registration.total_price_excluding_tax IS '涓嶅惈绋庢�讳环';
 COMMENT ON COLUMN purchase_registration.registrant_id IS '鐧昏浜篿d';
 COMMENT ON COLUMN purchase_registration.registration_date IS '鐧昏鏃ユ湡';
+COMMENT ON COLUMN purchase_registration.freight IS '杩愯垂';
+
 COMMENT ON COLUMN purchase_registration.deleted IS '杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�';
 COMMENT ON COLUMN purchase_registration.create_by IS '鍒涘缓璇ヨ褰曠殑鐢ㄦ埛';
 COMMENT ON COLUMN purchase_registration.create_time IS '璁板綍鍒涘缓鏃堕棿';
diff --git a/main-business/src/main/resources/db/migration/postgresql/V20250604111200__create_table_official_inventory.sql b/main-business/src/main/resources/db/migration/postgresql/V20250604111200__create_table_official_inventory.sql
index b40aa8e..5e4b100 100644
--- a/main-business/src/main/resources/db/migration/postgresql/V20250604111200__create_table_official_inventory.sql
+++ b/main-business/src/main/resources/db/migration/postgresql/V20250604111200__create_table_official_inventory.sql
@@ -41,6 +41,9 @@
 COMMENT ON COLUMN official_inventory.registration_date IS '鐧昏鏃ユ湡';
 COMMENT ON COLUMN official_inventory.merge_id IS '鍚堝苟id';
 COMMENT ON COLUMN official_inventory.coal_plan_id IS '鐓よ川鏂规id';
+COMMENT ON COLUMN official_inventory.pending_id IS '寰呭叆搴搃d';
+COMMENT ON COLUMN official_inventory.price_excluding_tax IS '涓嶅惈绋庡崟浠�';
+COMMENT ON COLUMN official_inventory.total_price_excluding_tax IS '涓嶅惈绋庢�讳环';
 
 COMMENT ON COLUMN official_inventory.deleted IS '杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�';
 COMMENT ON COLUMN official_inventory.create_by IS '鍒涘缓璇ヨ褰曠殑鐢ㄦ埛';
diff --git a/main-business/src/main/resources/db/migration/postgresql/V20250707155600__create_table_equipment_usage_record.sql b/main-business/src/main/resources/db/migration/postgresql/V20250707155600__create_table_equipment_usage_record.sql
index af01796..d67ea18 100644
--- a/main-business/src/main/resources/db/migration/postgresql/V20250707155600__create_table_equipment_usage_record.sql
+++ b/main-business/src/main/resources/db/migration/postgresql/V20250707155600__create_table_equipment_usage_record.sql
@@ -1,39 +1,57 @@
 -- 鍒涘缓璁惧浣跨敤璁板綍琛� equipment_usage_record
 CREATE TABLE equipment_usage_record
 (
-id                   BIGSERIAL          PRIMARY KEY,        -- 涓婚敭ID锛岃嚜鍔ㄩ�掑
-    equipment_id         BIGINT         NOT NULL,           -- 璁惧ID锛屽叧鑱旇澶囦俊鎭〃锛屼笉鍏佽涓虹┖
-    usage_quantity       INT            NOT NULL,           -- 浣跨敤鏁伴噺锛屼笉鍏佽涓虹┖
-    user_id              BIGINT         NOT NULL,           -- 浣跨敤浜篒D锛屽叧鑱旂敤鎴疯〃锛屼笉鍏佽涓虹┖
-    department_id        BIGINT         ,                   -- 閮ㄩ棬ID锛屽叧鑱旈儴闂ㄨ〃锛屼笉鍏佽涓虹┖
-    equipment_status     BIGINT    NOT NULL,                -- 璁惧鐘舵��:1.浣跨敤涓� 2.宸插綊杩�
-    usage_start_time     TIMESTAMP      NOT NULL,           -- 浣跨敤寮�濮嬫椂闂达紝涓嶅厑璁镐负绌�
-    usage_end_time       TIMESTAMP,                         -- 浣跨敤缁撴潫鏃堕棿锛屽彲涓虹┖锛堟湭褰掕繕鏃讹級
-    remarks              VARCHAR(1000),                     -- 澶囨敞淇℃伅锛屽彲涓虹┖
+    id               BIGSERIAL PRIMARY KEY,        -- 涓婚敭ID锛岃嚜鍔ㄩ�掑
+    equipment_id     BIGINT    NOT NULL,           -- 璁惧ID锛屽叧鑱旇澶囦俊鎭〃锛屼笉鍏佽涓虹┖
+    usage_quantity   INT       NOT NULL,           -- 棰嗙敤鏁伴噺锛屼笉鍏佽涓虹┖
+    return_quantity  INT,                          -- 褰掕繕鏁伴噺
+    user_id          BIGINT    NOT NULL,           -- 浣跨敤浜篒D锛屽叧鑱旂敤鎴疯〃锛屼笉鍏佽涓虹┖
+    department_id    BIGINT,                       -- 閮ㄩ棬ID锛屽叧鑱旈儴闂ㄨ〃锛屼笉鍏佽涓虹┖
+    equipment_status BIGINT    NOT NULL,           -- 璁惧鐘舵��:1.浣跨敤涓� 2.宸插綊杩�
+    usage_start_time TIMESTAMP NOT NULL,           -- 浣跨敤寮�濮嬫椂闂达紝涓嶅厑璁镐负绌�
+    usage_end_time   TIMESTAMP,                    -- 浣跨敤缁撴潫鏃堕棿锛屽彲涓虹┖锛堟湭褰掕繕鏃讹級
+    remarks          VARCHAR(1000),                -- 澶囨敞淇℃伅锛屽彲涓虹┖
 
-    deleted              INT            NOT NULL DEFAULT 0, -- 杞垹闄ゆ爣蹇楋細0=鏈垹闄わ紝1=宸插垹闄�
-    create_by            VARCHAR(255),                      -- 鍒涘缓浜虹敤鎴峰悕
-    create_time          TIMESTAMP WITHOUT TIME ZONE,       -- 鍒涘缓鏃堕棿锛岄粯璁ゅ綋鍓嶆椂闂�
-    update_by            VARCHAR(255),                      -- 鏈�鍚庢洿鏂颁汉鐢ㄦ埛鍚�
-    update_time          TIMESTAMP WITHOUT TIME ZONE        -- 鏈�鍚庢洿鏂版椂闂�
+    deleted          INT       NOT NULL DEFAULT 0, -- 杞垹闄ゆ爣蹇楋細0=鏈垹闄わ紝1=宸插垹闄�
+    create_by        VARCHAR(255),                 -- 鍒涘缓浜虹敤鎴峰悕
+    create_time      TIMESTAMP WITHOUT TIME ZONE,  -- 鍒涘缓鏃堕棿锛岄粯璁ゅ綋鍓嶆椂闂�
+    update_by        VARCHAR(255),                 -- 鏈�鍚庢洿鏂颁汉鐢ㄦ埛鍚�
+    update_time      TIMESTAMP WITHOUT TIME ZONE   -- 鏈�鍚庢洿鏂版椂闂�
 );
 
 -- 涓鸿〃娣诲姞娉ㄩ噴
-COMMENT ON TABLE equipment_usage_record IS '璁惧浣跨敤璁板綍琛�';
+COMMENT
+ON TABLE equipment_usage_record IS '璁惧浣跨敤璁板綍琛�';
 
 -- 涓哄瓧娈垫坊鍔犳敞閲�
-COMMENT ON COLUMN equipment_usage_record.id IS '涓婚敭ID';
-COMMENT ON COLUMN equipment_usage_record.equipment_id IS '璁惧ID';
-COMMENT ON COLUMN equipment_usage_record.usage_quantity IS '浣跨敤鏁伴噺';
-COMMENT ON COLUMN equipment_usage_record.user_id IS '浣跨敤浜篒D';
-COMMENT ON COLUMN equipment_usage_record.department_id IS '閮ㄩ棬ID';
-COMMENT ON COLUMN equipment_usage_record.equipment_status IS '璁惧鐘舵��:1.浣跨敤涓� 2.宸插綊杩�';
-COMMENT ON COLUMN equipment_usage_record.usage_start_time IS '浣跨敤寮�濮嬫椂闂�';
-COMMENT ON COLUMN equipment_usage_record.usage_end_time IS '浣跨敤缁撴潫鏃堕棿';
-COMMENT ON COLUMN equipment_usage_record.remarks IS '澶囨敞淇℃伅';
+COMMENT
+ON COLUMN equipment_usage_record.id IS '涓婚敭ID';
+COMMENT
+ON COLUMN equipment_usage_record.equipment_id IS '璁惧ID';
+COMMENT
+ON COLUMN equipment_usage_record.usage_quantity IS '棰嗙敤鏁伴噺';
+COMMENT
+ON COLUMN equipment_usage_record.return_quantity IS '褰掕繕鏁伴噺';
+COMMENT
+ON COLUMN equipment_usage_record.user_id IS '浣跨敤浜篒D';
+COMMENT
+ON COLUMN equipment_usage_record.department_id IS '閮ㄩ棬ID';
+COMMENT
+ON COLUMN equipment_usage_record.equipment_status IS '璁惧鐘舵��:1.浣跨敤涓� 2.宸插綊杩�';
+COMMENT
+ON COLUMN equipment_usage_record.usage_start_time IS '浣跨敤寮�濮嬫椂闂�';
+COMMENT
+ON COLUMN equipment_usage_record.usage_end_time IS '浣跨敤缁撴潫鏃堕棿';
+COMMENT
+ON COLUMN equipment_usage_record.remarks IS '澶囨敞淇℃伅';
 
-COMMENT ON COLUMN equipment_usage_record.deleted IS '杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�';
-COMMENT ON COLUMN equipment_usage_record.create_by IS '鍒涘缓璇ヨ褰曠殑鐢ㄦ埛';
-COMMENT ON COLUMN equipment_usage_record.create_time IS '璁板綍鍒涘缓鏃堕棿';
-COMMENT ON COLUMN equipment_usage_record.update_by IS '鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴�';
-COMMENT ON COLUMN equipment_usage_record.update_time IS '璁板綍鏈�鍚庢洿鏂版椂闂�';
\ No newline at end of file
+COMMENT
+ON COLUMN equipment_usage_record.deleted IS '杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�';
+COMMENT
+ON COLUMN equipment_usage_record.create_by IS '鍒涘缓璇ヨ褰曠殑鐢ㄦ埛';
+COMMENT
+ON COLUMN equipment_usage_record.create_time IS '璁板綍鍒涘缓鏃堕棿';
+COMMENT
+ON COLUMN equipment_usage_record.update_by IS '鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴�';
+COMMENT
+ON COLUMN equipment_usage_record.update_time IS '璁板綍鏈�鍚庢洿鏂版椂闂�';
\ No newline at end of file
diff --git a/main-business/src/main/resources/db/migration/postgresql/V20250723134500__create_table_equipment_usage_detail.sql b/main-business/src/main/resources/db/migration/postgresql/V20250723134500__create_table_equipment_usage_detail.sql
new file mode 100644
index 0000000..0882436
--- /dev/null
+++ b/main-business/src/main/resources/db/migration/postgresql/V20250723134500__create_table_equipment_usage_detail.sql
@@ -0,0 +1,53 @@
+-- 鍒涘缓璁惧浣跨敤鏄庣粏琛� equipment_usage_detail
+DROP TABLE IF EXISTS equipment_usage_detail;
+
+CREATE TABLE equipment_usage_detail
+(
+    id             BIGSERIAL PRIMARY KEY,       -- 涓婚敭ID锛岃嚜鍔ㄩ�掑
+    usage_id       BIGINT NOT NULL,             -- 鍏宠仈鐨勪娇鐢ㄨ褰旾D
+    equipment_id   BIGINT NOT NULL,             -- 鍏宠仈鐨勮澶嘔D
+    operation_type INT    NOT NULL,             -- 鎿嶄綔绫诲瀷锛�1-棰嗙敤锛�2-褰掕繕
+    quantity       INT    NOT NULL,             -- 鎿嶄綔鏁伴噺
+    operator_id    BIGINT NOT NULL,             -- 鎿嶄綔浜篒D
+    operator       VARCHAR(255),                -- 鎿嶄綔浜�
+    remark         VARCHAR(255),                -- 澶囨敞
+
+    deleted        INT    NOT NULL DEFAULT 0,   -- 杞垹闄ゆ爣蹇楋細0=鏈垹闄わ紝1=宸插垹闄�
+    create_by      VARCHAR(255),                -- 鍒涘缓浜虹敤鎴峰悕
+    create_time    TIMESTAMP WITHOUT TIME ZONE, -- 鍒涘缓鏃堕棿锛岄粯璁ゅ綋鍓嶆椂闂�
+    update_by      VARCHAR(255),                -- 鏈�鍚庢洿鏂颁汉鐢ㄦ埛鍚�
+    update_time    TIMESTAMP WITHOUT TIME ZONE  -- 鏈�鍚庢洿鏂版椂闂�
+);
+
+-- 涓鸿〃娣诲姞娉ㄩ噴
+COMMENT
+ON TABLE equipment_usage_detail IS '璁惧浣跨敤鏄庣粏琛�';
+
+-- 涓哄瓧娈垫坊鍔犳敞閲�
+COMMENT
+ON COLUMN equipment_usage_detail.id IS '涓婚敭ID';
+COMMENT
+ON COLUMN equipment_usage_detail.usage_id IS '鍏宠仈鐨勪娇鐢ㄨ褰旾D';
+COMMENT
+ON COLUMN equipment_usage_detail.equipment_id IS '鍏宠仈鐨勮澶嘔D';
+COMMENT
+ON COLUMN equipment_usage_detail.operation_type IS '鎿嶄綔绫诲瀷锛�1-棰嗙敤锛�2-褰掕繕';
+COMMENT
+ON COLUMN equipment_usage_detail.quantity IS '鎿嶄綔鏁伴噺';
+COMMENT
+ON COLUMN equipment_usage_detail.operator_id IS '鎿嶄綔浜篒D';
+COMMENT
+ON COLUMN equipment_usage_detail.operator IS '鎿嶄綔浜�';
+COMMENT
+ON COLUMN equipment_usage_detail.remark IS '澶囨敞';
+
+COMMENT
+ON COLUMN equipment_usage_detail.deleted IS '杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�';
+COMMENT
+ON COLUMN equipment_usage_detail.create_by IS '鍒涘缓璇ヨ褰曠殑鐢ㄦ埛';
+COMMENT
+ON COLUMN equipment_usage_detail.create_time IS '璁板綍鍒涘缓鏃堕棿';
+COMMENT
+ON COLUMN equipment_usage_detail.update_by IS '鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴�';
+COMMENT
+ON COLUMN equipment_usage_detail.update_time IS '璁板綍鏈�鍚庢洿鏂版椂闂�';
\ No newline at end of file
diff --git a/main-business/src/main/resources/mapper/EquipmentUsageDetailMapper.xml b/main-business/src/main/resources/mapper/EquipmentUsageDetailMapper.xml
new file mode 100644
index 0000000..0b665c9
--- /dev/null
+++ b/main-business/src/main/resources/mapper/EquipmentUsageDetailMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.business.mapper.EquipmentUsageDetailMapper">
+
+        <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+        <resultMap id="BaseResultMap" type="com.ruoyi.business.entity.EquipmentUsageDetail">
+                    <id column="id" property="id" />
+                <result column="deleted" property="deleted" />
+                <result column="create_by" property="createBy" />
+                <result column="create_time" property="createTime" />
+                <result column="update_by" property="updateBy" />
+                <result column="update_time" property="updateTime" />
+                    <result column="usage_id" property="usageId" />
+                    <result column="operation_type" property="operationType" />
+                    <result column="quantity" property="quantity" />
+                    <result column="operator_id" property="operatorId" />
+                    <result column="operator" property="operator" />
+                    <result column="remark" property="remark" />
+        </resultMap>
+
+        <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+        <sql id="Base_Column_List">
+                deleted,
+                create_by,
+                create_time,
+                update_by,
+                update_time,
+            id, usage_id, operation_type, quantity, operator_id, operator, remark
+        </sql>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3