From 6dfe56cff82e91bfeacfb8d0d79a47f7f1367278 Mon Sep 17 00:00:00 2001 From: ldj_willow Date: Mon, 24 Oct 2022 11:03:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A8=E7=BB=93=E6=9E=84=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/service/impl/AcsToWmsServiceImpl.java | 87 +----------------- .../main/java/org/nl/wms/sch/SchTaskDto.java | 2 +- .../nl/wms/sch/manage/AbstractAcsTask.java | 11 ++- .../wms/sch/service/impl/TaskServiceImpl.java | 23 +++-- .../tasks/sendMaterial/GjxSendMaterial.java | 33 +++++-- .../src/main/java/org/nl/wms/wms.xls | Bin 246784 -> 247296 bytes .../src/views/wms/sch/task/index.vue | 7 +- 7 files changed, 60 insertions(+), 103 deletions(-) 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 0ba262b..cfb62b7 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 @@ -22,12 +22,13 @@ import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.service.dto.TaskDto; -import org.nl.wms.sch.tasks.*; +import org.nl.wms.sch.tasks.PointToPointTask; import org.nl.wms.sch.tasks.callEmpty.CallEmpVehicleTask; import org.nl.wms.sch.tasks.callEmpty.GjxCallEmpVehicleTask; import org.nl.wms.sch.tasks.callMaterial.CallMaterialTask; import org.nl.wms.sch.tasks.sendEmpty.HtSendEmpVehicleTask; import org.nl.wms.sch.tasks.sendEmpty.YqxSendEmpVehicleTask; +import org.nl.wms.sch.tasks.sendMaterial.GjxSendMaterial; import org.nl.wms.sch.tasks.sendMaterial.YqxSendMaterialTask; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -217,21 +218,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject param = new JSONObject(); param.put("point_code1", point_code); // 满料位 - param.put("task_type", "gjxl"); // 任务类型 - 共挤下料 + param.put("qty", qty); // 满料位 - YqxSendMaterialTask taskBean = SpringContextHolder.getBean(YqxSendMaterialTask.class); + GjxSendMaterial taskBean = SpringContextHolder.getBean(GjxSendMaterial.class); String task_id = taskBean.createTask(param); // 创建任务 - - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - // 插入区域出入库表 - param.put("point_code2", jsonTask.getString("point_code2")); - param.put("qty", qty); - param.put("task_id", task_id); - param.put("io_type", "0"); - JSONObject json = this.inCreateRegion(param); - // 回显任务载具类型 - jsonTask.put("vehicle_type", json.getString("vehicle_type")); - taskTab.update(jsonTask); } else if (StrUtil.equals(type, "3")) { // 3.油漆线申请空盘: 调用空托盘出库处理类创建任务 if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); @@ -314,79 +304,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { YqxSendMaterialTask taskBean = SpringContextHolder.getBean(YqxSendMaterialTask.class); String task_id = taskBean.createTask(param); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - // 插入区域出入库表 - param.put("point_code2", jsonTask.getString("point_code2")); - if (ObjectUtil.isEmpty(qty)) { - param.put("qty", "1"); // 为空先写死1 - } else { - param.put("qty", qty); - } - param.put("task_id", task_id); - param.put("io_type", "0"); - JSONObject json = this.inCreateRegion(param); - // 回显任务载具类型 - jsonTask.put("vehicle_type", json.getString("vehicle_type")); - taskTab.update(jsonTask); - } return null; } - @LokiLog(type = LokiLogType.ACS_TO_LMS) - @Transactional(rollbackFor = Exception.class) - public JSONObject inCreateRegion(JSONObject json) { - String point_code1 = json.getString("point_code1"); - String point_code2 = json.getString("point_code2"); - String qty = json.getString("qty"); - Long task_id = json.getLongValue("task_id"); - String io_type = json.getString("io_type"); - - WQLObject regionTab = WQLObject.getWQLObject("ST_IVT_regionIO"); - WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); - - - JSONObject jsonRegion = new JSONObject(); - jsonRegion.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); - jsonRegion.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); - jsonRegion.put("io_type", io_type); - jsonRegion.put("bill_status", "20"); - // 根据起点点位找到起点设备,根据设备找到对应工单, 根据工单找到对应物料及托盘类型 - String device_code = point_code1.substring(0, point_code1.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("此设备未在生产中或不存在"); - - jsonRegion.put("material_id", jsonOrder.getString("material_id")); - jsonRegion.put("qty", qty); - JSONObject jsonMater = materTab.query("material_id ='" + jsonOrder.getString("material_id") + "'").uniqueResult(0); - jsonRegion.put("qty_unit_id", jsonMater.getString("base_unit_id")); - - jsonRegion.put("point_code1", point_code1); - Long start_region_id = SpringContextHolder.getBean(PointService.class).findByCode(point_code1).getRegion_id(); - jsonRegion.put("start_region_id", String.valueOf(start_region_id)); - jsonRegion.put("end_point_code", point_code2); - Long end_region_id = SpringContextHolder.getBean(PointService.class).findByCode(point_code2).getRegion_id(); - jsonRegion.put("end_region_id", String.valueOf(end_region_id)); - - jsonRegion.put("create_mode", "02"); - jsonRegion.put("task_id", task_id); - jsonRegion.put("create_id", SecurityUtils.getCurrentUserId()); - jsonRegion.put("create_name", SecurityUtils.getCurrentNickName()); - jsonRegion.put("create_time", DateUtil.now()); - regionTab.insert(jsonRegion); - - JSONObject resuft = new JSONObject(); - resuft.put("vehicle_type", jsonOrder.getString("vehicle_type")); - resuft.put("material_id", jsonRegion.getString("material_id")); - resuft.put("create_mode", jsonRegion.getString("create_mode")); - return resuft; - } - @Transactional(rollbackFor = Exception.class) public JSONObject outCreateRegion(JSONObject json) { String point_code2 = json.getString("point_code2"); 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 a70f0f5..6e044c7 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 @@ -61,7 +61,7 @@ public class SchTaskDto implements Serializable { /** * 物料标识 */ - private Long material_id; + private Long material_info_id; /** * 载具类型 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 c295be7..d30f72f 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 @@ -1,5 +1,6 @@ package org.nl.wms.sch.manage; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.wms.sch.AcsUtil; @@ -106,9 +107,13 @@ public abstract class AbstractAcsTask { * */ public JSONObject immediateNotifyAcs() { - List schedule = this.schedule(); - JSONArray arr = JSONArray.parseArray(schedule.toString()); - return AcsUtil.notifyAcs("api/wms/task", arr); + List taskList = this.schedule(); + if (ObjectUtil.isNotEmpty(taskList)) { + JSONArray arr = JSONArray.parseArray(taskList.toString()); + return AcsUtil.notifyAcs("api/wms/task", arr); + } + return null; + } /** diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java index f0fa6bc..612099e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java @@ -19,7 +19,6 @@ import org.nl.wms.basedata.service.dto.ClassstandardDto; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.RegionService; import org.nl.wms.sch.service.TaskService; -import org.nl.wms.sch.service.dto.PointDto; import org.nl.wms.sch.service.dto.TaskDto; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -90,13 +89,23 @@ public class TaskServiceImpl implements TaskService { JSONObject json = WQL.getWO("QSCH_TASK_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "task.update_time desc"); JSONArray content = json.getJSONArray("content"); JSONArray res = new JSONArray(); + + //点位基础表【SCH_BASE_Point】 + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); for ( int i = 0; i < content.size(); i++) { - JSONObject object = content.getJSONObject(i); - String point1_region_name = regionService.findByCode(pointService.findByCode(object.getString("point_code1")).getRegion_code()).getRegion_name(); - String point2_region_name = regionService.findByCode(pointService.findByCode(object.getString("point_code2")).getRegion_code()).getRegion_name(); - object.put("point1_region_name", point1_region_name); - object.put("point2_region_name", point2_region_name); - res.add(object); + JSONObject taskObj = content.getJSONObject(i); + String point_code1 = taskObj.getString("point_code1"); + if (ObjectUtil.isNotEmpty(point_code1)){ + JSONObject point1 = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); + taskObj.put("point1_region_name", point1.getString("region_name")); + } + + String point_code2 = taskObj.getString("point_code2"); + if (ObjectUtil.isNotEmpty(point_code2)){ + JSONObject point2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + taskObj.put("point2_region_name", point2.getString("region_name")); + } + res.add(taskObj); } json.put("content", res); return json; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterial.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterial.java index 6fb220c..17bc427 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterial.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterial.java @@ -1,14 +1,20 @@ package org.nl.wms.sch.tasks.sendMaterial; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; 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.tasks.AcsTaskDto; import org.nl.wms.util.IdUtil; +import org.springframework.stereotype.Service; import java.util.List; @@ -16,7 +22,11 @@ import java.util.List; /** * 共挤线送料任务服务 */ +@Service +@RequiredArgsConstructor +@Slf4j public class GjxSendMaterial extends AbstractAcsTask { + private final String THIS_CLASS = GjxSendMaterial.class.getName(); @Override @@ -36,20 +46,31 @@ public class GjxSendMaterial extends AbstractAcsTask { @Override public String createTask(JSONObject whereJson) { - String point_code = whereJson.getString("point_code"); + String point_code1 = whereJson.getString("point_code1"); String vehicle_type = whereJson.getString("vehicle_type"); String vehicle_code = whereJson.getString("vehicle_code"); String qty = whereJson.getString("qty"); + //生产工单表【PDM_BD_WorkOrder】 + WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); + //点位基础表【SCH_BASE_Point】 + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + String device_code = pointTab.query("point_code = '" + point_code1 + "'").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("该设备当前未生产或者已删除"); + SchTaskDto dto = SchTaskDto.builder() .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("")) + .task_code(CodeUtil.getNewCode("TASK_CODE")) .task_type("task_type") - .point_code1(point_code) - .vehicle_code("") - .handle_class("") + .task_status(TaskStatusEnum.SURE_END.getCode()) + .point_code1(point_code1) + .vehicle_code(vehicle_code) + .material_info_id(workOrderObj.getLong("workorder_id")) + .vehicle_type(vehicle_type) + .handle_class(THIS_CLASS) .create_time(DateUtil.now()) - .point_code1("") .request_param(whereJson.toJSONString()) .build(); //任务表【SCH_BASE_Task】 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 67c659204681e27a2b0c255746db70e3b38daef3..e9295d252df0c7f17546e89434dc467e70ba7407 100644 GIT binary patch delta 20116 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 delta 19678 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 - + - + + - +