diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/AcsUtil.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/AcsUtil.java index 5c4f137d..7154e6a3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/AcsUtil.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/AcsUtil.java @@ -14,7 +14,10 @@ import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.http.HttpStatus; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; /** * ACS连接工具类: @@ -54,16 +57,27 @@ public class AcsUtil { result.put("data", new JSONObject()); } //acs抛异常这里 + List errorList = new ArrayList(); if (!StrUtil.equals(result.getString("status"), "200")) { - throw new BadRequestException("下发失败:"+result.getString("message")); + result.put("status", HttpStatus.BAD_REQUEST); + JSONArray errorArr = result.getJSONArray("result"); + if (errorArr !=null && errorArr.size()>0){ + errorList = errorArr.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.toList()); + } + result.put("message", result.getString("message")); + result.put("data", new JSONObject()); }else { //如果向ACS下发任务,变更任务状态为下发 if (api.equals("api/wms/task")){ for (int i = 0; i < list.size(); i++) { JSONObject task_jo = list.getJSONObject(i); + String task_id = task_jo.getString("task_id"); + if (errorList.contains(task_id)){ + continue; + } HashMap map = new HashMap<>(); map.put("task_status", TaskStatusEnum.ISSUE.getCode()); - WQLObject.getWQLObject("SCH_BASE_Task").update(map,"task_id = '"+task_jo.getString("ext_task_id")+"'"); + WQLObject.getWQLObject("SCH_BASE_Task").update(map,"task_id = '"+task_id+"'"); } } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 58464d15..ed31cfd7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -109,7 +109,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{ TaskDto taskDto = taskService.findById(task_id); String processing_class = taskDto.getHandle_class(); //1:执行中,2:完成 ,3:acs取消 - String acs_task_status = row.getString("task_status"); + String acs_task_status = row.getString("status"); String message = ""; String status = ""; if ("1".equals(acs_task_status)) { @@ -118,6 +118,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{ if ("2".equals(acs_task_status)) { status = AcsTaskEnum.STATUS_FINISH.getCode(); } + if ("3".equals(acs_task_status)) { + status = AcsTaskEnum.STATUS_CANNEL.getCode(); + } // 任务处理类 try { Class clz = Class.forName(processing_class); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index c297d0dd..c5e0a045 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.utils.AcsUtil; +import org.nl.common.utils.IdUtil; import org.nl.common.utils.MapOf; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.springframework.context.annotation.Lazy; @@ -24,12 +26,14 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{ JSONObject task = (JSONObject) o; JSONObject param = new JSONObject(MapOf.of("task_id", task.getString("task_id") , "acs_task_type", task.getString("acs_task_type") - , "start_point_code", task.getString("point_code1") - , "next_point_code", task.getString("point_code2") - , "return_point_code", task.getString("point_code3") - , "task_group_id", task.getString("task_group_id") + , "task_code", task.getString("task_code") + , "start_point_code", task.getString("point_code1")//起点 + , "put_point_code", task.getString("point_code2")//到料 + , "next_point_code", task.getString("point_code3")//空盘返回点 + , "task_group_id", StringUtils.isEmpty(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id") + , "task_type", task.getString("task_type") , "priority", task.getString("priority") - , "task_group_id", task.getString("is_send") + , "is_send", task.getString("is_send") , "vehicle_code", task.getString("vehicle_code") , "agv_system_type", task.getString("agv_system_type") )); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java index c1eadc2a..343563c3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java @@ -242,106 +242,31 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { @Override @Transactional(rollbackFor = Exception.class) public void openStart(JSONObject param) { - WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder"); + WQLObject wo = WQLObject.getWQLObject("pdm_produce_workorder"); String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); - //获取前台传入的开工的工单信息 - JSONObject row = param.getJSONObject("row"); - String device_id = row.getString("device_id"); - String produceorder_id = row.getString("produceorder_id"); + String workorder_id = param.getString("workorder_id"); + String device_code = param.getString("device_code"); - JSONObject result = wo.query("device_id = '" + device_id + "' and (order_status = '02' or order_status = '03') and produceorder_id != '" + produceorder_id + "'").uniqueResult(0); + JSONObject result = wo.query("current_device_code = '" + device_code + "' and workorder_status in ('2','3','4') and workorder_id != '" + workorder_id + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(result)) { throw new BadRequestException("已有工单选择该设备开工,请更换开工设备!"); } - String workprocedure_id = row.getString("workprocedure_id"); - String produceorder_code = row.getString("produceorder_code"); - String material_id = row.getString("material_id"); - String material_code = row.getString("material_code"); - String material_name = row.getString("material_name"); - String material_spec = row.getString("material_spec"); - String is_needmove = row.getString("is_needmove"); - String plan_qty = row.getString("plan_qty"); - String order_status = row.getString("order_status"); - //根据设备id获取设备编码 传给acs用 - WQLObject wo_device = WQLObject.getWQLObject("pdm_bi_device"); - JSONObject device = wo_device.query("device_id = '" + device_id + "'").uniqueResult(0); - String device_code = device.getString("device_code"); - //开工时修改生产班次工单表 生产设备、以及工单状态 - JSONObject jsonObject1 = wo.query("produceorder_id = '" + produceorder_id + "'").uniqueResult(0); - JSONObject produceorderMap = new JSONObject(); - produceorderMap.put("produceorder_id", produceorder_id); - produceorderMap.put("order_status", "02"); - produceorderMap.put("update_optid", currentUserId); - produceorderMap.put("update_optname", nickName); - produceorderMap.put("update_time", DateUtil.now()); - if (order_status.equals("01")) { - produceorderMap.put("realproducestart_date", DateUtil.now()); + + //TODO:开工时修改生产班次工单表 生产设备、以及工单状态 + + wo.update(MapOf.of("workorder_id",workorder_id,"workorder_status",WorkerOrderEnum.SEND.getCode(),"update_id", currentUserId,"update_name", nickName,"update_time", DateUtil.now())); + + JSONArray array = new JSONArray(); + JSONObject order = new JSONObject(MapOf.of("workorder_id", workorder_id,"type",WorkerOrderEnum.SEND.getCode())); + array.add(order); + Map resp = wmsToAcsService.orderStatusUpdate(array); + String status = String.valueOf(resp.get("status")); + String message = (String) resp.get("message"); + if (!status.equals("200")) { + throw new BadRequestException(message); } - wo.update(produceorderMap); - //同时工单记录表中插入一条数据 - WQLObject wo_record = WQLObject.getWQLObject("MPS_BD_MacOperateRecord"); - JSONObject recordMap = new JSONObject(); - recordMap.put("macoperate_id", IdUtil.getSnowflake(1, 1).nextId()); - recordMap.put("device_id", device_id); - recordMap.put("workprocedure_id", workprocedure_id); - recordMap.put("produceorder_id", produceorder_id); - recordMap.put("produceorder_code", produceorder_code); - recordMap.put("init_qty", jsonObject1.getString("real_qty")); - //填写生产记录表中的生产数量时,先判断是否已经生产过了,如果没有生产过,就将工单记录表中的计划数量付给记录表中的生产数量 - final JSONArray alreadyPro = wo_record.query("produceorder_id = '" + produceorder_id + "'").getResultJSONArray(0); - if (ObjectUtil.isEmpty(alreadyPro)) { - recordMap.put("produce_qty", plan_qty); - //同时向acs系统下发工单 问题是现在一个工单分多次执行,现在是每开工一次,向acs发送一次工单 - //acs那边就会新增多个工单 - //如果是第一次开工,就向acs下发工单 - JSONArray array = new JSONArray(); - JSONObject acsObj = new JSONObject(); - acsObj.put("ext_order_id", produceorder_id); - acsObj.put("is_needmove", is_needmove); - acsObj.put("order_code", produceorder_code); - acsObj.put("qty", plan_qty); - acsObj.put("material_uuid", material_id); - acsObj.put("material_code", material_code); - acsObj.put("material_name", material_name); - acsObj.put("material_spec", material_spec); - acsObj.put("device_code", device_code); - array.add(acsObj); - Map resp = wmsToAcsService.order(array); - String status = String.valueOf(resp.get("status")); - String message = (String) resp.get("message"); - if (!status.equals("200")) { - throw new BadRequestException(message); - } - } else { - Integer sum = 0; - //如果生产过了,就获取记录表中的报工数量,用计划数量减去生产过的报工数量的和,为这次的生产数量 - for (int i = 0; i < alreadyPro.size(); i++) { - JSONObject jsonObject = alreadyPro.getJSONObject(i); - String report_qty = jsonObject.getString("report_qty"); - sum += Integer.parseInt(report_qty); - } - Integer produce_qty = Integer.parseInt(plan_qty) - sum; - recordMap.put("produce_qty", produce_qty); - //wms向acs发送请求 工单恢复 - //如果不是第一次开工,就向acs发送恢复工单状态 - // TODO - JSONArray array = new JSONArray(); - JSONObject map = new JSONObject(); - map.put("ext_order_id", produceorder_id); - map.put("type", "2"); - array.add(map); - Map resp = wmsToAcsService.orderStatusUpdate(array); - String status = String.valueOf(resp.get("status")); - String message = (String) resp.get("message"); - if (!status.equals("200")) { - throw new BadRequestException(message); - } - } - recordMap.put("operatetime_start", DateUtil.now()); - recordMap.put("jockey_id", currentUserId); - wo_record.insert(recordMap); } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java index 110167b9..5684e8bc 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java @@ -10,7 +10,8 @@ public enum TaskStatusEnum { START_AND_POINT("4", "起点终点确认"), ISSUE("5", "下发"), EXECUTING("6", "执行中"), - FINISHED("7", "完成"); + FINISHED("7", "完成"), + CANCEL("8", "取消"); private String name; private String code; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java index 85f65fc5..25b8a98c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java @@ -42,7 +42,7 @@ public class SpeMachineryTask extends AbstractAcsTask { WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); log.info(InterfaceLogType.ACS_TO_LMS.getDesc()); // 指令执行中 - JSONObject task = taskTable.query("task_id = '" + param.getString("taskId") + "'").uniqueResult(0); + JSONObject task = taskTable.query("task_id = '" + param.getString("task_id") + "'").uniqueResult(0); AcsTaskEnum taskType = AcsTaskEnum.getType(task.getString("task_type"),"TASK_"); try { SpeHandles.get(taskType.name()).handle(param,status,task); @@ -133,6 +133,8 @@ public class SpeMachineryTask extends AbstractAcsTask { double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); break; + case STATUS_CANNEL: + cancel(param.getString("task_id")); default: log.error(OPT_NAME+"未定义任务状态:{}",sta); throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); @@ -166,6 +168,8 @@ public class SpeMachineryTask extends AbstractAcsTask { //物料规格,物料名称 从物料信息表关联查询 )); break; + case STATUS_CANNEL: + cancel(param.getString("task_id")); default: throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); } @@ -196,6 +200,9 @@ public class SpeMachineryTask extends AbstractAcsTask { double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); break; + case STATUS_CANNEL: + cancel(param.getString("task_id")); + break; default: throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls index 8531d1b3..b321442d 100644 Binary files a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls and b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls differ