From 1c61a282a831cea285ddb503bdb810df9250b191 Mon Sep 17 00:00:00 2001 From: zhanghl <253316343@qq.com> Date: 星期五, 23 五月 2025 16:44:27 +0800 Subject: [PATCH] [钣金计划大表] 增加分布式锁 --- aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java | 39 ++++++++++++++++++- aps-modules/aps-core/src/main/java/com/aps/core/enums/PLAN_TASK_TYPE.java | 4 +- aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java | 11 +++-- aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java | 2 + aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java | 5 +- aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java | 11 +++-- aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java | 2 7 files changed, 58 insertions(+), 16 deletions(-) diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java index 931dbc8..74218eb 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java @@ -6,9 +6,11 @@ import com.aps.common.log.enums.BusinessType; import com.aps.common.security.annotation.RequiresPermissions; import com.aps.core.domain.ApsPlate.ApsPlateProcessShopStat; +import com.aps.core.service.ApsPlanTaskService; import com.aps.core.service.ApsPlate.IApsPlateProcessShopStatService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -27,7 +29,8 @@ { @Autowired private IApsPlateProcessShopStatService apsPlateProcessShopStatService; - + @Resource + ApsPlanTaskService apsPlanTaskService; /** * 瀵煎嚭閽i噾杞﹂棿缁熻鍒楄〃 @@ -48,13 +51,13 @@ @Operation(summary = "閽i噾璁″垝澶ц〃", description = "鏇存柊缁熻鏁版嵁") @Log(title = "閽i噾杞﹂棿缁熻", businessType = BusinessType.UPDATE) - @RequiresPermissions("plateProcessShopStat:update") + //@RequiresPermissions("plateProcessShopStat:update") @PostMapping("/update") public AjaxResult update() { try { - apsPlateProcessShopStatService.saveShopStat(); - return toAjax(true); + + return apsPlanTaskService.generatorPlatePlanTable(); } catch (Exception e) { return AjaxResult.error("鏇存柊澶辫触锛�"+e.getMessage()); } diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/enums/PLAN_TASK_TYPE.java b/aps-modules/aps-core/src/main/java/com/aps/core/enums/PLAN_TASK_TYPE.java index 391655d..329628d 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/enums/PLAN_TASK_TYPE.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/enums/PLAN_TASK_TYPE.java @@ -2,8 +2,8 @@ public enum PLAN_TASK_TYPE { - PLATE_PLAN("PlateOrderPlan","鐢熸垚閽i噾宸ュ崟璁″垝"); - + PLATE_PLAN("PlateOrderPlan","鐢熸垚閽i噾宸ュ崟璁″垝"), + PLATE_SHOP_PLAN_TABLE("PlateShopPlanTable","鐢熸垚閽i噾璁″垝澶ц〃"); private String code; private String desc; diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java b/aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java index 3efba69..f26dea0 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java @@ -3,8 +3,9 @@ public enum REDIS_LOCK_KEY { /*閽i噾宸ュ崟璁″垝浠诲姟*/ - PLATE_ORDER_PLAN("PLAN_TASK:PLATE_ORDER_PLAN"); - + PLATE_ORDER_PLAN("PLAN_TASK:PLATE_ORDER_PLAN"), + /*閽i噾璁″垝澶ц〃*/ + PLATE_SHOP_PLAN_TABLE("PLAN_TASK:PLATE_SHOP_PLAN_TABLE"); private String key; public String getKey() { diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java index ae44ce9..c8f0ab4 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java @@ -23,4 +23,6 @@ void updateTaskStatus(String batchNum, PLAN_TASK_STATUS status); AjaxResult generatorPlan(); + + AjaxResult generatorPlatePlanTable(); } diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java index d00d0af..7965f89 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java @@ -1,7 +1,6 @@ package com.aps.core.service.impl; import cn.hutool.core.util.IdUtil; -import com.aps.common.core.domain.R; import com.aps.common.core.utils.DateUtils; import com.aps.common.core.web.domain.AjaxResult; import com.aps.common.redis.service.RedisLockUtils; @@ -10,9 +9,9 @@ import com.aps.core.enums.PLAN_TASK_TYPE; import com.aps.core.enums.REDIS_LOCK_KEY; import com.aps.core.mapper.ApsPlateStandardRequireOrderEndDayMapper; +import com.aps.core.service.ApsPlate.IApsPlateProcessShopStatService; import com.aps.core.service.ApsPlate.IApsPlateStandardRequireBatchService; import com.aps.core.service.ApsPlate.IApsPlateStandardRequireService; -import com.aps.core.service.ApsPlateStandardRequireOrderEndDayService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -26,6 +25,7 @@ import static com.aps.common.core.web.domain.AjaxResult.success; import static com.aps.core.enums.REDIS_LOCK_KEY.PLATE_ORDER_PLAN; + /** * @author zhl @@ -50,6 +50,9 @@ @Resource ApsPlateStandardRequireOrderEndDayMapper orderEndDayMapper; + + @Resource + IApsPlateProcessShopStatService plateProcessShopStatService; @Override public Page<ApsPlanTask> pagingList(Page<ApsPlanTask> page ,ApsPlanTask task){ @@ -123,6 +126,38 @@ redisLockUtils.releaseLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_PLAN.getCode()); } } + @Override + public AjaxResult generatorPlatePlanTable() { + String plateOrderPlanKey = REDIS_LOCK_KEY.PLATE_SHOP_PLAN_TABLE.getKey(); + boolean existsLock = redisLockUtils.existLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_SHOP_PLAN_TABLE.getCode()); + if (existsLock) { + return AjaxResult.warn("閽i噾璁″垝澶ц〃璁″垝浠诲姟姝e湪鎵ц涓�!"); + } + LambdaQueryWrapper<ApsPlanTask> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ApsPlanTask::getTaskType, PLAN_TASK_TYPE.PLATE_SHOP_PLAN_TABLE.getCode()); + queryWrapper.eq(ApsPlanTask::getTaskStatus, PLAN_TASK_STATUS.IN_PROCESS.getCode()); + boolean existsDbTask = mapper.exists(queryWrapper); + if (existsDbTask) { + return AjaxResult.warn("閽i噾璁″垝澶ц〃浠诲姟姝e湪鎵ц涓�!!"); + } + String currentBatchNum = String.valueOf(IdUtil.getSnowflakeNextId()) ; + try { + redisLockUtils.getLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_SHOP_PLAN_TABLE.getCode(), 15 * 60L); + this.savePlanTask( currentBatchNum); + Thread.sleep(60000); + plateProcessShopStatService.saveShopStat(); + this.updateTaskStatus(currentBatchNum, PLAN_TASK_STATUS.FINISHED); + log.info("閽i噾璁″垝澶ц〃浠诲姟鎵ц瀹屾垚!" + currentBatchNum); + return success(); + } catch (Exception e) { + redisLockUtils.releaseLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_SHOP_PLAN_TABLE.getCode()); + log.error("閽i噾璁″垝澶ц〃浠诲姟鎵ц澶辫触!" + e.getMessage()); + this.updateTaskStatus(currentBatchNum, PLAN_TASK_STATUS.ERROR); + return AjaxResult.error("閽i噾璁″垝澶ц〃浠诲姟鎵ц澶辫触!" + e.getMessage()); + } finally { + redisLockUtils.releaseLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_SHOP_PLAN_TABLE.getCode()); + } + } } diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java index 6a23bcf..b492865 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java @@ -304,7 +304,7 @@ List<SysDictData> documentStatusDic = DictUtils.getDictCache("aps_document_status"); // 鏋勫缓缁撴灉鍒楄〃 - planList.forEach( + planList.stream().parallel().forEach( plan -> { // 鏍规嵁 docNo 鑾峰彇瀵瑰簲鐨� shopStatList List<ApsPlateProcessShopStat> shopStatList = shopStatesByDocNo.getOrDefault(plan.getDocumentNumber(), Collections.emptyList()); diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java index 55507be..de1582f 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java @@ -112,11 +112,13 @@ String batchNum = IdUtils.fastSimpleUUID(); List<ApsPlateProcessStat> tempList = apsPlateProcessStatMapper.queryTempStat(); Map<String, List<ApsPlateProcessStat>> groupByOrderNo = tempList.stream().collect(groupingBy(ApsPlateProcessStat::getWorkOrderNo)); - Boolean hasBefore = false; + LocalDateTime now = LocalDateTime.now(); List<ApsPlateProcessStat> totalList=new ArrayList<>(); - for (Map.Entry<String, List<ApsPlateProcessStat>> entry : groupByOrderNo.entrySet()) { - List<ApsPlateProcessStat> statPerOrder = entry.getValue(); + ArrayList<Map.Entry<String, List<ApsPlateProcessStat>>> orderProcessRoutes = new ArrayList<>(groupByOrderNo.entrySet()); + orderProcessRoutes.stream().parallel().forEach(x->{ + boolean hasBefore = false; + List<ApsPlateProcessStat> statPerOrder = x.getValue(); /*num 涓烘牴鎹畬宸ユ椂闂存帓搴忓嚭鐨勫簭鍙凤紝鎸夋鎺掑簭锛屽彲淇濊瘉鏄寜瀹屽伐鏃堕棿鍊掑彊鎺掑垪*/ statPerOrder.sort((a, b)->a.getNum().compareTo(b.getNum())); ApsPlateProcessStat last=null; @@ -180,10 +182,9 @@ } last = stat; totalList.add(stat); - //apsPlateProcessStatMapper.insertApsPlateProcessStat(stat); } hasBefore=false; - } + }); return totalList; } -- Gitblit v1.9.3