From dc88d53336451b72a49ccbf9b2a7207c585486fd Mon Sep 17 00:00:00 2001 From: pangshenghao Date: Tue, 1 Aug 2023 18:50:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=BA=E8=81=94=E8=B0=83=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HfKilnTrussDeviceDriver.java | 16 ++++++++++++---- .../HfStationTwoDeviceDriver.java | 1 + .../impl/VehicleDetailServiceImpl.java | 2 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 14 +++++++++++--- .../org/nl/wms/pda/point/wql/PDA_Point_01.wql | 2 +- .../sch/tasks/phaseTwo/PalletizingTask.java | 3 ++- .../src/main/java/org/nl/wms/wms.xls | Bin 240640 -> 240128 bytes .../resources/config/application-prod.yml | 16 +++++----------- 8 files changed, 33 insertions(+), 21 deletions(-) diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_truss/HfKilnTrussDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_truss/HfKilnTrussDeviceDriver.java index 3577f62..a4ebc31 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_truss/HfKilnTrussDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_truss/HfKilnTrussDeviceDriver.java @@ -185,11 +185,15 @@ public class HfKilnTrussDeviceDriver extends AbstractOpcDeviceDriver implements break; case 3: //上报LMS,将对应托盘置为指定窑号中 - uploadKilnInJson(); + if(!inTrussSucess) { + uploadKilnInJson(); + } break; case 4: //上报LMS,将对应窑号中的所有托盘都设置为已出窑 - uploadKilnOutJson(); + if(!outTrussSucess) { + uploadKilnOutJson(); + } break; } } @@ -240,7 +244,8 @@ public class HfKilnTrussDeviceDriver extends AbstractOpcDeviceDriver implements logServer.deviceInfo("acs组盘入窑", this.getDevice_code(), "组盘入窑成功!"); }else{ this.writing(99); - message = "窑道外冷却区存在存留托盘,无法出窑"; + message = "入窑失败,托盘号不存在"; + log.info("入窑失败,托盘号"+barcode+"不存在"); } this.setInTrussSucess(true); return true; @@ -270,9 +275,12 @@ public class HfKilnTrussDeviceDriver extends AbstractOpcDeviceDriver implements if (StrUtil.equals(resp.getString("status"), "200")) { this.writing(4); logServer.deviceInfo("acs组盘出窑", this.getDevice_code(), "组盘出窑成功!"); + }else if (StrUtil.equals(resp.getString("status"), "401")) { + this.writing(98); + logServer.deviceInfo("acs组盘出窑", this.getDevice_code(), "组盘出窑成功,出窑数量与组盘表不一致!"); }else{ this.writing(99); - logServer.deviceInfo("acs组盘出窑", this.getDevice_code(), "组盘出窑成功!"); + logServer.deviceInfo("acs组盘出窑", this.getDevice_code(), "组盘出窑失败,出窑缓存区有货!"); } this.setOutTrussSucess(true); return true; diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station_two/HfStationTwoDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station_two/HfStationTwoDeviceDriver.java index 2c3565f..71d185c 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station_two/HfStationTwoDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station_two/HfStationTwoDeviceDriver.java @@ -388,6 +388,7 @@ public class HfStationTwoDeviceDriver extends AbstractOpcDeviceDriver implements json.put("barcode", barcode); json.put("weight", weight); json.put("material_code",material_code); + json.put("product_code",product_code); json.put("create_mode", "2"); json.put("is_auto_issue", "0"); json.put("type", "5"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleDetailServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleDetailServiceImpl.java index 8af6e4b..900015f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleDetailServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleDetailServiceImpl.java @@ -43,7 +43,7 @@ public class VehicleDetailServiceImpl implements VehicleDetailService { , "vehicle_code", whereJson.get("vehicle_code") ,"region_code",whereJson.get("region_code") ,"is_delete",whereJson.get("is_delete"))) - .pageQuery(WqlUtil.getHttpContext(page), "vehicle_code asc"); + .pageQuery(WqlUtil.getHttpContext(page), "create_time desc"); return pageQuery; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 14c31ec..661851f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -352,6 +352,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { param.put("point_code1", point_code); // 叫料点 param.put("create_mode", create_mode); param.put("material_code",whereJson.getString("material_code")); + param.put("product_code",whereJson.getString("product_code")); param.put("is_auto_issue", is_auto_issue); PalletizingTask taskBean = SpringContextHolder.getBean(PalletizingTask.class); taskBean.createTask(param); @@ -528,10 +529,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override public JSONObject updateKiln(JSONObject whereJson) { JSONObject resp = new JSONObject(); + resp.put("status", "200"); + resp.put("message", "更新托盘状态成功!"); try { int state = whereJson.getIntValue("state"); String vehicle_code = whereJson.getString("barcode"); String kiln_code = whereJson.getString("kiln_id"); + Integer number =whereJson.getInteger("number"); WQLObject wo = WQLObject.getWQLObject("SCH_BASE_vehicle_group"); switch (state) { //入窑 @@ -540,7 +544,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject json = wo.query("vehicle_code ='" + vehicle_code + "' AND region_code= 0 AND is_delete = 0").uniqueResult(0); // 如果该托盘号不存在缓冲区则返回异常 if (MapUtil.isEmpty(json)) { - throw new Exception("当前缓冲区内不存在托盘号为" + vehicle_code + "的托盘!"); + resp.put("status", "400"); + resp.put("message", "对应托盘号不存在!"); } int count = 0; JSONObject jsonObject = wo.query("kiln_code=" + kiln_code + " AND region_code= 1 AND is_delete = 0","order_seq desc").uniqueResult(0); @@ -568,6 +573,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } // 查询指定窑道所有托盘,将其状态改为已出窑 JSONArray jsonArray = wo.query("kiln_code ='" + kiln_code + "' AND region_code= 1 AND is_delete = 0").getResultJSONArray(0); + if(jsonArray.size()!=number){ + log.error("当前窑道" + kiln_code + "记录数量"+jsonArray.size()+"与上送数量"+number+"不一致!"); + resp.put("status", "401"); + resp.put("message", "窑道外冷却区数量不一致!"); + } //将所有点位更改为有货 WQLObject point = WQLObject.getWQLObject("sch_base_point"); for (int i = 0; i < jsonArray.size(); i++) { @@ -605,8 +615,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.error("更新托盘状态失败{}", e.getMessage(), e); } - resp.put("status", "200"); - resp.put("message", "更新托盘状态成功!"); return resp; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/point/wql/PDA_Point_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/point/wql/PDA_Point_01.wql index 73f9b58..e6edc22 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/point/wql/PDA_Point_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/point/wql/PDA_Point_01.wql @@ -49,7 +49,7 @@ FROM sch_base_region WHERE - region_code IN ('YWLQQ01', 'YWLQQ02') + region_code IN ('HCQ') ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/phaseTwo/PalletizingTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/phaseTwo/PalletizingTask.java index eedb8ba..20e200a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/phaseTwo/PalletizingTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/phaseTwo/PalletizingTask.java @@ -266,6 +266,7 @@ public class PalletizingTask extends AbstractAcsTask { String create_mode = form.getString("create_mode"); String is_auto_issue = form.getString("is_auto_issue"); String material_code =form.getString("material_code"); + String product_code =form.getString("product_code"); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 //查找当前是否有未完成任务 JSONObject taskObj = taskTab.query("is_delete='0' and task_name = '包装拆垛位请求叫料' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); @@ -276,7 +277,7 @@ public class PalletizingTask extends AbstractAcsTask { } //查找起点当前缓存区最右边有货的点位及其对应的终点点位1-20-》21 22-41-》42 WQLObject tab = WQLObject.getWQLObject("sch_base_vehicle_group"); - JSONObject pointObj =tab.query("is_delete='0' and region_code='2' and material_code='"+material_code+"'","order_seq desc").uniqueResult(0); + JSONObject pointObj =tab.query("is_delete='0' and region_code='2' and material_code='"+material_code+"' and product_code='" +product_code+"'","order_seq desc").uniqueResult(0); if(ObjectUtil.isEmpty(pointObj)){ log.error("当前窑外缓存区无点位有货!"); throw new BadRequestException("当前窑外缓存区无点位有货!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index 8088ccbbfc109f58f6171c171de30713460da626..c7bd27ab2e90e7111879e4198de1b79c14f6fd2c 100644 GIT binary patch delta 6970 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