From 3c7f4495da87a3506a886300aa525821f5dff1e1 Mon Sep 17 00:00:00 2001 From: liuxy Date: Fri, 26 Jan 2024 09:55:09 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E7=A9=BA=E6=89=98=E7=9B=98?= =?UTF-8?q?=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/b_lms/sch/tasks/TwoInEmpTask.java | 185 ++++++++ .../impl/StIvtIostorinvServiceImpl.java | 14 +- .../util/impl/InBussManageServiceImpl.java | 32 +- .../util/impl/VehicleManageServiceImpl.java | 422 ++++++++++++++++++ .../util/service/InBussManageService.java | 1 + .../util/service/VehicleManageService.java | 26 ++ .../service/iostorInv/util/wql/BST_INRULE.wql | 10 +- .../iostorInv/util/wql/BST_INVEHICLE.wql | 173 +++++++ .../src/main/java/org/nl/start/Init.java | 134 +++++- .../java/org/nl/wms/basedata/st/wql/stivt.xls | Bin 325120 -> 325632 bytes .../nl/wms/pda/mps/eum/RegionTypeEnum.java | 3 +- .../outbill/rest/CheckOutBillController.java | 11 + 12 files changed, 992 insertions(+), 19 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoInEmpTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/VehicleManageServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/VehicleManageService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INVEHICLE.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoInEmpTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoInEmpTask.java new file mode 100644 index 000000000..7336bbf89 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoInEmpTask.java @@ -0,0 +1,185 @@ +package org.nl.b_lms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvdisServiceImpl; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * 二期空托盘入库任务类 + * Created by Lxy on 2024/1/19. + */ +public class TwoInEmpTask extends AbstractAcsTask { + + /** + * 处理类 + */ + private final String THIS_CLASS = TwoInEmpTask.class.getName(); + + @Override + public List addTask() { + /* + * 下发给ACS时需要特殊处理 + */ + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + + ArrayList resultList = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + + char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1); + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .priority(json.getString("priority")) + .class_type(json.getString("task_type")) + .dtl_type(String.valueOf(dtl_type)) + .remark(json.getString("remark")) + .build(); + resultList.add(dto); + } + return resultList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + + // 仓位表 + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + + // 更新任务的参数 + JSONObject map = new JSONObject(); + + /* + * 1-执行中, 2-完成 ,0-acs取消 + */ + // 执行中 + if (status.equals(TaskStatusEnum.EXECUTING.getCode())) { + + map.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + } + + // 完成 + if (status.equals(TaskStatusEnum.FINISHED.getCode())) { + + map.put("task_status", TaskStatusEnum.FINISHED.getCode()); + + // 更新仓位 + JSONObject jsonAttr = attrTab.query("struct_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); + jsonAttr.put("lock_type",IOSEnum.LOCK_TYPE.code("未锁定")); + jsonAttr.put("storagevehicle_code",taskObj.getString("vehicle_code")); + jsonAttr.put("storagevehicle_type",taskObj.getString("vehicle_type")); + attrTab.update(jsonAttr); + } + + // 取消 + if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + + if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) { + throw new BadRequestException("任务已执行不能取消"); + } + + // 更新任务表删除字段 + map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是")); + + // 解锁仓位 + JSONObject jsonAttr = attrTab.query("struct_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); + jsonAttr.put("lock_type",IOSEnum.LOCK_TYPE.code("未锁定")); + attrTab.update(jsonAttr); + } + + map.put("update_optid", SecurityUtils.getCurrentUserId()); + map.put("update_optname", SecurityUtils.getCurrentNickName()); + map.put("update_time", DateUtil.now()); + + WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); + } + + @Override + public void findStartPoint() { + + } + + @Override + public void findNextPoint() { + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject form) { + + if (StrUtil.isBlank(form.getString("task_type"))) { + throw new BadRequestException("业务类型不能为空!"); + } + + if (StrUtil.isBlank(form.getString("start_device_code"))) { + throw new BadRequestException("起点不能为空!"); + } + + if (StrUtil.isBlank(form.getString("next_device_code"))) { + throw new BadRequestException("终点不能为空!"); + } + + if (StrUtil.isBlank(form.getString("vehicle_code"))) { + throw new BadRequestException("托盘号不能为空!"); + } + + if (StrUtil.isBlank(form.getString("vehicle_type"))) { + throw new BadRequestException("托盘类型不能为空!"); + } + + JSONObject json = new JSONObject(); + json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); + json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); + json.put("task_type", form.getString("task_type")); + json.put("vehicle_code", form.getString("vehicle_code")); + json.put("vehicle_type", form.getString("vehicle_type")); + json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + json.put("point_code1", form.getString("start_device_code")); + json.put("point_code2", form.getString("next_device_code")); + json.put("handle_class", this.getClass().getName()); + json.put("create_id", SecurityUtils.getCurrentUserId()); + json.put("create_name", SecurityUtils.getCurrentUsername()); + json.put("create_time", DateUtil.now()); + json.put("priority", "1"); + json.put("acs_task_type", "7"); + + WQLObject.getWQLObject("SCH_BASE_Task").insert(json); + return json.getString("task_id"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void cancel(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, IOSEnum.ACS_RESULT.code("取消")); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java index 63866d33f..8c648b47e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java @@ -789,11 +789,17 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl row.getTask_id().toString()) - .collect(Collectors.joining("','")); + List needUpdateTaskList = new ArrayList<>(); - taskTab.update(jsonTaskParam,"task_id IN ('"+task_id_in+"') AND task_status <> '"+TaskStatusEnum.FINISHED.getCode()+"'"); + for (int i = 0; i < disDaoList.size(); i++) { + StIvtIostorinvdis disDao = disDaoList.get(i); + if (disDao.getTask_id() != null) { + + needUpdateTaskList.add(disDao.getTask_id().toString()); + } + } + + taskTab.update(jsonTaskParam,"task_id IN ('"+String.join("','", needUpdateTaskList)+"') AND task_status <> '"+TaskStatusEnum.FINISHED.getCode()+"'"); // 更新子卷包装关系 String pcsn_in = disDaoList.stream() diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java index c91e6c4a7..717d46258 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java @@ -30,7 +30,12 @@ public class InBussManageServiceImpl implements InBussManageService { /** * 不需要查询的排集合 */ - private List notInRowList; + private List notInRowList = new ArrayList<>(); + + /** + * 不需要查询的巷道集合 + */ + private List notInBlockList = new ArrayList<>(); @Override @Transactional @@ -97,7 +102,7 @@ public class InBussManageServiceImpl implements InBussManageService { String block_num = getMinBlock(jsonSub); /* - * 确定哪排:确定哪排:查看每排相同木箱规格等 的数量,找到数量最小的那排 + * 确定哪排:查看每排相同木箱规格等 的数量,找到数量最小的那排 */ jsonSub.put("block_num",block_num); String row_num = getMinRow(jsonSub); @@ -112,7 +117,10 @@ public class InBussManageServiceImpl implements InBussManageService { if (ObjectUtil.isEmpty(jsonAttr)) { jsonSub.put("flag", "1"); - jsonSub.put("not_block", jsonSub.getString("block_num")); + notInBlockList.add(jsonSub.getString("block_num")); + + String join = "('" + String.join("','", notInBlockList) + "')"; + jsonSub.put("not_block", join); List blockList = WQL.getWO("BST_INRULE").addParamMap(jsonSub) .process().getResultJSONArray(0).toJavaList(JSONObject.class); @@ -259,7 +267,7 @@ public class InBussManageServiceImpl implements InBussManageService { .process().getResultJSONArray(0).toJavaList(JSONObject.class); /* - * 查询所属排的所有木箱 + * 查询所属排的所有托盘 */ String row_in = rowList.stream() .map(row -> row.getString("row_num")) @@ -273,7 +281,9 @@ public class InBussManageServiceImpl implements InBussManageService { // 为空说明没有木箱,返回最小排 if (ObjectUtil.isEmpty(boxAllList)) { - return rowList.get(0).getString("row_num"); + if (ObjectUtil.isNotEmpty(rowList)) { + return rowList.get(0).getString("row_num"); + } } // 不区分木箱规格:最小木箱数的排 @@ -405,6 +415,7 @@ public class InBussManageServiceImpl implements InBussManageService { if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) { // 无需深度 jsonAttr = json; + break; } else if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) { /* * 深货位:判断浅是否阻挡 @@ -417,7 +428,7 @@ public class InBussManageServiceImpl implements InBussManageService { .collect(Collectors.toList()); if (ObjectUtil.isEmpty(lowAttr) || lowAttr.size() != 1) { - throw new BadRequestException("仓位:" + json.getString("stor_code") + "对应的浅货位错误!"); + throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的浅货位错误!"); } // 判断是否有木箱 @@ -425,6 +436,7 @@ public class InBussManageServiceImpl implements InBussManageService { if (ObjectUtil.isEmpty(jsonAttrLow.getString("storagevehicle_code")) && jsonAttrLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { // 没有木箱 jsonAttr = json; + break; } else { continue; } @@ -440,7 +452,7 @@ public class InBussManageServiceImpl implements InBussManageService { .collect(Collectors.toList()); if (ObjectUtil.isEmpty(darkAttr) || darkAttr.size() != 1) { - throw new BadRequestException("仓位:" + json.getString("stor_code") + "对应的深货位错误!"); + throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的深货位错误!"); } // 判断是否有木箱 @@ -450,11 +462,17 @@ public class InBussManageServiceImpl implements InBussManageService { if (jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { jsonAttr = json; + break; + } else { + continue; } } else { if (jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { jsonAttr = jsonAttrDark; + break; + } else { + continue; } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/VehicleManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/VehicleManageServiceImpl.java new file mode 100644 index 000000000..59635cd25 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/VehicleManageServiceImpl.java @@ -0,0 +1,422 @@ +package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.b_lms.sch.tasks.TwoInEmpTask; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.VehicleManageService; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.pda.mps.eum.RegionTypeEnum; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 空载具业务处理 服务实现类 + *

+ * + * @author generator + * @since 2023-11-10 + */ +@Service +public class VehicleManageServiceImpl implements VehicleManageService { + + /** + * 不需要查询的排集合 + */ + private List notInRowList = new ArrayList<>(); + + /** + * 不需要查询的巷道集合 + */ + private List notInBlockList = new ArrayList<>(); + + @Override + @Transactional + public void inVehicle(JSONObject whereJson) { + // 点位表 + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + // 仓位表 + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + + // 判断起点点位是否存在 + JSONObject jsonPoint = pointTab.query("point_code = '" + whereJson.getString("device_code") + "' AND is_delete = '" + + IOSEnum.IS_NOTANDYES.code("否") + "' AND is_used = '" + + IOSEnum.IS_NOTANDYES.code("是") + "'") + .uniqueResult(0); + + if (ObjectUtil.isEmpty(jsonPoint)) { + throw new BadRequestException("起始点位不存在或未启用!"); + } + + // 找一个托盘区的空仓位 + JSONObject jsonParam = new JSONObject(); + jsonParam.put("stor_id", IOSEnum.STOR_ID.code("二期")); + jsonParam.put("sect_id", RegionTypeEnum.TWO_TTP01.getId()); + jsonParam.put("vehicle_type", whereJson.getString("vehicle_type")); + + JSONObject jsonAttr = getStruct(jsonParam); + + if (ObjectUtil.isEmpty(jsonAttr)) { + throw new BadRequestException("仓位不足!"); + } + + // 生成任务 + JSONObject jsonTaskParam = new JSONObject(); + jsonTaskParam.put("task_type", "010502"); + jsonTaskParam.put("start_device_code", whereJson.getString("device_code")); + jsonTaskParam.put("next_device_code", jsonAttr.getString("struct_code")); + jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code")); + jsonTaskParam.put("vehicle_type", whereJson.getString("vehicle_type")); + + TwoInEmpTask taskBean = new TwoInEmpTask(); + taskBean.createTask(jsonTaskParam); + + taskBean.immediateNotifyAcs(null); + + // 锁定终点 + jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("空托盘入库锁")); + attrTab.update(jsonAttr); + } + + /** + * 找一个空仓位(空托盘区) + * @param jsonParam { + * stor_id: 仓库标识 + * sect_id: 库区标识 + * } + * @return JSONObject : 仓位对象 + */ + private JSONObject getStruct(JSONObject jsonParam) { + // 仓位表 + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + + /* + * 判断是否有仓位 + * 判断条件:库区、仓库、是否启用、是否删除、未锁定、没有载具 + */ + JSONArray structArray = attrTab.query("IFNULL(storagevehicle_code,'') = '' " + + "AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " + + "AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '"+jsonParam.getString("stor_id")+"' " + + "AND sect_id = '"+jsonParam.getString("sect_id")+"'").getResultJSONArray(0); + + if (ObjectUtil.isEmpty(structArray)) { + throw new BadRequestException("仓位不足!"); + } + + // 确定巷道:查看每个巷道最小托盘数的巷道,获取最小托盘数的想到 + String block_num = getMinBlock(jsonParam); + + // 确定排:查看每排的载具数量,找到数量最小的那排 + jsonParam.put("block_num",block_num); + String row_num = getMinRow(jsonParam); + + // 确定仓位: 找到相同托盘类型的伸位 + jsonParam.put("row_num",row_num); + JSONObject jsonAttr = queryStruct(jsonParam); + + // 为空则新找巷道 + if (ObjectUtil.isEmpty(jsonAttr)) { + + jsonParam.put("flag", "1"); + notInBlockList.add(jsonParam.getString("block_num")); + + String join = "('" + String.join("','", notInBlockList) + "')"; + jsonParam.put("not_block", join); + jsonParam.put("storagevehicle_type", jsonParam.getString("vehicle_type")); + + List blockList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + for (int i = 0; i < blockList.size(); i++) { + JSONObject json = blockList.get(i); + json.put("stor_id", jsonParam.getString("stor_id")); + json.put("sect_id", jsonParam.getString("sect_id")); + json.put("vehicle_type", jsonParam.getString("vehicle_type")); + + String row_num_2 = getMinRow(json); + json.put("row_num",row_num_2); + JSONObject jsonAttr_2 = queryStruct(json); + + if (ObjectUtil.isNotEmpty(jsonAttr_2)) { + jsonAttr = jsonAttr_2; + } else { + continue; + } + } + } + return jsonAttr; + } + + /** + * 确定巷道 + * @param jsonParam { + * stor_id: 仓库标识 + * sect_id: 库区标识 + * } + * @return String 巷道 + */ + private String getMinBlock(JSONObject jsonParam) { + + jsonParam.put("flag", "1"); + + // 获取仓库、库区有空位的巷道 + List blockList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + /* + * 查询所属巷道所有托盘 + */ + String block_in = blockList.stream() + .map(row -> row.getString("block_num")) + .collect(Collectors.joining("','")); + + jsonParam.put("flag", "2"); + jsonParam.put("block_in", "('"+block_in+"')"); + + List boxAllList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + // 为空说明没有托盘,返回最小巷道 + if (ObjectUtil.isEmpty(boxAllList)) { + return blockList.get(0).getString("block_num"); + } + + // 计算每个巷道的托盘数 + ArrayList blockBoxList = new ArrayList<>(); + + for (int i = 0; i < blockList.size(); i++) { + JSONObject jsonBlock = blockList.get(i); + + List box_num = boxAllList.stream() + .filter(row -> row.getString("block_num").equals(jsonBlock.getString("block_num"))) + .collect(Collectors.toList()); + + jsonBlock.put("box_num", String.valueOf(box_num.size())); + blockBoxList.add(jsonBlock); + } + + // 最小托盘数的巷道 + List boxNumList = blockBoxList.stream() + .sorted(Comparator.comparing(row -> row.getString("box_num"))) + .collect(Collectors.toList()); + + return boxNumList.get(0).getString("block_num"); + + } + + /** + * 获取最小排 + * @param jsonParam { + * stor_id: 仓库标识 + * sect_id: 库区标识 + * block_num: 巷道 + * } + * @return String: 排 + */ + private String getMinRow(JSONObject jsonParam) { + + jsonParam.put("flag", "3"); + + // 获取此仓库、库区、巷道 有空位的排 + List rowList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + /* + * 查询所属排的所有托盘号 + */ + String row_in = rowList.stream() + .map(row -> row.getString("row_num")) + .collect(Collectors.joining("','")); + + jsonParam.put("flag", "2"); + jsonParam.put("row_in", "('"+row_in+"')"); + + List boxAllList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + // 为空说明没有托盘,返回最小排 + if (ObjectUtil.isEmpty(boxAllList)) { + if (ObjectUtil.isNotEmpty(rowList)) { + return rowList.get(0).getString("row_num"); + } + } + + // 计算最小排的托盘 + ArrayList rowkBoxList = new ArrayList<>(); + + for (int i = 0; i < rowList.size(); i++) { + JSONObject jsonRow = rowList.get(i); + + List box_num = boxAllList.stream() + .filter(row -> row.getString("row_num").equals(jsonRow.getString("row_num"))) + .collect(Collectors.toList()); + + jsonRow.put("box_num", String.valueOf(box_num.size())); + rowkBoxList.add(jsonRow); + } + + // 最小木箱数的排 + List boxNumList = rowkBoxList.stream() + .sorted(Comparator.comparing(row -> row.getString("box_num"))) + .collect(Collectors.toList()); + + String row_num = ""; + + if (ObjectUtil.isNotEmpty(boxNumList)) { + row_num = boxNumList.get(0).getString("row_num"); + } + return row_num; + } + + /** + * 确定仓位 + * @param jsonParam { + * stor_id: 仓库标识 + * sect_id: 库区标识 + * block_num: 巷道 + * row_num: 排 + * } + * @return JSONObject: 仓位 + */ + private JSONObject queryStruct(JSONObject jsonParam) { + + JSONObject jsonAttr = getStructOne(jsonParam); + + // 为空找此巷道新的一排 + if (ObjectUtil.isEmpty(jsonAttr)) { + notInRowList.add(jsonParam.getString("row_num")); + + if (ObjectUtil.isEmpty(jsonParam.getString("row_num"))) { + return null; + } + + String join = "('" + String.join("','", notInRowList) + "')"; + jsonParam.put("not_row_in", join); + + // 新的一排 + String row_num_new = this.getMinRow(jsonParam); + jsonParam.put("row_num",row_num_new); + + jsonAttr = this.getStruct(jsonParam); + } + return jsonAttr; + } + + /** + * 获取一个货位公共方法 + * @param jsonParam { + * sect_id:库区 + * stor_id:仓库 + * block_num: 巷道 + * row_num :排 + * } + * @return JSONObject : 仓位 + */ + private JSONObject getStructOne(JSONObject jsonParam) { + + // 获取此仓库、库区、巷道、排的所有空位 根据列、层、深度排序 + jsonParam.put("flag", "4"); + + List rowStructList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + // 获取此仓库、库区、巷道、排的所有仓位 + jsonParam.put("flag", "5"); + + List structAllList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + // 需要返回的仓位 + JSONObject jsonAttr = new JSONObject(); + + for (int i = 0; i < rowStructList.size(); i++) { + JSONObject json = rowStructList.get(i); + + // 判断伸位 + if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) { + // 无需深度 + jsonAttr = json; + break; + + } else if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) { + /* + * 深货位:判断浅货位是否被锁定 + */ + + // 获取此货位对应的浅货位 + List lowAttr = structAllList.stream() + .filter(row -> row.getString("col_num").equals(json.getString("col_num")) && + row.getString("layer_num").equals(json.getString("layer_num")) && + row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) + .collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(lowAttr) || lowAttr.size() != 1) { + throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的浅货位错误!"); + } + + // 判断是否被锁定 + JSONObject jsonAttrLow = lowAttr.get(0); + + if (ObjectUtil.isEmpty(jsonAttrLow.getString("storagevehicle_code")) && jsonAttrLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + // 没有载具和被锁定 + jsonAttr = json; + break; + } else { + continue; + } + + } else if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) { + /* + * 浅货位:判断深货位是否空洞,是否是相同类型的托盘 + */ + // 获取此货位对应的深货位 + List darkAttr = structAllList.stream() + .filter(row -> row.getString("col_num").equals(json.getString("col_num")) && + row.getString("layer_num").equals(json.getString("layer_num")) && + row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) + .collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(darkAttr) || darkAttr.size() != 1) { + throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的深货位错误!"); + } + + // 判断是否有托盘 + JSONObject jsonAttrDark = darkAttr.get(0); + + if (ObjectUtil.isNotEmpty(jsonAttrDark.getString("storagevehicle_code"))) { + + if (jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + + if (jsonAttrDark.getString("storagevehicle_type").equals(jsonParam.getString("vehicle_type"))) { + jsonAttr = json; + break; + } else { + continue; + } + } else { + continue; + } + + } else { + if (jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + jsonAttr = jsonAttrDark; + break; + } else { + continue; + } + } + + } + } + return jsonAttr; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java index 92396d259..e13fe5b0f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java @@ -42,4 +42,5 @@ public interface InBussManageService { * @return JSONObject 仓位对象 */ JSONObject getOneStruct(JSONObject jsonObject); + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/VehicleManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/VehicleManageService.java new file mode 100644 index 000000000..6e31452e4 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/VehicleManageService.java @@ -0,0 +1,26 @@ +package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service; + +import com.alibaba.fastjson.JSONObject; + +/** + *

+ * 空载具业务处理 服务类 + *

+ * + * @author generator + * @since 2023-11-16 + */ +public interface VehicleManageService { + + /** + * 入空载具 + * @param whereJson { + * device_code:起点 + * vehicle_code: 载具编码 + * vehicle_type: 托盘类型 + * } + */ + void inVehicle(JSONObject whereJson); + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INRULE.wql b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INRULE.wql index feec57f82..ca0bc7b13 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INRULE.wql +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INRULE.wql @@ -27,7 +27,7 @@ 输入.block_num TYPEAS s_string 输入.row_num TYPEAS s_string 输入.not_row_in TYPEAS f_string - 输入.not_block TYPEAS s_string + 输入.not_block TYPEAS f_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -65,13 +65,13 @@ AND attr.stor_id = 输入.stor_id AND attr.sect_id = 输入.sect_id + OPTION 输入.not_block <> "" + attr.block_num NOT IN 输入.not_block + ENDOPTION + group by attr.block_num order by attr.block_num - OPTION 输入.not_block <> "" - attr.block_num <> 输入.not_block - ENDOPTION - ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INVEHICLE.wql b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INVEHICLE.wql new file mode 100644 index 000000000..cb8dac055 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INVEHICLE.wql @@ -0,0 +1,173 @@ +[交易说明] + 交易名: 载具入库逻辑 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.stor_id TYPEAS s_string + 输入.sect_id TYPEAS s_string + 输入.block_num TYPEAS s_string + 输入.row_num TYPEAS s_string + 输入.block_in TYPEAS f_string + 输入.row_in TYPEAS f_string + 输入.not_row_in TYPEAS f_string + 输入.not_block TYPEAS f_string + 输入.storagevehicle_type TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + attr.block_num + FROM + st_ivt_structattr attr + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.lock_type = '1' + AND IFNULL(attr.storagevehicle_code,'') = '' + AND attr.stor_id = 输入.stor_id + AND attr.sect_id = 输入.sect_id + + OPTION 输入.not_block <> "" + attr.block_num NOT IN 输入.not_block + ENDOPTION + + OPTION 输入.storagevehicle_type <> "" + attr.storagevehicle_type = 输入.storagevehicle_type + ENDOPTION + + group by attr.block_num + order by attr.block_num + + + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + attr.* + FROM + st_ivt_structattr attr + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.stor_id = 输入.stor_id + AND attr.sect_id = 输入.sect_id + AND IFNULL(attr.storagevehicle_code,'') <> '' + + OPTION 输入.block_in <> "" + attr.block_num in 输入.block_in + ENDOPTION + + OPTION 输入.row_in <> "" + attr.row_num in 输入.row_in + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + attr.row_num + FROM + st_ivt_structattr attr + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.lock_type = '1' + AND IFNULL(attr.storagevehicle_code,'') = '' + AND attr.stor_id = 输入.stor_id + AND attr.sect_id = 输入.sect_id + + OPTION 输入.block_num <> "" + attr.block_num = 输入.block_num + ENDOPTION + + OPTION 输入.not_row_in <> "" + attr.row_num NOT IN 输入.not_row_in + ENDOPTION + + group by attr.row_num + order by attr.row_num + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + attr.* + FROM + st_ivt_structattr attr + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.lock_type = '1' + AND IFNULL(attr.storagevehicle_code,'') = '' + AND attr.stor_id = 输入.stor_id + AND attr.sect_id = 输入.sect_id + AND attr.block_num = 输入.block_num + AND attr.row_num = 输入.row_num + + order by attr.col_num,attr.layer_num ASC,attr.zdepth DESC + + ENDSELECT + ENDQUERY + ENDIF + + + IF 输入.flag = "5" + QUERY + SELECT + attr.* + FROM + st_ivt_structattr attr + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.stor_id = 输入.stor_id + AND attr.sect_id = 输入.sect_id + AND attr.block_num = 输入.block_num + AND attr.row_num = 输入.row_num + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/start/Init.java b/lms/nladmin-system/src/main/java/org/nl/start/Init.java index 8b69f8c17..00813ad7e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/start/Init.java +++ b/lms/nladmin-system/src/main/java/org/nl/start/Init.java @@ -1,7 +1,12 @@ package org.nl.start; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONObject; +import com.sun.org.apache.bcel.internal.generic.GETSTATIC; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.modules.wql.core.bean.WQLObject; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @@ -15,7 +20,132 @@ import org.springframework.stereotype.Component; public class Init implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { - /* WQLObject tab = WQLObject.getWQLObject("ST_IVT_StructAttr"); +// initTwoAttr(4,30,3,2, "2"); + } + + /** + * 初始化二期仓位 + */ + private void initTwoAttr(int row_num, int col_num, int layer_num, int block_num, String zdepth) { + + WQLObject tab = WQLObject.getWQLObject("ST_IVT_StructAttr"); + WQLObject tab2 = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + WQLObject tab3 = WQLObject.getWQLObject("st_ivt_sectattr"); + WQLObject tab4 = WQLObject.getWQLObject("sch_base_point"); + + for (int j = 1; j < layer_num + 1; j++) { + + // 层 + String layer_code = String.valueOf(j); + String layer_name = String.valueOf(j); + if (j < 10) { + layer_code = "0" + j ; + layer_name = "0" + j + "层"; + } else { + layer_code = j + "" ; + layer_name = j + "层"; + } + + // 区 + String block_code = block_num + "0"+zdepth; + String block_name = block_num + "0"+zdepth + "区"; + + for (int i = 1; i < col_num + 1; i++) { + JSONObject json = new JSONObject(); + json.put("struct_id", IdUtil.getSnowflake(1, 1).nextId()); + + // 排 + String row_code = String.valueOf(row_num); + String row_name = String.valueOf(row_num); + if (row_num <= 10) { + row_code = "0" + String.valueOf(row_num) + "-"; + row_name = "0" + String.valueOf(row_num) + "排"; + } else { + row_code = String.valueOf(row_num) + "-"; + row_name = String.valueOf(row_num) + "排"; + } + + // 列 + String col_code = String.valueOf(i); + String col_name = String.valueOf(i); + if (i < 10) { + col_code = "0" + i + "-"; + col_name = "0" + i + "列"; + } else { + col_code = i + "-"; + col_name = i + "列"; + } + + JSONObject jsonObject = tab2.query("stor_id = '1582991156504039455'").uniqueResult(0); + JSONObject jsonObjec2 = tab3.query("stor_id = '1582991156504039455' and sect_code = 'BZC01'").uniqueResult(0); + + // 新增仓位 + json.put("sect_id", jsonObjec2.getString("sect_id")); + json.put("sect_code", jsonObjec2.getString("sect_code")); + json.put("sect_name", jsonObjec2.getString("sect_name")); + json.put("stor_id", jsonObject.getString("stor_id")); + json.put("stor_code", jsonObject.getString("stor_code")); + json.put("stor_name", jsonObject.getString("stor_name")); + json.put("lock_type", "1"); + + json.put("row_num", row_num); + json.put("col_num", i); + json.put("layer_num", j); + json.put("block_num", block_num); + + json.put("struct_code","B"+ block_code + row_code + col_code+ layer_code); + json.put("struct_name","B"+ block_name + row_name + col_name+ layer_name); + json.put("simple_name",json.getString("struct_name")); + + json.put("in_order_seq", i); + json.put("out_order_seq", i); + json.put("in_empty_seq", i); + json.put("out_empty_seq", i); + json.put("zdepth", Integer.valueOf(zdepth)); + + json.put("create_id", "1"); + json.put("create_name", "管理员"); + json.put("create_time", DateUtil.now()); + json.put("material_height_type", 1); + tab.insert(json); + + // 新增点位 + JSONObject jsonPoint = new JSONObject(); + jsonPoint.put("point_id",IdUtil.getSnowflake(1,1).nextId()); + jsonPoint.put("point_code", json.getString("struct_code")); + jsonPoint.put("point_name", json.getString("struct_name")); + jsonPoint.put("region_id", json.getString("sect_id")); + jsonPoint.put("region_code", json.getString("sect_code")); + jsonPoint.put("region_name", json.getString("sect_name")); + jsonPoint.put("point_type", "2"); + jsonPoint.put("point_status", "1"); + jsonPoint.put("lock_type", "1"); + jsonPoint.put("vehicle_max_qty", 0); + jsonPoint.put("vehicle_qty", 0); + jsonPoint.put("block_num", json.getBigDecimal("block_num")); + jsonPoint.put("row_num", json.getBigDecimal("row_num")); + jsonPoint.put("col_num", json.getBigDecimal("col_num")); + jsonPoint.put("layer_num", json.getBigDecimal("layer_num")); + jsonPoint.put("in_order_seq", i); + jsonPoint.put("out_order_seq", i); + jsonPoint.put("in_empty_seq", i); + jsonPoint.put("out_empty_seq", i); + jsonPoint.put("is_have_workder", "0"); + jsonPoint.put("is_used", "1"); + jsonPoint.put("source_id", json.get("struct_id")); + jsonPoint.put("is_delete", "0"); + jsonPoint.put("create_id", "1"); + jsonPoint.put("create_name", "管理员"); + jsonPoint.put("create_time", DateUtil.now()); + tab4.insert(jsonPoint); + + } + + } + } + + private void createAttr() { + WQLObject tab = WQLObject.getWQLObject("ST_IVT_StructAttr"); WQLObject tab2 = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); WQLObject tab3 = WQLObject.getWQLObject("st_ivt_sectattr"); WQLObject tab4 = WQLObject.getWQLObject("sch_base_point"); @@ -98,7 +228,7 @@ public class Init implements ApplicationRunner { tab4.insert(jsonPoint); } - System.out.println("项目启动成功!");*/ + System.out.println("项目启动成功!"); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls index 422f1ef4ba15ae4871c21b789aed0e71f635fc3c..02df2d11c750b6ff47f6134a230cc3c0eabc4a8f 100644 GIT binary patch delta 63248 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 UADH`6EKvg260VF}f1MBbA06uxIRF3v delta 63692 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 testInEmp(@RequestBody JSONObject whereJson) { + new VehicleManageServiceImpl().inVehicle(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + }