From 470f7f89a562fc9be86d656cb05b6b3421917062 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期日, 04 一月 2026 13:16:23 +0800
Subject: [PATCH] feat(production): 添加生产订单和工艺路线相关功能。添加工序的工资定额字段

---
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java            |   22 ++
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java                             |   27 ++
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java            |   79 ++++++-
 src/main/java/com/ruoyi/production/service/ProductOrderService.java                     |   13 +
 src/main/java/com/ruoyi/quality/pojo/QualityInspect.java                                |    2 
 src/main/java/com/ruoyi/production/pojo/ProductOrder.java                               |   61 ++++++
 src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java |   23 ++
 doc/create_table_process_route_item.sql                                                 |   60 +++++
 src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java                  |   27 ++
 src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java    |   34 +++
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java           |   51 ++++
 src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java                       |   15 +
 src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java            |   14 +
 src/main/resources/mapper/production/ProductOrderMapper.xml                             |   45 ++++
 src/main/java/com/ruoyi/production/controller/ProductOrderController.java               |   30 +++
 src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml                  |   27 ++
 src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java                    |   35 +++
 src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java          |   11 +
 src/main/java/com/ruoyi/production/pojo/ProductProcess.java                             |    6 
 19 files changed, 555 insertions(+), 27 deletions(-)

diff --git a/doc/create_table_process_route_item.sql b/doc/create_table_process_route_item.sql
index baab7d9..ea0a8a7 100644
--- a/doc/create_table_process_route_item.sql
+++ b/doc/create_table_process_route_item.sql
@@ -2,11 +2,57 @@
 drop table if exists process_route_item;
 create table process_route_item
 (
-    id          bigint auto_increment primary key,
-    route_id    bigint   not null default 0 comment '宸ヨ壓璺嚎id',
-    product_model_id  bigint   not null default 0 comment '浜у搧id',
-    process_id bigint   not null default 0 comment '宸ュ簭id',
-    tenant_id   bigint   not null comment '绉熸埛id',
-    create_time datetime null comment '褰曞叆鏃堕棿',
-    update_time datetime null comment '鏇存柊鏃堕棿'
+    id               bigint auto_increment primary key,
+    route_id         bigint   not null default 0 comment '宸ヨ壓璺嚎id',
+    product_model_id bigint   not null default 0 comment '浜у搧id',
+    process_id       bigint   not null default 0 comment '宸ュ簭id',
+    tenant_id        bigint   not null comment '绉熸埛id',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿'
 );
+
+# 鐢熶骇宸ヨ壓璺嚎椤圭洰
+drop table if exists product_process_route_item;
+create table product_process_route_item
+(
+    id               bigint auto_increment primary key,
+    route_id         bigint   not null default 0 comment '宸ヨ壓璺嚎id',
+    product_model_id bigint   not null default 0 comment '閿�鍞彴璐︿骇鍝乮d',
+    process_id       bigint   not null default 0 comment '宸ュ簭id',
+    tenant_id        bigint   not null comment '绉熸埛id',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿'
+);
+
+# 鐢熶骇璁㈠崟
+drop table if exists product_order;
+create table product_order
+(
+    id               bigint auto_increment primary key,
+    sales_ledger_id  bigint   not null default 0 comment '閿�鍞彴璐d',
+    product_model_id bigint   not null default 0 comment '閿�鍞彴璐︿骇鍝乮d',
+    route_id         bigint   not null default 0 comment '宸ヨ壓璺嚎id',
+    nps_no          varchar(255) not null default '' comment '鐢熶骇璁㈠崟鍙�',
+    status            int not null default 0 comment '鐘舵�� 0 寰呯‘璁� 1 宸茬‘璁�',
+    tenant_id        bigint   not null comment '绉熸埛id',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿'
+);
+alter table quality_inspect
+    add purchase_ledger_id int null comment '閲囪喘璁㈠崟id';
+
+# 鐢熶骇宸ュ崟
+drop table if exists product_work_order;
+create table product_work_order
+(
+    id               bigint auto_increment primary key,
+    product_process_route_item_id bigint   not null default 0 comment '宸ヨ壓璺嚎椤圭洰id',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿',
+    work_order_no    varchar(255) not null default '' comment '宸ュ崟缂栧彿',
+    status           int not null default 0 comment '鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸茬敓浜� ',
+    tenant_id        bigint   not null comment '绉熸埛id'
+);
+
+alter table product_process
+    add salary_quota numeric(16,3) null comment '宸ヨ祫瀹氶';
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
new file mode 100644
index 0000000..15a7ca6
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -0,0 +1,30 @@
+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.ProductOrderDto;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.service.ProductOrderService;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("productOrder")
+@RestController
+public class ProductOrderController {
+
+    @Autowired
+    private ProductOrderService productOrderService;
+
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @GetMapping("page")
+    public R page(ProductOrderDto productOrder, Page page) {
+        return R.ok(productOrderService.pageProductOrder(page, productOrder));
+    }
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
new file mode 100644
index 0000000..66ace47
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
@@ -0,0 +1,34 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProcessRouteItemDto;
+import com.ruoyi.production.dto.ProductProcessRouteItemDto;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
+import com.ruoyi.production.service.ProductProcessRouteItemService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RequestMapping("productProcessRoute")
+@RestController
+@Api(tags = "鐢熶骇宸ヨ壓璺嚎")
+public class ProductProcessRouteItemController {
+    @Autowired
+    private ProductProcessRouteItemService productProcessRouteItemService;
+
+    @GetMapping("list")
+    @ApiOperation("鏍规嵁Id鏌ヨ宸ヨ壓椤圭洰")
+    public R list(Long orderId) {
+        return R.ok(productProcessRouteItemService.listItem(orderId));
+    }
+
+    @PostMapping ()
+    @ApiOperation("鏂板淇敼")
+    public R addOrUpdate(@RequestBody ProductProcessRouteItemDto processRouteItemDto) {
+        productProcessRouteItemService.remove(new QueryWrapper<ProductProcessRouteItem>().lambda().eq(ProductProcessRouteItem::getRouteId, processRouteItemDto.getRouteId()));
+        return R.ok(productProcessRouteItemService.saveBatch(processRouteItemDto.getProcessRouteItem()));
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
new file mode 100644
index 0000000..16ea17b
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ProductOrderDto extends ProductOrder {
+
+    @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
+    private String salesContractNo;
+
+    @ApiModelProperty(value = "椤圭洰鍚�")
+    private String projectName;
+
+    @ApiModelProperty(value = "瀹㈡埛鍚�")
+    private String customerName;
+
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    private String productCategory;
+
+    @ApiModelProperty(value = "瑙勬牸")
+    private String specificationModel;
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java b/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
new file mode 100644
index 0000000..e302728
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
@@ -0,0 +1,27 @@
+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 List<ProductProcessRouteItem> processRouteItem;
+    private String specificationModel;
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
new file mode 100644
index 0000000..c4e4ad5
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
@@ -0,0 +1,15 @@
+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.ProductOrderDto;
+import com.ruoyi.production.pojo.ProductOrder;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface ProductOrderMapper extends BaseMapper<ProductOrder> {
+
+    IPage<ProductOrderDto> pageProductOrder(Page page, @Param("c") ProductOrderDto productOrder);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java
new file mode 100644
index 0000000..48b38ec
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java
@@ -0,0 +1,14 @@
+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/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
new file mode 100644
index 0000000..d47062f
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -0,0 +1,61 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+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
+     */
+    @ApiModelProperty(value = "閿�鍞彴璐︿骇鍝乮d")
+    private Long productModelId;
+
+    /**
+     * 宸ヨ壓璺嚎id
+     */
+    @ApiModelProperty(value = "宸ヨ壓璺嚎id")
+    private Long routeId;
+
+    /**
+     * 鐢熶骇璁㈠崟鍙�
+     */
+    @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
+    private String npsNo;
+
+    /**
+     * 绉熸埛id
+     */
+    @ApiModelProperty(value = "绉熸埛id")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    //鍒涘缓鏃堕棿
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    //淇敼鏃堕棿
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
index 31ff3e7..01ed986 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
@@ -30,6 +30,12 @@
      */
     private String remark;
 
+
+    /**
+     * 宸ヨ祫瀹氶
+     */
+    private BigDecimal salaryQuota;
+
     /**
      * 鍒涘缓鏃堕棿
      */
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
new file mode 100644
index 0000000..af13c69
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
@@ -0,0 +1,35 @@
+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")
+    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;
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductOrderService.java b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
new file mode 100644
index 0000000..325ec47
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
@@ -0,0 +1,13 @@
+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.ProductOrderDto;
+import com.ruoyi.production.pojo.ProductOrder;
+
+
+public interface ProductOrderService extends IService<ProductOrder> {
+
+    IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java b/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java
new file mode 100644
index 0000000..f527657
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+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);
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
new file mode 100644
index 0000000..26ec8fa
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -0,0 +1,22 @@
+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.ProductOrderDto;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.service.ProductOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, ProductOrder> implements ProductOrderService {
+
+    @Autowired
+    private ProductOrderMapper productOrderMapper;
+    @Override
+    public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
+        return productOrderMapper.pageProductOrder(page, productOrder);
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
new file mode 100644
index 0000000..455b6e5
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
@@ -0,0 +1,23 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.dto.ProductProcessRouteItemDto;
+import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
+import com.ruoyi.production.service.ProductProcessRouteItemService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+@Service
+public class ProductProcessRouteItemServiceImpl extends ServiceImpl<ProductProcessRouteItemMapper, ProductProcessRouteItem> implements ProductProcessRouteItemService {
+
+    @Autowired
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+    @Override
+    public List<ProductProcessRouteItemDto> listItem(Long orderId) {
+        return productProcessRouteItemMapper.listItem(orderId);
+    }
+}
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 9f9123f..a20c5bb 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -36,6 +36,12 @@
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.purchase.pojo.TicketRegistration;
 import com.ruoyi.purchase.service.IPurchaseLedgerService;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.mapper.QualityInspectParamMapper;
+import com.ruoyi.quality.mapper.QualityTestStandardMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityInspectParam;
+import com.ruoyi.quality.pojo.QualityTestStandard;
 import com.ruoyi.sales.mapper.*;
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
@@ -101,6 +107,9 @@
     private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
 
     private final StringRedisTemplate redisTemplate;
+    private final QualityInspectMapper qualityInspectMapper;
+    private final QualityTestStandardMapper qualityTestStandardMapper;
+    private final QualityInspectParamMapper qualityInspectParamMapper;
 
     @Value("${file.upload-dir}")
     private String uploadDir;
@@ -128,7 +137,7 @@
         PurchaseLedger purchaseLedger = new PurchaseLedger();
         BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
         LoginUser loginUser = SecurityUtils.getLoginUser();
-        if(ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
+        if (ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
             purchaseLedger.setTenantId(loginUser.getTenantId());
         }
         purchaseLedger.setSalesContractNo(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getSalesContractNo() : "");
@@ -161,15 +170,15 @@
             List<AccountExpense> accountExpenseDBs = accountExpenseService.getByInvoiceNumberList(purchaseLedger.getPurchaseContractNumber());
             if (!CollectionUtils.isEmpty(accountExpenseDBs)) {
                 accountExpenseDBs.forEach(accountExpenseDB -> {
-                   accountExpenseDB.setExpenseDate(purchaseLedgerDB.getEntryDate());
-                   accountExpenseDB.setExpenseType("0");
-                   accountExpenseDB.setSupplierName(purchaseLedgerDB.getSupplierName());
-                   accountExpenseDB.setExpenseMoney(purchaseLedgerDB.getContractAmount());
-                   accountExpenseDB.setExpenseDescribed("閲囪喘鍚堝悓锛�" + purchaseLedgerDB.getPurchaseContractNumber());
-                   accountExpenseDB.setExpenseMethod("0");
-                   accountExpenseDB.setInvoiceNumber(purchaseLedgerDB.getPurchaseContractNumber());
-                   accountExpenseService.updateById(accountExpenseDB);
-               });
+                    accountExpenseDB.setExpenseDate(purchaseLedgerDB.getEntryDate());
+                    accountExpenseDB.setExpenseType("0");
+                    accountExpenseDB.setSupplierName(purchaseLedgerDB.getSupplierName());
+                    accountExpenseDB.setExpenseMoney(purchaseLedgerDB.getContractAmount());
+                    accountExpenseDB.setExpenseDescribed("閲囪喘鍚堝悓锛�" + purchaseLedgerDB.getPurchaseContractNumber());
+                    accountExpenseDB.setExpenseMethod("0");
+                    accountExpenseDB.setInvoiceNumber(purchaseLedgerDB.getPurchaseContractNumber());
+                    accountExpenseService.updateById(accountExpenseDB);
+                });
             }
 
         }
@@ -178,6 +187,31 @@
         List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData();
         if (productList != null && !productList.isEmpty()) {
             handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType());
+        }
+        //鏂板鍘熸潗鏂欐楠�
+        for (SalesLedgerProduct saleProduct : productList) {
+            QualityInspect qualityInspect = new QualityInspect();
+            qualityInspect.setInspectType(0);
+            qualityInspect.setSupplier(purchaseLedger.getSupplierName());
+            qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
+            qualityInspect.setProductId(saleProduct.getProductId());
+            qualityInspect.setProductName(saleProduct.getProductCategory());
+            qualityInspect.setModel(saleProduct.getSpecificationModel());
+            qualityInspect.setUnit(saleProduct.getUnit());
+            qualityInspect.setQuantity(saleProduct.getQuantity());
+            qualityInspectMapper.insert(qualityInspect);
+            QualityTestStandard qualityTestStandard = new QualityTestStandard();
+            qualityTestStandard.setProductId(saleProduct.getProductId());
+            List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.qualityTestStandardList(qualityTestStandard);
+            for (QualityTestStandard qualityTestStandardDB : qualityTestStandards) {
+                QualityInspectParam qualityInspectParam = new QualityInspectParam();
+                qualityInspectParam.setInspectId(qualityInspect.getId());
+                qualityInspectParam.setParameterItem(qualityTestStandardDB.getParameterItem());
+                qualityInspectParam.setUnit(qualityTestStandardDB.getUnit());
+                qualityInspectParam.setStandardValue(qualityTestStandardDB.getStandardValue());
+                qualityInspectParam.setControlValue(qualityTestStandardDB.getControlValue());
+                qualityInspectParamMapper.insert(qualityInspectParam);
+            }
         }
 
         // 5. 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
@@ -349,7 +383,7 @@
     @Override
     public int deletePurchaseLedgerByIds(Long[] ids) {
         if (ids == null || ids.length == 0) {
-           throw new BaseException("璇烽�変腑鑷冲皯涓�鏉℃暟鎹�");
+            throw new BaseException("璇烽�変腑鑷冲皯涓�鏉℃暟鎹�");
         }
         // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︿骇鍝�
         LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
@@ -358,16 +392,29 @@
         salesLedgerProductMapper.delete(queryWrapper);
         // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︾殑鏉ョエ鐧昏
         LambdaQueryWrapper<TicketRegistration> ticketRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getPurchaseLedgerId,ids);
+        ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getPurchaseLedgerId, ids);
         ticketRegistrationMapper.delete(ticketRegistrationLambdaQueryWrapper);
         // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︾殑鏉ョエ鐧昏璁板綍
         LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        productRecordLambdaQueryWrapper.in(ProductRecord::getPurchaseLedgerId,ids);
+        productRecordLambdaQueryWrapper.in(ProductRecord::getPurchaseLedgerId, ids);
         productRecordMapper.delete(productRecordLambdaQueryWrapper);
         // 鎵归噺鍒犻櫎浠樻鐧昏
         LambdaQueryWrapper<PaymentRegistration> paymentRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        paymentRegistrationLambdaQueryWrapper.in(PaymentRegistration::getPurchaseLedgerId,ids);
+        paymentRegistrationLambdaQueryWrapper.in(PaymentRegistration::getPurchaseLedgerId, ids);
         paymentRegistrationMapper.delete(paymentRegistrationLambdaQueryWrapper);
+        //鎵归噺鍒犻櫎妫�楠屾爣鍑�
+        LambdaQueryWrapper<QualityInspect> materialInspectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        materialInspectLambdaQueryWrapper.in(QualityInspect::getPurchaseLedgerId, ids);
+        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(materialInspectLambdaQueryWrapper);
+        List<Long> inspectIds = qualityInspects.stream()
+                .map(QualityInspect::getId)
+                .collect(Collectors.toList());
+
+        LambdaQueryWrapper<QualityInspectParam> qualityStandardLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        qualityStandardLambdaQueryWrapper.in(QualityInspectParam::getInspectId, inspectIds);
+        qualityInspectParamMapper.delete(qualityStandardLambdaQueryWrapper);
+        //鎵归噺鍒犻櫎鍘熸潗鏂欐楠屾暟鎹�
+        qualityInspectMapper.delete(materialInspectLambdaQueryWrapper);
         // 鎵归噺鍒犻櫎閲囪喘鍙拌处
         return purchaseLedgerMapper.deleteBatchIds(Arrays.asList(ids));
     }
@@ -494,8 +541,8 @@
     @Override
     public List<InvoiceRegistrationProduct> getProductBySalesNo(Long id) {
         List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(new LambdaQueryWrapper<InvoiceRegistrationProduct>()
-                        .select(InvoiceRegistrationProduct::getId, InvoiceRegistrationProduct::getProductCategory, InvoiceRegistrationProduct::getSpecificationModel,
-                                InvoiceRegistrationProduct::getUnit, InvoiceRegistrationProduct::getQuantity)
+                .select(InvoiceRegistrationProduct::getId, InvoiceRegistrationProduct::getProductCategory, InvoiceRegistrationProduct::getSpecificationModel,
+                        InvoiceRegistrationProduct::getUnit, InvoiceRegistrationProduct::getQuantity)
                 .eq(InvoiceRegistrationProduct::getSalesLedgerId, id));
         if (invoiceRegistrationProducts.isEmpty()) {
             return new ArrayList<>();
diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
index e1b2e6a..6c39977 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -138,5 +138,7 @@
      */
     private Integer inspectState;
 
+    private Long purchaseLedgerId;
+
 
 }
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 2a288e4..3d51cb0 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -4,6 +4,14 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.ProcessRouteItemMapper;
+import com.ruoyi.production.mapper.ProcessRouteMapper;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
@@ -42,8 +50,14 @@
 
     private PurchaseLedgerMapper purchaseLedgerMapper;
 
+    private ProductOrderMapper productOrderMapper;
+
+    private ProcessRouteItemMapper processRouteItemMapper;
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
     @Autowired
     private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+    @Autowired
+    private ProcessRouteMapper processRouteMapper;
 
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -56,18 +70,18 @@
         queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
                 .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(queryWrapper);
-        if(!CollectionUtils.isEmpty(salesLedgerProducts)){
+        if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
             InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
             invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue());
             List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto);
             // 缁熻寮�绁ㄧ櫥璁颁骇鍝佺殑宸插紑绁ㄦ暟/宸插紑绁ㄩ噾棰�
-            if(!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)){
+            if (!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)) {
                 for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) {
                     BigDecimal invoiceNum = BigDecimal.ZERO;
                     BigDecimal invoiceAmount = BigDecimal.ZERO;
                     for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
-                        if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
-                            invoiceNum =  invoiceNum.add(registrationProductDto.getInvoiceNum());
+                        if (ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()) {
+                            invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
                             invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
                         }
                     }
@@ -101,6 +115,14 @@
 
         // 2. 鎵ц鍒犻櫎鎿嶄綔
         int result = salesLedgerProductMapper.deleteBatchIds(Arrays.asList(ids));
+        //鍒犻櫎瀵瑰簲鐨勭敓浜ц鍗�
+        for (Long id : ids) {
+            ProductOrder productOrder = productOrderMapper.selectOne(new LambdaQueryWrapper<ProductOrder>().eq(ProductOrder::getProductModelId, id));
+            if (productOrder != null) {
+                productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>().eq(ProductProcessRouteItem::getRouteId, productOrder.getId()));
+                productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>().eq(ProductOrder::getProductModelId, id));
+            }
+        }
 
         // 3. 瀵规瘡涓富琛↖D杩涜閲戦鏇存柊
         for (Long salesLedgerId : mainIds) {
@@ -130,6 +152,27 @@
         Long salesLedgerId = salesLedgerProduct.getSalesLedgerId();
         if (salesLedgerProduct.getId() == null) {
             result = salesLedgerProductMapper.insert(salesLedgerProduct);
+            ProductOrder productOrder = new ProductOrder();
+            productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+            productOrder.setProductModelId(salesLedgerProduct.getId());
+            productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
+            productOrderMapper.insert(productOrder);
+
+            ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()));
+            if (processRoute != null) {
+                List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+                for (ProcessRouteItem processRouteItem : processRouteItems) {
+                    ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+                    productProcessRouteItem.setProductModelId(productOrder.getProductModelId());
+                    productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+                    productProcessRouteItem.setRouteId(productOrder.getId());
+                    productProcessRouteItemMapper.insert(productProcessRouteItem);
+                }
+                productOrder.setRouteId(processRoute.getId());
+                productOrderMapper.updateById(productOrder);
+            }
+
+
         } else {
             salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
             result = salesLedgerProductMapper.updateById(salesLedgerProduct);
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
new file mode 100644
index 0000000..7f84013
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -0,0 +1,45 @@
+<?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.ProductOrderMapper">
+
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductOrder">
+        <id property="id" column="id"/>
+        <result property="productModelId" column="product_model_id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="salesLedgerId" column="sales_ledger_id"/>
+        <result property="routeId" column="route_id"/>
+        <result property="npsNo" column="nps_no"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">
+        select po.*,sl.sales_contract_no,sl.project_name,sl.customer_name,slp.product_category,slp.specification_model
+        from product_order po
+        left join sales_ledger sl on po.sales_ledger_id = sl.id
+        left join sales_ledger_product slp on po.product_model_id = slp.id
+        left join process_route pr on po.route_id = pr.id
+        <where>
+            <if test="c.npsNo != null and c.npsNo != ''">
+                and po.nps_no = #{c.npsNo}
+            </if>
+            <if test="c.salesContractNo != null and c.salesContractNo != ''">
+                and sl.sales_contract_no = #{c.salesContractNo}
+            </if>
+            <if test="c.projectName != null and c.projectName != ''">
+                and sl.project_name = #{c.projectName}
+            </if>
+            <if test="c.customerName != null and c.customerName != ''">
+                and sl.customer_name = #{c.customerName}
+            </if>
+            <if test="c.productCategory != null and c.productCategory != ''">
+                and slp.product_category = #{c.productCategory}
+            </if>
+            <if test="c.specificationModel != null and c.specificationModel != ''">
+                and slp.specification_model = #{c.specificationModel}
+            </if>
+        </where>
+    </select>
+
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml b/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
new file mode 100644
index 0000000..b552627
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
@@ -0,0 +1,27 @@
+<?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.ProductProcessRouteItemMapper">
+
+
+    <resultMap id="basicMap" type="com.ruoyi.production.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 ppri.*,
+               pp.name as process_name,
+               slp.specification_model,
+               slp.unit,
+               slp.product_category
+        from product_process_route_item ppri
+                 left join sales_ledger_product slp on ppri.product_model_id = slp.id
+                 left join product_process pp on pp.id = ppri.process_id
+        where ppri.route_id = #{orderId}
+        order by ppri.id
+    </select>
+
+
+</mapper>

--
Gitblit v1.9.3