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..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,10 +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_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","成品-盘点"), @@ -68,8 +69,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/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/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/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..eeabc0cb 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 @@ -19,6 +19,8 @@ public enum IOSEnum { IO_TYPE(MapOf.of("入库", "0", "出库", "1")), //是否 IS_USED(MapOf.of("是", "1", "否", "0")), + //仓库编码 + STOR_CODE(MapOf.of("原材料仓", "1528627964823080960", "半成品仓库", "15286279952695336962","成品库", "1528627995269533696")), //托盘超限类型 VEHICLE_OVER_TYPE(MapOf.of("标准", "00", "横向超", "01","纵向超","02")), //单据类型 @@ -31,7 +33,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/pda/PdaStBcpInController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/pda/PdaStBcpInController.java new file mode 100644 index 00000000..87fe74f2 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/pda/PdaStBcpInController.java @@ -0,0 +1,45 @@ +package org.nl.wms.storage_manage.semimanage.controller.pda; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.nl.common.anno.Log; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.storage_manage.semimanage.service.pda.PdaStBcpInService; +import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcpService; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StructIvtBcpQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +/** + *

+ * 一体机半成品入库 前端控制器 + *

+ * + * @author Liuxy + * @since 2023-06-27 + */ +@RestController +@RequestMapping("/api/pda/bcp") +public class PdaStBcpInController { + + @Autowired + private PdaStBcpInService pdaStBcpInService; + + @PostMapping("/getBcpStor") + @Log("查询半成品仓库") + @ApiOperation("查询半成品仓库") + public ResponseEntity getBcpIvtInfo() { + return new ResponseEntity<>(pdaStBcpInService.getBcpIvtInfo(), HttpStatus.OK); + } + + @PostMapping("/getBillType") + @Log("查询单据类型") + @ApiOperation("查询单据类型") + public ResponseEntity getBillType() { + return new ResponseEntity<>(pdaStBcpInService.getBillType(), HttpStatus.OK); + } +} + 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..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 @@ -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 @@ -66,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("任务下发") @@ -75,11 +84,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/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/pda/PdaStBcpInService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/pda/PdaStBcpInService.java new file mode 100644 index 00000000..b3c9e38a --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/pda/PdaStBcpInService.java @@ -0,0 +1,33 @@ +package org.nl.wms.storage_manage.semimanage.service.pda; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StructIvtBcpQuery; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + *

+ * 一体机半成品入库 服务类 + *

+ * + * @author Liuxy + * @since 2023-06-27 + */ +public interface PdaStBcpInService { + + /* + 查询半成品仓库 + */ + JSONObject getBcpIvtInfo(); + + /* + 查询单据类型 + */ + JSONObject getBillType(); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/pda/impl/PdaStBcpInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/pda/impl/PdaStBcpInServiceImpl.java new file mode 100644 index 00000000..8ba181e8 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/pda/impl/PdaStBcpInServiceImpl.java @@ -0,0 +1,77 @@ +package org.nl.wms.storage_manage.semimanage.service.pda.impl; + +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.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +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.storage_manage.CHANGE_BILL_TYPE_ENUM; +import org.nl.wms.storage_manage.IOSEnum; +import org.nl.wms.storage_manage.semimanage.service.pda.PdaStBcpInService; +import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcpService; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.mapper.StIvtStructivtBcpMapper; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StructIvtBcpQuery; +import org.nl.wms.system_manage.service.dict.ISysDictService; +import org.nl.wms.system_manage.service.dict.dao.Dict; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + *

+ * 一体机半成品入库 服务实现类 + *

+ * + * @author Liuxy + * @since 2023-06-27 + */ +@Service +public class PdaStBcpInServiceImpl implements PdaStBcpInService { + + @Autowired + private IStIvtStructattrService structattrService; // 仓位服务 + + @Autowired + private IStIvtBsrealstorattrService storattrService; // 实物属性服务 + + @Autowired + private ISysDictService iSysDictService; // 字典服务 + + @Override + public JSONObject getBcpIvtInfo() { + List storList = storattrService.list( + new QueryWrapper().lambda() + .eq(StIvtBsrealstorattr::getIs_used, IOSEnum.IS_USED.code("是")) + .eq(StIvtBsrealstorattr::getStor_id, IOSEnum.STOR_CODE.code("半成品仓库")) + ); + + JSONObject result = new JSONObject(); + result.put("data", JSONArray.parseArray(JSON.toJSONString(storList))); + result.put("message", "查询成功"); + return result; + } + + @Override + public JSONObject getBillType() { + List dictList = iSysDictService.getDictByName("ST_INV_BCP_IN_TYPE"); + + JSONObject result = new JSONObject(); + result.put("data", JSONArray.parseArray(JSON.toJSONString(dictList))); + result.put("message", "查询成功"); + return result; + } +} 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..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,11 +34,17 @@ public interface IStIvtShutframeinvBcpService extends IService getBillDtl(JSONObject jo); + List getBillDtlView(JSONObject jo); + void confirm(JSONObject jo); void issueTask(JSONObject jo); void taskOperate(JSONObject jo); + void taskOperate2(JSONObject jo); + + void confirmOne(JSONObject jo); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframedtlBcp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframedtlBcp.java index 86882fbd..71740932 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframedtlBcp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframedtlBcp.java @@ -1,5 +1,6 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame.dao; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -25,6 +26,7 @@ public class StIvtShutframedtlBcp implements Serializable { /** * 拆拼单明细标识 */ + @TableId private String shutframeinvdtl_id; /** diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframeinvBcpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframeinvBcpMapper.xml index a6cb19c9..7ee74f17 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframeinvBcpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframeinvBcpMapper.xml @@ -33,5 +33,6 @@ and (mb.material_name = #{query.material_search} OR mb.material_code = #{query.material_search}) + 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..26ee3db8 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).getDoubleValue("canuse_qty")).reversed()).collect(Collectors.toList()); + rows = JSONArray.parseArray(JSON.toJSONString(list)); + StIvtStructattr first_struct = null; StIvtStructattr last_struct = null; int total_qty = 1; @@ -47,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"))) { @@ -77,12 +90,12 @@ 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..b3fc9aaf 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,15 @@ 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.service.vehicle.IMdPbStoragevehicleextService; +import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext; 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 +56,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 +87,10 @@ 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 +129,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 +311,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 +376,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 +386,37 @@ 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()) + ); + + // 更新扩展属性 -- 空载具 + iMdPbStoragevehicleextService.update( + new UpdateWrapper().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")); @@ -215,8 +424,7 @@ 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()) + ); } } @Override + @Transactional public void update(JSONObject form) { Assert.notNull(new Object[]{form, form.get("shutframeinv_id")}, "请求参数不能为空"); StIvtShutframeinvBcp mst = form.toJavaObject(StIvtShutframeinvBcp.class); @@ -256,8 +488,10 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl { 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 @@ + +