From ffc0c80aa6e8e394113793e51fb4a3c00f99a164 Mon Sep 17 00:00:00 2001 From: ldj_willow Date: Wed, 19 Oct 2022 17:15:30 +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 --- .../basedata/wql/QMD_ME_material_param01.wql | 90 --------- .../nl/wms/sch/manage/AbstractAcsTask.java | 12 +- .../org/nl/wms/sch/manage/TaskStatusEnum.java | 14 +- .../nl/wms/sch/tasks/CallEmpVehicleTask.java | 8 - .../nl/wms/sch/tasks/CallMaterialTask.java | 8 +- .../wms/sch/tasks/GjxCallEmpVehicleTask.java | 182 +++++------------- .../nl/wms/sch/tasks/PointToPointTask.java | 9 - .../nl/wms/sch/tasks/SendEmpVehicleTask.java | 9 - .../nl/wms/sch/tasks/SendMaterialTask.java | 10 +- .../wms/sch/tasks/YqxCallEmpVehicleTask.java | 9 - .../org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql | 112 +++++++++++ .../src/main/java/org/nl/wms/wms.xls | Bin 229376 -> 266240 bytes 12 files changed, 173 insertions(+), 290 deletions(-) delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_material_param01.wql create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_material_param01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_material_param01.wql deleted file mode 100644 index aac7851..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_material_param01.wql +++ /dev/null @@ -1,90 +0,0 @@ -[交易说明] - 交易名: 物料参数弹窗数据查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.material_id TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - QUERY - SELECT - m.*, - e.*, - c.class_name, - c.class_code, - u.unit_name - FROM - MD_ME_MaterialBase m - LEFT JOIN MD_ME_StockMaterialExt e ON m.material_id = e.material_id - LEFT JOIN MD_PB_ClassStandard c ON c.class_id = m.material_type_id - LEFT JOIN md_pb_measureunit u ON u.measure_unit_id = m.base_unit_id - WHERE - m.is_used = '1' - AND m.is_delete = '0' - OPTION 输入.material_id <> "" - m.material_id = 输入.material_id - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - - - IF 输入.flag = "2" - QUERY - SELECT - m2.*, - e2.*, - c2.class_name, - c2.class_code, - u2.unit_name - FROM - MD_ME_MaterialBase m2 - LEFT JOIN MD_ME_ProducMaterialExt e2 ON m2.material_id = e2.material_id - LEFT JOIN MD_PB_ClassStandard c2 ON c2.class_id = m2.material_type_id - LEFT JOIN md_pb_measureunit u2 ON u2.measure_unit_id = m2.base_unit_id - WHERE - m2.is_used = '1' - AND m2.is_delete = '0' - OPTION 输入.material_id <> "" - m2.material_id = 输入.material_id - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - - - diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index 0855e2c..5ea7d23 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -30,8 +30,8 @@ public abstract class AbstractAcsTask { */ public List schedule() { this.autoCreate(); - this.findStartPoint(null); - this.findNextPoint(null); + this.findStartPoint(); + this.findNextPoint(); return addTask(); } @@ -77,7 +77,9 @@ public abstract class AbstractAcsTask { * @created 2020年6月12日 下午6:01:30 */ - public abstract JSONObject findStartPoint(JSONObject param); + public void findStartPoint(){ + + } /** * @return @@ -85,7 +87,9 @@ public abstract class AbstractAcsTask { * @author ldjun * @created 2020年6月12日 下午6:01:06 */ - public abstract JSONObject findNextPoint(JSONObject param); + public void findNextPoint(){ + + }; /** * @param form 创建任务需要的参数 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java index a432fa1..110167b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java @@ -4,13 +4,13 @@ package org.nl.wms.sch.manage; * Task状态:00生成 ,01:下发,02、执行中,03、完成 */ public enum TaskStatusEnum { - CREATED("01", "生成"), - SURE_START("02", "确定起点"), - SURE_END("03", "确定终点"), - START_AND_POINT("04", "起点终点确认"), - ISSUE("05", "下发"), - EXECUTING("06", "执行中"), - FINISHED("07", "完成"); + CREATED("1", "生成"), + SURE_START("2", "确定起点"), + SURE_END("3", "确定终点"), + START_AND_POINT("4", "起点终点确认"), + ISSUE("5", "下发"), + EXECUTING("6", "执行中"), + FINISHED("7", "完成"); private String name; private String code; 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 b7238ef..5e83d61 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 @@ -84,15 +84,7 @@ public class CallEmpVehicleTask extends AbstractAcsTask { } } - @Override - public JSONObject findStartPoint(JSONObject param) { - return null; - } - @Override - public JSONObject findNextPoint(JSONObject param) { - return null; - } @Override @Transactional(rollbackFor = Exception.class) 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 3602a83..e0625a2 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 @@ -82,7 +82,7 @@ public class CallMaterialTask extends AbstractAcsTask { } @Override - public JSONObject findStartPoint(JSONObject data) { + public void findStartPoint() { String task_status = TaskStatusEnum.SURE_START.getCode(); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONArray taskArry = taskTab.query("task_status='" + task_status + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0); @@ -118,14 +118,10 @@ public class CallMaterialTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } - return null; } - @Override - public JSONObject findNextPoint(JSONObject param) { - return null; - } + @Override @Transactional(rollbackFor = Exception.class) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/GjxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/GjxCallEmpVehicleTask.java index c946b2a..5455a72 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/GjxCallEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/GjxCallEmpVehicleTask.java @@ -6,6 +6,7 @@ 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.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -15,8 +16,6 @@ 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; -import org.nl.wms.pdm.service.DeviceService; -import org.nl.wms.pdm.service.dto.DeviceDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.PointService; @@ -88,24 +87,53 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { } @Override - public JSONObject findStartPoint(JSONObject param) { - return null; - } + public void findStartPoint() { + 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.FINISHED.getCode() + "'").getResultJSONArray(0); + for (int i = 0; i < taskArr.size(); i++) { + // 创建任务 + JSONObject jsonTask = taskArr.getJSONObject(i); + String vehicle_type = jsonTask.getString("vehicle_type"); + //判断叠盘位是否有任务 + JSONObject taskObj = taskTab.query("is_delete='0' and task_type='" + jsonTask.getString("gjxsqkp") + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { + jsonTask.put("task_status", TaskStatusEnum.SURE_END.getCode()); + jsonTask.put("point_code1", ""); + } else {//叠盘架无执行中的AGV任务 + + //判断叠盘架是否有载具 + JSONObject dpjPoint = pointTab.query("is_used ='1' and lock_type='00' and is_delete='0' and region_code='DPJQB01' and vehicle_qty >0 and can_vehicle_type like '%" + vehicle_type + "%'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(dpjPoint)) { + jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + jsonTask.put("point_code1", dpjPoint.getString("point_code")); + //锁住点位 + dpjPoint.put("lock_type", "01"); + pointTab.update(dpjPoint); + } else {//去缓存位和养生A区找 + JSONObject whereParam = new JSONObject(); + whereParam.put("flag", "1"); + whereParam.put("vehicle_type", jsonTask.getString("vehicle_type")); + JSONObject outJsonObj = WQL.getWO("ST_VEHICLE_OUT_01").addParamMap(whereParam).process().uniqueResult(0); + jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + jsonTask.put("point_code1", outJsonObj.getString("point_code")); + //锁住点位 + dpjPoint.put("lock_type", "01"); + pointTab.update(outJsonObj); + } + + } + + } - @Override - public JSONObject findNextPoint(JSONObject param) { - return null; } @Override @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - - String start_point_code = form.getString("point_code1"); String end_point_code = form.getString("point_code2"); - String qty = form.getString("qty"); String vehicle_type = form.getString("vehicle_type"); // 终点不能为空 @@ -132,22 +160,11 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { //见基础分类表的任务分类 jsonTask.put("task_type", "gjxsqkp"); - - //判断叠盘位是否有任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code1='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - - if (ObjectUtil.isNotEmpty(taskObj)){ - jsonTask.put("task_status", TaskStatusEnum.SURE_END); - jsonTask.put("point_code1", ""); - }else { - // 锁定起点点位 - JSONObject jsonPoint = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0); - jsonPoint.put("lock_type", "02"); - pointTab.update(jsonPoint); - } - + jsonTask.put("task_status", TaskStatusEnum.SURE_END.getCode()); + jsonTask.put("point_code1", ""); taskTab.insert(jsonTask); + super.schedule(); return String.valueOf(task_id); } @@ -168,117 +185,4 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { } - @Transactional(rollbackFor = Exception.class) - public JSONObject findBeginPoint(JSONObject json) { - String point_code2 = json.getString("point_code2"); - String vehicle_qty = json.getString("vehicle_qty"); - if (ObjectUtil.isEmpty(point_code2)) throw new BadRequestException("终点不能为空"); - if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空"); - - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); - WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - // 根据终点区域判断优先的起点区域 - JSONObject jsonPointEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPointEnd)) throw new BadRequestException("终点点位不存在"); - JSONObject jsonRegionEnd = regionTab.query("region_id ='" + jsonPointEnd.getString("region_id") + "'").uniqueResult(0); - - // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 - String device_code = point_code2.substring(0, point_code2.indexOf("_")); - - DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); - DeviceDto deviceDto = deviceBean.findByCode(device_code); - if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); - JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); - - //当前设备所需要的载具类型 - String vehicle_type = jsonOrder.getString("vehicle_type"); - /* - * 空托盘出库任务: - * 1.叠盘架B区、养生A区 --> 共挤线 (优先级:1叠盘架B区 2养生A区) - * 2.叠盘架A区、养生A区 --> 油漆线 (优先级:1叠盘架A区 2养生A区) - */ - String point_code1 = ""; - JSONObject map = new JSONObject(); - if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.GJQY.getCode())) { - //1、判断是否有拆托盘任务。 - taskTab.query("task_type= 'gjxsqkp' "); - - //2、判断是否有到该叠盘位的堆叠任务。 - - - - //1、判断叠盘架B是否有对应类型的空载具 - JSONObject jsonDpjB = pointTab.query("point_status ='2' and lock_type='00' and can_vehicle_type = '" + vehicle_type + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonDpjB)) {//没有则去空托盘缓存区B和养生A区找 - - } - - - // 共挤线呼叫空托盘业务:查找叠盘架B区是否有满足条件的点位 - map.put("flag", "1"); - map.put("vehicle_qty", vehicle_qty); - map.put("vehicle_type", jsonOrder.getString("vehicle_type")); - map.put("region_code", RegionTypeEnum.DPJQB.getCode()); - JSONObject jsonStartPointDPB = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonStartPointDPB)) { - point_code1 = jsonStartPointDPB.getString("point_code"); - } else { - // 为空说明叠盘架B区没有,则去养生A区找 : 只能找数量为1的空托盘 - map.put("flag", "3"); - map.put("region_code", RegionTypeEnum.YSQA.getCode()); - JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - - if (ObjectUtil.isNotEmpty(jsonStartPointYSA)) { - point_code1 = jsonStartPointYSA.getString("point_code"); - } else { - throw new BadRequestException("没有满足需求数量的点位"); - /* // 如果没有则需要从养生区A区里找到 > 1的货位 出库到叠盘架B中 - map.put("flag", "1"); - map.put("region_code", RegionTypeEnum.YSQA.getCode()); - // 起点 - JSONObject jsonStart = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonStart)) throw new BadRequestException("没有满足需求数量的点位"); - // 终点 - JSONObject jsonEnd = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and point_status = '00' and lock_type = '00' and is_used = '1' and is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonEnd)) throw new BadRequestException("叠盘架B货位不足"); - - JSONObject parem = new JSONObject(); - parem.put("point_code1",jsonStart.getString("point_code")); - parem.put("point_code2",jsonEnd.getString("point_code")); - parem.put("qty",jsonStart.getString("vehicle_qty")); - parem.put("vehicle_type",jsonStart.getString("vehicle_qty")); - String task_id = this.createTask(parem); - - // 生成 叠盘架 -> 共挤线的任务 返回叠盘架B的点位code - point_code1 = jsonEnd.getString("point_code");*/ - } - - } - - } else if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.YQQY.getCode())) { - // 油漆线呼叫空托盘业务:查找叠盘架A区是否有满足条件的点位 - map.put("flag", "1"); - map.put("vehicle_qty", vehicle_qty); - map.put("vehicle_type", jsonOrder.getString("vehicle_type")); - map.put("region_code", RegionTypeEnum.DPJQA.getCode()); - JSONObject jsonStartPointDPA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonStartPointDPA)) { - point_code1 = jsonStartPointDPA.getString("point_code"); - } else { - // 为空说明叠盘架A区没有,则去养生A区找 - map.put("flag", "3"); - map.put("region_code", RegionTypeEnum.YSQA.getCode()); - JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonStartPointYSA)) throw new BadRequestException("没有满足需求数量的点位"); - point_code1 = jsonStartPointYSA.getString("point_code"); - } - } - JSONObject resuft = new JSONObject(); - resuft.put("point_code1", point_code1); - resuft.put("vehicle_type", jsonOrder.getString("vehicle_type")); - return resuft; - } } 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 67def70..c44c1c7 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 @@ -50,15 +50,6 @@ public class PointToPointTask extends AbstractAcsTask { } - @Override - public JSONObject findStartPoint(JSONObject param) { - return null; - } - - @Override - public JSONObject findNextPoint(JSONObject param) { - return null; - } @Override 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 7aff03d..d46a668 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 @@ -102,15 +102,6 @@ public class SendEmpVehicleTask extends AbstractAcsTask { } } - @Override - public JSONObject findStartPoint(JSONObject param) { - return null; - } - - @Override - public JSONObject findNextPoint(JSONObject param) { - return null; - } @Override 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 6bff949..2d8c8de 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 @@ -115,13 +115,7 @@ public class SendMaterialTask extends AbstractAcsTask { } @Override - public JSONObject findStartPoint(JSONObject param) { - return null; - } - - - @Override - public JSONObject findNextPoint(JSONObject data) { + public void findNextPoint() { String task_status = TaskStatusEnum.SURE_START.getCode(); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONArray taskArry = taskTab.query("task_status='" + task_status + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0); @@ -158,8 +152,6 @@ public class SendMaterialTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } - return null; - } @Override 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 9a498b7..346b18c 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 @@ -84,15 +84,6 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask { } } - @Override - public JSONObject findStartPoint(JSONObject param) { - return null; - } - - @Override - public JSONObject findNextPoint(JSONObject param) { - return null; - } @Override @Transactional(rollbackFor = Exception.class) 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 new file mode 100644 index 0000000..7034b3a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql @@ -0,0 +1,112 @@ +[交易说明] + 交易名: 空载具出库业务 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为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 region_code in ('DPJQB01','YSQA01') + + OPTION 输入.vehicle_type <> "" + point.vehicle_type like 输入.vehicle_type + ENDOPTION + + order by out_empty_seq,point.vehicle_qty + + 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/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index 94552dafcd2185928aebcc3e7fe9ee4bc7b235e1..fba2f392528b6301a92fa145f5394b41df12a0af 100644 GIT binary patch delta 49267 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 I(}WlOAHR7nK>z>% delta 17848 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 bVudrEU0Z0~^?L;@LZ-NyPwe+Fr