diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java index 00e027f41..edf45d50b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java @@ -95,7 +95,6 @@ public class AutoCallAirShaftTask { * 套拔轴缓存位满了、没有分切计划,则触发自动创建套拔轴任务 * update: 24/04/28 内包间只是区分气胀轴大小(即代数),不需要区分锂电/标箔 */ - @Transactional(rollbackFor = Exception.class) public void run() { log.info("自动呼叫套轴开始执行..."); // 判断配置参数是否只做拔轴 @@ -105,163 +104,166 @@ public class AutoCallAirShaftTask { // 1、获取空的插拔轴位(无任务) List emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", "0", "0"); - emptyPoints.forEach(empty -> { - // 标箔:1,锂电:2 改:大小:4代5代 - String specification = empty.getQzz_generation(); - String location = empty.getPoint_location(); - if (ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue())) { - // 只做拔轴 - makePullShaft(empty, specification); - return; - } - Integer integer = Integer.valueOf(ObjectUtil.isEmpty(tzDay.getValue()) ? "0" : tzDay.getValue()); - // 2、获取分切计划数据 校验代数 todo: 顺序可能需要考虑 - List planAll = slittingproductionplanService.getAllCutPlan(integer); - String value = paramObj.getValue(); - List prefixList = Arrays.asList(value.split("[,,]")); - List plans = planAll.stream() - .filter(p -> prefixList.stream() - .anyMatch(prefix -> p.getResource_name().startsWith(prefix)) && - checkComputationPoint(p, empty) && checkHasTask(p)) + emptyPoints.forEach(empty -> doCallShaft(empty, isOnlyPulling, tzDay, paramObj)); + } + + @Transactional(rollbackFor = Exception.class) + public void doCallShaft(BstIvtShafttubeivt empty, Param isOnlyPulling, Param tzDay, Param paramObj) { + // 标箔:1,锂电:2 改:大小:4代5代 + String specification = empty.getQzz_generation(); + String location = empty.getPoint_location(); + if (ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue())) { + // 只做拔轴 + makePullShaft(empty, specification); + return; + } + Integer integer = Integer.valueOf(ObjectUtil.isEmpty(tzDay.getValue()) ? "0" : tzDay.getValue()); + // 2、获取分切计划数据 校验代数 todo: 顺序可能需要考虑 + List planAll = slittingproductionplanService.getAllCutPlan(integer); + String value = paramObj.getValue(); + List prefixList = Arrays.asList(value.split("[,,]")); + List plans = planAll.stream() + .filter(p -> prefixList.stream() + .anyMatch(prefix -> p.getResource_name().startsWith(prefix)) && + checkComputationPoint(p, empty) && checkHasTask(p)) + .collect(Collectors.toList()); + if (plans.size() == 0) { + // 如果不需要套轴,就只做拔轴 + makePullShaft(empty, specification); + return; + } + log.info("获取过滤后的分切计划数据:{}", JSON.toJSONString(plans)); + // 查看套轴对接位是否满了 + // todo: 这里需要注意不要去校验071的任务,不然提前释放货位没意义。 + List emptyShaftPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1", + "1", location, "0"); + // 如果满了就只做拔轴 预留一个货位?,防止套轴直接站满 + if (emptyShaftPoint.size() == 0) { + log.info("暂存位没有空位!正在检测是否存在半个点位!"); + // 校验是否存在半个位置,且有分切计划 + // 获取只有一个位置的点位 + List halfPlacePoint = bcutpointivtService.getAllHalfPlacePoints("1", + "1", location); + List qzzs = halfPlacePoint.stream() + .map(p -> ObjectUtil.isNotEmpty(p.getQzz_no1()) ? p.getQzz_no1() : p.getQzz_no2()) .collect(Collectors.toList()); - if (plans.size() == 0) { + if (qzzs.size() == 0) { + log.info("没有半个点位,或者对应的另一半分切计划没有找到!"); // 如果不需要套轴,就只做拔轴 makePullShaft(empty, specification); return; } - log.info("获取过滤后的分切计划数据:{}", JSON.toJSONString(plans)); - // 查看套轴对接位是否满了 - // todo: 这里需要注意不要去校验071的任务,不然提前释放货位没意义。 - List emptyShaftPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1", - "1", location, "0"); - // 如果满了就只做拔轴 预留一个货位?,防止套轴直接站满 - if (emptyShaftPoint.size() == 0) { - log.info("暂存位没有空位!正在检测是否存在半个点位!"); - // 校验是否存在半个位置,且有分切计划 - // 获取只有一个位置的点位 - List halfPlacePoint = bcutpointivtService.getAllHalfPlacePoints("1", - "1", location); - List qzzs = halfPlacePoint.stream() - .map(p -> ObjectUtil.isNotEmpty(p.getQzz_no1()) ? p.getQzz_no1() : p.getQzz_no2()) - .collect(Collectors.toList()); - if (qzzs.size() == 0) { - log.info("没有半个点位,或者对应的另一半分切计划没有找到!"); - // 如果不需要套轴,就只做拔轴 - makePullShaft(empty, specification); - return; - } - // 从寻查找分切计划,并放在plans, 没有考虑区域问题, 里面会考虑代数 - plans = slittingproductionplanService.getAllHalfPlan(qzzs); - if (plans.size() == 0) { - log.info("没有找到对应的另一半分切计划没有找到"); - // 如果不需要套轴,就只做拔轴 - makePullShaft(empty, specification); - return; - } - log.info("找到对应的另一半的计划 - {}", plans); - } - // 获取一个分切计划的Dto。如果是6寸,可以直接使用、如果是3寸,需要判断当前位置是否满足 - // todo: 需要校验分切设备是在对应的区域中 - SlitterPlanDistinctDto planDto = plans.stream() - .filter(planD -> "6".equals(planD.getQzz_size()) || - ("3".equals(planD.getQzz_size()) && specification.equals(planD.getQzz_generation()))) - .findFirst() - .orElse(null); - if (planDto == null) { - log.warn("过滤3/6寸和代数输出结果为空,跳过此次套轴。此时点位对应代数:{}", specification); + // 从寻查找分切计划,并放在plans, 没有考虑区域问题, 里面会考虑代数 + plans = slittingproductionplanService.getAllHalfPlan(qzzs); + if (plans.size() == 0) { + log.info("没有找到对应的另一半分切计划没有找到"); + // 如果不需要套轴,就只做拔轴 + makePullShaft(empty, specification); return; } - log.info("此时获取的分切计划dto: {}", planDto); - // 获取分切计划dto中对应的需要套轴的分切计划 最多两个计划 - List needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + log.info("找到对应的另一半的计划 - {}", plans); + } + // 获取一个分切计划的Dto。如果是6寸,可以直接使用、如果是3寸,需要判断当前位置是否满足 + // todo: 需要校验分切设备是在对应的区域中 + SlitterPlanDistinctDto planDto = plans.stream() + .filter(planD -> "6".equals(planD.getQzz_size()) || + ("3".equals(planD.getQzz_size()) && specification.equals(planD.getQzz_generation()))) + .findFirst() + .orElse(null); + if (planDto == null) { + log.warn("过滤3/6寸和代数输出结果为空,跳过此次套轴。此时点位对应代数:{}", specification); + return; + } + log.info("此时获取的分切计划dto: {}", planDto); + // 获取分切计划dto中对应的需要套轴的分切计划 最多两个计划 + List needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name()) + .eq(PdmBiSlittingproductionplan::getParent_container_name, planDto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down()) + .eq(PdmBiSlittingproductionplan::getSplit_group, planDto.getSplit_group()) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) + .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); + if (needPlans.size() == 0) { + // 可能是改切,所以换成restruct_container_name来使用 + needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() .eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name()) - .eq(PdmBiSlittingproductionplan::getParent_container_name, planDto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getRestruct_container_name, planDto.getParent_container_name()) .eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down()) .eq(PdmBiSlittingproductionplan::getSplit_group, planDto.getSplit_group()) .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); - if (needPlans.size() == 0) { - // 可能是改切,所以换成restruct_container_name来使用 - needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() - .eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name()) - .eq(PdmBiSlittingproductionplan::getRestruct_container_name, planDto.getParent_container_name()) - .eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down()) - .eq(PdmBiSlittingproductionplan::getSplit_group, planDto.getSplit_group()) - .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) - .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); - } - log.info("通过dto获取的分切计划:{}", needPlans); - // 获取其中一条 - PdmBiSlittingproductionplan needPlan = needPlans.get(0); - String qzzSize = needPlan.getQzz_size(); - // 从套轴对接位获取相同气涨轴大小 - // update: 不需要(同标箔或者锂电分开) - // todo: 需要校验区域0/1 - List qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, specification); - if (qzzPoint.size() == 0) { - // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 - saveCutPlanMessage(empty, needPlans, qzzSize); - // 调用ACS滚条气涨轴下来 - toAcsOutShaft(qzzSize, location, empty); - toCallAgvMovePaperTube(needPlans, location, empty); - return; - } - // 查找一条没任务的点位 - BstIvtCutpointivt startPoint = qzzPoint.get(0); - if (ObjectUtil.isEmpty(startPoint)) { - // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 - saveCutPlanMessage(empty, needPlans, qzzSize); - // 如果不存在,则发起信号滚气涨轴 - // 调用ACS滚条气涨轴下来 - toAcsOutShaft(qzzSize, location, empty); - toCallAgvMovePaperTube(needPlans, location, empty); - return; - } - // 创建任务 - JSONObject param = new JSONObject(); - param.put("point_code1", ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) - ? startPoint.getTruss_point_code1() : startPoint.getTruss_point_code2()); - param.put("point_code2", empty.getPoint_code()); - param.put("vehicle_code", ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) - ? startPoint.getQzz_no1() : startPoint.getQzz_no2()); - // 气胀轴号 - param.put("qzz_no", ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) - ? startPoint.getQzz_no1() : startPoint.getQzz_no2()); - param.put("needPlan", planDto); - // 是否拔轴 - param.put("is_pulling", SlitterConstant.SLITTER_YES); - param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>穿拔轴位")); - param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - param.put("qzz_size", needPlan.getQzz_size()); - // 所需的纸管规格 - SlitterTaskUtil.putNeedPaperSpec(param, needPlans); - // 当前纸管的规格信息 - String oldQzzNo = ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) - ? startPoint.getQzz_no1() : startPoint.getQzz_no2(); - if (oldQzzNo == null) { - throw new BadRequestException("当前气胀轴的编码为空!"); - } + } + log.info("通过dto获取的分切计划:{}", needPlans); + // 获取其中一条 + PdmBiSlittingproductionplan needPlan = needPlans.get(0); + String qzzSize = needPlan.getQzz_size(); + // 从套轴对接位获取相同气涨轴大小 + // update: 不需要(同标箔或者锂电分开) + // todo: 需要校验区域0/1 + List qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, specification); + if (qzzPoint.size() == 0) { // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 saveCutPlanMessage(empty, needPlans, qzzSize); - // 设置是否套轴:1:正常套轴,2:待定(到后面还会申请套轴) - setIsSleeveShaft(param); - // 最多两条 - List oldPlans = slittingproductionplanService.getByQzzNo(oldQzzNo); - SlitterTaskUtil.putCurrentPaperSpec(param, oldPlans); - // 套管数量 - param.put("casingCount", needPlans.size()); - // 拔管数量 - param.put("pullCount", oldPlans.size()); - param.put("containers", oldPlans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList())); - trussCallAirShaftTask.createTask(param); + // 调用ACS滚条气涨轴下来 + toAcsOutShaft(qzzSize, location, empty); toCallAgvMovePaperTube(needPlans, location, empty); - // 将分切计划is_paper_ok 1(纸管已经准备好) -> 2(已经套轴) - needPlans.forEach(p -> { - p.setIs_paper_ok("2"); - TaskUtils.updateOptMessageBySlitterPlan(p); - }); - slittingproductionplanService.updateBatchById(needPlans); + return; + } + // 查找一条没任务的点位 + BstIvtCutpointivt startPoint = qzzPoint.get(0); + if (ObjectUtil.isEmpty(startPoint)) { + // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 + saveCutPlanMessage(empty, needPlans, qzzSize); + // 如果不存在,则发起信号滚气涨轴 + // 调用ACS滚条气涨轴下来 + toAcsOutShaft(qzzSize, location, empty); + toCallAgvMovePaperTube(needPlans, location, empty); + return; + } + // 创建任务 + JSONObject param = new JSONObject(); + param.put("point_code1", ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) + ? startPoint.getTruss_point_code1() : startPoint.getTruss_point_code2()); + param.put("point_code2", empty.getPoint_code()); + param.put("vehicle_code", ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) + ? startPoint.getQzz_no1() : startPoint.getQzz_no2()); + // 气胀轴号 + param.put("qzz_no", ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) + ? startPoint.getQzz_no1() : startPoint.getQzz_no2()); + param.put("needPlan", planDto); + // 是否拔轴 + param.put("is_pulling", SlitterConstant.SLITTER_YES); + param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>穿拔轴位")); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + param.put("qzz_size", needPlan.getQzz_size()); + // 所需的纸管规格 + SlitterTaskUtil.putNeedPaperSpec(param, needPlans); + // 当前纸管的规格信息 + String oldQzzNo = ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) + ? startPoint.getQzz_no1() : startPoint.getQzz_no2(); + if (oldQzzNo == null) { + throw new BadRequestException("当前气胀轴的编码为空!"); + } + // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 + saveCutPlanMessage(empty, needPlans, qzzSize); + // 设置是否套轴:1:正常套轴,2:待定(到后面还会申请套轴) + setIsSleeveShaft(param); + // 最多两条 + List oldPlans = slittingproductionplanService.getByQzzNo(oldQzzNo); + SlitterTaskUtil.putCurrentPaperSpec(param, oldPlans); + // 套管数量 + param.put("casingCount", needPlans.size()); + // 拔管数量 + param.put("pullCount", oldPlans.size()); + param.put("containers", oldPlans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList())); + trussCallAirShaftTask.createTask(param); + toCallAgvMovePaperTube(needPlans, location, empty); + // 将分切计划is_paper_ok 1(纸管已经准备好) -> 2(已经套轴) + needPlans.forEach(p -> { + p.setIs_paper_ok("2"); + TaskUtils.updateOptMessageBySlitterPlan(p); }); + slittingproductionplanService.updateBatchById(needPlans); } /** diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index a63497329..30f7cf502 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -409,8 +409,6 @@ public class SlitterServiceImpl implements SlitterService { if (shafttubeivts.size() == 0) { throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); } - // todo: 过滤空位后面是否有轴的位置 - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); RLock lockPoint = redissonClient.getLock(shafttubeivt.getPoint_code()); boolean tryLockPoint = lockPoint.tryLock(0, TimeUnit.SECONDS); @@ -1975,6 +1973,7 @@ public class SlitterServiceImpl implements SlitterService { plan.setIs_parent_ok("0"); plan.setIs_child_tz_ok("0"); plan.setIs_child_ps_ok("0"); + plan.setPaper_weight("0"); plan.setQzzno(""); plan.setIs_delete("0"); plan.setSale_order_name("-"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java index 1eaad7407..706f67eac 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java @@ -127,6 +127,11 @@ public enum IOSEnum { "子卷下线行架任务", "16","退货入库行架任务", "14","RGV输送任务", "15", "木箱堆叠行架任务", "17" )), + + // acs反馈异常出库 + ACS_EXCEPTIONAL_TYPE(MapOf.of("入库满入", "1","浅货位有货(入库)", "4", + "出库空出", "2","浅货位有货(出库)", "3" + )), ; private Map code; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvOutService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvOutService.java index 84ead0f16..3dfa90d05 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvOutService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvOutService.java @@ -138,4 +138,11 @@ public interface IStIvtIostorinvOutService extends IService { * @param whereJson: 任务对象 */ void finishTask(JSONObject whereJson); + + /** + * 出库浅货位有货阻挡异常处理 + * @param whereJson / + * @return String 任务标识 + */ + String taskExceptionalOut(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java index e5eee6b8c..573b9c467 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.b_lms.pdm_manage.enums.SUBEnum; +import org.nl.b_lms.sch.tasks.TwoExcepionalMoveTask; import org.nl.b_lms.sch.tasks.TwoOutExceptionalTask; import org.nl.b_lms.sch.tasks.TwoOutTask; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; @@ -1051,6 +1052,45 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl Heap_Lock = Interners.newWeakInterner(); + private static Map Task_Status_Convers = MapOf.of("1",TaskStatusEnum.EXECUTING.getCode(),"2",TaskStatusEnum.FINISHED.getCode(),"3","0"); private final RawAssistIStorService rawAssistIStorService; @@ -162,6 +163,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Autowired private ProductOutTwoService productOutTwoService; + @Autowired + private IStIvtIostorinvOutService iStIvtIostorinvOutService; + /** * task_id:任务标识 @@ -185,38 +189,27 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { - JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + JSONObject task = WQLObject.getWQLObject("SCH_BASE_Task") + .query("task_id = '" + task_id + "'") + .uniqueResult(0); if (StrUtil.isNotEmpty(row.getString("car_no"))) { - taskObj.put("car_no", row.getString("car_no")); - WQLObject.getWQLObject("SCH_BASE_Task").update(taskObj); + WQLObject.getWQLObject("SCH_BASE_Task") + .update(MapOf.of("car_no",row.getString("car_no")),"task_id = '" + task_id + "'"); } - // 任务处理类 - String processing_class = taskObj.getString("handle_class"); - AbstractAcsTask abstractTask = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(processing_class)); - String status = ""; - if ("1".equals(row.getString("task_status"))) { - status = TaskStatusEnum.EXECUTING.getCode(); - } - if ("2".equals(row.getString("task_status"))) { - status = TaskStatusEnum.FINISHED.getCode(); - } - if ("3".equals(row.getString("task_status"))) { - status = "0"; - } - abstractTask.updateTaskStatus(taskObj,status); + AbstractAcsTask abstractTask = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(task.getString("handle_class"))); + abstractTask.updateTaskStatus(task,Task_Status_Convers.get(row.getString("task_status"))); } else { throw new BadRequestException("任务标识为:" + task_id + "的任务正在操作中!"); } }catch (Exception ex){ WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark",DateUtil.now()+"更新"+row.getString("task_status")+"失败:"+ex.getMessage()),"task_id = '" + task_id + "'"); log.error(task_id+"acs更新任务失败:{}", ex); - throw new BadRequestException(ex.getMessage()); + throw ex; }finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { lock.unlock(); } } - } JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); @@ -2260,40 +2253,40 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // 判断任务类型 if (taskDao.getTask_type().equals(TASKEnum.BOX_TYPE.code("木箱入库"))) { // 木箱入库:满入、浅货位有货-放货时 - if (type.equals("1") || type.equals("4")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("入库满入")) || type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(入库)"))) { point_code = inBoxManageService.taskExceptional(whereJson); } } else if (taskDao.getTask_type().equals(TASKEnum.BOX_TYPE.code("木箱出库"))) { // 木箱出库:空出、浅货位有货-取货时 - if (type.equals("2")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("出库空出"))) { point_code = outBoxManageService.taskExceptional(whereJson); } - if (type.equals("3")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(出库)"))) { String task_id = outBoxManageService.taskExceptionalOut(whereJson); result.put("task_id", task_id); } } else if (taskDao.getTask_type().equals(TASKEnum.VEHICLE_TYPE.code("托盘入库"))) { // 托盘入库:满入、浅货位有货-放货时 - if (type.equals("1") || type.equals("4")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("入库满入")) || type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(入库)"))) { point_code = inVehicleManageService.taskExceptional(whereJson); } } else if (taskDao.getTask_type().equals(TASKEnum.VEHICLE_TYPE.code("托盘出库"))) { // 托盘出库:空出、浅货位有货-取货时 - if (type.equals("2")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("出库空出"))) { point_code = outVehicleManageService.taskExceptional(whereJson); } - if (type.equals("3")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(出库)"))) { String task_id = outVehicleManageService.taskExceptionalOut(whereJson); result.put("task_id", task_id); } } else if (taskDao.getTask_type().equals(TASKEnum.PROUD_TYPE.code("成品入库"))) { // 成品入库:满入、浅货位有货-放货时 - if (type.equals("1") || type.equals("4")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("入库满入")) || type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(入库)"))) { point_code = inBussManageService.taskExceptional(whereJson); } } else if (taskDao.getTask_type().equals(TASKEnum.PROUD_TYPE.code("成品出库"))) { // 成品出库:空出 - if (type.equals("2")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("出库空出"))) { taskDao.setRemark("【空出】请检查货位库存!"); taskDao.setCar_no("【空出】请检查货位库存!"); taskService.updateById(taskDao); @@ -2304,11 +2297,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("deviceApplyExceptional返回参数:---------------------------------------------" + result.toString()); return result; } + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(出库)"))) { + // 浅货位阻挡-取货时 + String task_id = iStIvtIostorinvOutService.taskExceptionalOut(whereJson); + result.put("task_id", task_id); + } } else if (taskDao.getTask_type().equals(TASKEnum.PROUD_TYPE.code("立库转库"))) { // 立库转库:满入、浅货位有货-放货时 - if (type.equals("1") || type.equals("4")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("入库满入")) || type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(入库)"))) { point_code = outBussManageService.taskExceptional(whereJson); - } else if (type.equals("2")) { + } else if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("出库空出"))) { // 立库转库空出 taskDao.setRemark("【空出】请检查货位库存!"); taskDao.setCar_no("【空出】请检查货位库存!"); @@ -2322,7 +2320,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } } - if (!type.equals("3") && ObjectUtil.isEmpty(point_code)) { + if (!type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(出库)")) && ObjectUtil.isEmpty(point_code)) { throw new BadRequestException("立库异常任务处理失败,仓位为空!"); }