From 468c57f550a410e5868fe78e7fc87366ec784cba Mon Sep 17 00:00:00 2001 From: liuxy Date: Sat, 10 Aug 2024 16:35:58 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A=E5=87=BA=E5=BA=93=E5=8A=A0?= =?UTF-8?q?=E6=89=8B=E5=8A=A8=E5=BC=8F=E4=BA=8B=E5=8A=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iostorInv/IStIvtIostorinvOutService.java | 12 + .../impl/StIvtIostorinvOutServiceImpl.java | 388 +++++++++++++++++- .../util/impl/OutBussManageServiceImpl.java | 148 +++++++ .../util/service/OutBussManageService.java | 7 + 4 files changed, 554 insertions(+), 1 deletion(-) 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 4367d8d46..84ead0f16 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 @@ -101,6 +101,18 @@ public interface IStIvtIostorinvOutService extends IService { */ void cancelDiv(JSONObject whereJson); + /** + * 全部设置站点 + * @param whereJson { + * iostorinv_id: 单据标识 + * bill_code:单据编码 + * checked:是否异常出库 + * point_code:终点编码 + * } + */ + void allSetPoint2(JSONObject whereJson); + + /** * 全部设置站点 * @param 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 3d58a282a..4aaabe58b 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 @@ -38,12 +38,14 @@ import org.nl.wms.basedata.st.service.StorattrService; import org.nl.wms.basedata.st.service.dto.StorattrDto; import org.nl.wms.pda.mps.eum.RegionTypeEnum; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.util.TranUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; @@ -545,7 +547,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl disDaoList = stIvtIostorinvdisMapper.getNotCreateDis(whereJson); + + if (ObjectUtil.isEmpty(disDaoList)) { + throw new BadRequestException("当前没有可设置的分配明细!"); + } + + /* + * 下发任务 + * 1.根据木箱 长、宽、高、订单号、物料分组 + * 2.相同木箱规格、订单号、物料的木箱一个任务组 + */ + // 定义一个函数,将需要分组的元素映射到一个建的集合里 + Function> compositeKey = row -> + Arrays.asList(row.getString("box_length"), row.getString("box_width"), + row.getString("box_high"),row.getString("sale_order_name"), + row.getString("material_id") + ); + + Map, List> groupingDisMap = + disDaoList.stream().collect(Collectors.groupingBy(compositeKey, Collectors.toList())); + + // 创建手动式事务 + ArrayList arr = new ArrayList<>(); + TranUtil.openTransaction((req, allTransactionConsumer) -> { + for (List disLikeList : groupingDisMap.values()) { + // 调用任务生成处理 + List taskMangeList = createTaskMange2(disLikeList,mstDao.getIostorinv_id().toString(),allTransactionConsumer); + + // 创建任务并下发一组任务 + createTask2(taskMangeList,disLikeList,whereJson.getString("point_code"),allTransactionConsumer); + + allTransactionConsumer.accept("finish"); + } + return arr; + }, new JSONArray()); + // 下发任务:判断当前单据是否有正在执行的的任务 + JSONArray disArr = taskService.query("table_fk = '" + mstDao.getIostorinv_id().toString() + "' and is_delete = '0' and task_status = '" + TaskStatusEnum.EXECUTING.getCode() + "'") + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(disArr)) { + TwoOutTask twoOutTask = new TwoOutTask(); + twoOutTask.immediateNotifyAcs(null); + } + } + @Override @Transactional public void confirm(JSONObject whereJson) { @@ -1108,6 +1163,65 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl 生成任务的集合 + */ + private List createTaskMange2(List disLikeList, String iostorinv_id, Consumer allTransactionConsumer) { + // 仓位表 + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + + // 获取仓位集合 + String structCodeIn = disLikeList.stream() + .map(row -> row.getString("struct_code")) + .distinct().collect(Collectors.joining("','")); + + List attrList = attrTab.query("struct_code IN ('" + structCodeIn + "')") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + /* + * 判断是否被阻挡 + */ + // 获取所在排所有仓位 + String rowIn = attrList.stream() + .map(row -> row.getString("row_num")) + .distinct().collect(Collectors.joining("','")); + + List attrRowList = attrTab.query("stor_id = '" + IOSEnum.STOR_ID.code("二期") + "' AND row_num IN ('" + rowIn + "')") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 需移库仓位集合 + List needMoveAttrList = new ArrayList<>(); + + // 需生成出库任务的仓位集合 + List needCreateAttrList = new ArrayList<>(); + + // 循环准备任务参数 + for (int i = 0; i < attrList.size(); i++) { + JSONObject jsonAttr = attrList.get(i); + + // 判断是深位还是浅位 + if (jsonAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) { + // 深位:判断对应浅位是否阻挡 + JSONObject jsonBoxStop = ifBoxStop2(jsonAttr,attrRowList,iostorinv_id,allTransactionConsumer); + + if (ObjectUtil.isNotEmpty(jsonBoxStop)) { + // 加入需要移库的集合 + needMoveAttrList.add(jsonBoxStop); + } + } + // 加入需要出库的集合 + needCreateAttrList.add(jsonAttr); + } + + // 创建移库单下发移库任务 + outBussManageService.createMove2(needMoveAttrList,allTransactionConsumer); + + return needCreateAttrList; + } + /** * 判断是否阻挡 * @param jsonAttr 要出库的仓位 @@ -1245,6 +1359,146 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl attrRowList, String iostorinv_id, Consumer allTransactionConsumer) { + // 仓位表 + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + // 子卷包装关系表 + WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); + // 任务表 + WQLObject taskService = WQLObject.getWQLObject("sch_base_task"); + // 载具扩展属性表 + WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); + + JSONObject result = new JSONObject(); + + // 获取要出库仓位所对应的浅货位 + List lowAttrList = attrRowList.stream() + .filter(row -> row.getString("row_num").equals(jsonAttr.getString("row_num")) && + row.getString("layer_num").equals(jsonAttr.getString("layer_num")) && + row.getString("col_num").equals(jsonAttr.getString("col_num")) && + row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")) + ) + .collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(lowAttrList)) { + throw new BadRequestException("仓位数据错误,请检查!"); + } + + // 判断是否有货 + JSONObject jsonLow = lowAttrList.get(0); + + if (ObjectUtil.isNotEmpty(jsonLow.getString("storagevehicle_code"))) { + + // 未锁定说明可以移库 + if (jsonLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + result = jsonLow; + } else if (jsonLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库锁"))) { + + allTransactionConsumer.accept(jsonLow.getString("struct_code")); + boolean flag = true; + + // 判断是否是此单据下相同订单、长宽高、物料的木箱 + List disDaoList = iStIvtIostorinvdisService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id) + .eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code")) + ); + + if (ObjectUtil.isNotEmpty(disDaoList)) { + // 不为空说明是此单据下的木箱 + flag = false; + } else { + // 为空:判断此木箱是否有任务 + JSONObject jsonTask = taskService.query("vehicle_code = '" + jsonLow.getString("storagevehicle_code") + "' and task_status <> '07' and is_delete = '0'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonTask)) { + flag = false; + } + + } + + if (flag) { + // 查询移入货位 + JSONObject moveParam = new JSONObject(); + moveParam.put("stor_id", IOSEnum.STOR_ID.code("二期")); + moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId()); + moveParam.put("box_no", jsonLow.getString("storagevehicle_code")); + //根据木箱高度,判断入库仓位的高度、 + String height = ""; + String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); + String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); + // 查询木箱信息 + BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne( + new QueryWrapper().lambda() + .eq(BstIvtBoxinfo::getBox_no, jsonLow.getString("storagevehicle_code")) + ); + + String box_high = boxDao.getBox_high(); + if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) { + height = "('1','2','3')"; + } else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) { + height = "('2','3')"; + } else { + height = "('3')"; + } + moveParam.put("height", height); + moveParam.put("vehicle_type", boxDao.getVehicle_type()); + moveParam.put("move_block_num", jsonLow.getString("block_num")); + + // 查询物料id + StIvtIostorinvdis disDao = iStIvtIostorinvdisService.list( + new QueryWrapper().lambda() + .ne(StIvtIostorinvdis::getWork_status,IOSEnum.BILL_STATUS.code("完成")) + .eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code")) + ).get(0); + + moveParam.put("material_id", disDao.getMaterial_id()); + JSONObject jsonMove = inBussManageService.getOneStruct(moveParam); + + // 查询木箱对应的载具 + JSONObject jsonVeExt = extTab.query("pcsn = '" + jsonLow.getString("storagevehicle_code") + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVeExt)) { + throw new BadRequestException("此木箱没有绑定托盘号!"+jsonLow.getString("storagevehicle_code")); + } + + // 生成任务 + JSONObject jsonTaskParam = new JSONObject(); + jsonTaskParam.put("task_type", "010709"); + jsonTaskParam.put("start_device_code", jsonLow.getString("struct_code")); + jsonTaskParam.put("next_device_code", jsonMove.getString("struct_code")); + jsonTaskParam.put("vehicle_code", jsonLow.getString("storagevehicle_code")); + jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code")); + jsonTaskParam.put("table_fk", iostorinv_id); + + TwoOutExceptionalTask taskBean = new TwoOutExceptionalTask(); + String task_id = taskBean.createTask(jsonTaskParam); + taskBean.immediateNotifyAcs(task_id); + + // 锁定:标记货位为异常并生成异常移库任务 + jsonLow.put("lock_type", IOSEnum.LOCK_TYPE.code("出库异常锁")); + jsonLow.put("task_code", task_id); + attrTab.update(jsonLow); + + // 更新移入货位为出库异常货位 + jsonMove.put("lock_type",IOSEnum.LOCK_TYPE.code("出库异常锁")); + jsonLow.put("task_code", task_id); + attrTab.update(jsonMove); + } + } + + } + return result; + } + /** * 创建任务 * @param taskMangeList:仓位集合 @@ -1375,6 +1629,138 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl taskMangeList,List disLikeList, String point_code, Consumer allTransactionConsumer) { + // 任务表 + WQLObject taskService = WQLObject.getWQLObject("sch_base_task"); + // 点位表 + WQLObject schBasePointService = WQLObject.getWQLObject("sch_base_point"); + // 载具扩展属性表 + WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); + + // 查询异常货位任务集合 + String TaskCodeIn = taskMangeList.stream() + .filter(row -> row.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁"))) + .map(row -> row.getString("task_code")) + .distinct().collect(Collectors.joining("','")); + + List taskList = taskService.query("task_id IN ('" + TaskCodeIn + "') and is_delete = '0'") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 任务组标识 + String task_group_id = IdUtil.getStringId(); + + // 起点 + String start_device_code = ""; + // 是否自动下发 + String is_auto_issue = IOSEnum.IS_SEND.code("是"); + + for (int i = 0; i < taskMangeList.size(); i++) { + JSONObject json = taskMangeList.get(i); + + allTransactionConsumer.accept(json.getString("struct_code")); + + // 确定起点 + start_device_code = json.getString("struct_code"); + + // 确定终点: 根据仓位所在排确定终点 + String end_device_code = IsEndCode(json); + + // 过滤此仓位的分配明细 + List disDaoList = disLikeList.stream() + .filter(row -> row.getString("struct_code").equals(json.getString("struct_code"))) + .map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), StIvtIostorinvdis.class)) + .collect(Collectors.toList()); + + // 判断是否是异常货位 + if (json.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁"))) { + /* + * 判断异常货位上的任务是否完成 + * 完成:生成完成任务的point_code2 当做起点的任务 + * 未完成:只更新分配明细状态为生成 + */ + JSONObject jsonTask = taskList.stream() + .filter(row -> row.getString("task_id").equals(json.getString("task_code"))) + .collect(Collectors.toList()).get(0); + + + // 完成 + if (jsonTask.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) { + start_device_code = jsonTask.getString("point_code2"); + is_auto_issue = IOSEnum.IS_SEND.code("否"); + } else { + // 未完成:只更新分配明细状态不更新任务id + disDaoList.forEach(row -> { + row.setWork_status(IOSEnum.WORK_STATUS.code("生成")); + row.setTask_id(Long.parseLong(task_group_id)); + }); + iStIvtIostorinvdisService.updateBatchById(disDaoList); + + // 标记任务 + jsonTask.put("is_auto_issue",IOSEnum.IS_SEND.code("否")); + taskService.update(jsonTask); + continue; + } + } + + // 查询木箱对应的载具 + JSONObject jsonVeExt = extTab.query("pcsn = '" + json.getString("storagevehicle_code") + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVeExt)) { + throw new BadRequestException("此木箱没有绑定托盘号!"+json.getString("storagevehicle_code")); + } + + // 生成任务 + JSONObject jsonTaskParam = new JSONObject(); + jsonTaskParam.put("task_type", "010711"); + jsonTaskParam.put("point_code1", start_device_code); + jsonTaskParam.put("point_code2", end_device_code); + jsonTaskParam.put("vehicle_code", json.getString("storagevehicle_code")); + jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code")); + jsonTaskParam.put("containerType", json.getString("storagevehicle_type")); + jsonTaskParam.put("task_group_id", task_group_id); + jsonTaskParam.put("is_auto_issue", is_auto_issue); + JSONObject request_param = new JSONObject(); + BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne( + new QueryWrapper().lambda() + .eq(BstIvtBoxinfo::getBox_no, json.getString("storagevehicle_code")) + ); + request_param.put("containerType", boxDao.getVehicle_type()); + jsonTaskParam.put("request_param", request_param); + jsonTaskParam.put("table_fk", disDaoList.get(0).getIostorinv_id().toString()); + + if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")) || + json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) + { + jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("浅"))); + } else { + jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("深"))); + } + jsonTaskParam.put("request_param", jsonTaskParam); + + TwoOutTask twoOutTask = new TwoOutTask(); + String task_id = twoOutTask.createTask(jsonTaskParam); + + // 更新分配明细 + JSONObject jsonPoint = schBasePointService.query("point_code = '" + end_device_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPoint)) { + throw new BadRequestException("出库点位不存在:"+end_device_code); + } + + disDaoList.forEach(row -> { + row.setWork_status(IOSEnum.WORK_STATUS.code("生成")); + row.setTask_id(Long.parseLong(task_id)); + row.setPoint_id(jsonPoint.getLongValue("point_id")); + }); + iStIvtIostorinvdisService.updateBatchById(disDaoList); + } + } + /** * 确定终点:根据仓位所在排确定终点 * @param structDao:仓位对象 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java index 32ade0fd9..fe859dca0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java @@ -33,6 +33,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -479,4 +480,151 @@ public class OutBussManageServiceImpl implements OutBussManageService { } } + + @Override + public void createMove2(List list, Consumer allTransactionConsumer) { + //子卷包装关系表 + WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); + + //物料表 + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + // 载具扩展属性表 + WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); + + // 获取子卷包装集合 + String vehilcle_in = list.stream() + .map(row -> row.getString("storagevehicle_code")) + .collect(Collectors.joining("','")); + + List subList = subTab.query("package_box_sn IN ('" + vehilcle_in + "')") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 查询物料集合 + String materialCode_in = subList.stream() + .map(row -> row.getString("product_name")) + .collect(Collectors.joining("','")); + + List materList = materTab.query("material_code IN ('" + materialCode_in + "')") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + + for (int i = 0; i < list.size(); i++) { + JSONObject json = list.get(i); + + allTransactionConsumer.accept(json.getString("struct_code")); + + // 生成移库单传入参数 + JSONObject mapParam = new JSONObject(); + // 明细参数 + JSONArray table = new JSONArray(); + + mapParam.put("bill_type", IOSEnum.MOVE_TYPE.code("出库移库")); + mapParam.put("buss_type", IOSEnum.MOVE_TYPE.code("出库移库")); + mapParam.put("bill_status", IOSEnum.MOVE_STATUS.code("提交")); + mapParam.put("biz_date", DateUtil.today()); + mapParam.put("stor_code", json.getString("stor_code")); + mapParam.put("stor_id", json.getString("stor_id")); + mapParam.put("stor_name", json.getString("stor_name")); + mapParam.put("is_task", IOSEnum.IS_NOTANDYES.code("是")); + + // 过滤对应物料 + JSONObject jsonSub = subList.stream() + .filter(row -> row.getString("package_box_sn").equals(json.getString("storagevehicle_code"))) + .collect(Collectors.toList()).get(0); + + JSONObject jsonMater = materList.stream() + .filter(row -> row.getString("material_code").equals(jsonSub.getString("product_name"))) + .collect(Collectors.toList()).get(0); + + // 查询移入货位 + JSONObject moveParam = new JSONObject(); + moveParam.put("stor_id", json.getString("stor_id")); + moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId()); + moveParam.put("box_no", json.getString("storagevehicle_code")); + moveParam.put("material_id", jsonMater.getString("material_id")); + //根据木箱高度,判断入库仓位的高度、 + String height = ""; + String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); + String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); + // 查询木箱信息 + BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne( + new QueryWrapper().lambda() + .eq(BstIvtBoxinfo::getBox_no, json.getString("storagevehicle_code")) + ); + + String box_high = boxDao.getBox_high(); + if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) { + height = "('1','2','3')"; + } else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) { + height = "('2','3')"; + } else { + height = "('3')"; + } + moveParam.put("height", height); + moveParam.put("vehicle_type", boxDao.getVehicle_type()); + // 移库巷道 + moveParam.put("move_block_num",json.getString("block_num")); + + JSONObject jsonMove = inBussManageService.getOneStruct(moveParam); + + // 查询移出货位的库存物料 + JSONObject jsonMoveIvt = WQL.getWO("ST_OUTIVT03") + .addParam("flag", "6") + .addParam("struct_id", json.getString("struct_id")) + .process().uniqueResult(0); + + // 移库单明细 + JSONObject jsonMoveDtl = new JSONObject(); + jsonMoveDtl.put("is_task", "2"); + jsonMoveDtl.put("turnout_sect_id", json.getLongValue("sect_id")); + jsonMoveDtl.put("turnout_sect_code", json.getString("sect_code")); + jsonMoveDtl.put("turnout_sect_name", json.getString("sect_name")); + jsonMoveDtl.put("turnout_struct_id", json.getLongValue("struct_id")); + jsonMoveDtl.put("turnout_struct_code", json.getString("struct_code")); + jsonMoveDtl.put("turnout_struct_name", json.getString("struct_name")); + jsonMoveDtl.put("material_id", jsonMoveIvt.getLongValue("material_id")); + jsonMoveDtl.put("pcsn", jsonMoveIvt.getString("pcsn")); + jsonMoveDtl.put("quality_scode", IOSEnum.QUALITY_SCODE.code("合格品")); + jsonMoveDtl.put("qty_unit_id", jsonMoveIvt.getLongValue("qty_unit_id")); + jsonMoveDtl.put("qty_unit_name", jsonMoveIvt.getString("unit_name")); + jsonMoveDtl.put("qty", jsonMoveIvt.getDoubleValue("canuse_qty")); + jsonMoveDtl.put("storagevehicle_code", json.getString("storagevehicle_code")); + jsonMoveDtl.put("turnin_sect_id", jsonMove.getLongValue("sect_id")); + jsonMoveDtl.put("turnin_sect_code", jsonMove.getString("sect_code")); + jsonMoveDtl.put("turnin_sect_name", jsonMove.getString("sect_name")); + jsonMoveDtl.put("turnin_struct_id", jsonMove.getLongValue("struct_id")); + jsonMoveDtl.put("turnin_struct_code", jsonMove.getString("struct_code")); + jsonMoveDtl.put("turnin_struct_name", jsonMove.getString("struct_name")); + + // 查询木箱对应的载具 + JSONObject jsonVeExt = extTab.query("pcsn = '" + json.getString("storagevehicle_code") + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVeExt)) { + throw new BadRequestException("此木箱没有绑定托盘号!"+json.getString("storagevehicle_code")); + } + + // 生成任务 + JSONObject param2 = new JSONObject(); + param2.put("task_type", "010709"); + param2.put("vehicle_code", json.getString("storagevehicle_code")); + param2.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code")); + param2.put("point_code1", json.getString("struct_code")); + param2.put("point_code2", jsonMove.getString("struct_code")); + + HandMoveStorAcsTask handMoveStorAcsTask = new HandMoveStorAcsTask(); + String move_task_id = handMoveStorAcsTask.createTask(param2); + + // 回显移库明细任务id + jsonMoveDtl.put("task_id", move_task_id); + table.add(jsonMoveDtl); + + mapParam.put("tableData", table); + // 调用移库单新增方法 + handMoveStorService.insertDtl2(mapParam); + + // 下发任务 + handMoveStorAcsTask.immediateNotifyAcs(null); + } + + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/OutBussManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/OutBussManageService.java index a58056bce..8c5926b29 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/OutBussManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/OutBussManageService.java @@ -7,6 +7,7 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; /** *

@@ -66,4 +67,10 @@ public interface OutBussManageService { */ void createMove(List list); + /** + * 创建移库单 + * @param list 需要创建移库单的仓位 + */ + void createMove2(List list, Consumer allTransactionConsumer); + }