From 1bbe6f787d58b768dce5370aa4e0d242c5e4b62d Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期二, 21 四月 2026 17:26:53 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' of http://114.132.189.42:9002/r/product-inventory-management-after into dev_New_pro

---
 src/main/java/com/ruoyi/production/mapper/ProductionOperationMainParamMapper.java                    |   18 
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java      |  202 ++
 src/main/java/com/ruoyi/production/bean/dto/ProductionPlanImportDto.java                             |  177 ++
 src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java              |   20 
 src/main/resources/mapper/production/ProductProcessMapper.xml                                        |    2 
 src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingMapper.java                          |   18 
 src/main/java/com/ruoyi/production/service/ProductionOrderBomService.java                            |   16 
 src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingOperationParamController.java    |   18 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java               |   20 
 src/main/resources/mapper/production/ProcessRouteMapper.xml                                          |    4 
 src/main/java/com/ruoyi/production/service/ProductionOrderPickRecordService.java                     |   16 
 src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java                                 |   79 +
 src/main/resources/mapper/production/ProductOrderMapper.xml                                          |    8 
 src/main/resources/application-dev.yml                                                               |    2 
 src/main/java/com/ruoyi/production/service/ProductionOrderService.java                               |   16 
 src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java                                     |   10 
 src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperationParam.java                    |   93 +
 src/main/java/com/ruoyi/production/controller/ProductionOrderController.java                         |    8 
 src/main/java/com/ruoyi/production/service/ProductionOrderRoutingOperationParamService.java          |   16 
 src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java                    |   20 
 src/main/resources/mapper/production/SalesLedgerWorkMapper.xml                                       |    2 
 src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java                                 |   60 
 src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml                       |   20 
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java |   20 
 src/main/java/com/ruoyi/production/service/ProductionOrderRoutingService.java                        |   16 
 src/main/java/com/ruoyi/production/mapper/ProductionBomStructureMapper.java                          |   18 
 src/main/java/com/ruoyi/production/controller/ProductionPlanController.java                          |  111 +
 src/main/java/com/ruoyi/production/pojo/ProductionOrderBom.java                                      |   63 
 src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java                                   |   82 
 src/main/java/com/ruoyi/production/service/ProductionPlanService.java                                |   66 
 src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingMapper.java                               |   14 
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java                  |   20 
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderBomServiceImpl.java                   |   20 
 src/main/resources/mapper/production/ProductWorkOrderMapper.xml                                      |   10 
 src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java                                   |   61 
 src/main/resources/mapper/production/ProductionProductInputMapper.xml                                |   85 
 src/main/java/com/ruoyi/production/controller/ProductionOrderBomController.java                      |    8 
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickRecordServiceImpl.java            |   20 
 src/main/java/com/ruoyi/production/controller/ProductionOperationMainParamController.java            |   18 
 src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java                         |   64 
 src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java                         |   24 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java                |  350 ----
 src/main/java/com/ruoyi/production/controller/ProductionAccountController.java                       |    8 
 src/main/resources/mapper/production/ProductionOrderBomMapper.xml                                    |   20 
 src/main/java/com/ruoyi/production/controller/ProductionOrderPickController.java                     |    8 
 src/main/java/com/ruoyi/production/mapper/ProductionOrderBomMapper.java                              |   18 
 src/main/resources/mapper/production/ProductWorkOrderFileMapper.xml                                  |    2 
 src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java               |   20 
 src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java                                  |   18 
 src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml                               |    4 
 src/main/resources/mapper/production/ProductStructureMapper.xml                                      |    6 
 src/main/resources/mapper/production/ProductionProductMainMapper.xml                                 |  128 -
 src/main/java/com/ruoyi/production/mapper/ProductionOrderPickMapper.java                             |   18 
 src/main/resources/application.yml                                                                   |    2 
 src/main/resources/mapper/production/ProductProcessRouteMapper.xml                                   |    4 
 src/main/java/com/ruoyi/production/mapper/ProductionAccountMapper.java                               |   18 
 src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java                                  |   57 
 src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java                 |    8 
 src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml                       |    6 
 src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java                                  |   63 
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingServiceImpl.java               |   20 
 src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java                  |   25 
 src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java              |   20 
 src/main/java/com/ruoyi/production/service/ProductionProductMainService.java                         |   20 
 src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingOperationParamMapper.java            |   18 
 src/main/java/com/ruoyi/production/service/impl/ProductionOperationMainParamServiceImpl.java         |   20 
 src/main/resources/mapper/production/ProductOrderMaterialMapper.xml                                  |    8 
 src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java                       |  558 +++++++
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationServiceImpl.java      |   20 
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java                    |   14 
 src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java                  |    8 
 src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingController.java                  |    8 
 src/main/resources/mapper/production/ProductionAccountMapper.xml                                     |   24 
 src/main/java/com/ruoyi/production/service/ProductionProductInputService.java                        |   13 
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java                      |   20 
 src/main/resources/mapper/production/ProcessRouteItemMapper.xml                                      |    4 
 src/main/java/com/ruoyi/production/pojo/ProductionOrderPickRecord.java                               |   78 +
 src/main/resources/mapper/production/ProductionOrderRoutingOperationParamMapper.xml                  |   29 
 src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java         |   70 
 src/main/java/com/ruoyi/production/pojo/ProductionAccount.java                                       |   79 +
 src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java                           |   34 
 src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java                       |   13 
 src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java                                 |   18 
 src/main/java/com/ruoyi/production/pojo/ProductionOperationMainParam.java                            |   96 +
 src/main/java/com/ruoyi/production/pojo/ProductionOrderRouting.java                                  |   64 
 src/main/resources/mapper/production/ProductionOperationTaskMapper.xml                               |   24 
 src/main/resources/mapper/production/ProductionOrderPickMapper.xml                                   |   19 
 src/main/java/com/ruoyi/production/service/ProductionAccountService.java                             |   16 
 src/main/java/com/ruoyi/production/pojo/ProductionOrderPick.java                                     |   62 
 src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java                       |   16 
 src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationParamService.java               |   27 
 src/main/resources/mapper/production/ProductionPlanMapper.xml                                        |   24 
 src/main/java/com/ruoyi/production/controller/ProductionOrderPickRecordController.java               |    8 
 src/main/resources/mapper/production/ProductionOrderPickRecordMapper.xml                             |   24 
 src/main/resources/mapper/technology/TechnologyRoutingMapper.xml                                     |   67 
 src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java                   |   70 
 src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingOperationMapper.java                 |   18 
 src/main/resources/mapper/production/ProductionOperationMainParamMapper.xml                          |   30 
 src/main/resources/mapper/production/ProductionOrderRoutingMapper.xml                                |   20 
 src/main/resources/mapper/production/ProductionProductOutputMapper.xml                               |   69 
 src/main/java/com/ruoyi/production/pojo/ProductionPlan.java                                          |   79 +
 src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java                        |   16 
 src/main/java/com/ruoyi/production/service/ProductionOrderPickService.java                           |   16 
 src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml                                 |    6 
 src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingOperationController.java         |   18 
 src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingDto.java                                |    9 
 src/main/resources/mapper/production/ProductBomMapper.xml                                            |    6 
 src/main/resources/mapper/production/ProductionOrderMapper.xml                                       |   24 
 /dev/null                                                                                            |  182 --
 src/main/java/com/ruoyi/production/service/ProductionOrderRoutingOperationService.java               |   16 
 src/main/java/com/ruoyi/production/mapper/ProductionOrderPickRecordMapper.java                       |   18 
 src/main/java/com/ruoyi/production/pojo/ProductionOrder.java                                         |   77 
 src/main/java/com/ruoyi/production/service/ProductionOperationMainParamService.java                  |   16 
 src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java                          |   22 
 src/main/java/com/ruoyi/production/mapper/ProductionOperationTaskMapper.java                         |   18 
 src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java                 |   27 
 src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingVo.java                                  |   12 
 src/main/resources/mapper/production/ProductionBomStructureMapper.xml                                |   20 
 118 files changed, 3,509 insertions(+), 1,171 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
new file mode 100644
index 0000000..78802c1
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
@@ -0,0 +1,61 @@
+package com.ruoyi.production.bean.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.production.pojo.ProductionPlan;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ProductionPlanDto extends ProductionPlan {
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    @ApiModelProperty("鐗╂枡缂栫爜")
+    @Excel(name = "鐗╂枡缂栫爜")
+    private String materialCode;
+
+    /**
+     * 浜у搧鍚嶇О
+     */
+    @ApiModelProperty("浜у搧鍚嶇О")
+    @Excel(name = "浜у搧鍚嶇О")
+    private String productName;
+
+    /**
+     * 浜у搧瑙勬牸
+     */
+    @ApiModelProperty("浜у搧瑙勬牸")
+    @Excel(name = "浜у搧瑙勬牸")
+    private String model;
+
+    @ApiModelProperty("浜у搧鍗曚綅")
+    @Excel(name = "浜у搧鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty(value = "鐢熶骇璁″垝id闆嗗悎")
+    private List<Long> ids;
+
+    @ApiModelProperty(value = "涓嬪彂鏁伴噺")
+    private BigDecimal totalAssignedQuantity;
+
+    @ApiModelProperty(value = "璁″垝瀹屾垚鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate planCompleteTime;
+
+    /**
+     * 鍏宠仈鐗╂枡淇℃伅琛�
+     */
+    @ApiModelProperty("鍏宠仈鐗╂枡淇℃伅琛↖D")
+    private Long productMaterialId;
+
+}
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanImportDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanImportDto.java
new file mode 100644
index 0000000..d531eac
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanImportDto.java
@@ -0,0 +1,177 @@
+package com.ruoyi.production.bean.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <br>
+ * 閿�鍞敓浜ч渶姹� Excel瀵煎叆瀵煎嚭DTO
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/11 11:28
+ */
+@Data
+@ApiModel("閿�鍞敓浜ч渶姹� Excel瀵煎叆瀵煎嚭DTO")
+public class ProductionPlanImportDto {
+    /**
+     * 鐢宠鍗曠紪鍙�
+     */
+    @ApiModelProperty("鐢宠鍗曠紪鍙�")
+    @Excel(name = "鐢宠鍗曠紪鍙�")
+    private String applyNo;
+
+    /**
+     * 瀹㈡埛鍚嶇О
+     */
+    @ApiModelProperty("瀹㈡埛鍚嶇О")
+    @Excel(name = "瀹㈡埛鍚嶇О")
+    private String customerName;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    @ApiModelProperty("鐗╂枡缂栫爜")
+    @Excel(name = "鐗╂枡缂栫爜")
+    private String materialCode;
+
+    /**
+     * 浜у搧鍚嶇О
+     */
+    @ApiModelProperty("浜у搧鍚嶇О")
+    @Excel(name = "浜у搧鍚嶇О")
+    private String productName;
+
+    /**
+     * 浜у搧瑙勬牸
+     */
+    @ApiModelProperty("浜у搧瑙勬牸")
+    @Excel(name = "浜у搧瑙勬牸")
+    private String productSpec;
+
+    /**
+     * 闀�
+     */
+    @ApiModelProperty("闀�")
+    @Excel(name = "闀�(mm)")
+    private Integer length;
+
+    /**
+     * 瀹�
+     */
+    @ApiModelProperty("瀹�")
+    @Excel(name = "瀹�(mm)")
+    private Integer width;
+
+    /**
+     * 楂�
+     */
+    @ApiModelProperty("楂�")
+    @Excel(name = "楂�(mm)")
+    private Integer height;
+
+    /**
+     * 鍧楁暟
+     */
+    @ApiModelProperty("鍧楁暟")
+    @Excel(name = "鍧楁暟")
+    private Integer quantity;
+
+    /**
+     * 鏂规暟
+     */
+    @ApiModelProperty("鏂规暟")
+    @Excel(name = "鏂规暟")
+    private BigDecimal volume;
+
+    /**
+     * 寮哄害
+     */
+    @ApiModelProperty("寮哄害")
+    @Excel(name = "寮哄害")
+    private String strength;
+
+    /**
+     * 寮�濮嬫棩鏈�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @ApiModelProperty("寮�濮嬫棩鏈�")
+    @Excel(name = "寮�濮嬫棩鏈�", width = 20, dateFormat = "yyyy-MM-dd")
+    private Date startDate;
+
+    /**
+     * 缁撴潫鏃ユ湡
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @ApiModelProperty("缁撴潫鏃ユ湡")
+    @Excel(name = "缁撴潫鏃ユ湡", width = 20, dateFormat = "yyyy-MM-dd")
+    private Date endDate;
+
+    /**
+     * 鎻愪氦浜�
+     */
+    @ApiModelProperty("鎻愪氦浜�")
+    @Excel(name = "鎻愪氦浜�")
+    private String submitter;
+
+    /**
+     * 鎻愪氦浜虹粍缁�
+     */
+    @ApiModelProperty("鎻愪氦浜虹粍缁�")
+    @Excel(name = "鎻愪氦浜虹粍缁�")
+    private String submitOrg;
+
+    /**
+     * 澶囨敞1
+     */
+    @ApiModelProperty("澶囨敞1")
+    @Excel(name = "澶囨敞1")
+    private String remarkOne;
+
+    /**
+     * 澶囨敞2
+     */
+    @ApiModelProperty("澶囨敞2")
+    @Excel(name = "澶囨敞2")
+    private String remarkTwo;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    @ApiModelProperty("鍒涘缓浜�")
+    @Excel(name = "鍒涘缓浜�", type = Excel.Type.EXPORT)
+    private String creatorName;
+
+    /**
+     * 淇敼浜�
+     */
+    @ApiModelProperty("淇敼浜�")
+    @Excel(name = "淇敼浜�", type = Excel.Type.EXPORT)
+    private String modifierName;
+
+    /**
+     * 鏁版嵁鍚屾绫诲瀷锛�1=鎵嬪姩 2=瀹氭椂浠诲姟
+     */
+    @ApiModelProperty("鏁版嵁鍚屾绫诲瀷锛�1=鎵嬪姩 2=瀹氭椂浠诲姟")
+    private Integer dataSyncType;
+
+    /**
+     * 鏁版嵁鏉ユ簮绫诲瀷锛�1=鍚屾 2=鏂板
+     */
+    @ApiModelProperty("鏁版嵁鏉ユ簮绫诲瀷锛�1=鍚屾 2=鏂板")
+    private Integer dataSourceType;
+
+    /**
+     * 涓嬪彂鏁伴噺
+     */
+    @ApiModelProperty("涓嬪彂鏁伴噺")
+    @Excel(name = "涓嬪彂鏁伴噺", type = Excel.Type.EXPORT)
+    private BigDecimal assignedQuantity;
+}
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
new file mode 100644
index 0000000..54326de
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
@@ -0,0 +1,10 @@
+package com.ruoyi.production.bean.vo;
+
+import com.ruoyi.production.pojo.ProductionPlan;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ProductionPlanVo extends ProductionPlan {
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
deleted file mode 100644
index 50ac4a8..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProcessRouteDto;
-import com.ruoyi.production.pojo.ProcessRoute;
-import com.ruoyi.production.pojo.ProcessRouteItem;
-import com.ruoyi.production.service.ProcessRouteItemService;
-import com.ruoyi.production.service.ProcessRouteService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Arrays;
-
-@RestController
-@RequestMapping("processRoute")
-@Api(tags = "宸ヨ壓璺嚎")
-public class ProcessRouteController {
-
-    @Autowired
-    private ProcessRouteService processRouteService;
-
-    @GetMapping("page")
-    @ApiOperation("鍒嗛〉鏌ヨ")
-    public R page(Page<ProcessRouteDto>  page, ProcessRouteDto processRouteDto) {
-        return R.ok(processRouteService.pageProcessRouteDto(page, processRouteDto));
-    }
-
-    @ApiOperation("鏂板宸ヨ壓璺嚎")
-    @PostMapping ()
-    public R add(@RequestBody  ProcessRoute processRoute) {
-        return R.ok(processRouteService.saveProcessRoute(processRoute));
-    }
-    @ApiOperation("淇敼宸ヨ壓璺嚎")
-    @PutMapping ()
-    public R update(@RequestBody  ProcessRoute processRoute) {
-        return R.ok(processRouteService.updateById(processRoute));
-    }
-    @ApiOperation("鍒犻櫎宸ヨ壓璺嚎")
-    @DeleteMapping("/{ids}")
-    public R delete(@PathVariable("ids") Long[] ids) {
-        return R.ok(processRouteService.batchDelete(Arrays.asList(ids)));
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java b/src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java
deleted file mode 100644
index 6a4f8a7..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProcessRouteItemDto;
-import com.ruoyi.production.pojo.ProcessRouteItem;
-import com.ruoyi.production.service.ProcessRouteItemService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@RequestMapping("/processRouteItem")
-@Api(tags = "宸ヨ壓璺嚎鏄庣粏")
-public class ProcessRouteItemController {
-    @Autowired
-    private ProcessRouteItemService processRouteItemService;
-
-    @GetMapping("list")
-    public R listProcessRouteItemDto(ProcessRouteItemDto processRouteItemDto) {
-        return R.ok(processRouteItemService.listProcessRouteItemDto(processRouteItemDto));
-    }
-
-    @PostMapping ()
-    @ApiOperation("鏂板淇敼")
-    public R addOrUpdate(@RequestBody ProcessRouteItem processRouteItem) {
-        return R.ok(processRouteItemService.saveOrUpdate(processRouteItem));
-    }
-
-    @PostMapping ("/sort")
-    @ApiOperation("鎺掑簭")
-    public R sort(@RequestBody ProcessRouteItem processRouteItem) {
-        return R.ok(processRouteItemService.sort(processRouteItem));
-    }
-
-    @ApiOperation("鍒犻櫎宸ヨ壓璺嚎鏄庣粏")
-    @DeleteMapping("/batchDelete/{id}")
-    @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
-    public AjaxResult batchDelete(@PathVariable("id") Long id) {
-        return AjaxResult.success(processRouteItemService.batchDelete(id));
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductBomController.java b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
deleted file mode 100644
index 97f9bf5..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProductBomController.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.dto.BomImportDto;
-import com.ruoyi.production.dto.ProductBomDto;
-import com.ruoyi.production.pojo.ProcessRoute;
-import com.ruoyi.production.pojo.ProductBom;
-import com.ruoyi.production.pojo.ProductProcessRoute;
-import com.ruoyi.production.pojo.ProductStructure;
-import com.ruoyi.production.service.ProcessRouteService;
-import com.ruoyi.production.service.ProductBomService;
-import com.ruoyi.production.service.ProductProcessRouteService;
-import com.ruoyi.production.service.ProductStructureService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * <p>
- * BOM涓昏〃 鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 09:59:27
- */
-@RestController
-@RequestMapping("/productBom")
-@Api(tags = "BOM")
-public class ProductBomController {
-
-    @Autowired
-    private ProductBomService productBomService;
-
-    @Autowired
-    private ProcessRouteService processRouteService;
-
-    @Autowired
-    private ProductProcessRouteService productProcessRouteService;
-
-    @Autowired
-    private ProductStructureService productStructureService;
-
-    @GetMapping("/listPage")
-    @Log(title = "BOM-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
-    @ApiOperation("BOM-鍒嗛〉鏌ヨ")
-    public AjaxResult listPage(Page page, ProductBomDto productBomDto) {
-        IPage<ProductBomDto> listPage = productBomService.listPage(page, productBomDto);
-        return AjaxResult.success(listPage);
-    }
-
-    @ApiModelProperty("鏂板BOM")
-    @PostMapping("/add")
-    @Log(title = "鏂板", businessType = BusinessType.INSERT)
-    public AjaxResult add(@RequestBody ProductBom productBom) {
-        return productBomService.add(productBom);
-    }
-
-    @ApiOperation("鏇存柊BOM")
-    @Log(title = "淇敼", businessType = BusinessType.UPDATE)
-    @PutMapping("/update")
-    public AjaxResult update(@RequestBody ProductBom productBom) {
-        return AjaxResult.success(productBomService.update(productBom));
-    }
-
-    @ApiOperation("鍒犻櫎BOM")
-    @DeleteMapping("/batchDelete")
-    @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
-    public AjaxResult batchDelete(@RequestBody List<Integer> ids) {
-        List<ProcessRoute> list = processRouteService.list(Wrappers.<ProcessRoute>lambdaQuery().in(ProcessRoute::getBomId, ids));
-        List<ProductProcessRoute> list2 = productProcessRouteService.list(Wrappers.<ProductProcessRoute>lambdaQuery().in(ProductProcessRoute::getBomId, ids));
-        if (list.size() > 0 || list2.size() > 0) {
-            return AjaxResult.error("璇OM宸茬粡瀛樺湪瀵瑰簲鐨勫伐鑹鸿矾绾�,鏃犳硶杩涜鍒犻櫎");
-        }
-        if (CollectionUtils.isEmpty(ids)) {
-            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
-        }
-        //鍒犻櫎bom瀛愯〃
-        productStructureService.remove(Wrappers.<ProductStructure>lambdaQuery().in(ProductStructure::getBomId, ids));
-        return AjaxResult.success(productBomService.removeBatchByIds(ids));
-    }
-
-    @GetMapping("/getByModel")
-    @Log(title = "BOM-鏍规嵁閫夋嫨鐨勮鏍煎瀷鍙穒d鏌ヨ瀛樺湪鐨刡om", businessType = BusinessType.OTHER)
-    @ApiOperation("BOM-鏍规嵁閫夋嫨鐨勮鏍煎瀷鍙穒d鏌ヨ瀛樺湪鐨刡om")
-    public AjaxResult getByModel(Long productModelId) {
-        List<ProductBom> productBoms = productBomService.list(Wrappers.<ProductBom>lambdaQuery().eq(ProductBom::getProductModelId, productModelId));
-        return AjaxResult.success(productBoms);
-    }
-
-
-    @PostMapping("uploadBom")
-    @PreAuthorize("@ss.hasPermi('product:bom:import')")
-    @Log(title = "鏍规嵁Excel瀵煎叆BOM", businessType = BusinessType.IMPORT)
-    @ApiOperation("鏍规嵁Excel瀵煎叆BOM")
-    public AjaxResult uploadBom(@RequestParam("file") MultipartFile file) {
-        return productBomService.uploadBom(file);
-    }
-
-    @PostMapping("exportBom")
-    @PreAuthorize("@ss.hasPermi('product:bom:export')")
-    @ApiOperation("瀵煎嚭BOM鏂囦欢")
-    @Log(title = "瀵煎嚭BOM鏂囦欢", businessType = BusinessType.EXPORT)
-    public void exportBom(HttpServletResponse response, @RequestParam Integer bomId) {
-        productBomService.exportBom(response, bomId);
-    }
-
-    @GetMapping("/downloadTemplate")
-    @Log(title = "涓嬭浇BOM瀵煎叆妯℃澘", businessType = BusinessType.EXPORT)
-    @ApiOperation("涓嬭浇BOM瀵煎叆妯℃澘")
-    public void importTemplate(HttpServletResponse response) {
-        ExcelUtil<BomImportDto> excelUtil = new ExcelUtil<>(BomImportDto.class);
-        excelUtil.importTemplateExcel(response, "BOM瀵煎叆妯℃澘");
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
deleted file mode 100644
index e385ce3..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductOrderDto;
-import com.ruoyi.production.pojo.ProductOrder;
-import com.ruoyi.production.service.ProductOrderService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.util.List;
-
-@RequestMapping("productOrder")
-@RestController
-@Api(tags = "鐢熶骇璁㈠崟")
-public class ProductOrderController {
-
-    @Autowired
-    private ProductOrderService productOrderService;
-
-
-    @ApiOperation("鍒嗛〉鏌ヨ")
-    @GetMapping("page")
-    public R page(ProductOrderDto productOrder, Page page) {
-        return R.ok(productOrderService.pageProductOrder(page, productOrder));
-    }
-
-    @ApiOperation("缁戝畾宸ヨ壓璺嚎")
-    @PostMapping("/bindingRoute")
-    public R bindingRoute(@RequestBody ProductOrder productOrder) {
-        return R.ok(productOrderService.bindingRoute(productOrder));
-    }
-
-    @ApiOperation("鏌ヨ瑙勬牸鍨嬪彿瀵瑰簲鐨勫伐鑹鸿矾绾�")
-    @GetMapping("/listProcessRoute")
-    public R listProcessRoute(Long productModelId) {
-        return R.ok(productOrderService.listProcessRoute(productModelId));
-    }
-
-    /**
-     * 瀵煎嚭鐢熶骇璁㈠崟
-     */
-    @Log(title = "鐢熶骇璁㈠崟", businessType = BusinessType.EXPORT)
-    @PostMapping("/export")
-    public void export(HttpServletResponse response, ProductOrderDto productOrderDto) {
-        List<ProductOrderDto> list = productOrderService.pageProductOrder(new Page<>(1, -1), productOrderDto).getRecords();
-        ExcelUtil<ProductOrderDto> util = new ExcelUtil<>(ProductOrderDto.class);
-        util.exportExcel(response, list, "鐢熶骇璁㈠崟鏁版嵁");
-    }
-
-    @ApiOperation("鏌ヨ鐢熶骇璁㈠崟瀵瑰簲鐨凚OM")
-    @GetMapping("/listProcessBom")
-    public R listProcessBom(Long orderId) {
-        return R.ok(productOrderService.listProcessBom(orderId));
-    }
-
-
-    @ApiOperation("鏂板鐢熶骇璁㈠崟")
-    @PostMapping("addProductOrder")
-    public R addProductOrder(@RequestBody ProductOrder productOrder) {
-        return R.ok(productOrderService.addProductOrder(productOrder));
-    }
-
-    @ApiOperation("鍒犻櫎鐢熶骇璁㈠崟")
-    @DeleteMapping("/{ids}")
-    public R delete(@PathVariable("ids") Long[] ids) {
-        return R.ok(productOrderService.delete(ids));
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderMaterialController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderMaterialController.java
deleted file mode 100644
index 969c02f..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProductOrderMaterialController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductOrderMaterialDto;
-import com.ruoyi.production.pojo.ProductOrderMaterial;
-import com.ruoyi.production.service.ProductOrderMaterialService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@AllArgsConstructor
-@RequestMapping("/productOrderMaterial")
-@Api(value = "ProductOrderMaterial", tags = "鐢熶骇璁㈠崟鐗╂枡琛�")
-public class ProductOrderMaterialController {
-
-    private ProductOrderMaterialService productOrderMaterialservice;
-
-    @GetMapping("/detailList")
-    @ApiOperation("鍒嗛〉鏌ヨ鎵�鏈夌敓浜ц鍗曠墿鏂欒〃")
-    public R listPage(Page<ProductOrderMaterial> page, ProductOrderMaterial productOrderMaterial) {
-        IPage<ProductOrderMaterial> listPage = productOrderMaterialservice.listPage(page, productOrderMaterial);
-        return R.ok(listPage);
-    }
-
-    @PostMapping("/add")
-    @ApiOperation("鏂板鐢熶骇璁㈠崟鐗╂枡琛�")
-    public R add(@RequestBody ProductOrderMaterial productOrderMaterial) {
-        return R.ok(productOrderMaterialservice.save(productOrderMaterial));
-    }
-
-    @PostMapping("/update")
-    @ApiOperation("淇敼鐢熶骇璁㈠崟鐗╂枡琛�")
-    public R update(@RequestBody ProductOrderMaterial productOrderMaterial) {
-        return R.ok(productOrderMaterialservice.updateById(productOrderMaterial));
-    }
-
-    @GetMapping("/list")
-    @ApiOperation("棰嗘枡鍙拌处鍒楄〃")
-    public R list(ProductOrderMaterialDto productOrderMaterialDto) {
-        List<ProductOrderMaterialDto> productOrderMaterialDtos = productOrderMaterialservice.pickMaterial(productOrderMaterialDto);
-        return R.ok(productOrderMaterialDtos);
-    }
-
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
deleted file mode 100644
index 1640c7e..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.Customer;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.device.pojo.DeviceRepair;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.oA.pojo.OaProject;
-import com.ruoyi.production.dto.ProductProcessDto;
-import com.ruoyi.production.pojo.ProductProcess;
-import com.ruoyi.production.service.impl.ProductProcessServiceImpl;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.util.List;
-
-@RestController
-@Api(tags = "宸ュ簭")
-@RequestMapping("/productProcess")
-public class ProductProcessController extends BaseController {
-
-
-    @Autowired
-    private ProductProcessServiceImpl productProcessService;
-
-    @GetMapping("/listPage")
-    @Log(title = "宸ュ簭-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
-    @ApiOperation("宸ュ簭-鍒嗛〉鏌ヨ")
-    public AjaxResult listPage(Page page, ProductProcessDto productProcessDto) {
-        IPage<ProductProcessDto> listPage = productProcessService.listPage(page, productProcessDto);
-        return AjaxResult.success(listPage);
-    }
-
-    @ApiModelProperty("鏂板宸ュ簭")
-    @PostMapping()
-    @Log(title = "鏂板", businessType = BusinessType.INSERT)
-    public AjaxResult add( @RequestBody ProductProcessDto productProcessDto) {
-        return productProcessService.add(productProcessDto);
-    }
-
-    @ApiOperation("鏇存柊宸ュ簭")
-    @Log(title = "淇敼", businessType = BusinessType.UPDATE)
-    @PutMapping("/update")
-    public AjaxResult update(@RequestBody ProductProcess productProcess) {
-        return AjaxResult.success(productProcessService.updateById(productProcess));
-    }
-
-    @ApiOperation("鍒犻櫎宸ュ簭")
-    @DeleteMapping("/batchDelete")
-    @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
-    public AjaxResult batchDelete(@RequestBody List<Integer> ids) {
-        return AjaxResult.success(productProcessService.batchDelete(ids));
-    }
-
-    @ApiOperation("鏌ヨ鎵�鏈夊伐搴�")
-    @GetMapping("/list")
-    public AjaxResult list() {
-        return AjaxResult.success(productProcessService.list());
-        }
-
-    /**
-     * 瀵煎叆宸ュ簭
-     */
-    @Log(title = "宸ュ簭", businessType = BusinessType.IMPORT)
-    @PostMapping("/importData")
-    public AjaxResult importData(MultipartFile file) throws Exception {
-        return productProcessService.importData(file);
-    }
-
-    @PostMapping("/downloadTemplate")
-    @Log(title = "宸ュ簭-涓嬭浇妯℃澘", businessType = BusinessType.EXPORT)
-    public void downloadTemplate(HttpServletResponse response) {
-        ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class);
-        util.importTemplateExcel(response, "宸ュ簭妯℃澘");
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
deleted file mode 100644
index 2d5231d..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductProcessRouteItemDto;
-import com.ruoyi.production.mapper.*;
-import com.ruoyi.production.pojo.*;
-import com.ruoyi.production.service.ProductProcessRouteItemService;
-import com.ruoyi.production.service.ProductProcessRouteService;
-import com.ruoyi.production.service.ProductWorkOrderService;
-import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
-import com.ruoyi.sales.mapper.SalesLedgerMapper;
-import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.sales.pojo.SalesLedger;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
-
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@RequestMapping("/productProcessRoute")
-@RestController
-@AllArgsConstructor
-@Api(tags = "鐢熶骇宸ヨ壓璺嚎")
-public class ProductProcessRouteItemController {
-
-
-    private ProductProcessRouteItemService productProcessRouteItemService;
-    private ProductProcessRouteService productProcessRouteService;
-
-    @GetMapping("list")
-    @ApiOperation("鏍规嵁Id鏌ヨ宸ヨ壓璺嚎瀛愯〃")
-    public R list(Long orderId) {
-        return R.ok(productProcessRouteItemService.listItem(orderId));
-    }
-
-    @GetMapping("listMain")
-    @ApiOperation("鏍规嵁Id鏌ヨ宸ヨ壓璺嚎涓昏〃")
-    public R listMain(Long orderId) {
-        return R.ok(productProcessRouteService.listMain(orderId));
-    }
-
-    @PostMapping("/addRouteItem")
-    @ApiOperation("鏂板鐢熶骇璁㈠崟鐨勫伐鑹鸿矾绾胯鎯�")
-    public R addRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) {
-        return productProcessRouteItemService.addRouteItem(productProcessRouteItem);
-    }
-
-    @PostMapping("/updateRouteItem")
-    @ApiOperation("淇敼鐢熶骇璁㈠崟鐨勫伐鑹鸿矾绾胯鎯�")
-    public R updateRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) {
-        return R.ok(productProcessRouteItemService.updateById(productProcessRouteItem));
-    }
-
-    @DeleteMapping("/deleteRouteItem/{id}")
-    @ApiOperation("鍒犻櫎鐢熶骇宸ヨ壓璺嚎")
-    public R deleteRouteItem(@PathVariable("id") Long id) {
-        return productProcessRouteItemService.deleteRouteItem(id);
-    }
-
-    @PostMapping ("/sortRouteItem")
-    @ApiOperation("鎺掑簭")
-    public R sortRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) {
-        return R.ok(productProcessRouteItemService.sortRouteItem(productProcessRouteItem));
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductStructureController.java b/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
deleted file mode 100644
index 89ead6d..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductProcessDto;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.pojo.ProductStructure;
-import com.ruoyi.production.service.ProductStructureService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Arrays;
-
-@RequestMapping("productStructure")
-@RestController
-@Api(tags = "BOM")
-public class ProductStructureController {
-    @Autowired
-    private ProductStructureService productStructureService;
-
-
-    @ApiOperation("鏂板BOM瀛愰泦")
-    @PostMapping()
-    public R addOrUpdate(@RequestBody ProductStructureDto productStructureDto){
-        return R.ok(productStructureService.addProductStructureDto(productStructureDto));
-    }
-
-    @ApiOperation("BOM鏌ョ湅瀛愰泦璇︽儏")
-    @GetMapping("/listBybomId/{bomId}")
-    public R listBybomId( @PathVariable("bomId") Integer bomId){
-        return R.ok(productStructureService.listBybomId(bomId));
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java
deleted file mode 100644
index 1314721..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductWorkOrderDto;
-import com.ruoyi.production.pojo.ProductWorkOrder;
-import com.ruoyi.production.service.ProductWorkOrderService;
-import com.ruoyi.quality.pojo.QualityInspect;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-import jakarta.servlet.http.HttpServletResponse;
-
-@RestController
-@AllArgsConstructor
-@RequestMapping("/productWorkOrder")
-public class ProductWorkOrderController {
-
-    private ProductWorkOrderService productWorkOrderservice;
-
-
-    /**
-     * 浜у搧宸ュ崟瀹炰綋绫诲垎椤垫煡璇�
-     */
-    @ApiOperation("浜у搧宸ュ崟瀹炰綋绫诲垎椤垫煡璇�")
-    @GetMapping("/page")
-    public R page(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) {
-        return R.ok(productWorkOrderservice.listPage(page, productWorkOrder));
-    }
-
-    /**
-     * 浜у搧宸ュ崟鏇存柊
-     */
-    @ApiOperation("浜у搧宸ュ崟鏇存柊")
-    @PostMapping ("/updateProductWorkOrder")
-    public R updateProductWorkOrder(@RequestBody ProductWorkOrderDto productWorkOrderDto) {
-        return R.ok(productWorkOrderservice.updateProductWorkOrder(productWorkOrderDto));
-    }
-
-    /**
-     * pda鏍规嵁浜岀淮鐮佺殑宸ュ崟id鏌ヨ鏁版嵁
-     */
-    @ApiOperation("pda鏍规嵁浜岀淮鐮佺殑宸ュ崟id鏌ヨ鏁版嵁")
-    @GetMapping("/getProductWorkOrderById")
-    public R getProductWorkOrderById(Long id) {
-        return R.ok(productWorkOrderservice.getById(id));
-    }
-
-    /**
-     * 宸ュ崟娴佽浆鍗′笅杞�
-     * @param response
-     * @param productWorkOrder
-     */
-    @PostMapping("/down")
-    public void down(HttpServletResponse response, @RequestBody ProductWorkOrder productWorkOrder) {
-        productWorkOrderservice.down(response, productWorkOrder);
-    }
-
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductWorkOrderFileController.java b/src/main/java/com/ruoyi/production/controller/ProductWorkOrderFileController.java
deleted file mode 100644
index 80ba6c3..0000000
--- a/src/main/java/com/ruoyi/production/controller/ProductWorkOrderFileController.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.pojo.ProductWorkOrderFile;
-import com.ruoyi.production.service.ProductWorkOrderFileService;
-import com.ruoyi.quality.pojo.QualityInspectFile;
-import com.ruoyi.quality.service.IQualityInspectFileService;
-import io.swagger.annotations.Api;
-import org.checkerframework.checker.units.qual.A;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
-
-import jakarta.annotation.Resource;
-import java.util.List;
-
-/**
- * <p>
- * 鐢熶骇宸ュ崟闄勪欢琛� 鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-23 03:28:32
- */
-@Api(tags = "鐢熶骇宸ュ崟闄勪欢琛�")
-@RestController
-@RequestMapping("/productWorkOrderFile")
-public class ProductWorkOrderFileController {
-
-    @Resource
-    private ProductWorkOrderFileService productWorkOrderFileService;
-
-
-    /**
-     * 鏂板
-     * @param productWorkOrderFile
-     * @return
-     */
-    @PostMapping("/add")
-    public AjaxResult add(@RequestBody ProductWorkOrderFile productWorkOrderFile) {
-        return AjaxResult.success(productWorkOrderFileService.save(productWorkOrderFile));
-    }
-
-    /**
-     * 鍒犻櫎
-     * @param ids
-     * @return
-     */
-    @DeleteMapping("/del")
-    public AjaxResult delQualityUnqualified(@RequestBody List<Integer> ids) {
-        if(CollectionUtils.isEmpty(ids)){
-            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
-        }
-        //鍒犻櫎妫�楠岄檮浠�
-        return AjaxResult.success(productWorkOrderFileService.removeBatchByIds(ids));
-    }
-
-    /**
-     *鍒嗛〉鏌ヨ
-     * @param page
-     * @param productWorkOrderFile
-     * @return
-     */
-    @GetMapping("/listPage")
-    public AjaxResult listPage(Page page, ProductWorkOrderFile productWorkOrderFile) {
-        return AjaxResult.success(productWorkOrderFileService.page(page, Wrappers.<ProductWorkOrderFile>lambdaQuery().eq(ProductWorkOrderFile::getWorkOrderId,productWorkOrderFile.getWorkOrderId())));
-    }
-
-}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductionAccountController.java
similarity index 64%
rename from src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
rename to src/main/java/com/ruoyi/production/controller/ProductionAccountController.java
index bb1b010..9c34f2a 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionAccountController.java
@@ -5,14 +5,14 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 鐢熶骇鏍哥畻琛� 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
+ * @since 2026-04-21 03:55:52
  */
 @RestController
-@RequestMapping("/productProcessRoute")
-public class ProductProcessRouteController {
+@RequestMapping("/productionAccount")
+public class ProductionAccountController {
 
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java
similarity index 61%
copy from src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
copy to src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java
index bb1b010..da98401 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java
@@ -5,14 +5,14 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 鐢熶骇璁㈠崟BOM浜у搧缁撴瀯 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
+ * @since 2026-04-21 03:55:52
  */
 @RestController
-@RequestMapping("/productProcessRoute")
-public class ProductProcessRouteController {
+@RequestMapping("/productionBomStructure")
+public class ProductionBomStructureController {
 
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionOperationMainParamController.java b/src/main/java/com/ruoyi/production/controller/ProductionOperationMainParamController.java
new file mode 100644
index 0000000..e3dac6a
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOperationMainParamController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟鎶ュ伐鍙傛暟琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@RestController
+@RequestMapping("/productionOperationMainParam")
+public class ProductionOperationMainParamController {
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java
similarity index 62%
copy from src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
copy to src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java
index bb1b010..1c9922f 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOperationTaskController.java
@@ -5,14 +5,14 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 鐢熶骇宸ュ崟琛� 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
+ * @since 2026-04-21 03:55:52
  */
 @RestController
-@RequestMapping("/productProcessRoute")
-public class ProductProcessRouteController {
+@RequestMapping("/productionOperationTask")
+public class ProductionOperationTaskController {
 
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductionOrderBomController.java
similarity index 63%
copy from src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
copy to src/main/java/com/ruoyi/production/controller/ProductionOrderBomController.java
index bb1b010..ee0ecdc 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOrderBomController.java
@@ -5,14 +5,14 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 鐢熶骇璁㈠崟BOM 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
+ * @since 2026-04-21 03:55:52
  */
 @RestController
-@RequestMapping("/productProcessRoute")
-public class ProductProcessRouteController {
+@RequestMapping("/productionOrderBom")
+public class ProductionOrderBomController {
 
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductionOrderController.java
similarity index 64%
copy from src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
copy to src/main/java/com/ruoyi/production/controller/ProductionOrderController.java
index bb1b010..00dcabe 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOrderController.java
@@ -5,14 +5,14 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 鐢熶骇璁㈠崟琛� 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
+ * @since 2026-04-21 03:55:52
  */
 @RestController
-@RequestMapping("/productProcessRoute")
-public class ProductProcessRouteController {
+@RequestMapping("/productionOrder")
+public class ProductionOrderController {
 
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductionOrderPickController.java
similarity index 62%
copy from src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
copy to src/main/java/com/ruoyi/production/controller/ProductionOrderPickController.java
index bb1b010..7f48ba7 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOrderPickController.java
@@ -5,14 +5,14 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 璁㈠崟棰嗘枡绾胯竟浠� 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
+ * @since 2026-04-21 03:55:52
  */
 @RestController
-@RequestMapping("/productProcessRoute")
-public class ProductProcessRouteController {
+@RequestMapping("/productionOrderPick")
+public class ProductionOrderPickController {
 
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductionOrderPickRecordController.java
similarity index 60%
copy from src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
copy to src/main/java/com/ruoyi/production/controller/ProductionOrderPickRecordController.java
index bb1b010..a266c8e 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOrderPickRecordController.java
@@ -5,14 +5,14 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 绾胯竟浠撳嚭鍏ュ簱璁板綍 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
+ * @since 2026-04-21 03:55:52
  */
 @RestController
-@RequestMapping("/productProcessRoute")
-public class ProductProcessRouteController {
+@RequestMapping("/productionOrderPickRecord")
+public class ProductionOrderPickRecordController {
 
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingController.java
similarity index 61%
copy from src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
copy to src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingController.java
index bb1b010..5d76958 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingController.java
@@ -5,14 +5,14 @@
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎琛� 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
+ * @since 2026-04-21 03:55:52
  */
 @RestController
-@RequestMapping("/productProcessRoute")
-public class ProductProcessRouteController {
+@RequestMapping("/productionOrderRouting")
+public class ProductionOrderRoutingController {
 
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingOperationController.java b/src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingOperationController.java
new file mode 100644
index 0000000..d25de7b
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingOperationController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@RestController
+@RequestMapping("/productionOrderRoutingOperation")
+public class ProductionOrderRoutingOperationController {
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingOperationParamController.java b/src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingOperationParamController.java
new file mode 100644
index 0000000..2828729
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductionOrderRoutingOperationParamController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@RestController
+@RequestMapping("/productionOrderRoutingOperationParam")
+public class ProductionOrderRoutingOperationParamController {
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionPlanController.java b/src/main/java/com/ruoyi/production/controller/ProductionPlanController.java
new file mode 100644
index 0000000..df8a6fd
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductionPlanController.java
@@ -0,0 +1,111 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.bean.dto.ProductionPlanDto;
+import com.ruoyi.production.bean.dto.ProductionPlanImportDto;
+import com.ruoyi.production.bean.vo.ProductionPlanVo;
+import com.ruoyi.production.service.ProductionPlanService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐢熶骇璁″垝琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 02:11:10
+ */
+@RestController
+@RequestMapping("/productionPlan")
+@RequiredArgsConstructor
+@Api(tags = "涓荤敓浜ц鍒�")
+public class ProductionPlanController {
+
+    private final ProductionPlanService productionPlanService;
+
+    @GetMapping("/listPage")
+    @ApiOperation("鑾峰彇鐢熶骇璁″垝鍒楄〃")
+    public R<IPage<ProductionPlanVo>> productionPlanListPage(Page<ProductionPlanDto> page, ProductionPlanDto productionPlanDto) {
+        return R.ok(productionPlanService.listPage(page, productionPlanDto));
+    }
+
+    @GetMapping("/loadProdData")
+    @ApiOperation("鎷夊彇閿�鍞敓浜ц鍒�")
+    @Log(title = "鎷夊彇閿�鍞敓浜ц鍒�", businessType = BusinessType.INSERT)
+    public R loadProdData() {
+        productionPlanService.loadProdData();
+        return R.ok();
+    }
+
+    @PostMapping("/combine")
+    @Log(title = "鍚堝苟鐢熶骇璁″垝", businessType = BusinessType.INSERT)
+    @ApiOperation("鍚堝苟鐢熶骇璁″垝")
+    public R combine(@RequestBody ProductionPlanDto productionPlanDto) {
+        if (productionPlanDto.getIds() == null || productionPlanDto.getIds().isEmpty()) {
+            return R.fail("璇烽�夋嫨瑕佷笅鍙戠殑鐢熶骇璁″垝");
+        }
+
+        if (productionPlanDto.getTotalAssignedQuantity() == null || productionPlanDto.getTotalAssignedQuantity().compareTo(BigDecimal.ZERO) <= 0) {
+            return R.fail("璇疯緭鍏ヤ笅鍙戞暟閲�");
+        }
+        return R.ok(productionPlanService.combine(productionPlanDto));
+    }
+
+    @PostMapping("")
+    @Log(title = "鍒涘缓鐢熶骇璁″垝", businessType = BusinessType.INSERT)
+    @ApiOperation("鍒涘缓鐢熶骇璁″垝")
+    public R add(@RequestBody ProductionPlanDto productionPlanDto) {
+        return R.ok(productionPlanService.add(productionPlanDto));
+    }
+
+    @PutMapping("")
+    @Log(title = "鏇存柊鐢熶骇璁″垝", businessType = BusinessType.UPDATE)
+    @ApiOperation("鏇存柊鐢熶骇璁″垝")
+    public R update(@RequestBody ProductionPlanDto productionPlanDto) {
+        return R.ok(productionPlanService.update(productionPlanDto));
+    }
+
+    @DeleteMapping("")
+    @Log(title = "鍒犻櫎鐢熶骇璁″垝", businessType = BusinessType.DELETE)
+    @ApiOperation("鍒犻櫎鐢熶骇璁″垝")
+    public R delete(@RequestBody List<Long> ids) {
+        return R.ok(productionPlanService.removeByIds(ids));
+    }
+
+    @PostMapping("/downloadTemplate")
+    @Log(title = "涓嬭浇涓荤敓浜ц鍒掑鍏ユā鏉�", businessType = BusinessType.EXPORT)
+    @ApiOperation("涓嬭浇涓荤敓浜ц鍒掑鍏ユā鏉�")
+    public void importTemplate(HttpServletResponse response) {
+        ExcelUtil<ProductionPlanImportDto> excelUtil = new ExcelUtil<>(ProductionPlanImportDto.class);
+        excelUtil.importTemplateExcel(response, "涓荤敓浜ц鍒掑鍏ユā鏉�");
+    }
+
+    @PostMapping("/import")
+    @ApiOperation("涓荤敓浜ц鍒掓暟鎹鍏�")
+    @Log(title = "涓荤敓浜ц鍒掓暟鎹鍏�", businessType = BusinessType.IMPORT)
+    public R importProdData(@RequestParam("file") MultipartFile file) {
+        productionPlanService.importProdData(file);
+        return R.ok("瀵煎叆鎴愬姛");
+    }
+
+    @PostMapping("/export")
+    @ApiOperation("涓荤敓浜ц鍒掓暟鎹鍑�")
+    @Log(title = "涓荤敓浜ц鍒掓暟鎹鍑�", businessType = BusinessType.EXPORT)
+    public void exportProdData(HttpServletResponse response, @RequestBody(required = false) List<Long> ids) {
+        productionPlanService.exportProdData(response, ids);
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
index b4bf7dc..758e699 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
@@ -1,25 +1,18 @@
 package com.ruoyi.production.controller;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductionProductInputDto;
-import com.ruoyi.production.service.ProductionProductInputService;
-import io.swagger.annotations.Api;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-@RequestMapping("productionProductInput")
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐鎶曞叆琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @RestController
-@Api(value = "鐢熶骇鎶曞叆")
+@RequestMapping("/productionProductInput")
 public class ProductionProductInputController {
 
-    @Autowired
-    private ProductionProductInputService productionProductInputService;
-
-    @GetMapping("listPage")
-    public R page(Page<ProductionProductInputDto> page, ProductionProductInputDto productionProductInputDto) {
-        return R.ok(productionProductInputService.listPageProductionProductInputDto(page, productionProductInputDto));
-    }
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
index ee90fbc..6b755bc 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -1,66 +1,18 @@
 package com.ruoyi.production.controller;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductProcessRouteItemDto;
-import com.ruoyi.production.dto.ProductionProductMainDto;
-import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
-import com.ruoyi.production.service.ProductionProductMainService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import jakarta.servlet.http.HttpServletResponse;
-import java.util.Arrays;
-import java.util.List;
-
-@RequestMapping("productionProductMain")
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @RestController
-@Api(value = "鐢熶骇鎶ュ伐")
+@RequestMapping("/productionProductMain")
 public class ProductionProductMainController {
 
-    @Autowired
-    private ProductionProductMainService productionProductMainService;
-
-    /**
-     * 鎶ュ伐鏌ヨ
-     * @param page
-     * @param productionProductMainDto
-     * @return
-     */
-    @GetMapping("listPage")
-    public R page(Page<ProductionProductMainDto> page, ProductionProductMainDto productionProductMainDto) {
-        return R.ok(productionProductMainService.listPageProductionProductMainDto(page, productionProductMainDto));
-    }
-
-    /**
-     * 鎶ュ伐鏂板鏇存柊
-     * @param productionProductMainDto
-     * @return
-     */
-    @PostMapping("addProductMain")
-    public R addProductMain(@RequestBody ProductionProductMainDto productionProductMainDto) {
-        return R.ok(productionProductMainService.addProductMain(productionProductMainDto));
-    }
-
-    @ApiOperation("鍒犻櫎鎶ュ伐")
-    @DeleteMapping("/delete")
-    public R delete(@RequestBody ProductionProductMainDto productionProductMainDto) {
-        return R.ok(productionProductMainService.removeProductMain(productionProductMainDto.getId()));
-    }
-
-
-    /**
-     * 瀵煎嚭
-     */
-    @PostMapping("/export")
-    public void export(HttpServletResponse response, ProductionProductMainDto productionProductMainDto) {
-        List<ProductionProductMainDto> list;
-        list = productionProductMainService.listPageProductionProductMainDto(new Page<>(1, -1), productionProductMainDto).getRecords();
-        ExcelUtil<ProductionProductMainDto> util = new ExcelUtil<ProductionProductMainDto>(ProductionProductMainDto.class);
-        util.exportExcel(response, list, "鐢熶骇鎶ュ伐鏁版嵁");
-    }
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
index ca9c1e8..64963d1 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
@@ -1,27 +1,18 @@
 package com.ruoyi.production.controller;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductionProductInputDto;
-import com.ruoyi.production.dto.ProductionProductOutputDto;
-import com.ruoyi.production.service.ProductionProductInputService;
-import com.ruoyi.production.service.ProductionProductOutputService;
-import io.swagger.annotations.Api;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-@RequestMapping("productionProductOutput")
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐浜у嚭琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @RestController
-@Api(value = "鐢熶骇浜у嚭")
+@RequestMapping("/productionProductOutput")
 public class ProductionProductOutputController {
 
-    @Autowired
-    private ProductionProductOutputService productionProductOutputService;
-
-    @GetMapping("listPage")
-    public R page(Page<ProductionProductOutputDto> page, ProductionProductOutputDto productionProductOutputDto) {
-        return R.ok(productionProductOutputService.listPageProductionProductOutputDto(page, productionProductOutputDto));
-    }
 }
diff --git a/src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java b/src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java
deleted file mode 100644
index bf4891b..0000000
--- a/src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.account.pojo.AccountExpense;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductOrderDto;
-import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
-import com.ruoyi.production.dto.UserProductionAccountingDto;
-import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
-import com.ruoyi.production.service.SalesLedgerProductionAccountingService;
-import com.ruoyi.production.service.impl.SalesLedgerProductionAccountingServiceImpl;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:43
- */
-@RestController
-@Api(tags = "鐢熶骇鏍哥畻")
-@RequestMapping("/salesLedger/productionAccounting")
-public class SalesLedgerProductionAccountingController extends BaseController {
-
-    @Autowired
-    private SalesLedgerProductionAccountingService salesLedgerProductionAccountingService;
-
-    @GetMapping("/listPage")
-    @ApiOperation("鐢熶骇鏍哥畻-鍒嗛〉鏌ヨ")
-    @Log(title = "鐢熶骇鏍哥畻-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
-    public AjaxResult listPage(Page page, SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto) {
-        IPage<SalesLedgerProductionAccountingDto> list = salesLedgerProductionAccountingService.listPage(page, salesLedgerProductionAccountingDto);
-        return AjaxResult.success(list);
-    }
-
-    /**
-     * 瀵煎嚭
-     */
-    @PostMapping("/export")
-    public void export(HttpServletResponse response, SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto) {
-        List<SalesLedgerProductionAccountingDto> list;
-        list = salesLedgerProductionAccountingService.listPage(new Page<>(1, -1), salesLedgerProductionAccountingDto).getRecords();
-        ExcelUtil<SalesLedgerProductionAccountingDto> util = new ExcelUtil<SalesLedgerProductionAccountingDto>(SalesLedgerProductionAccountingDto.class);
-        util.exportExcel(response, list, "鐢熶骇鏍哥畻鏁版嵁");
-    }
-//----------------------------------------------------------------------------------------------------------------------------------------------------
-    @GetMapping("/page")
-    @ApiModelProperty("鏌ヨ宸ヤ汉鐢熶骇宸ヨ祫淇℃伅")
-    public R pageProductionAccounting(SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page){
-        return R.ok(salesLedgerProductionAccountingService.pageProductionAccounting(salesLedgerProductionAccountingDto, page));
-    }
-
-    @GetMapping("/listProductionDetails")
-    @ApiModelProperty("鏌ヨ宸ヤ汉鐢熶骇宸ヨ祫淇℃伅")
-    public R listProductionDetails(SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page){
-        return R.ok(salesLedgerProductionAccountingService.listProductionDetails(salesLedgerProductionAccountingDto,page));
-    }
-
-    @GetMapping("getByUserId")
-    @ApiModelProperty("鏌ヨ宸ヤ汉鐢熶骇宸ヨ祫淇℃伅")
-    public R getByUserId(UserProductionAccountingDto userProductionAccountingDto){
-        return R.ok(salesLedgerProductionAccountingService.getByUserId(userProductionAccountingDto));
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java b/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
deleted file mode 100644
index bcd1b53..0000000
--- a/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package com.ruoyi.production.controller;
-
-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.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.procurementrecord.dto.ProcurementDto;
-import com.ruoyi.production.dto.ProcessSchedulingDto;
-import com.ruoyi.production.dto.ProductionDispatchAddDto;
-import com.ruoyi.production.dto.SalesLedgerSchedulingDto;
-import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
-import com.ruoyi.production.mapper.SpeculativeTradingInfoMapper;
-import com.ruoyi.production.pojo.SpeculativeTradingInfo;
-import com.ruoyi.production.service.impl.SalesLedgerSchedulingServiceImpl;
-import com.ruoyi.sales.mapper.LossMapper;
-import com.ruoyi.sales.pojo.Loss;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:43
- */
-@RestController
-@Api(tags = "鐢熶骇璁㈠崟")
-@RequestMapping("/salesLedger/scheduling")
-@Deprecated // 鏍囪璇ョ被宸插純鐢�
-public class SalesLedgerSchedulingController extends BaseController {
-
-    @Autowired
-    private SalesLedgerSchedulingServiceImpl salesLedgerSchedulingService;
-
-
-    @Autowired
-    private SpeculativeTradingInfoMapper speculativeTradingInfoMapper;
-
-    @Autowired
-    private LossMapper lossMapper;
-
-    @GetMapping("/loss")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-鎹熻�楃巼", businessType = BusinessType.OTHER)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-鎹熻�楃巼")
-    public AjaxResult loss() {
-        return AjaxResult.success(lossMapper.selectOne(new LambdaQueryWrapper<Loss>().last("limit 1")));
-    }
-
-    @PostMapping("/addLoss")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鎹熻�楃巼", businessType = BusinessType.INSERT)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鎹熻�楃巼")
-    public AjaxResult addLoss(@RequestBody Loss loss) {
-        lossMapper.insert(loss);
-        return AjaxResult.success("娣诲姞鎹熻�楃巼鎴愬姛");
-    }
-
-    @PostMapping("/updateLoss")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鎹熻�楃巼", businessType = BusinessType.UPDATE)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鎹熻�楃巼")
-    public AjaxResult updateLoss(@RequestBody Loss loss) {
-        lossMapper.updateById(loss);
-        return AjaxResult.success("淇敼鎹熻�楃巼鎴愬姛");
-    }
-
-    @GetMapping("/list")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-鐐掓満淇℃伅", businessType = BusinessType.OTHER)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-鐐掓満淇℃伅")
-    public AjaxResult list() {
-        List<SpeculativeTradingInfo> result = speculativeTradingInfoMapper.selectList(null);
-        result.forEach(item -> {
-            item.setCurrentWorkLoad(salesLedgerSchedulingService.getSchedulingNumBySpeculativeTradingName(item.getName()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
-            item.setVacant(item.getWorkLoad().subtract(item.getCurrentWorkLoad()).setScale(2, RoundingMode.HALF_UP)); //淇濈暀涓や綅灏忔暟
-        });
-        return AjaxResult.success(result);
-    }
-
-    @PostMapping("/addSpeculatTrading")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鐐掓満淇℃伅", businessType = BusinessType.INSERT)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鐐掓満淇℃伅")
-    public AjaxResult addSpeculatTrading(@RequestBody List<SpeculativeTradingInfo> speculativeTradingInfo) {
-        if(CollectionUtils.isEmpty(speculativeTradingInfo)) return AjaxResult.error("鏁版嵁缁勪笉鑳戒负绌�");
-        speculativeTradingInfo.forEach(item -> {
-            speculativeTradingInfoMapper.insert(item);
-        });
-        return AjaxResult.success("娣诲姞鐐掓満淇℃伅鎴愬姛");
-    }
-
-    @PostMapping("/updateSpeculatTrading")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鐐掓満淇℃伅", businessType = BusinessType.UPDATE)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鐐掓満淇℃伅")
-    public AjaxResult updateSpeculatTrading(@RequestBody List<SpeculativeTradingInfo> speculativeTradingInfo) {
-        if(CollectionUtils.isEmpty(speculativeTradingInfo)) return AjaxResult.error("鏁版嵁缁勪笉鑳戒负绌�");
-        speculativeTradingInfo.forEach(item -> {
-            speculativeTradingInfoMapper.updateById(item);
-        });
-        return AjaxResult.success("淇敼鐐掓満淇℃伅鎴愬姛");
-    }
-
-
-    @GetMapping("/listPage")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇璁㈠崟-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇璁㈠崟-鍒嗛〉鏌ヨ")
-    public AjaxResult listPage(Page page, SalesLedgerSchedulingDto salesLedgerSchedulingDto) {
-        IPage<SalesLedgerSchedulingDto> result = salesLedgerSchedulingService.listPage(page,salesLedgerSchedulingDto);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 瀵煎嚭
-     * @param response
-     */
-    @PostMapping("/export")
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇璁㈠崟-瀵煎嚭")
-    public void export(HttpServletResponse response) {
-        salesLedgerSchedulingService.export(response);
-    }
-
-
-    /**
-     * 瀵煎嚭
-     * @param response
-     */
-    @PostMapping("/exportOne")
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-瀵煎嚭")
-    public void exportOne(HttpServletResponse response) {
-        salesLedgerSchedulingService.exportOne(response);
-    }
-
-    @PostMapping("/productionDispatch")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇璁㈠崟-鐢熶骇娲惧伐", businessType = BusinessType.INSERT)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇璁㈠崟-鐢熶骇娲惧伐")
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult productionDispatch(@RequestBody ProductionDispatchAddDto productionDispatchAddDto) {
-        List<ProductionDispatchAddDto> productionDispatchAddDtoList = new ArrayList<>();
-        productionDispatchAddDtoList.add(productionDispatchAddDto);
-        String result = salesLedgerSchedulingService.productionDispatch(productionDispatchAddDtoList);
-        return AjaxResult.success(result);
-    }
-
-    @PostMapping("/productionDispatchList")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇璁㈠崟-鑷姩娲惧伐", businessType = BusinessType.INSERT)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇璁㈠崟-鑷姩娲惧伐")
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult productionDispatchList(@RequestBody List<ProductionDispatchAddDto> productionDispatchAddDto) {
-        String result = salesLedgerSchedulingService.productionDispatch(productionDispatchAddDto);
-        return AjaxResult.success(result);
-    }
-
-    @GetMapping("/listPageProcess")
-    @Log(title = "鐢熶骇绠$悊-宸ュ簭鎺掍骇-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
-    @ApiOperation("鐢熶骇绠$悊-宸ュ簭鎺掍骇-鍒嗛〉鏌ヨ")
-    public AjaxResult listPageProcess(Page page, SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto) {
-        IPage<SalesLedgerSchedulingProcessDto> result = salesLedgerSchedulingService.listPageProcess(page,salesLedgerSchedulingDto);
-        return AjaxResult.success(result);
-    }
-
-    /**
-     * 瀵煎嚭
-     * @param response
-     */
-    @PostMapping("/exportTwo")
-    @ApiOperation("鐢熶骇绠$悊-宸ュ簭鎺掍骇-瀵煎嚭")
-    public void exportTwo(HttpServletResponse response) {
-        Page page = new Page(-1,-1);
-        SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto = new SalesLedgerSchedulingProcessDto();
-        IPage<SalesLedgerSchedulingProcessDto> result = salesLedgerSchedulingService.listPageProcess(page,salesLedgerSchedulingDto);
-        result.getRecords().forEach(item -> {
-            item.setStatusName(item.getStatus().toString());
-        });
-        ExcelUtil<SalesLedgerSchedulingProcessDto> util = new ExcelUtil<>(SalesLedgerSchedulingProcessDto.class);
-        util.exportExcel(response, result.getRecords(), "宸ュ簭鎺掍骇");
-    }
-
-
-    @DeleteMapping("/productionDispatchDelete")
-    @Log(title = "鐢熶骇绠$悊-宸ュ簭鎺掍骇-鍙栨秷鎺掍骇", businessType = BusinessType.DELETE)
-    @ApiOperation("鐢熶骇绠$悊-宸ュ簭鎺掍骇-鍙栨秷鎺掍骇")
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult productionDispatchDelete(@RequestBody List<Long> ids) {
-        int result = salesLedgerSchedulingService.productionDispatchDelete(ids);
-        return AjaxResult.success(result);
-    }
-
-
-    @PostMapping("/processScheduling")
-    @Log(title = "鐢熶骇绠$悊-宸ュ簭鎺掍骇", businessType = BusinessType.INSERT)
-    @ApiOperation("鐢熶骇绠$悊-宸ュ簭鎺掍骇")
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult processScheduling(@RequestBody List<ProcessSchedulingDto> processSchedulingDto) {
-        int result = salesLedgerSchedulingService.processScheduling(processSchedulingDto);
-        return AjaxResult.success(result);
-    }
-
-
-}
diff --git a/src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java b/src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java
deleted file mode 100644
index f63224e..0000000
--- a/src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java
+++ /dev/null
@@ -1,92 +0,0 @@
-//package com.ruoyi.production.controller;
-//
-//import com.baomidou.mybatisplus.core.metadata.IPage;
-//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-//import com.ruoyi.common.utils.poi.ExcelUtil;
-//import com.ruoyi.framework.aspectj.lang.annotation.Log;
-//import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-//import com.ruoyi.framework.web.controller.BaseController;
-//import com.ruoyi.framework.web.domain.AjaxResult;
-//import com.ruoyi.production.dto.ProcessSchedulingDto;
-//import com.ruoyi.production.dto.ProductionReportDto;
-//import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
-//import com.ruoyi.production.dto.SalesLedgerWorkDto;
-//import com.ruoyi.production.pojo.SalesLedgerWork;
-//import com.ruoyi.production.service.SalesLedgerWorkService;
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiOperation;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.transaction.annotation.Transactional;
-//import org.springframework.web.bind.annotation.*;
-//
-//import jakarta.servlet.http.HttpServletResponse;
-//import java.util.List;
-//
-///**
-// * @author :yys
-// * @date : 2025/7/21 14:43
-// */
-//@RestController
-//@Api(tags = "鐢熶骇鎶ュ伐(鎺掍骇璁板綍)")
-//@RequestMapping("/salesLedger/work")
-//@Deprecated // 鏍囪璇ョ被宸插純鐢�
-//public class SalesLedgerWorkController extends BaseController {
-//
-//
-//    @Autowired
-//    private SalesLedgerWorkServiceImpl salesLedgerWorkService;
-//
-//    @GetMapping("/listPage")
-//    @Log(title = "鐢熶骇鎶ュ伐-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
-//    @ApiOperation("鐢熶骇鎶ュ伐-鍒嗛〉鏌ヨ")
-//    public AjaxResult listPage(Page page, SalesLedgerWorkDto salesLedgerWorkDto) {
-//        IPage<SalesLedgerWorkDto> listPage = salesLedgerWorkService.listPage(page, salesLedgerWorkDto);
-//        return AjaxResult.success(listPage);
-//    }
-//
-//    /**
-//     * 瀵煎嚭
-//     * @param response
-//     */
-//    @PostMapping("/export")
-//    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐-瀵煎嚭")
-//    public void export(HttpServletResponse response) {
-//        Page page = new Page(-1,-1);
-//        SalesLedgerWorkDto salesLedgerSchedulingDto = new SalesLedgerWorkDto();
-//        IPage<SalesLedgerWorkDto> result = salesLedgerWorkService.listPage(page,salesLedgerSchedulingDto);
-//        result.getRecords().forEach(item -> {
-//            item.setDaiNum(item.getFinishedNum().subtract(item.getSchedulingNum()));
-//            item.setStatusName(item.getStatus().toString());
-//        });
-//        ExcelUtil<SalesLedgerWorkDto> util = new ExcelUtil<>(SalesLedgerWorkDto.class);
-//        util.exportExcel(response, result.getRecords(), "宸ュ簭鎺掍骇");
-//    }
-//
-//    @GetMapping("/list")
-//    @Log(title = "鐢熶骇鎶ュ伐-鏌ヨ", businessType = BusinessType.OTHER)
-//    @ApiOperation("鐢熶骇鎶ュ伐-鏌ヨ")
-//    public AjaxResult list(@RequestParam("id") Long id) {
-//        List<ProductionReportDto> list = salesLedgerWorkService.getList(id);
-//        return AjaxResult.success(list);
-//    }
-//
-//    @PostMapping("/productionReport")
-//    @Log(title = "鐢熶骇绠$悊-鐢熶骇鎶ュ伐", businessType = BusinessType.INSERT)
-//    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐")
-//    @Transactional(rollbackFor = Exception.class)
-//    public AjaxResult productionReport(@RequestBody ProductionReportDto productionReportDto) {
-//        int result = salesLedgerWorkService.productionReport(productionReportDto);
-//        return AjaxResult.success(result);
-//    }
-//
-//
-//    @PostMapping("/productionReportUpdate")
-//    @Log(title = "鐢熶骇绠$悊-鐢熶骇鎶ュ伐-淇敼", businessType = BusinessType.UPDATE)
-//    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐-淇敼")
-//    @Transactional(rollbackFor = Exception.class)
-//    public AjaxResult productionReportUpdate(@RequestBody ProductionReportDto productionReportDto) {
-//        int result = salesLedgerWorkService.productionReportUpdate(productionReportDto);
-//        return AjaxResult.success(result);
-//    }
-//
-//}
diff --git a/src/main/java/com/ruoyi/production/dto/BomImportDto.java b/src/main/java/com/ruoyi/production/dto/BomImportDto.java
deleted file mode 100644
index 0cea81a..0000000
--- a/src/main/java/com/ruoyi/production/dto/BomImportDto.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-@Data
-public class BomImportDto {
-
-    @Excel(name = "鐖堕」浜у搧缂栧彿")
-    private String parentCode;
-
-    @Excel(name = "鐖堕」浜у搧鍚嶇О")
-    private String parentName;
-
-    @Excel(name = "鐖堕」浜у搧瑙勬牸")
-    private String parentSpec;
-
-    @Excel(name = "瀛愰」浜у搧缂栧彿")
-    private String childCode;
-
-    @Excel(name = "瀛愰」浜у搧鍚嶇О")
-    private String childName;
-
-    @Excel(name = "瀛愰」浜у搧瑙勬牸")
-    private String childSpec;
-
-    @Excel(name = "鍗曚綅鐢ㄩ噺")
-    private BigDecimal unitQty;
-
-    @Excel(name = "鎶曟枡宸ュ簭")
-    private String process;
-
-    @Excel(name = "澶囨敞")
-    private String remark;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/DaiDto.java b/src/main/java/com/ruoyi/production/dto/DaiDto.java
deleted file mode 100644
index 86853cb..0000000
--- a/src/main/java/com/ruoyi/production/dto/DaiDto.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * @author :yys
- * @date : 2025/11/3 9:35
- */
-@Data
-public class DaiDto{
-
-    @Excel(name = "寰呮帓鏁伴噺")
-    private BigDecimal daiNum;
-
-    @ApiModelProperty(value = "閿�鍞骇鍝両D")
-    private Long salesLedgerProductId;
-
-    @ApiModelProperty(value = "閿�鍞彴璐D")
-    private Long salesLedgerId;
-
-    /**
-     * 閿�鍞悎鍚屽彿
-     */
-    @Excel(name = "閿�鍞悎鍚屽彿")
-    @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
-    private String salesContractNo;
-
-    /**
-     * 瀹㈡埛鍚堝悓鍙�
-     */
-    @Excel(name = "瀹㈡埛鍚堝悓鍙�")
-    @ApiModelProperty(value = "瀹㈡埛鍚堝悓鍙�")
-    private String customerContractNo;
-
-    /**
-     * 椤圭洰鍚嶇О
-     */
-    @Excel(name = "椤圭洰鍚嶇О")
-    @ApiModelProperty(value = "椤圭洰鍚嶇О")
-    private String projectName;
-
-    /**
-     * 褰曞叆鏃ユ湡
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "褰曞叆鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty(value = "褰曞叆鏃ユ湡")
-    private Date entryDate;
-
-    @ApiModelProperty(value = "褰曞叆鏃ユ湡寮�濮�")
-    private String entryDateStart;
-
-    @ApiModelProperty(value = "褰曞叆鏃ユ湡缁撴潫")
-    private String entryDateEnd;
-
-    /**
-     * 瀹㈡埛鍚嶇О
-     */
-    @Excel(name = "瀹㈡埛鍚嶇О")
-    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
-    private String customerName;
-
-
-    /**
-     * 浜у搧澶х被
-     */
-    @Excel(name = "浜у搧澶х被")
-    @ApiModelProperty(value = "浜у搧澶х被")
-    private String productCategory;
-
-    /**
-     * 瑙勬牸鍨嬪彿
-     */
-    @Excel(name = "瑙勬牸鍨嬪彿")
-    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
-    private String specificationModel;
-
-    /**
-     * 鍗曚綅
-     */
-    @Excel(name = "鍗曚綅")
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-
-    /**
-     * 鏁伴噺
-     */
-    @Excel(name = "鏁伴噺")
-    @ApiModelProperty(value = "鏁伴噺")
-    private BigDecimal quantity;
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    @Excel(name = "鎺掍骇鏁伴噺")
-    @ApiModelProperty(value = "鎺掍骇鏁伴噺")
-    private BigDecimal schedulingNum;
-
-    @ApiModelProperty(value = "绉熸埛ID")
-    private Long tenantId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java b/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java
deleted file mode 100644
index 232a00c..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.production.pojo.ProcessRoute;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-@Data
-public class ProcessRouteDto extends ProcessRoute {
-
-    private Long productId;
-
-    private String productName;
-
-    @ApiModelProperty("瑙勬牸")
-    private String model;
-
-    private String bomNo;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java b/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
deleted file mode 100644
index 705354c..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.production.pojo.ProcessRouteItem;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class ProcessRouteItemDto extends ProcessRouteItem {
-
-    @ApiModelProperty(value = "宸ュ簭鍚嶇О")
-    private String processName;
-
-    @ApiModelProperty(value = "宸ヨ壓璺嚎鍚嶇О")
-    private String routeName;
-
-    @ApiModelProperty(value = "鐢熶骇鐐掓満")
-    private String speculativeTradingName;
-
-    @ApiModelProperty(value = "浜у搧鍚嶇О")
-    private String productName;
-
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-
-    private Long productId;
-
-
-    private String model;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java b/src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java
deleted file mode 100644
index 1143abd..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.ruoyi.production.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
-/**
- * @author :yys
- * @date : 2025/7/22 9:19
- */
-@Data
-@ApiModel
-public class ProcessSchedulingDto {
-
-    private Long id;
-
-    /**
-     * 鎺掍骇浜篿d
-     */
-    @ApiModelProperty(value = "鎺掍骇浜篿d")
-    private Long schedulingUserId;
-
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    @ApiModelProperty(value = "鎺掍骇鏁伴噺")
-    private BigDecimal schedulingNum;
-
-    /**
-     * 宸ユ椂瀹氶
-     */
-    @ApiModelProperty(value = "宸ユ椂瀹氶")
-    private BigDecimal workHours;
-
-    /**
-     * 浜х嚎
-     */
-    @ApiModelProperty(value = "浜х嚎")
-    private String productionLine;
-
-    /**
-     * 宸ュ簭
-     */
-    @ApiModelProperty(value = "宸ュ簭")
-    private String process;
-
-
-    /**
-     * 鎺掍骇鏃ユ湡
-     */
-    @ApiModelProperty(value = "鎺掍骇鏃ユ湡")
-    private String schedulingDate;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-
-    /**
-     * 鎹熻��
-     */
-    @ApiModelProperty(value = "鎹熻��")
-    private String loss;
-
-    /**
-     * 鍙e懗鍒嗙被
-     */
-    @ApiModelProperty(value = "鍙e懗鍒嗙被")
-    private String type;
-
-    /**
-     * 棰嗙敤
-     */
-    @ApiModelProperty(value = "棰嗙敤")
-    private String receive;
-
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductBomDto.java b/src/main/java/com/ruoyi/production/dto/ProductBomDto.java
deleted file mode 100644
index ab695ca..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductBomDto.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.production.pojo.ProductBom;
-import lombok.Data;
-
-import java.util.List;
-
-//鍒嗛〉鏌ヨ鍥炴樉鏁版嵁
-@Data
-public class ProductBomDto extends ProductBom {
-
-    //浜у搧鍚嶇О
-    private String productName;
-
-    //浜у搧瑙勬牸鍨嬪彿
-    private String productModelName;
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
deleted file mode 100644
index dc2185a..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.production.pojo.ProductOrder;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-@Data
-@ExcelIgnoreUnannotated
-public class ProductOrderDto extends ProductOrder {
-
-    @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
-    @Excel(name = "閿�鍞悎鍚屽彿")
-    private String salesContractNo;
-
-    @ApiModelProperty(value = "椤圭洰鍚�")
-    @Excel(name = "椤圭洰鍚�")
-    private String projectName;
-
-    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
-    @Excel(name = "瀹㈡埛鍚嶇О")
-    private String customerName;
-
-    @ApiModelProperty(value = "浜у搧鍚嶇О")
-    @Excel(name = "浜у搧鍚嶇О")
-    private String productCategory;
-
-    @ApiModelProperty(value = "瑙勬牸")
-    @Excel(name = "瑙勬牸")
-    private String specificationModel;
-
-    @ApiModelProperty(value = "宸ヨ壓璺嚎缂栧彿")
-    @Excel(name = "宸ヨ壓璺嚎缂栧彿")
-    private String processRouteCode;
-
-    @ApiModelProperty(value = "瀹屾垚杩涘害")
-    @Excel(name = "瀹屾垚杩涘害", suffix = "%")
-    private BigDecimal completionStatus;
-
-    @ApiModelProperty(value = "BOM缂栧彿")
-    @Excel(name = "BOM缂栧彿")
-    private String bomNo;
-
-    @ApiModelProperty(value = "浜ゆ湡鍋忓樊")
-    private Integer deliveryDaysDiff;
-
-    @ApiModelProperty(value = "浜ゆ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate deliveryDate;
-
-    //鏄惁鍙戣揣(鍙拌处椤甸潰棰滆壊鎺у埗)
-    private Boolean isFh;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderMaterialDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderMaterialDto.java
deleted file mode 100644
index 57d7670..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderMaterialDto.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.production.pojo.ProductOrderMaterial;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class ProductOrderMaterialDto extends ProductOrderMaterial {
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java b/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
deleted file mode 100644
index 7383a82..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.production.pojo.ProductProcess;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-@Data
-@ApiModel
-public class ProductProcessDto extends ProductProcess {
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java b/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
deleted file mode 100644
index d6ec3f1..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.production.pojo.ProcessRouteItem;
-import com.ruoyi.production.pojo.ProductProcessRouteItem;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class ProductProcessRouteItemDto extends ProductProcessRouteItem {
-
-    @ApiModelProperty(value = "宸ュ簭鍚嶇О")
-    private String processName;
-
-    @ApiModelProperty(value = "浜у搧鍚嶇О")
-    private String productCategory;
-
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-
-    private Long productId;
-
-    private String productName;
-
-    private String model;
-
-    private Boolean isComplete;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductStructureDto.java b/src/main/java/com/ruoyi/production/dto/ProductStructureDto.java
deleted file mode 100644
index ec43eef..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductStructureDto.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.ruoyi.production.pojo.ProductStructure;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.List;
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class ProductStructureDto extends ProductStructure {
-
-    @ApiModelProperty(value = "宸ヨ壓鍚嶇О")
-    private String processName;
-
-    @ApiModelProperty(value = "浜у搧鍚嶇О")
-    private String productName;
-
-    @ApiModelProperty(value = "浜у搧id")
-    private Long productId;
-
-    private String model;
-
-    @TableField(exist = false)
-    private String tempId;
-
-    @TableField(exist = false)
-    private String parentTempId;
-
-    @TableField(exist = false)
-    private List<ProductStructureDto> children;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
deleted file mode 100644
index 6e2ca95..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.production.pojo.ProductWorkOrder;
-import com.ruoyi.production.pojo.ProductWorkOrderFile;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class ProductWorkOrderDto extends ProductWorkOrder {
-
-    //浜у搧鍚嶇О
-    @ApiModelProperty(value = "浜у搧鍚嶇О")
-    private String productName;
-
-    //瑙勬牸
-    @ApiModelProperty(value = "瑙勬牸")
-    private String model;
-
-    //宸ュ簭
-    @ApiModelProperty(value = "宸ュ簭")
-    private String processName;
-
-    //鍗曚綅
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-
-
-    //鐢熶骇璁㈠崟鍙�
-    @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
-    private String productOrderNpsNo;
-
-    @ApiModelProperty(value = "瀹屾垚杩涘害")
-    private BigDecimal completionStatus;
-
-    @ApiModelProperty(value = "鎶ュ簾鏁伴噺")
-    private BigDecimal scrapQty;
-
-    @ApiModelProperty(value = "宸ュ崟绫诲瀷 姝e父 /杩斿伐杩斾慨")
-    private String workOrderType;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java b/src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java
deleted file mode 100644
index 67a6332..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * @author :yys
- * @date : 2025/7/21 16:28
- */
-@Data
-@ApiModel
-public class ProductionDispatchAddDto {
-
-    @ApiModelProperty(value = "閿�鍞彴璐D")
-    private Long salesLedgerId;
-
-    @ApiModelProperty(value = "閿�鍞骇鍝両D")
-    private Long salesLedgerProductId;
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    @ApiModelProperty(value = "鎺掍骇鏁伴噺")
-    private BigDecimal schedulingNum;
-
-    /**
-     * 鎺掍骇浜�
-     */
-    @ApiModelProperty(value = "鎺掍骇浜�")
-    private Long schedulingUserId;
-
-    /**
-     * 鎺掍骇鏃ユ湡
-     */
-    @ApiModelProperty(value = "鎺掍骇鏃ユ湡")
-    private String schedulingDate;
-
-    /**
-     * 鐢熶骇鐐掓満
-     */
-    private String speculativeTradingName;
-    /**
-     * 浜х嚎
-     */
-    @ApiModelProperty(value = "浜х嚎")
-    private String productionLine;
-
-    /**
-     * 瑙勬牸鍨嬪彿
-     */
-    private String specificationModel;
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java
deleted file mode 100644
index 13bb4a3..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.production.pojo.ProductionProductInput;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-@Data
-public class ProductionProductInputDto extends ProductionProductInput {
-    @ApiModelProperty(value = "鎶ュ伐鍗曞彿")
-    private String productNo;
-
-    @ApiModelProperty(value = "浜у搧鍨嬪彿")
-    private String model;
-
-    @ApiModelProperty(value = "浜у搧鍚嶇О")
-    private String productName;
-
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
deleted file mode 100644
index 9e5e121..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.production.pojo.ProductionProductMain;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-@Data
-@ExcelIgnoreUnannotated
-public class ProductionProductMainDto extends ProductionProductMain {
-    @ApiModelProperty(value = "宸ュ崟缂栧彿")
-    @Excel(name = "宸ュ崟缂栧彿")
-    private String workOrderNo;
-
-    @ApiModelProperty(value = "宸ュ崟鐘舵��")
-    private String workOrderStatus;
-
-    @ApiModelProperty(value = "鎶ュ伐浜哄憳鏄电О")
-    @Excel(name = "鎶ュ伐浜�")
-    private String nickName;
-
-    @ApiModelProperty(value = "鎶ュ伐鏁伴噺")
-    @Excel(name = "鎶ュ伐鏁伴噺")
-    private BigDecimal quantity;
-
-    @ApiModelProperty(value = "鎶ュ簾鏁伴噺")
-    @Excel(name = "鎶ュ簾鏁伴噺")
-    private BigDecimal scrapQty = BigDecimal.ZERO;
-
-    //浜у搧鍚嶇О
-    @Excel(name = "浜у搧鍚嶇О")
-    private String productName;
-
-    //浜у搧瑙勬牸鍨嬪彿
-    @Excel(name = "浜у搧瑙勬牸鍨嬪彿")
-    private String productModelName;
-
-    //鍗曚綅
-    @Excel(name = "鍗曚綅")
-    private String unit;
-
-    //閿�鍞悎鍚屽彿
-    @Excel(name = "閿�鍞悎鍚屽彿")
-    private String salesContractNo;
-
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate schedulingDate;
-    private String schedulingUserName;
-    private String customerName;
-    //宸ュ簭
-    @Excel(name = "宸ュ簭")
-    private String process;
-    private BigDecimal workHours;
-    private BigDecimal wages;
-
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java
deleted file mode 100644
index f98cc80..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.production.pojo.ProductionProductInput;
-import com.ruoyi.production.pojo.ProductionProductOutput;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-@Data
-public class ProductionProductOutputDto extends ProductionProductOutput {
-    @ApiModelProperty(value = "鎶ュ伐鍗曞彿")
-    private String productNo;
-
-    @ApiModelProperty(value = "浜у搧鍨嬪彿")
-    private String model;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionReportDto.java b/src/main/java/com/ruoyi/production/dto/ProductionReportDto.java
deleted file mode 100644
index 727decb..0000000
--- a/src/main/java/com/ruoyi/production/dto/ProductionReportDto.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.ruoyi.production.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * @author :yys
- * @date : 2025/7/22 10:24
- */
-@Data
-@ApiModel
-public class ProductionReportDto {
-
-    private Long id;
-    /**
-     * 鎺掍骇浜篿d
-     */
-    @ApiModelProperty(value = "鐢熶骇浜篿d")
-    private Long schedulingUserId;
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    private BigDecimal schedulingNum;
-
-    /**
-     * 鐢熶骇鏁伴噺
-     */
-    @ApiModelProperty(value = "鐢熶骇鏁伴噺")
-    private BigDecimal finishedNum;
-
-    /**
-     * 鐢熶骇鏃ユ湡
-     */
-    @ApiModelProperty(value = "鐢熶骇鏃ユ湡")
-    private String schedulingDate;
-
-
-    /**
-     * 鍏ュ簱鍗曚环
-     */
-    @ApiModelProperty(value = "鍏ュ簱鍗曚环")
-    private BigDecimal unitPrice;
-
-    /**
-     * 鍏ュ簱鎬讳环
-     */
-    @ApiModelProperty(value = "鍏ュ簱鎬讳环")
-    private BigDecimal totalPrice;
-}
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerProductDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerProductDto.java
deleted file mode 100644
index 33e758d..0000000
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerProductDto.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.util.Date;
-
-/**
- * @author :yys
- * @date : 2025/7/22 9:35
- */
-@Data
-@ApiModel
-public class SalesLedgerProductDto {
-
-    /**
-     * 閿�鍞悎鍚屽彿
-     */
-    @Excel(name = "閿�鍞悎鍚屽彿")
-    @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
-    private String salesContractNo;
-
-    /**
-     * 瀹㈡埛鍚堝悓鍙�
-     */
-    @Excel(name = "瀹㈡埛鍚堝悓鍙�")
-    @ApiModelProperty(value = "瀹㈡埛鍚堝悓鍙�")
-    private String customerContractNo;
-
-    /**
-     * 椤圭洰鍚嶇О
-     */
-    @Excel(name = "椤圭洰鍚嶇О")
-    @ApiModelProperty(value = "椤圭洰鍚嶇О")
-    private String projectName;
-
-
-    /**
-     * 瀹㈡埛鍚嶇О
-     */
-    @Excel(name = "瀹㈡埛鍚嶇О")
-    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
-    private String customerName;
-
-
-    /**
-     * 浜у搧澶х被
-     */
-    @Excel(name = "浜у搧澶х被")
-    @ApiModelProperty(value = "浜у搧澶х被")
-    private String productCategory;
-
-    /**
-     * 瑙勬牸鍨嬪彿
-     */
-    @Excel(name = "瑙勬牸鍨嬪彿")
-    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
-    private String specificationModel;
-
-    /**
-     * 鍗曚綅
-     */
-    @Excel(name = "鍗曚綅")
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java
deleted file mode 100644
index 8cb4d91..0000000
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-/**
- * @author :yys
- * @date : 2025/7/22 13:55
- */
-@Data
-@ApiModel
-@ExcelIgnoreUnannotated
-public class SalesLedgerProductionAccountingDto extends SalesLedgerProductDto{
-
-    /**
-     * 鐢熶骇浜篿d
-     */
-    @ApiModelProperty(value = "鐢熶骇浜篿d")
-    private Long schedulingUserId;
-
-    /**
-     * 鎺掍骇浜哄悕绉�
-     */
-    @ApiModelProperty(value = "鐢熶骇浜哄悕绉�")
-    @Excel(name = "鐢熶骇浜�")
-    private String schedulingUserName;
-
-
-    /**
-     * 宸ヨ祫
-     */
-    @ApiModelProperty(value = "宸ヨ祫")
-    @Excel(name = "宸ヨ祫")
-    private BigDecimal wages;
-
-    /**
-     * 鐢熶骇鏁伴噺
-     */
-    @ApiModelProperty(value = "鐢熶骇鏁伴噺")
-    @Excel(name = "鐢熶骇鏁伴噺")
-    private BigDecimal finishedNum;
-
-    /**
-     * 宸ユ椂瀹氶
-     */
-    @ApiModelProperty(value = "宸ユ椂瀹氶")
-    @Excel(name = "宸ユ椂瀹氶")
-    private BigDecimal workHours;
-
-    /**
-     * 宸ュ簭
-     */
-    @ApiModelProperty(value = "宸ュ簭")
-    @Excel(name = "宸ュ簭")
-    private String process;
-    /**
-     * 鎺掍骇鏃ユ湡
-     */
-    @ApiModelProperty(value = "鎺掍骇鏃ユ湡")
-    @Excel(name = "鐢熶骇鏃ユ湡")
-    private LocalDate schedulingDate;
-
-    @ApiModelProperty(value = "寮�濮嬫椂闂�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate entryDateStart;
-    @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate entryDateEnd;
-
-
-    private BigDecimal outputNum;
-
-    private String outputRate;
-
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate entryDate;
-
-    private String dateType;
-
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
deleted file mode 100644
index 57d14ab..0000000
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.util.Date;
-
-/**
- * @author :yys
- * @date : 2025/7/21 15:42
- */
-@Data
-@ApiModel
-public class SalesLedgerSchedulingDto {
-
-    @ApiModelProperty(value = "閿�鍞骇鍝両D")
-    private Long salesLedgerProductId;
-
-    @ApiModelProperty(value = "閿�鍞彴璐D")
-    private Long salesLedgerId;
-
-    @ApiModelProperty(value = "鐢熶骇鎬婚噺(鍗曚綅kg)")
-    private BigDecimal totalProduction;
-
-    /**
-     * 鐢熶骇鐐掓満
-     */
-    @Excel(name = "鐢熶骇鐐掓満")
-    private String speculativeTradingName;
-
-    /**
-     * 閿�鍞悎鍚屽彿
-     */
-    @Excel(name = "閿�鍞悎鍚屽彿")
-    @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
-    private String salesContractNo;
-
-    /**
-     * 瀹㈡埛鍚堝悓鍙�
-     */
-    @Excel(name = "瀹㈡埛鍚堝悓鍙�")
-    @ApiModelProperty(value = "瀹㈡埛鍚堝悓鍙�")
-    private String customerContractNo;
-
-    /**
-     * 椤圭洰鍚嶇О
-     */
-    @Excel(name = "椤圭洰鍚嶇О")
-    @ApiModelProperty(value = "椤圭洰鍚嶇О")
-    private String projectName;
-
-    /**
-     * 褰曞叆鏃ユ湡
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "褰曞叆鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty(value = "褰曞叆鏃ユ湡")
-    private Date entryDate;
-
-    @ApiModelProperty(value = "褰曞叆鏃ユ湡寮�濮�")
-    private String entryDateStart;
-
-    @ApiModelProperty(value = "褰曞叆鏃ユ湡缁撴潫")
-    private String entryDateEnd;
-
-    /**
-     * 瀹㈡埛鍚嶇О
-     */
-    @Excel(name = "瀹㈡埛鍚嶇О")
-    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
-    private String customerName;
-
-
-    /**
-     * 浜у搧澶х被
-     */
-    @Excel(name = "浜у搧澶х被")
-    @ApiModelProperty(value = "浜у搧澶х被")
-    private String productCategory;
-
-    /**
-     * 瑙勬牸鍨嬪彿
-     */
-    @Excel(name = "瑙勬牸鍨嬪彿")
-    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
-    private String specificationModel;
-
-    /**
-     * 鍗曚綅
-     */
-    @Excel(name = "鍗曚綅")
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-
-    /**
-     * 鏁伴噺
-     */
-    @Excel(name = "鏁伴噺")
-    @ApiModelProperty(value = "鏁伴噺")
-    private BigDecimal quantity;
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    @Excel(name = "鎺掍骇鏁伴噺")
-    @ApiModelProperty(value = "鎺掍骇鏁伴噺")
-    private BigDecimal schedulingNum;
-
-    /**
-     * 瀹屽伐鏁伴噺
-     */
-    @Excel(name = "瀹屽伐鏁伴噺")
-    @ApiModelProperty(value = "瀹屽伐鏁伴噺")
-    private BigDecimal successNum;
-
-    @Excel(name = "鐘舵��")
-    private String status;
-
-    @Excel(name = "杩涘害")
-    private BigDecimal progress;
-
-    @ApiModelProperty(value = "绉熸埛ID")
-    private Long tenantId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
deleted file mode 100644
index b04e43e..0000000
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * @author :yys
- * @date : 2025/7/21 16:47
- */
-@Data
-@ApiModel
-public class SalesLedgerSchedulingProcessDto {
-
-    @ApiModelProperty(value = "閿�鍞骇鍝両D")
-    private Long salesLedgerProductId;
-
-    @ApiModelProperty(value = "鐢熶骇鎬婚噺(鍗曚綅kg)")
-    private BigDecimal totalProduction;
-
-    @ApiModelProperty(value = "閿�鍞彴璐D")
-    private Long salesLedgerId;
-
-    /**
-     * 鐢熶骇鐐掓満
-     */
-    @Excel(name = "鐢熶骇鐐掓満")
-    private String speculativeTradingName;
-
-    @ApiModelProperty(value = "浜х嚎")
-    @Excel(name = "浜х嚎")
-    private String productionLine;
-
-    @ApiModelProperty(value = "寮�濮嬫椂闂�")
-    private String entryDateStart;
-
-    @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    private String entryDateEnd;
-
-    /**
-     * id
-     */
-    private Long id;
-
-    /**
-     * 閿�鍞悎鍚屽彿
-     */
-    @Excel(name = "閿�鍞悎鍚屽彿")
-    @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
-    private String salesContractNo;
-
-    /**
-     * 瀹㈡埛鍚堝悓鍙�
-     */
-    @Excel(name = "瀹㈡埛鍚堝悓鍙�")
-    @ApiModelProperty(value = "瀹㈡埛鍚堝悓鍙�")
-    private String customerContractNo;
-
-    /**
-     * 椤圭洰鍚嶇О
-     */
-    @Excel(name = "椤圭洰鍚嶇О")
-    @ApiModelProperty(value = "椤圭洰鍚嶇О")
-    private String projectName;
-
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "娲惧伐鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty(value = "娲惧伐鏃ユ湡")
-    private Date schedulingDate;
-
-    /**
-     * 瀹㈡埛鍚嶇О
-     */
-    @Excel(name = "瀹㈡埛鍚嶇О")
-    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
-    private String customerName;
-
-
-    /**
-     * 浜у搧澶х被
-     */
-    @Excel(name = "浜у搧澶х被")
-    @ApiModelProperty(value = "浜у搧澶х被")
-    private String productCategory;
-
-    /**
-     * 瑙勬牸鍨嬪彿
-     */
-    @Excel(name = "瑙勬牸鍨嬪彿")
-    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
-    private String specificationModel;
-
-    /**
-     * 鍗曚綅
-     */
-    @Excel(name = "鍗曚綅")
-    @ApiModelProperty(value = "鍗曚綅")
-    private String unit;
-
-    /**
-     * 鐘舵��
-     */
-    @ApiModelProperty(value = "鐘舵��")
-    private Integer status;
-
-    @Excel(name = "鐘舵��", readConverterExp = "1=寰呮帓浜�,2=鎺掍骇涓�,3=宸叉帓浜�")
-    private String statusName;
-
-    /**
-     * 娲惧伐浜�
-     */
-    @Excel(name = "娲惧伐浜�")
-    @ApiModelProperty(value = "娲惧伐浜�")
-    private String schedulingUserName;
-
-    /**
-     * 娲惧伐浜�
-     */
-    @ApiModelProperty(value = "娲惧伐浜篿d")
-    private Long schedulingUserId;
-
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    @Excel(name = "鎺掍骇鏁伴噺")
-    @ApiModelProperty(value = "鎺掍骇鏁伴噺")
-    private BigDecimal schedulingNum;
-
-    /**
-     * 宸叉帓浜ф暟閲�
-     */
-    @ApiModelProperty(value = "宸叉帓浜ф暟閲�")
-    @Excel(name = "宸叉帓浜ф暟閲�")
-    private BigDecimal successNum;
-
-    private Long tenantId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java
deleted file mode 100644
index 3e982e7..0000000
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.ruoyi.production.dto;
-
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-
-/**
- * @author :yys
- * @date : 2025/7/22 9:33
- */
-@Data
-@ApiModel
-public class SalesLedgerWorkDto extends SalesLedgerProductDto{
-
-    private Long id;
-
-    /**
-     * 鎺掍骇浜篿d
-     */
-    @ApiModelProperty(value = "鎺掍骇浜篿d")
-    private Long schedulingUserId;
-
-    /**
-     * 鎺掍骇浜哄悕绉�
-     */
-    @ApiModelProperty(value = "鎺掍骇浜哄悕绉�")
-    @Excel(name = "鎺掍骇浜�")
-    private String schedulingUserName;
-
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    @ApiModelProperty(value = "鎺掍骇鏁伴噺")
-    @Excel(name = "鎺掍骇鏁伴噺")
-    private BigDecimal schedulingNum;
-
-    /**
-     * 鐢熶骇鏁伴噺
-     */
-    @ApiModelProperty(value = "鐢熶骇鏁伴噺")
-    @Excel(name = "鐢熶骇鏁伴噺")
-    private BigDecimal finishedNum;
-
-    /**
-     * 寰呯敓浜ф暟閲�
-     */
-    @ApiModelProperty(value = "寰呯敓浜ф暟閲�")
-    @Excel(name = "寰呯敓浜ф暟閲�")
-    private BigDecimal daiNum;
-
-    /**
-     * 宸ユ椂瀹氶
-     */
-    @ApiModelProperty(value = "宸ユ椂瀹氶")
-    private BigDecimal workHours;
-
-    /**
-     * 宸ュ簭
-     */
-    @ApiModelProperty(value = "宸ュ簭")
-    @Excel(name = "宸ュ簭")
-    private String process;
-
-
-    /**
-     * 浜х嚎
-     */
-    @ApiModelProperty(value = "浜х嚎")
-    @Excel(name = "浜х嚎")
-    private String productionLine;
-    /**
-     * 鎺掍骇鏃ユ湡
-     */
-    @ApiModelProperty(value = "鎺掍骇鏃ユ湡")
-    @Excel(name = "鎺掍骇鏃ユ湡")
-    private String schedulingDate;
-
-    @ApiModelProperty(value = "寮�濮嬫椂闂�")
-    private String entryDateStart;
-    @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    private String entryDateEnd;
-
-    /**
-     * 鎶ュ伐鐘舵�侊紙1-寰呯敓浜� 2-宸叉姤宸ワ級
-     */
-    @ApiModelProperty(value = "鎶ュ伐鐘舵��")
-    private Integer status;
-
-    @Excel(name = "鐘舵��", readConverterExp = "1=寰呯敓浜�,2=鐢熶骇涓�,3=宸叉姤宸�")
-    private String statusName;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value = "澶囨敞")
-    @Excel(name = "澶囨敞")
-    private String remark;
-
-    /**
-     * 鎹熻��
-     */
-    @ApiModelProperty(value = "鎹熻��")
-    @Excel(name = "鎹熻��")
-    private String loss;
-
-    /**
-     * 缁戝畾鏈哄櫒
-     */
-    @ApiModelProperty(value = "缁戝畾鏈哄櫒")
-    @Excel(name = "缁戝畾鏈哄櫒")
-    private String speculativeTradingName;
-
-    /**
-     * 鍙e懗鍒嗙被
-     */
-    @ApiModelProperty(value = "鍙e懗鍒嗙被")
-    @Excel(name = "鍙e懗鍒嗙被")
-    private String type;
-
-    /**
-     * 棰嗙敤
-     */
-    @ApiModelProperty(value = "棰嗙敤")
-    @Excel(name = "棰嗙敤")
-    private String receive;
-
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/UserAccountDto.java b/src/main/java/com/ruoyi/production/dto/UserAccountDto.java
deleted file mode 100644
index 75f99bc..0000000
--- a/src/main/java/com/ruoyi/production/dto/UserAccountDto.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.ruoyi.production.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-@Data
-public class UserAccountDto {
-
-    private String userName;
-
-    private Long userId;
-
-    @ApiModelProperty("璁℃椂")
-    private BigDecimal account;
-
-    @ApiModelProperty("璁′欢")
-    private BigDecimal accountBalance;
-
-}
diff --git a/src/main/java/com/ruoyi/production/dto/UserProductionAccountingDto.java b/src/main/java/com/ruoyi/production/dto/UserProductionAccountingDto.java
deleted file mode 100644
index ba191d1..0000000
--- a/src/main/java/com/ruoyi/production/dto/UserProductionAccountingDto.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.ruoyi.production.dto;
-
-import lombok.Data;
-
-@Data
-public class UserProductionAccountingDto {
-    private Long userId;
-
-    private String date;
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java b/src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java
deleted file mode 100644
index 394c3a7..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.ProcessRouteItemDto;
-import com.ruoyi.production.pojo.ProcessRouteItem;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-@Mapper
-public interface ProcessRouteItemMapper  extends BaseMapper<ProcessRouteItem> {
-
-
-    List<ProcessRouteItemDto> listProcessRouteItemDto(@Param("c") ProcessRouteItemDto processRouteItemDto);
-
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProcessRouteMapper.java b/src/main/java/com/ruoyi/production/mapper/ProcessRouteMapper.java
deleted file mode 100644
index 493b764..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProcessRouteMapper.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.ProcessRouteDto;
-import com.ruoyi.production.pojo.ProcessRoute;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-@Mapper
-public interface ProcessRouteMapper extends BaseMapper<ProcessRoute> {
-
-    IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page,@Param("c") ProcessRouteDto processRouteDto);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java
deleted file mode 100644
index 1183335..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.ProductBomDto;
-import com.ruoyi.production.dto.ProductProcessDto;
-import com.ruoyi.production.pojo.ProductBom;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * <p>
- * BOM涓昏〃 Mapper 鎺ュ彛
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 09:59:27
- */
-@Mapper
-public interface ProductBomMapper extends BaseMapper<ProductBom> {
-
-    IPage<ProductBomDto> listPage(Page page, @Param("c") ProductBomDto productBomDto);
-
-    ProductBomDto getById(@Param("bomId") Long bomId);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
deleted file mode 100644
index 72aa6cd..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.ProductBomDto;
-import com.ruoyi.production.dto.ProductOrderDto;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.pojo.ProcessRoute;
-import com.ruoyi.production.pojo.ProductOrder;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-@Mapper
-public interface ProductOrderMapper extends BaseMapper<ProductOrder> {
-
-    IPage<ProductOrderDto> pageProductOrder(Page page, @Param("c") ProductOrderDto productOrder);
-
-    List<ProcessRoute> listProcessRoute(@Param("productModelId") Long productModelId);
-
-    List<ProductStructureDto> listProcessBom(@Param("orderId") Long orderId);
-
-    Integer countCreated(@Param("startDate") String startDate, @Param("endDate") String endDate);
-
-    Integer countCompleted(@Param("startDate") String startDate, @Param("endDate") String endDate);
-
-    Integer countPending(@Param("startDate") String startDate, @Param("endDate") String endDate);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductOrderMaterialMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductOrderMaterialMapper.java
deleted file mode 100644
index 53c4f90..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductOrderMaterialMapper.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.ruoyi.production.dto.ProductOrderMaterialDto;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.pojo.ProductOrderMaterial;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-@Mapper
-public interface ProductOrderMaterialMapper extends BaseMapper<ProductOrderMaterial> {
-
-    IPage<ProductOrderMaterial> pickMaterial(@Param("id") Long ProductOrderId);
-
-    List<ProductStructureDto> selectLeafNode(@Param("bomId") Long bomId);
-
-    List<ProductOrderMaterialDto> selectByProductModelIds(@Param("ids") List<Long> productModelIds);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductProcessMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductProcessMapper.java
deleted file mode 100644
index b2168c3..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductProcessMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.home.dto.processDataProductionStatisticsDto;
-import com.ruoyi.production.dto.ProductProcessDto;
-import com.ruoyi.production.pojo.ProductProcess;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Mapper
-public interface ProductProcessMapper extends BaseMapper<ProductProcess> {
-    IPage<ProductProcessDto> listPage(Page page,@Param("productProcessDto") ProductProcessDto productProcessDto);
-
-    List<processDataProductionStatisticsDto> calculateProductionStatistics(LocalDateTime startDateTime, LocalDateTime endDateTime, Long userId, List<Long> processIds);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java
deleted file mode 100644
index 48b38ec..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.production.dto.ProductProcessRouteItemDto;
-import com.ruoyi.production.pojo.ProductProcessRouteItem;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-@Mapper
-public interface ProductProcessRouteItemMapper extends BaseMapper<ProductProcessRouteItem> {
-    List<ProductProcessRouteItemDto> listItem(@Param("orderId") Long orderId);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
deleted file mode 100644
index 06ae748..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.ruoyi.production.dto.ProcessRouteDto;
-import com.ruoyi.production.pojo.ProductProcessRoute;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * <p>
- *  Mapper 鎺ュ彛
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
- */
-@Mapper
-public interface ProductProcessRouteMapper extends BaseMapper<ProductProcessRoute> {
-
-    ProcessRouteDto listMain(@Param("orderId") Long orderId);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
deleted file mode 100644
index 11cc78d..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.pojo.ProductStructure;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-@Mapper
-public interface ProductStructureMapper  extends BaseMapper<ProductStructure> {
-
-    List<ProductStructureDto> listBybomId(@Param("bomId") Integer bomId);
-
-    List<ProductStructureDto> listBybomAndProcess(@Param("bomId") Integer bomId, @Param("processId") Long processId);
-
-    List<ProductStructureDto> selectLeafNode(@Param("bomId") Integer bomId);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderFileMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderFileMapper.java
deleted file mode 100644
index 72b8f94..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderFileMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.ruoyi.production.pojo.ProductWorkOrderFile;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * <p>
- * 鐢熶骇宸ュ崟闄勪欢琛� Mapper 鎺ュ彛
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-23 03:28:32
- */
-@Mapper
-public interface ProductWorkOrderFileMapper extends BaseMapper<ProductWorkOrderFile> {
-
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
deleted file mode 100644
index d637f7d..0000000
--- a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.ProductWorkOrderDto;
-import com.ruoyi.production.pojo.ProductWorkOrder;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
-
-@Mapper
-public interface ProductWorkOrderMapper extends BaseMapper<ProductWorkOrder> {
-
-    IPage<ProductWorkOrderDto> pageProductWorkOrder(Page<ProductWorkOrderDto> page, @Param("c") ProductWorkOrderDto productWorkOrder);
-
-    ProductWorkOrderDto getProductWorkOrderFlowCard(@Param("id") Long id);
-
-    List<ProductWorkOrderDto> selectWorkOrderStartStats(@Param("startDate") String startDate, @Param("endDate") String endDate);
-
-    ProductWorkOrder selectMax(@Param("datePrefix") String datePrefix);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionAccountMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionAccountMapper.java
new file mode 100644
index 0000000..f8d4fee
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionAccountMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionAccount;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇鏍哥畻琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionAccountMapper extends BaseMapper<ProductionAccount> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionBomStructureMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionBomStructureMapper.java
new file mode 100644
index 0000000..ac9d3d0
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionBomStructureMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionBomStructure;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟BOM浜у搧缁撴瀯 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionBomStructureMapper extends BaseMapper<ProductionBomStructure> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOperationMainParamMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOperationMainParamMapper.java
new file mode 100644
index 0000000..356a810
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOperationMainParamMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOperationMainParam;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟鎶ュ伐鍙傛暟琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOperationMainParamMapper extends BaseMapper<ProductionOperationMainParam> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOperationTaskMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOperationTaskMapper.java
new file mode 100644
index 0000000..ee7e406
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOperationTaskMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOperationTask;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOperationTaskMapper extends BaseMapper<ProductionOperationTask> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOrderBomMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOrderBomMapper.java
new file mode 100644
index 0000000..65c02ff
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOrderBomMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOrderBom;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟BOM Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOrderBomMapper extends BaseMapper<ProductionOrderBom> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java
new file mode 100644
index 0000000..ab6d5f7
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOrder;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOrderMapper extends BaseMapper<ProductionOrder> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOrderPickMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOrderPickMapper.java
new file mode 100644
index 0000000..95c4324
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOrderPickMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOrderPick;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 璁㈠崟棰嗘枡绾胯竟浠� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOrderPickMapper extends BaseMapper<ProductionOrderPick> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOrderPickRecordMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOrderPickRecordMapper.java
new file mode 100644
index 0000000..711f244
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOrderPickRecordMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOrderPickRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 绾胯竟浠撳嚭鍏ュ簱璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOrderPickRecordMapper extends BaseMapper<ProductionOrderPickRecord> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingMapper.java
new file mode 100644
index 0000000..14a1468
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOrderRouting;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOrderRoutingMapper extends BaseMapper<ProductionOrderRouting> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingOperationMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingOperationMapper.java
new file mode 100644
index 0000000..83636c7
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingOperationMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOrderRoutingOperationMapper extends BaseMapper<ProductionOrderRoutingOperation> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingOperationParamMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingOperationParamMapper.java
new file mode 100644
index 0000000..efcc3ca
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOrderRoutingOperationParamMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Mapper
+public interface ProductionOrderRoutingOperationParamMapper extends BaseMapper<ProductionOrderRoutingOperationParam> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java
new file mode 100644
index 0000000..5459f5b
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.ProductionPlan;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇璁″垝琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 02:11:10
+ */
+@Mapper
+public interface ProductionPlanMapper extends BaseMapper<ProductionPlan> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
index be90d7a..854b238 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
@@ -1,24 +1,18 @@
 package com.ruoyi.production.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.ProductionProductInputDto;
 import com.ruoyi.production.pojo.ProductionProductInput;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
-import java.util.Map;
-
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐鎶曞叆琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @Mapper
 public interface ProductionProductInputMapper extends BaseMapper<ProductionProductInput> {
-    IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, @Param("c") ProductionProductInputDto productionProductInputDto);
 
-    /**
-     * 鏍规嵁鐢熶骇涓昏〃ID鎵归噺鍒犻櫎鎶曞叆琛ㄦ暟鎹�
-     */
-    int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds);
-
-    List<Map<String, Object>> selectInputStats(@Param("startDate") String startDate, @Param("endDate") String endDate);
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
index e63e032..3c4ccdc 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
@@ -1,36 +1,18 @@
 package com.ruoyi.production.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.ProductionProductMainDto;
-import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
-import com.ruoyi.production.pojo.ProductOrder;
 import com.ruoyi.production.pojo.ProductionProductMain;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
-import java.util.ArrayList;
-import java.util.List;
-
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @Mapper
 public interface ProductionProductMainMapper extends BaseMapper<ProductionProductMain> {
 
-    IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, @Param("c") ProductionProductMainDto productionProductMainDto);
-
-    /**
-     * 鏍规嵁宸ュ崟ID鎵归噺鍒犻櫎鐢熶骇涓昏〃鏁版嵁
-     */
-    int deleteByWorkOrderIds(@Param("workOrderIds") List<Long> workOrderIds);
-
-    /**
-     * 鏍规嵁鎶ュ伐id鏌ヨ鐢熶骇璁㈠崟
-     * @param productMainId
-     * @return
-     */
-    ProductOrder getOrderByMainId(@Param("productMainId") Long productMainId);
-
-    IPage<ProductionProductMainDto> listProductionDetails(@Param("ew") SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page);
-
-    ArrayList<Long> listMain(List<Long> idList);
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
index cbb32fd..46f3f95 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
@@ -1,26 +1,18 @@
 package com.ruoyi.production.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.ProductionProductOutputDto;
 import com.ruoyi.production.pojo.ProductionProductOutput;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
-import java.util.Map;
-
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐浜у嚭琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @Mapper
 public interface ProductionProductOutputMapper extends BaseMapper<ProductionProductOutput> {
-    IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, @Param("c") ProductionProductOutputDto productionProductOutputDto);
 
-    /**
-     * 鏍规嵁鐢熶骇涓昏〃ID鎵归噺鍒犻櫎浜у嚭琛ㄦ暟鎹�
-     */
-    int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds);
-
-    List<ProductionProductOutputDto> selectOutputStats(@Param("startDate") String startDate, @Param("endDate") String endDate);
-
-    List<Map<String, Object>> selectDailyOutputStats(@Param("startDate") String startDate, @Param("endDate") String endDate);
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/SalesLedgerProductionAccountingMapper.java b/src/main/java/com/ruoyi/production/mapper/SalesLedgerProductionAccountingMapper.java
deleted file mode 100644
index 8dec95c..0000000
--- a/src/main/java/com/ruoyi/production/mapper/SalesLedgerProductionAccountingMapper.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
-import com.ruoyi.production.dto.UserAccountDto;
-import com.ruoyi.production.dto.UserProductionAccountingDto;
-import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:38
- */
-public interface SalesLedgerProductionAccountingMapper extends BaseMapper<SalesLedgerProductionAccounting> {
-
-
-    IPage<SalesLedgerProductionAccountingDto> listPage(Page page,@Param("salesLedgerDto") SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto);
-
-
-    IPage<SalesLedgerProductionAccountingDto> pageProductionAccounting(Page page, @Param("ew") SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto);
-
-    List<Map<String, Object>> selectDailyWagesStats(@Param("startDate") String startDate, @Param("endDate") String endDate);
-
-    UserAccountDto getByUserId(@Param( "ew") UserProductionAccountingDto userProductionAccountingDto);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/SalesLedgerSchedulingMapper.java b/src/main/java/com/ruoyi/production/mapper/SalesLedgerSchedulingMapper.java
deleted file mode 100644
index 140de3d..0000000
--- a/src/main/java/com/ruoyi/production/mapper/SalesLedgerSchedulingMapper.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.SalesLedgerSchedulingDto;
-import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
-import com.ruoyi.production.pojo.SalesLedgerScheduling;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:37
- */
-public interface SalesLedgerSchedulingMapper  extends BaseMapper<SalesLedgerScheduling> {
-
-    /**
-     * 鍒嗛〉鏌ヨ
-     * @param page
-     * @param salesLedgerSchedulingDto
-     * @return
-     */
-    IPage<SalesLedgerSchedulingDto> listPage(Page page,@Param("salesLedgerDto") SalesLedgerSchedulingDto salesLedgerSchedulingDto);
-
-    /**
-     * 瀵煎嚭
-     * @return
-     */
-    List<SalesLedgerSchedulingDto> list();
-
-    /**
-     * 鍒嗛〉鏌ヨ宸ュ簭鎺掍骇
-     * @param page
-     * @param salesLedgerSchedulingDto
-     * @return
-     */
-    IPage<SalesLedgerSchedulingProcessDto> listPageProcess(Page page,@Param("salesLedgerDto") SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto);
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/SalesLedgerWorkMapper.java b/src/main/java/com/ruoyi/production/mapper/SalesLedgerWorkMapper.java
deleted file mode 100644
index adf5dc3..0000000
--- a/src/main/java/com/ruoyi/production/mapper/SalesLedgerWorkMapper.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.production.dto.SalesLedgerWorkDto;
-import com.ruoyi.production.pojo.SalesLedgerWork;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:37
- */
-public interface SalesLedgerWorkMapper extends BaseMapper<SalesLedgerWork> {
-
-    /**
-     * 鍒嗛〉鏌ヨ
-     * @param page
-     * @param salesLedgerWorkDto
-     * @return
-     */
-    IPage<SalesLedgerWorkDto> listPage(Page page,@Param("salesLedgerDto") SalesLedgerWorkDto salesLedgerWorkDto);
-
-}
diff --git a/src/main/java/com/ruoyi/production/mapper/SpeculativeTradingInfoMapper.java b/src/main/java/com/ruoyi/production/mapper/SpeculativeTradingInfoMapper.java
deleted file mode 100644
index 21d4a11..0000000
--- a/src/main/java/com/ruoyi/production/mapper/SpeculativeTradingInfoMapper.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.ruoyi.production.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.production.pojo.SpeculativeTradingInfo;
-
-/**
- * @author :yys
- * @date : 2025/11/11 15:40
- */
-public interface SpeculativeTradingInfoMapper extends BaseMapper<SpeculativeTradingInfo> {
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java b/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
deleted file mode 100644
index 3925f6e..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@TableName("process_route")
-@Data
-@ApiModel(value = "processRoute", description = "宸ヨ壓璺嚎涓昏〃")
-public class ProcessRoute {
-
-    @ApiModelProperty(value = "搴忓彿")
-    private Long id;
-
-    @ApiModelProperty(value = "浜у搧ID")
-    //product_model
-    private Long productModelId;
-
-    @ApiModelProperty(value = "鎻忚堪")
-    private String description;
-
-    @ApiModelProperty(value = "绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty(value = "宸ヨ壓璺嚎缂栫爜")
-    private String processRouteCode;
-
-    @ApiModelProperty(value = "BOM鐨処D")
-    private Integer bomId;
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
deleted file mode 100644
index 57f567c..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Data
-@TableName("process_route_item")
-@ApiModel(value = "processRouteItem", description = "宸ヨ壓璺嚎瀛愯〃")
-public class ProcessRouteItem {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    @ApiModelProperty(value = "宸ヨ壓璺嚎id")
-    private Long routeId;
-
-    @ApiModelProperty(value = "宸ュ簭id")
-    private Long processId;
-
-    @ApiModelProperty(value ="浜у搧id")
-    private Long productModelId;
-
-    @ApiModelProperty(value = "绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-    @TableField(fill = FieldFill.INSERT)
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    private LocalDateTime createTime;
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.UPDATE)
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty(value ="鎷栧姩鎺掑簭")
-    private Integer dragSort;
-
-
-    @ApiModelProperty(value ="鏄惁璐ㄦ")
-    private Boolean isQuality;
-
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductBom.java b/src/main/java/com/ruoyi/production/pojo/ProductBom.java
deleted file mode 100644
index f80cafe..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductBom.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.format.annotation.DateTimeFormat;
-
-/**
- * <p>
- * BOM涓昏〃
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 09:59:27
- */
-@Getter
-@Setter
-@TableName("product_bom")
-@ApiModel(value = "ProductBom瀵硅薄", description = "BOM涓昏〃")
-public class ProductBom implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty("bom缂栧彿")
-    private String bomNo;
-
-    @ApiModelProperty("浜у搧瑙勬牸id")
-    private Long productModelId;
-
-    @ApiModelProperty("澶囨敞")
-    private String remark;
-
-    @ApiModelProperty("鐗堟湰鍙�")
-    private String version;
-
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    @ApiModelProperty("鏇存柊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty("鍒涘缓鑰�")
-    @TableField(fill = FieldFill.INSERT)
-    private Long createUser;
-
-    @ApiModelProperty("鏇存柊鑰�")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Long updateUser;
-
-    @ApiModelProperty("绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
deleted file mode 100644
index 86f32ca..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
-@Data
-@TableName("product_order")
-public class ProductOrder  implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 閿�鍞彴璐d
-     */
-    @ApiModelProperty(value = "閿�鍞彴璐d")
-    private Long salesLedgerId;
-
-    /**
-     * 閿�鍞彴璐︿骇鍝乮d(sales_ledger_product)
-     */
-    @ApiModelProperty(value = "閿�鍞彴璐︿骇鍝乮d")
-    private Long saleLedgerProductId;
-
-    /**
-     * 浜у搧瑙勬牸id
-     */
-    @ApiModelProperty(value = "浜у搧瑙勬牸id")
-    private Long productModelId;
-
-    /**
-     * 妯$増鐨勫伐鑹鸿矾绾縤d
-     */
-    @ApiModelProperty(value = "宸ヨ壓璺嚎id")
-    private Long routeId;
-
-    /**
-     * 鐢熶骇璁㈠崟鍙�
-     */
-    @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
-    @Excel(name = "鐢熶骇璁㈠崟鍙�")
-    private String npsNo;
-
-    /**
-     * 绉熸埛id
-     */
-    @ApiModelProperty(value = "绉熸埛id")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    //鍒涘缓鏃堕棿
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @Excel(name = "鍒涘缓鏃堕棿")
-    private LocalDateTime createTime;
-
-    //淇敼鏃堕棿
-    @ApiModelProperty(value = "淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-
-    /**
-     * 闇�姹傛暟閲�
-     */
-    @ApiModelProperty(value = "闇�姹傛暟閲�")
-    @Excel(name = "闇�姹傛暟閲�")
-    private BigDecimal quantity;
-
-    /**
-     * 瀹屾垚鏁伴噺
-     */
-    @ApiModelProperty(value = "瀹屾垚鏁伴噺")
-    @Excel(name = "瀹屾垚鏁伴噺")
-    private BigDecimal completeQuantity;
-
-    @Excel(name = "寮�濮嬫椂闂�")
-    @ApiModelProperty(value = "寮�濮嬫椂闂�")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime startTime;
-
-    @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    @Excel(name = "缁撴潫鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime endTime;
-
-
-
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrderMaterial.java b/src/main/java/com/ruoyi/production/pojo/ProductOrderMaterial.java
deleted file mode 100644
index 2d8d04d..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrderMaterial.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
-@Data
-@TableName("product_order_material")
-@ApiModel(description="鐢熶骇璁㈠崟鐗╂枡琛�")
-public class ProductOrderMaterial implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-    * 涓婚敭ID
-    */
-    @ApiModelProperty(value="涓婚敭ID")
-    private Long id;
-    /**
-    * 鐢熶骇璁㈠崟ID
-    */
-    @ApiModelProperty(value="鐢熶骇璁㈠崟ID")
-    private Long productOrderId;
-    /**
-    * 宸ュ簭鍚嶇О
-    */
-    @ApiModelProperty(value="宸ュ簭鍚嶇О")
-    private String processName;
-    /**
-    * 鍘熸枡鍚嶇О
-    */
-    @ApiModelProperty(value="鍘熸枡鍚嶇О")
-    private String materialName;
-    /**
-    * 鍘熸枡鍨嬪彿
-    */
-    @ApiModelProperty(value="鍘熸枡鍨嬪彿")
-    private String materialModel;
-    /**
-    * 闇�姹傛暟閲�
-    */
-    @ApiModelProperty(value="闇�姹傛暟閲�")
-    private BigDecimal requiredQty;
-    /**
-    * 璁¢噺鍗曚綅
-    */
-    @ApiModelProperty(value="璁¢噺鍗曚綅")
-    private String unit;
-    /**
-    * 棰嗙敤鏁伴噺
-    */
-    @ApiModelProperty(value="棰嗙敤鏁伴噺")
-    private BigDecimal pickQty;
-    /**
-    * 琛ユ枡鏁伴噺
-    */
-    @ApiModelProperty(value="琛ユ枡鏁伴噺")
-    private BigDecimal supplementQty;
-    /**
-    * 閫�鏂欐暟閲�
-    */
-    @ApiModelProperty(value="閫�鏂欐暟閲�")
-    private BigDecimal returnQty;
-    /**
-    * 瀹為檯鏁伴噺
-    */
-    @ApiModelProperty(value="瀹為檯鏁伴噺")
-    private BigDecimal actualQty;
-
-    @ApiModelProperty(value = "绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Long createUser;
-
-    @ApiModelProperty(value = "淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Long updateUser;
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
deleted file mode 100644
index 77ac186..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
-@TableName("product_process")
-@Data
-@ExcelIgnoreUnannotated
-@ApiModel(value = "productProcess", description = "宸ュ簭琛�")
-public class ProductProcess implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 宸ュ簭鍚嶇О
-     */
-    @Excel(name = "宸ュ簭鍚嶇О")
-    private String name;
-
-    /**
-     * 宸ュ簭缂栧彿
-     */
-    @Excel(name = "宸ュ簭缂栧彿")
-    private String no;
-
-    /**
-     * 澶囨敞
-     */
-    @Excel(name = "澶囨敞")
-    private String remark;
-
-
-    /**
-     * 宸ヨ祫瀹氶
-     */
-    @Excel(name = "宸ヨ祫瀹氶")
-    @TableField(updateStrategy = FieldStrategy.NOT_NULL)
-    private BigDecimal salaryQuota;
-
-    @ApiModelProperty("绫诲瀷 鍖哄垎鏄鏃惰繕鏄浠� 0 璁℃椂 1璁′欢")
-    private Long type;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    /**
-     * 淇敼鏃堕棿
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    /**
-     * 绉熸埛ID
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    @ApiModelProperty(value ="鏄惁璐ㄦ")
-    private Boolean isQuality;
-
-
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
-    @ApiModelProperty(value ="鏄惁鍏ュ簱")
-    @TableField("is_inbound")
-    private Boolean inbound;
-
-    @ApiModelProperty(value ="鏄惁鎶ュ伐")
-    @TableField("is_report_work")
-    private Boolean reportWork;
-
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
deleted file mode 100644
index 9c1b5fc..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * <p>
- *
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
- */
-@Getter
-@Setter
-@TableName("product_process_route")
-@ApiModel(value = "ProductProcessRoute瀵硅薄", description = "")
-public class ProductProcessRoute implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    @ApiModelProperty("浜у搧id")
-    //product_model
-    private Long productModelId;
-
-    @ApiModelProperty("鎻忚堪")
-    private String description;
-
-    @ApiModelProperty("绉熸埛id")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    @ApiModelProperty("褰曞叆鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    @ApiModelProperty("鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty("鍏宠仈bom鐨刬d")
-    private Integer bomId;
-
-    @ApiModelProperty("宸ヨ壓璺嚎缂栫爜")
-    private String processRouteCode;
-
-    @ApiModelProperty("鐢熶骇璁㈠崟鐨刬d")
-    private Long productOrderId;
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
deleted file mode 100644
index 1f7c585..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Data
-@TableName("product_process_route_item")
-public class ProductProcessRouteItem {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    @ApiModelProperty(value = "鐢熶骇璁㈠崟id(product_order_id)")
-    private Long productOrderId;
-
-    @ApiModelProperty(value = "鐢熶骇璁㈠崟鐨勫伐鑹鸿矾绾縤d(product_process_route)")
-    private Long productRouteId;
-
-    @ApiModelProperty(value = "宸ュ簭id")
-    private Long processId;
-
-    @ApiModelProperty(value ="浜у搧id")
-    private Long productModelId;
-
-    @ApiModelProperty(value = "绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-    @TableField(fill = FieldFill.INSERT)
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    private LocalDateTime createTime;
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.UPDATE)
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty(value ="鎷栧姩鎺掑簭")
-    private Integer dragSort;
-
-    @ApiModelProperty(value ="鏄惁璐ㄦ")
-    private Boolean isQuality;
-
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductStructure.java b/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
deleted file mode 100644
index e23427c..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.*;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-@TableName("product_structure")
-@Data
-@ApiModel(value = "ProductStructure", description = "BOM瀛愯〃")
-public class ProductStructure {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 浜у搧鍚嶇О
-     */
-    private Long productModelId;
-
-    /**
-     * 宸ュ簭id
-     */
-    private Long processId;
-
-    /**
-     * 鍗曚綅浜у嚭闇�瑕佹暟閲�
-     */
-    private BigDecimal unitQuantity;
-
-    /**
-     * 闇�姹傛暟閲�
-     */
-    private BigDecimal demandedQuantity;
-
-    /**
-     * 鍗曚綅
-     */
-    private String unit;
-
-    /**
-     * 绉熸埛ID
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    /**
-     * 鍏宠仈BOMid
-     */
-    private Integer bomId;
-
-    /**
-     * 鐖惰妭鐐笽D
-     */
-    private Long parentId;
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
deleted file mode 100644
index bbfb332..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-/**
- * 浜у搧宸ュ崟瀹炰綋绫�
- * 瀵瑰簲鏁版嵁搴撹〃锛歱roduct_work_order
- */
-@Data
-@TableName("product_work_order")
-public class ProductWorkOrder implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 涓婚敭id
-     */
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 宸ヨ壓璺嚎椤圭洰id
-     */
-    @ApiModelProperty(value = "宸ヨ壓璺嚎椤圭洰id")
-    private Long productProcessRouteItemId;
-
-    /**
-     * 鐢熶骇璁㈠崟id
-     */
-    @ApiModelProperty(value = "鐢熶骇璁㈠崟id")
-    private Long productOrderId;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    /**
-     * 淇敼鏃堕棿
-     */
-    @ApiModelProperty(value = "淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    /**
-     * 宸ュ崟缂栧彿
-     */
-    @ApiModelProperty(value = "宸ュ崟缂栧彿")
-    private String workOrderNo;
-
-    /**
-     * 鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸插畬鎴�
-     */
-    @ApiModelProperty(value = "鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸插畬鎴�")
-    private Integer status;
-
-    /**
-     * 绉熸埛id
-     */
-    @ApiModelProperty(value = "绉熸埛id")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    /**
-     * 璁″垝寮�濮嬫椂闂�
-     */
-    @ApiModelProperty(value = "璁″垝寮�濮嬫椂闂�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate planStartTime;
-
-    /**
-     * 璁″垝缁撴潫鏃堕棿
-     */
-    @ApiModelProperty(value = "璁″垝缁撴潫鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate planEndTime;
-
-    /**
-     * 瀹為檯寮�濮嬫椂闂�
-     */
-    @ApiModelProperty(value = "瀹為檯寮�濮嬫椂闂�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate actualStartTime;
-
-    /**
-     * 瀹為檯缁撴潫鏃堕棿
-     */
-    @ApiModelProperty(value = "瀹為檯缁撴潫鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate actualEndTime;
-
-    /**
-     * 闇�姹傞噺
-     */
-    @ApiModelProperty(value = "闇�姹傛暟閲�")
-    private BigDecimal planQuantity;
-
-    /**
-     * 瀹屾垚鏁伴噺
-     */
-    @ApiModelProperty(value = "瀹屾垚鏁伴噺")
-    private BigDecimal completeQuantity;
-
-
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrderFile.java b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrderFile.java
deleted file mode 100644
index 6e67334..0000000
--- a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrderFile.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.time.LocalDateTime;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * <p>
- * 鐢熶骇宸ュ崟闄勪欢琛�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-23 03:28:32
- */
-@Getter
-@Setter
-@TableName("product_work_order_file")
-@ApiModel(value = "ProductWorkOrderFile瀵硅薄", description = "鐢熶骇宸ュ崟闄勪欢琛�")
-public class ProductWorkOrderFile implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Integer id;
-
-    @ApiModelProperty("鍏宠仈宸ュ崟id")
-    private Integer workOrderId;
-
-    @ApiModelProperty("鏂囦欢鍚嶇О")
-    private String name;
-
-    @ApiModelProperty("鏂囦欢璺緞")
-    private String url;
-
-    @ApiModelProperty("鏂囦欢澶у皬")
-    private Integer fileSize;
-
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    @ApiModelProperty("鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Long createUser;
-
-    @ApiModelProperty("淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty("淇敼鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Long updateUser;
-
-    @ApiModelProperty("绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionAccount.java b/src/main/java/com/ruoyi/production/pojo/ProductionAccount.java
new file mode 100644
index 0000000..910c2a3
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionAccount.java
@@ -0,0 +1,79 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇鏍哥畻琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_account")
+@ApiModel(value = "ProductionAccount瀵硅薄", description = "鐢熶骇鏍哥畻琛�")
+public class ProductionAccount implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("閿�鍞彴璐d")
+    private Long salesLedgerId;
+
+    @ApiModelProperty("閿�鍞骇鍝佽鏍糹d")
+    private Long salesLedgerProductId;
+
+    @ApiModelProperty("鎶ュ伐琛╥d")
+    private Long productionProductMainId;
+
+    @ApiModelProperty("鐢熶骇浜篿d")
+    private Long schedulingUserId;
+
+    @ApiModelProperty("鐢熶骇浜哄悕绉�")
+    private String schedulingUserName;
+
+    @ApiModelProperty("鐢熶骇鏁伴噺")
+    private BigDecimal finishedNum;
+
+    @ApiModelProperty("宸ユ椂瀹氶")
+    private BigDecimal workHours;
+
+    @ApiModelProperty("宸ュ簭鍚嶇О")
+    private String technologyOperationName;
+
+    @ApiModelProperty("鐢熶骇鏃ユ湡")
+    private LocalDateTime schedulingDate;
+
+    @ApiModelProperty("鍒涘缓鑰�")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼鑰�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java b/src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java
new file mode 100644
index 0000000..a70c057
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionBomStructure.java
@@ -0,0 +1,63 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟BOM浜у搧缁撴瀯
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_bom_structure")
+@ApiModel(value = "ProductionBomStructure瀵硅薄", description = "鐢熶骇璁㈠崟BOM浜у搧缁撴瀯")
+public class ProductionBomStructure implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("鐖惰妭鐐笽D")
+    private Long parentId;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productionOrderId;
+
+    @ApiModelProperty("浜у搧瑙勬牸id")
+    private Long productModelId;
+
+    @ApiModelProperty("宸ュ簭id")
+    private Long technologyOperationId;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟BOMid")
+    private Long productionOrderBomId;
+
+    @ApiModelProperty("鍗曚綅浜у嚭闇�瑕佹暟閲�")
+    private BigDecimal unitQuantity;
+
+    @ApiModelProperty("闇�姹傛暟閲�")
+    private BigDecimal demandedQuantity;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOperationMainParam.java b/src/main/java/com/ruoyi/production/pojo/ProductionOperationMainParam.java
new file mode 100644
index 0000000..cd136ad
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOperationMainParam.java
@@ -0,0 +1,96 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟鎶ュ伐鍙傛暟琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_operation_main_param")
+@ApiModel(value = "ProductionOperationMainParam瀵硅薄", description = "鐢熶骇宸ュ崟鎶ュ伐鍙傛暟琛�")
+public class ProductionOperationMainParam implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("宸ヨ壓璺嚎宸ュ簭鍙傛暟琛╥d")
+    private Long technologyRoutingOperationParamId;
+
+    @ApiModelProperty("鍙傛暟缂栫爜(鍞竴鏍囪瘑)")
+    private String paramCode;
+
+    @ApiModelProperty("鍙傛暟鍚嶇О")
+    private String paramName;
+
+    @ApiModelProperty("鍙傛暟绫诲瀷(1鏁板瓧 2鏂囨湰 3涓嬫媺閫夋嫨 4鏃堕棿)")
+    private Byte paramType;
+
+    @ApiModelProperty("鍙傛暟鏍煎紡")
+    private String paramFormat;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("鏄惁蹇呭~")
+    private Byte isRequired;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+
+    @ApiModelProperty("鍩虹鍙傛暟ID")
+    private Long technologyParamId;
+
+    @ApiModelProperty("宸ュ簭id")
+    private Long technologyOperationId;
+
+    @ApiModelProperty("宸ュ簭鍙傛暟ID")
+    private Long technologyOperationParamId;
+
+    @ApiModelProperty("宸ヨ壓璺嚎宸ュ簭ID")
+    private Long technologyRoutingOperationId;
+
+    @ApiModelProperty("鏍囧噯鍊�")
+    private String standardValue;
+
+    @ApiModelProperty("杈撳叆鍊�")
+    private String value;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟ID")
+    private String productionOrderRoutingOperationParamId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java b/src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java
new file mode 100644
index 0000000..08f4d39
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOperationTask.java
@@ -0,0 +1,79 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_operation_task")
+@ApiModel(value = "ProductionOperationTask瀵硅薄", description = "鐢熶骇宸ュ崟琛�")
+public class ProductionOperationTask implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("宸ヨ壓璺嚎宸ュ簭琛╥d")
+    private Long technologyRoutingOperationId;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("宸ュ崟缂栧彿")
+    private String workOrderNo;
+
+    @ApiModelProperty("璁″垝寮�濮嬫椂闂�")
+    private LocalDate planStartTime;
+
+    @ApiModelProperty("璁″垝缁撴潫鏃堕棿")
+    private LocalDate planEndTime;
+
+    @ApiModelProperty("瀹為檯寮�濮嬫椂闂�")
+    private LocalDate actualStartTime;
+
+    @ApiModelProperty("瀹為檯缁撴潫鏃堕棿")
+    private LocalDate actualEndTime;
+
+    @ApiModelProperty("鐘舵�� 1 寰呯‘璁� 2 寰呯敓浜� 3鐢熶骇涓� 4宸茬敓浜�")
+    private Integer status;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productionOrderId;
+
+    @ApiModelProperty("璁″垝鏁伴噺")
+    private BigDecimal planQuantity;
+
+    @ApiModelProperty("瀹屾垚鏁伴噺")
+    private BigDecimal completeQuantity;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
new file mode 100644
index 0000000..5fcab22
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
@@ -0,0 +1,77 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_order")
+@ApiModel(value = "ProductionOrder瀵硅薄", description = "鐢熶骇璁㈠崟琛�")
+public class ProductionOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("閿�鍞彴璐d")
+    private Long salesLedgerId;
+
+    @ApiModelProperty("鐢熶骇璁″垝ID鍒楄〃锛屾牸寮忥細[1,2,3]")
+    private String productionPlanIds;
+
+    @ApiModelProperty("浜у搧瑙勬牸id")
+    private Long productModelId;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟鍙�")
+    private String npsNo;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("宸ヨ壓璺嚎id")
+    private Long technologyRoutingId;
+
+    @ApiModelProperty("闇�姹傛暟閲�")
+    private BigDecimal quantity;
+
+    @ApiModelProperty("瀹屾垚鏁伴噺")
+    private BigDecimal completeQuantity;
+
+    @ApiModelProperty("寮�濮嬫棩鏈�")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty("缁撴潫鏃ユ湡")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty("閿�鍞骇鍝佽鏍糹d")
+    private Integer saleLedgerProductId;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrderBom.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrderBom.java
new file mode 100644
index 0000000..53cbb17
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrderBom.java
@@ -0,0 +1,63 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟BOM
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_order_bom")
+@ApiModel(value = "ProductionOrderBom瀵硅薄", description = "鐢熶骇璁㈠崟BOM")
+public class ProductionOrderBom implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("鐖惰妭鐐笽D")
+    private Long parentId;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productionOrderId;
+
+    @ApiModelProperty("浜у搧瑙勬牸id")
+    private Long productModelId;
+
+    @ApiModelProperty("宸ュ簭id")
+    private Long technologyOperationId;
+
+    @ApiModelProperty("鍗曚綅浜у嚭闇�瑕佹暟閲�")
+    private BigDecimal unitQuantity;
+
+    @ApiModelProperty("闇�姹傛暟閲�")
+    private BigDecimal demandedQuantity;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("bom鐨刬d")
+    private Long bomId;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrderPick.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrderPick.java
new file mode 100644
index 0000000..d0fcc28
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrderPick.java
@@ -0,0 +1,62 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁㈠崟棰嗘枡绾胯竟浠�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_order_pick")
+@ApiModel(value = "ProductionOrderPick瀵硅薄", description = "璁㈠崟棰嗘枡绾胯竟浠�")
+public class ProductionOrderPick implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("浜у搧瑙勬牸id")
+    private Integer productModelId;
+
+    @ApiModelProperty("鏁伴噺")
+    private BigDecimal quantity;
+
+    @ApiModelProperty("鎵瑰彿")
+    private String batchNo;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productionOrderId;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrderPickRecord.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrderPickRecord.java
new file mode 100644
index 0000000..b4fa6a8
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrderPickRecord.java
@@ -0,0 +1,78 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 绾胯竟浠撳嚭鍏ュ簱璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_order_pick_record")
+@ApiModel(value = "ProductionOrderPickRecord瀵硅薄", description = "绾胯竟浠撳嚭鍏ュ簱璁板綍")
+public class ProductionOrderPickRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("鍏宠仈棰嗘枡鍗昳d锛坧roduction_order_pick.id锛�")
+    private Long pickId;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productionOrderId;
+
+    @ApiModelProperty("鐢熶骇宸ュ崟id")
+    private Long productionOperationTaskId;
+
+    @ApiModelProperty("浜у搧瑙勬牸id")
+    private Integer productModelId;
+
+    @ApiModelProperty("鎵瑰彿")
+    private String batchNo;
+
+    @ApiModelProperty("棰嗘枡鏁伴噺")
+    private BigDecimal pickQuantity;
+
+    @ApiModelProperty("棰嗘枡鍓嶆暟閲�")
+    private BigDecimal beforeQuantity;
+
+    @ApiModelProperty("棰嗘枡鍚庡墿浣欐暟閲�")
+    private BigDecimal afterQuantity;
+
+    @ApiModelProperty("棰嗘枡绫诲瀷锛�1姝e父棰嗘枡  2琛ユ枡")
+    private Byte pickType;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrderRouting.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrderRouting.java
new file mode 100644
index 0000000..a74d7ad
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrderRouting.java
@@ -0,0 +1,64 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_order_routing")
+@ApiModel(value = "ProductionOrderRouting瀵硅薄", description = "鐢熶骇璁㈠崟宸ヨ壓璺嚎琛�")
+public class ProductionOrderRouting implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("浜у搧瑙勬牸id")
+    private Long productModelId;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productionOrderId;
+
+    @ApiModelProperty("鎻忚堪")
+    private String description;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("宸ヨ壓璺嚎id")
+    private Long technologyRoutingId;
+
+    @ApiModelProperty("宸ヨ壓璺嚎缂栫爜")
+    private String processRouteCode;
+
+    @ApiModelProperty("鍏宠仈bom鐨刬d")
+    private Integer bomId;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java
new file mode 100644
index 0000000..5d2bc57
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java
@@ -0,0 +1,64 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_order_routing_operation")
+@ApiModel(value = "ProductionOrderRoutingOperation瀵硅薄", description = "鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭琛�")
+public class ProductionOrderRoutingOperation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productionOrderId;
+
+    @ApiModelProperty("宸ヨ壓璺嚎宸ュ簭琛╥d")
+    private Long technologyRoutingOperationId;
+
+    @ApiModelProperty("宸ヨ壓璺嚎id")
+    private Long technologyRoutingId;
+
+    @ApiModelProperty("浜у搧瑙勬牸id")
+    private Long productModelId;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鎷栧姩鎺掑簭")
+    private Integer dragSort;
+
+    @ApiModelProperty("鏄惁璐ㄦ宸ュ簭")
+    private Boolean isQuality;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperationParam.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperationParam.java
new file mode 100644
index 0000000..6cc4910
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperationParam.java
@@ -0,0 +1,93 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
+@TableName("production_order_routing_operation_param")
+@ApiModel(value = "ProductionOrderRoutingOperationParam瀵硅薄", description = "鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛�")
+public class ProductionOrderRoutingOperationParam implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productionOrderId;
+
+    @ApiModelProperty("宸ヨ壓璺嚎宸ュ簭鍙傛暟琛╥d")
+    private Long technologyRoutingOperationParamId;
+
+    @ApiModelProperty("鍙傛暟缂栫爜(鍞竴鏍囪瘑)")
+    private String paramCode;
+
+    @ApiModelProperty("鍙傛暟鍚嶇О")
+    private String paramName;
+
+    @ApiModelProperty("鍙傛暟绫诲瀷(1鏁板瓧 2鏂囨湰 3涓嬫媺閫夋嫨 4鏃堕棿)")
+    private Byte paramType;
+
+    @ApiModelProperty("鍙傛暟鏍煎紡")
+    private String paramFormat;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("鏄惁蹇呭~")
+    private Byte isRequired;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+
+    @ApiModelProperty("鍩虹鍙傛暟ID")
+    private Long paramId;
+
+    @ApiModelProperty("宸ュ簭id")
+    private Long technologyOperationId;
+
+    @ApiModelProperty("宸ュ簭鍙傛暟ID")
+    private Long technologyOperationParamId;
+
+    @ApiModelProperty("宸ヨ壓璺嚎宸ュ簭ID")
+    private Long technologyRoutingOperationId;
+
+    @ApiModelProperty("鏍囧噯鍊�")
+    private String standardValue;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionPlan.java b/src/main/java/com/ruoyi/production/pojo/ProductionPlan.java
new file mode 100644
index 0000000..6ffa6db
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionPlan.java
@@ -0,0 +1,79 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇璁″垝琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 02:11:10
+ */
+@Getter
+@Setter
+@TableName("production_plan")
+@ApiModel(value = "ProductionPlan瀵硅薄", description = "鐢熶骇璁″垝琛�")
+public class ProductionPlan implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("涓荤敓浜ц鍒掑彿")
+    private String mpsNo;
+
+    @ApiModelProperty("闇�姹傛棩鏈�")
+    private LocalDateTime requiredDate;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    @ApiModelProperty("浜у搧鍨嬪彿id")
+    private Long productModelId;
+
+    @ApiModelProperty("闇�姹傛暟閲�")
+    private BigDecimal qtyRequired;
+
+    @ApiModelProperty("鐘舵��")
+    @TableLogic
+    private String state;
+
+    @ApiModelProperty("鏄惁涓嬪彂鍒堕�犺鍗�")
+    private Boolean issued;
+
+    @ApiModelProperty("鏉ユ簮")
+    private String source;
+
+    @ApiModelProperty("瀹℃牳鐘舵��")
+    private String isAudit;
+
+    @ApiModelProperty("鎵胯鏃ユ湡")
+    private LocalDateTime promisedDeliveryDate;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
index 52e8e04..3d8285a 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
@@ -1,40 +1,57 @@
 package com.ruoyi.production.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
-@Data
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐鎶曞叆琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
 @TableName("production_product_input")
-public class ProductionProductInput {
+@ApiModel(value = "ProductionProductInput瀵硅薄", description = "鐢熶骇鎶ュ伐鎶曞叆琛�")
+public class ProductionProductInput implements Serializable {
 
-    @TableId(type = IdType.AUTO)
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
-    @ApiModelProperty(value = "鎶ュ伐id")
-    private Long productMainId;
+    @ApiModelProperty("鎶曞叆鏁伴噺")
+    private BigDecimal inputQuantity;
 
-    @ApiModelProperty(value = "浜у搧id")
+    @ApiModelProperty("鎶ュ伐琛╥d")
+    private Long productionProductMainId;
+
+    @ApiModelProperty("浜у搧鍨嬪彿id")
     private Long productModelId;
 
-    @ApiModelProperty(value = "鏁伴噺")
-    private BigDecimal quantity;
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
 
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
 
-    @ApiModelProperty(value = "绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
+    @ApiModelProperty("鏇存柊鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
index a0301a0..449c15f 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -1,61 +1,57 @@
 package com.ruoyi.production.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
+import lombok.Getter;
+import lombok.Setter;
 
+import java.io.Serializable;
 import java.time.LocalDateTime;
 
-@Data
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
 @TableName("production_product_main")
-public class ProductionProductMain {
+@ApiModel(value = "ProductionProductMain瀵硅薄", description = "鐢熶骇鎶ュ伐琛�")
+public class ProductionProductMain implements Serializable {
 
-    @TableId(type = IdType.AUTO)
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("id")
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
-    @ApiModelProperty(value = "鎶ュ伐鍗曞彿")
-    @Excel(name = "鎶ュ伐鍗曞彿")
+    @ApiModelProperty("鎶ュ伐鍗曞彿")
     private String productNo;
 
-    @ApiModelProperty(value = "鎶ュ伐浜哄憳id")
-    private Long userId;
+    @ApiModelProperty("宸ュ崟id")
+    private Long productionOperationTaskId;
 
-    @ApiModelProperty(value = "鎶ュ伐浜哄憳")
-    private String userName;
-
-    @ApiModelProperty(value = "鐢熶骇椤圭洰id")
-    private Long productProcessRouteItemId;
-
-    @ApiModelProperty(value = "宸ュ崟id")
-    private Long workOrderId;
-
-    @ApiModelProperty(value = "鎶ュ伐鐘舵��")
-    private Integer status;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @Excel(name = "鍒涘缓鏃堕棿")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-
-    @ApiModelProperty(value = "绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
+    @ApiModelProperty("閮ㄩ棬ID")
     @TableField(fill = FieldFill.INSERT)
     private Long deptId;
 
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
index 3d1a032..32cc976 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
@@ -1,43 +1,59 @@
 package com.ruoyi.production.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
-@Data
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐浜у嚭琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Getter
+@Setter
 @TableName("production_product_output")
-public class ProductionProductOutput {
+@ApiModel(value = "ProductionProductOutput瀵硅薄", description = "鐢熶骇鎶ュ伐浜у嚭琛�")
+public class ProductionProductOutput implements Serializable {
 
-    @TableId(type = IdType.AUTO)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
-    @ApiModelProperty(value = "鎶ュ伐id")
-    private Long productMainId;
+    @ApiModelProperty("鎶ュ伐鍗昳d")
+    private Long productionProductMainId;
 
-    @ApiModelProperty(value = "浜у搧id")
+    @ApiModelProperty("浜у搧瑙勬牸id")
     private Long productModelId;
 
-    @ApiModelProperty(value = "鎶ュ伐鏁伴噺(鎬绘暟閲�)")
+    @ApiModelProperty("鎶ュ伐鏁伴噺")
     private BigDecimal quantity;
 
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ApiModelProperty("鎶ュ簾鏁伴噺")
+    private BigDecimal scrapQty;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓浜篒D")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
 
-    @ApiModelProperty(value = "绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-    @ApiModelProperty(value = "鎶ュ簾鏁伴噺")
-    private BigDecimal scrapQty;
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-
+    @ApiModelProperty("鏇存柊鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java b/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
deleted file mode 100644
index 3ed3caf..0000000
--- a/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Builder;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-/**
- * @author :yys
- * @date : 2025/7/8 13:24
- */
-@TableName("sales_ledger_production_accounting")
-@Data
-@Builder
-public class SalesLedgerProductionAccounting {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 鎶ュ伐琛╥d
-     */
-    private Long productMainId;
-
-    /**
-     * 鐢熶骇浜篿d
-     */
-    private Long schedulingUserId;
-
-    /**
-     * 鐢熶骇浜哄悕绉�
-     */
-    private String schedulingUserName;
-
-    /**
-     * 鐢熶骇鏁伴噺
-     */
-    private BigDecimal finishedNum;
-
-    /**
-     * 宸ユ椂瀹氶
-     */
-    private BigDecimal workHours;
-
-    /**
-     * 宸ュ簭
-     */
-    private String process;
-    /**
-     * 鐢熶骇鏃ユ湡
-     */
-    private LocalDate schedulingDate;
-
-    /**
-     * 鍒涘缓鑰�
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    /**
-     * 淇敼鑰�
-     */
-    @TableField(fill = FieldFill.UPDATE)
-    private Integer updateUser;
-
-    /**
-     * 淇敼鏃堕棿
-     */
-    @TableField(fill = FieldFill.UPDATE)
-    private LocalDateTime updateTime;
-
-    /**
-     * 绉熸埛ID
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java b/src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java
deleted file mode 100644
index 8fb8a76..0000000
--- a/src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import lombok.Builder;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-/**
- * @author :yys
- * @date : 2025/7/8 13:24
- */
-@TableName("sales_ledger_scheduling")
-@Data
-@Builder
-public class SalesLedgerScheduling {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 閿�鍞彴璐d
-     */
-    private Long salesLedgerId;
-
-    /**
-     * 閿�鍞骇鍝乮d
-     */
-    private Long salesLedgerProductId;
-
-    /**
-     * 娲惧伐浜篿d
-     */
-    private Long schedulingUserId;
-
-    /**
-     * 鐢熶骇鐐掓満
-     */
-    private String speculativeTradingName;
-
-    /**
-     * 浜х嚎
-     */
-    private String productionLine;
-
-    /**
-     * 娲惧伐浜哄悕绉�
-     */
-    private String schedulingUserName;
-
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    private BigDecimal schedulingNum;
-
-    /**
-     * 宸叉帓浜ф暟閲�
-     */
-    private BigDecimal finishedNum;
-    /**
-     * 娲惧伐鏃ユ湡
-     */
-    private LocalDate schedulingDate;
-
-    /**
-     * 鎺掍骇鐘舵�侊紙1-寰呮帓浜� 2-鎺掍骇涓� 3-宸叉帓浜э級
-     */
-    private Integer status;
-
-    /**
-     * 鍒涘缓鑰�
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    /**
-     * 淇敼鑰�
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    /**
-     * 淇敼鏃堕棿
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime updateTime;
-
-    /**
-     * 绉熸埛ID
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java b/src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java
deleted file mode 100644
index b251afc..0000000
--- a/src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Builder;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-/**
- * @author :yys
- * @date : 2025/7/8 13:24
- */
-@TableName("sales_ledger_work")
-@Data
-@Builder
-public class SalesLedgerWork {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 閿�鍞帓浜ц〃id
-     */
-    private Long salesLedgerSchedulingId;
-
-    /**
-     * 閿�鍞彴璐d
-     */
-    private Long salesLedgerId;
-
-    /**
-     * 閿�鍞骇鍝乮d
-     */
-    private Long salesLedgerProductId;
-
-    /**
-     * 鎺掍骇浜篿d
-     */
-    private Long schedulingUserId;
-
-    /**
-     * 鎺掍骇浜哄悕绉�
-     */
-    private String schedulingUserName;
-
-
-    /**
-     * 鎺掍骇鏁伴噺
-     */
-    private BigDecimal schedulingNum;
-
-    /**
-     * 鐢熶骇鏁伴噺
-     */
-    private BigDecimal finishedNum;
-
-    /**
-     * 宸ユ椂瀹氶
-     */
-    private BigDecimal workHours;
-
-    /**
-     * 宸ュ簭
-     */
-    private String process;
-
-
-    /**
-     * 浜х嚎
-     */
-    private String productionLine;
-    /**
-     * 鎺掍骇鏃ユ湡
-     */
-    private LocalDate schedulingDate;
-
-    /**
-     * 鎶ュ伐鐘舵�侊紙1-寰呯敓浜� 2-鐢熶骇涓� 3-宸叉姤宸ワ級
-     */
-    private Integer status;
-
-    /**
-     * 澶囨敞
-     */
-    private String remark;
-
-    /**
-     * 鎹熻��
-     */
-    private String loss;
-
-    /**
-     * 鍙e懗鍒嗙被
-     */
-    private String type;
-
-    /**
-     * 棰嗙敤
-     */
-    private String receive;
-
-    /**
-     * 鍒涘缓鑰�
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    /**
-     * 淇敼鑰�
-     */
-    @TableField(fill = FieldFill.UPDATE)
-    private Integer updateUser;
-
-    /**
-     * 淇敼鏃堕棿
-     */
-    @TableField(fill = FieldFill.UPDATE)
-    private LocalDateTime updateTime;
-
-    /**
-     * 绉熸埛ID
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-}
diff --git a/src/main/java/com/ruoyi/production/pojo/SpeculativeTradingInfo.java b/src/main/java/com/ruoyi/production/pojo/SpeculativeTradingInfo.java
deleted file mode 100644
index 8334755..0000000
--- a/src/main/java/com/ruoyi/production/pojo/SpeculativeTradingInfo.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.ruoyi.production.pojo;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
-/**
- * @author :yys
- * @date : 2025/11/11 15:38
- */
-@TableName("speculative_trading_info")
-@Data
-public class SpeculativeTradingInfo {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 鐐掓満鍚嶇О
-     */
-    private String name;
-
-    /**
-     * 鐐掓満宸ヤ綔閲�(鍗曚綅kg)
-     */
-    private BigDecimal workLoad;
-
-
-    /**
-     * 鎺掑簭
-     */
-    private Integer sort;
-
-    /**
-     * 鐐掓満姝e湪宸ヤ綔閲�(鍗曚綅kg)
-     */
-    @TableField(exist = false)
-    private BigDecimal currentWorkLoad;
-
-    /**
-     * 鐐掓満绌轰綑宸ヤ綔閲�(鍗曚綅kg)
-     */
-    @TableField(exist = false)
-    private BigDecimal vacant;
-
-    /**
-     * 鍒涘缓鑰�
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    /**
-     * 淇敼鑰�
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    /**
-     * 淇敼鏃堕棿
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime updateTime;
-
-    /**
-     * 绉熸埛ID
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
-
-
-
-    @TableField(fill = FieldFill.INSERT)
-    private Long deptId;
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java b/src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java
deleted file mode 100644
index 3299048..0000000
--- a/src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProcessRouteItemDto;
-import com.ruoyi.production.pojo.ProcessRouteItem;
-
-import java.util.List;
-
-public interface ProcessRouteItemService extends IService<ProcessRouteItem> {
-    List<ProcessRouteItemDto> listProcessRouteItemDto( ProcessRouteItemDto processRouteItemDto);
-
-    int sort(ProcessRouteItem processRouteItem);
-
-    String batchDelete(Long id);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
deleted file mode 100644
index 6b408cf..0000000
--- a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProcessRouteDto;
-import com.ruoyi.production.pojo.ProcessRoute;
-import io.swagger.models.auth.In;
-
-import java.util.List;
-
-public interface ProcessRouteService extends IService<ProcessRoute> {
-
-    IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto);
-
-    Integer saveProcessRoute(ProcessRoute processRoute);
-
-    int batchDelete(List<Long> ids);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductBomService.java b/src/main/java/com/ruoyi/production/service/ProductBomService.java
deleted file mode 100644
index 86d8c0b..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductBomService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.dto.ProductBomDto;
-import com.ruoyi.production.pojo.ProductBom;
-import org.springframework.web.multipart.MultipartFile;
-
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * <p>
- * BOM涓昏〃 鏈嶅姟绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 09:59:27
- */
-public interface ProductBomService extends IService<ProductBom> {
-
-    IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto);
-
-    AjaxResult add(ProductBom productBom);
-
-    AjaxResult uploadBom(MultipartFile file);
-
-    AjaxResult update(ProductBom productBom);
-
-    void exportBom(HttpServletResponse response, Integer bomId);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductOrderMaterialService.java b/src/main/java/com/ruoyi/production/service/ProductOrderMaterialService.java
deleted file mode 100644
index d0b7455..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductOrderMaterialService.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProductOrderMaterialDto;
-import com.ruoyi.production.pojo.ProductOrderMaterial;
-
-import java.util.List;
-
-public interface ProductOrderMaterialService extends IService<ProductOrderMaterial> {
-    IPage<ProductOrderMaterial> listPage(Page<ProductOrderMaterial> page, ProductOrderMaterial productOrderMaterial);
-
-    List<ProductOrderMaterialDto> pickMaterial(ProductOrderMaterialDto productOrderMaterialDto);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductOrderService.java b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
deleted file mode 100644
index 5a714a6..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductOrderService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProductBomDto;
-import com.ruoyi.production.dto.ProductOrderDto;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.pojo.ProcessRoute;
-import com.ruoyi.production.pojo.ProductOrder;
-
-import java.util.List;
-
-
-public interface ProductOrderService extends IService<ProductOrder> {
-
-    IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder);
-
-    int bindingRoute(ProductOrder productOrder);
-
-    List<ProcessRoute> listProcessRoute(Long productModelId);
-
-    List<ProductStructureDto> listProcessBom(Long orderId);
-
-    Boolean addProductOrder(ProductOrder productOrder);
-
-    Boolean delete(Long[] id);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java b/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java
deleted file mode 100644
index c37eea1..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductProcessRouteItemDto;
-import com.ruoyi.production.pojo.ProductProcessRouteItem;
-
-import java.util.List;
-
-public interface ProductProcessRouteItemService extends IService<ProductProcessRouteItem> {
-    List<ProductProcessRouteItemDto> listItem(Long orderId);
-
-    R deleteRouteItem(Long id);
-
-    R addRouteItem(ProductProcessRouteItem productProcessRouteItem);
-
-    int sortRouteItem(ProductProcessRouteItem productProcessRouteItem);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
deleted file mode 100644
index 238aa1e..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.ruoyi.production.dto.ProcessRouteDto;
-import com.ruoyi.production.pojo.ProductProcessRoute;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * <p>
- *  鏈嶅姟绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
- */
-public interface ProductProcessRouteService extends IService<ProductProcessRoute> {
-
-    ProcessRouteDto listMain(Long orderId);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessService.java b/src/main/java/com/ruoyi/production/service/ProductProcessService.java
deleted file mode 100644
index fbe9b87..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductProcessService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.device.pojo.DeviceRepair;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.dto.*;
-import com.ruoyi.production.pojo.ProductProcess;
-import com.ruoyi.production.pojo.SalesLedgerScheduling;
-import org.springframework.web.multipart.MultipartFile;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:39
- */
-public interface ProductProcessService extends IService<ProductProcess> {
-    IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto);
-
-    AjaxResult add(ProductProcessDto productProcessDto);
-
-    AjaxResult importData(MultipartFile file);
-
-    String batchDelete(List<Integer> ids);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductStructureService.java b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
deleted file mode 100644
index ebdddb1..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductStructureService.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.basic.dto.ProductModelDto;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.pojo.ProductStructure;
-
-import java.util.List;
-
-public interface ProductStructureService extends IService<ProductStructure> {
-
-
-    Boolean addProductStructureDto(ProductStructureDto productStructureDto);
-
-    List<ProductStructureDto> listBybomId(Integer bomId);
-
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductWorkOrderFileService.java b/src/main/java/com/ruoyi/production/service/ProductWorkOrderFileService.java
deleted file mode 100644
index 0df0a8c..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductWorkOrderFileService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.ruoyi.production.pojo.ProductWorkOrderFile;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * <p>
- * 鐢熶骇宸ュ崟闄勪欢琛� 鏈嶅姟绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-23 03:28:32
- */
-public interface ProductWorkOrderFileService extends IService<ProductWorkOrderFile> {
-
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java b/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
deleted file mode 100644
index fc12260..0000000
--- a/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProductWorkOrderDto;
-import com.ruoyi.production.pojo.ProductWorkOrder;
-
-import jakarta.servlet.http.HttpServletResponse;
-
-public interface ProductWorkOrderService extends IService<ProductWorkOrder>{
-
-    IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder);
-
-    int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto);
-
-    void down(HttpServletResponse response, ProductWorkOrder productWorkOrder);
-}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionAccountService.java b/src/main/java/com/ruoyi/production/service/ProductionAccountService.java
new file mode 100644
index 0000000..6c5ee53
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionAccountService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionAccount;
+
+/**
+ * <p>
+ * 鐢熶骇鏍哥畻琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionAccountService extends IService<ProductionAccount> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java b/src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java
new file mode 100644
index 0000000..f94ddec
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionBomStructure;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟BOM浜у搧缁撴瀯 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionBomStructureService extends IService<ProductionBomStructure> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOperationMainParamService.java b/src/main/java/com/ruoyi/production/service/ProductionOperationMainParamService.java
new file mode 100644
index 0000000..d05f4e2
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOperationMainParamService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOperationMainParam;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟鎶ュ伐鍙傛暟琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOperationMainParamService extends IService<ProductionOperationMainParam> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java b/src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java
new file mode 100644
index 0000000..90570be
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOperationTaskService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOperationTask;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOperationTaskService extends IService<ProductionOperationTask> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOrderBomService.java b/src/main/java/com/ruoyi/production/service/ProductionOrderBomService.java
new file mode 100644
index 0000000..da4f9fc
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOrderBomService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOrderBom;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟BOM 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOrderBomService extends IService<ProductionOrderBom> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOrderPickRecordService.java b/src/main/java/com/ruoyi/production/service/ProductionOrderPickRecordService.java
new file mode 100644
index 0000000..4787929
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOrderPickRecordService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOrderPickRecord;
+
+/**
+ * <p>
+ * 绾胯竟浠撳嚭鍏ュ簱璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOrderPickRecordService extends IService<ProductionOrderPickRecord> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOrderPickService.java b/src/main/java/com/ruoyi/production/service/ProductionOrderPickService.java
new file mode 100644
index 0000000..acffc16
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOrderPickService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOrderPick;
+
+/**
+ * <p>
+ * 璁㈠崟棰嗘枡绾胯竟浠� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOrderPickService extends IService<ProductionOrderPick> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingOperationParamService.java b/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingOperationParamService.java
new file mode 100644
index 0000000..1ff0e5b
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingOperationParamService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOrderRoutingOperationParamService extends IService<ProductionOrderRoutingOperationParam> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingOperationService.java b/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingOperationService.java
new file mode 100644
index 0000000..ed64948
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingOperationService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOrderRoutingOperationService extends IService<ProductionOrderRoutingOperation> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingService.java b/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingService.java
new file mode 100644
index 0000000..54668a4
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOrderRoutingService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOrderRouting;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOrderRoutingService extends IService<ProductionOrderRouting> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionOrderService.java b/src/main/java/com/ruoyi/production/service/ProductionOrderService.java
new file mode 100644
index 0000000..a3e7fd5
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionOrderService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.pojo.ProductionOrder;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+public interface ProductionOrderService extends IService<ProductionOrder> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionPlanService.java b/src/main/java/com/ruoyi/production/service/ProductionPlanService.java
new file mode 100644
index 0000000..f4b871d
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionPlanService.java
@@ -0,0 +1,66 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.production.bean.dto.ProductionPlanDto;
+import com.ruoyi.production.bean.vo.ProductionPlanVo;
+import com.ruoyi.production.pojo.ProductionPlan;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐢熶骇璁″垝琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 02:11:10
+ */
+public interface ProductionPlanService extends IService<ProductionPlan> {
+
+    IPage<ProductionPlanVo> listPage(Page page, ProductionPlanDto productionPlanDto);
+
+    /**
+     * 鎵嬪姩鍚屾
+     */
+    void loadProdData();
+
+    /**
+     * 瀹氭椂鍚屾
+     */
+    void syncProdDataJob();
+
+    /**
+     * 鍚堝苟鐢熶骇璁″垝
+     */
+    boolean combine(ProductionPlanDto productionPlanDto);
+
+    /**
+     * 鍒涘缓鐢熶骇璁″垝
+     */
+    boolean add(ProductionPlanDto productionPlanDto);
+
+    /**
+     * 鏇存柊鐢熶骇璁″垝
+     */
+    boolean update(ProductionPlanDto productionPlanDto);
+
+    /**
+     * 鍒犻櫎鐢熶骇璁″垝
+     */
+    boolean delete(List<Long> ids);
+
+    /**
+     * 瀵煎叆鏁版嵁
+     */
+    void importProdData(MultipartFile file);
+
+    /**
+     * 瀵煎嚭鏁版嵁
+     */
+    void exportProdData(HttpServletResponse response, List<Long> ids);
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java b/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
index 1af1772..7ce4410 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
@@ -1,11 +1,16 @@
 package com.ruoyi.production.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProductionProductInputDto;
 import com.ruoyi.production.pojo.ProductionProductInput;
 
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐鎶曞叆琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 public interface ProductionProductInputService extends IService<ProductionProductInput> {
-    IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto);
+
 }
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
index 72d868c..9a4adbf 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -1,20 +1,16 @@
 package com.ruoyi.production.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProductionProductMainDto;
 import com.ruoyi.production.pojo.ProductionProductMain;
 
-import java.util.ArrayList;
-import java.util.List;
-
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 public interface ProductionProductMainService extends IService<ProductionProductMain> {
-    IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto);
 
-    Boolean addProductMain(ProductionProductMainDto productionProductMainDto);
-
-    Boolean removeProductMain(Long id);
-
-    ArrayList<Long> listMain(List<Long> idList);
 }
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java b/src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java
index dea72b5..2a51d2e 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java
@@ -1,11 +1,16 @@
 package com.ruoyi.production.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProductionProductOutputDto;
 import com.ruoyi.production.pojo.ProductionProductOutput;
 
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐浜у嚭琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 public interface ProductionProductOutputService extends IService<ProductionProductOutput> {
-    IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, ProductionProductOutputDto productionProductOutputDto);
+
 }
diff --git a/src/main/java/com/ruoyi/production/service/SalesLedgerProductionAccountingService.java b/src/main/java/com/ruoyi/production/service/SalesLedgerProductionAccountingService.java
deleted file mode 100644
index 4ebd01f..0000000
--- a/src/main/java/com/ruoyi/production/service/SalesLedgerProductionAccountingService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProductionProductMainDto;
-import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
-import com.ruoyi.production.dto.UserAccountDto;
-import com.ruoyi.production.dto.UserProductionAccountingDto;
-import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:39
- */
-public interface SalesLedgerProductionAccountingService extends IService<SalesLedgerProductionAccounting> {
-
-
-    IPage<SalesLedgerProductionAccountingDto> listPage(Page page, SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto);
-
-
-    IPage<SalesLedgerProductionAccountingDto> pageProductionAccounting(SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page);
-
-    IPage<ProductionProductMainDto> listProductionDetails(SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page);
-
-    UserAccountDto getByUserId(UserProductionAccountingDto userProductionAccountingDto);
-}
diff --git a/src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java b/src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java
deleted file mode 100644
index ee60f2e..0000000
--- a/src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProcessSchedulingDto;
-import com.ruoyi.production.dto.ProductionDispatchAddDto;
-import com.ruoyi.production.dto.SalesLedgerSchedulingDto;
-import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
-import com.ruoyi.production.pojo.SalesLedgerScheduling;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:39
- */
-public interface SalesLedgerSchedulingService extends IService<SalesLedgerScheduling> {
-
-    IPage<SalesLedgerSchedulingDto> listPage(Page page, SalesLedgerSchedulingDto salesLedgerSchedulingDto);
-
-    void export(HttpServletResponse response);
-
-    String productionDispatch(List<ProductionDispatchAddDto> productionDispatchAddDto);
-
-    IPage<SalesLedgerSchedulingProcessDto> listPageProcess(Page page, SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto);
-
-    int productionDispatchDelete(List<Long> ids);
-
-    int processScheduling(List<ProcessSchedulingDto> processSchedulingDto);
-
-    void exportOne(HttpServletResponse response);
-}
diff --git a/src/main/java/com/ruoyi/production/service/SalesLedgerWorkService.java b/src/main/java/com/ruoyi/production/service/SalesLedgerWorkService.java
deleted file mode 100644
index b219515..0000000
--- a/src/main/java/com/ruoyi/production/service/SalesLedgerWorkService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.ruoyi.production.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.dto.ProductionReportDto;
-import com.ruoyi.production.dto.SalesLedgerWorkDto;
-import com.ruoyi.production.pojo.SalesLedgerWork;
-
-import java.util.List;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:38
- */
-public interface SalesLedgerWorkService extends IService<SalesLedgerWork> {
-
-    IPage<SalesLedgerWorkDto> listPage(Page page, SalesLedgerWorkDto salesLedgerWorkDto);
-
-    int productionReport(ProductionReportDto productionReportDto);
-
-    int productionReportUpdate(ProductionReportDto productionReportDto);
-
-    List<ProductionReportDto> getList(Long id);
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
deleted file mode 100644
index 5614366..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.production.dto.ProcessRouteItemDto;
-import com.ruoyi.production.mapper.ProcessRouteItemMapper;
-import com.ruoyi.production.pojo.ProcessRouteItem;
-import com.ruoyi.production.service.ProcessRouteItemService;
-import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-@Service
-@AllArgsConstructor
-@Transactional(rollbackFor = Exception.class)
-public class ProcessRouteItemServiceImpl extends ServiceImpl<ProcessRouteItemMapper, ProcessRouteItem> implements ProcessRouteItemService {
-
-    @Autowired
-    private  ProcessRouteItemMapper processRouteItemMapper;
-
-    @Override
-    public List<ProcessRouteItemDto> listProcessRouteItemDto(ProcessRouteItemDto processRouteItemDto) {
-        return processRouteItemMapper.listProcessRouteItemDto( processRouteItemDto);
-    }
-
-    //鎺掑簭
-    @Override
-    public int sort(ProcessRouteItem processRouteItem) {
-        //鏌ヨ琚敼鍔ㄧ殑杩欐潯鏁版嵁
-        ProcessRouteItem oldProcessRouteItem = processRouteItemMapper.selectById(processRouteItem.getId());
-        //鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
-        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery()
-                .eq(ProcessRouteItem::getRouteId, oldProcessRouteItem.getRouteId())
-                .orderByAsc(ProcessRouteItem::getDragSort));
-        // 鑾峰彇鐩爣浣嶇疆锛堢Щ鍔ㄥ埌绗嚑涓箣鍚庯級
-        Integer targetPosition = processRouteItem.getDragSort();
-        if (targetPosition != null && targetPosition >= 0) {
-            // 绉诲姩鍏冪礌鍒版柊鐨勪綅缃�
-            processRouteItems.remove(oldProcessRouteItem);
-            processRouteItems.add(targetPosition-1, oldProcessRouteItem);
-            // 鏇存柊鎵�鏈夊彈褰卞搷鐨勬帓搴忓瓧娈�
-            for (int i = 0; i < processRouteItems.size(); i++) {
-                ProcessRouteItem item = processRouteItems.get(i);
-                if (!item.getId().equals(oldProcessRouteItem.getId())) {
-                    // 妫�鏌ユ槸鍚﹂渶瑕佹洿鏂版帓搴忓��
-                    if (item.getDragSort() != i+1) {
-                        item.setDragSort(i+1);
-                        processRouteItemMapper.updateById(item);
-                    }
-                } else {
-                    // 鏇存柊鍘熻褰曠殑鏂版帓搴忎綅缃�
-                    oldProcessRouteItem.setDragSort(targetPosition);
-                    processRouteItemMapper.updateById(oldProcessRouteItem);
-                }
-            }
-            return 1;
-        }
-        return 0;
-    }
-
-    @Override
-    public String batchDelete(Long id) {
-        // 鏌ヨ瑕佸垹闄ょ殑鏁版嵁
-        ProcessRouteItem deleteProcessRouteItem = processRouteItemMapper.selectById(id);
-        if (deleteProcessRouteItem == null) {
-            return "鍒犻櫎澶辫触锛屾湭鎵惧埌瀵瑰簲鏁版嵁";
-        }
-        Long routeId = deleteProcessRouteItem.getRouteId();
-        // 鍒犻櫎鎸囧畾鏁版嵁
-        processRouteItemMapper.deleteById(id);
-        // 鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
-        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery()
-                .eq(ProcessRouteItem::getRouteId, routeId)
-                .orderByAsc(ProcessRouteItem::getDragSort));
-        // 閲嶆柊璁剧疆鎺掑簭鍊硷紝浣垮簭鍙疯繛缁�
-        for (int i = 0; i < processRouteItems.size(); i++) {
-            ProcessRouteItem item = processRouteItems.get(i);
-            if (!item.getDragSort().equals(i+1)) {
-                item.setDragSort(i+1);
-                processRouteItemMapper.updateById(item);
-            }
-        }
-        return "鍒犻櫎鎴愬姛";
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
deleted file mode 100644
index b3beded..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.production.dto.ProcessRouteDto;
-import com.ruoyi.production.mapper.ProcessRouteItemMapper;
-import com.ruoyi.production.mapper.ProcessRouteMapper;
-import com.ruoyi.production.mapper.ProductOrderMapper;
-import com.ruoyi.production.mapper.ProductProcessRouteMapper;
-import com.ruoyi.production.pojo.ProcessRoute;
-import com.ruoyi.production.pojo.ProcessRouteItem;
-import com.ruoyi.production.pojo.ProductOrder;
-import com.ruoyi.production.pojo.ProductProcessRoute;
-import com.ruoyi.production.service.ProcessRouteService;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
-import java.util.List;
-
-@Service
-@AllArgsConstructor
-@Slf4j
-public class ProcessRouteServiceImpl extends ServiceImpl<ProcessRouteMapper, ProcessRoute> implements ProcessRouteService {
-
-    @Autowired
-    private ProcessRouteMapper processRouteMapper;
-
-    @Autowired
-    private ProcessRouteItemMapper processRouteItemMapper;
-
-    @Autowired
-    private ProductOrderMapper productOrderMapper;
-
-    @Override
-    public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) {
-
-        return processRouteMapper.pageProcessRouteDto(page, processRouteDto);
-    }
-
-    @Override
-    public Integer saveProcessRoute(ProcessRoute processRoute) {
-        this.save(processRoute);
-        String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-        String idStr = String.format("%06d", processRoute.getId());
-        String newProductCode = "GYLX" + dateStr + idStr;
-        // 鏇存柊鏁版嵁搴撲腑鐨刾roductCode
-        processRoute.setProcessRouteCode(newProductCode);
-        return processRouteMapper.updateById(processRoute);
-    }
-
-    @Override
-    public int batchDelete(List<Long> ids) {
-        //鍏堝垽鏂槸鍚﹀凡缁忓紩鐢ㄤ簡
-        List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids));
-        if (productOrders.size()>0){
-            throw new RuntimeException("璇ュ伐鑹鸿矾绾跨敓浜у凡寮曠敤锛屼笉鑳藉垹闄�");
-        }
-        //鍒犻櫎宸ヨ壓璺嚎璇︽儏
-        processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids));
-        return processRouteMapper.deleteBatchIds(ids);
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
deleted file mode 100644
index b2e77e3..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
+++ /dev/null
@@ -1,408 +0,0 @@
-package com.ruoyi.production.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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.pojo.Product;
-import com.ruoyi.basic.pojo.ProductModel;
-import com.ruoyi.basic.service.IProductModelService;
-import com.ruoyi.basic.service.IProductService;
-import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.dto.BomImportDto;
-import com.ruoyi.production.dto.ProductBomDto;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.mapper.*;
-import com.ruoyi.production.pojo.*;
-import com.ruoyi.production.service.ProductBomService;
-import com.ruoyi.production.service.ProductProcessRouteService;
-import com.ruoyi.production.service.ProductProcessService;
-import com.ruoyi.production.service.ProductStructureService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * <p>
- * BOM涓昏〃 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 09:59:27
- */
-@Service
-public class ProductBomServiceImpl extends ServiceImpl<ProductBomMapper, ProductBom> implements ProductBomService {
-
-    @Autowired
-    private IProductService productService;
-
-    @Autowired
-    private ProductBomMapper productBomMapper;
-
-
-    @Autowired
-    private IProductModelService productModelService;
-
-    @Autowired
-    private ProductStructureService productStructureService;
-
-    @Autowired
-    private ProductProcessService productProcessService;
-
-    @Autowired
-    private ProductProcessRouteMapper productProcessRouteMapper;
-
-    @Autowired
-    private ProductOrderMapper productOrderMapper;
-
-    @Autowired
-    private ProcessRouteMapper processRouteMapper;
-
-    @Autowired
-    private ProductStructureMapper productStructureMapper;
-
-    @Override
-    public IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto) {
-        return productBomMapper.listPage(page, productBomDto);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult add(ProductBom productBom) {
-        boolean save = productBomMapper.insert(productBom) > 0;
-        if (save) {
-            String no = "BM." + String.format("%05d", productBom.getId());
-            productBom.setBomNo(no);
-            productBomMapper.updateById(productBom);
-
-            //  鏌ヨ鍑轰骇鍝佹ā鍨嬩俊鎭�
-            if (productBom.getProductModelId() == null) {
-                throw new ServiceException("璇烽�夋嫨浜у搧妯″瀷");
-            }
-
-            ProductModel productModel = productModelService.getById(productBom.getProductModelId());
-            if (productModel == null) {
-                throw new ServiceException("閫夋嫨鐨勪骇鍝佹ā鍨嬩笉瀛樺湪");
-            }
-
-            //  娣诲姞鍒濆鐨勪骇鍝佺粨鏋�
-            ProductStructure productStructure = new ProductStructure();
-            productStructure.setProductModelId(productBom.getProductModelId());
-            productStructure.setUnit(productModel.getUnit());
-            productStructure.setUnitQuantity(BigDecimal.valueOf(1));
-            productStructure.setBomId(productBom.getId());
-
-            productStructureService.save(productStructure);
-
-            return AjaxResult.success();
-        }
-        return AjaxResult.error();
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult update(ProductBom productBom) {
-        //  鏌ヨ鍑轰骇鍝佹ā鍨嬩俊鎭�
-        if (productBom.getProductModelId() == null) {
-            throw new ServiceException("璇烽�夋嫨浜у搧妯″瀷");
-        }
-
-        ProductBom oldBom = productBomMapper.selectById(productBom.getId());
-        // 濡傛灉瑙勬牸鏀瑰彉锛屽叧鑱旂殑鐢熶骇璁㈠崟濡傛灉璁㈠崟瀹屾垚鏁伴噺>0锛屽垯涓嶈鏀筨om锛涘惁鍒欏垹闄や箣鍓嶅叧鑱旂殑浜у搧缁撴瀯, 淇敼鍏宠仈璁㈠崟鐨勪骇鍝佷俊鎭�
-        if (!oldBom.getProductModelId().equals(productBom.getProductModelId())) {
-            ProductModel productModel = productModelService.getById(productBom.getProductModelId());
-            if (productModel == null) {
-                throw new ServiceException("閫夋嫨鐨勪骇鍝佹ā鍨嬩笉瀛樺湪");
-            }
-
-            // 鍏宠仈鐨勭敓浜ц鍗曞鏋滆鍗曞畬鎴愭暟閲�>0锛屽垯涓嶈鏀筨om
-            // 鍏堟煡璇笌璇OM鍏宠仈鐨勫伐鑹鸿矾绾�
-            List<ProductProcessRoute> productProcessRoutes = productProcessRouteMapper.selectList(new LambdaQueryWrapper<ProductProcessRoute>()
-                    .eq(ProductProcessRoute::getBomId, oldBom.getId()));
-
-            // 妫�鏌ユ槸鍚︽湁鍏宠仈鐨勫伐鑹鸿矾绾�
-            if (!productProcessRoutes.isEmpty()) {
-                // 鎻愬彇宸ヨ壓璺嚎鍏宠仈鐨勭敓浜ц鍗旾D
-                List<Long> orderIds = productProcessRoutes.stream()
-                        .map(ProductProcessRoute::getProductOrderId)
-                        .filter(Objects::nonNull)
-                        .collect(Collectors.toList());
-
-                // 鏌ヨ鍏宠仈鐨勭敓浜ц鍗�
-                if (!orderIds.isEmpty()) {
-                    List<ProductOrder> productOrders = productOrderMapper.selectList(new LambdaQueryWrapper<ProductOrder>()
-                            .in(ProductOrder::getId, orderIds));
-
-                    // 妫�鏌ヨ鍗曞畬鎴愭暟閲�
-                    for (ProductOrder order : productOrders) {
-                        if (order.getCompleteQuantity() != null && order.getCompleteQuantity().compareTo(BigDecimal.ZERO) > 0) {
-                            throw new ServiceException("璇OM宸插叧鑱旂敓浜ц鍗曚笖鏈夊畬鎴愭暟閲忥紝鏃犳硶淇敼");
-                        } else {
-                            // 淇敼鍏宠仈璁㈠崟鐨勪骇鍝佷俊鎭�
-                            order.setProductModelId(productBom.getProductModelId());
-                            productOrderMapper.updateById(order);
-                        }
-                    }
-                }
-
-                // 淇敼鍏宠仈浜у搧宸ヨ壓璺嚎鐨勪骇鍝佷俊鎭�
-                for (ProductProcessRoute route : productProcessRoutes) {
-                    route.setProductModelId(productBom.getProductModelId());
-                    productProcessRouteMapper.updateById(route);
-                }
-            }
-
-            // 鏌ヨ鍏宠仈鐨勫伐鑹鸿矾绾�
-            List<ProcessRoute> processRoutes = processRouteMapper.selectList(new LambdaQueryWrapper<ProcessRoute>()
-                    .eq(ProcessRoute::getBomId, oldBom.getId()));
-            if (!processRoutes.isEmpty()) {
-                // 淇敼鍏宠仈宸ヨ壓璺嚎鐨勪骇鍝佷俊鎭�
-                for (ProcessRoute route : processRoutes) {
-                    route.setProductModelId(productBom.getProductModelId());
-                    processRouteMapper.updateById(route);
-                }
-            }
-
-            // 鍒犻櫎涔嬪墠鍏宠仈鐨勪骇鍝佺粨鏋�
-            productStructureMapper.delete(new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, productBom.getId()));
-
-            // 鍏宠仈鏂扮殑浜у搧缁撴瀯
-            ProductStructure productStructure = new ProductStructure();
-            productStructure.setProductModelId(productBom.getProductModelId());
-            productStructure.setUnit(productModel.getUnit());
-            productStructure.setUnitQuantity(BigDecimal.valueOf(1));
-            productStructure.setBomId(productBom.getId());
-            productStructureService.save(productStructure);
-        }
-        productBomMapper.updateById(productBom);
-        return AjaxResult.success();
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult uploadBom(MultipartFile file) {
-        ExcelUtil<BomImportDto> util = new ExcelUtil<>(BomImportDto.class);
-        List<BomImportDto> list;
-        try {
-            list = util.importExcel(file.getInputStream());
-        } catch (Exception e) {
-            return AjaxResult.error("Excel瑙f瀽澶辫触");
-        }
-
-        if (list == null || list.isEmpty()) return AjaxResult.error("鏁版嵁涓虹┖");
-
-        //  澶勭悊宸ュ簭
-        list.forEach(dto -> {
-            dto.setParentName(clean(dto.getParentName()));
-            dto.setParentSpec(clean(dto.getParentSpec()));
-            dto.setChildName(clean(dto.getChildName()));
-            dto.setChildSpec(clean(dto.getChildSpec()));
-        });
-        handleProcess(list);
-        Map<String, Long> processMap = productProcessService.list().stream()
-                .collect(Collectors.toMap(ProductProcess::getName, ProductProcess::getId, (k1, k2) -> k1));
-
-        //  鍒涘缓 BOM 鏁版嵁
-        BomImportDto first = list.get(0);
-        ProductModel rootModel = findModel(first.getParentName(), first.getParentSpec());
-        ProductBom bom = new ProductBom();
-        bom.setProductModelId(rootModel.getId());
-        bom.setVersion("1.0");
-        productBomMapper.insert(bom);
-        bom.setBomNo("BM." + String.format("%05d", bom.getId()));
-        productBomMapper.updateById(bom);
-
-        // 璁板綍宸茬粡鎻掑叆缁撴瀯鐨勮妭鐐癸細Key = "鍚嶇О+瑙勬牸", Value = structure_id
-        Map<String, Long> treePathMap = new HashMap<>();
-
-        for (int i = 0; i < list.size(); i++) {
-            BomImportDto dto = list.get(i);
-            String parentKey = dto.getParentName() + "|" + dto.getParentSpec();
-            String childKey = dto.getChildName() + "|" + dto.getChildSpec();
-
-            //澶勭悊鏍硅妭鐐�,绗竴琛屼笖瀛愰」涓虹┖
-            if (i == 0 && StringUtils.isBlank(dto.getChildName())) {
-                ProductStructure rootNode = new ProductStructure();
-                rootNode.setBomId(bom.getId());
-                rootNode.setParentId(null); // 椤跺眰娌℃湁鐖惰妭鐐�
-                rootNode.setProductModelId(rootModel.getId());
-                rootNode.setUnitQuantity(BigDecimal.ONE);
-                rootNode.setUnit(rootModel.getUnit());
-                productStructureService.save(rootNode);
-
-                treePathMap.put(parentKey, rootNode.getId());
-                continue;
-            }
-
-            //  澶勭悊瀛愬眰绾ц妭鐐�
-            //  鎵惧埌鐖惰妭鐐瑰湪鏁版嵁搴撻噷鐨� ID
-            Long parentStructureId = treePathMap.get(parentKey);
-            if (parentStructureId == null) {
-                // 濡傛灉 Map 閲屾壘涓嶅埌锛岃鏄� Excel 椤哄簭涔变簡鎴栬�呮暟鎹湁璇�
-                throw new ServiceException("瀵煎叆澶辫触: 鐖堕」[" + dto.getParentName() + "]蹇呴』鍦ㄥ叾瀛愰」涔嬪墠瀹氫箟");
-            }
-
-            //  鑾峰彇瀛愰」妯″瀷淇℃伅
-            ProductModel childModel = findModel(dto.getChildName(), dto.getChildSpec());
-
-            //  鎻掑叆缁撴瀯琛�
-            ProductStructure node = new ProductStructure();
-            node.setBomId(bom.getId());
-            node.setParentId(parentStructureId); // 鐖惰妭鐐笽D
-            node.setProductModelId(childModel.getId());
-            node.setUnitQuantity(dto.getUnitQty());
-            node.setUnit(childModel.getUnit());
-            if (processMap.containsKey(dto.getProcess())) {
-                node.setProcessId(processMap.get(dto.getProcess()));
-            }
-            productStructureService.save(node);
-
-            //  鎶婂綋鍓嶅瓙椤硅褰曞埌 Map,浣滀负浠ュ悗鏇存繁灞傜骇鐨勭埗椤规煡鎵句緷鎹�
-            //  鍚屼竴鐖堕」涓嬬殑鍚屽悕瀛愰」涓嶉渶瑕侀噸澶嶈褰�
-            treePathMap.put(childKey, node.getId());
-        }
-
-        return AjaxResult.success("BOM瀵煎叆鎴愬姛");
-    }
-
-
-    @Override
-    public void exportBom(HttpServletResponse response, Integer bomId) {
-        if (bomId == null) {
-            return;
-        }
-
-        List<ProductStructureDto> treeData = productStructureService.listBybomId(bomId);
-        if (treeData == null || treeData.isEmpty()) {
-            return;
-        }
-
-        //  灏嗘爲褰㈢粨鏋勬墎骞冲寲 浣跨敤 BFS绠楁硶 瀵煎嚭,鎸夊眰绾ч『搴�
-        List<BomImportDto> exportList = new ArrayList<>();
-
-        // Map<ID, Node> idMap 鐢ㄤ簬鏌ユ壘鐖惰妭鐐�
-        Map<Long, ProductStructureDto> idMap = new HashMap<>();
-        populateMap(treeData, idMap);
-
-        //  treeData 鐨勭涓�涓槸鏍硅妭鐐�
-        for (ProductStructureDto root : treeData) {
-            //  娣诲姞鏍硅妭鐐�
-            BomImportDto rootRow = new BomImportDto();
-            rootRow.setParentName(root.getProductName());
-            rootRow.setParentSpec(root.getModel());
-            rootRow.setUnitQty(root.getUnitQuantity());
-            rootRow.setRemark("");
-            exportList.add(rootRow);
-
-            //  BFS 閬嶅巻-闃熷垪
-            Queue<ProductStructureDto> queue = new LinkedList<>();
-            if (root.getChildren() != null) {
-                queue.addAll(root.getChildren());
-            }
-
-            while (!queue.isEmpty()) {
-                ProductStructureDto child = queue.poll();
-
-                // 鏌ユ壘鐖惰妭鐐�
-                ProductStructureDto parent = idMap.get(child.getParentId());
-                if (parent == null) {
-                    // 闄や簡鏈�澶栧眰鑺傜偣,鍏朵粬鑺傜偣鐨勭埗绫昏偗瀹氭槸涓嶄細涓虹┖鐨�
-                    continue;
-                }
-
-                BomImportDto row = new BomImportDto();
-                // 鐖剁被淇℃伅
-                row.setParentName(parent.getProductName());
-                row.setParentSpec(parent.getModel());
-                // 瀛愮被淇℃伅
-                row.setChildName(child.getProductName());
-                row.setChildSpec(child.getModel());
-                row.setUnitQty(child.getUnitQuantity());
-                row.setProcess(child.getProcessName());
-
-                exportList.add(row);
-
-                //  灏嗗瓙鑺傜偣鐨勫瓙鑺傜偣鍔犲叆闃熷垪-涓嬩竴灞�
-                if (child.getChildren() != null && !child.getChildren().isEmpty()) {
-                    queue.addAll(child.getChildren());
-                }
-            }
-        }
-
-        ExcelUtil<BomImportDto> util = new ExcelUtil<>(BomImportDto.class);
-        util.exportExcel(response, exportList, "BOM缁撴瀯瀵煎嚭");
-    }
-
-    private void populateMap(List<ProductStructureDto> nodes, Map<Long, ProductStructureDto> map) {
-        if (nodes == null || nodes.isEmpty()) {
-            return;
-        }
-        for (ProductStructureDto node : nodes) {
-            map.put(node.getId(), node);
-            populateMap(node.getChildren(), map);
-        }
-    }
-
-    private ProductModel findModel(String name, String spec) {
-        Product product = productService.getOne(new LambdaQueryWrapper<Product>()
-                .eq(Product::getProductName, name).last("limit 1"));
-        if (product == null) throw new ServiceException("浜у搧鏈淮鎶わ細" + name);
-
-        ProductModel model = productModelService.getOne(new LambdaQueryWrapper<ProductModel>()
-                .eq(ProductModel::getProductId, product.getId())
-                .eq(ProductModel::getModel, spec).last("limit 1"));
-        if (model == null) throw new ServiceException("瑙勬牸鏈淮鎶わ細" + name + "[" + spec + "]");
-        return model;
-    }
-
-    private void handleProcess(List<BomImportDto> list) {
-
-        Set<String> processNames = list.stream()
-                .map(BomImportDto::getProcess)
-                .filter(StringUtils::isNotBlank)
-                .collect(Collectors.toSet());
-
-        if (processNames.isEmpty()) {
-            return;
-        }
-
-        List<ProductProcess> exists = productProcessService.list(
-                new LambdaQueryWrapper<ProductProcess>().in(ProductProcess::getName, processNames)
-        );
-
-        Set<String> existNames = exists.stream()
-                .map(ProductProcess::getName)
-                .collect(Collectors.toSet());
-
-        List<ProductProcess> needSave = processNames.stream()
-                .filter(n -> !existNames.contains(n))
-                .map(n -> {
-                    ProductProcess p = new ProductProcess();
-                    p.setName(n);
-                    return p;
-                })
-                .collect(Collectors.toList());
-
-        if (!needSave.isEmpty()) {
-            productProcessService.saveBatch(needSave);
-            needSave.forEach(p -> p.setNo("GX" + String.format("%08d", p.getId())));
-            productProcessService.updateBatchById(needSave);
-        }
-    }
-
-    private String clean(String s) {
-        if (s == null) return null;
-        return s.replaceAll("[\\u00A0\\u3000]", "").trim();
-    }
-}
-
-
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderMaterialServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderMaterialServiceImpl.java
deleted file mode 100644
index 9c2c9b6..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderMaterialServiceImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.production.dto.ProductOrderMaterialDto;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.mapper.ProcessRouteMapper;
-import com.ruoyi.production.mapper.ProductOrderMapper;
-import com.ruoyi.production.mapper.ProductOrderMaterialMapper;
-import com.ruoyi.production.pojo.ProcessRoute;
-import com.ruoyi.production.pojo.ProductOrder;
-import com.ruoyi.production.pojo.ProductOrderMaterial;
-import com.ruoyi.production.service.ProductOrderMaterialService;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-@Service
-@RequiredArgsConstructor
-@Transactional(rollbackFor = Exception.class)
-public class ProductOrderMaterialServiceImpl extends ServiceImpl<ProductOrderMaterialMapper, ProductOrderMaterial> implements ProductOrderMaterialService {
-
-    private final ProductOrderMaterialMapper productOrderMaterialmapper;
-
-    private final ProductOrderMapper productOrderMapper;
-
-    private final ProcessRouteMapper processRouteMapper;
-
-
-    @Override
-    public IPage<ProductOrderMaterial> listPage(Page<ProductOrderMaterial> page, ProductOrderMaterial productOrderMaterial) {
-        return productOrderMaterialmapper.selectPage(page, null);
-    }
-
-    @Override
-    public List<ProductOrderMaterialDto> pickMaterial(ProductOrderMaterialDto productOrderMaterialDto) {
-        Long productOrderId = productOrderMaterialDto.getProductOrderId();
-        ProductOrder productOrder = productOrderMapper.selectById(productOrderId);
-        BigDecimal quantity = productOrder.getQuantity();
-        ProcessRoute processRoute = processRouteMapper.selectById(productOrder.getRouteId());
-        //鏌ヨ鍙跺瓙鑺傜偣
-        List<ProductStructureDto> productStructureDtoList = productOrderMaterialmapper.selectLeafNode(Long.valueOf(processRoute.getBomId()));
-        List<Long> productModelIds = productStructureDtoList.stream()
-                .map(ProductStructureDto::getProductModelId)
-                .filter(Objects::nonNull)
-                .distinct()
-                .collect(Collectors.toList());
-
-        if (!productModelIds.isEmpty()) {
-            List<ProductOrderMaterialDto> productOrderMaterialDtos = productOrderMaterialmapper.selectByProductModelIds(productModelIds);
-            if (!productOrderMaterialDtos.isEmpty()) {
-                return productOrderMaterialDtos;
-            }else {
-                throw new RuntimeException("搴撳瓨娌℃湁瀵瑰簲浜у搧");
-            }
-        }else {
-            throw new RuntimeException("璇峰厛缁存姢BOM");
-        }
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
deleted file mode 100644
index 8a1099c..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
-import com.ruoyi.procurementrecord.utils.StockUtils;
-import com.ruoyi.production.dto.ProductOrderDto;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.mapper.*;
-import com.ruoyi.production.pojo.*;
-import com.ruoyi.production.service.ProductOrderService;
-import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, ProductOrder> implements ProductOrderService {
-
-    @Autowired
-    private ProductOrderMapper productOrderMapper;
-
-    @Autowired
-    private ProcessRouteMapper processRouteMapper;
-
-    @Autowired
-    private ProductProcessRouteMapper productProcessRouteMapper;
-
-    @Autowired
-    private ProcessRouteItemMapper processRouteItemMapper;
-
-    @Autowired
-    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
-
-    @Autowired
-    private ProductWorkOrderMapper productWorkOrderMapper;
-
-    @Autowired
-    private ProductionProductMainMapper productionProductMainMapper;
-
-    @Autowired
-    private ProductionProductOutputMapper productionProductOutputMapper;
-
-    @Autowired
-    private ProductionProductInputMapper productionProductInputMapper;
-
-    @Autowired
-    private QualityInspectMapper qualityInspectMapper;
-
-    @Autowired
-    private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
-
-    @Autowired
-    private StockUtils stockUtils;
-
-    @Override
-    public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
-        return productOrderMapper.pageProductOrder(page, productOrder);
-    }
-
-    @Override
-    public int bindingRoute(ProductOrder productOrder) {
-        //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎涓昏〃
-        ProcessRoute processRoute = processRouteMapper.selectById(productOrder.getRouteId());
-        ProductProcessRoute productProcessRoute = new ProductProcessRoute();
-        productProcessRoute.setProductModelId(processRoute.getProductModelId());
-        productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
-        productProcessRoute.setProductOrderId(productOrder.getId());
-        productProcessRoute.setBomId(processRoute.getBomId());
-        productProcessRouteMapper.insert(productProcessRoute);
-        //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
-        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
-        // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
-        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-        for (ProcessRouteItem processRouteItem : processRouteItems) {
-            ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
-            productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
-            productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
-            productProcessRouteItem.setProductOrderId(productOrder.getId());
-            productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
-            productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
-            int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
-            if (insert > 0) {
-                // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
-                ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
-                int sequenceNumber = 1; // 榛樿搴忓彿
-                if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
-                    String lastNo = lastWorkOrder.getWorkOrderNo().toString();
-                    if (lastNo.startsWith(datePrefix)) {
-                        String seqStr = lastNo.substring(datePrefix.length());
-                        try {
-                            sequenceNumber = Integer.parseInt(seqStr) + 1;
-                        } catch (NumberFormatException e) {
-                            sequenceNumber = 1;
-                        }
-                    }
-                }
-                // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
-                String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
-                ProductWorkOrder productWorkOrder = new ProductWorkOrder();
-                productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
-                productWorkOrder.setProductOrderId(productOrder.getId());
-                ProductOrder order = productOrderMapper.selectById(productOrder.getId());
-                productWorkOrder.setPlanQuantity(order.getQuantity());
-                productWorkOrder.setWorkOrderNo(workOrderNoStr);
-                productWorkOrder.setStatus(1);
-                productWorkOrderMapper.insert(productWorkOrder);
-            }
-        }
-        return productOrderMapper.updateById(productOrder);
-    }
-
-    @Override
-    public List<ProcessRoute> listProcessRoute(Long productModelId) {
-        return productOrderMapper.listProcessRoute(productModelId);
-    }
-
-    @Override
-    public List<ProductStructureDto> listProcessBom(Long orderId) {
-        return productOrderMapper.listProcessBom(orderId);
-    }
-
-    @Override
-    public Boolean addProductOrder(ProductOrder productOrder) {
-        String string = generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
-        productOrder.setNpsNo(string);
-        productOrder.setCompleteQuantity(BigDecimal.ZERO);
-        this.save(productOrder);
-        if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) {
-            this.bindingRoute(productOrder);
-        }
-        return true;
-    }
-
-    @Override
-    public Boolean delete(Long[] ids) {
-        //濡傛灉宸茬粡寮�濮嬬敓浜�,涓嶈兘鍒犻櫎
-        //鏌ヨ鐢熶骇璁㈠崟涓嬬殑宸ュ崟
-        List<ProductWorkOrder> productWorkOrders = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery().in(ProductWorkOrder::getProductOrderId, ids));
-        if (productWorkOrders.size()>0){
-            //鍒ゆ柇鏄惁鏈夋姤宸ユ暟鎹�
-            List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(Wrappers.<ProductionProductMain>lambdaQuery()
-                    .in(ProductionProductMain::getWorkOrderId, productWorkOrders.stream().map(ProductWorkOrder::getId).collect(Collectors.toList())));
-            if (productionProductMains.size()>0){
-                throw new RuntimeException("鐢熶骇璁㈠崟宸茬粡寮�濮嬬敓浜�,涓嶈兘鍒犻櫎");
-            }
-            //鍒犻櫎宸ュ崟
-            productWorkOrderMapper.delete(Wrappers.<ProductWorkOrder>lambdaQuery().in(ProductWorkOrder::getProductOrderId, ids));
-        }
-        //鍒犻櫎宸ヨ壓璺嚎
-        productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
-                .in(ProductProcessRouteItem::getProductOrderId, ids));
-        productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
-                .in(ProductProcessRoute::getProductOrderId, ids));
-        //鍒犻櫎鐢熶骇璁㈠崟
-        productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
-                .in(ProductOrder::getId, ids));
-        return true;
-    }
-
-    //鑾峰彇褰撳墠鐢熶骇璁㈠崟鍙�
-    public String getMaxOrderNoByDate(String datePrefix) {
-        QueryWrapper<ProductOrder> queryWrapper = new QueryWrapper<>();
-        // 鍖归厤浠� SC + 鏃ユ湡寮�澶寸殑璁㈠崟鍙�
-        queryWrapper.likeRight("nps_no", "SC" + datePrefix);
-        // 鎸夎鍗曞彿鍊掑簭鎺掑垪
-        queryWrapper.orderByDesc("nps_no");
-        queryWrapper.last("LIMIT 1");
-
-        ProductOrder latestOrder = this.getOne(queryWrapper);
-        return latestOrder != null ? latestOrder.getNpsNo() : null;
-    }
-
-    public String generateNextOrderNo(String datePrefix) {
-        String maxOrderNo = getMaxOrderNoByDate(datePrefix);
-        int sequence = 1; // 榛樿璧峰搴忓彿
-        if (maxOrderNo != null && !maxOrderNo.isEmpty()) {
-            // 鎻愬彇娴佹按鍙烽儴鍒嗭紙鍋囪鏍煎紡涓� SC + 鏃ユ湡 + 娴佹按鍙凤級
-            String sequenceStr = maxOrderNo.substring(("SC" + datePrefix).length());
-            try {
-                sequence = Integer.parseInt(sequenceStr) + 1;
-            } catch (NumberFormatException e) {
-                // 寮傚父鎯呭喌涓嬮噸缃负1
-                sequence = 1;
-            }
-        }
-        // 鐢熸垚鏂拌鍗曞彿
-        return "SC" + datePrefix + String.format("%04d", sequence);
-    }
-
-
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
deleted file mode 100644
index c5fbac0..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductProcessRouteItemDto;
-import com.ruoyi.production.dto.ProductionProductMainDto;
-import com.ruoyi.production.mapper.*;
-import com.ruoyi.production.pojo.*;
-import com.ruoyi.production.service.ProductProcessRouteItemService;
-import com.ruoyi.production.service.ProductionProductMainService;
-import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
-import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import lombok.AllArgsConstructor;
-import org.apache.poi.ss.formula.functions.T;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@Service
-@Transactional(rollbackFor = Exception.class)
-@AllArgsConstructor
-public class ProductProcessRouteItemServiceImpl extends ServiceImpl<ProductProcessRouteItemMapper, ProductProcessRouteItem> implements ProductProcessRouteItemService {
-
-
-    private ProductionProductMainService productionProductMainService;
-    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
-
-    private ProductionProductMainMapper productionProductMainMapper;
-
-    private ProductionProductInputMapper productionProductInputMapper;
-
-    private ProductionProductOutputMapper productionProductOutputMapper;
-
-    private QualityInspectMapper qualityInspectMapper;
-
-    private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
-
-    private ProductWorkOrderMapper productWorkOrderMapper;
-
-    private ProductOrderMapper productOrderMapper;
-
-    private ProductProcessRouteMapper productProcessRouteMapper;
-
-    private SalesLedgerProductMapper salesLedgerProductMapper;
-
-
-    @Override
-    public List<ProductProcessRouteItemDto> listItem(Long orderId) {
-        return productProcessRouteItemMapper.listItem(orderId);
-    }
-
-    @Override
-    public R deleteRouteItem(Long id) {
-        Long routeItemId = id;
-        try {
-            // 鏌ヨ宸ュ崟
-            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectOne(
-                    new LambdaQueryWrapper<ProductWorkOrder>()
-                            .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId)
-                            .last("LIMIT 1")
-            );
-            if (productWorkOrder == null) {
-                throw new RuntimeException("鍒犻櫎澶辫触锛氭湭鎵惧埌鍏宠仈鐨勭敓浜у伐鍗�");
-            }
-            if (BigDecimal.ZERO.compareTo(productWorkOrder.getCompleteQuantity()) < 0) {
-                throw new RuntimeException("鍒犻櫎澶辫触锛氳宸ュ崟宸插紑濮嬬敓浜э紝璇峰厛鍒犻櫎鐢熶骇鎶ュ伐");
-            }
-            Long workOrderId = productWorkOrder.getId();
-            Long productOrderId = productWorkOrder.getProductOrderId();
-            // 鏌ヨ鐢熶骇涓昏〃
-            List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(
-                    new LambdaQueryWrapper<ProductionProductMain>()
-                            .eq(ProductionProductMain::getWorkOrderId, workOrderId)
-            );
-            if (!productionProductMains.isEmpty()) {
-                // 鎵归噺鍒犻櫎瀛愯〃
-                for (ProductionProductMain main : productionProductMains) {
-                    productionProductMainService.removeProductMain(main.getId());
-//                    Long mainId = main.getId();
-//                    // 鍒犻櫎鎶曞叆
-//                    productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
-//                            .eq(ProductionProductInput::getProductMainId, mainId));
-//                    // 鍒犻櫎浜у嚭
-//                    productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
-//                            .eq(ProductionProductOutput::getProductMainId, mainId));
-//                    // 鍒犻櫎璐ㄦ
-//                    qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>()
-//                            .eq(QualityInspect::getProductMainId, mainId));
-                    salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
-                            .eq(SalesLedgerProductionAccounting::getProductMainId, main.getId()));
-                }
-            }
-            // 鏌ヨ璁㈠崟 + 鍒犻櫎鏍哥畻
-
-            // 鍒犻櫎鍏宠仈宸ュ崟
-            productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
-                    .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId));
-
-            // 鍒犻櫎涓昏〃鏁版嵁
-            ProductProcessRouteItem deleteProductProcessRouteItem = productProcessRouteItemMapper.selectById(routeItemId);
-            Long productRouteId = deleteProductProcessRouteItem.getProductRouteId();
-            // 鍒犻櫎鎸囧畾鏁版嵁
-            productProcessRouteItemMapper.deleteById(id);
-            // 鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
-            List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery()
-                    .eq(ProductProcessRouteItem::getProductRouteId, productRouteId)
-                    .orderByAsc(ProductProcessRouteItem::getDragSort));
-            // 閲嶆柊璁剧疆鎺掑簭鍊硷紝浣垮簭鍙疯繛缁�
-            for (int i = 0; i < productProcessRouteItems.size(); i++) {
-                ProductProcessRouteItem item = productProcessRouteItems.get(i);
-                if (!item.getDragSort().equals(i + 1)) {
-                    item.setDragSort(i + 1);
-                    productProcessRouteItemMapper.updateById(item);
-                }
-            }
-            return R.ok();
-        } catch (Exception e) {
-            throw new RuntimeException("鍒犻櫎鐢熶骇宸ヨ壓璺嚎澶辫触锛�" + e.getMessage());
-        }
-    }
-
-    @Override
-    public R addRouteItem(ProductProcessRouteItem productProcessRouteItem) {
-        ProductOrder productOrder = productOrderMapper.selectById(productProcessRouteItem.getProductOrderId());
-        int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
-        // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
-        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-        if (insert > 0) {
-            // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
-            ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
-            int sequenceNumber = 1; // 榛樿搴忓彿
-            if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
-                String lastNo = lastWorkOrder.getWorkOrderNo().toString();
-                if (lastNo.startsWith(datePrefix)) {
-                    String seqStr = lastNo.substring(datePrefix.length());
-                    try {
-                        sequenceNumber = Integer.parseInt(seqStr) + 1;
-                    } catch (NumberFormatException e) {
-                        sequenceNumber = 1;
-                    }
-                }
-            }
-            // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
-            String workOrderNoStr = "GD" +String.format("%s%03d", datePrefix, sequenceNumber);
-            ProductWorkOrder productWorkOrder = new ProductWorkOrder();
-            productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
-            productWorkOrder.setProductOrderId(productProcessRouteItem.getProductOrderId());
-            productWorkOrder.setPlanQuantity(productOrder.getQuantity());
-            productWorkOrder.setWorkOrderNo(workOrderNoStr);
-            productWorkOrder.setStatus(1);
-            productWorkOrderMapper.insert(productWorkOrder);
-        }
-        return R.ok();
-    }
-
-    @Override
-    public int sortRouteItem(ProductProcessRouteItem productProcessRouteItem) {
-        //鏌ヨ琚敼鍔ㄧ殑杩欐潯鏁版嵁
-        ProductProcessRouteItem oldProductProcessRouteItem = productProcessRouteItemMapper.selectById(productProcessRouteItem.getId());
-        //鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
-        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery()
-                .eq(ProductProcessRouteItem::getProductRouteId, oldProductProcessRouteItem.getProductRouteId())
-                .orderByAsc(ProductProcessRouteItem::getDragSort));
-        // 鑾峰彇鐩爣浣嶇疆锛堢Щ鍔ㄥ埌绗嚑涓箣鍚庯級
-        Integer targetPosition = productProcessRouteItem.getDragSort();
-        if (targetPosition != null && targetPosition >= 0) {
-            // 绉诲姩鍏冪礌鍒版柊鐨勪綅缃�
-            productProcessRouteItems.remove(oldProductProcessRouteItem);
-            productProcessRouteItems.add(targetPosition-1, oldProductProcessRouteItem);
-            // 鏇存柊鎵�鏈夊彈褰卞搷鐨勬帓搴忓瓧娈�
-            for (int i = 0; i < productProcessRouteItems.size(); i++) {
-                ProductProcessRouteItem item = productProcessRouteItems.get(i);
-                if (!item.getId().equals(oldProductProcessRouteItem.getId())) {
-                    // 妫�鏌ユ槸鍚﹂渶瑕佹洿鏂版帓搴忓��
-                    if (item.getDragSort() != i+1) {
-                        item.setDragSort(i+1);
-                        productProcessRouteItemMapper.updateById(item);
-                    }
-                } else {
-                    // 鏇存柊鍘熻褰曠殑鏂版帓搴忎綅缃�
-                    oldProductProcessRouteItem.setDragSort(targetPosition);
-                    productProcessRouteItemMapper.updateById(oldProductProcessRouteItem);
-                }
-            }
-            return 1;
-        }
-        return 0;
-    }
-
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
deleted file mode 100644
index f5b2e92..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.ruoyi.production.dto.ProcessRouteDto;
-import com.ruoyi.production.pojo.ProductProcessRoute;
-import com.ruoyi.production.mapper.ProductProcessRouteMapper;
-import com.ruoyi.production.service.ProductProcessRouteService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- *  鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-15 02:51:09
- */
-@Service
-public class ProductProcessRouteServiceImpl extends ServiceImpl<ProductProcessRouteMapper, ProductProcessRoute> implements ProductProcessRouteService {
-
-    @Autowired
-    private ProductProcessRouteMapper productProcessRouteMapper;
-
-    @Override
-    public ProcessRouteDto listMain(Long orderId) {
-        return productProcessRouteMapper.listMain(orderId);
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
deleted file mode 100644
index 3be9086..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.pojo.Customer;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.dto.ProductProcessDto;
-import com.ruoyi.production.mapper.ProcessRouteItemMapper;
-import com.ruoyi.production.mapper.ProductProcessMapper;
-import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
-import com.ruoyi.production.pojo.ProcessRouteItem;
-import com.ruoyi.production.pojo.ProductProcess;
-import com.ruoyi.production.pojo.ProductProcessRouteItem;
-import com.ruoyi.production.service.ProductProcessService;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
-
-@Service
-public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess> implements ProductProcessService {
-    @Autowired
-    private ProductProcessMapper productProcessMapper;
-    @Autowired
-    private ProcessRouteItemMapper processRouteItemMapper;
-    @Autowired
-    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
-
-    @Override
-    public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
-        return productProcessMapper.listPage(page, productProcessDto);
-    }
-
-    @Override
-    public AjaxResult add(ProductProcessDto productProcessDto) {
-        ProductProcess productProcess = new ProductProcess();
-        BeanUtils.copyProperties(productProcessDto,productProcess);
-        boolean save = productProcessMapper.insert(productProcess) > 0;
-        if (save && ObjectUtils.isNull(productProcessDto.getNo())) {
-            // 鏍规嵁id鐢熸垚no瀛楁锛欸X + 8浣嶆暟瀛楋紙涓嶈冻8浣嶅墠闈㈣ˉ0锛�
-            String no = "GX" + String.format("%08d", productProcess.getId());
-            productProcess.setNo(no);
-
-            productProcessMapper.updateById(productProcess);
-            return AjaxResult.success();
-        }
-        return AjaxResult.success();
-    }
-
-    @Override
-    public AjaxResult importData(MultipartFile file) {
-        try {
-            ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class);
-            List<ProductProcess> productProcessList = util.importExcel(file.getInputStream());
-            if(CollectionUtils.isEmpty(productProcessList)){
-                return AjaxResult.warn("妯℃澘閿欒鎴栧鍏ユ暟鎹负绌�");
-            }
-            productProcessList.forEach(productProcess -> {
-                if (ObjectUtils.isEmpty(productProcess)) {
-                    throw new RuntimeException("浣跨敤妯℃澘杩涜瀵煎叆");
-                }
-                if (ObjectUtils.isEmpty(productProcess.getName())) {
-                    throw new RuntimeException("宸ュ簭鍚嶇О涓嶈兘涓虹┖");
-                }
-            });
-            this.saveOrUpdateBatch(productProcessList);
-            return AjaxResult.success(true);
-        }catch (Exception e){
-            e.printStackTrace();
-            return AjaxResult.error(e.getMessage());
-        }
-    }
-
-    @Override
-    public String batchDelete(List<Integer> ids) {
-        //鏌ヨ鏄惁鐢熶骇涓凡缁忓紩鐢ㄤ簡杩欎簺宸ュ簭
-        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getProcessId, ids));
-        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().in(ProductProcessRouteItem::getProcessId, ids));
-        if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)){
-            throw new RuntimeException("璇ュ伐搴忓凡缁忚浣跨敤锛屾棤娉曞垹闄�");
-        }
-        productProcessMapper.deleteBatchIds(ids);
-        return null;
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
deleted file mode 100644
index 381b642..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.mapper.ProductStructureMapper;
-import com.ruoyi.production.pojo.ProductStructure;
-import com.ruoyi.production.service.ProductStructureService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-@Slf4j
-@Service
-public class ProductStructureServiceImpl extends ServiceImpl<ProductStructureMapper, ProductStructure> implements ProductStructureService {
-
-    @Autowired
-    private ProductStructureMapper productStructureMapper;
-
-
-    @Override
-    @Transactional
-    public Boolean addProductStructureDto(ProductStructureDto dto) {
-
-        Integer bomId = dto.getBomId();
-
-        //  灏嗘爲鎵佸钩鍖�
-        List<ProductStructureDto> flatDtoList = new ArrayList<>();
-        flattenTree(dto.getChildren(), flatDtoList);
-
-        //  鏌ヨ鏁版嵁搴撲腑宸叉湁鐨� BOM 鏁版嵁
-        List<ProductStructure> dbList = this.list(new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, bomId));
-
-        //  鏌ユ壘宸插瓨鍦ㄧ殑鑺傜偣 - ID
-        Set<Long> frontendIds = flatDtoList.stream()
-                .map(ProductStructureDto::getId)
-                .filter(Objects::nonNull)
-                .collect(Collectors.toSet());
-
-        //  闇�瑕佸垹闄ょ殑鑺傜偣 - ID
-        Set<Long> deleteIds = dbList.stream()
-                .map(ProductStructure::getId)
-                .filter(id -> !frontendIds.contains(id))
-                .collect(Collectors.toSet());
-
-        if (!deleteIds.isEmpty()) {
-            this.removeByIds(deleteIds);
-        }
-
-        //  鏂板 / 鏇存柊
-        List<ProductStructure> insertList = new ArrayList<>();
-        List<ProductStructure> updateList = new ArrayList<>();
-
-        // 鐢ㄤ簬鍥炲啓 parentId
-        Map<String, ProductStructure> tempEntityMap = new HashMap<>();
-
-        for (ProductStructureDto psDto : flatDtoList) {
-            ProductStructure entity = new ProductStructure();
-            BeanUtils.copyProperties(psDto, entity);
-            entity.setBomId(bomId);
-
-            if (psDto.getId() == null) {
-                // 鏂板
-                entity.setId(null);
-                entity.setParentId(null);
-                insertList.add(entity);
-                tempEntityMap.put(psDto.getTempId(), entity);
-            } else {
-                // 鏇存柊
-                updateList.add(entity);
-            }
-        }
-
-        //  鎻掑叆鏂拌妭鐐�
-        if (!insertList.isEmpty()) {
-            this.saveBatch(insertList);
-        }
-
-        //  鍥炲啓鏂板鑺傜偣 parentId
-        List<ProductStructure> parentFixList = new ArrayList<>();
-        //  鐪熷疄鐨勭埗鑺傜偣 ID
-        Long realParentId;
-        for (ProductStructureDto psDto : flatDtoList) {
-            if (psDto.getId() == null && psDto.getParentTempId() != null) {
-                ProductStructure child = tempEntityMap.get(psDto.getTempId());
-                if (tempEntityMap.containsKey(psDto.getParentTempId())) {
-                    // 鐖惰妭鐐规槸鏂拌妭鐐�
-                    realParentId = tempEntityMap.get(psDto.getParentTempId()).getId();
-                } else {
-                    // 鐖惰妭鐐规槸鑰佽妭鐐�
-                    realParentId = Long.valueOf(psDto.getParentTempId());
-                }
-
-                child.setParentId(realParentId);
-                parentFixList.add(child);
-            }
-        }
-
-        if (!parentFixList.isEmpty()) {
-            this.updateBatchById(parentFixList);
-        }
-
-        if (!updateList.isEmpty()) {
-            this.updateBatchById(updateList);
-        }
-
-        return true;
-    }
-
-    /**
-     * 灏嗗墠绔紶鍏ョ殑鏍戣繘琛屾墎骞冲寲
-     *
-     * @param source 鏁版嵁鏍�
-     * @param result 鎵佸钩鍖栨暟鎹�
-     */
-    private void flattenTree(List<ProductStructureDto> source, List<ProductStructureDto> result) {
-        if (source == null) {
-            return;
-        }
-        for (ProductStructureDto node : source) {
-            result.add(node);
-            flattenTree(node.getChildren(), result);
-        }
-    }
-
-
-    @Override
-    public List<ProductStructureDto> listBybomId(Integer bomId) {
-        List<ProductStructureDto> list = productStructureMapper.listBybomId(bomId);
-
-        Map<Long, ProductStructureDto> map = new HashMap<>();
-        for (ProductStructureDto node : list) {
-            node.setChildren(new ArrayList<>());
-            map.put(node.getId(), node);
-        }
-
-        List<ProductStructureDto> tree = new ArrayList<>();
-        for (ProductStructureDto node : list) {
-            Long parentId = node.getParentId();
-            if (parentId == null || parentId == 0) {
-                tree.add(node);
-            } else {
-                ProductStructureDto parent = map.get(parentId);
-                if (parent != null) {
-                    parent.getChildren().add(node);
-                }
-            }
-        }
-        return tree;
-    }
-
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderFileServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderFileServiceImpl.java
deleted file mode 100644
index b0391ea..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderFileServiceImpl.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.ruoyi.production.pojo.ProductWorkOrderFile;
-import com.ruoyi.production.mapper.ProductWorkOrderFileMapper;
-import com.ruoyi.production.service.ProductWorkOrderFileService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 鐢熶骇宸ュ崟闄勪欢琛� 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-01-23 03:28:32
- */
-@Service
-public class ProductWorkOrderFileServiceImpl extends ServiceImpl<ProductWorkOrderFileMapper, ProductWorkOrderFile> implements ProductWorkOrderFileService {
-
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
deleted file mode 100644
index 594d74c..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.deepoove.poi.XWPFTemplate;
-import com.deepoove.poi.config.Configure;
-import com.deepoove.poi.data.PictureRenderData;
-import com.deepoove.poi.data.Pictures;
-import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
-import com.ruoyi.common.utils.MatrixToImageWriter;
-import com.ruoyi.production.dto.ProductWorkOrderDto;
-import com.ruoyi.production.mapper.ProductWorkOrderFileMapper;
-import com.ruoyi.production.mapper.ProductWorkOrderMapper;
-import com.ruoyi.production.pojo.ProductWorkOrder;
-import com.ruoyi.production.pojo.ProductWorkOrderFile;
-import com.ruoyi.production.service.ProductWorkOrderService;
-import com.ruoyi.quality.pojo.QualityInspectParam;
-import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-@Transactional(rollbackFor = Exception.class)
-public class ProductWorkOrderServiceImpl extends ServiceImpl<ProductWorkOrderMapper, ProductWorkOrder> implements ProductWorkOrderService {
-
-    @Autowired
-    private ProductWorkOrderMapper productWorkOrdermapper;
-    @Autowired
-    private ProductWorkOrderFileMapper productWorkOrderFileMapper;
-
-    @Value("${file.temp-dir}")
-    private String tempDir;
-
-    @Override
-    public IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) {
-        return productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder);
-    }
-
-    @Override
-    public int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto) {
-        return productWorkOrdermapper.updateById(productWorkOrderDto);
-    }
-
-    @Override
-    public void down(HttpServletResponse response, ProductWorkOrder productWorkOrder) {
-        ProductWorkOrderDto productWorkOrderDto = productWorkOrdermapper.getProductWorkOrderFlowCard(productWorkOrder.getId());
-        String codePath;
-        try {
-            codePath = new MatrixToImageWriter().code(productWorkOrderDto.getId().toString(), tempDir);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        /*鑾峰彇闄勪欢鍥剧墖绫诲瀷*/
-        List<Map<String, Object>> images = new ArrayList<>();
-        List<ProductWorkOrderFile> productWorkOrderFiles = productWorkOrderFileMapper.selectList(Wrappers.<ProductWorkOrderFile>lambdaQuery().eq(ProductWorkOrderFile::getWorkOrderId, productWorkOrder.getId()));
-        if (CollectionUtils.isNotEmpty(productWorkOrderFiles)) {
-            productWorkOrderFiles.forEach(productWorkOrderFile -> {
-                Map<String, Object> image = new HashMap<>();
-                PictureRenderData pictureRenderData = Pictures.ofLocal( productWorkOrderFile.getUrl()).sizeInCm(17, 20).create();
-                image.put("url", pictureRenderData);
-                images.add(image);
-            });
-        }
-        InputStream inputStream = this.getClass().getResourceAsStream("/static/work-order-template.docx");
-        XWPFTemplate template = XWPFTemplate.compile(inputStream).render(
-                new HashMap<String, Object>() {{
-                    put("process", productWorkOrderDto.getProcessName());
-                    put("workOrderNo", productWorkOrderDto.getWorkOrderNo());
-                    put("productOrderNpsNo", productWorkOrderDto.getProductOrderNpsNo());
-                    put("productName", productWorkOrderDto.getProductName());
-                    put("planQuantity", productWorkOrderDto.getPlanQuantity());
-                    put("model", productWorkOrderDto.getModel());
-                    put("completeQuantity", productWorkOrderDto.getCompleteQuantity());
-                    put("scrapQty", productWorkOrderDto.getScrapQty());
-                    put("planStartTime", productWorkOrderDto.getPlanStartTime());
-                    put("planEndTime", productWorkOrderDto.getPlanEndTime());
-                    put("actualStartTime", productWorkOrderDto.getActualStartTime());
-                    put("actualEndTime", productWorkOrderDto.getActualEndTime());
-                    put("twoCode", Pictures.ofLocal(codePath).create());
-                    put("images", images.isEmpty()?null:images);
-                }});
-
-        try {
-            response.setContentType("application/msword");
-            String fileName = URLEncoder.encode(
-                    "娴佽浆鍗�", "UTF-8");
-            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
-            response.setHeader("Content-disposition",
-                    "attachment;filename=" + fileName + ".docx");
-            OutputStream os = response.getOutputStream();
-            template.write(os);
-            os.flush();
-            os.close();
-            inputStream.close();
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("瀵煎嚭澶辫触");
-        }
-    }
-
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
new file mode 100644
index 0000000..e8e3126
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionAccountMapper;
+import com.ruoyi.production.pojo.ProductionAccount;
+import com.ruoyi.production.service.ProductionAccountService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇鏍哥畻琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionAccountServiceImpl extends ServiceImpl<ProductionAccountMapper, ProductionAccount> implements ProductionAccountService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java
new file mode 100644
index 0000000..5340433
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionBomStructureMapper;
+import com.ruoyi.production.pojo.ProductionBomStructure;
+import com.ruoyi.production.service.ProductionBomStructureService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟BOM浜у搧缁撴瀯 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionBomStructureServiceImpl extends ServiceImpl<ProductionBomStructureMapper, ProductionBomStructure> implements ProductionBomStructureService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOperationMainParamServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOperationMainParamServiceImpl.java
new file mode 100644
index 0000000..1f0abf7
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOperationMainParamServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOperationMainParamMapper;
+import com.ruoyi.production.pojo.ProductionOperationMainParam;
+import com.ruoyi.production.service.ProductionOperationMainParamService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟鎶ュ伐鍙傛暟琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOperationMainParamServiceImpl extends ServiceImpl<ProductionOperationMainParamMapper, ProductionOperationMainParam> implements ProductionOperationMainParamService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
new file mode 100644
index 0000000..ee245d6
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
+import com.ruoyi.production.pojo.ProductionOperationTask;
+import com.ruoyi.production.service.ProductionOperationTaskService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇宸ュ崟琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOperationTaskServiceImpl extends ServiceImpl<ProductionOperationTaskMapper, ProductionOperationTask> implements ProductionOperationTaskService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderBomServiceImpl.java
new file mode 100644
index 0000000..800e987
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderBomServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOrderBomMapper;
+import com.ruoyi.production.pojo.ProductionOrderBom;
+import com.ruoyi.production.service.ProductionOrderBomService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟BOM 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOrderBomServiceImpl extends ServiceImpl<ProductionOrderBomMapper, ProductionOrderBom> implements ProductionOrderBomService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickRecordServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickRecordServiceImpl.java
new file mode 100644
index 0000000..e852999
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOrderPickRecordMapper;
+import com.ruoyi.production.pojo.ProductionOrderPickRecord;
+import com.ruoyi.production.service.ProductionOrderPickRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 绾胯竟浠撳嚭鍏ュ簱璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOrderPickRecordServiceImpl extends ServiceImpl<ProductionOrderPickRecordMapper, ProductionOrderPickRecord> implements ProductionOrderPickRecordService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
new file mode 100644
index 0000000..b4e3826
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOrderPickMapper;
+import com.ruoyi.production.pojo.ProductionOrderPick;
+import com.ruoyi.production.service.ProductionOrderPickService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁㈠崟棰嗘枡绾胯竟浠� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOrderPickServiceImpl extends ServiceImpl<ProductionOrderPickMapper, ProductionOrderPick> implements ProductionOrderPickService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java
new file mode 100644
index 0000000..d6eab7c
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOrderRoutingOperationParamMapper;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam;
+import com.ruoyi.production.service.ProductionOrderRoutingOperationParamService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOrderRoutingOperationParamServiceImpl extends ServiceImpl<ProductionOrderRoutingOperationParamMapper, ProductionOrderRoutingOperationParam> implements ProductionOrderRoutingOperationParamService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationServiceImpl.java
new file mode 100644
index 0000000..90b1ba1
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
+import com.ruoyi.production.service.ProductionOrderRoutingOperationService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOrderRoutingOperationServiceImpl extends ServiceImpl<ProductionOrderRoutingOperationMapper, ProductionOrderRoutingOperation> implements ProductionOrderRoutingOperationService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingServiceImpl.java
new file mode 100644
index 0000000..393ebe0
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOrderRoutingMapper;
+import com.ruoyi.production.pojo.ProductionOrderRouting;
+import com.ruoyi.production.service.ProductionOrderRoutingService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟宸ヨ壓璺嚎琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOrderRoutingServiceImpl extends ServiceImpl<ProductionOrderRoutingMapper, ProductionOrderRouting> implements ProductionOrderRoutingService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
new file mode 100644
index 0000000..6b1bc0c
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProductionOrderMapper;
+import com.ruoyi.production.pojo.ProductionOrder;
+import com.ruoyi.production.service.ProductionOrderService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
+@Service
+public class ProductionOrderServiceImpl extends ServiceImpl<ProductionOrderMapper, ProductionOrder> implements ProductionOrderService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
new file mode 100644
index 0000000..852bfca
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
@@ -0,0 +1,558 @@
+//package com.ruoyi.production.service.impl;
+//
+//import com.alibaba.fastjson2.JSONArray;
+//import com.alibaba.fastjson2.JSONObject;
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.ruoyi.common.exception.ServiceException;
+//import com.ruoyi.common.exception.base.BaseException;
+//import com.ruoyi.common.utils.StringUtils;
+//import com.ruoyi.common.utils.bean.BeanUtils;
+//import com.ruoyi.common.utils.poi.ExcelUtil;
+//import com.ruoyi.production.bean.dto.ProductionPlanDto;
+//import com.ruoyi.production.bean.dto.ProductionPlanImportDto;
+//import com.ruoyi.production.bean.vo.ProductionPlanVo;
+//import com.ruoyi.production.mapper.ProductionPlanMapper;
+//import com.ruoyi.production.pojo.ProductionPlan;
+//import com.ruoyi.production.service.ProductionPlanService;
+//import lombok.RequiredArgsConstructor;
+//import org.springframework.stereotype.Service;
+//import org.springframework.transaction.annotation.Transactional;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import javax.servlet.http.HttpServletResponse;
+//import java.math.BigDecimal;
+//import java.time.Instant;
+//import java.time.LocalDateTime;
+//import java.time.ZoneId;
+//import java.util.*;
+//import java.util.concurrent.locks.ReentrantLock;
+//import java.util.stream.Collectors;
+//
+///**
+// * <p>
+// * 鐢熶骇璁″垝琛� 鏈嶅姟瀹炵幇绫�
+// * </p>
+// *
+// * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+// * @since 2026-04-21 02:11:10
+// */
+//@Service
+//@RequiredArgsConstructor
+//public class ProductionPlanServiceImpl extends ServiceImpl<ProductionPlanMapper, ProductionPlan> implements ProductionPlanService {
+//
+//    private ProductionPlanMapper productionPlanMapper;
+//
+//
+//    /**
+//     * 鍚屾閿侊紝纭繚鎵嬪姩鍜屽畾鏃朵换鍔′笉鍚屾椂鎵ц
+//     */
+//    private final ReentrantLock syncLock = new ReentrantLock();
+//
+//    @Override
+//    public IPage<ProductionPlanVo> listPage(Page<ProductionPlanDto> page, ProductionPlanDto productionPlanDto) {
+//
+//        return productionPlanMapper.selectPage(page, null);
+//    }
+//
+//    /**
+//     * 椤甸潰鎵嬪姩鍚屾
+//     */
+//    @Override
+//    public void loadProdData() {
+//        syncProdData(1);
+//    }
+//
+//    /**
+//     * 瀹氭椂浠诲姟鍚屾
+//     */
+//    @Override
+//    public void syncProdDataJob() {
+//        syncProdData(2);
+//    }
+//
+//    /**
+//     * 鍚堝苟鐢熶骇璁″垝
+//     */
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public boolean combine(ProductionPlanDto productionPlanDto) {
+//        if (productionPlanDto.getIds() == null || productionPlanDto.getIds().isEmpty()) {
+//            return false;
+//        }
+//
+//        //  鏌ヨ涓荤敓浜ц鍒�
+//        List<ProductionPlanDto> plans = productionPlanMapper.selectWithMaterialByIds(productionPlanDto.getIds());
+//
+//        if (plans == null || plans.isEmpty()) {
+//            throw new ServiceException("涓嬪彂澶辫触,鐢熶骇璁″垝涓嶅瓨鍦�");
+//        }
+//
+//        //  鏍¢獙鏄惁瀛樺湪涓嶅悓鐨勪骇鍝佸悕绉�
+//        String firstProductName = plans.get(0).getProductName();
+//        if (plans.stream().anyMatch(p -> p.getProductName() == null || !p.getProductName().equals(firstProductName))) {
+//            throw new BaseException("鍚堝苟澶辫触锛屽瓨鍦ㄤ笉鍚岀殑浜у搧鍚嶇О");
+//        }
+//
+//        // 鏍¢獙鏄惁瀛樺湪涓嶅悓鐨勪骇鍝佽鏍�
+//        String firstProductSpec = plans.get(0).getModel();
+//        if (plans.stream().anyMatch(p -> p.getModel() == null || !p.getModel().equals(firstProductSpec))) {
+//            throw new BaseException("鍚堝苟澶辫触锛屽瓨鍦ㄤ笉鍚岀殑浜у搧瑙勬牸");
+//        }
+//
+//        // 鍙犲姞鍓╀綑鏂规暟
+//        BigDecimal totalRemainingVolume = plans.stream()
+//                .map(ProductionPlan::getRemainingVolume)
+//                .filter(Objects::nonNull)
+//                .reduce(BigDecimal.ZERO, BigDecimal::add);
+//        // 鍒ゆ柇涓嬪彂鏁伴噺鏄惁澶т簬绛変簬鍓╀綑鏂规暟
+//        if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalRemainingVolume) > 0) {
+//            throw new BaseException("鎿嶄綔澶辫触锛屼笅鍙戞暟閲忎笉鑳藉ぇ浜庡墿浣欐柟鏁�");
+//        }
+//
+//        // 鍒涘缓鐢熶骇璁㈠崟
+//        ProductOrder productOrder = new ProductOrder();
+//        productOrder.setQuantity(productionPlanDto.getTotalAssignedQuantity());
+//        productOrder.setPlanCompleteTime(productionPlanDto.getPlanCompleteTime());
+//        productOrder.setStatus(ProductOrderStatusEnum.WAIT.getCode());
+//        productOrder.setStrength(productionPlanDto.getStrength());
+//        productOrder.setProductMaterialSkuId(plans.get(0).getProductMaterialSkuId());
+//
+//        Long orderId = productOrderService.insertProductOrder(productOrder);
+//
+//        //  褰撲笅鍙戠殑浜у搧涓虹爩鍧楁垨鏉挎潗锛屽氨鎷夊彇BOM瀛愰泦涓庡伐鑹鸿矾绾垮瓙闆嗘暟鎹瓨鍏ュ埌闄勮〃涓�
+//        if ("鐮屽潡".equals(productionPlanDto.getProductName())) {
+//            productOrder.setRouteId(productionOrderAppendixService.populateBlocks(orderId, productionPlanDto));
+//        }
+//        if ("鏉挎潗".equals(productionPlanDto.getProductName())) {
+//            productOrder.setRouteId(productionOrderAppendixService.populatePlates(orderId, productionPlanDto));
+//        }
+//        //  鏇存柊缁戝畾鐨勫伐鑹鸿矾绾�
+//        productOrderService.updateById(productOrder);
+//
+//        // 鏍规嵁涓嬪彂鏁伴噺锛屼粠绗竴涓敓浜ц鍒掑紑濮嬪垎閰嶆柟鏁�
+//        BigDecimal assignedVolume = BigDecimal.ZERO;
+//        for (ProductionPlan plan : plans) {
+//            BigDecimal volume = plan.getVolume();
+//            if (volume == null) {
+//                continue;
+//            }
+//            // 璁$畻鍓╀綑鏂规暟
+//            BigDecimal remainingVolume = plan.getRemainingVolume();
+//            if (remainingVolume.compareTo(BigDecimal.ZERO) <= 0) {
+//                continue;
+//            }
+//
+//            ProductOrderPlan productOrderPlan = new ProductOrderPlan();
+//            productOrderPlan.setProductOrderId(productOrder.getId());
+//            productOrderPlan.setProductionPlanId(plan.getId());
+//
+//            if (assignedVolume.add(remainingVolume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) {
+//                // 鏈�鍚庝竴涓鍒掞紝鍒嗛厤鍓╀綑鏂规暟
+//                BigDecimal lastRemainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume);
+//                BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO).add(lastRemainingVolume);
+//                plan.setAssignedQuantity(assignedQuantity);
+//                plan.setStatus(assignedQuantity.compareTo(plan.getVolume()) >= 0 ? 2 : 1);
+//                productOrderPlan.setAssignedQuantity(lastRemainingVolume);
+//                productionPlanMapper.updateById(plan);
+//                productOrderPlanMapper.insert(productOrderPlan);
+//                break;
+//            }
+//
+//            // 鍒嗛厤褰撳墠璁″垝鏂规暟
+//            BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO).add(remainingVolume);
+//            plan.setAssignedQuantity(assignedQuantity);
+//            plan.setStatus(assignedQuantity.compareTo(plan.getVolume()) >= 0 ? 2 : 1);
+//            productOrderPlan.setAssignedQuantity(remainingVolume);
+//            // 鏇存柊鐢熶骇璁″垝
+//            productionPlanMapper.updateById(plan);
+//            // 鍒涘缓鍏宠仈鍏崇郴
+//            productOrderPlanMapper.insert(productOrderPlan);
+//            assignedVolume = assignedVolume.add(remainingVolume);
+//        }
+//
+//        for (ProductionPlan plan : plans) {
+//            BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO);
+//            BigDecimal volume = Optional.ofNullable(plan.getVolume()).orElse(BigDecimal.ZERO);
+//            if (assignedQuantity.compareTo(BigDecimal.ZERO) <= 0) {
+//                plan.setStatus(0);
+//            } else if (assignedQuantity.compareTo(volume) >= 0) {
+//                plan.setStatus(2);
+//            } else {
+//                plan.setStatus(1);
+//            }
+//            productionPlanMapper.updateById(plan);
+//        }
+//        return true;
+//    }
+//
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public boolean add(ProductionPlanDto productionPlanDto) {
+//        if (StringUtils.isEmpty(productionPlanDto.getApplyNo())) {
+//            throw new ServiceException("鏂板澶辫触锛岀敵璇峰崟缂栧彿涓嶈兘涓虹┖");
+//        }
+//        Long count = productionPlanMapper.selectCount(Wrappers.<ProductionPlan>lambdaQuery()
+//                .eq(ProductionPlan::getApplyNo, productionPlanDto.getApplyNo()));
+//        if (count > 0) {
+//            throw new ServiceException("鏂板澶辫触锛岀敵璇峰崟缂栧彿 " + productionPlanDto.getApplyNo() + " 宸插瓨鍦�");
+//        }
+//        productionPlanDto.setDataSourceType(DataSourceTypeEnum.MANUAL.getCode());
+//        productionPlanDto.setStatus(0);
+//        productionPlanMapper.insert(productionPlanDto);
+//        return true;
+//    }
+//
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public boolean update(ProductionPlanDto productionPlanDto) {
+//        if (productionPlanDto == null || productionPlanDto.getId() == null) {
+//            throw new ServiceException("缂栬緫澶辫触,鏁版嵁涓嶈兘涓虹┖");
+//        }
+//        ProductionPlan productionPlan = getById(productionPlanDto.getId());
+//        if (productionPlan == null) {
+//            throw new ServiceException("缂栬緫澶辫触,涓荤敓浜ц鍒掍笉瀛樺湪");
+//        }
+//
+//        if (StringUtils.isNotEmpty(productionPlanDto.getApplyNo())
+//                && !productionPlanDto.getApplyNo().equals(productionPlan.getApplyNo())) {
+//
+//            Long count = productionPlanMapper.selectCount(Wrappers.<ProductionPlan>lambdaQuery()
+//                    .eq(ProductionPlan::getApplyNo, productionPlanDto.getApplyNo())
+//                    .ne(ProductionPlan::getId, productionPlanDto.getId())); // 鎺掗櫎鑷韩
+//
+//            if (count > 0) {
+//                throw new ServiceException("缂栬緫澶辫触锛岀敵璇峰崟缂栧彿 " + productionPlanDto.getApplyNo() + " 宸茶鍗犵敤");
+//            }
+//        }
+//        // 宸蹭笅鍙戠姸鎬侊紝涓嶈兘缂栬緫
+//        if (productionPlan.getStatus() != 0) {
+//            throw new BaseException("缂栬緫澶辫触,璇ョ敓浜ц鍒掑凡涓嬪彂鎴栭儴鍒嗕笅鍙戠姸鎬�,绂佹缂栬緫");
+//        }
+//
+//        // 鏌ヨ鏄惁鏈夊叧鑱旇鍗�
+//        boolean hasProductOrderPlan = productOrderPlanMapper.selectList(Wrappers.<ProductOrderPlan>lambdaQuery()
+//                        .eq(ProductOrderPlan::getProductionPlanId, productionPlanDto.getId()))
+//                .stream().anyMatch(p -> p.getProductOrderId() != null);
+//
+//        if (hasProductOrderPlan) {
+//            if (productionPlanDto.getVolume().compareTo(productionPlan.getVolume()) < 0) {
+//                throw new BaseException("鏂规暟涓嶈兘閫掑噺");
+//            }
+//        }
+//
+//        return productionPlanMapper.updateById(productionPlanDto) > 0;
+//    }
+//
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public boolean delete(List<Long> ids) {
+//        // 濡傛灉瀛樺湪宸蹭笅鍙戠殑璁″垝锛屽垯涓嶈兘鍒犻櫎
+//        if (productionPlanMapper.selectList(Wrappers.<ProductionPlan>lambdaQuery().in(ProductionPlan::getId, ids)).stream().anyMatch(p -> p.getStatus() == 1 || p.getStatus() == 2)) {
+//            throw new BaseException("鍒犻櫎澶辫触锛屽瓨鍦ㄥ凡涓嬪彂鎴栭儴鍒嗕笅鍙戠殑璁″垝");
+//        }
+//        // 濡傛灉鏈夊叧鑱旇鍗曪紝鍒欎笉鑳藉垹闄�
+//        if (productOrderPlanMapper.selectList(Wrappers.<ProductOrderPlan>lambdaQuery().in(ProductOrderPlan::getProductionPlanId, ids)).stream().anyMatch(p -> p.getProductOrderId() != null)) {
+//            throw new BaseException("鍒犻櫎澶辫触锛屽瓨鍦ㄥ叧鑱旇鍗�");
+//        }
+//
+//        return productionPlanMapper.deleteBatchIds(ids) > 0;
+//    }
+//
+//    /**
+//     * 鍚屾鏁版嵁
+//     */
+//    @Transactional(rollbackFor = Exception.class)
+//    public void syncProdData(Integer dataSyncType) {
+//        if (!syncLock.tryLock()) {
+//            log.warn("鍚屾姝e湪杩涜涓紝鏈 {} 鍚屾璇锋眰琚烦杩�", dataSyncType == 1 ? "鎵嬪姩鍚屾" : "瀹氭椂浠诲姟鍚屾");
+//            return;
+//        }
+//
+//        try {
+//            JSONArray searchConditions = new JSONArray();
+//            JSONObject condition = new JSONObject();
+//            condition.put("key", "processApprovedResult");
+//            JSONArray valueArray = new JSONArray();
+//            valueArray.add("agree");
+//
+//            condition.put("value", valueArray);
+//            condition.put("type", "ARRAY");
+//            condition.put("operator", "in");
+//            condition.put("componentName", "SelectField");
+//            searchConditions.add(condition);
+//
+//            String searchFieldJson = searchConditions.toJSONString();
+//
+//            JSONArray dataArr = AliDingUtils.getFormDataList(aliDingConfig, aliDingConfig.getProducePlanFormUuid(), searchFieldJson, this, ProductionPlan::getFormModifiedTime);
+//
+//            if (dataArr.isEmpty()) {
+//                log.info("娌℃湁鏇村鏂版暟鎹渶瑕佸悓姝�");
+//                return;
+//            }
+//
+//            //  瑙f瀽骞朵繚瀛樻暟鎹�
+//            List<ProductionPlan> list = parseProductionPlans(dataArr, dataSyncType, dataArr.size());
+//            if (!list.isEmpty()) {
+//                //  澶勭悊鏇存柊鎴栨柊澧�
+//                int affected = processSaveOrUpdate(list);
+//                log.info("鏁版嵁鍚屾瀹屾垚锛屽叡鍚屾 {} 鏉℃暟鎹�", affected);
+//            }
+//
+//        } catch (Exception e) {
+//            log.error("鍚屾鐢熶骇璁″垝寮傚父", e);
+//        } finally {
+//            // 閲婃斁閿�
+//            syncLock.unlock();
+//        }
+//    }
+//
+//    private List<ProductionPlan> parseProductionPlans(JSONArray dataArr, Integer dataSyncType, Integer totalCount) {
+//        List<ProductionPlan> list = new ArrayList<>();
+//        LocalDateTime now = LocalDateTime.now();
+//
+//        for (int i = 0; i < dataArr.size(); i++) {
+//            JSONObject item = dataArr.getJSONObject(i);
+//            String formInstanceId = item.getString("formInstanceId");
+//            String serialNo = item.getString("serialNo");
+//
+//            JSONObject originator = item.getJSONObject("originator");
+//            String originatorName = originator != null && originator.containsKey("userName")
+//                    ? originator.getJSONObject("userName").getString("nameInChinese") : "鏈煡";
+//
+//            JSONObject formData = item.getJSONObject("formData");
+//            JSONArray tableArr = formData.getJSONArray("tableField_l7fytfcn");
+//            if (tableArr == null || tableArr.isEmpty()) {
+//                continue;
+//            }
+//
+//            for (int j = 0; j < tableArr.size(); j++) {
+//                JSONObject row = tableArr.getJSONObject(j);
+//                ProductionPlan plan = new ProductionPlan();
+//
+//                plan.setFormInstanceId(formInstanceId);
+//                plan.setSerialNo(serialNo);
+//                plan.setApplyNo(formData.getString("textField_l7fytfco"));
+//                plan.setCustomerName(formData.getString("textField_lbkozohg"));
+//
+//                String materialCode = row.getString("textField_l9xo62q5");
+//                // 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡淇℃伅琛紝鍏宠仈鐗╂枡ID
+//                if (StringUtils.isNotEmpty(materialCode)) {
+//                    LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
+//                    skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, materialCode);
+//                    ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
+//                    if (sku != null) {
+//                        plan.setProductMaterialSkuId(sku.getId());
+//                    }
+//                }
+//
+//                plan.setLength(row.getInteger("numberField_lb7lgatg_value"));
+//                plan.setWidth(row.getInteger("numberField_lb7lgath_value"));
+//                plan.setHeight(row.getInteger("numberField_lb7lgati_value"));
+//                plan.setQuantity(row.getInteger("numberField_lb7lgatj_value"));
+//                plan.setVolume(row.getBigDecimal("numberField_l7fytfd3_value"));
+//                plan.setStrength(row.getString("radioField_m9urarr2_id"));
+//
+//                JSONArray dateArr = row.getJSONArray("cascadeDateField_lfxqqluw");
+//                if (dateArr != null && dateArr.size() == 2) {
+//                    try {
+//                        long start = Long.parseLong(dateArr.getString(0));
+//                        long end = Long.parseLong(dateArr.getString(1));
+//
+//                        Date startDate = Date.from(Instant.ofEpochMilli(start)
+//                                .atZone(ZoneId.systemDefault())
+//                                .toLocalDate()
+//                                .atStartOfDay(ZoneId.systemDefault())
+//                                .toInstant());
+//                        Date endDate = Date.from(Instant.ofEpochMilli(end)
+//                                .atZone(ZoneId.systemDefault())
+//                                .toLocalDate()
+//                                .atStartOfDay(ZoneId.systemDefault())
+//                                .toInstant());
+//
+//                        plan.setStartDate(startDate);
+//                        plan.setEndDate(endDate);
+//                    } catch (Exception e) {
+//                        log.warn("瑙f瀽鏃ユ湡澶辫触: {}", dateArr);
+//                    }
+//                }
+//
+//                plan.setSubmitter(originatorName);
+//                plan.setSubmitOrg("瀹佸涓垱缁胯兘瀹炰笟闆嗗洟鏈夐檺鍏徃");
+//                plan.setRemarkOne(formData.getString("textareaField_l7fytfcy"));
+//                plan.setRemarkTwo(formData.getString("textField_l7fytfcx"));
+//                plan.setCreatorName(originatorName);
+//
+//                JSONObject modifyUser = item.getJSONObject("modifyUser");
+//                if (modifyUser != null && modifyUser.containsKey("userName")) {
+//                    plan.setModifierName(modifyUser.getJSONObject("userName").getString("nameInChinese"));
+//                }
+//
+//                plan.setFormCreatedTime(AliDingUtils.parseUtcTime(item.getString("createdTimeGMT")));
+//                plan.setFormModifiedTime(AliDingUtils.parseUtcTime(item.getString("modifiedTimeGMT")));
+//                plan.setDataSourceType(DataSourceTypeEnum.DING_TALK.getCode());
+//                plan.setCreateTime(now);
+//                plan.setUpdateTime(now);
+//                plan.setTotalCount(totalCount);
+//
+//                list.add(plan);
+//            }
+//        }
+//        return list;
+//    }
+//
+//    private int processSaveOrUpdate(List<ProductionPlan> list) {
+//        if (list == null || list.isEmpty()) {
+//            return 0;
+//        }
+//        int affected = 0;
+//
+//        //  鍘婚噸 formInstanceId
+//        Set<String> formIds = list.stream()
+//                .map(ProductionPlan::getFormInstanceId)
+//                .collect(Collectors.toSet());
+//
+//        //  鏌ヨ鏁版嵁搴撳凡鏈夋暟鎹�
+//        List<ProductionPlan> existList = this.list(new LambdaQueryWrapper<ProductionPlan>().in(ProductionPlan::getFormInstanceId, formIds));
+//
+//        //  Map (formInstanceId + materialCode)
+//        Map<String, ProductionPlan> existMap = new HashMap<>();
+//        for (ProductionPlan p : existList) {
+//            String key = p.getFormInstanceId() + "_" + p.getProductMaterialSkuId();
+//            existMap.put(key, p);
+//        }
+//
+//        //  閬嶅巻鍚屾鏁版嵁
+//        for (ProductionPlan plan : list) {
+//            String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialSkuId();
+//            ProductionPlan exist = existMap.get(key);
+//            if (exist == null) {
+//                // 鏂板
+//                this.save(plan);
+//                affected++;
+//                log.info("鏂板鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId());
+//            } else {
+//                // 鍒ゆ柇鏄惁闇�瑕佹洿鏂�
+//                if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(plan.getFormModifiedTime())) {
+//                    plan.setId(exist.getId());
+//                    plan.setCreateTime(exist.getCreateTime());
+//                    this.updateById(plan);
+//                    affected++;
+//                    log.info("鏇存柊鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId());
+//                }
+//            }
+//        }
+//        return affected;
+//    }
+//
+//    @Override
+//    public List<ProductionPlanSummaryDto> summaryByProductType(ProductionPlanSummaryDto query) {
+//        return baseMapper.selectSummaryByProductType(query);
+//    }
+//
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public void importProdData(MultipartFile file) {
+//        if (file == null || file.isEmpty()) {
+//            throw new ServiceException("瀵煎叆鏁版嵁涓嶈兘涓虹┖");
+//        }
+//        ExcelUtil<ProductionPlanImportDto> excelUtil = new ExcelUtil<>(ProductionPlanImportDto.class);
+//        List<ProductionPlanImportDto> list;
+//        try {
+//            list = excelUtil.importExcel(file.getInputStream());
+//        } catch (Exception e) {
+//            log.error("鐢熶骇闇�姹侲xcel瀵煎叆澶辫触", e);
+//            throw new ServiceException("Excel瑙f瀽澶辫触");
+//        }
+//
+//        if (list == null || list.isEmpty()) {
+//            throw new ServiceException("Excel娌℃湁鏁版嵁");
+//        }
+//
+//        Set<String> applyNos = new HashSet<>();
+//        Set<String> materialCodes = new HashSet<>();
+//        for (int i = 0; i < list.size(); i++) {
+//            ProductionPlanImportDto dto = list.get(i);
+//            String applyNo = dto.getApplyNo();
+//            String materialCode = dto.getMaterialCode();
+//
+//            if (StringUtils.isEmpty(applyNo)) {
+//                throw new ServiceException("瀵煎叆澶辫触锛氱 " + (i + 2) + " 琛岀敵璇峰崟缂栧彿涓嶈兘涓虹┖");
+//            }
+//            if (!applyNos.add(applyNo)) {
+//                throw new ServiceException("瀵煎叆澶辫触锛欵xcel 涓瓨鍦ㄩ噸澶嶇殑鐢宠鍗曠紪鍙�: " + applyNo);
+//            }
+//            if (StringUtils.isEmpty(materialCode)) {
+//                throw new ServiceException("瀵煎叆澶辫触锛氱 " + (i + 2) + " 琛岀墿鏂欑紪鐮佷笉鑳戒负绌�");
+//            }
+//
+//            String strength = dto.getStrength();
+//            if (StringUtils.isNotEmpty(strength)) {
+//                if (!"A3.5".equals(strength) && !"A5.0".equals(strength)) {
+//                    throw new ServiceException("瀵煎叆澶辫触锛氱 " + (i + 2) + " 琛屽己搴﹀彧鑳芥槸 A3.5 鎴� A5.0");
+//                }
+//            }
+//
+//            materialCodes.add(materialCode);
+//        }
+//
+//        //  鐢宠鍗曠紪鍙锋槸鍚﹀凡瀛樺湪
+//        Long existApplyNoCount = baseMapper.selectCount(Wrappers.<ProductionPlan>lambdaQuery()
+//                .in(ProductionPlan::getApplyNo, applyNos));
+//        if (existApplyNoCount > 0) {
+//            List<String> existApplyNos = baseMapper.selectList(Wrappers.<ProductionPlan>lambdaQuery()
+//                            .in(ProductionPlan::getApplyNo, applyNos))
+//                    .stream().map(ProductionPlan::getApplyNo).collect(Collectors.toList());
+//            throw new ServiceException("瀵煎叆澶辫触锛岀敵璇峰崟缂栧彿宸插瓨鍦�: " + String.join(", ", existApplyNos));
+//        }
+//
+//        Map<String, Long> skuMap = productMaterialSkuService.list(Wrappers.<ProductMaterialSku>lambdaQuery()
+//                        .in(ProductMaterialSku::getMaterialCode, materialCodes))
+//                .stream().collect(Collectors.toMap(ProductMaterialSku::getMaterialCode, ProductMaterialSku::getId, (k1, k2) -> k1));
+//
+//        List<String> missingCodes = materialCodes.stream()
+//                .filter(code -> !skuMap.containsKey(code))
+//                .collect(Collectors.toList());
+//        if (!missingCodes.isEmpty()) {
+//            throw new ServiceException("瀵煎叆澶辫触锛屼互涓嬬墿鏂欑紪鐮佷笉瀛樺湪: " + String.join(", ", missingCodes));
+//        }
+//
+//        LocalDateTime now = LocalDateTime.now();
+//        List<ProductionPlan> entityList = list.stream().map(dto -> {
+//            ProductionPlan entity = new ProductionPlan();
+//            BeanUtils.copyProperties(dto, entity);
+//            entity.setProductMaterialSkuId(skuMap.get(dto.getMaterialCode()));
+//            entity.setAssignedQuantity(BigDecimal.ZERO);
+//            entity.setDataSourceType(DataSourceTypeEnum.MANUAL.getCode());
+//            entity.setStatus(0);
+//            entity.setCreateTime(now);
+//            entity.setUpdateTime(now);
+//            return entity;
+//        }).collect(Collectors.toList());
+//
+//        this.saveBatch(entityList);
+//    }
+//
+//    @Override
+//    public void exportProdData(HttpServletResponse response, List<Long> ids) {
+//        List<ProductionPlan> list;
+//        if (ids != null && !ids.isEmpty()) {
+//            list = baseMapper.selectBatchIds(ids);
+//        } else {
+//            list = baseMapper.selectList(null);
+//        }
+//
+//        List<ProductionPlanImportDto> exportList = new ArrayList<>();
+//        for (ProductionPlan entity : list) {
+//            ProductionPlanImportDto dto = new ProductionPlanImportDto();
+//            BeanUtils.copyProperties(entity, dto);
+//            exportList.add(dto);
+//        }
+//        ExcelUtil<ProductionPlanImportDto> util = new ExcelUtil<>(ProductionPlanImportDto.class);
+//        util.exportExcel(response, exportList, "閿�鍞敓浜ч渶姹傛暟鎹�");
+//    }
+//
+//}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
index 49765c0..252e408 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
@@ -1,24 +1,20 @@
 package com.ruoyi.production.service.impl;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.production.dto.ProductionProductInputDto;
 import com.ruoyi.production.mapper.ProductionProductInputMapper;
 import com.ruoyi.production.pojo.ProductionProductInput;
 import com.ruoyi.production.service.ProductionProductInputService;
-import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐鎶曞叆琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @Service
-@AllArgsConstructor
 public class ProductionProductInputServiceImpl extends ServiceImpl<ProductionProductInputMapper, ProductionProductInput> implements ProductionProductInputService {
-    @Autowired
-    private ProductionProductInputMapper productionProductInputMapper;
 
-    @Override
-    public IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto) {
-        return productionProductInputMapper.listPageProductionProductInputDto(page, productionProductInputDto);
-    }
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index fa34114..9ec1e06 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -1,348 +1,20 @@
 package com.ruoyi.production.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.mapper.ProductMapper;
-import com.ruoyi.basic.mapper.ProductModelMapper;
-import com.ruoyi.basic.pojo.Product;
-import com.ruoyi.basic.pojo.ProductModel;
-import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
-import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.bean.BeanUtils;
-import com.ruoyi.procurementrecord.utils.StockUtils;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.dto.ProductionProductMainDto;
-import com.ruoyi.production.mapper.*;
-import com.ruoyi.production.pojo.*;
-import com.ruoyi.production.service.ProductionProductMainService;
-import com.ruoyi.project.system.domain.SysUser;
-import com.ruoyi.project.system.mapper.SysUserMapper;
-import com.ruoyi.quality.mapper.*;
-import com.ruoyi.quality.pojo.*;
-import com.ruoyi.quality.service.IQualityInspectService;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.ProductionProductMain;
+import com.ruoyi.production.service.ProductionProductMainService;
+import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @Service
-@AllArgsConstructor
-@Transactional(rollbackFor = Exception.class)
 public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
 
-    private IQualityInspectService qualityInspectService;
-    private ProductionProductMainMapper productionProductMainMapper;
-
-
-    private ProductWorkOrderMapper productWorkOrderMapper;
-
-    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
-    private SysUserMapper userMapper;
-
-    private ProductionProductOutputMapper productionProductOutputMapper;
-
-
-    private ProductModelMapper productModelMapper;
-
-    private QualityInspectMapper qualityInspectMapper;
-    private QualityUnqualifiedMapper qualityUnqualifiedMapper;
-
-    private ProductProcessMapper productProcessMapper;
-    private ProductProcessRouteMapper productProcessRouteMapper;
-
-    private ProductMapper productMapper;
-
-
-    private QualityTestStandardParamMapper qualityTestStandardParamMapper;
-    private QualityTestStandardMapper qualityTestStandardMapper;
-
-    private QualityInspectParamMapper qualityInspectParamMapper;
-
-    private ProductStructureMapper productStructureMapper;
-
-    private ProductionProductInputMapper productionProductInputMapper;
-
-    private ProductOrderMapper productOrderMapper;
-
-    private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
-
-    private StockUtils stockUtils;
-
-
-    @Override
-    public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) {
-        return productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto);
-    }
-
-    @Override
-    public Boolean addProductMain(ProductionProductMainDto dto) {
-        SysUser user = userMapper.selectUserById(dto.getUserId());
-        ProductionProductMain productionProductMain = new ProductionProductMain();
-        //褰撳墠宸ヨ壓璺嚎瀵瑰簲鐨勫伐搴忚鎯�
-        ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId());
-        if (productProcessRouteItem == null) {
-            throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
-        }
-        //褰撳墠鍏蜂綋宸ュ簭
-        ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
-        //宸ヨ壓璺嚎涓綋鍓嶅伐搴忓搴旂殑浜у嚭瑙勬牸鍨嬪彿
-        ProductModel productModel = productModelMapper.selectById(productProcessRouteItem.getProductModelId());
-        //鏌ヨ璇ョ敓浜ц鍗曞搴旂殑bom
-        ProductProcessRoute productProcessRoute = productProcessRouteMapper.selectById(productProcessRouteItem.getProductRouteId());
-        /*鏂板鎶ュ伐涓昏〃*/
-        //鏌ヨ鏈�澶ф姤宸ョ紪鍙�
-        String datePrefix = "BG" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd"));
-        QueryWrapper<ProductionProductMain> queryWrapper = new QueryWrapper<>();
-        queryWrapper.select("MAX(product_no) as maxNo")
-                .likeRight("product_no", datePrefix);
-        List<Map<String, Object>> resultList = productionProductMainMapper.selectMaps(queryWrapper);
-        int sequenceNumber = 1;
-        if (resultList != null && !resultList.isEmpty()) {
-            Map<String, Object> result = resultList.get(0);
-            if (result != null) {
-                Object maxNoObj = result.get("maxNo");
-                if (maxNoObj != null) {
-                    String lastNo = maxNoObj.toString();
-                    System.out.println("lastNo: " + lastNo);
-                    if (lastNo.startsWith(datePrefix)) {
-                        try {
-                            String seqStr = lastNo.substring(datePrefix.length());
-                            sequenceNumber = Integer.parseInt(seqStr) + 1;
-                        } catch (NumberFormatException e) {
-                            sequenceNumber = 1;
-                        }
-                    }
-                }
-            }
-        }
-        String productNo = String.format("%s%03d", datePrefix, sequenceNumber);
-        productionProductMain.setProductNo(productNo);
-        productionProductMain.setUserId(dto.getUserId());
-        productionProductMain.setUserName(dto.getUserName());
-        productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId());
-        productionProductMain.setWorkOrderId(dto.getWorkOrderId());
-        productionProductMain.setStatus(0);
-        productionProductMainMapper.insert(productionProductMain);
-        /*鏂板鎶ュ伐鎶曞叆琛�*/
-        List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
-        if (productStructureDtos.size() == 0) {
-            //濡傛灉璇ュ伐搴忔病鏈変骇鍝佺粨鏋勭殑鎶曞叆鍝�,閭h繖涓姇鍏ュ搧鍜屼骇鍑哄搧鏄悓涓�涓�
-            ProductStructureDto productStructureDto = new ProductStructureDto();
-            productStructureDto.setProductModelId(productProcessRouteItem.getProductModelId());
-            productStructureDto.setUnitQuantity(BigDecimal.ONE);
-            productStructureDtos.add(productStructureDto);
-        }
-        for (ProductStructureDto productStructureDto : productStructureDtos) {
-
-            ProductionProductInput productionProductInput = new ProductionProductInput();
-            productionProductInput.setProductModelId(productStructureDto.getProductModelId());
-            productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
-            productionProductInput.setProductMainId(productionProductMain.getId());
-            productionProductInputMapper.insert(productionProductInput);
-            stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId());
-
-        }
-        /*鏂板鎶ュ伐浜у嚭琛�*/
-        ProductionProductOutput productionProductOutput = new ProductionProductOutput();
-        productionProductOutput.setProductMainId(productionProductMain.getId());
-        productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId());
-        productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
-        productionProductOutput.setScrapQty(dto.getScrapQty() != null ? dto.getScrapQty() : BigDecimal.ZERO);
-        productionProductOutputMapper.insert(productionProductOutput);
-        //鍚堟牸鏁伴噺=鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺
-        BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
-        //鍙湁鍚堟牸鏁伴噺>0鎵嶈兘澧炲姞鐩稿簲鏁版嵁
-        if (productQty.compareTo(BigDecimal.ZERO) > 0) {
-            /*鏂板璐ㄦ*/
-            List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
-            if (productProcessRouteItem.getIsQuality()) {
-                //瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
-                int inspectType = 1;
-                String process = productProcess.getName();//宸ュ簭
-                if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
-                    //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
-                    inspectType = 2;
-                    process = null;
-                }
-                Product product = productMapper.selectById(productModel.getProductId());
-                QualityInspect qualityInspect = new QualityInspect();
-                qualityInspect.setProductId(product.getId());
-                qualityInspect.setProductName(product.getProductName());
-                qualityInspect.setModel(productModel.getModel());
-                qualityInspect.setUnit(productModel.getUnit());
-                qualityInspect.setQuantity(productQty);
-                qualityInspect.setProcess(process);
-                qualityInspect.setInspectState(0);
-                qualityInspect.setInspectType(inspectType);
-                qualityInspect.setProductMainId(productionProductMain.getId());
-                qualityInspect.setProductModelId(productModel.getId());
-                qualityInspectMapper.insert(qualityInspect);
-                List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
-                if (qualityTestStandard.size() > 0) {
-                    qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
-                    qualityInspectMapper.updateById(qualityInspect);
-                    qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
-                                    .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))//榛樿鑾峰彇鏈�鏂扮殑
-                            .forEach(qualityTestStandardParam -> {
-                                QualityInspectParam param = new QualityInspectParam();
-                                BeanUtils.copyProperties(qualityTestStandardParam, param);
-                                param.setId(null);
-                                param.setInspectId(qualityInspect.getId());
-                                qualityInspectParamMapper.insert(param);
-                            });
-                }
-            }else {
-                //鐩存帴鍏ュ簱
-                stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
-            }
-            /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
-            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
-            productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
-            if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
-                productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
-            }
-            if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
-                productWorkOrder.setActualEndTime(LocalDate.now());//瀹為檯缁撴潫鏃堕棿
-            }
-            productWorkOrderMapper.updateById(productWorkOrder);
-            //鐢熶骇璁㈠崟
-            ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
-            if (ObjectUtils.isNull(productOrder.getStartTime())) {
-                productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
-            }
-            if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
-                //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
-                productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
-                if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
-                    productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
-                }
-            }
-            productOrderMapper.updateById(productOrder);
-            /*娣诲姞鐢熶骇鏍哥畻        鍖哄垎宸ュ簭鏄浠惰繕鏄鏃�*/
-            BigDecimal workHours = (productProcess.getType() == 1)
-                    ? productProcess.getSalaryQuota().multiply(productQty)
-                    : productProcess.getSalaryQuota();
-
-            SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
-                    .productMainId(productionProductMain.getId())
-                    .schedulingUserId(user.getUserId())
-                    .schedulingUserName(user.getNickName())
-                    .finishedNum(productQty)
-                    .workHours(workHours)
-                    .process(productProcess.getName())
-                    .schedulingDate(LocalDate.now())
-                    .tenantId(dto.getTenantId())
-                    .build();
-            salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
-        }
-        //濡傛灉鎶ュ簾鏁伴噺>0,闇�瑕佽繘鍏ユ姤搴熺殑搴撳瓨
-        if (ObjectUtils.isNotEmpty(dto.getScrapQty())) {
-            if (dto.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
-                stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public Boolean removeProductMain(Long id) {
-        //鍒ゆ柇璇ユ潯鎶ュ伐鏄惁涓嶅悎鏍煎鐞�,濡傛灉涓嶅悎鏍煎鐞嗕簡锛屽垯涓嶅厑璁稿垹闄�
-        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, id));
-        if (qualityInspects.size() > 0){
-            List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(Wrappers.<QualityUnqualified>lambdaQuery()
-                    .in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList())));
-            if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState()==1) {
-                throw new ServiceException("璇ユ潯鎶ュ伐宸茬粡涓嶅悎鏍煎鐞嗕簡锛屼笉鍏佽鍒犻櫎");
-            }
-        }
-        ProductionProductMain productionProductMain = productionProductMainMapper.selectById(id);
-        //璇ユ姤宸ュ搴旂殑宸ヨ壓璺嚎璇︽儏
-        ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId());
-        ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(Wrappers.<ProductionProductOutput>lambdaQuery().eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())).get(0);
-        /*鍒犻櫎鏍哥畻*/
-        salesLedgerProductionAccountingMapper.delete(
-                new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
-                        .eq(SalesLedgerProductionAccounting::getProductMainId, productionProductMain.getId())
-        );
-        /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
-        ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
-        if (productWorkOrder != null && productionProductOutput != null) {
-            BigDecimal outputQty = productionProductOutput.getQuantity() == null ? BigDecimal.ZERO : productionProductOutput.getQuantity();
-            BigDecimal scrapQty = productionProductOutput.getScrapQty() == null ? BigDecimal.ZERO : productionProductOutput.getScrapQty();
-            BigDecimal completeQty = productWorkOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productWorkOrder.getCompleteQuantity();
-
-            BigDecimal validQuantity = outputQty.subtract(scrapQty);
-
-            productWorkOrder.setCompleteQuantity(completeQty.subtract(validQuantity));
-            productWorkOrder.setActualEndTime(null);
-            productWorkOrderMapper.updateById(productWorkOrder);
-        } else {
-            throw new ServiceException("鎿嶄綔澶辫触锛氬伐鍗曚俊鎭垨浜у嚭璁板綍涓嶅瓨鍦�");
-        }
-        //鍒ゆ柇鏄惁鏄渶鍚庝竴閬撳伐搴�
-        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
-        if (productProcessRouteItem.getDragSort() != null && productProcessRouteItems != null && productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
-            ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
-            if (productOrder != null) {
-                BigDecimal orderCompleteQty = productOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productOrder.getCompleteQuantity();
-                BigDecimal totalQty = productionProductOutput.getQuantity() != null ? productionProductOutput.getQuantity() : BigDecimal.ZERO;
-                BigDecimal scrapQty = productionProductOutput.getScrapQty() != null ? productionProductOutput.getScrapQty() : BigDecimal.ZERO;
-                BigDecimal actualQualifiedQty = totalQty.subtract(scrapQty);
-                BigDecimal newCompleteQty = orderCompleteQty.subtract(actualQualifiedQty);
-                productOrder.setCompleteQuantity(newCompleteQty.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newCompleteQty);
-                productOrder.setEndTime(null);
-                productOrderMapper.updateById(productOrder);
-            } else {
-                throw new ServiceException("鍏宠仈鐨勭敓浜ц鍗曚笉瀛樺湪");
-            }
-        }
-        //鍒犻櫎璐ㄦ
-        qualityInspectMapper.selectList(
-                new LambdaQueryWrapper<QualityInspect>()
-                        .eq(QualityInspect::getProductMainId, productionProductMain.getId())
-        ).forEach(q -> {
-            qualityInspectParamMapper.delete(
-                    new LambdaQueryWrapper<QualityInspectParam>()
-                            .eq(QualityInspectParam::getInspectId, q.getId()));
-            qualityInspectMapper.deleteById(q.getId());
-                stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
-        });
-
-        // 鍒犻櫎浜у嚭璁板綍
-        productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
-                .eq(ProductionProductOutput::getProductMainId, productionProductMain.getId()));
-        //鍒犻櫎鎶曞叆璁板綍
-        productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
-                .eq(ProductionProductInput::getProductMainId, productionProductMain.getId()));
-        //鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
-        stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
-        //鍒犻櫎涓嶉渶瑕佽川妫�鐨勫悎鏍煎叆搴�
-        stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode());
-        //鍒犻櫎鎶曞叆瀵瑰簲鐨勫嚭搴撹褰�
-        stockUtils.deleteStockOutRecord(productionProductMain.getId(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
-        // 鍒犻櫎涓昏〃
-        productionProductMainMapper.deleteById(productionProductMain.getId());
-        return true;
-    }
-
-    @Override
-    public ArrayList<Long> listMain(List<Long> idList) {
-        return productionProductMainMapper.listMain(idList);
-    }
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java
index 654b9af..cb8e224 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java
@@ -1,24 +1,20 @@
 package com.ruoyi.production.service.impl;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.production.dto.ProductionProductOutputDto;
 import com.ruoyi.production.mapper.ProductionProductOutputMapper;
 import com.ruoyi.production.pojo.ProductionProductOutput;
 import com.ruoyi.production.service.ProductionProductOutputService;
-import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐浜у嚭琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
 @Service
-@AllArgsConstructor
 public class ProductionProductOutputServiceImpl extends ServiceImpl<ProductionProductOutputMapper, ProductionProductOutput> implements ProductionProductOutputService {
-    @Autowired
-    private ProductionProductOutputMapper productionProductOutputMapper;
 
-    @Override
-    public IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, ProductionProductOutputDto productionProductOutputDto) {
-        return productionProductOutputMapper.listPageProductionProductOutputDto(page, productionProductOutputDto);
-    }
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
deleted file mode 100644
index 7e5f58b..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.production.dto.ProductionProductMainDto;
-import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
-import com.ruoyi.production.dto.UserAccountDto;
-import com.ruoyi.production.dto.UserProductionAccountingDto;
-import com.ruoyi.production.mapper.ProductionProductMainMapper;
-import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
-import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
-import com.ruoyi.production.service.SalesLedgerProductionAccountingService;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:41
- */
-@Service
-@RequiredArgsConstructor
-@Slf4j
-public class SalesLedgerProductionAccountingServiceImpl extends ServiceImpl<SalesLedgerProductionAccountingMapper, SalesLedgerProductionAccounting> implements SalesLedgerProductionAccountingService {
-  
-    private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
-    private final ProductionProductMainMapper productionProductMainMapper;
-
-    @Override
-    public IPage<SalesLedgerProductionAccountingDto> listPage(Page page, SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto) {
-        IPage<SalesLedgerProductionAccountingDto> list = salesLedgerProductionAccountingMapper.listPage(page, salesLedgerProductionAccountingDto);
-        list.getRecords().forEach(item -> {
-            String[] split = item.getSpecificationModel().split("\\*");
-            if(split.length == 2 && isNumeric(split[1])){
-                // 璁$畻宸ヨ祫 = 宸ユ椂瀹氶 * 鏁伴噺 * 瑙勬牸
-                item.setWages(item.getWages().multiply(new BigDecimal(split[1])));
-            }
-        });
-        return list;
-    }
-
-    @Override
-    public IPage<SalesLedgerProductionAccountingDto> pageProductionAccounting(SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page) {
-        // TODO 绠$悊鍛樻煡璇㈡墍鏈夛紝鍏朵粬浜哄彧鑳芥煡鑷繁
-        boolean admin = SecurityUtils.isAdmin(SecurityUtils.getUserId());
-        if (!admin) {
-            salesLedgerProductionAccountingDto.setSchedulingUserName(SecurityUtils.getUsername());
-        }
-        if (salesLedgerProductionAccountingDto.getDateType().equals("month"))  {
-            salesLedgerProductionAccountingDto.setEntryDate(null);
-        }else {
-            salesLedgerProductionAccountingDto.setEntryDateStart(null);
-            salesLedgerProductionAccountingDto.setEntryDateEnd(null);
-        }
-        return salesLedgerProductionAccountingMapper.pageProductionAccounting(page, salesLedgerProductionAccountingDto);
-    }
-
-    @Override
-    public IPage<ProductionProductMainDto> listProductionDetails(SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page) {
-        if (salesLedgerProductionAccountingDto.getDateType().equals("month"))  {
-            salesLedgerProductionAccountingDto.setEntryDate(null);
-        }else {
-            salesLedgerProductionAccountingDto.setEntryDateStart(null);
-            salesLedgerProductionAccountingDto.setEntryDateEnd(null);
-        }
-        return productionProductMainMapper.listProductionDetails(salesLedgerProductionAccountingDto, page);
-    }
-
-    @Override
-    public UserAccountDto getByUserId(UserProductionAccountingDto userProductionAccountingDto) {
-        return salesLedgerProductionAccountingMapper.getByUserId( userProductionAccountingDto);
-    }
-
-    public static boolean isNumeric(String str) {
-        if (str == null || str.isEmpty()) {
-            return false;
-        }
-        // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
-        for (int i = 0; i < str.length(); i++) {
-            if (!Character.isDigit(str.charAt(i))) {
-                return false;
-            }
-        }
-        return true;
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
deleted file mode 100644
index 963081a..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
+++ /dev/null
@@ -1,390 +0,0 @@
-package com.ruoyi.production.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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.security.LoginUser;
-import com.ruoyi.production.dto.*;
-import com.ruoyi.production.mapper.SalesLedgerSchedulingMapper;
-import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
-import com.ruoyi.production.mapper.SpeculativeTradingInfoMapper;
-import com.ruoyi.production.pojo.SalesLedgerScheduling;
-import com.ruoyi.production.pojo.SalesLedgerWork;
-import com.ruoyi.production.pojo.SpeculativeTradingInfo;
-import com.ruoyi.production.service.SalesLedgerSchedulingService;
-import com.ruoyi.project.system.domain.SysUser;
-import com.ruoyi.project.system.mapper.SysUserMapper;
-import com.ruoyi.sales.mapper.LossMapper;
-import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.sales.pojo.Loss;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-
-import jakarta.servlet.http.HttpServletResponse;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:41
- */
-@Service
-@RequiredArgsConstructor
-@Slf4j
-public class SalesLedgerSchedulingServiceImpl extends ServiceImpl<SalesLedgerSchedulingMapper, SalesLedgerScheduling> implements SalesLedgerSchedulingService {
-
-    private final SalesLedgerSchedulingMapper salesLedgerSchedulingMapper;
-
-    private final SalesLedgerWorkMapper salesLedgerWorkMapper;
-
-    @Override
-    public IPage<SalesLedgerSchedulingDto> listPage(Page page, SalesLedgerSchedulingDto salesLedgerSchedulingDto) {
-        IPage<SalesLedgerSchedulingDto> list = salesLedgerSchedulingMapper.listPage(page, salesLedgerSchedulingDto);
-        if(CollectionUtils.isEmpty(list.getRecords())){
-            return list;
-        }
-        Set<Long> collect = list.getRecords().stream().map(SalesLedgerSchedulingDto::getSalesLedgerProductId).collect(Collectors.toSet());
-        LambdaQueryWrapper<SalesLedgerWork> salesLedgerWorkLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        salesLedgerWorkLambdaQueryWrapper.in(SalesLedgerWork::getSalesLedgerProductId, collect)
-                .ne(SalesLedgerWork::getStatus, 1);
-        List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
-        list.getRecords().forEach(i -> {
-            // 鑾峰彇瀹屾垚鏁伴噺
-            i.setSuccessNum(salesLedgerWorks
-                    .stream()
-                    .filter(j -> j.getSalesLedgerProductId().equals(i.getSalesLedgerProductId()))
-                    .map(SalesLedgerWork::getFinishedNum)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add));
-
-            // 璁$畻鐢熶骇鎬婚噺 = 瑙勬牸 * 鏁伴噺 / 1000
-            String[] split = i.getSpecificationModel().split("\\*");
-            if(split.length == 2 && isNumeric(split[0]) && isNumeric(split[1])){
-                BigDecimal multiply = new BigDecimal(split[0])
-                        .multiply(new BigDecimal(split[1])
-                                .multiply(i.getQuantity()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
-                i.setTotalProduction(multiply);
-            }
-
-            // 鐘舵�� = 鏁伴噺鍜屽畬宸ユ暟閲忔瘮杈�
-            if(i.getSchedulingNum().compareTo(new BigDecimal(0)) == 0){
-                i.setStatus("鏈紑濮�");
-            } else if(i.getQuantity().compareTo(i.getSchedulingNum()) <= 0){
-                i.setStatus("宸插畬鎴�");
-            }else{
-                i.setStatus("鐢熶骇涓�");
-            }
-            // 杩涘害淇濈暀涓や綅灏忔暟
-            i.setProgress(i.getSchedulingNum().divide(i.getQuantity(),4,RoundingMode.CEILING).multiply(new BigDecimal(100)));
-
-        });
-        return list;
-    }
-
-    public static boolean isNumeric(String str) {
-        if (str == null || str.isEmpty()) {
-            return false;
-        }
-        // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
-        for (int i = 0; i < str.length(); i++) {
-            if (!Character.isDigit(str.charAt(i))) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public void export(HttpServletResponse response) {
-        List<SalesLedgerSchedulingDto> list = salesLedgerSchedulingMapper.list();
-        if(CollectionUtils.isEmpty(list)){
-            throw new RuntimeException("鏃犲鍑烘暟鎹�");
-        }
-        Set<Long> collect = list.stream().map(SalesLedgerSchedulingDto::getSalesLedgerProductId).collect(Collectors.toSet());
-        LambdaQueryWrapper<SalesLedgerWork> salesLedgerWorkLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        salesLedgerWorkLambdaQueryWrapper.in(SalesLedgerWork::getSalesLedgerProductId, collect)
-                .ne(SalesLedgerWork::getStatus, 1);
-        List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
-        list.forEach(i -> {
-            // 鑾峰彇瀹屾垚鏁伴噺
-            i.setSuccessNum(salesLedgerWorks
-                    .stream()
-                    .filter(j -> j.getSalesLedgerProductId().equals(i.getSalesLedgerProductId()))
-                    .map(SalesLedgerWork::getFinishedNum)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add));
-        });
-        ExcelUtil<SalesLedgerSchedulingDto> util = new ExcelUtil<>(SalesLedgerSchedulingDto.class);
-        util.exportExcel(response, list, "鐢熶骇璁㈠崟");
-    }
-
-    private final SysUserMapper sysUserMapper;
-
-    private final SpeculativeTradingInfoMapper speculativeTradingInfoMapper;
-
-    @Override
-    public String productionDispatch(List<ProductionDispatchAddDto> productionDispatchAddDtoList) {
-        int i = 0;
-        int successNum = 0;
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        for (ProductionDispatchAddDto productionDispatchAddDto : productionDispatchAddDtoList) {
-            SysUser sysUser = sysUserMapper.selectUserById(productionDispatchAddDto.getSchedulingUserId() == null ? loginUser.getUser().getUserId() : productionDispatchAddDto.getSchedulingUserId());
-            if(sysUser == null){
-                i++;
-                continue;
-            }
-            // 鑾峰彇绌轰綑鐐掓満
-            String[] split = productionDispatchAddDto.getSpeculativeTradingName().split(",");
-            if(split != null && split.length == 0){
-                i++;
-                continue;
-            }
-            List<SpeculativeTradingInfo> speculativeTradingInfos = speculativeTradingInfoMapper.selectList(new LambdaQueryWrapper<SpeculativeTradingInfo>()
-                    .in(SpeculativeTradingInfo::getName, Arrays.asList(split))
-                    .orderByAsc(SpeculativeTradingInfo::getSort));
-            if(CollectionUtils.isEmpty(speculativeTradingInfos)){
-                i++;
-                continue;
-            }
-            AtomicReference<String> name = new AtomicReference<>("");  //闇�瑕佺粦瀹氱殑鐐掓満
-            //閫氳繃瑙勬牸鍨嬪彿鍜屾帓浜ф暟閲忚绠楁湰娆$敓浜т骇閲�
-            String[] split1 = productionDispatchAddDto.getSpecificationModel().split("\\*");
-            if(split1.length != 2){
-                i++;
-                continue;
-            }
-            // 鏈鐢熶骇浜ч噺
-            BigDecimal productionNum = new BigDecimal(split1[0])
-                    .multiply(new BigDecimal(split1[1]).multiply(productionDispatchAddDto.getSchedulingNum()));
-            // 澶氫釜鐐掓満鎯呭喌
-            if(speculativeTradingInfos.size() > 1){
-                for (SpeculativeTradingInfo speculativeTradingInfo : speculativeTradingInfos) {
-                    // 鑾峰彇璇ョ倰鏈烘鍦ㄦ帓浜ч噺
-                    BigDecimal schedulingNumBySpeculativeTradingName = getSchedulingNumBySpeculativeTradingName(speculativeTradingInfo.getName());
-                    // 濡傛灉璇ョ倰鏈烘�婚噺(鍗曚綅kg闇�瑕佷箻1000) - 姝e湪鎺掍骇閲� >=鏈鐢熶骇浜ч噺灏卞垎閰嶆鐐掓満
-                    if(speculativeTradingInfo.getWorkLoad().multiply(new BigDecimal(1000)).subtract(schedulingNumBySpeculativeTradingName).compareTo(productionNum) >= 0){
-                        name.set(speculativeTradingInfo.getName());
-                        break;
-                    }
-                }
-            }else{
-                // 鍗曚釜鐐掓満鎯呭喌
-                name.set(speculativeTradingInfos.get(0).getName());
-            }
-            if(name.get().isEmpty()){
-                i++;
-                continue;
-            }
-            String productionLine = "";
-            switch (name.get()){
-                    case "鐐掓満1":
-                    productionLine = "浜х嚎1";
-                    break;
-                    case "鐐掓満2":
-                    productionLine = "浜х嚎2";
-                    break;
-                    case "鐐掓満3":
-                    productionLine = "浜х嚎3";
-                    break;
-                    case "鐐掓満4":
-                    productionLine = "浜х嚎4";
-                    break;
-            }
-            SalesLedgerScheduling salesLedgerScheduling = SalesLedgerScheduling.builder()
-                    .salesLedgerId(productionDispatchAddDto.getSalesLedgerId())
-                    .salesLedgerProductId(productionDispatchAddDto.getSalesLedgerProductId())
-                    .speculativeTradingName(name.get())
-                    .productionLine(productionLine)
-                    .schedulingUserId(sysUser.getUserId())
-                    .schedulingUserName(sysUser.getNickName())
-                    .schedulingNum(productionDispatchAddDto.getSchedulingNum())
-                    .schedulingDate(productionDispatchAddDto.getSchedulingDate() == null ? LocalDate.now() : LocalDate.parse(productionDispatchAddDto.getSchedulingDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")))
-                    .status(1)
-                    .build();
-            salesLedgerSchedulingMapper.insert(salesLedgerScheduling);
-            successNum++;
-        }
-
-        return "娲惧伐鎴愬姛鏁伴噺" + successNum + "锛屽け璐ユ暟閲�" + i;
-    }
-
-    private final SalesLedgerProductMapper salesLedgerProductMapper;
-
-    /**
-     *閫氳繃鐐掓満鍚嶇О鑾峰彇褰撳ぉ姝e湪鎺掍骇閲�
-     * @return
-     */
-    public BigDecimal getSchedulingNumBySpeculativeTradingName(String speculativeTradingName){
-        LambdaQueryWrapper<SalesLedgerScheduling> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(SalesLedgerScheduling::getSpeculativeTradingName, speculativeTradingName)
-                .eq(SalesLedgerScheduling::getSchedulingDate, LocalDate.now());
-        List<SalesLedgerScheduling> salesLedgerSchedulings = salesLedgerSchedulingMapper.selectList(queryWrapper);
-        if(CollectionUtils.isEmpty(salesLedgerSchedulings)){
-            return BigDecimal.ZERO;
-        }
-        List<Long> collect = salesLedgerSchedulings.stream().map(SalesLedgerScheduling::getSalesLedgerProductId).collect(Collectors.toList());
-        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
-                .in(SalesLedgerProduct::getId, collect));
-        if(CollectionUtils.isEmpty(salesLedgerProducts)) return BigDecimal.ZERO;
-        AtomicInteger totalNum = new AtomicInteger(0); //鎬绘暟
-        salesLedgerSchedulings.forEach(item ->{
-            List<SalesLedgerProduct> collect1 = salesLedgerProducts.stream()
-                    .filter(j -> j.getId().equals(item.getSalesLedgerProductId()))
-                    .collect(Collectors.toList());
-            if(!CollectionUtils.isEmpty(collect1)){
-                SalesLedgerProduct salesLedgerProduct = collect1.get(0);
-                // 鏍规嵁浜у搧瑙勬牸 * 鎺掍骇鏁伴噺 鑾峰彇鏈鐢熶骇浜ч噺骞剁疮璁�
-                String[] split = salesLedgerProduct.getSpecificationModel().split("\\*");
-                BigDecimal productionNum = new BigDecimal(split[0])
-                        .multiply(new BigDecimal(split[1]).multiply(item.getSchedulingNum()));
-                totalNum.addAndGet(productionNum.intValue());
-            }
-        });
-        // 闇�瑕� / 鎹熻�楃巼
-        Loss loss = lossMapper.selectOne(new LambdaQueryWrapper<Loss>().last("limit 1"));
-        BigDecimal lossNum = loss == null ? new BigDecimal(6) : loss.getRate(); //娌℃湁鎹熻�楃巼鍒欓粯璁や负6
-
-        return new BigDecimal(totalNum.get()).multiply(new BigDecimal(100)).divide(lossNum, 2,RoundingMode.HALF_UP);
-    }
-
-    private final LossMapper lossMapper;
-
-
-    /**
-     *閫氳繃鎵归噺鐐掓満鍚嶇О鑾峰彇褰撳ぉ姝e湪鎺掍骇閲�
-     * @return
-     */
-    public BigDecimal getSchedulingNumBySpeculativeTradingNameList(List<String> speculativeTradingName){
-        LambdaQueryWrapper<SalesLedgerScheduling> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(SalesLedgerScheduling::getSpeculativeTradingName, speculativeTradingName)
-                .eq(SalesLedgerScheduling::getSchedulingDate, LocalDate.now());
-        List<SalesLedgerScheduling> salesLedgerSchedulings = salesLedgerSchedulingMapper.selectList(queryWrapper);
-        if(CollectionUtils.isEmpty(salesLedgerSchedulings)){
-            return BigDecimal.ZERO;
-        }
-        List<Long> collect = salesLedgerSchedulings.stream().map(SalesLedgerScheduling::getSalesLedgerProductId).collect(Collectors.toList());
-        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
-                .in(SalesLedgerProduct::getId, collect));
-        if(CollectionUtils.isEmpty(salesLedgerProducts)) return BigDecimal.ZERO;
-        AtomicInteger totalNum = new AtomicInteger(0); //鎬绘暟
-        salesLedgerSchedulings.forEach(item ->{
-            List<SalesLedgerProduct> collect1 = salesLedgerProducts.stream()
-                    .filter(j -> j.getId().equals(item.getSalesLedgerProductId()))
-                    .collect(Collectors.toList());
-            if(!CollectionUtils.isEmpty(collect1)){
-                SalesLedgerProduct salesLedgerProduct = collect1.get(0);
-                // 鏍规嵁浜у搧瑙勬牸 * 鎺掍骇鏁伴噺 鑾峰彇鏈鐢熶骇浜ч噺骞剁疮璁�
-                String[] split = salesLedgerProduct.getSpecificationModel().split("\\*");
-                BigDecimal productionNum = new BigDecimal(split[0])
-                        .multiply(new BigDecimal(split[1]).multiply(item.getSchedulingNum()));
-                totalNum.addAndGet(productionNum.intValue());
-            }
-        });
-        return new BigDecimal(totalNum.get());
-    }
-
-    @Override
-    public IPage<SalesLedgerSchedulingProcessDto> listPageProcess(Page page, SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto) {
-        IPage<SalesLedgerSchedulingProcessDto> list = salesLedgerSchedulingMapper.listPageProcess(page, salesLedgerSchedulingDto);
-        list.getRecords().forEach(i -> {
-            // 璁$畻鐢熶骇鎬婚噺 = 瑙勬牸 * 鏁伴噺 / 1000
-            String[] split = i.getSpecificationModel().split("\\*");
-            if(split.length == 2 && isNumeric(split[0]) && isNumeric(split[1])){
-                BigDecimal multiply = new BigDecimal(split[0])
-                        .multiply(new BigDecimal(split[1])
-                                .multiply(i.getSuccessNum()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
-                i.setTotalProduction(multiply);
-            }
-        });
-        return list;
-    }
-
-    @Override
-    public int productionDispatchDelete(List<Long> ids) {
-        LambdaQueryWrapper<SalesLedgerScheduling> salesLedgerSchedulingLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerScheduling>();
-        salesLedgerSchedulingLambdaQueryWrapper.in(SalesLedgerScheduling::getId, ids);
-        List<SalesLedgerScheduling> salesLedgerSchedulings = salesLedgerSchedulingMapper.selectList(salesLedgerSchedulingLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty(salesLedgerSchedulings)) throw new RuntimeException("鎺掍骇涓嶅瓨鍦�");
-        List<SalesLedgerScheduling> collect = salesLedgerSchedulings.stream().filter(i -> !i.getStatus().equals(1)).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(collect)) throw new RuntimeException("鎺掍骇宸插紑濮嬶紝璇峰嬁鍒犻櫎");
-        salesLedgerSchedulingMapper.deleteBatchIds(ids);
-        return 0;
-    }
-
-    @Override
-    public int processScheduling(List<ProcessSchedulingDto> processSchedulingDtos) {
-        for (ProcessSchedulingDto processSchedulingDto : processSchedulingDtos) {
-            SalesLedgerScheduling salesLedgerScheduling = salesLedgerSchedulingMapper.selectById(processSchedulingDto.getId());
-            if(salesLedgerScheduling == null) throw new RuntimeException("鎺掍骇涓嶅瓨鍦�");
-            if(salesLedgerScheduling.getStatus().equals(3)) throw new RuntimeException("鎺掍骇宸插畬鎴愶紝璇峰嬁閲嶅鎺掍骇");
-            SysUser sysUser = sysUserMapper.selectUserById(processSchedulingDto.getSchedulingUserId());
-            if(sysUser == null) throw new RuntimeException("鎺掍骇浜轰笉瀛樺湪");
-            salesLedgerScheduling.setFinishedNum(salesLedgerScheduling.getFinishedNum().add(processSchedulingDto.getSchedulingNum()));
-//            LambdaQueryWrapper<SalesLedgerWork> salesLedgerWorkLambdaQueryWrapper = new LambdaQueryWrapper<>();
-//            salesLedgerWorkLambdaQueryWrapper.eq(SalesLedgerWork::getSalesLedgerSchedulingId, salesLedgerScheduling.getId())
-//                    .ne(SalesLedgerWork::getStatus, 1);
-//            List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
-            if(salesLedgerScheduling.getSchedulingNum().compareTo(salesLedgerScheduling.getFinishedNum()) < 0){
-                throw new RuntimeException("褰撳墠鎺掍骇鏁伴噺澶т簬寰呮帓浜ф暟閲忥紝璇蜂粩缁嗘牳瀵癸紒");
-            }
-            if(salesLedgerScheduling.getSchedulingNum().compareTo(salesLedgerScheduling.getFinishedNum()) == 0){
-                salesLedgerScheduling.setStatus(3);
-            }else{
-                salesLedgerScheduling.setStatus(2);
-            }
-            salesLedgerSchedulingMapper.updateById(salesLedgerScheduling);
-            SalesLedgerWork.SalesLedgerWorkBuilder salesLedgerWorkBuilder = SalesLedgerWork.builder()
-                    .salesLedgerSchedulingId(salesLedgerScheduling.getId())
-                    .salesLedgerId(salesLedgerScheduling.getSalesLedgerId())
-                    .remark(processSchedulingDto.getRemark())
-                    .productionLine(processSchedulingDto.getProductionLine())
-                    .type(processSchedulingDto.getType())
-                    .loss(processSchedulingDto.getLoss())
-                    .receive(processSchedulingDto.getReceive())
-                    .salesLedgerProductId(salesLedgerScheduling.getSalesLedgerProductId())
-                    .schedulingUserId(salesLedgerScheduling.getSchedulingUserId())
-                    .schedulingUserName(sysUser.getNickName())
-                    .schedulingNum(processSchedulingDto.getSchedulingNum())
-                    .workHours(processSchedulingDto.getWorkHours())
-                    .process(processSchedulingDto.getProcess())
-                    .status(1)
-                    .schedulingDate(LocalDate.parse(processSchedulingDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
-            salesLedgerWorkMapper.insert(salesLedgerWorkBuilder.build());
-        }
-        return 0;
-    }
-
-    @Override
-    public void exportOne(HttpServletResponse response) {
-        List<SalesLedgerSchedulingDto> list = salesLedgerSchedulingMapper.list();
-        if(CollectionUtils.isEmpty(list)){
-            throw new RuntimeException("鏃犲鍑烘暟鎹�");
-        }
-        List<DaiDto> dais = new ArrayList<>();
-        list.forEach(i -> {
-            DaiDto daiDto = new DaiDto();
-            BeanUtils.copyProperties(i, daiDto);
-            // 鑾峰彇寰呮帓浜ф暟閲�
-            daiDto.setDaiNum(daiDto.getQuantity().subtract(i.getSchedulingNum()));
-            dais.add(daiDto);
-        });
-        ExcelUtil<DaiDto> util = new ExcelUtil<>(DaiDto.class);
-        util.exportExcel(response, dais, "鐢熶骇娲惧伐");
-    }
-}
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
deleted file mode 100644
index 6573b73..0000000
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
+++ /dev/null
@@ -1,182 +0,0 @@
-//package com.ruoyi.production.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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-//import com.ruoyi.common.utils.SecurityUtils;
-//import com.ruoyi.framework.security.LoginUser;
-//import com.ruoyi.framework.web.domain.AjaxResult;
-//import com.ruoyi.procurementrecord.dto.Details;
-//import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
-//import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
-//import com.ruoyi.procurementrecord.service.impl.ProcurementRecordOutServiceImpl;
-//import com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl;
-//import com.ruoyi.production.dto.ProductionReportDto;
-//import com.ruoyi.production.dto.SalesLedgerWorkDto;
-//import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
-//import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
-//import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
-//import com.ruoyi.production.pojo.SalesLedgerWork;
-//import com.ruoyi.production.service.SalesLedgerProductionAccountingService;
-//import com.ruoyi.production.service.SalesLedgerWorkService;
-//import com.ruoyi.project.system.domain.SysUser;
-//import com.ruoyi.project.system.mapper.SysUserMapper;
-//import com.ruoyi.sales.mapper.LossMapper;
-//import com.ruoyi.sales.pojo.Loss;
-//import lombok.RequiredArgsConstructor;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.BeanUtils;
-//import org.springframework.stereotype.Service;
-//import org.springframework.util.CollectionUtils;
-//
-//import java.math.BigDecimal;
-//import java.math.RoundingMode;
-//import java.time.LocalDate;
-//import java.time.format.DateTimeFormatter;
-//import java.util.ArrayList;
-//import java.util.List;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author :yys
-// * @date : 2025/7/21 14:40
-// */
-//@Service
-//@RequiredArgsConstructor
-//@Slf4j
-//public class SalesLedgerWorkServiceImpl extends ServiceImpl<SalesLedgerWorkMapper, SalesLedgerWork> implements SalesLedgerWorkService {
-//
-//    private final SalesLedgerWorkMapper salesLedgerWorkMapper;
-//
-//    private final SysUserMapper sysUserMapper;
-//
-//    private final LossMapper lossMapper;
-//
-//    private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
-//
-//    @Override
-//    public IPage<SalesLedgerWorkDto> listPage(Page page, SalesLedgerWorkDto salesLedgerWorkDto) {
-//        IPage<SalesLedgerWorkDto> iPage = salesLedgerWorkMapper.listPage(page, salesLedgerWorkDto);
-//        List<Loss> losses = lossMapper.selectList(null);
-//        if(!CollectionUtils.isEmpty(losses)){
-//            iPage.getRecords().forEach(item -> {
-//                String[] split = item.getSpecificationModel().split("\\*");
-//                if(split.length == 2 && isNumeric(split[1]) && isNumeric(split[0])){
-//                    // 璁$畻鎹熻�楋紙100000浠h〃 鎹熻�楃殑 100 鍜� 鍗曚綅杞崲鐨�1000锛�
-//                    BigDecimal divide = new BigDecimal(split[0])
-//                            .multiply(new BigDecimal(split[1]))
-//                            .multiply(item.getFinishedNum())
-//                            .multiply(losses.get(0).getRate())
-//                            .divide(new BigDecimal(100000), 2, RoundingMode.HALF_UP);
-//                    item.setLoss(divide.toString());
-//                }
-//
-//            });
-//        }
-//        return iPage;
-//    }
-//
-//    public static boolean isNumeric(String str) {
-//        if (str == null || str.isEmpty()) {
-//            return false;
-//        }
-//        // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
-//        for (int i = 0; i < str.length(); i++) {
-//            if (!Character.isDigit(str.charAt(i))) {
-//                return false;
-//            }
-//        }
-//        return true;
-//    }
-//
-//    private final ProcurementRecordServiceImpl procurementRecordService;
-//
-//    @Override
-//    public int productionReport(ProductionReportDto productionReportDto) {
-//        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(productionReportDto.getId());
-//        SysUser sysUser = sysUserMapper.selectUserById(productionReportDto.getSchedulingUserId());
-//        if (salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
-//        if (salesLedgerWork.getStatus() == 3) throw new RuntimeException("鎶ュ伐宸插畬鎴�");
-//        if (sysUser == null) throw new RuntimeException("鐢熶骇浜轰笉瀛樺湪");
-//        salesLedgerWork.setFinishedNum(salesLedgerWork.getFinishedNum().add(productionReportDto.getFinishedNum()));
-//        if(salesLedgerWork.getSchedulingNum().compareTo(salesLedgerWork.getFinishedNum()) <= 0){
-//            salesLedgerWork.setStatus(3);
-//        }else{
-//            salesLedgerWork.setStatus(2);
-//        }
-//        salesLedgerWorkMapper.updateById(salesLedgerWork);
-//        // 鏂板鎶ュ伐鏁版嵁
-//        SalesLedgerProductionAccounting.SalesLedgerProductionAccountingBuilder builder = SalesLedgerProductionAccounting.builder()
-//                .productMainId(null)
-//                .schedulingUserId(sysUser.getUserId())
-//                .schedulingUserName(sysUser.getNickName())
-//                .finishedNum(productionReportDto.getFinishedNum())
-//                .workHours(salesLedgerWork.getWorkHours())
-//                .process(salesLedgerWork.getProcess())
-//                .schedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
-//        salesLedgerProductionAccountingMapper.insert(builder.build());
-//        // 鐢熶骇鎶ュ伐鎴愬姛 -> 鍏ュ簱
-//        LoginUser loginUser = SecurityUtils.getLoginUser();
-//        ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
-//        procurementRecordOutAdd.setType(2);
-//        procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
-//        procurementRecordOutAdd.setNickName(loginUser.getNickName());
-//        List<Details> details = new ArrayList<>();
-//        Details details1 = new Details();
-//        details1.setInboundQuantity(productionReportDto.getFinishedNum());
-//        details1.setId(Integer.parseInt(salesLedgerWork.getSalesLedgerProductId().toString()));
-//        details1.setUnitPrice(productionReportDto.getUnitPrice());
-//        details1.setTotalPrice(productionReportDto.getTotalPrice());
-//        details.add(details1);
-//        procurementRecordOutAdd.setDetails(details);
-//        procurementRecordService.add(procurementRecordOutAdd);
-//
-//        return 0;
-//    }
-//
-//    @Override
-//    public int productionReportUpdate(ProductionReportDto productionReportDto) {
-//        SalesLedgerProductionAccounting salesLedgerProductionAccounting = salesLedgerProductionAccountingMapper.selectById(productionReportDto.getId());
-//        if(salesLedgerProductionAccounting == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
-//        SysUser sysUser = sysUserMapper.selectUserById(productionReportDto.getSchedulingUserId());
-//        if(sysUser == null) throw new RuntimeException("鐢熶骇浜轰笉瀛樺湪");
-//        salesLedgerProductionAccounting.setFinishedNum(productionReportDto.getFinishedNum());
-//        salesLedgerProductionAccounting.setSchedulingUserId(sysUser.getUserId());
-//        salesLedgerProductionAccounting.setSchedulingUserName(sysUser.getNickName());
-//        salesLedgerProductionAccounting.setSchedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
-//        salesLedgerProductionAccountingMapper.updateById(salesLedgerProductionAccounting);
-//
-//        // 鏇存柊鎶ュ伐鏁版嵁
-//        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(salesLedgerProductionAccounting.getSalesLedgerWorkId());
-//        if(salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
-//        salesLedgerWork.setFinishedNum(productionReportDto.getFinishedNum());
-//        if(salesLedgerWork.getSchedulingNum().compareTo(salesLedgerWork.getFinishedNum()) <= 0){
-//            salesLedgerWork.setStatus(3);
-//        }else{
-//            salesLedgerWork.setStatus(2);
-//        }
-//        salesLedgerWork.setSchedulingUserId(sysUser.getUserId());
-//        salesLedgerWork.setSchedulingUserName(sysUser.getNickName());
-//        salesLedgerWork.setSchedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
-//        salesLedgerWorkMapper.updateById(salesLedgerWork);
-//        return 0;
-//    }
-//
-//    @Override
-//    public List<ProductionReportDto> getList(Long id) {
-//        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(id);
-//        if(salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
-//        LambdaQueryWrapper<SalesLedgerProductionAccounting> salesLedgerProductionAccountingLambdaQueryWrapper = new LambdaQueryWrapper<>();
-//        salesLedgerProductionAccountingLambdaQueryWrapper.eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, id);
-//        List<SalesLedgerProductionAccounting> salesLedgerProductionAccountingList = salesLedgerProductionAccountingMapper.selectList(salesLedgerProductionAccountingLambdaQueryWrapper);
-//        if(CollectionUtils.isEmpty(salesLedgerProductionAccountingList)) throw new RuntimeException("娌℃湁鐢熶骇璁板綍鏁版嵁");
-//        return salesLedgerProductionAccountingList.stream().map(salesLedgerProductionAccounting -> {
-//            ProductionReportDto productionReportDto = new ProductionReportDto();
-//            BeanUtils.copyProperties(salesLedgerProductionAccounting, productionReportDto);
-//            productionReportDto.setSchedulingDate(salesLedgerProductionAccounting.getSchedulingDate().format(DateTimeFormatter.ISO_LOCAL_DATE));
-//            productionReportDto.setSchedulingNum(salesLedgerWork.getSchedulingNum());
-//            return productionReportDto;
-//        }).collect(Collectors.toList());
-//    }
-//}
diff --git a/src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingDto.java b/src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingDto.java
index d960f31..d725056 100644
--- a/src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingDto.java
+++ b/src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingDto.java
@@ -2,14 +2,21 @@
 
 import com.ruoyi.technology.pojo.TechnologyRouting;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
-@ApiModel(value = "TechnologyRoutingDto瀵硅薄", description = "宸ヨ壓璺嚎琛�")
+@ApiModel(value = "TechnologyRoutingDto瀵硅薄", description = "宸ヨ壓璺嚎鏌ヨ鍙傛暟")
 public class TechnologyRoutingDto extends TechnologyRouting {
 
+    @ApiModelProperty("浜у搧鍚嶇О")
+    private String productName;
 
+    @ApiModelProperty("瑙勬牸鍚嶇О")
+    private String model;
 
+    @ApiModelProperty("BOM缂栧彿")
+    private String bomNo;
 }
diff --git a/src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingVo.java b/src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingVo.java
index 34a007d..aa67cd4 100644
--- a/src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingVo.java
+++ b/src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingVo.java
@@ -2,11 +2,21 @@
 
 import com.ruoyi.technology.pojo.TechnologyRouting;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
-@ApiModel(value = "TechnologyRoutingVo瀵硅薄", description = "宸ヨ壓璺嚎琛�")
+@ApiModel(value = "TechnologyRoutingVo瀵硅薄", description = "宸ヨ壓璺嚎杩斿洖瀵硅薄")
 public class TechnologyRoutingVo extends TechnologyRouting {
+
+    @ApiModelProperty("浜у搧鍚嶇О")
+    private String productName;
+
+    @ApiModelProperty("瑙勬牸鍚嶇О")
+    private String model;
+
+    @ApiModelProperty("BOM缂栧彿")
+    private String bomNo;
 }
diff --git a/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java b/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java
index 19e1197..9a17e82 100644
--- a/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java
+++ b/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java
@@ -1,18 +1,68 @@
 package com.ruoyi.technology.controller;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamDto;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamSyncDto;
+import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationParamVo;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
+import com.ruoyi.technology.service.TechnologyRoutingOperationParamService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
 
-/**
- * <p>
- * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� 鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-20 10:22:16
- */
+import java.util.List;
+
 @RestController
 @RequestMapping("/technologyRoutingOperationParam")
+@Api(tags = "鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟")
+@RequiredArgsConstructor
 public class TechnologyRoutingOperationParamController {
 
+    private final TechnologyRoutingOperationParamService technologyRoutingOperationParamService;
+
+    @GetMapping("/page")
+    @ApiOperation("鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟鍒嗛〉鏌ヨ")
+    public R<IPage<TechnologyRoutingOperationParamVo>> page(Page<TechnologyRoutingOperationParamDto> page,
+                                                            TechnologyRoutingOperationParamDto dto) {
+        return R.ok(technologyRoutingOperationParamService.pageTechnologyRoutingOperationParam(page, dto));
+    }
+
+    @GetMapping("/list")
+    @ApiOperation("鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟鍒楄〃")
+    public R<List<TechnologyRoutingOperationParamVo>> list(TechnologyRoutingOperationParamDto dto) {
+        return R.ok(technologyRoutingOperationParamService.listTechnologyRoutingOperationParam(dto));
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation("鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟璇︽儏")
+    public R<TechnologyRoutingOperationParamVo> getInfo(@PathVariable("id") Long id) {
+        return R.ok(technologyRoutingOperationParamService.getTechnologyRoutingOperationParamInfo(id));
+    }
+
+    @PostMapping
+    @ApiOperation("鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟")
+    public R<Boolean> add(@RequestBody TechnologyRoutingOperationParam technologyRoutingOperationParam) {
+        return R.ok(technologyRoutingOperationParamService.saveTechnologyRoutingOperationParam(technologyRoutingOperationParam));
+    }
+
+    @PutMapping
+    @ApiOperation("淇敼鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟")
+    public R<Boolean> edit(@RequestBody TechnologyRoutingOperationParam technologyRoutingOperationParam) {
+        return R.ok(technologyRoutingOperationParamService.saveTechnologyRoutingOperationParam(technologyRoutingOperationParam));
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation("鍒犻櫎鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟")
+    public R<Boolean> remove(@PathVariable("id") Long id) {
+        return R.ok(technologyRoutingOperationParamService.removeTechnologyRoutingOperationParam(id));
+    }
+
+    @PostMapping("/sync")
+    @ApiOperation("鎸夊伐鑹鸿矾绾垮伐搴忓悓姝ュ伐搴忓弬鏁�")
+    public R<Integer> sync(@RequestBody TechnologyRoutingOperationParamSyncDto syncDto) {
+        return R.ok(technologyRoutingOperationParamService.syncTechnologyRoutingOperationParam(syncDto));
+    }
 }
diff --git a/src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingMapper.java b/src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingMapper.java
index e688c4f..7a29f1b 100644
--- a/src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingMapper.java
+++ b/src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingMapper.java
@@ -1,20 +1,18 @@
 package com.ruoyi.technology.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingDto;
+import com.ruoyi.technology.bean.vo.TechnologyRoutingVo;
 import com.ruoyi.technology.pojo.TechnologyRouting;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
-/**
- * <p>
- * 宸ヨ壓璺嚎琛� Mapper 鎺ュ彛
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-20 10:06:33
- */
 @Mapper
 public interface TechnologyRoutingMapper extends BaseMapper<TechnologyRouting> {
 
+    IPage<TechnologyRoutingVo> pageTechnologyRouting(Page<TechnologyRoutingDto> page, @Param("c") TechnologyRoutingDto technologyRoutingDto);
+
     int updateProductModelByBomId(@Param("productModelId") Long productModelId, @Param("bomId") Long bomId);
 }
diff --git a/src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationParamService.java b/src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationParamService.java
index 8bd7ebe..5d39eb6 100644
--- a/src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationParamService.java
+++ b/src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationParamService.java
@@ -1,16 +1,27 @@
 package com.ruoyi.technology.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamDto;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamSyncDto;
+import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationParamVo;
 import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
 
-/**
- * <p>
- * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� 鏈嶅姟绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-20 10:22:16
- */
+import java.util.List;
+
 public interface TechnologyRoutingOperationParamService extends IService<TechnologyRoutingOperationParam> {
 
+    IPage<TechnologyRoutingOperationParamVo> pageTechnologyRoutingOperationParam(Page<TechnologyRoutingOperationParamDto> page,
+                                                                                 TechnologyRoutingOperationParamDto technologyRoutingOperationParamDto);
+
+    List<TechnologyRoutingOperationParamVo> listTechnologyRoutingOperationParam(TechnologyRoutingOperationParamDto technologyRoutingOperationParamDto);
+
+    TechnologyRoutingOperationParamVo getTechnologyRoutingOperationParamInfo(Long id);
+
+    boolean saveTechnologyRoutingOperationParam(TechnologyRoutingOperationParam technologyRoutingOperationParam);
+
+    boolean removeTechnologyRoutingOperationParam(Long id);
+
+    int syncTechnologyRoutingOperationParam(TechnologyRoutingOperationParamSyncDto syncDto);
 }
diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
index c10da3f..44b59ed 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
@@ -1,20 +1,204 @@
 package com.ruoyi.technology.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamDto;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamSyncDto;
+import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationParamVo;
+import com.ruoyi.technology.mapper.TechnologyOperationParamMapper;
+import com.ruoyi.technology.mapper.TechnologyParamMapper;
+import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
 import com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper;
+import com.ruoyi.technology.pojo.TechnologyOperationParam;
+import com.ruoyi.technology.pojo.TechnologyParam;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
 import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
 import com.ruoyi.technology.service.TechnologyRoutingOperationParamService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-/**
- * <p>
- * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-20 10:22:16
- */
+import java.util.List;
+
 @Service
-public class TechnologyRoutingOperationParamServiceImpl extends ServiceImpl<TechnologyRoutingOperationParamMapper, TechnologyRoutingOperationParam> implements TechnologyRoutingOperationParamService {
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class TechnologyRoutingOperationParamServiceImpl extends ServiceImpl<TechnologyRoutingOperationParamMapper, TechnologyRoutingOperationParam>
+        implements TechnologyRoutingOperationParamService {
 
+    private final TechnologyRoutingOperationParamMapper technologyRoutingOperationParamMapper;
+    private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
+    private final TechnologyOperationParamMapper technologyOperationParamMapper;
+    private final TechnologyParamMapper technologyParamMapper;
+
+    @Override
+    public IPage<TechnologyRoutingOperationParamVo> pageTechnologyRoutingOperationParam(Page<TechnologyRoutingOperationParamDto> page,
+                                                                                        TechnologyRoutingOperationParamDto dto) {
+        Page<TechnologyRoutingOperationParam> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        return this.page(entityPage, buildQueryWrapper(dto))
+                .convert(item -> BeanUtil.copyProperties(item, TechnologyRoutingOperationParamVo.class));
+    }
+
+    @Override
+    public List<TechnologyRoutingOperationParamVo> listTechnologyRoutingOperationParam(TechnologyRoutingOperationParamDto dto) {
+        return BeanUtil.copyToList(this.list(buildQueryWrapper(dto)), TechnologyRoutingOperationParamVo.class);
+    }
+
+    @Override
+    public TechnologyRoutingOperationParamVo getTechnologyRoutingOperationParamInfo(Long id) {
+        TechnologyRoutingOperationParam item = this.getById(id);
+        if (item == null) {
+            return null;
+        }
+        return BeanUtil.copyProperties(item, TechnologyRoutingOperationParamVo.class);
+    }
+
+    @Override
+    public boolean saveTechnologyRoutingOperationParam(TechnologyRoutingOperationParam item) {
+        TechnologyRoutingOperation routingOperation = getRoutingOperation(item.getTechnologyRoutingOperationId());
+        fillFromOperationParam(item, routingOperation);
+        validateManualFields(item);
+        checkDuplicate(item);
+        return this.saveOrUpdate(item);
+    }
+
+    @Override
+    public boolean removeTechnologyRoutingOperationParam(Long id) {
+        return this.removeById(id);
+    }
+
+    @Override
+    public int syncTechnologyRoutingOperationParam(TechnologyRoutingOperationParamSyncDto syncDto) {
+        if (syncDto == null || syncDto.getTechnologyRoutingOperationId() == null) {
+            throw new ServiceException("technologyRoutingOperationId is required");
+        }
+        TechnologyRoutingOperation routingOperation = getRoutingOperation(syncDto.getTechnologyRoutingOperationId());
+        List<TechnologyOperationParam> operationParamList = technologyOperationParamMapper.selectList(
+                Wrappers.<TechnologyOperationParam>lambdaQuery()
+                        .eq(TechnologyOperationParam::getTechnologyOperationId, routingOperation.getTechnologyOperationId())
+                        .orderByAsc(TechnologyOperationParam::getId)
+        );
+        boolean replaceExisting = syncDto.getReplaceExisting() == null || syncDto.getReplaceExisting();
+        if (replaceExisting) {
+            technologyRoutingOperationParamMapper.delete(
+                    Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                            .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
+            );
+        }
+        int successCount = 0;
+        for (TechnologyOperationParam operationParam : operationParamList) {
+            boolean exists = technologyRoutingOperationParamMapper.selectCount(
+                    Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                            .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
+                            .eq(TechnologyRoutingOperationParam::getTechnologyOperationParamId, operationParam.getId())
+            ) > 0;
+            if (!replaceExisting && exists) {
+                continue;
+            }
+            TechnologyRoutingOperationParam snapshot = new TechnologyRoutingOperationParam();
+            snapshot.setTechnologyRoutingOperationId(routingOperation.getId());
+            snapshot.setTechnologyOperationParamId(operationParam.getId());
+            snapshot.setTechnologyOperationId(operationParam.getTechnologyOperationId());
+            snapshot.setStandardValue(operationParam.getStandardValue());
+            fillFromOperationParam(snapshot, routingOperation);
+            technologyRoutingOperationParamMapper.insert(snapshot);
+            successCount++;
+        }
+        return successCount;
+    }
+
+    private LambdaQueryWrapper<TechnologyRoutingOperationParam> buildQueryWrapper(TechnologyRoutingOperationParamDto dto) {
+        TechnologyRoutingOperationParam query = dto == null ? new TechnologyRoutingOperationParam() : dto;
+        return Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                .eq(query.getId() != null, TechnologyRoutingOperationParam::getId, query.getId())
+                .eq(query.getTechnologyRoutingOperationId() != null,
+                        TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, query.getTechnologyRoutingOperationId())
+                .eq(query.getTechnologyOperationId() != null,
+                        TechnologyRoutingOperationParam::getTechnologyOperationId, query.getTechnologyOperationId())
+                .eq(query.getTechnologyOperationParamId() != null,
+                        TechnologyRoutingOperationParam::getTechnologyOperationParamId, query.getTechnologyOperationParamId())
+                .eq(query.getParamId() != null, TechnologyRoutingOperationParam::getParamId, query.getParamId())
+                .eq(query.getParamType() != null, TechnologyRoutingOperationParam::getParamType, query.getParamType())
+                .like(query.getParamCode() != null && !query.getParamCode().isEmpty(),
+                        TechnologyRoutingOperationParam::getParamCode, query.getParamCode())
+                .like(query.getParamName() != null && !query.getParamName().isEmpty(),
+                        TechnologyRoutingOperationParam::getParamName, query.getParamName())
+                .orderByAsc(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId)
+                .orderByAsc(TechnologyRoutingOperationParam::getId);
+    }
+
+    private TechnologyRoutingOperation getRoutingOperation(Long technologyRoutingOperationId) {
+        if (technologyRoutingOperationId == null) {
+            throw new ServiceException("technologyRoutingOperationId is required");
+        }
+        TechnologyRoutingOperation routingOperation = technologyRoutingOperationMapper.selectById(technologyRoutingOperationId);
+        if (routingOperation == null) {
+            throw new ServiceException("Technology routing operation not found");
+        }
+        return routingOperation;
+    }
+
+    private void fillFromOperationParam(TechnologyRoutingOperationParam item, TechnologyRoutingOperation routingOperation) {
+        if (item.getTechnologyOperationId() == null) {
+            item.setTechnologyOperationId(routingOperation.getTechnologyOperationId());
+        } else if (!item.getTechnologyOperationId().equals(routingOperation.getTechnologyOperationId())) {
+            throw new ServiceException("technologyOperationId does not match routing operation");
+        }
+        if (item.getTechnologyOperationParamId() == null) {
+            return;
+        }
+        TechnologyOperationParam operationParam = technologyOperationParamMapper.selectById(item.getTechnologyOperationParamId());
+        if (operationParam == null) {
+            throw new ServiceException("Technology operation param not found");
+        }
+        if (!routingOperation.getTechnologyOperationId().equals(operationParam.getTechnologyOperationId())) {
+            throw new ServiceException("Operation param does not belong to routing operation");
+        }
+        TechnologyParam technologyParam = technologyParamMapper.selectById(operationParam.getTechnologyParamId());
+        if (technologyParam == null) {
+            throw new ServiceException("Technology param not found");
+        }
+        item.setParamId(technologyParam.getId());
+        item.setParamCode(technologyParam.getParamCode());
+        item.setParamName(technologyParam.getParamName());
+        item.setParamType(technologyParam.getParamType());
+        item.setParamFormat(technologyParam.getParamFormat());
+        item.setUnit(technologyParam.getUnit());
+        item.setIsRequired(technologyParam.getIsRequired());
+        if (item.getRemark() == null || item.getRemark().trim().isEmpty()) {
+            item.setRemark(technologyParam.getRemark());
+        }
+        if (item.getStandardValue() == null) {
+            item.setStandardValue(operationParam.getStandardValue());
+        }
+    }
+
+    private void validateManualFields(TechnologyRoutingOperationParam item) {
+        if (item.getParamCode() == null || item.getParamCode().trim().isEmpty()) {
+            throw new ServiceException("paramCode is required");
+        }
+        if (item.getParamName() == null || item.getParamName().trim().isEmpty()) {
+            throw new ServiceException("paramName is required");
+        }
+    }
+
+    private void checkDuplicate(TechnologyRoutingOperationParam item) {
+        boolean duplicate = technologyRoutingOperationParamMapper.selectCount(
+                Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                        .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, item.getTechnologyRoutingOperationId())
+                        .eq(item.getTechnologyOperationParamId() != null,
+                                TechnologyRoutingOperationParam::getTechnologyOperationParamId, item.getTechnologyOperationParamId())
+                        .eq(item.getTechnologyOperationParamId() == null && item.getParamCode() != null,
+                                TechnologyRoutingOperationParam::getParamCode, item.getParamCode())
+                        .ne(item.getId() != null, TechnologyRoutingOperationParam::getId, item.getId())
+        ) > 0;
+        if (duplicate) {
+            throw new ServiceException("Duplicate routing operation param");
+        }
+    }
 }
diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
index 62b74e6..6066cb7 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.technology.bean.dto.TechnologyRoutingDto;
 import com.ruoyi.technology.bean.vo.TechnologyRoutingVo;
@@ -43,15 +44,7 @@
 
     @Override
     public IPage<TechnologyRoutingVo> pageTechnologyRouting(Page<TechnologyRoutingDto> page, TechnologyRoutingDto technologyRoutingDto) {
-        LambdaQueryWrapper<TechnologyRouting> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(technologyRoutingDto.getId() != null, TechnologyRouting::getId, technologyRoutingDto.getId())
-                .eq(technologyRoutingDto.getProductModelId() != null, TechnologyRouting::getProductModelId, technologyRoutingDto.getProductModelId())
-                .eq(technologyRoutingDto.getBomId() != null, TechnologyRouting::getBomId, technologyRoutingDto.getBomId())
-                .like(isNotBlank(technologyRoutingDto.getProcessRouteCode()), TechnologyRouting::getProcessRouteCode, technologyRoutingDto.getProcessRouteCode())
-                .like(isNotBlank(technologyRoutingDto.getDescription()), TechnologyRouting::getDescription, technologyRoutingDto.getDescription())
-                .orderByDesc(TechnologyRouting::getId);
-        Page<TechnologyRouting> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
-        return this.page(entityPage, queryWrapper).convert(item -> BeanUtil.copyProperties(item, TechnologyRoutingVo.class));
+        return technologyRoutingMapper.pageTechnologyRouting(page, technologyRoutingDto);
     }
 
     @Override
@@ -67,6 +60,7 @@
     public Long saveTechnologyRouting(TechnologyRouting technologyRouting) {
         String code = OrderUtils.countTodayByCreateTime(technologyRoutingMapper, "GYLX", "process_route_code");
         technologyRouting.setProcessRouteCode(code);
+        technologyRoutingMapper.insert(technologyRouting);
         // 甯﹀叆bom浜у搧缁撴瀯
         syncRoutingOperationsByBom(technologyRouting);
         return technologyRouting.getId();
@@ -111,7 +105,7 @@
                         .orderByAsc(TechnologyBomStructure::getId)
         );
         if (bomStructures.isEmpty()) {
-            return;
+            throw new ServiceException("bom浜у搧缁撴瀯涓虹┖锛�");
         }
 
         // 鍚屼竴涓� BOM 涓彲鑳介噸澶嶅紩鐢ㄧ浉鍚屽伐搴忥紝杩欓噷鎸夐娆″嚭鐜伴『搴忓幓閲嶃��
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index d310d3e..a99516f 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -74,7 +74,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://localhost:3306/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3306/product-inventory-management-new-pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: 123456
       # 浠庡簱鏁版嵁婧�
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 69ec550..c79d967 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,4 +1,4 @@
 # Spring閰嶇疆
 spring:
   profiles:
-    active: dev-pro
+    active: dev
diff --git a/src/main/resources/mapper/production/ProcessRouteItemMapper.xml b/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
index 00000f6..e060f4e 100644
--- a/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
+++ b/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
@@ -2,7 +2,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.ProcessRouteItemMapper">
 
-    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProcessRouteItem">
+    <resultMap id="basicMap" type="com.ruoyi.production2.pojo.ProcessRouteItem">
         <id property="id" column="id"/>
         <result property="routeId" column="route_id"/>
         <result property="processId" column="process_id"/>
@@ -13,7 +13,7 @@
         <result property="dragSort" column="drag_sort"/>
     </resultMap>
 
-    <select id="listProcessRouteItemDto" resultType="com.ruoyi.production.dto.ProcessRouteItemDto">
+    <select id="listProcessRouteItemDto" resultType="com.ruoyi.production2.dto.ProcessRouteItemDto">
         select pri.*,
                pr.description ,
                pp.name as process_name,
diff --git a/src/main/resources/mapper/production/ProcessRouteMapper.xml b/src/main/resources/mapper/production/ProcessRouteMapper.xml
index 51c11b4..86a4862 100644
--- a/src/main/resources/mapper/production/ProcessRouteMapper.xml
+++ b/src/main/resources/mapper/production/ProcessRouteMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.ruoyi.production.mapper.ProcessRouteMapper">
 
 
-    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProcessRoute">
+    <resultMap id="basicMap" type="com.ruoyi.production2.pojo.ProcessRoute">
             <id property="id" column="id"/>
             <result property="productModelId" column="product_model_id"/>
             <result property="description" column="description"/>
@@ -12,7 +12,7 @@
             <result property="updateTime" column="update_time"/>
     </resultMap>
 
-    <select id="pageProcessRouteDto" resultType="com.ruoyi.production.dto.ProcessRouteDto">
+    <select id="pageProcessRouteDto" resultType="com.ruoyi.production2.dto.ProcessRouteDto">
         select ps.*, p.product_name,pm.product_id,pm.model,pb.bom_no
         from process_route ps
         left join product_bom pb on ps.bom_id = pb.id
diff --git a/src/main/resources/mapper/production/ProductBomMapper.xml b/src/main/resources/mapper/production/ProductBomMapper.xml
index ec06cd3..dbc4a16 100644
--- a/src/main/resources/mapper/production/ProductBomMapper.xml
+++ b/src/main/resources/mapper/production/ProductBomMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.ruoyi.production.mapper.ProductBomMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductBom">
+    <resultMap id="BaseResultMap" type="com.ruoyi.production2.pojo.ProductBom">
         <id column="id" property="id"/>
         <result column="product_model_id" property="productModelId"/>
         <result column="bom_no" property="bomNo"/>
@@ -15,7 +15,7 @@
         <result column="update_user" property="updateUser"/>
         <result column="tenant_id" property="tenantId"/>
     </resultMap>
-    <select id="listPage" resultType="com.ruoyi.production.dto.ProductBomDto">
+    <select id="listPage" resultType="com.ruoyi.production2.dto.ProductBomDto">
         select * from (select pb.*,
         pm.model productModelName,
         p.product_name productName
@@ -36,7 +36,7 @@
             and version = #{c.version}
         </if>
     </select>
-    <select id="getById" resultType="com.ruoyi.production.dto.ProductBomDto">
+    <select id="getById" resultType="com.ruoyi.production2.dto.ProductBomDto">
         select pb.*,
                pm.model productModelName,
                p.product_name productName
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 6b993bf..452758e 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.ruoyi.production.mapper.ProductOrderMapper">
 
 
-    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductOrder">
+    <resultMap id="basicMap" type="com.ruoyi.production2.pojo.ProductOrder">
         <id property="id" column="id"/>
         <result property="productModelId" column="product_model_id"/>
         <result property="tenantId" column="tenant_id"/>
@@ -13,7 +13,7 @@
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
     </resultMap>
-    <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">
+    <select id="pageProductOrder" resultType="com.ruoyi.production2.dto.ProductOrderDto">
         select po.*,
         sl.sales_contract_no,
         sl.customer_name,
@@ -65,13 +65,13 @@
             </if>
         </where>
     </select>
-    <select id="listProcessRoute" resultType="com.ruoyi.production.pojo.ProcessRoute">
+    <select id="listProcessRoute" resultType="com.ruoyi.production2.pojo.ProcessRoute">
         select pr.*
         from process_route pr
                  left join product_model pm on pr.product_model_id = pm.id
         where pm.id = #{productModelId}
     </select>
-    <select id="listProcessBom" resultType="com.ruoyi.production.dto.ProductStructureDto">
+    <select id="listProcessBom" resultType="com.ruoyi.production2.dto.ProductStructureDto">
         select ps.id,
                ps.product_model_id,
                ps.process_id,
diff --git a/src/main/resources/mapper/production/ProductOrderMaterialMapper.xml b/src/main/resources/mapper/production/ProductOrderMaterialMapper.xml
index fc1454e..52b0952 100644
--- a/src/main/resources/mapper/production/ProductOrderMaterialMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMaterialMapper.xml
@@ -3,7 +3,7 @@
   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.ProductOrderMaterialMapper">
-    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductOrderMaterial">
+    <resultMap id="BaseResultMap" type="com.ruoyi.production2.pojo.ProductOrderMaterial">
         <id column="id" property="id" />
                 <result column="tenant_id" property="tenantId" />
                 <result column="process_name" property="processName" />
@@ -21,7 +21,7 @@
                 <result column="update_user" property="updateUser" />
 
     </resultMap>
-        <select id="pickMaterial" resultType="com.ruoyi.production.pojo.ProductOrderMaterial">
+        <select id="pickMaterial" resultType="com.ruoyi.production2.pojo.ProductOrderMaterial">
             SELECT
             si.id,
             si.qualitity,
@@ -47,7 +47,7 @@
             LEFT JOIN product p1 ON p1.id = p.parent_id
         </select>
 
-    <select id="selectLeafNode" resultType="com.ruoyi.production.dto.ProductStructureDto">
+    <select id="selectLeafNode" resultType="com.ruoyi.production2.dto.ProductStructureDto">
         SELECT
             ps.*,
             p.product_name,
@@ -66,7 +66,7 @@
             ps.id
     </select>
 
-    <select id="selectByProductModelIds" resultType="com.ruoyi.production.dto.ProductOrderMaterialDto">
+    <select id="selectByProductModelIds" resultType="com.ruoyi.production2.dto.ProductOrderMaterialDto">
         SELECT
             si.id,
             si.qualitity,
diff --git a/src/main/resources/mapper/production/ProductProcessMapper.xml b/src/main/resources/mapper/production/ProductProcessMapper.xml
index 5b1ac18..7bd596c 100644
--- a/src/main/resources/mapper/production/ProductProcessMapper.xml
+++ b/src/main/resources/mapper/production/ProductProcessMapper.xml
@@ -2,7 +2,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.ProductProcessMapper">
 
-    <select id="listPage" resultType="com.ruoyi.production.dto.ProductProcessDto">
+    <select id="listPage" resultType="com.ruoyi.production2.dto.ProductProcessDto">
         SELECT
         *
         FROM
diff --git a/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml b/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
index 16f2d48..ec8554b 100644
--- a/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
+++ b/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
@@ -3,14 +3,14 @@
 <mapper namespace="com.ruoyi.production.mapper.ProductProcessRouteItemMapper">
 
 
-    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductProcessRouteItem">
+    <resultMap id="basicMap" type="com.ruoyi.production2.pojo.ProductProcessRouteItem">
         <id property="id" column="id"/>
         <result property="productModelId" column="product_model_id"/>
         <result property="tenantId" column="tenant_id"/>
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
     </resultMap>
-    <select id="listItem" resultType="com.ruoyi.production.dto.ProductProcessRouteItemDto">
+    <select id="listItem" resultType="com.ruoyi.production2.dto.ProductProcessRouteItemDto">
         select ppri.*,
                pp.name as process_name,
                pp.is_inbound as inbound,
diff --git a/src/main/resources/mapper/production/ProductProcessRouteMapper.xml b/src/main/resources/mapper/production/ProductProcessRouteMapper.xml
index dd4809f..c58823e 100644
--- a/src/main/resources/mapper/production/ProductProcessRouteMapper.xml
+++ b/src/main/resources/mapper/production/ProductProcessRouteMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.ruoyi.production.mapper.ProductProcessRouteMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductProcessRoute">
+    <resultMap id="BaseResultMap" type="com.ruoyi.production2.pojo.ProductProcessRoute">
         <id column="id" property="id"/>
         <result column="product_model_id" property="productModelId"/>
         <result column="description" property="description"/>
@@ -14,7 +14,7 @@
         <result column="process_route_code" property="processRouteCode"/>
         <result column="product_order_id" property="productOrderId"/>
     </resultMap>
-    <select id="listMain" resultType="com.ruoyi.production.dto.ProcessRouteDto">
+    <select id="listMain" resultType="com.ruoyi.production2.dto.ProcessRouteDto">
         select ppr.*, p.product_name, pm.product_id, pm.model, pb.bom_no
         from product_process_route ppr
                  left join product_bom pb on ppr.bom_id = pb.id
diff --git a/src/main/resources/mapper/production/ProductStructureMapper.xml b/src/main/resources/mapper/production/ProductStructureMapper.xml
index e4a0795..920db52 100644
--- a/src/main/resources/mapper/production/ProductStructureMapper.xml
+++ b/src/main/resources/mapper/production/ProductStructureMapper.xml
@@ -2,7 +2,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.ProductStructureMapper">
 
-    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductStructure">
+    <resultMap id="basicMap" type="com.ruoyi.production2.pojo.ProductStructure">
         <id property="id" column="id"/>
         <result property="productModelId" column="product_model_id"/>
         <result property="processId" column="process_id"/>
@@ -11,7 +11,7 @@
         <result property="unit" column="unit"/>
         <result property="tenantId" column="tenant_id"/>
     </resultMap>
-    <select id="listBybomId" resultType="com.ruoyi.production.dto.ProductStructureDto">
+    <select id="listBybomId" resultType="com.ruoyi.production2.dto.ProductStructureDto">
         select ps.*,
                p.product_name,
                pp.name as  process_name,
@@ -25,7 +25,7 @@
         where ps.bom_id = #{bomId}
         order by ps.id
     </select>
-    <select id="listBybomAndProcess" resultType="com.ruoyi.production.dto.ProductStructureDto">
+    <select id="listBybomAndProcess" resultType="com.ruoyi.production2.dto.ProductStructureDto">
         select ps.*,
                p.product_name,
                pp.name as  process_name,
diff --git a/src/main/resources/mapper/production/ProductWorkOrderFileMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderFileMapper.xml
index ae5686b..d46d848 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderFileMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderFileMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.ruoyi.production.mapper.ProductWorkOrderFileMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductWorkOrderFile">
+    <resultMap id="BaseResultMap" type="com.ruoyi.production2.pojo.ProductWorkOrderFile">
         <id column="id" property="id" />
         <result column="work_order_id" property="workOrderId" />
         <result column="name" property="name" />
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index ab3911e..15466a0 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.ProductWorkOrderMapper">
 
-    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductWorkOrder">
+    <resultMap id="BaseResultMap" type="com.ruoyi.production2.pojo.ProductWorkOrder">
         <result column="id" property="id"/>
         <result column="product_process_route_item_id" property="productProcessRouteItemId"/>
         <result column="create_time" property="createTime"/>
@@ -18,7 +18,7 @@
         <result column="actualEndTime" property="actualEndTime"/>
     </resultMap>
 
-    <select id="pageProductWorkOrder" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
+    <select id="pageProductWorkOrder" resultType="com.ruoyi.production2.dto.ProductWorkOrderDto">
         SELECT
         pwo.*,
         pp.NAME as processName,
@@ -49,7 +49,7 @@
                and po.nps_no like concat('%',#{c.productOrderNpsNo},'%')
             </if>
     </select>
-    <select id="getProductWorkOrderFlowCard" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
+    <select id="getProductWorkOrderFlowCard" resultType="com.ruoyi.production2.dto.ProductWorkOrderDto">
         SELECT
         pwo.*,
         pp.NAME as processName,
@@ -76,7 +76,7 @@
                 p.product_name,
                 po.nps_no
     </select>
-    <select id="selectWorkOrderStartStats" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
+    <select id="selectWorkOrderStartStats" resultType="com.ruoyi.production2.dto.ProductWorkOrderDto">
         SELECT
             id,
             actual_start_time AS planStartTime,
@@ -87,7 +87,7 @@
             actual_start_time &gt;= #{startDate}
             AND actual_start_time &lt;= #{endDate}
     </select>
-    <select id="selectMax" resultType="com.ruoyi.production.pojo.ProductWorkOrder">
+    <select id="selectMax" resultType="com.ruoyi.production2.pojo.ProductWorkOrder">
         SELECT SUBSTRING(work_order_no, 3) as work_order_no
         FROM product_work_order
         WHERE SUBSTRING(work_order_no, 3) like concat(#{datePrefix},'%')
diff --git a/src/main/resources/mapper/production/ProductionAccountMapper.xml b/src/main/resources/mapper/production/ProductionAccountMapper.xml
new file mode 100644
index 0000000..b1c01e6
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionAccountMapper.xml
@@ -0,0 +1,24 @@
+<?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.production.mapper.ProductionAccountMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionAccount">
+        <id column="id" property="id" />
+        <result column="sales_ledger_id" property="salesLedgerId" />
+        <result column="sales_ledger_product_id" property="salesLedgerProductId" />
+        <result column="production_product_main_id" property="productionProductMainId" />
+        <result column="scheduling_user_id" property="schedulingUserId" />
+        <result column="scheduling_user_name" property="schedulingUserName" />
+        <result column="finished_num" property="finishedNum" />
+        <result column="work_hours" property="workHours" />
+        <result column="technology_operation_name" property="technologyOperationName" />
+        <result column="scheduling_date" property="schedulingDate" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionBomStructureMapper.xml b/src/main/resources/mapper/production/ProductionBomStructureMapper.xml
new file mode 100644
index 0000000..1f70c48
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionBomStructureMapper.xml
@@ -0,0 +1,20 @@
+<?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.production.mapper.ProductionBomStructureMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionBomStructure">
+        <id column="id" property="id" />
+        <result column="parent_id" property="parentId" />
+        <result column="production_order_id" property="productionOrderId" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="technology_operation_id" property="technologyOperationId" />
+        <result column="production_order_bom_id" property="productionOrderBomId" />
+        <result column="unit_quantity" property="unitQuantity" />
+        <result column="demanded_quantity" property="demandedQuantity" />
+        <result column="unit" property="unit" />
+        <result column="create_user" property="createUser" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOperationMainParamMapper.xml b/src/main/resources/mapper/production/ProductionOperationMainParamMapper.xml
new file mode 100644
index 0000000..57be5b2
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOperationMainParamMapper.xml
@@ -0,0 +1,30 @@
+<?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.production.mapper.ProductionOperationMainParamMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOperationMainParam">
+        <id column="id" property="id" />
+        <result column="technology_routing_operation_param_id" property="technologyRoutingOperationParamId" />
+        <result column="param_code" property="paramCode" />
+        <result column="param_name" property="paramName" />
+        <result column="param_type" property="paramType" />
+        <result column="param_format" property="paramFormat" />
+        <result column="unit" property="unit" />
+        <result column="is_required" property="isRequired" />
+        <result column="remark" property="remark" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="technology_param_id" property="technologyParamId" />
+        <result column="technology_operation_id" property="technologyOperationId" />
+        <result column="technology_operation_param_id" property="technologyOperationParamId" />
+        <result column="technology_routing_operation_id" property="technologyRoutingOperationId" />
+        <result column="standard_value" property="standardValue" />
+        <result column="value" property="value" />
+        <result column="production_order_routing_operation_param_id" property="productionOrderRoutingOperationParamId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml b/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
new file mode 100644
index 0000000..5b67bf6
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
@@ -0,0 +1,24 @@
+<?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.production.mapper.ProductionOperationTaskMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOperationTask">
+        <id column="id" property="id" />
+        <result column="technology_routing_operation_id" property="technologyRoutingOperationId" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="work_order_no" property="workOrderNo" />
+        <result column="plan_start_time" property="planStartTime" />
+        <result column="plan_end_time" property="planEndTime" />
+        <result column="actual_start_time" property="actualStartTime" />
+        <result column="actual_end_time" property="actualEndTime" />
+        <result column="status" property="status" />
+        <result column="production_order_id" property="productionOrderId" />
+        <result column="plan_quantity" property="planQuantity" />
+        <result column="complete_quantity" property="completeQuantity" />
+        <result column="create_user" property="createUser" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOrderBomMapper.xml b/src/main/resources/mapper/production/ProductionOrderBomMapper.xml
new file mode 100644
index 0000000..eddaa63
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOrderBomMapper.xml
@@ -0,0 +1,20 @@
+<?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.production.mapper.ProductionOrderBomMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOrderBom">
+        <id column="id" property="id" />
+        <result column="parent_id" property="parentId" />
+        <result column="production_order_id" property="productionOrderId" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="technology_operation_id" property="technologyOperationId" />
+        <result column="unit_quantity" property="unitQuantity" />
+        <result column="demanded_quantity" property="demandedQuantity" />
+        <result column="unit" property="unit" />
+        <result column="bom_id" property="bomId" />
+        <result column="create_user" property="createUser" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOrderMapper.xml b/src/main/resources/mapper/production/ProductionOrderMapper.xml
new file mode 100644
index 0000000..c52e291
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -0,0 +1,24 @@
+<?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.production.mapper.ProductionOrderMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOrder">
+        <id column="id" property="id" />
+        <result column="sales_ledger_id" property="salesLedgerId" />
+        <result column="production_plan_ids" property="productionPlanIds" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="nps_no" property="npsNo" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="technology_routing_id" property="technologyRoutingId" />
+        <result column="quantity" property="quantity" />
+        <result column="complete_quantity" property="completeQuantity" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="sale_ledger_product_id" property="saleLedgerProductId" />
+        <result column="create_user" property="createUser" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOrderPickMapper.xml b/src/main/resources/mapper/production/ProductionOrderPickMapper.xml
new file mode 100644
index 0000000..c4b11f8
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOrderPickMapper.xml
@@ -0,0 +1,19 @@
+<?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.production.mapper.ProductionOrderPickMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOrderPick">
+        <id column="id" property="id" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="quantity" property="quantity" />
+        <result column="batch_no" property="batchNo" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="production_order_id" property="productionOrderId" />
+        <result column="remark" property="remark" />
+        <result column="create_user" property="createUser" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOrderPickRecordMapper.xml b/src/main/resources/mapper/production/ProductionOrderPickRecordMapper.xml
new file mode 100644
index 0000000..37c1285
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOrderPickRecordMapper.xml
@@ -0,0 +1,24 @@
+<?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.production.mapper.ProductionOrderPickRecordMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOrderPickRecord">
+        <id column="id" property="id" />
+        <result column="pick_id" property="pickId" />
+        <result column="production_order_id" property="productionOrderId" />
+        <result column="production_operation_task_id" property="productionOperationTaskId" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="batch_no" property="batchNo" />
+        <result column="pick_quantity" property="pickQuantity" />
+        <result column="before_quantity" property="beforeQuantity" />
+        <result column="after_quantity" property="afterQuantity" />
+        <result column="pick_type" property="pickType" />
+        <result column="remark" property="remark" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="create_user" property="createUser" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOrderRoutingMapper.xml b/src/main/resources/mapper/production/ProductionOrderRoutingMapper.xml
new file mode 100644
index 0000000..40be168
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOrderRoutingMapper.xml
@@ -0,0 +1,20 @@
+<?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.production.mapper.ProductionOrderRoutingMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOrderRouting">
+        <id column="id" property="id" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="production_order_id" property="productionOrderId" />
+        <result column="description" property="description" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="technology_routing_id" property="technologyRoutingId" />
+        <result column="process_route_code" property="processRouteCode" />
+        <result column="bom_id" property="bomId" />
+        <result column="create_user" property="createUser" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml b/src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml
new file mode 100644
index 0000000..d47c4e9
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml
@@ -0,0 +1,20 @@
+<?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.production.mapper.ProductionOrderRoutingOperationMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOrderRoutingOperation">
+        <id column="id" property="id" />
+        <result column="production_order_id" property="productionOrderId" />
+        <result column="technology_routing_operation_id" property="technologyRoutingOperationId" />
+        <result column="technology_routing_id" property="technologyRoutingId" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="drag_sort" property="dragSort" />
+        <result column="is_quality" property="isQuality" />
+        <result column="create_user" property="createUser" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionOrderRoutingOperationParamMapper.xml b/src/main/resources/mapper/production/ProductionOrderRoutingOperationParamMapper.xml
new file mode 100644
index 0000000..ce337aa
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionOrderRoutingOperationParamMapper.xml
@@ -0,0 +1,29 @@
+<?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.production.mapper.ProductionOrderRoutingOperationParamMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam">
+        <id column="id" property="id" />
+        <result column="production_order_id" property="productionOrderId" />
+        <result column="technology_routing_operation_param_id" property="technologyRoutingOperationParamId" />
+        <result column="param_code" property="paramCode" />
+        <result column="param_name" property="paramName" />
+        <result column="param_type" property="paramType" />
+        <result column="param_format" property="paramFormat" />
+        <result column="unit" property="unit" />
+        <result column="is_required" property="isRequired" />
+        <result column="remark" property="remark" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="param_id" property="paramId" />
+        <result column="technology_operation_id" property="technologyOperationId" />
+        <result column="technology_operation_param_id" property="technologyOperationParamId" />
+        <result column="technology_routing_operation_id" property="technologyRoutingOperationId" />
+        <result column="standard_value" property="standardValue" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionPlanMapper.xml b/src/main/resources/mapper/production/ProductionPlanMapper.xml
new file mode 100644
index 0000000..3e3a683
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionPlanMapper.xml
@@ -0,0 +1,24 @@
+<?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.production.mapper.ProductionPlanMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionPlan">
+        <id column="id" property="id" />
+        <result column="mps_no" property="mpsNo" />
+        <result column="required_date" property="requiredDate" />
+        <result column="remark" property="remark" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="create_user" property="createUser" />
+        <result column="update_user" property="updateUser" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="qty_required" property="qtyRequired" />
+        <result column="state" property="state" />
+        <result column="issued" property="issued" />
+        <result column="source" property="source" />
+        <result column="is_audit" property="isAudit" />
+        <result column="promised_delivery_date" property="promisedDeliveryDate" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionProductInputMapper.xml b/src/main/resources/mapper/production/ProductionProductInputMapper.xml
index 65e2b96..236aa2b 100644
--- a/src/main/resources/mapper/production/ProductionProductInputMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -1,78 +1,17 @@
-<?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">
+<?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.production.mapper.ProductionProductInputMapper">
 
-    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductInput">
-        <id property="id" column="id"/>
-        <result property="productMainId" column="product_main_id"/>
-        <result property="productModelId" column="product_model_id"/>
-        <result property="quantity" column="quantity"/>
-        <result property="tenantId" column="tenant_id"/>
-        <result property="createTime" column="create_time"/>
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionProductInput">
+        <id column="id" property="id" />
+        <result column="input_quantity" property="inputQuantity" />
+        <result column="production_product_main_id" property="productionProductMainId" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="update_time" property="updateTime" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
     </resultMap>
-    <select id="listPageProductionProductInputDto" resultType="com.ruoyi.production.dto.ProductionProductInputDto">
-        select ppi.*,
-        pm.model as model,
-        ppm.product_no as productNo,
-        p.product_name,
-        pm.unit
-        from
-        production_product_input ppi
-        left join production_product_main ppm on ppm.id = ppi.product_main_id
-        left join product_model pm on pm.id = ppi.product_model_id
-        left join product p on p.id = pm.product_id
-        <where>
-            <if test="c.productMainId != null and c.productMainId > 0">
-                and ppm.id = #{c.productMainId}
-            </if>
-        </where>
-        order by ppi.id
-    </select>
 
-    <delete id="deleteByProductMainIds" parameterType="java.util.List">
-        DELETE FROM production_product_input
-        WHERE product_main_id IN
-        <foreach collection="productMainIds" item="id" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-
-    </delete>
-
-    <select id="selectInputStats" resultType="java.util.Map">
-        SELECT
-        DATE_FORMAT(ppi.create_time, '%Y-%m-%d') AS date,
-        -- 鎶ュ伐鏁伴噺 * 鏈�灏忕郴鏁�
-        SUM(ppi.quantity * IFNULL(distinct_ps.unit_quantity, 1)) AS quantity
-        FROM production_product_input ppi
-        INNER JOIN production_product_main ppm ON ppm.id = ppi.product_main_id
-        INNER JOIN product_process_route_item ppri ON ppri.id = ppm.product_process_route_item_id
-        INNER JOIN product_process_route ppr ON ppr.id = ppri.product_route_id
-        INNER JOIN product_model pm ON pm.id = ppi.product_model_id
-        INNER JOIN (
-        SELECT
-        bom_id,
-        process_id,
-        product_model_id,
-        CAST(SUBSTRING_INDEX(GROUP_CONCAT(unit_quantity ORDER BY id ASC), ',', 1) AS DECIMAL(16, 4)) AS unit_quantity
-        FROM product_structure
-        GROUP BY bom_id, process_id, product_model_id
-        ) distinct_ps ON distinct_ps.bom_id = ppr.bom_id
-        AND distinct_ps.process_id = ppri.process_id
-        AND distinct_ps.product_model_id = ppi.product_model_id
-        <where>
-            <if test="startDate != null">
-                AND ppi.create_time &gt;= #{startDate}
-            </if>
-            <if test="endDate != null">
-                AND ppi.create_time &lt;= #{endDate}
-            </if>
-        </where>
-        GROUP BY
-        DATE_FORMAT(ppi.create_time, '%Y-%m-%d'),
-        pm.id,
-        pm.model
-        ORDER BY
-        date DESC,
-        pm.id ASC
-    </select>
 </mapper>
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index a122e90..d108498 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -1,121 +1,17 @@
-<?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">
+<?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.production.mapper.ProductionProductMainMapper">
 
-    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductMain">
-        <id property="id" column="id"/>
-        <result property="productNo" column="product_no"/>
-        <result property="userId" column="user_id"/>
-        <result property="workOrderId" column="work_order_id"/>
-        <result property="tenantId" column="tenant_id"/>
-        <result property="createTime" column="create_time"/>
-        <result property="status" column="status"/>
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionProductMain">
+        <id column="id" property="id" />
+        <result column="product_no" property="productNo" />
+        <result column="production_operation_task_id" property="productionOperationTaskId" />
+        <result column="dept_id" property="deptId" />
+        <result column="update_time" property="updateTime" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
     </resultMap>
 
-    <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto">
-        select ppm.*,
-        pwo.work_order_no as workOrderNo,
-        pwo.status as workOrderStatus,
-        u.nick_name as nickName,
-        p.product_name as productName,
-        pp.name as process,
-        pm.model as productModelName,
-        ppo.quantity,
-        ppo.scrap_qty,
-        pm.unit,
-        sl.sales_contract_no salesContractNo
-        from
-        production_product_main ppm
-        left join product_work_order pwo on pwo.id = ppm.work_order_id
-        left join product_process_route_item ppri on ppri.id = pwo.product_process_route_item_id
-        left join product_process pp on pp.id = ppri.process_id
-        left join product_order po on po.id = pwo.product_order_id
-        left join production_product_output ppo on ppm.id = ppo.product_main_id
-        left join product_model pm on pm.id = ppo.product_model_id
-        left join product p on p.id = pm.product_id
-        left join sales_ledger sl on sl.id = po.sales_ledger_id
-        left join sys_user u on u.user_id = ppm.user_id
-        <where>
-            <if test="c.nickName != null and c.nickName != ''">
-                and u.nick_name like concat('%',#{c.nickName},'%')
-            </if>
-            <if test="c.workOrderNo != null and c.workOrderNo != ''">
-                and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
-            </if>
-            <if test="c.workOrderStatus != null and c.workOrderStatus != ''">
-                and pwo.status = #{c.workOrderStatus}
-            </if>
-            <if test="c.status != null and c.status != ''">
-                and ppm.status = #{c.status}
-            </if>
-        </where>
-        order by ppm.id
-
-    </select>
-    <select id="getOrderByMainId" resultType="com.ruoyi.production.pojo.ProductOrder">
-        select po.*
-        from product_order po
-                 left join product_work_order pwo on po.id = pwo.product_order_id
-                 left join production_product_main pm on work_order_id = pwo.id
-        where pm.id = #{productMainId}
-    </select>
-    <select id="listProductionDetails" resultType="com.ruoyi.production.dto.ProductionProductMainDto">
-        SELECT
-        slpa.scheduling_date,
-        slpa.scheduling_user_name,
-        sl.sales_contract_no,
-        sl.customer_name,
-        p.product_name,
-        pm.model as product_model_name,
-        pm.unit,
-        slpa.process,
-        ppo.quantity,
-        slpa.work_hours,
-        slpa.work_hours * slpa.finished_num AS wages
-        FROM
-        production_product_main ppm
-        LEFT JOIN sales_ledger_production_accounting slpa ON slpa.product_main_id = ppm.id
-        LEFT JOIN production_product_output ppo ON ppm.id = ppo.product_main_id
-        LEFT JOIN product_work_order pwo ON pwo.id = ppm.work_order_id
-        LEFT JOIN product_order po ON po.id = pwo.product_order_id
-        LEFT JOIN process_route pr ON pr.id = po.route_id
-        LEFT JOIN product_model pm ON po.product_model_id = pm.id
-        LEFT JOIN product p ON p.id = pm.product_id
-        LEFT JOIN sales_ledger sl ON po.sales_ledger_id = sl.id
-        <where>
-            <if test="ew.schedulingUserName != null and ew.schedulingUserName !=''">
-                and slpa.scheduling_user_name = #{ew.schedulingUserName}
-            </if>
-            <if test="ew.entryDate != null " >
-                and slpa.scheduling_date >= #{ew.entryDate}
-                and slpa.scheduling_date &lt; DATE_ADD(#{ew.entryDate}, INTERVAL 1 DAY)
-            </if>
-            <if test="ew.entryDateStart != null and ew.entryDateEnd != null" >
-                and slpa.scheduling_date >= #{ew.entryDateStart}
-                and slpa.scheduling_date &lt; date_add(#{ew.entryDateEnd}, INTERVAL 1 DAY)
-            </if>
-        </where>
-    </select>
-    <select id="listMain" resultType="java.lang.Long">
-        SELECT ppm.id FROM production_product_main ppm
-            left join product_work_order pwo on pwo.id = ppm.work_order_id
-                  left join product_order po on po.id = pwo.product_order_id
-                  left join sales_ledger sl on sl.id = po.sales_ledger_id
-        <where>
-            <if test="idList != null and idList.size() > 0">
-                and sl.id in
-                <foreach item="id" collection="idList" open="(" separator="," close=")">
-                    #{id}
-                </foreach>
-            </if>
-        </where>
-    </select>
-
-    <delete id="deleteByWorkOrderIds" parameterType="java.util.List">
-        DELETE FROM production_product_main
-        WHERE work_order_id IN
-        <foreach collection="workOrderIds" item="id" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
 </mapper>
diff --git a/src/main/resources/mapper/production/ProductionProductOutputMapper.xml b/src/main/resources/mapper/production/ProductionProductOutputMapper.xml
index 3b44135..0656e91 100644
--- a/src/main/resources/mapper/production/ProductionProductOutputMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductOutputMapper.xml
@@ -1,61 +1,18 @@
-<?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">
+<?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.production.mapper.ProductionProductOutputMapper">
 
-    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductOutput">
-        <id property="id" column="id"/>
-        <result property="productMainId" column="product_main_id"/>
-        <result property="productModelId" column="product_model_id"/>
-        <result property="quantity" column="quantity"/>
-        <result property="tenantId" column="tenant_id"/>
-        <result property="createTime" column="create_time"/>
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionProductOutput">
+        <id column="id" property="id" />
+        <result column="production_product_main_id" property="productionProductMainId" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="quantity" property="quantity" />
+        <result column="scrap_qty" property="scrapQty" />
+        <result column="update_time" property="updateTime" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
     </resultMap>
 
-    <select id="listPageProductionProductOutputDto" resultType="com.ruoyi.production.dto.ProductionProductOutputDto">
-        select ppo.*,
-        pm.model as model,
-        ppm.product_no as productNo
-        from
-        production_product_output ppo
-        left join production_product_main ppm on ppm.id = ppo.product_main_id
-        left join product_model pm on pm.id = ppo.product_model_id
-        <where>
-            <if test="c.productMainId != null and c.productMainId > 0">
-                and ppm.id = #{c.productMainId}
-            </if>
-        </where>
-        order by ppo.id
-    </select>
-
-    <delete id="deleteByProductMainIds" parameterType="java.util.List">
-        DELETE FROM production_product_output
-        WHERE product_main_id IN
-        <foreach collection="productMainIds" item="id" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </delete>
-    <select id="selectOutputStats" resultType="com.ruoyi.production.dto.ProductionProductOutputDto">
-        SELECT
-            create_time,
-            quantity,
-            scrap_qty
-        FROM
-            production_product_output
-        WHERE
-            create_time &gt;= #{startDate}
-            AND create_time &lt;= #{endDate}
-    </select>
-
-    <select id="selectDailyOutputStats" resultType="java.util.Map">
-        SELECT
-            DATE_FORMAT(create_time, '%Y-%m-%d') as date,
-            SUM(quantity-scrap_qty) as quantity
-        FROM
-            production_product_output
-        WHERE
-            create_time &gt;= #{startDate}
-            AND create_time &lt;= #{endDate}
-        GROUP BY
-            DATE_FORMAT(create_time, '%Y-%m-%d')
-    </select>
 </mapper>
diff --git a/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml b/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
index 8a32b42..f2e460a 100644
--- a/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
+++ b/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
@@ -2,7 +2,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper">
 
-    <select id="listPage" resultType="com.ruoyi.production.dto.SalesLedgerProductionAccountingDto">
+    <select id="listPage" resultType="com.ruoyi.production2.dto.SalesLedgerProductionAccountingDto">
         SELECT
         t4.id,
         t4.finished_num * t4.work_hours as wages,
@@ -51,7 +51,7 @@
         order by t4.scheduling_date desc
     </select>
     <select id="pageProductionAccounting"
-            resultType="com.ruoyi.production.dto.SalesLedgerProductionAccountingDto">
+            resultType="com.ruoyi.production2.dto.SalesLedgerProductionAccountingDto">
         SELECT
         slpa.scheduling_user_id,
         slpa.scheduling_user_name,
@@ -104,7 +104,7 @@
         GROUP BY DATE(ppout.create_time)
         ORDER BY DATE(ppout.create_time);
     </select>
-    <select id="getByUserId" resultType="com.ruoyi.production.dto.UserAccountDto">
+    <select id="getByUserId" resultType="com.ruoyi.production2.dto.UserAccountDto">
         select
             slpa.scheduling_user_id as user_id,
             pp.type,
diff --git a/src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml b/src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml
index 4cff920..92198b5 100644
--- a/src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml
+++ b/src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml
@@ -2,7 +2,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.SalesLedgerSchedulingMapper">
 
-    <select id="listPage" resultType="com.ruoyi.production.dto.SalesLedgerSchedulingDto">
+    <select id="listPage" resultType="com.ruoyi.production2.dto.SalesLedgerSchedulingDto">
         SELECT
         T2.id as salesLedgerProductId,
         T1.id as salesLedgerId,
@@ -48,7 +48,7 @@
         </if>
         order by T1.entry_date desc
     </select>
-    <select id="list" resultType="com.ruoyi.production.dto.SalesLedgerSchedulingDto">
+    <select id="list" resultType="com.ruoyi.production2.dto.SalesLedgerSchedulingDto">
         SELECT
             T2.id,
             ifNull(sum(t3.scheduling_num),0) AS schedulingNum,
@@ -68,7 +68,7 @@
         where T1.id is not null and T2.type = 1
         GROUP BY T2.id
     </select>
-    <select id="listPageProcess" resultType="com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto">
+    <select id="listPageProcess" resultType="com.ruoyi.production2.dto.SalesLedgerSchedulingProcessDto">
         SELECT
         t3.id as salesLedgerProductId,
         T1.id as salesLedgerId,
diff --git a/src/main/resources/mapper/production/SalesLedgerWorkMapper.xml b/src/main/resources/mapper/production/SalesLedgerWorkMapper.xml
index 4ec771f..974220b 100644
--- a/src/main/resources/mapper/production/SalesLedgerWorkMapper.xml
+++ b/src/main/resources/mapper/production/SalesLedgerWorkMapper.xml
@@ -2,7 +2,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.SalesLedgerWorkMapper">
 
-    <select id="listPage" resultType="com.ruoyi.production.dto.SalesLedgerWorkDto">
+    <select id="listPage" resultType="com.ruoyi.production2.dto.SalesLedgerWorkDto">
         SELECT
         t4.id,
         t4.status,
diff --git a/src/main/resources/mapper/technology/TechnologyRoutingMapper.xml b/src/main/resources/mapper/technology/TechnologyRoutingMapper.xml
index fcf2890..231905b 100644
--- a/src/main/resources/mapper/technology/TechnologyRoutingMapper.xml
+++ b/src/main/resources/mapper/technology/TechnologyRoutingMapper.xml
@@ -2,19 +2,66 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.technology.mapper.TechnologyRoutingMapper">
 
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
     <resultMap id="BaseResultMap" type="com.ruoyi.technology.pojo.TechnologyRouting">
-        <id column="id" property="id" />
-        <result column="product_model_id" property="productModelId" />
-        <result column="description" property="description" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="process_route_code" property="processRouteCode" />
-        <result column="bom_id" property="bomId" />
-        <result column="create_user" property="createUser" />
-        <result column="dept_id" property="deptId" />
+        <id column="id" property="id"/>
+        <result column="product_model_id" property="productModelId"/>
+        <result column="description" property="description"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="process_route_code" property="processRouteCode"/>
+        <result column="bom_id" property="bomId"/>
+        <result column="create_user" property="createUser"/>
+        <result column="dept_id" property="deptId"/>
     </resultMap>
 
+    <select id="pageTechnologyRouting" resultType="com.ruoyi.technology.bean.vo.TechnologyRoutingVo">
+        select tr.id,
+               tr.product_model_id as productModelId,
+               tr.description,
+               tr.create_time as createTime,
+               tr.update_time as updateTime,
+               tr.process_route_code as processRouteCode,
+               tr.bom_id as bomId,
+               tr.create_user as createUser,
+               tr.dept_id as deptId,
+               p.product_name as productName,
+               pm.model,
+               tb.bom_no as bomNo
+        from technology_routing tr
+        left join product_model pm on tr.product_model_id = pm.id
+        left join product p on pm.product_id = p.id
+        left join technology_bom tb on tr.bom_id = tb.id
+        <where>
+            <if test="c != null">
+                <if test="c.id != null">
+                    and tr.id = #{c.id}
+                </if>
+                <if test="c.productModelId != null">
+                    and tr.product_model_id = #{c.productModelId}
+                </if>
+                <if test="c.bomId != null">
+                    and tr.bom_id = #{c.bomId}
+                </if>
+                <if test="c.processRouteCode != null and c.processRouteCode != ''">
+                    and tr.process_route_code like concat('%', #{c.processRouteCode}, '%')
+                </if>
+                <if test="c.description != null and c.description != ''">
+                    and tr.description like concat('%', #{c.description}, '%')
+                </if>
+                <if test="c.model != null and c.model != ''">
+                    and pm.model like concat('%', #{c.model}, '%')
+                </if>
+                <if test="c.productName != null and c.productName != ''">
+                    and p.product_name like concat('%', #{c.productName}, '%')
+                </if>
+                <if test="c.bomNo != null and c.bomNo != ''">
+                    and tb.bom_no like concat('%', #{c.bomNo}, '%')
+                </if>
+            </if>
+        </where>
+        order by tr.id desc
+    </select>
+
     <update id="updateProductModelByBomId">
         update technology_routing
         set product_model_id = #{productModelId}

--
Gitblit v1.9.3