diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java index 0ca08d931..5ca1c4d5e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java @@ -57,6 +57,8 @@ public class TwoLashTask extends AbstractAcsTask { /* * 下发给ACS时需要特殊处理 */ + //任务表 + WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task"); 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); // 查询木箱信息 @@ -107,6 +109,11 @@ public class TwoLashTask extends AbstractAcsTask { .interaction_json(interaction_json) .build(); resultList.add(dto); + + // 更新任务为下发 + JSONObject paramMap = new JSONObject(); + paramMap.put("task_status", TaskStatusEnum.ISSUE.getCode()); + wo_Task.update(paramMap, "task_id ='" + json.getString("task_id") + "'"); } return resultList; } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java new file mode 100644 index 000000000..353b5f2b1 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java @@ -0,0 +1,178 @@ +package org.nl.b_lms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvOutServiceImpl; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.LashManageServiceImpl; +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.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 堆垛机点位至行架点位任务(出库) + * Created by Lxy on 2021/12/22. + */ +@Service +public class TwoOutHeapTask extends AbstractAcsTask { + private final String THIS_CLASS = TwoOutHeapTask.class.getName(); + + @Override + public List addTask() { + /* + * 下发给ACS时需要特殊处理 + */ + //任务表 + WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task"); + + JSONArray taskArr = 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 < taskArr.size(); i++) { + JSONObject json = taskArr.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")) + .interaction_json(json.getJSONObject("request_param")) + .priority(json.getString("priority")) + .class_type(json.getString("task_type")) + .dtl_type(String.valueOf(dtl_type)) + .remark(json.getString("remark")) + .build(); + resultList.add(dto); + + // 更新任务为下发 + JSONObject paramMap = new JSONObject(); + paramMap.put("task_status", TaskStatusEnum.ISSUE.getCode()); + wo_Task.update(paramMap, "task_id ='" + json.getString("task_id") + "'"); + } + return resultList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 + + String task_id = taskObj.getString("task_id"); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status < '07'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonTask)) { + if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + // 任务为执行之后就不允许取消 + if (jsonTask.getIntValue("task_status") > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { + throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消"); + } + + // 更新删除字段 + jsonTask.put("is_delete", "1"); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + } + + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + // 更新任务完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + // 下发桁架任务:捆扎 + JSONObject jsonParam = new JSONObject(); + jsonParam.put("device_code",jsonTask.getString("point_code2")); + jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code")); + + LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class); + bean1.createLashTask(jsonParam); + + } + } + + } + + @Override + public void findStartPoint() { + + } + + @Override + public void findNextPoint() { + + } + + @Override + public String createTask(JSONObject form) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + 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_code2", form.getString("vehicle_code2")); + json.put("vehicle_type", form.getString("vehicle_type")); + json.put("task_name", form.getString("task_name")); + json.put("point_code1", form.getString("point_code1")); + json.put("point_code2", form.getString("point_code2")); + json.put("material_id", form.getString("material_id")); + json.put("task_group_id", form.getString("task_group_id")); + json.put("is_auto_issue", form.getString("is_auto_issue")); + json.put("table_fk", form.getString("table_fk")); + json.put("request_param", form.getString("request_param")); + json.put("sort_seq", form.getIntValue("sort_seq")); + + json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + json.put("handle_class", THIS_CLASS); + json.put("create_id", currentUserId); + json.put("create_name", currentUsername); + json.put("create_time", DateUtil.now()); + 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.IS_NOTANDYES.code("否")); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java index 21753695c..0b8419274 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java @@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -49,18 +50,44 @@ public class TwoOutTask extends AbstractAcsTask { map.put("flag", "1"); map.put("handle_class", THIS_CLASS); + // 未下发的出库任务 List arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' order by sort_seq") .getResultJSONArray(0).toJavaList(JSONObject.class); - // 根据任务组分组 + // 未下发的任务根据任务组进行分组 Map> groupMap = arr.stream() .collect(Collectors.groupingBy(row -> row.getString("task_group_id"))); + // 需要下发的集合 List taskArr = new ArrayList<>(); + // 用于判断下发几个任务组 + int flag = 2; + + // 判断当前正在执行或者下发的任务有几种规格:根据任务组进行判断,同一任务组代表同一木箱规格 + List likeAllArr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status IN ('05','06') and is_delete = '0' " ) + .getResultJSONArray(0).toJavaList(JSONObject.class); + + Map> likeArr = likeAllArr.stream() + .collect(Collectors.groupingBy(row -> row.getString("task_group_id"))); + + // 判断长度 + if (likeArr.size() >= 2) { + return null; + } + + if (likeArr.size() == 1) { + flag = 1; + } + + // 组织需要下发的任务 for(String task_group_id : groupMap.keySet()) { - taskArr = groupMap.get(task_group_id); - continue; + taskArr.addAll(groupMap.get(task_group_id)); + flag -= 1; + + if (flag == 0) { + break; + } } ArrayList resultList = new ArrayList<>(); @@ -104,7 +131,7 @@ public class TwoOutTask extends AbstractAcsTask { if (ObjectUtil.isNotEmpty(jsonTask)) { if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { // 任务为执行之后就不允许取消 - if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) { + if (jsonTask.getIntValue("task_status") > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消"); } @@ -139,13 +166,14 @@ public class TwoOutTask extends AbstractAcsTask { JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'") .getResultJSONArray(0); - // 下发桁架任务:捆扎 + // 下发堆垛机至行架任务(2个行架位) JSONObject jsonParam = new JSONObject(); jsonParam.put("device_code",jsonTask.getString("point_code2")); jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code")); + jsonParam.put("vehicle_type",jsonTask.getString("vehicle_type")); LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class); - bean1.createLashTask(jsonParam); + bean1.createHeapTask(jsonParam); if (ObjectUtil.isEmpty(resultJSONArray)) { this.immediateNotifyAcs(null); @@ -177,6 +205,7 @@ public class TwoOutTask extends AbstractAcsTask { json.put("task_type", form.getString("task_type")); json.put("vehicle_code", form.getString("vehicle_code")); json.put("vehicle_code2", form.getString("vehicle_code2")); + json.put("vehicle_type", form.getString("vehicle_type")); json.put("task_name", form.getString("task_name")); json.put("point_code1", form.getString("point_code1")); json.put("point_code2", form.getString("point_code2")); 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 147fa5ae2..4afc09e93 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 @@ -96,8 +96,12 @@ public enum IOSEnum { // 区域 PRODUCT_AREA(MapOf.of("BLK", "BLK")), - // 出库口点位 - OUT_POINT(MapOf.of("出库口1", "CK2026","出库口2", "CK2027")), + // 出库堆垛机点位 + OUT_POINT(MapOf.of("1","CK2036", "2","CK2038", "3","CK2040", "4","CK2042" ,"5","CK2044", + "6","CK2046", "7","7", "8","8", "9","9", "10","10")), + + // 行架点位 + OUT_HANGER(MapOf.of("行架位1", "CK2026","行架位2", "CK2027")), //acs申请任务 ACSTOLMS_TYPE(MapOf.of("成品入库任务", "1","空盘入库","2","空盘出库","3","异常处理位","4","木箱入库","5","退货入库","6","贴标","1","捆扎","2")), 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 d3f278381..350c1a030 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 @@ -1221,32 +1221,16 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl i) { - end_device_code = IOSEnum.OUT_POINT.code("出库口1"); - } else { - end_device_code = IOSEnum.OUT_POINT.code("出库口2"); - } - } - JSONObject json = taskMangeList.get(i); + + // 确定起点 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"))) @@ -1292,6 +1276,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl { row.setWork_status(IOSEnum.WORK_STATUS.code("生成")); @@ -1329,6 +1318,15 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl executeArr = WQLObject.getWQLObject("SCH_BASE_Task") + .query("handle_class = '" + TwoOutHeapTask.class.getName() + "' and task_status IN ('05','06') and is_delete = '0' " ) + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 根据终点点位进行分组 + Map> groupPointMap = executeArr.stream() + .collect(Collectors.groupingBy(row -> row.getString("point_code2"))); + + // 终点 + String next_device_code = IOSEnum.OUT_HANGER.code("行架位1"); + + List heapOne = Optional.ofNullable(groupPointMap.get(IOSEnum.OUT_HANGER.code("行架位1"))).orElse(new ArrayList<>()); + List heapTwo = Optional.ofNullable(groupPointMap.get(IOSEnum.OUT_HANGER.code("行架位2"))).orElse(new ArrayList<>()); + + if (heapOne.size() > heapTwo.size()) { + next_device_code = IOSEnum.OUT_HANGER.code("行架位2"); + } + + // 创建任务并下发 + JSONObject jsonTaskParam = new JSONObject(); + jsonTaskParam.put("task_type", "010720"); + jsonTaskParam.put("vehicle_type", whereJson.getString("vehicle_type")); + jsonTaskParam.put("point_code1", whereJson.getString("device_code")); + jsonTaskParam.put("point_code2", next_device_code); + jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code")); + jsonTaskParam.put("request_param", whereJson); + + TwoOutHeapTask bean = SpringContextHolder.getBean(TwoOutHeapTask.class); + bean.createTask(jsonTaskParam); + bean.immediateNotifyAcs(null); + } + @Override public JSONObject applyTab(JSONObject whereJson) { // 载具扩展属性表 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java index 87c4c8676..0d86dce68 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java @@ -13,7 +13,7 @@ import com.alibaba.fastjson.JSONObject; public interface LashManageService { /** - * 创建桁架任务 + * 创建 桁架-捆扎位任务 * @param whereJson { * device_code:起点 * vehicle_code: 箱号 @@ -22,6 +22,17 @@ public interface LashManageService { */ void createLashTask(JSONObject whereJson); + /** + * 创建 堆垛机点位-桁架任务 + * @param whereJson { + * device_code:起点 + * vehicle_code: 箱号 + * vehicle_type: 载具类型 + * + * } + */ + void createHeapTask(JSONObject whereJson); + /** * 申请是否贴标 * @param whereJson { diff --git a/lms/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue b/lms/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue index 341d5663a..4cc0cdfcd 100644 --- a/lms/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue +++ b/lms/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue @@ -163,7 +163,7 @@ disabled /> - + - 是否异常出库 + 是否异常出库 不发超期 @@ -220,6 +220,7 @@ type="warning" icon="el-icon-check" size="mini" + v-if="mstrow.stor_id !== '1582991156504039455'" :disabled="button4" @click="oneSetPoint2" > @@ -233,6 +234,7 @@ type="warning" icon="el-icon-check" :disabled="button5" + v-if="mstrow.stor_id !== '1582991156504039455'" size="mini" @click="allSetPoint" >