From 08608e45d836784509c96e121dab8939a345417f Mon Sep 17 00:00:00 2001 From: zhangzhiqiang Date: Tue, 27 Jun 2023 08:42:41 +0800 Subject: [PATCH 1/5] =?UTF-8?q?rev=EF=BC=9A=E5=88=BB=E5=AD=97=E6=BB=A1?= =?UTF-8?q?=E6=96=99=E8=AF=B7=E6=B1=82/=E7=A9=BA=E6=A1=86=E8=AF=B7?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/common/enums/AcsTaskEnum.java | 4 +- .../java/org/nl/config/ConventConfig.java | 3 +- .../ext/acs/service/impl/AgvInstService.java | 40 ++-- .../acs/service/impl/WmsToAcsServiceImpl.java | 3 + .../sap/service/impl/WmsToSapServiceImpl.java | 18 +- .../impl/MdPbClassstandardServiceImpl.java | 1 - .../vehicle/dao/MdPbStoragevehicleext.java | 4 + .../constant/MaterOptTypeEnum.java | 8 +- .../service/impl/MaterialbaseServiceImpl.java | 9 + .../pda/rest/CacheLineHandController.java | 14 ++ .../impl/CacheLineHandServiceImpl.java | 4 +- .../sch/tasks/SpeMachinery/SpeEmpTask.java | 1 + .../sch/tasks/SpeMachinery/SpeFullTask.java | 3 + .../tasks/callEmpty/PlotterCallEmptyTask.java | 226 +++++++++--------- .../callMaterial/PlotterCallMaterialTask.java | 199 +++++++++++++++ .../sendMaterial/PlotterCallMaterialTask.java | 202 ---------------- .../sendMaterial/PlotterSendMaterialTask.java | 213 +++++++++-------- .../device/dao/mapper/PdmBiDeviceMapper.xml | 5 +- .../impl/IPdmProduceWorkorderServiceImpl.java | 5 +- .../dao/SchCachelineVehilematerial.java | 4 +- .../mapper/xml/SchCachelinePositionMapper.xml | 6 +- .../xml/SchCachelineVehilematerialMapper.xml | 3 + .../service/point/ISchBasePointService.java | 3 + .../point/dao/mapper/SchBasePointMapper.xml | 8 + .../point/impl/SchBasePointServiceImpl.java | 7 +- .../service/task/dao/SchBaseTask.java | 8 +- .../resources/config/application-dev3.yml | 6 +- .../wms/basedata/master/mdPbMeasureunit.js | 2 +- mes/qd/src/views/wms/pdm/device/index.vue | 6 +- .../views/wms/scheduler_manage/task/index.vue | 11 +- 30 files changed, 551 insertions(+), 475 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/PlotterCallMaterialTask.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterCallMaterialTask.java diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java index 3cfc0626..4a9cc7d1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java @@ -68,8 +68,8 @@ public enum AcsTaskEnum { ACS_TASK_TYPE_NOBLE_POINT_POINT_TASK("5","诺宝点对点任务"), - ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20("6","PS20称重任务(刻字-包装)"), - ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20("7","PS20不称重任务(刻字-包装)"), + ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20("6","PS20称重任务"), + ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20("7","PS20不称重任务"), AUTO_TASK_FINISHED_TYPE("1", "自动完成任务"), MANUAL_TASK_FINISHED_TYPE("2", "手动完成任务"), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/ConventConfig.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/ConventConfig.java index 1e212fc3..9661d05b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/config/ConventConfig.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/ConventConfig.java @@ -10,9 +10,8 @@ import org.nl.wms.product_manage.sch.tasks.SpeMachinery.SpeFullTask; import org.nl.wms.product_manage.sch.tasks.WashMachineryTask; import org.nl.wms.product_manage.sch.tasks.callMaterial.WrapCallMaterialTask; import org.nl.wms.product_manage.sch.tasks.sendEmpty.WrapSendEmptyTask; -import org.nl.wms.product_manage.sch.tasks.sendMaterial.PlotterCallMaterialTask; +import org.nl.wms.product_manage.sch.tasks.callMaterial.PlotterCallMaterialTask; import org.nl.wms.product_manage.sch.tasks.sendMaterial.PlotterSendMaterialTask; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.SmartLifecycle; import org.springframework.context.annotation.Configuration; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java index 8d196230..b620cb2a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java @@ -13,6 +13,8 @@ import org.nl.common.utils.MapOf; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehicleService; import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService; import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle; @@ -29,10 +31,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -56,6 +56,8 @@ public class AgvInstService { @Autowired private ISchBaseTaskService taskService; @Autowired + private IPdmProduceWorkorderService workorderService; + @Autowired private ISchCachelineVehilematerialService cachelineVehicleService; public static void main(String[] args) { @@ -80,10 +82,10 @@ public class AgvInstService { , "qty", quantity,"spec",workprodure.get("spec")); //判断缓存线是不是去深坑清洗:深坑区域15个点:判断空的物料坑位: List> collect = new ArrayList<>(); + query.put("material_id",task.getString("material_id")); if (next.getName().equals("深坑清洗")){ task.put("task_type",AcsTaskEnum.TASK_PRODUCT_WASH.getCode()); task.put("task_name",AcsTaskEnum.TASK_PRODUCT_WASH.getDesc()); - query.put("material_id",task.getString("material_id")); // query.put("qty",quantity) 深坑物料需要转重量 collect = deviceService.workproceduceDevicesWeight(query); }else { @@ -95,7 +97,7 @@ public class AgvInstService { task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode()); task.put("is_send","1"); String nextPoint = null; - String cacheVehile = ""; + Map cacheVehile = new HashMap(); if (!CollectionUtils.isEmpty(list)){ nextPoint = list.get(0).get("point_code"); }else { @@ -106,8 +108,8 @@ public class AgvInstService { task.put("task_type",AcsTaskEnum.TASK_PRODUCT_CACHE.getCode()); task.put("task_name",AcsTaskEnum.TASK_PRODUCT_CACHE.getDesc()); task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode()); - cacheVehile = getCacheVehile(nextPoint, null); - if (StringUtils.isEmpty(cacheVehile)){ + cacheVehile = getCacheVehile(nextPoint, null,null); + if (CollectionUtils.isEmpty(cacheVehile)){ throw new BadRequestException("当前缓存线无可用空箱:"+nextPoint); } } @@ -118,7 +120,7 @@ public class AgvInstService { } SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); - schBaseTask.setBarcodeArr(cacheVehile); + schBaseTask.setBarcodeArr(cacheVehile.keySet().stream().collect(Collectors.joining(","))); schBaseTask.setPoint_code2(nextPoint); schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode()); schBaseTask.setUpdate_time(new Date()); @@ -168,8 +170,10 @@ public class AgvInstService { public void empMatter(JSONObject task){ //参数 String startPoint = task.getString("point_code1"); - String cacheVehile = getCacheVehile(startPoint, task.getString("material_id")); - if (StringUtils.isBlank(cacheVehile)) { + + PdmProduceWorkorder tmp_workorder = workorderService.getOne(new QueryWrapper().eq("workorder_code", task.getString("table_fk_id"))); + Map cacheVehile = getCacheVehile(startPoint, task.getString("material_id"),tmp_workorder.getWorkprocedure_id()); + if (CollectionUtils.isEmpty(cacheVehile)) { throw new BadRequestException("缓存线:"+startPoint+"没有物料"+task.getString("material_id")+"对应可用载具"); } //判断当前物料载具已经任务分配数量:如果>物料已经分配任务。说明满了,不允许再分配 @@ -177,12 +181,13 @@ public class AgvInstService { .eq("point_code1", startPoint) .eq("material_id", task.getString("material_id")) .in("task_status", "4","5","6")); - if (allocateTask.size()>cacheVehile.split(",").length){ + if (allocateTask.size()>cacheVehile.keySet().size()){ log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完,任务id:{}",startPoint,task.getString("material_id"),allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(","))); throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,task.getString("material_id"))); } SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); - schBaseTask.setBarcodeArr(cacheVehile); + schBaseTask.setBarcodeArr(cacheVehile.keySet().stream().collect(Collectors.joining(","))); + schBaseTask.setQtyArr(JSON.toJSONString(cacheVehile)); schBaseTask.setPoint_code1(startPoint); schBaseTask.setIs_send(true); schBaseTask.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode()); @@ -194,18 +199,19 @@ public class AgvInstService { } - public String getCacheVehile(String cacheLine,String materialId){ + public Map getCacheVehile(String cacheLine, String materialId,String workprocedure_id){ + Map map = new HashMap<>(); if (StringUtils.isNotEmpty(cacheLine)){ int count = taskService.count(new QueryWrapper().eq("point_code2", cacheLine).lt("task_status", StatusEnum.TASK_FINISH.getCode())); String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode(); - List vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId, "cacheLine", cacheLine)); + List vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId,"workprocedure_id",workprocedure_id, "cacheLine", cacheLine)); if (vehicle.size()>0){ if (vehicle.size()>count){ - return vehicle.stream().map(SchCachelineVehilematerial::getVehicle_code).collect(Collectors.joining(",")); + return vehicle.stream().collect(HashMap::new, (k, v) -> k.put(v.getVehicle_code(), String.valueOf(v.getQuantity())), HashMap::putAll); } } } - return ""; + return map; } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index cd306336..bb05fa5b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.wms.ext.acs.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -12,6 +13,7 @@ import org.nl.wms.ext.acs.service.WmsToAcsService; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.Map; @@ -36,6 +38,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{ , "vehicle_code", task.getString("vehicle_code") , "quantity", task.getString("material_qty") , "barcodeArr", task.getString("barcodeArr") + , "qtyArr", task.getString("qtyArr") , "proprity_floor", "2" , "agv_system_type", task.getString("agv_system_type") )); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/WmsToSapServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/WmsToSapServiceImpl.java index 3937e760..0a0cfe7c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/WmsToSapServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/WmsToSapServiceImpl.java @@ -275,37 +275,37 @@ public class WmsToSapServiceImpl implements WmsToSapService { deliver_jo.put("deliver_type", row.getString("Lfart")); String material_code = row.getString("Matnr").replaceAll("^(0+)", ""); //获取物料对应的物料标识 - JSONObject mater_jo = WQLObject.getWQLObject("MD_ME_MaterialBase").query("material_code = '" + material_code + "'").uniqueResult(0); + MdMeMaterialbase mater_jo = materialbaseService.getOne(new QueryWrapper().eq("material_code", material_code)); if (ObjectUtil.isEmpty(mater_jo)) { deliver_jo.put("material_id", "0"); deliver_jo.put("is_success", "0"); deliver_jo.put("remark", "未查询到该交货单对应的物料主数据:" + material_code); err_num++; } else { - String material_id = mater_jo.getString("material_id"); + String material_id = mater_jo.getMaterial_id(); deliver_jo.put("material_id", material_id); } deliver_jo.put("status", "10"); deliver_jo.put("delivery_qty", row.getString("Lfimg")); String cust_code = row.getString("Kunnr"); - JSONObject cust_jo = WQLObject.getWQLObject("md_cs_customerbase").query("cust_code = '" + cust_code + "'").uniqueResult(0); + MdCsCustomerbase cust_jo = customerbaseService.getOne(new QueryWrapper().eq("cust_code", cust_code)); if (ObjectUtil.isNotEmpty(cust_jo)) { - deliver_jo.put("cust_id", cust_jo.getString("cust_id")); - deliver_jo.put("cust_code", cust_jo.getString("cust_code")); - deliver_jo.put("cust_name", cust_jo.getString("cust_name")); + deliver_jo.put("cust_id", cust_jo.getCust_id()); + deliver_jo.put("cust_code", cust_jo.getCust_code()); + deliver_jo.put("cust_name", cust_jo.getCust_name()); } else { deliver_jo.put("is_success", "0"); deliver_jo.put("remark", "未查询到该交货单对应的客户信息:" + cust_code); err_num++; } String unit_code = row.getString("Vrkme"); - JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(unit_jo)) { + MdPbMeasureunit unit_jo = mdPbMeasureunitService.getOne(new QueryWrapper() + .eq("unit_name", unit_code)); if (ObjectUtil.isEmpty(unit_jo)) { deliver_jo.put("qty_unit_id", "0"); deliver_jo.put("remark", "未查询到该交货单对应的单位信息:" + unit_code); err_num++; } else { - deliver_jo.put("qty_unit_id", unit_jo.getString("measure_unit_id")); + deliver_jo.put("qty_unit_id", unit_jo.getMeasure_unit_id()); } String sale_code = row.getString("Vgbel"); String seq_no = row.getString("Vgpos"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java index 167fac99..52e25d0e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java @@ -128,7 +128,6 @@ public class MdPbClassstandardServiceImpl extends ServiceImpl> list = this.listMaps(query); return getMaps(list); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbStoragevehicleext.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbStoragevehicleext.java index e6b0e815..bbb19e39 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbStoragevehicleext.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbStoragevehicleext.java @@ -35,6 +35,10 @@ public class MdPbStoragevehicleext implements Serializable { */ private String storagevehicle_code; + /** + * 单据号 + */ + private String sale_id; /** * 物料标识 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/constant/MaterOptTypeEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/constant/MaterOptTypeEnum.java index ff3a72ea..4919eaf9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/constant/MaterOptTypeEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/constant/MaterOptTypeEnum.java @@ -6,10 +6,10 @@ import com.alibaba.fastjson.JSONObject; * 获取物料操作类型 */ public enum MaterOptTypeEnum { - QBWL(1, "00", "全部物料", "('1')", ""), - BCP(2, "01", "管件半成品", "('1528555443906023424')", ""), - YCL(3, "02", "管件原材料", "('1503644349995552768')", ""), - CP(4, "03", "关键成品", "('1528555444031852544')", ""); + QBWL(1, "00", "全部物料", "1", ""), + BCP(2, "01", "管件半成品", "1528555443906023424", ""), + YCL(3, "02", "管件原材料", "1503644349995552768", ""), + CP(4, "03", "关键成品", "1528555444031852544", ""); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/service/impl/MaterialbaseServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/service/impl/MaterialbaseServiceImpl.java index 6836575f..b50de28a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/service/impl/MaterialbaseServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/service/impl/MaterialbaseServiceImpl.java @@ -243,11 +243,16 @@ public class MaterialbaseServiceImpl implements MaterialbaseService{ map.put("MatnrTo", bill_code2); //非必填字段 JSONObject ZfmGetSoResponse = null; + String getXMLBody; try { String response = WebServiceUtil.process(url, method, map); // String response = "24026697L软管外丝直接\\C46500\\S3/16*1/4M\\URGJ00124TH2023-03-01KDEALBVGCXKDEALBVGCZ009M2401KG0.01.0KG20X24026697L201200PCNORM201224026697L204000PCNORM24026697L206000PCNORM206024026697L220000PCNORM24026697L201224026697L204024026697L206024026697L220024026697L0000000000077876000000000010S01CHAR300类别美标软管管件X24026697L0000000000077876000000000011S02CHAR300牌号C46500X24026697L0000000000077876000000000012S03CHAR300规格S3/16*1/4MX24026697L0000000000077876000000000014S05CHAR300形状软管外丝直接X24026697L0000000000077876000000000015S06CHAR300标准URGJX24026697L0000000000077876000000000016S07CHAR300图号URGJ00124THX24026697L0000000000077876000000000017S08CHAR300监管性质保税来料X24026697L0000000000077876000000000020S11CHAR300客户牌号(下单时输入)24026697L0000000000077876000000000019S10CHAR300附加说明(下单时输入)24026697L0000000000077876000000000102S13CHAR300铜管内部牌号黄铜管件-黄铜管件24026697LKG1124026697LPC19125024026697L2012101PC1000.024026697S0010PC1000.024026697L2012101PC1000.035000715L9000KG15.1724026697L2060101PC1000.024026697S0010KG15.1724026697L2060101PC1000.035000715L9000KG15.1724026697L2060501PC1.024026697S0010KG15.1724026697L2060501PC1.035000715L9000KG15.17I000共输出1 条物料数据000000"; JSONObject ret = JSONObject.parseObject(XML.toJSONObject(response).toString()); System.out.println("getXML返回数据-----------------" + ret.toString()); + getXMLBody = ret.toString(); + //getXML返回数据-----------------{"soap-env:Envelope":{"soap-env:Body":{"n0:ZSd0002SendMatMdResponse":{"xmlns:n0":"urn:sap-com:docum + //TMara":"","TMvke":"","Return":{"Type":"","Number":"000","Message":"","LogNo":"","MessageV4":"","MessageV3":"","Id":"","LogMsgNo":" + //Marm":"","TAusp":"","TBom":"","TMarc":""}}},"soap-env:Header":"","xmlns:soap-env":"http://schemas.xmlsoap.org/soap/envelope/"}} JSONObject Envelope = ret.getJSONObject("soap-env:Envelope"); JSONObject Body = Envelope.getJSONObject("soap-env:Body"); ZfmGetSoResponse = Body.getJSONObject("n0:ZSd0002SendMatMdResponse"); @@ -258,6 +263,10 @@ public class MaterialbaseServiceImpl implements MaterialbaseService{ } JSONObject TZtsalesorder = ZfmGetSoResponse.getJSONObject("Out"); JSONObject TMara = TZtsalesorder.getJSONObject("TMara"); + if (TMara==null){ + log.error("没有可同步的物料数据同步结果:{}",getXMLBody); + throw new BadRequestException("没有可同步的物料数据"); + } Object item = TMara.get("item"); JSONArray rows= new JSONArray(); if (item instanceof JSONObject){ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/rest/CacheLineHandController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/rest/CacheLineHandController.java index 0b83c159..84c9071f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/rest/CacheLineHandController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/rest/CacheLineHandController.java @@ -14,11 +14,14 @@ import org.nl.common.utils.api.ResultCode; import org.nl.modules.common.exception.BizCoreException; import org.nl.wms.pda_manage.pda.dto.MaterialDto; import org.nl.wms.pda_manage.pda.service.CacheLineHandService; +import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.regex.Pattern; @@ -38,6 +41,9 @@ import java.util.regex.Pattern; public class CacheLineHandController { private final CacheLineHandService cacheLineHandService; + @Autowired + private IPdmBiWorkprocedureService workprocedureService; + @PostMapping("/queryMaterial") @Log("物料查询") @ApiOperation("物料查询") @@ -336,4 +342,12 @@ public class CacheLineHandController { log.info("海亮缓存线手持服务 [缓存线盘点-缓存线物料信息盘点] 接口被请求, 请求参数-{}", param); return new ResponseEntity<>(cacheLineHandService.getCacheLineMaterialInfo(param), HttpStatus.OK); } + + @PostMapping("/getWorkprocedure") + @Log("工序下拉") + @ApiOperation("工序下拉") + @SaIgnore + public ResponseEntity getWorkprocedure () { + return new ResponseEntity<>(workprocedureService.list(), HttpStatus.OK); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/service/impl/CacheLineHandServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/service/impl/CacheLineHandServiceImpl.java index caf1722d..9336ac5f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/service/impl/CacheLineHandServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/service/impl/CacheLineHandServiceImpl.java @@ -401,6 +401,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService { String vehicle_code = param.getString("vehicle_code"); // 缓存线 String cacheLine_code = param.getString("wcsdevice_code"); + String workprocedure_id = param.getString("workprocedure_id"); String weight = param.getString("weight"); String quantity = param.getString("quantity"); @@ -433,6 +434,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService { json.put("material_id", mater.getMaterial_id()); json.put("weight", weight); json.put("quantity", quantity); + json.put("workprocedure_id", workprocedure_id); //有箱有料 json.put("vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode()); json.put("create_time", DateUtil.now()); @@ -479,7 +481,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService { json.put("weight", "0"); json.put("quantity", "0"); json.put("workprocedure_code", ""); - json.put("workprocedure_name", ""); + json.put("workprocedure_id", ""); json.put("create_time", DateUtil.now()); vehilematerialService.save(json.toJavaObject(SchCachelineVehilematerial.class)); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java index eb0f74f4..11418764 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java @@ -172,6 +172,7 @@ public class SpeEmpTask extends AbstractAcsTask { task.put("update_optname", SecurityUtils.getCurrentNickName()); task.put("create_time", DateUtil.now()); task.put("update_time", DateUtil.now()); + task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_NB.getCode()); task.put("priority", "1");} return task; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java index 7a837950..c1ac69ab 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java @@ -144,6 +144,7 @@ public class SpeFullTask extends AbstractAcsTask { task.put("update_optname", SecurityUtils.getCurrentNickName()); task.put("create_time", DateUtil.now()); task.put("update_time", DateUtil.now()); + task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_NB.getCode()); task.put("priority", "1");} return task; } @@ -218,6 +219,7 @@ public class SpeFullTask extends AbstractAcsTask { if (!CollectionUtils.isEmpty(list)){ cacheLineVechileService.removeByIds(list.stream().map(SchCachelineVehilematerial::getVehmaterial_id).collect(Collectors.toList())); } + PdmProduceWorkorder workorder = workorderService.getOne(new QueryWrapper().eq("workorder_code", task.getTable_fk_id())); SchCachelineVehilematerial vehilematerial = new SchCachelineVehilematerial(); vehilematerial.setCreate_time(DateUtil.now()); vehilematerial.setVehmaterial_id(IdUtil.getStringId()); @@ -227,6 +229,7 @@ public class SpeFullTask extends AbstractAcsTask { vehilematerial.setCacheLine_code(task.getPoint_code1()); vehilematerial.setMaterial_id(task.getMaterial_id()); vehilematerial.setQuantity(task.getMaterial_qty()); + vehilematerial.setWorkprocedure_code(workorder.getWorkprocedure_id()); cacheLineVechileService.save(vehilematerial); } break; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callEmpty/PlotterCallEmptyTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callEmpty/PlotterCallEmptyTask.java index b8859448..2fe8a471 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callEmpty/PlotterCallEmptyTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callEmpty/PlotterCallEmptyTask.java @@ -1,23 +1,42 @@ package org.nl.wms.product_manage.sch.tasks.callEmpty; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; 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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.StatusEnum; +import org.nl.common.enums.WorkerOrderEnum; +import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.scheduler_manage.service.point.ISchBasePointService; +import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Author: lyd @@ -28,104 +47,73 @@ import org.springframework.transaction.annotation.Transactional; @Service public class PlotterCallEmptyTask extends AbstractAcsTask { private static final String OPT_NAME = "刻字机#"; + + @Autowired + private IPdmProduceWorkorderService workorderService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBasePointService pointService; @Autowired private WmsToAcsService wms; @Override @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject task, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONObject taskObj = taskTab.query("task_id = '" + task.getString("task_id") + "' " + - "AND task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " + - "AND task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(taskObj)) { - throw new BadRequestException("任务已完成,不可取消!"); - } - String pointCode1 = taskObj.getString("point_code1"); - JSONObject pointObj = null; - if (ObjectUtil.isNotEmpty(pointCode1)) { - pointObj = pointTab.query("point_code = '" + pointCode1 + "'").uniqueResult(0); - } + public void updateTaskStatus(JSONObject param, String status) { + SchBaseTask task = taskService.getById(param.getString("task_id")); if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { - // 执行中 - // 任务执行中 - taskObj.put("task_status", StatusEnum.TASK_RUNNING.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_RUNNING.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + } + if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { // 完成 - if (ObjectUtil.isNotEmpty(pointObj)) { - // 释放点位并赋值 - pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode()); - pointObj.put("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode()); - pointObj.put("material_id", ""); - pointObj.put("update_time", DateUtil.now()); - pointTab.update(pointObj); - } - // 2任务完成 - taskObj.put("task_status", StatusEnum.TASK_FINISH.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))? - task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode()); - taskTab.update(taskObj); - } else { - /** - * 取消任务 - * 1、点位恢复 - * 2、任务状态修改 - */ - // 2点位恢复 - if (ObjectUtil.isNotEmpty(pointObj)) { - // 释放点位 - pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode()); - pointObj.put("update_time", DateUtil.now()); - pointTab.update(pointObj); - } - // 2任务取消 - taskObj.put("task_status", StatusEnum.TASK_CANNEL.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))? - task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode()); - taskTab.update(taskObj); + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_FINISH.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_OFF.getCode()) + .in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3())); + } + if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) { + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_OFF.getCode()) + .in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3())); } } @Override @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject param) { - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_produce_workOrder"); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - String end_point_code = param.getString("device_code"); - String workorder = param.getString("workorder_code"); - if(StrUtil.isEmpty(end_point_code)) { - throw new BadRequestException("终点不能为空!"); - } - if(StrUtil.isEmpty(workorder)) { - throw new BadRequestException("工单不能为空!"); - } - // 判断当前点是否有未完成的任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + end_point_code + "' " + - "and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " + - "and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) { - throw new BadRequestException("当前点位" + end_point_code + "存在未完成的任务"); - } - // 判断工单 - JSONObject workOrderObj = workOrderTab.query("workorder_code = '" + workorder + "' and workorder_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' and is_delete ='0'").uniqueResult(0); - if (ObjectUtil.isEmpty(workOrderObj)){ - throw new BadRequestException("下发工单不存在未完成工单:"+workorder); + String start_point_code = param.getString("device_code"); + PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper() + .eq("workorder_code", param.getString("workorder_code")) + .eq("is_delete", false) + .lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode())); + Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code"))); + //?刻字满料请求:可以存在多个任务? + List list = taskService.list(new QueryWrapper() + .eq("point_code1", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode()) + ); + if (!CollectionUtils.isEmpty(list)){ + throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code"))); } // 查找任务状态 - String taskdtl_id = IdUtil.getSnowflake(1, 1).nextIdStr(); + String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; JSONObject task = new JSONObject(); task.put("task_id", taskdtl_id); + task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc()); + task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode()); task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - task.put("task_name", AcsTaskEnum.TASK_PLOTTER_EMPTY.getDesc()); - task.put("task_type", AcsTaskEnum.TASK_PLOTTER_EMPTY.getCode()); task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode()); + task.put("material_id", order.getMaterial_id()); task.put("task_status", StatusEnum.TASK_CREATE.getCode()); - task.put("material_id", workOrderObj.getString("material_id")); - task.put("point_code2", end_point_code); + task.put("point_code1", start_point_code); task.put("handle_class", this.getClass().getName()); task.put("is_delete", StatusEnum.STATUS_FLASE.getCode()); String currentUserId = SecurityUtils.getCurrentUserId(); @@ -137,57 +125,77 @@ public class PlotterCallEmptyTask extends AbstractAcsTask { task.put("update_time", DateUtil.now()); task.put("priority", "1"); task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode()); - WQLObject.getWQLObject("SCH_BASE_Task").insert(task); + task.put("table_fk_id",order.getWorkorder_code()); + SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); + taskService.save(schBaseTask); // 找终点 try { pointConfirm(task); JSONArray data = new JSONArray(); - JSONObject result = taskTab.query("task_id = '" + taskdtl_id + "'").uniqueResult(0); - data.add(result); + data.add(task); // 下发 wms.issueTaskToAcs2(data); } catch (Exception ex) { - // 未找到 - task.put("remark", ex.getMessage()); - task.put("task_status", StatusEnum.TASK_START_ERROR.getCode()); - task.put("update_time", DateUtil.now()); - taskTab.update(task); + log.error("刻字请求异常,error:{}",ex); + schBaseTask.setRemark(ex.getMessage()); + schBaseTask.setUpdate_time(new Date()); + schBaseTask.setUpdate_name("acs"); + schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode()); + taskService.save(schBaseTask); } return taskdtl_id; } @Override public void cancel(String task_id) { - + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task_id)); } /** - * 呼叫空框 - * 从缓存区获取空框 - * @param taskObj + * 满料请求 + * 从刻字机满料缓存区中获取空位放入就行 + * @param taskObj: 任务对象 */ @Override public void pointConfirm(JSONObject taskObj) { - log.info(OPT_NAME+"callEmptyVehicle param:{}",JSONObject.toJSONString(taskObj)); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - // 去刻字缓存区找空盘 - JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" + - StatusEnum.POINT_STATUS_EMPTY_VEHICLE.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() + - "' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" + - StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point)) { - // 找到位置 - // 点位上锁 - point.put("lock_type", StatusEnum.LOCK_ON.getCode()); - pointTab.update(point); - // 任务修改 - taskObj.put("point_code1", point.getString("point_code")); - taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode()); + // 去刻字缓存区寻找空框 TODO:空箱 + List> points = pointService.queryVehicle( + MapOf.of("is_used", "1", + "lock_type", StatusEnum.LOCK_OFF.getCode(), + "region_code", "A1_KZHC", + "material_null", "material_null")); + if (ObjectUtil.isNotEmpty(points)) { + Map map = points.get(0); + if (CollectionUtils.isEmpty(map)|| StringUtils.isEmpty(map.get("point_code"))){ + throw new BadRequestException("刻字缓存区没有可用货位."); + } + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_ON.getCode()) + .eq("point_code",map.get("point_code"))); + // 设置点位 taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); + taskObj.put("point_code2",map.get("point_code")); + SchBaseTask schBaseTask = taskObj.toJavaObject(SchBaseTask.class); + schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode()); + schBaseTask.setUpdate_time(new Date()); + taskService.updateById(schBaseTask); } else { - throw new BadRequestException("刻字缓存区没有可用空框."); + throw new BadRequestException("刻字缓存区没有可用货位."); } } + + @Override + public List schedulerTask(List tasks) { + ArrayList Merge = new ArrayList<>(); + if (!CollectionUtils.isEmpty(tasks)){ + for (SchBaseTask task : tasks) { + task.setTask_group_id(org.nl.common.utils.IdUtil.getStringId()); + Merge.add(task); + } + } + return Merge; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/PlotterCallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/PlotterCallMaterialTask.java new file mode 100644 index 00000000..0b51d7d6 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/PlotterCallMaterialTask.java @@ -0,0 +1,199 @@ +package org.nl.wms.product_manage.sch.tasks.callMaterial; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.enums.AcsTaskEnum; +import org.nl.common.enums.StatusEnum; +import org.nl.common.enums.WorkerOrderEnum; +import org.nl.common.utils.MapOf; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.scheduler_manage.service.point.ISchBasePointService; +import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 刻字机送料 + * @Date: 2023/4/3 + */ +@Slf4j +@Service +public class PlotterCallMaterialTask extends AbstractAcsTask { + @Autowired + private IPdmProduceWorkorderService workorderService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBasePointService pointService; + @Autowired + private WmsToAcsService wms; + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject param, String status) { + SchBaseTask task = taskService.getById(param.getString("task_id")); + if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_RUNNING.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + } + if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { + // 完成 + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_FINISH.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_OFF.getCode()) + .in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3())); + } + if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) { + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_OFF.getCode()) + .in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3())); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject param) { + String start_point_code = param.getString("device_code"); + PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper() + .eq("workorder_code", param.getString("workorder_code")) + .eq("is_delete", false) + .lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode())); + Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code"))); + //?刻字满料请求:可以存在多个任务? + List list = taskService.list(new QueryWrapper() + .eq("point_code1", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode()) + ); + if (!CollectionUtils.isEmpty(list)){ + throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code"))); + } + // 查找任务状态 + String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + JSONObject task = new JSONObject(); + task.put("task_id", taskdtl_id); + task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc()); + task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode()); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode()); + task.put("material_id", order.getMaterial_id()); + task.put("task_status", StatusEnum.TASK_CREATE.getCode()); + task.put("point_code1", start_point_code); + task.put("handle_class", this.getClass().getName()); + task.put("is_delete", StatusEnum.STATUS_FLASE.getCode()); + String currentUserId = SecurityUtils.getCurrentUserId(); + task.put("create_id", currentUserId); + task.put("create_name", SecurityUtils.getCurrentNickName()); + task.put("update_id", currentUserId); + task.put("update_name", SecurityUtils.getCurrentNickName()); + task.put("create_time", DateUtil.now()); + task.put("update_time", DateUtil.now()); + task.put("priority", "1"); + task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode()); + task.put("table_fk_id",order.getWorkorder_code()); + SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); + taskService.save(schBaseTask); + // 找终点 + try { + pointConfirm(task); + JSONArray data = new JSONArray(); + data.add(task); + // 下发 + wms.issueTaskToAcs2(data); + } catch (Exception ex) { + log.error("刻字请求异常,error:{}",ex); + schBaseTask.setRemark(ex.getMessage()); + schBaseTask.setUpdate_time(new Date()); + schBaseTask.setUpdate_name("acs"); + schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode()); + taskService.save(schBaseTask); + } + return taskdtl_id; + } + + @Override + public void cancel(String task_id) { + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task_id)); + } + + /** + * 满料请求 + * 从刻字机满料缓存区中获取空位放入就行 + * @param taskObj: 任务对象 + */ + @Override + public void pointConfirm(JSONObject taskObj) { + // 去刻字缓存区寻找空位 + List> points = pointService.queryVehicle( + MapOf.of("is_used", "1", + "lock_type", StatusEnum.LOCK_OFF.getCode(), + "region_code", "A1_KZHC", + "material_id", taskObj.getString("material_id"))); + if (ObjectUtil.isNotEmpty(points)) { + Map map = points.get(0); + if (CollectionUtils.isEmpty(map)|| StringUtils.isEmpty(map.get("point_code"))){ + throw new BadRequestException("刻字缓存区没有可用货位."); + } + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_ON.getCode()) + .eq("point_code",map.get("point_code"))); + // 设置点位 + taskObj.put("update_time", DateUtil.now()); + taskObj.put("point_code2",map.get("point_code")); + SchBaseTask schBaseTask = taskObj.toJavaObject(SchBaseTask.class); + schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode()); + schBaseTask.setUpdate_time(new Date()); + taskService.updateById(schBaseTask); + } else { + throw new BadRequestException("刻字缓存区没有可用货位."); + } + } + + @Override + public List schedulerTask(List tasks) { + ArrayList Merge = new ArrayList<>(); + if (!CollectionUtils.isEmpty(tasks)){ + for (SchBaseTask task : tasks) { + task.setTask_group_id(org.nl.common.utils.IdUtil.getStringId()); + Merge.add(task); + } + } + return Merge; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterCallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterCallMaterialTask.java deleted file mode 100644 index 5ef41a1f..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterCallMaterialTask.java +++ /dev/null @@ -1,202 +0,0 @@ -package org.nl.wms.product_manage.sch.tasks.sendMaterial; - -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.extern.slf4j.Slf4j; -import org.nl.common.enums.AcsTaskEnum; -import org.nl.common.enums.StatusEnum; -import org.nl.common.utils.SecurityUtils; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.modules.system.util.CodeUtil; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.ext.acs.service.WmsToAcsService; -import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -/** - * @Author: lyd - * @Description: 刻字机送料 - * @Date: 2023/4/3 - */ -@Slf4j -@Service -public class PlotterCallMaterialTask extends AbstractAcsTask { - private static final String OPT_NAME = "刻字机#"; - @Autowired - private WmsToAcsService wms; - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject task, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONObject taskObj = taskTab.query("task_id = '" + task.getString("task_id") + "' " + - "AND task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " + - "AND task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(taskObj)) { - throw new BadRequestException("任务已完成,不可取消!"); - } - String pointCode2 = taskObj.getString("point_code2"); - JSONObject pointObj = null; - if (ObjectUtil.isNotEmpty(pointCode2)) { - pointObj = pointTab.query("point_code = '" + pointCode2 + "'").uniqueResult(0); - } - if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { - // 执行中 - // 任务执行中 - taskObj.put("task_status", StatusEnum.TASK_RUNNING.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { - // 完成 - if (ObjectUtil.isNotEmpty(pointObj)) { - // 释放点位并赋值 - pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode()); - pointObj.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode()); - pointObj.put("material_id", taskObj.getString("material_id")); - pointObj.put("update_time", DateUtil.now()); - pointTab.update(pointObj); - // todo: 是否需要记录库存 - } - // 2任务完成 - taskObj.put("task_status", StatusEnum.TASK_FINISH.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))? - task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode()); - taskTab.update(taskObj); - } else { - /** - * 取消任务 - * 1、点位恢复 - * 2、任务状态修改 - */ - // 2点位恢复 - if (ObjectUtil.isNotEmpty(pointObj)) { - // 释放点位 - pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode()); - pointObj.put("update_time", DateUtil.now()); - pointTab.update(pointObj); - } - // 2任务取消 - taskObj.put("task_status", StatusEnum.TASK_CANNEL.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))? - task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode()); - taskTab.update(taskObj); - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject param) { - /** - * 1.刻字机缺料请求 or 定时任务查询刻字机工单 - * 2.生成刻字机任务 - * 3.根据工单物料生成半成品出库任务:自动下发叫料 - * 4.半成品出库任务完成之后: - * 触发刻字机任务: - * 1.查看当前所有刻字机工单:获取当前刻字机Math.min(缺料数,倒料可倒数量) - * 2.待确认:类似深坑那样一次给多台设备,还是一个设备一个设备的给 - */ - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_produce_workOrder"); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - String start_point_code = param.getString("device_code"); - String workorder = param.getString("workorder_code"); - if(StrUtil.isEmpty(start_point_code)) { - throw new BadRequestException("起点不能为空!"); - } - // 判断当前点是否有未完成的任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + start_point_code + "' " + - "and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " + - "and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) { - throw new BadRequestException("当前点位" + start_point_code + "存在未完成的任务"); - } - if(StrUtil.isEmpty(workorder)) { - throw new BadRequestException("工单不能为空!"); - } - // 判断工单 - JSONObject workOrderObj = workOrderTab.query("workorder_code = '" + workorder + "' and workorder_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' and is_delete ='0'").uniqueResult(0); - if (ObjectUtil.isEmpty(workOrderObj)){ - throw new BadRequestException("下发工单不存在未完成工单:"+workorder); - } - // 查找任务状态 - String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - JSONObject task = new JSONObject(); - task.put("task_id", taskdtl_id); - task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc()); - task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode()); - task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20.getCode()); - task.put("material_id", workOrderObj.getString("material_id")); - task.put("task_status", StatusEnum.TASK_CREATE.getCode()); - task.put("point_code1", start_point_code); - task.put("handle_class", this.getClass().getName()); - task.put("is_delete", StatusEnum.STATUS_FLASE.getCode()); - String currentUserId = SecurityUtils.getCurrentUserId(); - task.put("create_id", currentUserId); - task.put("create_name", SecurityUtils.getCurrentNickName()); - task.put("update_id", currentUserId); - task.put("update_name", SecurityUtils.getCurrentNickName()); - task.put("create_time", DateUtil.now()); - task.put("update_time", DateUtil.now()); - task.put("priority", "1"); - task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode()); - WQLObject.getWQLObject("SCH_BASE_Task").insert(task); - // 找终点 - try { - pointConfirm(task); - JSONArray data = new JSONArray(); - JSONObject result = taskTab.query("task_id = '" + taskdtl_id + "'").uniqueResult(0); - data.add(result); - // 下发 - wms.issueTaskToAcs2(data); - } catch (Exception ex) { - // 未找到 - task.put("remark", ex.getMessage()); - task.put("update_time", DateUtil.now()); - task.put("task_status", StatusEnum.TASK_START_ERROR.getCode()); - taskTab.update(task); - } - return taskdtl_id; - } - - @Override - public void cancel(String task_id) { - } - - /** - * 满料请求 - * 从刻字机满料缓存区中获取空位放入就行 - * @param taskObj: 任务对象 - */ - @Override - public void pointConfirm(JSONObject taskObj) { - log.info(OPT_NAME+"fullMaterial param:{}",JSONObject.toJSONString(taskObj)); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - // 去刻字缓存区寻找空位 - JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" + - StatusEnum.POINT_STATUS_EMPTY.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() + - "' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" + - StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point)) { - // 找到位置 - // 点位上锁 - point.put("lock_type", StatusEnum.LOCK_ON.getCode()); - pointTab.update(point); - // 设置点位 - taskObj.put("point_code2", point.getString("point_code")); - taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else { - throw new BadRequestException("刻字缓存区没有可用货位."); - } - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterSendMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterSendMaterialTask.java index bca192c2..fc16c3ad 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterSendMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterSendMaterialTask.java @@ -1,23 +1,40 @@ package org.nl.wms.product_manage.sch.tasks.sendMaterial; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.StatusEnum; +import org.nl.common.enums.WorkerOrderEnum; +import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; +import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; +import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.scheduler_manage.service.point.ISchBasePointService; +import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; /** * @Author: lyd @@ -27,167 +44,151 @@ import org.springframework.transaction.annotation.Transactional; @Slf4j @Service public class PlotterSendMaterialTask extends AbstractAcsTask { - private static final String OPT_NAME = "刻字机#"; + @Autowired + private IPdmProduceWorkorderService workorderService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBasePointService pointService; @Autowired private WmsToAcsService wms; @Override + @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject task, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONObject taskObj = taskTab.query("task_id = '" + task.getString("task_id") + "' " + - "AND task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " + - "AND task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(taskObj)) { - throw new BadRequestException("任务已完成,不可取消!"); - } - String pointCode2 = taskObj.getString("point_code2"); - JSONObject pointObj = null; - if (ObjectUtil.isNotEmpty(pointCode2)) { - pointObj = pointTab.query("point_code = '" + pointCode2 + "'").uniqueResult(0); - } + public void updateTaskStatus(JSONObject param, String status) { + SchBaseTask task = taskService.getById(param.getString("task_id")); if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { - // 执行中 - // 任务执行中 - taskObj.put("task_status", StatusEnum.TASK_RUNNING.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_RUNNING.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + } + if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { // 完成 - if (ObjectUtil.isNotEmpty(pointObj)) { - // 释放点位并赋值 - pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode()); - pointObj.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode()); - pointObj.put("material_id", taskObj.getString("material_id")); - pointObj.put("update_time", DateUtil.now()); - pointTab.update(pointObj); - // todo: 是否需要记录库存 - } - // 2任务完成 - taskObj.put("task_status", StatusEnum.TASK_FINISH.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))? - task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode()); - taskTab.update(taskObj); - } else { - /** - * 取消任务 - * 1、点位恢复 - * 2、任务状态修改 - */ - // 2点位恢复 - if (ObjectUtil.isNotEmpty(pointObj)) { - // 释放点位 - pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode()); - pointObj.put("update_time", DateUtil.now()); - pointTab.update(pointObj); - } - // 2任务取消 - taskObj.put("task_status", StatusEnum.TASK_CANNEL.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))? - task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode()); - taskTab.update(taskObj); + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_FINISH.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_OFF.getCode()) + .in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3())); + } + if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) { + // 完成 + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_OFF.getCode()) + .in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3())); } } @Override @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject param) { - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_produce_workOrder"); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); String start_point_code = param.getString("device_code"); - String workorder = param.getString("workorder_code"); - if(StrUtil.isEmpty(start_point_code)) { - throw new BadRequestException("起点不能为空!"); - } - // 判断当前点是否有未完成的任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + start_point_code + "' " + - "and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " + - "and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) { - throw new BadRequestException("当前点位" + start_point_code + "存在未完成的任务"); - } - if(StrUtil.isEmpty(workorder)) { - throw new BadRequestException("工单不能为空!"); - } - // 判断工单 - JSONObject workOrderObj = workOrderTab.query("workorder_code = '" + workorder + "' and workorder_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' and is_delete ='0'").uniqueResult(0); - if (ObjectUtil.isEmpty(workOrderObj)){ - throw new BadRequestException("下发工单不存在未完成工单:"+workorder); + PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper() + .eq("workorder_code", param.getString("workorder_code")) + .eq("is_delete", false) + .lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode())); + Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code"))); + //?刻字满料请求:可以存在多个任务? + List list = taskService.list(new QueryWrapper() + .eq("point_code1", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode()) + ); + if (!CollectionUtils.isEmpty(list)){ + throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code"))); } // 查找任务状态 - String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String taskdtl_id = IdUtil.getStringId(); JSONObject task = new JSONObject(); task.put("task_id", taskdtl_id); task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc()); task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode()); task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20.getCode()); - task.put("material_id", workOrderObj.getString("material_id")); - task.put("task_status", StatusEnum.TASK_CREATE.getCode()); + task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode()); + task.put("material_id", order.getMaterial_id()); + task.put("task_status", TaskStatusEnum.CREATED.getCode()); task.put("point_code1", start_point_code); task.put("handle_class", this.getClass().getName()); task.put("is_delete", StatusEnum.STATUS_FLASE.getCode()); String currentUserId = SecurityUtils.getCurrentUserId(); task.put("create_id", currentUserId); task.put("create_name", SecurityUtils.getCurrentNickName()); - task.put("update_id", currentUserId); - task.put("update_name", SecurityUtils.getCurrentNickName()); task.put("create_time", DateUtil.now()); - task.put("update_time", DateUtil.now()); task.put("priority", "1"); + task.put("finished_type", "1"); task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode()); - WQLObject.getWQLObject("SCH_BASE_Task").insert(task); + task.put("table_fk_id",order.getWorkorder_code()); + SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); + taskService.save(schBaseTask); // 找终点 try { pointConfirm(task); JSONArray data = new JSONArray(); - JSONObject result = taskTab.query("task_id = '" + taskdtl_id + "'").uniqueResult(0); - data.add(result); + data.add(task); // 下发 wms.issueTaskToAcs2(data); } catch (Exception ex) { // 未找到 - task.put("remark", ex.getMessage()); - task.put("update_time", DateUtil.now()); - task.put("task_status", StatusEnum.TASK_START_ERROR.getCode()); - taskTab.update(task); + log.error("刻字满料请求异常,error:{}",ex); + schBaseTask.setRemark(ex.getMessage()); + schBaseTask.setUpdate_time(new Date()); + schBaseTask.setUpdate_name("acs"); + schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode()); + taskService.save(schBaseTask); } return taskdtl_id; } @Override public void cancel(String task_id) { + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task_id)); } /** * 满料请求 * 从刻字机满料缓存区中获取空位放入就行 - * @param taskObj: 任务对象 */ @Override - public void pointConfirm(JSONObject taskObj) { - log.info(OPT_NAME+"fullMaterial param:{}",JSONObject.toJSONString(taskObj)); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + public void pointConfirm(JSONObject task) { // 去刻字缓存区寻找空位 - JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" + - StatusEnum.POINT_STATUS_EMPTY.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() + - "' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" + - StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point)) { + List list = pointService.list(new QueryWrapper().isNull("vehicle_code") + .eq("is_used", "1") + .eq("lock_type", StatusEnum.LOCK_OFF.getCode())); + + if (ObjectUtil.isNotEmpty(list)) { // 找到位置 // 点位上锁 - point.put("lock_type", StatusEnum.LOCK_ON.getCode()); - pointTab.update(point); + SchBasePoint point = list.get(0); + point.setLock_type(StatusEnum.LOCK_ON.getCode()); + pointService.updateById(point); // 设置点位 - taskObj.put("point_code2", point.getString("point_code")); - taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); + task.put("update_time", DateUtil.now()); + task.put("point_code2",point.getPoint_code()); + SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); + schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode()); + schBaseTask.setUpdate_time(new Date()); + taskService.updateById(schBaseTask); } else { throw new BadRequestException("刻字缓存区没有可用货位."); } } + + @Override + public List schedulerTask(List tasks) { + ArrayList Merge = new ArrayList<>(); + if (!CollectionUtils.isEmpty(tasks)){ + for (SchBaseTask task : tasks) { + task.setTask_group_id(IdUtil.getStringId()); + Merge.add(task); + } + } + return Merge; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/mapper/PdmBiDeviceMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/mapper/PdmBiDeviceMapper.xml index 4e34ec66..83a51154 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/mapper/PdmBiDeviceMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/mapper/PdmBiDeviceMapper.xml @@ -31,11 +31,12 @@ from sch_base_point left join pdm_bi_device on pdm_bi_device.device_code = sch_base_point.device_code left JOIN sch_base_task ON sch_base_point.point_code = point_code2 and '7' > task_status + left JOIN pdm_produce_workorder on pdm_bi_device.device_code = pdm_produce_workorder.device_code and pdm_produce_workorder.workorder_status in ('3','4') where sch_base_point.point_type = '4' and pdm_bi_device.is_used = true - and workprocedure_id = #{workprocedure_id} + and pdm_bi_device.workprocedure_id = #{workprocedure_id} - and (pdm_bi_device.material_id = #{material_id} or pdm_bi_device.material_id is null or pdm_bi_device.material_id = '') + and pdm_produce_workorder.material_id = #{material_id} GROUP BY pdm_bi_device.device_code HAVING currentQty > #{qty} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java index f49943d9..920c2e42 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java @@ -581,9 +581,12 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl() +// .set("spec",order.getString("material_spec")) +// .eq("device_code",order.getString("device_code"))); array.add(order); //下发acs - PdmProduceWorkorder workOrder = this.getOne(new QueryWrapper().eq("workorder_id", param.getString("workorder_id"))); workOrder.setWorkorder_status(WorkerOrderEnum.PRODUCTING.getCode()); workOrder.setRealproducestart_date(DateUtil.now()); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/SchCachelineVehilematerial.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/SchCachelineVehilematerial.java index dff414eb..0e3acc69 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/SchCachelineVehilematerial.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/SchCachelineVehilematerial.java @@ -57,12 +57,12 @@ public class SchCachelineVehilematerial implements Serializable { /** * 工序编号 */ - private String workprocedure_code; + private String workprocedure_id; /** * 工序名称 */ - private String workprocedure_name; + private String workprocedure_code; /** * 物料标识 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelinePositionMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelinePositionMapper.xml index 0ba7cc41..4681a8c2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelinePositionMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelinePositionMapper.xml @@ -10,8 +10,9 @@ scp.vehicle_code, scp.layer_num, scp.positionorder_no as seat_order_num, - sch_cacheline_vehilematerial.workprocedure_code, - sch_cacheline_vehilematerial.workprocedure_name, + sch_cacheline_vehilematerial.workprocedure_id, + wp.workprocedure_code, + wp.workprocedure_name, sch_cacheline_vehilematerial.material_id as material_uuid, mb.material_code, mb.material_name, @@ -23,6 +24,7 @@ sch_cacheline_position scp LEFT JOIN sch_cacheline_vehilematerial ON scp.vehicle_code = sch_cacheline_vehilematerial.vehicle_code LEFT JOIN md_me_materialbase mb ON mb.material_id = sch_cacheline_vehilematerial.material_id + LEFT JOIN pdm_bi_workprocedure wp ON wp.workprocedure_id = sch_cacheline_vehilematerial.workprocedure_id scp.cacheline_code = #{map.cacheline_code} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehilematerialMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehilematerialMapper.xml index 2c4a4415..f1841706 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehilematerialMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehilematerialMapper.xml @@ -37,5 +37,8 @@ and v.material_id = #{material_id} + + and v.workprocedure_id = #{workprocedure_id} + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/ISchBasePointService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/ISchBasePointService.java index c1a8dc30..3e0331ce 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/ISchBasePointService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/ISchBasePointService.java @@ -21,8 +21,11 @@ import java.util.Map; public interface ISchBasePointService extends IService { Object queryAll(Map whereJson, PageQuery page); + Object queryVehicle(Map whereJson, PageQuery page); + List> queryVehicle(Map query); + /** * * 获取点位 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.xml index ce043f94..d218c09d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.xml @@ -154,6 +154,7 @@ region.region_name, ma.material_name, ma.material_code, + vehicle.material_id, ma.material_spec FROM sch_base_point point @@ -166,6 +167,13 @@ and point.region_code = #{region_code} + + and vehicle.material_id = #{material_id} + + + point.vehicle_code is not null and point.vehicle_code ]]> '' + and (vehicle.material_id is null or vehicle.material_id = '') + and point.point_type = #{point_type} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java index edf0ad4b..4f967c7e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java @@ -89,7 +89,7 @@ public class SchBasePointServiceImpl extends ServiceImpl page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize()); page.setOrderBy("point_code asc"); - List list = schBasePointMapper.queryVehicle(whereJson); + List> list = this.queryVehicle(whereJson); list.forEach(a->{ a.put("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode()); if (a.get("vehicle_code")!=null){ @@ -104,6 +104,11 @@ public class SchBasePointServiceImpl extends ServiceImpl> queryVehicle(Map query) { + return schBasePointMapper.queryVehicle(query); + } + @Override public Object selectPoint(Map query, PageQuery pageQuery) { Page page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize()); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/dao/SchBaseTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/dao/SchBaseTask.java index 25867d37..e6aaff58 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/dao/SchBaseTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/dao/SchBaseTask.java @@ -238,9 +238,15 @@ public class SchBaseTask implements Serializable { */ private Date update_time; /** - * 修改时间 + * 料箱列表 */ private String barcodeArr; + /** + * 料箱数量列表 + */ + private String qtyArr; + + } diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml index 02070dd5..d2208a4c 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml @@ -23,11 +23,11 @@ spring: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy # url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false - url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false -# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false +# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false username: ${DB_USER:root} # password: ${DB_PWD:123456} - password: ${DB_PWD:123456} + password: ${DB_PWD:942464Yy} # 初始连接数 initial-size: 5 diff --git a/mes/qd/src/api/wms/basedata/master/mdPbMeasureunit.js b/mes/qd/src/api/wms/basedata/master/mdPbMeasureunit.js index 0565b609..7231b8c8 100644 --- a/mes/qd/src/api/wms/basedata/master/mdPbMeasureunit.js +++ b/mes/qd/src/api/wms/basedata/master/mdPbMeasureunit.js @@ -26,7 +26,7 @@ export function edit(data) { export function getUnit(params) { return request({ - url: 'api/mdPbMeasureunit/getUnit', + url: 'api/mdPbMeasureunit', method: 'get', params }) diff --git a/mes/qd/src/views/wms/pdm/device/index.vue b/mes/qd/src/views/wms/pdm/device/index.vue index 4993f350..4132c00e 100644 --- a/mes/qd/src/views/wms/pdm/device/index.vue +++ b/mes/qd/src/views/wms/pdm/device/index.vue @@ -121,8 +121,8 @@ /> - - + + @@ -169,7 +169,7 @@ - + diff --git a/mes/qd/src/views/wms/scheduler_manage/task/index.vue b/mes/qd/src/views/wms/scheduler_manage/task/index.vue index 94a2e788..7af393d4 100644 --- a/mes/qd/src/views/wms/scheduler_manage/task/index.vue +++ b/mes/qd/src/views/wms/scheduler_manage/task/index.vue @@ -324,16 +324,15 @@ export default { // this.crud.toQuery() }, methods: { + [CRUD.HOOK.afterRefresh]() { + crudTask.undo().then(res => { + this.undo = res + }) + }, initClass1() { const param = { parent_class_code: 'task_type' } - crudClassstandard.getClassType(param).then(res => { - console.log(res) - const data = res.content - this.buildTree(data) - this.classes1 = data - }) }, taskScheduler() { crudTask.scheduler().then(res => { From c09c3c926ead219c53e4d958cc686d34fb793270 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 27 Jun 2023 09:09:12 +0800 Subject: [PATCH 2/5] =?UTF-8?q?rev=EF=BC=9A=E5=8D=8A=E6=88=90=E5=93=81?= =?UTF-8?q?=E6=8B=BC=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/common/enums/AcsTaskEnum.java | 3 +- .../org/nl/wms/storage_manage/IOSEnum.java | 2 +- .../storage_manage/semimanage/TASKEnum.java | 4 + .../StIvtShutframeinvBcpController.java | 15 +- .../IStIvtShutframeinvBcpService.java | 2 + .../shutFrame/dao/StIvtShutframedtlBcp.java | 2 + .../mapper/xml/StIvtShutframeinvBcpMapper.xml | 1 + .../impl/StIvtShutframedtlBcpServiceImpl.java | 28 +- .../impl/StIvtShutframeinvBcpServiceImpl.java | 257 +++++++++++++++--- .../semiproductShutFrame/AddDialog.vue | 6 +- 10 files changed, 280 insertions(+), 40 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java index 4a9cc7d1..31c32c7d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java @@ -36,7 +36,8 @@ public enum AcsTaskEnum { TASK_STRUCT_IN("9","入库-生产入库"), TASK_STRUCT_OUT("10","出库-生产出库"), TASK_STRUCT_CHECK("14","盘点任务"), - TASK_STRUCT_SHUT("15","拼盘任务"), + TASK_STRUCT_SHUT("15","拼盘任务出"), + TASK_STRUCT_SHUT_IN("16","拼盘任务入"), TASK_STRUCT_CP_IN("11","入库-成品-生产入库"), TASK_STRUCT_CP_OUT("12","出库-成品-生产出库"), TASK_STRUCT_CP_CHECK("13","成品-盘点"), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java index 09445b0e..a27e9273 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java @@ -31,7 +31,7 @@ public enum IOSEnum { //订单/发货单 状态 ORDER_STATUS(MapOf.of("生成", "10", "提交", "20", "发货中", "30", "确认", "99")), //锁定类型 - LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2","盘点锁", "3","损溢锁", "4","其他锁","99")), + LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2","盘点锁", "3","损溢锁", "4","拼盘锁","5","其他锁","99")), ; private Map code; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/TASKEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/TASKEnum.java index e9a59faa..1d3d8057 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/TASKEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/TASKEnum.java @@ -36,6 +36,10 @@ public enum TASKEnum implements FunctionStrategy { IStIvtShutframeinvBcpService bean = SpringContextHolder.getBean(IStIvtShutframeinvBcpService.class); bean.taskOperate(form); }), + SHUT_TASK_IN(type -> AcsTaskEnum.TASK_STRUCT_SHUT_IN.getCode().equals(type), form -> { + IStIvtShutframeinvBcpService bean = SpringContextHolder.getBean(IStIvtShutframeinvBcpService.class); + bean.taskOperate2(form); + }), CP_IN_TASK(type -> AcsTaskEnum.TASK_STRUCT_CP_IN.getCode().equals(type), form -> { IStIvtIostorinvCpService bean = SpringContextHolder.getBean(IStIvtIostorinvCpService.class); bean.taskOperate(form); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/shutFrame/StIvtShutframeinvBcpController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/shutFrame/StIvtShutframeinvBcpController.java index 780a7c04..a78945bf 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/shutFrame/StIvtShutframeinvBcpController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/shutFrame/StIvtShutframeinvBcpController.java @@ -1,6 +1,7 @@ package org.nl.wms.storage_manage.semimanage.controller.shutFrame; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.ApiOperation; import org.nl.common.anno.Log; @@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.*; */ @RestController @RequestMapping("api/shutframe") +@SaIgnore public class StIvtShutframeinvBcpController { @Autowired @@ -75,11 +77,20 @@ public class StIvtShutframeinvBcpController { } @PostMapping("/confirm") - @Log("拼盘确认") - @ApiOperation("拼盘确认") + @Log("强制确认") + @ApiOperation("强制确认") public ResponseEntity confirm(@RequestBody JSONObject jo) { shutframeinvBcpService.confirm(jo); return new ResponseEntity<>(HttpStatus.OK); } + + @PostMapping("/confirmOne") + @Log("一体机拼盘确认") + @ApiOperation("一体机拼盘确认") + @SaIgnore + public ResponseEntity confirmOne(@RequestBody JSONObject jo) { + shutframeinvBcpService.confirmOne(jo); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java index 5676ee57..f579b299 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java @@ -40,5 +40,7 @@ public interface IStIvtShutframeinvBcpService extends IService + order by mst.create_time DESC diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframedtlBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframedtlBcpServiceImpl.java index c3fbefba..f1962123 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframedtlBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframedtlBcpServiceImpl.java @@ -2,15 +2,18 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.nl.common.utils.IdUtil; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.product_manage.service.teamcorrPerson.dao.PdmBiTeamcorrperson; import org.nl.wms.storage_manage.IOSEnum; import org.nl.wms.storage_manage.SHUTEnum; import org.nl.wms.storage_manage.rawmanage.service.iostorInv.dao.StIvtIostorinvdtlYl; @@ -21,7 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.Comparator; import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; /** *

@@ -39,6 +45,11 @@ public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl list = rows.stream() + .sorted(Comparator.comparing(row -> ((JSONObject) row).getString("canuse_qty")).reversed()).collect(Collectors.toList()); + rows = JSONArray.parseArray(JSON.toJSONString(list)); + StIvtStructattr first_struct = null; StIvtStructattr last_struct = null; int total_qty = 1; @@ -77,7 +88,7 @@ public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("拼盘锁")) + .eq(StIvtStructattr::getStruct_id, dtl.getTurnin_struct_id()) + ); + + structattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("拼盘锁")) + .eq(StIvtStructattr::getStruct_id, dtl.getTurnout_struct_id()) + ); + } } return total_qty--; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframeinvBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframeinvBcpServiceImpl.java index 50560eec..1d5999e7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframeinvBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframeinvBcpServiceImpl.java @@ -2,8 +2,11 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -24,8 +27,13 @@ import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; import org.nl.wms.product_manage.sch.service.TaskService; import org.nl.wms.scheduler_manage.service.point.ISchBasePointService; import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; @@ -46,6 +54,7 @@ import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivt import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.mapper.StIvtStructivtBcpMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; @@ -76,6 +85,8 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl().eq("task_id", task_id)); - String point_code = task.getPoint_code2(); + /* String point_code = task.getPoint_code2(); String vehicle_code = task.getVehicle_code(); pointService.update(new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, point_code) - .set(SchBasePoint::getVehicle_code, vehicle_code)); + .set(SchBasePoint::getVehicle_code, vehicle_code));*/ - List task_list = taskService.list(new QueryWrapper() - .eq("task_group_id", task.getTask_group_id()) - .ne("task_status", StatusEnum.TASK_FINISH) - .eq("is_delete", false)); - - if (task_list.size() <= 0) { - all_finish = true; - } - List list = shutframedtlBcpService.list(new QueryWrapper().eq("task_id", task.getTask_group_id())); StIvtShutframedtlBcp dtl = list.get(0); @@ -123,32 +125,170 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl() .eq("task_id", task.getTask_group_id()) .set("work_status", SHUTEnum.WORK_STATUS.code("移出中"))); - } - if (work_status.equals(SHUTEnum.WORK_STATUS.code("移出确认")) || work_status.equals(SHUTEnum.WORK_STATUS.code("移回中"))) { - shutframedtlBcpService.update(new UpdateWrapper() - .eq("task_id", task.getTask_group_id()) - .set("work_status", SHUTEnum.WORK_STATUS.code("移回中"))); + + // 更新任务为执行中 + taskService.update( + new UpdateWrapper().lambda() + .set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) + .eq(SchBaseTask::getTask_id, task_id) + ); + + // 更新主表为执行中 + this.update( + new UpdateWrapper().lambda() + .set(StIvtShutframeinvBcp::getBill_status, SHUTEnum.BILL_STATUS.code("执行中")) + .eq(StIvtShutframeinvBcp::getShutframeinv_id, dtl.getShutframeinv_id()) + ); } } - if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode()) && all_finish) { + + if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { if (work_status.equals(SHUTEnum.WORK_STATUS.code("移出中"))) { - shutframedtlBcpService.update(new UpdateWrapper() - .eq("task_id", task.getTask_group_id()) - .set("work_status", SHUTEnum.WORK_STATUS.code("移出确认"))); - } - if (work_status.equals(SHUTEnum.WORK_STATUS.code("移回中"))) { - shutframedtlBcpService.update(new UpdateWrapper() - .eq("task_id", task.getTask_group_id()) - .set("work_status", SHUTEnum.WORK_STATUS.code("完成"))); - JSONObject jo = new JSONObject(); - jo.put("shutframeinv_id", dtl.getShutframeinv_id()); - this.confirm(jo); + // 更新任务为完成 + taskService.update( + new UpdateWrapper().lambda() + .set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getTask_id, task_id) + ); + + // 判断出库任务是否都为完成 都为完成才更新明细状态 + List taskList = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getTask_group_id, task.getTask_group_id()) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + ); + + if (taskList.size() >= 2) { + shutframedtlBcpService.update(new UpdateWrapper() + .eq("task_id", task.getTask_group_id()) + .set("work_status", SHUTEnum.WORK_STATUS.code("移出确认"))); + } } } } @Override + @Transactional + public void taskOperate2(JSONObject form) { + String task_id = form.getString("task_id"); + String status = form.getString("status"); + + //根据任务号查询对应的任务组 + SchBaseTask task = taskService.getOne(new QueryWrapper().eq("task_id", task_id)); + +/* String point_code = task.getPoint_code2(); + String vehicle_code = task.getVehicle_code(); + pointService.update(new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, point_code) + .set(SchBasePoint::getVehicle_code, vehicle_code));*/ + + + List list = shutframedtlBcpService.list(new QueryWrapper().eq("task_id", task.getTask_group_id())); + + StIvtShutframedtlBcp dtl = list.get(0); + + String work_status = dtl.getWork_status(); + + if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { + if (work_status.equals(SHUTEnum.WORK_STATUS.code("移出确认")) || work_status.equals(SHUTEnum.WORK_STATUS.code("移回中"))) { + + // 更新任务为执行中 + taskService.update( + new UpdateWrapper().lambda() + .set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) + .eq(SchBaseTask::getTask_id, task_id) + ); + + shutframedtlBcpService.update(new UpdateWrapper() + .eq("task_id", task.getTask_group_id()) + .set("work_status", SHUTEnum.WORK_STATUS.code("移回中"))); + } + } + + if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { + if (work_status.equals(SHUTEnum.WORK_STATUS.code("移回中"))) { + // 更新任务为完成 + taskService.update( + new UpdateWrapper().lambda() + .set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getTask_id, task_id) + ); + + // 判断出库任务是否都为完成 都为完成才更新明细状态 + List taskList = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getTask_group_id, task.getTask_group_id()) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + ); + + if (taskList.size() >= 2) { + shutframedtlBcpService.update(new UpdateWrapper() + .eq("task_id", task.getTask_group_id()) + .set("work_status", SHUTEnum.WORK_STATUS.code("完成"))); + JSONObject jo = new JSONObject(); + jo.put("shutframeinv_id", dtl.getShutframeinv_id()); + this.confirm(jo); + } + + } + } + + } + + @Override + @Transactional + public void confirmOne(JSONObject jo) { + StIvtShutframeinvBcp mstDao = this.getById(jo.getString("shutframeinv_id")); + + // 1.找明细表 + List dtlList = shutframedtlBcpService.list( + new QueryWrapper().lambda() + .eq(StIvtShutframedtlBcp::getShutframeinv_id, jo.getString("shutframeinv_id")) + ); + + // 2.找到移出时的两个完成的任务 + List taskList = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getTask_group_id, dtlList.get(0).getTask_id()) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + ); + + if (taskList.size() != 2) throw new BadRequestException("移出任务异常,请检查"); + + // 3.创建回库任务 + String task_group_id = IdUtil.getStringId(); + + for (SchBaseTask taskDao : taskList) { + PointEvent event = PointEvent.builder() + .type(AcsTaskEnum.TASK_STRUCT_SHUT_IN.getCode()) + .acs_task_type("7") + .point_code1(taskDao.getPoint_code2()) + .point_code2(taskDao.getPoint_code1()) + .task_group_id(task_group_id) + .vehicle_code(taskDao.getVehicle_code()) + .product_area(mstDao.getWorkshop_id()) + .build(); + BussEventMulticaster.Publish(event); + } + + // 4.更新明细任务id为此任务组 task_group_id + shutframedtlBcpService.update(new UpdateWrapper().lambda() + .set(StIvtShutframedtlBcp::getTask_id, task_group_id) + .eq(StIvtShutframedtlBcp::getShutframeinv_id, mstDao.getShutframeinv_id())); + + // 5.下发任务 + List taskListIn = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getTask_group_id, task_group_id) + ); + + taskListIn.forEach(this::sendTask); + + } + + @Override + @Transactional public void issueTask(JSONObject form) { Assert.notNull(new Object[]{form, form.get("shutframeinv_id")}, "请求参数不能为空"); @@ -167,6 +307,7 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl().lambda() .set(StIvtShutframedtlBcp::getTask_id, task_group_id) + .set(StIvtShutframedtlBcp::getWork_status, SHUTEnum.WORK_STATUS.code("生成")) .eq(StIvtShutframedtlBcp::getShutframeinv_id, mst.getShutframeinv_id())); + + mst.setBill_status(SHUTEnum.BILL_STATUS.code("提交")); + this.updateById(mst); + + // 下发任务 + List taskList = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getTask_group_id, task_group_id) + ); + + taskList.forEach(this::sendTask); + + } + + private void sendTask(SchBaseTask taskDao) { + JSONArray param = new JSONArray(); + param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao))); + // 1.下发任务 + WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class); + Map result = bean.issueTaskToAcs3(param); + + // 反馈失败报错 + if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) { + throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message")); + } + + // 2.更新任务状态 + taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode()); + taskService.updateById(taskDao); } @Override + @Transactional public void confirm(JSONObject form) { Assert.notNull(new Object[]{form, form.get("shutframeinv_id")}, "请求参数不能为空"); @@ -198,7 +372,7 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl().eq("struct_id", turnin_struct_id).eq("material_id", material_id)); + StIvtStructivtBcp in_ivt = structivtBcpService.getOne(new QueryWrapper().eq("struct_id", turnin_struct_id).eq("material_id", material_id)); if (ObjectUtil.isEmpty(in_ivt)) { throw new BadRequestException("库存不能为空!"); } @@ -208,6 +382,22 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(StIvtStructattr::getIs_emptyvehicle, true) + .eq(StIvtStructattr::getStruct_id, dtl.getTurnout_struct_id()) + ); + + // 解锁仓位 -- 有料 + iStIvtStructattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .eq(StIvtStructattr::getStruct_id, dtl.getTurnin_struct_id()) + ); + }); StIvtShutframeinvBcp mst = this.getById(form.getString("shutframeinv_id")); @@ -215,8 +405,7 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl().eq("shutframeinv_id", id)); @@ -239,6 +429,7 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl - - - + + + From afec6749f7929a2ef884b114cc1cb753a26e8ac3 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Tue, 27 Jun 2023 13:56:10 +0800 Subject: [PATCH 3/5] =?UTF-8?q?rev=20=E7=9B=91=E6=8E=A7=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/acs/device/wql/task_inst.xls | Bin 230400 -> 190976 bytes .../HailiangAutoCacheLineDeviceDriver.java | 6 ++++-- .../HailiangOldSpecialDeviceDriver.java | 3 +-- ...angOldSpecialEmptyStationDeviceDriver.java | 8 -------- ...iangOldSpecialFullStationDeviceDriver.java | 8 -------- ...iangOldSpecialPickStationDeviceDriver.java | 8 -------- ...iangOldSpecialPourStationDeviceDriver.java | 8 -------- .../HailiangSpecialDeviceDriver.java | 2 +- ...iliangSpecialEmptyStationDeviceDriver.java | 8 -------- ...ailiangSpecialFullStationDeviceDriver.java | 8 -------- ...ailiangSpecialPickStationDeviceDriver.java | 8 -------- ...ailiangSpecialPourStationDeviceDriver.java | 11 ----------- .../service/impl/DictDetailServiceImpl.java | 2 +- 13 files changed, 7 insertions(+), 73 deletions(-) diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device/wql/task_inst.xls b/wcs/nladmin-system/src/main/java/org/nl/acs/device/wql/task_inst.xls index 6864ff4019d1ab215a4c76bfef761d20926be00d..ad7e3b89a25599c030cf1325c3f2b215b9f6e6bf 100644 GIT binary patch delta 17353 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 P92p>a)f&qgqvZbqnI(v^ delta 49848 zcmd752YggT_dh&yw`5aEAdmn7Hlc+U(g+DPl_D(^1(inG#DYAcQdYTG z2^K^}MM1y@!3H)6*bpBiAS$-UV0nx_O5X38J9GDDlOXEz`+wfqojd2AIp@roGktEW zcrUnOdDyDHZS9OP4li6dW7z;~tFziTzXDLf_3)iq{L^LE@im&AzqHk%*|_5XVs>o} zwN2&i#=Za2-4p)t5nr|MM97MQk9ZEEGB5C6Wxr1Q?*i|y_VWU}0n;5m)*EY&3afT~ zDCi7&?;^(qyr&+qfw$4aH*mYR$`QS_-Vw|>-)avyYV(c>h~a_W{D3HLzu-Xcw18GT z0%vW#7Y7G>uW+@pr?M9{??P9k_qO1`aHjDU7f+s$#3I?hn8u<6-%FA&Rh)e*&O)7> z4JXd010%hiLIS-z1G;)Y3XJhS70}vyWk@T|yf=sR_tpdidmj(zyY>B$WPAG_$ihzz zu+KICOQR5W!h{#?m7qGToVOrd10ODc<}}{XtV9j$1lK0p2Iz@Xk@*R-L0IXAomc zB&Rb}aHe`QJ4dx2Amnzi#0HAk0p7CCQG9@RdFPdom@nj3n0i23IvB~BdK7etYM%xK zXQ;N(BF+*EUQ>=C&6Mf&xJP-9b#Quzy0f?Lbx+gyK#^ejn)XrNfn9qz53zvGi@x4^ zX;)_if5*EvwGZDfjt92>JN1^fp4gj&9-L2~so#Xed*4pyc7AiwrNuw42%Al~g}Q+& zD_U^r)z_?;O1RmN8@Nx$^ChvD5iX3iK1etlFJ2yZZQB_)u@L6{m!M+hg^TCXd3XYK zUv^fqU~&1~u4s0*_viD@?{$e|wu|Ttr?FOy)s1q{nX@h)A-`2)58>>=t(9XsI=rjK z*uD4WcLi8)AxtI_^Ebt?BoXa z4)A98$u0}a9NMAoHQ@Xyy_r*DJYGbwGfVgr7rZrQN@3*ipZDLoa^aSVQ@$Ut|JJp! zkrQvs4u1EN+_0N^xbkjVK5JXqyEnM*KL62A=YF{HwQYUMR=?k4)21sX-B>d`eBC{n z&-Xhrt^B{g|NFj_A7X7;pRPW3%@_B6_u}rWcR$`e?nCylBk|kb1y2O8_}7lS6MHB3 z%^^3>-<7dl4KT3@pnzcG&%*o%^zO>_|*b9Fz3D)*q`07^y<2w(&JaS`6;PUA^ zkNi}T@Q<2{C-rK*Y3~JhZM$k=_!RAen{M24!Jh0P2{W(U7k6Lx&)@&P(s z9d%}T*C&bs7e178Dy_75-l);14m*ba<3q<6S6|ikx-Wh% z{P(tfk=yn>kaBW*zk8D2`1X~PzXg8W?xS|K`nP36s;0)A9GVgLMyvJ1o*eV@lHtz| z?Z5s%XPz6g|B;-~!jGSdJ^9+^hx9A&4tTlnQQg(Mmq*_+c8quPykRqz{=Q`Cr$78W zaK_w%^FunUnES|Q&kwo0_57}xj(kUMWnPu7_REo#c@@c>FP`xFiGv^fZr^t6yMf=> z`&OJBJ~{4%>XfLTY}L_;tycYb-^9DVP42n=CGFv>SN!03;*FB9uhvw@)Qso3cRjc6 zkvn3J^!aqvZ#$}L`usGz(>70G!@YO5p1&ru*X6}wPu%cQ^2#^2X6ypdHZn5pWM{^dJZGU^uCC@!J#CF{aSABLg@B8mw2gyB`Cl362x$R`&2NAaO zzC8cCfD})cFUHo5%@}j%Bh@?D!zcgy;k6$uuaBtsp?KfvX%D6CUHtDGs=KXA-hBJ6 z-)cvHGH(3~U#EO=^ZxoH4Zjy{Ke4Smc=4zUTenL1@S-K@@fYiTzuWcj-WT@F`D91; z7tTC*_kZ8H?Vpi9UG>SmgGc}LV4F|x`l{!dYaacu{otERUq9vf<@PR5J(qOT?Vf*J zIrqAwPd%Kn{Fmo0JJbL1qsI>4cEv+K9b9&D*hSxe_5M}G1Fv}HzuQjkj=gu_?xZ1I z4rLUy-W0Ip$sPRuF4x|CbJVX_?4EY&-J!pRv1``W9}E8Wk;)zg_Tm>hcRKpwlA_DH zZXGto_FQy&%IC8;&$|7KzEf82Ecxu|`#xE}^&@^JwLU&Gh`X<5ug`qq%}d{2djEI& zR~K&meq;ZyH({PLDbn2#mEGppQ191MvmJ$Kq_=EMp4QgQ1GkP^66EkSur=Jp_D*Ez zZ5W$6iLrYTF1-M=Ak3b&Bm6JI0aF>f3O&nagr^Zsn8w&0PR1r)$k^Hd#yVcaSONN^ zT?lP~jFnx?*s}CxA{a}%l(DN3-iPo6!Y;EIo7I}JfwLLA zCX%tPa~Lab%h-De+qYvZp_sA72%kjw142)D31jC+F?KV;w-Nq~a0mvJ%PwQ=DTH+h z2Vf-h&SmT{LiaqziZFt`g3#5Gu?yxib`QeO5cZA%-vaO<`~+dwPRMyFa*nV=8Dld# zLq5VGUBI)DvDz-I4V$)zu}YYH`Q?l~jpBLeiml0>{mwPF>{_#|*juc{*v~XHG zI}_2xUxqS`L|Cjb_A%g};E$qwx%YwPecDy9h6cuVWbIuudfNP~El;0nW&e6wq&MFl z=^gNOc=&{O*9@wU**b2=V?RH6h?!A;lA#ly?MGGu~X~0y3Ds{Ptt1#Ct)|zz$w3U9|m^<wK&-;+xCv=y2EO=DliNy7#=lMZF6`s zr^I_CU|5W7(i{W&*kU#*I%@M}-e@yzX`Bzf2uf<8JtB z_&xA1!@mOmD*Ws4(1-1X*JGa0qTAL0x&fKG1O7&Mh-9a{qmOpci=WU!yyZvZ!w&-W zCH&X$zas(f=A(UGKjWkx-dlSVefTGRZ9{jn2XU@iu{Co(%e^XACqzTpdd>X3?(KQv zYQER|;EBn6pZDhz6L1{)X%3Dn#PNVQwmF%@-|$Yw@lEeNC%f{uyt~EmQ*jLVj4*vZ z>*`(fS!-{>XRSfCSm1PVd_f$K$@s|6DZc0D#4|=5OL2VL>&0=8cL$Cydp{P(2662A z1z|>t<6LoE`Nbo^3_L~ni*bC#>pAs(n@O<2V2qhdBRJa{hg|mKTPJKE9k%tIpN~ZH zNjo-$@YPzcci8!`^)9Tzs3N@6@^8n?R{VF)59}z2;CsV(n!frH>?#d*^Xqz#3IsFQ zTQQdw&V~VO#R{mqGjYQOE}ifA)Xno<{D7X?ix&<)z-~g?RF{*{iyvUu)5%;2b=0My_=9v>`yUeoyoO!5q8jLQS zR-0#mINM{M1>ua^u0a`$Git@gSqRRkJsW4CIHTU#I19rW^#RvuL1LbGC*Zo_6qk-H zdD*|tlceb|zLy;}&ur{YOgs!R=_mj%`vhlH0O=^fJB9dkbc1(_Z5NuPr0e+!y#445 zkWnfulTyhLsT{+paYl*M;*11kpo9%U8D;{zSO?%KfjjlgXdZPjO=?M;ONbjJ#2v>u zi5mo+SF#gQ+#pljAR+D}6R-3g)JWe!Lf@`5W2OYcMFN9G0-xfX5*RFua#DY&AMYR7 z7D&qHV8J(dh~$eDd_x4^XOeG-;QJhBl+PiiVnc*tU+9SmJgZ~0U>qtKPf5n1B1d29 zw;8`=WX?)3Eb5&MhF`wgo&;h+7A=LzFFI! zNAYj<=>EK){Z953(?|E`-BR3wVYp!Uw@iJwVE9g|J=|1#xKz8UKkw)u6AUL4v~_-n zo%HX+_3!%g__hVCfR&>W9%4%bRF1RdJNhQ_LauK};_W8Ki3Br6f^{;%OktU+t0c%11pk$i^GwzA4BO}lsk~zwYSww8dVmhKGm_=$ zHK{zR>j<2ZQ4)mY5km5BIH#mX2+6dE7nxq&lC~W%o5RsZ92+k7(c1duaAaLM}TF!Z9 zuFn&>c0zO-&-A1U&M|^BKyr=|oG!^Z#^f9$IC~%uByo&cLSxL%fQ&ds8qw$*$Dp0v zDdt8rI~l_QapwDl=>`3{qw82{ssTcou|k6I!b-cbuv9I8$qChvSSEFkWghP$V#3BoHbS7%vhClL?GB6BsWN zNYk%N=N&tdWyYJm%y^M|Tp~h+YR$%rUgqKnGL3YR#srZ@xJ+Y$NCR^mVd4p98WS32 zVuG2835}ZZ1d$0(J`#8wK0_psj|4We)-r*7B(RyakqP7@fyWuub*10YNclM|&PgM=azg(BBTMJ7U#C)l-8k%>@bvruHB zP(+P56QPL0lOi-lAw?#_#0u{MbT#l~;)zfs+E>5sgd!iZc;*UXYzo)k8pN;GSZ6)! z8s58W0Objjs}vRxa2J$efuBJDLgB(-i!}Yt!F)#0wtUVy&*bdK`8&=G=Iy%o+Anr? z)GTv9YIh629YYKG4KZu4<72r~T+mGHa9CW>tbV%|p}y!kKGDfrBf;QCmo+2XlN!I0 zhHx|Ro6IJmP-d`X?}nWzdge!(-GL1y*2a%54!GI0%7(MDrI>8`tNXRYz*NLjN5b^j z>v@~iWxaX6-lu~10e@N?mLd%#;BFJ@5Uz0A5Iw(w7sME<5tj2ZC>s*dSDQvm%vPXR zt>-aAwvc$Zxki8uFT=T@w;ey_?x0eD3yDb9h=MaiLbq-xGvOp-Lpb^}8-9wHIQ4mz zd~9R^=<4hZ4K()K1dlC~w20JeE4eFy1Q3?SN>WmtYd6rk&WNM1OemsvuH+qJJ2AJo z5Pf}Byim)aY-rd78VwT8=&_YN$|1<45tsMKhb2f5xdgygN3sc@sOg_q@)4b>CT9{- zy5$I60*-dn*;f~~YZZ<&2a5;I@1s}zgX^W&^A07v8|%%cqc+TzzuqhnlPgqKEGP!D zS-=*tB-Sk15I?eHvivbk*q>}uERr|WEJKYMKJ?6+91Sh5(uHouX~Y5!LVroB+5u~T zXm-UajAavL(V!3CVY`8^;hsh3S5UmgWlC6uDk@z9H0M^%2iq9hq3JZFOct)O;C!@p zwJT`$E#4RseVlTj~F<;O)eX6RXR1c^phGr?tbnes%1Dz1YB%xb4+ z-Ok%|UJkU2)`Uh+gfo(FD*)D!&h)bFJUY4y;*%_jQKtt}IrRMN(P>?>f;)3@Ihlye z!r^Am!i2MBYUuMivqB36WC%CY2s~)RBfJ&M?Hza>FejkLdlZ9^?C>SRp*udgkw3uo zJ$toi?<#w|o>{B8cy!}o#X$?vpY^34ex9ClJ5LH3jq~qh_SW9c%N-XILSK42ALAfv zbZE>UTmsxfMtSOlyZ|$@Odv(K$c`bGL-hA=<{x+F?QpH)ELmO7Pw@YXv{&$t|Ip00@;JV_Y>+ck<6M@?}Dt z)n&>P6{%ss z>wK~hnUvE|8d$;_xA*qf0H+3KE89$yO-w_BZv@?C@NjzF5v{ErxsoS3Xe4m?NqiT$ zw>ubCwn|JjB|50Wg*RsFHX9rVvk?JT34cBO4e&IZyGe%L=zmQ!F71~8OJ3vM_OHy4 zU5MT-N!A>V?DRU|z4H7G8NP+^ZTNS*Nk<2!(zfWoWDG4gkHOc%ABR5y|0z5*N=p25 z8G7$MI;6+XIH`yKMIvdZ!q{N|F<`V;n(ETMm8;9v;zE^LVmX+B=VA{j9bppd2XSe@CId>sFNci)lrBX%)&=wo*xGzpj`%^^*QZUi~->1#4g>8~q0<`HWe2)I{%i2JHZBiKz zliDN-ZDzA$w1!1fLmQ;^3b|u|6D52IaJqy~0M3-~Nx-8d{5fDX!9NOkn#6wsxWIrt z>|Z!3mJuHVE|c*4fN4QRj_PuSgx>{zxrE;Xyh_3!0A45I4*^$6_%Ps25ks7`W4AxnU$U3(8!3|umWz0m ze)WC4kB6~gzUBWNWK+sfhp~Se66N8?>rzs*AxjWXvDy#=M;i(_)t|VJ2YOPmqRm3< zpq7;fxF61_9pwQ^MO#ZkEu}V<3Mds&9(K_QmyELv_#B+);dm|D=Ro`h0GmXu47h%v zO2j!yHPWG$ngM!Bky>wZE+W&wK#e*P$z%W;0AZ*YaAK;!_w`_y(-?aNDl~IPcY@Kf zX@DBOiv%a`?h`%CuoxrbZJI?JS%HhzpRA%bFjm@9pI5b*N^&uo2wYv~d zZ-Qtl2-T)uq||X%x{42JUn^6inI6#=+?cPqyW-w4eSQ^> zimCC74vCnet%5RYA1P)?9WqN!DI*ygw%9oKR~#%;#NtvtF~NmIT%Z*|QH{y$WYn}r zw}4^We=lpNO+#&>`e-;v5IM`dalFXRDSg}qT+?WpgNsD;Vf|W)_Rm4VjhBe%efkrK zwqwgnShZWK|Att#jW)yVY=tj*nSpDxaEzw*7CHCXh|i8oeund9y+SJnr=vyA8k<9K zdYf?Gs8xg0DLG??tcpRu3S0Xd?Xb-$%&s?)uw09FFto0g@>^>|9DesU;k;EV1E;G+ z&Qms*(0Y9n&Q;nza0a%>S%;f1gYbK>3FlhPjTJoZcxs_^>TN;L$c0UA!})A{ueJo7 z!ICp(h`YN%;a@?SJs9?M;{Gpx3CUUwB!rj}sv+T2Gq!fwLy)&Xae(1!AHu82I z4$B>8Us~1LPQ+KA(J$G|+u0+SztxMeGf5gGBJO7Vc3QH(qk1zHRqG~9>F8LADIIZ> z@EeYfjvVe&;yYG7$?xFyHq1YzXiV>jDHCxM@mp5l_p}!N8Dxj4M3MdPNa z0G_%l>OQCg2uBTAj%HMg&1K548#u}qDX!9^fw_XN-@*BBvKZI~y-Ou;+ld&iuSyVk zl6A2Gy28mFmNr2|a*Ar1O)tBdcL<7xKD0G4$~f;(jgfX0qSFx)Z5h^^6uLRlx6^iZ zp!~*p4kNw>aWsipj?mi9+~6mC74Q|r3`cE3;g^8d+VB*<7WDZBxk+CS+)j8kaFSd& zPeVEdU3`LzA(RAI3EjXY5*?hHT}c5A@dmmPJ|Fbq5^q&_6Y%wx#_eVv!zz@Zx+*|| zSCJBp2n|b+%zZ83x3qw#*$O$DVv>bM!Dnl^Mh{_>DyoCLaCNx#DD@aC(qrWU)33OU0^GU+|*eb zq=RP(@Ps0lpxuwz`>$-1_Nq2YdsEEaDTCFZY0e;Zz^kIM){(=&SIHu?8gO41=+qc* z7{rB$ie}2*4SaDk_}lubQdd}HD~p}A8rO; zh9azP29GB=*iMPJS|S|uTL|xgw?@PxVqG(WP65BF89|xAFKLE;8t?_p;FkkG%7XXc z+~}YHBw8XAJ~|d1b~E^$M9>Vr2KZCIAy;r#%dLW(nx=S914G0<8DX_VBJkDC;70+! zsi`25U{y2p1)yKv4E++|%YO3+zDAmELd3LY7^;EKYz9vf;+w%A27P!l_&VV0G4CT6 z;z8q6rY1zKiZJmnYg^Ea_gU~TyeP7CH0x@KS3RTZk9Ib}j}=29O*qL>(U6=A>bS4{ z8&OyhH-n=!uZnkRXio6zT!qzL4VQBX*$-A(Z6@S|*_gjyKkg|rZ{ zTSVC#rMVD)N-~nV)X$Fsj`)=;159+vQT8ivF1lk6m{s?>4oFf)4HiUr3g^|7Ko=j~ zVc3k>etRK6JhqUSq#B%uT z$`Izn1*1hf_+TEU;{nhpPc*AV46AgxTH_*DodJim#x9uB#31JqHI!dwPyi(zZ@*YD>2 z2e%VTHDBVQF7QY;mem-fyfxrc5)KE9_8^pv*>UDOK8)v5eVYhB34SvC6nJ`$V)*Is|A4;)eg-^E$MlNRJo2&yIGY1s3||6&8T?%MdGPb$sRozAm%%TD zUj)Axz8wB?_$%PAgkJ)`6rS#nr&}xOrp;^NuY>o%S8_e^9^O5CEX$|7RJueSiyeCG zTRcj?<{s?b_hsvhC{(Xhv1%m~jRN&y3*L>&O;+xWM;{Xjm092_ z3tZ!a_1kyysL`*pMCu68Dv7PY0?74l zIEeM2jY*X<3lA}K5~BBfkyPK2_9CC*M7Z{4KA6Ho`|vPCsFT$X6ta0ZOVodThp+TR zvhWN8MR(&xOZZ0iBafGGH*9Hck#IB~(>QFvFjpk2lW+&X^%i{eAR$xGxFtLu*YV>C zMwNi}Yze{6N|z&^mFZyz@PeUvZ22&K=w99_0Gpg{Rx?aL{VI>--SjgDc+{*ARyRyY zY^DL*2|vojJ6Q$66?DhDwPv{4a!F6QSvOpdy&E?QuB_of z_RksaF*&`9N5&&DgDB_{^b4*`NPyPVg%(RV3<{NH>XmPCclbtDA+gcO!9=^~ z=#6Zjfej?(>kK#~o4v_!EsW#^lJcVrIF#`DCf>=`8L$&H`s{%eeZ!rs+Q2#}xqW$hNX-tJ+5`urH$`gzwn+E}u-*`PYy5 zhc>F#NBLV6-hZ5bO5ydN@nDB`I7(mn752hh(MFhVgkiLANA4f&C;PhS9iM*1J2|$0 z&*v@T-|6#bX-N}P2WF+^BFX!5; z2jWU+M$(9^oPNpSi5Ua?vDwM}aA7kmtzSy=KwQww%}Y$r$Q_`6H%lw^u=u3J#J=w2 zUT$~RV)taWeZd@iXwb4&6DDQljJ-auL&UhrlP8Y7CtSO5UHIftd3jStv+=ok(`HP` z%B~ojH+f3dq$!noZ1jTiqB%v2+^pxDzwbKw^tapDrbC}S`|9g;Z?YE;ZQc9m^RIUPgK{|yz~4!wmlv#OWX163x_}a;MMK>d01#rJ{yh4MBF1TUvO!8 zNonQ+_ne~gTvj}#Vrf}X{H&Sf6+9^*v#)zrh4U?Yuh4lxZdB3{CCht`bj-T+t>ERs zi%aK@54jdaL`MEN9-5l5%%u|1r+Yyalt|qi656k1r@%QtmFG`oN%LU8~mY?b>j2@bGS)*seuvc(+(buWp~k)y`kMc;UQbai7H9u(V-! z-0nC&cg2X=!RzB3amU%u>*F@q*TgMdA6HSjKJJ9xus&{m+^V=DMDK|yV(a6M#X4?@ zJ2lT;(tV|S%*B1LYsfry+*MS5oH;gq_SC2Bwa3}y%V)ZCO6SjHrP-xRl4s-;y9+%F z<`l(O-544aP#92U+vDiD^`|#qWG_5*;N|Kkc7Go*a%*8g_y5iqy`ZGLwxn=g$yFz8 zlcru;Qd_cMR?(8LrtIN2jU6%i7_VBesPxLtwgs~;pFfC)2CXk%T|6}0o#yWO>6~rv zKFf}z9ooA4u{U4*qA z;)I;i%R?5FYvTvBNlM6?l{jm3dC``@F1GT;1@R@l5*B2xO0xAlS}@stjpI{x$dT~s zni#Fr8?ey+J%7JT&w|cBg_P90`?-%_oQQ|g_FQ;Vw}7&M4?3+4ikn}wc-FF+8{&5J zxT(2g*7J#;)1h&baw>Vx;kLNh6W8;Uh`3Q}_%v6_@Tsnxsc$&<@v_@jAxrL_Z$9_# zE0sO>)Pz6%ZD`PI0Z9pyyOl3};O^P;*Rb40th6k*^vVTeOYDowBNE*`Km77}c3}7S zA3Xc!UiaiIenXEBp3Sgl*T&4M&MBRD`TPZ|CS+c_eqU$Of4Vqe9vc(;|GQ~YO{-S_h2{}di z^X4s%4|n#h4oYAb6wbT6$US7(Z|=Cl_*Krd?KO_dbp^3slsZZsC644?mpU^0I~==D z-Zb2CB=4!9jX}d5GhSJGb$>^HM|ssVhx#9B)!#AW{&5e?Crp2br}WC$HxAs@s=ig$ zTQeO=y;`-kkN>Zy!{r?Yv}zmJcDUoSi(0k)-PtyExWm}1Xh4}aY51~$t14=z zEqc69MdrBqg)DHvtnACn%S#uq9T#7wJv?x0yARX3$Ija05{=>TuCPcSoPl+!!uRUn zgWF?=TH#CFJ~*SR5AKDjk>Mb}mk<7>w-0XL53om^+u1J(mWU)D{7bSA7O#Ml^k1e~ z@HFEQ&dzQTb56$k%5aX@sP;JLXqX^le*LsogZbzjjfS9~9ZAgdg&@dfdo_BVZjMIN z>N4kgtrle8Ixc0)9MyoFA}$eet3}LeUPn`VW^600v=sx6(KL3mjj*q3heaY}G+n@7 z;Q4yIwFs$vg>a5G1jnBp-SG}1QyfxgL0mpxXrsNP?HcVo7&%#J=7i>OuWN>av>Y%V zfG{%fkWl_SL2(MIseC6hm2J;n4Qe-=?{!G*w?D}DI*2~EeAfy|X1-OnJ@nM3neWEp z&L!W5f=%;H%4b6K>zXy+DQ3R+YV{)9o~GqZn_%CI$d=1{-#O>|10ktNzE!rV{;#w( z7I!ZBHWX}{Z&E%DNjA=RH%q<^d#G%CeD!<@SdGY*^Id<=`F>kew-)m)vJGh-OZ7RI zd>aZj%{M9ES0w3+TP@mpnR6JLT{QZGIU4nDXB-8fZOvX0t;wUF8bS=Ka7N=u-f(VK zB|4H^oVpa!j8h0$n;a?|HBXHl#*t$ct{hcx!)+4r)8!fU2)Nab^fGj&^Lk!EfpC;0 z5fP1l@|I_mJl&`ZfV+bhrf^Cg<@O4v(M4^rxuJ)z7o=jJqb&i25nn0d=h}*aUoR}P zUZd-i>$RQYNS)v@+*)*zJrHZsRf3OjKk^C>ZZ5lDkp0LDuz$BkFwV18Ao?4JU2LP1 zkQI(}97hQ?)HC42gc*06NA!^u2`spn{^AgdQOp(XMyT7WE=7j0C2E%8_jvnh|CQbze( zO+#9pT`4Pd(**uFBh2p0i052$Vr4oTk5##*JT#A5jM>LwVLzOCSh+bFQIo8FB66cB zw;I6PZCYl%qZklp9W|rPuNETa+NfC(?yt1{hK559k$=48nyq$HOO8MfzYk$+_L?>w z?H)TDNPvVV!dn~UUhP)&m~*t(n^99ccQrl!9bz+m6zNGOx2joSpJUquMOSNNt(In# z+c2mx_L87%J~JNGgPm(W7M))$gpy#xW%`BkRE#_Xn=6DyutPjFAgA!g97c7hw_B12d!2v$_bes>4H5V+nHqq6GkI3}F zHNI(s#r$@5+M?(lu{bi8Q0%z5Qo<#c6rZ3hixP#j?JV7D3w+Q5SJHm4bQ>)29t(Wj z0>^p=D{|z<0A@2_9f=@-js^G;+hk5EwpgQl5vFN>~ye#@n%~{ zm0spGQIu=JS@OEtB9|WWQr^&t?#S;&SO0{wY85W7Ztk&g7h1Kl;OS{G>7`a>$W^$w z`q>hH1g#IGqbJOySNtMZbak{PTOYL4VtOh~c_UZ2d$^z^M9DXE73acbzzRskHE7dq zu;i*RQoJRiEoZ-?0n&phOO0#YpjJ|@7rHG!i*A)>-N6Ik&`o(mH+otmL*0*RN~M+* zDxTkIDaTJ+q|!5X${SMYNs?Y>t5CWcQrDeD*W(tc^t7JxhE#g;A)_ZUFI;1(RcDbJ zK~F17N6-B!Z%C!*M>5o1Jw6MFmaqv@TWSee7OC_Eq4buP5H2PKE!DX~3qL(|sJzh^ z(Q_gt<}5+wb&_7Oo!dR_*aCLitSH!46dQ1qLu^}`%VRssFdM6#^$PoYQ%lQ~%_F9k zXP>jJgEF)m_Q!L!KRac^D)aA5kuCW+hivR?E*qY+Or-zz6#5)y(4Id(g|2TdAAdR< z4r3*N^f6PXMbF<~vHWpypb5&28MU|U`McH1e(o!p=8D53cX-sU%efVYH6MSkb$HYQ z()RcA@mI6qG0UUb=JBVimGe(#1GC)w#TE#5-2USbk)oNgC&_?EHH1xl&U1z5SHo!*jUYf>ft8y%`mZcvN(H%9?`Btd;kf$+Ex(H~0 zj^z2K_-5BH9yj1(wQm!T{My7rEjAVp9-G+d)5PN`8lz`PG;xO(rKYC%C318r@TD!3 zp%lWS1=zwyY>Tgn+S#0_za)tsma;mb)Y&9?j>y<+WT>`<=i%JAJhWb`hiQC!YIOD^ zUxN3GlsldFDx9qq*J&DW5z}tPKDGtNTe#D{3E>Ys9@_1)5kGCP)FRxHjDvsCllcl5 zDU=THD>*|$v8O$^xhg<{Z9*){4sgq5SN&(r)MC-mlW11=hX!v^5Z?=*Vz=0+R2BFnol!yNXp=y@UaLbn zHcwk;?|_R4Mm)85s-T9fQQZe!lZM(%mBgkK0nGx ziTdX`)e&l~$(()if7j^tYNuKBB z3Uj$!)u_so2oXO!T1$%`vvtH}p%_dWtOZ_!XJJ)=(^9YAL3^F}HizaCB}TY20@n$b z;`RyLk0_hAU<^IZq%xVTh5S8Rn6t_nD#(EYDW$vP*-Nuv6Z8`Bn& za>$X6qp=a|0z~`8ZiKX7oFg9WS}RnjcX$rt877V=XX)v!j#|Bg9-1=tujz3sr4Buk zMe5KqTiC_M(O(_HsbQO_lsY8kkRuUCLmhf%iqwfl2z5N#6!Ey!K=E*t#W0RCJUV13 zLQgd*Md-;VQluK;dTk$${)!MzDMD0A5t4Gqk%^>lKW#GCm8{J$*s?bKzq0 zGFYgJ8H{_iY{aWe&6^NQmzrrrwBov$b-r=iI4qKuI9hU2gQ*k9w_&8l>X4b-raE;n zY~y%(3eu-86~KGqF}`|H-#NV@5jfmcf}+4RUmP3rdq{hq0AGHoO}G%ZmZN}>v-O&I zdJhk>yV+U+Z`bIdw67faVgTq!HAsS+pA z4Ki_pw`&zZ&_qNfK1ZWTk1?4siZPZ=;1s)7C^~^t3TH%monTQsREG-bp`;q@?a*_t z70DVs!33Tt5}`8v3YV2tA|!&6pQE`&V${#6UT>eEGWx#Pweh0X)0Ur+yrB}cvoW|; zVK(ZIpz)Zat3gWjKnXNRM`4(mqwN%eNF75^oXnfGNl{%eR!-{xsTM_*x8)WkmK@YH zRF^^RU3D2G=8%K(Y;+l9s|X})6aXpX->|+yLnC@+FWj_*9UwKP_-CRko8S>8^mlVX z>!!b!32|@CALT;nZQ0tIJO?*e;}ot_Q-+0hNRuvP!pL(PpIBK-j`s-wDUlr23b`ZXFC#SnRO z7NRny#3-RTno)g;uW?PU!p`m-jh^u_hT!gvtwH^t#T@@*Ypj;mn7~QNGmgVJc9Ip? zC=`#Fg@{q#Sgo%DiE29Q0RJyX{Ry0UMq}*n0X5L0deD=R(Y|ru896j4YJOBPti!E! zh^2fa!c#FZc%!SOnW!oPYL;t-Or!VPE(fNK%~Zqy=ArzFn)rWYdZW~Pihi$YEwXz= zr%BalujWLTtU6X-PZuwHy0hiOB{o|AN;W*kMoZIPk7{@G6G-ER18ZTaVaUkFuOYs| zpgutL2u63_S;W4H!Vp81M>dyUGMCn_g8K8OIjaD+<^KH7_JkhQpBs&%H`Ji&Wf;3@ zdEqJ=k|*0xMWjmjy7q68BclqM`8wBZdCbQ4zs=XVX3ImBhDLb*d>MWI>l!W>nd6s{ zN8|W`DnWFmeXvsMjcb+*Z6w87gvB^FZZm12a(X~cRmp!AfA-PLS2?K|BINSLXllK2 zMnyP*Q~%IXK^l`b*BSKxsw9bN4j%GSlPEPsqQuk;iC|-1Xb4sl>E>ql#%6R2`BvHX z_}y=KuK6ZIM_}HZ58eE$sZ#0!WJS#)iEh1SWTm~B>=As%A?Ck*%?UP%wa)h&x9kus z?^QQ@SWs@l5nrgoO-OsSOk8bL-50HOjd8G_*?k%7U!(SH6jla?%AY2Y#xO+HrRfZg z68SqVo^opK%8bzv(|4rn@i(3|$0|40ys8-w;ncinyT}b?L-lnA6|JYK6El{v>j0^d z)okoE{{NL0Km}!;lp5U^O|P5lp7Cum&=U_;_PyGE6y)pLC`{2kDi7zW5|QPWU@j4e zwQ2pg8nLm>M)*nUkDk5)A`F`t3y?&)y2AXIG&0Jfv6zz(V@%DIeVW^XIgEX@I2%pV z7K$~k7*x>qDX&;~AX(LnDIJv!f{lfaM@1)Eq6yw77LLY@rBF;6jm;SUouDct^dqO8 zpqFgMOwri0BfOfpP;xX@kX%yCGI7EB!|Yz&!f;Kik=jneID=BVL~!6>+2)I81$NrN zqHf4!|+YN(KyLV_U>=l{oIhMA0VRe`8~` z&0-TZ7&?n&$)K9pveHCfkBv)#q1m7&c9Jylsv1qafCg7YL?&v*agyqdNbyoM+C8^iXDQSNw2@ie? zCp1`XZZg{$DvWSFjQB8SFJ+nwjs^)hlM&y};Csxg9(H!nyhdQhc8qXm`ErPdwb5`t zPK4Pq>@3!IzYX3VAe_f-gl7@N+Su?eh2!QPvzw#fQ`qq$ z>w~lfBb=QbH!GjNAh$sx`IT5D$AO!9eE0gnGG>MG$?=@+qbg3kvfFo;6f9%jsbl|B zmI=W8?|3^ySGrv#f|`$TSmU@2$S)6#u_{L{yuSNjdxL=l9q-_S8*?;1^S4YOUXQUS zhIobjVH)2vedsJ2uBRnA!dnsE1iuWPKDbJ^T>TUN7WftLx52N5za4%h{3>|5)oCld z7yeFolCu_}E@9j;$?k@~2mW4;^zQ?3Km2-lx}#|g`~&dMz&`~4F#JaNN8st+q^IE@ zgMS=;GyD_qPr^S1zXkq5cuI5|!kzHX!f%J)0skEQi}26GzX1PIBo0Kp3*m0~YC2zC z*x+9-jqRz*BM7&1M#v~CkJwnUDY-vaL4u+9@i>E1RFH0>Tns^O1Ak5x1n;-u2fO5m^{=FBC27CH8<@2vgz&0c|Wst=b#>S8Lt)CMaV17+vEqQI?xBF zj?2=gYEQS2(mQ3X@ky3pif&XzyKfX9YZ-m$W>LIpr%`+a)k5Lyc*Bvc0QqPXf1E0h zaCW?7!&ZPBB^$*jSq1~TDVgDYOjiA3Eqy%Qs)8QngNwQQsKsQ!^DGO{L&_WW$a<5L*FmHMWZ{nc%sA zBunX8OO?TO5$}-CXQ$1_JgA=}{^&o&?|U@Fj+#aM?mxwUx*usn4o?6w;*bAR{Jy6@ zFqjMe#6Q8G$xbIx+T`qbHo;baD^&(RdP1xHh=OdE$s#OW3ca=3jxWMs9UGm!q1A-*uNc~~$oSBR zKh~f9oIVof`y5;k>b)~zJqoE1{NG-^L|E4U6Jh^p^aATG#0LrguRjqs6dw+;evvbo z9m5<7jxr-Z5%#F|zxza304p=c3XzUD&@0br?8xfx!)2N420WN#jUdg)9XGpq#{SGF z!tnJ9nyS&@I*`Uayl@O(NlbC>gGQGz{i==HRqfvd+}uE!ZjQzdnh``b9x2-& z1x}5W)Q}$*89qF~Y+w(>_MCh?_Lp(DPu$ig?4F9vMg#N5`m>)?152h)Ptn4LMl;GwrVP)$ ziPiuAqKOSVhbH#a|FDS#GV#_+Sj*~E6Fc5Q6Wfzzc{GvCP40i$#QxUT-;6I18A_eK zR_oPUw9K`SXywkk(5Ey+>sLL3miq-vu|iHetxYh|*K%p!q@!QUeH0>|l(RJ}Tau;a zM*a%Mw`8YQTzX}zp9)yy+Gn(0eL|)bmn_CBqr@AduKBcpIYTBFE{bsbDN`AY%s znDUI4#<^Wzu~q9BZl`x&iC166A1+{l_8r@|YNsi7)3aLs+BzPIHv{8Mn$dMU)qwKr z_>e@xb%(+f_Cy#D-wVFC#Pvnk4?aPj>o3;vblP=n5Ym3D?8j1K(@S`Q&7=&Zt z$H9+>$K@yS6kkhk0wo#KK!b(&`W^Mp;tqij`{F5h)fnqkz#MkHV23uWyJ^_k< z;Pp*$={GdRW!y;Vh$z`_L$zJ_UF%L`}DD;i%ozv$t17TTQRMbift;GKz*YHUv7 z;-a2U6!c}S8ne$TEH5m_i|w8Sw@H0IQ5Wvl-`$~o;a&N)(|ga?A%8WbSICCo<12Wr z8h+(01+(7fz8Bum&Lm6|I*omNIF4Nto8h0a&`) zF|JdF4adcEwixof5g$hCL-uOzvYLKx{r{2udI|gCh2OrCN){zbS@g{}$=uUnZWM!O zpB5F-PBZzg@qcAk4AK0fwM>P3nre42Ki|>_zNfy0e+?U<}ksf^*uW@>#-_YWk zQ7=i5H<=FWcMv%#&{%q^Aa63X>&HMIP2}|2aaMTf_qOYd~Ru4&(7&j59O@Ubs; zzBc=+?%B%%@7{mM!ilsMEfku+{lNWWZW}Q6v608~?zyF7w!+s$9~rfM>V?@G2KKr9 zwFeJAsqhrKHT}D{HCN9&_)6yFky%vvuV?m(aP<6)EkH-+2+3P=Y0D(^alza8 zp_~*Xm`^F%N+wn7vm;qv^-Cq0yHnUTH&leZdR}ts08i4u<)atoznGMeob%$CyKcK} zdcmU7((>sytjg3URp*V!%N;#sW_m@0=H3v2w`DFUUvy3Byy0o?0oS)4l(r-$F_Nt+ zh*@+pCMhkOrKJoUkk&6Zn`LD5OC6Dp-YX+_U~a#}Tzo1rFDo%8FJnY>-nCsnj~SA7 zL3ZAC({o#0KfqJKAM02VmdT>x@+z_AQT+-Z!SiZatGN3DS(_7ViT%Cy4|v6lW=hIP zK<+g~RRhY;&n)S%$(H=2E#^efsP`XWNe`_5H1odBalBG{pzq9(PrY$*_C60Vt^ETo zV}8Vp3DQXRShU+Vr7EnX`pT)=QrBD$n_0_B*<5y{!@nKLzdA}==Tz^W-+KC!$L6+< z-8R#mG2fjr#~uEN4Iyg?Elhm-{GURTzYR_PQXD5Ygw9O(djF3d)4mN&JO9g23hF}Z z>w0}ZXwlc9f$l+B)3R<(8hI;gy@yu}E@F#%Je!upTD@sce$U>&Z^qGw3NT$7^hD>b z;qjTFn;9z_*JI#-Yg-Li+Nw7No>q)@xqs_^|JAMjNbZT%e>XZ6=XzDMagHnHYrZzYmoU0td6(^S|j=m60 zpWJnSHN3>&H?K*k-A&q4XZmYZyp5iCJtmi#H*;68Knez%zVK$=9(R!`7mUp^+s?ma}-5+8$^$*-J7- z$z*evqOT~qRPOi&t)}(4bfi5wI>kG-%^dBq&?I`K)fE#+4N$z1lE6mkr=B%deI%}V z-sI+ZF%y*U{Y;UXXflh;n3O6ewZf-~HeQ;Wr10u_dU`uC`m8CK#7O~~Gz#UwSZ&}% zyEO4s@pLgn*kAR7;`O@5G*rY89)Pb42U}ynDH5o+Ubj z%t7`y;&W#vTOw7d8gb*6TB1~YlWdc6CoA(=%A1x)l;XUitXZ>^LTW!vmSrv`xU))U zDQ>C_W1~-VKvF;*D|g zd&HeE)(cl8LsiSy;rv`__x%al`lhs=mUNJs+gjt@@8qh*k&RIJkNogbcjWG%d4UJL zUl)Uojz)h(x4#MJ=|KT%K$uONPgg6gv?`S&eyIo^AIrp8Llzws%ZGj}vYG}gO!3hw zRh*g!{XT8ENoReM`D~2g8u*4NF6XTaRw-1e2H9!9{z3x=t z*>bT&3-(y9-rybyRU4p{6lfHa&*X)w8Td$SDV+|j$o^)3#QmY{F?{Ie2Q$yMa&Z}Y zqIpTp6dOzp8Ts+B#cUR?&dAh)oj^~;@^Flap_oZnN>U75F!dZ0fT6F4kHrGg%9$&c zn-XL5->9_~OuQ@@kE(u}RY@}gM$NQFN#We=h)^c;@LQ}DF=H-3iOpk|BVHv;`b&PN zY$a6ws6LW{V5PnPbsL5EzrG{w5*mp$o3R~EQj}9%{+rY)haQ_OBkK#s6jPg)%2k*p zU}BO=rE#SXPc(XW7TgU4Zu8d{S7#^Ty8`1-c9YnJz>i^`JOJ^gg~$#Oi86ihWCtaI zN&CQr+_7V&So8i14fmZzx?Gw|*2!RM$!^q(NvIcDYzmHU9J5d>sHV7)_6Quuqy9`m zn8&6u&uA=srog+^T~p0=6a{GS6Vpf+!_`L16!mB!YE5IAuHG^UoBe9hpj_6{QniahcOy&oYIHW?@VV|+; zGD3vZOqP&nZ z-XUc`7~4&p!^l4eBEUo{NL|<>W@8v2I-`COPC*U`q#s>ctB}>NLP%pQ(=U|eVlKDT z3cy6j+VqF#vj4kIg)Q-^c>hpUkn5C2{^0^cb6G(ci<3F=Ey=hrx179^*ZcvI*zrZ?PDXj$E9%y$coZ`Pu*J!(n|_Jfx8 zPi0+6B_o|Jh(5C%g9<^n6DsG!9&Cz5CQn7YIB6hVYb1X+Q`SqKHH<(llW(-6h$vbRc5`O*DOayBP^Af5R}{qt*~iIJY9JtrP9wkefeRwsFpK22IC~>6}G{^W7s#<`pfTPRqN}1@dHE$)$@*7nja1 zcTX-ZTvRk`IxI$hU_ufCW6Gh_Qtchl64k}bfU)-~`!7xH8R+~OEz%=rCP8~77b&J1 zBi;W;);Vp7TdfiTKA(siIcZZ{8^1M?%lr}wYT29{B zguH2aD!*#4O6>cpOl*+pQz|MG=vqah2Q6`hikljCnbgS_s9Yram7ZMcXk8>JaxoQO zI4Zqz@$|_{7h{VdC3(8B=bfBTK5wQ{RT`cdQA*bcfu>3dr<7HO&Qd&xTWx_?32N&> z={mNizTdAGcMN~&Gc0j(KbfRz+Hgs1T3i|2sA-;-s@jARBSz=s!SdrKPoSx-Qaj7& ziiA|3)`n#kTH>Cz)RQe%g$1m%KJKB-d9^o>t$Af)H8hZkM~}~)Fm>|u#mdAZ#w90` zO3J<}Re4!KX}Uqmq6Dq5vhhKRm-e?jw}G35go?(2h|Nt;+y0;4NQ+NTVwKB&4Ph-yw_bLED3--9N& zf0fdfjuciiFJ_C9?WNj?9U)WF221K3kADaB2kmf@ap9vm^UF&(s#H|175k*gDvJ?n z>kJAItn6=2K(j0a2Q6^8W%@y&uTU-+xV_z7AKyCRzH3A8`zqwiGpbP3;_s}5;-RZY z)R|6~>RZcWgBp3HveIa#t_LmgR$UYQboG_TVZVM+EiY_4vi7bSJ#Bv0mZwj(vVT1- zQZ*2_KZBuzZNj^22Gz%G9k=7LpPxMP?W{?PeovTo^}MI{N30)#ZeZ$p6C_@fMp4^` z#<#4nOKsTSmYMAMuw?%`5szHSj`GMMQV84$vB0dJn+u_Yu8Q9zM*&d!G+I8ov-j;yu5Mbna$zjZjAgoyxSdbeWUQ3JzXxm zQg=Tv^8SseeHJl@)Jm`UvK`oxX6AJcQHGSh z(%GDFHCtKImB40WGn9ei?!Q&v^4|W4-Tjc?;h8mOu{YC4hl4KE^g0xAPthN=zCSWOBgdMg^v0Gy9ippKZ#c~&=2iEZ9r3ee2Rj@1-yM16u3*yjQhMYgAe<)uchf0bn9%F#`iPgeiQwQ1KK3+Zj5(y1AC$V%ez{F_Ss~; z*Ly~Ip$z{?Vc$9WbMpL4gnXhN{l0dU4ObfVJKxtPA!GWN?;CvWKM?VwKG1sG@Wn#? za-0+Y!yjlDZ?Dl>b9;T;Zvyr42Q{~zb`VNs>thaTXLvvTk{T^$$LvFzos+zI?`n5! z|4=LES`X-bSR3z%L!M$9>#p_T`hN~1PhI`+{lW8*cAYki@A%J0+5+2{^rZBZi~$)b z85vd|7aEkCpFK1#D?2MAdql>-y!4E8!y{&7&d|8r0l5QnlIWM0h0of;Ck@!~)KTp< zO&g9RYLRpgzobV%rCKC?9^#K{*Evw2tOTX|;EsDwXwPxifGb4-+PteBU3XNR)G8eR EA8XZz+W-In diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_auto_cache_line/HailiangAutoCacheLineDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_auto_cache_line/HailiangAutoCacheLineDeviceDriver.java index 7c00193d..6cc07e53 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_auto_cache_line/HailiangAutoCacheLineDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_auto_cache_line/HailiangAutoCacheLineDeviceDriver.java @@ -349,7 +349,7 @@ public class HailiangAutoCacheLineDeviceDriver extends AbstractOpcDeviceDriver i chm.put("error_code", "0"); acsToWmsService.feedDeviceStatusType(chm); feedDeviceStatusFlag = true; - } else if (this.itemProtocol.getIsonline() && !feedDeviceStatusFlag) { + } else if (this.itemProtocol.getIsonline() && error != 0 && !feedDeviceStatusFlag) { JSONObject chm = new JSONObject(); chm.put("device_code", this.getDevice_code()); //设备报警 @@ -403,6 +403,8 @@ public class HailiangAutoCacheLineDeviceDriver extends AbstractOpcDeviceDriver i JSONObject qtyJson = JSONObject.parseObject(qtyArr); String qty = qtyJson.getString(String.valueOf(prepare_barcode)); taskDto.setQtyArr(qty); + inst.setQuantity(qty); + instructionService.update(inst); } taskserver.update(taskDto); } @@ -975,7 +977,7 @@ public class HailiangAutoCacheLineDeviceDriver extends AbstractOpcDeviceDriver i jo.put("hoist_target_layer", hoist_target_layer); jo.put("task", task); jo.put("prepare_barcode", prepare_barcode); - jo.put("prepare_barcode", prepare_barcode); + jo.put("docking_barcode", docking_barcode); jo.put("isOnline", this.itemProtocol.getIsonline()); jo.put("error", ErrorUtil.getDictDetail("cache_line_error_type", String.valueOf(this.getError()))); jo.put("isError", this.getIserror()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_device/HailiangOldSpecialDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_device/HailiangOldSpecialDeviceDriver.java index e7a2715d..34046233 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_device/HailiangOldSpecialDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_device/HailiangOldSpecialDeviceDriver.java @@ -30,7 +30,6 @@ import org.nl.acs.order.service.dto.ProduceshiftorderDto; import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.beans.factory.annotation.Autowired; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -117,7 +116,7 @@ public class HailiangOldSpecialDeviceDriver extends AbstractOpcDeviceDriver impl DeviceErrorLogDto dto = new DeviceErrorLogDto(); dto.setDevice_code(device_code); dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("error_type", String.valueOf(error))); + dto.setError_info(ErrorUtil.getDictDetail("special_error_type", String.valueOf(error))); deviceErrorLogService.create(dto); } if (error == 1 || error == 51 || error == 0) { diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_empty_station/HailiangOldSpecialEmptyStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_empty_station/HailiangOldSpecialEmptyStationDeviceDriver.java index 930fdeb5..b707a492 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_empty_station/HailiangOldSpecialEmptyStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_empty_station/HailiangOldSpecialEmptyStationDeviceDriver.java @@ -127,13 +127,6 @@ public class HailiangOldSpecialEmptyStationDeviceDriver extends AbstractOpcDevic logServer.deviceExecuteLog(this.device_code, "", "", "信号order:" + last_order + "->" + order); } if (error != last_error) { - if (error != 0) { - DeviceErrorLogDto dto = new DeviceErrorLogDto(); - dto.setDevice_code(device_code); - dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("full_error_type", String.valueOf(error))); - deviceErrorLogService.create(dto); - } logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); } } catch (Exception var17) { @@ -238,7 +231,6 @@ public class HailiangOldSpecialEmptyStationDeviceDriver extends AbstractOpcDevic jo.put("mode", mode == 1 ? "联机" : "单机"); jo.put("move", move == 1 ? "无货" : "有货"); jo.put("order", order); - jo.put("error", ErrorUtil.getDictDetail("empty_error_type", String.valueOf(this.getError()))); jo.put("task", task); jo.put("isOnline", this.itemProtocol.getIsonline()); jo.put("isError", this.getIserror()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_full_station/HailiangOldSpecialFullStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_full_station/HailiangOldSpecialFullStationDeviceDriver.java index 62d04366..db7aec71 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_full_station/HailiangOldSpecialFullStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_full_station/HailiangOldSpecialFullStationDeviceDriver.java @@ -138,13 +138,6 @@ public class HailiangOldSpecialFullStationDeviceDriver extends AbstractOpcDevice } if (error != last_error) { - if (error != 0) { - DeviceErrorLogDto dto = new DeviceErrorLogDto(); - dto.setDevice_code(device_code); - dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("full_error_type", String.valueOf(error))); - deviceErrorLogService.create(dto); - } logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); } @@ -325,7 +318,6 @@ public class HailiangOldSpecialFullStationDeviceDriver extends AbstractOpcDevice jo.put("order", order); jo.put("full_number", full_number); jo.put("requireSucess", requireSucess.toString()); - jo.put("error", ErrorUtil.getDictDetail("full_error_type", String.valueOf(this.getError()))); jo.put("task", task); jo.put("isOnline", this.itemProtocol.getIsonline()); jo.put("isError", this.getIserror()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_pick_station/HailiangOldSpecialPickStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_pick_station/HailiangOldSpecialPickStationDeviceDriver.java index f52d79b7..2a54d8c3 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_pick_station/HailiangOldSpecialPickStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_pick_station/HailiangOldSpecialPickStationDeviceDriver.java @@ -79,13 +79,6 @@ public class HailiangOldSpecialPickStationDeviceDriver extends AbstractOpcDevice logServer.deviceExecuteLog(this.device_code, "", "", "信号now_one_prod_num:" + last_now_one_prod_num + "->" + now_one_prod_num); } if (error != last_error) { - if (error != 0) { - DeviceErrorLogDto dto = new DeviceErrorLogDto(); - dto.setDevice_code(device_code); - dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("error_type", String.valueOf(error))); - deviceErrorLogService.create(dto); - } logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); } @@ -117,7 +110,6 @@ public class HailiangOldSpecialPickStationDeviceDriver extends AbstractOpcDevice JSONObject jo = new JSONObject(); jo.put("device_name", this.getDevice().getDevice_name()); jo.put("isOnline", this.itemProtocol.getIsonline()); - jo.put("error", ErrorUtil.getDictDetail("error_type", String.valueOf(this.getError()))); jo.put("driver_type", "hailiang_old_special_pick_station"); return jo; } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_pour_station/HailiangOldSpecialPourStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_pour_station/HailiangOldSpecialPourStationDeviceDriver.java index 8fbfe754..3a8b2091 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_pour_station/HailiangOldSpecialPourStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_old_special_pour_station/HailiangOldSpecialPourStationDeviceDriver.java @@ -128,13 +128,6 @@ public class HailiangOldSpecialPourStationDeviceDriver extends AbstractOpcDevice logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode); } if (error != last_error) { - if (error != 0) { - DeviceErrorLogDto dto = new DeviceErrorLogDto(); - dto.setDevice_code(device_code); - dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("pour_error_type", String.valueOf(error))); - deviceErrorLogService.create(dto); - } logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); } if (task != last_task) { @@ -298,7 +291,6 @@ public class HailiangOldSpecialPourStationDeviceDriver extends AbstractOpcDevice jo.put("order", order); jo.put("storage_stock_num", storage_stock_num); jo.put("requireSucess", requireSucess.toString()); - jo.put("error", ErrorUtil.getDictDetail("pour_error_type", String.valueOf(this.getError()))); jo.put("task", task); jo.put("isOnline", this.itemProtocol.getIsonline()); jo.put("isError", this.getIserror()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java index 6d52e0ce..9c2f2eb0 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java @@ -123,7 +123,7 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme DeviceErrorLogDto dto = new DeviceErrorLogDto(); dto.setDevice_code(device_code); dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("error_type", String.valueOf(error))); + dto.setError_info(ErrorUtil.getDictDetail("special_error_type", String.valueOf(error))); deviceErrorLogService.create(dto); } if (error == 1 || error == 51 || error == 0) { diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_empty_station/HailiangSpecialEmptyStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_empty_station/HailiangSpecialEmptyStationDeviceDriver.java index f89b1158..f2caccff 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_empty_station/HailiangSpecialEmptyStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_empty_station/HailiangSpecialEmptyStationDeviceDriver.java @@ -126,13 +126,6 @@ public class HailiangSpecialEmptyStationDeviceDriver extends AbstractOpcDeviceDr logServer.deviceExecuteLog(this.device_code, "", "", "信号order:" + last_order + "->" + order); } if (error != last_error) { - if (error != 0) { - DeviceErrorLogDto dto = new DeviceErrorLogDto(); - dto.setDevice_code(device_code); - dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("full_error_type", String.valueOf(error))); - deviceErrorLogService.create(dto); - } logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); } @@ -238,7 +231,6 @@ public class HailiangSpecialEmptyStationDeviceDriver extends AbstractOpcDeviceDr jo.put("mode", mode == 1 ? "联机" : "单机"); jo.put("move", move == 1 ? "无货" : "有货"); jo.put("order", order); - jo.put("error", ErrorUtil.getDictDetail("empty_error_type", String.valueOf(this.getError()))); jo.put("task", task); jo.put("isOnline", this.itemProtocol.getIsonline()); jo.put("isError", this.getIserror()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java index 11c9ac55..07c8716a 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java @@ -138,13 +138,6 @@ public class HailiangSpecialFullStationDeviceDriver extends AbstractOpcDeviceDri } if (error != last_error) { - if (error != 0) { - DeviceErrorLogDto dto = new DeviceErrorLogDto(); - dto.setDevice_code(device_code); - dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("full_error_type", String.valueOf(error))); - deviceErrorLogService.create(dto); - } logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); } @@ -328,7 +321,6 @@ public class HailiangSpecialFullStationDeviceDriver extends AbstractOpcDeviceDri jo.put("order", order); jo.put("requireSucess", requireSucess.toString()); jo.put("full_number", full_number); - jo.put("error", ErrorUtil.getDictDetail("full_error_type", String.valueOf(this.getError()))); jo.put("task", task); jo.put("isOnline", this.itemProtocol.getIsonline()); jo.put("isError", this.getIserror()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pick_station/HailiangSpecialPickStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pick_station/HailiangSpecialPickStationDeviceDriver.java index d0d09503..f4cb462e 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pick_station/HailiangSpecialPickStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pick_station/HailiangSpecialPickStationDeviceDriver.java @@ -85,13 +85,6 @@ public class HailiangSpecialPickStationDeviceDriver extends AbstractOpcDeviceDri logServer.deviceExecuteLog(this.device_code, "", "", "信号now_one_box_num:" + last_now_one_box_num + "->" + now_one_box_num); } if (error != last_error) { - if (error != 0) { - DeviceErrorLogDto dto = new DeviceErrorLogDto(); - dto.setDevice_code(device_code); - dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("error_type", String.valueOf(error))); - deviceErrorLogService.create(dto); - } logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); } @@ -129,7 +122,6 @@ public class HailiangSpecialPickStationDeviceDriver extends AbstractOpcDeviceDri jo.put("device_name", this.getDevice().getDevice_name()); jo.put("now_one_box_num", now_one_box_num); jo.put("isOnline", this.itemProtocol.getIsonline()); - jo.put("error", ErrorUtil.getDictDetail("error_type", String.valueOf(this.getError()))); jo.put("driver_type", "hailiang_special_pick_station"); return jo; } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pour_station/HailiangSpecialPourStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pour_station/HailiangSpecialPourStationDeviceDriver.java index 47a657f9..87b59399 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pour_station/HailiangSpecialPourStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_pour_station/HailiangSpecialPourStationDeviceDriver.java @@ -21,9 +21,7 @@ import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.acsEnum.StatusEnum; -import org.nl.acs.history.ErrorUtil; import org.nl.acs.history.service.DeviceErrorLogService; -import org.nl.acs.history.service.dto.DeviceErrorLogDto; import org.nl.acs.history.service.impl.DeviceErrorLogServiceImpl; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.Instruction; @@ -132,14 +130,6 @@ public class HailiangSpecialPourStationDeviceDriver extends AbstractOpcDeviceDri logServer.deviceExecuteLog(this.device_code, "", "", "信号order:" + last_order + "->" + order); } if (error != last_error) { - if (error != 0) { - DeviceErrorLogDto dto = new DeviceErrorLogDto(); - dto.setDevice_code(device_code); - dto.setError_code(String.valueOf(error)); - dto.setError_info(ErrorUtil.getDictDetail("pour_error_type", String.valueOf(error))); - deviceErrorLogService.create(dto); - } - logServer.deviceItemValue(this.device_code, "error", String.valueOf(error)); logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); } if (storage_stock_num != last_storage_stock_num) { @@ -306,7 +296,6 @@ public class HailiangSpecialPourStationDeviceDriver extends AbstractOpcDeviceDri jo.put("order", order); jo.put("storage_stock_num", storage_stock_num); jo.put("requireSucess", requireSucess.toString()); - jo.put("error", ErrorUtil.getDictDetail("pour_error_type", String.valueOf(this.getError()))); jo.put("task", task); jo.put("isOnline", this.itemProtocol.getIsonline()); jo.put("isError", this.getIserror()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/modules/system/service/impl/DictDetailServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/modules/system/service/impl/DictDetailServiceImpl.java index 008158df..50498e1c 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/modules/system/service/impl/DictDetailServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/modules/system/service/impl/DictDetailServiceImpl.java @@ -95,7 +95,7 @@ public class DictDetailServiceImpl implements DictDetailService { // 清理缓存 delCaches(dictDetail); dictDetailRepository.deleteById(id); - Dict dict = dictRepository.findById(id).get(); + Dict dict = dictRepository.findById(dictDetail.getDict().getId()).get(); ErrorUtil.dictMap.put(dict.getName(), this.getDictByName(dict.getName())); } From b49adc53e6faffb997ae64ff7e89a7ccaceaa334 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 27 Jun 2023 14:10:12 +0800 Subject: [PATCH 4/5] =?UTF-8?q?rev:=E5=8D=8A=E6=88=90=E5=93=81=E6=8B=BC?= =?UTF-8?q?=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/common/enums/AcsTaskEnum.java | 10 ++-- .../impl/ClassstandardServiceImpl.java | 2 +- .../StIvtShutframeinvBcpController.java | 7 +++ .../impl/StIvtCheckmstBcpServiceImpl.java | 51 ++++++++++++++++++- .../impl/StIvtIostorinvBcpServiceImpl.java | 8 +++ .../IStIvtShutframeinvBcpService.java | 4 ++ .../impl/StIvtShutframedtlBcpServiceImpl.java | 6 ++- .../impl/StIvtShutframeinvBcpServiceImpl.java | 43 +++++++++++++++- .../dao/mapper/StIvtStructivtBcpMapper.java | 2 + .../mapper/xml/StIvtStructivtBcpMapper.xml | 19 +++++++ .../semiproductCheck/ProcessDialog.vue | 6 +-- .../semiproductShutFrame/AddDialog.vue | 24 +++++---- .../semiproductShutFrame/shutframe.js | 11 +++- 13 files changed, 167 insertions(+), 26 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java index 31c32c7d..fb7fd6dd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java @@ -33,11 +33,11 @@ public enum AcsTaskEnum { TASK_PLOTTER_CALL_MATERIAL("14","刻字机-叫料请求"), TASK_WARP_MAC("7","包装机-叫料出库"), TASK_WARP_EMPTY("8","包装机-送空框"), - TASK_STRUCT_IN("9","入库-生产入库"), - TASK_STRUCT_OUT("10","出库-生产出库"), - TASK_STRUCT_CHECK("14","盘点任务"), - TASK_STRUCT_SHUT("15","拼盘任务出"), - TASK_STRUCT_SHUT_IN("16","拼盘任务入"), + TASK_STRUCT_IN("9","入库-半成品-生产入库"), + TASK_STRUCT_OUT("10","出库-半成品-生产出库"), + TASK_STRUCT_CHECK("14","半成品-盘点"), + TASK_STRUCT_SHUT("15","半成品-拼盘任务出"), + TASK_STRUCT_SHUT_IN("16","半成品-拼盘任务入"), TASK_STRUCT_CP_IN("11","入库-成品-生产入库"), TASK_STRUCT_CP_OUT("12","出库-成品-生产出库"), TASK_STRUCT_CP_CHECK("13","成品-盘点"), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/service/impl/ClassstandardServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/service/impl/ClassstandardServiceImpl.java index e8cdfd38..ebaafb73 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/service/impl/ClassstandardServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/service/impl/ClassstandardServiceImpl.java @@ -491,7 +491,7 @@ public class ClassstandardServiceImpl implements ClassstandardService { @Override public Set getAllChildIdSet(String class_idStr) { - JSONArray arr = WQLObject.getWQLObject("md_pb_classstandard").query("class_id IN " + class_idStr).getResultJSONArray(0); + JSONArray arr = WQLObject.getWQLObject("md_pb_classstandard").query("class_id IN " + "('"+class_idStr+"')").getResultJSONArray(0); Set set = new HashSet<>(); for (int i = 0; i < arr.size(); i++) { set.addAll(this.getChildIdSet(arr.getJSONObject(i).getString("class_id"))); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/shutFrame/StIvtShutframeinvBcpController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/shutFrame/StIvtShutframeinvBcpController.java index a78945bf..1ca37bbd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/shutFrame/StIvtShutframeinvBcpController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/shutFrame/StIvtShutframeinvBcpController.java @@ -68,6 +68,13 @@ public class StIvtShutframeinvBcpController { return new ResponseEntity<>(shutframeinvBcpService.getBillDtl(jo), HttpStatus.OK); } + @PostMapping("/getBillDtlView") + @Log("查询拼盘详情") + @ApiOperation("查询拼盘详情") + public ResponseEntity getBillDtlView(@RequestBody JSONObject jo) { + return new ResponseEntity<>(shutframeinvBcpService.getBillDtlView(jo), HttpStatus.OK); + } + @PostMapping("/issueTask") @Log("任务下发") @ApiOperation("任务下发") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckmstBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckmstBcpServiceImpl.java index c8bdb999..58b0e6a7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckmstBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckmstBcpServiceImpl.java @@ -1,9 +1,12 @@ package org.nl.wms.storage_manage.semimanage.service.check.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -22,13 +25,18 @@ import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; import org.nl.wms.scheduler_manage.service.point.ISchBasePointService; import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; import org.nl.wms.scheduler_manage.service.point.dao.mapper.SchBasePointMapper; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.nl.wms.storage_manage.CHECKEnum; import org.nl.wms.storage_manage.semimanage.MLEnum; import org.nl.wms.storage_manage.semimanage.service.check.IStIvtCheckdtlBcpService; @@ -41,6 +49,7 @@ import org.nl.wms.storage_manage.semimanage.service.check.dto.CheckQuery; import org.nl.wms.storage_manage.semimanage.service.moveOrLess.IStIvtMoreorlessmstBcpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.HashMap; @@ -75,6 +84,8 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl().eq("struct_id", dtl.getStruct_id())); + String task_group_id = IdUtil.getStringId(); PointEvent event = PointEvent.builder() - .type(AcsTaskEnum.TASK_STRUCT_SHUT.getCode()) + .acs_task_type("7") + .type(AcsTaskEnum.TASK_STRUCT_CHECK.getCode()) .point_code1(struct.getStruct_code()) .point_code2((String) maps.get(0).get("point_code")) .vehicle_code(dtl.getStoragevehicle_code()) + .task_group_id(task_group_id) .product_area(mst.getWorkshop_id()) .build(); - BussEventMulticaster.Publish(event); + // 下发任务 + List taskList = taskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getTask_group_id, task_group_id) + ); + + taskList.forEach(this::sendTask); + checkdtlBcpService.update(new UpdateWrapper() .set("is_down", "1") .set("checkpoint_id", (String) maps.get(0).get("point_code")) @@ -309,6 +336,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl().eq("check_id", id)); @@ -434,6 +464,23 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl result = bean.issueTaskToAcs3(param); + + // 反馈失败报错 + if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) { + throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message")); + } + + // 2.更新任务状态 + taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode()); + taskService.updateById(taskDao); + } + @NotNull private StIvtCheckmstBcp packageMstForm(StIvtCheckmstBcp checkmstYl, JSONObject whereJson) { JSONArray rows = whereJson.getJSONArray("tableData"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java index 91e4da1f..e5ed76ca 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java @@ -135,6 +135,14 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl().lambda() + .set(MdPbStoragevehicleext::getMaterial_id, mst.getMaterial_id()) + .set(MdPbStoragevehicleext::getStorage_qty, mst.getPlan_qty()) + .eq(MdPbStoragevehicleext::getStoragevehicle_code, mst.getStoragevehicle_code()) + ); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java index f579b299..a50cf5a6 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java @@ -34,6 +34,8 @@ public interface IStIvtShutframeinvBcpService extends IService getBillDtl(JSONObject jo); + List getBillDtlView(JSONObject jo); + void confirm(JSONObject jo); void issueTask(JSONObject jo); @@ -43,4 +45,6 @@ public interface IStIvtShutframeinvBcpService extends IService list = rows.stream() - .sorted(Comparator.comparing(row -> ((JSONObject) row).getString("canuse_qty")).reversed()).collect(Collectors.toList()); + .sorted(Comparator.comparing(row -> ((JSONObject) row).getDoubleValue("canuse_qty")).reversed()).collect(Collectors.toList()); rows = JSONArray.parseArray(JSON.toJSONString(list)); StIvtStructattr first_struct = null; @@ -58,11 +58,13 @@ public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl().eq("shutframeinv_id", shutframeinv_id)); LinkedList struct_list = new LinkedList<>(); + double qty = 0; for (int i = 0; i < rows.size(); i++) { JSONObject row = rows.getJSONObject(i); if (ObjectUtil.isEmpty(struct_list)) { struct_list.addFirst(row.getString("struct_code")); first_struct = structattrService.getOne(new QueryWrapper().eq("struct_code", row.getString("struct_code"))); + qty = row.getDoubleValue("canuse_qty"); continue; } else { if (!struct_list.contains(row.getString("struct_code"))) { @@ -93,7 +95,7 @@ public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl().lambda() + .set(MdPbStoragevehicleext::getMaterial_id, "") + .set(MdPbStoragevehicleext::getStorage_qty, BigDecimal.valueOf(0)) + .eq(MdPbStoragevehicleext::getStoragevehicle_code, dtl.getStoragevehicle_code()) + ); + + // 更新扩展属性 -- 有料 + iMdPbStoragevehicleextService.update( + new UpdateWrapper().lambda() + .set(MdPbStoragevehicleext::getStorage_qty, in_ivt.getCanuse_qty()) + .eq(MdPbStoragevehicleext::getStoragevehicle_code, dtl.getStoragevehicle_code_in()) + ); + }); StIvtShutframeinvBcp mst = this.getById(form.getString("shutframeinv_id")); @@ -417,14 +436,36 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl getBillDtlView(JSONObject jo) { + return bcpMapper.getBillDtlView(MapOf.of("shutframeinv_id", jo.getString("shutframeinv_id"))); + } + @Override @Transactional public void delete(Long[] ids) { for (Long id : ids) { StIvtShutframeinvBcp dao = this.getOne(new QueryWrapper().eq("shutframeinv_id", id)); dao.setIs_delete(true); - this.updateById(dao); + + List list = shutframedtlBcpService.list( + new QueryWrapper().lambda() + .eq(StIvtShutframedtlBcp::getShutframeinv_id, dao.getShutframeinv_id()) + ); + + // 解锁货位 + iStIvtStructattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .eq(StIvtStructattr::getStruct_id, list.get(0).getTurnin_struct_id()) + ); + + iStIvtStructattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .eq(StIvtStructattr::getStruct_id, list.get(0).getTurnout_struct_id()) + ); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java index b149518b..e521f889 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java @@ -28,6 +28,8 @@ public interface StIvtStructivtBcpMapper extends BaseMapper { List getStructIvtInfo(@Param("map") Map map); + List getBillDtlView(@Param("map") Map map); + List packageQuery(@Param("query") StructIvtBcpQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml index e092003d..efdc00b9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml @@ -112,6 +112,25 @@ + +