From cb0268055d2724f3b43ed8240d8f4205e5878622 Mon Sep 17 00:00:00 2001 From: zhangzq Date: Sun, 23 Jun 2024 21:49:23 +0800 Subject: [PATCH] =?UTF-8?q?add:=E6=B7=BB=E5=8A=A0=E6=89=98=E7=9B=98?= =?UTF-8?q?=E5=87=BA=E5=85=A5=E5=BA=93=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/common/enums/StatusEnum.java | 4 +- .../java/org/nl/common/utils/CodeUtil.java | 4 +- .../org/nl/common/utils/RedissonUtils.java | 2 +- .../nl/common/utils/SpringContextHolder.java | 6 ++ .../StIvtBsrealstorattrController.java | 52 ++++++++++++ .../handler/chainer/ChainerService.java | 58 +++++++++++++ .../handler/chainer/DecisionerChain.java | 38 +++++++++ .../chainer/impl/EndDecisionChainer.java | 73 ++++++++++++++++ .../chainer/impl/ExecuteDecisionChainer.java | 56 +++++++++++++ .../chainer/impl/StartDecisionChainer.java | 77 +++++++++++++++++ .../handler/{ => decisioner}/Decisioner.java | 2 +- .../impl/base/AlleyAveRuleHandler.java | 4 +- .../impl/base/ClusterRuleHandler.java | 4 +- .../impl/base/FIFORuleHandler.java | 13 +-- .../impl/base/LimitStorageRuleHandler.java | 4 +- .../impl/base/NearbyRuleHandler.java | 7 +- .../impl/base/WeightRuleHandler.java | 4 +- .../impl/base/出入库基础规则.md | 0 .../impl/diy/ClassRuleHandler.java | 4 +- .../handler/impl/GroupDickInStorageTask.java | 2 +- .../handler/impl/PalletInStorageTask.java | 84 +++++++++++++++++++ .../wms/external_system/GateWayService.java | 17 +--- .../acs/service/AcsToWmsService.java | 18 +++- .../wms/external_system/dto/InteracteDto.java | 1 + .../execution/ExecutionController.java | 10 ++- .../node/impl/SubProcessConverter.java | 8 +- .../behavior/FlowNodeActivityBehavior.java | 24 ++++-- .../impl/GateWayActivityBehavior.java | 27 +++++- .../impl/SubProcessActivityBehavior.java | 9 ++ .../operation/impl/SequenceFlowOperation.java | 23 +++-- .../node/impl/SubProcess/SubProcess.java | 4 +- .../nodeType/excess/impl/DecisionHandler.java | 76 +++-------------- .../StorageChangesProcessHandler.java | 7 -- .../execution/IActRuExecutionService.java | 3 + .../dao/mapper/ActRuExecutionMapper.java | 16 +++- .../impl/ActRuExecutionServiceImpl.java | 13 +++ .../impl/FlowOperationServiceImpl.java | 4 +- .../monitor/event/FlowStartEvent.java | 2 +- .../PalletStIvtIostorinvController.java | 56 +++++++++++++ .../service/PalletIostorinvService.java | 77 +++++++++++++++++ .../listener/FlowEndEventListener.java | 27 +++--- .../monitor/listener/StructEventListener.java | 2 - .../service/dao/StIvtStructivtflow.java | 4 + .../dao/mapper/xml/StIvtStructattrMapper.xml | 5 +- .../impl/StIvtStructattrServiceImpl.java | 12 ++- .../coderule/impl/SysCodeRuleServiceImpl.java | 2 + 46 files changed, 779 insertions(+), 166 deletions(-) create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/ChainerService.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/DecisionerChain.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/ExecuteDecisionChainer.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/Decisioner.java (95%) rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/impl/base/AlleyAveRuleHandler.java (98%) rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/impl/base/ClusterRuleHandler.java (97%) rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/impl/base/FIFORuleHandler.java (84%) rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/impl/base/LimitStorageRuleHandler.java (98%) rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/impl/base/NearbyRuleHandler.java (94%) rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/impl/base/WeightRuleHandler.java (97%) rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/impl/base/出入库基础规则.md (100%) rename wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/{ => decisioner}/impl/diy/ClassRuleHandler.java (72%) create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/PalletStIvtIostorinvController.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/service/PalletIostorinvService.java diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java index 9209e345..c27c61bf 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java @@ -31,8 +31,8 @@ public enum StatusEnum { /** * 出入库单据类型 */ - IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask","拣选回库", "13","inStorageTask")), - IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask", "拣选出库", "23","conveyorOutStorageTask")), + IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask","拣选回库", "13","inStorageTask","托盘入库", "30","inStorageTask")), + IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask", "拣选出库", "23","conveyorOutStorageTask","托盘出库", "40","outStorageTask")), /** * 任务类型 diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/CodeUtil.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/CodeUtil.java index 707501b6..21e5a490 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/CodeUtil.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/CodeUtil.java @@ -6,6 +6,7 @@ import org.nl.wms.system_manage.service.coderule.ISysCodeRuleService; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.atomic.AtomicInteger; public class CodeUtil { @@ -14,7 +15,8 @@ public class CodeUtil { public static String getNewCode(String ruleCode) { final String[] code = {""}; ISysCodeRuleService service = SpringContextHolder.getBean(ISysCodeRuleService.class); - RedissonUtils.lock(() -> code[0] = service.codeDemo("1",ruleCode), ruleCode, 1); + RedissonUtils.lock(() -> + code[0] = service.codeDemo("1",ruleCode), ruleCode, 2); return code[0]; } public static String codeView(String ruleCode) { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java index 8a298de7..6e2bed59 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java @@ -40,7 +40,7 @@ public class RedissonUtils { ex.printStackTrace(); throw ex; }finally { - if (isLock){ + if (lock.isHeldByCurrentThread() && lock.isLocked()){ lock.unlock(); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/SpringContextHolder.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/SpringContextHolder.java index 55b14977..34a9374c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/SpringContextHolder.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/SpringContextHolder.java @@ -1,6 +1,7 @@ package org.nl.common.utils; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.nl.common.domain.interfaces.CallBack; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; @@ -11,6 +12,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Map; /* * @author ZZQ @@ -66,6 +68,10 @@ public class SpringContextHolder implements ApplicationContextAware, DisposableB assertContextInjected(); return applicationContext.getBean(requiredType); } + public static Map getBeansOfType(Class requiredType) { + assertContextInjected(); + return applicationContext.getBeansOfType(requiredType); + } /** * 获取SpringBoot 配置信息 diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java index 5a028e5f..4d2a0e1d 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java @@ -1,16 +1,24 @@ package org.nl.wms.base_manage.bsrealstorattr.controller; +import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; import org.nl.common.domain.entity.PageQuery; +import org.nl.common.utils.IdUtil; import org.nl.wms.base_manage.bsrealstorattr.service.IStIvtBsrealstorattrService; import org.nl.wms.base_manage.bsrealstorattr.service.dao.StIvtBsrealstorattr; import org.nl.wms.base_manage.bsrealstorattr.service.dto.StorQuery; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.io.Serializable; +import java.util.ArrayList; import java.util.Arrays; import java.util.Map; @@ -31,6 +39,11 @@ public class StIvtBsrealstorattrController { */ @Autowired private IStIvtBsrealstorattrService iStIvtBsrealstorattrService; + /** + * 仓库服务 + */ + @Autowired + private IStIvtStructattrService iStIvtStructattrService; @GetMapping public ResponseEntity query(StorQuery query, PageQuery page){ @@ -68,4 +81,43 @@ public class StIvtBsrealstorattrController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + @PostMapping("/batchSaveAttr") + @SaIgnore + public ResponseEntity batchSaveAttr(@Validated @RequestBody JSONObject config) { + + int 排 = config.getInteger("x"); + int 列 = config.getInteger("y"); + int 层 = config.getInteger("z"); + String sect_code = config.getString("sect_code"); + String stor_code = config.getString("stor_code"); + String now = DateUtil.now(); + ArrayList list = new ArrayList<>(); + for (int x = 1; x <= 排; x++) { + for (int y = 1; y <= 列; y++) { + for (int z = 1; z <= 层; z++) { + StIvtStructattr attr = new StIvtStructattr(); + attr.setId(IdUtil.getStringId()); + attr.setSect_code(sect_code); + attr.setStor_code(stor_code); + String ny = (y < 10) ? "0" + y : "" + y; + String nz = (z < 10) ? "0" + z : "" + z; + attr.setStruct_code("T0"+x+"-"+ny+"-"+nz); + attr.setStruct_name(x+"排"+y+"列"+z+"层"); + attr.setCreate_id("1"); + attr.setRow_num(x); + attr.setCol_num(y); + attr.setBlock_num(1); + attr.setLayer_num(z); + attr.setCreate_time(now); + attr.setCreate_name("Admin"); + attr.setIs_temp(false); + attr.setIs_used(true); + list.add(attr); + } + } + } + iStIvtStructattrService.saveBatch(list); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/ChainerService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/ChainerService.java new file mode 100644 index 00000000..175bbf9e --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/ChainerService.java @@ -0,0 +1,58 @@ +package org.nl.wms.decision_manage.handler.chainer; + +import com.alibaba.fastjson.JSONObject; +import org.nl.common.utils.SpringContextHolder; +import org.nl.wms.decision_manage.handler.chainer.impl.EndDecisionChainer; +import org.nl.wms.decision_manage.handler.chainer.impl.ExecuteDecisionChainer; +import org.nl.wms.decision_manage.handler.chainer.impl.StartDecisionChainer; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; +import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBehavior; +import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor; +import org.nl.wms.flow_manage.flow.framework.engine.cmd.interceptor.CommandInterceptor; +import org.nl.wms.flow_manage.flow.framework.engine.cmd.interceptor.impl.InvokeCommandInterceptor; +import org.nl.wms.flow_manage.flow.framework.engine.cmd.interceptor.impl.ThreadCommandInterceptor; +import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/* + * @author ZZQ + * @Date 2024/3/21 11:26 + */ +@Configuration +public class ChainerService { + + + public static DecisionerChain start(List decisionerTypes, JSONObject form){ + List chain = new ArrayList<>(); + Map decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class); + Decisioner decisioner = decisionerMap.get(decisionerTypes.get(0)); + StartDecisionChainer start = new StartDecisionChainer(decisioner.strategyConfig.getStrategy_type(),form); + EndDecisionChainer end = new EndDecisionChainer(decisioner.strategyConfig.getStrategy_type(),form); + ExecuteDecisionChainer execute = new ExecuteDecisionChainer(decisionerTypes,form); + chain.add(start); + chain.add(execute); + chain.add(end); + for (int i = 0; i < chain.size() - 1; i++) { + chain.get(i).setNext(chain.get(i + 1)); + } + return chain.get(0); + } + + + public static DecisionerChain initCommandInterceptor(){ + +// chain.add(new ThreadCommandInterceptor()); +// chain.add(new InvokeCommandInterceptor()); +// for (int i = 0; i < chain.size() - 1; i++) { +// chain.get(i).setNext(chain.get(i + 1)); +// } +// return chain.get(0); + return null; + } +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/DecisionerChain.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/DecisionerChain.java new file mode 100644 index 00000000..a4a2e734 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/DecisionerChain.java @@ -0,0 +1,38 @@ +package org.nl.wms.decision_manage.handler.chainer; + +import lombok.Data; +import org.apache.poi.ss.formula.functions.T; + + +import java.util.HashMap; +import java.util.Map; + +/* + * @author ZZQ + * @Date 2024/3/21 11:10 + * 链式调用 + */ +@Data +public abstract class DecisionerChain { + + private DecisionerChain next; + + protected abstract T execute(T executeParam); + + public final T chainExecute(T executeParam){ + T result = this.execute(executeParam); + if (this.next!=null){ + result = this.next.chainExecute(result); + } + return result; + } + + public final Map process(T executeParam){ + T t = this.chainExecute(executeParam); + return packge(t); + } + public Map packge(T processResult){ + return new HashMap(); + } + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java new file mode 100644 index 00000000..ac242e6a --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java @@ -0,0 +1,73 @@ +package org.nl.wms.decision_manage.handler.chainer.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.Data; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.SpringContextHolder; +import org.nl.wms.decision_manage.handler.chainer.DecisionerChain; +import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; +import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/* + * @author ZZQ + * @Date 2024/3/21 11:10 + * 链式调用 + */ +@Data +public class EndDecisionChainer extends DecisionerChain { + + private String strategy_type; + + private JSONObject startParam; + + private List result; + + + public EndDecisionChainer(String strategy_type, JSONObject startParam) { + this.strategy_type = strategy_type; + this.startParam = startParam; + } + + @Override + protected List execute(List transfers) { + if (CollectionUtils.isEmpty(transfers)){ + throw new BadRequestException("当前分配策略无可用货位"); + } + boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type); + IStIvtStructattrService iStIvtStructattrService = SpringContextHolder.getBean(IStIvtStructattrService.class); + IMdPbVehicleMaterService iMdPbVehicleMaterService = SpringContextHolder.getBean(IMdPbVehicleMaterService.class); + List structs = new ArrayList<>(); + if (in_storage){ + StIvtStructattr structattr = (StIvtStructattr)transfers.get(0); + iStIvtStructattrService.update(new UpdateWrapper() + .set("vehicle_code", startParam.getString("vehicle_code")) + .set("lock_type", StatusEnum.LOCK.code("入")) + .eq("struct_code", structattr.getStruct_code())); + System.out.println("货位绑定成功"+structattr.getStruct_code()); + structs.add(structattr.getStruct_code()); + }else { + for (StructattrVechielDto vechielDto : ((List) transfers)) { + iMdPbVehicleMaterService.update(new UpdateWrapper() + .set("frozen_qty",vechielDto.getFrozen_qty()) + .eq("id",vechielDto.getVm_id())); + } + List collect = ((List) transfers).stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList()); + System.out.println("载具绑定成功"+collect.toString()); + structs = collect; + } + return structs; + } + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/ExecuteDecisionChainer.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/ExecuteDecisionChainer.java new file mode 100644 index 00000000..d8d70605 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/ExecuteDecisionChainer.java @@ -0,0 +1,56 @@ +package org.nl.wms.decision_manage.handler.chainer.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.Data; +import org.apache.poi.ss.formula.functions.T; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.SpringContextHolder; +import org.nl.wms.decision_manage.handler.chainer.DecisionerChain; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; +import org.nl.wms.flow_manage.flow.framework.engine.cmd.unify.Command; +import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity; +import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; +import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/* + * @author ZZQ + * @Date 2024/3/21 11:10 + * 链式调用 + */ +@Data +public class ExecuteDecisionChainer extends DecisionerChain { + + private List decisionerTypes; + private JSONObject startPatam; + + public ExecuteDecisionChainer(List decisionerTypes, JSONObject startPatam) { + this.decisionerTypes = decisionerTypes; + this.startPatam = startPatam; + } + + @Override + protected List execute(List transfers) { + Map decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class); + List list = new ArrayList(); + for (String decisionerType : decisionerTypes) { + Decisioner decisioner = decisionerMap.get(decisionerType); + list = decisioner.handler(transfers, startPatam); + if (CollectionUtils.isEmpty(list)){ + throw new BadRequestException("当前策略"+decisioner.strategyConfig.getStrategy_name()+"无可用货位,分配前数量:"+transfers.size()); + } + } + return list; + } + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java new file mode 100644 index 00000000..42f96468 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java @@ -0,0 +1,77 @@ +package org.nl.wms.decision_manage.handler.chainer.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.Data; +import org.apache.poi.ss.formula.functions.T; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.MapOf; +import org.nl.common.utils.SpringContextHolder; +import org.nl.wms.decision_manage.handler.chainer.DecisionerChain; +import org.nl.wms.flow_manage.flow.framework.engine.cmd.unify.Command; +import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity; +import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler; +import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; +import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/* + * @author ZZQ + * @Date 2024/3/21 11:10 + * 链式调用 + */ +@Data +public class StartDecisionChainer extends DecisionerChain { + + private String strategy_type; + + private JSONObject startParam; + + + public StartDecisionChainer(String strategy_type,JSONObject startParam) { + this.strategy_type = strategy_type; + this.startParam = startParam; + } + + @Override + protected List execute(List from) { + List list; + boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type); + IStIvtStructattrService iStIvtStructattrService = SpringContextHolder.getBean(IStIvtStructattrService.class); + if (in_storage){ + QueryWrapper query = new QueryWrapper() + .eq("is_used", true) + .eq("lock_type", StatusEnum.LOCK.code("无")) + .eq("stor_code", startParam.getString("stor_code")); + query.isNull("vehicle_code"); + list = iStIvtStructattrService.list(query); + }else { + list = iStIvtStructattrService.structVehicle(MapOf.of("stor_code",startParam.getString("stor_code"))); + } + return list; + } + + @Override + public Map packge(List processResult) { + if (CollectionUtils.isEmpty(processResult)){ + throw new BadRequestException("策略分配异常:结果值为空"); + } + boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type); + if (in_storage){ + return MapOf.of("struct_code",processResult.get(0)); + }else { + return MapOf.of("vehicle_code",processResult.stream().collect(Collectors.joining(","))); + } + } + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/Decisioner.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/Decisioner.java similarity index 95% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/Decisioner.java rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/Decisioner.java index 24fe2b60..8971bf32 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/Decisioner.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/Decisioner.java @@ -1,4 +1,4 @@ -package org.nl.wms.decision_manage.handler; +package org.nl.wms.decision_manage.handler.decisioner; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/AlleyAveRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java similarity index 98% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/AlleyAveRuleHandler.java rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java index 491ffd8b..347f999c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/AlleyAveRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java @@ -1,4 +1,4 @@ -package org.nl.wms.decision_manage.handler.impl.base; +package org.nl.wms.decision_manage.handler.decisioner.impl.base; import cn.hutool.core.util.ObjectUtil; import org.nl.common.domain.exception.BadRequestException; @@ -6,7 +6,7 @@ import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.nl.wms.stor_manage.struct.service.dto.StructattrQuery; -import org.nl.wms.decision_manage.handler.Decisioner; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; import org.nl.wms.pm_manage.form_data.service.dao.PmFormData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/ClusterRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/ClusterRuleHandler.java similarity index 97% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/ClusterRuleHandler.java rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/ClusterRuleHandler.java index 1f3b6148..9614a9e9 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/ClusterRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/ClusterRuleHandler.java @@ -1,4 +1,4 @@ -package org.nl.wms.decision_manage.handler.impl.base; +package org.nl.wms.decision_manage.handler.decisioner.impl.base; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; @@ -7,7 +7,7 @@ import org.nl.common.utils.ListOf; import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; -import org.nl.wms.decision_manage.handler.Decisioner; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/FIFORuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/FIFORuleHandler.java similarity index 84% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/FIFORuleHandler.java rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/FIFORuleHandler.java index 26dca00a..856f7d1c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/FIFORuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/FIFORuleHandler.java @@ -1,24 +1,19 @@ -package org.nl.wms.decision_manage.handler.impl.base; +package org.nl.wms.decision_manage.handler.decisioner.impl.base; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.utils.MapOf; -import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; -import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; -import org.nl.wms.decision_manage.handler.Decisioner; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /* @@ -51,7 +46,7 @@ public class FIFORuleHandler extends Decisioner handler(List list, JSONObject param) { // 判断仓位是否为空 if (ObjectUtil.isEmpty(list)) { - throw new BadRequestException("仓位集合为空!"); + throw new BadRequestException("库存分配失败:库存不足!"); } //分配数量 int plan_qty = param.getInteger("qty"); @@ -65,7 +60,7 @@ public class FIFORuleHandler extends Decisioner disList = new ArrayList<>(); for (StructattrVechielDto structattr : vechielDtos) { - if (need.contains(structattr.getVehicle_code())){ + if (need.contains(structattr.getVehicle_code()) && structattr.getFrozen_qty().intValue()==0){ int cause_qty = structattr.getQty().subtract(structattr.getFrozen_qty()).intValue(); int sub = plan_qty - cause_qty; disList.add(structattr); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/LimitStorageRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java similarity index 98% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/LimitStorageRuleHandler.java rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java index 25d910ff..34bf67b1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/LimitStorageRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java @@ -1,4 +1,4 @@ -package org.nl.wms.decision_manage.handler.impl.base; +package org.nl.wms.decision_manage.handler.decisioner.impl.base; import com.alibaba.fastjson.JSONArray; import org.nl.common.domain.exception.BadRequestException; @@ -7,7 +7,7 @@ import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.StIvtIostorinvdtl; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; -import org.nl.wms.decision_manage.handler.Decisioner; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/NearbyRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/NearbyRuleHandler.java similarity index 94% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/NearbyRuleHandler.java rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/NearbyRuleHandler.java index ab28323f..9df07701 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/NearbyRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/NearbyRuleHandler.java @@ -1,13 +1,10 @@ -package org.nl.wms.decision_manage.handler.impl.base; +package org.nl.wms.decision_manage.handler.decisioner.impl.base; -import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.nl.common.domain.exception.BadRequestException; -import org.nl.common.enums.StatusEnum; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; -import org.nl.wms.decision_manage.handler.Decisioner; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; import org.nl.wms.decision_manage.service.dao.StStrategyConfig; import org.springframework.beans.factory.annotation.Autowired; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/WeightRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/WeightRuleHandler.java similarity index 97% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/WeightRuleHandler.java rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/WeightRuleHandler.java index 8c7c81e5..d61198e1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/WeightRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/WeightRuleHandler.java @@ -1,11 +1,11 @@ -package org.nl.wms.decision_manage.handler.impl.base; +package org.nl.wms.decision_manage.handler.decisioner.impl.base; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import org.nl.common.domain.exception.BadRequestException; import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; -import org.nl.wms.decision_manage.handler.Decisioner; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/出入库基础规则.md b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/出入库基础规则.md similarity index 100% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/出入库基础规则.md rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/出入库基础规则.md diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/diy/ClassRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/ClassRuleHandler.java similarity index 72% rename from wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/diy/ClassRuleHandler.java rename to wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/ClassRuleHandler.java index 45ccdd16..738f0b97 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/diy/ClassRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/ClassRuleHandler.java @@ -1,6 +1,6 @@ -package org.nl.wms.decision_manage.handler.impl.diy; +package org.nl.wms.decision_manage.handler.decisioner.impl.diy; -import org.nl.wms.decision_manage.handler.Decisioner; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; import java.util.List; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java index 0e39f592..a0db4ce7 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java @@ -42,7 +42,7 @@ import java.util.List; * @created 2020年6月12日 下午5:53:28 */ @Slf4j -@Service("ZPInStorage") +@Service("groupInStorage") public class GroupDickInStorageTask extends AbstractTask { @Autowired diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java new file mode 100644 index 00000000..7b8e5b5c --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java @@ -0,0 +1,84 @@ +package org.nl.wms.dispatch_manage.task.handler.impl; + + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; +import org.nl.common.publish.BussEventMulticaster; +import org.nl.common.utils.MapOf; +import org.nl.wms.dispatch_manage.task.handler.AbstractTask; +import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService; +import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution; +import org.nl.wms.flow_manage.monitor.event.FlowContinueEvent; +import org.nl.wms.flow_manage.monitor.event.FlowStartEvent; +import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService; +import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick; +import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; +import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; +import org.nl.wms.md_manage.vehicleMater.service.dto.MdPbVehicleMaterVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; + + +/** + * Title: AbstractAcsTask.java Description:任务抽象类 + *

+ * Task状态:01生成 ,02:确定起点,03、确定终点,04、起点和终点都确认,05:下发,可以下发, 06、执行中 07、完成 + * 完成方式:01自动,02:wcs删除,03、wms删除,04、发给wcs失败自动删除 + * + * @author ldjun + * @created 2020年6月12日 下午5:53:28 + */ +@Slf4j +@Service("palletInStorageTask") +public class PalletInStorageTask extends AbstractTask { + + @Autowired + private IMdPbVehicleMaterService iMdPbVehicleMaterService; + @Autowired + private IActRuExecutionService iActRuExecutionService; + + @Override + public JSONObject createTask(JSONObject data) { + for (String vehicle_code : data.keySet()) { + String point_code1 = data.getString(vehicle_code); + if (StringUtils.isEmpty(point_code1)){ + throw new BadRequestException("申请任务失败:请求参数数据异常"); + } + List item = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code); + if (CollectionUtils.isEmpty(item)){ + throw new BadRequestException("申请任务失败:载具"+vehicle_code+"物料信息不存在"); + } + MdPbVehicleMaterVo vehicleMater = item.get(0); + //更新载具proc_inst_id + String currentInstId = vehicleMater.getProc_inst_id(); + if (StringUtils.isEmpty(currentInstId)){ + throw new BadRequestException("申请任务失败:载具"+vehicle_code+"未创建入库流程"); + } + ActRuExecution execution = iActRuExecutionService.getById(currentInstId); + if (execution == null){ + throw new BadRequestException("申请任务失败:载具"+vehicle_code+"流程信息不存在"+currentInstId); + } + FlowContinueEvent continueEvent = new FlowContinueEvent(currentInstId, null, new JSONObject(MapOf.of("start_point", point_code1))); + BussEventMulticaster.Publish(continueEvent); + } + return null; + } + + @Override + public void updateStatus(JSONObject data) { + + } + + @Override + public void cancel(JSONObject data) { + + } +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java index 32d1a54b..aacf7365 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/GateWayService.java @@ -1,24 +1,10 @@ package org.nl.wms.external_system; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.nl.common.utils.InterationUtil; -import org.nl.common.utils.SpringContextHolder; -import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; import org.nl.wms.external_system.acs.service.AcsToWmsService; -import org.nl.wms.external_system.acs.service.dto.TransferDto; import org.nl.wms.external_system.dto.InteracteDto; -import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl.MappingSourceDataTypeHandler; -import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService; -import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping; -import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; - /* * @author ZZQ * @Date 2024/5/6 14:53 @@ -33,8 +19,9 @@ public class GateWayService { public void apply(InteracteDto param){ //处理日志相关 String service = param.getService(); + String type = param.getType(); //根据服务拆分不同的业务 - acsToWmsService.applyTask(param.getService(),param.getData()); + acsToWmsService.applyTask(param.getService(), type, param.getData()); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java index 2e586379..9070df4d 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java @@ -9,7 +9,6 @@ import org.nl.common.enums.StatusEnum; import org.nl.common.utils.InterationUtil; import org.nl.common.utils.SpringContextHolder; import org.nl.wms.dispatch_manage.task.handler.AbstractTask; -import org.nl.wms.dispatch_manage.task.handler.impl.GroupDickInStorageTask; import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; import org.nl.wms.external_system.acs.service.dto.TransferDto; @@ -37,9 +36,20 @@ public class AcsToWmsService implements InitializingBean { private SyncFormMapping mapping; - public void applyTask(String service,JSONObject data){ - if (service.equals("ZPInStorage")){ - applyTaskMap.get("ZPInStorage").createTask(data); + public void applyTask(String service,String type,JSONObject data){ + if (service.equals("InStorage")){ + /* + { + "service": "ZPInStorage", + "ip": "ip_7va9w", + "request_time": "request_time_pbi5u", + "trace_id": "trace_id_xl8dk", + "data": { + "D00018": "start001" + } + } + * */ + applyTaskMap.get(type).createTask(data); } if (service.equals("TaskStatus")){ String task_code = data.getString("task_code"); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/dto/InteracteDto.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/dto/InteracteDto.java index d81939c5..75252e92 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/dto/InteracteDto.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/dto/InteracteDto.java @@ -11,6 +11,7 @@ import lombok.Data; public class InteracteDto { String service; + String type; String ip; String request_time; String trace_id; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/execution/ExecutionController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/execution/ExecutionController.java index d699682d..30978a0f 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/execution/ExecutionController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/execution/ExecutionController.java @@ -22,6 +22,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -69,8 +70,15 @@ public class ExecutionController { @DeleteMapping public ResponseEntity delete(@RequestBody String[] ids) { + List removeCollect = new ArrayList<>(); + removeCollect.addAll(Arrays.asList(ids)); if (ids.length > 0) { - executionService.removeByIds(Arrays.asList(ids)); + for (String proc_inst_id : ids) { + removeCollect.addAll(executionService.getChildList(proc_inst_id)); + } + if (removeCollect.size()>0){ + executionService.removeByIds(removeCollect); + } } return new ResponseEntity<>(HttpStatus.OK); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/converter/node/impl/SubProcessConverter.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/converter/node/impl/SubProcessConverter.java index eff9858e..1b0eb5ff 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/converter/node/impl/SubProcessConverter.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/converter/node/impl/SubProcessConverter.java @@ -27,8 +27,12 @@ public class SubProcessConverter extends BaseNodeConverter { subProcess.setChildren(node.getJSONArray("children").toJavaList(String.class)); subProcess.setName(properties.getString("name")); subProcess.setSplit(properties.getString("split")); - subProcess.setSplitSwitch(properties.getBoolean("splitSwitch")); - subProcess.setPermeate(properties.getBoolean("permeate")); + if (properties.getBoolean("splitSwitch")!=null){ + subProcess.setSplitSwitch(properties.getBoolean("splitSwitch")); + } + if (properties.getBoolean("permeate")!=null){ + subProcess.setPermeate(properties.getBoolean("permeate")); + } subProcess.setDocumentation(properties.getString("documentation")); //设置触发事件 subProcess.setExecutionListeners(null); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/FlowNodeActivityBehavior.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/FlowNodeActivityBehavior.java index 30b198cf..7f7a7988 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/FlowNodeActivityBehavior.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/FlowNodeActivityBehavior.java @@ -13,7 +13,9 @@ import org.nl.common.utils.SpringContextHolder; import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor; import org.nl.wms.flow_manage.flow.framework.engine.operation.impl.SequenceFlowOperation; import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity; +import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement; import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowNode; +import org.nl.wms.flow_manage.flow.framework.entity.node.impl.Sequence.SequenceFlow; import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService; import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution; import org.nl.wms.flow_manage.flow.service.history.IActHiExecutionService; @@ -43,12 +45,13 @@ public abstract class FlowNodeActivityBehavior { public final void activity(ExecutionEntity entity) { IActRuExecutionService iActRuExecutionService = SpringContextHolder.getBean(IActRuExecutionService.class); + String proc_inst_id = entity.getProc_inst_id(); try { //当前节点:子节点更换form_type log.info("流程:{},开始流程数据:{}", entity.getActivityName(),JSONObject.toJSONString(entity.getT())); - if (StringUtils.isNotEmpty(entity.getProc_inst_id())){ + if (StringUtils.isNotEmpty(proc_inst_id)){ iActRuExecutionService.update(new UpdateWrapper() - .eq("proc_inst_id",entity.getProc_inst_id()) + .eq("proc_inst_id", proc_inst_id) .set("activity_id", entity.getActivityId()) .set("activity_name", entity.getActivityName()) .set("form_type", entity.getForm_type()) @@ -62,7 +65,7 @@ public abstract class FlowNodeActivityBehavior { this.execute(entity); log.info("流程:{},结束流程数据:{}", entity.getActivityName(), JSONObject.toJSONString(entity.getT())); iActRuExecutionService.update(new UpdateWrapper() - .eq("proc_inst_id",entity.getProc_inst_id()) + .eq("proc_inst_id", entity.getProc_inst_id()) .set("status", StatusEnum.FLOW_STATUS.code("节点完成")) .set("form_data", entity.getT().toString()) .set("aux_param", entity.getAuxParam().toString()) @@ -75,11 +78,12 @@ public abstract class FlowNodeActivityBehavior { ex.printStackTrace(); log.error(entity.getActivityName()+"流程执行异常:{}",ex.getMessage()); ActRuExecution execution = new ActRuExecution(); - execution.setProc_inst_id(entity.getProc_inst_id()); + execution.setProc_inst_id(proc_inst_id); iActRuExecutionService.update(new UpdateWrapper() - .eq("proc_inst_id",entity.getProc_inst_id()) + .eq("proc_inst_id", proc_inst_id) .set("status", StatusEnum.FLOW_STATUS.code("暂停")) .set("remark","节点:"+entity.getActivityName()+":异常:"+ex.getMessage())); + throw new BadRequestException(ex.getMessage()); } } @@ -98,10 +102,16 @@ public abstract class FlowNodeActivityBehavior { historyEntity.setUpdate_time(DateUtil.now()); history.save(historyEntity); this.leave(entity); - FlowNode currentFlowElement = (FlowNode)entity.getCurrentFlowElement(); - if (currentFlowElement.getPassNode()){ + FlowElement flowElement = entity.getCurrentFlowElement(); + if (flowElement instanceof FlowNode){ + if (((FlowNode)flowElement).getPassNode()){ + CommandExecutor.getAgenda().planOperation(new SequenceFlowOperation(entity)); + } + } + if (flowElement instanceof SequenceFlow){ CommandExecutor.getAgenda().planOperation(new SequenceFlowOperation(entity)); } + } public void execute(ExecutionEntity entity) {} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/GateWayActivityBehavior.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/GateWayActivityBehavior.java index f6e3133b..9468a749 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/GateWayActivityBehavior.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/GateWayActivityBehavior.java @@ -1,16 +1,20 @@ package org.nl.wms.flow_manage.flow.framework.engine.behavior.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.utils.ListOf; import org.nl.common.utils.MapOf; import org.nl.common.utils.SpelUtil; +import org.nl.common.utils.SpringContextHolder; import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBehavior; import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity; import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement; import org.nl.wms.flow_manage.flow.framework.entity.node.impl.Sequence.SequenceFlow; import org.nl.wms.flow_manage.flow.framework.entity.node.impl.gateway.GateWay; +import org.nl.wms.flow_manage.flow.service.history.IActHiExecutionService; +import org.nl.wms.flow_manage.flow.service.history.dao.ActHiExecution; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -33,19 +37,34 @@ public class GateWayActivityBehavior extends FlowNodeActivityBehavior targetSequence = new ArrayList<>(); + SequenceFlow targetSequence = null; for (SequenceFlow sequenceFlow : gateWay.getOutgoingFlows()) { String skipExpression = sequenceFlow.getSkipExpression(); Boolean parse = SpelUtil.parse(entity.getT().getJSONObject("t"),skipExpression, Boolean.class); if (parse){ - targetSequence.add(sequenceFlow); + System.out.println(Thread.currentThread().getName()+"_执行网关判断:"+skipExpression+"_"+sequenceFlow.getName()); + targetSequence = sequenceFlow; break; } } - if (CollectionUtils.isEmpty(targetSequence)){ + if (targetSequence == null){ throw new BadRequestException("当前网关没有满足的流程线"); } - gateWay.setOutgoingFlows(targetSequence); + //手动保存网关调用 + IActHiExecutionService history = SpringContextHolder.getBean(IActHiExecutionService.class); + ActHiExecution historyEntity = new ActHiExecution(); + historyEntity.setProc_inst_id(entity.getProc_inst_id()); + historyEntity.setParent_id(entity.getParent_id()); + historyEntity.setActivity_id(entity.getActivityId()); + historyEntity.setActivity_name(entity.getActivityName()); + historyEntity.setForm_type(entity.getForm_type()); + historyEntity.setForm_id(entity.getForm_id()); + historyEntity.setForm_data((JSONObject) entity.getT()); + historyEntity.setAux_param(entity.getAuxParam()); + historyEntity.setUpdate_time(DateUtil.now()); + history.save(historyEntity); + + entity.setCurrentFlowElement(targetSequence); //处理流程线:将结果值封装 super.execute(entity); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/SubProcessActivityBehavior.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/SubProcessActivityBehavior.java index fdcf6f88..ac34aa18 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/SubProcessActivityBehavior.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/SubProcessActivityBehavior.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.utils.MapOf; import org.nl.wms.flow_manage.flow.framework.converter.BpmnJSONConverter; import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBehavior; import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor; @@ -54,6 +55,10 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior subList = new ArrayList<>(); String splitParam = subProcess.getSplit(); if (StringUtils.isNotEmpty(splitParam)){ + if (items == null){ + items = new JSONArray(); + items.add(form); + } for (int i = 0; i < items.size(); i++) { JSONObject item = items.getJSONObject(i); JSONObject t = (JSONObject)item.remove("t"); @@ -94,6 +99,9 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior ((JSONObject) o).getJSONObject("t").getString("vehicle_code"))); @@ -102,6 +110,7 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior { + throwable.printStackTrace(); buffer.append("子流程执行异常"+throwable.getMessage()); return null; })).parallel().forEach(CompletableFuture::join); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/operation/impl/SequenceFlowOperation.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/operation/impl/SequenceFlowOperation.java index aa416f86..a77d4947 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/operation/impl/SequenceFlowOperation.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/operation/impl/SequenceFlowOperation.java @@ -1,5 +1,6 @@ package org.nl.wms.flow_manage.flow.framework.engine.operation.impl; +import org.nl.common.domain.exception.BadRequestException; import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor; import org.nl.wms.flow_manage.flow.framework.engine.operation.AbstractOperation; import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity; @@ -28,14 +29,22 @@ public class SequenceFlowOperation extends AbstractOperation { FlowNode flowNode = (FlowNode) flowElement; //EndEvent没有outgoing List outgoingFlows = flowNode.getOutgoingFlows(); - if (!CollectionUtils.isEmpty(outgoingFlows)){ - for (SequenceFlow sequenceFlow : outgoingFlows) { - String skipExpression = sequenceFlow.getSkipExpression(); - //TODO:流程线的脚本判断获取当下一个节点:当前节点或者下个节点:这一步统一在网关中处理!!! - execution.setCurrentFlowElement(sequenceFlow.getTargetFlowElement()); - } - CommandExecutor.getAgenda().planOperation(new ContinuOperation(execution)); + if (CollectionUtils.isEmpty(outgoingFlows)){ + return; } + if (outgoingFlows.size()>1){ + throw new BadRequestException("流程异常:当前流程节点"+flowNode.getName()+"存在2条流程线且无网关配置"); + } + execution.setCurrentFlowElement(outgoingFlows.get(0).getTargetFlowElement()); } + if (flowElement instanceof SequenceFlow){ + FlowNode flowNode = ((SequenceFlow) flowElement).getTargetFlowElement(); + if (flowNode == null){ + throw new BadRequestException("流程异常:当前流程线"+flowNode.getId()+"为配置目标流程节点"); + } + execution.setCurrentFlowElement(flowNode); + } + CommandExecutor.getAgenda().planOperation(new ContinuOperation(execution)); + } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/entity/node/impl/SubProcess/SubProcess.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/entity/node/impl/SubProcess/SubProcess.java index 0afceb99..0dc7bcf3 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/entity/node/impl/SubProcess/SubProcess.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/entity/node/impl/SubProcess/SubProcess.java @@ -35,11 +35,11 @@ public class SubProcess extends FlowNode { /** * 数据拆分 */ - protected Boolean splitSwitch; + protected Boolean splitSwitch=Boolean.FALSE; /** * 透传回调函数 */ - protected Boolean permeate; + protected Boolean permeate =Boolean.FALSE; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/process/nodeType/excess/impl/DecisionHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/process/nodeType/excess/impl/DecisionHandler.java index bb0fa33c..3ff4974b 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/process/nodeType/excess/impl/DecisionHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/process/nodeType/excess/impl/DecisionHandler.java @@ -3,22 +3,22 @@ package org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; -import org.nl.common.utils.ListOf; import org.nl.common.utils.MapOf; import org.nl.common.utils.RedissonUtils; import org.nl.common.utils.SpringContextHolder; -import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement; +import org.nl.wms.decision_manage.handler.chainer.ChainerService; +import org.nl.wms.decision_manage.handler.chainer.DecisionerChain; import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.ServerTask; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; -import org.nl.wms.pm_manage.form_data.service.IPmFormDataService; import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc; -import org.nl.wms.decision_manage.handler.Decisioner; +import org.nl.wms.decision_manage.handler.decisioner.Decisioner; import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity; import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler; @@ -29,7 +29,6 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; @@ -74,69 +73,20 @@ public class DecisionHandler extends TypeHandler map = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, item_json); //更新仓位,更新数据 System.out.println(flow.getForm_type()+"更新明细id"+item_json.getString("id")); -// StringBuffer sql = new StringBuffer(); -// sql.append("update ") -// .append(flow.getForm_type()) -// .append(" set struct_code = ") -// .append("'"+collect+"'") -// .append(" where id = ") -// .append("'"+item_json.getString("id")+"'"); -// iPmFormDataService.dynamicSql(sql.toString()); item_json.putAll(map); return t; } @Transactional(propagation= Propagation.REQUIRES_NEW) public Map dispense(List params, JSONObject iostorinvdtl) { - Decisioner oneDecisioner = decisionHandlerMap.get(params.get(0)); - //判断是出库还是入库 - String strategy_type = oneDecisioner.strategyConfig.getStrategy_type(); - boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type); - AtomicReference structCode = new AtomicReference<>(); + if (StringUtils.isEmpty(iostorinvdtl.getString("stor_code"))){ + throw new BadRequestException("出入库策略执行异常:单据确认仓库编码"); + } + AtomicReference atomicResult = new AtomicReference<>(); RedissonUtils.lock(()->{ - List list; - if (in_storage){ - QueryWrapper query = new QueryWrapper() - .eq("is_used", true) - .eq("lock_type", StatusEnum.LOCK.code("无")) - .eq("stor_code", iostorinvdtl.getString("stor_code")); - query.isNull("vehicle_code"); - list = iStIvtStructattrService.list(query); - - }else { - list = iStIvtStructattrService.structVehicle(null); - } - if (CollectionUtils.isEmpty(list)){ - throw new BadRequestException("当前分配策略无可用货位"); - } - for (String param : params) { - Decisioner decisioner = decisionHandlerMap.get(param); - list = decisioner.handler(list, iostorinvdtl); - if (CollectionUtils.isEmpty(list)){ - throw new BadRequestException("当前分配策略无可用货位"); - } - } - if (CollectionUtils.isEmpty(list)){ - throw new BadRequestException("无可分配货位!"); - } - if (in_storage){ - StIvtStructattr structattr = (StIvtStructattr)list.get(0); - iStIvtStructattrService.update(new UpdateWrapper() -// .set("vehicle_code", iostorinvdtl.getVehicle_code()) - .set("lock_type", StatusEnum.LOCK.code("入")) - .eq("struct_code", structattr.getStruct_code())); - System.out.println("货位绑定成功"+structattr.getStruct_code()); - structCode.set(MapOf.of("struct_code",structattr.getStruct_code())); - }else { - for (StructattrVechielDto vechielDto : ((List) list)) { - iMdPbVehicleMaterService.update(new UpdateWrapper() - .set("frozen_qty",vechielDto.getFrozen_qty()) - .eq("id",vechielDto.getVm_id())); - } - List collect = ((List) list).stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList()); - System.out.println("载具绑定成功"+collect.toString()); - structCode.set(MapOf.of("vehicle_code",collect.stream().collect(Collectors.joining(",")))); - } - },"入",2); - return structCode.get(); + DecisionerChain> start = ChainerService.start(params, iostorinvdtl); + Map process = start.process(null); + atomicResult.set(process); + },"入"+iostorinvdtl.getString("stor_code"),2); + return atomicResult.get(); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/StorageChangesProcessHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/StorageChangesProcessHandler.java index 66286252..351a8a85 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/StorageChangesProcessHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/StorageChangesProcessHandler.java @@ -31,9 +31,6 @@ public class StorageChangesProcessHandler implements ClassProcess { @Autowired private ISchBaseTaskService schBaseTaskService; - @Autowired - private IMdPbVehicleMaterService vehicleMaterService; - @Override public JSONObject process(JSONObject from, JSONObject param) { //暂时出入入库的问题:库存变动中任务变动由任务变动接口处理 @@ -52,13 +49,9 @@ public class StorageChangesProcessHandler implements ClassProcess { StatusEnum.FORM_STATUS.code("完成"); StatusEnum.FORM_STATUS.code("取消"); //TODO:后续在流程节点中配置监听时间触发 - List vehicleMaters = vehicleMaterService.list(new QueryWrapper().eq("vehicle_code", schBaseTask.getVehicle_code())); - MdPbVehicleMater vehicleMater = vehicleMaters.get(0); BussEventMulticaster.Publish(StructEvent.builder() .task_type(schBaseTask.getTask_type()) .status(schBaseTask.getStatus()) - .source_form_id(vehicleMater.getSource_form_id()) - .source_form_type(vehicleMater.getSource_form_type()) .vehicle_code(schBaseTask.getVehicle_code()) .point_code1(schBaseTask.getPoint_code1()) .point_code2(schBaseTask.getPoint_code2()) diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/IActRuExecutionService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/IActRuExecutionService.java index 7f02eb64..9d54d111 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/IActRuExecutionService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/IActRuExecutionService.java @@ -20,4 +20,7 @@ public interface IActRuExecutionService extends IService { Object getAll(ExecutionQuery query, PageQuery page); List queryHisActivityId(String proc_inst_id); + + + List getChildList(String proc_inst_id); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/dao/mapper/ActRuExecutionMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/dao/mapper/ActRuExecutionMapper.java index cdd866ba..96c8f69e 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/dao/mapper/ActRuExecutionMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/dao/mapper/ActRuExecutionMapper.java @@ -1,8 +1,11 @@ package org.nl.wms.flow_manage.flow.service.execution.dao.mapper; +import org.apache.ibatis.annotations.Select; import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; + /** *

* 流程实例表 Mapper 接口 @@ -12,5 +15,16 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2024-03-21 */ public interface ActRuExecutionMapper extends BaseMapper { - + @Select("SELECT\n" + + " max(t3.childId)\n" + + " from\n" + + " (\n" + + " select *,\n" + + " if( find_in_set(parent_id, @p) > 0,@p := concat(@p,',',proc_inst_id),0 ) as childId\n" + + " from\n" + + " (select t.proc_inst_id as proc_inst_id, t.parent_id from act_ru_execution t ) t1,\n" + + " (select @p := #{proc_inst_id}) t2\n" + + " ) t3\n" + + " where childId != '0'") + String findAllChild(String proc_inst_id); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/ActRuExecutionServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/ActRuExecutionServiceImpl.java index 3e571b03..cca9ac46 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/ActRuExecutionServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/ActRuExecutionServiceImpl.java @@ -1,12 +1,14 @@ package org.nl.wms.flow_manage.flow.service.execution.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.domain.entity.PageQuery; import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc; @@ -23,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -92,4 +95,14 @@ public class ActRuExecutionServiceImpl extends ServiceImpl getChildList(String proc_inst_id) { + Assert.notNull(proc_inst_id, "参数不能为空"); + String allChild = this.baseMapper.findAllChild(proc_inst_id); + if (StringUtils.isNotEmpty(allChild)){ + return Arrays.asList(allChild.split(",")); + } + return new ArrayList<>(); + } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/FlowOperationServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/FlowOperationServiceImpl.java index 610291b6..6565ec2f 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/FlowOperationServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/FlowOperationServiceImpl.java @@ -50,11 +50,11 @@ public class FlowOperationServiceImpl implements IFlowOperationService { @Override public String startUp(String model_key, PermeateFunction callback, ExecutionDto dto, JSONObject auxParam) { - ActRuExecution one = iActRuExecutionService.getOne(new QueryWrapper() + Integer one = iActRuExecutionService.count(new QueryWrapper() .eq("form_type", dto.getForm_type()) .eq("form_id", dto.getForm_id()) .lt("status",StatusEnum.FLOW_STATUS.code("完成"))); - if (one!=null){ + if (one>0){ throw new BadRequestException("当前单据流程已存在:"+dto.getForm_type()+"_"+dto.getForm_id()); } ActReProcdef deployment = actReProcdefService.getCurrentVersion(model_key); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/monitor/event/FlowStartEvent.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/monitor/event/FlowStartEvent.java index c2415dd9..2f0e02dd 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/monitor/event/FlowStartEvent.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/monitor/event/FlowStartEvent.java @@ -19,7 +19,7 @@ public class FlowStartEvent extends PublishEvent { private ExecutionDto dto; private String model_key; - + //流程内部函数;在启动时出传入,如果流程失败透传函数将丢失 private PermeateFunction flowStartCallback; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/PalletStIvtIostorinvController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/PalletStIvtIostorinvController.java new file mode 100644 index 00000000..24721191 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/PalletStIvtIostorinvController.java @@ -0,0 +1,56 @@ +package org.nl.wms.pda_manage.palletio; + + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.nl.common.TableDataInfo; +import org.nl.common.anno.Log; +import org.nl.common.domain.entity.PageQuery; +import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; +import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService; +import org.nl.wms.stor_manage.io.service.dto.StorInvQuery; +import org.nl.wms.stor_manage.io.service.iostor.IStIvtIostorinvService; +import org.nl.wms.stor_manage.io.service.iostor.dao.StIvtIostorinv; +import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 出入库单主表 前端控制器 + *

+ * + * @author generator + * @since 2024-03-28 + */ +@RestController +@RequestMapping("api/pdaPalletIostorinv") +public class PalletStIvtIostorinvController { + + @Autowired + private PalletIostorinvService palletIostorinvService; + + + @PostMapping("in") + @SaIgnore + @Log("手持托盘入库") + public ResponseEntity inStorage(@RequestBody JSONObject form) { + palletIostorinvService.inStorage(form); + return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); + } + @PostMapping("out") + @SaIgnore + @Log("手持托盘出库") + public ResponseEntity outStorage(@RequestBody JSONObject form) { + palletIostorinvService.outStorage(form); + return new ResponseEntity<>(HttpStatus.OK); + } + +} + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/service/PalletIostorinvService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/service/PalletIostorinvService.java new file mode 100644 index 00000000..5ff65279 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/service/PalletIostorinvService.java @@ -0,0 +1,77 @@ +package org.nl.wms.pda_manage.palletio.service; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.publish.BussEventMulticaster; +import org.nl.common.utils.*; +import org.nl.wms.flow_manage.monitor.event.FlowStartEvent; +import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick; +import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; +import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; + +/* + * @author ZZQ + * @Date 2024/6/21 14:23 + */ +@Service +public class PalletIostorinvService { + + @Autowired + private IMdPbVehicleMaterService iMdPbVehicleMaterService; + //托盘库 + static String STOR_CODE = "FStockPallet"; + public void inStorage(JSONObject form){ + Assert.notNull(form, "参数不能为空"); + String vehicle_code = form.getString("vehicle_code"); + String material_id = form.getString("material_id"); + MdPbVehicleMater vehicleMater = new MdPbVehicleMater(); + vehicleMater.setGroup_id(IdUtil.getStringId()); + vehicleMater.setId(IdUtil.getStringId()); + vehicleMater.setCreate_time(DateUtil.now()); + vehicleMater.setCreate_name(SecurityUtils.getCurrentNickName()); + vehicleMater.setVehicle_code(vehicle_code); + vehicleMater.setMaterial_id(material_id); + vehicleMater.setPcsn("1"); + vehicleMater.setStor_code(STOR_CODE); + vehicleMater.setQty(new BigDecimal(1)); + vehicleMater.setUnit_id("16"); + iMdPbVehicleMaterService.save(vehicleMater); + //触发流程 + BussEventMulticaster.Publish( + new FlowStartEvent("pallet_in", + (proc_inst_id,empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper().set("proc_inst_id",proc_inst_id).eq("vehicle_code",vehicle_code)) + ,null) + .build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater)) + ); + + }; + public void outStorage(JSONObject form){ + Assert.notNull(form, "参数不能为空"); + //触发流程 + JSONObject flowData = new JSONObject(); + flowData.put("material_id",form.getString("material_id")); + flowData.put("qty",form.getInteger("qty")); + flowData.put("pcsn","1"); + flowData.put("stor_code",STOR_CODE); + JSONObject auxParam = new JSONObject(); + auxParam.put("target_point",form.getString("target_point")); + + BussEventMulticaster.Publish( + new FlowStartEvent("pallet_out", + (proc_inst_id,vehicle) -> { + iMdPbVehicleMaterService.update(new UpdateWrapper() + .set("proc_inst_id",proc_inst_id) + .eq("vehicle_code",vehicle)); + } + ,auxParam) + .build("st_ivt_iostorinv",null,null,null, flowData) + ); + }; +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/FlowEndEventListener.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/FlowEndEventListener.java index 368f0454..3e686110 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/FlowEndEventListener.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/FlowEndEventListener.java @@ -52,20 +52,21 @@ public class FlowEndEventListener extends AbstraceListener { .eq("proc_inst_id", proc_inst_id) .in("form_type",finish) .select("activity_id","update_time","form_type","form_id")); - Set tmpFormTypes = historys.stream().map(ActHiExecution::getForm_type).collect(Collectors.toSet()); - List tmpFormTypeCollect = iBmFormStrucService.list(new QueryWrapper().in("form_type", tmpFormTypes)); - Set baseFromCollect = tmpFormTypeCollect.stream().filter(BmFormStruc::getIs_base).map(BmFormStruc::getForm_type).collect(Collectors.toSet()); - for (ActHiExecution history : historys) { - StringBuffer sql = new StringBuffer(); - sql.append("update ") - .append(baseFromCollect.contains(history.getForm_type())?history.getForm_type():"pm_form_data") - .append(" set status = ") - .append("'"+StatusEnum.FORM_STATUS.code("完成")+"'") - .append(" where id = ") - .append("'"+history.getForm_id()+"'"); - iPmFormDataService.dynamicSql(sql.toString()); + if (!CollectionUtils.isEmpty(historys)){ + Set tmpFormTypes = historys.stream().map(ActHiExecution::getForm_type).collect(Collectors.toSet()); + List tmpFormTypeCollect = iBmFormStrucService.list(new QueryWrapper().in("form_type", tmpFormTypes)); + Set baseFromCollect = tmpFormTypeCollect.stream().filter(BmFormStruc::getIs_base).map(BmFormStruc::getForm_type).collect(Collectors.toSet()); + for (ActHiExecution history : historys) { + StringBuffer sql = new StringBuffer(); + sql.append("update ") + .append(baseFromCollect.contains(history.getForm_type())?history.getForm_type():"pm_form_data") + .append(" set status = ") + .append("'"+StatusEnum.FORM_STATUS.code("完成")+"'") + .append(" where id = ") + .append("'"+history.getForm_id()+"'"); + iPmFormDataService.dynamicSql(sql.toString()); + } } - } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/StructEventListener.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/StructEventListener.java index 8b7b5572..fa5930ef 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/StructEventListener.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/StructEventListener.java @@ -46,8 +46,6 @@ public class StructEventListener extends AbstraceListener { if (status.equals(StatusEnum.FORM_STATUS.code("取消"))){ } - iostorinvdtlService.update(new UpdateWrapper() - .set("status",status).eq("id",event.getSource_form_id())); return null; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/record/service/dao/StIvtStructivtflow.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/record/service/dao/StIvtStructivtflow.java index fdcce15a..a60ffbde 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/record/service/dao/StIvtStructivtflow.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/record/service/dao/StIvtStructivtflow.java @@ -33,6 +33,10 @@ public class StIvtStructivtflow implements Serializable { @TableId private String id; + /** + * 仓库编码 + */ + private String stor_code; /** * 仓位编码 */ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml index ce971d14..dd4b3165 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml @@ -71,7 +71,10 @@ FROM st_ivt_structattr LEFT JOIN md_pb_vehicleMater ON st_ivt_structattr.vehicle_code = md_pb_vehicleMater.vehicle_code WHERE st_ivt_structattr.vehicle_code is not null - and md_pb_vehicleMater.is_lock = false + and IF(ISNULL(md_pb_vehicleMater.is_lock),true,md_pb_vehicleMater.is_lock = false) + + and st_ivt_structattr.stor_code = #{stor_code} +