From e992aa74b2a75653f007ab12a83cfc28aee7d7a6 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 28 四月 2026 17:33:03 +0800
Subject: [PATCH] fix: 报工台账导出修改

---
 src/main/java/com/ruoyi/production/service/ProductionProductMainService.java          |    6 +
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   54 +++++++++++++
 src/main/java/com/ruoyi/production/dto/ProductionProductMainDetailExportDto.java      |   56 ++++++++++++++
 src/main/resources/mapper/production/ProductionProductMainMapper.xml                  |   16 ++++
 src/main/java/com/ruoyi/production/dto/ProductionProductMainSummaryExportDto.java     |   49 ++++++++++++
 src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java    |   36 +++++++-
 src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java                  |    4 +
 7 files changed, 216 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
index f4b85bb..8c4317e 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -3,7 +3,9 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductionProductMainDetailExportDto;
 import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.dto.ProductionProductMainSummaryExportDto;
 import com.ruoyi.production.dto.ProductionReportDailySummaryDto;
 import com.ruoyi.production.dto.ProductionReportStateDto;
 import com.ruoyi.production.pojo.ProductionProductMain;
@@ -29,6 +31,7 @@
 
     /**
      * 鎶ュ伐鏌ヨ
+     *
      * @param page
      * @param productionProductMainDto
      * @return
@@ -64,6 +67,7 @@
 
     /**
      * 鎶ュ伐鏂板鏇存柊
+     *
      * @param productionProductMainDto
      * @return
      */
@@ -108,13 +112,35 @@
 
 
     /**
-     * 瀵煎嚭
+     * 鎶ュ伐鍙拌处姹囨�诲鍑�
      */
+    @ApiOperation("鎶ュ伐鍙拌处姹囨�诲鍑�")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "workOrderIds", value = "宸ュ崟ID鍒楄〃, 鍙紶澶氫釜", allowMultiple = true, dataType = "long", paramType = "query"),
+            @ApiImplicitParam(name = "workOrderNo", value = "宸ュ崟缂栧彿(妯$硦)", dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "workOrderStatus", value = "宸ュ崟鐘舵��", dataType = "string", paramType = "query")
+    })
     @PostMapping("/export")
     public void export(HttpServletResponse response, ProductionProductMainDto productionProductMainDto) {
-        List<ProductionProductMainDto> list;
-        list = productionProductMainService.listPageProductionProductMainDto(new Page<>(1, -1), productionProductMainDto).getRecords();
-        ExcelUtil<ProductionProductMainDto> util = new ExcelUtil<ProductionProductMainDto>(ProductionProductMainDto.class);
-        util.exportExcel(response, list, "鐢熶骇鎶ュ伐鏁版嵁");
+        List<ProductionProductMainSummaryExportDto> list = productionProductMainService.listSummaryExportData(productionProductMainDto);
+        ExcelUtil<ProductionProductMainSummaryExportDto> util = new ExcelUtil<>(ProductionProductMainSummaryExportDto.class);
+        util.exportExcel(response, list, "鐢熶骇鎶ュ伐姹囨�绘暟鎹�");
+    }
+
+    /**
+     * 鎶ュ伐鏄庣粏瀵煎嚭
+     */
+    @ApiOperation("鎶ュ伐鏄庣粏瀵煎嚭")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "workOrderIds", value = "宸ュ崟ID鍒楄〃, 鍙紶澶氫釜", allowMultiple = true, dataType = "long", paramType = "query"),
+            @ApiImplicitParam(name = "workOrderId", value = "宸ュ崟ID", dataType = "long", paramType = "query"),
+            @ApiImplicitParam(name = "startDate", value = "寮�濮嬫棩鏈�(鎸夌粨鏉熸椂闂磋繃婊�, yyyy-MM-dd)", dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "endDate", value = "缁撴潫鏃ユ湡(鎸夌粨鏉熸椂闂磋繃婊�, yyyy-MM-dd)", dataType = "string", paramType = "query")
+    })
+    @PostMapping("/exportDetail")
+    public void exportDetail(HttpServletResponse response, ProductionProductMainDto productionProductMainDto) {
+        List<ProductionProductMainDetailExportDto> list = productionProductMainService.listDetailExportData(productionProductMainDto);
+        ExcelUtil<ProductionProductMainDetailExportDto> util = new ExcelUtil<>(ProductionProductMainDetailExportDto.class);
+        util.exportExcel(response, list, "鐢熶骇鎶ュ伐鏄庣粏鏁版嵁");
     }
 }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDetailExportDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDetailExportDto.java
new file mode 100644
index 0000000..5c665ad
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDetailExportDto.java
@@ -0,0 +1,56 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class ProductionProductMainDetailExportDto {
+
+    @Excel(name = "浜у搧缂栧彿", sort = 1)
+    private String productNo;
+
+    @Excel(name = "鎿嶄綔浜哄憳", sort = 2)
+    private String nickName;
+
+    @Excel(name = "宸ュ簭", sort = 3)
+    private String process;
+
+    @Excel(name = "宸ュ崟鍙�", sort = 4)
+    private String workOrderNo;
+
+    @Excel(name = "閿�鍞悎鍚屽彿", sort = 5)
+    private String salesContractNo;
+
+    @Excel(name = "鐢熶骇璁㈠崟鍙�", sort = 6)
+    private String productOrderNpsNo;
+
+    @Excel(name = "浜у搧鍚嶇О", sort = 7)
+    private String productName;
+
+    @Excel(name = "浜у搧瑙勬牸鍨嬪彿", sort = 8)
+    private String productModelName;
+
+    @Excel(name = "鍚堟牸鏁伴噺", sort = 9)
+    private BigDecimal quantity;
+
+    @Excel(name = "涓嶅悎鏍兼暟閲�", sort = 10)
+    private BigDecimal scrapQty;
+
+    @Excel(name = "鍗曚綅", sort = 11)
+    private String unit;
+
+    @Excel(name = "宸ュ簭鏍囧噯宸ユ椂(灏忔椂)", sort = 12)
+    private BigDecimal processStandardHours;
+
+    @Excel(name = "瀹為檯鎶ュ伐宸ユ椂(灏忔椂)", sort = 13)
+    private BigDecimal actualReportHours;
+
+    @Excel(name = "姣忎汉姣忔棩宸ユ椂(灏忔椂)", sort = 14)
+    private BigDecimal dailyPersonHours;
+
+    @Excel(name = "鍒涘缓鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 15)
+    private LocalDateTime createTime;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
index 5df78e1..a19c083 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -12,6 +12,7 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.List;
 
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -63,6 +64,9 @@
     @ApiModelProperty(value = "缁撴潫鏃ユ湡(鏄庣粏鏌ヨ鐢�)")
     private LocalDate endDate;
 
+    @ApiModelProperty(value = "宸ュ崟ID鍒楄〃(鏄庣粏瀵煎嚭鐢�)")
+    private List<Long> workOrderIds;
+
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "鏃ユ湡(鏄庣粏/姹囨�讳腑浣跨敤)")
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainSummaryExportDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainSummaryExportDto.java
new file mode 100644
index 0000000..36585b6
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductMainSummaryExportDto.java
@@ -0,0 +1,49 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ProductionProductMainSummaryExportDto {
+
+    @Excel(name = "宸ュ簭", sort = 1)
+    private String process;
+
+    @Excel(name = "宸ュ崟鍙�", sort = 2)
+    private String workOrderNo;
+
+    @Excel(name = "閿�鍞悎鍚屽彿", sort = 3)
+    private String salesContractNo;
+
+    @Excel(name = "鐢熶骇璁㈠崟鍙�", sort = 4)
+    private String productOrderNpsNo;
+
+    @Excel(name = "浜у搧鍚嶇О", sort = 5)
+    private String productName;
+
+    @Excel(name = "浜у搧瑙勬牸鍨嬪彿", sort = 6)
+    private String productModelName;
+
+    @Excel(name = "鍗曚綅", sort = 7)
+    private String unit;
+
+    @Excel(name = "鎬诲伐鏃�", sort = 8)
+    private BigDecimal projectTotalHours;
+
+    @Excel(name = "宸ュ簭鏍囧噯宸ユ椂(灏忔椂)", sort = 9)
+    private BigDecimal processStandardHours;
+
+    @Excel(name = "瀹為檯鎶ュ伐宸ユ椂(灏忔椂)", sort = 10)
+    private BigDecimal actualReportHours;
+
+    @Excel(name = "姣忎汉姣忔棩宸ユ椂(灏忔椂)", sort = 11)
+    private BigDecimal dailyPersonHours;
+
+    @Excel(name = "浜у嚭鎬绘暟閲�", sort = 12)
+    private BigDecimal outputTotalQuantity;
+
+    @Excel(name = "鎶ュ簾鎬绘暟閲�", sort = 13)
+    private BigDecimal scrapTotalQuantity;
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
index 142cbcf..c7eb9f4 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -3,7 +3,9 @@
 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.ProductionProductMainDetailExportDto;
 import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.dto.ProductionProductMainSummaryExportDto;
 import com.ruoyi.production.dto.ProductionReportDailySummaryDto;
 import com.ruoyi.production.dto.ProductionReportStateDto;
 import com.ruoyi.production.pojo.ProductionProductMain;
@@ -18,6 +20,10 @@
 
     IPage<ProductionProductMainDto> listPageProductionProductMainDetailDto(Page<ProductionProductMainDto> page, ProductionProductMainDto productionProductMainDto);
 
+    List<ProductionProductMainSummaryExportDto> listSummaryExportData(ProductionProductMainDto productionProductMainDto);
+
+    List<ProductionProductMainDetailExportDto> listDetailExportData(ProductionProductMainDto productionProductMainDto);
+
     Boolean addProductMain(ProductionProductMainDto productionProductMainDto);
 
     /**
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 2b069af..151eccb 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -18,7 +18,9 @@
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.dto.ProductionProductMainDetailExportDto;
 import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.dto.ProductionProductMainSummaryExportDto;
 import com.ruoyi.production.dto.ProductionReportDailySummaryDto;
 import com.ruoyi.production.dto.ProductionReportStateDto;
 import com.ruoyi.production.enums.ProductProcessEnum;
@@ -103,6 +105,58 @@
         return result;
     }
 
+    @Override
+    public List<ProductionProductMainSummaryExportDto> listSummaryExportData(ProductionProductMainDto productionProductMainDto) {
+        return listPageProductionProductMainDto(new Page<>(1, -1), productionProductMainDto)
+                .getRecords()
+                .stream()
+                .map(item -> {
+                    ProductionProductMainSummaryExportDto exportDto = new ProductionProductMainSummaryExportDto();
+                    exportDto.setProcess(item.getProcess());
+                    exportDto.setWorkOrderNo(item.getWorkOrderNo());
+                    exportDto.setSalesContractNo(item.getSalesContractNo());
+                    exportDto.setProductOrderNpsNo(item.getProductOrderNpsNo());
+                    exportDto.setProductName(item.getProductName());
+                    exportDto.setProductModelName(item.getProductModelName());
+                    exportDto.setUnit(item.getUnit());
+                    exportDto.setProjectTotalHours(item.getProjectTotalHours());
+                    exportDto.setProcessStandardHours(item.getProcessStandardHours());
+                    exportDto.setActualReportHours(item.getActualReportHours());
+                    exportDto.setDailyPersonHours(item.getDailyPersonHours());
+                    exportDto.setOutputTotalQuantity(item.getOutputTotalQuantity());
+                    exportDto.setScrapTotalQuantity(item.getScrapTotalQuantity());
+                    return exportDto;
+                })
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public List<ProductionProductMainDetailExportDto> listDetailExportData(ProductionProductMainDto productionProductMainDto) {
+        return listPageProductionProductMainDetailDto(new Page<>(1, -1), productionProductMainDto)
+                .getRecords()
+                .stream()
+                .map(item -> {
+                    ProductionProductMainDetailExportDto exportDto = new ProductionProductMainDetailExportDto();
+                    exportDto.setProductNo(item.getProductNo());
+                    exportDto.setNickName(item.getNickName());
+                    exportDto.setProcess(item.getProcess());
+                    exportDto.setWorkOrderNo(item.getWorkOrderNo());
+                    exportDto.setSalesContractNo(item.getSalesContractNo());
+                    exportDto.setProductOrderNpsNo(item.getProductOrderNpsNo());
+                    exportDto.setProductName(item.getProductName());
+                    exportDto.setProductModelName(item.getProductModelName());
+                    exportDto.setQuantity(item.getQuantity());
+                    exportDto.setScrapQty(item.getScrapQty());
+                    exportDto.setUnit(item.getUnit());
+                    exportDto.setProcessStandardHours(item.getProcessStandardHours());
+                    exportDto.setActualReportHours(item.getActualReportHours());
+                    exportDto.setDailyPersonHours(item.getDailyPersonHours());
+                    exportDto.setCreateTime(item.getCreateTime());
+                    return exportDto;
+                })
+                .collect(Collectors.toList());
+    }
+
     private void fillHourDefaults(List<ProductionProductMainDto> records) {
         if (records == null || records.isEmpty()) {
             return;
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index 133cfaf..ff9f34e 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -71,6 +71,14 @@
         left join sales_ledger sl on sl.id = po.sales_ledger_id
         left join sys_user u on u.user_id = ppm.user_id
         <where>
+            and ppm.status = 1
+            and ifnull(ppo.quantity, 0) > 0
+            <if test="c.workOrderIds != null and c.workOrderIds.size() > 0">
+                and ppm.work_order_id in
+                <foreach collection="c.workOrderIds" item="workOrderId" open="(" separator="," close=")">
+                    #{workOrderId}
+                </foreach>
+            </if>
             <if test="c.nickName != null and c.nickName != ''">
                 and u.nick_name like concat('%',#{c.nickName},'%')
             </if>
@@ -139,6 +147,14 @@
         left join sales_ledger sl on sl.id = po.sales_ledger_id
         left join sys_user u on u.user_id = ppm.user_id
         <where>
+            and ppm.status = 1
+            and ifnull(ppo.quantity, 0) > 0
+            <if test="c.workOrderIds != null and c.workOrderIds.size() > 0">
+                and ppm.work_order_id in
+                <foreach collection="c.workOrderIds" item="workOrderId" open="(" separator="," close=")">
+                    #{workOrderId}
+                </foreach>
+            </if>
             <if test="c.workOrderId != null">
                 and ppm.work_order_id = #{c.workOrderId}
             </if>

--
Gitblit v1.9.3