diff --git a/wms_pro/hd/nladmin-system/pom.xml b/wms_pro/hd/nladmin-system/pom.xml index 12221dd8..de8a13b7 100644 --- a/wms_pro/hd/nladmin-system/pom.xml +++ b/wms_pro/hd/nladmin-system/pom.xml @@ -287,7 +287,7 @@ com.yomahub - tlog-all-spring-boot-starter + tlog-core 1.5.0 diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/AppRun.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/AppRun.java index 0065f867..41104537 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/AppRun.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/AppRun.java @@ -30,7 +30,7 @@ import org.springframework.web.bind.annotation.RestController; @ServletComponentScan @EnableTransactionManagement @MapperScan("org.nl.**.mapper") -//@EnableDynamicTp +@EnableDynamicTp public class AppRun implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(AppRun.class, args); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/InterationUtil.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/InterationUtil.java index 8e9e2a7c..d3b07a6f 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/InterationUtil.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/InterationUtil.java @@ -2,7 +2,9 @@ package org.nl.common.utils; import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.common.TableDataInfo; @@ -34,15 +36,27 @@ public class InterationUtil { String acsUrl = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("wcs_url").getValue(); String url = acsUrl + api; try { - String resultMsg = HttpRequest.post(url) + HttpResponse execute = HttpRequest.post(url) .timeout(3000) .body(String.valueOf(param)) - .execute().body(); - JSONObject response = JSONObject.parseObject(resultMsg); + .execute(); + JSONObject response = JSONObject.parseObject(execute.body()); log.info("ACS相应参数----------------------------------------+"+api+",---"+response.toString()); - String status = response.getString("code"); - if (!status.equals("200")){ - throw new BadRequestException("acs申请任务失败:"+response.getString("message")); + if (execute.getStatus() != 200){ + throw new BadRequestException("acs申请失败:"+response.getString("message")); + } + if (!response.getString("code").equals("200")){ + String error = ""; + if (response.get("data")!=null){ + JSONArray data = response.getJSONArray("data"); + for (int i = 0; i < data.size(); i++) { + JSONObject item = data.getJSONObject(i); + error = error+"_"+item.getString("task_code") + ":" + item.getString("msg"); + } + }else { + error = response.getString("msg"); + } + throw new BadRequestException("acs申请任务失败:"+error); } return response.toJavaObject(TableDataInfo.class); } catch (Exception ex) { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/SecurityUtils.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/SecurityUtils.java index 1044adf0..05a4c4b8 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/SecurityUtils.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/SecurityUtils.java @@ -24,9 +24,16 @@ public class SecurityUtils { */ public static CurrentUser getCurrentUser() { try { - return JSONObject.parseObject(String.valueOf(StpUtil.getExtra("loginInfo")),CurrentUser.class); + Object loginInfo = StpUtil.getExtra("loginInfo"); + if (loginInfo==null){ + CurrentUser currentUser = new CurrentUser(); + currentUser.setId("2"); + currentUser.setPresonName("外部系统用户"); + currentUser.setUsername("admin"); + return currentUser; + } + return JSONObject.parseObject(String.valueOf(loginInfo),CurrentUser.class); } catch (Exception e) { - e.printStackTrace(); CurrentUser currentUser = new CurrentUser(); currentUser.setId("2"); currentUser.setPresonName("外部系统用户"); 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 index c1881195..10c5ea83 100644 --- 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 @@ -2,6 +2,7 @@ package org.nl.wms.decision_manage.handler.chainer.impl; import com.alibaba.fastjson.JSONObject; import lombok.Data; +import lombok.extern.slf4j.Slf4j; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.utils.SpringContextHolder; import org.nl.wms.decision_manage.handler.chainer.DecisionerChain; @@ -17,6 +18,7 @@ import java.util.Map; * 链式调用 */ @Data +@Slf4j public class ExecuteDecisionChainer extends DecisionerChain { private List decisionerTypes; @@ -33,6 +35,7 @@ public class ExecuteDecisionChainer extends DecisionerChain { List list = transfers; for (String decisionerType : decisionerTypes) { Decisioner decisioner = decisionerMap.get(decisionerType); + log.info("执行出入库规格:"+decisioner.strategyConfig.getStrategy_name()); list = decisioner.handler(list, startPatam); if (CollectionUtils.isEmpty(list)){ throw new BadRequestException("当前策略"+decisioner.strategyConfig.getStrategy_name()+"无可用货位,分配前数量:"+transfers.size()); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/NearbyRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/NearbyRuleHandler.java index 5a13e5bd..08e7f73e 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/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,7 +1,9 @@ package org.nl.wms.decision_manage.handler.decisioner.impl.base; import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.utils.ListOf; 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.Decisioner; @@ -11,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; @@ -20,6 +23,7 @@ import java.util.List; * 就近放置策略:根据物料ABC类区分 */ @Service("nearby") +@Slf4j public class NearbyRuleHandler extends Decisioner { //每个策略的配置信息 /** @@ -48,83 +52,12 @@ public class NearbyRuleHandler extends Decisioner { if (CollectionUtils.isEmpty(list)){ throw new BadRequestException("当前分配策略无可用货位"); } + List before = list.subList(0, list.size()>10?10:list.size()); + log.info("就近分配前:"+ before); list.sort(Comparator.comparingInt(i -> i.getRow_num()+i.getCol_num()+i.getLayer_num()+i.getBlock_num())); //就近分配区分出库还是入库策略 - return list; + List subList = list.subList(0, list.size()>10?10:list.size()); + log.info("就近分配结果:"+ subList); + return subList; } - - /** - * 入库策略:默认入库顺序数小的一方为靠近出口方向 - * @param attrList :仓位集合 - * @param jsonParam:materialId :物料标识 - * @return List :仓位集合 - */ - private List inHandler(List attrList, JSONObject jsonParam) { - - return attrList; - } - - /** - * 出库策略:默认出库顺序数大的一方为靠近出口方向 - * @param attrList :仓位物料信息 - * @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据时间匹配) - * @return List :需出库仓位集合 - */ -// private List outHandler(List attrList, JSONObject jsonParam) { -// -// // 先进行顺序排序 -// -// // 查询对应的出入库明细 -// StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId")); -// -// // 查询传入仓位物料中的数量是否满足明细中的数量 -// List vehicleCodeIn = attrList.stream() -// .map(StIvtStructattr::getVehicle_code) -// .distinct() -// .collect(Collectors.toList()); -// -// // 查询对应的载具物料 -// List extList = iMdPbStoragevehicleextService.list( -// new QueryWrapper().lambda() -// .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn) -// ); -// -// double attrQty = extList.stream() -// .map(MdPbStoragevehicleext::getQty) -// .reduce(BigDecimal.ZERO, BigDecimal::add) -// .doubleValue(); -// -// if (dtlDao.getUnassign_qty().doubleValue() > attrQty) { -// // 说明不满足所需重量则全部返回 -// return attrList; -// } -// -// // 需返回仓位物料集合 -// List resultList = new ArrayList<>(); -// // 满足所需数量: 根据巷道进行平均分配 -// double unAssingQty = dtlDao.getUnassign_qty().doubleValue(); -// -// while (unAssingQty > 0) { -// -// // 添加需返回的仓位物料 -// StIvtStructattr attrDao = attrList.get(0); -// resultList.add(attrDao); -// -// // 减去未分配重量 -// MdPbStoragevehicleext extDao = extList.stream() -// .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code())) -// .findFirst().orElse(null); -// -// if (ObjectUtil.isEmpty(extDao)) { -// throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】"); -// } -// -// unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue()); -// -// // 移出此仓位物料,方便下一轮进行匹配 -// attrList.remove(attrDao); -// } -// -// return resultList; -// } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/InventoryRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/InventoryRuleHandler.java index a8283a3d..384f3337 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/InventoryRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/InventoryRuleHandler.java @@ -3,6 +3,7 @@ package org.nl.wms.decision_manage.handler.decisioner.impl.diy; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.MapOf; @@ -68,15 +69,18 @@ public class InventoryRuleHandler extends Decisioner lqw = new LambdaQueryWrapper<>(); - lqw.eq(SchBaseTask::getPoint_code1, LINK_POINT.get(start_point)) - .eq(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("生成")); - SchBaseTask task = taskService.getOne(lqw); - if (!ObjectUtils.isEmpty(task)) { - String point_code2 = task.getPoint_code2(); - list = getInventory(list, point_code2); - if (!CollectionUtils.isEmpty(list)) { - return list; + String target = LINK_POINT.get(start_point); + if (StringUtils.isNotEmpty(target)){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(SchBaseTask::getPoint_code1, target) + .lt(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("执行中")); + List tasks = taskService.list(lqw); + for (SchBaseTask task : tasks) { + String point_code2 = task.getPoint_code2(); + List new_list = getInventory(list, point_code2); + if (!CollectionUtils.isEmpty(new_list)) { + return new_list; + } } } return 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 fa80e19d..99aafa2e 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 @@ -62,16 +62,13 @@ public class GroupDickInStorageTask extends AbstractTask { if (StringUtils.isEmpty(point_code1)){ throw new BadRequestException("申请任务失败:请求参数数据异常"); } - MdGruopDick mst = iMdGruopDickService - .getOne(new QueryWrapper().eq("vehicle_code", vehicle_code) - .lt("status", StatusEnum.FORM_STATUS.code("完成"))); - if (mst == null){ - throw new BadRequestException("申请任务失败:载具"+vehicle_code+"组盘信息不存在"); - } List item = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code); + if (CollectionUtils.isEmpty(item)){ - throw new BadRequestException("申请任务失败:载具"+vehicle_code+"组盘信息不存在"); + throw new BadRequestException("申请任务失败:载具"+vehicle_code+"载具物料信息信息不存在"); } + String groupId = item.get(0).getGroup_id(); + MdGruopDick mst = iMdGruopDickService.getById(groupId); SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper() .eq("vehicle_code", vehicle_code).select("task_code") .lt("status",StatusEnum.FORM_STATUS.code("完成"))); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java index 0873df8e..bb57a236 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java @@ -5,16 +5,16 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.constant.DictConstantPool; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; -import org.nl.common.utils.CodeUtil; -import org.nl.common.utils.IdUtil; -import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.*; import org.nl.wms.dispatch_manage.task.handler.AbstractTask; import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; +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; @@ -22,10 +22,13 @@ import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.nl.wms.system_manage.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /* @@ -34,12 +37,13 @@ import java.util.stream.Collectors; * 出库任务入库任务 */ @Service +@Slf4j public class OutStorageTask extends AbstractTask { @Autowired private ISchBaseTaskService taskService; @Autowired - private ISysParamService iSysParamService; + private MoveStorageTask moveStorageTask; @Autowired private IStIvtStructattrService iStIvtStructattrService; @@ -63,30 +67,37 @@ public class OutStorageTask extends AbstractTask { if (StringUtils.isEmpty(configTarget)){ throw new BadRequestException("创建任务失败:出库点车间点位对应关系配置异常"); } - target_point = configTarget; + target_point=configTarget; } if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)){ throw new BadRequestException("创建任务失败:方法请求参数不能为空"); } - List list = taskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) + List list = taskService.list(new QueryWrapper() + .eq("vehicle_code", vehicle_code) + .ne("task_type",StatusEnum.IOBILL_TYPE_MOVE.code("移库")) .lt("status", StatusEnum.FORM_STATUS.code("完成"))); if (!CollectionUtils.isEmpty(list)){ throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); } StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper().eq("vehicle_code", vehicle_code)); + log.info("OutStorgeTask出入分配货位信息:{}",struct.toString()); + String end_struct_code = struct.getStruct_code(); + if (struct.getStor_code().equals("FStockId")){ + end_struct_code = SpringContextHolder.getBean(OutStorageTask.class).DoubleStor(struct); + } SchBaseTask task = new SchBaseTask(); - task.setId(IdUtil.getStringId()); - task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); - task.setStatus(StatusEnum.FORM_STATUS.code("生成")); - task.setHandle_class(this.getClass().getName()); + task.setId(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setStatus(StatusEnum.FORM_STATUS.code("生成")); + task.setHandle_class(this.getClass().getName()); task.setAcs_type(StatusEnum.ACS_TYPE.code("立库")); - task.setCreate_time(DateUtil.now()); - task.setCreate_name(SecurityUtils.getCurrentNickName()); - task.setTask_type(from.getString("task_type")); - task.setVehicle_code(vehicle_code); - task.setPoint_code1(struct.getStruct_code()); - task.setPoint_code2(target_point); + task.setCreate_time(DateUtil.now()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setTask_type(from.getString("task_type")); + task.setVehicle_code(vehicle_code); + task.setPoint_code1(end_struct_code); + task.setPoint_code2(target_point); taskService.save(task); iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() .set(MdPbVehicleMater::getTask_code,task.getTask_code()) @@ -100,8 +111,61 @@ public class OutStorageTask extends AbstractTask { return (JSONObject)JSON.toJSON(task); } + @Transactional(propagation= Propagation.REQUIRES_NEW) + public synchronized String DoubleStor(StIvtStructattr struct) { + String blockPoint = getZdPoint(struct.getStruct_code()); + //浅货位 + log.info("1-----出库分配:{},当前货位:{}",blockPoint,struct.getStruct_code()); + RedissonUtils.lock(()->{ + + },"DoubleStor",1); + if (blockPoint.equals(struct.getStruct_code())){ + /** + * 当前为浅位 + * 1.判断浅位是否存在移库任务 + * 2.存在则取移库任务终点作为出库起点 + */ + SchBaseTask moveTask = taskService.getOne(new QueryWrapper() + .eq("task_type",StatusEnum.IOBILL_TYPE_MOVE.code("移库")) + .eq("vehcle_code",struct.getVehicle_code()) + .lt("status", StatusEnum.FORM_STATUS.code("完成"))); + if (moveTask !=null){ + log.info("1-----出库分配:浅位存在移库任务",moveTask.getTask_code()+"_"+moveTask.getVehicle_code()+"_"+moveTask.getPoint_code1()+"_"+moveTask.getPoint_code2()); + return moveTask.getPoint_code2(); + } + }else { + /** + * 1.判断浅位是否存在托盘 + * 2.如果有则判断是否存在出库任务 + * 3.如果没有则生成移库任务 + */ + StIvtStructattr block = iStIvtStructattrService.getOne(new QueryWrapper() + .eq("struct_code", blockPoint) + .isNotNull("vehicle_code")); + log.info("2-----出库分配:深位查询是否有货:{}",block!=null); + if (block!=null){ + int count = taskService.count(new QueryWrapper() + .eq("point_code1", block.getStor_code()) + .lt("status", StatusEnum.FORM_STATUS.code("完成"))); + if (count == 0){ + AtomicReference moveStruct = new AtomicReference<>(); + RedissonUtils.lock(() -> { + System.out.println("---3--" + Thread.currentThread().getName()); + Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("nearby","depthPriority"), new JSONObject(MapOf.of("stor_code", block.getStor_code()))); + moveStruct.set(((Map) process.get("form_data")).get("end_struct_code")); + }, "1" + block.getStor_code(), 5); + Map moveForm = MapOf.of("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("移库") + , "is_send", false + , "vehicle_code", block.getVehicle_code(), "form_data", new JSONObject(MapOf.of("start_struct_code", block.getStruct_code(), "end_struct_code", moveStruct.get()))); + log.info("3-----出库分配:生成移库任务:{}",moveForm); + moveStorageTask.createTask(new JSONObject(moveForm)); + } + } + } + return struct.getStruct_code(); + } + @Override - @Transactional public void updateStatus(JSONObject data) { this.updateTask(data); } @@ -118,4 +182,20 @@ public class OutStorageTask extends AbstractTask { public void cancel(JSONObject data) { this.updateTask(data); } + + + private static String getZdPoint(String point_code) { + if (point_code == null || point_code.length() != 9) { + return null; + } + String type = point_code.substring(0, 1); + int row = Integer.parseInt(point_code.substring(1, 3)); + String rest = point_code.substring(3); + if (row % 2 == 0) { + row -= 1; + } else { + row += 1; + } + return String.format("%s%02d%s", type, row, rest); + } } 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 index b5849074..4f866bdf 100644 --- 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 @@ -62,33 +62,16 @@ public class PalletInStorageTask extends AbstractTask { throw new BadRequestException("申请任务失败:载具"+vehicle_code+"物料信息不存在"); } MdPbVehicleMaterVo vehicleMater = item.get(0); - //更新载具proc_inst_id - String currentInstId = vehicleMater.getProc_inst_id(); - if (StringUtils.isEmpty(currentInstId)){ - //触发流程 - 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) - .eq("is_delete",false)) - ,null) - .build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater)) - ); - }else { - SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper() - .eq("vehicle_code", vehicle_code).select("task_code") - .lt("status",StatusEnum.FORM_STATUS.code("完成"))); - if (schBaseTask!=null){ - throw new BadRequestException("申请任务失败:载具"+vehicle_code+"已经存任务"+schBaseTask.getTask_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); - } + + 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) + .eq("is_delete",false)) + ,null) + .build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater)) + ); } return null; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ToPickPlatformTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ToPickPlatformTask.java index e4d6e285..bff1d9bb 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ToPickPlatformTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ToPickPlatformTask.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; @@ -34,6 +35,7 @@ import java.util.stream.Collectors; * 出库任务入库任务 */ @Service +@Slf4j public class ToPickPlatformTask extends AbstractTask { private static volatile String Lask_Point; @Autowired @@ -58,6 +60,7 @@ public class ToPickPlatformTask extends AbstractTask { throw new BadRequestException("当前拣选工位未启用"); } //轮询 + log.info("上次拣选平台分配位置:{},拣选平台开放点:{}",Lask_Point,targetPoints); for (int i = 0; i < targetPoints.size(); i++) { String code = targetPoints.get(i).getCode(); if (targetPoints.size()>1 && !code.equals(Lask_Point)){ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java index e198e77d..650710f6 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java @@ -220,14 +220,10 @@ public class SchBaseTaskServiceImpl extends ServiceImpl() - .set("update_time", DateUtil.now()) - .set("vehicle_code", null) - .set("lock_type", StatusEnum.LOCK.code("无锁")) - .eq("struct_code", task.getPoint_code2())); + JSONObject struct = rzd(stIvtStructattr, task); + return struct; case "czd": moveTask(task_code, struct_code, stIvtStructattr); @@ -257,7 +253,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl() @@ -267,24 +263,53 @@ public class SchBaseTaskServiceImpl extends ServiceImpl) map.get("form_data")).get("end_struct_code"); - iActRuExecutionService.update(new UpdateWrapper() - .set("remark", struct_code + "入满异常重新分配货位" + new_struct_code) + .set("remark", stIvtStructattr.getStruct_code() + "入满异常重新分配货位" + new_struct_code) .eq("proc_inst_id", vehicleCode.getProc_inst_id())); this.update(new UpdateWrapper() .set("point_code2", new_struct_code) - .set("remark", struct_code + "入满异常重新分配货位" + new_struct_code) + .set("remark", stIvtStructattr.getStor_code() + "入满异常重新分配货位" + new_struct_code) .eq("task_code", task_code)); - StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper().eq("struct_code", task.getPoint_code2())); - - if (StringUtils.isEmpty(struct.getVehicle_code())){ + if (StringUtils.isEmpty(stIvtStructattr.getVehicle_code())){ iStIvtStructattrService.update(new UpdateWrapper() - .eq("struct_code", struct_code) + .eq("struct_code", stIvtStructattr.getStruct_code()) .set("lock_type", StatusEnum.LOCK.code("异常锁定")) .set("update_time", DateUtil.now()) .set("remark", "入满异常:" + task_code) - .set("vehicle_code", "YCZJ" + task_code)); + .set("vehicle_code", "YCZD" + task_code)); } + iStIvtStructattrService.update(new UpdateWrapper() + .set("update_time", DateUtil.now()) + .set("vehicle_code", null) + .set("lock_type", StatusEnum.LOCK.code("无锁")) + .eq("struct_code", task.getPoint_code2())); + JSONObject result = new JSONObject(); + result.put("point_code2", new_struct_code); + return result; + } + private JSONObject rm(StIvtStructattr stIvtStructattr, SchBaseTask task) { + String task_code = task.getTask_code(); + MdPbVehicleMater vehicleCode = iMdPbVehicleMaterService + .getOne(new QueryWrapper() + .eq("vehicle_code", task.getVehicle_code()) + .eq("is_delete",false)); + //查询分配规则 + Map map = SpringContextHolder.getBean(DecisionHandler.class) + .dispenseTransa(ListOf.of("nearby"), new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code()))); + String new_struct_code = ((Map) map.get("form_data")).get("end_struct_code"); + iActRuExecutionService.update(new UpdateWrapper() + .set("remark", stIvtStructattr.getStruct_code() + "入满异常重新分配货位" + new_struct_code) + .eq("proc_inst_id", vehicleCode.getProc_inst_id())); + this.update(new UpdateWrapper() + .set("point_code2", new_struct_code) + .set("remark", stIvtStructattr.getStor_code() + "入满异常重新分配货位" + new_struct_code) + .eq("task_code", task_code)); + iStIvtStructattrService.update(new UpdateWrapper() + .eq("struct_code", stIvtStructattr.getStruct_code()) + .set("lock_type", StatusEnum.LOCK.code("异常锁定")) + .set("update_time", DateUtil.now()) + .set("remark", "入满异常:" + task_code) + .set("vehicle_code", "YCZD" + task_code)); JSONObject result = new JSONObject(); result.put("point_code2", new_struct_code); return result; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java index ad4b94f5..4234169e 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java @@ -108,14 +108,14 @@ public class MdGruopDickServiceImpl extends ServiceImpl() .eq("vehicle_code", vehicle_code) .eq("is_delete", false)); - String proc_inst_id = one.getProc_inst_id(); - if (!StringUtils.isEmpty(proc_inst_id)){ - String parent_id = iActRuExecutionService.getParentByChild(proc_inst_id); - ActRuExecution ruExecution = iActRuExecutionService.getOne(new QueryWrapper() - .eq("proc_inst_id",parent_id) - .lt("status", StatusEnum.FLOW_STATUS.code("完成"))); - if (ruExecution!=null){ - throw new BadRequestException(String.format("当前载具%s业务流程%s未完成",vehicle_code,parent_id)); + if (one!=null){ + String proc_inst_id = one.getProc_inst_id(); + if (!StringUtils.isEmpty(proc_inst_id)){ + String parent_id = iActRuExecutionService.getParentByChild(proc_inst_id); + ActRuExecution ruExecution = iActRuExecutionService.getOne(new QueryWrapper() + .eq("proc_inst_id",parent_id) + .lt("status", StatusEnum.FLOW_STATUS.code("完成"))); + if (ruExecution!=null){ + throw new BadRequestException(String.format("当前载具%s业务流程%s未完成",vehicle_code,parent_id)); + } } + iMdPbVehicleMaterService.update(new UpdateWrapper() + .set("is_delete",true) + .eq("id",one.getId())); } - iMdPbVehicleMaterService.update(new UpdateWrapper() - .set("is_delete",true) - .eq("id",one.getId())); return new ResponseEntity<>(TableDataInfo.build(),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 index c9b01045..dbf36ccf 100644 --- 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 @@ -70,16 +70,16 @@ public class PalletIostorinvService { 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) - .eq("is_delete",false)) - ,null) - .build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(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) +// .eq("is_delete",false)) +// ,null) +// .build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater)) +// ); }; public void outStorage(JSONObject form){ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java index 1c7a5cc1..2dc3be7a 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java @@ -77,20 +77,7 @@ public class PmFormDataServiceImpl extends ServiceImpl result = new ArrayList<>(); - JSONObject sourceData = JSONObject.parseObject(sourceString); - if (StringUtils.isNotEmpty(one.getConvert_json())) { - sourceData = sourceData.getJSONObject(one.getConvert_json()); - } -// JSONObject target = mappingParse(formMapping.getMapping_json(), one, sourceData); -// Object items = target.remove("item"); -// target.put("id", IdUtil.getStringId()); -// target.put("code", CodeUtil.getNewCode(formMapping.getForm_type())); -// target.put("create_time", DateUtil.now()); -// target.put("create_name", SecurityUtils.getCurrentNickName()); -// PmFormData mst = target.toJavaObject(PmFormData.class); -// result.add(mst); -// if (items != null) { -// JSONArray items_arr = (JSONArray) items; + JSONObject sourceData = JSONObject.parseObject(sourceString).getJSONObject("Model"); List items_arr = mappingParseList(formMapping.getMapping_json(), one, sourceData); for (int i = 0; i < items_arr.size(); i++) { JSONObject itemTarget = items_arr.get(i); @@ -198,20 +185,20 @@ public class PmFormDataServiceImpl extends ServiceImpl fields = ListOf.ofSet(formStruc.getBiz_code(), formStruc.getBiz_id(), formStruc.getBiz_code(), formStruc.getBiz_status(), formStruc.getMaterial_id(), formStruc.getPcsn(), formStruc.getVehicle_code(), formStruc.getVehicle_id(),formStruc.getUnit_id(), formStruc.getQty()); JSONObject data = fieldMapping(fields, fieldMapping, sourceData); data.put("form_type",formStruc.getForm_type()); - List items = new ArrayList<>(); + List items = new ArrayList<>(); JSONObject form_param = formStruc.getForm_param(); + String convertJson = formStruc.getConvert_json(); + if (form_param != null) { - JSONObject form_data = fieldMapping(form_param.keySet(), fieldMapping, sourceData); - if (formStruc.getHas_child()) { - JSONArray sourceDtls = sourceData.getJSONArray(formStruc.getConvert_json()); - for (int i = 0; i < sourceDtls.size(); i++) { - JSONObject item = fieldMapping(form_param.keySet(), fieldMapping, sourceDtls.getJSONObject(i)); - item.putAll(form_data); - JSONObject itemData = new JSONObject(data); - itemData.put("form_data",item); - items.add(itemData); - } + JSONArray sourceDtls = (JSONArray)sourceData.remove(convertJson); + for (int i = 0; i < sourceDtls.size(); i++) { + JSONObject itemJson = sourceDtls.getJSONObject(i); + itemJson.putAll(sourceData); + JSONObject item = fieldMapping(form_param.keySet(), fieldMapping, itemJson); + JSONObject itemData = new JSONObject(data); + itemData.put("form_data",item); + items.add(itemData); } } return items; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/controller/StIvtIostorinvOutController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/controller/StIvtIostorinvOutController.java index 8b22fee6..73de043a 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/controller/StIvtIostorinvOutController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/controller/StIvtIostorinvOutController.java @@ -6,6 +6,7 @@ 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.common.utils.RedissonUtils; import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; import org.nl.wms.stor_manage.io.service.dto.StorInvQuery; import org.nl.wms.stor_manage.io.service.iostor.IStIvtIostorinvService; @@ -102,7 +103,9 @@ public class StIvtIostorinvOutController { @PostMapping("/taskOpen") @Log("出库单作业下发") public ResponseEntity taskOpen(@RequestBody JSONObject dtl) { - iStIvtIostorinvService.taskOpen(dtl); + RedissonUtils.lock(()->{ + iStIvtIostorinvService.taskOpen(dtl); + },"出库单",null); return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/pick/service/PickingService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/pick/service/PickingService.java index 491af9cc..4145d6ce 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/pick/service/PickingService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/pick/service/PickingService.java @@ -50,7 +50,7 @@ import java.util.stream.Collectors; @Service public class PickingService { - private static Map Pick_Convery = MapOf.of("1308", "1207", "1311", "1209"); + private static Map Pick_Convery = MapOf.of("1308", "1207", "1311", "1210"); @Autowired private IPmFormDataService iFormDataService; @Autowired @@ -63,8 +63,6 @@ public class PickingService { private WmsToAcsService wmsToAcsService; @Autowired private IPmFormDataService pmFormDataService; - @Autowired - private IStIvtIostorinvdtlService iStIvtIostorinvDtlService; /** * 生成拣选任务 @@ -90,7 +88,8 @@ public class PickingService { throw new BadRequestException("载具编码不存在"); } vehicleCodes.remove(one.getVehicle_code()); - int mCode = iMdPbVehicleMaterService.count(new QueryWrapper().in("vehicle_code", vehicleCodes)); + int mCode = iMdPbVehicleMaterService.count(new QueryWrapper() + .in("vehicle_code", vehicleCodes).eq("is_delete",false)); if (mCode > 0) { throw new BadRequestException("当前载具" + vehicleCodes.toString() + "以存在载具物料信息"); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/config/JobRunner.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/config/JobRunner.java index be7b8c0f..f7d79947 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/config/JobRunner.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/config/JobRunner.java @@ -18,7 +18,6 @@ import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor @Order(100) -@ConditionalOnProperty(name = "jobrun", havingValue = "true") public class JobRunner implements ApplicationRunner { private static final Logger log = LoggerFactory.getLogger(JobRunner.class); private final ISysQuartzJobService quartzJobService; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TaskScheduleService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TaskScheduleService.java index 2a2835ee..853a3513 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TaskScheduleService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TaskScheduleService.java @@ -57,10 +57,6 @@ public class TaskScheduleService { public void taskPublish(){ boolean islock = lock.tryLock(); try { - Thread thread = new Thread(()->{ - log.info("子线程任务------"); - }); - thread.start(); log.info("111---执行定时任务:-----taskPublish-----"); if (islock){ //查询所有自动下发的任务 diff --git a/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev3.yml b/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev3.yml index 4e618701..78cb9ff3 100644 --- a/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev3.yml +++ b/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev3.yml @@ -7,7 +7,7 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://${DB_HOST:192.168.81.251}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + url: jdbc:mysql://${DB_HOST:192.168.1.218}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false # url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false username: ${DB_USER:root} password: ${DB_PWD:123456}