From a0a030ec98b711e82720be38c6ea9ddf4a07a22b Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei@zhuguifeideiMac.local>
Date: 星期五, 25 七月 2025 15:08:23 +0800
Subject: [PATCH] Merge branch 'master' of http://lanpucloud.cn:1111/r/herb

---
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryMaintenanceRecordController.java    |  206 +++++++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySpareStockLogController.java        |  247 +++++++++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySparePartsMapper.xml                |    5 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRepairRecordsService.java             |   14 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySpareStockLogMapper.java                |   17 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryMaintenanceRecordMapper.xml         |    5 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryRepairRecordsMapper.xml             |    5 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySparePartsServiceImpl.java        |   19 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRepairRecordsController.java        |  206 +++++++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySparePartsService.java                |   14 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRepairRecordsServiceImpl.java     |   19 
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java                          |   29 +
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySpareStockLogMapper.xml             |    5 
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryMaintenanceRecord.java                  |   90 +++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryMaintenanceRecordService.java         |   14 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySpareStockLogServiceImpl.java     |   19 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySparePartsController.java           |  227 ++++++++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryRepairRecordsMapper.java                |   17 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryMaintenanceRecordServiceImpl.java |   19 
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareStockLog.java                      |   78 +++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySparePartsMapper.java                   |   17 
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryRepairRecords.java                      |  114 ++++
 jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareParts.java                         |   91 +++
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryMaintenanceRecordMapper.java            |   17 
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySpareStockLogService.java             |   14 
 25 files changed, 1,508 insertions(+), 0 deletions(-)

diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
index 1007d45..2a8392b 100755
--- a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
@@ -91,6 +91,35 @@
     @ApiModelProperty(value = "璁惧IP")
     private String ip;
 
+	/**鍒堕�犲晢*/
+	@Excel(name = "鍒堕�犲晢", width = 15)
+    @ApiModelProperty(value = "鍒堕�犲晢")
+    private String manufacturer;
+	/**璐叆鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "璐叆鏃ユ湡")
+    private Date purchaseDate;
+	/**鍚敤鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍚敤鏃ユ湡")
+    private Date startDate;
+	/**瀹夎浣嶇疆*/
+	@Excel(name = "瀹夎浣嶇疆", width = 15)
+    @ApiModelProperty(value = "瀹夎浣嶇疆")
+    private String location;
+	/**璁惧鐘舵��*/
+	@Excel(name = "璁惧鐘舵��", width = 15, dicCode = "eqp_status")
+	@Dict(dicCode = "eqp_status")
+    @ApiModelProperty(value = "璁惧鐘舵��")
+    private String status;
+	/**鎶ュ簾鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鎶ュ簾鏃ユ湡")
+    private Date scrapDate;
+
     public DryEquipment() {
     }
     public DryEquipment(RealTimeDataVo realTimeDataVo) {
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryMaintenanceRecord.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryMaintenanceRecord.java
new file mode 100644
index 0000000..e14074c
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryMaintenanceRecord.java
@@ -0,0 +1,90 @@
+package org.jeecg.modules.dry.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: dry_maintenance_record
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+@Data
+@TableName("dry_maintenance_record")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="dry_maintenance_record瀵硅薄", description="dry_maintenance_record")
+public class DryMaintenanceRecord implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭ID*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭ID")
+    private Integer id;
+	/**淇濆吇缂栧彿*/
+	@Excel(name = "淇濆吇缂栧彿", width = 15)
+    @ApiModelProperty(value = "淇濆吇缂栧彿")
+    private String planNumber;
+	/**璁惧缂栧彿*/
+	@Excel(name = "璁惧缂栧彿", width = 15, dictTable = "dry_equipment", dicText = "name", dicCode = "id")
+	@Dict(dictTable = "dry_equipment", dicText = "name", dicCode = "id")
+    @ApiModelProperty(value = "璁惧缂栧彿")
+    private String equipmentId;
+	/**淇濆吇鍛ㄦ湡*/
+	@Excel(name = "淇濆吇鍛ㄦ湡", width = 15)
+    @ApiModelProperty(value = "淇濆吇鍛ㄦ湡")
+    private String cycle;
+    /**淇濆吇鏃堕棿*/
+    @Excel(name = "淇濆吇鏃堕棿", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "淇濆吇鏃堕棿")
+    private java.util.Date maintDate;
+	/**淇濆吇浜哄憳*/
+	@Excel(name = "淇濆吇浜哄憳", width = 15)
+    @ApiModelProperty(value = "淇濆吇浜哄憳")
+    private String technician;
+	/**淇濆吇鍐呭*/
+	@Excel(name = "淇濆吇鍐呭", width = 15)
+    @ApiModelProperty(value = "淇濆吇鍐呭")
+    private String content;
+	/**澶囦欢浣跨敤鎯呭喌*/
+	@Excel(name = "澶囦欢浣跨敤鎯呭喌", width = 15)
+    @ApiModelProperty(value = "澶囦欢浣跨敤鎯呭喌")
+    private String spareParts;
+	/**澶囨敞*/
+	@Excel(name = "澶囨敞", width = 15)
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryRepairRecords.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryRepairRecords.java
new file mode 100644
index 0000000..33f8aa0
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryRepairRecords.java
@@ -0,0 +1,114 @@
+package org.jeecg.modules.dry.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 缁翠慨璁板綍
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+@Data
+@TableName("dry_repair_records")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="dry_repair_records瀵硅薄", description="缁翠慨璁板綍")
+public class DryRepairRecords implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭ID*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭ID")
+    private Integer id;
+	/**缁翠慨鍗曞彿*/
+	@Excel(name = "缁翠慨鍗曞彿", width = 15)
+    @ApiModelProperty(value = "缁翠慨鍗曞彿")
+    private String orderNumber;
+	/**璁惧缂栧彿*/
+	@Excel(name = "璁惧缂栧彿", width = 15, dictTable = "dry_equipment", dicText = "name", dicCode = "id")
+	@Dict(dictTable = "dry_equipment", dicText = "name", dicCode = "id")
+    @ApiModelProperty(value = "璁惧缂栧彿")
+    private String equId;
+    /**鏁呴殰鏃堕棿*/
+    @Excel(name = "鏁呴殰鏃堕棿", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鏁呴殰鏃堕棿")
+    private java.util.Date faultTime;
+    /**鎶ヤ慨浜�*/
+    @Excel(name = "鎶ヤ慨浜�", width = 15)
+    @ApiModelProperty(value = "鎶ヤ慨浜�")
+    private java.lang.String reporter;
+    /**缁翠慨寮�濮嬫椂闂�*/
+    @Excel(name = "缁翠慨寮�濮嬫椂闂�", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "缁翠慨寮�濮嬫椂闂�")
+    private java.util.Date startTime;
+    /**缁翠慨缁撴潫鏃堕棿*/
+    @Excel(name = "缁翠慨缁撴潫鏃堕棿", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "缁翠慨缁撴潫鏃堕棿")
+    private java.util.Date endTime;
+	/**缁翠慨浜哄憳*/
+	@Excel(name = "缁翠慨浜哄憳", width = 15)
+    @ApiModelProperty(value = "缁翠慨浜哄憳")
+    private String technician;
+	/**鏁呴殰绫诲瀷*/
+	@Excel(name = "鏁呴殰绫诲瀷", width = 15)
+    @ApiModelProperty(value = "鏁呴殰绫诲瀷")
+    private String faultType;
+	/**鏁呴殰鎻忚堪*/
+	@Excel(name = "鏁呴殰鎻忚堪", width = 15)
+    @ApiModelProperty(value = "鏁呴殰鎻忚堪")
+    private String description;
+	/**缁翠慨鎺柦*/
+	@Excel(name = "缁翠慨鎺柦", width = 15)
+    @ApiModelProperty(value = "缁翠慨鎺柦")
+    private String solution;
+	/**鏇存崲閰嶄欢娓呭崟锛圝SON鏍煎紡瀛樺偍锛�*/
+	@Excel(name = "鏇存崲閰嶄欢娓呭崟锛圝SON鏍煎紡瀛樺偍锛�", width = 15)
+    @ApiModelProperty(value = "鏇存崲閰嶄欢娓呭崟锛圝SON鏍煎紡瀛樺偍锛�")
+    private String parts;
+	/**缁翠慨璐圭敤*/
+	@Excel(name = "缁翠慨璐圭敤", width = 15)
+    @ApiModelProperty(value = "缁翠慨璐圭敤")
+    private BigDecimal cost;
+	/**缁翠慨鐘舵��*/
+	@Excel(name = "缁翠慨鐘舵��", width = 15)
+    @ApiModelProperty(value = "缁翠慨鐘舵��")
+    private String status;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareParts.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareParts.java
new file mode 100644
index 0000000..2b91201
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareParts.java
@@ -0,0 +1,91 @@
+package org.jeecg.modules.dry.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 澶囧搧澶囦欢
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("dry_spare_parts")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="dry_spare_parts瀵硅薄", description="澶囧搧澶囦欢")
+public class DrySpareParts implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭ID*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭ID")
+    private Integer id;
+	/**闆朵欢缂栧彿*/
+	@Excel(name = "闆朵欢缂栧彿", width = 15)
+    @ApiModelProperty(value = "闆朵欢缂栧彿")
+    private String partNumber;
+	/**闆朵欢鍚嶇О*/
+	@Excel(name = "闆朵欢鍚嶇О", width = 15)
+    @ApiModelProperty(value = "闆朵欢鍚嶇О")
+    private String partName;
+	/**鍒嗙被*/
+	@Excel(name = "鍒嗙被", width = 15)
+    @ApiModelProperty(value = "鍒嗙被")
+    private String category;
+	/**瑙勬牸鍨嬪彿*/
+	@Excel(name = "瑙勬牸鍨嬪彿", width = 15)
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    private String specModel;
+	/**鍗曚綅*/
+	@Excel(name = "鍗曚綅", width = 15)
+    @ApiModelProperty(value = "鍗曚綅")
+    private String unit;
+	/**渚涘簲鍟�*/
+	@Excel(name = "渚涘簲鍟�", width = 15)
+    @ApiModelProperty(value = "渚涘簲鍟�")
+    private String supplier;
+	/**鏈�浣庡簱瀛�*/
+	@Excel(name = "鏈�浣庡簱瀛�", width = 15)
+    @ApiModelProperty(value = "鏈�浣庡簱瀛�")
+    private BigDecimal minStock;
+	/**瀹夊叏搴撳瓨*/
+	@Excel(name = "瀹夊叏搴撳瓨", width = 15)
+    @ApiModelProperty(value = "瀹夊叏搴撳瓨")
+    private BigDecimal safeStock;
+	/**搴撲綅*/
+	@Excel(name = "搴撲綅", width = 15)
+    @ApiModelProperty(value = "搴撲綅")
+    private String location;
+	/**褰撳墠搴撳瓨*/
+	@Excel(name = "褰撳墠搴撳瓨", width = 15)
+    @ApiModelProperty(value = "褰撳墠搴撳瓨")
+    private BigDecimal currentStock;
+	/**鍐荤粨搴撳瓨*/
+	@Excel(name = "鍐荤粨搴撳瓨", width = 15)
+    @ApiModelProperty(value = "鍐荤粨搴撳瓨")
+    private BigDecimal frozenStock;
+	/**澶囨敞*/
+	@Excel(name = "澶囨敞", width = 15)
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+	/**鐘舵��*/
+	@Excel(name = "鐘舵��", width = 15)
+    @ApiModelProperty(value = "鐘舵��")
+    private String status;
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareStockLog.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareStockLog.java
new file mode 100644
index 0000000..402684b
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareStockLog.java
@@ -0,0 +1,78 @@
+package org.jeecg.modules.dry.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 鍑哄叆搴撹褰曡〃
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("dry_spare_stock_log")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="dry_spare_stock_log瀵硅薄", description="鍑哄叆搴撹褰曡〃")
+public class DrySpareStockLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭ID*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭ID")
+    private Integer id;
+	/**鎿嶄綔缂栧彿*/
+	@Excel(name = "鎿嶄綔缂栧彿", width = 15)
+    @ApiModelProperty(value = "鎿嶄綔缂栧彿")
+    private String operationNumber;
+	/**闆朵欢缂栧彿*/
+	@Excel(name = "闆朵欢缂栧彿", width = 15, dictTable = "dry_spare_parts", dicText = "part_name", dicCode = "part_number")
+	@Dict(dictTable = "dry_spare_parts", dicText = "part_name", dicCode = "part_number")
+    @ApiModelProperty(value = "闆朵欢缂栧彿")
+    private String partNumber;
+	/**鎿嶄綔绫诲瀷*/
+	@Excel(name = "鎿嶄綔绫诲瀷", width = 15)
+    @ApiModelProperty(value = "鎿嶄綔绫诲瀷")
+    private String operationType;
+	/**鏁伴噺*/
+	@Excel(name = "鏁伴噺", width = 15)
+    @ApiModelProperty(value = "鏁伴噺")
+    private BigDecimal quantity;
+	/**鎿嶄綔鏃堕棿*/
+	@Excel(name = "鎿嶄綔鏃堕棿", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鎿嶄綔鏃堕棿")
+    private Date operationTime;
+	/**鎿嶄綔浜�*/
+	@Excel(name = "鎿嶄綔浜�", width = 15)
+    @ApiModelProperty(value = "鎿嶄綔浜�")
+    private String operator;
+	/**鍏宠仈鍗曞彿锛堝缁翠慨鍗曞彿锛�*/
+	@Excel(name = "鍏宠仈鍗曞彿锛堝缁翠慨鍗曞彿锛�", width = 15)
+    @ApiModelProperty(value = "鍏宠仈鍗曞彿锛堝缁翠慨鍗曞彿锛�")
+    private String relatedOrder;
+	/**搴撲綅*/
+	@Excel(name = "搴撲綅", width = 15)
+    @ApiModelProperty(value = "搴撲綅")
+    private String location;
+	/**澶囨敞*/
+	@Excel(name = "澶囨敞", width = 15)
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryMaintenanceRecordController.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryMaintenanceRecordController.java
new file mode 100644
index 0000000..6a97204
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryMaintenanceRecordController.java
@@ -0,0 +1,206 @@
+package org.jeecg.modules.dry.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.dry.entity.DryMaintenanceRecord;
+import org.jeecg.modules.dry.service.IDryMaintenanceRecordService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.concurrent.atomic.AtomicInteger;
+
+ /**
+ * @Description: dry_maintenance_record
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+@Api(tags="dry_maintenance_record")
+@RestController
+@RequestMapping("/dry/dryMaintenanceRecord")
+@Slf4j
+public class DryMaintenanceRecordController extends JeecgController<DryMaintenanceRecord, IDryMaintenanceRecordService> {
+	@Autowired
+	private IDryMaintenanceRecordService dryMaintenanceRecordService;
+
+	private static final AtomicInteger dailySequence = new AtomicInteger(0);
+	private static volatile LocalDate lastResetDate = LocalDate.now();
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param dryMaintenanceRecord
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "dry_maintenance_record-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="dry_maintenance_record-鍒嗛〉鍒楄〃鏌ヨ", notes="dry_maintenance_record-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<DryMaintenanceRecord>> queryPageList(DryMaintenanceRecord dryMaintenanceRecord,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<DryMaintenanceRecord> queryWrapper = QueryGenerator.initQueryWrapper(dryMaintenanceRecord, req.getParameterMap());
+		Page<DryMaintenanceRecord> page = new Page<DryMaintenanceRecord>(pageNo, pageSize);
+		IPage<DryMaintenanceRecord> pageList = dryMaintenanceRecordService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   娣诲姞
+	 *
+	 * @param dryMaintenanceRecord
+	 * @return
+	 */
+	@AutoLog(value = "dry_maintenance_record-娣诲姞")
+	@ApiOperation(value="dry_maintenance_record-娣诲姞", notes="dry_maintenance_record-娣诲姞")
+	@RequiresPermissions("dry:dry_maintenance_record:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody DryMaintenanceRecord dryMaintenanceRecord) {
+		dryMaintenanceRecordService.save(dryMaintenanceRecord);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 *  缂栬緫
+	 *
+	 * @param dryMaintenanceRecord
+	 * @return
+	 */
+	@AutoLog(value = "dry_maintenance_record-缂栬緫")
+	@ApiOperation(value="dry_maintenance_record-缂栬緫", notes="dry_maintenance_record-缂栬緫")
+	@RequiresPermissions("dry:dry_maintenance_record:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody DryMaintenanceRecord dryMaintenanceRecord) {
+		dryMaintenanceRecordService.updateById(dryMaintenanceRecord);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "dry_maintenance_record-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="dry_maintenance_record-閫氳繃id鍒犻櫎", notes="dry_maintenance_record-閫氳繃id鍒犻櫎")
+	@RequiresPermissions("dry:dry_maintenance_record:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		dryMaintenanceRecordService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "dry_maintenance_record-鎵归噺鍒犻櫎")
+	@ApiOperation(value="dry_maintenance_record-鎵归噺鍒犻櫎", notes="dry_maintenance_record-鎵归噺鍒犻櫎")
+	@RequiresPermissions("dry:dry_maintenance_record:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.dryMaintenanceRecordService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "dry_maintenance_record-閫氳繃id鏌ヨ")
+	@ApiOperation(value="dry_maintenance_record-閫氳繃id鏌ヨ", notes="dry_maintenance_record-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<DryMaintenanceRecord> queryById(@RequestParam(name="id",required=true) String id) {
+		DryMaintenanceRecord dryMaintenanceRecord = dryMaintenanceRecordService.getById(id);
+		if(dryMaintenanceRecord==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(dryMaintenanceRecord);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param dryMaintenanceRecord
+    */
+    @RequiresPermissions("dry:dry_maintenance_record:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, DryMaintenanceRecord dryMaintenanceRecord) {
+        return super.exportXls(request, dryMaintenanceRecord, DryMaintenanceRecord.class, "dry_maintenance_record");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("dry:dry_maintenance_record:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, DryMaintenanceRecord.class);
+    }
+
+	/**
+	 * 鐢熸垚淇濆吇鍗曠紪鍙�
+	 *
+	 * @return
+	 */
+	@ApiOperation(value="鐢熸垚淇濆吇鍗曠紪鍙�", notes="鐢熸垚淇濆吇鍗曠紪鍙�")
+	@GetMapping(value = "/generateMaintenanceNo")
+	public Result<String> generateMaintenanceNo() {
+		LocalDate today = LocalDate.now();
+		synchronized (dailySequence) {
+			if (!today.equals(lastResetDate)) {
+				dailySequence.set(0);
+				lastResetDate = today;
+			}
+			int sequence = dailySequence.incrementAndGet();
+			String datePrefix = today.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+			String maintenanceNo = String.format("%s%03d", datePrefix, sequence);
+			return Result.OK(maintenanceNo);
+		}
+	}
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRepairRecordsController.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRepairRecordsController.java
new file mode 100644
index 0000000..571cdb5
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRepairRecordsController.java
@@ -0,0 +1,206 @@
+package org.jeecg.modules.dry.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.dry.entity.DryRepairRecords;
+import org.jeecg.modules.dry.service.IDryRepairRecordsService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.concurrent.atomic.AtomicInteger;
+
+ /**
+ * @Description: 缁翠慨璁板綍
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+@Api(tags="缁翠慨璁板綍")
+@RestController
+@RequestMapping("/dry/dryRepairRecords")
+@Slf4j
+public class DryRepairRecordsController extends JeecgController<DryRepairRecords, IDryRepairRecordsService> {
+	@Autowired
+	private IDryRepairRecordsService dryRepairRecordsService;
+
+	private static final AtomicInteger dailySequence = new AtomicInteger(0);
+	private static volatile LocalDate lastResetDate = LocalDate.now();
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param dryRepairRecords
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "缁翠慨璁板綍-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="缁翠慨璁板綍-鍒嗛〉鍒楄〃鏌ヨ", notes="缁翠慨璁板綍-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<DryRepairRecords>> queryPageList(DryRepairRecords dryRepairRecords,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<DryRepairRecords> queryWrapper = QueryGenerator.initQueryWrapper(dryRepairRecords, req.getParameterMap());
+		Page<DryRepairRecords> page = new Page<DryRepairRecords>(pageNo, pageSize);
+		IPage<DryRepairRecords> pageList = dryRepairRecordsService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   娣诲姞
+	 *
+	 * @param dryRepairRecords
+	 * @return
+	 */
+	@AutoLog(value = "缁翠慨璁板綍-娣诲姞")
+	@ApiOperation(value="缁翠慨璁板綍-娣诲姞", notes="缁翠慨璁板綍-娣诲姞")
+	@RequiresPermissions("dry:dry_repair_records:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody DryRepairRecords dryRepairRecords) {
+		dryRepairRecordsService.save(dryRepairRecords);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 *  缂栬緫
+	 *
+	 * @param dryRepairRecords
+	 * @return
+	 */
+	@AutoLog(value = "缁翠慨璁板綍-缂栬緫")
+	@ApiOperation(value="缁翠慨璁板綍-缂栬緫", notes="缁翠慨璁板綍-缂栬緫")
+	@RequiresPermissions("dry:dry_repair_records:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody DryRepairRecords dryRepairRecords) {
+		dryRepairRecordsService.updateById(dryRepairRecords);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "缁翠慨璁板綍-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="缁翠慨璁板綍-閫氳繃id鍒犻櫎", notes="缁翠慨璁板綍-閫氳繃id鍒犻櫎")
+	@RequiresPermissions("dry:dry_repair_records:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		dryRepairRecordsService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "缁翠慨璁板綍-鎵归噺鍒犻櫎")
+	@ApiOperation(value="缁翠慨璁板綍-鎵归噺鍒犻櫎", notes="缁翠慨璁板綍-鎵归噺鍒犻櫎")
+	@RequiresPermissions("dry:dry_repair_records:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.dryRepairRecordsService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "缁翠慨璁板綍-閫氳繃id鏌ヨ")
+	@ApiOperation(value="缁翠慨璁板綍-閫氳繃id鏌ヨ", notes="缁翠慨璁板綍-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<DryRepairRecords> queryById(@RequestParam(name="id",required=true) String id) {
+		DryRepairRecords dryRepairRecords = dryRepairRecordsService.getById(id);
+		if(dryRepairRecords==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(dryRepairRecords);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param dryRepairRecords
+    */
+    @RequiresPermissions("dry:dry_repair_records:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, DryRepairRecords dryRepairRecords) {
+        return super.exportXls(request, dryRepairRecords, DryRepairRecords.class, "缁翠慨璁板綍");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("dry:dry_repair_records:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, DryRepairRecords.class);
+    }
+
+	/**
+	 * 鐢熸垚缁翠慨鍗曠紪鍙�
+	 *
+	 * @return
+	 */
+	@ApiOperation(value="鐢熸垚缁翠慨鍗曠紪鍙�", notes="鐢熸垚缁翠慨鍗曠紪鍙�")
+	@GetMapping(value = "/generateRepairNo")
+	public Result<String> generateRepairNo() {
+		LocalDate today = LocalDate.now();
+		synchronized (dailySequence) {
+			if (!today.equals(lastResetDate)) {
+				dailySequence.set(0);
+				lastResetDate = today;
+			}
+			int sequence = dailySequence.incrementAndGet();
+			String datePrefix = today.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+			String repairNo = String.format("%s%03d", datePrefix, sequence);
+			return Result.OK(repairNo);
+		}
+	}
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySparePartsController.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySparePartsController.java
new file mode 100644
index 0000000..194e128
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySparePartsController.java
@@ -0,0 +1,227 @@
+package org.jeecg.modules.dry.controller;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.dry.entity.DrySpareParts;
+import org.jeecg.modules.dry.service.IDrySparePartsService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.transaction.annotation.Transactional;
+
+ /**
+ * @Description: 澶囧搧澶囦欢
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+@Api(tags="澶囧搧澶囦欢")
+@RestController
+@RequestMapping("/dry/drySpareParts")
+@Slf4j
+public class DrySparePartsController extends JeecgController<DrySpareParts, IDrySparePartsService> {
+	@Autowired
+	private IDrySparePartsService drySparePartsService;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param drySpareParts
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "澶囧搧澶囦欢-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="澶囧搧澶囦欢-鍒嗛〉鍒楄〃鏌ヨ", notes="澶囧搧澶囦欢-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<DrySpareParts>> queryPageList(DrySpareParts drySpareParts,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<DrySpareParts> queryWrapper = QueryGenerator.initQueryWrapper(drySpareParts, req.getParameterMap());
+		Page<DrySpareParts> page = new Page<DrySpareParts>(pageNo, pageSize);
+		IPage<DrySpareParts> pageList = drySparePartsService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   娣诲姞
+	 *
+	 * @param drySpareParts
+	 * @return
+	 */
+	@AutoLog(value = "澶囧搧澶囦欢-娣诲姞")
+	@ApiOperation(value="澶囧搧澶囦欢-娣诲姞", notes="澶囧搧澶囦欢-娣诲姞")
+	@RequiresPermissions("dry:dry_spare_parts:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody DrySpareParts drySpareParts) {
+		drySparePartsService.save(drySpareParts);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 *  缂栬緫
+	 *
+	 * @param drySpareParts
+	 * @return
+	 */
+	@AutoLog(value = "澶囧搧澶囦欢-缂栬緫")
+	@ApiOperation(value="澶囧搧澶囦欢-缂栬緫", notes="澶囧搧澶囦欢-缂栬緫")
+	@RequiresPermissions("dry:dry_spare_parts:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody DrySpareParts drySpareParts) {
+		drySparePartsService.updateById(drySpareParts);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "澶囧搧澶囦欢-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="澶囧搧澶囦欢-閫氳繃id鍒犻櫎", notes="澶囧搧澶囦欢-閫氳繃id鍒犻櫎")
+	@RequiresPermissions("dry:dry_spare_parts:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		drySparePartsService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "澶囧搧澶囦欢-鎵归噺鍒犻櫎")
+	@ApiOperation(value="澶囧搧澶囦欢-鎵归噺鍒犻櫎", notes="澶囧搧澶囦欢-鎵归噺鍒犻櫎")
+	@RequiresPermissions("dry:dry_spare_parts:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.drySparePartsService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "澶囧搧澶囦欢-閫氳繃id鏌ヨ")
+	@ApiOperation(value="澶囧搧澶囦欢-閫氳繃id鏌ヨ", notes="澶囧搧澶囦欢-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<DrySpareParts> queryById(@RequestParam(name="id",required=true) String id) {
+		DrySpareParts drySpareParts = drySparePartsService.getById(id);
+		if(drySpareParts==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(drySpareParts);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param drySpareParts
+    */
+    @RequiresPermissions("dry:dry_spare_parts:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, DrySpareParts drySpareParts) {
+        return super.exportXls(request, drySpareParts, DrySpareParts.class, "澶囧搧澶囦欢");
+    }
+
+    /**
+	 * 閫氳繃excel瀵煎叆鏁版嵁
+    * @param request
+    * @param response
+    * @return
+      */
+    @RequiresPermissions("dry:dry_spare_parts:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, DrySpareParts.class);
+    }
+	/**
+	 * 澧炲姞澶囦欢搴撳瓨
+	 *
+	 * @param partNumber 澶囦欢缂栧彿
+	 * @param quantity 鏁伴噺
+	 * @return
+	 */
+	@AutoLog(value = "澶囧搧澶囦欢-澧炲姞搴撳瓨")
+	@ApiOperation(value="澶囧搧澶囦欢-澧炲姞搴撳瓨", notes="澶囧搧澶囦欢-澧炲姞搴撳瓨")
+	@PostMapping(value = "/addStock")
+	@Transactional
+	public Result<String> addStock(@RequestParam(name="partNumber",required=true) String partNumber,
+								   @RequestParam(name="quantity",required=true) BigDecimal quantity) {
+		QueryWrapper<DrySpareParts> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("part_number", partNumber);
+		DrySpareParts drySpareParts = drySparePartsService.getOne(queryWrapper);
+		if (drySpareParts == null) {
+			return Result.error("鏈壘鍒板搴斿浠�");
+		}
+		drySpareParts.setCurrentStock(drySpareParts.getCurrentStock().add( quantity));
+		drySparePartsService.updateById(drySpareParts);
+		return Result.OK("搴撳瓨澧炲姞鎴愬姛锛�");
+	}
+
+	/**
+	 * 鍑忓皯澶囦欢搴撳瓨
+	 * @param partNumber 澶囦欢缂栧彿
+	 * @param quantity 鏁伴噺
+	 * @return
+	 */
+	@AutoLog(value = "澶囧搧澶囦欢-鍑忓皯搴撳瓨")
+	@ApiOperation(value="澶囧搧澶囦欢-鍑忓皯搴撳瓨", notes="澶囧搧澶囦欢-鍑忓皯搴撳瓨")
+	@PostMapping(value = "/reduceStock")
+	@Transactional
+	public Result<String> reduceStock(@RequestParam(name="partNumber",required=true) String partNumber,
+									  @RequestParam(name="quantity",required=true) BigDecimal quantity) {
+		QueryWrapper<DrySpareParts> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("part_number", partNumber);
+		DrySpareParts drySpareParts = drySparePartsService.getOne(queryWrapper);
+		if (drySpareParts == null) {
+			return Result.error("鏈壘鍒板搴斿浠�");
+		}
+		if (drySpareParts.getCurrentStock().compareTo( quantity) < 0) {
+			return Result.error("搴撳瓨涓嶈冻");
+		}
+		drySpareParts.setCurrentStock(drySpareParts.getCurrentStock());
+		drySparePartsService.updateById(drySpareParts);
+		return Result.OK("搴撳瓨鍑忓皯鎴愬姛锛�");
+	}
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySpareStockLogController.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySpareStockLogController.java
new file mode 100644
index 0000000..4d96ad8
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySpareStockLogController.java
@@ -0,0 +1,247 @@
+package org.jeecg.modules.dry.controller;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.dry.entity.DrySpareParts;
+import org.jeecg.modules.dry.entity.DrySpareStockLog;
+import org.jeecg.modules.dry.service.IDrySparePartsService;
+import org.jeecg.modules.dry.service.IDrySpareStockLogService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.concurrent.atomic.AtomicInteger;
+
+ /**
+ * @Description: 鍑哄叆搴撹褰曡〃
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+@Api(tags="鍑哄叆搴撹褰曡〃")
+@RestController
+@RequestMapping("/dry/drySpareStockLog")
+@Slf4j
+public class DrySpareStockLogController extends JeecgController<DrySpareStockLog, IDrySpareStockLogService> {
+	@Autowired
+	private IDrySpareStockLogService drySpareStockLogService;
+	@Autowired
+	private IDrySparePartsService drySparePartsService;
+
+	private static final AtomicInteger dailySequence = new AtomicInteger(0);
+	private static LocalDate lastResetDate = null;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param drySpareStockLog
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "鍑哄叆搴撹褰曡〃-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="鍑哄叆搴撹褰曡〃-鍒嗛〉鍒楄〃鏌ヨ", notes="鍑哄叆搴撹褰曡〃-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<DrySpareStockLog>> queryPageList(DrySpareStockLog drySpareStockLog,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<DrySpareStockLog> queryWrapper = QueryGenerator.initQueryWrapper(drySpareStockLog, req.getParameterMap());
+		Page<DrySpareStockLog> page = new Page<DrySpareStockLog>(pageNo, pageSize);
+		IPage<DrySpareStockLog> pageList = drySpareStockLogService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   娣诲姞
+	 *
+	 * @param drySpareStockLog
+	 * @return
+	 */
+	@AutoLog(value = "鍑哄叆搴撹褰曡〃-娣诲姞")
+	@ApiOperation(value="鍑哄叆搴撹褰曡〃-娣诲姞", notes="鍑哄叆搴撹褰曡〃-娣诲姞")
+	@RequiresPermissions("dry:dry_spare_stock_log:add")
+	@PostMapping(value = "/add")
+	@Transactional
+	public Result<String> add(@RequestBody DrySpareStockLog drySpareStockLog) {
+		String partNumber = drySpareStockLog.getPartNumber();
+		BigDecimal quantity = drySpareStockLog.getQuantity();
+		String operationType = drySpareStockLog.getOperationType();
+
+		if (partNumber == null || quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0 || operationType == null) {
+			return Result.error("澶囦欢缂栧彿銆佹暟閲忔垨鎿嶄綔绫诲瀷涓嶈兘涓虹┖涓旀暟閲忓繀椤诲ぇ浜�0锛�");
+		}
+
+		QueryWrapper<DrySpareParts> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("part_number", partNumber);
+		DrySpareParts drySpareParts = drySparePartsService.getOne(queryWrapper);
+
+		if (drySpareParts == null) {
+			return Result.error("鏈壘鍒板搴斿浠讹紒");
+		}
+
+		if ("0".equals(operationType)) { // 鍏ュ簱
+			drySpareParts.setCurrentStock(drySpareParts.getCurrentStock().add(quantity));
+		} else if ("1".equals(operationType)) { // 鍑哄簱
+			if (drySpareParts.getCurrentStock().compareTo(quantity) < 0) {
+				return Result.error("搴撳瓨涓嶈冻锛�");
+			}
+			drySpareParts.setCurrentStock(drySpareParts.getCurrentStock().subtract(quantity));
+		} else {
+			return Result.error("鏃犳晥鐨勬搷浣滅被鍨嬶紒");
+		}
+
+		drySparePartsService.updateById(drySpareParts);
+
+		drySpareStockLogService.save(drySpareStockLog);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 *  缂栬緫
+	 *
+	 * @param drySpareStockLog
+	 * @return
+	 */
+//	@AutoLog(value = "鍑哄叆搴撹褰曡〃-缂栬緫")
+//	@ApiOperation(value="鍑哄叆搴撹褰曡〃-缂栬緫", notes="鍑哄叆搴撹褰曡〃-缂栬緫")
+//	@RequiresPermissions("dry:dry_spare_stock_log:edit")
+//	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+//	public Result<String> edit(@RequestBody DrySpareStockLog drySpareStockLog) {
+//		drySpareStockLogService.updateById(drySpareStockLog);
+//		return Result.OK("缂栬緫鎴愬姛!");
+//	}
+	
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "鍑哄叆搴撹褰曡〃-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="鍑哄叆搴撹褰曡〃-閫氳繃id鍒犻櫎", notes="鍑哄叆搴撹褰曡〃-閫氳繃id鍒犻櫎")
+	@RequiresPermissions("dry:dry_spare_stock_log:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		drySpareStockLogService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "鍑哄叆搴撹褰曡〃-鎵归噺鍒犻櫎")
+	@ApiOperation(value="鍑哄叆搴撹褰曡〃-鎵归噺鍒犻櫎", notes="鍑哄叆搴撹褰曡〃-鎵归噺鍒犻櫎")
+	@RequiresPermissions("dry:dry_spare_stock_log:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.drySpareStockLogService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "鍑哄叆搴撹褰曡〃-閫氳繃id鏌ヨ")
+	@ApiOperation(value="鍑哄叆搴撹褰曡〃-閫氳繃id鏌ヨ", notes="鍑哄叆搴撹褰曡〃-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<DrySpareStockLog> queryById(@RequestParam(name="id",required=true) String id) {
+		DrySpareStockLog drySpareStockLog = drySpareStockLogService.getById(id);
+		if(drySpareStockLog==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(drySpareStockLog);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param drySpareStockLog
+    */
+    @RequiresPermissions("dry:dry_spare_stock_log:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, DrySpareStockLog drySpareStockLog) {
+        return super.exportXls(request, drySpareStockLog, DrySpareStockLog.class, "鍑哄叆搴撹褰曡〃");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+      */
+    @RequiresPermissions("dry:dry_spare_stock_log:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, DrySpareStockLog.class);
+    }
+
+	/**
+	 * 鐢熸垚鍑哄叆搴撳崟鍙�
+	 *
+	 * @param type 鍗曞彿绫诲瀷锛孋K锛堝嚭搴擄級鎴� RK锛堝叆搴擄級
+	 * @return
+	 */
+	@AutoLog(value = "鍑哄叆搴撹褰曡〃-鐢熸垚鍑哄叆搴撳崟鍙�")
+	@ApiOperation(value="鍑哄叆搴撹褰曡〃-鐢熸垚鍑哄叆搴撳崟鍙�", notes="鍑哄叆搴撹褰曡〃-鐢熸垚鍑哄叆搴撳崟鍙�")
+	@GetMapping(value = "/generateStockNo")
+	public Result<String> generateStockNo(@RequestParam(name="type",required=true) String type) {
+		LocalDate today = LocalDate.now();
+		if (lastResetDate == null || !today.equals(lastResetDate)) {
+			dailySequence.set(0);
+			lastResetDate = today;
+		}
+		// 鑾峰彇骞堕�掑搴忓垪鍙�
+		int sequence = dailySequence.incrementAndGet();
+		// 鏍煎紡鍖栨棩鏈�
+		String dateStr = today.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+		// 鏍煎紡鍖栧簭鍒楀彿涓轰笁浣嶏紝涓嶈冻琛ラ浂
+		String sequenceStr = String.format("%03d", sequence);
+		// 缁勫悎鐢熸垚缁翠慨鍗曞彿
+		String stockNo = type + dateStr + sequenceStr;
+		return Result.OK(stockNo);
+	}
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryMaintenanceRecordMapper.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryMaintenanceRecordMapper.java
new file mode 100644
index 0000000..e76f3a2
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryMaintenanceRecordMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.dry.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.dry.entity.DryMaintenanceRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: dry_maintenance_record
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+public interface DryMaintenanceRecordMapper extends BaseMapper<DryMaintenanceRecord> {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryRepairRecordsMapper.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryRepairRecordsMapper.java
new file mode 100644
index 0000000..6b8efda
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryRepairRecordsMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.dry.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.dry.entity.DryRepairRecords;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 缁翠慨璁板綍
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+public interface DryRepairRecordsMapper extends BaseMapper<DryRepairRecords> {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySparePartsMapper.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySparePartsMapper.java
new file mode 100644
index 0000000..1961797
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySparePartsMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.dry.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.dry.entity.DrySpareParts;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 澶囧搧澶囦欢
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+public interface DrySparePartsMapper extends BaseMapper<DrySpareParts> {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySpareStockLogMapper.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySpareStockLogMapper.java
new file mode 100644
index 0000000..731c322
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySpareStockLogMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.dry.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.dry.entity.DrySpareStockLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 鍑哄叆搴撹褰曡〃
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+public interface DrySpareStockLogMapper extends BaseMapper<DrySpareStockLog> {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryMaintenanceRecordMapper.xml b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryMaintenanceRecordMapper.xml
new file mode 100644
index 0000000..6fc11f5
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryMaintenanceRecordMapper.xml
@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.dry.mapper.DryMaintenanceRecordMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryRepairRecordsMapper.xml b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryRepairRecordsMapper.xml
new file mode 100644
index 0000000..63747c9
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryRepairRecordsMapper.xml
@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.dry.mapper.DryRepairRecordsMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySparePartsMapper.xml b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySparePartsMapper.xml
new file mode 100644
index 0000000..8493810
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySparePartsMapper.xml
@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.dry.mapper.DrySparePartsMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySpareStockLogMapper.xml b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySpareStockLogMapper.xml
new file mode 100644
index 0000000..8795c0f
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySpareStockLogMapper.xml
@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.dry.mapper.DrySpareStockLogMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryMaintenanceRecordService.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryMaintenanceRecordService.java
new file mode 100644
index 0000000..5352b86
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryMaintenanceRecordService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.dry.service;
+
+import org.jeecg.modules.dry.entity.DryMaintenanceRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: dry_maintenance_record
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+public interface IDryMaintenanceRecordService extends IService<DryMaintenanceRecord> {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRepairRecordsService.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRepairRecordsService.java
new file mode 100644
index 0000000..1f67281
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRepairRecordsService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.dry.service;
+
+import org.jeecg.modules.dry.entity.DryRepairRecords;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 缁翠慨璁板綍
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+public interface IDryRepairRecordsService extends IService<DryRepairRecords> {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySparePartsService.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySparePartsService.java
new file mode 100644
index 0000000..ac19316
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySparePartsService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.dry.service;
+
+import org.jeecg.modules.dry.entity.DrySpareParts;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 澶囧搧澶囦欢
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+public interface IDrySparePartsService extends IService<DrySpareParts> {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySpareStockLogService.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySpareStockLogService.java
new file mode 100644
index 0000000..3a3165e
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySpareStockLogService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.dry.service;
+
+import org.jeecg.modules.dry.entity.DrySpareStockLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 鍑哄叆搴撹褰曡〃
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+public interface IDrySpareStockLogService extends IService<DrySpareStockLog> {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryMaintenanceRecordServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryMaintenanceRecordServiceImpl.java
new file mode 100644
index 0000000..e7ec87f
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryMaintenanceRecordServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.dry.service.impl;
+
+import org.jeecg.modules.dry.entity.DryMaintenanceRecord;
+import org.jeecg.modules.dry.mapper.DryMaintenanceRecordMapper;
+import org.jeecg.modules.dry.service.IDryMaintenanceRecordService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: dry_maintenance_record
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+@Service
+public class DryMaintenanceRecordServiceImpl extends ServiceImpl<DryMaintenanceRecordMapper, DryMaintenanceRecord> implements IDryMaintenanceRecordService {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRepairRecordsServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRepairRecordsServiceImpl.java
new file mode 100644
index 0000000..81d77b7
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRepairRecordsServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.dry.service.impl;
+
+import org.jeecg.modules.dry.entity.DryRepairRecords;
+import org.jeecg.modules.dry.mapper.DryRepairRecordsMapper;
+import org.jeecg.modules.dry.service.IDryRepairRecordsService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 缁翠慨璁板綍
+ * @Author: jeecg-boot
+ * @Date:   2025-07-21
+ * @Version: V1.0
+ */
+@Service
+public class DryRepairRecordsServiceImpl extends ServiceImpl<DryRepairRecordsMapper, DryRepairRecords> implements IDryRepairRecordsService {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySparePartsServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySparePartsServiceImpl.java
new file mode 100644
index 0000000..85e38b7
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySparePartsServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.dry.service.impl;
+
+import org.jeecg.modules.dry.entity.DrySpareParts;
+import org.jeecg.modules.dry.mapper.DrySparePartsMapper;
+import org.jeecg.modules.dry.service.IDrySparePartsService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 澶囧搧澶囦欢
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+@Service
+public class DrySparePartsServiceImpl extends ServiceImpl<DrySparePartsMapper, DrySpareParts> implements IDrySparePartsService {
+
+}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySpareStockLogServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySpareStockLogServiceImpl.java
new file mode 100644
index 0000000..fbd5615
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySpareStockLogServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.dry.service.impl;
+
+import org.jeecg.modules.dry.entity.DrySpareStockLog;
+import org.jeecg.modules.dry.mapper.DrySpareStockLogMapper;
+import org.jeecg.modules.dry.service.IDrySpareStockLogService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 鍑哄叆搴撹褰曡〃
+ * @Author: jeecg-boot
+ * @Date:   2025-07-23
+ * @Version: V1.0
+ */
+@Service
+public class DrySpareStockLogServiceImpl extends ServiceImpl<DrySpareStockLogMapper, DrySpareStockLog> implements IDrySpareStockLogService {
+
+}

--
Gitblit v1.9.3