From 302b4b44739c999b88b75acddb32eff6afdf3701 Mon Sep 17 00:00:00 2001 From: lyd <1419499670@qq.com> Date: Wed, 23 Nov 2022 19:15:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=B7=E7=A2=BE=E3=80=81=E5=8E=8B=E5=88=B6?= =?UTF-8?q?=E5=B7=A5=E5=BA=8F=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0=EF=BC=8C?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E6=95=B0=E6=8D=AE=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/config/ConfigParam.java | 23 --- .../basedata/service/dto/MaterialbaseDto.java | 5 + .../wms/ext/acs/rest/AcsToWmsController.java | 14 +- .../wms/ext/acs/service/AcsToWmsService.java | 8 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 64 ++++++--- .../nl/wms/pdm/service/dto/WorkorderDto.java | 9 ++ .../main/java/org/nl/wms/sch/SchTaskDto.java | 9 +- .../org/nl/wms/sch/manage/WorkOrderEnum.java | 5 +- .../org/nl/wms/sch/service/dto/PointDto.java | 9 ++ .../sch/service/impl/PointServiceImpl.java | 1 + .../org/nl/wms/sch/tasks/PointUpdateUtil.java | 58 ++++++++ .../callEmpty/HnCallEmptyVehicleTask.java | 35 ++--- .../callEmpty/YzjCallEmptyVehicleTask.java | 64 ++++----- .../wql/QSCH_hnCallEmptyVehicle_01.wql | 7 +- .../wql/QSCH_yzjCallEmptyVehicle_01.wql | 4 +- .../callMaterial/FjCallMaterialTask.java | 2 +- .../callMaterial/SzCallMaterialTask.java | 30 ++-- .../callMaterial/YzjCallMaterialTask.java | 131 +++++++++--------- .../wql/QSCH_szCallMaterial_01.wql | 4 +- .../wql/QSCH_yzjCallMaterial_01.wql | 5 +- .../sendEmpty/YzjSendEmpVehicleTask.java | 56 ++++---- .../wql/QSCH_yzjSendEmptyVehicle_01.wql | 2 +- .../sendMaterial/FjSendMaterialTask.java | 4 +- .../sendMaterial/HnSendMaterialTask.java | 55 ++++++-- .../tasks/sendMaterial/SendMaterialTask.java | 4 +- .../sendMaterial/SzSendMaterialTask.java | 4 +- .../sendMaterial/YzjSendMaterialTask.java | 47 ++++--- .../wql/QSCH_hnSendMaterial_01.wql | 58 ++++++-- .../src/main/java/org/nl/wms/wms.xls | Bin 280576 -> 326656 bytes lms/nladmin-ui/src/views/login.vue | 4 +- 30 files changed, 441 insertions(+), 280 deletions(-) delete mode 100644 lms/nladmin-system/src/main/java/org/nl/config/ConfigParam.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java diff --git a/lms/nladmin-system/src/main/java/org/nl/config/ConfigParam.java b/lms/nladmin-system/src/main/java/org/nl/config/ConfigParam.java deleted file mode 100644 index 6d832de..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/config/ConfigParam.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.nl.config; - -import org.springframework.context.annotation.Configuration; - -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.Map; - -/* - * @author ZZQ - * @Date 2022/11/16 4:32 下午 - */ -@Configuration -public class ConfigParam { - - //旧料盅叫料跟空盅入库都从公共点位回去 - public static Map YZJ_OLD_POINT = new HashMap<>(); - - @PostConstruct - public void initData(){ - //数据库更新该配置数据YZJ_OLD_POINT - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java index b8b4ac8..4e2cd84 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java @@ -97,6 +97,11 @@ public class MaterialbaseDto implements Serializable { private String material_height_type; + private String AlongSide; // A长边 + private String BshortSide; // B短边 + private String Htrapezoidal; // H梯形高 + private String Wthickness; // W厚度 + private Long ass_unit_id; private Long product_series; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 52ee1d3..e36add8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -56,7 +56,7 @@ public class AcsToWmsController { @PostMapping("/manipulatorApply") @Log("ACS机械手给WMS发送任务") @ApiOperation("ACS机械手给WMS发送任务") - public ResponseEntity manipulatorApply(@RequestBody Map whereJson) { + public ResponseEntity manipulatorApply(@RequestBody JSONObject whereJson) { acsToWmsService.manipulatorApply(whereJson); JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); @@ -64,6 +64,18 @@ public class AcsToWmsController { return new ResponseEntity<>(result, HttpStatus.OK); } + @PostMapping("/reverseGroup") + @Log("入窑口反向组盘") + @ApiOperation("入窑口反向组盘") + public ResponseEntity reverseGroup(@RequestBody JSONObject whereJson) { + acsToWmsService.reverseGroup(whereJson); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "发送任务成功"); + return new ResponseEntity<>(result, HttpStatus.OK); + } + + @PostMapping("/ispackage") @Log("ACS给WMS请求是否优先包装") @ApiOperation("ACS给WMS请求是否优先包装") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index a516363..2f35dc5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -56,7 +56,7 @@ public interface AcsToWmsService { * 组盘 * @param whereJson */ - void manipulatorApply(Map whereJson); + void manipulatorApply(JSONObject whereJson); /** * ACS给WMS请求是否优先包装 @@ -86,4 +86,10 @@ public interface AcsToWmsService { * @return Map */ Map getDeviceCodeByVehicleType(Map jsonObject); + + /** + * 入窑口反向组盘 + * @param whereJson + */ + void reverseGroup(JSONObject whereJson); } 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 1cb105f..4e82f83 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 @@ -199,8 +199,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * 根据type判断是什么业务类型: * 1.混碾机送料入库-困料货架 * 2.混碾机呼叫空托盘 - * 3.压制机下料位叫料出库 - * 4.压制机下料位送空托盘 + * 3.压制机上料位叫料出库 + * 4.压制机上料位送空盅 * 5.压制机满料入库 * 6.压制机呼叫空钢托盘 * 7.烧制叫料出库 @@ -214,13 +214,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { switch (type) { case "1": // 1.混碾机送料入库:混碾机物料送到困料货架 - if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("设备号不能为空"); // 创建任务 param.put("point_code1", point_code); // 起点 SpringContextHolder.getBean(HnSendMaterialTask.class).createTask(param); break; case "2": - if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("设备号不能为空"); param.put("point_code2", point_code); // 终点 // 创建任务 SpringContextHolder.getBean(HnCallEmptyVehicleTask.class).createTask(param); @@ -232,7 +230,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { SpringContextHolder.getBean(YzjCallMaterialTask.class).createTask(param); break; case "4": - // 压制机送空托盘 + // 压制机送空盅 param.put("point_code1", point_code); // 起点 // 创建任务 SpringContextHolder.getBean(YzjSendEmpVehicleTask.class).createTask(param); @@ -240,6 +238,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { case "5": // 压制机满料入库 param.put("point_code1", point_code); // 起点 + param.put("group_id", whereJson.getString("group_id")); // 组盘标识 // 创建任务 SpringContextHolder.getBean(YzjSendMaterialTask.class).createTask(param); break; @@ -295,28 +294,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * @param jsonObject */ @Override - public void manipulatorApply(Map jsonObject) { + public void manipulatorApply(JSONObject jsonObject) { //组盘 JSONObject produceInfoByCode = new JSONObject(); - String device_code = (String) jsonObject.get("device_code"); + String device_code = (String) jsonObject.get("device_code"); // 对接位 + // vehicle_code:不一定有,分拣码垛会提供木托盘载具号、压制码垛是不提供载具号 String vehicle_code = (String) jsonObject.get("vehicle_code"); String qty = String.valueOf(jsonObject.get("qty")); - produceInfoByCode = this.getProduceInfoByCode(device_code); + produceInfoByCode = this.getProduceInfoByCode(device_code); // 获取设备的 String material_id = (String) produceInfoByCode.get("material_id"); String cust_id = (String) produceInfoByCode.get("cust_id"); String producetask_id = (String) produceInfoByCode.get("producetask_id"); WQLObject.getWQLObject("st_buss_vehiclegroup").delete("vehicle_code ='" + vehicle_code + "'"); - // 如果上报不了,则去点位上取(木托盘情况) - if (StrUtil.equals("0", vehicle_code)) { - vehicle_code = produceInfoByCode.getString("vehicle_code"); - } +// // 如果上报不了,则去点位上取(木托盘情况) +// if (StrUtil.equals("0", vehicle_code)) { +// vehicle_code = produceInfoByCode.getString("vehicle_code"); +// } + JSONObject materialObj = WQLObject - .getWQLObject("MD_ME_Material") + .getWQLObject("MD_ME_MaterialBase") .query("material_id='" + material_id + "'") .uniqueResult(0); JSONObject groubObj = new JSONObject(); - groubObj.put("group_id", IdUtil.getSnowflake(1, 1).nextId()); - + long nextId = IdUtil.getSnowflake(1, 1).nextId(); + groubObj.put("group_id", nextId); groubObj.put("vehicle_code", vehicle_code); groubObj.put("material_uuid", material_id); groubObj.put("material_code", materialObj.getString("material_code")); @@ -324,10 +325,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { groubObj.put("cust_id", cust_id); groubObj.put("qty", qty); groubObj.put("producetask_id", producetask_id); - groubObj.put("AlongSide", jsonObject.get("AlongSide")); - groubObj.put("BshortSide", jsonObject.get("BshortSide")); - groubObj.put("Htrapezoidal", jsonObject.get("Htrapezoidal")); - groubObj.put("Wthickness", jsonObject.get("Wthickness")); +// groubObj.put("AlongSide", jsonObject.get("AlongSide")); +// groubObj.put("BshortSide", jsonObject.get("BshortSide")); +// groubObj.put("Htrapezoidal", jsonObject.get("Htrapezoidal")); +// groubObj.put("Wthickness", jsonObject.get("Wthickness")); groubObj.put("tray_qty", jsonObject.get("tray_qty")); groubObj.put("crib_category", jsonObject.get("crib_category")); groubObj.put("tray_high", jsonObject.get("tray_high")); @@ -386,13 +387,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { groubObj.put("create_name", SecurityUtils.getCurrentNickName()); groubObj.put("create_time", DateUtil.now()); WQLObject.getWQLObject("st_buss_vehiclegroup").insert(groubObj); + jsonObject.put("group_id", nextId); // 组盘标识 // 判断是分拣还是压制的送料入库 if (device_code.startsWith("FJCD")) { jsonObject.put("type", "11"); } else { jsonObject.put("type", "5"); } - this.apply((JSONObject) jsonObject); + this.apply(jsonObject); } /** @@ -558,14 +560,32 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return returnjo; } - private JSONObject getProduceInfoByCode(String code) { + /** + * 入窑口反向组盘 + * + * @param whereJson + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void reverseGroup(JSONObject whereJson) { + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); + String vehicle_code = whereJson.getString("vehicle_code"); + JSONObject rywPoint = pointTab.query("point_code = 'RYW'").uniqueResult(0); + String group_id = rywPoint.getString("group_id"); + JSONObject group = groupTab.query("group_id = '" + group_id + "'").uniqueResult(0); + group.put("vehicle_code", vehicle_code); + groupTab.update(group); + } + + private JSONObject getProduceInfoByCode(String code) { // 查找工单 //根据 设备点位去找生产任务信息 //1 根据点位去找设备,去找对应的设备信息 JSONObject pointObj = WQLObject.getWQLObject("sch_base_point").query("point_code ='" + code + "'").uniqueResult(0); String device_code = pointObj.getString("device_code"); //2 根据设备去找对应的生产任务 1-未生产、2-已下发、3-生产中、4-暂停、5-完成 JSONObject productTaskObj = WQLObject.getWQLObject("PDM_BD_WorkOrder") - .query("device_code ='" + device_code + "' and producetask_status in ('3','2','4')", "seq_no") + .query("device_code ='" + device_code + "' and order_status in ('3','2','4')", "workorder_procedure") .uniqueResult(0); if (ObjectUtil.isEmpty(productTaskObj)) { throw new BadRequestException("未找到点位为'" + code + "'的生产任务!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java index b4c2586..ab88c38 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java @@ -55,6 +55,9 @@ public class WorkorderDto implements Serializable { /** 工单状态 */ private String order_status; + /** 新旧物料 */ + private String is_new; + /** 是否搬运 */ private String is_needmove; @@ -90,4 +93,10 @@ public class WorkorderDto implements Serializable { /** 修改时间 */ private String update_time; + + /** 静置时间 */ + private String standing_time; + + /** 阈值时间 */ + private String warn_time; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/SchTaskDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/SchTaskDto.java index 313d52d..3c84779 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/SchTaskDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/SchTaskDto.java @@ -63,9 +63,14 @@ public class SchTaskDto implements Serializable { private String point_code4; /** - * 物料详细信息,满料请求,取工单标识,组盘时候取组盘表 + * 物料详细信息,满料请求,工单标识 */ - private Long material_info_id; + private Long workorder_id; + + /** + * 组盘标识 + */ + private Long group_id; /** * 物料标识 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java index 913b1f2..cf7a7bb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java @@ -11,7 +11,10 @@ public enum WorkOrderEnum { ORDER_STATUS_DELIVERED("2", "已下发"), ORDER_STATUS_PRODUCING("3", "生产中"), ORDER_STATUS_STOP("4", "停止"), - ORDER_STATUS_FINISH("5", "完成") + ORDER_STATUS_FINISH("5", "完成"), + + IS_NEW_MATERIAL("1", "新物料"), + IS_OLD_MATERIAL("2", "旧物料") ; private final String code; private final String name; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java index 2e0b9bb..a27e6c7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java @@ -142,6 +142,12 @@ public class PointDto implements Serializable { /** 计量单位标识 */ private Long qty_unit_id; + /** 库存数 */ + private BigDecimal ivt_weight; + + /** 计量单位标识 */ + private Long weight_unit_id; + /** 入库时间 */ private String instorage_time; @@ -150,4 +156,7 @@ public class PointDto implements Serializable { /** 是否关联库存表 */ private String is_ref_ivt; + + /** 组盘标识 */ + private Long group_id; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index 752734a..9a97af1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -172,6 +172,7 @@ public class PointServiceImpl implements PointService { dto.setVehicle_code(""); dto.setVehicle_qty(""); dto.setPcsn(""); + dto.setTask_id(null); dto.setIvt_qty(BigDecimal.valueOf(0)); dto.setInstorage_time(null); dto.setStanding_time(BigDecimal.valueOf(0)); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java new file mode 100644 index 0000000..2759a9b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java @@ -0,0 +1,58 @@ +package org.nl.wms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.manage.PointEnum; + +/** + * @author: lyd + * @description: 点位更新工具类 + * @Date: 2022/11/23 + */ +public class PointUpdateUtil { + + /** + * 清理点位 + */ + public static void clearPoint(String point_code) { + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + JSONObject pointObj = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); + pointObj.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); + pointObj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); + pointObj.put("vehicle_type", null); + pointObj.put("vehicle_code", null); + pointObj.put("vehicle_qty", "0"); + pointObj.put("material_id", null); + pointObj.put("pcsn", null); + pointObj.put("ivt_qty", "0"); + pointObj.put("qty_unit_id", null); + pointObj.put("ivt_weight", "0"); + pointObj.put("weight_unit_id", null); + pointObj.put("instorage_time", null); + pointObj.put("is_full", "0"); + pointObj.put("standing_time", "0"); + pointObj.put("warn_time", "0"); + pointObj.put("group_id", null); + pointTab.update(pointObj); + } + + /** + * 点位:空载具 + */ + public static void setVehicle(JSONObject jsonObject) { + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + JSONObject pointObj = pointTab.query("point_code = '" + jsonObject.getString("point_code") + "'").uniqueResult(0); + pointObj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); + pointObj.put("point_status", PointEnum.POINT_STATUS_EMPTY_VEHICLE.getCode()); + pointObj.put("vehicle_code", jsonObject.getString("vehicle_code")); + pointObj.put("vehicle_qty", "1"); + pointObj.put("instorage_time", DateUtil.now()); + pointObj.put("is_full", "1"); + pointObj.put("ivt_qty", "0"); + pointObj.put("pcsn", null); + pointObj.put("material_id", null); + pointObj.put("standing_time", "0"); + pointTab.update(pointObj); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java index 712c78a..899f0c8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java @@ -16,8 +16,11 @@ import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.SchTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.PointEnum; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.manage.UpdateTaskStatusEnum; import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.sch.tasks.PointUpdateUtil; import org.nl.wms.sch.tasks.RegionTypeEnum; import org.springframework.stereotype.Service; @@ -83,7 +86,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { String task_id = task.getString("task_id"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - if (StrUtil.equals(status, "0")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { /* * 取消任务 */ @@ -92,9 +95,9 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { } String point_code1 = task.getString("point_code1"); - if (ObjectUtil.isEmpty(point_code1)) { + if (ObjectUtil.isNotEmpty(point_code1)) { JSONObject endPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - endPoint.put("lock_type", "1"); + endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); pointTab.update(endPoint); } taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); @@ -103,7 +106,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { taskTab.update(taskObj); } - if ("1".equals(status)) { + if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { // 更新任务状态为执行中 taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); taskObj.put("update_time", DateUtil.now()); @@ -111,7 +114,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { taskTab.update(taskObj); } - if (StrUtil.equals(status, "2")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { /* * 更改任务状态为完成 */ @@ -122,13 +125,11 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { taskTab.update(taskObj); /** - * 点位更新,起点:空位,解锁; + * 点位更新,起点:空位 */ String point_code1 = taskObj.getString("point_code1"); - JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - startPoint.put("point_status", "1"); - startPoint.put("lock_type", "1"); - pointTab.update(startPoint); + if (ObjectUtil.isEmpty(point_code1)) return; + PointUpdateUtil.clearPoint(point_code1); } } @@ -165,8 +166,9 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) .acs_task_type("2") + .workorder_id(workOrderObj.getLong("workorder_id")) .vehicle_code(form.getString("vehicle_code")) - .vehicle_type(workOrderObj.getString("vehicle_type"))//载具类型统一用载具表维护 + .vehicle_type(workOrderObj.getString("is_new"))//载具类型统一用载具表维护 .vehicle_qty(form.getIntValue("qty")) .task_group_id(org.nl.wms.util.IdUtil.getLongId()) .handle_class(THIS_CLASS) @@ -197,9 +199,8 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { // 创建任务 JSONObject taskObj = taskArr.getJSONObject(i); // 获取工单 - String point_code2 = taskObj.getString("point_code2"); - String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code"); - JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); + String workorder_id = taskObj.getString("workorder_id"); + JSONObject workOrderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); JSONObject param1 = new JSONObject(); param1.put("flag", "1"); @@ -219,7 +220,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { //锁住起点 startPoint.put("task_id", taskObj.getString("task_id")); - startPoint.put("lock_type", "2"); + startPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); pointTab.update(startPoint); } } @@ -240,7 +241,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"2"); + this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.FORCEFINISH.getCode()); else { throw new BadRequestException("未找到该任务或者任务已完成!"); } @@ -256,7 +257,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"0"); + this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode()); else { throw new BadRequestException("未找到该任务或者任务已完成!"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java index 4aaa9c3..4635593 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java @@ -14,9 +14,9 @@ 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.SchTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.manage.*; import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.sch.tasks.PointUpdateUtil; import org.nl.wms.util.IdUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -86,26 +86,25 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { String point_code1 = task.getString("point_code1"); - if (StrUtil.equals(status, "0")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { /* * 取消任务 */ if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { throw new BadRequestException("已完成不能取消!"); } - if (ObjectUtil.isNotEmpty(point_code1)) { - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", "已取消"); + taskTab.update(taskObj); + if (ObjectUtil.isNotEmpty(point_code1) && !point_code1.equals("KGTDDW05")) { JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - startPoint.put("lock_type", "1"); + startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); pointTab.update(startPoint); } } - if ("1".equals(status)) { + if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { // 更新任务状态为执行中 taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); taskObj.put("update_time", DateUtil.now()); @@ -113,7 +112,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { taskTab.update(taskObj); } - if (StrUtil.equals(status,"2")) { + if (StrUtil.equals(status,UpdateTaskStatusEnum.FORCEFINISH.getCode())) { /* * 更改任务状态为完成 */ @@ -124,46 +123,31 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { taskTab.update(taskObj); JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - if (point_code1.startsWith("L")) { // 入窑缓存位 + if (point_code1.startsWith("R")) { // 入窑缓存位 // 插入出库单 JSONObject regionIoObj = new JSONObject(); regionIoObj.put("iostorinv_id", IdUtil.getLongId()); regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); regionIoObj.put("buss_date", DateUtil.today()); - regionIoObj.put("io_type", "2"); // 出库 + regionIoObj.put("io_type", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 regionIoObj.put("region_id", startPoint.getString("region_id")); regionIoObj.put("region_code", startPoint.getString("region_code")); regionIoObj.put("region_name", startPoint.getString("region_name")); regionIoObj.put("material_id", taskObj.getString("material_id")); regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("bill_status", "3"); + regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", "2"); + regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); // 点位更新,起点:空位,解锁; - startPoint.put("point_status", "1"); - startPoint.put("lock_type", "1"); - startPoint.put("task_id", ""); - startPoint.put("pcsn", ""); - startPoint.put("ivt_qty", "0"); - startPoint.put("material_id", ""); - startPoint.put("instorage_time", ""); - startPoint.put("is_full", "2"); - startPoint.put("standing_time", "0"); - startPoint.put("vehicle_type", ""); - startPoint.put("vehicle_code", ""); - } else { // 钢托盘每次就一个 --- 如果是堆叠位5需要更新设备状态?? - startPoint.put("point_status", "1"); - startPoint.put("lock_type", "1"); - startPoint.put("vehicle_qty", "0"); + PointUpdateUtil.clearPoint(startPoint.getString("point_code")); } - pointTab.update(startPoint); } } @@ -187,11 +171,8 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + form.getString("point_code2") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + form.getString("point_code2") + "存在未完成的任务"); - String point_code2 = form.getString("point_code2"); - String sub_device_code = point_code2.substring(0, point_code2.indexOf("_")); - - String device_code = pointTab.query("point_code = '" + sub_device_code + "'").uniqueResult(0).getString("device_code"); + String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code"); JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除"); @@ -203,11 +184,13 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) .acs_task_type("2") - .vehicle_code(form.getString("vehicle_code")) - .vehicle_type(workOrderObj.getString("vehicle_type")) + .material_id(workOrderObj.getLong("material_id")) + .workorder_id(workOrderObj.getLong("workorder_id")) + .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) .vehicle_qty(form.getIntValue("qty")) .task_group_id(org.nl.wms.util.IdUtil.getLongId()) .handle_class(THIS_CLASS) + .request_param(form.toJSONString()) .create_time(DateUtil.now()) .build(); JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); @@ -247,9 +230,10 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { //锁住起点 noFullPoint.put("task_id", taskObj.getString("task_id")); - noFullPoint.put("lock_type", "2"); + noFullPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); pointTab.update(noFullPoint); } else { // 到KGTDDW05找空钢托盘 + // 向ACS查询是否有空钢托盘 JSONObject param = new JSONObject(); param.put("flag", "2"); param.put("region_code", "KGTCPQ"); @@ -263,7 +247,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { //锁住起点 kgtPoint.put("task_id", taskObj.getString("task_id")); - kgtPoint.put("lock_type", "2"); + kgtPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); pointTab.update(kgtPoint); } else { taskObj.put("remark", "未找到可用的载具!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_hnCallEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_hnCallEmptyVehicle_01.wql index 7c0b63d..682220d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_hnCallEmptyVehicle_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_hnCallEmptyVehicle_01.wql @@ -48,17 +48,16 @@ IF 输入.flag = "1" p.point_name FROM SCH_BASE_Point p - LEFT JOIN md_pb_vehicle vehicle ON vehicle.vehicle_code = p.vehicle_code WHERE - lock_type = '1' - AND is_used = '1' + lock_type = '1' + AND is_used = '1' AND is_delete = '0' AND point_status = '2' OPTION 输入.region_code <> "" p.region_code = 输入.region_code ENDOPTION OPTION 输入.is_new <> "" - vehicle.vehicle_type = 输入.is_new + p.vehicle_type = 输入.is_new ENDOPTION ENDSELECT ENDQUERY diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql index c92d852..c240eac 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql @@ -51,9 +51,9 @@ WHERE lock_type = '1' AND is_used = '1' - AND is_full = '2' + AND is_full = '0' AND is_delete = '0' - AND point_status = '2' + AND point_status = '3' OPTION 输入.region_code <> "" p.region_code = 输入.region_code ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java index c091d03..f4dad83 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java @@ -187,7 +187,7 @@ public class FjCallMaterialTask extends AbstractAcsTask { .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) .vehicle_code(vehicle_code) - .material_info_id(workOrderObj.getLong("workorder_id")) + .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) .vehicle_type(vehicle_type) .handle_class(THIS_CLASS) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/SzCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/SzCallMaterialTask.java index 9125628..20ca49e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/SzCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/SzCallMaterialTask.java @@ -14,10 +14,9 @@ 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.SchTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.manage.UpdateTaskStatusEnum; +import org.nl.wms.sch.manage.*; import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.sch.tasks.PointUpdateUtil; import org.nl.wms.util.IdUtil; import org.springframework.stereotype.Service; @@ -94,7 +93,7 @@ public class SzCallMaterialTask extends AbstractAcsTask { if (ObjectUtil.isNotEmpty(material_point)) { // 点位解锁 - material_point.put("lock_type", "1"); + material_point.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); pointTab.update(material_point); } } @@ -121,17 +120,17 @@ public class SzCallMaterialTask extends AbstractAcsTask { regionIoObj.put("iostorinv_id", IdUtil.getLongId()); regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); regionIoObj.put("buss_date", DateUtil.today()); - regionIoObj.put("io_type", "2"); // 出库 + regionIoObj.put("io_type", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 regionIoObj.put("region_id", material_point.getString("region_id")); regionIoObj.put("region_code", material_point.getString("region_code")); regionIoObj.put("region_name", material_point.getString("region_name")); regionIoObj.put("material_id", taskObj.getString("material_id")); regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("bill_status", "3"); + regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", "2"); + regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); @@ -140,18 +139,7 @@ public class SzCallMaterialTask extends AbstractAcsTask { //完成后 // 物料点位解锁 并设置空位 - material_point.put("lock_type", "1"); - material_point.put("point_status", "1"); - material_point.put("task_id", ""); - material_point.put("pcsn", ""); - material_point.put("ivt_qty", "0"); - material_point.put("material_id", ""); - material_point.put("instorage_time", ""); - material_point.put("is_full", "2"); - material_point.put("standing_time", "0"); - material_point.put("vehicle_type", ""); - material_point.put("vehicle_code", ""); - pointTab.update(material_point); + PointUpdateUtil.clearPoint(material_point.getString("point_code")); } } @@ -188,7 +176,7 @@ public class SzCallMaterialTask extends AbstractAcsTask { .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) .vehicle_code(vehicle_code) - .material_info_id(workOrderObj.getLong("workorder_id")) + .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) .vehicle_type(vehicle_type) .handle_class(THIS_CLASS) @@ -231,7 +219,7 @@ public class SzCallMaterialTask extends AbstractAcsTask { JSONObject material_point = pointTab.query("point_id = '" + json1.getString("point_id") + "' and lock_type = '1'").uniqueResult(0); if (ObjectUtil.isEmpty(material_point)) throw new BadRequestException("数据错误,请校验!"); // 物料点位上锁 - material_point.put("lock_type", "2"); + material_point.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); pointTab.update(material_point); taskObj.put("point_code1", material_point.getString("point_code")); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java index 10a52c8..f3cdb1a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java @@ -9,22 +9,20 @@ import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.nl.config.ConfigParam; 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.SchTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.manage.*; import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.sch.tasks.PointUpdateUtil; import org.nl.wms.util.IdUtil; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.*; -import java.util.function.BiConsumer; -import java.util.function.Predicate; /** * @author: lyd @@ -36,8 +34,6 @@ import java.util.function.Predicate; @Slf4j public class YzjCallMaterialTask extends AbstractAcsTask { private final String THIS_CLASS = YzjCallMaterialTask.class.getName(); - //start point,[endpoint1,endpoin2] - public static Map YZJ_OLD_POINT = new HashMap<>(); /** * 添加任务进行下发 * @@ -87,7 +83,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask { // 物料点 JSONObject material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0); //任务取消 - if (StrUtil.equals(status, "0")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { // 取消删除任务 if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { throw new BadRequestException("已完成不能取消!"); @@ -96,12 +92,13 @@ public class YzjCallMaterialTask extends AbstractAcsTask { taskObj.put("remark", "已取消"); taskTab.update(taskObj); - // 点位解锁 - material_point.put("lock_type", "1"); + if (ObjectUtil.isEmpty(material_point)) return; + // 解锁 + material_point.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); pointTab.update(material_point); } - if ("1".equals(status)) { + if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { // 更新任务状态为执行中 taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); taskObj.put("update_time", DateUtil.now()); @@ -109,52 +106,38 @@ public class YzjCallMaterialTask extends AbstractAcsTask { taskTab.update(taskObj); } - if (StrUtil.equals(status, "2")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { // 更改任务状态为完成 taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); - + if (ObjectUtil.isEmpty(material_point)) return; JSONObject requestObj = task.getJSONObject("request_param"); - - 插入区域表:{ - //区域出入表【st_ivt_regionIO】 - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - JSONObject regionIoObj = new JSONObject(); - regionIoObj.put("iostorinv_id", IdUtil.getLongId()); - regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); - regionIoObj.put("buss_date", DateUtil.today()); - regionIoObj.put("io_type", "2"); // 出库 - regionIoObj.put("region_id", material_point.getString("region_id")); - regionIoObj.put("region_code", material_point.getString("region_code")); - regionIoObj.put("region_name", material_point.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("bill_status", "3"); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", "2"); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - } + // 区域出入表【st_ivt_regionIO】 + WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); + JSONObject regionIoObj = new JSONObject(); + regionIoObj.put("iostorinv_id", IdUtil.getLongId()); + regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); + regionIoObj.put("buss_date", DateUtil.today()); + regionIoObj.put("io_type", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 + regionIoObj.put("region_id", material_point.getString("region_id")); + regionIoObj.put("region_code", material_point.getString("region_code")); + regionIoObj.put("region_name", material_point.getString("region_name")); + regionIoObj.put("material_id", taskObj.getString("material_id")); + regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); + regionIoObj.put("qty", requestObj.getString("qty")); + regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); + regionIoObj.put("start_point_code", taskObj.getString("point_code1")); + regionIoObj.put("end_point_code", taskObj.getString("point_code2")); + regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); + regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); + regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); + regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_time", DateUtil.now()); + regionIoTab.insert(regionIoObj); //完成后 // 物料点位解锁 并设置空位 - material_point.put("lock_type", "1"); - material_point.put("point_status", "1"); - material_point.put("task_id", ""); - material_point.put("pcsn", ""); - material_point.put("ivt_qty", "0"); - material_point.put("material_id", ""); - material_point.put("instorage_time", ""); - material_point.put("is_full", "2"); - material_point.put("standing_time", "0"); - material_point.put("vehicle_type", ""); - material_point.put("vehicle_code", ""); - pointTab.update(material_point); + PointUpdateUtil.clearPoint(material_point.getString("point_code")); } } @@ -181,20 +164,21 @@ public class YzjCallMaterialTask extends AbstractAcsTask { String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code"); JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除"); - String oldMatSendPoint = ConfigParam.YZJ_OLD_POINT.get(point_code2);//旧料盅终点 - if (StringUtils.isNotEmpty(oldMatSendPoint)){ - point_code2=oldMatSendPoint; - } + SchTaskDto dto = SchTaskDto.builder() .task_id(IdUtil.getLongId()) .task_code(CodeUtil.getNewCode("TASK_CODE")) .task_type("task_type") .task_name("压制机叫料") .material_qty(qty) + .acs_task_type("2") + .vehicle_type(workOrderObj.getString("is_new")) + .workorder_id(workOrderObj.getLong("workorder_id")) .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) .vehicle_code(vehicle_code) - .material_info_id(workOrderObj.getLong("workorder_id")) + .vehicle_type(workOrderObj.getString("vehicle_type")) + .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) .vehicle_type(vehicle_type) .handle_class(THIS_CLASS) @@ -216,25 +200,39 @@ public class YzjCallMaterialTask extends AbstractAcsTask { * @created 2020年6月12日 下午6:01:30 */ @Override + @Transactional(rollbackFor = Exception.class) public void findStartPoint() { - /* + /** * 根据业务找对应的起点,直接到困料货架获取 + * 如果是普通压制机:区分新旧物料、新料有对接位,旧料需要查找放到哪个旧盅货架 + * 如果是液压机:手持呼叫,到困料货架查找相同物料的料盅(这里只能是新料盅) */ WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 工单表 + WQLObject deviceTab = WQLObject.getWQLObject("PDM_BI_Device"); // 设备表 JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); for (int i = 0; i < taskArr.size(); i++) { JSONObject taskObj = taskArr.getJSONObject(i); - // 获取工单 + // point_code2是对应的上料点 String point_code2 = taskObj.getString("point_code2"); - String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code"); - - JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); + JSONObject point = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + String device_code = point.getString("device_code"); + // 获取工单 + JSONObject workOrderObj = workOrderTab.query("workorder_id = '" + taskObj.getString("workorder_id") + "'").uniqueResult(0); + JSONObject deviceObj = deviceTab.query("device_code = '" + device_code + "'").uniqueResult(0); + if (deviceObj.getString("device_model").equals("3")) { // 普通压制机:区分新旧物料 + // 新物料終点不用修改 + if (workOrderObj.getString("is_new").equals(WorkOrderEnum.IS_OLD_MATERIAL.getCode())) { // 旧物料 + // 查找该设备对应的旧盅位 + JSONObject endPoint = pointTab.query("region_code = 'KLHJ' AND point_type = '4' AND device_code LIKE '%" + + point_code2 + "%' AND point_status = '1' AND is_used = '1' AND is_delete = '0' AND lock_type = '1'").uniqueResult(0); + point_code2 = endPoint.getString("point_code"); // 未锁的旧盅货架位 + } + } String material_id = taskObj.getString("material_id"); - String vehicle_type = taskObj.getString("vehicle_type"); JSONObject queryParam = new JSONObject(); queryParam.put("flag", "1"); queryParam.put("material_id", material_id); @@ -243,23 +241,22 @@ public class YzjCallMaterialTask extends AbstractAcsTask { JSONObject json1 = WQL.getWO("QSCH_yzjCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(json1)) { // 拿到点位 - JSONObject material_point = pointTab.query("point_id = '" + json1.getString("point_id") + "' and lock_type = '1'").uniqueResult(0); + JSONObject material_point = pointTab.query("point_id = '" + json1.getString("point_id") + "'").uniqueResult(0); if (ObjectUtil.isEmpty(material_point)) throw new BadRequestException("数据错误,请校验!"); // 物料点位上锁 - material_point.put("lock_type", "2"); + material_point.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); + material_point.put("task_id", taskObj.getString("task_id")); pointTab.update(material_point); + taskObj.put("point_code2", point_code2); taskObj.put("point_code1", material_point.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskObj.put("acs_task_type", "2"); taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); } else { taskObj.put("remark", "困料货架无所需物料"); taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); } - + taskTab.update(taskObj); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_szCallMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_szCallMaterial_01.wql index b4bbdc9..d91c3f6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_szCallMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_szCallMaterial_01.wql @@ -54,7 +54,7 @@ WHERE p.is_used = '1' AND is_delete = '0' - AND lock_type='1' + AND lock_type = '1' AND point_status = '3' OPTION 输入.material_id <> "" p.material_id = 输入.material_id @@ -65,7 +65,7 @@ OPTION 输入.vehicle_type <> "" p.can_vehicle_type like 输入.vehicle_type ENDOPTION - ORDER BY is_full desc,col_num,row_num,layer_num + ORDER BY is_full desc ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yzjCallMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yzjCallMaterial_01.wql index 8a708a4..c324ca2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yzjCallMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yzjCallMaterial_01.wql @@ -49,11 +49,12 @@ FROM SCH_BASE_Point p WHERE - p.is_used = '1' + lock_type = '1' + AND p.is_used = '1' AND standing_time is not null AND now() > DATE_ADD(instorage_time,INTERVAL standing_time MINUTE) AND is_delete = '0' - AND lock_type='1' + AND point_type = '1' AND point_status = '3' OPTION 输入.material_id <> "" p.material_id = 输入.material_id diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java index b62907b..f3c39eb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java @@ -9,7 +9,6 @@ import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.nl.config.ConfigParam; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.system.util.CodeUtil; @@ -17,9 +16,11 @@ import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.SchTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.PointEnum; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.manage.UpdateTaskStatusEnum; import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.RegionTypeEnum; +import org.nl.wms.sch.tasks.PointUpdateUtil; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -83,7 +84,7 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { String point_code2 = taskObj.getString("point_code2"); JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - if (StrUtil.equals(status, "0")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { // 取消删除任务 if (StrUtil.equals(jsonTask.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { throw new BadRequestException("已完成不能取消!"); @@ -91,7 +92,7 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { // 解锁终点位置 if (ObjectUtil.isNotEmpty(point_code2)) { // 未找到终点的取消只需要完成任务就行 JSONObject point2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point2.put("lock_type", "1"); + point2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); pointTab.update(point2); } // 任务设置为完成 @@ -100,7 +101,7 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { taskTab.update(jsonTask); } - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { // 更新任务状态为执行中 jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); jsonTask.put("update_time", DateUtil.now()); @@ -108,7 +109,7 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { taskTab.update(jsonTask); } - if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { // 更改任务状态为完成 jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); @@ -117,18 +118,10 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { taskTab.update(jsonTask); // 释放点位 if (ObjectUtil.isNotEmpty(point_code2)) { // 防止只有确定起点的任务完成 - JSONObject point_2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point_2.put("lock_type", "1"); - point_2.put("point_status", "2"); - point_2.put("vehicle_code", jsonTask.getString("vehicle_code")); - point_2.put("vehicle_qty", "1"); - point_2.put("instorage_time", DateUtil.now()); - point_2.put("is_full", "1"); - point_2.put("ivt_qty", "0"); - point_2.put("pcsn", ""); - point_2.put("material_id", ""); - point_2.put("standing_time", "0"); - pointTab.update(point_2); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("point_code", point_code2); + jsonObject.put("vehicle_code", jsonTask.getString("vehicle_code")); + PointUpdateUtil.setVehicle(jsonObject); } } } @@ -147,17 +140,13 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 String point_code1 = form.getString("point_code1"); - String oldMatSendPoint = ConfigParam.YZJ_OLD_POINT.get(point_code1);//旧空料盅的回库的话从公共点位返回 - if (StringUtils.isNotEmpty(oldMatSendPoint)){ - point_code1=oldMatSendPoint; - } SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId()) .task_code(CodeUtil.getNewCode("TASK_CODE")) .task_type("") .task_name("压制机空盅入库") .task_status(TaskStatusEnum.SURE_START.getCode()) .point_code1(point_code1) - .vehicle_code(form.getString("vehicle_code")) + .vehicle_code(form.getString("vehicle_code")) // 送空盅需要 .vehicle_type(form.getString("vehicle_type")) .vehicle_qty(form.getIntValue("qty")) .handle_class(THIS_CLASS) @@ -206,7 +195,7 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { //锁住终点 endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", "2"); + endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); pointTab.update(endPoint); } } @@ -221,7 +210,16 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { */ @Override public void forceFinish(String task_id) { - + /* + * 强制完成 + */ + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) + this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.FORCEFINISH.getCode()); + else { + throw new BadRequestException("未找到该任务或者任务已完成!"); + } } /** @@ -231,6 +229,12 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { */ @Override public void cancel(String task_id) { - + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) + this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode()); + else { + throw new BadRequestException("未找到该任务或者任务已完成!"); + } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql index 92cd9e6..61a4c22 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql @@ -54,7 +54,7 @@ WHERE p.is_used = '1' AND is_delete = '0' - AND lock_type='1' + AND lock_type = '1' AND point_status = '1' OPTION 输入.material_id <> "" p.material_id = 输入.material_id diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java index 7c88607..dbfc267 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java @@ -96,7 +96,7 @@ public class FjSendMaterialTask extends AbstractAcsTask { JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); JSONObject requestObj = task.getJSONObject("request_param"); //工单标识 - String workorder_id = requestObj.getString("material_info_id"); + String workorder_id = requestObj.getString("workorder_id"); //生产工单表【PDM_BD_WorkOrder】 WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0); @@ -177,7 +177,7 @@ public class FjSendMaterialTask extends AbstractAcsTask { .point_code1(point_code1) .vehicle_code(vehicle_code) .vehicle_type(workOrderObj.getString("vehicle_type")) - .material_info_id(workOrderObj.getLong("workorder_id")) + .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java index 5b882a2..32d350a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java @@ -126,7 +126,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); JSONObject requestObj = task.getJSONObject("request_param"); // 工单标识 - String workorder_id = taskObj.getString("material_info_id"); + String workorder_id = taskObj.getString("workorder_id"); JSONObject workorderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); // 物料 JSONObject materialObj = materialTab.query("material_id = '" + workorderObj.getString("material_id") + "'").uniqueResult(0); @@ -145,7 +145,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { regionIoObj.put("material_id", taskObj.getString("material_id")); regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("is_new", workorderObj.getString("is_new")); + regionIoObj.put("ivt_weight", requestObj.getString("weight")); regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code2")); @@ -160,6 +160,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { point2Obj.put("instorage_time", taskObj.getString("create_time")); // 入库时间为任务生成的时间 point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); point2Obj.put("ivt_qty", requestObj.getString("qty")); + point2Obj.put("ivt_weight", requestObj.getString("weight")); point2Obj.put("standing_time", materialObj.getString("standing_time")); point2Obj.put("warn_time", materialObj.getString("warn_time")); point2Obj.put("material_id", workorderObj.getString("material_id")); @@ -186,7 +187,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { String vehicle_code = form.getString("vehicle_code"); String qty = form.getString("qty"); String is_full = form.getString("is_full"); - String weight = form.getString("weight"); // 未存 + String weight = form.getString("weight"); //任务表【SCH_BASE_Task】 WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); //判断当前点是否有未完成的任务 @@ -212,7 +213,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { .point_code1(point_code1) .vehicle_code(vehicle_code) .vehicle_type(workOrderObj.getString("vehicle_type")) - .material_info_id(workOrderObj.getLong("workorder_id")) + .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) @@ -235,7 +236,8 @@ public class HnSendMaterialTask extends AbstractAcsTask { public void findNextPoint() { /** * 根据业务找到相应的终点 - * 高速混碾机下料先找高速压制机旁边的三个困料位,没有位置则去公共货架 + * 高速混碾机下料先判断高速压制机的工单生产的是不是相同的,是的话判断坤料货架是否有相同物料, + * 没有就去旁边的三个困料位,没有位置则去公共货架;工单不同或者困料货架没有相同物料则去公共货架 * 普通混碾机下料直接送到公共困料货架 */ WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); @@ -243,12 +245,47 @@ public class HnSendMaterialTask extends AbstractAcsTask { JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '2'").getResultJSONArray(0); for (int i = 0; i < taskArr.size(); i++) { JSONObject taskObj = taskArr.getJSONObject(i); - String vehicle_type = taskObj.getString("vehicle_type");//混碾载具类型新旧料? 工單不提供载具类型 + // 找生产改物料的液压机的工单 + JSONObject paramObj = new JSONObject(); + paramObj.put("flag", "1"); + paramObj.put("material_id", taskObj.getString("material_id")); + JSONArray workerOrders = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(paramObj).process().getResultJSONArray(0); + for (int j = 0; j < workerOrders.size(); j++) { + JSONObject workerOrder = workerOrders.getJSONObject(j); + // 判断仓库是否有该物料 + JSONObject param2 = new JSONObject(); + param2.put("flag", "2"); + param2.put("material_id", workerOrder.getString("material_id")); + param2.put("point_type", "1"); // 公用货架 + param2.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode()); // 有料 + JSONArray ivts = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(param2).process().getResultJSONArray(0); + if (ivts.size() > 0) continue; + // 判断是否有空位 + JSONObject param3 = new JSONObject(); + param3.put("flag", "2"); + param3.put("device_code", workerOrder.getString("device_code")); + param3.put("point_type", "2"); // 液压机旁边三个位置 + param3.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); // 空位 + JSONObject endPoint = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(param3).process().uniqueResult(0); + if (ObjectUtil.isEmpty(endPoint)) continue; + + // 找到位置就可以直接搬 + taskObj.put("update_time", DateUtil.now()); + taskObj.put("point_code2", endPoint.getString("point_code")); + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskTab.update(taskObj); + + // 点位上锁 + endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); + endPoint.put("task_id", taskObj.getString("task_id")); + pointTab.update(endPoint); + return; + } + // 其他情况直接搬到困料货架上 JSONObject param1 = new JSONObject(); - param1.put("flag", "1"); + param1.put("flag", "3"); param1.put("region_code", "KLHJ"); - param1.put("vehicle_type", "%" + vehicle_type + "%"); - //1、查找困料货架是否有响应的载具类型和对应的物料 + // 查找困料货架 JSONObject endPoint = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(param1).process().uniqueResult(0); if (ObjectUtil.isEmpty(endPoint)) { taskObj.put("remark", "困料货架无可用货位"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SendMaterialTask.java index 1e0f711..314a234 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SendMaterialTask.java @@ -111,7 +111,7 @@ public class SendMaterialTask extends AbstractAcsTask { JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); JSONObject requestObj = task.getJSONObject("request_param"); //工单标识 - String workorder_id = requestObj.getString("material_info_id"); + String workorder_id = requestObj.getString("workorder_id"); //生产工单表【PDM_BD_WorkOrder】 WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0); @@ -193,7 +193,7 @@ public class SendMaterialTask extends AbstractAcsTask { .point_code1(point_code1) .vehicle_code(vehicle_code) .vehicle_type(workOrderObj.getString("vehicle_type")) - .material_info_id(workOrderObj.getLong("workorder_id")) + .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java index 0bb88e4..e040b51 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java @@ -117,7 +117,7 @@ public class SzSendMaterialTask extends AbstractAcsTask { JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); JSONObject requestObj = task.getJSONObject("request_param"); //工单标识 - String workorder_id = requestObj.getString("material_info_id"); + String workorder_id = requestObj.getString("workorder_id"); //生产工单表【PDM_BD_WorkOrder】 WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0); @@ -199,7 +199,7 @@ public class SzSendMaterialTask extends AbstractAcsTask { .point_code1(point_code1) .vehicle_code(vehicle_code) .vehicle_type(workOrderObj.getString("vehicle_type")) - .material_info_id(workOrderObj.getLong("workorder_id")) + .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java index d2a902f..d4ba8a7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java @@ -14,8 +14,7 @@ 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.SchTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.manage.*; import org.nl.wms.sch.tasks.AcsTaskDto; import org.nl.wms.util.IdUtil; import org.springframework.stereotype.Service; @@ -81,15 +80,15 @@ public class YzjSendMaterialTask extends AbstractAcsTask { JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); //任务取消 - if (StrUtil.equals(status, "0")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { // 取消删除任务 if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { throw new BadRequestException("已完成不能取消!"); } String point_code2 = taskObj.getString("point_code2"); - if (ObjectUtil.isEmpty(point_code2)) { + if (ObjectUtil.isNotEmpty(point_code2)) { JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - endPoint.put("lock_type", "1"); + endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); pointTab.update(endPoint); } taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); @@ -97,7 +96,7 @@ public class YzjSendMaterialTask extends AbstractAcsTask { taskTab.update(taskObj); } - if ("1".equals(status)) { + if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { // 更新任务状态为执行中 taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); taskObj.put("update_time", DateUtil.now()); @@ -105,7 +104,7 @@ public class YzjSendMaterialTask extends AbstractAcsTask { taskTab.update(taskObj); } - if (StrUtil.equals(status, "2")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { // 更改任务状态为完成 taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); @@ -115,9 +114,10 @@ public class YzjSendMaterialTask extends AbstractAcsTask { String point_code2 = taskObj.getString("point_code2"); JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(point2Obj)) return; JSONObject requestObj = task.getJSONObject("request_param"); //工单标识 - String workorder_id = requestObj.getString("material_info_id"); + String workorder_id = requestObj.getString("workorder_id"); //生产工单表【PDM_BD_WorkOrder】 WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0); @@ -128,17 +128,18 @@ public class YzjSendMaterialTask extends AbstractAcsTask { regionIoObj.put("iostorinv_id", IdUtil.getLongId()); regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); regionIoObj.put("buss_date", DateUtil.today()); - regionIoObj.put("io_type", "1"); // 入库 + regionIoObj.put("io_type", RegionIOEnum.IO_TYPE_IN.getCode()); // 入库 regionIoObj.put("region_id", point2Obj.getString("region_id")); regionIoObj.put("region_code", point2Obj.getString("region_code")); regionIoObj.put("region_name", point2Obj.getString("region_name")); regionIoObj.put("material_id", taskObj.getString("material_id")); regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("bill_status", "3"); + regionIoObj.put("ivt_weight", requestObj.getString("weight")); + regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code3")); - regionIoObj.put("create_mode", "2"); + regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); @@ -149,15 +150,18 @@ public class YzjSendMaterialTask extends AbstractAcsTask { point2Obj.put("instorage_time", DateUtil.now()); point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); point2Obj.put("ivt_qty", requestObj.getString("qty")); + point2Obj.put("ivt_weight", requestObj.getString("weight")); point2Obj.put("standing_time", workorderObj.getString("standing_time")); + point2Obj.put("warn_time", workorderObj.getString("warn_time")); point2Obj.put("material_id", workorderObj.getString("material_id")); point2Obj.put("vehicle_type", workorderObj.getString("vehicle_type")); point2Obj.put("vehicle_code", taskObj.getString("vehicle_code")); + point2Obj.put("vehicle_qty", "1"); // 入库为1个载具 point2Obj.put("is_full", requestObj.getString("is_full")); - - // 终点解锁 - point2Obj.put("lock_type", "1"); - point2Obj.put("point_status", "3"); + point2Obj.put("group_id", taskObj.getString("group_id")); // 组盘标识 + // 解锁终点 + point2Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); + point2Obj.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode()); pointTab.update(point2Obj); } } @@ -198,8 +202,9 @@ public class YzjSendMaterialTask extends AbstractAcsTask { .task_status(TaskStatusEnum.SURE_START.getCode()) .point_code1(point_code1) .vehicle_code(vehicle_code) - .vehicle_type(workOrderObj.getString("vehicle_type")) - .material_info_id(workOrderObj.getLong("workorder_id")) + .group_id(form.getLong("group_id")) + .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) + .workorder_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) @@ -247,11 +252,9 @@ public class YzjSendMaterialTask extends AbstractAcsTask { //锁住终点 endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", "2"); + endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); pointTab.update(endPoint); } - - } } @@ -270,7 +273,7 @@ public class YzjSendMaterialTask extends AbstractAcsTask { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"2"); + this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.FORCEFINISH.getCode()); else { throw new BadRequestException("未找到该任务或者任务已完成!"); } @@ -286,7 +289,7 @@ public class YzjSendMaterialTask extends AbstractAcsTask { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"0"); + this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode()); else { throw new BadRequestException("未找到该任务或者任务已完成!"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql index b9158ab..813b6ec 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql @@ -14,9 +14,12 @@ ## 表字段对应输入参数 ################################################# 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string + 输入.region_code TYPEAS s_string + 输入.material_id TYPEAS s_string 输入.vehicle_type TYPEAS s_string + 输入.device_code TYPEAS s_string + 输入.point_type TYPEAS s_string + 输入.point_status TYPEAS s_string [临时表] @@ -40,7 +43,49 @@ ########################################## # 3、业务主过程 # ########################################## -IF 输入.flag = "1" + IF 输入.flag = "1" + QUERY + SELECT + workorder.* + FROM + pdm_bd_workorder workorder + LEFT JOIN pdm_bi_device device ON device.device_code = workorder.device_code + WHERE + workorder.order_status = '3' + AND + device.device_model = '4' + OPTION 输入.material_id <> "" + workorder.material_id = 输入.material_id + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + `sch_base_point` + WHERE + lock_type = '1' + AND region_code = 'KLHJ' + AND is_used = '1' + AND is_delete = '0' + OPTION 输入.material_id <> "" + material_id = 输入.material_id + ENDOPTION + OPTION 输入.point_type <> "" + point_type = 输入.point_type + ENDOPTION + OPTION 输入.point_status <> "" + point_status = 输入.point_status + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" QUERY SELECT p.point_id, @@ -49,13 +94,10 @@ IF 输入.flag = "1" FROM SCH_BASE_Point p WHERE - lock_type = '1' - AND is_used = '1' + lock_type = '1' + AND is_used = '1' AND is_delete = '0' AND point_status = '1' - OPTION 输入.vehicle_type <> "" - p.can_vehicle_type like 输入.vehicle_type - ENDOPTION OPTION 输入.region_code <> "" p.region_code = 输入.region_code ENDOPTION 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 50ef19375ae92485aa492e2e91ff904d3c203c2a..1936aed6b5d34d69fa76823d4c4eca8600860425 100644 GIT binary patch delta 99264 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 delta 65710 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 diff --git a/lms/nladmin-ui/src/views/login.vue b/lms/nladmin-ui/src/views/login.vue index caa6d06..b246c98 100644 --- a/lms/nladmin-ui/src/views/login.vue +++ b/lms/nladmin-ui/src/views/login.vue @@ -56,8 +56,8 @@ export default { codeUrl: '', cookiePass: '', loginForm: { - username: 'admin', - password: '123456', + username: '', + password: '', rememberMe: false, code: '', uuid: ''