From 95e87fac3dd82a2730b4d177b466468d01da2186 Mon Sep 17 00:00:00 2001 From: ludj Date: Wed, 19 Apr 2023 09:12:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms/hd/logPath_IS_UNDEFINED/2022-04-25.0.log | 0 wms/hd/logPath_IS_UNDEFINED/2022-04-28.0.log | 0 wms/hd/logPath_IS_UNDEFINED/2022-04-29.0.log | 0 wms/hd/logPath_IS_UNDEFINED/2022-05-18.0.log | 0 .../src/main/java/org/nl/ACS接口说明 | 28 + .../acs/service/impl/AcsToWmsServiceImpl.java | 2216 ++++++++--------- .../sch/manage/buss/CallEmptyVehicleTask.java | 6 +- .../wms/sch/manage/buss/CallMaterialTask.java | 896 ++++--- .../nl/wms/sch/manage/buss/ConveyorTask.java | 6 +- .../wms/sch/manage/buss/FmjToPackIngTask.java | 5 +- .../org/nl/wms/sch/manage/buss/RgvTask.java | 6 +- .../sch/manage/buss/SendEmptyVehicleTask.java | 4 +- .../wms/sch/manage/buss/SendMaterialTask.java | 18 +- .../sch/manage/buss/StructToConveyorTask.java | 1 + .../wms/sch/manage/buss/ToConveyorTask.java | 19 +- .../nl/wms/sch/manage/buss/ToPackIngTask.java | 8 +- .../nl/wms/sch/task/AutoOutStructTask.java | 28 - .../src/main/resources/logback-spring.xml | 4 +- 18 files changed, 1642 insertions(+), 1603 deletions(-) delete mode 100644 wms/hd/logPath_IS_UNDEFINED/2022-04-25.0.log delete mode 100644 wms/hd/logPath_IS_UNDEFINED/2022-04-28.0.log delete mode 100644 wms/hd/logPath_IS_UNDEFINED/2022-04-29.0.log delete mode 100644 wms/hd/logPath_IS_UNDEFINED/2022-05-18.0.log create mode 100644 wms/hd/nladmin-system/src/main/java/org/nl/ACS接口说明 diff --git a/wms/hd/logPath_IS_UNDEFINED/2022-04-25.0.log b/wms/hd/logPath_IS_UNDEFINED/2022-04-25.0.log deleted file mode 100644 index e69de29..0000000 diff --git a/wms/hd/logPath_IS_UNDEFINED/2022-04-28.0.log b/wms/hd/logPath_IS_UNDEFINED/2022-04-28.0.log deleted file mode 100644 index e69de29..0000000 diff --git a/wms/hd/logPath_IS_UNDEFINED/2022-04-29.0.log b/wms/hd/logPath_IS_UNDEFINED/2022-04-29.0.log deleted file mode 100644 index e69de29..0000000 diff --git a/wms/hd/logPath_IS_UNDEFINED/2022-05-18.0.log b/wms/hd/logPath_IS_UNDEFINED/2022-05-18.0.log deleted file mode 100644 index e69de29..0000000 diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/ACS接口说明 b/wms/hd/nladmin-system/src/main/java/org/nl/ACS接口说明 new file mode 100644 index 0000000..e57371a --- /dev/null +++ b/wms/hd/nladmin-system/src/main/java/org/nl/ACS接口说明 @@ -0,0 +1,28 @@ +applyTaskManipulatorToWms 机械手申请任务 /api/acsToWms/task/manipulatorApply +queryCribbingInfo 获取木托盘信息 /api/acsToWms/task/queryCribbingInfo +getVehicleCode 获取托盘号 /api/wms/task/getEmptyVehicle_code +feedbackPointStatusToWms 向WMS反馈点位状态 /api/acsToWms/task +applyIntoKiln 申请入窑输送任务 /api/acsToWms/task/group +applyTaskToWms ACS向WMS申请任务 /api/acsToWms/task/apply +requestSignalInteraction 请求信号交互 /api/Wms_AgvApi/SignalInteraction +ispackage 出窑申请去包装 /api/wms/task/ispackage +getVehicleTokiln 获取入窑托盘信息 api/ +queryDoorsStatus 查询自动门状态 /api/acsToWms/queryDoorsStatus +isTakePermission 新锐AGV获取对接位是否允许取货 http://127.0.0.1:8080/wcs/isTakePermission/ +outKiln 出窑请求 /api/acsToWms/task/ispackage +apply_OutEmpty 申请出空 /api/acsToWms/task/emptyOutApply +feedbackAgvStatus 反馈AGV设备状态 /api/Wms_AgvApi/AgvStatus +lnshApplyTaskToWms 向WMS申请晟华任务 /api/acsToWms/task/apply +apply_InEmpty 申请进空 /api/acsToWms/task/emptyInApply +applyOpenOrCloseDoor 请求开门或关门 /api/acsToWms/task/status +invokeDoor 新锐AGV获取是否允许进入 http://127.0.0.1:8080/wcs/invokeDoor/ +enterOrder 排产单确认 /api/acsToWms/task/sureProduceTask +AGVWorkStatus 新锐动作完成接口 http://127.0.0.1:8080/wcs/AGVWorkStatus +inKiln 入窑扫码 /api/acsToWms/task/inKiln +getDeviceStatusToWms 向WMS获取设备状态 /api/Wms_AgvApi/GetDeviceStatus +getVehiclePoint 获取托盘点位 api +deleteTask 向wms申请删除任务 /api/acsToWms/task/deleteTask +isPutPermission 新锐AGV获取对接位是否允许放货 http://127.0.0.1:8080/wcs/isPutPermission/ +feedbackTaskStatusToWms 向WMS反馈任务状态 /api/acsToWms/task/status +requestTaskAgain 再次申请任务 /api/acsToWms/task/secondApply +getVehicle 获取托盘信息 /api/acsToWms/task/getVehicleInfoBycode \ No newline at end of file diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index f1a6b28..e933348 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -7,6 +7,8 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Interner; +import com.google.common.collect.Interners; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.utils.UserInfoUtil; @@ -44,1149 +46,1143 @@ import java.util.Map; @RequiredArgsConstructor @Slf4j public class AcsToWmsServiceImpl implements AcsToWmsService { - private final SendMaterialTask sendMaterialTask; - private final CallMaterialTask callMaterialTask; - private final SendEmptyVehicleTask sendEmptyVehicleTask; - private final CallEmptyVehicleTask callEmptyVehicleTask; - private final RgvTask rgvTask; - private final WmsToAcsServiceImpl wmsToAcsServiceImpl; - private final ToConveyorTask toConveyorTask; - private final TaskService taskService; - private final ToPackIngTask toPackIngTask; - private final FmjToPackIngTask fmjToPackIngTask; - private final VehicleService vehicleService; + private final SendMaterialTask sendMaterialTask; + private final CallMaterialTask callMaterialTask; + private final SendEmptyVehicleTask sendEmptyVehicleTask; + private final CallEmptyVehicleTask callEmptyVehicleTask; + private final RgvTask rgvTask; + private final WmsToAcsServiceImpl wmsToAcsServiceImpl; + private final ToConveyorTask toConveyorTask; + private final TaskService taskService; + private final ToPackIngTask toPackIngTask; + private final FmjToPackIngTask fmjToPackIngTask; + private final VehicleService vehicleService; - @Autowired - private AcsToWmsService acsToWmsService; + @Autowired + private AcsToWmsService acsToWmsService; - @Override - public Map receiveTaskFromAcs(Map jsonObject) { - String type = (String) jsonObject.get("type"); - synchronized (type) { - return acsToWmsService.receiveTaskFromAcsTrancs(jsonObject); + @Override + public Map receiveTaskFromAcs(Map jsonObject) { + String type = (String) jsonObject.get("type"); + Interner pool = Interners.newWeakInterner(); + synchronized (pool.intern(type)) { + return acsToWmsService.receiveTaskFromAcsTrancs(jsonObject); + } } - } - @Override - @Transactional - public Map receiveTaskFromAcsTrancs(Map jsonObject) { - log.debug("ACS的receiveTaskFromAcs请求参数为:" + jsonObject); - String device_code = (String) jsonObject.get("device_code"); - String type = (String) jsonObject.get("type"); - String group_id = (String) jsonObject.get("group_id"); - String is_full = (String) jsonObject.get("is_full"); + @Override + @Transactional + public Map receiveTaskFromAcsTrancs(Map jsonObject) { + log.debug("ACS的receiveTaskFromAcs请求参数为:" + jsonObject); + String device_code = (String) jsonObject.get("device_code"); + String type = (String) jsonObject.get("type"); + String group_id = (String) jsonObject.get("group_id"); + String is_full = (String) jsonObject.get("is_full"); - JSONObject produceInfoByCode = new JSONObject(); - if (StrUtil.isEmpty(device_code)) { - throw new BadRequestException("设备不能为空!"); + JSONObject produceInfoByCode = new JSONObject(); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备不能为空!"); + } + if (StrUtil.isEmpty(type)) { + throw new BadRequestException("类型不能为空!"); + } + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + WQLObject structivtTable = WQLObject.getWQLObject("st_ivt_structivt"); + + switch (type) { + // 送料入库 + case "1": + jsonObject.put("start_point_code", device_code); + jsonObject.put("create_mode", "01"); + jsonObject.put("group_id", group_id); + // 假如是半托缓存的几个位置,强制去包装 + String area_type = + pointTable + .query("point_code ='" + device_code + "'") + .uniqueResult(0) + .getString("area_type"); + if (StrUtil.equals(area_type, AreaEnum.BTHCQ.getCode())) { + fmjToPackIngTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + // 生成到包装位的任务时,下发托盘类型给RGV + String point_id = pointTable.query("point_code ='" + device_code + "'").uniqueResult(0).getString("point_id"); + String material_id = structivtTable.query("struct_id ='" + point_id + "'").uniqueResult(0) + .getString("material_id"); + JSONObject materiralObj1 = + WQLObject.getWQLObject("md_me_material") + .query("material_id = '" + material_id + "'") + .uniqueResult(0); + // 寻找对应的托盘类型 + String vehicle_type = + vehicleService.getVehicleType(materiralObj1.getString("vehicle_type")); + JSONObject jsonObject1 = new JSONObject(); + JSONArray array = new JSONArray(); + jsonObject1.put("device_code", "RGV2"); + jsonObject1.put("code", "to_container_type"); + jsonObject1.put("value", vehicle_type); + array.add(jsonObject1); + wmsToAcsServiceImpl.action(array); + break; + } + if (StrUtil.isEmpty(is_full)) { + throw new BadRequestException("托盘是否满托不能为空!"); + } + String material_code = (String) jsonObject.get("material_code"); + String producetask_id = (String) jsonObject.get("producetask_id"); + String material_id = ""; + JSONObject materialObj = + WQLObject.getWQLObject("md_me_material") + .query("material_code ='" + material_code + "'") + .uniqueResult(0); + if (StrUtil.isEmpty(material_code) + && (!StrUtil.equals(device_code, "CYSSX101")) + && !StrUtil.equals(device_code.substring(0, 4), "BTHC")) { + throw new BadRequestException("物料不能为空!"); + } + if (!StrUtil.equals(device_code, "CYSSX101") + && !StrUtil.equals(device_code.substring(0, 4), "BTHC")) { + material_id = materialObj.getString("material_id"); + } + // 如果是出窑输送线 要从组盘表里面去找物料 + if (StrUtil.equals(device_code, "CYSSX101")) { + String vehicle_code = jsonObject.get("vehicle_code").toString(); + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("载具不能为空!"); + } + JSONObject vehicleObj = WQLObject.getWQLObject("st_buss_vehiclegroup") + .query("vehicle_code='" + vehicle_code + "'", "create_time desc") + .uniqueResult(0); + if (ObjectUtil.isEmpty(vehicleObj)) { + throw new BadRequestException("为找到载具号为'" + vehicle_code + "'的组盘信息!"); + } + material_id = vehicleObj.getString("material_id"); + if (ObjectUtil.isEmpty(vehicleObj.getString("qty"))) { + jsonObject.put("qty", "0"); + } else { + jsonObject.put("qty", vehicleObj.getString("qty")); + } + + jsonObject.put("vehicle_code", vehicle_code); + } + jsonObject.put("producetask_id", producetask_id); + jsonObject.put("create_mode", "01"); + jsonObject.put("material_id", material_id); + JSONObject materiralObj = + WQLObject.getWQLObject("md_me_material") + .query("material_id = '" + material_id + "'") + .uniqueResult(0); + Double stewing_time = materiralObj.getDouble("stewing_time"); + jsonObject.put("stewing_time", stewing_time); + // 假如是压制下料的几个位置,则要考虑是入输送线 还是入立体库 + if (StrUtil.equals(area_type, AreaEnum.YZQY.getCode()) && stewing_time <= 0) { + // 1.首先更新所有输送线的点位状态 + JSONArray pointarr = + WQL.getWO("ACSTOMES_001") + .addParam("area_type", "07") + .addParam("flag", "4") + .process() + .getResultJSONArray(0); + PointUpdateUtil.updatePoint(pointarr); + // 2.找一个合适的输送带 + JSONObject pointObj = StructFindUtil.getConveyor(materiralObj); + // 如果未找到合适的输送带 就去货架 + if (ObjectUtil.isNotEmpty(pointObj)) { + jsonObject.put("next_point_code", pointObj.getString("point_code")); + jsonObject.put("group_id", group_id); + toConveyorTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + // 假如是压制下料的几个位置 需要记 录不合格数量 + if (StrUtil.equals(area_type, AreaEnum.YZQY.getCode())) { + JSONObject joo = new JSONObject(); + joo.put("qty", jsonObject.get("unqualified_qty")); + joo.put("device_code", device_code); + try { + String record_id = PressureUtil.record(joo); + // 回传不合格记录 + WmsToJnServiceImpl wmsToJnService = new WmsToJnServiceImpl(); + wmsToJnService.feedBackQualityInfo(record_id); + } catch (Exception e) { + log.info("回传MES记录不合格异常!"); + e.printStackTrace(); + } + } + break; + } + } + // 假如是分拣机械手的下料位置,并且是满托,则去包装线 + if (StrUtil.equals("1", is_full) && StrUtil.equals(area_type, AreaEnum.FJQY.getCode())) { + String vehicle_code = + pointTable + .query("point_code ='" + device_code + "'") + .uniqueResult(0) + .getString("vehicle_code"); + jsonObject.put("vehicle_code", vehicle_code); + // if (StrUtil.isEmpty(vehicle_code)) { + // throw new BadRequestException("当前点位载具号为空!"); + // } + toPackIngTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + + // 生成到包装位的任务时,下发托盘类型给RGV + JSONObject vehicleObj = + WQLObject.getWQLObject("md_pb_vehicle") + .query("vehicle_code='" + vehicle_code + "'", "create_time desc") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(vehicleObj)) { + String vehicle_type = + vehicleService.getVehicleType(vehicleObj.getString("vehicle_type")); + JSONObject jsonObject1 = new JSONObject(); + JSONArray array = new JSONArray(); + jsonObject1.put("device_code", "RGV2"); + jsonObject1.put("code", "to_container_type"); + jsonObject1.put("value", vehicle_type); + array.add(jsonObject1); + try { + wmsToAcsServiceImpl.action(array); + } catch (Exception e) { + e.printStackTrace(); + } + } + break; + } + + // 假如是分拣机械手的下料位置,则需要将点位上的托盘号写入 + if (StrUtil.equals(area_type, AreaEnum.FJQY.getCode())) { + String vehicle_code = + pointTable + .query("point_code ='" + device_code + "'") + .uniqueResult(0) + .getString("vehicle_code"); + jsonObject.put("vehicle_code", vehicle_code); + } + String task_id = sendMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + log.info("创建送料任务标识:" + task_id); + // 假如是压制下料的几个位置 需要记录不合格数量 + if (StrUtil.equals(area_type, AreaEnum.YZQY.getCode())) { + WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); + JSONObject groupInfo = groupTable.query("task_id='" + task_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(groupInfo)) { + log.info("判断送料任务标识异常:" + task_id); + + throw new BadRequestException("压制满料扫码组盘错误,任务标识:" + task_id); + } + log.info("判断送料任务正常:" + task_id); + + JSONObject joo = new JSONObject(); + joo.put("qty", jsonObject.get("unqualified_qty")); + joo.put("device_code", device_code); + try { + String record_id = PressureUtil.record(joo); + // 回传不合格记录 + WmsToJnServiceImpl wmsToJnService = new WmsToJnServiceImpl(); + wmsToJnService.feedBackQualityInfo(record_id); + } catch (Exception e) { + log.info("回传MES记录不合格异常!"); + e.printStackTrace(); + } + } + + break; + case "2": + // 叫料出库 + jsonObject.put("next_point_code", device_code); + jsonObject.put("create_mode", "01"); + // 机械手1 is_full给1 ,机械手3is_full给空,半托,跟满托都可以出 + if (StrUtil.equals(device_code, "FJJXSSLW101") + || StrUtil.equals(device_code, "FJJXSSLW102")) { + is_full = "1"; + } + if (StrUtil.equals(device_code, "FJJXSSLW301") + || StrUtil.equals(device_code, "FJJXSSLW302")) { + is_full = "2"; + } + jsonObject.put("is_full", is_full); + produceInfoByCode = this.getProduceInfoByCode(device_code); + // 批次 物料,客户要从排产单里面去取 + jsonObject.put("material_id", produceInfoByCode.getString("material_id")); + callMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + break; + + case "3": + // 送空托盘 + jsonObject.put("start_point_code", device_code); + sendEmptyVehicleTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + break; + case "4": + // 叫空托盘 + jsonObject.put("next_point_code", device_code); + // 如果是叠盘位3 ,则去铁托盘缓存区取 + if (StrUtil.equals(device_code, "KTPDDW3")) { + // 1 更新缓存位 + JSONArray pointarr = + WQL.getWO("ACSTOMES_001") + .addParam("area_type", AreaEnum.KTTHCQ.getCode()) + .addParam("flag", "4") + .process() + .getResultJSONArray(0); + PointUpdateUtil.updatePoint(pointarr); + jsonObject.put("vehicle_type", VehicleTypeEnum.GTP.getCode()); + } else { + produceInfoByCode = this.getProduceInfoByCode(device_code); + // 假如是码垛位的上料位,则去看看有没有当前排产单生产的物料的半满托 + if (StrUtil.equals(device_code, "FJJXSXLW201") + || StrUtil.equals(device_code, "FJJXSXLW202") + || StrUtil.equals(device_code, "FJJXSXLW301") + || StrUtil.equals(device_code, "FJJXSXLW302")) { + + JSONObject joo = pointTable.query("point_code='" + device_code + "'").uniqueResult(0); + material_id = produceInfoByCode.getString("material_id"); + String workprocedure_id = WorkProcedureEnum.FJGX.getId(); + JSONObject jsonObject1 = + WQL.getWO("ACSTOMES_001") + .addParam("flag", "1") + .addParam("workprocedure_id", workprocedure_id) + .addParam("material_id", material_id) + .addParam("device_id", joo.getString("device_id")) + .process() + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject1)) { + // 如果有库存,则出半满托盘 + // 叫料出库 + jsonObject.put("next_point_code", device_code); + jsonObject.put("create_mode", "01"); + jsonObject.put("material_id", material_id); + jsonObject.put("is_full", "0"); + jsonObject.put("workprocedure_id", WorkProcedureEnum.BZGX.getId()); + jsonObject.put("group_device", jsonObject1.getString("group_device_id")); + callMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + break; + } + // 需要更新覆膜机的托盘类型 + JSONArray pointarr = + WQL.getWO("ACSTOMES_001") + .addParam("area_type", "05") + .addParam("flag", "4") + .process() + .getResultJSONArray(0); + PointUpdateUtil.updatePoint(pointarr); + } + if (ObjectUtil.isEmpty(produceInfoByCode)) { + throw new BadRequestException("未找到点位为'" + device_code + "'对应机械手的生产工单!"); + } + jsonObject.put("vehicle_type", produceInfoByCode.getString("vehicle_type")); + // 需要更新堆叠位的点位状态 + JSONArray pointarr = + WQL.getWO("ACSTOMES_001") + .addParam("point_code", "KTPDDW5") + .addParam("flag", "4") + .process() + .getResultJSONArray(0); + PointUpdateUtil.updatePoint(pointarr); + } + callEmptyVehicleTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + break; + // 生产rgv搬运任务 + case "5": + jsonObject.put("next_point_code", device_code); + jsonObject.put("create_mode", "01"); + // 1 判断有没有执行的Rgv搬运任务 + JSONObject taskObj = + WQLObject.getWQLObject("SCH_BASE_Task") + .query("task_type='04' and is_delete='0' and acs_task_type<>'07'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.CREATED.value()); + result.put("message", "失败!"); + result.put("data", new JSONObject()); + return result; + } + // 寻找起点 + // 更新所有设备的点位的状态 + // JSONArray pointConveyArr = pointTable.query("area_type='07' and device_point_type ='01' + // ").getResultJSONArray(0); + JSONArray pointConveyArr = + WQL.getWO("ACSTOMES_001") + .addParam("area_type", "07") + .addParam("flag", "4") + .process() + .getResultJSONArray(0); + + PointUpdateUtil.updatePoint(pointConveyArr); + // 假如没有设置哪个输送线先出,没有按照先进先出 + JSONObject param = new JSONObject(); + String rule = + WQLObject.getWQLObject("sys_param") + .query("code='is_outrule'") + .uniqueResult(0) + .getString("value"); + if (StrUtil.equals(rule, "1")) { + param = WQL.getWO("ACSTOMES_001").addParam("flag", "3").process().uniqueResult(0); + } else { + param = WQL.getWO("ACSTOMES_001").addParam("flag", "2").process().uniqueResult(0); + } + if (ObjectUtil.isEmpty(param)) { + throw new BadRequestException("未找到合适的输送线可以出!"); + } + jsonObject.put("start_point_code", param.getString("point_code")); + jsonObject.put("vehicle_code", param.getString("vehicle_code")); + rgvTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + break; + } + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + return result; } - if (StrUtil.isEmpty(type)) { - throw new BadRequestException("类型不能为空!"); - } - WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); - WQLObject structivtTable = WQLObject.getWQLObject("st_ivt_structivt"); - switch (type) { - // 送料入库 - case "1": - jsonObject.put("start_point_code", device_code); - jsonObject.put("create_mode", "01"); - jsonObject.put("group_id", group_id); - // 假如是半托缓存的几个位置,强制去包装 - String area_type = - pointTable - .query("point_code ='" + device_code + "'") - .uniqueResult(0) - .getString("area_type"); - if (StrUtil.equals(area_type, AreaEnum.BTHCQ.getCode())) { - fmjToPackIngTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - // 生成到包装位的任务时,下发托盘类型给RGV - String point_id = - pointTable - .query("point_code ='" + device_code + "'") - .uniqueResult(0) - .getString("point_id"); - String material_id = - structivtTable - .query("struct_id ='" + point_id + "'") - .uniqueResult(0) - .getString("material_id"); - JSONObject materiralObj1 = - WQLObject.getWQLObject("md_me_material") - .query("material_id = '" + material_id + "'") - .uniqueResult(0); - // 寻找对应的托盘类型 - String vehicle_type = - vehicleService.getVehicleType(materiralObj1.getString("vehicle_type")); - JSONObject jsonObject1 = new JSONObject(); - JSONArray array = new JSONArray(); - jsonObject1.put("device_code", "RGV2"); - jsonObject1.put("code", "to_container_type"); - jsonObject1.put("value", vehicle_type); - array.add(jsonObject1); - wmsToAcsServiceImpl.action(array); - break; + @Override + @Transactional(rollbackFor = Exception.class) + public Map manipulatorApply(Map jsonObject) { + log.debug("ACS的manipulatorApply请求参数为:" + jsonObject); + String device_code = (String) jsonObject.get("device_code"); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备点位不能为空!"); } - if (StrUtil.isEmpty(is_full)) { - throw new BadRequestException("托盘是否满托不能为空!"); + String vehicle_code = ""; + JSONObject produceInfoByCode = new JSONObject(); + String is_full = (String) jsonObject.get("is_full"); + if (ObjectUtil.isNotEmpty(jsonObject.get("vehicle_code")) + && !StrUtil.equals(jsonObject.get("vehicle_code").toString(), "0000") + && !"0".equals(jsonObject.get("vehicle_code").toString())) { + vehicle_code = jsonObject.get("vehicle_code").toString(); } - String material_code = (String) jsonObject.get("material_code"); - String producetask_id = (String) jsonObject.get("producetask_id"); - String material_id = ""; - JSONObject materialObj = - WQLObject.getWQLObject("md_me_material") - .query("material_code ='" + material_code + "'") - .uniqueResult(0); - if (StrUtil.isEmpty(material_code) - && (!StrUtil.equals(device_code, "CYSSX101")) - && !StrUtil.equals(device_code.substring(0, 4), "BTHC")) { - throw new BadRequestException("物料不能为空!"); + if (device_code.startsWith("FJJXSXLW") && StrUtil.isNotBlank(vehicle_code)) { + WQLObject.getWQLObject("st_buss_vehiclegroup") + .delete("vehicle_code = '" + vehicle_code + "'"); } - if (!StrUtil.equals(device_code, "CYSSX101") - && !StrUtil.equals(device_code.substring(0, 4), "BTHC")) { - material_id = materialObj.getString("material_id"); + String qty = String.valueOf(jsonObject.get("qty")); + // 产品编码 + String product_code = String.valueOf(jsonObject.get("product_code")); + if (StrUtil.isEmpty(product_code)) { + throw new BadRequestException("产品编号不能为空!"); } - // 如果是出窑输送线 要从组盘表里面去找物料 - if (StrUtil.equals(device_code, "CYSSX101")) { - String vehicle_code = jsonObject.get("vehicle_code").toString(); - if (StrUtil.isEmpty(vehicle_code)) { - throw new BadRequestException("载具不能为空!"); - } - JSONObject vehicleObj = - WQLObject.getWQLObject("st_buss_vehiclegroup") - .query("vehicle_code='" + vehicle_code + "'", "create_time desc") - .uniqueResult(0); - if (ObjectUtil.isEmpty(vehicleObj)) { - throw new BadRequestException("为找到载具号为'" + vehicle_code + "'的组盘信息!"); - } - material_id = vehicleObj.getString("material_id"); - if (ObjectUtil.isEmpty(vehicleObj.getString("qty"))) { - jsonObject.put("qty", "0"); - } else { - jsonObject.put("qty", vehicleObj.getString("qty")); - } - - jsonObject.put("vehicle_code", vehicle_code); - } - jsonObject.put("producetask_id", producetask_id); - jsonObject.put("create_mode", "01"); - jsonObject.put("material_id", material_id); - JSONObject materiralObj = - WQLObject.getWQLObject("md_me_material") - .query("material_id = '" + material_id + "'") - .uniqueResult(0); - Double stewing_time = materiralObj.getDouble("stewing_time"); - jsonObject.put("stewing_time", stewing_time); - // 假如是压制下料的几个位置,则要考虑是入输送线 还是入立体库 - if (StrUtil.equals(area_type, AreaEnum.YZQY.getCode()) && stewing_time <= 0) { - // 1.首先更新所有输送线的点位状态 - JSONArray pointarr = - WQL.getWO("ACSTOMES_001") - .addParam("area_type", "07") - .addParam("flag", "4") - .process() - .getResultJSONArray(0); - PointUpdateUtil.updatePoint(pointarr); - // 2.找一个合适的输送带 - JSONObject pointObj = StructFindUtil.getConveyor(materiralObj); - // 如果未找到合适的输送带 就去货架 - if (ObjectUtil.isNotEmpty(pointObj)) { - jsonObject.put("next_point_code", pointObj.getString("point_code")); - jsonObject.put("group_id", group_id); - toConveyorTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - // 假如是压制下料的几个位置 需要记 录不合格数量 - if (StrUtil.equals(area_type, AreaEnum.YZQY.getCode())) { - JSONObject joo = new JSONObject(); - joo.put("qty", jsonObject.get("unqualified_qty")); - joo.put("device_code", device_code); - try { - String record_id = PressureUtil.record(joo); - // 回传不合格记录 - WmsToJnServiceImpl wmsToJnService = new WmsToJnServiceImpl(); - wmsToJnService.feedBackQualityInfo(record_id); - } catch (Exception e) { - log.info("回传MES记录不合格异常!"); - e.printStackTrace(); - } - } - break; - } - } - // 假如是分拣机械手的下料位置,并且是满托,则去包装线 - if (StrUtil.equals("1", is_full) && StrUtil.equals(area_type, AreaEnum.FJQY.getCode())) { - String vehicle_code = - pointTable - .query("point_code ='" + device_code + "'") - .uniqueResult(0) - .getString("vehicle_code"); - jsonObject.put("vehicle_code", vehicle_code); - // if (StrUtil.isEmpty(vehicle_code)) { - // throw new BadRequestException("当前点位载具号为空!"); - // } - toPackIngTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - - // 生成到包装位的任务时,下发托盘类型给RGV - JSONObject vehicleObj = - WQLObject.getWQLObject("md_pb_vehicle") - .query("vehicle_code='" + vehicle_code + "'", "create_time desc") - .uniqueResult(0); - if (ObjectUtil.isNotEmpty(vehicleObj)) { - String vehicle_type = - vehicleService.getVehicleType(vehicleObj.getString("vehicle_type")); - JSONObject jsonObject1 = new JSONObject(); - JSONArray array = new JSONArray(); - jsonObject1.put("device_code", "RGV2"); - jsonObject1.put("code", "to_container_type"); - jsonObject1.put("value", vehicle_type); - array.add(jsonObject1); - try { - wmsToAcsServiceImpl.action(array); - } catch (Exception e) { - e.printStackTrace(); - } - } - break; - } - - // 假如是分拣机械手的下料位置,则需要将点位上的托盘号写入 - if (StrUtil.equals(area_type, AreaEnum.FJQY.getCode())) { - String vehicle_code = - pointTable - .query("point_code ='" + device_code + "'") - .uniqueResult(0) - .getString("vehicle_code"); - jsonObject.put("vehicle_code", vehicle_code); - } - String task_id = sendMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - log.info("创建送料任务标识:" + task_id); - // 假如是压制下料的几个位置 需要记录不合格数量 - if (StrUtil.equals(area_type, AreaEnum.YZQY.getCode())) { - WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); - JSONObject groupInfo = groupTable.query("task_id='" + task_id + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(groupInfo)) { - log.info("判断送料任务标识异常:" + task_id); - - throw new BadRequestException("压制满料扫码组盘错误,任务标识:" + task_id); - } - log.info("判断送料任务正常:" + task_id); - - JSONObject joo = new JSONObject(); - joo.put("qty", jsonObject.get("unqualified_qty")); - joo.put("device_code", device_code); - try { - String record_id = PressureUtil.record(joo); - // 回传不合格记录 - WmsToJnServiceImpl wmsToJnService = new WmsToJnServiceImpl(); - wmsToJnService.feedBackQualityInfo(record_id); - } catch (Exception e) { - log.info("回传MES记录不合格异常!"); - e.printStackTrace(); - } - } - - break; - case "2": - // 叫料出库 - jsonObject.put("next_point_code", device_code); - jsonObject.put("create_mode", "01"); - // 机械手1 is_full给1 ,机械手3is_full给空,半托,跟满托都可以出 - if (StrUtil.equals(device_code, "FJJXSSLW101") - || StrUtil.equals(device_code, "FJJXSSLW102")) { - is_full = "1"; - } - if (StrUtil.equals(device_code, "FJJXSSLW301") - || StrUtil.equals(device_code, "FJJXSSLW302")) { - is_full = "2"; - } - jsonObject.put("is_full", is_full); produceInfoByCode = this.getProduceInfoByCode(device_code); - // 批次 物料,客户要从排产单里面去取 - jsonObject.put("material_id", produceInfoByCode.getString("material_id")); - callMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - break; + String material_id = (String) produceInfoByCode.get("material_id"); + String cust_id = (String) produceInfoByCode.get("cust_id"); + String producetask_code = (String) produceInfoByCode.get("producetask_code"); + JSONObject materialObj = + WQLObject.getWQLObject("MD_ME_Material") + .query("material_id='" + material_id + "'") + .uniqueResult(0); + String producetask_id = + WQLObject.getWQLObject("pdm_mg_producetask") + .query("producetask_code='" + producetask_code + "'") + .uniqueResult(0) + .getString("producetask_id"); + JSONObject groubObj = new JSONObject(); + String group_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + groubObj.put("device_id", produceInfoByCode.getString("device_id")); + groubObj.put("group_id", group_id); + groubObj.put("material_id", material_id); + groubObj.put("material_code", materialObj.getString("material_code")); + groubObj.put("material_name", materialObj.getString("material_name")); + groubObj.put("material_spec", materialObj.getString("material_spec")); + groubObj.put("product_code", product_code); + 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("tray_qty", jsonObject.get("tray_qty")); + groubObj.put("crib_category", jsonObject.get("crib_category")); + groubObj.put("tray_high", jsonObject.get("tray_high")); + groubObj.put("palletX1_line", jsonObject.get("palletX1_line")); + groubObj.put("palletY1_row", jsonObject.get("palletY1_row")); + groubObj.put("palletA1_angle", jsonObject.get("palletA1_angle")); + groubObj.put("palletX2_line", jsonObject.get("palletX2_line")); + groubObj.put("palletY2_row", jsonObject.get("palletY2_row")); + groubObj.put("palletA2_angle", jsonObject.get("palletA2_angle")); + groubObj.put("palletX3_line", jsonObject.get("palletX3_line")); + groubObj.put("palletY3_row", jsonObject.get("palletY3_row")); + groubObj.put("pressCribX1_line", jsonObject.get("pressCribX1_line")); + groubObj.put("palletA3_angle", jsonObject.get("palletA3_angle")); + groubObj.put("pressCribY1_row", jsonObject.get("pressCribY1_row")); + groubObj.put("pressCribA1_angle", jsonObject.get("pressCribA1_angle")); + groubObj.put("pressCribX2_line", jsonObject.get("pressCribX2_line")); + groubObj.put("pressCribY2_row", jsonObject.get("pressCribY2_row")); + groubObj.put("pressCribA2_angle", jsonObject.get("pressCribA2_angle")); + groubObj.put("pressCribX3_line", jsonObject.get("pressCribX3_line")); + groubObj.put("pressCribY3_row", jsonObject.get("pressCribY3_row")); + groubObj.put("pressCribA3_angle", jsonObject.get("pressCribA3_angle")); + groubObj.put("Zoffset", jsonObject.get("Zoffset")); + groubObj.put("pallet_layerQty", jsonObject.get("pallet_layerQty")); + groubObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty")); + groubObj.put("codeLayerX1_interval", jsonObject.get("codeLayerX1_interval")); + groubObj.put("codeLayerY1_interval", jsonObject.get("codeLayerY1_interval")); + groubObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty")); + groubObj.put("codeLayerX2_interval", jsonObject.get("codeLayerX2_interval")); + groubObj.put("codeLayerY2_interval", jsonObject.get("codeLayerY2_interval")); + groubObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval")); + groubObj.put("codeLayerY3_interval", jsonObject.get("codeLayerY3_interval")); + groubObj.put("codeLayerY1_offset", jsonObject.get("codeLayerY1_offset")); + groubObj.put("codeLayerX1_offset", jsonObject.get("codeLayerX1_offset")); + groubObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval")); + groubObj.put("codeLayerX2_offset", jsonObject.get("codeLayerX2_offset")); + groubObj.put("codeLayerX3_offset", jsonObject.get("codeLayerX3_offset")); + groubObj.put("codeLayerY3_offset", jsonObject.get("codeLayerY3_offset")); + groubObj.put("pressLayerX1_interval", jsonObject.get("pressLayerX1_interval")); + groubObj.put("pressLayerY1_interval", jsonObject.get("pressLayerY1_interval")); + groubObj.put("pressLayerX2_interval", jsonObject.get("pressLayerX2_interval")); + groubObj.put("pressLayerY2_interval", jsonObject.get("pressLayerY2_interval")); + groubObj.put("pressLayerX3_interval", jsonObject.get("pressLayerX3_interval")); + groubObj.put("pressLayerY3_interval", jsonObject.get("pressLayerY3_interval")); + groubObj.put("pressLayerX1_offset", jsonObject.get("pressLayerX1_offset")); + groubObj.put("pressLayerY1_offset", jsonObject.get("pressLayerY1_offset")); + groubObj.put("pressLayerX2_offset", jsonObject.get("pressLayerX2_offset")); + groubObj.put("pressLayerY2_offset", jsonObject.get("pressLayerY2_offset")); + groubObj.put("pressLayerX3_offset", jsonObject.get("pressLayerX3_offset")); + groubObj.put("pressLayerY3_offset", jsonObject.get("pressLayerY3_offset")); + groubObj.put("one_cribTotal", jsonObject.get("one_cribTotal")); + groubObj.put("two_cribTotal", jsonObject.get("two_cribTotal")); + groubObj.put("one_qty", jsonObject.get("one_qty")); + groubObj.put("two_qty", jsonObject.get("two_qty")); + groubObj.put("tool_coordinate", jsonObject.get("tool_coordinate")); + groubObj.put("create_id", UserInfoUtil.getCurrentUserId()); + groubObj.put("create_name", UserInfoUtil.getNickName()); + groubObj.put("create_time", DateUtil.now()); + groubObj.put("is_full", is_full); + // 去自动码垛还是人工码垛从物料信息里面去取 + groubObj.put("is_autopackage", materialObj.getString("is_auto_package")); + // 假如是分拣机械手,并且托盘为空,则托盘从点位上取 + if ((StrUtil.equals(device_code, "FJJXSXLW201") + || StrUtil.equals(device_code, "FJJXSXLW202") + || StrUtil.equals(device_code, "FJJXSXLW301") + || StrUtil.equals(device_code, "FJJXSXLW302")) + && (StrUtil.isEmpty(vehicle_code) + || "0000".equals(vehicle_code) + || "0".equals(vehicle_code))) { + PointService pointService = SpringContextHolder.getBean(PointService.class); + PointDto startPoint = pointService.findByCode(device_code); + vehicle_code = startPoint.getVehicle_code(); + } + groubObj.put("vehicle_code", vehicle_code); + WQLObject.getWQLObject("st_buss_vehiclegroup").insert(groubObj); - case "3": - // 送空托盘 - jsonObject.put("start_point_code", device_code); - sendEmptyVehicleTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - break; - case "4": - // 叫空托盘 - jsonObject.put("next_point_code", device_code); - // 如果是叠盘位3 ,则去铁托盘缓存区取 - if (StrUtil.equals(device_code, "KTPDDW3")) { - // 1 更新缓存位 - JSONArray pointarr = - WQL.getWO("ACSTOMES_001") - .addParam("area_type", AreaEnum.KTTHCQ.getCode()) - .addParam("flag", "4") - .process() - .getResultJSONArray(0); - PointUpdateUtil.updatePoint(pointarr); - jsonObject.put("vehicle_type", VehicleTypeEnum.GTP.getCode()); + jsonObject.put("type", "1"); + jsonObject.put("group_id", group_id); + jsonObject.put("producetask_id", producetask_id); + jsonObject.put("material_code", materialObj.getString("material_code")); + this.receiveTaskFromAcs(jsonObject); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + return result; + } + + @Override + public Map group(Map jsonObject) { + log.debug("ACS的group请求参数为:" + jsonObject); + String task_code = jsonObject.get("task_code").toString(); + String vehicle_code = jsonObject.get("vehicle_code").toString(); + // 永远判断生成不生成输送任务 + String device_code = (String) jsonObject.get("device_code"); + if (StrUtil.isEmpty(task_code)) { + throw new BadRequestException("任务号不能为空!"); + } + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("载具号不能为空!"); + } + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备点位不能为空!"); + } + // 1组盘 + WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + + JSONObject taskobj = taskTable.query("task_code='" + task_code + "'").uniqueResult(0); + String task_id = ""; + if (ObjectUtil.isNotEmpty(taskobj)) { + task_id = taskobj.getString("task_id"); } else { - produceInfoByCode = this.getProduceInfoByCode(device_code); - // 假如是码垛位的上料位,则去看看有没有当前排产单生产的物料的半满托 - if (StrUtil.equals(device_code, "FJJXSXLW201") - || StrUtil.equals(device_code, "FJJXSXLW202") - || StrUtil.equals(device_code, "FJJXSXLW301") - || StrUtil.equals(device_code, "FJJXSXLW302")) { + throw new BadRequestException("未找到指令号'" + task_id); + } + // 将之前的托盘信息删除 + // groupTable.delete("vehicle_code='" + vehicle_code + "' and task_id <>'" + task_id + + // "'"); + // 如果是送料任务需要反向组盘 + String handle_class = taskobj.getString("handle_class"); + if (SendMaterialTask.class.getName().equals(handle_class) + || ToConveyorTask.class.getName().equals(handle_class)) { + groupTable.delete("vehicle_code = '" + vehicle_code + "' AND task_id <> '" + task_id + "'"); + JSONObject groupObj = groupTable.query("task_id='" + task_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(groupObj)) { + groupObj.put("vehicle_code", vehicle_code); + groupObj.put("update_optid", UserInfoUtil.getCurrentUserId()); + groupObj.put("update_optname", UserInfoUtil.getNickName()); + groupObj.put("update_time", DateUtil.now()); + groupTable.update(groupObj); + } else { + groupObj = new JSONObject(); + // 压制下料找不到组盘信息,根据任务号补齐组盘信息 + String start_area = taskobj.getString("start_area"); + JSONObject requestParam = taskobj.getJSONObject("request_param"); + if ("22".equals(start_area)) { + JSONObject materialObj = + WQLObject.getWQLObject("MD_ME_Material") + .query("material_id='" + requestParam.getString("material_id") + "'") + .uniqueResult(0); + groupObj.put("material_code", materialObj.getString("material_code")); + groupObj.put("material_name", materialObj.getString("material_name")); + groupObj.put("material_spec", materialObj.getString("material_spec")); + groupObj.put("group_id", requestParam.getString("group_id")); + groupObj.put("vehicle_code", vehicle_code); + groupObj.put("material_id", requestParam.getString("material_id")); + groupObj.put("producetask_id", requestParam.getString("producetask_id")); + groupObj.put("qty", requestParam.getString("qty")); + groupObj.put("is_full", requestParam.getString("is_full")); + groupObj.put("is_autopackage", "1"); - JSONObject joo = pointTable.query("point_code='" + device_code + "'").uniqueResult(0); - material_id = produceInfoByCode.getString("material_id"); - String workprocedure_id = WorkProcedureEnum.FJGX.getId(); - JSONObject jsonObject1 = - WQL.getWO("ACSTOMES_001") - .addParam("flag", "1") - .addParam("workprocedure_id", workprocedure_id) - .addParam("material_id", material_id) - .addParam("device_id", joo.getString("device_id")) - .process() - .uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonObject1)) { - // 如果有库存,则出半满托盘 - // 叫料出库 - jsonObject.put("next_point_code", device_code); - jsonObject.put("create_mode", "01"); - jsonObject.put("material_id", material_id); - jsonObject.put("is_full", "0"); - jsonObject.put("workprocedure_id", WorkProcedureEnum.BZGX.getId()); - jsonObject.put("group_device", jsonObject1.getString("group_device_id")); - callMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - break; + groupObj.put("task_id", taskobj.getString("task_id")); + groupObj.put("material_move_id", taskobj.getString("task_id")); + + groupObj.put("create_id", UserInfoUtil.getCurrentUserId()); + groupObj.put("create_name", UserInfoUtil.getNickName()); + groupObj.put("create_time", DateUtil.now()); + groupTable.insert(groupObj); + + } else { + String msg = "未找到任务号为" + task_code + "的组盘信息"; + log.error(msg); + throw new BadRequestException(msg); + } } - // 需要更新覆膜机的托盘类型 - JSONArray pointarr = - WQL.getWO("ACSTOMES_001") - .addParam("area_type", "05") - .addParam("flag", "4") - .process() - .getResultJSONArray(0); - PointUpdateUtil.updatePoint(pointarr); - } - if (ObjectUtil.isEmpty(produceInfoByCode)) { - throw new BadRequestException("未找到点位为'" + device_code + "'对应机械手的生产工单!"); - } - jsonObject.put("vehicle_type", produceInfoByCode.getString("vehicle_type")); - // 需要更新堆叠位的点位状态 - JSONArray pointarr = - WQL.getWO("ACSTOMES_001") - .addParam("point_code", "KTPDDW5") - .addParam("flag", "4") - .process() - .getResultJSONArray(0); - PointUpdateUtil.updatePoint(pointarr); } - callEmptyVehicleTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - break; - // 生产rgv搬运任务 - case "5": - jsonObject.put("next_point_code", device_code); - jsonObject.put("create_mode", "01"); - // 1 判断有没有执行的Rgv搬运任务 - JSONObject taskObj = - WQLObject.getWQLObject("SCH_BASE_Task") - .query("task_type='04' and is_delete='0' and acs_task_type<>'07'") - .uniqueResult(0); + + // 更新入库单单据的托盘条码 + WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + JSONObject iosObj = iosTable.query("task_id ='" + task_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(iosObj)) { + iosObj.put("vehicle_code", vehicle_code); + iosTable.update(iosObj); + } + // 更新任务的条码 + JSONObject taskObj = taskTable.query("task_id ='" + task_id + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(taskObj)) { - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.CREATED.value()); - result.put("message", "失败!"); - result.put("data", new JSONObject()); - return result; + taskObj.put("vehicle_code", vehicle_code); + taskTable.update(taskObj); } - // 寻找起点 - // 更新所有设备的点位的状态 - // JSONArray pointConveyArr = pointTable.query("area_type='07' and device_point_type ='01' - // ").getResultJSONArray(0); - JSONArray pointConveyArr = - WQL.getWO("ACSTOMES_001") - .addParam("area_type", "07") - .addParam("flag", "4") - .process() - .getResultJSONArray(0); + // 假如是入窑输送线对接口,生成输送任务 + JSONObject data = new JSONObject(); + if (StrUtil.equals("RYSSX101", device_code) + || StrUtil.equals("RYSSX201", device_code) + || StrUtil.equals("RYSSX301", device_code) + || StrUtil.equals("RYSSX401", device_code)) { + JSONObject param = new JSONObject(); + param.put("start_point_code", device_code); + param.put("vehicle_code", vehicle_code); + // 根据起点去找终点 + ConveyorTask task = new ConveyorTask(); - PointUpdateUtil.updatePoint(pointConveyArr); - // 假如没有设置哪个输送线先出,没有按照先进先出 - JSONObject param = new JSONObject(); - String rule = - WQLObject.getWQLObject("sys_param") - .query("code='is_outrule'") - .uniqueResult(0) - .getString("value"); - if (StrUtil.equals(rule, "1")) { - param = WQL.getWO("ACSTOMES_001").addParam("flag", "3").process().uniqueResult(0); + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + String device_id = + pointTable + .query("point_code ='" + device_code + "'") + .uniqueResult(0) + .getString("device_id"); + String next_point_code = + pointTable + .query("device_id ='" + device_id + "' and device_point_type ='02'") + .uniqueResult(0) + .getString("point_code"); + param.put("next_point_code", next_point_code); + } + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", data); + return result; + } + + @Override + public Map inKiln(Map jsonObject) { + log.debug("ACS的inKiln请求参数为:" + jsonObject); + String vehicle_code = String.valueOf(jsonObject.get("vehicle_code")); + KilnUtil.inKiln(vehicle_code); + JSONObject jo = new JSONObject(); + jo.put("vehicle_code", vehicle_code); + // 调用wms的接口 + WmsToJnServiceImpl wmsToJnService = new WmsToJnServiceImpl(); + wmsToJnService.feedBackInKiln(jo); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map ispackage(Map jsonObject) { + log.debug("ACS的ispackage请求参数为:" + jsonObject); + String vehicle_code = jsonObject.get("vehicle_code").toString(); + 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 + "'的组盘信息!"); + } + WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); + JSONObject groupObj = groupTable.query("vehicle_code ='" + vehicle_code + "'").uniqueResult(0); + groupTable.query("vehicle_code ='" + vehicle_code + "'").uniqueResult(0); + String is_autopackage = groupObj.getString("is_autopackage"); + // code的值 1:自动码垛;2:人工码垛; + String code = ""; + if (StrUtil.equals("0", is_autopackage)) { + code = "1"; } else { - param = WQL.getWO("ACSTOMES_001").addParam("flag", "2").process().uniqueResult(0); + code = "2"; } - if (ObjectUtil.isEmpty(param)) { - throw new BadRequestException("未找到合适的输送线可以出!"); + // 更新窑的信息 + KilnUtil.outKiln(vehicle_code); + + JSONObject jo = new JSONObject(); + jo.put("vehicle_code", vehicle_code); + // 调用wms的接口 + WmsToJnServiceImpl wmsToJnService = new WmsToJnServiceImpl(); + wmsToJnService.feedBackOutKiln(jo); + + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("code", code); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map getEmptyVehicle_code(Map jsonObject) { + log.debug("ACS的getEmptyVehicle_code请求参数为:" + jsonObject); + // 获取一个空的托盘号 + String code = "VEHICCLE_CODE_MTP"; + String vehicle_type = "03"; + 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 = UserInfoUtil.getCurrentUserId(); + String nickName = UserInfoUtil.getNickName(); + 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); + return returnjo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map getDevicecodeByVehicle_ype(Map jsonObject) { + log.debug("ACS的getDevicecodeByVehicle_ype请求参数为:" + jsonObject); + String vehicle_type = (String) jsonObject.get("vehicle_type"); + if (StrUtil.isEmpty(vehicle_type)) { + throw new BadRequestException("托盘类型不能为空!"); } - jsonObject.put("start_point_code", param.getString("point_code")); - jsonObject.put("vehicle_code", param.getString("vehicle_code")); - rgvTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - break; - } - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map manipulatorApply(Map jsonObject) { - log.debug("ACS的manipulatorApply请求参数为:" + jsonObject); - String device_code = (String) jsonObject.get("device_code"); - if (StrUtil.isEmpty(device_code)) { - throw new BadRequestException("设备点位不能为空!"); - } - String vehicle_code = ""; - JSONObject produceInfoByCode = new JSONObject(); - String is_full = (String) jsonObject.get("is_full"); - if (ObjectUtil.isNotEmpty(jsonObject.get("vehicle_code")) - && !StrUtil.equals(jsonObject.get("vehicle_code").toString(), "0000") - && !"0".equals(jsonObject.get("vehicle_code").toString())) { - vehicle_code = jsonObject.get("vehicle_code").toString(); - } - if (device_code.startsWith("FJJXSXLW") && StrUtil.isNotBlank(vehicle_code)) { - WQLObject.getWQLObject("st_buss_vehiclegroup") - .delete("vehicle_code = '" + vehicle_code + "'"); - } - String qty = String.valueOf(jsonObject.get("qty")); - // 产品编码 - String product_code = String.valueOf(jsonObject.get("product_code")); - if (StrUtil.isEmpty(product_code)) { - throw new BadRequestException("产品编号不能为空!"); - } - produceInfoByCode = this.getProduceInfoByCode(device_code); - String material_id = (String) produceInfoByCode.get("material_id"); - String cust_id = (String) produceInfoByCode.get("cust_id"); - String producetask_code = (String) produceInfoByCode.get("producetask_code"); - JSONObject materialObj = - WQLObject.getWQLObject("MD_ME_Material") - .query("material_id='" + material_id + "'") - .uniqueResult(0); - String producetask_id = - WQLObject.getWQLObject("pdm_mg_producetask") - .query("producetask_code='" + producetask_code + "'") - .uniqueResult(0) - .getString("producetask_id"); - JSONObject groubObj = new JSONObject(); - String group_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - groubObj.put("device_id", produceInfoByCode.getString("device_id")); - groubObj.put("group_id", group_id); - groubObj.put("material_id", material_id); - groubObj.put("material_code", materialObj.getString("material_code")); - groubObj.put("material_name", materialObj.getString("material_name")); - groubObj.put("product_code", product_code); - 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("tray_qty", jsonObject.get("tray_qty")); - groubObj.put("crib_category", jsonObject.get("crib_category")); - groubObj.put("tray_high", jsonObject.get("tray_high")); - groubObj.put("palletX1_line", jsonObject.get("palletX1_line")); - groubObj.put("palletY1_row", jsonObject.get("palletY1_row")); - groubObj.put("palletA1_angle", jsonObject.get("palletA1_angle")); - groubObj.put("palletX2_line", jsonObject.get("palletX2_line")); - groubObj.put("palletY2_row", jsonObject.get("palletY2_row")); - groubObj.put("palletA2_angle", jsonObject.get("palletA2_angle")); - groubObj.put("palletX3_line", jsonObject.get("palletX3_line")); - groubObj.put("palletY3_row", jsonObject.get("palletY3_row")); - groubObj.put("pressCribX1_line", jsonObject.get("pressCribX1_line")); - groubObj.put("palletA3_angle", jsonObject.get("palletA3_angle")); - groubObj.put("pressCribY1_row", jsonObject.get("pressCribY1_row")); - groubObj.put("pressCribA1_angle", jsonObject.get("pressCribA1_angle")); - groubObj.put("pressCribX2_line", jsonObject.get("pressCribX2_line")); - groubObj.put("pressCribY2_row", jsonObject.get("pressCribY2_row")); - groubObj.put("pressCribA2_angle", jsonObject.get("pressCribA2_angle")); - groubObj.put("pressCribX3_line", jsonObject.get("pressCribX3_line")); - groubObj.put("pressCribY3_row", jsonObject.get("pressCribY3_row")); - groubObj.put("pressCribA3_angle", jsonObject.get("pressCribA3_angle")); - groubObj.put("Zoffset", jsonObject.get("Zoffset")); - groubObj.put("pallet_layerQty", jsonObject.get("pallet_layerQty")); - groubObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty")); - groubObj.put("codeLayerX1_interval", jsonObject.get("codeLayerX1_interval")); - groubObj.put("codeLayerY1_interval", jsonObject.get("codeLayerY1_interval")); - groubObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty")); - groubObj.put("codeLayerX2_interval", jsonObject.get("codeLayerX2_interval")); - groubObj.put("codeLayerY2_interval", jsonObject.get("codeLayerY2_interval")); - groubObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval")); - groubObj.put("codeLayerY3_interval", jsonObject.get("codeLayerY3_interval")); - groubObj.put("codeLayerY1_offset", jsonObject.get("codeLayerY1_offset")); - groubObj.put("codeLayerX1_offset", jsonObject.get("codeLayerX1_offset")); - groubObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval")); - groubObj.put("codeLayerX2_offset", jsonObject.get("codeLayerX2_offset")); - groubObj.put("codeLayerX3_offset", jsonObject.get("codeLayerX3_offset")); - groubObj.put("codeLayerY3_offset", jsonObject.get("codeLayerY3_offset")); - groubObj.put("pressLayerX1_interval", jsonObject.get("pressLayerX1_interval")); - groubObj.put("pressLayerY1_interval", jsonObject.get("pressLayerY1_interval")); - groubObj.put("pressLayerX2_interval", jsonObject.get("pressLayerX2_interval")); - groubObj.put("pressLayerY2_interval", jsonObject.get("pressLayerY2_interval")); - groubObj.put("pressLayerX3_interval", jsonObject.get("pressLayerX3_interval")); - groubObj.put("pressLayerY3_interval", jsonObject.get("pressLayerY3_interval")); - groubObj.put("pressLayerX1_offset", jsonObject.get("pressLayerX1_offset")); - groubObj.put("pressLayerY1_offset", jsonObject.get("pressLayerY1_offset")); - groubObj.put("pressLayerX2_offset", jsonObject.get("pressLayerX2_offset")); - groubObj.put("pressLayerY2_offset", jsonObject.get("pressLayerY2_offset")); - groubObj.put("pressLayerX3_offset", jsonObject.get("pressLayerX3_offset")); - groubObj.put("pressLayerY3_offset", jsonObject.get("pressLayerY3_offset")); - groubObj.put("one_cribTotal", jsonObject.get("one_cribTotal")); - groubObj.put("two_cribTotal", jsonObject.get("two_cribTotal")); - groubObj.put("one_qty", jsonObject.get("one_qty")); - groubObj.put("two_qty", jsonObject.get("two_qty")); - groubObj.put("tool_coordinate", jsonObject.get("tool_coordinate")); - groubObj.put("create_id", UserInfoUtil.getCurrentUserId()); - groubObj.put("create_name", UserInfoUtil.getNickName()); - groubObj.put("create_time", DateUtil.now()); - groubObj.put("is_full", is_full); - // 去自动码垛还是人工码垛从物料信息里面去取 - groubObj.put("is_autopackage", materialObj.getString("is_auto_package")); - // 假如是分拣机械手,并且托盘为空,则托盘从点位上取 - if ((StrUtil.equals(device_code, "FJJXSXLW201") - || StrUtil.equals(device_code, "FJJXSXLW202") - || StrUtil.equals(device_code, "FJJXSXLW301") - || StrUtil.equals(device_code, "FJJXSXLW302")) - && (StrUtil.isEmpty(vehicle_code) - || "0000".equals(vehicle_code) - || "0".equals(vehicle_code))) { - PointService pointService = SpringContextHolder.getBean(PointService.class); - PointDto startPoint = pointService.findByCode(device_code); - vehicle_code = startPoint.getVehicle_code(); - } - groubObj.put("vehicle_code", vehicle_code); - WQLObject.getWQLObject("st_buss_vehiclegroup").insert(groubObj); - - jsonObject.put("type", "1"); - jsonObject.put("group_id", group_id); - jsonObject.put("producetask_id", producetask_id); - jsonObject.put("material_code", materialObj.getString("material_code")); - this.receiveTaskFromAcs(jsonObject); - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); - return result; - } - - @Override - public Map group(Map jsonObject) { - log.debug("ACS的group请求参数为:" + jsonObject); - String task_code = jsonObject.get("task_code").toString(); - String vehicle_code = jsonObject.get("vehicle_code").toString(); - // 永远判断生成不生成输送任务 - String device_code = (String) jsonObject.get("device_code"); - if (StrUtil.isEmpty(task_code)) { - throw new BadRequestException("任务号不能为空!"); - } - if (StrUtil.isEmpty(vehicle_code)) { - throw new BadRequestException("载具号不能为空!"); - } - if (StrUtil.isEmpty(device_code)) { - throw new BadRequestException("设备点位不能为空!"); - } - // 1组盘 - WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - - JSONObject taskobj = taskTable.query("task_code='" + task_code + "'").uniqueResult(0); - String task_id = ""; - if (ObjectUtil.isNotEmpty(taskobj)) { - task_id = taskobj.getString("task_id"); - } else { - throw new BadRequestException("未找到指令号'" + task_id); - } - // 将之前的托盘信息删除 - // groupTable.delete("vehicle_code='" + vehicle_code + "' and task_id <>'" + task_id + - // "'"); - // 如果是送料任务需要反向组盘 - String handle_class = taskobj.getString("handle_class"); - if (SendMaterialTask.class.getName().equals(handle_class) - || ToConveyorTask.class.getName().equals(handle_class)) { - groupTable.delete("vehicle_code = '" + vehicle_code + "' AND task_id <> '" + task_id + "'"); - JSONObject groupObj = groupTable.query("task_id='" + task_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(groupObj)) { - groupObj.put("vehicle_code", vehicle_code); - groupObj.put("update_optid", UserInfoUtil.getCurrentUserId()); - groupObj.put("update_optname", UserInfoUtil.getNickName()); - groupObj.put("update_time", DateUtil.now()); - groupTable.update(groupObj); - } else { - groupObj = new JSONObject(); - // 压制下料找不到组盘信息,根据任务号补齐组盘信息 - String start_area = taskobj.getString("start_area"); - JSONObject requestParam = taskobj.getJSONObject("request_param"); - if ("22".equals(start_area)) { - JSONObject materialObj = - WQLObject.getWQLObject("MD_ME_Material") - .query("material_id='" + requestParam.getString("material_id") + "'") - .uniqueResult(0); - groupObj.put("material_code", materialObj.getString("material_code")); - groupObj.put("material_name", materialObj.getString("material_name")); - groupObj.put("material_spec", materialObj.getString("material_spec")); - groupObj.put("group_id", requestParam.getString("group_id")); - groupObj.put("vehicle_code", vehicle_code); - groupObj.put("material_id", requestParam.getString("material_id")); - groupObj.put("producetask_id", requestParam.getString("producetask_id")); - groupObj.put("qty", requestParam.getString("qty")); - groupObj.put("is_full", requestParam.getString("is_full")); - groupObj.put("is_autopackage", "1"); - - groupObj.put("task_id", taskobj.getString("task_id")); - groupObj.put("material_move_id", taskobj.getString("task_id")); - - groupObj.put("create_id", UserInfoUtil.getCurrentUserId()); - groupObj.put("create_name", UserInfoUtil.getNickName()); - groupObj.put("create_time", DateUtil.now()); - groupTable.insert(groupObj); - - } else { - String msg = "未找到任务号为" + task_code + "的组盘信息"; - log.error(msg); - throw new BadRequestException(msg); + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject pointObj = + point_table.query("vehicle_type='" + vehicle_type + "' and area_type='27'").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; } - // 更新入库单单据的托盘条码 - WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); - JSONObject iosObj = iosTable.query("task_id ='" + task_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(iosObj)) { - iosObj.put("vehicle_code", vehicle_code); - iosTable.update(iosObj); - } - // 更新任务的条码 - JSONObject taskObj = taskTable.query("task_id ='" + task_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) { - taskObj.put("vehicle_code", vehicle_code); - taskTable.update(taskObj); - } - // 假如是入窑输送线对接口,生成输送任务 - JSONObject data = new JSONObject(); - if (StrUtil.equals("RYSSX101", device_code) - || StrUtil.equals("RYSSX201", device_code) - || StrUtil.equals("RYSSX301", device_code) - || StrUtil.equals("RYSSX401", device_code)) { - JSONObject param = new JSONObject(); - param.put("start_point_code", device_code); - param.put("vehicle_code", vehicle_code); - // 根据起点去找终点 - ConveyorTask task = new ConveyorTask(); - - WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); - String device_id = - pointTable - .query("point_code ='" + device_code + "'") - .uniqueResult(0) - .getString("device_id"); - String next_point_code = - pointTable - .query("device_id ='" + device_id + "' and device_point_type ='02'") - .uniqueResult(0) - .getString("point_code"); - param.put("next_point_code", next_point_code); - } - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", data); - return result; - } - - @Override - public Map inKiln(Map jsonObject) { - log.debug("ACS的inKiln请求参数为:" + jsonObject); - String vehicle_code = String.valueOf(jsonObject.get("vehicle_code")); - KilnUtil.inKiln(vehicle_code); - JSONObject jo = new JSONObject(); - jo.put("vehicle_code", vehicle_code); - // 调用wms的接口 - WmsToJnServiceImpl wmsToJnService = new WmsToJnServiceImpl(); - wmsToJnService.feedBackInKiln(jo); - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map ispackage(Map jsonObject) { - log.debug("ACS的ispackage请求参数为:" + jsonObject); - String vehicle_code = jsonObject.get("vehicle_code").toString(); - 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 + "'的组盘信息!"); - } - WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); - JSONObject groupObj = groupTable.query("vehicle_code ='" + vehicle_code + "'").uniqueResult(0); - groupTable.query("vehicle_code ='" + vehicle_code + "'").uniqueResult(0); - String is_autopackage = groupObj.getString("is_autopackage"); - // code的值 1:自动码垛;2:人工码垛; - String code = ""; - if (StrUtil.equals("0", is_autopackage)) { - code = "1"; - } else { - code = "2"; - } - // 更新窑的信息 - KilnUtil.outKiln(vehicle_code); - - JSONObject jo = new JSONObject(); - jo.put("vehicle_code", vehicle_code); - // 调用wms的接口 - WmsToJnServiceImpl wmsToJnService = new WmsToJnServiceImpl(); - wmsToJnService.feedBackOutKiln(jo); - - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("code", code); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map getEmptyVehicle_code(Map jsonObject) { - log.debug("ACS的getEmptyVehicle_code请求参数为:" + jsonObject); - // 获取一个空的托盘号 - String code = "VEHICCLE_CODE_MTP"; - String vehicle_type = "03"; - 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 = UserInfoUtil.getCurrentUserId(); - String nickName = UserInfoUtil.getNickName(); - 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); - return returnjo; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map getDevicecodeByVehicle_ype(Map jsonObject) { - log.debug("ACS的getDevicecodeByVehicle_ype请求参数为:" + 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 area_type='27'").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; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map getVehicleInfoBycode(Map jsonObject) { - log.debug("ACS的getVehicleInfoBycode请求参数为:" + jsonObject); - String device_code = (String) jsonObject.get("device_code"); - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - String vehicle_code = - point_table - .query("point_code='" + device_code + "'") - .uniqueResult(0) - .getString("vehicle_code"); - if (StrUtil.isEmpty(vehicle_code)) { - throw new BadRequestException("未找到该点位上的托盘信息!"); - } - JSONObject vehicleObj = - WQLObject.getWQLObject("st_buss_vehiclegroup") - .query("vehicle_code='" + vehicle_code + "' AND is_delete='0'") - .uniqueResult(0); - if (ObjectUtil.isEmpty(vehicleObj)) { - throw new BadRequestException("未找到托盘号为'" + vehicle_code + "'的托盘信息!"); - } - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("content", vehicleObj); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map sureProduceTask(Map jsonObject) { - log.debug("ACS的sureProduceTask请求参数为:" + jsonObject); - String producetask_code = (String) jsonObject.get("producetask_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_MG_produceTask"); - JSONObject taskObj = - taskTable.query("producetask_code='" + producetask_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(taskObj)) { - throw new BadRequestException("未找到工单号为'" + producetask_code + "'的工单信息!"); - } - // 1为确认 - // 2为完成 - if (StrUtil.equals(type, "1")) { - if (StrUtil.isEmpty(producetask_code)) { - throw new BadRequestException("工单号不能为空!"); - } - if (StrUtil.isEmpty(device_code)) { - throw new BadRequestException("设备点位不能为空!"); - } - if (StrUtil.isEmpty(material_code)) { - throw new BadRequestException("物料编码不能为空!"); - } - // 根据设备去找设备id - String device_id = ""; - if (StrUtil.equals("FJJXS1", device_code) - || StrUtil.equals("FJJXS2", device_code) - || StrUtil.equals("FJJXS3", device_code)) { - device_id = - WQLObject.getWQLObject("pdm_base_device") - .query("device_code ='" + device_code + "'") - .uniqueResult(0) - .getString("device_id"); - } else { - device_id = - WQLObject.getWQLObject("sch_base_point") - .query("point_code='" + device_code + "'") - .uniqueResult(0) - .getString("device_id"); - } - // 根据物料code 去找物料id - JSONObject materiObj = - WQLObject.getWQLObject("MD_ME_Material") - .query("material_code='" + material_code + "'") - .uniqueResult(0); - if (!StrUtil.equals(device_id, taskObj.getString("device_id"))) { - throw new BadRequestException("设备标识不一样!"); - } - if (!StrUtil.equals(materiObj.getString("material_id"), taskObj.getString("material_id"))) { - throw new BadRequestException("物料标识不一样!"); - } - taskObj.put("producetask_status", "04"); - - if (StrUtil.equals("FJJXS1", device_code) - || StrUtil.equals("FJJXS2", device_code) - || StrUtil.equals("FJJXS3", device_code)) { - // 调用mes接口 - HashMap map = new HashMap(); - map.put("producetask_code", producetask_code); - WmsToJnServiceImpl wmsToJnServiceImpl = new WmsToJnServiceImpl(); - wmsToJnServiceImpl.feedBackPackWordShop(map); - } - } - // 排产工单完成! - if (StrUtil.equals("2", type)) { - taskObj.put("producetask_status", "05"); - taskObj.put("real_qty", qty); - } - taskTable.update(taskObj); - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateVehicleType(Map jsonObject) { - log.debug("ACS的updateVehicleType请求参数为:" + jsonObject); - String vehicle_type = (String) jsonObject.get("vehicle_type"); - if (vehicle_type.equals("1")) { - vehicle_type = "03"; - } else if (vehicle_type.equals("2")) { - vehicle_type = "04"; - } else if (vehicle_type.equals("3")) { - vehicle_type = "05"; - } else if (vehicle_type.equals("4")) { - vehicle_type = "06"; - } else if (vehicle_type.equals("5")) { - vehicle_type = "07"; - } - String device_code = (String) jsonObject.get("device_code"); - String vehicle_code = jsonObject.get("vehicle_code").toString(); - if (StrUtil.isEmpty(vehicle_type)) { - throw new BadRequestException("托盘类型不能为空!"); - } - if (StrUtil.isEmpty(device_code)) { - throw new BadRequestException("设备点位不能为空"); - } - if (StrUtil.isEmpty(vehicle_code)) { - throw new BadRequestException("托盘号不能为空!"); - } - WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); - JSONObject pointObj = - pointTable.query("point_code='" + device_code + "' and area_type='05'").uniqueResult(0); - pointObj.put("vehicle_type", vehicle_type); - pointObj.put("vehicle_code", vehicle_code); - pointObj.put("point_status", "01"); - pointTable.update(pointObj); - } - - @Override - public Map receiveTaskStatusAcs(String string) { - { - JSONArray array = JSONArray.parseArray(string); - log.debug("ACS的receiveTaskStatusAcs请求参数为:" + array); - // 返回处理失败的任务 - JSONArray errArr = new JSONArray(); - for (int i = 0; i < array.size(); i++) { - JSONObject row = array.getJSONObject(i); - String task_id = row.getString("ext_task_uuid"); - row.put("task_id", task_id); - 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 message = ""; - String status = ""; - if ("1".equals(acs_task_status)) { - status = TaskStatusEnum.EXECUTING.getCode(); + @Override + @Transactional(rollbackFor = Exception.class) + public Map getVehicleInfoBycode(Map jsonObject) { + log.debug("ACS的getVehicleInfoBycode请求参数为:" + jsonObject); + String device_code = (String) jsonObject.get("device_code"); + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + String vehicle_code = + point_table + .query("point_code='" + device_code + "'") + .uniqueResult(0) + .getString("vehicle_code"); + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("未找到该点位上的托盘信息!"); } - if ("2".equals(acs_task_status)) { - status = TaskStatusEnum.FINISHED.getCode(); + JSONObject vehicleObj = + WQLObject.getWQLObject("st_buss_vehiclegroup") + .query("vehicle_code='" + vehicle_code + "' AND is_delete='0'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(vehicleObj)) { + throw new BadRequestException("未找到托盘号为'" + vehicle_code + "'的托盘信息!"); } - if (ObjectUtil.isEmpty(status)) { - status = acs_task_status; + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("content", vehicleObj); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map sureProduceTask(Map jsonObject) { + log.debug("ACS的sureProduceTask请求参数为:" + jsonObject); + String producetask_code = (String) jsonObject.get("producetask_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("类型不能为空!"); } - // 任务处理类 - try { - Class clz = Class.forName(processing_class); - AbstractAcsTask bean = (AbstractAcsTask) SpringContextHolder.getBean(clz); - bean.updateTaskStatus(row, status); - } catch (Exception e) { - e.printStackTrace(); - message = e.getMessage(); - log.info("任务状态更新失败:{}", message); - - JSONObject json = new JSONObject(); - json.put("task_id", task_id); - json.put("message", message); - errArr.add(json); + WQLObject taskTable = WQLObject.getWQLObject("PDM_MG_produceTask"); + JSONObject taskObj = + taskTable.query("producetask_code='" + producetask_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("未找到工单号为'" + producetask_code + "'的工单信息!"); } - } + // 1为确认 + // 2为完成 + if (StrUtil.equals(type, "1")) { + if (StrUtil.isEmpty(producetask_code)) { + throw new BadRequestException("工单号不能为空!"); + } + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备点位不能为空!"); + } + if (StrUtil.isEmpty(material_code)) { + throw new BadRequestException("物料编码不能为空!"); + } + // 根据设备去找设备id + String device_id = ""; + if (StrUtil.equals("FJJXS1", device_code) + || StrUtil.equals("FJJXS2", device_code) + || StrUtil.equals("FJJXS3", device_code)) { + device_id = + WQLObject.getWQLObject("pdm_base_device") + .query("device_code ='" + device_code + "'") + .uniqueResult(0) + .getString("device_id"); + } else { + device_id = + WQLObject.getWQLObject("sch_base_point") + .query("point_code='" + device_code + "'") + .uniqueResult(0) + .getString("device_id"); + } + // 根据物料code 去找物料id + JSONObject materiObj = + WQLObject.getWQLObject("MD_ME_Material") + .query("material_code='" + material_code + "'") + .uniqueResult(0); + if (!StrUtil.equals(device_id, taskObj.getString("device_id"))) { + throw new BadRequestException("设备标识不一样!"); + } + if (!StrUtil.equals(materiObj.getString("material_id"), taskObj.getString("material_id"))) { + throw new BadRequestException("物料标识不一样!"); + } + taskObj.put("producetask_status", "04"); - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); - result.put("errArr", errArr); - return result; - } - } - - @Override - public Map CribbingInfoByCode(String material_code) { - log.debug("ACS的CribbingInfoByCode请求参数为:" + material_code); - if (StrUtil.isEmpty(material_code)) { - throw new BadRequestException("物料条码不能为空!"); - } - JSONObject returnjo = - WQLObject.getWQLObject("MD_ME_CribbingInfo") - .query("material_code='" + material_code + "'") - .uniqueResult(0); - if (ObjectUtil.isEmpty(returnjo)) { - throw new BadRequestException("未找到物料编码为'" + material_code + "'的垛形参数信息!"); - } - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", returnjo); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map receiveAgvStatus(JSONArray arr) { - log.debug("ACS的receiveAgvStatus请求参数为:" + arr); - WQLObject deviceStatus_table = WQLObject.getWQLObject("st_buss_deviceStatus"); - for (int i = 0; i < arr.size(); i++) { - JSONObject jo = arr.getJSONObject(i); - String agv_no = jo.getString("device_code"); - String status = jo.getString("status"); - String device_status = ""; - // 1-搬运中 2-充电 3-等待 4-故障 5-停用 - if (StrUtil.equals(status, "EXECUTING")) { - device_status = "1"; - } - if (StrUtil.equals(status, "CHARGING")) { - device_status = "2"; - } - if (StrUtil.equals(status, "IDLE")) { - device_status = "3"; - } - if (StrUtil.equals(status, "ERROR")) { - device_status = "4"; - } - if (StrUtil.equals(status, "UNKNOWN") || StrUtil.equals("UNAVAILABLE", status)) { - device_status = "5"; - } - JSONObject statsObj = - deviceStatus_table - .query("device_type ='1' and device_code ='" + agv_no + "'") - .uniqueResult(0); - statsObj.put("device_status", device_status); - statsObj.put("update_time", DateUtil.now()); - deviceStatus_table.update(statsObj); + if (StrUtil.equals("FJJXS1", device_code) + || StrUtil.equals("FJJXS2", device_code) + || StrUtil.equals("FJJXS3", device_code)) { + // 调用mes接口 + HashMap map = new HashMap(); + map.put("producetask_code", producetask_code); + WmsToJnServiceImpl wmsToJnServiceImpl = new WmsToJnServiceImpl(); + wmsToJnServiceImpl.feedBackPackWordShop(map); + } + } + // 排产工单完成! + if (StrUtil.equals("2", type)) { + taskObj.put("producetask_status", "05"); + taskObj.put("real_qty", qty); + } + taskTable.update(taskObj); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + return result; } - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); - return result; - } - - @Override - public Map queryCribbingInfo(Map jsonObject) { - log.debug("ACS的queryCribbingInfo请求参数为:" + jsonObject); - String device_code = (String) jsonObject.get("device_code"); - JSONObject task = - WQLObject.getWQLObject("sch_base_task") - .query( - "is_delete = '0' AND task_status <> '07' AND next_point_code = '" - + device_code - + "'") - .uniqueResult(0); - if (ObjectUtil.isNotEmpty(task)) { - throw new BadRequestException("当前点位有空托任务未完成!"); - } - WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); - // JSONObject produceInfoByCode = this.getProduceInfoByCode(device_code); - // 根据点位获取排产单 - // String material_id = produceInfoByCode.getString("material_id"); - String vehicle_code = - pointTable - .query("point_code = '" + device_code + "'") - .uniqueResult(0) - .getString("vehicle_code"); - WQLObject group_table = WQLObject.getWQLObject("st_buss_vehiclegroup"); - // 从组盘表里面去获取组盘信息 - JSONObject result = group_table.query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(result)) { - String product_code = - WQLObject.getWQLObject("md_me_cribbinginfo") - .query("material_id = " + result.getString("material_id")) - .uniqueResult(0) - .getString("product_code"); - result.put("product_code", product_code); - } - JSONObject resultJSON = new JSONObject(); - resultJSON.put("content", result); - resultJSON.put("status", HttpStatus.OK.value()); - resultJSON.put("message", "托盘信息反馈成功"); - return resultJSON; - } - - @Override - public Map queryPrintInfoByCode(Map jsonObject) { - log.debug("ACS的queryPrintInfoByCode请求参数为:" + jsonObject); - // 找出最近的一个到包装位的任务 - JSONObject taskObj = - WQLObject.getWQLObject("sch_base_task") - .query( - "next_point_code='BZSLW' and is_delete='0' and task_type='07'", "update_time desc") - .uniqueResult(0); - JSONObject result = - WQL.getWO("ACSTOMES_001") - .addParam("flag", "9") - .addParam("task_id", taskObj.getString("task_id")) - .process() - .uniqueResult(0); - return result; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map deleteTask(Map jsonObject) { - log.debug("ACS的deleteTask请求参数为:" + jsonObject); - String task_code = jsonObject.get("task_code").toString(); - WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); - WQLObject group_table = WQLObject.getWQLObject("st_buss_vehiclegroup"); - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - - JSONObject taskObj = - task_table - .query("task_code ='" + task_code + "' and task_status='06'and is_delete='0'") - .uniqueResult(0); - if (ObjectUtil.isEmpty(taskObj)) { - throw new BadRequestException("任务号为'" + task_code + "' 执行中的任务未找到"); - } - String start_point_code = taskObj.getString("start_point_code"); - String next_point_code = taskObj.getString("next_point_code"); - JSONObject startObj = - point_table.query("point_code ='" + start_point_code + "'").uniqueResult(0); - - if (!StrUtil.equals(startObj.getString("area_type"), AreaEnum.YZQY.getCode())) { - throw new BadRequestException("只能取消任务类型为下料任务!"); - } - JSONObject nextObj = point_table.query("point_code ='" + next_point_code + "'").uniqueResult(0); - // 删除任务,解锁终点,删除组盘表 - nextObj.put("lock_type", "00"); - point_table.update(nextObj); - task_table.delete(taskObj); - JSONObject groupObj = - group_table.query("task_id ='" + taskObj.getString("task_id") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(groupObj)) { - throw new BadRequestException("找不到task_id为" + taskObj.getString("task_id") + "的盘信息"); - } - group_table.delete(groupObj); - - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); - return result; - } - - public static JSONObject getProduceInfoByCode(String code) { - // 根据 设备点位去找生产任务信息 - // 1 根据点位去找设备,去找对应的设备信息 - JSONObject pointObj = - WQLObject.getWQLObject("sch_base_point") - .query("point_code ='" + code + "'") - .uniqueResult(0); - String device_id = pointObj.getString("device_id"); - // 2 根据设备去找对应的生产任务 - JSONObject productTaskObj = - WQLObject.getWQLObject("PDM_MG_produceTask") - .query("device_id ='" + device_id + "' and producetask_status in ('03','02','04')") - .uniqueResult(0); - if (ObjectUtil.isEmpty(productTaskObj)) { - throw new BadRequestException("未找到点位为'" + code + "'的生产任务!"); + @Override + @Transactional(rollbackFor = Exception.class) + public void updateVehicleType(Map jsonObject) { + log.debug("ACS的updateVehicleType请求参数为:" + jsonObject); + String vehicle_type = (String) jsonObject.get("vehicle_type"); + if (vehicle_type.equals("1")) { + vehicle_type = "03"; + } else if (vehicle_type.equals("2")) { + vehicle_type = "04"; + } else if (vehicle_type.equals("3")) { + vehicle_type = "05"; + } else if (vehicle_type.equals("4")) { + vehicle_type = "06"; + } else if (vehicle_type.equals("5")) { + vehicle_type = "07"; + } + String device_code = (String) jsonObject.get("device_code"); + String vehicle_code = jsonObject.get("vehicle_code").toString(); + if (StrUtil.isEmpty(vehicle_type)) { + throw new BadRequestException("托盘类型不能为空!"); + } + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备点位不能为空"); + } + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("托盘号不能为空!"); + } + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject pointObj = + pointTable.query("point_code='" + device_code + "' and area_type='05'").uniqueResult(0); + pointObj.put("vehicle_type", vehicle_type); + pointObj.put("vehicle_code", vehicle_code); + pointObj.put("point_status", "01"); + pointTable.update(pointObj); } - return productTaskObj; - } + @Override + public Map receiveTaskStatusAcs(String string) { + { + JSONArray array = JSONArray.parseArray(string); + log.debug("ACS的receiveTaskStatusAcs请求参数为:" + array); + // 返回处理失败的任务 + JSONArray errArr = new JSONArray(); + for (int i = 0; i < array.size(); i++) { + JSONObject row = array.getJSONObject(i); + String task_id = row.getString("ext_task_uuid"); + row.put("task_id", task_id); + 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 message = ""; + String status = ""; + if ("1".equals(acs_task_status)) { + status = TaskStatusEnum.EXECUTING.getCode(); + } + if ("2".equals(acs_task_status)) { + status = TaskStatusEnum.FINISHED.getCode(); + } + if (ObjectUtil.isEmpty(status)) { + status = acs_task_status; + } + // 任务处理类 + try { + Class clz = Class.forName(processing_class); + AbstractAcsTask bean = (AbstractAcsTask) SpringContextHolder.getBean(clz); + bean.updateTaskStatus(row, status); + } catch (Exception e) { + e.printStackTrace(); + message = e.getMessage(); + log.info("任务状态更新失败:{}", message); + + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("message", message); + errArr.add(json); + } + } + + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + result.put("errArr", errArr); + return result; + } + } + + @Override + public Map CribbingInfoByCode(String material_code) { + log.debug("ACS的CribbingInfoByCode请求参数为:" + material_code); + if (StrUtil.isEmpty(material_code)) { + throw new BadRequestException("物料条码不能为空!"); + } + JSONObject returnjo = + WQLObject.getWQLObject("MD_ME_CribbingInfo") + .query("material_code='" + material_code + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(returnjo)) { + throw new BadRequestException("未找到物料编码为'" + material_code + "'的垛形参数信息!"); + } + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", returnjo); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map receiveAgvStatus(JSONArray arr) { + log.debug("ACS的receiveAgvStatus请求参数为:" + arr); + WQLObject deviceStatus_table = WQLObject.getWQLObject("st_buss_deviceStatus"); + for (int i = 0; i < arr.size(); i++) { + JSONObject jo = arr.getJSONObject(i); + String agv_no = jo.getString("device_code"); + String status = jo.getString("status"); + String device_status = ""; + // 1-搬运中 2-充电 3-等待 4-故障 5-停用 + if (StrUtil.equals(status, "EXECUTING")) { + device_status = "1"; + } + if (StrUtil.equals(status, "CHARGING")) { + device_status = "2"; + } + if (StrUtil.equals(status, "IDLE")) { + device_status = "3"; + } + if (StrUtil.equals(status, "ERROR")) { + device_status = "4"; + } + if (StrUtil.equals(status, "UNKNOWN") || StrUtil.equals("UNAVAILABLE", status)) { + device_status = "5"; + } + JSONObject statsObj = + deviceStatus_table + .query("device_type ='1' and device_code ='" + agv_no + "'") + .uniqueResult(0); + statsObj.put("device_status", device_status); + statsObj.put("update_time", DateUtil.now()); + deviceStatus_table.update(statsObj); + } + + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + return result; + } + + @Override + public Map queryCribbingInfo(Map jsonObject) { + log.debug("ACS的queryCribbingInfo请求参数为:" + jsonObject); + String device_code = (String) jsonObject.get("device_code"); + JSONObject task = + WQLObject.getWQLObject("sch_base_task") + .query( + "is_delete = '0' AND task_status <> '07' AND next_point_code = '" + + device_code + + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(task)) { + throw new BadRequestException("当前点位有空托任务未完成!"); + } + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + // JSONObject produceInfoByCode = this.getProduceInfoByCode(device_code); + // 根据点位获取排产单 + // String material_id = produceInfoByCode.getString("material_id"); + String vehicle_code = + pointTable + .query("point_code = '" + device_code + "'") + .uniqueResult(0) + .getString("vehicle_code"); + WQLObject group_table = WQLObject.getWQLObject("st_buss_vehiclegroup"); + // 从组盘表里面去获取组盘信息 + JSONObject result = group_table.query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(result)) { + String product_code = + WQLObject.getWQLObject("md_me_cribbinginfo") + .query("material_id = " + result.getString("material_id")) + .uniqueResult(0) + .getString("product_code"); + result.put("product_code", product_code); + } + JSONObject resultJSON = new JSONObject(); + resultJSON.put("content", result); + resultJSON.put("status", HttpStatus.OK.value()); + resultJSON.put("message", "托盘信息反馈成功"); + return resultJSON; + } + + @Override + public Map queryPrintInfoByCode(Map jsonObject) { + log.debug("ACS的queryPrintInfoByCode请求参数为:" + jsonObject); + // 找出最近的一个到包装位的任务 + JSONObject taskObj = + WQLObject.getWQLObject("sch_base_task") + .query( + "next_point_code='BZSLW' and is_delete='0' and task_type='07'", "update_time desc") + .uniqueResult(0); + JSONObject result = + WQL.getWO("ACSTOMES_001") + .addParam("flag", "9") + .addParam("task_id", taskObj.getString("task_id")) + .process() + .uniqueResult(0); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map deleteTask(Map jsonObject) { + log.debug("ACS的deleteTask请求参数为:" + jsonObject); + String task_code = jsonObject.get("task_code").toString(); + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + WQLObject group_table = WQLObject.getWQLObject("st_buss_vehiclegroup"); + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + JSONObject taskObj = + task_table + .query("task_code ='" + task_code + "' and task_status='06'and is_delete='0'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("任务号为'" + task_code + "' 执行中的任务未找到"); + } + String start_point_code = taskObj.getString("start_point_code"); + String next_point_code = taskObj.getString("next_point_code"); + JSONObject startObj = + point_table.query("point_code ='" + start_point_code + "'").uniqueResult(0); + + if (!StrUtil.equals(startObj.getString("area_type"), AreaEnum.YZQY.getCode())) { + throw new BadRequestException("只能取消任务类型为下料任务!"); + } + JSONObject nextObj = point_table.query("point_code ='" + next_point_code + "'").uniqueResult(0); + // 删除任务,解锁终点,删除组盘表 + nextObj.put("lock_type", "00"); + point_table.update(nextObj); + task_table.delete(taskObj); + JSONObject groupObj = + group_table.query("task_id ='" + taskObj.getString("task_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(groupObj)) { + throw new BadRequestException("找不到task_id为" + taskObj.getString("task_id") + "的盘信息"); + } + group_table.delete(groupObj); + + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + return result; + } + + public static JSONObject getProduceInfoByCode(String code) { + // 根据 设备点位去找生产任务信息 + // 1 根据点位去找设备,去找对应的设备信息 + JSONObject pointObj = + WQLObject.getWQLObject("sch_base_point") + .query("point_code ='" + code + "'") + .uniqueResult(0); + String device_id = pointObj.getString("device_id"); + // 2 根据设备去找对应的生产任务 + JSONObject productTaskObj = + WQLObject.getWQLObject("PDM_MG_produceTask") + .query("device_id ='" + device_id + "' and producetask_status in ('03','02','04')") + .uniqueResult(0); + if (ObjectUtil.isEmpty(productTaskObj)) { + throw new BadRequestException("未找到点位为'" + code + "'的生产任务!"); + } + + return productTaskObj; + } } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/CallEmptyVehicleTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/CallEmptyVehicleTask.java index 88391ac..96a2625 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/CallEmptyVehicleTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/CallEmptyVehicleTask.java @@ -7,9 +7,9 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import org.nl.common.utils.UserInfoUtil; import org.nl.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; -import org.nl.common.utils.UserInfoUtil; import org.nl.utils.SpringContextHolder; import org.nl.wms.WorkProcedureEnum; import org.nl.wms.common.SortingUtil; @@ -24,7 +24,6 @@ import org.nl.wms.sch.service.dto.PointDto; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; @@ -87,6 +86,7 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { endpointObj.put("lock_type", "00"); endpointObj.put("point_status", "01"); endpointObj.put("vehicle_code", vehicle_code); + endpointObj.put("update_time", DateUtil.now()); pointTab.update(endpointObj); JSONObject startPointObj = pointTab @@ -95,13 +95,13 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); + startPointObj.put("update_time", DateUtil.now()); pointTab.update(startPointObj); taskTab.update(jsonTask); } } @Override - @Transactional public void findStartPoint() { String task_status = TaskStatusEnum.SURE_END.getCode(); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/CallMaterialTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/CallMaterialTask.java index 716a75d..2e021c3 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/CallMaterialTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/CallMaterialTask.java @@ -33,432 +33,510 @@ import java.util.HashMap; @Service public class CallMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = CallMaterialTask.class.getName(); - - @Override - public void updateTaskStatus(JSONObject taskObj, String status) { - /** - *改变任务状态 - **/ - String task_id = taskObj.getString("task_id"); - WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); - JSONObject jsonTask = taskTab.query("task_id='" + task_id + "'").uniqueResult(0); - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - //更新任务状态为执行中 - jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); - HashMap map = new HashMap(); - map.put("bill_status", "40"); - map.put("update_optid", UserInfoUtil.getCurrentUserId()); - map.put("update_optname", UserInfoUtil.getNickName()); - map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_workProcedureIOS").update(map, "task_id='" + jsonTask.getString("task_id") + "'"); - - } - - if (TaskStatusEnum.FINISHED.getCode().equals(status)) { - // 更新任务状态为完成 - jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode")); - jsonTask.put("update_time", DateUtil.now()); - jsonTask.put("remark", "任务执行完成"); - ///审核单据 增加库存 改变出入库表的状态 - WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); - JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); - //审核 加库存可和用数量 - StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); - mstObj.put("bill_status", "50"); - mstObj.put("confirm_optid", UserInfoUtil.getCurrentUserId()); - mstObj.put("confirm_optname", UserInfoUtil.getNickName()); - mstObj.put("confirm_time", DateUtil.now()); - mstTab.update(mstObj); - - String iostorinv_id = mstObj.getString("iostorinv_id"); - String next_point_code = mstObj.getString("end_point_code"); - String start_point_code = mstObj.getString("start_point_code"); - JSONObject param = new JSONObject(); - param.put("material_id", mstObj.getString("material_id")); - param.put("bill_id", iostorinv_id); - param.put("qty_unit_id", mstObj.getString("qty_unit_id")); - param.put("pcsn", mstObj.getString("pcsn")); - param.put("change_qty", mstObj.getString("qty")); - param.put("vehicle_code", mstObj.getString("vehicle_code")); - param.put("workprocedure_id", mstObj.getString("ivt_workprocedure_id")); - PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); - PointDto nextPointDto = pointService.findByCode(next_point_code); - if (ObjectUtil.isNull(nextPointDto)) { - throw new BadRequestException("未找到可用点位:" + next_point_code); - } - PointDto startPointDto = pointService.findByCode(start_point_code); - if (ObjectUtil.isNull(startPointDto)) { - throw new BadRequestException("未找到可用点位:" + start_point_code); - } - param.put("struct_id", startPointDto.getPoint_id()); - ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_IVT); - //解锁仓位,托盘信息,回写到点位上去 - String vehicle_code = jsonTask.getString("vehicle_code"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONObject endpointObj = pointTab.query("point_code='" + jsonTask.getString("next_point_code") + "'").uniqueResult(0); - endpointObj.put("lock_type", "00"); - endpointObj.put("point_status", "02"); - endpointObj.put("vehicle_code", vehicle_code); - pointTab.update(endpointObj); - - ////如果终点是分拣区域,则更新木托盘铁托盘记录表 - String next_area = nextPointDto.getArea_type(); - if (StrUtil.equals(next_area, AreaEnum.FJQY.getCode())) { - //如果是下料料位置 托盘则是木托盘 - if (StrUtil.equals(next_point_code, "FJJXSXLW201") || - StrUtil.equals(next_point_code, "FJJXSXLW202") || - StrUtil.equals(next_point_code, "FJJXSXLW301") || - StrUtil.equals(next_point_code, "FJJXSXLW302")) { - JSONObject jo = new JSONObject(); - jo.put("device_code", next_point_code); - jo.put("vehicle_code", vehicle_code); - SortingUtil.record(jo); - } - //如果是上料位置 则需要去找点位记录表上的托盘记录 - else { - String flag = "8"; - if (StrUtil.equals(next_point_code, "FJJXSSLW101") || StrUtil.equals(next_point_code, "FJJXSSLW102")) { - flag = "7"; - } - JSONArray paramArr = WQL.getWO("ACSTOMES_001").addParam("flag", flag).process().getResultJSONArray(0); - for (int i = 0; i < paramArr.size(); i++) { - JSONObject jo = paramArr.getJSONObject(i); - SortingUtil.record(jo); - } - } - } - JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0); - startPointObj.put("lock_type", "00"); - startPointObj.put("point_status", "00"); - startPointObj.put("vehicle_code", ""); - pointTab.update(startPointObj); - taskTab.update(jsonTask); - //2是出窑缓存货架,调用反馈出冷却缓冲区 - //3是木托盘缓存货架,调用反馈半木托出临时库区 - String point_type = startPointObj.getString("point_type"); - JSONObject jo = new JSONObject(); - jo.put("task_id", task_id); - WmsToJnServiceImpl wmsToJnServiceImpl = new WmsToJnServiceImpl(); - if (StrUtil.equals(point_type, AreaEnum.CYHCHJ.getCode())) { - wmsToJnServiceImpl.feedBackOutWait(jo); - } - if (StrUtil.equals(point_type, AreaEnum.BTHCQ.getCode())) { - wmsToJnServiceImpl.feedBackOutPartStock(jo); - } - } + private final String THIS_CLASS = CallMaterialTask.class.getName(); + @Override + public void updateTaskStatus(JSONObject taskObj, String status) { + /** 改变任务状态 */ + String task_id = taskObj.getString("task_id"); + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + JSONObject jsonTask = taskTab.query("task_id='" + task_id + "'").uniqueResult(0); + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + HashMap map = new HashMap(); + map.put("bill_status", "40"); + map.put("update_optid", UserInfoUtil.getCurrentUserId()); + map.put("update_optname", UserInfoUtil.getNickName()); + map.put("update_time", DateUtil.now()); + WQLObject.getWQLObject("ST_IVT_workProcedureIOS") + .update(map, "task_id='" + jsonTask.getString("task_id") + "'"); } - @Override - public void findStartPoint() { - String task_status = TaskStatusEnum.SURE_START.getCode(); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONArray taskArry = taskTab.query("task_status='" + task_status + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0); - for (int i = 0; i < taskArry.size(); i++) { - JSONObject taskObj = taskArry.getJSONObject(i); - String task_id = taskObj.getString("task_id"); - //1 将任务修改为分配 2将终点写入,完成分配,3 加锁点位 - //找一个合适的仓位 - WQLObject ProcedureIOStable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); - JSONObject IosObj = ProcedureIOStable.query("task_id='" + task_id + "' and is_delete ='0'").uniqueResult(0); - if (ObjectUtil.isEmpty(IosObj)) { - throw new BadRequestException("未找到任务号为'" + taskObj.getString("task_code") + "'的入库单据!"); - } - JSONObject param = new JSONObject(); - param.put("material_id", IosObj.getString("material_id")); - param.put("area_type", IosObj.getString("start_area")); - JSONObject inStructObj = StructFindUtil.getOutStruct(param); - if (ObjectUtil.isEmpty(inStructObj)) { - throw new BadRequestException("未找到合适的出库仓位!"); - } - //修改单据状态,将终点填入 - IosObj.put("bill_status", "20"); - IosObj.put("start_point_code", inStructObj.getString("struct_code")); - ProcedureIOStable.update(IosObj); - //终点加锁 - HashMap lock_map = new HashMap(); - lock_map.put("lock_type", "01"); - WQLObject.getWQLObject("sch_base_point").update(lock_map, "point_code = '" + inStructObj.getString("struct_code") + "'"); - //修改任务状态 - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskObj.put("update_optid", UserInfoUtil.getCurrentUserId()); - taskObj.put("update_optname", UserInfoUtil.getNickName()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } + if (TaskStatusEnum.FINISHED.getCode().equals(status)) { + // 更新任务状态为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode")); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("remark", "任务执行完成"); + /// 审核单据 增加库存 改变出入库表的状态 + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + JSONObject mstObj = + mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); + // 审核 加库存可和用数量 + StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); + mstObj.put("bill_status", "50"); + mstObj.put("confirm_optid", UserInfoUtil.getCurrentUserId()); + mstObj.put("confirm_optname", UserInfoUtil.getNickName()); + mstObj.put("confirm_time", DateUtil.now()); + mstTab.update(mstObj); + String iostorinv_id = mstObj.getString("iostorinv_id"); + String next_point_code = mstObj.getString("end_point_code"); + String start_point_code = mstObj.getString("start_point_code"); + JSONObject param = new JSONObject(); + param.put("material_id", mstObj.getString("material_id")); + param.put("bill_id", iostorinv_id); + param.put("qty_unit_id", mstObj.getString("qty_unit_id")); + param.put("pcsn", mstObj.getString("pcsn")); + param.put("change_qty", mstObj.getString("qty")); + param.put("vehicle_code", mstObj.getString("vehicle_code")); + param.put("workprocedure_id", mstObj.getString("ivt_workprocedure_id")); + PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); + PointDto nextPointDto = pointService.findByCode(next_point_code); + if (ObjectUtil.isNull(nextPointDto)) { + throw new BadRequestException("未找到可用点位:" + next_point_code); + } + PointDto startPointDto = pointService.findByCode(start_point_code); + if (ObjectUtil.isNull(startPointDto)) { + throw new BadRequestException("未找到可用点位:" + start_point_code); + } + Long point_id = startPointDto.getPoint_id(); + param.put("struct_id", point_id); + ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_IVT); + // 解锁仓位,托盘信息,回写到点位上去 + String vehicle_code = jsonTask.getString("vehicle_code"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + JSONObject endpointObj = pointTab + .query("point_code='" + jsonTask.getString("next_point_code") + "'") + .uniqueResult(0); + endpointObj.put("lock_type", "00"); + endpointObj.put("point_status", "02"); + endpointObj.put("vehicle_code", vehicle_code); + endpointObj.put("update_time", DateUtil.now()); + pointTab.update(endpointObj); + + //// 如果终点是分拣区域,则更新木托盘铁托盘记录表 + String next_area = nextPointDto.getArea_type(); + if (StrUtil.equals(next_area, AreaEnum.FJQY.getCode())) { + // 如果是下料料位置 托盘则是木托盘 + if (StrUtil.equals(next_point_code, "FJJXSXLW201") + || StrUtil.equals(next_point_code, "FJJXSXLW202") + || StrUtil.equals(next_point_code, "FJJXSXLW301") + || StrUtil.equals(next_point_code, "FJJXSXLW302")) { + JSONObject jo = new JSONObject(); + jo.put("device_code", next_point_code); + jo.put("vehicle_code", vehicle_code); + SortingUtil.record(jo); + } + // 如果是上料位置 则需要去找点位记录表上的托盘记录 + else { + String flag = "8"; + if (StrUtil.equals(next_point_code, "FJJXSSLW101") + || StrUtil.equals(next_point_code, "FJJXSSLW102")) { + flag = "7"; + } + JSONArray paramArr = + WQL.getWO("ACSTOMES_001").addParam("flag", flag).process().getResultJSONArray(0); + for (int i = 0; i < paramArr.size(); i++) { + JSONObject jo = paramArr.getJSONObject(i); + SortingUtil.record(jo); + } + } + } + JSONObject startPointObj = + pointTab + .query("point_code='" + jsonTask.getString("start_point_code") + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(startPointObj)) { + // 仓位库存表【ST_IVT_StructIvt】 + WQLObject ivtTab = WQLObject.getWQLObject("ST_IVT_StructIvt"); + startPointObj.put("lock_type", "00"); + startPointObj.put("point_status", "00"); + startPointObj.put("vehicle_code", ""); + startPointObj.put("update_time", DateUtil.now()); + pointTab.update(startPointObj); + taskTab.update(jsonTask); + ivtTab.delete("struct_id = '" + point_id + "'"); + } + + // 2是出窑缓存货架,调用反馈出冷却缓冲区 + // 3是木托盘缓存货架,调用反馈半木托出临时库区 + String point_type = startPointObj.getString("point_type"); + JSONObject jo = new JSONObject(); + jo.put("task_id", task_id); + WmsToJnServiceImpl wmsToJnServiceImpl = new WmsToJnServiceImpl(); + if (StrUtil.equals(point_type, AreaEnum.CYHCHJ.getCode())) { + wmsToJnServiceImpl.feedBackOutWait(jo); + } + if (StrUtil.equals(point_type, AreaEnum.BTHCQ.getCode())) { + wmsToJnServiceImpl.feedBackOutPartStock(jo); + } } + } - @Override - public void findNextPoint() { - + @Override + public void findStartPoint() { + String task_status = TaskStatusEnum.SURE_START.getCode(); + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONArray taskArry = + taskTab + .query( + "task_status='" + + task_status + + "' AND handle_class='" + + THIS_CLASS + + "' AND is_delete='0' ") + .getResultJSONArray(0); + for (int i = 0; i < taskArry.size(); i++) { + JSONObject taskObj = taskArry.getJSONObject(i); + String task_id = taskObj.getString("task_id"); + // 1 将任务修改为分配 2将终点写入,完成分配,3 加锁点位 + // 找一个合适的仓位 + WQLObject ProcedureIOStable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + JSONObject IosObj = + ProcedureIOStable.query("task_id='" + task_id + "' and is_delete ='0'").uniqueResult(0); + if (ObjectUtil.isEmpty(IosObj)) { + throw new BadRequestException("未找到任务号为'" + taskObj.getString("task_code") + "'的入库单据!"); + } + JSONObject param = new JSONObject(); + param.put("material_id", IosObj.getString("material_id")); + param.put("area_type", IosObj.getString("start_area")); + JSONObject inStructObj = StructFindUtil.getOutStruct(param); + if (ObjectUtil.isEmpty(inStructObj)) { + throw new BadRequestException("未找到合适的出库仓位!"); + } + // 修改单据状态,将终点填入 + IosObj.put("bill_status", "20"); + IosObj.put("start_point_code", inStructObj.getString("struct_code")); + ProcedureIOStable.update(IosObj); + // 终点加锁 + HashMap lock_map = new HashMap(); + lock_map.put("lock_type", "01"); + WQLObject.getWQLObject("sch_base_point") + .update(lock_map, "point_code = '" + inStructObj.getString("struct_code") + "'"); + // 修改任务状态 + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("update_optid", UserInfoUtil.getCurrentUserId()); + taskObj.put("update_optname", UserInfoUtil.getNickName()); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); } + } - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - //请求参数 终点不能为空 物料,数量,客户,批次,创建方式,托盘,是否满托不能为空! 起点点位不为空时,单据编号不能为空! - String start_point_code = form.getString("start_point_code"); - String next_point_code = form.getString("next_point_code"); - String vehicle_code = form.getString("vehicle_code"); - String task_status = TaskStatusEnum.SURE_START.getCode(); - String material_id = form.getString("material_id"); - String create_mode = form.getString("create_mode"); - String pcsn = form.getString("pcsn"); - String is_full = form.getString("is_full"); - String workprocedure_id = form.getString("workprocedure_id"); - String group_device = form.getString("group_device"); - WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); - String iostorinv_id = form.getString("iostorinv_id"); - if (StrUtil.isEmpty(next_point_code)) { - throw new BadRequestException("终点不能为空!"); - } - if (StrUtil.isEmpty(material_id)) { - throw new BadRequestException("物料标识不能为空!"); - } - if (StrUtil.isEmpty(create_mode)) { - throw new BadRequestException("创建方式不能为空!"); - } - if (StrUtil.isEmpty(is_full)) { - throw new BadRequestException("是否满托不能为空!"); - } - //判断终点有没有未完成的指令 - JSONObject beforTaskObj = taskTable. - query("is_delete='0' and next_point_code='" + next_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'") + @Override + public void findNextPoint() {} + + @Override + public String createTask(JSONObject form) { + // 请求参数 终点不能为空 物料,数量,客户,批次,创建方式,托盘,是否满托不能为空! 起点点位不为空时,单据编号不能为空! + String start_point_code = form.getString("start_point_code"); + String next_point_code = form.getString("next_point_code"); + String vehicle_code = form.getString("vehicle_code"); + String task_status = TaskStatusEnum.SURE_START.getCode(); + String material_id = form.getString("material_id"); + String create_mode = form.getString("create_mode"); + String pcsn = form.getString("pcsn"); + String is_full = form.getString("is_full"); + String workprocedure_id = form.getString("workprocedure_id"); + String group_device = form.getString("group_device"); + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + String iostorinv_id = form.getString("iostorinv_id"); + if (StrUtil.isEmpty(next_point_code)) { + throw new BadRequestException("终点不能为空!"); + } + if (StrUtil.isEmpty(material_id)) { + throw new BadRequestException("物料标识不能为空!"); + } + if (StrUtil.isEmpty(create_mode)) { + throw new BadRequestException("创建方式不能为空!"); + } + if (StrUtil.isEmpty(is_full)) { + throw new BadRequestException("是否满托不能为空!"); + } + // 判断终点有没有未完成的指令 + JSONObject beforTaskObj = + taskTable + .query( + "is_delete='0' and next_point_code='" + + next_point_code + + "' and task_status <>'" + + TaskStatusEnum.FINISHED.getCode() + + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) { + throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String start_area = ""; + String startArea_type = ""; + String bill_type = ""; + String qty = ""; + String qty_unit_id = ""; + String ivt_workprocedure_id = ""; + WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + if (StrUtil.isNotEmpty(start_point_code)) { + if (StrUtil.isEmpty(iostorinv_id)) { + throw new BadRequestException("入库单据号不能为空!"); + } + JSONObject IosObj = iosTable.query("iostorinv_id='" + iostorinv_id + "'").uniqueResult(0); + IosObj.put("bill_status", "20"); + iosTable.update(IosObj); + PointDto StartPoint = pointService.findByCode(start_point_code); + JSONObject ivtObj = + WQLObject.getWQLObject("ST_IVT_StructIvt") + .query("struct_id='" + StartPoint.getPoint_id() + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(ivtObj)) { + throw new BadRequestException("仓位为'" + StartPoint.getPoint_code() + "'的库存信息不存在!"); + } + qty = ivtObj.getString("canuse_qty"); + qty_unit_id = ivtObj.getString("qty_unit_id"); + ivt_workprocedure_id = ivtObj.getString("ivt_workprocedure_id"); + } + PointDto nextPoint = pointService.findByCode(next_point_code); + // 如果没给起点,根据终点去找工序,找一个合适的仓位 并且生成入库单,并且锁定点位 + if (StrUtil.isEmpty(start_point_code)) { + if (StrUtil.isEmpty(workprocedure_id)) { + JSONObject workInfo = + WQL.getWO("QSTRUCT_RULE") + .addParam("flag", "1") + .addParam("code", next_point_code) + .process() .uniqueResult(0); - if (ObjectUtil.isNotEmpty(beforTaskObj)) { - throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + workprocedure_id = workInfo.getString("workprocedure_id"); + WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); + switch (workProcedureEnum) { + // 烧制工序 + case SZGX: + startArea_type = AreaEnum.RYHCHJ.getCode(); + bill_type = BillTypeEnum.SZCK.getCode(); + ivt_workprocedure_id = WorkProcedureEnum.YZGX.getId(); + break; + // 分拣工序 + case FJGX: + startArea_type = AreaEnum.CYHCHJ.getCode(); + bill_type = BillTypeEnum.FJCK.getCode(); + ivt_workprocedure_id = WorkProcedureEnum.SZGX.getId(); + break; + // 包装工序 + case BZGX: + startArea_type = AreaEnum.BTHCQ.getCode(); + bill_type = BillTypeEnum.FJCK.getCode(); + ivt_workprocedure_id = WorkProcedureEnum.FJGX.getId(); + break; } - PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); - String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - String start_area = ""; - String startArea_type = ""; - String bill_type = ""; - String qty = ""; - String qty_unit_id = ""; - String ivt_workprocedure_id = ""; - WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); - if (StrUtil.isNotEmpty(start_point_code)) { - if (StrUtil.isEmpty(iostorinv_id)) { - throw new BadRequestException("入库单据号不能为空!"); - } - JSONObject IosObj = iosTable.query("iostorinv_id='" + iostorinv_id + "'").uniqueResult(0); - IosObj.put("bill_status", "20"); - iosTable.update(IosObj); - PointDto StartPoint = pointService.findByCode(start_point_code); - JSONObject ivtObj = WQLObject.getWQLObject("ST_IVT_StructIvt").query("struct_id='" + StartPoint.getPoint_id() + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(ivtObj)) { - throw new BadRequestException("仓位为'" + StartPoint.getPoint_code() + "'的库存信息不存在!"); - } - qty = ivtObj.getString("canuse_qty"); - qty_unit_id = ivtObj.getString("qty_unit_id"); - ivt_workprocedure_id = ivtObj.getString("ivt_workprocedure_id"); - + } else { + // (机械手呼叫空托盘,需要呼叫半满托盘)如果请求有工序,假如是压制工序,则库存工序是压制,起点是出窑货架 + WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); + switch (workProcedureEnum) { + // 烧制工序 + case SZGX: + startArea_type = AreaEnum.RYHCHJ.getCode(); + bill_type = BillTypeEnum.SZCK.getCode(); + ivt_workprocedure_id = WorkProcedureEnum.YZGX.getId(); + break; + // 分拣工序 + case FJGX: + startArea_type = AreaEnum.CYHCHJ.getCode(); + bill_type = BillTypeEnum.FJCK.getCode(); + ivt_workprocedure_id = WorkProcedureEnum.SZGX.getId(); + break; + case BZGX: + startArea_type = AreaEnum.BTHCQ.getCode(); + bill_type = BillTypeEnum.FJCK.getCode(); + ivt_workprocedure_id = WorkProcedureEnum.FJGX.getId(); + break; } - PointDto nextPoint = pointService.findByCode(next_point_code); - //如果没给起点,根据终点去找工序,找一个合适的仓位 并且生成入库单,并且锁定点位 - if (StrUtil.isEmpty(start_point_code)) { - if (StrUtil.isEmpty(workprocedure_id)) { - JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", next_point_code) - .process().uniqueResult(0); - workprocedure_id = workInfo.getString("workprocedure_id"); - WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); - switch (workProcedureEnum) { - //烧制工序 - case SZGX: - startArea_type = AreaEnum.RYHCHJ.getCode(); - bill_type = BillTypeEnum.SZCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.YZGX.getId(); - break; - //分拣工序 - case FJGX: - startArea_type = AreaEnum.CYHCHJ.getCode(); - bill_type = BillTypeEnum.FJCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.SZGX.getId(); - break; - //包装工序 - case BZGX: - startArea_type = AreaEnum.BTHCQ.getCode(); - bill_type = BillTypeEnum.FJCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.FJGX.getId(); - break; - } - } else { - // (机械手呼叫空托盘,需要呼叫半满托盘)如果请求有工序,假如是压制工序,则库存工序是压制,起点是出窑货架 - WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); - switch (workProcedureEnum) { - //烧制工序 - case SZGX: - startArea_type = AreaEnum.RYHCHJ.getCode(); - bill_type = BillTypeEnum.SZCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.YZGX.getId(); - break; - //分拣工序 - case FJGX: - startArea_type = AreaEnum.CYHCHJ.getCode(); - bill_type = BillTypeEnum.FJCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.SZGX.getId(); - break; - case BZGX: - startArea_type = AreaEnum.BTHCQ.getCode(); - bill_type = BillTypeEnum.FJCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.FJGX.getId(); - break; - } - } - JSONObject param = new JSONObject(); - param.put("material_id", material_id); - param.put("area_type", startArea_type); - param.put("workprocedure_id", ivt_workprocedure_id); - param.put("is_full", is_full); - param.put("group_device", group_device); - JSONObject outStructObj = StructFindUtil.getOutStruct(param); - if (ObjectUtil.isEmpty(outStructObj) && !StrUtil.equals(ivt_workprocedure_id, WorkProcedureEnum.YZGX.getId())) { - //假如没有货,且下料位两个都为空,并且没有执行中的任务 下发acs动作信号 - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - WmsToAcsServiceImpl wmsToAcsService = new WmsToAcsServiceImpl(); - //更新分拣机械手 上下料位置的点位状态 - JSONArray parr = WQL.getWO("ACSTOMES_001").addParam("area_type", AreaEnum.FJQY.getCode()).addParam("flag", "4").process().getResultJSONArray(0); - //JSONArray parr = point_table.query("area_type ='27'").getResultJSONArray(0); - PointUpdateUtil.updatePoint(parr); - JSONObject nextpointObj = point_table.query("point_code ='" + next_point_code + "'").uniqueResult(0); - if (StrUtil.equals(nextpointObj.getString("area_type"), "27")) { - //找拆垛位置的对应的另外一个点位 - String other_point_code = point_table.query("point_code<>'" + next_point_code + "' " + - "and device_id='" + nextpointObj.getString("device_id") + "' and device_point_type='02' ").uniqueResult(0).getString("point_code"); - String point_status01 = point_table.query("point_code ='" + next_point_code + "'").uniqueResult(0).getString("point_status"); - String point_status02 = point_table.query("point_code ='" + other_point_code + "'").uniqueResult(0).getString("point_status"); - //没有执行中的任务 - WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); - JSONObject task1 = task_table.query("next_point_code ='" + next_point_code + "' and is_delete='0' and task_status<>'07'").uniqueResult(0); - JSONObject task2 = task_table.query("next_point_code ='" + other_point_code + "' and is_delete='0' and task_status<>'07'").uniqueResult(0); - if (StrUtil.equals(point_status01, "00") && StrUtil.equals(point_status02, "00") && ObjectUtil.isEmpty(task1) && ObjectUtil.isEmpty(task2)) { - JSONObject jo = new JSONObject(); - JSONArray arr = new JSONArray(); -// jo.put("device_code", "FJJXS1"); -// jo.put("code", "to_feedback"); -// jo.put("value", "10"); -// arr.add(jo); -// wmsToAcsService.action(arr); - } - } - if (StrUtil.equals(next_point_code, "FJJXSSLW301") || StrUtil.equals(next_point_code, "FJJXSSLW301")) { - String point_status01 = point_table.query("point_code ='FJJXSSLW301'").uniqueResult(0).getString("point_status"); - String point_status02 = point_table.query("point_code ='FJJXSSLW301'").uniqueResult(0).getString("point_status"); - if (StrUtil.equals(point_status01, "00") && StrUtil.equals(point_status02, "00")) { - JSONObject jo = new JSONObject(); - JSONArray arr = new JSONArray(); -// jo.put("device_code", "FJJXS3"); -// jo.put("code", "to_feedback"); -// jo.put("value", "10"); -// arr.add(jo); -// wmsToAcsService.action(arr); - } - - } - throw new BadRequestException("未找到合适的出库仓位!"); - } - qty = outStructObj.getString("canuse_qty"); - qty_unit_id = outStructObj.getString("qty_unit_id"); - - start_point_code = outStructObj.getString("struct_code"); - vehicle_code = outStructObj.getString("vehicle_code"); - //创建出库单据 - JSONObject iosObj = new JSONObject(); - iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - iosObj.put("iostorinv_id", iostorinv_id); - iosObj.put("bill_code", CodeUtil.getNewCode("OUT_STORE_CODE")); - iosObj.put("io_type", "1"); - iosObj.put("bill_type", bill_type); - iosObj.put("workprocedure_id", workprocedure_id); - iosObj.put("ivt_workprocedure_id", ivt_workprocedure_id); - iosObj.put("material_id", material_id); - iosObj.put("vehicle_code", outStructObj.getString("vehicle_code")); - iosObj.put("producetask_id", outStructObj.getString("producetask_id")); - iosObj.put("qty", qty); - iosObj.put("qty_unit_id", qty_unit_id); - //默认是分配状态 - iosObj.put("bill_status", "20"); - iosObj.put("start_point_code", start_point_code); - iosObj.put("end_point_code", next_point_code); - iosObj.put("start_area", startArea_type); - iosObj.put("end_area", nextPoint.getArea_type()); - iosObj.put("create_mode", create_mode); - iosObj.put("task_id", task_id); - iosObj.put("pcsn", pcsn); - iosObj.put("create_id", "1"); - iosObj.put("create_name", "管理员"); - iosObj.put("create_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_workProcedureIOS").insert(iosObj); - //将组盘里面的task_id改为当前的任务 - WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); - JSONObject groupObj = groupTable.query("vehicle_code='" + vehicle_code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(groupObj)) { - groupObj.put("task_id", task_id); - groupTable.update(groupObj); - } - + } + JSONObject param = new JSONObject(); + param.put("material_id", material_id); + param.put("area_type", startArea_type); + param.put("workprocedure_id", ivt_workprocedure_id); + param.put("is_full", is_full); + param.put("group_device", group_device); + JSONObject outStructObj = StructFindUtil.getOutStruct(param); + if (ObjectUtil.isEmpty(outStructObj) + && !StrUtil.equals(ivt_workprocedure_id, WorkProcedureEnum.YZGX.getId())) { + // 假如没有货,且下料位两个都为空,并且没有执行中的任务 下发acs动作信号 + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + WmsToAcsServiceImpl wmsToAcsService = new WmsToAcsServiceImpl(); + // 更新分拣机械手 上下料位置的点位状态 + JSONArray parr = + WQL.getWO("ACSTOMES_001") + .addParam("area_type", AreaEnum.FJQY.getCode()) + .addParam("flag", "4") + .process() + .getResultJSONArray(0); + // JSONArray parr = point_table.query("area_type ='27'").getResultJSONArray(0); + PointUpdateUtil.updatePoint(parr); + JSONObject nextpointObj = + point_table.query("point_code ='" + next_point_code + "'").uniqueResult(0); + if (StrUtil.equals(nextpointObj.getString("area_type"), "27")) { + // 找拆垛位置的对应的另外一个点位 + String other_point_code = + point_table + .query( + "point_code<>'" + + next_point_code + + "' " + + "and device_id='" + + nextpointObj.getString("device_id") + + "' and device_point_type='02' ") + .uniqueResult(0) + .getString("point_code"); + String point_status01 = + point_table + .query("point_code ='" + next_point_code + "'") + .uniqueResult(0) + .getString("point_status"); + String point_status02 = + point_table + .query("point_code ='" + other_point_code + "'") + .uniqueResult(0) + .getString("point_status"); + // 没有执行中的任务 + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONObject task1 = + task_table + .query( + "next_point_code ='" + + next_point_code + + "' and is_delete='0' and task_status<>'07'") + .uniqueResult(0); + JSONObject task2 = + task_table + .query( + "next_point_code ='" + + other_point_code + + "' and is_delete='0' and task_status<>'07'") + .uniqueResult(0); + if (StrUtil.equals(point_status01, "00") + && StrUtil.equals(point_status02, "00") + && ObjectUtil.isEmpty(task1) + && ObjectUtil.isEmpty(task2)) { + JSONObject jo = new JSONObject(); + JSONArray arr = new JSONArray(); + // jo.put("device_code", "FJJXS1"); + // jo.put("code", "to_feedback"); + // jo.put("value", "10"); + // arr.add(jo); + // wmsToAcsService.action(arr); + } } + if (StrUtil.equals(next_point_code, "FJJXSSLW301") + || StrUtil.equals(next_point_code, "FJJXSSLW301")) { + String point_status01 = + point_table + .query("point_code ='FJJXSSLW301'") + .uniqueResult(0) + .getString("point_status"); + String point_status02 = + point_table + .query("point_code ='FJJXSSLW301'") + .uniqueResult(0) + .getString("point_status"); + if (StrUtil.equals(point_status01, "00") && StrUtil.equals(point_status02, "00")) { + JSONObject jo = new JSONObject(); + JSONArray arr = new JSONArray(); + // jo.put("device_code", "FJJXS3"); + // jo.put("code", "to_feedback"); + // jo.put("value", "10"); + // arr.add(jo); + // wmsToAcsService.action(arr); + } + } + throw new BadRequestException("未找到合适的出库仓位!"); + } + qty = outStructObj.getString("canuse_qty"); + qty_unit_id = outStructObj.getString("qty_unit_id"); - task_status = TaskStatusEnum.START_AND_POINT.getCode(); - - PointDto startPoint = pointService.findByCode(start_point_code); - start_area = nextPoint.getArea_type(); - //起点点加锁 - HashMap lock_map = new HashMap(); - lock_map.put("lock_type", "01"); - WQLObject.getWQLObject("sch_base_point").update(lock_map, "point_code = '" + start_point_code + "'"); - //减少库存可用数量 - StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); - JSONObject param = new JSONObject(); - param.put("material_id", material_id); - param.put("bill_id", iostorinv_id); - param.put("qty_unit_id", qty_unit_id); - param.put("change_qty", qty); - param.put("struct_id", startPoint.getPoint_id()); - param.put("vehicle_code", startPoint.getVehicle_code()); - param.put("workprocedure_id", ivt_workprocedure_id); - - ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_CAN_USE); - JSONObject taskObj = new JSONObject(); - taskObj.put("task_id", task_id); - taskObj.put("task_code", IdUtil.getSnowflake(1, 1).nextId() + ""); - taskObj.put("task_type", "01"); - taskObj.put("acs_task_type", "1"); - taskObj.put("task_status", task_status); - taskObj.put("start_point_code", start_point_code); - taskObj.put("start_area", start_area); - taskObj.put("request_param", form.toJSONString()); - taskObj.put("next_point_code", next_point_code); - taskObj.put("next_area", nextPoint.getArea_type()); - taskObj.put("vehicle_code", vehicle_code); - taskObj.put("handle_class", THIS_CLASS); - taskObj.put("is_auto_issue", "1"); - taskObj.put("create_name", "管理员"); - taskObj.put("create_id", "1"); - taskObj.put("create_time", DateUtil.now()); - taskObj.put("is_delete", "0"); - taskTable.insert(taskObj); - return task_id; + start_point_code = outStructObj.getString("struct_code"); + vehicle_code = outStructObj.getString("vehicle_code"); + // 创建出库单据 + JSONObject iosObj = new JSONObject(); + iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + iosObj.put("iostorinv_id", iostorinv_id); + iosObj.put("bill_code", CodeUtil.getNewCode("OUT_STORE_CODE")); + iosObj.put("io_type", "1"); + iosObj.put("bill_type", bill_type); + iosObj.put("workprocedure_id", workprocedure_id); + iosObj.put("ivt_workprocedure_id", ivt_workprocedure_id); + iosObj.put("material_id", material_id); + iosObj.put("vehicle_code", outStructObj.getString("vehicle_code")); + iosObj.put("producetask_id", outStructObj.getString("producetask_id")); + iosObj.put("qty", qty); + iosObj.put("qty_unit_id", qty_unit_id); + // 默认是分配状态 + iosObj.put("bill_status", "20"); + iosObj.put("start_point_code", start_point_code); + iosObj.put("end_point_code", next_point_code); + iosObj.put("start_area", startArea_type); + iosObj.put("end_area", nextPoint.getArea_type()); + iosObj.put("create_mode", create_mode); + iosObj.put("task_id", task_id); + iosObj.put("pcsn", pcsn); + iosObj.put("create_id", "1"); + iosObj.put("create_name", "管理员"); + iosObj.put("create_time", DateUtil.now()); + WQLObject.getWQLObject("ST_IVT_workProcedureIOS").insert(iosObj); + // 将组盘里面的task_id改为当前的任务 + WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); + JSONObject groupObj = groupTable.query("vehicle_code='" + vehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(groupObj)) { + groupObj.put("task_id", task_id); + groupTable.update(groupObj); + } } - @Override - public void forceFinish(String task_id) { - JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); - this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); - } + task_status = TaskStatusEnum.START_AND_POINT.getCode(); - @Override - public void pullBack(String task_id) { + PointDto startPoint = pointService.findByCode(start_point_code); + start_area = nextPoint.getArea_type(); + // 起点点加锁 + HashMap lock_map = new HashMap(); + lock_map.put("lock_type", "01"); + WQLObject.getWQLObject("sch_base_point") + .update(lock_map, "point_code = '" + start_point_code + "'"); + // 减少库存可用数量 + StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); + JSONObject param = new JSONObject(); + param.put("material_id", material_id); + param.put("bill_id", iostorinv_id); + param.put("qty_unit_id", qty_unit_id); + param.put("change_qty", qty); + param.put("struct_id", startPoint.getPoint_id()); + param.put("vehicle_code", startPoint.getVehicle_code()); + param.put("workprocedure_id", ivt_workprocedure_id); - } + ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_CAN_USE); + JSONObject taskObj = new JSONObject(); + taskObj.put("task_id", task_id); + taskObj.put("task_code", IdUtil.getSnowflake(1, 1).nextId() + ""); + taskObj.put("task_type", "01"); + taskObj.put("acs_task_type", "1"); + taskObj.put("task_status", task_status); + taskObj.put("start_point_code", start_point_code); + taskObj.put("start_area", start_area); + taskObj.put("request_param", form.toJSONString()); + taskObj.put("next_point_code", next_point_code); + taskObj.put("next_area", nextPoint.getArea_type()); + taskObj.put("vehicle_code", vehicle_code); + taskObj.put("handle_class", THIS_CLASS); + taskObj.put("is_auto_issue", "1"); + taskObj.put("create_name", "管理员"); + taskObj.put("create_id", "1"); + taskObj.put("create_time", DateUtil.now()); + taskObj.put("is_delete", "0"); + taskTable.insert(taskObj); + return task_id; + } - @Override - public void cancel(String task_id) { + @Override + public void forceFinish(String task_id) { + JSONObject taskObj = + WQLObject.getWQLObject("SCH_BASE_Task") + .query("task_id = '" + task_id + "'") + .uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } - } + @Override + public void pullBack(String task_id) {} + + @Override + public void cancel(String task_id) {} } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ConveyorTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ConveyorTask.java index 5e33135..398712b 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ConveyorTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ConveyorTask.java @@ -4,16 +4,13 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import org.nl.exception.BadRequestException; -import org.nl.modules.system.util.CodeUtil; import org.nl.common.utils.UserInfoUtil; +import org.nl.exception.BadRequestException; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.AreaEnum; import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.task.TaskTypeEnum; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; /** * @@ -53,7 +50,6 @@ public class ConveyorTask extends AbstractAcsTask { } - @Transactional @Override public void findNextPoint() { } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/FmjToPackIngTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/FmjToPackIngTask.java index 51c6ea8..d230d65 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/FmjToPackIngTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/FmjToPackIngTask.java @@ -7,9 +7,9 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.UserInfoUtil; import org.nl.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; -import org.nl.common.utils.UserInfoUtil; import org.nl.utils.SpringContextHolder; import org.nl.wms.WorkProcedureEnum; import org.nl.wms.ext.acs.service.impl.WmsToJnServiceImpl; @@ -23,7 +23,6 @@ import org.nl.wms.st.ivt.IvtChangeTypeEnum; import org.nl.wms.st.ivt.StoreIvtServiceImpl; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; @@ -68,6 +67,7 @@ public class FmjToPackIngTask extends AbstractAcsTask { startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); + startPointObj.put("update_time", DateUtil.now()); pointTab.update(startPointObj); ///审核单据 增加库存 改变出入库表的状态 WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); @@ -122,7 +122,6 @@ public class FmjToPackIngTask extends AbstractAcsTask { } @Override - @Transactional public String createTask(JSONObject form) { String start_point_code = form.getString("start_point_code"); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/RgvTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/RgvTask.java index 3a09c42..604da81 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/RgvTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/RgvTask.java @@ -5,16 +5,13 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import org.nl.exception.BadRequestException; -import org.nl.modules.system.util.CodeUtil; import org.nl.common.utils.UserInfoUtil; +import org.nl.exception.BadRequestException; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.AreaEnum; import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.task.TaskTypeEnum; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; /** * 入库任务生成 @@ -54,7 +51,6 @@ public class RgvTask extends AbstractAcsTask { } - @Transactional @Override public void findNextPoint() { } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/SendEmptyVehicleTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/SendEmptyVehicleTask.java index a7ac725..54a57b7 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/SendEmptyVehicleTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/SendEmptyVehicleTask.java @@ -10,7 +10,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.utils.UserInfoUtil; import org.nl.exception.BadRequestException; -import org.nl.modules.system.util.CodeUtil; import org.nl.utils.SpringContextHolder; import org.nl.wms.common.PointUpdateUtil; import org.nl.wms.ext.acs.service.impl.WmsToJnServiceImpl; @@ -22,7 +21,6 @@ import org.nl.wms.sch.service.dto.PointDto; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; @@ -63,6 +61,7 @@ public class SendEmptyVehicleTask extends AbstractAcsTask { endpointObj.put("lock_type", "00"); endpointObj.put("point_status", "01"); endpointObj.put("vehicle_code", vehicle_code); + endpointObj.put("update_time", DateUtil.now()); pointTab.update(endpointObj); JSONObject startPointObj = @@ -78,6 +77,7 @@ public class SendEmptyVehicleTask extends AbstractAcsTask { startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); + startPointObj.put("update_time", DateUtil.now()); pointTab.update(startPointObj); taskTab.update(jsonTask); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/SendMaterialTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/SendMaterialTask.java index 8f85b24..6ea2d6e 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/SendMaterialTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/SendMaterialTask.java @@ -112,6 +112,7 @@ public class SendMaterialTask extends AbstractAcsTask { endpointObj.put("lock_type", "00"); endpointObj.put("point_status", "02"); endpointObj.put("vehicle_code", vehicle_code); + endpointObj.put("update_time", DateUtil.now()); pointTab.update(endpointObj); JSONObject startPointObj = @@ -122,6 +123,7 @@ public class SendMaterialTask extends AbstractAcsTask { startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); + startPointObj.put("update_time", DateUtil.now()); pointTab.update(startPointObj); taskTab.update(jsonTask); @@ -152,14 +154,7 @@ public class SendMaterialTask extends AbstractAcsTask { public void findNextPoint() { String task_status = TaskStatusEnum.SURE_START.getCode(); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONArray taskArry = - taskTab - .query( - "task_status='" - + task_status - + "' AND handle_class='" - + THIS_CLASS - + "' AND is_delete='0' ") + JSONArray taskArry = taskTab.query("task_status='" + task_status + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ") .getResultJSONArray(0); for (int i = 0; i < taskArry.size(); i++) { JSONObject taskObj = taskArry.getJSONObject(i); @@ -200,7 +195,7 @@ public class SendMaterialTask extends AbstractAcsTask { } @Override - // @Transactional(rollbackFor = Exception.class) +// @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { // 请求参数 载具、起点 物料,数量,客户,批次,创建方式 是否满托不能为空! 终点可以不为空时,入库单据编号不能为空 String start_point_code = form.getString("start_point_code"); @@ -231,7 +226,7 @@ public class SendMaterialTask extends AbstractAcsTask { + "'") .uniqueResult(0); if (ObjectUtil.isNotEmpty(beforTaskObj)) { - throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); +// throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); } PointService pointService = SpringContextHolder.getBean(PointService.class); PointDto startPoint = pointService.findByCode(start_point_code); @@ -384,8 +379,7 @@ public class SendMaterialTask extends AbstractAcsTask { .process() .uniqueResult(0); if (StrUtil.equals(WorkProcedureEnum.YZGX.getCode(), workInfo.getString("workprocedure_code")) - || StrUtil.equals( - WorkProcedureEnum.FJGX.getCode(), workInfo.getString("workprocedure_code"))) { + || StrUtil.equals(WorkProcedureEnum.FJGX.getCode(), workInfo.getString("workprocedure_code"))) { WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); JSONObject groupInfo = groupTable.query("group_id='" + group_id + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(groupInfo)) { diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/StructToConveyorTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/StructToConveyorTask.java index b679418..9a512bc 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/StructToConveyorTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/StructToConveyorTask.java @@ -101,6 +101,7 @@ public class StructToConveyorTask extends AbstractAcsTask { startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); + startPointObj.put("update_time", DateUtil.now()); pointTab.update(startPointObj); taskTab.update(jsonTask); } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToConveyorTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToConveyorTask.java index 209c54d..d2b0096 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToConveyorTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToConveyorTask.java @@ -4,32 +4,19 @@ 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.JSONArray; import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.exception.BadRequestException; -import org.nl.modules.system.util.CodeUtil; import org.nl.common.utils.UserInfoUtil; +import org.nl.exception.BadRequestException; import org.nl.utils.SpringContextHolder; -import org.nl.wms.BussConstant; -import org.nl.wms.WorkProcedureEnum; -import org.nl.wms.common.StructFindUtil; import org.nl.wms.ext.acs.service.WmsToJnService; import org.nl.wms.ext.acs.service.impl.WmsToJnServiceImpl; import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.AreaEnum; -import org.nl.wms.sch.manage.BillTypeEnum; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.dto.PointDto; -import org.nl.wms.sch.service.impl.PointServiceImpl; -import org.nl.wms.st.ivt.IvtChangeTypeEnum; -import org.nl.wms.st.ivt.StoreIvtServiceImpl; -import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; @@ -37,9 +24,6 @@ import java.util.HashMap; @Slf4j public class ToConveyorTask extends AbstractAcsTask { private final String THIS_CLASS = ToConveyorTask.class.getName(); - - - @Override public void updateTaskStatus(JSONObject taskObj, String status) { /** @@ -91,7 +75,6 @@ public class ToConveyorTask extends AbstractAcsTask { } @Override - @Transactional public String createTask(JSONObject form) { //请求参数 载具、起点 物料,数量,客户,批次,创建方式 是否满托不能为空! 终点可以不为空时,入库单据编号不能为空 String vehicle_code = form.getString("vehicle_code"); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java index f3e814c..5a8e059 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java @@ -4,15 +4,12 @@ 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.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.exception.BadRequestException; -import org.nl.modules.system.util.CodeUtil; import org.nl.common.utils.UserInfoUtil; +import org.nl.exception.BadRequestException; import org.nl.utils.SpringContextHolder; -import org.nl.wms.common.StructFindUtil; import org.nl.wms.ext.acs.service.impl.WmsToJnServiceImpl; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -20,7 +17,6 @@ import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.dto.PointDto; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; @@ -31,7 +27,6 @@ public class ToPackIngTask extends AbstractAcsTask { private final String THIS_CLASS = ToPackIngTask.class.getName(); @Override - @Transactional public void updateTaskStatus(JSONObject taskObj, String status) { /** 改变任务状态 */ String task_id = taskObj.getString("task_id"); @@ -73,6 +68,7 @@ public class ToPackIngTask extends AbstractAcsTask { startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); + startPointObj.put("update_time", DateUtil.now()); pointTab.update(startPointObj); } // 调用mes接口 diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoOutStructTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoOutStructTask.java index 1e47f32..7624f13 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoOutStructTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoOutStructTask.java @@ -10,7 +10,6 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.wms.WorkProcedureEnum; import org.nl.wms.common.PointUpdateUtil; -import org.nl.wms.common.StructFindUtil; import org.nl.wms.sch.manage.buss.CallMaterialTask; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; @@ -33,7 +32,6 @@ public class AutoOutStructTask { void doExecute() { log.info("定时任务AutoOutStructTask开始执行:"); - WQLObject param_Table = WQLObject.getWQLObject("sys_param"); //达到可以出库的数量 //1.首先更新所有输送线的点位状态 JSONArray pointarr = WQL.getWO("ACSTOMES_001").addParam("area_type", "07").addParam("flag", "4").process().getResultJSONArray(0); @@ -42,39 +40,14 @@ public class AutoOutStructTask { // 查询空余的入窑输送线 JSONArray arr = WQL.getWO("QSTRUCT_RULE").addParam("flag", "13") .process().getResultJSONArray(0); - /*String material_id = ""; - String vehicle_code = ""; - String point_code = ""; - for (int i = 0; i < arr.size(); i++) { - JSONObject jo = arr.getJSONObject(i); - String material_type = jo.getString("material_type"); - String material_code = jo.getString("material_code"); - if (StrUtil.equals(material_code, "0")) { - material_code = ""; - } - JSONObject outObj = WQL.getWO("QSTRUCT_RULE").addParam("flag", "14") - .addParam("material_type", material_type) - .process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(outObj)) { - material_id = outObj.getString("material_id"); - vehicle_code = outObj.getString("vehicle_code"); - point_code = jo.getString("point_code"); - break; - } - } - if (StrUtil.isEmpty(material_id)) { - return; - }*/ // 遍历输送线,给每一个输送线创建叫料任务 CallMaterialTask callMaterialTask = new CallMaterialTask(); for (Object o : arr) { JSONObject line = (JSONObject) o; - JSONObject param = new JSONObject(); param.put("flag", "9"); param.put("area_type", "01"); -// param.put("if_full", "1"); param.put("material_type", line.getString("material_type")); String lineMaterialCode = line.getString("material_code"); if (StrUtil.isNotEmpty(lineMaterialCode) && !StrUtil.equals(lineMaterialCode, "0")) { @@ -87,7 +60,6 @@ public class AutoOutStructTask { taskObj.put("vehicle_code", structObj.get("vehicle_code")); taskObj.put("material_id", structObj.get("material_id")); taskObj.put("create_mode", "02"); -// taskObj.put("is_full", "1"); taskObj.put("is_full", structObj.get("is_full")); taskObj.put("workprocedure_id", WorkProcedureEnum.SZGX.getId()); callMaterialTask.createTask(taskObj); diff --git a/wms/hd/nladmin-system/src/main/resources/logback-spring.xml b/wms/hd/nladmin-system/src/main/resources/logback-spring.xml index c4506c9..fcd64c2 100644 --- a/wms/hd/nladmin-system/src/main/resources/logback-spring.xml +++ b/wms/hd/nladmin-system/src/main/resources/logback-spring.xml @@ -63,7 +63,7 @@ https://juejin.cn/post/6844903775631572999 - +