From 0ca7d78f0e8e8a6984314803aba21ab1d25472b3 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期五, 24 四月 2026 15:06:21 +0800
Subject: [PATCH] feat(production): 新增印刷定印单实体及相关接口和分页信息完善

---
 src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java          |    6 ++
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java         |   25 ++++++++
 src/main/resources/mapper/production/ProductOrderMapper.xml                          |    2 
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java                          |   53 ++++++++++++++---
 src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java |   21 +++++++
 src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java                    |   22 +++++++
 src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java         |    4 +
 src/main/java/com/ruoyi/sales/pojo/SalesLedger.java                                  |    4 +
 src/main/java/com/ruoyi/production/pojo/ProductOrder.java                            |    8 --
 9 files changed, 129 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index d5dd777..1d7d48b 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -1,6 +1,7 @@
 package com.ruoyi.production.dto;
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.production.pojo.ProductOrder;
@@ -10,53 +11,87 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 @Data
 @ExcelIgnoreUnannotated
 public class ProductOrderDto extends ProductOrder {
 
     @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
-    @Excel(name = "閿�鍞悎鍚屽彿")
+    @Excel(name = "鍗曞彿",sort = 2)
     private String salesContractNo;
 
     @ApiModelProperty(value = "椤圭洰鍚�")
-    @Excel(name = "椤圭洰鍚�")
     private String projectName;
 
     @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
-    @Excel(name = "瀹㈡埛鍚嶇О")
+    @Excel(name = "鍘傚",sort = 3)
     private String customerName;
 
     @ApiModelProperty(value = "浜у搧鍚嶇О")
-    @Excel(name = "浜у搧鍚嶇О")
+    @Excel(name = "浜у搧鍚嶇О",sort = 4)
     private String productCategory;
 
     @ApiModelProperty(value = "瑙勬牸")
-    @Excel(name = "瑙勬牸")
+    @Excel(name = "绾稿紶瑙勬牸",sort = 5)
     private String specificationModel;
 
     @ApiModelProperty(value = "宸ヨ壓璺嚎缂栧彿")
-    @Excel(name = "宸ヨ壓璺嚎缂栧彿")
     private String processRouteCode;
 
     @ApiModelProperty(value = "瀹屾垚杩涘害")
-    @Excel(name = "瀹屾垚杩涘害", suffix = "%")
     private BigDecimal completionStatus;
 
     @ApiModelProperty(value = "BOM缂栧彿")
-    @Excel(name = "BOM缂栧彿")
     private String bomNo;
 
     @ApiModelProperty(value = "浜ゆ湡鍋忓樊")
     private Integer deliveryDaysDiff;
 
-    @ApiModelProperty(value = "浜ゆ湡")
+    @ApiModelProperty(value = "璁″垝浜よ揣鏃ユ湡")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "璁″垝浜よ揣鏃ユ湡",sort = 10)
     private LocalDate deliveryDate;
+
+    @ApiModelProperty(value = "瀹為檯浜よ揣鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "瀹為檯浜よ揣鏃ユ湡",sort = 11)
+    private LocalDateTime actuallyDeliveryDate;
+
+    @ApiModelProperty(value = "绛捐鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "涓嬪崟鏃ユ湡",sort = 1)
+    private LocalDate executionDate;
 
     //鏄惁鍙戣揣(鍙拌处椤甸潰棰滆壊鎺у埗)
     private Boolean isFh;
 
     private Long saleLedgerId;
+
+    /**
+     * 灏哄
+     */
+    private String cutSize;
+
+    /**
+     * 灏忕洅鏁伴噺
+     */
+    @Excel(name = "灏忕洅鏁伴噺",sort = 7)
+    private String smallBoxQty;
+
+    /**
+     * 涓洅鏁伴噺
+     */
+    @Excel(name = "灏忕洅鏁伴噺",sort = 8)
+    private String mediumBoxQty;
+
+    /**
+     * 鑹叉暟
+     */
+    @Excel(name = "鑹叉暟",sort = 9)
+    private String printColorCount;
+
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
index 50de3a0..699110e 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -49,7 +49,6 @@
      * 鐢熶骇璁㈠崟鍙�
      */
     @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
-    @Excel(name = "鐢熶骇璁㈠崟鍙�")
     private String npsNo;
 
     /**
@@ -64,7 +63,6 @@
     @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @Excel(name = "鍒涘缓鏃堕棿")
     private LocalDateTime createTime;
 
     //淇敼鏃堕棿
@@ -79,24 +77,21 @@
      * 闇�姹傛暟閲�
      */
     @ApiModelProperty(value = "闇�姹傛暟閲�")
-    @Excel(name = "闇�姹傛暟閲�")
+    @Excel(name = "鍗板埛鏁伴噺",sort = 6)
     private BigDecimal quantity;
 
     /**
      * 瀹屾垚鏁伴噺
      */
     @ApiModelProperty(value = "瀹屾垚鏁伴噺")
-    @Excel(name = "瀹屾垚鏁伴噺")
     private BigDecimal completeQuantity;
 
-    @Excel(name = "寮�濮嬫椂闂�")
     @ApiModelProperty(value = "寮�濮嬫椂闂�")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime startTime;
 
     @ApiModelProperty(value = "缁撴潫鏃堕棿")
-    @Excel(name = "缁撴潫鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime endTime;
@@ -114,6 +109,7 @@
      * 澶囨敞
      */
     @TableField(value = "remark")
+    @Excel(name = "澶囨敞",sort = 12)
     private String remark;
 
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java
index 6965945..58c7ce4 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java
@@ -1,5 +1,7 @@
 package com.ruoyi.production.pojo;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.annotation.*;
 
 import java.io.Serializable;
@@ -11,9 +13,12 @@
 import com.ruoyi.production.dto.MaterialInfoDto;
 import com.ruoyi.production.dto.PlateMakingDto;
 import com.ruoyi.production.dto.ProcessContentDto;
+import com.ruoyi.production.dto.ProductOrderDto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
 
 /**
  * 鍗板埛瀹氬嵃鍗�
@@ -256,4 +261,21 @@
      */
     @TableField(value = "client_name")
     private String clientName;
+
+
+    public ProductOrderDto convertProductOrderDto(@NotNull ProductOrderDto dto) {
+        dto.setCutSize(this.getCutSize());
+        dto.setSmallBoxQty(this.getSmallBoxQty());
+        dto.setMediumBoxQty(this.getMediumBoxQty());
+        // 鑹叉暟 涓哄伐搴忓紑鏁扮涓�涓�
+        if(CollUtil.isNotEmpty(this.processContent)){
+            ProcessContentDto processContentDto = BeanUtil.toBean(
+                    processContent.get(0),
+                    ProcessContentDto.class
+            );
+            dto.setPrintColorCount(processContentDto.getOpenCount());
+        }
+        // 澶囨敞宸茬粡濉厖鍒颁簡 ProductOrderDto涓棤闇�鍏冲績
+        return dto;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java b/src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java
index add8018..aa51f0c 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java
@@ -5,6 +5,9 @@
 import com.ruoyi.production.pojo.ProductionPrintOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import javax.annotation.Nullable;
+import java.util.List;
+
 /**
 * @author buhuazhen
 * @description 閽堝琛ㄣ�恜roduction_print_order(鍗板埛瀹氬嵃鍗�)銆戠殑鏁版嵁搴撴搷浣淪ervice
@@ -24,4 +27,7 @@
      * @return
      */
     ProductionPrintOrderDto getByProductWordId(Long id);
+
+
+    List<ProductionPrintOrder> getListByOrders(@Nullable List<Long> orderIds);
 }
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 886e9a0..3df9df2 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -174,6 +174,7 @@
      */
     private List<ProcessRouteItem> buildProcessRouteItems(List<ProcessRouteAnticlockwiseDto> dtos, Long routeId, Long productModelId) {
         List<ProcessRouteItem> items = new ArrayList<>(dtos.size());
+        Integer num = 0;
         for (ProcessRouteAnticlockwiseDto dto : dtos) {
             ProcessRouteItem item = new ProcessRouteItem();
             item.setRouteId(routeId);
@@ -184,6 +185,7 @@
             item.setProcessRouteNum(dto.getProcessRouteNum());
             item.setProcessRouteAddNum(dto.getProcessRouteAddNum());
             item.setProcessRouteRequire(dto.getProcessRouteRequire());
+            item.setDragSort(num++);
             items.add(item);
         }
         return items;
@@ -208,6 +210,7 @@
      */
     private void buildProductProcessRouteItems(List<ProcessRouteAnticlockwiseDto> dtos, Long productRouteId, Long productModelId,Long productOrderId) {
         ProductOrder byId = productOrderService.getById(productOrderId);
+        Integer num = 0;
         for (ProcessRouteAnticlockwiseDto dto : dtos) {
             ProductProcessRouteItem item = new ProductProcessRouteItem();
             item.setProductRouteId(productRouteId);
@@ -218,6 +221,7 @@
             item.setProcessRouteNum(dto.getProcessRouteNum());
             item.setProcessRouteAddNum(dto.getProcessRouteAddNum());
             item.setProcessRouteRequire(dto.getProcessRouteRequire());
+            item.setDragSort(num++);
             item.setUuid(dto.getUuid());
             productProcessRouteItemService.save(item);
             ProductProcess productProcess = productProcessService.getById(item.getProcessId());
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 343f790..5eed99f 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -17,9 +17,11 @@
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.production.service.ProductProcessService;
 import com.ruoyi.production.service.ProductWorkOrderService;
+import com.ruoyi.production.service.ProductionPrintOrderService;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -29,6 +31,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -37,6 +40,10 @@
 
     private final ProductWorkOrderService productWorkOrderService;
     private final ProductProcessService productProcessService;
+
+    @Autowired
+    @Lazy
+    private ProductionPrintOrderService  productionPrintOrderService;
     @Autowired
     private ProductOrderMapper productOrderMapper;
     @Autowired
@@ -64,7 +71,23 @@
 
     @Override
     public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
-        return productOrderMapper.pageProductOrder(page, productOrder);
+        IPage<ProductOrderDto> productOrderDtoIPage = productOrderMapper.pageProductOrder(page, productOrder);
+        // 濉厖鍗板埛鍗曚俊鎭�
+        List<ProductOrderDto> records = productOrderDtoIPage.getRecords();
+        if (CollUtil.isNotEmpty(records)) {
+            List<Long> orderIds = records.stream().map(ProductOrderDto::getId).collect(Collectors.toList());
+            Map<Long, ProductionPrintOrder> collect = productionPrintOrderService.getListByOrders(orderIds).stream().collect(Collectors.toMap(ProductionPrintOrder::getProductOrderId, Function.identity()));
+            records.forEach(record -> {
+                ProductionPrintOrder productionPrintOrder = collect.get(record.getId());
+                if (productionPrintOrder != null) {
+                    productionPrintOrder.convertProductOrderDto(record);
+                }
+            });
+
+
+        }
+
+        return productOrderDtoIPage;
     }
 
     @Override
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
index 0b5008a..24de514 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.production.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -20,6 +21,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -91,6 +93,25 @@
 
         return productionPrintOrderDto;
     }
+
+    @Override
+    public List<ProductionPrintOrder> getListByOrders(List<Long> orderIds) {
+        if(CollUtil.isEmpty(orderIds)){
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ProductionPrintOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ProductionPrintOrder::getProductOrderId, orderIds);
+        List<ProductionPrintOrder> productionPrintOrders = productionPrintOrderMapper.selectList(queryWrapper);
+        // 鍘婚櫎閲嶅鐨刼rderIds鐨勮褰曞彧淇濈暀id鏈�澶х殑涓�涓�
+        return productionPrintOrders.stream().collect(Collectors.collectingAndThen(
+            Collectors.toMap(
+                ProductionPrintOrder::getProductOrderId,
+                productionPrintOrder -> productionPrintOrder,
+                (existing, replacement) -> existing.getId() > replacement.getId() ? existing : replacement
+            ),
+            map -> new ArrayList<>(map.values())
+        ));
+    }
 }
 
 
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index 55de9e3..0a0aa28 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -136,6 +136,10 @@
     @TableField(value = "delivery_date")
     private LocalDate deliveryDate;
 
+    @ApiModelProperty(value = "瀹為檯浜よ揣鏃ユ湡")
+    @TableField(value = "actually_delivery_date")
+    private LocalDate actuallyDeliveryDate;
+
     @TableField(exist = false)
     @ApiModelProperty(value = "浜よ揣澶╂暟宸�")
     private Integer deliveryDaysDiff;
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 6f99253..956fe89 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -26,6 +26,8 @@
         ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
         DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
         sl.delivery_date,
+        sl.actually_delivery_date,
+        sl.execution_date,
         CASE
         WHEN shipping_status_counts.total_count = 0 THEN false
         WHEN shipping_status_counts.unshipped_count = 0 THEN true

--
Gitblit v1.9.3