From ca1c7d27e81d590f5e48b4102d18898b85d5d2fa Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期二, 07 四月 2026 13:32:08 +0800
Subject: [PATCH] feat:采购/库存入库添加批号

---
 src/main/resources/mapper/production/ProductWorkOrderMapper.xml                       |    1 
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java          |   62 ++++++++++++++++++--
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java               |    2 
 src/main/java/com/ruoyi/production/controller/ProductOrderController.java             |    9 +--
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java                           |    3 +
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   13 ++--
 src/main/java/com/ruoyi/production/service/ProductOrderService.java                   |    3 
 src/main/resources/application-dev.yml                                                |   45 +++++++++------
 src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java                       |    5 +
 src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java             |    3 
 src/main/java/com/ruoyi/production/pojo/ProductOrder.java                             |    3 
 src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java                  |    3 +
 12 files changed, 108 insertions(+), 44 deletions(-)

diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 7f6ef39..119f5fc 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -126,12 +126,15 @@
      * @param recordType
      * @param recordId
      */
-    public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) {
+    public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId,String batchNo) {
         StockInventoryDto stockInventoryDto = new StockInventoryDto();
         stockInventoryDto.setRecordId(recordId);
         stockInventoryDto.setRecordType(String.valueOf(recordType));
         stockInventoryDto.setQualitity(quantity);
         stockInventoryDto.setProductModelId(productModelId);
+        if (batchNo !=null && !batchNo.isEmpty()) {
+            stockInventoryDto.setBatchNo(batchNo);
+        }
         stockInventoryService.subtractStockInventory(stockInventoryDto);
     }
 
diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
index e1c22d1..14baf04 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -1,13 +1,11 @@
 package com.ruoyi.production.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.Customer;
 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.ProcessRoute;
 import com.ruoyi.production.pojo.ProductOrder;
 import com.ruoyi.production.service.ProductOrderService;
 import io.swagger.annotations.Api;
@@ -16,7 +14,6 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
-import java.math.BigDecimal;
 import java.util.List;
 
 @RequestMapping("productOrder")
@@ -65,9 +62,9 @@
 
 
     @ApiOperation("鏂板鐢熶骇璁㈠崟")
-    @PostMapping("addProductOrder")
-    public R addProductOrder(@RequestBody ProductOrder productOrder) {
-        return R.ok(productOrderService.addProductOrder(productOrder));
+    @PostMapping("/addProductOrder")
+    public R addProductOrder(@RequestBody ProductOrderDto productOrderDto) {
+        return R.ok(productOrderService.addProductOrder(productOrderDto));
     }
 
     @ApiOperation("鍒犻櫎鐢熶骇璁㈠崟")
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index a9fedcc..c61d252 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -62,4 +62,7 @@
 
     //鏄惁鍙戣揣(鍙拌处椤甸潰棰滆壊鎺у埗)
     private Boolean isFh;
+
+    @ApiModelProperty(value = "鍨嬪彿")
+    private String productModelName;
 }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
index 3108a30..5518c27 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -83,4 +83,7 @@
     // 涓嶅悎鏍煎鐞嗙粨鏋�
     @ApiModelProperty(value = "涓嶅悎鏍煎鐞嗙粨鏋�")
     private String dealResult;
+
+    @ApiModelProperty(value = "鐢熶骇鎵瑰彿")
+    private String batchNo;
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
index 12340b7..8963f24 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -3,7 +3,6 @@
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -52,7 +51,7 @@
     private String priority;
 
     /**
-     * 浼樺厛绾�
+     * 鐢熶骇鎵瑰彿
      */
     @ApiModelProperty(value = "鐢熶骇鎵瑰彿")
     private String batchNo;
diff --git a/src/main/java/com/ruoyi/production/service/ProductOrderService.java b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
index 5a714a6..2fb06bd 100644
--- a/src/main/java/com/ruoyi/production/service/ProductOrderService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
@@ -3,7 +3,6 @@
 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;
@@ -22,7 +21,7 @@
 
     List<ProductStructureDto> listProcessBom(Long orderId);
 
-    Boolean addProductOrder(ProductOrder productOrder);
+    Boolean addProductOrder(ProductOrderDto productOrderDto);
 
     Boolean delete(Long[] id);
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 77c2e06..84311a8 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -7,8 +7,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.enums.StockOutQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductStructureDto;
@@ -16,7 +15,8 @@
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.pojo.StockInventory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -24,6 +24,8 @@
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Service
@@ -64,6 +66,9 @@
 
     @Autowired
     private StockUtils stockUtils;
+
+    @Autowired
+    private StockInventoryMapper stockInventoryMapper;
 
     @Override
     public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
@@ -135,10 +140,33 @@
     }
 
     @Override
-    public Boolean addProductOrder(ProductOrder productOrder) {
+    public Boolean addProductOrder(ProductOrderDto productOrderDto) {
         String string = generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+        ProductOrder productOrder = new ProductOrder();
+        BeanUtils.copyProperties(productOrderDto, productOrder);
         productOrder.setNpsNo(string);
         productOrder.setCompleteQuantity(BigDecimal.ZERO);
+        List<StockInventory> stockInventoryList = stockInventoryMapper.selectList(null);
+        if (productOrder.getBatchNo() == null || productOrder.getBatchNo().isEmpty()) {
+            String batchNo;
+            // 鑾峰彇褰撳墠鏈堜唤锛堜袱浣嶏級
+            LocalDate now = LocalDate.now();
+            String monthFlag = now.format(DateTimeFormatter.ofPattern("MM"));
+
+            // 鑾峰彇褰撳墠鏈堜唤鐨勬渶澶ф祦姘村彿
+            int maxSeq = getCurrentMonthMaxSeq(productOrderDto.getMaterialCode(),
+                    productOrderDto.getProductModelName(), monthFlag, stockInventoryList);
+
+            // 鏂版祦姘村彿 = 鏈�澶ф祦姘村彿 + 1
+            int newSeq = maxSeq + 1;
+            String seqStr = String.format("%03d", newSeq);
+
+            // 缁勮batchNo
+            batchNo = productOrderDto.getMaterialCode() + productOrderDto.getProductModelName() + "P" + monthFlag + seqStr;
+            productOrder.setBatchNo(batchNo);
+        } else {
+            productOrder.setBatchNo(productOrder.getBatchNo());
+        }
         this.save(productOrder);
         if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) {
             this.bindingRoute(productOrder);
@@ -146,16 +174,38 @@
         return true;
     }
 
+    /**
+     * 鏌ヨ褰撳墠鏈堜唤宸插瓨鍦ㄧ殑鏈�澶ф祦姘村彿
+     */
+    private static int getCurrentMonthMaxSeq(String materialCode, String model, String monthFlag, List<StockInventory> existingList) {
+        int maxSeq = 0;
+        String prefix = materialCode + model + "P" + monthFlag;
+        // 姝e垯鍖归厤锛氬墠缂� + 3浣嶆暟瀛�
+        Pattern pattern = Pattern.compile(Pattern.quote(prefix) + "(\\d{3})");
+        for (StockInventory item : existingList) {
+            String batchNo = item.getBatchNo();
+            if (batchNo == null) continue;
+            Matcher matcher = pattern.matcher(batchNo);
+            if (matcher.find()) {
+                int seq = Integer.parseInt(matcher.group(1));
+                if (seq > maxSeq) {
+                    maxSeq = seq;
+                }
+            }
+        }
+        return maxSeq;
+    }
+
     @Override
     public Boolean delete(Long[] ids) {
         //濡傛灉宸茬粡寮�濮嬬敓浜�,涓嶈兘鍒犻櫎
         //鏌ヨ鐢熶骇璁㈠崟涓嬬殑宸ュ崟
         List<ProductWorkOrder> productWorkOrders = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery().in(ProductWorkOrder::getProductOrderId, ids));
-        if (productWorkOrders.size()>0){
+        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){
+            if (productionProductMains.size() > 0) {
                 throw new RuntimeException("鐢熶骇璁㈠崟宸茬粡寮�濮嬬敓浜�,涓嶈兘鍒犻櫎");
             }
             //鍒犻櫎宸ュ崟
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 3722729..ec3d367 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -13,8 +13,8 @@
 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.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.procurementrecord.utils.StockUtils;
@@ -32,14 +32,14 @@
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.ruoyi.production.mapper.ProductionProductMainMapper;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
@@ -177,7 +177,7 @@
         productionProductMainMapper.insert(productionProductMain);
         /*鏂板鎶ュ伐鎶曞叆琛�*/
         List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
-        if (productStructureDtos.size() == 0) {
+        if (productStructureDtos.isEmpty()) {
             //濡傛灉璇ュ伐搴忔病鏈変骇鍝佺粨鏋勭殑鎶曞叆鍝�,閭h繖涓姇鍏ュ搧鍜屼骇鍑哄搧鏄悓涓�涓�
             ProductStructureDto productStructureDto = new ProductStructureDto();
             productStructureDto.setProductModelId(productProcessRouteItem.getProductModelId());
@@ -191,8 +191,7 @@
             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());
-
+            stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId(),dto.getBatchNo());
         }
         /*鏂板鎶ュ伐浜у嚭琛�*/
         ProductionProductOutput productionProductOutput = new ProductionProductOutput();
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
index df94a16..a39cb72 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -66,7 +66,7 @@
         //鎵e噺搴撳瓨
         if(!"宸插彂璐�".equals(byId.getStatus())){
             SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
-            stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
+            stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId(),null);
         }
         byId.setExpressNumber(req.getExpressNumber());
         byId.setExpressCompany(req.getExpressCompany());
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index 0e66a5c..0073fdb 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -250,7 +250,8 @@
         stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
         stockOutRecordDto.setType("0");
         stockOutRecordService.add(stockOutRecordDto);
-        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
+        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
+                .eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo()));
         if (ObjectUtils.isEmpty(oldStockInventory)) {
             throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
         }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index ff56f9d..aa7941b 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -28,7 +28,7 @@
 # 寮�鍙戠幆澧冮厤缃�
 server:
   # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
-  port: 7003
+  port: 8888
   servlet:
     # 搴旂敤鐨勮闂矾寰�
     context-path: /
@@ -42,13 +42,6 @@
       max: 800
       # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊�10
       min-spare: 100
-
-# 鏃ュ織閰嶇疆
-logging:
-  level:
-    org.quartz: DEBUG
-    com.ruoyi: warn
-    org.springframework: warn
 
 minio:
   endpoint: http://114.132.189.42/
@@ -74,8 +67,10 @@
     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://1.15.17.182:9999/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3307/product-inventory-management-pcdz?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
+#        password: xd@123456..
         password: 123456
       # 浠庡簱鏁版嵁婧�
       slave:
@@ -154,7 +149,7 @@
     database: 0
     # 瀵嗙爜
     #    password: root2022!
-    password:
+    password: 123456
 
     # 杩炴帴瓒呮椂鏃堕棿
     timeout: 10s
@@ -205,16 +200,30 @@
 
 # MyBatis Plus閰嶇疆
 mybatis-plus:
-  # 鎼滅储鎸囧畾鍖呭埆鍚�   鏍规嵁鑷繁鐨勯」鐩潵
-  typeAliasesPackage: com.ruoyi.**.pojo
-  # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢
-  mapperLocations: classpath*:mapper/**/*Mapper.xml
-  # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
-  configLocation: classpath:mybatis/mybatis-config.xml
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    map-underscore-to-camel-case: true
+  type-aliases-package: com.ruoyi.**.pojo
+  mapper-locations: classpath*:mapper/**/*Mapper.xml
   global-config:
-    enable-sql-runner: true
+    banner: false
     db-config:
       id-type: auto
+
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    root: INFO
+    com.ruoyi.production.mapper: DEBUG
+    org.apache.ibatis: DEBUG
+    org.mybatis: DEBUG
+    java.sql: DEBUG
+    java.sql.Connection: DEBUG
+    java.sql.Statement: DEBUG
+    java.sql.PreparedStatement: DEBUG
+    java.sql.ResultSet: DEBUG
+    com.baomidou.mybatisplus: DEBUG
+    com.baomidou.mybatisplus.core: DEBUG
 
 # PageHelper鍒嗛〉鎻掍欢
 pagehelper:
@@ -253,4 +262,4 @@
 
 file:
   temp-dir: D:/ruoyi/temp/uploads   # 涓存椂鐩綍
-  upload-dir: D:/ruoyi/prod/uploads # 姝e紡鐩綍
\ No newline at end of file
+  upload-dir: D:/ruoyi/prod/uploads # 姝e紡鐩綍
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index 417f029..60aa635 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -21,6 +21,7 @@
     <select id="pageProductWorkOrder" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
         SELECT
         pwo.*,
+        po.batch_no as batchNo,
         pp.id as processId,
         pp.NAME as processName,
         pp.qualified_rate as processQualifiedRate,

--
Gitblit v1.9.3