sfd
2025-05-09 2cdc79aca46c13ead18a27b0270350a3d8665d53
Merge branch 'dev' of http://192.168.50.149:8085/r/aps-backend into dev
已添加9个文件
已修改20个文件
1205 ■■■■■ 文件已修改
aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteCoreService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteJobService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteCoreFallbackFactory.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteJobFallbackFactory.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-api/aps-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-common/aps-common-core/src/main/java/com/aps/common/core/constant/ServiceNameConstants.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsBomController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlateStandardRequireErrorController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteHeaderController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteLineController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequire.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlatePlanMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlatePlanMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/controller/SysJobController.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsMaterialStorageManagementJob.java 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsBomHeaderJobMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsBomLineJobMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsMaterialStorageManagementJobMapper.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsBomHeaderJobService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsMaterialStorageManagementJobService.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsBomHeaderJobServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsMaterialStorageManagementJobServiceImpl.java 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/resources/mapper/job/ApsBomHeaderJobMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/resources/mapper/job/ApsBomLineJobMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/resources/mapper/job/ApsMaterialStorageManagementJobMapper.xml 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteCoreService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.aps.system.api;
import com.aps.common.core.constant.SecurityConstants;
import com.aps.common.core.constant.ServiceNameConstants;
import com.aps.common.core.domain.R;
import com.aps.system.api.factory.RemoteCoreFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
/**
 * ä»»åŠ¡æœåŠ¡
 *
 * @author hjy
 */
@FeignClient(contextId = "remoteCoreService", value = ServiceNameConstants.CORE_SERVICE, fallbackFactory = RemoteCoreFallbackFactory.class)
public interface RemoteCoreService
{
    /**
     * åˆ·æ–°BOM数据到Redis
     * @param source
     * @return
     */
    @PostMapping("/ApsBomHeader/setBomDataToRedis")
    R<Boolean> setBomDataToRedis(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}
aps-api/aps-api-system/src/main/java/com/aps/system/api/RemoteJobService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.aps.system.api;
import com.aps.common.core.constant.SecurityConstants;
import com.aps.common.core.constant.ServiceNameConstants;
import com.aps.common.core.domain.R;
import com.aps.system.api.factory.RemoteJobFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
/**
 * ä»»åŠ¡æœåŠ¡
 *
 * @author hjy
 */
@FeignClient(contextId = "remoteJobService", value = ServiceNameConstants.JOB_SERVICE, fallbackFactory = RemoteJobFallbackFactory.class)
public interface RemoteJobService
{
    /**
     * åˆ·æ–°BOM全量数据
     * @param source
     * @return
     */
    @PostMapping("/job/refreshBomData")
    R<Boolean> refreshBomData(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}
aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteCoreFallbackFactory.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.aps.system.api.factory;
import com.aps.common.core.domain.R;
import com.aps.system.api.RemoteCoreService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * ç”¨æˆ·æœåŠ¡é™çº§å¤„ç†
 *
 * @author ruoyi
 */
@Component
public class RemoteCoreFallbackFactory implements FallbackFactory<RemoteCoreService>
{
    private static final Logger log = LoggerFactory.getLogger(RemoteCoreFallbackFactory.class);
    @Override
    public RemoteCoreService create(Throwable throwable)
    {
        log.error("任务服务调用失败:{}", throwable.getMessage());
        return source -> R.fail("BOM数据存储到Redis中失败:" + throwable.getMessage());
    }
}
aps-api/aps-api-system/src/main/java/com/aps/system/api/factory/RemoteJobFallbackFactory.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.aps.system.api.factory;
import com.aps.common.core.domain.R;
import com.aps.system.api.RemoteJobService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * ç”¨æˆ·æœåŠ¡é™çº§å¤„ç†
 *
 * @author ruoyi
 */
@Component
public class RemoteJobFallbackFactory implements FallbackFactory<RemoteJobService>
{
    private static final Logger log = LoggerFactory.getLogger(RemoteJobFallbackFactory.class);
    @Override
    public RemoteJobService create(Throwable throwable)
    {
        log.error("任务服务调用失败:{}", throwable.getMessage());
        return source -> R.fail("刷新BOM数据失败:" + throwable.getMessage());
    }
}
aps-api/aps-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,5 @@
com.aps.system.api.factory.RemoteUserFallbackFactory
com.aps.system.api.factory.RemoteLogFallbackFactory
com.aps.system.api.factory.RemoteFileFallbackFactory
com.aps.system.api.factory.RemoteJobFallbackFactory
com.aps.system.api.factory.RemoteCoreFallbackFactory
aps-common/aps-common-core/src/main/java/com/aps/common/core/constant/ServiceNameConstants.java
@@ -21,4 +21,14 @@
     * æ–‡ä»¶æœåŠ¡çš„serviceid
     */
    public static final String FILE_SERVICE = "aps-file";
    /**
     * aps服务的serviceid
     */
    public static final String CORE_SERVICE = "aps-core";
    /**
     * ä»»åŠ¡æœåŠ¡çš„serviceid
     */
    public static final String JOB_SERVICE = "aps-job";
}
aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsBomController.java
@@ -31,7 +31,7 @@
    /**
     * æŸ¥è¯¢BOM数据管理列表
     */
    @RequiresPermissions("apsBom:list")
    @RequiresPermissions("Aps:apsBom:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsBom apsBom)
    {
@@ -43,7 +43,7 @@
    /**
     * å¯¼å‡ºBOM数据管理列表
     */
    @RequiresPermissions("apsBom:export")
    @RequiresPermissions("Aps:apsBom:export")
    @Log(title = "BOM数据管理", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsBom apsBom)
@@ -56,7 +56,7 @@
    /**
     * èŽ·å–BOM数据管理详细信息
     */
    @RequiresPermissions("apsBom:query")
    @RequiresPermissions("Aps:apsBom:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
@@ -66,7 +66,7 @@
    /**
     * æ–°å¢žBOM数据管理
     */
    @RequiresPermissions("apsBom:add")
    @RequiresPermissions("Aps:apsBom:add")
    @Log(title = "BOM数据管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsBom apsBom)
@@ -77,7 +77,7 @@
    /**
     * ä¿®æ”¹BOM数据管理
     */
    @RequiresPermissions("apsBom:edit")
    @RequiresPermissions("Aps:apsBom:edit")
    @Log(title = "BOM数据管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ApsBom apsBom)
@@ -88,7 +88,7 @@
    /**
     * åˆ é™¤BOM数据管理
     */
    @RequiresPermissions("apsBom:remove")
    @RequiresPermissions("Aps:apsBom:remove")
    @Log(title = "BOM数据管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.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.ApsBomHeader;
import com.aps.core.service.IApsBomHeaderService;
import com.aps.system.api.RemoteJobService;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -30,11 +33,14 @@
    @Autowired
    private IApsBomHeaderService apsBomHeaderService;
    @Autowired
    private RemoteJobService remoteJobService;
    /**
     * æŸ¥è¯¢BOM Header æ•°æ®ç®¡ç†åˆ—表
     */
    @RequiresPermissions("aps:ApsBomHeader:list")
    @RequiresPermissions("Aps:ApsBomHeader:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsBomHeader apsBomHeader)
    {
@@ -104,6 +110,26 @@
        return toAjax(apsBomHeaderService.deleteApsBomHeaderByIds(ids));
    }
    /**
     * åˆ·æ–°å…¨é‡BOM数据
     */
    @RequiresPermissions("Aps:ApsBomHeader:refreshBomData")
    @PostMapping("/refreshBomData")
    public void refreshBomData()
    {
        R<Boolean> res = remoteJobService.refreshBomData(SecurityConstants.INNER);
        if (R.isSuccess(res))
        {
            apsBomHeaderService.setBomDataToRedis("");
        }
    }
    @PostMapping("/setBomDataToRedis")
    public void setBomDataToRedis()
    {
        apsBomHeaderService.setBomDataToRedis("");
    }
    @PostMapping("/test")
    public void test()
    {
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlateStandardRequireErrorController.java
@@ -37,7 +37,7 @@
     */
    @Operation(summary = "查询钣金标准需求异常信息列表", description = "分页查询")
    //@RequiresPermissions("ApsPlateStandardRequireError:ApsPlateStandardRequireError:list")
    @RequiresPermissions("Aps:ApsPlateStandardRequireError:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsPlateStandardRequireError apsPlateStandardRequireError)
    {
@@ -50,7 +50,7 @@
     * å¯¼å‡ºé’£é‡‘标准需求异常信息列表
     */
    @Operation(summary = "导出钣金标准需求异常信息列表", description = "导出")
    //@RequiresPermissions("ApsPlateStandardRequireError:ApsPlateStandardRequireError:export")
    @RequiresPermissions("Aps:ApsPlateStandardRequireError:export")
    @Log(title = "钣金标准需求异常信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsPlateStandardRequireError apsPlateStandardRequireError)
@@ -64,7 +64,7 @@
     * èŽ·å–é’£é‡‘æ ‡å‡†éœ€æ±‚å¼‚å¸¸ä¿¡æ¯è¯¦ç»†ä¿¡æ¯
     */
    @Operation(summary = "获取钣金标准需求异常信息详细信息", description = "根据id获取")
    //@RequiresPermissions("ApsPlateStandardRequireError:ApsPlateStandardRequireError:query")
    @RequiresPermissions("Aps:ApsPlateStandardRequireError:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
@@ -75,7 +75,7 @@
     * æ–°å¢žé’£é‡‘标准需求异常信息
     */
    @Operation(summary = "新增钣金标准需求异常信息", description = "单个新增")
    //@RequiresPermissions("ApsPlateStandardRequireError:ApsPlateStandardRequireError:add")
    @RequiresPermissions("Aps:ApsPlateStandardRequireError:add")
    @Log(title = "钣金标准需求异常信息", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsPlateStandardRequireError apsPlateStandardRequireError)
@@ -87,7 +87,7 @@
     * ä¿®æ”¹é’£é‡‘标准需求异常信息
     */
    @Operation(summary = "修改钣金标准需求异常信息", description = "单个修改")
    //@RequiresPermissions("ApsPlateStandardRequireError:ApsPlateStandardRequireError:edit")
    @RequiresPermissions("Aps:ApsPlateStandardRequireError:edit")
    @Log(title = "钣金标准需求异常信息", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ApsPlateStandardRequireError apsPlateStandardRequireError)
@@ -99,7 +99,7 @@
     * åˆ é™¤é’£é‡‘标准需求异常信息
     */
    @Operation(summary = "删除钣金标准需求异常信息", description = "批量删除")
   // @RequiresPermissions("ApsPlateStandardRequireError:ApsPlateStandardRequireError:remove")
    @RequiresPermissions("Aps:ApsPlateStandardRequireError:remove")
    @Log(title = "钣金标准需求异常信息", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteHeaderController.java
@@ -34,7 +34,7 @@
     * æŸ¥è¯¢æ ‡å‡†å·¥è‰ºè·¯çº¿Header列表
     */
    @RequiresPermissions("aps:ApsStandardProcessRouteHeader:list")
    @RequiresPermissions("Aps:ApsStandardProcessRouteHeader:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsStandardProcessRouteHeader apsStandardProcessRouteHeader)
    {
@@ -47,7 +47,7 @@
     * å¯¼å‡ºæ ‡å‡†å·¥è‰ºè·¯çº¿Header列表
     */
    @RequiresPermissions("aps:ApsStandardProcessRouteHeader:export")
    @RequiresPermissions("Aps:ApsStandardProcessRouteHeader:export")
    @Log(title = "标准工艺路线Header", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsStandardProcessRouteHeader apsStandardProcessRouteHeader)
@@ -60,7 +60,7 @@
    /**
     * èŽ·å–æ ‡å‡†å·¥è‰ºè·¯çº¿Header详细信息
     */
    @RequiresPermissions("aps:ApsStandardProcessRouteHeader:query")
    @RequiresPermissions("Aps:ApsStandardProcessRouteHeader:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
@@ -70,7 +70,7 @@
    /**
     * æ–°å¢žæ ‡å‡†å·¥è‰ºè·¯çº¿Header
     */
    @RequiresPermissions("aps:ApsStandardProcessRouteHeader:add")
    @RequiresPermissions("Aps:ApsStandardProcessRouteHeader:add")
    @Log(title = "标准工艺路线Header", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsStandardProcessRouteHeader apsStandardProcessRouteHeader)
@@ -81,7 +81,7 @@
    /**
     * ä¿®æ”¹æ ‡å‡†å·¥è‰ºè·¯çº¿Header
     */
    @RequiresPermissions("aps:ApsStandardProcessRouteHeader:edit")
    @RequiresPermissions("Aps:ApsStandardProcessRouteHeader:edit")
    @Log(title = "标准工艺路线Header", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ApsStandardProcessRouteHeader apsStandardProcessRouteHeader)
@@ -92,7 +92,7 @@
    /**
     * åˆ é™¤æ ‡å‡†å·¥è‰ºè·¯çº¿Header
     */
    @RequiresPermissions("aps:ApsStandardProcessRouteHeader:remove")
    @RequiresPermissions("Aps:ApsStandardProcessRouteHeader:remove")
    @Log(title = "标准工艺路线Header", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsStandardProcessRouteLineController.java
@@ -33,7 +33,7 @@
    /**
     * æŸ¥è¯¢æ ‡å‡†å·¥è‰ºè·¯çº¿Line列表
     */
    @RequiresPermissions("ApsStandardProcessRouteLine:ApsStandardProcessRouteLine:list")
    @RequiresPermissions("Aps:ApsStandardProcessRouteLine:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsStandardProcessRouteLine apsStandardProcessRouteLine)
    {
@@ -45,7 +45,7 @@
    /**
     * å¯¼å‡ºæ ‡å‡†å·¥è‰ºè·¯çº¿Line列表
     */
    @RequiresPermissions("ApsStandardProcessRouteLine:ApsStandardProcessRouteLine:export")
    @RequiresPermissions("Aps:ApsStandardProcessRouteLine:export")
    @Log(title = "标准工艺路线Line", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsStandardProcessRouteLine apsStandardProcessRouteLine)
@@ -58,7 +58,7 @@
    /**
     * èŽ·å–æ ‡å‡†å·¥è‰ºè·¯çº¿Line详细信息
     */
    @RequiresPermissions("ApsStandardProcessRouteLine:ApsStandardProcessRouteLine:query")
    @RequiresPermissions("Aps:ApsStandardProcessRouteLine:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
@@ -68,7 +68,7 @@
    /**
     * æ–°å¢žæ ‡å‡†å·¥è‰ºè·¯çº¿Line
     */
    @RequiresPermissions("ApsStandardProcessRouteLine:ApsStandardProcessRouteLine:add")
    @RequiresPermissions("Aps:ApsStandardProcessRouteLine:add")
    @Log(title = "标准工艺路线Line", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsStandardProcessRouteLine apsStandardProcessRouteLine)
@@ -79,7 +79,7 @@
    /**
     * ä¿®æ”¹æ ‡å‡†å·¥è‰ºè·¯çº¿Line
     */
    @RequiresPermissions("ApsStandardProcessRouteLine:ApsStandardProcessRouteLine:edit")
    @RequiresPermissions("Aps:ApsStandardProcessRouteLine:edit")
    @Log(title = "标准工艺路线Line", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ApsStandardProcessRouteLine apsStandardProcessRouteLine)
@@ -90,7 +90,7 @@
    /**
     * åˆ é™¤æ ‡å‡†å·¥è‰ºè·¯çº¿Line
     */
    @RequiresPermissions("ApsStandardProcessRouteLine:ApsStandardProcessRouteLine:remove")
    @RequiresPermissions("Aps:ApsStandardProcessRouteLine:remove")
    @Log(title = "标准工艺路线Line", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequire.java
@@ -31,7 +31,8 @@
    private String requireTrackId;
    /**单号*/
    private String docNum;
    /**上级物料编码*/
    private String bomHeaderCode;
    /** bom_line_id */
//    @Excel(name = "bom_line_id")
    private String bomLineId;
@@ -65,14 +66,17 @@
    private BigDecimal netRequirement;
    /** è®¡åˆ’开工日 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划开工日")
    private Date startDate;
    /** è®¡åˆ’完工日 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划完工日")
    private Date completeDate;
    /** éœ€æ±‚日期 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "需求日期")
    private Date demandDate;
@@ -100,6 +104,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "建议完成日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date suggestedCompletionDate;
    /** å»¶è¿Ÿé£Žé™©æ ‡è¯† */
    private String hasDelayRisk;
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlatePlanMapper.java
@@ -77,7 +77,7 @@
    /**
     * èŽ·å–æœªåŒ¹é…çš„å­è®¡åˆ’
     * */
    ApsPlatePlan selectUnMatchPlateSubPlan(String plant);
    ApsPlatePlan selectUnMatchPlateSubPlan(String plant,String itemNumber);
    /**
     * æ›´æ–°å­è®¡åˆ’未匹配数量
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java
@@ -178,7 +178,7 @@
            List<ApsPlateStandardRequire> requiresList=new ArrayList<>();
            getBomRequires(plantCode, "0",itemNumber,BigDecimal.ONE, batchNum, null, mainPlan, requiresList, 0L);
            getBomRequires(plantCode, "0","0",itemNumber,BigDecimal.ONE, batchNum, null, mainPlan, requiresList, 0L);
            // æ‰¹é‡æ’入以提高性能
            if (!requiresList.isEmpty()) {
@@ -196,6 +196,7 @@
     * æž„建需求信息
     *
     * @param plant å·¥åŽ‚ä»£ç 
     * @param bomHeaderCode BOM上级物料编码
     * @param bomLineId BOM行ID
     * @param itemCode ç‰©æ–™ä»£ç 
     * @param itemNum ç‰©æ–™æ•°é‡
@@ -205,7 +206,7 @@
     * @param allRequires æ‰€æœ‰éœ€æ±‚的列表
     * @param level å±‚级
     */
    private void getBomRequires(String plant,  String bomLineId,String itemCode,BigDecimal itemNum, String batchNum, Date upLevelStartDate, ApsPlatePlan plan, List<ApsPlateStandardRequire> allRequires, Long level) {
    private void getBomRequires(String plant, String bomHeaderCode, String bomLineId,String itemCode,BigDecimal itemNum, String batchNum, Date upLevelStartDate, ApsPlatePlan plan, List<ApsPlateStandardRequire> allRequires, Long level) {
        /*构建需求信息*/
        ApsPlateStandardRequire require = new ApsPlateStandardRequire();
        require.setId(IdUtil.getSnowflakeNextId());
@@ -213,6 +214,7 @@
        require.setBatchNumber(batchNum);
        require.setDocNum(plan.getDocumentNumber());
        require.setOrgCode(plant);
        require.setBomHeaderCode(bomHeaderCode);
        require.setBomLineId(bomLineId);
        require.setBomLineCode(itemCode);
        require.setBomLineLevel(level);
@@ -259,6 +261,8 @@
                bomStockDetailService.saveStorageAndDetail(storage, plan, bomLineId,itemCode, batchNum, deductionAmount, afterStockAmount,require.getId());
            }
        }
        /*未匹配数量,默认为净需求*/
        require.setUnmatchedDemandAmount(require.getNetRequirement());
        /*工艺路线总需求*/
        ApsStandardProcessRouteLine routeHeader = routeLineService.getRouteLineTotalTime(require);
        String routeId = routeHeader.getRouteId();
@@ -310,7 +314,7 @@
            List<ApsBom> bomLineList = bomLineService.selectApsBomLineList(plant, itemCode);
            if (!bomLineList.isEmpty()) {
                bomLineList.forEach(line -> {
                    getBomRequires(plant, line.getBomLineId(),line.getItemCode() ,line.getNum() , batchNum, require.getStartDate(), plan, allRequires, nextLevel);
                    getBomRequires(plant, itemCode, line.getBomLineId(),line.getItemCode() ,line.getNum() , batchNum, require.getStartDate(), plan, allRequires, nextLevel);
                });
            }
        }
@@ -344,39 +348,44 @@
    private void matchRequireAndSubPlan(ApsPlateStandardRequire require) {
        BigDecimal netRequirement = require.getNetRequirement();
        require.setMatchMode("工单匹配");
        if (netRequirement.compareTo(BigDecimal.ZERO) > 0) {
            ApsPlatePlan platePlan = apsPlatePlanMapper.selectUnMatchPlateSubPlan(require.getOrgCode());
            ApsPlatePlan platePlan = apsPlatePlanMapper.selectUnMatchPlateSubPlan(require.getOrgCode(),  require.getBomLineCode());
            /*子件工单的未匹配数量 ä½œä¸ºå½“前的库存*/
            while (platePlan != null && netRequirement.compareTo(BigDecimal.ZERO) > 0) {
                BigDecimal stock = platePlan.getUnmatchedQuantity();
                if (netRequirement.compareTo(stock) < 0) {
                    /* åº“存数量 å¤§äºŽ å‡€éœ€æ±‚数量*/
                    /* å‡€éœ€æ±‚数量=0 ï¼Œå­ä»¶å·¥å•未匹配数量= åº“å­˜-净需求*/
                    netRequirement = BigDecimal.ZERO;
                    require.setNetRequirement(netRequirement);
                    BigDecimal subtract = stock.subtract(netRequirement);
                    bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement);
                    netRequirement = BigDecimal.ZERO;
                    require.setMatchState("已匹配");
                    require.setUnmatchedDemandAmount(netRequirement);
                    /*净需求已经被满足,不需要继续匹配*/
                } else if (netRequirement.compareTo(stock) == 0) {
                    /*净需求数量 == åº“存数量*/
                    netRequirement = BigDecimal.ZERO;
                    require.setNetRequirement(netRequirement);
                    BigDecimal subtract = BigDecimal.ZERO;
                    bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement);
                    netRequirement = BigDecimal.ZERO;
                    require.setMatchState("已匹配");
                    require.setUnmatchedDemandAmount(netRequirement);
                    /*净需求已经被满足,不需要继续匹配*/
                }
                if (netRequirement.compareTo(stock) > 0) {
                    /*需求大于库存*/
                    /*净需求 è¢«éƒ¨åˆ†æ»¡è¶³ */
                    BigDecimal rest = netRequirement.subtract(stock);
                    require.setNetRequirement(rest);
                    require.setMatchState("匹配中");
                    /*工单 æœªåŒ¹é…æ•°é‡ä¸º0 å…¨éƒ¨ç”¨äºŽåŒ¹é…éœ€æ±‚*/
                    bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, BigDecimal.ZERO, stock, netRequirement);
                    /*净需求未被满足,需要继续匹配*/
                    platePlan = apsPlatePlanMapper.selectUnMatchPlateSubPlan(require.getOrgCode());
                    platePlan = apsPlatePlanMapper.selectUnMatchPlateSubPlan(require.getOrgCode(),  require.getBomLineCode());
                    /*剩余净需求*/
                    netRequirement = rest;
                    require.setUnmatchedDemandAmount(netRequirement);
                }
            }
        }
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlatePlanMapper.xml
@@ -271,8 +271,9 @@
    <select id="selectPlatePlanByPlantMajor" parameterType="ApsPlatePlan" resultMap="ApsPlatePlanResult">
        select  id,document_number,main_part_number,item_number,plant,professional_affiliation,production_quantity,require_id,
        unmatched_quantity,version, production_base
        unmatched_quantity,version, production_base,
        (case   when custom_time is null then plan_end_day else custom_time end ) as plan_end_day
        from aps_plate_plan
        <where>
            <if test="plant != null "> and plant = #{plant}</if>
            <if test="professionalAffiliation != null "> and professional_affiliation = #{professionalAffiliation}</if>
@@ -286,7 +287,8 @@
             unmatched_quantity,version
        from aps_plate_plan
        where  del_flag='0' and professional_affiliation !='0' and unmatched_quantity > 0
        <if test="plant != null  and plan !='' "> and plant = #{plant}</if>
        <if test="plant != null  and plant !='' "> and plant = #{plant}</if>
        <if test="itemNumber != null  and itemNumber !='' "> and item_number = #{itemNumber}</if>
        order by document_number asc,id asc
        limit 1
    </select>
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireMapper.xml
@@ -187,7 +187,7 @@
    <insert id="batchInsert" parameterType="java.util.List">
        insert into aps_plate_standard_require
        (id, require_track_id,doc_num,batch_number, org_code, bom_line_id, bom_line_code, bom_line_level, bom_use_amount, process_route_id,
        (id, require_track_id,doc_num,batch_number, org_code, bom_header_code,bom_line_id, bom_line_code, bom_line_level, bom_use_amount, process_route_id,
         process_route_hours, require_amount, net_requirement, start_date, complete_date, demand_date,
         production_base, match_state, match_mode, unmatched_demand_amount, suggested_completion_date,
         has_delay_risk, del_flag, create_time, create_by)
@@ -199,6 +199,7 @@
            #{item.docNum},
            #{item.batchNumber},
            #{item.orgCode},
            #{item.bomHeaderCode},
            #{item.bomLineId},
            #{item.bomLineCode},
            #{item.bomLineLevel},
aps-modules/aps-job/src/main/java/com/aps/job/controller/SysJobController.java
@@ -1,32 +1,35 @@
package com.aps.job.controller;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
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;
import com.aps.common.core.utils.uuid.Sequence;
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.common.security.utils.SecurityUtils;
import com.aps.job.domain.SysJob;
import com.aps.job.service.ISysJobService;
import com.aps.job.service.*;
import com.aps.job.util.CronUtils;
import com.aps.job.util.ScheduleUtils;
import com.aps.system.api.RemoteCoreService;
import jakarta.servlet.http.HttpServletResponse;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
 * è°ƒåº¦ä»»åŠ¡ä¿¡æ¯æ“ä½œå¤„ç†
@@ -40,6 +43,23 @@
    @Autowired
    private ISysJobService jobService;
    @Autowired
    private IApsWorkOrderProcessService apsWorkOrderProcessService;
    @Autowired
    private IApsWorkOrderJobService apsWorkOrderJobService;
    @Autowired
    private IApsBomHeaderJobService apsBomHeaderJobService;
    @Autowired
    private Sequence sequence;
    @Autowired
    private IApsMaterialStorageManagementJobService apsMaterialStorageManagementJobService;
    @Autowired
    private RemoteCoreService remoteCoreService;
    /**
     * æŸ¥è¯¢å®šæ—¶ä»»åŠ¡åˆ—è¡¨
     */
@@ -183,4 +203,112 @@
        jobService.deleteJobByIds(jobIds);
        return success();
    }
    @PostMapping("/refreshBomData")
    public Boolean refreshBomData() throws SchedulerException, TaskException
    {
        return apsBomHeaderJobService.syncBomDataJob(1, 1000, "", "");
    }
    @PutMapping("/test")
    public void test(@RequestBody SysJob job) throws Exception
    {
        System.out.println("start");
        //将BOM数据存进Redis中
        remoteCoreService.setBomDataToRedis(SecurityConstants.INNER);
        //同步物料库存数据
//        apsMaterialStorageManagementJobService.syncApsMaterialStorageData(1, 1000, "", "");
        //同步BOM数据
//        apsBomHeaderJobService.syncBomData(1, 1000,  "FORTUNA", "");
//        System.out.println(sequence.nextId());
//        List<String> docNos = new ArrayList<>();
//        docNos.add("MO-240328010093");
//        apsWorkOrderProcessService.getWorkOrderProcessFromU9(docNos);
//        apsWorkOrderProcessService.syncWorkOrderProcessData("", 100);
//        apsWorkOrderJobService.syncPartOrderData();
//        apsWorkOrderJobService.syncPlateOrderData();
//        apsWorkOrderJobService.syncGasPipingData();
//        apsWorkOrderProcessService.syncProcessRouteData();
        System.out.println("end");
        //生成数据字典
//        HikariConfig hikariConfig = new HikariConfig();
//        hikariConfig.setDriverClassName("org.postgresql.Driver");
//        hikariConfig.setJdbcUrl("jdbc:postgresql://192.168.50.160:5432/postgres?stringtype=unspecified");
//        hikariConfig.setUsername("postgres");
//        hikariConfig.setPassword("pwd@aps");
//        //设置可以获取tables remarks信息
//        hikariConfig.addDataSourceProperty("useInformationSchema", "true");
//        hikariConfig.setMinimumIdle(2);
//        hikariConfig.setMaximumPoolSize(5);
//        DataSource dataSource = new HikariDataSource(hikariConfig);
//        //生成配置
//        EngineConfig engineConfig = EngineConfig.builder()
//                //生成文件路径
//                .fileOutputDir("D:\\projects\\aps\\文档")
//                //打开目录
//                .openOutputDir(true)
//                //文件类型
//                .fileType(EngineFileType.WORD)
//                //生成模板实现
//                .produceType(EngineTemplateType.freemarker)
//                //自定义文件名称
//                .fileName("自定义文件名称").build();
//
//        //忽略表
//        ArrayList<String> ignoreTableName = new ArrayList<>();
//        ignoreTableName.add("test_user");
//        ignoreTableName.add("test_group");
//        //忽略表前缀
//        ArrayList<String> ignorePrefix = new ArrayList<>();
//        ignorePrefix.add("test_");
//        //忽略表后缀
//        ArrayList<String> ignoreSuffix = new ArrayList<>();
//        ignoreSuffix.add("_test");
//        ProcessConfig processConfig = ProcessConfig.builder()
//                //指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置
//                //根据名称指定表生成
//                .designatedTableName(new ArrayList<>())
//                //根据表前缀生成
//                .designatedTablePrefix(new ArrayList<>())
//                //根据表后缀生成
//                .designatedTableSuffix(new ArrayList<>())
//                //忽略表名
//                .ignoreTableName(ignoreTableName)
//                //忽略表前缀
//                .ignoreTablePrefix(ignorePrefix)
//                //忽略表后缀
//                .ignoreTableSuffix(ignoreSuffix).build();
//        //配置
//        Configuration config = Configuration.builder()
//                //版本
//                .version("1.0.0")
//                //描述
//                .description("数据库设计文档生成")
//                //数据源
//                .dataSource(dataSource)
//                //生成配置
//                .engineConfig(engineConfig)
//                //生成配置
//                .produceConfig(processConfig)
//                .build();
//        //执行生成
//        new DocumentationExecute(config).execute();
//        System.out.println("end");
    }
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("0.1234");
        Double b = a.doubleValue()*60*60*1000;
        LocalDateTime now = LocalDateTime.now();
        //将now换成成毫秒 ç„¶åŽåŠ ä¸Ša ç„¶åŽè½¬æ¢æˆLocalDateTime
        //a转换成毫秒
        System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println(b/1000/60);
        Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        milliSecond += b.longValue();
        System.out.println(LocalDateTime.ofInstant(Instant.ofEpochMilli(milliSecond), ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println(new BigDecimal(585).divide(BigDecimal.valueOf(1232), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
        new BigDecimal(585).divide(BigDecimal.valueOf(1232), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
    }
}
aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsMaterialStorageManagementJob.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
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;
/**
 * ç‰©æ–™åº“存管理对象 aps_material_storage_management_job
 *
 * @author hjy
 * @date 2025-05-08
 */
@Schema(description = "物料库存管理实体类")
public class ApsMaterialStorageManagementJob extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** id */
    @Schema(description = "id")
    private Long id;
    /** æ–™å· */
    @Excel(name = "料号")
    @Schema(description = "料号")
    private String itemNumber;
    /** æ•°é‡ */
    @Excel(name = "数量")
    @Schema(description = "数量")
    private BigDecimal num;
    /** é€‚用工厂 */
    @Excel(name = "适用工厂")
    @Schema(description = "适用工厂")
    private String applicableFactories;
    /** é›†æˆæ—¥æœŸ */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "集成日期", width = 30, dateFormat = "yyyy-MM-dd")
    @Schema(description = "集成日期")
    private Date integrationDate;
    /** åˆ·æ–°æ—¥æœŸ */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "刷新日期", width = 30, dateFormat = "yyyy-MM-dd")
    @Schema(description = "刷新日期")
    private Date refreshDate;
    /** å‰©ä½™åº“å­˜ */
    @Excel(name = "剩余库存")
    @Schema(description = "剩余库存")
    private BigDecimal remainderStock;
    /** ä¿®æ”¹ç‰ˆæœ¬ */
    @Excel(name = "修改版本")
    @Schema(description = "修改版本")
    private Double version;
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setItemNumber(String itemNumber)
    {
        this.itemNumber = itemNumber;
    }
    public String getItemNumber()
    {
        return itemNumber;
    }
    public void setNum(BigDecimal num)
    {
        this.num = num;
    }
    public BigDecimal getNum()
    {
        return num;
    }
    public void setApplicableFactories(String applicableFactories)
    {
        this.applicableFactories = applicableFactories;
    }
    public String getApplicableFactories()
    {
        return applicableFactories;
    }
    public void setIntegrationDate(Date integrationDate)
    {
        this.integrationDate = integrationDate;
    }
    public Date getIntegrationDate()
    {
        return integrationDate;
    }
    public void setRefreshDate(Date refreshDate)
    {
        this.refreshDate = refreshDate;
    }
    public Date getRefreshDate()
    {
        return refreshDate;
    }
    public void setRemainderStock(BigDecimal remainderStock)
    {
        this.remainderStock = remainderStock;
    }
    public BigDecimal getRemainderStock()
    {
        return remainderStock;
    }
    public void setVersion(Double version)
    {
        this.version = version;
    }
    public Double getVersion()
    {
        return version;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("itemNumber", getItemNumber())
            .append("num", getNum())
            .append("applicableFactories", getApplicableFactories())
            .append("integrationDate", getIntegrationDate())
            .append("refreshDate", getRefreshDate())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("remainderStock", getRemainderStock())
            .append("version", getVersion())
            .toString();
    }
}
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsBomHeaderJobMapper.java
@@ -79,4 +79,9 @@
     * @return
     */
    public void deleteApsBomHeader();
    /**
     * åˆ é™¤ä¸­é—´è¡¨BOM Header数据
     */
    public void deleteApsBomHeaderJob();
}
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsBomLineJobMapper.java
@@ -79,4 +79,9 @@
     */
    public void deleteApsBomLine() ;
    /**
     * åˆ é™¤ä¸­é—´è¡¨BOM Line数据
     */
    public void deleteApsBomLineJob() ;
}
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsMaterialStorageManagementJobMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.aps.job.mapper;
import com.aps.job.domain.ApsMaterialStorageManagementJob;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * ç‰©æ–™åº“存管理Mapper接口
 *
 * @author hjy
 * @date 2025-05-08
 */
public interface ApsMaterialStorageManagementJobMapper
{
    /**
     * æŸ¥è¯¢ç‰©æ–™åº“存管理
     *
     * @param id ç‰©æ–™åº“存管理主键
     * @return ç‰©æ–™åº“存管理
     */
    public ApsMaterialStorageManagementJob selectApsMaterialStorageManagementJobById(Long id);
    /**
     * æŸ¥è¯¢ç‰©æ–™åº“存管理列表
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç‰©æ–™åº“存管理集合
     */
    public List<ApsMaterialStorageManagementJob> selectApsMaterialStorageManagementJobList(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob);
    /**
     * æ–°å¢žç‰©æ–™åº“存管理
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç»“æžœ
     */
    public int insertApsMaterialStorageManagementJob(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob);
    /**
     * ä¿®æ”¹ç‰©æ–™åº“存管理
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç»“æžœ
     */
    public int updateApsMaterialStorageManagementJob(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob);
    /**
     * åˆ é™¤ç‰©æ–™åº“存管理
     *
     * @param id ç‰©æ–™åº“存管理主键
     * @return ç»“æžœ
     */
    public int deleteApsMaterialStorageManagementJobById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤ç‰©æ–™åº“存管理
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteApsMaterialStorageManagementJobByIds(Long[] ids);
    /**
     * æ‰¹é‡æ’入物料库存数据
     * @param list
     * @return
     */
    public int insertApsMaterialStorageBatch(@Param("list") List<ApsMaterialStorageManagementJob> list);
    /**
     * æ‰¹é‡æ’入物料库存数据到业务表
     * @return
     */
    public void insertIntoApsMaterialStorage();
    /**
     * åˆ é™¤ç‰©æ–™åº“存数据
     * @return
     */
    public void deleteApsMaterialStorage();
    /**
     * åˆ é™¤ä¸­é—´è¡¨ç‰©æ–™åº“存数据
     */
    public void deleteApsMaterialStorageJob();
}
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsBomHeaderJobService.java
@@ -65,4 +65,16 @@
     * @return
     */
    public boolean syncBomData(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList);
    /**
     * åŒæ­¥bom数据定时任务
     * @param pageIndex
     * @param pageSize
     * @param orgCode
     * @param itemCodeList
     * @return
     */
    public boolean syncBomDataJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList);
}
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsMaterialStorageManagementJobService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.aps.job.service;
import com.aps.job.domain.ApsMaterialStorageManagementJob;
import java.util.List;
/**
 * ç‰©æ–™åº“存管理Service接口
 *
 * @author hjy
 * @date 2025-05-08
 */
public interface IApsMaterialStorageManagementJobService
{
    /**
     * æŸ¥è¯¢ç‰©æ–™åº“存管理
     *
     * @param id ç‰©æ–™åº“存管理主键
     * @return ç‰©æ–™åº“存管理
     */
    public ApsMaterialStorageManagementJob selectApsMaterialStorageManagementJobById(Long id);
    /**
     * æŸ¥è¯¢ç‰©æ–™åº“存管理列表
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç‰©æ–™åº“存管理集合
     */
    public List<ApsMaterialStorageManagementJob> selectApsMaterialStorageManagementJobList(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob);
    /**
     * æ–°å¢žç‰©æ–™åº“存管理
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç»“æžœ
     */
    public int insertApsMaterialStorageManagementJob(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob);
    /**
     * ä¿®æ”¹ç‰©æ–™åº“存管理
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç»“æžœ
     */
    public int updateApsMaterialStorageManagementJob(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob);
    /**
     * æ‰¹é‡åˆ é™¤ç‰©æ–™åº“存管理
     *
     * @param ids éœ€è¦åˆ é™¤çš„物料库存管理主键集合
     * @return ç»“æžœ
     */
    public int deleteApsMaterialStorageManagementJobByIds(Long[] ids);
    /**
     * åˆ é™¤ç‰©æ–™åº“存管理信息
     *
     * @param id ç‰©æ–™åº“存管理主键
     * @return ç»“æžœ
     */
    public int deleteApsMaterialStorageManagementJobById(Long id);
    /**
     * åŒæ­¥ç‰©æ–™åº“存数据
     * @param pageIndex
     * @param pageSize
     * @param orgCode
     * @param itemCodeList
     * @return
     */
    public boolean syncApsMaterialStorageData(int pageIndex, int pageSize, String orgCode, String itemCodeList);
    /**
     * åŒæ­¥å…¨é‡ç‰©æ–™åº“存数据定时任务
     * @param pageIndex
     * @param pageSize
     * @param orgCode
     * @param itemCodeList
     * @return
     */
    public boolean syncApsMaterialStorageDataJob(int pageIndex, int pageSize, String orgCode, String itemCodeList);
}
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsBomHeaderJobServiceImpl.java
@@ -19,6 +19,7 @@
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;
@@ -39,9 +40,6 @@
    @Autowired
    private ApsBomLineJobMapper apsBomLineJobMapper;
    /**
     * èŽ·å–è®¢å•æŽ¥å£
     * */
    @Value("${u9.bomJobUrl}")
    private String getBomUrl;
@@ -223,4 +221,33 @@
        }
        return true;
    }
    /**
     * å…¨é‡åŒæ­¥BOM数据定时任务
     * @param pageIndex
     * @param pageSize
     * @param orgCode
     * @param itemCodeList
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean syncBomDataJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList){
        try {
            apsBomHeaderJobMapper.deleteApsBomHeaderJob();
            apsBomLineJobMapper.deleteApsBomLineJob();
            boolean res = syncBomData(pageIndex, pageSize, orgCode, itemCodeList);
            if(!res){
                return false;
            }
            apsBomHeaderJobMapper.deleteApsBomHeader();
            apsBomLineJobMapper.deleteApsBomLine();
            apsBomHeaderJobMapper.insertIntoApsBomHeader();
            apsBomLineJobMapper.insertIntoApsBomLine();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        return true;
    }
}
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsMaterialStorageManagementJobServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,221 @@
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.job.domain.ApsMaterialStorageManagementJob;
import com.aps.job.domain.ApsWorkOrderJobLog;
import com.aps.job.mapper.ApsMaterialStorageManagementJobMapper;
import com.aps.job.mapper.ApsWorkOrderJobLogMapper;
import com.aps.job.service.IApsMaterialStorageManagementJobService;
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;
/**
 * ç‰©æ–™åº“存管理Service业务层处理
 *
 * @author hjy
 * @date 2025-05-08
 */
@Service
public class ApsMaterialStorageManagementJobServiceImpl implements IApsMaterialStorageManagementJobService
{
    @Autowired
    private ApsMaterialStorageManagementJobMapper apsMaterialStorageManagementJobMapper;
    @Value("${u9.materialStorageUrl}")
    private String getMaterialStorageUrl;
    @Autowired
    private ApsWorkOrderJobLogMapper jobLogMapper;
    @Autowired
    private RestTemplate restTemplate;
    /**
     * æŸ¥è¯¢ç‰©æ–™åº“存管理
     *
     * @param id ç‰©æ–™åº“存管理主键
     * @return ç‰©æ–™åº“存管理
     */
    @Override
    public ApsMaterialStorageManagementJob selectApsMaterialStorageManagementJobById(Long id)
    {
        return apsMaterialStorageManagementJobMapper.selectApsMaterialStorageManagementJobById(id);
    }
    /**
     * æŸ¥è¯¢ç‰©æ–™åº“存管理列表
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç‰©æ–™åº“存管理
     */
    @Override
    public List<ApsMaterialStorageManagementJob> selectApsMaterialStorageManagementJobList(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob)
    {
        return apsMaterialStorageManagementJobMapper.selectApsMaterialStorageManagementJobList(apsMaterialStorageManagementJob);
    }
    /**
     * æ–°å¢žç‰©æ–™åº“存管理
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç»“æžœ
     */
    @Override
    public int insertApsMaterialStorageManagementJob(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob)
    {
        apsMaterialStorageManagementJob.setCreateTime(DateUtils.getNowDate());
        return apsMaterialStorageManagementJobMapper.insertApsMaterialStorageManagementJob(apsMaterialStorageManagementJob);
    }
    /**
     * ä¿®æ”¹ç‰©æ–™åº“存管理
     *
     * @param apsMaterialStorageManagementJob ç‰©æ–™åº“存管理
     * @return ç»“æžœ
     */
    @Override
    public int updateApsMaterialStorageManagementJob(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob)
    {
        apsMaterialStorageManagementJob.setUpdateTime(DateUtils.getNowDate());
        return apsMaterialStorageManagementJobMapper.updateApsMaterialStorageManagementJob(apsMaterialStorageManagementJob);
    }
    /**
     * æ‰¹é‡åˆ é™¤ç‰©æ–™åº“存管理
     *
     * @param ids éœ€è¦åˆ é™¤çš„物料库存管理主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsMaterialStorageManagementJobByIds(Long[] ids)
    {
        return apsMaterialStorageManagementJobMapper.deleteApsMaterialStorageManagementJobByIds(ids);
    }
    /**
     * åˆ é™¤ç‰©æ–™åº“存管理信息
     *
     * @param id ç‰©æ–™åº“存管理主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsMaterialStorageManagementJobById(Long id)
    {
        return apsMaterialStorageManagementJobMapper.deleteApsMaterialStorageManagementJobById(id);
    }
    @Override
    public boolean syncApsMaterialStorageData(int pageIndex, int pageSize, String orgCode, String itemCodeList) {
        JSONObject requestBody = new JSONObject();
        ResponseEntity<String> response = null;
        ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog();
        try {
            // è®¾ç½®è¯·æ±‚头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            // è®¾ç½®è¯·æ±‚体
            while (true) {
                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);
                // å‘送POST请求
                response = restTemplate.postForEntity(getMaterialStorageUrl, 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<ApsMaterialStorageManagementJob> storageList = new ArrayList<>();
                        for (Object o : jsonArray) {
                            JSONObject storage = (JSONObject) o;
                            ApsMaterialStorageManagementJob materialStorage = new ApsMaterialStorageManagementJob();
                            materialStorage.setId(IdUtil.getSnowflakeNextId());
                            materialStorage.setItemNumber(storage.getString("ItemCode"));
                            materialStorage.setNum(storage.getBigDecimal("StoreQty"));
                            materialStorage.setApplicableFactories(storage.getString("OrgCode"));
                            storageList.add(materialStorage);
                        }
                        List<ApsMaterialStorageManagementJob> temp = new ArrayList<>();
                        for(int i=0;i<storageList.size();i++){
                            temp.add(storageList.get(i));
                            if(temp.size()>=20){
                                apsMaterialStorageManagementJobMapper.insertApsMaterialStorageBatch(temp);
                                temp = new ArrayList<>();
                            }
                        }
                        jobLog.setRequestData(requestBody.toJSONString());
                        jobLog.setPageNum(Long.valueOf(pageIndex));
                        jobLog.setPageCount(Long.valueOf(pageSize));
                        jobLog.setCreateTime(DateUtils.getNowDate());
                        jobLog.setBizType("storage");
                        jobLog.setResult("storage:"+storageList.size());
                        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("storage");
                    jobLog.setResult("error");
                    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("storage");
            jobLog.setResult("error");
            jobLogMapper.insertApsWorkOrderJobLog(jobLog);
            return false;
        }
        return true;
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean syncApsMaterialStorageDataJob(int pageIndex, int pageSize, String orgCode, String itemCodeList) {
        try {
            apsMaterialStorageManagementJobMapper.deleteApsMaterialStorageJob();
            boolean res = syncApsMaterialStorageData(pageIndex, pageSize, orgCode, itemCodeList);
            if(!res){
                return false;
            }
            apsMaterialStorageManagementJobMapper.deleteApsMaterialStorage();
            apsMaterialStorageManagementJobMapper.insertIntoApsMaterialStorage();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}
aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java
@@ -1,9 +1,13 @@
package com.aps.job.task;
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.system.api.RemoteCoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -26,6 +30,15 @@
    @Autowired
    private IApsWorkOrderJobService iApsWorkOrderJobService;
    @Autowired
    private IApsBomHeaderJobService iApsBomHeaderJobService;
    @Autowired
    private RemoteCoreService remoteCoreService;
    @Autowired
    private IApsMaterialStorageManagementJobService apsMaterialStorageManagementJobService;
    public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
    {
@@ -133,4 +146,23 @@
        iApsWorkOrderJobService.syncGasPipingData();
        iApsWorkOrderProcessService.syncProcessRouteData();
    }
    /**
     * åŒæ­¥å…¨é‡BOM数据定时任务
     */
    public void syncBomDataJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList)
    {
        boolean res =  iApsBomHeaderJobService.syncBomDataJob(pageIndex, pageSize, orgCode, itemCodeList);
        if(res){
            remoteCoreService.setBomDataToRedis(SecurityConstants.INNER);
        }
    }
    /**
     * åŒæ­¥å…¨é‡åº“存数据定时任务
     */
    public void syncApsMaterialStorageDataJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList)
    {
        apsMaterialStorageManagementJobService.syncApsMaterialStorageDataJob(pageIndex, pageSize, orgCode, itemCodeList);
    }
}
aps-modules/aps-job/src/main/resources/mapper/job/ApsBomHeaderJobMapper.xml
@@ -150,9 +150,14 @@
        FROM aps_bom_header_job
    </insert>
    <!-- åˆ é™¤ aps_process_route è¡¨ä¸­çš„æ•°æ® -->
    <!-- åˆ é™¤ aps_bom_header è¡¨ä¸­çš„æ•°æ® -->
    <delete id="deleteApsBomHeader">
        DELETE FROM aps_bom_header
    </delete>
    <!-- åˆ é™¤ aps_bom_header_job è¡¨ä¸­çš„æ•°æ® -->
    <delete id="deleteApsBomHeaderJob">
        DELETE FROM aps_bom_header_job
    </delete>
</mapper>
aps-modules/aps-job/src/main/resources/mapper/job/ApsBomLineJobMapper.xml
@@ -198,9 +198,14 @@
        FROM aps_bom_line_job
    </insert>
    <!-- åˆ é™¤ aps_process_route è¡¨ä¸­çš„æ•°æ® -->
    <!-- åˆ é™¤ aps_bom_line è¡¨ä¸­çš„æ•°æ® -->
    <delete id="deleteApsBomLine">
        DELETE FROM aps_bom_line
    </delete>
    <!-- åˆ é™¤ aps_bom_line_job è¡¨ä¸­çš„æ•°æ® -->
    <delete id="deleteApsBomLineJob">
        DELETE FROM aps_bom_line_job
    </delete>
</mapper>
aps-modules/aps-job/src/main/resources/mapper/job/ApsMaterialStorageManagementJobMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,152 @@
<?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.ApsMaterialStorageManagementJobMapper">
    <resultMap type="ApsMaterialStorageManagementJob" id="ApsMaterialStorageManagementJobResult">
        <result property="id"    column="id"    />
        <result property="itemNumber"    column="item_number"    />
        <result property="num"    column="num"    />
        <result property="applicableFactories"    column="applicable_factories"    />
        <result property="integrationDate"    column="integration_date"    />
        <result property="refreshDate"    column="refresh_date"    />
        <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="remainderStock"    column="remainder_stock"    />
        <result property="version"    column="version"    />
    </resultMap>
    <sql id="selectApsMaterialStorageManagementJobVo">
        select id, item_number, num, applicable_factories, integration_date, refresh_date, create_by, create_time, update_by, update_time, remainder_stock, version from aps_material_storage_management_job
    </sql>
    <select id="selectApsMaterialStorageManagementJobList" parameterType="ApsMaterialStorageManagementJob" resultMap="ApsMaterialStorageManagementJobResult">
        <include refid="selectApsMaterialStorageManagementJobVo"/>
        <where>
            <if test="itemNumber != null  and itemNumber != ''"> and item_number = #{itemNumber}</if>
            <if test="num != null "> and num = #{num}</if>
            <if test="applicableFactories != null  and applicableFactories != ''"> and applicable_factories = #{applicableFactories}</if>
            <if test="integrationDate != null "> and integration_date = #{integrationDate}</if>
            <if test="refreshDate != null "> and refresh_date = #{refreshDate}</if>
            <if test="remainderStock != null "> and remainder_stock = #{remainderStock}</if>
            <if test="version != null "> and version = #{version}</if>
        </where>
    </select>
    <select id="selectApsMaterialStorageManagementJobById" parameterType="Long" resultMap="ApsMaterialStorageManagementJobResult">
        <include refid="selectApsMaterialStorageManagementJobVo"/>
        where id = #{id}
    </select>
    <insert id="insertApsMaterialStorageManagementJob" parameterType="ApsMaterialStorageManagementJob">
        insert into aps_material_storage_management_job
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="itemNumber != null">item_number,</if>
            <if test="num != null">num,</if>
            <if test="applicableFactories != null">applicable_factories,</if>
            <if test="integrationDate != null">integration_date,</if>
            <if test="refreshDate != null">refresh_date,</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="remainderStock != null">remainder_stock,</if>
            <if test="version != null">version,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="itemNumber != null">#{itemNumber},</if>
            <if test="num != null">#{num},</if>
            <if test="applicableFactories != null">#{applicableFactories},</if>
            <if test="integrationDate != null">#{integrationDate},</if>
            <if test="refreshDate != null">#{refreshDate},</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="remainderStock != null">#{remainderStock},</if>
            <if test="version != null">#{version},</if>
         </trim>
    </insert>
    <update id="updateApsMaterialStorageManagementJob" parameterType="ApsMaterialStorageManagementJob">
        update aps_material_storage_management_job
        <trim prefix="SET" suffixOverrides=",">
            <if test="itemNumber != null">item_number = #{itemNumber},</if>
            <if test="num != null">num = #{num},</if>
            <if test="applicableFactories != null">applicable_factories = #{applicableFactories},</if>
            <if test="integrationDate != null">integration_date = #{integrationDate},</if>
            <if test="refreshDate != null">refresh_date = #{refreshDate},</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="remainderStock != null">remainder_stock = #{remainderStock},</if>
            <if test="version != null">version = #{version},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteApsMaterialStorageManagementJobById" parameterType="Long">
        delete from aps_material_storage_management_job where id = #{id}
    </delete>
    <delete id="deleteApsMaterialStorageManagementJobByIds" parameterType="String">
        delete from aps_material_storage_management_job where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <insert id="insertApsMaterialStorageBatch">
        INSERT INTO aps_material_storage_management_job (
        id,
        item_number,
        num,
        applicable_factories,
        create_time
        ) VALUES
        <foreach collection="list" item="item" separator=",">
            (
            #{item.id},
            #{item.itemNumber},
            #{item.num},
            #{item.applicableFactories},
            now()
            )
        </foreach>
    </insert>
    <!-- æ’入数据到 aps_material_storage_management -->
    <insert id="insertIntoApsMaterialStorage">
        INSERT INTO aps_material_storage_management (
            id,
            item_number,
            num,
            applicable_factories,
            create_time
        )
        SELECT
            id,
            item_number,
            num,
            applicable_factories,
            now()
        FROM aps_material_storage_management_job
    </insert>
    <!-- åˆ é™¤ aps_material_storage_management è¡¨ä¸­çš„æ•°æ® -->
    <delete id="deleteApsMaterialStorage">
        DELETE FROM aps_material_storage_management
    </delete>
    <!-- åˆ é™¤ aps_material_storage_management_job è¡¨ä¸­çš„æ•°æ® -->
    <delete id="deleteApsMaterialStorageJob">
        DELETE FROM aps_material_storage_management_job
    </delete>
</mapper>