From 3bd5e9827cd1a4ac6d07b38262afbc5491d7ed18 Mon Sep 17 00:00:00 2001 From: 18188916393 <2562295436@qq.com> Date: Wed, 17 Aug 2022 09:33:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95bug=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/wms/common/PointUpdateUtil.java | 16 +- .../org/nl/wms/common/StructFindUtil.java | 10 +- .../org/nl/wms/common/wql/QSTRUCT_RULE.wql | 23 ++ .../wms/ext/acs/service/WmsToJnService.java | 29 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 26 +- .../acs/service/impl/WmsToJnServiceImpl.java | 15 + .../org/nl/wms/ext/acs/wql/ACSTOMES_001.wql | 6 +- .../nl/wms/pda/login/wql/QPADSTSETSERVICE.wql | 3 +- .../service/impl/ProducetaskServiceImpl.java | 2 +- .../sch/manage/buss/CallEmptyVehicleTask.java | 16 +- .../sch/manage/buss/SendEmptyVehicleTask.java | 8 + .../org/nl/wms/sch/service/PointService.java | 2 +- .../main/java/org/nl/wms/sch/task/InTask.java | 261 ------------------ .../src/main/java/org/nl/wms/wms.xls | Bin 408064 -> 384000 bytes .../src/test/java/org/nl/Test3.java | 13 +- wms/qd/src/components/Crud/crud.js | 7 + .../src/views/wms/pdm/produceTask/index.vue | 8 +- 17 files changed, 146 insertions(+), 299 deletions(-) delete mode 100644 wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/InTask.java 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 c4c3224..747180d 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 @@ -15,21 +15,25 @@ public class PointUpdateUtil { 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 point_status = "0"+pointjo.getString("move"); + 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"); + //将托盘类型123,改为 03,04,05,默认给01 + String pallet_type = "01"; + if (!StrUtil.equals("0", pointjo.getString("pallet_type"))) { + pallet_type = "0" + (pointjo.getIntValue("pallet_type") + 2); + } pointjo.put("point_status", point_status); 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); + 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 2f4c4fc..666819b 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 @@ -86,8 +86,14 @@ public class StructFindUtil { if (StrUtil.isEmpty(area_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); + JSONObject result = new JSONObject(); + if (StrUtil.equals("05", area_type)) { + result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "11") + .addParam("area_type", area_type).addParam("vehicle_type", vehicle_type).process().uniqueResult(0); + } else { + result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "5") + .addParam("area_type", area_type).addParam("vehicle_type", vehicle_type).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 4b3b53f..06f6ebd 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 @@ -324,3 +324,26 @@ IF 输入.flag = "10" ENDQUERY ENDIF +IF 输入.flag = "11" + 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 <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + ENDSELECT + ENDQUERY +ENDIF \ No newline at end of file diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToJnService.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToJnService.java index 391fd78..189cfd3 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToJnService.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToJnService.java @@ -11,7 +11,7 @@ public interface WmsToJnService { /** * WMS同步jn日计划 * - * @param jsonObject 条件 + * @param * @return Map */ @@ -19,11 +19,36 @@ public interface WmsToJnService { /** * WMS同步jn物料 * - * @param jsonObject 条件 + * @param * @return Map */ Map synchroMaterial(Map whereJson); + /** + * WMS 反馈设备状态(专机,agv) + * + * @param + * @return Map + */ + + Map feedBackStatus(Map whereJson); + /** + * WMS 反馈物料托盘参数信息 + * + * @param + * @return Map + */ + + Map feedBackGroup(Map whereJson); + /** + * WMS 反馈搬运记录 + * + * @param + * @return Map + */ + + Map feedBackCarryRecord(Map whereJson); + } 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 cabd27d..13f382c 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 @@ -118,7 +118,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { 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); + PointUpdateUtil.updatePoint(pointarr); //2.找一个合适的输送带 JSONObject pointObj = StructFindUtil.getConveyor(materiralObj); //如果未找到合适的输送带 就去货架 @@ -159,10 +159,10 @@ 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, "FJJXSXLW301") ) { material_id = produceInfoByCode.getString("material_id"); @@ -185,13 +185,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } //需要更新覆膜机的托盘类型 JSONArray pointarr = WQL.getWO("ACSTOMES_001").addParam("area_type", "05").addParam("flag", "4").process().getResultJSONArray(0); - // PointUpdateUtil.updatePoint(pointarr); + 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搬运任务 @@ -209,14 +211,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } //寻找起点 //更新所有设备的点位的状态 - 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"); - for (int i = 0; i < reurnPointStatusArr.size(); i++) { - JSONObject reurnPointStatusObj = reurnPointStatusArr.getJSONObject(i); - reurnPointStatusObj.put("update_time", DateUtil.now()); - pointTable.update(reurnPointStatusObj); - }*/ + JSONArray pointConveyArr = pointTable.query("area_type='07' and device_point_type ='01' ").getResultJSONArray(0); + PointUpdateUtil.updatePoint(pointConveyArr); //假如没有设置哪个输送线先出,没有按照先进先出 JSONObject param = new JSONObject(); String rule = WQLObject.getWQLObject("sys_param").query("code='is_outrule'").uniqueResult(0).getString("value"); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToJnServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToJnServiceImpl.java index fa42429..be3a7d6 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToJnServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToJnServiceImpl.java @@ -112,4 +112,19 @@ public class WmsToJnServiceImpl implements WmsToJnService { return null; } + @Override + public Map feedBackStatus(Map whereJson) { + return null; + } + + @Override + public Map feedBackGroup(Map whereJson) { + return null; + } + + @Override + public Map feedBackCarryRecord(Map whereJson) { + return null; + } + } 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 bde2809..ed55d0d 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,7 +16,8 @@ 输入.flag TYPEAS s_string 输入.workprocedure_id TYPEAS s_string 输入.material_id TYPEAS s_string - 输入.area_type TYPEAS s_string + 输入.area_type TYPEAS s_string + 输入.point_code TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -118,6 +119,9 @@ OPTION 输入.area_type <> "" point.area_type = 输入.area_type ENDOPTION + OPTION 输入.point_code <> "" + point.point_code = 输入.point_code + ENDOPTION ENDSELECT ENDQUERY ENDIF diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/pda/login/wql/QPADSTSETSERVICE.wql b/wms/hd/nladmin-system/src/main/java/org/nl/wms/pda/login/wql/QPADSTSETSERVICE.wql index 1a88049..a2aece6 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/pda/login/wql/QPADSTSETSERVICE.wql +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/pda/login/wql/QPADSTSETSERVICE.wql @@ -485,7 +485,8 @@ FROM sch_base_point point WHERE - point_name LIKE '人工处理位%' + point_name LIKE '分拣机械手%' + and device_point_type='01' ENDSELECT ENDQUERY ENDIF \ No newline at end of file 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 a81fe2b..9cff741 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 @@ -186,7 +186,7 @@ public class ProducetaskServiceImpl implements ProducetaskService { @Override public JSONArray getDevice1() { WQLObject wo = WQLObject.getWQLObject("pdm_base_device"); - JSONArray arr = wo.query(" is_delete = '0'", "device_code").getResultJSONArray(0); + JSONArray arr = wo.query(" is_delete = '0' and is_work_device ='1'", "device_code").getResultJSONArray(0); return arr; } 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 4e5ac0e..6115039 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 @@ -167,7 +167,8 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { public String createTask(JSONObject form) { //请求参数 终点不能为空 起点点位为空时,托盘类型不能为空,托盘不能为空! String next_point_code = form.getString("next_point_code"); - String vehicle_code = ""; + //默认给一个测试托盘 + String vehicle_code = "999"; String is_auto_issue = "1"; if (StrUtil.isEmpty(next_point_code)) { throw new BadRequestException("终点不能为空!"); @@ -194,12 +195,12 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { // 压制工序 case YZGX: vehicle_type = VehicleTypeEnum.GTP.getCode(); - start_area = AreaEnum.DKKTTPQ.getCode(); + start_area = AreaEnum.DDKTTPQ.getCode(); break; //分拣工序 case FJGX: //托盘类型取的物料对应的木托盘类型 - JSONObject produceObj = WQLObject.getWQLObject("PDM_MG_produceTask").query("device_id='" + device_id + "' and producetask_status in('03')").uniqueResult(0); + JSONObject produceObj = WQLObject.getWQLObject("PDM_MG_produceTask").query("device_id='" + device_id + "' and producetask_status in('03','04')").uniqueResult(0); vehicle_type = produceObj.getString("vehicle_type"); start_area = AreaEnum.MTPQ.getCode(); is_auto_issue = "0"; @@ -209,7 +210,11 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { start_area = AreaEnum.DDKTTPQ.getCode(); } JSONObject param = new JSONObject(); - param.put("vehicle_type", vehicle_type); + //如果托盘类型不是02,则需要加上托盘类型 + if (!StrUtil.equals(vehicle_type,"02")){ + param.put("vehicle_type", vehicle_type); + } + param.put("area_type", start_area); JSONObject outStructObj = StructFindUtil.getEmptyVehicleOutStruct(param); if (ObjectUtil.isEmpty(outStructObj)) { @@ -217,6 +222,9 @@ public class CallEmptyVehicleTask extends AbstractAcsTask { } vehicle_code = outStructObj.getString("vehicle_code"); + if (StrUtil.isEmpty(vehicle_code)){ + vehicle_code="999"; + } //如果是托盘区域/生成一个该类型的托盘 if (StrUtil.equals(workInfo.getString("workprocedure_code"), AreaEnum.MTPQ.getCode())) { vehicle_code = CodeUtil.getNewCode("VEHICCLE_CODE_MTP"); 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 70fc5fa..f23cdc0 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 @@ -85,6 +85,14 @@ public class SendEmptyVehicleTask extends AbstractAcsTask { startPointObj.put("vehicle_code", ""); pointTab.update(startPointObj); taskTab.update(jsonTask); + + //将组盘表删除 + WQLObject group_Table = WQLObject.getWQLObject("st_buss_vehiclegroup"); + JSONObject groupObj = group_Table.query("vehicle_code='" + vehicle_code + "' and is_delete='0'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(groupObj)) { + groupObj.put("is_delete", "0"); + group_Table.update(groupObj); + } } } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java index 5c7cbe7..5227d8d 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java @@ -39,7 +39,7 @@ public interface PointService { /** * 根据编码查询 - * @param code code + * @param code * @return Point */ PointDto findByCode(String code); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/InTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/InTask.java deleted file mode 100644 index 0bd3a32..0000000 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/InTask.java +++ /dev/null @@ -1,261 +0,0 @@ -package org.nl.wms.sch.task; - -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 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.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -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.transaction.annotation.Transactional; - -/** - * 入库任务生成 - */ -public class InTask extends AbstractAcsTask { - private final String THIS_CLASS = InTask.class.getName(); - - @Transactional - @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); - } - - 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", "任务执行完成"); - ///审核单据 增加库存 改变主表的状态 - JSONObject disjo = WQLObject.getWQLObject("st_buss_iostoredis").query("task_id='" + task_id + "'").uniqueResult(0); - String bill_uuid = disjo.getString("bill_uuid"); - WQLObject mstTab = WQLObject.getWQLObject("st_buss_iostoremst"); - WQLObject dtlTab = WQLObject.getWQLObject("st_buss_iostoredtl"); - //审核 加库存可和用数量 - StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); - - - disjo.put("is_finishtask", "1"); - WQLObject.getWQLObject("st_buss_iostoredis").update(disjo); - String billdtl_uuid = disjo.getString("billdtl_uuid"); - String realassign_qty = disjo.getString("realassign_qty"); - String next_point_code = disjo.getString("next_point_code"); - String start_point_code = disjo.getString("start_point_code"); - JSONObject param = new JSONObject(); - param.put("material_uuid", disjo.getString("material_uuid")); - param.put("bill_uuid", bill_uuid); - param.put("qty_unit_uuid", disjo.getString("qty_unit_uuid")); - param.put("pcsn", disjo.getString("pcsn")); - param.put("change_qty", realassign_qty); - param.put("vehicle_code", disjo.getString("vehicle_code")); - param.put("barcode", disjo.getString("barcode")); - 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_uuid", nextPointDto.getPoint_uuid()); - ivtService.addIvtFlow(param, IvtChangeTypeEnum.ADD_IVT_AND_CAN_USE); - JSONObject dtlObj = dtlTab.query("billdtl_uuid='" + billdtl_uuid + "'").uniqueResult(0); - JSONObject disjoo = WQLObject.getWQLObject("st_buss_iostoredis").query("billdtl_uuid='" + billdtl_uuid + "' and is_finishtask<>'1' and is_delete<>'1'").uniqueResult(0); - //假如所有的分配都完成了任务,更新明细表 - double qty = Double.valueOf(dtlObj.getString("qty")); - double assign_qty = Double.valueOf(dtlObj.getString("assign_qty")); - if (ObjectUtil.isEmpty(disjoo) && (qty == assign_qty)) { - dtlObj.put("bill_status", "40"); - dtlObj.put("is_can_back", "1"); - dtlTab.update(dtlObj); - } - - - //该表主表的状态 - if (StrUtil.isNotEmpty(bill_uuid)) { - JSONObject mstObj = mstTab.query("bill_uuid='" + bill_uuid + "'").uniqueResult(0); - JSONObject dtlObj1 = dtlTab.query("bill_uuid='" + bill_uuid + "' and bill_status<>'40'").uniqueResult(0); - if (ObjectUtil.isNull(dtlObj1)) { - mstObj.put("bill_status", "40"); - mstTab.update(mstObj); - } - } - //解锁仓位,托盘信息,回写到点位上去 - 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); - - 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); - - //修改任务表状态为 完成 - jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); - } - - } - - @Override - public void findStartPoint() { - - } - - @Transactional - @Override - public void findNextPoint() { - String task_status = TaskStatusEnum.SURE_START.getCode(); - WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - WQLObject disTab = WQLObject.getWQLObject("st_buss_IOStoreDis"); - WQLObject dtlTab = WQLObject.getWQLObject("st_buss_iostoredtl"); - 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 jsonTask = taskArry.getJSONObject(i); - String task_id = jsonTask.getString("task_id"); - JSONArray disarr = disTab.query("task_id='" + task_id + "'").getResultJSONArray(0); - if (ObjectUtil.isEmpty(disarr)) { - continue; - } - //寻找一个合适的仓位 - JSONObject param = new JSONObject(); - param.put("area_type", jsonTask.getString("buss_area_type")); - param.put("height", disarr.getJSONObject(0).getString("height")); - JSONObject structObj = new JSONObject(); - /* JSONArray structarr = StructFindUtil.getInStruct(param); - if (ObjectUtil.isEmpty(structarr)) { - continue; - } - - structObj = structarr.getJSONObject(0);*/ - String struct_code = structObj.getString("struct_code"); - - String bill_uuid = ""; - for (int j = 0; j < disarr.size(); j++) { - JSONObject json = disarr.getJSONObject(j); - bill_uuid = json.getString("bill_uuid"); - json.put("task_id", task_id); - json.put("next_point_code", struct_code); - disTab.update(json); - String billdtl_uuid = json.getString("billdtl_uuid"); - - //修改明细表中的状态 - JSONObject dtlObj = dtlTab.query("billdtl_uuid='" + billdtl_uuid + "'").uniqueResult(0); - dtlObj.put("bill_status", "30"); - dtlTab.update(dtlObj); - } - //该表主表的状态 - WQLObject mstTab = WQLObject.getWQLObject("st_buss_IOStoreMst"); - if (!StrUtil.isEmpty(bill_uuid)) { - JSONObject mstObj = mstTab.query("bill_uuid='" + bill_uuid + "'").uniqueResult(0); - JSONObject dtlObj = dtlTab.query("bill_uuid='" + bill_uuid + "' and bill_status<>'30' and bill_status<>'40'").uniqueResult(0); - if (dtlObj == null) { - mstObj.put("bill_status", "30"); - mstTab.update(mstObj); - } - } - - //加锁 - JSONObject pointObj = pointTab.query("point_code ='" + struct_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(pointObj)) { - continue; - } - pointObj.put("lock_type", "01"); - pointTab.update(pointObj); - //更新任务 - jsonTask.put("next_point_code", struct_code); - jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - - taskTab.update(jsonTask); - } - } - - @Override - public String createTask(JSONObject form) { - JSONObject taskObj = new JSONObject(); - //申请任务的时候ACS会传任务标识 - if (StrUtil.isNotEmpty(form.getString("task_id"))) { - taskObj.put("task_id", form.getString("task_id")); - } else { - taskObj.put("task_id", IdUtil.getSnowflake(1, 1).nextId() + ""); - } - String task_status = TaskStatusEnum.SURE_START.getCode(); - String next_point_code = form.getString("next_point_code"); - taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - taskObj.put("task_type", TaskTypeEnum.IN_TASK.getCode()); - taskObj.put("acs_task_type", form.getString("acs_task_type")); - - String taskdtl_type = ""; - taskObj.put("taskdtl_type", taskdtl_type); - //终点不为空,则代表起点终点都确定, - if (!StrUtil.isEmpty(next_point_code)) { - task_status = TaskStatusEnum.START_AND_POINT.getCode(); - } - taskObj.put("task_status", task_status); - taskObj.put("start_point_code", form.getString("start_point_code")); - taskObj.put("next_point_code", form.getString("next_point_code")); - taskObj.put("vehicle_code", form.getString("vehicle_code")); - taskObj.put("create_name", SecurityUtils.getNickName()); - taskObj.put("create_id", SecurityUtils.getCurrentUserId()); - taskObj.put("create_time", DateUtil.now()); - taskObj.put("update_optid",SecurityUtils.getCurrentUserId()); - taskObj.put("update_name", SecurityUtils.getNickName()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("handle_class", THIS_CLASS); - //任务基础表【sch_base_task】 - WQLObject.getWQLObject("sch_base_task").insert(taskObj); - return taskObj.getString("task_id"); - - } - - - @Override - public void forceFinish(String task_id) { - if (StrUtil.isEmpty(task_id)) { - throw new BadRequestException("任务id不能为空!"); - } - JSONObject taskjo = WQLObject.getWQLObject("sch_base_task").query("task_id='" + task_id + "'").uniqueResult(0); - taskjo.getString("taskfinish_mode"); - this.updateTaskStatus(taskjo, 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/wms.xls b/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls index 90dd581e0e8ddaa65683732e91e861e357675f84..7e1fd73f6e9b5183d105a9e85ebd68e187584981 100644 GIT binary patch delta 33896 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 ma = new ArrayBlockingQueue<>(10); for (int i = 0; i <9 ; i++) { ma.offer("pla00"+i); @@ -436,6 +436,10 @@ public class Test3 extends BaseTest { System.out.println(str); } } + + /** + * + */ @Test public void testqinx (){ WQLObject logTable = WQLObject.getWQLObject("sys_log"); @@ -444,6 +448,13 @@ public class Test3 extends BaseTest { System.out.println("测试完成!"); } + public static void main(String[] args) { + String a = "0"+1+1; + String b ="0"+(1+1); + System.out.println(a); + System.out.println(b); + } + } diff --git a/wms/qd/src/components/Crud/crud.js b/wms/qd/src/components/Crud/crud.js index 7aa77e0..53b5187 100644 --- a/wms/qd/src/components/Crud/crud.js +++ b/wms/qd/src/components/Crud/crud.js @@ -183,6 +183,13 @@ function CRUD(options) { callVmHook(crud, CRUD.HOOK.afterToAdd, crud.form) callVmHook(crud, CRUD.HOOK.afterToCU, crud.form) }, + + toCopy(data) { + crud.resetForm(JSON.parse(JSON.stringify(data))) + crud.status.add = CRUD.STATUS.PREPARED + callVmHook(crud, CRUD.HOOK.afterToAdd, crud.form) + callVmHook(crud, CRUD.HOOK.afterToCU, crud.form) + }, /** * 启动编辑 * @param {*} data 数据项 diff --git a/wms/qd/src/views/wms/pdm/produceTask/index.vue b/wms/qd/src/views/wms/pdm/produceTask/index.vue index 60eee88..b2ba100 100644 --- a/wms/qd/src/views/wms/pdm/produceTask/index.vue +++ b/wms/qd/src/views/wms/pdm/produceTask/index.vue @@ -85,10 +85,10 @@ slot="right" class="filter-item" type="success" - icon="el-icon-document-copy" - :disabled="copy_add" + icon="el-icon-position" size="mini" - @click="copyAdd" + :disabled="crud.selections.length !== 1" + @click="crud.toCopy(crud.selections[0])" > 复制新增 @@ -148,7 +148,7 @@ /> - +