From 974edeb0c94bc9140dfdcc74d0d799994c959c9f Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期三, 14 一月 2026 09:35:08 +0800
Subject: [PATCH] Merge branch 'jtwy' of http://114.132.189.42:9002/r/product-inventory-management-after into jtwy

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java  |    7 +++
 src/main/java/com/ruoyi/production/controller/ProcessRouteController.java      |    2 
 src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java |    2 +
 src/main/resources/mapper/basic/ProductModelMapper.xml                         |    6 +++
 src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java                   |    3 +
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java        |   14 ++++++
 src/main/java/com/ruoyi/production/service/ProcessRouteService.java            |    3 +
 src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java   |   14 +++++++
 src/main/java/com/ruoyi/basic/pojo/ProductModel.java                           |    3 +
 src/main/java/com/ruoyi/production/pojo/ProcessRoute.java                      |    3 +
 doc/20260113-product_model.sql                                                 |    6 +++
 11 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/doc/20260113-product_model.sql b/doc/20260113-product_model.sql
new file mode 100644
index 0000000..de82a14
--- /dev/null
+++ b/doc/20260113-product_model.sql
@@ -0,0 +1,6 @@
+alter table product_model
+    add product_code varchar(255)  null comment '浜у搧缂栫爜';
+
+alter table process_route
+    add process_route_code varchar(255)  null comment '宸ヨ壓璺嚎缂栫爜';
+
diff --git a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
index 697a3a6..a1669f1 100644
--- a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
+++ b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
@@ -16,4 +16,7 @@
 public interface ProductModelMapper extends BaseMapper<ProductModel> {
 
     IPage<ProductModel> listPageProductModel(Page<ProductModel> page, @Param("c") ProductModel productModel);
+
+    ProductModel selectLatestRecord();
+
 }
diff --git a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
index 5e7496a..3997459 100644
--- a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
+++ b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -27,6 +27,9 @@
     @Excel(name = "浜у搧鍚嶇О")
     private String productName;
 
+    @Excel(name = "浜у搧缂栫爜")
+    private String productCode;
+
     /**
      * 瑙勬牸鍨嬪彿
      */
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index dc6d3e9..bc3840f 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -14,12 +14,15 @@
 import com.ruoyi.basic.service.IProductModelService;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -45,12 +48,21 @@
         if (productModelDto.getId() == null) {
             ProductModel productModel = new ProductModel();
             BeanUtils.copyProperties(productModelDto,productModel);
-            return productModelMapper.insert(productModel);
+            productModelMapper.insert(productModel);
+
+            String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+            String idStr = String.format("%06d", productModel.getId()); // 鍏綅琛�0
+            String newProductCode = "BM" + dateStr + idStr;
+            // 鏇存柊鏁版嵁搴撲腑鐨刾roductCode
+            productModel.setProductCode(newProductCode);
+            return productModelMapper.updateById(productModel);
         } else {
             return productModelMapper.updateById(productModelDto);
         }
     }
 
+
+
     @Override
     public int delProductModel(Long[] ids) {
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>()
diff --git a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
index c01d836..495ac52 100644
--- a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
@@ -29,7 +29,7 @@
     @ApiOperation("鏂板宸ヨ壓璺嚎")
     @PostMapping ()
     public R add(@RequestBody  ProcessRoute processRoute) {
-        return R.ok(processRouteService.save(processRoute));
+        return R.ok(processRouteService.saveProcessRoute(processRoute));
     }
     @ApiOperation("淇敼宸ヨ壓璺嚎")
     @PutMapping ()
diff --git a/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java b/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
index 3ac8bb1..88034cb 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
@@ -32,4 +32,7 @@
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
     @TableField(fill = FieldFill.UPDATE)
     private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "宸ヨ壓璺嚎缂栫爜")
+    private String processRouteCode;
 }
diff --git a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
index 804a461..bd26b0b 100644
--- a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
+++ b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
@@ -5,8 +5,11 @@
 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;
 
 public interface ProcessRouteService extends IService<ProcessRoute> {
 
     IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto);
+
+    Integer saveProcessRoute(ProcessRoute processRoute);
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
index 1772404..9fafe5f 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -13,6 +13,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
 @Service
 @AllArgsConstructor
 @Slf4j
@@ -26,4 +29,15 @@
 
         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 = "GY" + dateStr + idStr;
+        // 鏇存柊鏁版嵁搴撲腑鐨刾roductCode
+        processRoute.setProcessRouteCode(newProductCode);
+        return processRouteMapper.updateById(processRoute);
+    }
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
index 56003b7..62090d1 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
@@ -78,6 +78,8 @@
                 invoiceRegistrationProduct.setSalesLedgerProductId(productDatum.getId().intValue());
 
                 invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct);
+                productDatum.setInvoiceNum(currentInvoiceNum);
+                productDatum.setInvoiceAmount(productDatum.getCurrentInvoiceAmount());
                 salesLedgerProductMapper.updateById(productDatum);
                 // 鏂板涓�鏉″紑绁ㄥ彴璐︽暟鎹�
                 InvoiceLedger invoiceLedger = new InvoiceLedger();
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 1dafbe4..503b3c8 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -70,6 +70,7 @@
 //                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
         if(!CollectionUtils.isEmpty(salesLedgerProducts)){
+            // 寮�绁�
             InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
             invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue());
             List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto);
@@ -78,14 +79,20 @@
                 for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) {
                     BigDecimal invoiceNum = BigDecimal.ZERO;
                     BigDecimal invoiceAmount = BigDecimal.ZERO;
+                    BigDecimal noInvoiceNum = BigDecimal.ZERO;
+                    BigDecimal noInvoiceAmount = BigDecimal.ZERO;
                     for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
                         if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
                             invoiceNum =  invoiceNum.add(registrationProductDto.getInvoiceNum());
                             invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
+                            noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum);
+                            noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount);
                         }
                     }
                     ledgerProduct.setInvoiceNum(invoiceNum);
                     ledgerProduct.setInvoiceAmount(invoiceAmount);
+                    ledgerProduct.setNoInvoiceNum(noInvoiceNum);
+                    ledgerProduct.setNoInvoiceAmount(noInvoiceAmount);
                 }
             }
 
diff --git a/src/main/resources/mapper/basic/ProductModelMapper.xml b/src/main/resources/mapper/basic/ProductModelMapper.xml
index e4e665c..afdfc4a 100644
--- a/src/main/resources/mapper/basic/ProductModelMapper.xml
+++ b/src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -13,6 +13,7 @@
         <result column="tenant_id" property="tenantId" />
         <result column="product_name" property="productName" />
         <result column="product_id" property="productId" />
+        <result column="product_code" property="productCode" />
     </resultMap>
     <select id="listPageProductModel" resultType="com.ruoyi.basic.pojo.ProductModel">
         select pm.*,p.product_name
@@ -28,6 +29,11 @@
         </where>
         order by  pm.id
     </select>
+    <select id="selectLatestRecord" resultType="com.ruoyi.basic.pojo.ProductModel">
+            SELECT * FROM product_model
+            ORDER BY create_time DESC, id DESC
+            LIMIT 1
+    </select>
 
 
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3