From 32f70c2da49ffba17462ab730f74399ff708dede Mon Sep 17 00:00:00 2001 From: ldj_willow Date: Thu, 20 Oct 2022 00:20:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/quartz/task/AutoCreateTask.java | 6 +- .../service/impl/GenCodeServiceImpl.java | 6 +- .../org/nl/modules/system/util/CodeUtil.java | 7 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 40 ++-- .../org/nl/wms/sch/service/TaskService.java | 8 - .../nl/wms/sch/service/dto/TaskQueryDto.java | 12 -- .../wms/sch/service/impl/TaskServiceImpl.java | 15 +- .../nl/wms/sch/tasks/CallEmpVehicleTask.java | 3 +- .../nl/wms/sch/tasks/CallMaterialTask.java | 2 - .../nl/wms/sch/tasks/PointToPointTask.java | 45 +---- .../nl/wms/sch/tasks/SendEmpVehicleTask.java | 38 +--- .../nl/wms/sch/tasks/SendMaterialTask.java | 3 - .../wms/sch/tasks/YqxCallEmpVehicleTask.java | 3 +- .../wms/sch/tasks/YqxSendEmpVehicleTask.java | 186 ++++++++++++++++++ .../java/org/nl/wms/sch/wql/QSCH_TASK_01.wql | 1 - .../org/nl/wms/sch/wql/ST_VEHICLE_IN_01.wql | 113 +++++++++++ .../org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql | 1 + .../src/main/java/org/nl/wms/wms.xls | Bin 229888 -> 268288 bytes .../src/main/resources/logback-spring.xml | 6 + .../src/views/wms/sch/point/index.vue | 3 - .../src/views/wms/sch/task/index.vue | 21 +- 21 files changed, 346 insertions(+), 173 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxSendEmpVehicleTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_IN_01.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateTask.java b/lms/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateTask.java index 2544093..198950a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateTask.java @@ -81,7 +81,7 @@ public class AutoCreateTask { String status = result.getString("status"); String message = result.getString("message"); - //发送失败的任务JSON集合:task_uuid,message + //发送失败的任务JSON集合:task_id,message JSONArray errArr = result.getJSONArray("errArr"); //任务下发以后,更新任务状态 @@ -89,7 +89,7 @@ public class AutoCreateTask { if ("200".equals(status)) { taskList.forEach(item -> { JSONObject taskObj = new JSONObject(); - taskObj.put("task_uuid", item.getTask_id()); + taskObj.put("task_id", item.getTask_id()); taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); taskObj.put("remark", "下发成功"); taskObj.put("update_time", DateUtil.now()); @@ -98,7 +98,7 @@ public class AutoCreateTask { } else {//下发失败 taskList.forEach(item -> { JSONObject taskObj = new JSONObject(); - taskObj.put("task_uuid", item.getTask_id()); + taskObj.put("task_id", item.getTask_id()); taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); taskObj.put("remark", "下发失败:" + message); taskObj.put("update_time", DateUtil.now()); diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java index dcc149b..a49dd33 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java @@ -12,7 +12,6 @@ import org.nl.modules.system.service.GenCodeService; import org.nl.modules.wql.core.bean.ResultBean; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; -import org.springframework.cache.annotation.CacheConfig; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -23,7 +22,6 @@ import java.util.Set; @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "genCode") public class GenCodeServiceImpl implements GenCodeService { @Override public JSONObject queryAll(Map form, Pageable pageable) { @@ -98,7 +96,7 @@ public class GenCodeServiceImpl implements GenCodeService { } @Override - public String codeDemo(Map form) { + public synchronized String codeDemo(Map form) { String code = (String) form.get("code"); String id = this.queryIdByCode(code); //如果flag=1就执行更新数据库的操作 @@ -166,7 +164,7 @@ public class GenCodeServiceImpl implements GenCodeService { } demo += value; if (flag.equals("1")) { - wo.update(jo); + wo.update(jo,"id = '"+jo.getString("id")+"'"); } } return demo; diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java b/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java index 982cd1b..1c12c85 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java @@ -1,19 +1,18 @@ package org.nl.modules.system.util; import org.nl.modules.system.service.GenCodeService; -import org.nl.modules.system.service.impl.GenCodeServiceImpl; +import org.nl.modules.wql.util.SpringContextHolder; import java.util.HashMap; public class CodeUtil { - public static synchronized String getNewCode(String ruleCode){ - GenCodeService service=new GenCodeServiceImpl(); + public static String getNewCode(String ruleCode){ String flag = "1"; HashMap map = new HashMap<>(); map.put("flag",flag); map.put("code",ruleCode); - return service.codeDemo(map); + return SpringContextHolder.getBean(GenCodeService.class).codeDemo(map); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 136211c..af93daa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -38,7 +38,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private final TaskService taskService; /** - * task_uuid:任务标识 + * task_id:任务标识 * task_code:任务编码 * task_status:1:执行中,2:完成 ,3:acs取消 * @@ -53,8 +53,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONArray errArr = new JSONArray(); for (int i = 0; i < array.size(); i++) { JSONObject row = array.getJSONObject(i); - String task_uuid = row.getString("task_id"); - TaskDto taskDto = taskService.findById(task_uuid); + String task_id = row.getString("task_id"); + TaskDto taskDto = taskService.findById(task_id); String processing_class = taskDto.getHandle_class(); //1:执行中,2:完成 ,3:acs取消 String acs_task_status = row.getString("task_status"); @@ -87,7 +87,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("任务状态更新失败:{}", message); JSONObject json = new JSONObject(); - json.put("task_uuid", task_uuid); + json.put("task_id", task_id); json.put("message", message); errArr.add(json); @@ -97,7 +97,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("任务状态更新失败:{}", message); JSONObject json = new JSONObject(); - json.put("task_uuid", task_uuid); + json.put("task_id", task_id); json.put("message", message); errArr.add(json); @@ -181,17 +181,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { param.put("qty", vehicle_num); // 创建任务 GjxCallEmpVehicleTask taskBean = SpringContextHolder.getBean(GjxCallEmpVehicleTask.class); - String task_id = taskBean.createTask(param); - // 下发 - JSONObject jsonObject = taskBean.renotifyAcs(task_id); - if (StrUtil.equals(jsonObject.getString("status"), "200")) { - // 成功返回 更新任务状态 - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - jsonTask.put("task_status", TaskStatusEnum.ISSUE.getCode()); - taskTab.update(jsonTask); - } else { - throw new BadRequestException(jsonObject.getString("message")); - } + taskBean.createTask(param); } else if (StrUtil.equals(type, "2")) { // 2.共挤线满托入库: 调用物料入库处理类创建任务 @@ -279,22 +269,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } else if (StrUtil.equals(type, "5")) { // 5.油漆线空盘入库: 调用空托盘入库处理类创建任务 if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + if (ObjectUtil.isEmpty(vehicle_type)) throw new BadRequestException("载具类型不能为空"); JSONObject param = new JSONObject(); param.put("point_code1", point_code); - param.put("qty", vehicle_num); + param.put("vehicle_num", vehicle_num); + param.put("vehicle_type", vehicle_type); // 创建任务 - SendEmpVehicleTask taskBean = SpringContextHolder.getBean(SendEmpVehicleTask.class); - String task_id = taskBean.createTask(param); - // 下发 - JSONObject jsonObject = taskBean.renotifyAcs(task_id); - if (StrUtil.equals(jsonObject.getString("status"), "200")) { - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - jsonTask.put("task_status", TaskStatusEnum.ISSUE.getCode()); - taskTab.update(jsonTask); - } else { - throw new BadRequestException(jsonObject.getString("message")); - } + YqxSendEmpVehicleTask taskBean = SpringContextHolder.getBean(YqxSendEmpVehicleTask.class); + taskBean.createTask(param); + } else if (StrUtil.equals(type, "6")) { // 6.一楼空盘入库 (有载具号): 调用空托盘入库处理类创建任务 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java index 6c96254..e8f4398 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java @@ -39,14 +39,6 @@ public interface TaskService { */ TaskDto findById(String task_id); - /** - * 根据ID查询 - * - * @param taskdtl_id ID - * @return Task - */ - TaskDto findByDtlId(String taskdtl_id); - /** * 根据编码查询 * diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskQueryDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskQueryDto.java index d357d4f..24911c7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskQueryDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskQueryDto.java @@ -1,7 +1,5 @@ package org.nl.wms.sch.service.dto; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serializable; @@ -23,10 +21,6 @@ public class TaskQueryDto implements Serializable { */ private String task_type; - /** - * 任务明细类型 - */ - private String taskdtl_type; /** * 指令状态 @@ -69,12 +63,6 @@ public class TaskQueryDto implements Serializable { */ private String update_time; - /** 任务明细标识 */ - /** - * 防止精度丢失 - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long taskdtl_id; /** * 任务标识 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java index 77c15ee..664b4dd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java @@ -73,9 +73,6 @@ public class TaskServiceImpl implements TaskService { ClassstandardDto task_type = classstandardService.findById(whereJson.getString("task_type")); map.put("task_type", task_type.getClass_code()); } - if (StrUtil.isNotEmpty(whereJson.getString("taskdtl_type"))) { - map.put("taskdtl_type", whereJson.getString("taskdtl_type")); - } if (StrUtil.isNotEmpty(whereJson.getString("finishTypeList"))) { map.put("finishTypeList", whereJson.getString("finishTypeList")); } @@ -105,14 +102,6 @@ public class TaskServiceImpl implements TaskService { return obj; } - @Override - public TaskDto findByDtlId(String taskdtl_id) { - WQLObject wo = WQLObject.getWQLObject("sch_base_task"); - JSONObject json = wo.query("task_id = '" + taskdtl_id + "'").uniqueResult(0); - final TaskDto obj = json.toJavaObject(TaskDto.class); - return obj; - } - @Override public TaskDto findByCode(String code) { WQLObject wo = WQLObject.getWQLObject("sch_base_task"); @@ -125,7 +114,7 @@ public class TaskServiceImpl implements TaskService { public void operation(Map map) { String task_id = MapUtil.getStr(map, "task_id"); String method_name = MapUtil.getStr(map, "method_name"); - TaskDto dto = this.findByDtlId(task_id); + TaskDto dto = this.findById(task_id); // 任务处理类 String processing_class = dto.getHandle_class(); String message = ""; @@ -143,7 +132,7 @@ public class TaskServiceImpl implements TaskService { for (int i = 0; i < arr.size(); i++) { JSONObject json = arr.getJSONObject(i); JSONObject param = new JSONObject(); - param.put("taskdtl_id", json.getString("taskdtl_id")); + param.put("task_id", json.getString("task_id")); param.put("remark", json.getString("message")); wo.update(param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java index 5e83d61..fb48d75 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java @@ -137,10 +137,9 @@ public class CallEmpVehicleTask extends AbstractAcsTask { String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; jsonTask.put("task_id", task_id); - jsonTask.put("taskdtl_id", task_id); + jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); jsonTask.put("task_type", "04"); - jsonTask.put("taskdtl_type", "04"); jsonTask.put("task_status", "01"); jsonTask.put("point_code1", point_code1); jsonTask.put("point_code2", point_code2); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java index acca66e..7f39272 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java @@ -190,10 +190,8 @@ public class CallMaterialTask extends AbstractAcsTask { JSONObject taskObj = new JSONObject(); taskObj.put("task_id", task_id); - taskObj.put("taskdtl_id", task_id); taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); taskObj.put("task_type", "02"); - taskObj.put("taskdtl_type", "02"); taskObj.put("task_status", task_status); taskObj.put("point_code1", point_code1); taskObj.put("start_area", start_area); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java index c44c1c7..be4e610 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java @@ -1,12 +1,9 @@ package org.nl.wms.sch.tasks; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.SecurityUtils; -import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -55,43 +52,7 @@ public class PointToPointTask extends AbstractAcsTask { @Override @Transactional public String createTask(JSONObject form) { - String point_code1 = form.getString("point_code1"); - String point_code2 = form.getString("point_code2"); - String vehicle_code = form.getString("vehicle_code"); - String now = DateUtil.now(); - if (StrUtil.isEmpty(point_code1)) { - throw new BadRequestException("起点不能为空!"); - } - /* if (StrUtil.isEmpty(point_code2)) { - throw new BadRequestException("终点不能为空!"); - } - if (StrUtil.isEmpty(vehicle_code)) { - throw new BadRequestException("载具不能为空!"); - }*/ - String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - JSONObject task = new JSONObject(); - task.put("taskdtl_id", taskdtl_id); - task.put("task_id", taskdtl_id); - task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - task.put("task_type", "05"); - task.put("taskdtl_type", "05"); - task.put("task_status", "01"); - task.put("point_code1", point_code1); - task.put("point_code2", point_code2); - task.put("vehicle_code", vehicle_code); - task.put("handle_class", this.getClass().getName()); - task.put("finished_type", "00"); - task.put("is_delete", "0"); - Long currentUserId = SecurityUtils.getCurrentUserId(); - task.put("create_id", currentUserId); - task.put("create_name", SecurityUtils.getCurrentNickName()); - task.put("update_optid", currentUserId); - task.put("update_optname", SecurityUtils.getCurrentNickName()); - task.put("create_time", now); - task.put("update_time", now); - task.put("priority", "1"); - WQLObject.getWQLObject("SCH_BASE_Task").insert(task); - return taskdtl_id; + return null; } @Override @@ -101,12 +62,12 @@ public class PointToPointTask extends AbstractAcsTask { } @Override - public void pullBack(String taskdtl_id) { + public void pullBack(String task_id) { } @Override - public void cancel(String taskdtl_id) { + public void cancel(String task_id) { } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java index d46a668..64b3d8d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java @@ -2,19 +2,14 @@ package org.nl.wms.sch.tasks; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; - import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.system.util.CodeUtil; - - import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; @@ -26,12 +21,9 @@ import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.dto.PointDto; - - import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.math.BigDecimal; import java.util.HashMap; @Service @@ -44,7 +36,6 @@ public class SendEmpVehicleTask extends AbstractAcsTask { @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); String task_id = taskObj.getString("task_id"); @@ -81,24 +72,6 @@ public class SendEmpVehicleTask extends AbstractAcsTask { PointDto nextDto = point.findByCode(jsonTask.getString("point_code2")); if (ObjectUtil.isEmpty(nextDto)) throw new BadRequestException("未找到可用点位:" + nextDto); - // 1.更新点位数量 2.解锁点位 - JSONObject jsonEmp = empTab.query("task_uuid = '" + task_id + "'").uniqueResult(0); - int vehicle_qty = JSONObject.parseObject(JSON.toJSONString(nextDto)).getIntValue("vehicle_qty"); - BigDecimal vehicle_qty_point = NumberUtil.add(String.valueOf(vehicle_qty), String.valueOf(jsonEmp.getIntValue("vehicle_qty"))); - - nextDto.setVehicle_qty(vehicle_qty_point); - nextDto.setPoint_status("01"); - nextDto.setLock_type("00"); - nextDto.setVehicle_type(jsonTask.getString("vehicle_type")); - nextDto.setVehicle_code(jsonTask.getString("vehicle_code")); - pointTab.update(JSONObject.parseObject(JSON.toJSONString(nextDto))); - - // 完成单据状态 - jsonEmp.put("bill_status", "50"); - jsonEmp.put("update_optid", SecurityUtils.getCurrentUserId()); - jsonEmp.put("update_optname", SecurityUtils.getCurrentUsername()); - jsonEmp.put("update_time", DateUtil.now()); - empTab.update(jsonEmp); } } @@ -108,7 +81,6 @@ public class SendEmpVehicleTask extends AbstractAcsTask { @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); String point_code1 = form.getString("point_code1"); @@ -152,10 +124,9 @@ public class SendEmpVehicleTask extends AbstractAcsTask { String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; jsonTask.put("task_id", task_id); - jsonTask.put("taskdtl_id", task_id); + jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); jsonTask.put("task_type", "03"); - jsonTask.put("taskdtl_type", "03"); jsonTask.put("task_status", "01"); jsonTask.put("point_code1", point_code1); jsonTask.put("point_code2", point_code2); @@ -173,12 +144,7 @@ public class SendEmpVehicleTask extends AbstractAcsTask { jsonPoint.put("lock_type", "02"); pointTab.update(jsonPoint); - // 更新空载具单据状态 - if (ObjectUtil.isNotEmpty(record_uuid)) { - JSONObject jsonEmp = empTab.query("record_uuid ='" + record_uuid + "'").uniqueResult(0); - jsonEmp.put("bill_status","20"); - empTab.update(jsonEmp); - } + return task_id; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java index 170734b..3cabc3c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java @@ -200,12 +200,9 @@ public class SendMaterialTask extends AbstractAcsTask { CodeUtil.getNewCode("TASK_CODE"); Long task_id = IdUtil.getSnowflake(1, 1).nextId(); taskObj.put("task_id", task_id); - taskObj.put("taskdtl_id", task_id); taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); taskObj.put("task_type", "01"); taskObj.put("vehicle_type", vehicle_type); - taskObj.put("taskdtl_type", "01"); - taskObj.put("acs_task_type", "1"); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskObj.put("point_code1", point_code1); PointDto startPoint = pointService.findByCode(point_code1); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxCallEmpVehicleTask.java index 346b18c..ff8c4bc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxCallEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxCallEmpVehicleTask.java @@ -136,10 +136,9 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask { String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; jsonTask.put("task_id", task_id); - jsonTask.put("taskdtl_id", task_id); + jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); jsonTask.put("task_type", "04"); - jsonTask.put("taskdtl_type", "04"); jsonTask.put("task_status", "01"); jsonTask.put("point_code1", point_code1); jsonTask.put("point_code2", point_code2); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxSendEmpVehicleTask.java new file mode 100644 index 0000000..7368b38 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxSendEmpVehicleTask.java @@ -0,0 +1,186 @@ +package org.nl.wms.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 lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +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; + +@Service +@RequiredArgsConstructor +@Slf4j +public class YqxSendEmpVehicleTask extends AbstractAcsTask { + private final String THIS_CLASS = YqxSendEmpVehicleTask.class.getName(); + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String task_id = taskObj.getString("task_id"); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status, "0")) { + // 取消删除任务 + taskTab.delete("task_id = '" + task_id + "'"); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + } + + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + // 更改任务状态为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + String point_code2 = jsonTask.getString("point_code2"); + JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + //终点是叠盘架 + if (StrUtil.equals("DPJQB01", endPoint.getString("region_code"))) { + Integer vehicle_qty = endPoint.getInteger("vehicle_qty"); + vehicle_qty += jsonTask.getInteger("vehicle_qty"); + endPoint.put("lock_type", "00"); + endPoint.put("vehicle_qty", vehicle_qty); + endPoint.put("point_status", "1"); + endPoint.put("vehicle_type", jsonTask.getString("vehicle_type")); + pointTab.update(endPoint); + } else {//非叠盘架 + endPoint.put("lock_type", "00"); + endPoint.put("vehicle_qty", jsonTask.getString("vehicle_qty")); + endPoint.put("vehicle_type", jsonTask.getString("vehicle_type")); + endPoint.put("point_status", "1"); + pointTab.update(endPoint); + } + + } + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject form) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + + String point_code1 = form.getString("point_code1"); + String point_code2 = form.getString("point_code2"); + String vehicle_code = form.getString("vehicle_code"); + String vehicle_type = form.getString("vehicle_type"); + + String vehicle_num = form.getString("vehicle_num"); + // 入库起点不能为空 + if (ObjectUtil.isEmpty(point_code1)) { + throw new BadRequestException("起点不能为空"); + } + // 判断起点是否有正在执行的任务 + JSONObject beforTaskObj = taskTab.query("is_delete='0' and point_code1='" + point_code1 + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + + // 创建任务 + JSONObject jsonTask = new JSONObject(); + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + jsonTask.put("task_id", task_id); + jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + jsonTask.put("task_type", "kzj"); + jsonTask.put("task_status", TaskStatusEnum.SURE_START.getCode()); + jsonTask.put("point_code1", point_code1); + jsonTask.put("point_code2", point_code2); + jsonTask.put("vehicle_type", vehicle_type); + jsonTask.put("vehicle_code", vehicle_code); + jsonTask.put("vehicle_num", vehicle_num); + jsonTask.put("handle_class", THIS_CLASS); + jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); + jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); + jsonTask.put("create_time", DateUtil.now()); + taskTab.insert(jsonTask); + + this.findNextPoint(); + return task_id; + } + + /** + * @return + * @discription 确定下一点位 + * @author ldjun + * @created 2020年6月12日 下午6:01:06 + */ + @Override + public void findNextPoint() { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + JSONArray taskArr = taskTab.query("is_delete = '0' and handle_class = '" + this.THIS_CLASS + "' and task_status = '" + TaskStatusEnum.SURE_START.getCode() + "'").getResultJSONArray(0); + for (int i = 0; i < taskArr.size(); i++) { + JSONObject jsonTask = taskArr.getJSONObject(i); + String vehicle_type = jsonTask.getString("vehicle_type"); + Integer vehicle_qty = jsonTask.getInteger("vehicle_qty"); + //TODO 判断叠盘位是否有另外任务,则不生成任务,后续可以考虑托盘数量大于某个数直接去缓存区或者养生A区 + JSONObject taskObj = taskTab.query("is_delete='0' and handle_class='" + this.THIS_CLASS + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "' and task_id <> " + jsonTask.getLong("task_id")).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) continue; + + JSONObject dpjPoint = pointTab.query("is_used ='1' and lock_type='00' and is_delete='0' and region_code='DPJQB01' and can_vehicle_type like '%" + vehicle_type + "%'").uniqueResult(0); + + int sum_qty=(dpjPoint.getInteger("vehicle_qty")==null?0:dpjPoint.getInteger("vehicle_qty"))+vehicle_qty; + //超过叠盘架允许的最大托盘数,去托盘缓存区或者去养生A区,后续可以考虑任务的载具数量和叠盘架的载具数量谁比较大,大的先去缓存位或者去养生A区 + if ( sum_qty > dpjPoint.getInteger("vehicle_max_qty")) { + JSONObject endPoint = WQL.getWO("ST_VEHICLE_IN_01").addParam("flag", "1").addParam("vehicle_type", "'%" + vehicle_type + "'").process().uniqueResult(0); + jsonTask.put("point_code2", endPoint.getString("point_code")); + jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + + } else {//去叠盘架 + jsonTask.put("point_code2", dpjPoint.getString("point_code")); + jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + } + //锁住终点 + JSONObject pointObj = new JSONObject(); + pointObj.put("lock_type", "01"); + pointObj.put("update_time", DateUtil.now()); + pointTab.update(pointObj, "point_code ='" + jsonTask.getString("point_code2") + "'"); + } + + } + + ; + + @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 pullBack(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql index 233bcd7..729b8ca 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql @@ -24,7 +24,6 @@ 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string 输入.unFinish TYPEAS s_string - 输入.taskdtl_type TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_IN_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_IN_01.wql new file mode 100644 index 0000000..b6d04ab --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_IN_01.wql @@ -0,0 +1,113 @@ +[交易说明] + 交易名: 空载具入库业务 + 所属模块: + 功能简述:flag=1 油漆线入空载具 + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.vehicle_qty TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + 输入.region_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + p.point_id, + p.point_code, + p.point_name + FROM + SCH_BASE_Point p + WHERE + p.is_used = '1' + AND p.is_delete = '0' + AND p.lock_type = '00' + AND p.lock_type = '00' + AND p.point_status = '1' + AND region_code IN ( 'KTPHCQB01', 'YSQA01' ) + OPTION 输入.vehicle_type <> "" + p.can_vehicle_type like 输入.vehicle_type + ENDOPTION + + ORDER BY in_empty_seq + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '01' + AND IFNULL(point.vehicle_qty,0) == 输入.vehicle_qty + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '00' + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql index d99a13b..f820a05 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql @@ -52,6 +52,7 @@ p.is_used = '1' AND p.is_delete = '0' AND p.lock_type = '00' + AND p.point_status = '2' and region_code in ('KTPHCQB01','YSQA01') OPTION 输入.vehicle_type <> "" diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index 1b973aad8897bdd8d627574775bc7e9e2ae99768..3b11e566df7fc69fe7794bee2b574cc34c8da7b4 100644 GIT binary patch delta 87646 zcmeFad3;sH`9D5$vJ#RIAnXus!Xgj|VGFwnTi7A&yMT(tr4_5T?l)FctX74K9(TbN z7c7d33nDI6YF!XFTCL(zt!-_!)w;v?{hnve%)QBt{eC|Ey?(FXAHREF$vtPzoO#~! z%=RqvoKwHHuzp+7<$c>^DWx?2%%@1H^Kg){eoX7!4{@*rSHgFW%81>&X06^3Wa?Ji zvw|N5g}Yz@7HUQXLoJljLdU_m2DH>WKL;Tf|RcK>y#+XY*$d9-QVOh`4cB) zEzqT5%W*;LuxMP6nb?%oe*0HhujM2P3UU+u3W^iI%PB~d6tqaZl+z5q-L^kmu)IZL zQpXnCtGhhiIqQHbRud9+W$korVs}Y9Js}b6+D=b2|0nT(hshwURY#>xYuU0URufa% zePeRh?!%a~s3Y&)+rM4k3CQ_bkestw?5x~kbyhAexX;tN6Gn`{5XwG*Zk1vj$1ip1ShiV|l{*_JqAYLUL#WPfa7k-i03Vu`=w z=+=nN@28$(aNOZ>5a>nIN)vBRE7Es60)L%m2qY?}XC_)6+1F4wb-GZvFDmWS8Iux^ z992FO%zaxUf_4nrFps)423rwwpKqofO?V~di=dLgf z806^0XLI@_4leA>Zlaqd;!DTtyu_F#m5FN?9jS{F{TEm2mWdUM%M;5NpOQF)YPB&} zTP&GvdRqI$ffLFTH!ay@?k_R-cQrYlT3VABy}Ws1&9Zih9?NE%e$YMf@Uro`N8;eJ z>cscUwk19}qDc2n^j{uJlq@gOeQ;E%%M&Y>gWB@!#QNnubw5Dul6Y-->!5;AJF;Ks z{)xgPdnQJ%=nzy&g$5y4WuksXscG~fKrxtIJg73&3x-QA=d6_W8)@*}wX!tv{mLRe z8iiHs!_7Sy9=h7pp$2(kriNn@D~~Eq|Vma?~W#(ijFQd*`}CmKRvp$ zK{ySC_BWmTxuYu+BUTmZ84=I*Oq27>RliKETHMy;p6hZiIHuBc&xOpRk0ImraXb!w zEX0@mNC=!A-J;Jy8+Aw&tnR7nqqM}J)l$q_77&~-x4yGlZoLrMs`WZkVT^Tsk-6<} z#}?^}6W<@(Iq}`GM<>oct|+nQxNL)vjlLdvIz-b;utB(h)MuWUbIQi8L{BN0P_N2R!(Q38fIYrhNsI~o2w?usKPcQaqh zQR?iJ$@EF&>2Emw6t0(S@A2b@+r!nAA=c^+1;rBex)EBNgYW3$A7aqg3 zoE)xCnR?BtpB#1OSr;#0+7X>3?fn`0w9@04R;WI&VOoY>y{_!+Hp`i-dYa_=WQ*WP9dfWm-=E5f=E#s2gj*zrg z>bKu8EldAt*=0w3Gi%kX#1XuEa{l%$=RKE`voWWIQlDP3{q&0`X6Wq16PFH(@5?|9 zGe5rPmpdvid#>AUcRZ5y_g9YXdPv=abQUF_+k4fF?)d3#NNbq$y1XclQm5ds3;tf( zQKUYv%2cNyzdCrD-a7AvsdHx)SO4Qzm)=}By!M!L=H;zyKcV}NU%0n_{N^Y3tc&Fq zU$pk=S$8ZOaaV3;>FSrC9Q%j;W#b1NJLi+Fy*9^dDsTSP-~(m%9r)tgKYsb*nL|6Q z{%pikC;ol-M>qWA%y-VbblqFo8*85!d}sXwTgQH|x%|FEpZ{i1*`?FQ{p7-3&)-*i z<^#p?X6xU-bkAE4KKANet**ZD)GYl$t0Pa{$Y!sMil5!KMZbQp+*)wP#OGSx zp1ox9u>((<^68ChW-=e&A z8MA8p{VL<4W%o5d@p+?05IPecB)94I7w$eWx?p=A9qkyZz~Z-hJNn7vK2Kg^$fCA9vNf zoBo_Xe8ID;ru}r{us%;cT)1e)$Kj*D{jC0olMjA*>zu`J$G_WFF?#5uTb3>Q`kVJY z${c>{S9o~3-&%*p4zjNXRSDv)^+|l(N zGUgweaZzXW($ZI#tL*w&^-o`M^6aat?mqYD{crm2qW8|a<$>WZjOlXJWtn$9_xx{0 zo%GYyzpgm%7vJ3;`^yz)JX(0v+Q+k3ZM!e~^>()xzVO7t?*E>0->QEy&lx}e?xQMX z*?QjBS6^0s=De#%JQqLdFMB(8EN}Pp{gUOZBPJcZwx=oP!)|{$@3kx6e|7Wl(=Ka2 zsNLOtTIBrny3T(ne`i_uLw{`l#gxaE<(&MH`uCI@R&+VF=DHD|f4}0R_pdJ-yz9Af zdtZCz`7eL{WruGkXI%H}-|L?(8<}y#M<;dIbME9L|M=>KT}Sj#XcLcK`2h{L4>Xoc+@9 z#H%yD=yLKut{ky<)JIeI4SMbSi)J3&aon9FFTQm2iDw@CdQo-PkH#N)&W+!Gd*i># zYwwIda^Q_IryscI>-*QfQ}p7s@3g<6#m9M-gIhc8C^=!;Jzuu{_R87MUOiyw_e+8sw%46~^`s+C zKjEXxva7a~#!Jr1j$MKE_n9NNKKFk6aX0+@h%fG5bo!g&soN_4J?%O5!6Eh4Df=fT zp58Dvt6z>%Pi=3WXdBaAx0h|--J<2W7?!`l-}(6KjzQjfd&_6e)43nv^!r1H4kfO8 zc0~pT|MqvE?3$6d=BdK%g?rAp0@m?Q%+ADdZAtU*_Zu% z)|gojU95g|*rGM7URtkJzRFfZL0UfTR2JlX#d$7q&F@BJbyo$DkM7ztIC1GqMe(E5 ziRx&zO2yO!08G8}ka{l2Redj4NLOkney_vt+Z&bIl?jpm3Z=fq?=|>618POfDyJ2rT&fIf8uvvd!=5u zL#eGDl)C6nrH+O2aQXKdIEwsOeo#;aY2@ zo_QMJQRBCNgKMbho@c<3wo1MEEbc)?oBuYh)QhO;h0iH91vT9IJlKqy<-VxY?@+Tp z;dcvaw*Muiu0_qtUq(8ZRkcs4*HOb>ub@!WFz;2R?nDi9UqgP>YzuxTu}{2?O5pcW z{8pfX9p6yu5&YhX-zn%D1LFIYdKm|g<99h~KI->My@lVG@p}?DkoP7sg9EMJQtCc% zpy-cEZA0G}`?gZ=ffK9W0a5gUhYl#U5S+O3U4R28CcdZCNBF(qeWiMW6I(w}YC1S^ zRBl`Rp$7J|ebwI{&2L`tZ#2|5sP1W^z^9#cl^Cd&YSlFG=jSQ9sYcXI2{-rh=e0yjd9Z=(126LQQEj!#WGe!?GbFF3eT z`%H)Y4Nv&vD+=_*9j?->!7fN_eN~{Y*6w@7y}G>MDu1r8zT#s&R9_vIYW>gb?+z;U zx6E*TH+^0BhZef~j^78mQeT;?S0`2noih(|@?956VO11-x`NlFz|kJp8(uzPKd25^Z}NdUr8?SEGsE#PJvS z`y*Ojhd1Tv^0xKr&>>6`;oxf$Gd~$~_n0@%{loJu$0h1AixW>@QdIQs+Fu{sx+gK^ z@$Wj;wYY0bd6?5&FNifvZFqZlPIKKy4+~G~9duZ~rXs9g7-a1z%+ynL{2GmE0c^x1 zfM&i%`){`C3ha&7X$%;XMU>ie2T00I;Wt@&NI`1SsBAs1LDD6Slitd1bYn?Qqofr`il-EB;bZnlMPk!A!qVku ze@vH72B%9WQ*CKXn&ZN5m(^J}Xwq3gX9LDL=Ic!tYmkVLc_zf;ddfO(_u_C0+ zj|Cz%eaAoZ_1GY7C-U;wVj7=69Q!r{8$4LbVX2!6A>unTU|SX5jW z+^nPTP2ta5>p$v?!+FJer5+gWDArHu3&Jzo;Ov(>{@6zM&`8Z_htzf9v+eZC;0Yb} zX|GrC_Y(Z-i*|g{UN_Ism+bhulfE6A<&MoUeL~Q@(9qS;8wpmS=%;K>9UiRJopy|ysNdFkg=4k4e2P}}Q~g{NF3k+8 z!hvmr;vGY#==*}vH)}{Zjx)(LJZHA(>ueql&O3DUy)*1SU7xA%3O7yHbM)Qe=hO8} z{EVNW$Khw4{5&r|MKh7OHJrTdei;ZFR7-Dc@lE!eS_;jd>6=ZS(aHcPh& z+tle+=5jckM;ZLL4F6ETnmT)Dc&p3wTX*yckC?qRyBo_LWXf#=`1gd}XBpy?D$8Zn0{Lrn{9r^<3}!^KHFTrWVXH?mj};@(vO{k^xMO; z=IBogmrd8I^-8UJpRCo_=Os15n-lbiupqs)<%7S8fTK)gx5WQyQqm6YA2 zaiU5}3pe{BI431tGTAvFHB94F)Y?}#{LB}@Stsd|DS|Uj!!*t|NonDjg^m}TS6Zu% zhMl|hc2flBl!j>>Wl3q_dKMwsA%iAgGDSe*Zj=TY6=|;J!go;w+VN0g7?v=9uXWQLb2F_Z?-DxIH?{{Ze zID5dIW#jBYcb20rS3BHUF0MV~&YIy2`hX>vhqFiAS#z8{>dx|Uwi7Ca&02s{t}%kN z5ND6!?3^Ia^m_vPw3^of@L_?T46evopcd+W?kqzs(t$h6M9wid(?K@w%TkNA+>;H6 z1Cb6%H;xNAa3w9(SE?#~mE!km%)2Da!9~KVhPP3yUZB6Ug=gTth59R7cm}R6Glgeh z_$}0s_YKhuM>GQ>wIhn$q`5#B>3B=b3jDT)EJUIly(F4zh-Mn1Ut6M?hA2&ZtWl;T znwdg0(-F-~A)0B4rc^X;h(ZiBM2ig3EJO5LOEk+6{mv52azwLIh-NvWS%&C`D3OXp zRyv}FCg-C2+5W|bC^e1+`g=>1?X^%Jv_!KVQP$eCH`@`-P9d7zBvDRwPJ+xrQ(c%f)wr&OljQD|1ydmD1LR?NCz=&>a|Gx4AIt>XbVHM*cRTx5p9t|w1umE zixi?QK=emxJ7b(e4vAJ6qD3IOTDP%8Df1nx+ghSUAbOnXT$J$^>ZqngAi7U+{1<`f zE2jNfQ#hy8@p^Td5x{kpG%IVqkK?wMrl##I(UzvB?cG^&TenPU>z1yzEnRKdBrQ#C z38-aCTenQp)G(=1mLr-0h6Ak(m=2bFD+8vZ-N_PdZHRWZL|Z$ety74$c0^mJ5N+Kg(PB$1mm%0Dg#&FIkTw8vm+N?K43O8;EIyRE$@U?JW?RsV->v?M1a_9TAX=jT z<<2tH4XT4X%T)KMXp*5=agDtvB1{gn1>t6f18u>968$;u-i0kUZNY(S)UVYx^Su`m zv3y&pbK(%WDD@Lnl|j`GsP0xz*(JE00rds0l0Z9f;s!&w9XQcX!=7i;BS7tvI8lQ9 z1XQA%AP(Absuv_a)DUlPi2obsQ4#q_uCEJF>}Q4@6lsLxyzbwCrvOjC3K zsKJ`uji5RJRCAl2iyZOqaDk{gB%^8sikcQd4L6`Vrhw{bKz(lsbOe_M8v-3uny8}# z)X@RjrAp!;O+>LDXd|k0BtF6r?_`J{!a19$lOc{IQ#+cQ*V}aVkHHpHCr7+fGI87; z|4+oJJCgWFL%cI6Rq0YYOgn>kl`gZxv@?ibZHRY9&8u|OKRSc>j}1pUgZR~Mn07|R zZ;z|;Gz&x*OLUYW+Qkt41Zk{s7eln0CECRi?P7@j1G(7FT^!LahA7o7xf?`POLqqO zw_JBeVHA_Pq@Af~d?N=&8!#mRbBFrWf+;azKC?ti9GH?6FeMI5NeY+}l@kY=B8#R3 z!^DFrNeiZ{1#`Fo)75b1Z}$GK2FxcoBL})VFkJ!0D=l3en63ab;C?d`%MCf|C#Idc z8X!F^SGuMG2|FCCmsztx8PIsE$)&~s(Jf6{_cUoeOj=){Rcg1EdwZtIcUVf=PmPJG z7sU2PgnOq+>ysv}JS9yE?3*U7Uz)TEo7Nw{FoFqco_H=uft5(}CYMXY_3y*hB37G$ z=2EKRXHc3n4&Efgk74eRG-*|7(uSI}$l@a~hmmPXm`s7g)1-|^lQuF<+Nd;Xqtm1v zZqrELF|FDpdM?oR5JMVATD9riF?8+)x+i)e2W||Vd!atwcJ3HDw`gNAbneyqFyvw% zj-hjll?D4-t-(X?#;_mdMp_IVe1Yy|J9sR$gF{5;E$rL(X?mn-{wfOxEYdyV?A#~n zuK3R^-GJ~!9oe_K0pW=-^i{yMH6LkmYMGNQ-&cA|Ho{VdYB68HL$oDYX zWgl|zE0!is03S=)Vw?KLtAe9zKyk~?&^)x^R*b6;Tdy$EI z8Xy!mSo@x+{R#T@G(X+N;T$a$aUl#pc!95FKiX z_6E@h)i6u6w_dG(G)m9L5t}ql_VxkMpXhXA3s)8r728%hh~A+_TB7A3TBS!>qUElp zFdDsO##!_f$3|(UVmJFtES}U zU@8Cx+Hz~$#?DazG_uZA0L;TqhN=LVQ;ZB%fr;l)H4X)_i7L`gJQN%VL`+`&4Uq8` zNPh!lf(6oFfY4gfA4sxvH1YIzK>DWu>Fd%0aop1nvcm;g` zz<33H0KkZXJ^)~@aqGeWfDr|K0Kj+!eE`5Tts_%lBX=rl;v_uKpqgyiGZ5^7)c}{- zF9sS=l8en0Dd+H6*x5NiI;)4t~C_oa_ zAV++VBQEI?HwGDQe2x56g$FgsjX0$=7E458FB=R%G5rP3S?j?7Ln(HcNU;?9 zy%akf;Jg$&9C*DHI~;hu6gwQ4y%akfn7tG`9Jsv{I~=&Z6gwO(>804=sZ#84w3nA+ zho?xf!&9W#;VM~*9iAe^QfFZkh!i^lRVvieZ4-<@m0njf+!>_UyReQ+j~#(JWjQH! z1nMNF#u2E`Njj2ZN1#3@=)2O$aa4>*SftpIhVV>FYNR1thckA(k>KS?TpQvzB+&`B zQ;Y=BLbGU$Od&cFM9nKAshBWr-QHJO&OLSC36zLQ+C_Bc9W|Sj3 zDuw8%CW%tDBTX8H>((B;{z;2wggu?-#P|vr74tKRa8~_S+BwihEDs5)*!&3kp4ghC4 ziRN$sDAbX7bvR}oFJ9ecwHNBI1S3*yHNg0lsv2PYLRAegexa&XnX{8ts%jvTm8u$m z{7O{~K(bO*1B_p(s?*QSVgEDr5^G-=17r>D24mBtjZ2d@K26#LlNQ+$#Jo|PCT-FY zDT%VNWOACcDQVKCrb(NYnik&sh1;((BlVIoWz0;IR%go4KD^0%HDQS{# zPMWm2kbuG5)B@+FWR!Z(Pm{L5qL+G3kV`Y@LX!X;@kE^Uy;6}tv$ z?5m;-)tJ6oj&ly28q-%J`K8A6RY^~lUuvRm8pjP$KjrFJWBTb2c^KFoNnDhoF@|^~ zzl<@&Bl%^FBR&SB_8uc>aH<*;5yufEP(Mh_EI@eyX6z4w;$S3~L_r#7 zKz)NWHpMstO5_*Rf1E)j7m@{-aSqTp2Z&8H&H(x$2LneviHkxs-Vl%Em+^);lFS-5 zJ`Um{z>EhwyZ|%a5g(sIeEfeT&gq53MG0bD%^fOI4JUwjm97bd_yo|7%j!G<#J$!$ z0mMaXo&e%rYn}k&(3(*=xitaJ;g#kIDYJTHlj6KaFro<60!*QfG_qQNc|EQom8=$M z1WYZ!c#W(UU}W*D1sJay)&h*EhP43lsERbQ+D1SKb`pSW*9%Z{%59SXWV_}!JnaPC zInG(tZ?l_>tA3l^WWe;>>?Q*xw%H*+OPvg)ewW>3AoaWKCIhYCWj7gU{Vu!7KlrxXJTw)&G!Cvf4oNf;;HEmFQyo#cA@Zn91p~|VV$+NmEYazP?MGOm z(;dy}G(%Q66U1~!bb1QW=}oent2b*Zg4_&4bh#xu!w_9ziOz6DXC%?YBsjwnosmLx zMw2zActD~eu+20?S6ZSo4bdYl(V33u%p{`OYGy<;j>E_#NQ>aiCW%u1AW>O)>p*mq zI?58Q1JO;Ym+f42AbOMObaf!QNgZv$)Pd+Go1TpvbYvOV!bpPd3^wgWQT z06E?QnVl90#XAC#6?cvSa)Jdi#{l`U1v1A0nIk~r?m`4)P707Y4#=Doj?765WUd7w ztM6O@*`$7Afy_01lYeOkyyXb zfMO#oG~A(Cl5)jD1L&Inut$jc2O zOB)ae?c8VwTX^VVeZB4zp1Vi)3V(BnzA$h21zHWdTC1Pm>Z6Kww7nFT$u^=G14Ys% zge~Fb%UncEM(QP_)Muti%SufPKl4R!f4$%0AQZX%y>^l-QFl85G4PEi%MxF~LL#;~9W39{g;+ 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 delta 56577 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 diff --git a/lms/nladmin-system/src/main/resources/logback-spring.xml b/lms/nladmin-system/src/main/resources/logback-spring.xml index 11bff15..ac1dd00 100644 --- a/lms/nladmin-system/src/main/resources/logback-spring.xml +++ b/lms/nladmin-system/src/main/resources/logback-spring.xml @@ -84,9 +84,15 @@ https://juejin.cn/post/6844903775631572999 + + + + + + diff --git a/lms/nladmin-ui/src/views/wms/sch/point/index.vue b/lms/nladmin-ui/src/views/wms/sch/point/index.vue index 0550dc3..f6b5cb1 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -327,9 +327,6 @@ export default { hand(value) { this.crud.toQuery() }, - taskdtl_typeFormat(row) { - return this.dict.label.SCH_TASK_TYPE_DTL[row.taskdtl_type] - }, invtypeFormat(row) { for (const item of this.invtypelist) { if (item.code === row.inv_type) { diff --git a/lms/nladmin-ui/src/views/wms/sch/task/index.vue b/lms/nladmin-ui/src/views/wms/sch/task/index.vue index 6b104f9..8363301 100644 --- a/lms/nladmin-ui/src/views/wms/sch/task/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/task/index.vue @@ -113,10 +113,10 @@ @selection-change="crud.selectionChangeHandler" > - + - + @@ -139,11 +139,13 @@ 下发 + @click="doOperate(scope.row, 'a')" + >下发 完成 + @click="doOperate(scope.row, 'b')" + >完成 @@ -159,7 +161,7 @@ @@ -192,11 +194,11 @@ export default { return CRUD({ title: '任务', url: 'api/task', - idField: 'taskdtl_id', - sort: 'taskdtl_id,desc', + idField: 'task_id', + sort: 'task_id,desc', crudMethod: { ...crudTask }, query: { - task_code: '', vehicle_code: '', start_point_code: '', next_point_code: '', task_type: '', taskdtl_type: '', finished_type: '', task_status: '' + task_code: '', vehicle_code: '', start_point_code: '', next_point_code: '', task_type: '', finished_type: '', task_status: '' }, optShow: { add: false, @@ -211,7 +213,6 @@ export default { return { viewDialogVisible: false, fullscreen: false, - taskdtl_id: '', currentComponent: '', openParam: {}, create_time: [], @@ -374,7 +375,7 @@ export default { }) }, view(row) { - this.taskdtl_id = row.taskdtl_id + this.task_id = row.task_id switch (row.task_type) { case '01':// 入库 this.fullscreen = true