From b079a1727af6eeb2ebcfc44190a9b72a454d4f12 Mon Sep 17 00:00:00 2001
From: huangjiayang <5265313@qq.com>
Date: 星期五, 25 四月 2025 22:56:52 +0800
Subject: [PATCH] 【ADD】增加气体管路产能统计相关代码

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java             |  472 +++++++++++++++++++++++
 aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingRouteStat.java                              |  150 +++++++
 aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsGasPipingRouteStatController.java                |  130 ++++++
 aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java |   11 
 aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingPlanMapper.xml                                 |   47 ++
 aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingPlanMapper.java                             |   10 
 aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingPlan.java                                   |   12 
 aps-modules/aps-core/src/main/resources/mapper/core/ApsProcessRouteMapper.xml                                  |    1 
 aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java                        |   77 +++
 aps-modules/aps-core/src/main/java/com/aps/core/service/IApsGasPipingRouteStatService.java                     |   85 ++++
 aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml                            |  173 ++++++++
 aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsProcessRouteMapper.java                              |    1 
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineCapacityPlanServiceImpl.java        |    3 
 13 files changed, 1,166 insertions(+), 6 deletions(-)

diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsGasPipingRouteStatController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsGasPipingRouteStatController.java
new file mode 100644
index 0000000..8935b4d
--- /dev/null
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsGasPipingRouteStatController.java
@@ -0,0 +1,130 @@
+package com.aps.core.controller;
+
+import com.aps.common.core.utils.poi.ExcelUtil;
+import com.aps.common.core.web.controller.BaseController;
+import com.aps.common.core.web.domain.AjaxResult;
+import com.aps.common.core.web.page.TableDataInfo;
+import com.aps.common.log.annotation.Log;
+import com.aps.common.log.enums.BusinessType;
+import com.aps.common.security.annotation.RequiresPermissions;
+import com.aps.core.domain.ApsGasPipingRouteStat;
+import com.aps.core.service.IApsGasPipingRouteStatService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 姘斾綋绠¤矾浜ц兘璐熻浇缁熻Controller
+ * 
+ * @author hjy
+ * @date 2025-04-24
+ */
+
+@Tag(name = "姘斾綋绠¤矾浜ц兘璐熻浇缁熻", description = "姘斾綋绠¤矾浜ц兘璐熻浇缁熻鎺ュ彛")
+@RestController
+@RequestMapping("/apsGasPipingRouteStat")
+public class ApsGasPipingRouteStatController extends BaseController
+{
+    @Autowired
+    private IApsGasPipingRouteStatService apsGasPipingRouteStatService;
+
+    /**
+     * 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻鍒楄〃
+     */
+    @Operation(summary = "鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻鍒楄〃", description = "鍒嗛〉鏌ヨ")
+    @RequiresPermissions("apsGasPipingRouteStat:apsGasPipingRouteStat:list")
+    @GetMapping("/list")
+    public TableDataInfo list(@RequestBody ApsGasPipingRouteStat apsGasPipingRouteStat)
+    {
+        startPage();
+        List<ApsGasPipingRouteStat> list = apsGasPipingRouteStatService.selectApsGasPipingRouteStatList(apsGasPipingRouteStat);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭姘斾綋绠¤矾浜ц兘璐熻浇缁熻鍒楄〃
+     */
+    @Operation(summary = "瀵煎嚭姘斾綋绠¤矾浜ц兘璐熻浇缁熻鍒楄〃", description = "瀵煎嚭")
+    @RequiresPermissions("apsGasPipingRouteStat:apsGasPipingRouteStat:export")
+    @Log(title = "姘斾綋绠¤矾浜ц兘璐熻浇缁熻", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ApsGasPipingRouteStat apsGasPipingRouteStat)
+    {
+        List<ApsGasPipingRouteStat> list = apsGasPipingRouteStatService.selectApsGasPipingRouteStatList(apsGasPipingRouteStat);
+        ExcelUtil<ApsGasPipingRouteStat> util = new ExcelUtil<ApsGasPipingRouteStat>(ApsGasPipingRouteStat.class);
+        util.exportExcel(response, list, "姘斾綋绠¤矾浜ц兘璐熻浇缁熻鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇姘斾綋绠¤矾浜ц兘璐熻浇缁熻璇︾粏淇℃伅
+     */
+    @Operation(summary = "鑾峰彇姘斾綋绠¤矾浜ц兘璐熻浇缁熻璇︾粏淇℃伅", description = "鏍规嵁id鑾峰彇")
+    @RequiresPermissions("apsGasPipingRouteStat:apsGasPipingRouteStat:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(apsGasPipingRouteStatService.selectApsGasPipingRouteStatById(id));
+    }
+
+    /**
+     * 鏂板姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     */
+    @Operation(summary = "鏂板姘斾綋绠¤矾浜ц兘璐熻浇缁熻", description = "鍗曚釜鏂板")
+    @RequiresPermissions("apsGasPipingRouteStat:apsGasPipingRouteStat:add")
+    @Log(title = "姘斾綋绠¤矾浜ц兘璐熻浇缁熻", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ApsGasPipingRouteStat apsGasPipingRouteStat)
+    {
+        return toAjax(apsGasPipingRouteStatService.insertApsGasPipingRouteStat(apsGasPipingRouteStat));
+    }
+
+    /**
+     * 淇敼姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     */
+    @Operation(summary = "淇敼姘斾綋绠¤矾浜ц兘璐熻浇缁熻", description = "鍗曚釜淇敼")
+    @RequiresPermissions("apsGasPipingRouteStat:apsGasPipingRouteStat:edit")
+    @Log(title = "姘斾綋绠¤矾浜ц兘璐熻浇缁熻", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ApsGasPipingRouteStat apsGasPipingRouteStat)
+    {
+        return toAjax(apsGasPipingRouteStatService.updateApsGasPipingRouteStat(apsGasPipingRouteStat));
+    }
+
+    /**
+     * 鍒犻櫎姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     */
+    @Operation(summary = "鍒犻櫎姘斾綋绠¤矾浜ц兘璐熻浇缁熻", description = "鎵归噺鍒犻櫎")
+    @RequiresPermissions("apsGasPipingRouteStat:apsGasPipingRouteStat:remove")
+    @Log(title = "姘斾綋绠¤矾浜ц兘璐熻浇缁熻", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(apsGasPipingRouteStatService.deleteApsGasPipingRouteStatByIds(ids));
+    }
+
+    @Operation(summary = "璁$畻姘斾綋绠¤矾浜ц兘璐熻浇缁熻", description = "璁$畻")
+    @PostMapping("/computeCapacity")
+    public void computeCapacity()
+    {
+        apsGasPipingRouteStatService.computeCapacity();
+    }
+
+    @Operation(summary = "鑾峰彇姘斾綋绠¤矾浜ц兘璐熻浇缁熻", description = "璁$畻")
+    @PostMapping("/getCapacityPlanData")
+    public AjaxResult getCapacityPlanData(@RequestBody ApsGasPipingRouteStat apsGasPipingRouteStat)
+    {
+        return AjaxResult.success(apsGasPipingRouteStatService.getCapacityPlanData(apsGasPipingRouteStat));
+    }
+
+    @Operation(summary = "瀵煎嚭姘斾綋绠¤矾浜ц兘璐熻浇缁熻Excel琛�", description = "瀵煎嚭")
+    @GetMapping("/exportExcel")
+    public void exportExcel(@RequestBody ApsGasPipingRouteStat apsGasPipingRouteStat, HttpServletResponse response)
+    {
+        apsGasPipingRouteStatService.exportExcel(response, apsGasPipingRouteStat);
+    }
+
+}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java
index ece0314..f4ca43d 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java
@@ -42,7 +42,7 @@
      * 鏌ヨ姘斾綋绠¤矾浜ц兘瑙勫垝鍒楄〃
      */
     @Operation(summary = "鏌ヨ姘斾綋绠¤矾浜ц兘瑙勫垝鍒楄〃", description = "鍒嗛〉鏌ヨ")
-//    @RequiresPermissions("gasPipelineCapacityPlan:gasPipelineCapacityPlan:list")
+    @RequiresPermissions("gasPipelineCapacityPlan:gasPipelineCapacityPlan:list")
     @GetMapping("/list")
     public TableDataInfo list(ApsGasPipelineCapacityPlan apsGasPipelineCapacityPlan)
     {
@@ -57,12 +57,13 @@
                 apsGasPipelineCapacityPlanTemp.setProcessName(apsStandardProcessTemp.getProcessName());
                 list.add(apsGasPipelineCapacityPlanTemp);
             }
-        }else if(processList.size()>list.size()){
+        }
+        if(processList.size()>list.size()){
             List<String> newProcess = new ArrayList<>();
             for(ApsStandardProcess apsStandardProcessTemp : processList){
                 boolean flag = true;
                 for(ApsGasPipelineCapacityPlan temp : list){
-                    if(apsStandardProcessTemp.getMajor().equals(temp.getMajor())){
+                    if(apsStandardProcessTemp.getProcessName().equals(temp.getProcessName())){
                         flag = false;
                         break;
                     }
@@ -109,13 +110,13 @@
      * 鏂板姘斾綋绠¤矾浜ц兘瑙勫垝
      */
     @Operation(summary = "鏂板姘斾綋绠¤矾浜ц兘瑙勫垝", description = "鍗曚釜鏂板")
-    @RequiresPermissions("gasPipelineCapacityPlan:gasPipelineCapacityPlan:add")
+//    @RequiresPermissions("gasPipelineCapacityPlan:gasPipelineCapacityPlan:add")
     @Log(title = "姘斾綋绠¤矾浜ц兘瑙勫垝", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody List<ApsGasPipelineCapacityPlan> apsGasPipelineCapacityPlan)
     {
         apsGasPipelineCapacityPlan.forEach(apsGasPipelineCapacityPlanTemp -> {
-            if(apsGasPipelineCapacityPlanTemp.getId()!=null){
+            if(apsGasPipelineCapacityPlanTemp.getId()==null){
                 apsGasPipelineCapacityPlanService.insertApsGasPipelineCapacityPlan(apsGasPipelineCapacityPlanTemp);
             }else{
                 apsGasPipelineCapacityPlanService.updateApsGasPipelineCapacityPlan(apsGasPipelineCapacityPlanTemp);
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingPlan.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingPlan.java
index cb82baa..2138c12 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingPlan.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingPlan.java
@@ -8,6 +8,7 @@
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 姘斾綋绠¤矾璁″垝绠$悊瀵硅薄 aps_gas_piping_plan
@@ -171,6 +172,17 @@
 
     private String planType;
 
+    /** 宸ュ簭鍒楄〃 */
+    private List<ApsProcessRoute> apsProcessRoutes;
+
+    public List<ApsProcessRoute> getApsProcessRoutes() {
+        return apsProcessRoutes;
+    }
+
+    public void setApsProcessRoutes(List<ApsProcessRoute> apsProcessRoutes) {
+        this.apsProcessRoutes = apsProcessRoutes;
+    }
+
     public void setId(String id)
     {
         this.id = id;
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingRouteStat.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingRouteStat.java
new file mode 100644
index 0000000..b3f47f1
--- /dev/null
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipingRouteStat.java
@@ -0,0 +1,150 @@
+package com.aps.core.domain;
+
+import com.aps.common.core.annotation.Excel;
+import com.aps.common.core.web.domain.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.data.annotation.Transient;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 姘斾綋绠¤矾浜ц兘璐熻浇缁熻瀵硅薄 aps_gas_piping_route_stat
+ * 
+ * @author hjy
+ * @date 2025-04-24
+ */
+@Schema(description = "姘斾綋绠¤矾浜ц兘璐熻浇缁熻瀹炰綋绫�")
+@Data
+public class ApsGasPipingRouteStat extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭id */
+    @Schema(description = "涓婚敭id", type = "Long")
+    private String id;
+
+    /** 宸ュ崟鍙� */
+    @Excel(name = "宸ュ崟鍙�")
+    @Schema(description = "宸ュ崟鍙�", type = "String")
+    private String workOrderNo;
+
+    /** 宸ュ簭鍙� */
+    @Excel(name = "宸ュ簭鍙�")
+    @Schema(description = "宸ュ簭鍙�", type = "String")
+    private String roadProcessNumber;
+
+    /** 褰撳墠宸ュ簭鍙� */
+    @Excel(name = "褰撳墠宸ュ簭鍙�")
+    @Schema(description = "褰撳墠宸ュ簭鍙�", type = "String")
+    private String currentProcessNumber;
+
+    /** 鐢熶骇鏁伴噺 */
+    @Excel(name = "鐢熶骇鏁伴噺")
+    @Schema(description = "鐢熶骇鏁伴噺", type = "BigDecimal")
+    private BigDecimal productionQuantity;
+
+    /** 鏍囧噯宸ユ椂 */
+    @Excel(name = "鏍囧噯宸ユ椂")
+    @Schema(description = "鏍囧噯宸ユ椂", type = "BigDecimal")
+    private BigDecimal standardTime;
+
+    /** 宸ュ簭鎬诲伐鏃� */
+    @Excel(name = "宸ュ簭鎬诲伐鏃�")
+    @Schema(description = "宸ュ簭鎬诲伐鏃�", type = "BigDecimal")
+    private BigDecimal processTotalTime;
+
+    /** 璁″垝寮�宸ユ棩 */
+    @Excel(name = "璁″垝寮�宸ユ棩")
+    @Schema(description = "璁″垝寮�宸ユ棩", type = "Date")
+    private Date processPlanStartDay;
+
+    /** 璁捐宸ユ椂 */
+    @Excel(name = "璁捐宸ユ椂")
+    @Schema(description = "璁捐宸ユ椂", type = "Long")
+    private Long designTimes;
+
+    /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
+    @Schema(description = "鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�", type = "String")
+    private String delFlag;
+
+    /** 宸ュ簭鍚嶇О */
+    @Excel(name = "宸ュ簭鍚嶇О")
+    @Schema(description = "宸ュ簭鍚嶇О", type = "String")
+    private String processName;
+
+    /** 鏂欏彿 */
+    @Excel(name = "鏂欏彿")
+    @Schema(description = "鏂欏彿", type = "String")
+    private String itemNumber;
+
+    /** 鏍囧噯鐢ㄩ噺 */
+    @Excel(name = "鏍囧噯鐢ㄩ噺")
+    @Schema(description = "鏍囧噯鐢ㄩ噺", type = "BigDecimal")
+    private BigDecimal standardDosage;
+
+    /** 宸ュ簭鎬荤敤閲� */
+    @Excel(name = "宸ュ簭鎬荤敤閲�")
+    @Schema(description = "宸ュ簭鎬荤敤閲�", type = "BigDecimal")
+    private BigDecimal processTotalDosage;
+
+    /** 璁捐浜ц兘 */
+    @Excel(name = "璁捐浜ц兘")
+    @Schema(description = "璁捐浜ц兘", type = "BigDecimal")
+    private BigDecimal designCapacity;
+
+    /** 璁捐浜ц兘 */
+    @Excel(name = "涓撲笟")
+    @Schema(description = "涓撲笟", type = "String")
+    private String major;
+
+    /** 骞� */
+    @Excel(name = "骞�")
+    @Schema(description = "骞�", type = "String")
+    private String planStartYear;
+
+    /** 鏈� */
+    @Excel(name = "鏈�")
+    @Schema(description = "鏈�", type = "String")
+    private String planStartMonth;
+
+    /** 鏃� */
+    @Excel(name = "鏃�")
+    @Schema(description = "鏃�", type = "String")
+    private String planStartDay;
+
+    /** 鎵规鍙� */
+    @Excel(name = "鎵规鍙�")
+    private String batchNumber;
+
+    @Transient
+    private String searchStartDate;
+
+    @Transient
+    private String searchEndDate;
+
+    @Transient
+    private String searchType;
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("workOrderNo", getWorkOrderNo())
+            .append("roadProcessNumber", getRoadProcessNumber())
+            .append("currentProcessNumber", getCurrentProcessNumber())
+            .append("productionQuantity", getProductionQuantity())
+            .append("standardTime", getStandardTime())
+            .append("processTotalTime", getProcessTotalTime())
+            .append("processPlanStartDay", getProcessPlanStartDay())
+            .append("designTimes", getDesignTimes())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("processName", getProcessName())
+            .append("createTime", getCreateTime())
+            .toString();
+    }
+}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingPlanMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingPlanMapper.java
index f8abec7..3de94b4 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingPlanMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingPlanMapper.java
@@ -1,8 +1,9 @@
 package com.aps.core.mapper;
 
-import java.util.List;
 import com.aps.core.domain.ApsGasPipingPlan;
 import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
 
 /**
  * 姘斾綋绠¤矾璁″垝绠$悊Mapper鎺ュ彛
@@ -65,4 +66,11 @@
      * @return 缁撴灉
      */
     int removeAllPlans();
+
+    /**
+     * 鑾峰彇姘斾綋绠¤矾宸ュ崟鍏宠仈宸ュ簭鏁版嵁
+     * @param apsGasPipingPlan
+     * @return
+     */
+    public List<ApsGasPipingPlan> selectApsGasPipingPlanWithProcess(ApsGasPipingPlan apsGasPipingPlan);
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java
new file mode 100644
index 0000000..992ecaf
--- /dev/null
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java
@@ -0,0 +1,77 @@
+package com.aps.core.mapper;
+
+import com.aps.core.domain.ApsGasPipingRouteStat;
+
+import java.util.List;
+
+/**
+ * 姘斾綋绠¤矾浜ц兘璐熻浇缁熻Mapper鎺ュ彛
+ * 
+ * @author hjy
+ * @date 2025-04-24
+ */
+public interface ApsGasPipingRouteStatMapper 
+{
+    /**
+     * 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param id 姘斾綋绠¤矾浜ц兘璐熻浇缁熻涓婚敭
+     * @return 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     */
+    public ApsGasPipingRouteStat selectApsGasPipingRouteStatById(String id);
+
+    /**
+     * 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻鍒楄〃
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 姘斾綋绠¤矾浜ц兘璐熻浇缁熻闆嗗悎
+     */
+    public List<ApsGasPipingRouteStat> selectApsGasPipingRouteStatList(ApsGasPipingRouteStat apsGasPipingRouteStat);
+
+    /**
+     * 鏂板姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 缁撴灉
+     */
+    public int insertApsGasPipingRouteStat(ApsGasPipingRouteStat apsGasPipingRouteStat);
+
+    /**
+     * 淇敼姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 缁撴灉
+     */
+    public int updateApsGasPipingRouteStat(ApsGasPipingRouteStat apsGasPipingRouteStat);
+
+    /**
+     * 鍒犻櫎姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param id 姘斾綋绠¤矾浜ц兘璐熻浇缁熻涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteApsGasPipingRouteStatById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteApsGasPipingRouteStatByIds(String[] ids);
+
+    /**
+     * 鏍规嵁鎵规鍙峰垹闄ゆ暟鎹�
+     * @param batchNumber
+     * @return
+     */
+    public int deleteApsGasPipingRouteStatByBatchNum(String batchNumber);
+
+
+    /**
+     * 鎵归噺鎻掑叆绠¤矾姘旀煖浜ц兘鏁版嵁
+     * @param apsGasPipingRouteStatList
+     * @return
+     */
+    public int insertApsGasPipingRouteStatBatch(List<ApsGasPipingRouteStat> apsGasPipingRouteStatList);
+}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsProcessRouteMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsProcessRouteMapper.java
index 252ee63..6f5031d 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsProcessRouteMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsProcessRouteMapper.java
@@ -67,4 +67,5 @@
      * @return
      */
     public List<ApsProcessRoute> selectProcessNameList(String orgCode);
+
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsGasPipingRouteStatService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsGasPipingRouteStatService.java
new file mode 100644
index 0000000..664fac3
--- /dev/null
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsGasPipingRouteStatService.java
@@ -0,0 +1,85 @@
+package com.aps.core.service;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.aps.core.domain.ApsGasPipingRouteStat;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.util.List;
+
+/**
+ * 姘斾綋绠¤矾浜ц兘璐熻浇缁熻Service鎺ュ彛
+ * 
+ * @author hjy
+ * @date 2025-04-24
+ */
+public interface IApsGasPipingRouteStatService 
+{
+    /**
+     * 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param id 姘斾綋绠¤矾浜ц兘璐熻浇缁熻涓婚敭
+     * @return 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     */
+    public ApsGasPipingRouteStat selectApsGasPipingRouteStatById(String id);
+
+    /**
+     * 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻鍒楄〃
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 姘斾綋绠¤矾浜ц兘璐熻浇缁熻闆嗗悎
+     */
+    public List<ApsGasPipingRouteStat> selectApsGasPipingRouteStatList(ApsGasPipingRouteStat apsGasPipingRouteStat);
+
+    /**
+     * 鏂板姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 缁撴灉
+     */
+    public int insertApsGasPipingRouteStat(ApsGasPipingRouteStat apsGasPipingRouteStat);
+
+    /**
+     * 淇敼姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 缁撴灉
+     */
+    public int updateApsGasPipingRouteStat(ApsGasPipingRouteStat apsGasPipingRouteStat);
+
+    /**
+     * 鎵归噺鍒犻櫎姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑姘斾綋绠¤矾浜ц兘璐熻浇缁熻涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteApsGasPipingRouteStatByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎姘斾綋绠¤矾浜ц兘璐熻浇缁熻淇℃伅
+     * 
+     * @param id 姘斾綋绠¤矾浜ц兘璐熻浇缁熻涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteApsGasPipingRouteStatById(String id);
+
+    /**
+     * 璁$畻浜ц兘鏁版嵁鍒板簳琛�
+     * @param yearMonth
+     * @return
+     */
+    boolean computeCapacity();
+
+    /**
+     * 鑾峰彇浜ц兘璁″垝鏁版嵁
+     * @param year
+     * @param month
+     * @return
+     */
+    public JSONObject getCapacityPlanData(ApsGasPipingRouteStat apsGasPipingRouteStat);
+
+    /**
+     * 瀵煎嚭鏁版嵁
+     * @param response
+     */
+    public void exportExcel(HttpServletResponse response, ApsGasPipingRouteStat apsGasPipingRouteStat);
+}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineCapacityPlanServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineCapacityPlanServiceImpl.java
index d11bd09..f175d09 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineCapacityPlanServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineCapacityPlanServiceImpl.java
@@ -1,6 +1,7 @@
 package com.aps.core.service.impl;
 
 import com.aps.common.core.utils.DateUtils;
+import com.aps.common.security.utils.SecurityUtils;
 import com.aps.core.domain.ApsGasPipelineCapacityPlan;
 import com.aps.core.mapper.ApsGasPipelineCapacityPlanMapper;
 import com.aps.core.service.IApsGasPipelineCapacityPlanService;
@@ -55,6 +56,7 @@
     public int insertApsGasPipelineCapacityPlan(ApsGasPipelineCapacityPlan apsGasPipelineCapacityPlan)
     {
         apsGasPipelineCapacityPlan.setCreateTime(DateUtils.getNowDate());
+        apsGasPipelineCapacityPlan.setCreateBy(SecurityUtils.getUsername());
         return apsGasPipelineCapacityPlanMapper.insertApsGasPipelineCapacityPlan(apsGasPipelineCapacityPlan);
     }
 
@@ -68,6 +70,7 @@
     public int updateApsGasPipelineCapacityPlan(ApsGasPipelineCapacityPlan apsGasPipelineCapacityPlan)
     {
         apsGasPipelineCapacityPlan.setUpdateTime(DateUtils.getNowDate());
+        apsGasPipelineCapacityPlan.setUpdateBy(SecurityUtils.getUsername());
         return apsGasPipelineCapacityPlanMapper.updateApsGasPipelineCapacityPlan(apsGasPipelineCapacityPlan);
     }
 
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
new file mode 100644
index 0000000..0522a73
--- /dev/null
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
@@ -0,0 +1,472 @@
+package com.aps.core.service.impl;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.aps.common.core.utils.DateUtils;
+import com.aps.common.core.utils.uuid.IdUtils;
+import com.aps.common.security.utils.SecurityUtils;
+import com.aps.core.domain.*;
+import com.aps.core.mapper.ApsGasPipelineCapacityPlanMapper;
+import com.aps.core.mapper.ApsGasPipingPlanMapper;
+import com.aps.core.mapper.ApsGasPipingRouteStatMapper;
+import com.aps.core.service.IApsGasMaterialUsageService;
+import com.aps.core.service.IApsGasPipingRouteStatService;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.streaming.SXSSFCell;
+import org.apache.poi.xssf.streaming.SXSSFRow;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.YearMonth;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * 姘斾綋绠¤矾浜ц兘璐熻浇缁熻Service涓氬姟灞傚鐞�
+ * 
+ * @author hjy
+ * @date 2025-04-24
+ */
+@Slf4j
+@Service
+public class ApsGasPipingRouteStatServiceImpl implements IApsGasPipingRouteStatService 
+{
+    @Autowired
+    private ApsGasPipingRouteStatMapper apsGasPipingRouteStatMapper;
+
+    @Autowired
+    private ApsGasPipingPlanMapper apsGasPipingPlanMapper;
+
+    @Autowired
+    private ApsGasPipelineCapacityPlanMapper apsGasPipelineCapacityPlanMapper;
+
+    @Autowired
+    private IApsGasMaterialUsageService apsGasMaterialUsageService;
+
+    /**
+     * 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param id 姘斾綋绠¤矾浜ц兘璐熻浇缁熻涓婚敭
+     * @return 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     */
+    @Override
+    public ApsGasPipingRouteStat selectApsGasPipingRouteStatById(String id)
+    {
+        return apsGasPipingRouteStatMapper.selectApsGasPipingRouteStatById(id);
+    }
+
+    /**
+     * 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻鍒楄〃
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     */
+    @Override
+    public List<ApsGasPipingRouteStat> selectApsGasPipingRouteStatList(ApsGasPipingRouteStat apsGasPipingRouteStat)
+    {
+        return apsGasPipingRouteStatMapper.selectApsGasPipingRouteStatList(apsGasPipingRouteStat);
+    }
+
+    /**
+     * 鏂板姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertApsGasPipingRouteStat(ApsGasPipingRouteStat apsGasPipingRouteStat)
+    {
+        apsGasPipingRouteStat.setCreateTime(DateUtils.getNowDate());
+        apsGasPipingRouteStat.setCreateBy(SecurityUtils.getUsername());
+        return apsGasPipingRouteStatMapper.insertApsGasPipingRouteStat(apsGasPipingRouteStat);
+    }
+
+    /**
+     * 淇敼姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param apsGasPipingRouteStat 姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateApsGasPipingRouteStat(ApsGasPipingRouteStat apsGasPipingRouteStat)
+    {
+        apsGasPipingRouteStat.setUpdateBy(SecurityUtils.getUsername());
+        apsGasPipingRouteStat.setUpdateTime(DateUtils.getNowDate());
+        return apsGasPipingRouteStatMapper.updateApsGasPipingRouteStat(apsGasPipingRouteStat);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎姘斾綋绠¤矾浜ц兘璐熻浇缁熻
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑姘斾綋绠¤矾浜ц兘璐熻浇缁熻涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteApsGasPipingRouteStatByIds(String[] ids)
+    {
+        return apsGasPipingRouteStatMapper.deleteApsGasPipingRouteStatByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎姘斾綋绠¤矾浜ц兘璐熻浇缁熻淇℃伅
+     * 
+     * @param id 姘斾綋绠¤矾浜ц兘璐熻浇缁熻涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteApsGasPipingRouteStatById(String id)
+    {
+        return apsGasPipingRouteStatMapper.deleteApsGasPipingRouteStatById(id);
+    }
+
+    @Override
+    public boolean computeCapacity() {
+//        PageHelper.startPage(1, 500);
+        List<ApsGasPipingPlan> apsGasPipingPlans = apsGasPipingPlanMapper.selectApsGasPipingPlanWithProcess(new ApsGasPipingPlan());
+        List<ApsGasPipingRouteStat> apsGasPipingRouteStatList = new ArrayList<>();
+        /*鏈璁$畻鎵规鍙�*/
+        String batchNum = IdUtils.fastSimpleUUID();
+        try {
+            apsGasPipingPlans.forEach(apsGasPipingPlan -> {
+                List<ApsProcessRoute> apsProcessRoutes = apsGasPipingPlan.getApsProcessRoutes();
+                //鎸夌収宸ュ簭搴忓彿鍗囧簭鎺掑簭
+                apsProcessRoutes.sort((a, b)->a.getProcessNumber().compareTo(b.getProcessNumber()));
+                //鏄惁鎵惧埌褰撳墠宸ュ簭
+                boolean isFind = false;
+                for (int i=0;i<apsProcessRoutes.size();i++){
+                    ApsProcessRoute apsProcessRoute = apsProcessRoutes.get(i);
+                    ApsGasPipingRouteStat apsGasPipingRouteStat = new ApsGasPipingRouteStat();
+                    //宸ュ崟鍙�
+                    apsGasPipingRouteStat.setWorkOrderNo(apsGasPipingPlan.getDocumentNumber());
+                    //鏂欏彿
+                    apsGasPipingRouteStat.setItemNumber(apsGasPipingPlan.getItemNumber());
+                    //褰撳墠宸ュ簭鍙�
+                    apsGasPipingRouteStat.setCurrentProcessNumber(apsGasPipingPlan.getProcessNumber());
+                    //鐢熶骇鏁伴噺
+                    apsGasPipingRouteStat.setProductionQuantity(apsGasPipingPlan.getProductionQuantity());
+                    //宸ュ簭鍚嶇О
+                    apsGasPipingRouteStat.setProcessName(apsProcessRoute.getProcessName());
+                    //宸ュ簭鍙�
+                    apsGasPipingRouteStat.setRoadProcessNumber(apsProcessRoute.getProcessNumber());
+                    //鏍囧噯宸ユ椂
+                    apsGasPipingRouteStat.setStandardTime(apsProcessRoute.getStandardTime());
+                    //涓撲笟
+                    apsGasPipingRouteStat.setMajor(apsGasPipingPlan.getPlanType());
+                    //宸ュ簭鎬诲伐鏃� 绛変簬 鏍囧噯宸ユ椂*鐢熶骇鏁伴噺
+                    apsGasPipingRouteStat.setProcessTotalTime(apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()));
+                    //璁″垝寮�宸ユ棩
+                    if(apsGasPipingRouteStat.getCurrentProcessNumber().equals(apsGasPipingRouteStat.getRoadProcessNumber())) {
+                        /* 瀵� stat.getProcessPlanStartDay() 鍜屽綋鍓嶆棩鏈� 杩涜瀵规瘮锛屽彧瀵规瘮鍒版棩锛屼笉鐢ㄧ鍗佸垎绉�*/
+                        LocalDate startLocalDate = LocalDate.ofInstant(apsProcessRoute.getProcessPlanStartDay().toInstant(), ZoneId.systemDefault());
+                        LocalDate nowLocalDate = LocalDate.now();
+                        if (startLocalDate.isBefore(nowLocalDate)) {
+                            apsGasPipingRouteStat.setProcessPlanStartDay(new Date());
+                        }else{
+                            apsGasPipingRouteStat.setProcessPlanStartDay(apsProcessRoute.getProcessPlanStartDay());
+                        }
+                        isFind = true;
+                    }
+                    if(!isFind){
+                        continue;
+                    }
+                    // 涓婁竴閬撳伐搴忕殑缁撴潫鏃堕棿 = 涓婁竴閬撳伐搴忕殑寮�濮嬫椂闂� + 涓婁竴閬撳伐搴忕殑鎬诲伐鏃�
+                    if(apsGasPipingRouteStat.getProcessPlanStartDay()==null){
+                        LocalDateTime previousProcessPlanStartDay = apsProcessRoutes.get(i - 1).getProcessPlanStartDay().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+                        long previousProcessTotalTime = apsGasPipingRouteStatList.get(i - 1).getProcessTotalTime().longValue();
+                        LocalDateTime currentProcessPlanStartDay = previousProcessPlanStartDay.plusHours(previousProcessTotalTime);
+                        apsGasPipingRouteStat.setProcessPlanStartDay(Date.from(Timestamp.valueOf(currentProcessPlanStartDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).toInstant()));
+                    }
+                    //鎻掑叆 骞� 鏈� 鏃�
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                    String formattedDate = sdf.format(apsGasPipingRouteStat.getProcessPlanStartDay());
+                    String[] dateParts = formattedDate.split("-");
+                    apsGasPipingRouteStat.setPlanStartYear(String.valueOf(Integer.parseInt(dateParts[0])));
+                    apsGasPipingRouteStat.setPlanStartMonth(String.valueOf(Integer.parseInt(dateParts[1])));
+                    apsGasPipingRouteStat.setPlanStartDay(String.valueOf(Integer.parseInt(dateParts[2])));
+                    //鏍囧噯鐢ㄩ噺 鏌ヨ鐗╂枡鐢ㄩ噺琛�
+//                    ApsGasMaterialUsage apsGasMaterialUsage = new ApsGasMaterialUsage();
+//                    apsGasMaterialUsage.setItemNumber(apsGasPipingPlan.getItemNumber());
+//                    apsGasMaterialUsage.setProcessName(apsProcessRoute.getProcessName());
+//                    List<ApsGasMaterialUsage> apsGasMaterialUsageList = apsGasMaterialUsageService.selectApsGasMaterialUsageList(apsGasMaterialUsage);
+                    apsGasPipingRouteStat.setStandardDosage(apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()));
+                    //宸ュ簭鎬荤敤閲� = 鏍囧噯鐢ㄩ噺*鐢熶骇鏁伴噺
+                    apsGasPipingRouteStat.setProcessTotalDosage(apsGasPipingRouteStat.getStandardDosage().multiply(apsGasPipingPlan.getProductionQuantity()));
+                    apsGasPipingRouteStat.setCreateTime(DateUtils.getNowDate());
+                    apsGasPipingRouteStat.setCreateBy("auto");
+                    apsGasPipingRouteStat.setBatchNumber(batchNum);
+                    apsGasPipingRouteStat.setId(IdUtils.fastSimpleUUID());
+                    apsGasPipingRouteStatList.add(apsGasPipingRouteStat);
+                }
+            });
+            List<ApsGasPipingRouteStat> tempInsertList = new ArrayList<>();
+            for (int i = 0; i < apsGasPipingRouteStatList.size(); i++) {
+                tempInsertList.add(apsGasPipingRouteStatList.get(i));
+                if(tempInsertList.size()==500){
+                    apsGasPipingRouteStatMapper.insertApsGasPipingRouteStatBatch(tempInsertList);
+                    tempInsertList = new ArrayList<>();
+                }else if(i==apsGasPipingRouteStatList.size()-1){
+                    apsGasPipingRouteStatMapper.insertApsGasPipingRouteStatBatch(tempInsertList);
+                }
+            }
+            apsGasPipingRouteStatMapper.deleteApsGasPipingRouteStatByBatchNum(batchNum);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public JSONObject getCapacityPlanData(ApsGasPipingRouteStat apsGasPipingRouteStat) {
+        JSONObject result = new JSONObject();
+        HashSet<String> startPlanTimeSet = new HashSet<>();
+        JSONArray processData = new JSONArray();
+        try {
+            //鑾峰彇宸ュ簭璁″垝浜ц兘鏁版嵁
+            HashMap<String, ApsGasPipelineCapacityPlan> apsGasPipingPlanMap = new HashMap<>();
+            List<ApsGasPipelineCapacityPlan> apsGasPipelineCapacityPlanList = apsGasPipelineCapacityPlanMapper.selectApsGasPipelineCapacityPlanList(new ApsGasPipelineCapacityPlan());
+            apsGasPipelineCapacityPlanList.forEach(apsGasPipelineCapacityPlan -> {
+                apsGasPipingPlanMap.put(apsGasPipelineCapacityPlan.getProcessName(),apsGasPipelineCapacityPlan);
+            });
+            //璁$畻鏃ヤ骇鑳芥暟鎹�
+            DateTimeFormatter formatter = null;
+            List<ApsGasPipingRouteStat> apsGasPipingRouteStats;
+            SimpleDateFormat simpleDateFormat = null;
+            YearMonth yearMonth = YearMonth.parse(apsGasPipingRouteStat.getSearchEndDate());
+            int daysInMonth = yearMonth.lengthOfMonth();
+            apsGasPipingRouteStat.setSearchStartDate(apsGasPipingRouteStat.getSearchStartDate()+"-01 00:00:00");
+            apsGasPipingRouteStat.setSearchEndDate(apsGasPipingRouteStat.getSearchEndDate()+"-"+ daysInMonth +" 23:59:59");
+            if("day".equals(apsGasPipingRouteStat.getSearchType())){
+                formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            }else if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+            }
+            apsGasPipingRouteStats = apsGasPipingRouteStatMapper.selectApsGasPipingRouteStatList(apsGasPipingRouteStat);
+            //鏍规嵁寮�宸ユ棩杩涜鍗囧簭鎺掑簭
+            apsGasPipingRouteStats.sort((a, b)->a.getPlanStartDay().compareTo(b.getPlanStartDay()));
+            //宸ュ簭鍒嗙粍缁熻
+            HashMap<String, List<ApsResourceDateStat>> processMap = new HashMap<>();
+            List<HashMap<String, List<ApsResourceDateStat>>> processList = new ArrayList<>();
+            HashMap<String, List<ApsResourceDateStat>> processMapMonth = new HashMap<>();
+            List<HashMap<String, List<ApsResourceDateStat>>> processListMonth = new ArrayList<>();
+            //宸ュ簭寮�宸ユ棩鏈�
+            String planStartDate = "";
+            for (ApsGasPipingRouteStat apsGasPipingRouteStatTemp : apsGasPipingRouteStats) {
+                planStartDate = simpleDateFormat.format(apsGasPipingRouteStatTemp.getProcessPlanStartDay());
+                if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                    planStartDate = planStartDate+"-01";
+                }
+                ApsResourceDateStat apsResourceDateStat = new ApsResourceDateStat();
+                apsResourceDateStat.setPlanDay(LocalDate.parse(planStartDate, formatter));
+                apsResourceDateStat.setResourceName(apsGasPipingRouteStatTemp.getProcessName());
+                //鏌ヨ姘旀煖绠¤矾浜ц兘瑙勫垝琛�
+                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName())!=null?apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName()).getDayProduceAllNum().intValue():0);
+                //鏌ヨ鏂欏彿宸ュ簭浜ц兘琛�
+                apsResourceDateStat.setRequireTimes(apsGasPipingRouteStatTemp.getProcessTotalTime().intValue());
+                if(apsResourceDateStat.getDesignTimes()!=0){
+                    apsResourceDateStat.setCapacityLoad(BigDecimal.valueOf(apsResourceDateStat.getRequireTimes()/apsResourceDateStat.getDesignTimes()* 100L));
+                }else{
+                    apsResourceDateStat.setCapacityLoad(BigDecimal.valueOf(0));
+                }
+                List<ApsResourceDateStat> apsResourceDateStatList = new ArrayList<>();
+                if(processMap.containsKey(apsGasPipingRouteStatTemp.getProcessName())){
+                    apsResourceDateStatList = processMap.get(apsGasPipingRouteStatTemp.getProcessName());
+                }
+                apsResourceDateStatList.add(apsResourceDateStat);
+                processMap.put(apsGasPipingRouteStatTemp.getProcessName(), apsResourceDateStatList);
+            }
+            processMap.forEach((processName, apsResourceDateStatList) -> {
+                HashMap<String, ApsResourceDateStat> dayMap = new HashMap<>();
+                apsResourceDateStatList.forEach(apsResourceDateStat -> {
+                    startPlanTimeSet.add(apsResourceDateStat.getPlanDay().toString());
+                    if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                        if(dayMap.containsKey(apsResourceDateStat.getPlanDay().toString())){
+                            ApsResourceDateStat apsResourceDateStatTemp = dayMap.get(apsResourceDateStat.getPlanDay().toString());
+                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName)!=null?apsGasPipingPlanMap.get(processName).getMonthProduceAllNum().intValue():0);
+                            apsResourceDateStatTemp.setRequireTimes(apsResourceDateStatTemp.getRequireTimes()+apsResourceDateStat.getRequireTimes());
+                            if(apsResourceDateStatTemp.getDesignTimes()!=0){
+                                apsResourceDateStatTemp.setCapacityLoad(BigDecimal.valueOf(apsResourceDateStatTemp.getRequireTimes()/apsResourceDateStatTemp.getDesignTimes()* 100L));
+                            }else{
+                                apsResourceDateStatTemp.setCapacityLoad(BigDecimal.valueOf(0));
+                            }
+                            apsResourceDateStatTemp.setResourceGroupName(processName);
+                            apsResourceDateStatTemp.setPlanDay(apsResourceDateStat.getPlanDay());
+                            dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStatTemp);
+                        }else{
+                            dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStat);
+                        }
+                    }
+                });
+                if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                    List<ApsResourceDateStat> tempList = new ArrayList<>();
+                    dayMap.forEach((key, value) -> {
+                        tempList.add(value);
+                    });
+                    processMapMonth.put(processName, tempList);
+                }
+            });
+            List<String> sortedStartPlanTimeList = new ArrayList<>(startPlanTimeSet);
+            Collections.sort(sortedStartPlanTimeList);
+//            processMap.forEach((processName, apsResourceDateStatList) -> {
+//                HashMap<String, ApsResourceDateStat> dayMap = new HashMap<>();
+//                apsResourceDateStatList.forEach(apsResourceDateStat -> {
+//                    startPlanTimeSet.add(apsResourceDateStat.getPlanDay().toString());
+//                    if(dayMap.containsKey(apsResourceDateStat.getPlanDay().toString())){
+//                        ApsResourceDateStat apsResourceDateStatTemp = dayMap.get(apsResourceDateStat.getPlanDay().toString());
+//                        if("day".equals(apsGasPipingRouteStat.getSearchType())){
+//                            apsResourceDateStatTemp.setDesignTimes(apsResourceDateStatTemp.getDesignTimes()+apsResourceDateStat.getDesignTimes());
+//                        }else if("month".equals(apsGasPipingRouteStat.getSearchType())){
+//                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName)!=null?apsGasPipingPlanMap.get(processName).getMonthProduceAllNum().intValue():0);
+//                        }
+//                        apsResourceDateStatTemp.setRequireTimes(apsResourceDateStatTemp.getRequireTimes()+apsResourceDateStat.getRequireTimes());
+//                        if(apsResourceDateStatTemp.getDesignTimes()!=0){
+//                            apsResourceDateStatTemp.setCapacityLoad(BigDecimal.valueOf(apsResourceDateStatTemp.getRequireTimes()/apsResourceDateStatTemp.getDesignTimes()* 100L));
+//                        }
+//                        apsResourceDateStatTemp.setResourceGroupName(processName);
+//                        dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStatTemp);
+//                    }else{
+//                        dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStat);
+//                    }
+//                });
+//                JSONArray tempList = new JSONArray();
+//                dayMap.forEach((key, value) -> {
+//                    JSONObject temp = new JSONObject();
+//                    temp.put("planDay", key);
+//                    temp.put("designTimes", value.getDesignTimes());
+//                    temp.put("requireTimes", value.getRequireTimes());
+//                    temp.put("capacityLoad", value.getCapacityLoad());
+//                    temp.put("resourceGroupName", value.getResourceGroupName());
+//                    tempList.add(temp);
+//                });
+//                processData.add(new JSONObject().put(processName, tempList));
+//            });
+            if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                for (String key : processMapMonth.keySet()) {
+                    HashMap<String, List<ApsResourceDateStat>> temp = new HashMap<>();
+                    temp.put(key, processMapMonth.get(key));
+                    processListMonth.add(temp);
+                }
+                result.put("planTable", processListMonth);
+            }else{
+                for (String key : processMap.keySet()) {
+                    HashMap<String, List<ApsResourceDateStat>> temp = new HashMap<>();
+                    temp.put(key, processMap.get(key));
+                    processList.add(temp);
+                }
+                result.put("planTable", processList);
+            }
+            result.put("planTitle", sortedStartPlanTimeList);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    @Override
+    public void exportExcel(HttpServletResponse response, ApsGasPipingRouteStat apsGasPipingRouteStat) {
+        SXSSFWorkbook wb = new SXSSFWorkbook(500);
+        wb.createSheet();
+        wb.setSheetName(0, "姘旀煖绠¤矾浜ц兘璐熻浇缁熻琛�");
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+
+        Map<String, CellStyle> styles = createStyles(wb);
+        CellStyle title = styles.get("title");
+        try
+        {
+            JSONObject stat = getCapacityPlanData(apsGasPipingRouteStat);
+            List<String> days = (List<String>) stat.get("planTitle");
+            List<HashMap<String, List<ApsResourceDateStat>>> table= (List<HashMap<String, List<ApsResourceDateStat>>>) stat.get("planTable");
+            SXSSFSheet sheet = wb.getSheetAt(0);
+            /*濉啓鏃ユ湡鍒� 鍜� 宸ユ椂鍒�*/
+            SXSSFRow rowDay = sheet.createRow(0);
+            SXSSFRow rowTitle = sheet.createRow(1);
+
+            SXSSFCell daytitle = rowDay.createCell(0);
+            daytitle.setCellValue("鏃ユ湡");
+            daytitle.setCellStyle(title);
+            SXSSFCell titleCell = rowTitle.createCell(0);
+            titleCell.setCellValue("宸ュ簭");
+            titleCell.setCellStyle(title);
+
+            for (int i = 0; i < days.size(); i++) {
+                SXSSFCell dateCell = rowDay.createCell(i * 3 + 1);
+                SXSSFCell designHoursCell = rowTitle.createCell(i * 3 + 1);
+                SXSSFCell requireHoursCell = rowTitle.createCell(i * 3 + 2);
+                SXSSFCell loadCell = rowTitle.createCell(i * 3 + 3);
+                dateCell.setCellValue(days.get(i));
+                designHoursCell.setCellValue("璁捐宸ユ椂");
+                requireHoursCell.setCellValue("闇�姹傚伐鏃�");
+                loadCell.setCellValue("浜ц兘璐熻嵎");
+                /*set cell style*/
+                dateCell.setCellStyle(title);
+                designHoursCell.setCellStyle(title);
+                requireHoursCell.setCellStyle(title);
+                loadCell.setCellStyle(title);
+
+                /*鍚堝苟鏃ユ湡鍗曞厓鏍�*/
+                sheet.addMergedRegion( new CellRangeAddress(0, 0, i*3+1, i*3+3));
+            }
+            for (int i = 0; i < table.size(); i++) {
+                Map<String, List<ApsResourceDateStat>> resourceList = table.get(i);
+                /*鍒涘缓鏁版嵁琛�*/
+                SXSSFRow dataRow  = sheet.createRow(i+2);
+                for( Map.Entry<String, List<ApsResourceDateStat>> entry : resourceList.entrySet()){
+                    String resourceName = entry.getKey();
+                    List<ApsResourceDateStat> resourceDateStats = entry.getValue();
+                    dataRow.createCell(0).setCellValue(resourceName);
+                    for (int j = 0; j < resourceDateStats.size(); j++) {
+                        ApsResourceDateStat apsResourceDateStat = resourceDateStats.get(j);
+                        dataRow.createCell(j*3+1).setCellValue(apsResourceDateStat.getDesignTimes());
+                        dataRow.createCell(j*3+2).setCellValue(apsResourceDateStat.getRequireTimes());
+                        if(apsResourceDateStat.getCapacityLoad()!=null){
+                            dataRow.createCell(j*3+3).setCellValue(apsResourceDateStat.getCapacityLoad().doubleValue()+"%");
+                        }else{
+                            dataRow.createCell(j*3+3).setCellValue("%");
+                        }
+                    }
+                }
+
+            }
+            wb.write(response.getOutputStream());
+        }
+        catch (Exception e)
+        {
+            log.error("瀵煎嚭Excel寮傚父{}", e.getMessage());
+        }
+        finally
+        {
+            IOUtils.closeQuietly(wb);
+        }
+    }
+    private Map<String,CellStyle> createStyles(SXSSFWorkbook wb)
+    {
+        Map<String,CellStyle> styles=new HashMap<>();
+        CellStyle style = wb.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        Font titleFont = wb.createFont();
+        titleFont.setFontName("Arial");
+        titleFont.setFontHeightInPoints((short) 12);
+        titleFont.setBold(true);
+        style.setFont(titleFont);
+        DataFormat dataFormat = wb.createDataFormat();
+        style.setDataFormat(dataFormat.getFormat("@"));
+        styles.put("title", style);
+        return styles;
+    }
+}
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingPlanMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingPlanMapper.xml
index 0955f47..6273868 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingPlanMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingPlanMapper.xml
@@ -41,6 +41,46 @@
         <result property="hasTurnback"    column="has_turnback"    />
         <result property="hasRisk"    column="has_risk"    />
         <result property="planType"    column="plan_type"    />
+<!--        <collection property="apsProcessRoutes" javaType="java.util.ArrayList" ofType="com.aps.core.domain.ApsProcessRoute">-->
+<!--            <result property="id"    column="id"    />-->
+<!--            <result property="itemNo"    column="item_no"    />-->
+<!--            <result property="workOrderNo"    column="work_order_no"    />-->
+<!--            <result property="processNumber"    column="process_number_sub"    />-->
+<!--            <result property="processName"    column="process_name"    />-->
+<!--            <result property="processPlanStartDay"    column="process_plan_start_day"    />-->
+<!--            <result property="processPlanEndDay"    column="process_plan_end_day"    />-->
+<!--            <result property="notStartWorkCount"    column="not_start_work_count"    />-->
+<!--            <result property="completedCount"    column="completed_count"    />-->
+<!--            <result property="discardCount"    column="discard_count"    />-->
+<!--            <result property="integrationDay"    column="integration_day"    />-->
+<!--            <result property="plant"    column="plant"    />-->
+<!--            <result property="delFlag"    column="del_flag"    />-->
+<!--            <result property="createBy"    column="create_by"    />-->
+<!--            <result property="createTime"    column="create_time"    />-->
+<!--            <result property="updateBy"    column="update_by"    />-->
+<!--            <result property="updateTime"    column="update_time"    />-->
+<!--            <result property="standardTime"    column="standard_time"    />-->
+<!--            <result property="processOrder"    column="process_order"    />-->
+<!--            <result property="workCenter"    column="work_center"    />-->
+<!--            <result property="processQty"    column="process_qty"    />-->
+<!--            <result property="opStatus"    column="op_status"    />-->
+<!--            <result property="opStatus"    column="op_status"    />-->
+<!--            <result property="orgCode"    column="org_code"    />-->
+<!--        </collection>-->
+    </resultMap>
+
+    <resultMap type="ApsGasPipingPlan" id="ApsGasPipingPlanResultWithProcess">
+        <result property="documentNumber"    column="document_number"    />
+        <result property="itemNumber"    column="item_number"    />
+        <result property="productionQuantity"    column="production_quantity"    />
+        <result property="processNumber"    column="process_number"    />
+        <result property="planType"    column="plan_type"    />
+        <collection property="apsProcessRoutes" javaType="java.util.ArrayList" ofType="com.aps.core.domain.ApsProcessRoute">
+            <result property="processNumber"    column="process_number_sub"    />
+            <result property="processName"    column="process_name"    />
+            <result property="processPlanStartDay"    column="process_plan_start_day"    />
+            <result property="standardTime"    column="standard_time"    />
+        </collection>
     </resultMap>
 
     <sql id="selectApsGasPipingPlanVo">
@@ -233,4 +273,11 @@
     <update id="removeAllPlans" >
         update  aps_gas_piping_plan  set del_flag='1' where del_flag ='0'
     </update>
+
+    <select id="selectApsGasPipingPlanWithProcess" parameterType="ApsGasPipingPlan" resultMap="ApsGasPipingPlanResultWithProcess">
+        select c.* from (select a.document_number,a.item_number,a.process_number,a.production_quantity,a.plan_type,b.process_name,b.process_number as process_number_sub,b.standard_time,b.process_plan_start_day from aps_gas_piping_plan a
+            left join aps_process_route b on a.document_number = b.work_order_no
+            where a.document_status in ('0','1','2','4') and b.process_plan_start_day is not null ORDER BY a.document_number,b.process_number) c GROUP BY c.document_number,c.item_number,c.process_number,c.production_quantity,c.process_name,c.process_number_sub,c.standard_time,c.process_plan_start_day,c.plan_type
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml
new file mode 100644
index 0000000..fae7c5f
--- /dev/null
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml
@@ -0,0 +1,173 @@
+<?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.aps.core.mapper.ApsGasPipingRouteStatMapper">
+    
+    <resultMap type="ApsGasPipingRouteStat" id="ApsGasPipingRouteStatResult">
+        <result property="id"    column="id"    />
+        <result property="workOrderNo"    column="work_order_no"    />
+        <result property="roadProcessNumber"    column="road_process_number"    />
+        <result property="currentProcessNumber"    column="current_process_number"    />
+        <result property="productionQuantity"    column="production_quantity"    />
+        <result property="standardTime"    column="standard_time"    />
+        <result property="processTotalTime"    column="process_total_time"    />
+        <result property="processPlanStartDay"    column="process_plan_start_day"    />
+        <result property="designTimes"    column="design_times"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="processName"    column="process_name"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="itemNumber"    column="item_number"    />
+        <result property="standardDosage"    column="standard_dosage"    />
+        <result property="processTotalDosage"    column="process_total_dosage"    />
+        <result property="designCapacity"    column="design_capacity"    />
+        <result property="major"    column="major"    />
+        <result property="planStartYear"    column="plan_start_year"    />
+        <result property="planStartMonth"    column="plan_start_month"    />
+        <result property="planStartDay"    column="plan_start_day"    />
+    </resultMap>
+
+    <sql id="selectApsGasPipingRouteStatVo">
+        select id, work_order_no, road_process_number, current_process_number, production_quantity, standard_time, process_total_time, process_plan_start_day, design_times, del_flag, create_by, process_name, create_time, item_number, standard_dosage, process_total_dosage, design_capacity, major, plan_start_year, plan_start_month, plan_start_day from aps_gas_piping_route_stat
+    </sql>
+
+    <select id="selectApsGasPipingRouteStatList" parameterType="ApsGasPipingRouteStat" resultMap="ApsGasPipingRouteStatResult">
+        <include refid="selectApsGasPipingRouteStatVo"/>
+        <where>  
+            <if test="workOrderNo != null  and workOrderNo != ''"> and work_order_no = #{workOrderNo}</if>
+            <if test="roadProcessNumber != null  and roadProcessNumber != ''"> and road_process_number = #{roadProcessNumber}</if>
+            <if test="currentProcessNumber != null  and currentProcessNumber != ''"> and current_process_number = #{currentProcessNumber}</if>
+            <if test="productionQuantity != null  and productionQuantity != ''"> and production_quantity = #{productionQuantity}</if>
+            <if test="standardTime != null  and standardTime != ''"> and standard_time = #{standardTime}</if>
+            <if test="processTotalTime != null  and processTotalTime != ''"> and process_total_time = #{processTotalTime}</if>
+            <if test="processPlanStartDay != null  and processPlanStartDay != ''"> and process_plan_start_day = #{processPlanStartDay}</if>
+            <if test="designTimes != null "> and design_times = #{designTimes}</if>
+            <if test="processName != null  and processName != ''"> and process_name like '%' || #{processName} || '%')</if>
+            <if test="major != null and major != ''"> and major = #{major} </if>
+            <if test="planStartYear != null and planStartYear != ''"> and plan_start_year = #{planStartYear} </if>
+            <if test="planStartMonth != null and planStartMonth != ''"> and plan_start_month = #{planStartMonth} </if>
+            <if test="planStartDay != null and planStartDay != ''"> and plan_start_day = #{planStartDay} </if>
+            <if test="searchStartDate != null and searchStartDate != '' and searchEndDate != null and searchEndDate != ''"> and (process_plan_start_day &gt;= #{searchStartDate} and process_plan_start_day &lt;= #{searchEndDate}) </if>
+        </where>
+    </select>
+    
+    <select id="selectApsGasPipingRouteStatById" parameterType="String" resultMap="ApsGasPipingRouteStatResult">
+        <include refid="selectApsGasPipingRouteStatVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertApsGasPipingRouteStat" parameterType="ApsGasPipingRouteStat">
+        insert into aps_gas_piping_route_stat
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="workOrderNo != null">work_order_no,</if>
+            <if test="roadProcessNumber != null and roadProcessNumber != ''">road_process_number,</if>
+            <if test="currentProcessNumber != null">current_process_number,</if>
+            <if test="productionQuantity != null">production_quantity,</if>
+            <if test="standardTime != null">standard_time,</if>
+            <if test="processTotalTime != null">process_total_time,</if>
+            <if test="processPlanStartDay != null and processPlanStartDay != ''">process_plan_start_day,</if>
+            <if test="designTimes != null">design_times,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="processName != null">process_name,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="itemNumber != null">item_number,</if>
+            <if test="standardDosage != null">standard_dosage,</if>
+            <if test="processTotalDosage != null">process_total_dosage,</if>
+            <if test="designCapacity != null">design_capacity,</if>
+            <if test="major != null">major,</if>
+            <if test="planStartYear != null">plan_start_year,</if>
+            <if test="planStartMonth != null">plan_start_month,</if>
+            <if test="planStartDay != null">plan_start_day,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="workOrderNo != null">#{workOrderNo},</if>
+            <if test="roadProcessNumber != null and roadProcessNumber != ''">#{roadProcessNumber},</if>
+            <if test="currentProcessNumber != null">#{currentProcessNumber},</if>
+            <if test="productionQuantity != null">#{productionQuantity},</if>
+            <if test="standardTime != null">#{standardTime},</if>
+            <if test="processTotalTime != null">#{processTotalTime},</if>
+            <if test="processPlanStartDay != null and processPlanStartDay != ''">#{processPlanStartDay},</if>
+            <if test="designTimes != null">#{designTimes},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="processName != null">#{processName},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="itemNumber != null">#{itemNumber},</if>
+            <if test="standardDosage != null">#{standardDosage},</if>
+            <if test="processTotalDosage != null">#{processTotalDosage},</if>
+            <if test="designCapacity != null">#{designCapacity},</if>
+            <if test="major != null">#{major},</if>
+            <if test="planStartYear != null">#{planStartYear},</if>
+            <if test="planStartMonth != null">#{planStartMonth},</if>
+            <if test="planStartDay != null">#{planStartDay},</if>
+         </trim>
+    </insert>
+
+    <update id="updateApsGasPipingRouteStat" parameterType="ApsGasPipingRouteStat">
+        update aps_gas_piping_route_stat
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="workOrderNo != null">work_order_no = #{workOrderNo},</if>
+            <if test="roadProcessNumber != null and roadProcessNumber != ''">road_process_number = #{roadProcessNumber},</if>
+            <if test="currentProcessNumber != null">current_process_number = #{currentProcessNumber},</if>
+            <if test="productionQuantity != null">production_quantity = #{productionQuantity},</if>
+            <if test="standardTime != null">standard_time = #{standardTime},</if>
+            <if test="processTotalTime != null">process_total_time = #{processTotalTime},</if>
+            <if test="processPlanStartDay != null and processPlanStartDay != ''">process_plan_start_day = #{processPlanStartDay},</if>
+            <if test="designTimes != null">design_times = #{designTimes},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="processName != null">process_name = #{processName},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="itemNumber != null">item_number = #{itemNumber},</if>
+            <if test="standardDosage != null">standard_dosage = #{standardDosage},</if>
+            <if test="processTotalDosage != null">process_total_dosage = #{processTotalDosage},</if>
+            <if test="designCapacity != null">design_capacity = #{designCapacity},</if>
+            <if test="major != null">major = #{major},</if>
+            <if test="planStartYear != null">plan_start_year = #{planStartYear},</if>
+            <if test="planStartMonth != null">plan_start_month = #{planStartMonth},</if>
+            <if test="planStartDay != null">plan_start_day = #{planStartDay},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteApsGasPipingRouteStatById" parameterType="String">
+        delete from aps_gas_piping_route_stat where id = #{id}
+    </delete>
+
+    <delete id="deleteApsGasPipingRouteStatByIds" parameterType="String">
+        delete from aps_gas_piping_route_stat where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <delete id="deleteApsGasPipingRouteStatByBatchNum" parameterType="String">
+        delete from aps_gas_piping_route_stat where batch_number != #{batchNumber}
+    </delete>
+
+    <insert id="insertApsGasPipingRouteStatBatch">
+        INSERT INTO aps_gas_piping_route_stat
+        (
+        id,work_order_no, road_process_number, current_process_number, production_quantity, standard_time,
+        process_total_time, process_plan_start_day, design_times, del_flag, create_by, process_name,
+        create_time, item_number, standard_dosage, process_total_dosage, design_capacity, major,
+        plan_start_year, plan_start_month, plan_start_day,batch_number
+        )
+        VALUES
+        <foreach collection="apsGasPipingRouteStatList" item="stat" separator=",">
+            (
+            #{stat.id},#{stat.workOrderNo}, #{stat.roadProcessNumber}, #{stat.currentProcessNumber}, #{stat.productionQuantity},
+            #{stat.standardTime}, #{stat.processTotalTime}, #{stat.processPlanStartDay}, #{stat.designTimes}, #{stat.delFlag},
+            #{stat.createBy}, #{stat.processName}, #{stat.createTime}, #{stat.itemNumber}, #{stat.standardDosage},
+            #{stat.processTotalDosage}, #{stat.designCapacity}, #{stat.major}, #{stat.planStartYear},
+            #{stat.planStartMonth}, #{stat.planStartDay}, #{stat.batchNumber}
+            )
+        </foreach>
+
+    </insert>
+
+</mapper>
\ No newline at end of file
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsProcessRouteMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsProcessRouteMapper.xml
index b277710..dfc842a 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsProcessRouteMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsProcessRouteMapper.xml
@@ -145,4 +145,5 @@
     <select id="selectProcessNameList" parameterType="String" resultMap="ApsProcessRouteResult">
         select DISTINCT process_name from aps_process_route where org_code = #{orgCode}
     </select>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3