From ce6ce0717b80fa697e0d6c3090e859414d2e65e9 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Fri, 2 Sep 2022 14:08:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mes/hd/logPath_IS_UNDEFINED/2022-09-01.0.log | 0 .../acs/service/impl/AcsToWmsServiceImpl.java | 13 ++ .../service/impl/DeviceScreenServiceImpl.java | 2 +- .../wms/ext/bigScreen/wql/QDEVICE_SCREEN.wql | 2 +- .../impl/ProduceshiftorderServiceImpl.java | 15 ++ .../org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql | 5 +- .../src/views/wms/mps/produce/bigScreen.vue | 27 +-- mes/qd/src/views/wms/mps/produce/index.vue | 50 ++++- .../HailiangEngravingMachineDeviceDriver.java | 10 +- .../HailiangPackerStationDeviceDriver.java | 10 +- .../HailiangSpecialDeviceDriver.java | 14 +- .../hailiang_special_device/ItemProtocol.java | 50 ++--- .../ItemProtocol.java | 2 +- .../ItemProtocol.java | 2 +- .../ItemProtocol.java | 2 +- .../ItemProtocol.java | 2 +- .../wms/service/impl/WmsToAcsServiceImpl.java | 4 - .../impl/ProduceshiftorderServiceImpl.java | 181 ++++++++++++++---- .../org/nl/acs/order/service/wql/order.xls | Bin 163840 -> 203264 bytes .../quartz/task/AutoUpdateDeviceOnline.java | 103 ++++++++++ .../src/test/java/org/nl/Test3.java | 15 +- wcs/qd/src/views/acs/order/index.vue | 7 +- 22 files changed, 406 insertions(+), 110 deletions(-) create mode 100644 mes/hd/logPath_IS_UNDEFINED/2022-09-01.0.log create mode 100644 wcs/hd/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoUpdateDeviceOnline.java diff --git a/mes/hd/logPath_IS_UNDEFINED/2022-09-01.0.log b/mes/hd/logPath_IS_UNDEFINED/2022-09-01.0.log new file mode 100644 index 00000000..e69de29b diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 6e3857d3..01d760ba 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -147,6 +148,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { map.put("update_time", now); map.put("realproduceend_date", now); wo.update(map, "produceorder_id = '" + ext_order_id + "'"); + JSONObject jsonObject = wo.query("produceorder_id = '" + ext_order_id + "'").uniqueResult(0); + String real_qty = jsonObject.getString("real_qty"); + if (StrUtil.isEmpty(real_qty)){ + real_qty = "0"; + } + //同时修改工单记录表中的期末数量及完成数量 + WQLObject wo_record = WQLObject.getWQLObject("MPS_BD_MacOperateRecord"); + JSONObject result1 = wo_record.query("produceorder_id = '" + ext_order_id + "' and (operatetime_end = '' or operatetime_end is null) ").uniqueResult(0); + result1.put("finish_qty",real_qty); + result1.put("finishproduct_qty",real_qty); + result1.put("operatetime_end",now); + wo_record.update(result1); } catch (Exception e){ result.put("status", 400); result.put("message", e.getMessage()); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/DeviceScreenServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/DeviceScreenServiceImpl.java index fd8ebf99..145d4bab 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/DeviceScreenServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/DeviceScreenServiceImpl.java @@ -417,7 +417,7 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { int nowproductivity = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "13").addParam("workprocedure_id", workprocedure_id).addParam("produce_date", today) .process().uniqueResult(0).getIntValue("real_qty"); BigDecimal teep = new BigDecimal(0); - if (nowproductivity != 0) { + if (nowproductivity != 0 && Maxproductivity > 0) { teep = NumberUtil.round(NumberUtil.div(nowproductivity * 100, Maxproductivity), 2); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/wql/QDEVICE_SCREEN.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/wql/QDEVICE_SCREEN.wql index 8520c0bd..f75a6519 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/wql/QDEVICE_SCREEN.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/wql/QDEVICE_SCREEN.wql @@ -319,7 +319,7 @@ SELECT device.productivity, CASE WHEN TIMESTAMPDIFF( HOUR, realproducestart_date, now( ) ) = '0' THEN device.productivity - ELSE device.productivity * TIMESTAMPDIFF( HOUR, realproducestart_date, now( ) ) END AS max_productivity, + ELSE device.productivity * (TIMESTAMPDIFF( HOUR, realproducestart_date, now( ) ) + 1) END AS max_productivity, shiftorder.produceorder_code, shiftorder.realproducestart_date FROM diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java index f92f7ce5..eba3d3bc 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java @@ -408,6 +408,7 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { String nickName = SecurityUtils.getNickName(); String now = DateUtil.now(); JSONObject row = param.getJSONObject("row"); + //强制完成时修改工单状态 String produceorder_id = row.getString("produceorder_id"); WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder"); JSONObject produceorderMap = new JSONObject(); @@ -419,6 +420,20 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { produceorderMap.put("update_time", now); produceorderMap.put("realproduceend_date", now); wo.update(produceorderMap); + JSONObject jsonObject = wo.query("produceorder_id = '" + produceorder_id + "'").uniqueResult(0); + String real_qty = jsonObject.getString("real_qty"); + if (StrUtil.isEmpty(real_qty)){ + real_qty = "0"; + } + //同时修改工单记录表中的期末数量及完成数量 + WQLObject wo_record = WQLObject.getWQLObject("MPS_BD_MacOperateRecord"); + JSONObject result = wo_record.query("produceorder_id = '" + produceorder_id + "' and (operatetime_end = '' or operatetime_end is null) ").uniqueResult(0); + if (ObjectUtil.isNotEmpty(result)){ + result.put("finish_qty",real_qty); + result.put("finishproduct_qty",real_qty); + result.put("operatetime_end",now); + wo_record.update(result); + } //wms向acs发送请求 工单强制完成 // TODO JSONArray array = new JSONArray(); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql index 43930318..bb37ba63 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql @@ -135,11 +135,14 @@ workprocedure.workprocedure_name, material.material_code, material.material_name, - material.material_spec + material.material_spec, + device.device_code, + device.device_name FROM MPS_BD_ProduceShiftOrder shiftOrder left join PDM_BI_WorkProcedure workprocedure on workprocedure.workprocedure_id = shiftOrder.workprocedure_id left join md_me_materialbase material on material.material_id = shiftOrder.material_id + left join pdm_bi_device device on device.device_id = shiftOrder.device_id WHERE shiftOrder.is_delete = '0' and shiftOrder.order_status in ('01', '02', '03') and shiftOrder.workprocedure_id in 输入.workprocedure_ids diff --git a/mes/qd/src/views/wms/mps/produce/bigScreen.vue b/mes/qd/src/views/wms/mps/produce/bigScreen.vue index b500ca0e..28c783a8 100644 --- a/mes/qd/src/views/wms/mps/produce/bigScreen.vue +++ b/mes/qd/src/views/wms/mps/produce/bigScreen.vue @@ -29,7 +29,7 @@ - - + + - + - - - - - - - + + + + + + + + @@ -64,7 +65,7 @@ @@ -95,7 +96,7 @@ :visible.sync="reportdialogVisibler" width="35%" :before-close="handleClose"> - + diff --git a/mes/qd/src/views/wms/mps/produce/index.vue b/mes/qd/src/views/wms/mps/produce/index.vue index 4d250907..fb01b0c1 100644 --- a/mes/qd/src/views/wms/mps/produce/index.vue +++ b/mes/qd/src/views/wms/mps/produce/index.vue @@ -162,8 +162,8 @@ type="danger" icon="el-icon-position" size="mini" - :disabled="crud.selections.length !== 1" - @click="forceFinish(crud.selections[0])" + :disabled="is_finished(crud.selections)" + @click="forceFinish(crud.selections)" > 强制完成 @@ -266,8 +266,8 @@ style="width: 200px" clearable filterable - @change="change" placeholder="请选择" + @change="change" > { + crudProduceshiftorder.forceFinish({ row: item }).then(res => { + i = i + 1 + if (i === rows.length) { + this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) + this.crud.toQuery() + } + }) + }) + + /* + crudProduceshiftorder.forceFinish({ row: data }).then(res => { this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.toQuery() - }) + })*/ }, // 取两位小数点 rounding(row, column) { @@ -651,6 +664,25 @@ export default { return true } }, + + // 强制完成禁用条件 + is_finished(rows) { + var length = rows.length + if (length > 1) { + var flag = false + for (let i = 0; i < rows.length; i++) { + if (rows[i].order_status === '04') { + flag = true + break + } + } + return flag + } else if (length === 1 && rows[0].order_status !== '04') { + return false + } else { + return true + } + }, // 新增编辑给form表单物料相关信息赋值 setMaterValue(row) { this.form.material_id = row.material_id @@ -666,13 +698,17 @@ export default { }, // 下发 submits(rows) { + var i = Number(0) rows.forEach((item) => { var produceorder_id = item.produceorder_id crudProduceshiftorder.submits({ produceorder_id: produceorder_id }).then(res => { + i = i + 1 + if (i === rows.length) { + this.crud.notify('下发成功', CRUD.NOTIFICATION_TYPE.SUCCESS) + this.crud.toQuery() + } }) }) - this.crud.notify('下发成功', CRUD.NOTIFICATION_TYPE.SUCCESS) - this.crud.toQuery() }, add() { this.addShow = true diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_machine/HailiangEngravingMachineDeviceDriver.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_machine/HailiangEngravingMachineDeviceDriver.java index ed816e12..691223ab 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_machine/HailiangEngravingMachineDeviceDriver.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_machine/HailiangEngravingMachineDeviceDriver.java @@ -197,7 +197,7 @@ public class HailiangEngravingMachineDeviceDriver extends AbstractOpcDeviceDrive @Override - public void execute() throws Exception { + public synchronized void execute() throws Exception { String message = null; try { device_code = this.getDeviceCode(); @@ -318,6 +318,7 @@ public class HailiangEngravingMachineDeviceDriver extends AbstractOpcDeviceDrive } synchronized (this){ + int realError = 0; long now_feedTime = System.currentTimeMillis(); if (now_feedTime - last_feedDeviceStatusTime >= 5000){ heartbeat = this.itemProtocol.getItem_heartbeat(); @@ -327,10 +328,13 @@ public class HailiangEngravingMachineDeviceDriver extends AbstractOpcDeviceDrive status_type = 02; if (error == 1 || error == 51) { status_type = 05; + realError = error; }else if (mode == 1 && order > 0) { status_type = 03; + realError = 0; } else if (mode == 0 && order > 0) { status_type = 04; + realError = 0; } } if (status_type != last_status_type) { @@ -338,7 +342,7 @@ public class HailiangEngravingMachineDeviceDriver extends AbstractOpcDeviceDrive map.put("device_code", device_code); map.put("status_type", "0" + status_type); map.put("start_time", DateUtil.now()); - map.put("error_code",error); + map.put("error_code",realError); acsToWmsService.feedDeviceStatusType(map); last_status_type = status_type; } @@ -391,8 +395,8 @@ public class HailiangEngravingMachineDeviceDriver extends AbstractOpcDeviceDrive } produceshiftorderService.updateByOrderCode(dto); this.writing("to_confirm_finished","1"); - this.writing("to_clear","1"); this.writing("to_order", "0"); + this.writing("to_clear","1"); this.writing("to_pause","1"); logServer.deviceLogToacs(this.device_code,"","",device_code+":,任务确认完成,电器信号写入成功"); }else { diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/HailiangPackerStationDeviceDriver.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/HailiangPackerStationDeviceDriver.java index 51be391d..38ac5f8f 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/HailiangPackerStationDeviceDriver.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/HailiangPackerStationDeviceDriver.java @@ -171,7 +171,7 @@ public class HailiangPackerStationDeviceDriver extends AbstractOpcDeviceDriver i @Override - public void execute() throws Exception { + public synchronized void execute() throws Exception { String message = null; try { device_code = this.getDeviceCode(); @@ -262,6 +262,7 @@ public class HailiangPackerStationDeviceDriver extends AbstractOpcDeviceDriver i } synchronized (this){ + int realError = 0; long now_feedTime = System.currentTimeMillis(); if (now_feedTime - last_feedDeviceStatusTime >= 5000){ heartbeat = this.itemProtocol.getItem_heartbeat(); @@ -271,17 +272,20 @@ public class HailiangPackerStationDeviceDriver extends AbstractOpcDeviceDriver i status_type = 02; if (error == 1 || error == 51) { status_type = 05; + realError = error; }else if (mode == 1 && order > 0) { status_type = 03; + realError = 0; } else if (mode == 0 && order > 0) { status_type = 04; + realError = 0; } } if (status_type != last_status_type) { JSONObject map = new JSONObject(); map.put("device_code", device_code); map.put("status_type", "0" + status_type); - map.put("error_code",error); + map.put("error_code",realError); map.put("start_time", DateUtil.now()); acsToWmsService.feedDeviceStatusType(map); last_status_type = status_type; @@ -337,9 +341,9 @@ public class HailiangPackerStationDeviceDriver extends AbstractOpcDeviceDriver i } produceshiftorderService.updateByOrderCode(dto); this.writing("to_confirm_finished", "1"); + this.writing("to_order", "0"); this.writing("to_clear", "1"); this.writing("to_pause", "1"); - this.writing("to_order", "0"); logServer.deviceLogToacs(this.device_code, "", "", device_code + ":,任务确认完成,电器信号写入成功"); } else { logServer.deviceLogToacs(this.device_code,"","",device_code+":,order_finish>"+ order_finish +",last_order_finish>"+last_order_finish + "mode:" + mode + "order:" + order); diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java index 74b99ee1..d393131c 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java @@ -202,7 +202,7 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme @Override - public void execute() throws Exception { + public synchronized void execute() throws Exception { String message = null; try { device_code = this.getDeviceCode(); @@ -339,10 +339,10 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme logServer.deviceLog(this.device_code,"open_ready_time" ,String.valueOf(task)); logServer.deviceLogToacs(this.device_code,"","","信号task:" + last_task + "->" + task); } - if (device_running_time != last_device_running_time) { + /* if (device_running_time != last_device_running_time) { logServer.deviceLog(this.device_code,"device_running_time" ,String.valueOf(device_running_time)); logServer.deviceLogToacs(this.device_code,"","","信号device_running_time:" + last_device_running_time + "->" + device_running_time); - } + }*/ if (await_time != last_await_time) { logServer.deviceLog(this.device_code,"await_time" ,String.valueOf(await_time)); logServer.deviceLogToacs(this.device_code,"","","信号await_time:" + last_await_time + "->" + await_time); @@ -352,6 +352,7 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme logServer.deviceLogToacs(this.device_code,"","","信号order_prod_allnum:" + last_order_prod_allnum + "->" + order_prod_allnum); } synchronized (this){ + int realError = 0; long now_feedTime = System.currentTimeMillis(); if (now_feedTime - last_feedDeviceStatusTime >= 5000){ heartbeat = this.itemProtocol.getHeartbeat(); @@ -361,9 +362,12 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme status_type = 02; if (error == 1 || error == 51) { status_type = 05; + realError = error; }else if (mode == 1 && order > 0) { status_type = 03; + realError = 0; } else if (mode == 0 && order > 0) { + realError = 0; status_type = 04; } } @@ -372,7 +376,7 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme map.put("device_code", device_code); map.put("status_type", "0" + status_type); map.put("start_time", DateUtil.now()); - map.put("error_code",error); + map.put("error_code",realError); acsToWmsService.feedDeviceStatusType(map); last_status_type = status_type; } @@ -427,8 +431,8 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme } produceshiftorderService.updateByOrderCode(dto); this.writing("to_confirm_finished","1"); - this.writing("to_clear","1"); this.writing("to_order", "0"); + this.writing("to_clear","1"); this.writing("to_pause","1"); } else { logServer.deviceLogToacs(this.device_code,"","",device_code+":,finish>"+ finish +",last_finish>"+last_finish + "mode:" + mode + "order:" + order); diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/ItemProtocol.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/ItemProtocol.java index 2fd5944c..c62bdc0b 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/ItemProtocol.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/ItemProtocol.java @@ -30,14 +30,14 @@ public class ItemProtocol { public static String item_device_running_time = "device_running_time";//设备运行时间(S) public static String item_await_time = "await_time";//待机时间(S) public static String item_order_prod_allnum = "order_prod_allnum";//订单生产总量 - + public static String item_empty_is_lack = "empty_is_lack"; //空箱位缺箱 public static String item_device_is_running = "device_is_running"; //专机运行状态 public static String item_empty_is_finish = "empty_is_finish"; //空位完成 public static String item_full_ready_req_agv = "full_ready_req_agv"; //满箱位就绪,请求AGV public static String item_full_out = "full_out"; //满箱已运出满箱位 public static String item_device_prepare = "device_prepare"; //专机准备中 - public static String item_device_ready = "device_prepare"; //专机就绪 + public static String item_device_ready = "device_ready"; //专机就绪 public static String item_line_ready = "line_ready"; //线体就绪 @@ -86,11 +86,17 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_error); } - public int getRunning() { return this.getOpcIntegerValue(item_running);} + public int getRunning() { + return this.getOpcIntegerValue(item_running); + } - public int getAllReady() { return this.getOpcIntegerValue(item_all_ready);} + public int getAllReady() { + return this.getOpcIntegerValue(item_all_ready); + } - public int getOrder() { return this.getOpcIntegerValue(item_order);} + public int getOrder() { + return this.getOpcIntegerValue(item_order); + } public int getTask() { return this.getOpcIntegerValue(item_task); @@ -196,11 +202,11 @@ public class ItemProtocol { } - public static String getField_desc(String item){ + public static String getField_desc(String item) { String field_desc = ""; - List readlist = getReadableItemDtos(); - List writelist = getWriteableItemDtos(); - for(int i=0;i readlist = getReadableItemDtos(); + List writelist = getWriteableItemDtos(); + for (int i = 0; i < readlist.size(); i++) { ItemDto dto = readlist.get(i); // if(){ // @@ -210,18 +216,26 @@ public class ItemProtocol { } - public static List getReadableItemDtos() { + public static List getReadableItemDtos() { ArrayList list = new ArrayList(); list.add(new ItemDto(item_heartbeat, "心跳", "DB1.W82")); - list.add(new ItemDto(item_mode, "手自动状态", "DB1.B1.7", Boolean.valueOf(true))); list.add(new ItemDto(item_is_open, "线体是否启动", "DB1.B0.1")); + list.add(new ItemDto(item_device_is_running, "专机运行状态", "DB1.B0.3")); + list.add(new ItemDto(item_empty_is_lack, "空箱位缺箱", "DB1.B0.5")); list.add(new ItemDto(item_running, "是否运行", "DB1.B0.6")); + list.add(new ItemDto(item_empty_is_finish, "空位完成", "DB1.B0.7")); + list.add(new ItemDto(item_full_out, "满箱已运出满箱位", "DB1.B1.1")); list.add(new ItemDto(item_finish, "订单完成", "DB1.B1.2")); + list.add(new ItemDto(item_device_prepare, "专机准备中", "DB1.B1.3")); + list.add(new ItemDto(item_device_ready, "专机就绪", "DB1.B1.4")); + list.add(new ItemDto(item_line_ready, "线体就绪", "DB1.B1.5")); list.add(new ItemDto(item_all_ready, "所有设备就绪", "DB1.B1.6")); - list.add(new ItemDto(item_error, "报警信号", "DB1.W4")); + list.add(new ItemDto(item_mode, "手自动状态", "DB1.B1.7", Boolean.valueOf(true))); list.add(new ItemDto(item_order_compel_finish, "订单强制完成", "DB1.B2.0")); + list.add(new ItemDto(item_error, "报警信号", "DB1.W4")); list.add(new ItemDto(item_now_order_prod_num, "当前生产总量", "DB1.D84")); - list.add(new ItemDto(item_now_one_box_num, "每框箱数量", "DB1.D99")); + list.add(new ItemDto(item_now_one_box_num, "每框箱数量", "DB1.D88")); + list.add(new ItemDto(item_task, "任务号", "DB1.D92")); list.add(new ItemDto(item_full_number, "出料口满框数量", "DB1.D96")); list.add(new ItemDto(item_storage_stock_num, "储料仓库存数量", "DB1.D100")); list.add(new ItemDto(item_line_stock_num, "线体库存数量", "DB1.D104")); @@ -229,17 +243,9 @@ public class ItemProtocol { list.add(new ItemDto(item_device_running_time, "设备运行时间(S)", "DB1.D112")); list.add(new ItemDto(item_await_time, "待机时间(S)", "DB1.D116")); list.add(new ItemDto(item_order_prod_allnum, "订单生产总量", "DB1.D120")); - list.add(new ItemDto(item_task, "任务号", "DB1.D22")); - list.add(new ItemDto(item_empty_is_lack, "空箱位缺箱", "DB1.B0.5")); - list.add(new ItemDto(item_device_is_running, "专机运行状态", "DB1.B0.3")); - list.add(new ItemDto(item_empty_is_finish, "空位完成", "DB1.B0.7")); list.add(new ItemDto(item_full_ready_req_agv, "满箱位就绪,请求AGV", "DB1.B1.0")); - list.add(new ItemDto(item_full_out, "满箱已运出满箱位", "DB1.B1.1")); - list.add(new ItemDto(item_device_prepare, "专机准备中", "DB1.B1.3")); - list.add(new ItemDto(item_device_ready, "专机就绪", "DB1.B1.4")); - list.add(new ItemDto(item_line_ready, "线体就绪", "DB1.B1.5")); list.add(new ItemDto(item_order, "工单号", "DB1.D160")); - return list; + return list; } public static List getWriteableItemDtos() { diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_empty_station/ItemProtocol.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_empty_station/ItemProtocol.java index 76c6bdb2..06eac95a 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_empty_station/ItemProtocol.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_empty_station/ItemProtocol.java @@ -94,7 +94,7 @@ public class ItemProtocol { list.add(new ItemDto(item_finish, "是否完成", "DB1.B0.7")); list.add(new ItemDto(item_all_ready, "所有设备就绪", "DB1.B1.6")); list.add(new ItemDto(item_error, "报警信号", "DB1.W4")); - list.add(new ItemDto(item_task, "任务号", "DB1.D22")); + list.add(new ItemDto(item_task, "任务号", "DB1.D92")); list.add(new ItemDto(item_order, "工单号", "DB1.D160")); return list; } diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/ItemProtocol.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/ItemProtocol.java index cb62847e..8613344b 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/ItemProtocol.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/ItemProtocol.java @@ -93,7 +93,7 @@ public class ItemProtocol { list.add(new ItemDto(item_finish, "是否完成", "DB1.B0.7")); list.add(new ItemDto(item_all_ready, "所有设备就绪", "DB1.B1.6")); list.add(new ItemDto(item_error, "报警信号", "DB1.W4")); - list.add(new ItemDto(item_task, "任务号", "DB1.D22")); + list.add(new ItemDto(item_task, "任务号", "DB1.D92")); list.add(new ItemDto(item_order, "工单号", "DB1.D160")); list.add(new ItemDto(item_full_number, "出料口满框数量", "DB1.D96")); return list; diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pick_station/ItemProtocol.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pick_station/ItemProtocol.java index 0314f454..8077d51f 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pick_station/ItemProtocol.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pick_station/ItemProtocol.java @@ -82,7 +82,7 @@ public class ItemProtocol { list.add(new ItemDto(item_status, "手自动状态", "DB1.B0.0", Boolean.valueOf(true))); list.add(new ItemDto(item_finish, "是否完成", "DB1.B0.7")); list.add(new ItemDto(item_error, "报警信号", "DB1.W4")); - list.add(new ItemDto(item_task, "任务号", "DB1.D22")); + list.add(new ItemDto(item_task, "任务号", "DB1.D92")); list.add(new ItemDto(item_full_number, "出料口满框数量", "DB1.D96")); list.add(new ItemDto(item_order, "工单号", "DB1.D160")); return list; diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pour_station/ItemProtocol.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pour_station/ItemProtocol.java index dbe816a8..1834882f 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pour_station/ItemProtocol.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pour_station/ItemProtocol.java @@ -94,7 +94,7 @@ public class ItemProtocol { list.add(new ItemDto(item_full_number, "出料口满框数量", "DB1.D96")); list.add(new ItemDto(item_storage_stock_num, "储料仓库存数量", "DB1.D100")); list.add(new ItemDto(item_line_stock_num, "线体库存数量", "DB1.D104")); - list.add(new ItemDto(item_task, "任务号", "DB1.D22")); + list.add(new ItemDto(item_task, "任务号", "DB1.D92")); list.add(new ItemDto(item_order, "工单号", "DB1.D160")); return list; } diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index 62cb24ab..4410da43 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -663,7 +663,6 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } //强制完成 if (type.equals("3")){ - hailiangSpecialDeviceDriver.writing("to_order_compel_finished","1"); obj.setOrder_status("3"); obj.setUpdate_by("mes"); obj.setUpdate_time(DateUtil.now()); @@ -674,8 +673,6 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { hailiangPackerStationDeviceDriver = (HailiangPackerStationDeviceDriver) device.getDeviceDriver(); //强制完成 if (type.equals("3")){ - hailiangPackerStationDeviceDriver.writing("to_order_compel_finished","1"); - obj.setOrder_status("3"); obj.setOrder_status("3"); obj.setUpdate_by("mes"); produceshiftorderService.update(obj); @@ -693,7 +690,6 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } //强制完成 if (type.equals("3")){ - hailiangEngravingMachineDeviceDriver.writing("to_order_compel_finished","1"); obj.setOrder_status("3"); obj.setUpdate_by("mes"); obj.setUpdate_time(DateUtil.now()); diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java index 8b35ddff..181ba0ea 100644 --- a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java @@ -151,7 +151,7 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A String extra_value = hailiangSpecialDeviceDriver.getExtraValue().get("one_qty").toString(); - if(StrUtil.equals(is_needmove,"1")){ + if (StrUtil.equals(is_needmove, "1")) { if (ObjectUtil.isEmpty(extra_value)) { throw new BadRequestException("满料框数量为空"); } @@ -160,18 +160,18 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A } dto.setOne_qty(BigDecimal.valueOf((Long.parseLong(extra_value)))); hailiangSpecialDeviceDriver.writing("to_clear", "1"); - hailiangSpecialDeviceDriver.writing("to_pause", "0"); + hailiangSpecialDeviceDriver.writing("to_order", dto.getOrder_code()); hailiangSpecialDeviceDriver.writing("to_one_box_num", extra_value); hailiangSpecialDeviceDriver.writing("to_order_prod_num", dto.getQty().toString()); hailiangSpecialDeviceDriver.writing("to_out_num", "0"); - hailiangSpecialDeviceDriver.writing("to_order", dto.getOrder_code()); + hailiangSpecialDeviceDriver.writing("to_pause", "0"); } - if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver){ + if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver) { hailiangEngravingMachineDeviceDriver = (HailiangEngravingMachineDeviceDriver) device.getDeviceDriver(); String extra_value = hailiangEngravingMachineDeviceDriver.getExtraValue().get("one_qty").toString(); - if(StrUtil.equals(is_needmove,"1")){ + if (StrUtil.equals(is_needmove, "1")) { if (ObjectUtil.isEmpty(extra_value)) { throw new BadRequestException("满料框数量为空"); } @@ -180,25 +180,25 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A } dto.setOne_qty(BigDecimal.valueOf((Long.parseLong(extra_value)))); hailiangEngravingMachineDeviceDriver.writing("to_clear", "1"); + hailiangEngravingMachineDeviceDriver.writing("to_order", dto.getOrder_code()); hailiangEngravingMachineDeviceDriver.writing("to_one_box_num", extra_value); hailiangEngravingMachineDeviceDriver.writing("to_order_prod_num", dto.getQty().toString()); - hailiangEngravingMachineDeviceDriver.writing("to_order", dto.getOrder_code()); } - if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver){ + if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver) { hailiangPackerStationDeviceDriver = (HailiangPackerStationDeviceDriver) device.getDeviceDriver(); hailiangPackerStationDeviceDriver.writing("to_clear", "1"); - hailiangPackerStationDeviceDriver.writing("to_order_prod_num", dto.getQty().toString()); hailiangPackerStationDeviceDriver.writing("to_order", dto.getOrder_code()); + hailiangPackerStationDeviceDriver.writing("to_order_prod_num", dto.getQty().toString()); } if (device.getDeviceDriver() instanceof HailiangSmartplcTestDeviceDriver) { hailiangSmartplcTestDeviceDriver = (HailiangSmartplcTestDeviceDriver) device.getDeviceDriver(); hailiangSmartplcTestDeviceDriver.writing("to_clear", "1"); - hailiangSmartplcTestDeviceDriver.writing("to_qty", dto.getQty().toString()); hailiangSmartplcTestDeviceDriver.writing("to_task", dto.getOrder_code()); + hailiangSmartplcTestDeviceDriver.writing("to_qty", dto.getQty().toString()); hailiangSmartplcTestDeviceDriver.writing("to_material", dto.getMaterial_code()); - hailiangSmartplcTestDeviceDriver.writing("to_pause","0"); + hailiangSmartplcTestDeviceDriver.writing("to_pause", "0"); } JSONObject json = (JSONObject) JSONObject.toJSON(dto); @@ -229,24 +229,78 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A if (StrUtil.equals(dto.getOrder_status(), "0") || StrUtil.equals(dto.getOrder_status(), "1")) { order.add(dto); } - if (StrUtil.equals(dto.getOrder_status(), "3")){ + if (StrUtil.equals(dto.getOrder_status(), "3")) { + WQLObject wo1 = WQLObject.getWQLObject("acs_deviceisonline"); String device_code = dto.getDevice_code(); + JSONObject jsonObject = wo1.query("device_code = '" + device_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonObject)){ + jsonObject = new JSONObject(); + } + JSONObject map = new JSONObject(); + map.put("online_id",IdUtil.simpleUUID()); + map.put("device_code",device_code); + map.put("order_code", dto.getOrder_code()); + map.put("online_status","0"); + map.put("create_by",currentUsername); + map.put("create_time",now); Device device = deviceAppService.findDeviceByCode(device_code); HailiangEngravingMachineDeviceDriver hailiangEngravingMachineDeviceDriver; HailiangPackerStationDeviceDriver hailiangPackerStationDeviceDriver; HailiangSpecialDeviceDriver hailiangSpecialDeviceDriver; - if (device.getDeviceDriver() instanceof HailiangSpecialDeviceDriver){ + if (device.getDeviceDriver() instanceof HailiangSpecialDeviceDriver) { hailiangSpecialDeviceDriver = (HailiangSpecialDeviceDriver) device.getDeviceDriver(); - hailiangSpecialDeviceDriver.writing("to_confirm_finished","1"); - hailiangSpecialDeviceDriver.writing("to_order","0"); - } else if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver){ + if (hailiangSpecialDeviceDriver.getStatus_type() == 1){ + if (ObjectUtil.isEmpty(jsonObject)){ + wo1.insert(map); + } else { + jsonObject.put("online_status","0"); + jsonObject.put("order_code",dto.getOrder_code()); + jsonObject.put("update_by",currentUsername); + jsonObject.put("update_time",now); + wo1.update(jsonObject); + } + }else { + hailiangSpecialDeviceDriver.writing("to_order_compel_finished","1"); + hailiangSpecialDeviceDriver.writing("to_confirm_finished", "1"); + hailiangSpecialDeviceDriver.writing("to_order", "0"); + hailiangSpecialDeviceDriver.writing("to_clear", "1"); + } + } else if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver) { hailiangPackerStationDeviceDriver = (HailiangPackerStationDeviceDriver) device.getDeviceDriver(); - hailiangPackerStationDeviceDriver.writing("to_confirm_finished","1"); - hailiangPackerStationDeviceDriver.writing("to_order","0"); - } else if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver){ + if (hailiangPackerStationDeviceDriver.getStatus_type() == 1){ + if (ObjectUtil.isEmpty(jsonObject)){ + wo1.insert(map); + } else { + jsonObject.put("online_status","0"); + jsonObject.put("order_code",dto.getOrder_code()); + jsonObject.put("update_by",currentUsername); + jsonObject.put("update_time",now); + wo1.update(jsonObject); + } + }else { + hailiangPackerStationDeviceDriver.writing("to_order_compel_finished","1"); + hailiangPackerStationDeviceDriver.writing("to_confirm_finished", "1"); + hailiangPackerStationDeviceDriver.writing("to_order", "0"); + hailiangPackerStationDeviceDriver.writing("to_clear", "1"); + } + } else if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver) { hailiangEngravingMachineDeviceDriver = (HailiangEngravingMachineDeviceDriver) device.getDeviceDriver(); - hailiangEngravingMachineDeviceDriver.writing("to_confirm_finished","1"); - hailiangEngravingMachineDeviceDriver.writing("to_order","0"); + if (hailiangEngravingMachineDeviceDriver.getStatus_type() == 1){ + if (ObjectUtil.isEmpty(jsonObject)){ + wo1.insert(map); + } else { + jsonObject.put("online_status","0"); + jsonObject.put("order_code",dto.getOrder_code()); + jsonObject.put("update_by",currentUsername); + jsonObject.put("update_time",now); + wo1.update(jsonObject); + } + }else { + hailiangEngravingMachineDeviceDriver.writing("to_order_compel_finished","1"); + hailiangEngravingMachineDeviceDriver.writing("to_confirm_finished", "1"); + hailiangEngravingMachineDeviceDriver.writing("to_order", "0"); + hailiangEngravingMachineDeviceDriver.writing("to_clear", "1"); + } } } } @@ -319,46 +373,103 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A @Override @Transactional(rollbackFor = Exception.class) public void finishd(JSONObject param) { + WQLObject wo = WQLObject.getWQLObject("acs_deviceisonline"); param = param.getJSONObject("data"); String now = DateUtil.now(); + String currentUsername = SecurityUtils.getCurrentUsername(); String order_id = param.getString("order_id"); String ext_order_id = param.getString("ext_order_id"); + String device_code = param.getString("device_code"); + String order_code = param.getString("order_code"); if (StrUtil.isNotEmpty(ext_order_id)) { // TODO param.put("status", "3"); param.put("type", "2"); acsToWmsService.feedbackOrderStatus(param); } - Device device = deviceAppService.findDeviceByCode(param.getString("device_code")); + Device device = deviceAppService.findDeviceByCode(device_code); HailiangSpecialDeviceDriver hailiangSpecialDeviceDriver; HailiangPackerStationDeviceDriver hailiangPackerStationDeviceDriver; HailiangEngravingMachineDeviceDriver hailiangEngravingMachineDeviceDriver; + JSONObject jsonObject = wo.query("device_code = '" + device_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonObject)){ + jsonObject = new JSONObject(); + } + JSONObject map = new JSONObject(); + map.put("online_id",IdUtil.simpleUUID()); + map.put("device_code",device_code); + map.put("order_code",order_code); + map.put("online_status","0"); + map.put("create_by",currentUsername); + map.put("create_time",now); if (device.getDeviceDriver() instanceof HailiangSpecialDeviceDriver) { hailiangSpecialDeviceDriver = (HailiangSpecialDeviceDriver) device.getDeviceDriver(); - hailiangSpecialDeviceDriver.writing("to_confirm_finished","1"); - hailiangSpecialDeviceDriver.writing("to_order", "0"); + if (hailiangSpecialDeviceDriver.getStatus_type() == 1) { + if (ObjectUtil.isEmpty(jsonObject)){ + wo.insert(map); + } else { + jsonObject.put("online_status","0"); + jsonObject.put("order_code",order_code); + jsonObject.put("update_by",currentUsername); + jsonObject.put("update_time",now); + wo.update(jsonObject); + } + } else { + hailiangSpecialDeviceDriver.writing("to_order_compel_finished", "1"); + hailiangSpecialDeviceDriver.writing("to_confirm_finished", "1"); + hailiangSpecialDeviceDriver.writing("to_order", "0"); + hailiangSpecialDeviceDriver.writing("to_clear", "1"); + } } if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver) { hailiangPackerStationDeviceDriver = (HailiangPackerStationDeviceDriver) device.getDeviceDriver(); - hailiangPackerStationDeviceDriver.writing("to_confirm_finished","1"); - hailiangPackerStationDeviceDriver.writing("to_order", "0"); + if (hailiangPackerStationDeviceDriver.getStatus_type() == 1) { + if (ObjectUtil.isEmpty(jsonObject)){ + wo.insert(map); + } else { + jsonObject.put("online_status","0"); + jsonObject.put("order_code",order_code); + jsonObject.put("update_by",currentUsername); + jsonObject.put("update_time",now); + wo.update(jsonObject); + } + } else { + hailiangPackerStationDeviceDriver.writing("to_order_compel_finished", "1"); + hailiangPackerStationDeviceDriver.writing("to_confirm_finished", "1"); + hailiangPackerStationDeviceDriver.writing("to_order", "0"); + hailiangPackerStationDeviceDriver.writing("to_clear", "1"); + } } if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver) { hailiangEngravingMachineDeviceDriver = (HailiangEngravingMachineDeviceDriver) device.getDeviceDriver(); - hailiangEngravingMachineDeviceDriver.writing("to_confirm_finished","1"); - hailiangEngravingMachineDeviceDriver.writing("to_order", "0"); + if (hailiangEngravingMachineDeviceDriver.getStatus_type() == 1){ + if (ObjectUtil.isEmpty(jsonObject)){ + wo.insert(map); + } else { + jsonObject.put("online_status","0"); + jsonObject.put("order_code",order_code); + jsonObject.put("update_by",currentUsername); + jsonObject.put("update_time",now); + wo.update(jsonObject); + } + } else { + hailiangEngravingMachineDeviceDriver.writing("to_order_compel_finished", "1"); + hailiangEngravingMachineDeviceDriver.writing("to_confirm_finished", "1"); + hailiangEngravingMachineDeviceDriver.writing("to_order", "0"); + hailiangEngravingMachineDeviceDriver.writing("to_clear", "1"); + } } - JSONObject map = new JSONObject(); - map.put("order_id", order_id); - map.put("order_status", "3"); - map.put("update_by", SecurityUtils.getNickName()); - map.put("update_time", now); - WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); - wo.update(map); + JSONObject map1 = new JSONObject(); + map1.put("order_id", order_id); + map1.put("order_status", "3"); + map1.put("update_by", SecurityUtils.getNickName()); + map1.put("update_time", now); + WQLObject wo1 = WQLObject.getWQLObject("acs_produceshiftorder"); + wo1.update(map1); Iterator iterator = order.iterator(); while (iterator.hasNext()) { ProduceshiftorderDto instruction = iterator.next(); - if (instruction.getOrder_code().equals(param.getString("order_code"))) { + if (instruction.getOrder_code().equals(order_code)) { iterator.remove(); } } diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/acs/order/service/wql/order.xls b/wcs/hd/nladmin-system/src/main/java/org/nl/acs/order/service/wql/order.xls index 89d456db335a3f66cd12d666e74131dc2ac5efbf..c92c3c4c936792b28b5fdcd72ccb6ffd4c21a517 100644 GIT binary patch delta 47408 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 G^Zx*~)z=*W diff --git a/wcs/hd/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoUpdateDeviceOnline.java b/wcs/hd/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoUpdateDeviceOnline.java new file mode 100644 index 00000000..48ff3a2d --- /dev/null +++ b/wcs/hd/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoUpdateDeviceOnline.java @@ -0,0 +1,103 @@ +package org.nl.modules.quartz.task; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_engraving_machine.HailiangEngravingMachineDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_packer_station.HailiangPackerStationDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_special_device.HailiangSpecialDeviceDriver; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.nl.wql.core.bean.WQLObject; +import org.springframework.stereotype.Component; + +/** + * @author geng by + * 自动查询强制完成时,设备处于关机状态下的 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoUpdateDeviceOnline { + + private final DeviceAppService deviceAppService; + + public void run() throws Exception { + try { + //海亮专机 + HailiangSpecialDeviceDriver hailiangSpecialDeviceDriver; + //刻字机 + HailiangEngravingMachineDeviceDriver hailiangEngravingMachineDeviceDriver; + //包装机 + HailiangPackerStationDeviceDriver hailiangPackerStationDeviceDriver; + + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("acs_deviceisonline"); + JSONArray jsonArray = wo.query("online_status = '0'").getResultJSONArray(0); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + String deviceCode = jsonObject.getString("device_code"); + Device device = deviceAppService.findDeviceByCode(deviceCode); + String order_code = wo.query("device_code = '" + deviceCode + "'").uniqueResult(0).getString("order_code"); + if (device.getDeviceDriver() instanceof HailiangSpecialDeviceDriver) { + hailiangSpecialDeviceDriver = (HailiangSpecialDeviceDriver) device.getDeviceDriver(); + if (hailiangSpecialDeviceDriver.getStatus_type() != 1) { + String order = String.valueOf(hailiangSpecialDeviceDriver.getOrder()); + if (order.equals(order_code)) { + hailiangSpecialDeviceDriver.writing("to_order_compel_finished", "1"); + hailiangSpecialDeviceDriver.writing("to_confirm_finished", "1"); + hailiangSpecialDeviceDriver.writing("to_order", "0"); + hailiangSpecialDeviceDriver.writing("to_clear", "1"); + } + JSONObject map = new JSONObject(); + map.put("update_time",now); + map.put("online_status", "1"); + wo.update(map, "device_code = '" + deviceCode + "' and online_status = '0'"); + System.out.println("设备:" + deviceCode + ",工单:" + order + " 复位成功!"); + } + } + + if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver) { + hailiangPackerStationDeviceDriver = (HailiangPackerStationDeviceDriver) device.getDeviceDriver(); + if (hailiangPackerStationDeviceDriver.getStatus_type() != 1) { + String order = String.valueOf(hailiangPackerStationDeviceDriver.getOrder()); + if (order.equals(order_code)) { + hailiangPackerStationDeviceDriver.writing("to_order_compel_finished", "1"); + hailiangPackerStationDeviceDriver.writing("to_confirm_finished", "1"); + hailiangPackerStationDeviceDriver.writing("to_order", "0"); + hailiangPackerStationDeviceDriver.writing("to_clear", "1"); + } + JSONObject map = new JSONObject(); + map.put("update_time",now); + map.put("online_status", "1"); + wo.update(map, "device_code = '" + deviceCode + "' and online_status = '0'"); + System.out.println("设备:" + deviceCode + ",工单:" + order + " 复位成功!"); + } + } + + if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver) { + hailiangEngravingMachineDeviceDriver = (HailiangEngravingMachineDeviceDriver) device.getDeviceDriver(); + if (hailiangEngravingMachineDeviceDriver.getStatus_type() != 1) { + String order = String.valueOf(hailiangEngravingMachineDeviceDriver.getOrder()); + if (order.equals(order_code)) { + hailiangEngravingMachineDeviceDriver.writing("to_order_compel_finished", "1"); + hailiangEngravingMachineDeviceDriver.writing("to_confirm_finished", "1"); + hailiangEngravingMachineDeviceDriver.writing("to_order", "0"); + hailiangEngravingMachineDeviceDriver.writing("to_clear", "1"); + } + JSONObject map = new JSONObject(); + map.put("update_time",now); + map.put("online_status", "1"); + wo.update(map, "device_code = '" + deviceCode + "' and online_status = '0'"); + System.out.println("设备:" + deviceCode + ",工单:" + order + " 复位成功!"); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/wcs/hd/nladmin-system/src/test/java/org/nl/Test3.java b/wcs/hd/nladmin-system/src/test/java/org/nl/Test3.java index 8d0cebe1..9d3fdb73 100644 --- a/wcs/hd/nladmin-system/src/test/java/org/nl/Test3.java +++ b/wcs/hd/nladmin-system/src/test/java/org/nl/Test3.java @@ -46,19 +46,14 @@ public class Test3 extends BaseTest { String now = DateUtil.now(); WQLObject tab= WQLObject.getWQLObject("acs_opc"); - for (int i = 5; i < 29; i++) { + for (int i = 3; i <= 6; i++) { JSONObject map = new JSONObject(); map.put("opc_id",IdUtil.simpleUUID()); - if (i < 10){ - map.put("opc_code","TW0"+i); - map.put("opc_name","TW0"+i); - } else { - map.put("opc_code","TW"+i); - map.put("opc_name","TW"+i); - } - map.put("opc_host","127.0.0.1"); + map.put("opc_code","TW5"+i); + map.put("opc_name","TW5"+i); + map.put("opc_host","192.168.46.225"); map.put("user","administrator"); - map.put("password","damien"); + map.put("password","nl123"); map.put("prog_id","Kepware.KEPServerEX.V6"); map.put("remark","Kepware.KEPServerEX.V6"); map.put("cls_id","7bc0cc8e-482c-47ca-abdc-0fe7f9c6e729"); diff --git a/wcs/qd/src/views/acs/order/index.vue b/wcs/qd/src/views/acs/order/index.vue index 8f8c6c94..bc7935fa 100644 --- a/wcs/qd/src/views/acs/order/index.vue +++ b/wcs/qd/src/views/acs/order/index.vue @@ -94,7 +94,12 @@ - + + +