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 b4d50f1..52ee1d3 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 @@ -64,6 +64,34 @@ public class AcsToWmsController { return new ResponseEntity<>(result, HttpStatus.OK); } + @PostMapping("/ispackage") + @Log("ACS给WMS请求是否优先包装") + @ApiOperation("ACS给WMS请求是否优先包装") + public ResponseEntity ispackage(@RequestBody Map whereJson) { + return new ResponseEntity<>(acsToWmsService.ispackage(whereJson), HttpStatus.OK); + } + + @PostMapping("/getEmptyVehicle_code") + @Log("获取空木托盘号") + @ApiOperation("获取空木托盘号") + public ResponseEntity getEmptyVehicle_code(@RequestBody Map whereJson) { + return new ResponseEntity<>(acsToWmsService.getEmptyVehicle_code(whereJson), HttpStatus.OK); + } + + @PostMapping("/sureProduceTask") + @Log("排产单确认") + @ApiOperation("排产单确认") + public ResponseEntity sureProduceTask(@RequestBody Map whereJson) { + return new ResponseEntity<>(acsToWmsService.sureWorkOrder(whereJson), HttpStatus.OK); + } + + @PostMapping("/getDevicecodeByVehicletype") + @Log("根据木托盘类型获取对应所在的点位") + @ApiOperation("根据木托盘类型获取对应的点位") + public ResponseEntity getDevicecodeByVehicle_ype(@RequestBody Map whereJson) { + return new ResponseEntity<>(acsToWmsService.getDeviceCodeByVehicleType(whereJson), HttpStatus.OK); + } + @PostMapping("/againApply") @Log("二次申请任务") @ApiOperation("二次申请任务") 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 800a8c6..a516363 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 @@ -57,4 +57,33 @@ public interface AcsToWmsService { * @param whereJson */ void manipulatorApply(Map whereJson); + + /** + * ACS给WMS请求是否优先包装 + * @param whereJson + * @return + */ + Map ispackage(Map whereJson); + + /** + * 获取空木托盘号 + * @param whereJson + * @return + */ + Map getEmptyVehicle_code(Map whereJson); + + /** + * 排产单确认 + * @param whereJson + * @return + */ + Map sureWorkOrder(Map whereJson); + + /** + * 根据木托盘类型获取对应所在的点位 + * + * @param jsonObject 条件 + * @return Map + */ + Map getDeviceCodeByVehicleType(Map jsonObject); } 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 5d376da..7e04169 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 @@ -4,18 +4,22 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.service.dto.VehicleDto; import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.log.LokiLog; import org.nl.wms.log.LokiLogType; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.manage.WorkOrderEnum; import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.tasks.callEmpty.FjCallEmptyVehicleTask; import org.nl.wms.sch.tasks.callEmpty.HnCallEmptyVehicleTask; @@ -391,6 +395,169 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { this.apply((JSONObject) jsonObject); } + /** + * ACS给WMS请求是否优先包装 + * + * @param jsonObject + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Map ispackage(Map jsonObject) { + String vehicle_code = (String) jsonObject.get("vehicle_code"); + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("托盘条码不能为空!"); + } + // 组盘表 + JSONObject vehicleObj = WQLObject.getWQLObject("st_buss_vehiclegroup").query("vehicle_code='" + vehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(vehicleObj)) { + throw new BadRequestException("未找到托盘号为'" + vehicle_code + "'的组盘信息!"); + } + // 获取工单 + String workorder_id = vehicleObj.getString("producetask_id"); + JSONObject taskObj = WQLObject.getWQLObject("PDM_BD_WorkOrder").query("workorder_id='" + workorder_id + "'").uniqueResult(0); + //1代表去出窑,2 是优先包装 + String is_package = "1"; + if (StrUtil.equals(taskObj.getString("is_package"), "1")) { + is_package = "2"; + } + JSONObject returnjo = new JSONObject(); + returnjo.put("is_package", is_package); + return returnjo; + } + + /** + * 获取空木托盘号 + * + * @param jsonObject + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Map getEmptyVehicle_code(Map jsonObject) { + //获取一个空的托盘号 + String code = "VEHICCLE_CODE_MTP"; + String vehicle_type = "03"; // todo + WQLObject vehicle_table = WQLObject.getWQLObject("MD_PB_Vehicle"); + VehicleDto dto = new VehicleDto(); + dto.setVehicle_id(IdUtil.getSnowflake(1, 1).nextId()); + String vehicle_code = CodeUtil.getNewCode(code); + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + dto.setVehicle_code(vehicle_code); + dto.setCreate_id(currentUserId); + dto.setVehicle_name(vehicle_code); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setVehicle_type(vehicle_type); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + vehicle_table.insert(json); + JSONObject returnjo = new JSONObject(); + returnjo.put("vehicle_code", vehicle_code); + returnjo.put("status", HttpStatus.OK.value()); + //将起点终点确定不下发的任务查出来,将木托盘点位解锁,起点改为扫描点,is_auto_issue 改为1, + String device_code = (String) jsonObject.get("device_code"); + WQLObject task_Table = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = task_Table.query("task_status='" + TaskStatusEnum.START_AND_POINT.getCode() +"' and is_auto_issue='0'", "create_time desc").uniqueResult(0); + String start_point_code = taskObj.getString("point_code1"); + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject startObj = pointTable.query("point_code ='" + start_point_code + "'").uniqueResult(0); + startObj.put("lock_type", "1"); + pointTable.update(startObj); + taskObj.put("point_code1", device_code); + taskObj.put("is_auto_issue", "1"); + taskObj.put("vehicle_code", vehicle_code); + task_Table.update(taskObj); + return returnjo; + } + + /** + * 排产单确认 + * + * @param jsonObject + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Map sureWorkOrder(Map jsonObject) { + // 工单编号、设备编号、物料编号、数量、类型 + String workorder_code = (String) jsonObject.get("workorder_code"); + String device_code = (String) jsonObject.get("device_code"); + String material_code = (String) jsonObject.get("material_code"); + String qty = String.valueOf(jsonObject.get("qty")); + String type = (String) jsonObject.get("type"); + if (StrUtil.isEmpty(type)) { + throw new BadRequestException("类型不能为空!"); + } + WQLObject taskTable = WQLObject.getWQLObject("PDM_BD_WorkOrder"); + JSONObject orderObj = taskTable.query("workorder_code = '" + workorder_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(orderObj)) { + throw new BadRequestException("未找到工单号为'" + workorder_code + "'的工单信息!"); + } + JSONObject materialObj = WQLObject.getWQLObject("MD_ME_MaterialBase").query("material_code = '" + material_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(materialObj)) throw new BadRequestException("当前物料不存在!"); + //1为确认 + //2为生产中 + //3为完成 + if (StrUtil.equals(type, "1")) { + if (StrUtil.isEmpty(workorder_code)) { + throw new BadRequestException("工单号不能为空!"); + } + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备点位不能为空!"); + } + if (StrUtil.isEmpty(material_code)) { + throw new BadRequestException("物料编码不能为空!"); + } + + if (!StrUtil.equals(materialObj.getString("material_id"), orderObj.getString("material_id"))) { + throw new BadRequestException("物料标识不一样!"); + } + orderObj.put("order_status", WorkOrderEnum.ORDER_STATUS_DELIVERED.getCode()); + + } + if (StrUtil.equals("2", type)) { + orderObj.put("producetask_status", WorkOrderEnum.ORDER_STATUS_PRODUCING.getCode()); + } + if (StrUtil.equals("3", type)) { + orderObj.put("producetask_status", WorkOrderEnum.ORDER_STATUS_FINISH.getCode()); + orderObj.put("real_qty", qty); + } + taskTable.update(orderObj); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + return result; + } + + /** + * 根据木托盘类型获取对应所在的点位 + * + * @param jsonObject 条件 + * @return Map + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Map getDeviceCodeByVehicleType(Map jsonObject) { + String vehicle_type = (String) jsonObject.get("vehicle_type"); + if (StrUtil.isEmpty(vehicle_type)) { + throw new BadRequestException("托盘类型不能为空!"); + } + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject pointObj = point_table.query("vehicle_type='" + vehicle_type + "' and region_code = 'FMQ'").uniqueResult(0); + if (ObjectUtil.isEmpty(pointObj)) { + throw new BadRequestException("为找到类型为'" + vehicle_type + "' 的设备点位"); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("device_code", pointObj.getString("point_code")); + return returnjo; + } + private JSONObject getProduceInfoByCode(String code) { //根据 设备点位去找生产任务信息 //1 根据点位去找设备,去找对应的设备信息 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 new file mode 100644 index 0000000..913b1f2 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java @@ -0,0 +1,31 @@ +package org.nl.wms.sch.manage; + +/** + * @author: lyd + * @description: 工单枚举 + * @Date: 2022/11/17 + */ +public enum WorkOrderEnum { + // 工单状态 + ORDER_STATUS_UNPRODUCED("1", "未生产"), + ORDER_STATUS_DELIVERED("2", "已下发"), + ORDER_STATUS_PRODUCING("3", "生产中"), + ORDER_STATUS_STOP("4", "停止"), + ORDER_STATUS_FINISH("5", "完成") + ; + private final String code; + private final String name; + + WorkOrderEnum(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } +} 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 5ca6a3a..9125628 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 @@ -16,6 +16,7 @@ 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.tasks.AcsTaskDto; import org.nl.wms.util.IdUtil; import org.springframework.stereotype.Service; @@ -82,7 +83,7 @@ public class SzCallMaterialTask 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("已完成不能取消!"); @@ -98,7 +99,7 @@ public class SzCallMaterialTask extends AbstractAcsTask { } } - if ("1".equals(status)) { + if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { // 更新任务状态为执行中 taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); taskObj.put("update_time", DateUtil.now()); @@ -106,7 +107,7 @@ public class SzCallMaterialTask 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()); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java index c8b57e5..e25b657 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java @@ -16,8 +16,10 @@ 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.tasks.AcsTaskDto; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -43,13 +45,14 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { /** * @param taskObj 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 + * @param status 代表wcs任务完成状态: //0:acs,取消,1:执行中,2:完成 * @return * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 * @author ldjun * @created 2019年4月17日 下午8:51:50 */ @Override + @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); @@ -59,7 +62,7 @@ public class DpSendEmpVehicleTask 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("已完成不能取消!"); @@ -76,7 +79,7 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { taskTab.update(jsonTask); } - if ("1".equals(status)) { + if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { // 更新任务状态为执行中 jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); jsonTask.put("update_time", DateUtil.now()); @@ -84,7 +87,7 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { taskTab.update(jsonTask); } - if (StrUtil.equals(status, "2")) { + if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { // 更改任务状态为完成 jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); @@ -95,7 +98,6 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { 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", NumberUtil.add(point_2.getString("vehicle_qty"), jsonTask.getString("vehicle_qty"))); point_2.put("instorage_time", DateUtil.now()); @@ -108,8 +110,6 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { // 起点设置为空位 JSONObject point_1 = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); point_1.put("point_status", "1"); - point_1.put("point_status", "1"); - point_1.put("point_status", "1"); pointTab.update(point_1); } } @@ -120,6 +120,7 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { * @return 返回任务标识 */ @Override + @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { // 送到KGTDDW01 WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 @@ -151,6 +152,7 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { * @created 2020年6月12日 下午6:01:06 */ @Override + @Transactional(rollbackFor = Exception.class) public void findNextPoint() { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); 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 4c147a0..6bdbc77 100644 Binary files a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls and b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls differ