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 b894c96a..3cfc0626 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 @@ -30,6 +30,7 @@ public enum AcsTaskEnum { TASK_CACHELINE_OUT("4","缓存线-专机缺料任务"), TASK_PLOTTER_MAC("5","刻字机-满料入库"), TASK_PLOTTER_EMPTY("6","刻字机-呼叫空框"), + TASK_PLOTTER_CALL_MATERIAL("14","刻字机-叫料请求"), TASK_WARP_MAC("7","包装机-叫料出库"), TASK_WARP_EMPTY("8","包装机-送空框"), TASK_STRUCT_IN("9","入库-生产入库"), @@ -49,10 +50,11 @@ public enum AcsTaskEnum { REQUEST_CALLTYPE_EMP("1","专机缺料请求"), REQUEST_PLOTTER_SEND_FULL("3","刻字满料请求"), REQUEST_PLOTTER_CALL_EMP("4","刻字缺空框请求"), + REQUEST_PLOTTER_CALL_MATERIAL("9","刻字叫料请求"), REQUEST_WARP_CALL_FULL("5","包装缺料请求"), REQUEST_WARP_SEND_EMP("6","包装送空框请求"), - REQUEST_WASH_EMP("7","清洗机器缺料请求"), - REQUEST_WASH_FULL("8","清洗机器满料请求"), + REQUEST_WASH_EMP("7","清洗机器上料请求"), + REQUEST_WASH_FULL("8","清洗机器下料请求"), // 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 805b9aab..1e212fc3 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,6 +10,7 @@ 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.sendMaterial.PlotterSendMaterialTask; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.SmartLifecycle; @@ -26,6 +27,7 @@ public class ConventConfig implements SmartLifecycle { AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_CALLTYPE_EMP, SpringContextHolder.getBean(SpeEmpTask.class)); AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_EMP, SpringContextHolder.getBean(WashMachineryTask.class)); AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_SEND_FULL, SpringContextHolder.getBean(PlotterSendMaterialTask.class)); + AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_CALL_MATERIAL, SpringContextHolder.getBean(PlotterCallMaterialTask.class)); AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WARP_CALL_FULL, SpringContextHolder.getBean(WrapCallMaterialTask.class)); AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WARP_SEND_EMP, SpringContextHolder.getBean(WrapSendEmptyTask.class)); System.out.println("初始化Task_Collent完成777"+AcsToWmsServiceImpl.Task_Collent.size()); 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 d67e8937..8d196230 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 @@ -14,7 +14,9 @@ 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.scheduler_manage.service.cacheline.ISchCachelineVehicleService; +import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService; import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle; +import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial; 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.scheduler.ISchProcessRouteService; @@ -54,9 +56,7 @@ public class AgvInstService { @Autowired private ISchBaseTaskService taskService; @Autowired - private ISchCachelineVehicleService cachelineVehicleService; - @Autowired - private ISchCachelineVehicleService cachelineVe3hicleService; + private ISchCachelineVehilematerialService cachelineVehicleService; public static void main(String[] args) { String a= "A1_DC_15_6"; @@ -198,10 +198,10 @@ public class AgvInstService { 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, "cacheLine", cacheLine)); if (vehicle.size()>0){ if (vehicle.size()>count){ - return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(",")); + return vehicle.stream().map(SchCachelineVehilematerial::getVehicle_code).collect(Collectors.joining(",")); } } } 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 e7bdfd1e..eb0f74f4 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 @@ -97,7 +97,6 @@ public class SpeEmpTask extends AbstractAcsTask { if (speemp !=null){ return "speemp"; } - //{"workorder_code":230523019,"device_code":"A1_TW_15_6_D","type":"1"} String cahceLine = getRouteXmlFlowByWorkprodure(param); if (cahceLine == null) { return null; } PdmProduceWorkorder one = workorderService.getOne(new QueryWrapper() @@ -110,7 +109,6 @@ public class SpeEmpTask extends AbstractAcsTask { if (!CollectionUtils.isEmpty(list)){ throw new BadRequestException(String.format("设备%s存在未完成任务:"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code"))); } - JSONObject form = new JSONObject(MapOf.of("start_point_code",cahceLine, "next_point_code",param.getString("device_code"),"return_point_code", cahceLine,"vehicle_code", "","product_area",one.getProduct_area(),"quantity", param.getString("quantity"),"type",AcsTaskEnum.TASK_CACHELINE_OUT.getCode(),"material_id", one.getMaterial_id())); @@ -118,7 +116,6 @@ public class SpeEmpTask extends AbstractAcsTask { JSONObject task = packageParam(form, taskId); task.put("table_fk_id",param.getString("workorder_code")); taskService.save(task.toJavaObject(SchBaseTask.class)); - return taskId; } @@ -146,8 +143,7 @@ public class SpeEmpTask extends AbstractAcsTask { cahceLine = (String) tmp_cahceLine; } if (tmp_cahceLine instanceof Map){ - cahceLine = ((Map) tmp_cahceLine).get(workprodure.get("spec")); - } + cahceLine = ((Map) tmp_cahceLine).get(workprodure.get("spec")); } return cahceLine; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/WashMachineryTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/WashMachineryTask.java index 08c3e835..9605f3c1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/WashMachineryTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/WashMachineryTask.java @@ -12,11 +12,16 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.ConstantParam; import org.nl.common.enums.StatusEnum; +import org.nl.common.enums.WorkerOrderEnum; import org.nl.common.utils.IdUtil; import org.nl.common.utils.MapOf; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService; +import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase; +import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; +import org.nl.wms.product_manage.service.device.dao.PdmBiDevice; import org.nl.wms.product_manage.备份pdm.IPdmProduceWashorderService; import org.nl.wms.product_manage.备份pdm.dao.PdmProduceWashorder; import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; @@ -38,12 +43,16 @@ import java.util.stream.Collectors; @Slf4j @Service public class WashMachineryTask extends AbstractAcsTask { - + private static final String SK_WORKPRODURE_ID = "1535144552481034240"; @Autowired private IPdmProduceWashorderService iPdmProduceWashorderService; @Autowired private WmsToAcsService wmsToAcsService; + @Autowired + private IMdMeMaterialbaseService materialbaseService; + @Autowired + private IPdmBiDeviceService deviceService; FileSystemResourceLoader loader = new FileSystemResourceLoader(); GroovyShell groovyShell = new GroovyShell(); @@ -64,11 +73,10 @@ public class WashMachineryTask extends AbstractAcsTask { pointTab.update(MapOf.of("material_id","","point_status","1"),"point_code in ('"+sql+"')"); QueryWrapper query = new QueryWrapper<>(); PdmProduceWashorder update = new PdmProduceWashorder(); - update.setIsError("0"); - update.setErrorInfo(""); - update.setUpdateId("1"); - update.setUpdateTime(DateUtil.now()); - update.setCreateName("acs"); + update.setIs_error(false); + update.setError_info(""); + update.setUpdate_time(DateUtil.now()); + update.setCreate_name("acs"); update.setStatus(StatusEnum.TASK_FINISH.getCode()); iPdmProduceWashorderService.update(update,new QueryWrapper().eq("workorder_id",workorderId)); } @@ -77,56 +85,65 @@ public class WashMachineryTask extends AbstractAcsTask { @Override @SneakyThrows public String createTask(JSONObject param) { - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject materialTab = WQLObject.getWQLObject("md_me_materialbase"); - String pointCode = param.getString("device_code"); - JSONObject device = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "8", "point_code", pointCode)).process().uniqueResult(0); - //is_used = '0'人工下料:入料仓上线inupperlimit_qty;is_artificial人工 - Double inupperlimitQty = device.getDouble("inupperlimit_qty"); - String deviceCode = device.getString("device_code"); - String artificial = device.getString("is_artificial").equals("1")?"0":"1"; - JSONArray points = pointTab.query("region_code = 'SKQX' and material_id is not null and point_status = '2' and is_used = '"+artificial+"' order by vehicle_qty desc").getResultJSONArray(0); + //清洗机是否有物料重量上线?{"device_code":"A1_CPQXJ_01_S","type":"7"} + PdmProduceWashorder status = iPdmProduceWashorderService.getOne(new QueryWrapper().lt("status", WorkerOrderEnum.COMPLETE.getCode())); + if (status!=null){ + return ""; + } + //TODO:判断是否人工仓优先:人工仓一台一台爬,机械仓根据物料爬 + QueryWrapper query = new QueryWrapper() + .gt("deviceinstor_qty", 0) + .eq("is_used", true) + .eq("workprocedure_id", SK_WORKPRODURE_ID) + .isNotNull("material_id") + .orderByDesc("deviceinstor_qty"); + + List SKQX = deviceService.list(query); + //查询深坑相同物料类型的点位:深坑单位:重量 - if (points.size()>0){ - Map> materialCollent = points.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("material_id"))); + if (SKQX.size()>0){ + + Map> collect = SKQX.stream().collect(Collectors.groupingBy(PdmBiDevice::getMaterial_id)); //查询清洗设备最大重量 Resource resource = loader.getResource("classpath:/groovyFile.groovy"); Script script = groovyShell.parse(resource.getFile()); - ArrayList result = (ArrayList)script.invokeMethod("getPoints", new Object[]{points, materialCollent, inupperlimitQty}); + ArrayList result = (ArrayList)script.invokeMethod("getPoints", new Object[]{SKQX, collect, 9999999d}); //确认acs参数 创建工单下发acs if (!CollectionUtils.isEmpty(result)){ String material_id = result.get(0).getString("material_id"); - JSONObject material = materialTab.query("material_id = '" + material_id + "' and is_delete = 0").uniqueResult(0); - Double qty = result.stream().mapToDouble(value -> value.getDouble("qty")).sum(); + MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper().eq("material_id", material_id).eq("is_delete", false)); PdmProduceWashorder washorder = new PdmProduceWashorder(); - washorder.setWorkorderId(IdUtil.getStringId()); - washorder.setWorkorderCode(IdUtil.getStringId()); - washorder.setIsNeedmove("0"); - washorder.setDeviceCode(deviceCode); - washorder.setMaterialWeight(new BigDecimal(qty)); - washorder.setMaterialCode(material.getString("material_code")); - washorder.setCreateTime(DateUtil.now()); - washorder.setInDevices(result.stream().map(a->a.getString("point_code")).collect(Collectors.joining(","))); - washorder.setProductArea(device.getString("product_area")); - washorder.setCreateId("1"); - washorder.setCreateName("acs"); + washorder.setWorkorder_id(IdUtil.getStringId()); + washorder.setWorkorder_code(IdUtil.getStringId()); + washorder.setDevice_code(param.getString("device_code")); + washorder.setWeight(new BigDecimal(result.stream().mapToDouble(value -> value.getDouble("weight")).sum())); + washorder.setQty(new BigDecimal(result.stream().mapToDouble(value -> value.getDouble("qty")).sum())); + washorder.setMaterial_code(material.getMaterial_code()); + washorder.setMaterial_spec(material.getMaterial_spec()); + washorder.setMaterial_id(material.getMaterial_id()); + washorder.setCreate_time(DateUtil.now()); + washorder.setIn_devices(result.stream().map(a->a.getString("device_code")).collect(Collectors.joining(","))); + washorder.setProduct_area("A1"); + washorder.setCreate_id("1"); + washorder.setCreate_name("acs"); washorder.setStatus(StatusEnum.TASK_CREATE.getCode()); - //下发" + //下发:"人工框:一个一个爬坡:是人工仓优先还是自动仓优先 JSONArray request = new JSONArray(); - JSONObject jsonObject = new JSONObject(MapOf.of("workorder_id", washorder.getWorkorderId() - , "workorder_code", washorder.getWorkorderCode() - , "qty", washorder.getMaterialWeight() - , "material_code", washorder.getMaterialCode() - , "device_code", pointCode - , "is_needmove", "0" - , "in_devices", washorder.getInDevices() + JSONObject jsonObject = new JSONObject(MapOf.of("workorder_id", washorder.getWorkorder_id() + , "workorder_code", washorder.getWorkorder_code() + , "qty", washorder.getQty() + ,"weight",washorder.getWeight() + , "material_code", washorder.getMaterial_code() + , "material_spec", washorder.getMaterial_spec() + , "device_code", washorder.getDevice_code() + , "in_devices", washorder.getIn_devices() )); request.add(jsonObject); Map response = wmsToAcsService.order(request); if (response.get("status").equals(HttpStatus.BAD_REQUEST)){ - washorder.setErrorInfo((String) response.get("message")); + washorder.setError_info((String) response.get("message")); washorder.setStatus(StatusEnum.TASK_START_ERROR.getCode()); - washorder.setIsError("1"); + washorder.setIs_error(true); } iPdmProduceWashorderService.save(washorder); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/EngraveCallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/EngraveCallMaterialTask.java new file mode 100644 index 00000000..b116868b --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/EngraveCallMaterialTask.java @@ -0,0 +1,32 @@ +package org.nl.wms.product_manage.sch.tasks.callMaterial; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; +import org.springframework.stereotype.Service; + +/* + * @author ZZQ + * @Date 2023/6/16 08:40 + */ +@Service +public class EngraveCallMaterialTask extends AbstractAcsTask { + @Override + public void updateTaskStatus(JSONObject taskObj, String status) { + + } + + @Override + public String createTask(JSONObject param) { + return null; + } + + @Override + public void cancel(String task_id) { + + } + + @Override + public void pointConfirm(JSONObject param) { + + } +} 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 new file mode 100644 index 00000000..5ef41a1f --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterCallMaterialTask.java @@ -0,0 +1,202 @@ +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/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java index eb5e84be..687aaa3b 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 @@ -169,12 +169,10 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl() - .set("workorder_status", WorkerOrderEnum.SEND.getCode()) - .set("down_id", SecurityUtils.getCurrentUserId()) - .set("down_name", SecurityUtils.getCurrentNickName()) - .set("down_time", new Date()) - .in("workorder_id", ids)); + List workorders = this.list(new QueryWrapper().in("workorder_id", ids).lt("workorder_status",WorkerOrderEnum.AUTO_COMPLETE.getCode())); + if (workorders.size()!= ids.size()){ + throw new BadRequestException("完成的工单不允许再次下发"); + } this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, ids.toArray(new String[0])); } @@ -421,7 +419,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl resp = wmsToAcsService.order(array); - if (HttpStatus.BAD_REQUEST.equals(resp.get("status"))) { + if (HttpStatus.BAD_REQUEST.value() == (int)resp.get("status")) { throw new BadRequestException(resp.get("message") != null ? String.valueOf(resp.get("message")) : "acs反馈异常"); } return RestBusinessTemplate.execute(() -> resp); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/dao/PdmProduceWashorder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/dao/PdmProduceWashorder.java index c8c6693d..beec8a06 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/dao/PdmProduceWashorder.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/dao/PdmProduceWashorder.java @@ -24,58 +24,62 @@ public class PdmProduceWashorder implements Serializable { /** * 工单编号 */ - private String workorderId; + private String workorder_id; /** * 工单编号 */ - private String workorderCode; + private String workorder_code; private String status; /** * 生产区域 */ - private String productArea; + private String product_area; /** * 实际数量 */ - private String qty; + private BigDecimal qty; + /** + * 实际单重 + */ + private BigDecimal weight; /** * 物料编号 */ - private String materialCode; + private String material_code; /** * 物料标识 */ - private String isNeedmove; - + private String material_spec; /** - * 实际单重 + * 物料标识 */ - private BigDecimal materialWeight; + private String material_id; + /** * 当前生产设备编码 */ - private String deviceCode; + private String device_code; /** * 工单是否异常 */ - private String isError; + private Boolean is_error; /** * 设备集合 */ - private String inDevices; + private String in_devices; /** * 异常信息 */ - private String errorInfo; + private String error_info; /** * 备注 @@ -85,32 +89,21 @@ public class PdmProduceWashorder implements Serializable { /** * 创建人 */ - private String createId; + private String create_id; /** * 创建人 */ - private String createName; + private String create_name; /** * 创建时间 */ - private String createTime; - - /** - * 修改人 - */ - private String updateId; - - /** - * 修改人 - */ - private String updateName; - + private String create_time; /** * 修改时间 */ - private String updateTime; + private String update_time; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java index e8b8baa2..9b426302 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java @@ -78,6 +78,7 @@ public class SchedulerController { throw new BadRequestException("当前工序路由id"+route.getProcess_id()+"没有对应xml配置文件配置"); } route.setProcess_name(process.getName()); + route.setRule_code(form.getString("material_spec")); processRouteService.save(route); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehicleService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehicleService.java index a684e26e..c4e9bd07 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehicleService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehicleService.java @@ -16,5 +16,4 @@ import java.util.Map; */ public interface ISchCachelineVehicleService extends IService { - List getCachelineVehicle(Map query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehilematerialService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehilematerialService.java index 9794fb6b..3f86794a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehilematerialService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehilematerialService.java @@ -1,8 +1,12 @@ package org.nl.wms.scheduler_manage.service.cacheline; +import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle; import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; +import java.util.Map; + /** *

* 缓存线载具物料表 服务类 @@ -12,5 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2023-05-06 */ public interface ISchCachelineVehilematerialService extends IService { + List getCachelineVehicle(Map query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehicleMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehicleMapper.java index c3bd2e02..25e969f1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehicleMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehicleMapper.java @@ -16,7 +16,7 @@ import java.util.Map; */ public interface SchCachelineVehicleMapper extends BaseMapper { - List getCachelineVehicle(Map query); +// List getCachelineVehicle(Map query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehilematerialMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehilematerialMapper.java index cf0f52cc..1be6f9a8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehilematerialMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehilematerialMapper.java @@ -1,6 +1,7 @@ package org.nl.wms.scheduler_manage.service.cacheline.dao.mapper; import org.apache.ibatis.annotations.Param; +import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle; import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -18,4 +19,7 @@ import java.util.Map; public interface SchCachelineVehilematerialMapper extends BaseMapper { List getErrorVeh(@Param("cacheline_code") String cacheline_code); + + List getCachelineVehicle(Map query); + } 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 6158c5ee..2c4a4415 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 @@ -24,4 +24,18 @@ + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehicleServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehicleServiceImpl.java index 887d11e1..ad96bdbe 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehicleServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehicleServiceImpl.java @@ -20,8 +20,4 @@ import java.util.Map; @Service public class SchCachelineVehicleServiceImpl extends ServiceImpl implements ISchCachelineVehicleService { - @Override - public List getCachelineVehicle(Map query) { - return this.baseMapper.getCachelineVehicle(query); - } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehilematerialServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehilematerialServiceImpl.java index 40949607..978a0854 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehilematerialServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehilematerialServiceImpl.java @@ -1,11 +1,15 @@ package org.nl.wms.scheduler_manage.service.cacheline.impl; +import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle; import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial; import org.nl.wms.scheduler_manage.service.cacheline.dao.mapper.SchCachelineVehilematerialMapper; import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; + /** *

* 缓存线载具物料表 服务实现类 @@ -17,4 +21,8 @@ import org.springframework.stereotype.Service; @Service public class SchCachelineVehilematerialServiceImpl extends ServiceImpl implements ISchCachelineVehilematerialService { + @Override + public List getCachelineVehicle(Map query) { + return this.baseMapper.getCachelineVehicle(query); + } } 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 4e698d00..b7ff7137 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 @@ -49,6 +49,7 @@ public class SchBasePointServiceImpl extends ServiceImpl page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize()); + page.setOrderBy("point_code asc"); List list = schBasePointMapper.queryAll(whereJson); Set regionCodes = list.stream().map(a -> a.get("region_code")).collect(Collectors.toSet()); List regions = schBaseRegionService.list(new QueryWrapper().in("region_code", regionCodes)); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/EngraveScheduleService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/EngraveScheduleService.java new file mode 100644 index 00000000..e57583e3 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/EngraveScheduleService.java @@ -0,0 +1,125 @@ +package org.nl.wms.scheduler_manage.service.scheduler; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.enums.WorkerOrderEnum; +import org.nl.common.utils.BaseCode; +import org.nl.common.utils.IdUtil; +import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService; +import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase; +import org.nl.wms.product_manage.sch.tasks.callMaterial.EngraveCallMaterialTask; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp; +import org.nl.wms.storage_manage.semimanage.service.iostorInv.IStIvtIostorinvBcpOutService; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp; +import org.slf4j.MDC; +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.math.BigDecimal; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/* + * @author ZZQ + * @Date 2023/6/16 09:21 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class EngraveScheduleService { + + private static final String ENGRAVE_WORKPRODURE = "1535144682756116480"; + + @Autowired + private IPdmProduceWorkorderService workorderService; + @Autowired + private IStIvtIostorinvBcpOutService stIvtIostorinvBcpOutService; + @Autowired + private EngraveCallMaterialTask engraveCallMaterialTask; + @Autowired + private IMdMeMaterialbaseService materialbaseService; + + public void run(){ + MDC.put("requestMethod","EngraveScheduleService#EngravePublish"); + MDC.put("requestIp", "127.0.0.1"); + MDC.put("traceId", BaseCode.intToChars(IdUtil.getLongId())); + MDC.put("requestTime", DateUtil.now()); + this.EngravePublish(); + } + + @Transactional + public void EngravePublish(){ + /** + * 1.查询当前正在执行的刻字工单数组 + * 2.获取相同物料的工单:查询半成品库存物料:有的话则进行半成品出库:出到对接位 + * 3.半成品出库完成后:触发刻字机叫料任务: + * 4。根据物料获取工单对应设备:生成刻字机叫料任务 + */ + List list = workorderService.list(new QueryWrapper() + .eq("workprocedure_id", ENGRAVE_WORKPRODURE) + .eq("workorder_status", WorkerOrderEnum.PRODUCTING.getCode()) + .apply("plan_qty > dq_real_qty")); + if (CollectionUtils.isEmpty(list)){ + return; + } + Map> collect = list.stream().collect(Collectors.groupingBy(PdmProduceWorkorder::getMaterial_id)); + //工单开工规则 + for (Map.Entry> entry : collect.entrySet()) { + JSONObject form = new JSONObject(); + form.put("stor_id","528627995269533696");//st_ivt_sectattr紫铜车间-半成品库区 + form.put("sect_id","1528631044482404352"); + form.put("material_id",entry.getKey()); + form.put("product_code","A1");//车间 + form.put("point_code","A1_KZPP_D"); + StIvtStructivtCp structivtCp = stIvtIostorinvBcpOutService.autoConfirm(form); + if (structivtCp == null){ continue; } + //生成输送线到刻字机任务 + //工单物料分配规则 + MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper().eq("material_id", entry.getKey()).eq("is_delete", false)); + List current_workorders = entry.getValue(); + BigDecimal canuse_qty = structivtCp.getCanuse_qty(); + String grop_id = IdUtil.getStringId(); + + for (PdmProduceWorkorder current_workorder : current_workorders) { + BigDecimal need = current_workorder.getPlan_qty().subtract(current_workorder.getDq_real_qty()); + if (need.intValue() <= 0){ continue; } + int min = Math.min(canuse_qty.intValue(), need.intValue()); + + JSONObject taskForm = new JSONObject(); + taskForm.put("workorder_code",current_workorder.getWorkorder_code()); + taskForm.put("device_code",current_workorder.getDevice_code()); + taskForm.put("qty",min); + taskForm.put("weight",material.getNet_weight().doubleValue()*min); + taskForm.put("material_id",material.getMaterial_id()); + taskForm.put("material_code",material.getMaterial_code()); + taskForm.put("material_spec",material.getMaterial_spec()); + taskForm.put("task_grop_id", grop_id); + engraveCallMaterialTask.createTask(taskForm); + canuse_qty = canuse_qty.subtract(need); + if (canuse_qty.intValue()<=0){return;} + } + if (canuse_qty.intValue() > 0){ + JSONObject taskForm = new JSONObject(); + taskForm.put("workorder_code"," "); + taskForm.put("device_code",""); + taskForm.put("qty",canuse_qty); + taskForm.put("weight",material.getNet_weight().multiply(canuse_qty)); + taskForm.put("material_id",material.getMaterial_id()); + taskForm.put("material_code",material.getMaterial_code()); + taskForm.put("material_spec",material.getMaterial_spec()); + taskForm.put("task_grop_id", grop_id); + engraveCallMaterialTask.createTask(taskForm); + } + } + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java index cfc97775..551e3f50 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java @@ -568,9 +568,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl> collect = iostorinvdisCpService.list( new QueryWrapper().lambda() .eq(StIvtIostorinvdisCp::getTask_id, task_id) - ) - .stream() - .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); + ).stream().collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); for(List list : collect.values()) { StIvtIostorinvdisCp disDao_2 = list.get(0); @@ -709,7 +707,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl - * 仓位库存表 + * 仓位库存表:半成品/成品公用 *

* * @author generator diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java index 8b3889b8..a66ff3b9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java @@ -105,6 +105,8 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl{ + switch (whereJson.getString("rule_type")) { + case RuleUtil.PRODUCTION_OUT_1 : + if (ObjectUtil.isEmpty(whereJson.getString("sale_id"))) throw new BadRequestException("销售单不能为空"); + ivtDao = iStIvtStructivtCpService.queryIvtOutOne(whereJson); + break; + case RuleUtil.PRODUCTION_OUT_2 : + ivtDao = iStIvtStructivtCpService.queryIvtOutOne(whereJson); + break; + } + //锁定 + iStIvtStructattrService.update(new UpdateWrapper().lambda() + .eq(StIvtStructattr::getStruct_code, ivtDao.getStruct_code()) + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁")) + .set(StIvtStructattr::getInv_code,"")); + },whereJson.getString("material_id"),1); + return ivtDao; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/IStIvtIostorinvBcpOutService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/IStIvtIostorinvBcpOutService.java index c7f32b04..6ff5650a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/IStIvtIostorinvBcpOutService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/IStIvtIostorinvBcpOutService.java @@ -3,6 +3,7 @@ package org.nl.wms.storage_manage.semimanage.service.iostorInv; 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.productmanage.service.structIvt.dao.StIvtStructivtCp; import org.nl.wms.storage_manage.semimanage.service.iostorInv.dao.StIvtIostorinvBcp; import org.nl.wms.storage_manage.semimanage.service.iostorInv.dto.BcpIostorInvQuery; @@ -43,6 +44,16 @@ public interface IStIvtIostorinvBcpOutService extends IService().eq("material_id", form.getString("material_id"))); + JSONObject param = new JSONObject(); + param.put("stor_id", form.getString("stor_id")); + param.put("sect_id", form.getString("sect_id")); + param.put("material_id", form.getString("material_id")); + param.put("rule_type", RuleUtil.PRODUCTION_OUT_2); + // 2.锁定仓位 + StIvtStructivtCp structivtBcp = divRuleCpService.divRuleOutAndLock(param); + if (structivtBcp == null){ + return null; + } + StIvtIostorinvBcp mst = new StIvtIostorinvBcp(); + mst.setIostorinv_id(IdUtil.getStringId()); + mst.setBill_code(CodeUtil.getNewCode("IO_CODE")); + mst.setBiz_date(form.getString("biz_date")); + mst.setBill_type(form.getString("bill_type")); + mst.setIo_type(IOSEnum.IO_TYPE.code("出库")); + mst.setBill_status(IOSEnum.BILL_STATUS.code("生成")); + mst.setRemark(form.getString("remark")); + mst.setWorkshop_id(form.getString("product_code")); + mst.setPoint_code(form.getString("point_code")); + mst.setMaterial_id(material.getMaterial_id()); + mst.setPcsn(StringUtils.isNotEmpty(form.getString("pcsn")) ? form.getString("pcsn") : DateUtil.today()); + mst.setPlan_qty(structivtBcp.getCanuse_qty()); + mst.setQuality_scode(structivtBcp.getQuality_scode()); + mst.setQty_unit_id(structivtBcp.getQty_unit_id()); + mst.setBase_bill_code(""); + mst.setQty_unit_name(" "); + mst.setUnit_weight(material.getNet_weight()); + mst.setStoragevehicle_code(" "); + mst.setStoragevehicle_id(" "); + 仓库数据: + { + StIvtBsrealstorattr stor = storattrService.getOne(new QueryWrapper().eq("stor_id", form.getString("stor_id"))); + mst.setStor_id(stor.getStor_id()); + mst.setStor_code(stor.getStor_code()); + mst.setStor_name(stor.getStor_name()); + StIvtSectattr sect = sectattrService.getById(form.getString("sect_id")); + mst.setSect_code(sect.getSect_code()); + mst.setSect_id(sect.getSect_id()); + mst.setSect_name(sect.getSect_name()); + mst.setStruct_id(structivtBcp.getStruct_id()); + mst.setStruct_code(structivtBcp.getStruct_code()); + mst.setStruct_name(structivtBcp.getStruct_name()); + } + mst.setCreate_id("1"); + mst.setCreate_name("acs"); + mst.setCreate_time(DateUtil.now()); + PointEvent event = PointEvent.builder() + .type(AcsTaskEnum.TASK_STRUCT_OUT.getCode()) + .point_code1(mst.getPoint_code()) + .point_code2(structivtBcp.getStruct_code()) + .vehicle_code(mst.getStoragevehicle_code()) + .product_area(mst.getWorkshop_id()) + .callback((Consumer) mst::setTask_id) + .build(); + BussEventMulticaster.Publish(event); + mst.setWork_status(IOSEnum.WORK_STATUS.code("生成")); + mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); + this.save(mst); + return structivtBcp; + } + @Override @Transactional public String confirmTask(JSONObject form) { diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml index a1268ad0..02070dd5 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml @@ -23,11 +23,11 @@ spring: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy # url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false -# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false +# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false username: ${DB_USER:root} # password: ${DB_PWD:123456} - password: ${DB_PWD:942464Yy} + password: ${DB_PWD:123456} # 初始连接数 initial-size: 5 diff --git a/mes/hd/nladmin-system/src/main/resources/groovyFile.groovy b/mes/hd/nladmin-system/src/main/resources/groovyFile.groovy index 76dcfc98..d220ccd2 100644 --- a/mes/hd/nladmin-system/src/main/resources/groovyFile.groovy +++ b/mes/hd/nladmin-system/src/main/resources/groovyFile.groovy @@ -1,24 +1,27 @@ -import com.alibaba.fastjson.JSONArray import com.alibaba.fastjson.JSONObject +import org.nl.wms.product_manage.service.device.dao.PdmBiDevice -def getPoints(JSONArray points,Map> materialCollent,Double inupperlimitQty){ +def getPoints(List devices, Map> materialCollent, Double inupperlimitQty){ - def list = new ArrayList<>(); - JSONObject point = points.getJSONObject(0) - String materialId = point.getString("material_id"); - List collect = materialCollent.get(materialId); - collect.sort(Comparator.comparingDouble({ item -> ((JSONObject) item).getDouble("vehicle_qty") }).reversed()); + PdmBiDevice device = devices.get(0) + String materialId = device.getMaterial_id(); + List collect = materialCollent.get(materialId); Double qty = 0.0; - for (Object o1 : collect) { + def list = new ArrayList<>(); + for (PdmBiDevice o1 : collect) { if (qty>inupperlimitQty){ return list; } def item = new JSONObject() - item.put("point_code",((JSONObject) o1).getString("point_code")) - item.put("qty",((JSONObject) o1).getDouble("vehicle_qty")); + item.put("device_code",o1.getDevice_code()) + item.put("qty",o1.getDeviceinstor_qty()); + item.put("weight",o1.getDeviceinstor_weight().doubleValue()); item.put("material_id",materialId); list.add(item); - qty = qty+((JSONObject) o1).getDouble("vehicle_qty"); + if (o1.getIs_artificial()){ + return list; + } + qty = qty+o1.getDeviceinstor_qty(); } return list; } diff --git a/mes/hd/nladmin-system/src/main/resources/scheduler.xml b/mes/hd/nladmin-system/src/main/resources/scheduler.xml index 62cc0d57..d344492b 100644 --- a/mes/hd/nladmin-system/src/main/resources/scheduler.xml +++ b/mes/hd/nladmin-system/src/main/resources/scheduler.xml @@ -23,4 +23,12 @@ + + + + + + + + diff --git a/mes/qd/src/views/wms/scheduler_manage/task/index.vue b/mes/qd/src/views/wms/scheduler_manage/task/index.vue index 4576e823..805fc840 100644 --- a/mes/qd/src/views/wms/scheduler_manage/task/index.vue +++ b/mes/qd/src/views/wms/scheduler_manage/task/index.vue @@ -138,7 +138,7 @@ clearable style="width: 60px" /> - 任务调度 + 任务调度 @@ -157,7 +157,7 @@ - + @@ -180,8 +180,16 @@ {{ dict.label.task_finished_type[scope.row.finished_type] }} - - + + + + + +