diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/start/Init.java b/wms/hd/nladmin-system/src/main/java/org/nl/start/Init.java index 884a453..d7cf186 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/start/Init.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/start/Init.java @@ -1,5 +1,7 @@ package org.nl.start; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.quartz.domain.QuartzJob; @@ -7,7 +9,9 @@ import org.nl.modules.quartz.repository.QuartzJobRepository; import org.nl.modules.quartz.utils.QuartzManage; import org.nl.start.auto.initial.ApplicationAutoInitialExecuter; import org.nl.start.auto.initial.WebAutoInitialExecuter; +import org.nl.wms.common.KilnUtil; import org.nl.wql.WQLCore; +import org.nl.wql.core.bean.WQLObject; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @@ -39,6 +43,13 @@ public class Init implements ApplicationRunner { initQuartz(); isStart = true; System.out.println("系统启动成功!"); + //将窑设备的信息导入内存中 + /* JSONArray kilnarr = WQLObject.getWQLObject("pdm_bi_kilnrecord").query("out_time<>''", "in_time ").getResultJSONArray(0); + for (int i = 0; i KilnQueue = new ArrayBlockingQueue<>(10); + public static Queue KilnQueue = new ArrayBlockingQueue<>(10); //入窑扫码 public static void inKiln(String vehicle_code) { KilnQueue.offer(vehicle_code); @@ -42,7 +42,7 @@ public class KilnUtil { KilnQueue.offer(vehicle_code); //更新窑设备记录表 WQLObject recordTable = WQLObject.getWQLObject("pdm_bi_kilnrecord"); - JSONObject vehicleObj = recordTable.query("vehicle_code='" + vehicle_code + " and out_time ='''").uniqueResult(0); + JSONObject vehicleObj = recordTable.query("vehicle_code='"+vehicle_code+"'and out_time=''").uniqueResult(0); if (ObjectUtil.isEmpty(vehicleObj)) { throw new BadRequestException("未找到信息"); } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/PointUpdateUtil.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/PointUpdateUtil.java index 291c8ea..c4c3224 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/PointUpdateUtil.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/PointUpdateUtil.java @@ -12,20 +12,25 @@ public class PointUpdateUtil { public static void updatePoint(JSONArray arr) { WmsToAcsServiceImpl wmsToAcsServiceImpl = new WmsToAcsServiceImpl(); - //JSONObject joo = wmsToAcsServiceImpl.queryPointStatus(arr); - //JSONArray pointarr = joo.getJSONArray("arr"); + JSONObject joo = wmsToAcsServiceImpl.queryPointStatus(arr); + JSONArray pointarr = joo.getJSONArray("data"); - JSONArray pointarr =new JSONArray(); + //JSONArray pointarr =new JSONArray(); WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); for (int i = 0; i < pointarr.size(); i++) { JSONObject pointjo = pointarr.getJSONObject(i); - String point_status = "00"; - String vehicle_code = pointjo.getString("vehicle_code"); - if (StrUtil.isNotEmpty(vehicle_code)) { - point_status = "02"; - } + //String point_status = "00"; + String point_status = "0"+pointjo.getString("move"); + //String vehicle_code = pointjo.getString("vehicle_code"); + String vehicle_code = pointjo.getString("barcode"); + String device_code = pointjo.getString("device_code"); + String pallet_type =pointjo.getString("pallet_type"); pointjo.put("point_status", point_status); - pointTable.update(pointjo); + JSONObject pointObj = pointTable.query("point_code ='" + device_code + "'").uniqueResult(0); + pointObj.put("vehicle_code",vehicle_code); + pointObj.put("point_status",point_status); + pointObj.put("vehicle_type",pallet_type); + pointTable.update(pointObj); } } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/StructFindUtil.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/StructFindUtil.java index 1ea2a52..2f4c4fc 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/StructFindUtil.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/StructFindUtil.java @@ -14,7 +14,7 @@ public class StructFindUtil { public static JSONObject getInStruct(JSONObject jsonObject) { String material_id = jsonObject.getString("material_id"); String area_type = jsonObject.getString("area_type"); - String vehicle_code = jsonObject.getString("vehicle_code"); + /* String vehicle_code = jsonObject.getString("vehicle_code"); if (StrUtil.isEmpty(vehicle_code)) { throw new BadRequestException("托盘不能为空!"); } @@ -22,16 +22,16 @@ public class StructFindUtil { JSONObject vehicleObj = WQLObject.getWQLObject("md_pb_vehicle").query("vehicle_code='" + vehicle_code + "'").uniqueResult(0); if (ObjectUtil.isEmpty(vehicleObj)) { throw new BadRequestException("未找到托盘号为'" + vehicle_code + "' 托盘信息!"); - } + }*/ if (StrUtil.isEmpty(material_id)) { throw new BadRequestException("物料不能为空!"); } if (StrUtil.isEmpty(area_type)) { throw new BadRequestException("区域不能为空!"); } - String vehice_type = vehicleObj.getString("vehicle_type"); + // String vehice_type = vehicleObj.getString("vehicle_type"); JSONObject result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "2") - .addParam("material_id", material_id).addParam("area_type", area_type).addParam("vehice_type", vehice_type).process().uniqueResult(0); + .addParam("material_id", material_id).addParam("area_type", area_type).process().uniqueResult(0); return result; } @@ -93,9 +93,16 @@ public class StructFindUtil { //获取空闲的输送线的上料位 public static JSONObject getConveyor(JSONObject jsonObject) { + JSONObject result = new JSONObject(); + //判断现在是否能去输送线 + WQLObject param_Table = WQLObject.getWQLObject("sys_param"); + String is_canToConveyor = param_Table.query("code='is_canToConveyor'").uniqueResult(0).getString("value"); + if (StrUtil.equals(is_canToConveyor, "0")) { + return result; + } String material_id = jsonObject.getString("material_id"); //判断入输送线的规则有没有开启,假如开启需要带上物料,没有开启不需要带上物料 - String value = WQLObject.getWQLObject("sys_param").query("code='is_inrule'").uniqueResult(0).getString("value"); + String value = param_Table.query("code='is_inrule'").uniqueResult(0).getString("value"); if (StrUtil.equals(value, "0")) { material_id = ""; } @@ -104,7 +111,6 @@ public class StructFindUtil { //获取可以用的输送线数组 JSONArray deviceArr = WQL.getWO("QSTRUCT_RULE").addParam("flag", "6") .addParam("material_id", material_id).process().getResultJSONArray(0); - JSONObject result = new JSONObject(); for (int i = 0; i < deviceArr.size(); i++) { JSONObject deviceObj = deviceArr.getJSONObject(i); int count = deviceObj.getIntValue("count"); @@ -120,5 +126,26 @@ public class StructFindUtil { return result; } + public static JSONObject getEmptyMto(JSONObject jsonObject) { + String area_type = jsonObject.getString("area_type"); + String vehicle_type = jsonObject.getString("vehicle_type"); + if (StrUtil.isEmpty(vehicle_type)) { + throw new BadRequestException("木托盘类型不能为空!"); + } + JSONObject result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "5") + .addParam("area_type", area_type).addParam("vehicle_type", vehicle_type).process().uniqueResult(0); + return result; + } + + public static JSONObject getOutCacheStruct() { + //找一个可以入库的入窑缓存货位 + String area_type = "01"; + String is_full = "1"; + JSONObject result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "9") + .addParam("area_type", area_type) + .addParam("is_full", is_full) + .process().uniqueResult(0); + return result; + } } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/wql/QSTRUCT_RULE.wql b/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/wql/QSTRUCT_RULE.wql index 51892e4..4b3b53f 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/wql/QSTRUCT_RULE.wql +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/wql/QSTRUCT_RULE.wql @@ -236,4 +236,91 @@ IF 输入.flag = "7" ENDOPTION ENDSELECT ENDQUERY -ENDIF \ No newline at end of file +ENDIF + + +IF 输入.flag = "8" + QUERY + SELECT DISTINCT + point.point_id AS struct_id, + point.point_code AS struct_code, + point.point_name AS struct_name, + point.vehicle_code + FROM + sch_base_point point + LEFT JOIN md_pb_vehicle vehicle ON vehicle.vehicle_code = point.vehicle_code + AND point.vehicle_code <> '' + WHERE + point.lock_type = '00' + AND point.point_status = '01' + OPTION 输入.area_type <> "" + point.area_type = 输入.area_type + ENDOPTION + OPTION 输入.vehicle_type <> "" + vehicle.vehicle_type = 输入.vehicle_type + ENDOPTION + ENDSELECT + ENDQUERY +ENDIF + + + + +IF 输入.flag = "9" + QUERY + SELECT DISTINCT + point.point_code AS struct_code, + point.point_id AS struct_id, + point.point_name AS struct_name, + point.vehicle_code, + ivt.canuse_qty, + ivt.workprocedure_id, + ivt.qty_unit_id, + ruledis.out_seq_no, + material.material_id, + material.material_code, + material.material_name, + material.material_spec + FROM + st_ivt_structivt ivt + LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id + LEFT JOIN st_rule_IOdisStruct ruledis ON ruledis.struct_uuid = ivt.struct_id + LEFT JOIN md_me_material material ON material.material_id = ivt.material_id + WHERE + ivt.canuse_qty > 0 + AND point.point_status = '02' + AND point.lock_type = '00' + AND point.is_used = '1' + and TIME_TO_SEC(timediff(now(),ivt.instorage_time)) >=ivt.stewing_time*60 + OPTION 输入.area_type <> "" + point.area_type = 输入.area_type + ENDOPTION + OPTION 输入.is_full <> "" + ivt.is_full = 输入.is_full + ENDOPTION + order by ruledis.out_seq_no + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "10" + QUERY + SELECT + count(*) as num + FROM + st_ivt_structivt ivt + LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id + left join st_rule_IOdisStruct ruledis on ruledis.struct_uuid = ivt.struct_id + WHERE + ivt.canuse_qty > 0 + AND point.point_status = '02' + AND point.lock_type = '00' + AND point.is_used ='1' + and TIME_TO_SEC(timediff(now(),ivt.instorage_time)) >=ivt.stewing_time*60 + and point.area_type='01' + and ivt.is_full='1' + + ENDSELECT + ENDQUERY +ENDIF + diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 566feb8..d9f5277 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -33,30 +33,30 @@ public class AcsToWmsController { @Log("ACS给WMS发送任务") @ApiOperation("ACS给WMS发送任务") public ResponseEntity receiveTaskFromAcs(@RequestBody Map whereJson) { - acsToWmsService.receiveTaskFromAcs(whereJson); - return new ResponseEntity<>(HttpStatus.OK); + return new ResponseEntity<>( acsToWmsService.receiveTaskFromAcs(whereJson),HttpStatus.OK); } @PostMapping("/manipulatorApply") @Log("ACS机械手给WMS发送任务") @ApiOperation("ACS机械手给WMS发送任务") public ResponseEntity manipulatorApply(@RequestBody Map whereJson) { - acsToWmsService.manipulatorApply(whereJson); - return new ResponseEntity<>(HttpStatus.OK); + + return new ResponseEntity<>( acsToWmsService.manipulatorApply(whereJson),HttpStatus.OK); } + @PostMapping("/group") @Log("ACS扫码器入库组盘") @ApiOperation("ACS扫码器组盘") public ResponseEntity group(@RequestBody Map whereJson) { - acsToWmsService.group(whereJson); - return new ResponseEntity<>(HttpStatus.OK); + return new ResponseEntity<>( acsToWmsService.group(whereJson),HttpStatus.OK); } + @PostMapping("/inKiln") @Log("入窑扫码器") @ApiOperation("入窑扫码器") public ResponseEntity inKiln(@RequestBody Map whereJson) { - acsToWmsService.inKiln(whereJson); - return new ResponseEntity<>(HttpStatus.OK); + + return new ResponseEntity<>( acsToWmsService.inKiln(whereJson),HttpStatus.OK); } @PostMapping("/ispackage") @@ -91,8 +91,8 @@ public class AcsToWmsController { @Log("排产单确认") @ApiOperation("排产单确认") public ResponseEntity sureProduceTask(@RequestBody Map whereJson) { - acsToWmsService.sureProduceTask(whereJson); - return new ResponseEntity<>(HttpStatus.OK); + + return new ResponseEntity<>(acsToWmsService.sureProduceTask(whereJson), HttpStatus.OK); } @PostMapping("/updateVehicleType") @@ -106,7 +106,7 @@ public class AcsToWmsController { @PostMapping("/status") @Log("ACS给WMS反馈任务状态") @ApiOperation("ACS给WMS反馈任务状态") - public ResponseEntity receiveTaskStatusAcs(@RequestBody String string) { + public ResponseEntity receiveTaskStatusAcs(@RequestBody String string) { return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK); } } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index f5de362..8f7f0d7 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -12,7 +12,7 @@ public interface AcsToWmsService { * @return Map */ - void receiveTaskFromAcs(Map jsonObject); + Map receiveTaskFromAcs(Map jsonObject); /** * ACS客户端--->WMS服务端 * ACS机械手给WMS发送任务 @@ -21,7 +21,7 @@ public interface AcsToWmsService { * @return Map */ - void manipulatorApply(Map jsonObject); + Map manipulatorApply(Map jsonObject); /** * ACS客户端--->WMS服务端 * ACS机械手给WMS发送任务 @@ -30,7 +30,7 @@ public interface AcsToWmsService { * @return Map */ - void group(Map jsonObject); + Map group(Map jsonObject); /** * 入窑扫码器 * @@ -79,7 +79,7 @@ public interface AcsToWmsService { * @return Map */ - void sureProduceTask(Map jsonObject); + Map sureProduceTask(Map jsonObject); void updateVehicleType(Map jsonObject); /** 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 dd95ae1..80a87f4 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 @@ -24,6 +24,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.manage.buss.*; import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.service.dto.TaskDto; +import org.nl.wms.sch.task.AcsTaskDto; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.springframework.http.HttpStatus; @@ -46,14 +47,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private final WmsToAcsServiceImpl wmsToAcsServiceImpl; private final ToConveyorTask toConveyorTask; private final TaskService taskService; + private final ToPackIngTask toPackIngTask; @Override @Transactional(rollbackFor = Exception.class) - public void receiveTaskFromAcs(Map jsonObject) { + public Map receiveTaskFromAcs(Map jsonObject) { log.debug("WCS的请求参数为:" + 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("设备不能为空!"); @@ -67,28 +72,34 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { case "1": jsonObject.put("start_point_code", device_code); jsonObject.put("create_mode", "01"); - String product_code = (String) jsonObject.get("product_code"); + + if (StrUtil.isEmpty(is_full)) { + throw new BadRequestException("托盘是否满托不能为空!"); + } + String material_code = (String) jsonObject.get("material_code"); String pcsn = (String) jsonObject.get("pcsn"); - if (StrUtil.isEmpty(product_code)) { + 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"))) { throw new BadRequestException("物料不能为空!"); } - if (StrUtil.isEmpty(pcsn)) { - throw new BadRequestException("批次不能为空!"); + if (!StrUtil.equals(device_code, "CYSSX101")) { + material_id = materialObj.getString("material_id"); } - JSONObject materialObj = WQLObject.getWQLObject("md_me_material").query("material_code ='" + product_code + "'").uniqueResult(0); - String material_id = materialObj.getString("material_id"); //如果是出窑输送线 要从组盘表里面去找物料 if (StrUtil.equals(device_code, "CYSSX101")) { String vehicle_code = (String) jsonObject.get("vehicle_code"); if (StrUtil.isEmpty(vehicle_code)) { throw new BadRequestException("载具不能为空!"); } - JSONObject vehicleObj = WQLObject.getWQLObject("st_buss_vehiclegroup").query("vehicle_code='" + vehicle_code + "'").uniqueResult(0); + 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"); pcsn = vehicleObj.getString("pcsn"); + jsonObject.put("qty", vehicleObj.getString("qty")); + jsonObject.put("vehicle_code", vehicle_code); } jsonObject.put("pcsn", pcsn); @@ -102,21 +113,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String area_type = pointTable.query("point_code ='" + device_code + "'").uniqueResult(0).getString("area_type"); if (StrUtil.equals(area_type, AreaEnum.YZQY.getCode()) && stewing_time <= 0) { //1.首先更新所有输送线的点位状态 - JSONArray pointarr = pointTable.query("area_type ='07'").getResultJSONArray(0); - PointUpdateUtil.updatePoint(pointarr); + 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.isEmpty(pointObj)) { - sendMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject)); - } else { + 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)); break; } - - + } + //假如是分拣机械手的下料位置,并且是满托,则去包装线 + if (StrUtil.equals("1", is_full) && StrUtil.equals(area_type, AreaEnum.FJQY.getCode())) { + toPackIngTask.createTask((JSONObject) JSON.toJSON(jsonObject)); + break; } sendMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject)); break; @@ -124,6 +136,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { //叫料出库 jsonObject.put("next_point_code", device_code); jsonObject.put("create_mode", "01"); + jsonObject.put("is_full", is_full); produceInfoByCode = this.getProduceInfoByCode(device_code); //批次 物料,客户要从排产单里面去取 jsonObject.put("pcsn", "pcsn"); @@ -141,11 +154,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { //叫空托盘 jsonObject.put("next_point_code", device_code); produceInfoByCode = this.getProduceInfoByCode(device_code); - //假如是压制机下料位置或者是码垛位的上料位,则去看看有没有当前排产单生产的物料的半满托 - if (StrUtil.equals(device_code, "FJJXSSLW101") || - StrUtil.equals(device_code, "FJJXSSLW102") || - StrUtil.equals(device_code, "FJJXSSLW301") || - StrUtil.equals(device_code, "FJJXSSLW302") + //假如是码垛位的上料位,则去看看有没有当前排产单生产的物料的半满托 + if (StrUtil.equals(device_code, "FJJXSXLW201") || + StrUtil.equals(device_code, "FJJXSXLW202") || + StrUtil.equals(device_code, "FJJXSXLW301") || + StrUtil.equals(device_code, "FJJXSXLW302") ) { material_id = produceInfoByCode.getString("material_id"); @@ -166,6 +179,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { 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 + "'对应机械手的生产工单!"); @@ -180,19 +196,23 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { 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.isEmpty(taskObj)) { - return; + 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 pointarr = pointTable.query("area_type='07' and device_point_type ='01' ").getResultJSONArray(0); WmsToAcsServiceImpl wmsToAcsService = new WmsToAcsServiceImpl(); - JSONArray reurnPointStatusArr = wmsToAcsService.queryPointStatus(pointarr).getJSONArray("data"); + /* JSONArray reurnPointStatusArr = wmsToAcsService.queryPointStatus(pointarr).getJSONArray("data"); for (int i = 0; i < reurnPointStatusArr.size(); i++) { JSONObject reurnPointStatusObj = reurnPointStatusArr.getJSONObject(i); reurnPointStatusObj.put("update_time", DateUtil.now()); pointTable.update(reurnPointStatusObj); - } + }*/ //假如没有设置哪个输送线先出,没有按照先进先出 JSONObject param = new JSONObject(); String rule = WQLObject.getWQLObject("sys_param").query("code='is_outrule'").uniqueResult(0).getString("value"); @@ -204,30 +224,40 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (ObjectUtil.isEmpty(param)) { throw new BadRequestException("未找到合适的输送线可以出!"); } - param.put("start_point_code", param.getString("point_code")); + jsonObject.put("start_point_code", param.getString("point_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 void manipulatorApply(Map jsonObject) { - //组盘 - JSONObject produceInfoByCode = new JSONObject(); + public Map manipulatorApply(Map jsonObject) { + //如果是码垛机械手下料的地方不需要组盘,等到扫码器扫到的时候再组盘 String device_code = (String) jsonObject.get("device_code"); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备点位不能为空!"); + } + JSONObject produceInfoByCode = new JSONObject(); String vehicle_code = (String) jsonObject.get("vehicle_code"); - String qty = (String) jsonObject.get("qty"); + String qty = String.valueOf(jsonObject.get("qty")); + //String material_code = (String) jsonObject.get("material_code"); produceInfoByCode = this.getProduceInfoByCode(device_code); String material_id = (String) produceInfoByCode.get("material_id"); String cust_id = (String) produceInfoByCode.get("cust_id"); - String producetask_id = (String) produceInfoByCode.get("producetask_id"); + 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(); - groubObj.put("group_id", IdUtil.getSnowflake(1, 1).nextId()); + String group_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + groubObj.put("group_id", group_id); groubObj.put("vehicle_code", vehicle_code); - groubObj.put("material_uuid", material_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("cust_id", cust_id); @@ -294,19 +324,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { groubObj.put("create_id", SecurityUtils.getCurrentUserId()); groubObj.put("create_name", SecurityUtils.getNickName()); groubObj.put("create_time", DateUtil.now()); + String is_autopackage = "1"; + if (StrUtil.equals(device_code, "MDJXS601")) { + is_autopackage = "0"; + } + groubObj.put("is_autopackage", is_autopackage); WQLObject.getWQLObject("st_buss_vehiclegroup").insert(groubObj); jsonObject.put("type", "1"); + jsonObject.put("group_id", group_id); 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 void group(Map jsonObject) { - String task_id = (String) jsonObject.get("task_id"); + public Map group(Map jsonObject) { + String task_code = (String) jsonObject.get("task_code"); String vehicle_code = (String) jsonObject.get("vehicle_code"); //永远判断生成不生成输送任务 String device_code = (String) jsonObject.get("device_code"); - if (StrUtil.isEmpty(task_id)) { - throw new BadRequestException("任务标识不能为空!"); + if (StrUtil.isEmpty(task_code)) { + throw new BadRequestException("任务号不能为空!"); } if (StrUtil.isEmpty(vehicle_code)) { throw new BadRequestException("载具号不能为空!"); @@ -316,6 +357,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } //1组盘 WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + String task_id = taskTable.query("task_code='" + task_code + "'").uniqueResult(0).getString("task_id"); JSONObject groupObj = groupTable.query("task_id='" + task_id + "'").uniqueResult(0); if (ObjectUtil.isEmpty(groupObj)) { throw new BadRequestException("未找到指令为'" + task_id + "'的组盘信息!"); @@ -333,28 +376,54 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { iosTable.update(iosObj); } //更新任务的条码 - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); 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)) { - ConveyorTask conveyorTask = new ConveyorTask(); - JSONObject taskjo = new JSONObject(); - taskjo.put("vehicle_code", vehicle_code); - taskjo.put("start_point_code", device_code); - conveyorTask.createTask(taskjo); + 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); + String conveyorTask_id = task.createTask(param); + JSONObject conveyorTaskObj = WQLObject.getWQLObject("sch_base_task").query("task_id='" + conveyorTask_id + "'").uniqueResult(0); + + AcsTaskDto taskDto = new AcsTaskDto(); + taskDto.setExt_task_uuid(conveyorTaskObj.getString("task_id")); + taskDto.setTask_code(conveyorTaskObj.getString("task_code")); + taskDto.setRoute_plan_code("normal"); + taskDto.setStart_device_code(conveyorTaskObj.getString("start_point_code")); + taskDto.setNext_device_code(conveyorTaskObj.getString("next_point_code")); + taskDto.setVehicle_code(conveyorTaskObj.getString("vehicle_code")); + + data = (JSONObject) JSONObject.parse(JSON.toJSONString(taskDto)); } + 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) { String vehicle_code = String.valueOf(jsonObject.get("vehicle_code")); KilnUtil.inKiln(vehicle_code); - return new JSONObject(); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + return result; } @Override @@ -371,11 +440,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { 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); - JSONObject returnjo = new JSONObject(); - returnjo.put("code", groupObj.getString("is_autopackage")); + ; + String is_autopackage = groupObj.getString("is_autopackage"); + //code的值 1:自动码垛;2:人工码垛; + String code = ""; + if (StrUtil.equals("1", is_autopackage)) { + code = "1"; + } else { + code = "2"; + } //更新窑的信息 KilnUtil.outKiln(vehicle_code); - return returnjo; + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("code", code); + return result; } @Override @@ -439,7 +519,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } @Override - public void sureProduceTask(Map jsonObject) { + @Transactional(rollbackFor = Exception.class) + public Map sureProduceTask(Map 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"); @@ -454,8 +535,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { throw new BadRequestException("未找到工单号为'" + producetask_code + "'的工单信息!"); } //1为确认 - //2为生产中 - //3为完成 + //2为完成 if (StrUtil.equals(type, "1")) { if (StrUtil.isEmpty(producetask_code)) { throw new BadRequestException("工单号不能为空!"); @@ -482,9 +562,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } if (StrUtil.equals("2", type)) { taskObj.put("producetask_status", "05"); - taskObj.put("real_qty",qty); + 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 @@ -519,7 +604,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { 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); + row.put("task_id", task_id); TaskDto taskDto = taskService.findById(task_id); String processing_class = taskDto.getHandle_class(); //1:执行中,2:完成 ,3:acs取消 diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index 5cbf43f..9b9b466 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -42,7 +42,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Override public JSONObject queryPointStatus(JSONArray arr) { - String api = "api/wms/updateDeviceGoods"; + String api = "api/wms/querydevice"; return AcsUtil.notifyAcs(api, arr); } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/wql/ACSTOMES_001.wql b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/wql/ACSTOMES_001.wql index b46565d..bde2809 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/wql/ACSTOMES_001.wql +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/wql/ACSTOMES_001.wql @@ -16,6 +16,7 @@ 输入.flag TYPEAS s_string 输入.workprocedure_id TYPEAS s_string 输入.material_id TYPEAS s_string + 输入.area_type TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -75,7 +76,7 @@ LEFT JOIN st_buss_vehiclegroup vehiclegroup ON point.vehicle_code = vehiclegroup.vehicle_code WHERE point.area_type = '07' - AND point.device_point_type = '01' + AND point.device_point_type = '02' and (vehiclegroup.vehicle_code <>'' and vehiclegroup .vehicle_code is not null) ORDER BY vehiclegroup.create_time @@ -103,3 +104,20 @@ ENDSELECT ENDQUERY ENDIF + + + IF 输入.flag = "4" + QUERY + SELECT + + point.point_code as device_code + FROM + sch_base_point point + WHERE + 1=1 + OPTION 输入.area_type <> "" + point.area_type = 输入.area_type + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/pda/callEmpty/service/impl/CallEmptyServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/pda/callEmpty/service/impl/CallEmptyServiceImpl.java index eba0b1b..b5c4b2e 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/pda/callEmpty/service/impl/CallEmptyServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/pda/callEmpty/service/impl/CallEmptyServiceImpl.java @@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.ext.acs.service.impl.AcsToWmsServiceImpl; import org.nl.wms.pda.callEmpty.service.CallEmptyService; import org.nl.wms.pda.exception.PdaRequestException; diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/ProducetaskServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/ProducetaskServiceImpl.java index 569825c..a81fe2b 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/ProducetaskServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/ProducetaskServiceImpl.java @@ -276,7 +276,7 @@ public class ProducetaskServiceImpl implements ProducetaskService { String producetask_id = param.getString("producetask_id"); WQLObject wo = WQLObject.getWQLObject("pdm_mg_producetask"); JSONObject taskObj= WQL.getWO("PDM_ProduceTask_01").addParam("flag", "3").addParam("producetask_id", producetask_id).process().uniqueResult(0); - + taskObj.put("product_code","wms"); WmsToAcsService wmsToAcsService = SpringContextHolder.getBean(WmsToAcsService.class); JSONArray arr = new JSONArray(); arr.add(taskObj); 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 95d4d6c..6c8388e 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 @@ -189,7 +189,7 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { // 压制工序 case YZGX: vehicle_type = VehicleTypeEnum.GTP.getCode(); - start_area = AreaEnum.DDKTTPQ.getCode(); + start_area = AreaEnum.DKKTTPQ.getCode(); break; //分拣工序 case FJGX: @@ -212,6 +212,11 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { } vehicle_code = outStructObj.getString("vehicle_code"); + //如果是托盘区域/生成一个该类型的托盘 + if (StrUtil.equals(workInfo.getString("workprocedure_code"), AreaEnum.MTPQ.getCode())) { + vehicle_code = CodeUtil.getNewCode("VEHICCLE_CODE_MTP"); + } + start_point_code = outStructObj.getString("struct_code"); } PointService pointService = SpringContextHolder.getBean(PointService.class); 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 145b717..f0575f0 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 @@ -101,7 +101,18 @@ public class CallMaterialTask extends AbstractAcsTask { endpointObj.put("point_status", "02"); endpointObj.put("vehicle_code", vehicle_code); pointTab.update(endpointObj); - + //如果起点静置货架,则考虑是不是最后一拖,如果是则考虑改变系统参数 + String start_area = startPointDto.getArea_type(); + if (StrUtil.equals(start_area, AreaEnum.RYHCHJ.getCode())) { + //查询有没有可以出库的货物 如果没有则需要改变系统参数 + JSONObject outCacheStruct = StructFindUtil.getOutCacheStruct(); + if (ObjectUtil.isEmpty(outCacheStruct)) { + WQLObject paramTable = WQLObject.getWQLObject("sys_param"); + JSONObject paramObj = paramTable.query("code='is_canToConveyor'").uniqueResult(0); + paramObj.put("value", "1"); + paramTable.update(paramObj); + } + } JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0); startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); 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 a62febf..cd5b37d 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 @@ -16,7 +16,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** - * 入库任务生成 + * */ @Service public class ConveyorTask extends AbstractAcsTask { @@ -62,9 +62,10 @@ public class ConveyorTask extends AbstractAcsTask { @Override public String createTask(JSONObject form) { JSONObject taskObj = new JSONObject(); - //只需要传起点就好,跟载具,终点永远是入窑口 + //只需要传起点就好,跟载具 String vehicle_code = form.getString("vehicle_code"); String start_point_code = form.getString("start_point_code"); + String next_point_code = form.getString("next_point_code"); if (StrUtil.isEmpty(vehicle_code)) { throw new BadRequestException("载具不能为空!"); } @@ -72,17 +73,13 @@ public class ConveyorTask extends AbstractAcsTask { throw new BadRequestException("起点不能为空!"); } taskObj.put("task_id", IdUtil.getSnowflake(1, 1).nextId() + ""); - String task_status = TaskStatusEnum.START_AND_POINT.getCode(); + String task_status = TaskStatusEnum.EXECUTING.getCode(); taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - taskObj.put("task_type", TaskTypeEnum.IN_TASK.getCode()); + taskObj.put("task_type", "04"); //输送任务 taskObj.put("acs_task_type", "2"); String start_area = AreaEnum.RYSSXQ.getCode(); String next_area = AreaEnum.RYSSXQ.getCode(); - //根据起点去找终点 - WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); - String device_id = pointTable.query("point_code ='" + start_point_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"); taskObj.put("task_status", task_status); taskObj.put("start_point_code", start_point_code); taskObj.put("start_area", start_area); 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 c967dc5..8aa6edd 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 @@ -76,7 +76,7 @@ public class RgvTask extends AbstractAcsTask { taskObj.put("task_id", IdUtil.getSnowflake(1, 1).nextId() + ""); String task_status = TaskStatusEnum.START_AND_POINT.getCode(); taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - taskObj.put("task_type", TaskTypeEnum.IN_TASK.getCode()); + taskObj.put("task_type", TaskTypeEnum.RGV_TASK.getCode()); //输送任务 taskObj.put("acs_task_type", "2"); String start_area = AreaEnum.RYSSXQ.getCode(); 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 6a5c882..70fc5fa 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 @@ -8,12 +8,14 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.units.qual.A; import org.nl.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; import org.nl.utils.SecurityUtils; import org.nl.utils.SpringContextHolder; import org.nl.wms.BussConstant; import org.nl.wms.WorkProcedureEnum; +import org.nl.wms.common.PointUpdateUtil; import org.nl.wms.common.StructFindUtil; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.AreaEnum; @@ -93,19 +95,37 @@ public class SendEmptyVehicleTask extends AbstractAcsTask { } @Override - public void findNextPoint() {} + public void findNextPoint() { + } @Override @Transactional public String createTask(JSONObject form) { //送空托盘只会有钢托盘有这个需求, 所以终点永远都是 KTPHCW5 都是从码垛机械手送到空托盘缓存位5 + //除开送到ktphcw 还有从空托盘缓存位3 送到堆叠区 PointService pointService = SpringContextHolder.getBean(PointService.class); //起点,托盘 不能为空,终点可以为空 String vehicle_code = form.getString("vehicle_code"); String start_point_code = form.getString("start_point_code"); String next_point_code = "KTPHCW5"; - String task_status = TaskStatusEnum.START_AND_POINT.getCode(); String next_area = AreaEnum.DKKTTPQ.getCode(); + //假如起点是KTPHCW3,就需要送到堆叠位 + if (StrUtil.equals(start_point_code, "KTPHCW3")) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONArray pointArr = point_table.query("area_type='04'").getResultJSONArray(0); + //更新点位 + PointUpdateUtil.updatePoint(pointArr); + //查询有没有空的点位 + JSONObject pointObj = point_table.query("area_type='04' and point_status='00'").uniqueResult(0); + if (ObjectUtil.isEmpty(pointObj)) { + throw new BadRequestException("未找到合适的点位"); + } + next_point_code = (String) pointObj.get("point_code"); + next_area = AreaEnum.DDKTTPQ.getCode(); + } + + String task_status = TaskStatusEnum.START_AND_POINT.getCode(); + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); if (StrUtil.isEmpty(start_point_code)) { throw new BadRequestException("起点不能为空!"); 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 62a283f..9ec5292 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 @@ -174,7 +174,7 @@ public class SendMaterialTask extends AbstractAcsTask { } @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { //请求参数 载具、起点 物料,数量,客户,批次,创建方式 是否满托不能为空! 终点可以不为空时,入库单据编号不能为空 String start_point_code = form.getString("start_point_code"); @@ -187,6 +187,7 @@ public class SendMaterialTask extends AbstractAcsTask { String cust_id = form.getString("cust_id"); String create_mode = form.getString("create_mode"); String pcsn = form.getString("pcsn"); + String vehicle_code = form.getString("vehicle_code"); WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); if (StrUtil.isEmpty(start_point_code)) { throw new BadRequestException("起点不能为空!"); @@ -214,8 +215,6 @@ public class SendMaterialTask extends AbstractAcsTask { JSONObject IosObj = iosTable.query("iostorinv_id='" + iostorinv_id + "'").uniqueResult(0); IosObj.put("bill_status", "20"); iosTable.update(IosObj); - //组盘 - } //如果没给终点,根据起点去找工序,找一个合适的仓位 并且生成入库单,并且锁定点位 if (StrUtil.isEmpty(next_point_code)) { @@ -225,9 +224,6 @@ public class SendMaterialTask extends AbstractAcsTask { if (StrUtil.isEmpty(qty)) { throw new BadRequestException("数量数值不能为空!"); } - if (StrUtil.isEmpty(cust_id)) { - throw new BadRequestException("客户不能为空!"); - } if (StrUtil.isEmpty(create_mode)) { throw new BadRequestException("创建方式不能为空!"); } @@ -238,7 +234,7 @@ public class SendMaterialTask extends AbstractAcsTask { .process().uniqueResult(0); String workprocedure_id = workInfo.getString("workprocedure_id"); WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); - + //用于判断是不是压制工序, switch (workProcedureEnum) { // 压制工序 case YZGX: @@ -302,8 +298,8 @@ public class SendMaterialTask extends AbstractAcsTask { iosObj.put("create_name", SecurityUtils.getNickName()); iosObj.put("create_time", DateUtil.now()); iosObj.put("is_full", is_full); + iosObj.put("vehicle_code", vehicle_code); WQLObject.getWQLObject("ST_IVT_workProcedureIOS").insert(iosObj); - //组盘 } String task_status = TaskStatusEnum.START_AND_POINT.getCode(); @@ -328,25 +324,35 @@ public class SendMaterialTask extends AbstractAcsTask { taskObj.put("create_name", SecurityUtils.getCurrentUsername()); taskObj.put("create_id", SecurityUtils.getCurrentUserId()); taskObj.put("create_time", DateUtil.now()); + taskObj.put("vehicle_code", vehicle_code); taskObj.put("is_delete", "0"); taskTable.insert(taskObj); - //组盘 + //如果是压制工序,则需要组盘 + JSONObject jo = new JSONObject(); String is_autopackage = "1"; if (StrUtil.equals(start_point_code, "MDJXS601")) { is_autopackage = "0"; } - JSONObject materialObj = WQLObject.getWQLObject("md_me_material").query("material_id='" + material_id + "'").uniqueResult(0); - String group_id = IdUtil.getSnowflake(1, 1).nextIdStr(); - jo.put("group_id", group_id); - jo.put("material_id", material_id); - jo.put("material_code", materialObj.getString("material_code")); - jo.put("material_name", materialObj.getString("material_name")); - jo.put("is_autopackage", is_autopackage); - jo.put("pcsn", pcsn); - jo.put("qty", qty); - WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); - groupTable.insert(jo); + //如果是压制工序,则需要插入组盘表 + JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", start_point_code) + .process().uniqueResult(0); + if (StrUtil.equals(WorkProcedureEnum.YZGX.getCode(), workInfo.getString("workprocedure_code"))) { + JSONObject materialObj = WQLObject.getWQLObject("md_me_material").query("material_id='" + material_id + "'").uniqueResult(0); + String group_id = IdUtil.getSnowflake(1, 1).nextIdStr(); + jo.put("group_id", group_id); + jo.put("material_id", material_id); + jo.put("material_code", materialObj.getString("material_code")); + jo.put("material_name", materialObj.getString("material_name")); + jo.put("is_autopackage", is_autopackage); + jo.put("pcsn", pcsn); + jo.put("qty", qty); + jo.put("create_id", SecurityUtils.getCurrentUserId()); + jo.put("create_name", SecurityUtils.getCurrentUserId()); + jo.put("create_time", DateUtil.now()); + WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); + groupTable.insert(jo); + } return task_id; } 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 new file mode 100644 index 0000000..c43ac97 --- /dev/null +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/StructToConveyorTask.java @@ -0,0 +1,255 @@ +package org.nl.wms.sch.manage.buss; + +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.utils.SecurityUtils; +import org.nl.utils.SpringContextHolder; +import org.nl.wms.common.StructFindUtil; +import org.nl.wms.sch.manage.AbstractAcsTask; +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.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; + +@Service +@RequiredArgsConstructor +@Slf4j +public class StructToConveyorTask extends AbstractAcsTask { + private final String THIS_CLASS = StructToConveyorTask.class.getName(); + + + @Override + @Transactional + 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("update_optid", SecurityUtils.getCurrentUserId()); + map.put("update_optname", SecurityUtils.getNickName()); + map.put("update_time", DateUtil.now()); + map.put("bill_status", "40"); + 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", SecurityUtils.getCurrentUserId()); + mstObj.put("confirm_optname", SecurityUtils.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("workprocedure_id")); + param.put("is_full", mstObj.getString("is_full")); + param.put("stewing_time", mstObj.getString("stewing_time")); + param.put("producetask_id", mstObj.getString("producetask_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", nextPointDto.getPoint_id()); + ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_CAN_USE); + //解锁仓位, + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + 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); + } + + } + + @Override + public void findStartPoint() { + + } + + @Override + 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' ").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("end_area")); + param.put("vehicle_code", IosObj.getString("vehicle_code")); + JSONObject inStructObj = StructFindUtil.getInStruct(param); + if (ObjectUtil.isEmpty(inStructObj)) { + throw new BadRequestException("未找到合适的入库仓位!"); + } + //修改单据状态,将终点填入 + IosObj.put("bill_status", "20"); + IosObj.put("end_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", SecurityUtils.getCurrentUserId()); + taskObj.put("update_optname", SecurityUtils.getNickName()); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } + + + } + + @Override + @Transactional + public String createTask(JSONObject form) { + //请求参数 载具、起点 物料,数量,客户,批次,创建方式 是否满托不能为空! 终点可以不为空时,入库单据编号不能为空 + String vehicle_code = form.getString("vehicle_code"); + String start_point_code = form.getString("start_point_code"); + String next_point_code = form.getString("next_point_code"); + String material_id = form.getString("material_id"); + String is_full = form.getString("is_full"); + String qty = form.getString("qty"); + String pcsn = form.getString("pcsn"); + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + + if (StrUtil.isEmpty(start_point_code)) { + throw new BadRequestException("起点不能为空!"); + } + if (StrUtil.isEmpty(next_point_code)){ + throw new BadRequestException("终点不能为空!"); + } + //判断起点有没有未完成的指令 + JSONObject beforTaskObj = taskTable. + query("is_delete='0' and start_point_code='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) { + throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + String is_autopackage = "1"; + if (StrUtil.equals(start_point_code, "MDJXS601")) { + is_autopackage = "0"; + } + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + JSONObject materialObj = WQLObject.getWQLObject("md_me_material").query("material_id='" + material_id + "'").uniqueResult(0); + /* //组盘 + JSONObject jo = new JSONObject(); + String group_id = IdUtil.getSnowflake(1, 1).nextIdStr(); + jo.put("group_id", group_id); + jo.put("material_id", material_id); + jo.put("material_code", materialObj.getString("material_code")); + jo.put("material_name", materialObj.getString("material_name")); + jo.put("vehicle_code", vehicle_code); + jo.put("is_autopackage", is_autopackage); + jo.put("pcsn", pcsn); + jo.put("qty", qty); + jo.put("create_id",SecurityUtils.getCurrentUserId()); + jo.put("create_name",SecurityUtils.getNickName()); + jo.put("create_time",DateUtil.now()); + jo.put("task_id",task_id); + WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); + groupTable.insert(jo);*/ + + PointService pointService = SpringContextHolder.getBean(PointService.class); + PointDto startPoint = pointService.findByCode(start_point_code); + + String task_status = TaskStatusEnum.START_AND_POINT.getCode(); + PointDto nextPoint = pointService.findByCode(next_point_code); + JSONObject taskObj = new JSONObject(); + taskObj.put("task_id", task_id); + taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + taskObj.put("task_type", "00"); + taskObj.put("acs_task_type", "1"); + taskObj.put("task_status", task_status); + taskObj.put("start_point_code", start_point_code); + taskObj.put("start_area", startPoint.getArea_type()); + 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", SecurityUtils.getCurrentUsername()); + taskObj.put("create_id", SecurityUtils.getCurrentUserId()); + taskObj.put("create_time", DateUtil.now()); + taskObj.put("is_delete", "0"); + taskTable.insert(taskObj); + return 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/ToConveyorTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToConveyorTask.java index 496d01f..8026cb2 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 @@ -67,7 +67,7 @@ public class ToConveyorTask extends AbstractAcsTask { jsonTask.put("update_time", DateUtil.now()); jsonTask.put("remark", "任务执行完成"); ///审核单据 增加库存 改变出入库表的状态 - WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + /*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(); @@ -116,7 +116,7 @@ public class ToConveyorTask extends AbstractAcsTask { startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); - pointTab.update(startPointObj); + pointTab.update(startPointObj);*/ taskTab.update(jsonTask); } @@ -180,36 +180,33 @@ public class ToConveyorTask extends AbstractAcsTask { String is_full = form.getString("is_full"); String qty = form.getString("qty"); String pcsn = form.getString("pcsn"); + String group_id = form.getString("group_id"); WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + if (StrUtil.isEmpty(start_point_code)) { throw new BadRequestException("起点不能为空!"); } if (StrUtil.isEmpty(next_point_code)){ throw new BadRequestException("终点不能为空!"); } + //判断起点有没有未完成的指令 + JSONObject beforTaskObj = taskTable. + query("is_delete='0' and start_point_code='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) { + throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } String is_autopackage = "1"; if (StrUtil.equals(start_point_code, "MDJXS601")) { is_autopackage = "0"; } String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; JSONObject materialObj = WQLObject.getWQLObject("md_me_material").query("material_id='" + material_id + "'").uniqueResult(0); - //组盘 - JSONObject jo = new JSONObject(); - String group_id = IdUtil.getSnowflake(1, 1).nextIdStr(); - jo.put("group_id", group_id); - jo.put("material_id", material_id); - jo.put("material_code", materialObj.getString("material_code")); - jo.put("material_name", materialObj.getString("material_name")); - jo.put("vehicle_code", vehicle_code); - jo.put("is_autopackage", is_autopackage); - jo.put("pcsn", pcsn); - jo.put("qty", qty); - jo.put("create_id",SecurityUtils.getCurrentUserId()); - jo.put("create_name",SecurityUtils.getNickName()); - jo.put("create_time",DateUtil.now()); - jo.put("task_id",task_id); + //更新组盘信息,将task_id 更新 WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); - groupTable.insert(jo); + JSONObject groupInfo =groupTable.query("gruop_id='"+group_id+"'").uniqueResult(0); + groupInfo.put("task_id",task_id); + groupTable.update(groupInfo); PointService pointService = SpringContextHolder.getBean(PointService.class); PointDto startPoint = pointService.findByCode(start_point_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 new file mode 100644 index 0000000..0225eb4 --- /dev/null +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java @@ -0,0 +1,147 @@ +package org.nl.wms.sch.manage.buss; + +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.utils.SecurityUtils; +import org.nl.utils.SpringContextHolder; +import org.nl.wms.common.StructFindUtil; +import org.nl.wms.sch.manage.AbstractAcsTask; +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.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; + +@Service +@RequiredArgsConstructor +@Slf4j +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"); + 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("update_optid", SecurityUtils.getCurrentUserId()); + map.put("update_optname", SecurityUtils.getNickName()); + map.put("update_time", DateUtil.now()); + map.put("bill_status", "40"); + 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", "任务执行完成"); + taskTab.update(jsonTask); + } + + } + + @Override + public void findStartPoint() { + + } + + @Override + public void findNextPoint() { + + } + + @Override + @Transactional + public String createTask(JSONObject form) { + //请求参数 载具、起点 物料,数量,客户,批次,创建方式 是否满托不能为空! 终点可以不为空时,入库单据编号不能为空 + String vehicle_code = form.getString("vehicle_code"); + String start_point_code = form.getString("start_point_code"); + String next_point_code = "BZSLW"; + String material_id = form.getString("material_id"); + String is_full = form.getString("is_full"); + String qty = form.getString("qty"); + String pcsn = form.getString("pcsn"); + String group_id = form.getString("group_id"); + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + if (StrUtil.isEmpty(start_point_code)) { + throw new BadRequestException("起点不能为空!"); + } + if (StrUtil.isEmpty(next_point_code)){ + throw new BadRequestException("终点不能为空!"); + } + //判断起点有没有未完成的指令 + JSONObject beforTaskObj = taskTable. + query("is_delete='0' and start_point_code='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) { + throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + PointService pointService = SpringContextHolder.getBean(PointService.class); + PointDto startPoint = pointService.findByCode(start_point_code); + String task_status = TaskStatusEnum.START_AND_POINT.getCode(); + PointDto nextPoint = pointService.findByCode(next_point_code); + JSONObject taskObj = new JSONObject(); + taskObj.put("task_id", task_id); + taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + taskObj.put("task_type", "00"); + taskObj.put("acs_task_type", "1"); + taskObj.put("task_status", task_status); + taskObj.put("start_point_code", start_point_code); + taskObj.put("start_area", startPoint.getArea_type()); + 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", SecurityUtils.getCurrentUsername()); + taskObj.put("create_id", SecurityUtils.getCurrentUserId()); + taskObj.put("create_time", DateUtil.now()); + taskObj.put("is_delete", "0"); + taskTable.insert(taskObj); + return 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/task/AutoOutStructTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoOutStructTask.java new file mode 100644 index 0000000..815b2d1 --- /dev/null +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoOutStructTask.java @@ -0,0 +1,70 @@ + +package org.nl.wms.sch.task; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.WorkProcedureEnum; +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; +import org.springframework.stereotype.Component; + + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoOutStructTask { + private final CallMaterialTask callMaterialTask; + + @SneakyThrows + public void run() { + this.doExecute(); + } + + + private void doExecute() { + WQLObject param_Table = WQLObject.getWQLObject("sys_param"); + int num = param_Table.query("code='stewing_num' ").uniqueResult(0).getInteger("value"); + int canuse_unm = WQL.getWO("QSTRUCT_RULE.wql").addParam("flag", "10").process().uniqueResult(0).getIntValue("num"); + //达到可以出库的数量 + if (canuse_unm >= num) { + //1.首先更新所有输送线的点位状态 + JSONArray pointarr = WQL.getWO("ACSTOMES_001").addParam("area_type", "07").addParam("flag", "4").process().getResultJSONArray(0); + // PointUpdateUtil.updatePoint(pointarr); + //2.将入库的缓存线规则停用, + JSONObject in_rule = param_Table.query("code ='is_inrule'").uniqueResult(0); + in_rule.put("value", "0"); + param_Table.update(in_rule); + //2找一个合适的入库缓存 + JSONObject conveyorObj = StructFindUtil.getConveyor(new JSONObject()); + if (ObjectUtil.isEmpty(conveyorObj)) { + return; + } + JSONObject param = new JSONObject(); + param.put("flag", "10"); + param.put("area_type", "01"); + param.put("if_full", "1"); + JSONObject structObj = WQL.getWO("QSTRUCT_RULE").addParamMap(param).process().uniqueResult(0); + CallMaterialTask callMaterialTask = new CallMaterialTask(); + JSONObject taskObj = new JSONObject(); + taskObj.put("start_point_code", structObj.get("struct_code")); + 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("workprocedure_id", WorkProcedureEnum.YZGX.getId()); + callMaterialTask.createTask(taskObj); + return; + } + + } +} + + + + diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/TaskTypeEnum.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/TaskTypeEnum.java index 0853ed1..dd17dc6 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/TaskTypeEnum.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/TaskTypeEnum.java @@ -9,7 +9,8 @@ public enum TaskTypeEnum { DUMP_TASK(2, "25", "转储"), IN_EMPTY_VEHICLE_TASK(3, "30", "入空载具"), OUT_EMPTY_VEHICLE_TASK(4, "40", "出空载具"), - OUT_ST_BY_VEHICLE_TASK(5, "50", "按托盘出库"); + OUT_ST_BY_VEHICLE_TASK(5, "50", "按托盘出库"), + RGV_TASK(6, "60", "Rgv任务"); private final int index; diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls b/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls index 51555f0..90dd581 100644 Binary files a/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls and b/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls differ diff --git a/wms/hd/nladmin-system/src/main/resources/config/application-dev.yml b/wms/hd/nladmin-system/src/main/resources/config/application-dev.yml index 9d26271..68bd41f 100644 --- a/wms/hd/nladmin-system/src/main/resources/config/application-dev.yml +++ b/wms/hd/nladmin-system/src/main/resources/config/application-dev.yml @@ -64,8 +64,8 @@ spring: #数据库索引 database: ${REDIS_DB:11} - host: ${REDIS_HOST:47.111.78.178} - #host: ${REDIS_HOST:localhost} + #host: ${REDIS_HOST:47.111.78.178} + host: ${REDIS_HOST:localhost} port: ${REDIS_PORT:6379} password: ${REDIS_PWD:} #连接超时时间 @@ -162,5 +162,5 @@ jetcache: maxIdle: 200 maxTotal: 1000 uri: - - redis://47.111.78.178:6379 + - redis://localhost:6379