From 47596a855703fbb57e9c4feaf05b601ec07854ef Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期六, 09 五月 2026 11:41:58 +0800
Subject: [PATCH] fix:1.退料审核 2.工序加上工时-生产订单-报工填写 3.核算加上工时计算

---
 src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperation.java               |    3 
 src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java                    |    3 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |    1 
 src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml        |    1 
 src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java             |   40 +++++-----
 src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml             |    1 
 src/main/resources/mapper/production/ProductionOperationTaskMapper.xml                |    1 
 src/main/java/com/ruoyi/production/bean/vo/ProductionOrderWorkOrderDetailVo.java      |    7 +
 src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java                    |    4 +
 src/main/java/com/ruoyi/production/bean/vo/ProductionAccountVo.java                   |   35 ++++----
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java     |   16 ++-
 src/main/resources/mapper/production/ProductionProductMainMapper.xml                  |   12 ++-
 src/main/resources/mapper/production/ProductionAccountMapper.xml                      |   12 ++-
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java   |   27 ++++++
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java       |   10 +-
 src/main/resources/mapper/production/ProductionPlanMapper.xml                         |    3 
 src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java             |    3 
 src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDto.java                 |   30 +++---
 src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java          |    3 
 src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java                      |    2 
 20 files changed, 142 insertions(+), 72 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDto.java
index 91b97ef..5bd2fd1 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDto.java
@@ -9,54 +9,54 @@
 import java.time.LocalDate;
 
 @Data
-@Schema(name = "ProductionAccountDto", description = "production account query dto")
+@Schema(name = "ProductionAccountDto", description = "鐢熶骇鏍哥畻鏌ヨ鍙傛暟")
 public class ProductionAccountDto extends ProductionAccount {
 
-    @Schema(description = "sales contract no")
+    @Schema(description = "閿�鍞悎鍚屽彿")
     private String salesContractNo;
 
-    @Schema(description = "customer contract no")
+    @Schema(description = "瀹㈡埛鍚堝悓鍙�")
     private String customerContractNo;
 
-    @Schema(description = "project name")
+    @Schema(description = "椤圭洰鍚嶇О")
     private String projectName;
 
-    @Schema(description = "customer name")
+    @Schema(description = "瀹㈡埛鍚嶇О")
     private String customerName;
 
-    @Schema(description = "product category")
+    @Schema(description = "浜у搧绫诲埆")
     private String productCategory;
 
-    @Schema(description = "specification model")
+    @Schema(description = "瑙勬牸鍨嬪彿")
     private String specificationModel;
 
-    @Schema(description = "scheduling user id")
+    @Schema(description = "鎺掍骇浜哄憳ID")
     private Long schedulingUserId;
 
-    @Schema(description = "scheduling user name")
+    @Schema(description = "鎺掍骇浜哄憳鍚嶇О")
     private String schedulingUserName;
 
-    @Schema(description = "process")
+    @Schema(description = "宸ュ簭")
     private String process;
 
-    @Schema(description = "date type(day/month)")
+    @Schema(description = "鏃ユ湡绫诲瀷锛堟寜澶�/鎸夋湀锛�")
     private String dateType;
 
-    @Schema(description = "day query date")
+    @Schema(description = "鎸夊ぉ鏌ヨ鏃ユ湡")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate entryDate;
 
-    @Schema(description = "date range")
+    @Schema(description = "鏃ユ湡鑼冨洿")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate[] dateRange;
 
-    @Schema(description = "start date")
+    @Schema(description = "寮�濮嬫棩鏈�")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate entryDateStart;
 
-    @Schema(description = "end date")
+    @Schema(description = "缁撴潫鏃ユ湡")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate entryDateEnd;
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
index 60ab542..c4363a8 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
@@ -52,4 +52,7 @@
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate requiredDateEnd;
 
+    @Schema(description = "閿�鍞悎鍚屽彿")
+    private String salesContractNo;
+
 }
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
index 9fc8d86..cbac4b5 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
@@ -12,63 +12,63 @@
 
 @EqualsAndHashCode(callSuper = true)
 @Data
-@Schema(name = "ProductionProductMainDto", description = "production report query dto")
+@Schema(name = "ProductionProductMainDto", description = "鐢熶骇鎶ュ伐鏌ヨ鍙傛暟")
 public class ProductionProductMainDto extends ProductionProductMain {
 
-    @Schema(description = "product process route item id")
+    @Schema(description = "浜у搧宸ヨ壓璺嚎宸ュ簭ID")
     private Long productProcessRouteItemId;
 
-    @Schema(description = "production report id")
+    @Schema(description = "鎶ュ伐ID")
     private Long productMainId;
 
-    @Schema(description = "tenant id")
+    @Schema(description = "绉熸埛ID")
     private Long tenantId;
 
-    @Schema(description = "work order no")
+    @Schema(description = "宸ュ崟缂栧彿")
     private String workOrderNo;
 
-    @Schema(description = "work order status")
+    @Schema(description = "宸ュ崟鐘舵��")
     private String workOrderStatus;
 
-    @Schema(description = "nick name")
+    @Schema(description = "鏄电О")
     private String nickName;
 
-    @Schema(description = "quantity")
+    @Schema(description = "鏁伴噺")
     private BigDecimal quantity;
 
-    @Schema(description = "scrap quantity")
+    @Schema(description = "鎶ュ簾鏁伴噺")
     private BigDecimal scrapQty;
 
-    @Schema(description = "product name")
+    @Schema(description = "浜у搧鍚嶇О")
     private String productName;
 
-    @Schema(description = "product model name")
+    @Schema(description = "浜у搧瑙勬牸鍨嬪彿")
     private String productModelName;
 
-    @Schema(description = "unit")
+    @Schema(description = "鍗曚綅")
     private String unit;
 
-    @Schema(description = "sales contract no")
+    @Schema(description = "閿�鍞悎鍚屽彿")
     private String salesContractNo;
 
-    @Schema(description = "scheduling date")
+    @Schema(description = "鎺掍骇鏃ユ湡")
     private LocalDate schedulingDate;
 
-    @Schema(description = "scheduling user name")
+    @Schema(description = "鎺掍骇浜哄憳鍚嶇О")
     private String schedulingUserName;
 
-    @Schema(description = "customer name")
+    @Schema(description = "瀹㈡埛鍚嶇О")
     private String customerName;
 
-    @Schema(description = "process")
+    @Schema(description = "宸ュ簭")
     private String process;
 
-    @Schema(description = "salary quota")
+    @Schema(description = "宸ヨ祫瀹氶")
     private BigDecimal workHours;
 
-    @Schema(description = "wages")
+    @Schema(description = "宸ヨ祫")
     private BigDecimal wages;
 
-    @Schema(description = "operation param list")
+    @Schema(description = "宸ュ簭鍙傛暟鍒楄〃")
     private List<ProductionOrderRoutingOperationParam> productionOperationParamList;
 }
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionAccountVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionAccountVo.java
index 5d86e7c..68bcb23 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionAccountVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionAccountVo.java
@@ -8,52 +8,55 @@
 import java.time.LocalDate;
 
 @Data
-@Schema(name = "ProductionAccountVo", description = "production account page result")
+@Schema(name = "ProductionAccountVo", description = "鐢熶骇鏍哥畻鍒嗛〉缁撴灉")
 public class ProductionAccountVo {
 
-    @Schema(description = "customer contract no")
+    @Schema(description = "瀹㈡埛鍚堝悓鍙�")
     private String customerContractNo;
 
-    @Schema(description = "project name")
+    @Schema(description = "椤圭洰鍚嶇О")
     private String projectName;
 
-    @Schema(description = "customer name")
+    @Schema(description = "瀹㈡埛鍚嶇О")
     private String customerName;
 
-    @Schema(description = "product category")
+    @Schema(description = "浜у搧绫诲埆")
     private String productCategory;
 
-    @Schema(description = "specification model")
+    @Schema(description = "瑙勬牸鍨嬪彿")
     private String specificationModel;
 
-    @Schema(description = "unit")
+    @Schema(description = "鍗曚綅")
     private String unit;
 
-    @Schema(description = "scheduling user id")
+    @Schema(description = "鎺掍骇浜哄憳ID")
     private Long schedulingUserId;
 
-    @Schema(description = "scheduling user name")
+    @Schema(description = "鎺掍骇浜哄憳鍚嶇О")
     private String schedulingUserName;
 
-    @Schema(description = "wages")
+    @Schema(description = "宸ヨ祫")
     private BigDecimal wages;
 
-    @Schema(description = "finished quantity")
+    @Schema(description = "瀹屾垚鏁伴噺")
     private BigDecimal finishedNum;
 
-    @Schema(description = "salary quota")
+    @Schema(description = "宸ヨ祫瀹氶")
     private BigDecimal workHours;
 
-    @Schema(description = "output rate")
+    @Schema(description = "宸ユ椂")
+    private BigDecimal workHour;
+
+    @Schema(description = "浜у嚭鐜�")
     private String outputRate;
 
-    @Schema(description = "process")
+    @Schema(description = "宸ュ簭")
     private String process;
 
-    @Schema(description = "scheduling date")
+    @Schema(description = "鎺掍骇鏃ユ湡")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate schedulingDate;
 
-    @Schema(description = "scheduling month(yyyy-MM)")
+    @Schema(description = "鎺掍骇鏈堜唤(yyyy-MM)")
     private String schedulingMonth;
 }
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java
index 6c7c5a7..9929f19 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java
@@ -46,4 +46,7 @@
 
     @Schema(description = "鏄惁缁撴潫锛�")
     private Boolean endOrder;
+
+    @Schema(description = "绫诲瀷 鍖哄垎璁℃椂鍜岃浠�(0璁℃椂1璁′欢)")
+    private Integer type;
 }
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderWorkOrderDetailVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderWorkOrderDetailVo.java
index 2a0571d..646d3cb 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderWorkOrderDetailVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderWorkOrderDetailVo.java
@@ -9,6 +9,7 @@
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @Data
@@ -42,6 +43,9 @@
         @Schema(description = "鎶ュ伐涓讳俊鎭�")
         private ProductionProductMain reportMain;
 
+        @Schema(description = "宸ユ椂")
+        private BigDecimal workHour;
+
         @Schema(description = "鎶ュ伐浜у嚭鏄庣粏")
         private List<ProductionProductOutput> reportOutputList;
 
@@ -62,6 +66,9 @@
         @Schema(description = "鎶ュ伐涓讳俊鎭�")
         private ProductionProductMain reportMain;
 
+        @Schema(description = "宸ユ椂")
+        private BigDecimal workHour;
+
         @Schema(description = "璐ㄦ涓讳俊鎭�")
         private QualityInspect inspect;
 
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java b/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java
index fc36725..d784109 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionOrderRoutingOperation.java
@@ -67,4 +67,7 @@
 
     @Schema(description = "宸ュ簭琛╥d")
     private Long technologyOperationId;
+
+    @Schema(description = "绫诲瀷 鍖哄垎璁℃椂鍜岃浠讹紝0璁℃椂锛�1璁′欢")
+    private Integer type;
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
index 0fa00eb..9de89fb 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -7,6 +7,7 @@
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data
@@ -56,4 +57,7 @@
     @TableField(fill = FieldFill.INSERT)
     private Long deptId;
 
+    @Schema(description = "宸ユ椂")
+    private BigDecimal workHour;
+
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
index 598ae6b..554b95e 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
@@ -430,7 +430,7 @@
         BigDecimal totalReturnQty = oldReturnQty.add(currentReturnQty);
         if (currentReturnQty.compareTo(BigDecimal.ZERO) > 0) {
             String returnBatchNo = resolveInventoryBatchNoFromStored(oldPick.getBatchNo());
-            addInventory(oldPick.getId(), oldPick.getProductModelId(), returnBatchNo, currentReturnQty, FEED_RETURN_IN_RECORD_TYPE);
+            addInventoryRecordOnly(oldPick.getId(), oldPick.getProductModelId(), returnBatchNo, currentReturnQty, FEED_RETURN_IN_RECORD_TYPE);
         }
 
         BigDecimal actualQty = defaultDecimal(oldPick.getQuantity())
@@ -737,6 +737,31 @@
         }
     }
 
+    private void addInventoryRecordOnly(Long recordId,
+                                        Long productModelId,
+                                        String batchNo,
+                                        BigDecimal quantity,
+                                        String stockInRecordType) {
+        // 浠呰褰曞叆搴撶敵璇凤紝涓嶅仛瀹℃牳閫氳繃銆�
+        BigDecimal addQuantity = defaultDecimal(quantity);
+        if (addQuantity.compareTo(BigDecimal.ZERO) <= 0) {
+            return;
+        }
+        try {
+            StockInventoryDto stockInventoryDto = new StockInventoryDto();
+            stockInventoryDto.setProductModelId(productModelId);
+            stockInventoryDto.setBatchNo(batchNo);
+            stockInventoryDto.setQualitity(addQuantity);
+            stockInventoryDto.setRecordType(stockInRecordType);
+            stockInventoryDto.setRecordId(recordId == null ? 0L : recordId);
+            stockInventoryService.addStockInRecordOnly(stockInventoryDto);
+        } catch (ServiceException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new ServiceException("閫�鏂欏叆搴撹褰曚繚瀛樺け璐ワ細" + ex.getMessage());
+        }
+    }
+
     private List<ProductionOrderPickDto> resolvePickItems(ProductionOrderPickDto dto) {
         // 瑙f瀽鏂板鍦烘櫙鐨勯鏂欐槑缁嗛泦鍚堛��
         if (dto == null) {
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
index 6ef6a44..344800c 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -188,7 +188,6 @@
             ProductionOrder update = new ProductionOrder();
             update.setId(productionOrder.getId());
             update.setTechnologyRoutingId(targetRoutingId);
-        // 鎸佷箙鍖栨垨杈撳嚭澶勭悊缁撴灉
             if (!this.updateById(update)) {
                 throw new ServiceException("缁戝畾宸ヨ壓璺嚎澶辫触");
             }
@@ -228,6 +227,7 @@
         clearProductionSnapshot(productionOrderId);
         ProductionOrderBom orderBom = syncProductionOrderBomSnapshot(productionOrder, technologyRouting);
 
+        //鐢熶骇璁㈠崟宸ヨ壓璺嚎琛�
         ProductionOrderRouting orderRouting = new ProductionOrderRouting();
         orderRouting.setProductionOrderId(productionOrder.getId());
         orderRouting.setTechnologyRoutingId(technologyRouting.getId());
@@ -236,7 +236,6 @@
         orderRouting.setDescription(technologyRouting.getDescription());
         orderRouting.setBomId(technologyRouting.getBomId());
         orderRouting.setOrderBomId(orderBom == null ? null : orderBom.getId());
-        // 鎸佷箙鍖栨垨杈撳嚭澶勭悊缁撴灉
         productionOrderRoutingMapper.insert(orderRouting);
 
         int syncedParamCount = 0;
@@ -271,6 +270,7 @@
             targetOperation.setIsQuality(sourceOperation.getIsQuality());
             targetOperation.setOperationName(operationNameMap.get(sourceOperation.getTechnologyOperationId()));
             targetOperation.setTechnologyOperationId(sourceOperation.getTechnologyOperationId());
+            targetOperation.setType(sourceOperation.getType());
             productionOrderRoutingOperationMapper.insert(targetOperation);
 
             boolean isLastOperation = lastDragSort != null && Objects.equals(sourceOperation.getDragSort(), lastDragSort);
@@ -745,8 +745,8 @@
                 : workOrderPage.getRecords().stream()
                 .filter(Objects::nonNull)
                 .sorted(Comparator.comparing(ProductionOperationTaskVo::getId, Comparator.nullsLast(Comparator.naturalOrder())))
-                .collect(Collectors.toList());
-        if (workOrderList == null || workOrderList.isEmpty()) {
+                .toList();
+        if (workOrderList.isEmpty()) {
             detailVo.setWorkOrderList(Collections.emptyList());
             return detailVo;
         }
@@ -868,6 +868,7 @@
 
                 ProductionOrderWorkOrderDetailVo.ReportDetail reportDetail = new ProductionOrderWorkOrderDetailVo.ReportDetail();
                 reportDetail.setReportMain(reportMain);
+                reportDetail.setWorkHour(reportMain.getWorkHour());
                 reportDetail.setReportOutputList(reportOutputMap.getOrDefault(reportMainId, Collections.emptyList()));
                 reportDetail.setReportParamList(reportParamMap.getOrDefault(reportMainId, Collections.emptyList()));
                 reportDetailList.add(reportDetail);
@@ -878,6 +879,7 @@
                     inspectDetail.setReportId(reportMainId);
                     inspectDetail.setReportNo(reportMain.getProductNo());
                     inspectDetail.setReportMain(reportMain);
+                    inspectDetail.setWorkHour(reportMain.getWorkHour());
                     inspectDetail.setInspect(inspect);
                     inspectDetail.setInspectParamList(inspectParamMap.getOrDefault(inspect.getId(), Collections.emptyList()));
                     inspectDetail.setInspectFileList(inspectFileMap.getOrDefault(inspect.getId(), Collections.emptyList()));
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 175dd30..808e75d 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -275,6 +275,7 @@
         productionProductMain.setUserName(user == null ? dto.getUserName() : user.getNickName());
         productionProductMain.setProductionOperationTaskId(taskId);
         productionProductMain.setStatus(0);
+        productionProductMain.setWorkHour(dto.getWorkHour());
         productionProductMainMapper.insert(productionProductMain);
         syncOperationParamInputValue(dto, routingOperation.getId(), productionProductMain.getId());
 
diff --git a/src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java b/src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java
index 061169b..1915946 100644
--- a/src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java
+++ b/src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java
@@ -49,7 +49,7 @@
     @Schema(description = "鏄惁璐ㄦ")
     private Boolean isQuality;
 
-    @Schema(description = "绫诲瀷 鍖哄垎璁℃椂鍜岃浠�")
+    @Schema(description = "绫诲瀷 鍖哄垎璁℃椂鍜岃浠讹紝0璁℃椂锛�1璁′欢")
     private Integer type;
 
     @Schema(description = "璁惧id")
diff --git a/src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperation.java b/src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperation.java
index f91f1e1..93ae801 100644
--- a/src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperation.java
+++ b/src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperation.java
@@ -58,4 +58,7 @@
     @Schema(description = "閮ㄩ棬ID")
     @TableField(fill = FieldFill.INSERT)
     private Long deptId;
+
+    @Schema(description = "绫诲瀷 鍖哄垎璁℃椂鍜岃浠讹紝0璁℃椂锛�1璁′欢")
+    private Integer type;
 }
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 4079f84..0eff194 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
@@ -143,7 +143,10 @@
             routingOperation.setProductModelId(resolveOutputProductModelId(bomStructure, structureById, technologyRouting.getProductModelId()));
             routingOperation.setTechnologyOperationId(bomStructure.getOperationId());
             routingOperation.setDragSort(dragSort++);
-            routingOperation.setIsQuality(getOperationQuality(bomStructure.getOperationId()));
+            TechnologyOperation technologyOperation = getOperation(bomStructure.getOperationId());
+            routingOperation.setIsQuality(technologyOperation != null ? technologyOperation.getIsQuality() : null);
+            routingOperation.setIsProduction(technologyOperation != null ? technologyOperation.getIsProduction() : null);
+            routingOperation.setType(technologyOperation != null ? technologyOperation.getType() : null);
             technologyRoutingOperationMapper.insert(routingOperation);
             syncRoutingOperationParams(routingOperation.getId(), bomStructure.getOperationId());
         }
@@ -204,12 +207,11 @@
         }
     }
 
-    /**
-     * 璐ㄦ鏍囪瘑浠ュ伐搴忓熀纭�琛ㄥ畾涔変负鍑嗐��
-     */
-    private Boolean getOperationQuality(Long operationId) {
-        TechnologyOperation technologyOperation = technologyOperationMapper.selectById(operationId);
-        return technologyOperation != null ? technologyOperation.getIsQuality() : null;
+    private TechnologyOperation getOperation(Long operationId) {
+        if (operationId == null) {
+            return null;
+        }
+        return technologyOperationMapper.selectById(operationId);
     }
 
     private String buildProcessRouteCode(Long id) {
diff --git a/src/main/resources/mapper/production/ProductionAccountMapper.xml b/src/main/resources/mapper/production/ProductionAccountMapper.xml
index 2841854..4be1c23 100644
--- a/src/main/resources/mapper/production/ProductionAccountMapper.xml
+++ b/src/main/resources/mapper/production/ProductionAccountMapper.xml
@@ -29,15 +29,19 @@
         pa.scheduling_user_id as schedulingUserId,
         pa.scheduling_user_name as schedulingUserName,
         cast(sum(
-            ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
             case
-                when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
-                then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
-                else 1
+                when poro.type = 0 then ifnull(pa.work_hours, 0) * ifnull(ppm.work_hour, 0)
+                else ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
+                     case
+                         when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
+                         then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
+                         else 1
+                     end
             end
         ) as decimal(18,4)) as wages,
         cast(sum(ifnull(pa.finished_num, 0)) as decimal(18,4)) as finishedNum,
         cast(sum(ifnull(pa.work_hours, 0)) as decimal(18,4)) as workHours,
+        cast(sum(ifnull(ppm.work_hour, 0)) as decimal(18,4)) as workHour,
         case
             when sum(ifnull(ppo.quantity, 0) + ifnull(ppo.scrapQty, 0)) = 0 then '0%'
             else concat(
diff --git a/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml b/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
index 577bcfd..6db5455 100644
--- a/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
@@ -29,6 +29,7 @@
                pm.model as model,
                pm.unit as unit,
                poro.operation_name as operationName,
+               poro.type as type,
                IFNULL(scrapStat.scrapQty, 0) AS scrapQty,
         ROUND(IFNULL(pot.complete_quantity, 0) / NULLIF(pot.plan_quantity, 0) * 100, 2) AS completionStatus,
         CASE
diff --git a/src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml b/src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml
index 55739db..4d63797 100644
--- a/src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOrderRoutingOperationMapper.xml
@@ -13,6 +13,7 @@
         <result column="update_time" property="updateTime" />
         <result column="drag_sort" property="dragSort" />
         <result column="is_quality" property="isQuality" />
+        <result column="type" property="type" />
         <result column="create_user" property="createUser" />
         <result column="dept_id" property="deptId" />
     </resultMap>
diff --git a/src/main/resources/mapper/production/ProductionPlanMapper.xml b/src/main/resources/mapper/production/ProductionPlanMapper.xml
index a389d32..69ccd36 100644
--- a/src/main/resources/mapper/production/ProductionPlanMapper.xml
+++ b/src/main/resources/mapper/production/ProductionPlanMapper.xml
@@ -53,6 +53,9 @@
                 <if test="c.requiredDateStart != null and c.requiredDateEnd != null">
                     and pp.required_date between #{c.requiredDateStart} and #{c.requiredDateEnd}
                 </if>
+                <if test="c.salesContractNo != null and c.salesContractNo != ''">
+                    and sl.sales_contract_no like concat('%', #{c.salesContractNo}, '%')
+                </if>
             </if>
         </where>
         ORDER BY COALESCE(pp.id) DESC
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index 5a78a5b..df585f9 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -100,13 +100,17 @@
                ifnull(ppo.scrap_qty, 0) as scrapQty,
                date(pa.scheduling_date) as schedulingDate,
                pa.scheduling_user_name as schedulingUserName,
+               cast(ifnull(ppm.work_hour, 0) as decimal(18,4)) as workHour,
                cast(ifnull(pa.work_hours, 0) as decimal(18,4)) as workHours,
                cast(
-                   ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
                    case
-                       when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
-                       then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
-                       else 1
+                       when poro.type = 0 then ifnull(pa.work_hours, 0) * ifnull(ppm.work_hour, 0)
+                       else ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
+                            case
+                                when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
+                                then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
+                                else 1
+                            end
                    end
                    as decimal(18,4)
                ) as wages
diff --git a/src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml b/src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml
index 1bbb25c..26053b8 100644
--- a/src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml
+++ b/src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml
@@ -12,6 +12,7 @@
         <result column="update_time" property="updateTime" />
         <result column="drag_sort" property="dragSort" />
         <result column="is_quality" property="isQuality" />
+        <result column="type" property="type" />
         <result column="create_user" property="createUser" />
         <result column="dept_id" property="deptId" />
     </resultMap>

--
Gitblit v1.9.3