From aa527f732cff65689e82b660389be4ece3825ae3 Mon Sep 17 00:00:00 2001
From: huangjiayang <5265313@qq.com>
Date: 星期五, 09 五月 2025 18:00:15 +0800
Subject: [PATCH] 【UPDATE】1.新增同步标准工艺路线定时任务代码 2.从redis中获取BOM数据 3.将工艺路线数据存入redis中 4.从redis中获取工艺路线数据

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteHeaderService.java               |   10 
 aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteHeaderController.java |   27 
 aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsMaterialStorageManagementJobServiceImpl.java       |    7 
 aps-modules/aps-job/src/main/java/com/aps/job/service/IApsStandardProcessRouteHeaderJobService.java              |   83 ++
 aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java                                               |   12 
 aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsBomHeaderJobServiceImpl.java                       |   25 
 aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessRouteHeaderMapper.java                  |   12 
 aps-modules/aps-job/src/main/resources/mapper/job/ApsStandardProcessRouteHeaderJobMapper.xml                     |  173 +++++
 aps-modules/aps-job/src/main/resources/mapper/job/ApsStandardProcessRouteLineJobMapper.xml                       |  192 ++++++
 aps-modules/aps-job/src/main/java/com/aps/job/service/IApsStandardProcessRouteLineJobService.java                |   62 ++
 aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsStandardProcessRouteHeaderJob.java                       |  193 ++++++
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java                              |   22 
 aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsStandardProcessRouteLineJobMapper.java                   |   86 ++
 aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsStandardProcessRouteHeaderJobServiceImpl.java      |  264 +++++++++
 aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsStandardProcessRouteLineJob.java                         |  235 ++++++++
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteHeaderServiceImpl.java       |   28 
 aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java                                                   |   21 
 aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteJobFallbackFactory.java                    |   16 
 aps-modules/aps-core/src/main/resources/mapper/core/ApsStandardProcessRouteHeaderMapper.xml                      |   11 
 aps-modules/aps-job/src/main/java/com/aps/job/controller/SysJobController.java                                   |   20 
 aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsStandardProcessRouteLineJobServiceImpl.java        |   97 +++
 aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteJobService.java                                    |    8 
 aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsStandardProcessRouteHeaderJobMapper.java                 |   88 +++
 aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.java                  |    4 
 24 files changed, 1,673 insertions(+), 23 deletions(-)

diff --git a/aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteJobService.java b/aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteJobService.java
index c3f1be5..cc24a90 100644
--- a/aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteJobService.java
+++ b/aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteJobService.java
@@ -25,4 +25,12 @@
     @PostMapping("/job/refreshBomData")
     R<Boolean> refreshBomData(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
+    /**
+     * 鍒锋柊宸ヨ壓璺嚎鍏ㄩ噺鏁版嵁
+     * @param source
+     * @return
+     */
+    @PostMapping("/job/refreshProcessRouteData")
+    R<Boolean> refreshProcessRouteData(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
 }
diff --git a/aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteJobFallbackFactory.java b/aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteJobFallbackFactory.java
index 12659b1..bc9cb80 100644
--- a/aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteJobFallbackFactory.java
+++ b/aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteJobFallbackFactory.java
@@ -20,7 +20,21 @@
     @Override
     public RemoteJobService create(Throwable throwable)
     {
+
         log.error("浠诲姟鏈嶅姟璋冪敤澶辫触:{}", throwable.getMessage());
-        return source -> R.fail("鍒锋柊BOM鏁版嵁澶辫触:" + throwable.getMessage());
+        return new RemoteJobService()
+        {
+            @Override
+            public R<Boolean> refreshBomData(String source)
+            {
+                return R.fail("鍒锋柊鍏ㄩ噺BOM鏁版嵁澶辫触:" + throwable.getMessage());
+            }
+
+            @Override
+            public R<Boolean> refreshProcessRouteData(String source)
+            {
+                return R.fail("鍒锋柊鍏ㄩ噺宸ヨ壓璺嚎鏁版嵁澶辫触:" + throwable.getMessage());
+            }
+        };
     }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.java
index d26a61c..a7f2f25 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.java
@@ -115,13 +115,15 @@
      */
     @RequiresPermissions("Aps:ApsBomHeader:refreshBomData")
     @PostMapping("/refreshBomData")
-    public void refreshBomData()
+    public AjaxResult refreshBomData()
     {
         R<Boolean> res = remoteJobService.refreshBomData(SecurityConstants.INNER);
         if (R.isSuccess(res))
         {
             apsBomHeaderService.setBomDataToRedis("");
+            return success();
         }
+        return error();
     }
 
     @PostMapping("/setBomDataToRedis")
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteHeaderController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteHeaderController.java
index bfd9b80..2e6fdcb 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteHeaderController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteHeaderController.java
@@ -1,5 +1,7 @@
 package com.aps.core.controller.mainPlan;
 
+import com.aps.common.core.constant.SecurityConstants;
+import com.aps.common.core.domain.R;
 import com.aps.common.core.utils.poi.ExcelUtil;
 import com.aps.common.core.web.controller.BaseController;
 import com.aps.common.core.web.domain.AjaxResult;
@@ -9,6 +11,7 @@
 import com.aps.common.security.annotation.RequiresPermissions;
 import com.aps.core.domain.ApsStandardProcessRouteHeader;
 import com.aps.core.service.IApsStandardProcessRouteHeaderService;
+import com.aps.system.api.RemoteJobService;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -29,6 +32,9 @@
 {
     @Autowired
     private IApsStandardProcessRouteHeaderService apsStandardProcessRouteHeaderService;
+
+    @Autowired
+    private RemoteJobService remoteJobService;
 
     /**
      * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Header鍒楄〃
@@ -99,4 +105,25 @@
     {
         return toAjax(apsStandardProcessRouteHeaderService.deleteApsStandardProcessRouteHeaderByIds(ids));
     }
+
+    /**
+     * 鍒锋柊鍏ㄩ噺宸ヨ壓璺嚎鏁版嵁
+     */
+    @RequiresPermissions("Aps:ApsStandardProcessRouteHeader:refreshProcessRouteData")
+    @PostMapping("/refreshProcessRouteData")
+    public AjaxResult refreshProcessRouteData()
+    {
+        R<Boolean> res = remoteJobService.refreshProcessRouteData(SecurityConstants.INNER);
+        if (R.isSuccess(res))
+        {
+            return success();
+        }
+        return error();
+    }
+
+    @PostMapping("/test")
+    public void test()
+    {
+        apsStandardProcessRouteHeaderService.setProcessRouteDataToRedis("FORTUNA");
+    }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java
index f59dde3..475b8cc 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java
@@ -3,7 +3,10 @@
 import com.aps.common.core.annotation.Excel;
 import com.aps.common.core.web.domain.BaseEntity;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -86,4 +89,11 @@
     /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
     private String delFlag;
 
+    private String mainitemcode;
+    private BigDecimal mainstock;
+    private String subitemcode;
+    private BigDecimal usagenum;
+    private BigDecimal substock;
+    private String selfmade;
+
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessRouteHeaderMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessRouteHeaderMapper.java
index 2d3a6ed..81f7286 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessRouteHeaderMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessRouteHeaderMapper.java
@@ -1,8 +1,10 @@
 package com.aps.core.mapper;
 
-import java.util.List;
+import com.alibaba.fastjson2.JSONObject;
 import com.aps.core.domain.ApsStandardProcessRouteHeader;
 import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
 
 /**
  * 鏍囧噯宸ヨ壓璺嚎HeaderMapper鎺ュ彛
@@ -65,4 +67,12 @@
      * 鏍规嵁宸ュ巶銆佺墿鏂欏彿鏌ヨ宸ヨ壓璺嚎
      * */
     List<ApsStandardProcessRouteHeader>   queryStandardProcessRouteHeaderByPlantAndItemCode(String orgCode, String itemCode);
+
+    /**
+     * 鏌ヨ宸ヨ壓璺嚎鏍囧噯宸ユ椂鏁版嵁
+     * @param orgCode
+     * @return
+     */
+    List<JSONObject> selectProcessRouteStandardTimeData(String orgCode);
+
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteHeaderService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteHeaderService.java
index c068875..9b06de3 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteHeaderService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteHeaderService.java
@@ -1,7 +1,8 @@
 package com.aps.core.service;
 
-import java.util.List;
 import com.aps.core.domain.ApsStandardProcessRouteHeader;
+
+import java.util.List;
 
 /**
  * 鏍囧噯宸ヨ壓璺嚎HeaderService鎺ュ彛
@@ -58,4 +59,11 @@
      * @return 缁撴灉
      */
     public int deleteApsStandardProcessRouteHeaderById(Long id);
+
+    /**
+     * 灏嗘爣鍑嗗伐鑹鸿矾绾挎爣鍑嗗伐鏃跺悎璁℃暟閲忔斁鍏edis涓�
+     * @param orgCode
+     * @return
+     */
+    public boolean setProcessRouteDataToRedis(String orgCode);
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java
index 03f6973..0cd9e52 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java
@@ -1,16 +1,19 @@
 package com.aps.core.service.impl;
 
-import java.util.*;
-
 import com.aps.common.core.utils.DateUtils;
+import com.aps.core.domain.ApsBom;
 import com.aps.core.domain.ApsBomHeader;
 import com.aps.core.mapper.ApsBomHeaderMapper;
+import com.aps.core.mapper.ApsBomMapper;
+import com.aps.core.service.IApsBomService;
 import jakarta.annotation.Resource;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
-import com.aps.core.mapper.ApsBomMapper;
-import com.aps.core.domain.ApsBom;
-import com.aps.core.service.IApsBomService;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
 
 /**
  * BOM鏁版嵁绠$悊Service涓氬姟灞傚鐞�
@@ -26,6 +29,10 @@
 
     @Resource
     private ApsBomHeaderMapper bomHeaderMapper;
+
+    @Autowired
+    public RedisTemplate redisTemplate;
+
     /**
      * 鏌ヨBOM鏁版嵁绠$悊
      * 
@@ -117,6 +124,11 @@
             build.setOrgCode(apsBomHeader.getOrgCode());
             bomLineList = apsBomMapper.selectApsBomList(build);
         }
+//        JSONArray jsonArray = (JSONArray)redisTemplate.opsForValue().get("BOM:BOM_"+plant+"_"+itemNumber);
+//        for (int i = 0; i < jsonArray.size(); i++){
+//            ApsBom apsBom = jsonArray.getJSONObject(i).to(ApsBom.class);
+//            bomLineList.add(apsBom);
+//        }
         return bomLineList;
     }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteHeaderServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteHeaderServiceImpl.java
index 43fa63f..2d6a712 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteHeaderServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteHeaderServiceImpl.java
@@ -1,12 +1,15 @@
 package com.aps.core.service.impl;
 
-import java.util.List;
+import com.alibaba.fastjson2.JSONObject;
 import com.aps.common.core.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.aps.core.mapper.ApsStandardProcessRouteHeaderMapper;
 import com.aps.core.domain.ApsStandardProcessRouteHeader;
+import com.aps.core.mapper.ApsStandardProcessRouteHeaderMapper;
 import com.aps.core.service.IApsStandardProcessRouteHeaderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 鏍囧噯宸ヨ壓璺嚎HeaderService涓氬姟灞傚鐞�
@@ -19,6 +22,9 @@
 {
     @Autowired
     private ApsStandardProcessRouteHeaderMapper apsStandardProcessRouteHeaderMapper;
+
+    @Autowired
+    public RedisTemplate redisTemplate;
 
     /**
      * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Header
@@ -93,4 +99,18 @@
     {
         return apsStandardProcessRouteHeaderMapper.deleteApsStandardProcessRouteHeaderById(id);
     }
+
+    @Override
+    public boolean setProcessRouteDataToRedis(String orgCode) {
+        try {
+            List<JSONObject> res = apsStandardProcessRouteHeaderMapper.selectProcessRouteStandardTimeData(orgCode);
+            for (JSONObject jsonObject : res) {
+                redisTemplate.opsForValue().set("ROUTE:ROUTE_"+jsonObject.getString("org_code")+"_"+jsonObject.getString("item_code"), jsonObject.getBigDecimal("standardtime"));
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
 }
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsStandardProcessRouteHeaderMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsStandardProcessRouteHeaderMapper.xml
index 0416d52..4246e11 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsStandardProcessRouteHeaderMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsStandardProcessRouteHeaderMapper.xml
@@ -113,4 +113,15 @@
             and del_flag = '0'
         </where>
     </select>
+    
+    <select id="selectProcessRouteStandardTimeData" parameterType="String" resultType="com.alibaba.fastjson2.JSONObject">
+        select  hd.item_code,sum(standard_time) as standardTime,hd.org_code
+        from aps_standard_process_route_line as ln
+                 left join aps_standard_process_route_header as hd on ln.route_id=hd.route_id
+        where ln.del_flag='0' and hd.del_flag='0'
+        <if test="orgCode != null  and orgCode != ''">
+          and hd.org_code = #{orgCode}
+        </if>
+        group by hd.item_code,hd.org_code
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/controller/SysJobController.java b/aps-modules/aps-job/src/main/java/com/aps/job/controller/SysJobController.java
index 46c1747..a5210b1 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/controller/SysJobController.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/controller/SysJobController.java
@@ -1,7 +1,6 @@
 package com.aps.job.controller;
 
 import com.aps.common.core.constant.Constants;
-import com.aps.common.core.constant.SecurityConstants;
 import com.aps.common.core.exception.job.TaskException;
 import com.aps.common.core.utils.StringUtils;
 import com.aps.common.core.utils.poi.ExcelUtil;
@@ -20,6 +19,7 @@
 import jakarta.servlet.http.HttpServletResponse;
 import org.quartz.SchedulerException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
@@ -59,7 +59,14 @@
     private IApsMaterialStorageManagementJobService apsMaterialStorageManagementJobService;
 
     @Autowired
+    private IApsStandardProcessRouteHeaderJobService apsStandardProcessRouteHeaderJobService;
+
+    @Autowired
     private RemoteCoreService remoteCoreService;
+
+    @Autowired
+    public RedisTemplate redisTemplate;
+
     /**
      * 鏌ヨ瀹氭椂浠诲姟鍒楄〃
      */
@@ -210,12 +217,21 @@
         return apsBomHeaderJobService.syncBomDataJob(1, 1000, "", "");
     }
 
+    @PostMapping("/refreshProcessRouteData")
+    public Boolean refreshProcessRouteData() throws SchedulerException, TaskException
+    {
+        return apsStandardProcessRouteHeaderJobService.syncProcessRouteDataJob(1, 1000, "", "");
+    }
+
     @PutMapping("/test")
     public void test(@RequestBody SysJob job) throws Exception
     {
         System.out.println("start");
+        apsStandardProcessRouteHeaderJobService.syncProcessRouteData(159, 1000, "", "");
+        //鑾峰彇Redis缂撳瓨涓殑BOM鏁版嵁
+//        JSONArray jsonArray = (JSONArray)redisTemplate.opsForValue().get("BOM:BOM_FORTUNA_A6501-001080");
         //灏咮OM鏁版嵁瀛樿繘Redis涓�
-        remoteCoreService.setBomDataToRedis(SecurityConstants.INNER);
+//        remoteCoreService.setBomDataToRedis(SecurityConstants.INNER);
         //鍚屾鐗╂枡搴撳瓨鏁版嵁
 //        apsMaterialStorageManagementJobService.syncApsMaterialStorageData(1, 1000, "", "");
         //鍚屾BOM鏁版嵁
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsStandardProcessRouteHeaderJob.java b/aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsStandardProcessRouteHeaderJob.java
new file mode 100644
index 0000000..8544716
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsStandardProcessRouteHeaderJob.java
@@ -0,0 +1,193 @@
+package com.aps.job.domain;
+
+import com.aps.common.core.annotation.Excel;
+import com.aps.common.core.web.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鏍囧噯宸ヨ壓璺嚎Header瀵硅薄 aps_standard_process_route_header_job
+ * 
+ * @author hjy
+ * @date 2025-05-09
+ */
+@Schema(description = "鏍囧噯宸ヨ壓璺嚎Header瀹炰綋绫�")
+public class ApsStandardProcessRouteHeaderJob extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    @Schema(description = "$column.columnComment")
+    private Long id;
+
+    /** 宸ヨ壓璺嚎ID */
+    @Excel(name = "宸ヨ壓璺嚎ID")
+    @Schema(description = "宸ヨ壓璺嚎ID")
+    private String routeId;
+
+    /** 宸ヨ壓璺嚎鐗堟湰 */
+    @Excel(name = "宸ヨ壓璺嚎鐗堟湰")
+    @Schema(description = "宸ヨ壓璺嚎鐗堟湰")
+    private String version;
+
+    /** 鐢熸晥鏃ユ湡 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鐢熸晥鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @Schema(description = "鐢熸晥鏃ユ湡")
+    private Date startDate;
+
+    /** 澶辨晥鏃ユ湡 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "澶辨晥鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @Schema(description = "澶辨晥鏃ユ湡")
+    private Date endDate;
+
+    /** 閫傜敤宸ュ巶 */
+    @Excel(name = "閫傜敤宸ュ巶")
+    @Schema(description = "閫傜敤宸ュ巶")
+    private String orgCode;
+
+    /** 鏄惁鍒犻櫎锛�0鏈夋晥 1鍒犻櫎 */
+    @Schema(description = "鏄惁鍒犻櫎锛�0鏈夋晥 1鍒犻櫎")
+    private String delFlag;
+
+    /** 鐗╂枡鍙� */
+    @Excel(name = "鐗╂枡鍙�")
+    @Schema(description = "鐗╂枡鍙�")
+    private String itemCode;
+
+    /** 鍥惧彿 */
+    @Excel(name = "鍥惧彿")
+    @Schema(description = "鍥惧彿")
+    private String drawingNumber;
+
+    /** 宸ュ簭鎬诲伐鏃� */
+    @Excel(name = "宸ュ簭鎬诲伐鏃�")
+    @Schema(description = "宸ュ簭鎬诲伐鏃�")
+    private BigDecimal processAllTime;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+
+    public void setRouteId(String routeId) 
+    {
+        this.routeId = routeId;
+    }
+
+    public String getRouteId() 
+    {
+        return routeId;
+    }
+
+    public void setVersion(String version) 
+    {
+        this.version = version;
+    }
+
+    public String getVersion() 
+    {
+        return version;
+    }
+
+    public void setStartDate(Date startDate) 
+    {
+        this.startDate = startDate;
+    }
+
+    public Date getStartDate() 
+    {
+        return startDate;
+    }
+
+    public void setEndDate(Date endDate) 
+    {
+        this.endDate = endDate;
+    }
+
+    public Date getEndDate() 
+    {
+        return endDate;
+    }
+
+    public void setOrgCode(String orgCode) 
+    {
+        this.orgCode = orgCode;
+    }
+
+    public String getOrgCode() 
+    {
+        return orgCode;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    public void setItemCode(String itemCode) 
+    {
+        this.itemCode = itemCode;
+    }
+
+    public String getItemCode() 
+    {
+        return itemCode;
+    }
+
+    public void setDrawingNumber(String drawingNumber) 
+    {
+        this.drawingNumber = drawingNumber;
+    }
+
+    public String getDrawingNumber() 
+    {
+        return drawingNumber;
+    }
+
+    public void setProcessAllTime(BigDecimal processAllTime) 
+    {
+        this.processAllTime = processAllTime;
+    }
+
+    public BigDecimal getProcessAllTime() 
+    {
+        return processAllTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("routeId", getRouteId())
+            .append("version", getVersion())
+            .append("startDate", getStartDate())
+            .append("endDate", getEndDate())
+            .append("orgCode", getOrgCode())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("itemCode", getItemCode())
+            .append("drawingNumber", getDrawingNumber())
+            .append("processAllTime", getProcessAllTime())
+            .toString();
+    }
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsStandardProcessRouteLineJob.java b/aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsStandardProcessRouteLineJob.java
new file mode 100644
index 0000000..59b3338
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsStandardProcessRouteLineJob.java
@@ -0,0 +1,235 @@
+package com.aps.job.domain;
+
+import com.aps.common.core.annotation.Excel;
+import com.aps.common.core.web.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鏍囧噯宸ヨ壓璺嚎Line瀵硅薄 aps_standard_process_route_line_job
+ * 
+ * @author hjy
+ * @date 2025-05-09
+ */
+@Schema(description = "鏍囧噯宸ヨ壓璺嚎Line瀹炰綋绫�")
+public class ApsStandardProcessRouteLineJob extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    @Schema(description = "$column.columnComment")
+    private Long id;
+
+    /** 宸ヨ壓璺嚎ID */
+    @Excel(name = "宸ヨ壓璺嚎ID")
+    @Schema(description = "宸ヨ壓璺嚎ID")
+    private String routeId;
+
+    /** 宸ュ簭搴忓彿 */
+    @Excel(name = "宸ュ簭搴忓彿")
+    @Schema(description = "宸ュ簭搴忓彿")
+    private String routeNum;
+
+    /** 宸ュ簭鍚嶇О */
+    @Excel(name = "宸ュ簭鍚嶇О")
+    @Schema(description = "宸ュ簭鍚嶇О")
+    private String routeName;
+
+    /** 鐢熸晥鏃ユ湡 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鐢熸晥鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @Schema(description = "鐢熸晥鏃ユ湡")
+    private Date startDate;
+
+    /** 澶辨晥鏃ユ湡 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "澶辨晥鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @Schema(description = "澶辨晥鏃ユ湡")
+    private Date endDate;
+
+    /** 閫傜敤宸ュ巶 */
+    @Excel(name = "閫傜敤宸ュ巶")
+    @Schema(description = "閫傜敤宸ュ巶")
+    private String orgCode;
+
+    /** 閫傜敤杞﹂棿 */
+    @Excel(name = "閫傜敤杞﹂棿")
+    @Schema(description = "閫傜敤杞﹂棿")
+    private String shopCode;
+
+    /** 浜ц兘妯″瀷 */
+    @Excel(name = "浜ц兘妯″瀷")
+    @Schema(description = "浜ц兘妯″瀷")
+    private String productivityModel;
+
+    /** 璁捐浜ц兘 */
+    @Excel(name = "璁捐浜ц兘")
+    @Schema(description = "璁捐浜ц兘")
+    private BigDecimal designCapacity;
+
+    /** 鏄惁鍒犻櫎锛�0鏈夋晥 1鍒犻櫎 */
+    @Schema(description = "鏄惁鍒犻櫎锛�0鏈夋晥 1鍒犻櫎")
+    private String delFlag;
+
+    /** 宸ュ簭缂栫爜 */
+    @Excel(name = "宸ュ簭缂栫爜")
+    @Schema(description = "宸ュ簭缂栫爜")
+    private String routeCode;
+
+    /** 鏍囧噯宸ユ椂 */
+    @Excel(name = "鏍囧噯宸ユ椂")
+    @Schema(description = "鏍囧噯宸ユ椂")
+    private BigDecimal standardTime;
+
+    public String getRouteCode() {
+        return routeCode;
+    }
+
+    public void setRouteCode(String routeCode) {
+        this.routeCode = routeCode;
+    }
+
+    public BigDecimal getStandardTime() {
+        return standardTime;
+    }
+
+    public void setStandardTime(BigDecimal standardTime) {
+        this.standardTime = standardTime;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+
+    public void setRouteId(String routeId) 
+    {
+        this.routeId = routeId;
+    }
+
+    public String getRouteId() 
+    {
+        return routeId;
+    }
+
+    public void setRouteNum(String routeNum) 
+    {
+        this.routeNum = routeNum;
+    }
+
+    public String getRouteNum() 
+    {
+        return routeNum;
+    }
+
+    public void setRouteName(String routeName) 
+    {
+        this.routeName = routeName;
+    }
+
+    public String getRouteName() 
+    {
+        return routeName;
+    }
+
+    public void setStartDate(Date startDate) 
+    {
+        this.startDate = startDate;
+    }
+
+    public Date getStartDate() 
+    {
+        return startDate;
+    }
+
+    public void setEndDate(Date endDate) 
+    {
+        this.endDate = endDate;
+    }
+
+    public Date getEndDate() 
+    {
+        return endDate;
+    }
+
+    public void setOrgCode(String orgCode) 
+    {
+        this.orgCode = orgCode;
+    }
+
+    public String getOrgCode() 
+    {
+        return orgCode;
+    }
+
+    public void setShopCode(String shopCode) 
+    {
+        this.shopCode = shopCode;
+    }
+
+    public String getShopCode() 
+    {
+        return shopCode;
+    }
+
+    public void setProductivityModel(String productivityModel) 
+    {
+        this.productivityModel = productivityModel;
+    }
+
+    public String getProductivityModel() 
+    {
+        return productivityModel;
+    }
+
+    public void setDesignCapacity(BigDecimal designCapacity) 
+    {
+        this.designCapacity = designCapacity;
+    }
+
+    public BigDecimal getDesignCapacity() 
+    {
+        return designCapacity;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("routeId", getRouteId())
+            .append("routeNum", getRouteNum())
+            .append("routeName", getRouteName())
+            .append("startDate", getStartDate())
+            .append("endDate", getEndDate())
+            .append("createTime", getCreateTime())
+            .append("orgCode", getOrgCode())
+            .append("shopCode", getShopCode())
+            .append("productivityModel", getProductivityModel())
+            .append("designCapacity", getDesignCapacity())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsStandardProcessRouteHeaderJobMapper.java b/aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsStandardProcessRouteHeaderJobMapper.java
new file mode 100644
index 0000000..43f16e2
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsStandardProcessRouteHeaderJobMapper.java
@@ -0,0 +1,88 @@
+package com.aps.job.mapper;
+
+import com.aps.job.domain.ApsStandardProcessRouteHeaderJob;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 鏍囧噯宸ヨ壓璺嚎HeaderMapper鎺ュ彛
+ * 
+ * @author hjy
+ * @date 2025-05-09
+ */
+public interface ApsStandardProcessRouteHeaderJobMapper 
+{
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Header涓婚敭
+     * @return 鏍囧噯宸ヨ壓璺嚎Header
+     */
+    public ApsStandardProcessRouteHeaderJob selectApsStandardProcessRouteHeaderJobById(Long id);
+
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Header鍒楄〃
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 鏍囧噯宸ヨ壓璺嚎Header闆嗗悎
+     */
+    public List<ApsStandardProcessRouteHeaderJob> selectApsStandardProcessRouteHeaderJobList(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob);
+
+    /**
+     * 鏂板鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 缁撴灉
+     */
+    public int insertApsStandardProcessRouteHeaderJob(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob);
+
+    /**
+     * 淇敼鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 缁撴灉
+     */
+    public int updateApsStandardProcessRouteHeaderJob(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob);
+
+    /**
+     * 鍒犻櫎鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Header涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteApsStandardProcessRouteHeaderJobById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteApsStandardProcessRouteHeaderJobByIds(Long[] ids);
+
+    /**
+     * 鎵归噺鎻掑叆宸ヨ壓璺嚎 Header鏁版嵁
+     * @param list
+     * @return
+     */
+    public int insertProcessRouteHeaderBatch(@Param("list") List<ApsStandardProcessRouteHeaderJob> list);
+
+    /**
+     * 鎵归噺鎻掑叆宸ヨ壓璺嚎 Header鏁版嵁鍒颁笟鍔¤〃
+     * @return
+     */
+    public void insertIntoProcessRouteHeader();
+
+    /**
+     * 鍒犻櫎宸ヨ壓璺嚎 Header鏁版嵁
+     * @return
+     */
+    public void deleteProcessRouteHeader();
+
+    /**
+     * 鍒犻櫎涓棿琛ㄥ伐鑹鸿矾绾� Header鏁版嵁
+     */
+    public void deleteProcessRouteHeaderJob();
+
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsStandardProcessRouteLineJobMapper.java b/aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsStandardProcessRouteLineJobMapper.java
new file mode 100644
index 0000000..cb2857f
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsStandardProcessRouteLineJobMapper.java
@@ -0,0 +1,86 @@
+package com.aps.job.mapper;
+
+import com.aps.job.domain.ApsStandardProcessRouteLineJob;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 鏍囧噯宸ヨ壓璺嚎LineMapper鎺ュ彛
+ * 
+ * @author hjy
+ * @date 2025-05-09
+ */
+public interface ApsStandardProcessRouteLineJobMapper 
+{
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Line涓婚敭
+     * @return 鏍囧噯宸ヨ壓璺嚎Line
+     */
+    public ApsStandardProcessRouteLineJob selectApsStandardProcessRouteLineJobById(Long id);
+
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Line鍒楄〃
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 鏍囧噯宸ヨ壓璺嚎Line闆嗗悎
+     */
+    public List<ApsStandardProcessRouteLineJob> selectApsStandardProcessRouteLineJobList(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob);
+
+    /**
+     * 鏂板鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 缁撴灉
+     */
+    public int insertApsStandardProcessRouteLineJob(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob);
+
+    /**
+     * 淇敼鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 缁撴灉
+     */
+    public int updateApsStandardProcessRouteLineJob(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob);
+
+    /**
+     * 鍒犻櫎鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Line涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteApsStandardProcessRouteLineJobById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteApsStandardProcessRouteLineJobByIds(Long[] ids);
+
+    /**
+     * 鎵归噺鎻掑叆宸ヨ壓璺嚎 Line鏁版嵁绠$悊
+     * @param list
+     * @return
+     */
+    public int insertProcessRouteLineBatch(@Param("list") List<ApsStandardProcessRouteLineJob> list);
+
+    /**
+     * 鎵归噺鎻掑叆宸ヨ壓璺嚎 Line鏁版嵁绠$悊鍒颁笟鍔¤〃
+     * @return
+     */
+    public void insertIntoProcessRouteLine();
+
+    /**
+     * 鍒犻櫎宸ヨ壓璺嚎 Line鏁版嵁
+     */
+    public void deleteProcessRouteLine() ;
+
+    /**
+     * 鍒犻櫎涓棿琛ㄥ伐鑹鸿矾绾� Line鏁版嵁
+     */
+    public void deleteProcessRouteLineJob() ;
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsStandardProcessRouteHeaderJobService.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsStandardProcessRouteHeaderJobService.java
new file mode 100644
index 0000000..3de1bc5
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsStandardProcessRouteHeaderJobService.java
@@ -0,0 +1,83 @@
+package com.aps.job.service;
+
+import com.aps.job.domain.ApsStandardProcessRouteHeaderJob;
+
+import java.util.List;
+
+/**
+ * 鏍囧噯宸ヨ壓璺嚎HeaderService鎺ュ彛
+ * 
+ * @author hjy
+ * @date 2025-05-09
+ */
+public interface IApsStandardProcessRouteHeaderJobService 
+{
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Header涓婚敭
+     * @return 鏍囧噯宸ヨ壓璺嚎Header
+     */
+    public ApsStandardProcessRouteHeaderJob selectApsStandardProcessRouteHeaderJobById(Long id);
+
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Header鍒楄〃
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 鏍囧噯宸ヨ壓璺嚎Header闆嗗悎
+     */
+    public List<ApsStandardProcessRouteHeaderJob> selectApsStandardProcessRouteHeaderJobList(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob);
+
+    /**
+     * 鏂板鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 缁撴灉
+     */
+    public int insertApsStandardProcessRouteHeaderJob(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob);
+
+    /**
+     * 淇敼鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 缁撴灉
+     */
+    public int updateApsStandardProcessRouteHeaderJob(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob);
+
+    /**
+     * 鎵归噺鍒犻櫎鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏍囧噯宸ヨ壓璺嚎Header涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteApsStandardProcessRouteHeaderJobByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎鏍囧噯宸ヨ壓璺嚎Header淇℃伅
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Header涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteApsStandardProcessRouteHeaderJobById(Long id);
+
+    /**
+     * 鍚屾宸ヨ壓璺嚎鏁版嵁
+     * @param pageIndex
+     * @param pageSize
+     * @param orgCode
+     * @param itemCodeList
+     * @return
+     */
+    public boolean syncProcessRouteData(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList);
+
+
+    /**
+     * 鍚屾宸ヨ壓璺嚎鏁版嵁瀹氭椂浠诲姟
+     * @param pageIndex
+     * @param pageSize
+     * @param orgCode
+     * @param itemCodeList
+     * @return
+     */
+    public boolean syncProcessRouteDataJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList);
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsStandardProcessRouteLineJobService.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsStandardProcessRouteLineJobService.java
new file mode 100644
index 0000000..ce98849
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsStandardProcessRouteLineJobService.java
@@ -0,0 +1,62 @@
+package com.aps.job.service;
+
+import com.aps.job.domain.ApsStandardProcessRouteLineJob;
+
+import java.util.List;
+
+/**
+ * 鏍囧噯宸ヨ壓璺嚎LineService鎺ュ彛
+ * 
+ * @author hjy
+ * @date 2025-05-09
+ */
+public interface IApsStandardProcessRouteLineJobService 
+{
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Line涓婚敭
+     * @return 鏍囧噯宸ヨ壓璺嚎Line
+     */
+    public ApsStandardProcessRouteLineJob selectApsStandardProcessRouteLineJobById(Long id);
+
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Line鍒楄〃
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 鏍囧噯宸ヨ壓璺嚎Line闆嗗悎
+     */
+    public List<ApsStandardProcessRouteLineJob> selectApsStandardProcessRouteLineJobList(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob);
+
+    /**
+     * 鏂板鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 缁撴灉
+     */
+    public int insertApsStandardProcessRouteLineJob(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob);
+
+    /**
+     * 淇敼鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 缁撴灉
+     */
+    public int updateApsStandardProcessRouteLineJob(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob);
+
+    /**
+     * 鎵归噺鍒犻櫎鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏍囧噯宸ヨ壓璺嚎Line涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteApsStandardProcessRouteLineJobByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎鏍囧噯宸ヨ壓璺嚎Line淇℃伅
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Line涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteApsStandardProcessRouteLineJobById(Long id);
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsBomHeaderJobServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsBomHeaderJobServiceImpl.java
index c307d96..b3133b2 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsBomHeaderJobServiceImpl.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsBomHeaderJobServiceImpl.java
@@ -5,6 +5,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.aps.common.core.utils.DateUtils;
 import com.aps.common.core.utils.StringUtils;
+import com.aps.common.core.utils.uuid.IdUtils;
 import com.aps.job.domain.ApsBomHeaderJob;
 import com.aps.job.domain.ApsBomLineJob;
 import com.aps.job.domain.ApsWorkOrderJobLog;
@@ -125,14 +126,19 @@
 
     @Override
     public boolean syncBomData(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList) {
+        JSONObject requestBody = new JSONObject();
+        ResponseEntity<String> response = null;
+        ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog();
+        String batchNum = "";
         try {
             // 璁剧疆璇锋眰澶�
             HttpHeaders headers = new HttpHeaders();
             headers.setContentType(MediaType.APPLICATION_JSON);
             // 璁剧疆璇锋眰浣�
             while (true) {
-                ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog();
-                JSONObject requestBody = new JSONObject();
+                batchNum = IdUtils.fastSimpleUUID();
+                jobLog = new ApsWorkOrderJobLog();
+                requestBody = new JSONObject();
                 requestBody.put("PageIndex", pageIndex);
                 requestBody.put("PageSize", pageSize);
                 if(!StringUtils.isEmpty(orgCode)){
@@ -141,7 +147,7 @@
                 // 鍒涘缓HttpEntity瀵硅薄
                 HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers);
                 // 鍙戦�丳OST璇锋眰
-                ResponseEntity<String> response = restTemplate.postForEntity(getBomUrl, request, String.class);
+                response = restTemplate.postForEntity(getBomUrl, request, String.class);
                 JSONObject responseBodyJson = JSONObject.parseObject(response.getBody());
                 if (response.getStatusCode().is2xxSuccessful() && "200".equals(responseBodyJson.getString("status"))) {
                     JSONArray jsonArray = responseBodyJson.getJSONArray("data");
@@ -160,6 +166,7 @@
                             insertBomHeader.setStartDate(DateUtils.parseDate(bomHeader.getString("HEffectiveDate")));
                             insertBomHeader.setEndDate(DateUtils.parseDate(bomHeader.getString("HDisableDate")));
                             insertBomHeader.setOrgCode(bomHeader.getString("HOrgName").contains("娌堥槼")?"FORTUNE":bomHeader.getString("HOrgName").contains("鍗楅��")?"FORTUNA":bomHeader.getString("HOrgName").contains("鍖椾含")?"FORTUBE":bomHeader.getString("HOrgName"));
+                            insertBomHeader.setCreateBy(batchNum);
                             headerList.add(insertBomHeader);
                             for(Object line : bomLines){
                                 JSONObject lineJson = (JSONObject) line;
@@ -173,6 +180,7 @@
                                 bomLine.setStartDate(DateUtils.parseDate(lineJson.getString("LEffectiveDate")));
                                 bomLine.setEndDate(DateUtils.parseDate(lineJson.getString("LDisableDate")));
                                 bomLine.setOrgCode(lineJson.getString("LOrgName").contains("娌堥槼")?"FORTUNE":lineJson.getString("LOrgName").contains("鍗楅��")?"FORTUNA":lineJson.getString("LOrgName").contains("鍖椾含")?"FORTUBE":lineJson.getString("LOrgName"));
+                                bomLine.setCreateBy(batchNum);
                                 lineList.add(bomLine);
                             }
                         }
@@ -198,6 +206,7 @@
                         jobLog.setCreateTime(DateUtils.getNowDate());
                         jobLog.setBizType("bom");
                         jobLog.setResult("header:"+headerList.size() + " line:"+lineList.size());
+                        jobLog.setCreateBy(batchNum);
                         jobLogMapper.insertApsWorkOrderJobLog(jobLog);
                         pageIndex++;
                     }else{
@@ -211,12 +220,22 @@
                     jobLog.setCreateTime(DateUtils.getNowDate());
                     jobLog.setBizType("bom");
                     jobLog.setResult("error");
+                    jobLog.setCreateBy(batchNum);
                     jobLogMapper.insertApsWorkOrderJobLog(jobLog);
                     break;
                 }
             }
         }catch (Exception e){
             e.printStackTrace();
+            jobLog.setRequestData(requestBody.toJSONString());
+            jobLog.setResponseData(response.getBody());
+            jobLog.setPageNum(Long.valueOf(pageIndex));
+            jobLog.setPageCount(Long.valueOf(pageSize));
+            jobLog.setCreateTime(DateUtils.getNowDate());
+            jobLog.setBizType("bom");
+            jobLog.setResult("error");
+            jobLog.setCreateBy(batchNum);
+            jobLogMapper.insertApsWorkOrderJobLog(jobLog);
             return false;
         }
         return true;
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsMaterialStorageManagementJobServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsMaterialStorageManagementJobServiceImpl.java
index 7126cfb..8999522 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsMaterialStorageManagementJobServiceImpl.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsMaterialStorageManagementJobServiceImpl.java
@@ -5,6 +5,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.aps.common.core.utils.DateUtils;
 import com.aps.common.core.utils.StringUtils;
+import com.aps.common.core.utils.uuid.IdUtils;
 import com.aps.job.domain.ApsMaterialStorageManagementJob;
 import com.aps.job.domain.ApsWorkOrderJobLog;
 import com.aps.job.mapper.ApsMaterialStorageManagementJobMapper;
@@ -123,12 +124,14 @@
         JSONObject requestBody = new JSONObject();
         ResponseEntity<String> response = null;
         ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog();
+        String batchNum = "";
         try {
             // 璁剧疆璇锋眰澶�
             HttpHeaders headers = new HttpHeaders();
             headers.setContentType(MediaType.APPLICATION_JSON);
             // 璁剧疆璇锋眰浣�
             while (true) {
+                batchNum = IdUtils.fastSimpleUUID();
                 jobLog = new ApsWorkOrderJobLog();
                 requestBody = new JSONObject();
                 requestBody.put("PageIndex", pageIndex);
@@ -152,6 +155,7 @@
                             materialStorage.setItemNumber(storage.getString("ItemCode"));
                             materialStorage.setNum(storage.getBigDecimal("StoreQty"));
                             materialStorage.setApplicableFactories(storage.getString("OrgCode"));
+                            materialStorage.setCreateBy(batchNum);
                             storageList.add(materialStorage);
                         }
                         List<ApsMaterialStorageManagementJob> temp = new ArrayList<>();
@@ -168,6 +172,7 @@
                         jobLog.setCreateTime(DateUtils.getNowDate());
                         jobLog.setBizType("storage");
                         jobLog.setResult("storage:"+storageList.size());
+                        jobLog.setCreateBy(batchNum);
                         jobLogMapper.insertApsWorkOrderJobLog(jobLog);
                         pageIndex++;
                     }else{
@@ -181,6 +186,7 @@
                     jobLog.setCreateTime(DateUtils.getNowDate());
                     jobLog.setBizType("storage");
                     jobLog.setResult("error");
+                    jobLog.setCreateBy(batchNum);
                     jobLogMapper.insertApsWorkOrderJobLog(jobLog);
                     break;
                 }
@@ -194,6 +200,7 @@
             jobLog.setCreateTime(DateUtils.getNowDate());
             jobLog.setBizType("storage");
             jobLog.setResult("error");
+            jobLog.setCreateBy(batchNum);
             jobLogMapper.insertApsWorkOrderJobLog(jobLog);
             return false;
         }
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsStandardProcessRouteHeaderJobServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsStandardProcessRouteHeaderJobServiceImpl.java
new file mode 100644
index 0000000..dabc6c8
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsStandardProcessRouteHeaderJobServiceImpl.java
@@ -0,0 +1,264 @@
+package com.aps.job.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.aps.common.core.utils.DateUtils;
+import com.aps.common.core.utils.StringUtils;
+import com.aps.common.core.utils.uuid.IdUtils;
+import com.aps.job.domain.ApsStandardProcessRouteHeaderJob;
+import com.aps.job.domain.ApsStandardProcessRouteLineJob;
+import com.aps.job.domain.ApsWorkOrderJobLog;
+import com.aps.job.mapper.ApsStandardProcessRouteHeaderJobMapper;
+import com.aps.job.mapper.ApsStandardProcessRouteLineJobMapper;
+import com.aps.job.mapper.ApsWorkOrderJobLogMapper;
+import com.aps.job.service.IApsStandardProcessRouteHeaderJobService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鏍囧噯宸ヨ壓璺嚎HeaderService涓氬姟灞傚鐞�
+ * 
+ * @author hjy
+ * @date 2025-05-09
+ */
+@Service
+public class ApsStandardProcessRouteHeaderJobServiceImpl implements IApsStandardProcessRouteHeaderJobService 
+{
+    @Autowired
+    private ApsStandardProcessRouteHeaderJobMapper apsStandardProcessRouteHeaderJobMapper;
+
+    @Autowired
+    private ApsStandardProcessRouteLineJobMapper apsStandardProcessRouteLineJobMapper;
+
+    @Value("${u9.processRouteUrl}")
+    private String getProcessRouteUrl;
+
+    @Autowired
+    private ApsWorkOrderJobLogMapper jobLogMapper;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Header涓婚敭
+     * @return 鏍囧噯宸ヨ壓璺嚎Header
+     */
+    @Override
+    public ApsStandardProcessRouteHeaderJob selectApsStandardProcessRouteHeaderJobById(Long id)
+    {
+        return apsStandardProcessRouteHeaderJobMapper.selectApsStandardProcessRouteHeaderJobById(id);
+    }
+
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Header鍒楄〃
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 鏍囧噯宸ヨ壓璺嚎Header
+     */
+    @Override
+    public List<ApsStandardProcessRouteHeaderJob> selectApsStandardProcessRouteHeaderJobList(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob)
+    {
+        return apsStandardProcessRouteHeaderJobMapper.selectApsStandardProcessRouteHeaderJobList(apsStandardProcessRouteHeaderJob);
+    }
+
+    /**
+     * 鏂板鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertApsStandardProcessRouteHeaderJob(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob)
+    {
+        apsStandardProcessRouteHeaderJob.setCreateTime(DateUtils.getNowDate());
+        return apsStandardProcessRouteHeaderJobMapper.insertApsStandardProcessRouteHeaderJob(apsStandardProcessRouteHeaderJob);
+    }
+
+    /**
+     * 淇敼鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param apsStandardProcessRouteHeaderJob 鏍囧噯宸ヨ壓璺嚎Header
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateApsStandardProcessRouteHeaderJob(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob)
+    {
+        apsStandardProcessRouteHeaderJob.setUpdateTime(DateUtils.getNowDate());
+        return apsStandardProcessRouteHeaderJobMapper.updateApsStandardProcessRouteHeaderJob(apsStandardProcessRouteHeaderJob);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鏍囧噯宸ヨ壓璺嚎Header
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏍囧噯宸ヨ壓璺嚎Header涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteApsStandardProcessRouteHeaderJobByIds(Long[] ids)
+    {
+        return apsStandardProcessRouteHeaderJobMapper.deleteApsStandardProcessRouteHeaderJobByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎鏍囧噯宸ヨ壓璺嚎Header淇℃伅
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Header涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteApsStandardProcessRouteHeaderJobById(Long id)
+    {
+        return apsStandardProcessRouteHeaderJobMapper.deleteApsStandardProcessRouteHeaderJobById(id);
+    }
+
+    @Override
+    public boolean syncProcessRouteData(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList) {
+        JSONObject requestBody = new JSONObject();
+        ResponseEntity<String> response = null;
+        ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog();
+        String batchNum = "";
+        try {
+            // 璁剧疆璇锋眰澶�
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            // 璁剧疆璇锋眰浣�
+            while (true) {
+                batchNum = IdUtils.fastSimpleUUID();
+                jobLog = new ApsWorkOrderJobLog();
+                requestBody = new JSONObject();
+                requestBody.put("PageIndex", pageIndex);
+                requestBody.put("PageSize", pageSize);
+                if(!StringUtils.isEmpty(orgCode)){
+                    requestBody.put("OrgCode", orgCode);
+                }
+                // 鍒涘缓HttpEntity瀵硅薄
+                HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers);
+                // 鍙戦�丳OST璇锋眰
+                response = restTemplate.postForEntity(getProcessRouteUrl, request, String.class);
+                JSONObject responseBodyJson = JSONObject.parseObject(response.getBody());
+                if (response.getStatusCode().is2xxSuccessful() && "200".equals(responseBodyJson.getString("status"))) {
+                    JSONArray jsonArray = responseBodyJson.getJSONArray("data");
+                    if (!jsonArray.isEmpty()) {
+                        List<ApsStandardProcessRouteHeaderJob> headerList = new ArrayList<>();
+                        List<ApsStandardProcessRouteLineJob> lineList = new ArrayList<>();
+                        for (Object o : jsonArray) {
+                            //o瀵硅薄涓殑灞炴�ц祴鍊肩粰ApsBomHeaderJob瀵硅薄
+                            JSONObject routeHeader = (JSONObject) o;
+                            JSONArray routeLines = routeHeader.getJSONArray("RoutingLines");
+                            ApsStandardProcessRouteHeaderJob insertRouteHeader = new ApsStandardProcessRouteHeaderJob();
+                            insertRouteHeader.setId(IdUtil.getSnowflakeNextId());
+                            insertRouteHeader.setRouteId(routeHeader.getString("HID"));
+                            insertRouteHeader.setItemCode(routeHeader.getString("HItemCode"));
+                            insertRouteHeader.setVersion(routeHeader.getString("RoutingVersionCode"));
+                            insertRouteHeader.setStartDate(DateUtils.parseDate(routeHeader.getString("HEffectiveDate")));
+                            insertRouteHeader.setEndDate(DateUtils.parseDate(routeHeader.getString("HDisableDate")));
+                            insertRouteHeader.setOrgCode(routeHeader.getString("HOrgCode"));
+                            insertRouteHeader.setCreateBy(batchNum);
+                            headerList.add(insertRouteHeader);
+                            for(Object line : routeLines){
+                                JSONObject lineJson = (JSONObject) line;
+                                ApsStandardProcessRouteLineJob routeLine = new ApsStandardProcessRouteLineJob();
+                                routeLine.setId(IdUtil.getSnowflakeNextId());
+                                routeLine.setRouteId(lineJson.getString("HID"));
+                                routeLine.setRouteNum(lineJson.getString("Sequence"));
+                                routeLine.setRouteName(lineJson.getString("WorkCenterName"));
+                                routeLine.setRouteCode(lineJson.getString("WorkCenterCode"));
+                                routeLine.setStartDate(DateUtils.parseDate(lineJson.getString("LEffectiveDate")));
+                                routeLine.setEndDate(DateUtils.parseDate(lineJson.getString("LDisableDate")));
+                                routeLine.setOrgCode(lineJson.getString("LOrgCode"));
+                                routeLine.setStandardTime(lineJson.getBigDecimal("StandardTime"));
+                                routeLine.setCreateBy(batchNum);
+                                lineList.add(routeLine);
+                            }
+                        }
+                        List<ApsStandardProcessRouteHeaderJob> temp1 = new ArrayList<>();
+                        for(int i=0;i<headerList.size();i++){
+                            temp1.add(headerList.get(i));
+                            if(temp1.size()>=20){
+                                apsStandardProcessRouteHeaderJobMapper.insertProcessRouteHeaderBatch(temp1);
+                                temp1 = new ArrayList<>();
+                            }
+                        }
+                        List<ApsStandardProcessRouteLineJob> temp2 = new ArrayList<>();
+                        for(int j=0;j<lineList.size();j++){
+                            temp2.add(lineList.get(j));
+                            if(temp2.size()>=20){
+                                apsStandardProcessRouteLineJobMapper.insertProcessRouteLineBatch(temp2);
+                                temp2 = new ArrayList<>();
+                            }
+                        }
+                        jobLog.setRequestData(requestBody.toJSONString());
+                        jobLog.setPageNum(Long.valueOf(pageIndex));
+                        jobLog.setPageCount(Long.valueOf(pageSize));
+                        jobLog.setCreateTime(DateUtils.getNowDate());
+                        jobLog.setBizType("processRoute");
+                        jobLog.setResult("header:"+headerList.size() + " line:"+lineList.size());
+                        jobLog.setCreateBy(batchNum);
+                        jobLogMapper.insertApsWorkOrderJobLog(jobLog);
+                        pageIndex++;
+                    }else{
+                        break;
+                    }
+                }else{
+                    jobLog.setRequestData(requestBody.toJSONString());
+                    jobLog.setResponseData(response.getBody());
+                    jobLog.setPageNum(Long.valueOf(pageIndex));
+                    jobLog.setPageCount(Long.valueOf(pageSize));
+                    jobLog.setCreateTime(DateUtils.getNowDate());
+                    jobLog.setBizType("processRoute");
+                    jobLog.setResult("error");
+                    jobLog.setCreateBy(batchNum);
+                    jobLogMapper.insertApsWorkOrderJobLog(jobLog);
+                    break;
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            jobLog.setRequestData(requestBody.toJSONString());
+            jobLog.setResponseData(response.getBody());
+            jobLog.setPageNum(Long.valueOf(pageIndex));
+            jobLog.setPageCount(Long.valueOf(pageSize));
+            jobLog.setCreateTime(DateUtils.getNowDate());
+            jobLog.setBizType("processRoute");
+            jobLog.setResult("error");
+            jobLog.setCreateBy(batchNum);
+            jobLogMapper.insertApsWorkOrderJobLog(jobLog);
+            return false;
+        }
+        return true;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean syncProcessRouteDataJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList) {
+        try {
+            apsStandardProcessRouteHeaderJobMapper.deleteProcessRouteHeaderJob();
+            apsStandardProcessRouteLineJobMapper.deleteProcessRouteLineJob();
+            boolean res = syncProcessRouteData(pageIndex, pageSize, orgCode, itemCodeList);
+            if(!res){
+                return false;
+            }
+            apsStandardProcessRouteHeaderJobMapper.deleteProcessRouteHeader();
+            apsStandardProcessRouteLineJobMapper.deleteProcessRouteLine();
+            apsStandardProcessRouteHeaderJobMapper.insertIntoProcessRouteHeader();
+            apsStandardProcessRouteLineJobMapper.insertIntoProcessRouteLine();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+        return true;
+    }
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsStandardProcessRouteLineJobServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsStandardProcessRouteLineJobServiceImpl.java
new file mode 100644
index 0000000..768c016
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsStandardProcessRouteLineJobServiceImpl.java
@@ -0,0 +1,97 @@
+package com.aps.job.service.impl;
+
+import com.aps.common.core.utils.DateUtils;
+import com.aps.job.domain.ApsStandardProcessRouteLineJob;
+import com.aps.job.mapper.ApsStandardProcessRouteLineJobMapper;
+import com.aps.job.service.IApsStandardProcessRouteLineJobService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 鏍囧噯宸ヨ壓璺嚎LineService涓氬姟灞傚鐞�
+ * 
+ * @author hjy
+ * @date 2025-05-09
+ */
+@Service
+public class ApsStandardProcessRouteLineJobServiceImpl implements IApsStandardProcessRouteLineJobService 
+{
+    @Autowired
+    private ApsStandardProcessRouteLineJobMapper apsStandardProcessRouteLineJobMapper;
+
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Line涓婚敭
+     * @return 鏍囧噯宸ヨ壓璺嚎Line
+     */
+    @Override
+    public ApsStandardProcessRouteLineJob selectApsStandardProcessRouteLineJobById(Long id)
+    {
+        return apsStandardProcessRouteLineJobMapper.selectApsStandardProcessRouteLineJobById(id);
+    }
+
+    /**
+     * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Line鍒楄〃
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 鏍囧噯宸ヨ壓璺嚎Line
+     */
+    @Override
+    public List<ApsStandardProcessRouteLineJob> selectApsStandardProcessRouteLineJobList(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob)
+    {
+        return apsStandardProcessRouteLineJobMapper.selectApsStandardProcessRouteLineJobList(apsStandardProcessRouteLineJob);
+    }
+
+    /**
+     * 鏂板鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertApsStandardProcessRouteLineJob(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob)
+    {
+        apsStandardProcessRouteLineJob.setCreateTime(DateUtils.getNowDate());
+        return apsStandardProcessRouteLineJobMapper.insertApsStandardProcessRouteLineJob(apsStandardProcessRouteLineJob);
+    }
+
+    /**
+     * 淇敼鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param apsStandardProcessRouteLineJob 鏍囧噯宸ヨ壓璺嚎Line
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateApsStandardProcessRouteLineJob(ApsStandardProcessRouteLineJob apsStandardProcessRouteLineJob)
+    {
+        apsStandardProcessRouteLineJob.setUpdateTime(DateUtils.getNowDate());
+        return apsStandardProcessRouteLineJobMapper.updateApsStandardProcessRouteLineJob(apsStandardProcessRouteLineJob);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鏍囧噯宸ヨ壓璺嚎Line
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏍囧噯宸ヨ壓璺嚎Line涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteApsStandardProcessRouteLineJobByIds(Long[] ids)
+    {
+        return apsStandardProcessRouteLineJobMapper.deleteApsStandardProcessRouteLineJobByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎鏍囧噯宸ヨ壓璺嚎Line淇℃伅
+     * 
+     * @param id 鏍囧噯宸ヨ壓璺嚎Line涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteApsStandardProcessRouteLineJobById(Long id)
+    {
+        return apsStandardProcessRouteLineJobMapper.deleteApsStandardProcessRouteLineJobById(id);
+    }
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java b/aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java
index 837a54d..efecb7a 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java
@@ -3,10 +3,7 @@
 import com.aps.common.core.constant.SecurityConstants;
 import com.aps.common.core.utils.StringUtils;
 import com.aps.job.param.ApsWorkOrderJobParam;
-import com.aps.job.service.IApsBomHeaderJobService;
-import com.aps.job.service.IApsMaterialStorageManagementJobService;
-import com.aps.job.service.IApsWorkOrderJobService;
-import com.aps.job.service.IApsWorkOrderProcessService;
+import com.aps.job.service.*;
 import com.aps.system.api.RemoteCoreService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -39,6 +36,9 @@
 
     @Autowired
     private IApsMaterialStorageManagementJobService apsMaterialStorageManagementJobService;
+
+    @Autowired
+    private IApsStandardProcessRouteHeaderJobService apsStandardProcessRouteHeaderJobService;
 
     public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
     {
@@ -165,4 +165,17 @@
     {
         apsMaterialStorageManagementJobService.syncApsMaterialStorageDataJob(pageIndex, pageSize, orgCode, itemCodeList);
     }
+
+    /**
+     * 鍚屾鍏ㄩ噺宸ヨ壓璺嚎鏁版嵁瀹氭椂浠诲姟
+     */
+    public void syncProcessRouteJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList)
+    {
+        boolean res =  apsStandardProcessRouteHeaderJobService.syncProcessRouteDataJob(pageIndex, pageSize, orgCode, itemCodeList);
+//        if(res){
+//            remoteCoreService.setBomDataToRedis(SecurityConstants.INNER);
+//        }
+    }
+
+
 }
diff --git a/aps-modules/aps-job/src/main/resources/mapper/job/ApsStandardProcessRouteHeaderJobMapper.xml b/aps-modules/aps-job/src/main/resources/mapper/job/ApsStandardProcessRouteHeaderJobMapper.xml
new file mode 100644
index 0000000..1930d0e
--- /dev/null
+++ b/aps-modules/aps-job/src/main/resources/mapper/job/ApsStandardProcessRouteHeaderJobMapper.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.job.mapper.ApsStandardProcessRouteHeaderJobMapper">
+    
+    <resultMap type="ApsStandardProcessRouteHeaderJob" id="ApsStandardProcessRouteHeaderJobResult">
+        <result property="id"    column="id"    />
+        <result property="routeId"    column="route_id"    />
+        <result property="version"    column="version"    />
+        <result property="startDate"    column="start_date"    />
+        <result property="endDate"    column="end_date"    />
+        <result property="orgCode"    column="org_code"    />
+        <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="itemCode"    column="item_code"    />
+        <result property="drawingNumber"    column="drawing_number"    />
+        <result property="processAllTime"    column="process_all_time"    />
+    </resultMap>
+
+    <sql id="selectApsStandardProcessRouteHeaderJobVo">
+        select id, route_id, version, start_date, end_date, org_code, del_flag, create_by, create_time, update_by, update_time, item_code, drawing_number, process_all_time from aps_standard_process_route_header_job
+    </sql>
+
+    <select id="selectApsStandardProcessRouteHeaderJobList" parameterType="ApsStandardProcessRouteHeaderJob" resultMap="ApsStandardProcessRouteHeaderJobResult">
+        <include refid="selectApsStandardProcessRouteHeaderJobVo"/>
+        <where>  
+            <if test="routeId != null  and routeId != ''"> and route_id = #{routeId}</if>
+            <if test="version != null  and version != ''"> and version = #{version}</if>
+            <if test="startDate != null "> and start_date = #{startDate}</if>
+            <if test="endDate != null "> and end_date = #{endDate}</if>
+            <if test="orgCode != null  and orgCode != ''"> and org_code = #{orgCode}</if>
+            <if test="itemCode != null  and itemCode != ''"> and item_code = #{itemCode}</if>
+            <if test="drawingNumber != null  and drawingNumber != ''"> and drawing_number = #{drawingNumber}</if>
+            <if test="processAllTime != null "> and process_all_time = #{processAllTime}</if>
+        </where>
+    </select>
+    
+    <select id="selectApsStandardProcessRouteHeaderJobById" parameterType="Long" resultMap="ApsStandardProcessRouteHeaderJobResult">
+        <include refid="selectApsStandardProcessRouteHeaderJobVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertApsStandardProcessRouteHeaderJob" parameterType="ApsStandardProcessRouteHeaderJob">
+        insert into aps_standard_process_route_header_job
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="routeId != null">route_id,</if>
+            <if test="version != null">version,</if>
+            <if test="startDate != null">start_date,</if>
+            <if test="endDate != null">end_date,</if>
+            <if test="orgCode != null">org_code,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="itemCode != null">item_code,</if>
+            <if test="drawingNumber != null">drawing_number,</if>
+            <if test="processAllTime != null">process_all_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="routeId != null">#{routeId},</if>
+            <if test="version != null">#{version},</if>
+            <if test="startDate != null">#{startDate},</if>
+            <if test="endDate != null">#{endDate},</if>
+            <if test="orgCode != null">#{orgCode},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="itemCode != null">#{itemCode},</if>
+            <if test="drawingNumber != null">#{drawingNumber},</if>
+            <if test="processAllTime != null">#{processAllTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateApsStandardProcessRouteHeaderJob" parameterType="ApsStandardProcessRouteHeaderJob">
+        update aps_standard_process_route_header_job
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="routeId != null">route_id = #{routeId},</if>
+            <if test="version != null">version = #{version},</if>
+            <if test="startDate != null">start_date = #{startDate},</if>
+            <if test="endDate != null">end_date = #{endDate},</if>
+            <if test="orgCode != null">org_code = #{orgCode},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="itemCode != null">item_code = #{itemCode},</if>
+            <if test="drawingNumber != null">drawing_number = #{drawingNumber},</if>
+            <if test="processAllTime != null">process_all_time = #{processAllTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteApsStandardProcessRouteHeaderJobById" parameterType="Long">
+        delete from aps_standard_process_route_header_job where id = #{id}
+    </delete>
+
+    <delete id="deleteApsStandardProcessRouteHeaderJobByIds" parameterType="String">
+        delete from aps_standard_process_route_header_job where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <insert id="insertProcessRouteHeaderBatch">
+        INSERT INTO aps_standard_process_route_header_job (
+        id,
+        route_id,
+        item_code,
+        version,
+        start_date,
+        end_date,
+        org_code,
+        create_time
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.id},
+            #{item.routeId},
+            #{item.itemCode},
+            #{item.version},
+            #{item.startDate},
+            #{item.endDate},
+            #{item.orgCode},
+            now()
+            )
+        </foreach>
+    </insert>
+
+    <!-- 鎻掑叆鏁版嵁鍒� aps_bom_header -->
+    <insert id="insertIntoProcessRouteHeader">
+        INSERT INTO aps_standard_process_route_header (
+            id,
+            route_id,
+            item_code,
+            version,
+            start_date,
+            end_date,
+            org_code,
+            create_time
+        )
+        SELECT
+            id,
+            route_id,
+            item_code,
+            version,
+            start_date,
+            end_date,
+            org_code,
+            now()
+        FROM aps_standard_process_route_header_job
+    </insert>
+
+    <!-- 鍒犻櫎 aps_standard_process_route_header 琛ㄤ腑鐨勬暟鎹� -->
+    <delete id="deleteProcessRouteHeader">
+        DELETE FROM aps_standard_process_route_header
+    </delete>
+
+    <!-- 鍒犻櫎 aps_standard_process_route_header_job 琛ㄤ腑鐨勬暟鎹� -->
+    <delete id="deleteProcessRouteHeaderJob">
+        DELETE FROM aps_standard_process_route_header_job
+    </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/aps-modules/aps-job/src/main/resources/mapper/job/ApsStandardProcessRouteLineJobMapper.xml b/aps-modules/aps-job/src/main/resources/mapper/job/ApsStandardProcessRouteLineJobMapper.xml
new file mode 100644
index 0000000..f8f89f0
--- /dev/null
+++ b/aps-modules/aps-job/src/main/resources/mapper/job/ApsStandardProcessRouteLineJobMapper.xml
@@ -0,0 +1,192 @@
+<?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.job.mapper.ApsStandardProcessRouteLineJobMapper">
+    
+    <resultMap type="ApsStandardProcessRouteLineJob" id="ApsStandardProcessRouteLineJobResult">
+        <result property="id"    column="id"    />
+        <result property="routeId"    column="route_id"    />
+        <result property="routeNum"    column="route_num"    />
+        <result property="routeName"    column="route_name"    />
+        <result property="startDate"    column="start_date"    />
+        <result property="endDate"    column="end_date"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="orgCode"    column="org_code"    />
+        <result property="shopCode"    column="shop_code"    />
+        <result property="productivityModel"    column="productivity_model"    />
+        <result property="designCapacity"    column="design_capacity"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="routeCode"    column="route_code"    />
+        <result property="standardTime"    column="standard_time"    />
+    </resultMap>
+
+    <sql id="selectApsStandardProcessRouteLineJobVo">
+        select id, route_id, route_num, route_name, start_date, end_date, create_time, org_code, shop_code, productivity_model, design_capacity, del_flag, create_by, update_by, update_time, route_code, standard_time from aps_standard_process_route_line_job
+    </sql>
+
+    <select id="selectApsStandardProcessRouteLineJobList" parameterType="ApsStandardProcessRouteLineJob" resultMap="ApsStandardProcessRouteLineJobResult">
+        <include refid="selectApsStandardProcessRouteLineJobVo"/>
+        <where>  
+            <if test="routeId != null  and routeId != ''"> and route_id = #{routeId}</if>
+            <if test="routeNum != null  and routeNum != ''"> and route_num = #{routeNum}</if>
+            <if test="routeName != null  and routeName != ''"> and route_name like concat('%', #{routeName}, '%')</if>
+            <if test="startDate != null "> and start_date = #{startDate}</if>
+            <if test="endDate != null "> and end_date = #{endDate}</if>
+            <if test="orgCode != null  and orgCode != ''"> and org_code = #{orgCode}</if>
+            <if test="shopCode != null  and shopCode != ''"> and shop_code = #{shopCode}</if>
+            <if test="productivityModel != null  and productivityModel != ''"> and productivity_model = #{productivityModel}</if>
+            <if test="designCapacity != null "> and design_capacity = #{designCapacity}</if>
+        </where>
+    </select>
+    
+    <select id="selectApsStandardProcessRouteLineJobById" parameterType="Long" resultMap="ApsStandardProcessRouteLineJobResult">
+        <include refid="selectApsStandardProcessRouteLineJobVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertApsStandardProcessRouteLineJob" parameterType="ApsStandardProcessRouteLineJob">
+        insert into aps_standard_process_route_line_job
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="routeId != null">route_id,</if>
+            <if test="routeNum != null">route_num,</if>
+            <if test="routeName != null">route_name,</if>
+            <if test="startDate != null">start_date,</if>
+            <if test="endDate != null">end_date,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="orgCode != null">org_code,</if>
+            <if test="shopCode != null">shop_code,</if>
+            <if test="productivityModel != null">productivity_model,</if>
+            <if test="designCapacity != null">design_capacity,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="routeId != null">#{routeId},</if>
+            <if test="routeNum != null">#{routeNum},</if>
+            <if test="routeName != null">#{routeName},</if>
+            <if test="startDate != null">#{startDate},</if>
+            <if test="endDate != null">#{endDate},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="orgCode != null">#{orgCode},</if>
+            <if test="shopCode != null">#{shopCode},</if>
+            <if test="productivityModel != null">#{productivityModel},</if>
+            <if test="designCapacity != null">#{designCapacity},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateApsStandardProcessRouteLineJob" parameterType="ApsStandardProcessRouteLineJob">
+        update aps_standard_process_route_line_job
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="routeId != null">route_id = #{routeId},</if>
+            <if test="routeNum != null">route_num = #{routeNum},</if>
+            <if test="routeName != null">route_name = #{routeName},</if>
+            <if test="startDate != null">start_date = #{startDate},</if>
+            <if test="endDate != null">end_date = #{endDate},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="orgCode != null">org_code = #{orgCode},</if>
+            <if test="shopCode != null">shop_code = #{shopCode},</if>
+            <if test="productivityModel != null">productivity_model = #{productivityModel},</if>
+            <if test="designCapacity != null">design_capacity = #{designCapacity},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteApsStandardProcessRouteLineJobById" parameterType="Long">
+        delete from aps_standard_process_route_line_job where id = #{id}
+    </delete>
+
+    <delete id="deleteApsStandardProcessRouteLineJobByIds" parameterType="String">
+        delete from aps_standard_process_route_line_job where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <insert id="insertProcessRouteLineBatch">
+        INSERT INTO aps_standard_process_route_line_job (
+        id,
+        route_id,
+        route_num,
+        route_name,
+        route_code,
+        start_date,
+        end_date,
+        org_code,
+        shop_code,
+        standard_time,
+        create_time
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.id},
+            #{item.routeId},
+            #{item.routeNum},
+            #{item.routeName},
+            #{item.routeCode},
+            #{item.startDate},
+            #{item.endDate},
+            #{item.orgCode},
+            #{item.shopCode},
+            #{item.standardTime},
+            now()
+            )
+        </foreach>
+    </insert>
+
+    <!-- 鎻掑叆鏁版嵁鍒� aps_bom_header -->
+    <insert id="insertIntoProcessRouteLine">
+        INSERT INTO aps_standard_process_route_line (
+            id,
+            route_id,
+            route_num,
+            route_name,
+            route_code,
+            start_date,
+            end_date,
+            org_code,
+            shop_code,
+            standard_time,
+            create_time
+        )
+        SELECT
+            id,
+            route_id,
+            route_num,
+            route_name,
+            route_code,
+            start_date,
+            end_date,
+            org_code,
+            shop_code,
+            standard_time,
+            now()
+        FROM aps_standard_process_route_line_job
+    </insert>
+
+    <!-- 鍒犻櫎 aps_standard_process_route_line 琛ㄤ腑鐨勬暟鎹� -->
+    <delete id="deleteProcessRouteLine">
+        DELETE FROM aps_standard_process_route_line
+    </delete>
+
+    <!-- 鍒犻櫎 aps_standard_process_route_line_job 琛ㄤ腑鐨勬暟鎹� -->
+    <delete id="deleteProcessRouteLineJob">
+        DELETE FROM aps_standard_process_route_line_job
+    </delete>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3