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 ece8922b..20e4eb4a 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 @@ -27,7 +27,7 @@ public enum AcsTaskEnum { //专机到深坑任务:深坑业务单独处理 TASK_PRODUCT_WASH("3","专机-深坑任务"), //3个点,任务编号,缓存线满料载具列表 - TASK_CACHELINE_OUT("4","缓存线-专机出库任务"), + TASK_CACHELINE_OUT("4","缓存线-专机缺料任务"), TASK_PLOTTER_MAC("5","刻字机-满料入库"), TASK_PLOTTER_EMPTY("6","刻字机-呼叫空框"), TASK_WARP_MAC("7","包装机-叫料出库"), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 2620e38d..66b5d99f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -9,7 +9,6 @@ import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; -import org.nl.common.utils.MapOf; import org.nl.common.utils.api.ResultCode; import org.nl.modules.common.exception.BizCoreException; import org.nl.wms.ext.acs.service.AcsToWmsService; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 07476391..e44ed236 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -122,52 +122,19 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{ String task_id = row.getString("task_id"); TaskDto taskDto = taskService.findById(task_id); String processing_class = taskDto.getHandle_class(); - //1:执行中,2:完成 ,3:acs取消 - String acs_task_status = row.getString("status"); - String message = ""; - String status = ""; - if ("1".equals(acs_task_status)) { - status = AcsTaskEnum.STATUS_START.getCode(); - } - if ("2".equals(acs_task_status)) { - status = AcsTaskEnum.STATUS_FINISH.getCode(); - } - if ("3".equals(acs_task_status)) { - status = AcsTaskEnum.STATUS_CANNEL.getCode(); - } + String status = row.getString("status"); // 任务处理类 try { - Object obj = SpringContextHolder.getBean(Class.forName(processing_class)); - Method m = obj.getClass().getDeclaredMethod("updateTaskStatus", JSONObject.class, String.class); - m.invoke(obj, row, status); - } catch (InvocationTargetException e) { - e.printStackTrace(); - //空指针 - if (ObjectUtil.isNull(e.getTargetException().getMessage())) { - message = e.getTargetException().toString(); - } else { - message = e.getTargetException().getMessage(); - } - log.info("任务状态更新失败:{}", message); - - JSONObject json = new JSONObject(); - json.put("task_id", task_id); - json.put("message", message); - errArr.add(json); - + AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(processing_class)); + taskHandler.updateTaskStatus(row,status); } catch (Exception e) { - e.printStackTrace(); - message = e.getMessage(); - log.info("任务状态更新失败:{}", message); - + log.info("任务状态更新失败:{}", e.getMessage()); JSONObject json = new JSONObject(); json.put("task_id", task_id); - json.put("message", message); + json.put("message", e.getMessage()); errArr.add(json); - } } - JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); result.put("message", "任务状态反馈成功!"); @@ -176,6 +143,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{ return result; } + private String acsStatus2Mes(JSONObject row) { + //6:执行中,7:完成 ,8:acs取消 acs:123 + String acs_task_status = row.getString("status"); + String status = ""; + if ("1".equals(acs_task_status)) { + status = StatusEnum.TASK_RUNNING.getCode(); + } + if ("2".equals(acs_task_status)) { + status = StatusEnum.TASK_FINISH.getCode(); + } + if ("3".equals(acs_task_status)) { + status = StatusEnum.TASK_CANNEL.getCode(); + } + return status; + } + @Override public Map receivePointStatusFromAcs(Map jsonObject) { return null; 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 0f036b19..03a9fb03 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 @@ -1,6 +1,7 @@ package org.nl.wms.ext.acs.service.impl; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -85,6 +86,7 @@ public class AgvInstService { } List> collect = deviceService.workproceduceDevices(query); + log.info("调度任务分配点位信息:", JSON.toJSONString(collect)); List> list = collect.stream().filter(stringStringMap -> stringStringMap.get("tasks") == null || stringStringMap.get("materials").contains(task.getString("material_id"))).collect(Collectors.toList()); task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode()); task.put("is_send","1"); @@ -101,15 +103,15 @@ public class AgvInstService { 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)){ + throw new BadRequestException("当前缓存线无可用空箱:"+nextPoint); + } } - 结果校验:{ if (StringUtils.isBlank(nextPoint)) { throw new BadRequestException("逻辑非配错误,请检查代码"); } } -// basePointService.update(new UpdateWrapper() -// .set("lock_type",StatusEnum.LOCK_ON.getCode()).set("task_id",task.getString("task_id")).eq("point_code",nextPoint)); SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); schBaseTask.setBarcodeArr(cacheVehile); @@ -180,6 +182,7 @@ public class AgvInstService { schBaseTask.setPoint_code3(startPoint); schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode()); schBaseTask.setUpdate_time(new Date()); + schBaseTask.setUpdate_name("调度服务"); taskService.updateById(schBaseTask); } 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 f36c814a..20bbc3f7 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 @@ -2,7 +2,7 @@ package org.nl.wms.ext.acs.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; - import lombok.RequiredArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.common.utils.AcsUtil; @@ -32,8 +32,11 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{ , "next_point_code", task.getString("point_code3")//空盘返回点 , "task_group_id", StringUtils.isBlank(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id") , "priority", task.getString("priority") - , "is_send", task.getString("is_send") + , "is_send", task.getBoolean("is_send")?"1":"0" , "vehicle_code", task.getString("vehicle_code") + , "quantity", task.getString("material_qty") + , "barcodeArr", task.getString("barcodeArr") + , "proprity_floor", "2" , "agv_system_type", task.getString("agv_system_type") )); form.add(param); @@ -104,3 +107,4 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{ } } + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/TaskService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/TaskService.java index 384a7323..09a69a5d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/TaskService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/TaskService.java @@ -84,7 +84,6 @@ public interface TaskService { * * @param param */ - void operation(Map param); /** * 获取任务类型 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/impl/TaskServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/impl/TaskServiceImpl.java index d213bd48..8fff62e4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/impl/TaskServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/impl/TaskServiceImpl.java @@ -10,6 +10,7 @@ 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.wql.WQL; @@ -176,48 +177,6 @@ public class TaskServiceImpl implements TaskService { } } - @Override - public void operation(Map map) { - WmsToAcsServiceImpl wms = new WmsToAcsServiceImpl(); - String task_id = MapUtil.getStr(map, "task_id"); - String method_name = MapUtil.getStr(map, "method_name"); - JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); - if (taskObj.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) throw new BadRequestException("任务已完成!"); - - switch (method_name) { // forceFinish, cancel - case "immediateNotifyAcs": - JSONArray array = new JSONArray(); - array.add(taskObj); - wms.issueTaskToAcs(array); - break; - case "forceFinish": - JSONArray finish = new JSONArray(); - JSONObject res = new JSONObject(); - res.put("task_id", task_id); - res.put("status", AcsTaskEnum.STATUS_FINISH.getCode()); - res.put("finished_type", AcsTaskEnum.MANUAL_TASK_FINISHED_TYPE.getCode()); // 手动完成 - finish.add(res); - acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(finish)); - break; - case "cancel": - JSONArray cancel = new JSONArray(); - JSONObject res2 = new JSONObject(); - res2.put("task_id", task_id); - res2.put("status", AcsTaskEnum.STATUS_CANNEL.getCode()); - cancel.add(res2); - acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(cancel)); - break; - case "delete": - JSONArray delete = new JSONArray(); - JSONObject res3 = new JSONObject(); - res3.put("task_id", task_id); - res3.put("status", AcsTaskEnum.STATUS_CANNEL.getCode()); - delete.add(res3); - acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(delete)); - break; - default: break; - } - } @Override public JSONArray getTaskTypes() { 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 c5fce2a6..f1403524 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 @@ -5,28 +5,24 @@ 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 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.jetbrains.annotations.Nullable; import org.nl.common.enums.AcsTaskEnum; -import org.nl.common.enums.InterfaceLogType; import org.nl.common.enums.StatusEnum; 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.WQL; -import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.impl.AgvInstService; 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.device.dao.PdmBiDevice; 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.ISchCachelineVehilematerialService; -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; @@ -38,10 +34,12 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -55,34 +53,29 @@ public class SpeEmpTask extends AbstractAcsTask { @Autowired private ISchBaseTaskService taskService; @Autowired + private IPdmBiDeviceService iDeviceService; + @Autowired private AgvInstService agvInstService; @Autowired private ISchBasePointService basePointService; - @Autowired - private ISchCachelineVehilematerialService cacheLineVechileService; @Autowired private ISchProcessRouteService schProcessRouteService; private final Map SpeHandles= new HashMap<>(); - private static String OPT_NAME = "ACS回调# "; public SpeEmpTask() { - SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe()); + SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.getDesc() ,new Cache2Spe()); } @Override public void updateTaskStatus(JSONObject param,String status) { - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - log.info(InterfaceLogType.ACS_TO_LMS.getDesc()); - // 指令执行中 - JSONObject task = taskTable.query("task_id = '" + param.getString("task_id") + "'").uniqueResult(0); - AcsTaskEnum taskType = AcsTaskEnum.getType(task.getString("task_type"),"TASK_"); + SchBaseTask task = taskService.getOne(new QueryWrapper().eq("task_id", param.getString("task_id"))); try { - SpeHandles.get(taskType.name()).handle(param,status,task); + SpeHandles.get(task.getTask_name()).handle(param,status,task); }catch (Exception ex){ - log.error(OPT_NAME+"updateStatus error:{}",ex); + log.error("更新状态异常updateTaskStatus param:{},status:{},ex:{}",param,status,ex); throw ex; } } @@ -106,20 +99,11 @@ public class SpeEmpTask extends AbstractAcsTask { JSONObject form = new JSONObject(MapOf.of("start_point_code","", "next_point_code",param.getString("device_code"),"return_point_code", "","vehicle_code", - "","product_area",one.getProduct_area(),"quantity", param.getString("quantity"),"type",param.getString("type"),"material_id", one.getMaterial_id())); + "","product_area",one.getProduct_area(),"quantity", param.getString("quantity"),"type",AcsTaskEnum.TASK_CACHELINE_OUT.getCode(),"material_id", one.getMaterial_id())); String taskId = IdUtil.getSnowflake(1, 1).nextId() + ""; JSONObject task = packageParam(form, taskId); taskService.save(task.toJavaObject(SchBaseTask.class)); - task.put("cacheLine",cahceLine); -// try { -// pointConfirm(task); -// //下发 -// }catch (Exception ex){ -// log.error("SpeEmpTask#点位确认异常:{}",ex.getMessage()); -// task.put("task_status", TaskStatusEnum.SURE_START_ERROR.getCode()); -// task.put("remark",ex.getMessage()); -// WQLObject.getWQLObject("sch_base_task").update(task); -// } + return taskId; } @@ -155,9 +139,8 @@ public class SpeEmpTask extends AbstractAcsTask { private JSONObject packageParam(JSONObject form, String task_id) { JSONObject task = new JSONObject(); 参数封装:{ - AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "TASK_"); task.put("task_id", task_id); - task.put("task_name", taskEnum.getDesc()); + task.put("task_name", AcsTaskEnum.TASK_CACHELINE_OUT.getDesc()); task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); task.put("task_type", form.getString("type")); task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_TASK.getCode()); @@ -184,45 +167,40 @@ public class SpeEmpTask extends AbstractAcsTask { @Override public void cancel(String taskId) { - log.info(OPT_NAME+"cancel taskID:{}",taskId); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - //专机-专机 - //专机-缓存线 - //缓存线出库 - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_CANNEL.getCode()),"task_id = '"+taskId+"'"); - + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()).eq("task_id",taskId)); } interface SpeStatusHandler{ - void handle(JSONObject param,String status,JSONObject task); + void handle(JSONObject param,String status,SchBaseTask task); } class Cache2Spe implements SpeStatusHandler{ @Override - public void handle(JSONObject param, String sta,JSONObject task) { + public void handle(JSONObject param, String sta,SchBaseTask task) { AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); - WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - switch (status){ case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); + 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())); break; case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - - String point_code2 = task.getString("point_code2"); - JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0); - task.getDouble("material_qty"); - double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); - deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); + 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())); + SchBasePoint point = basePointService.getOne(new QueryWrapper().eq("point_code", task.getPoint_code2())); + PdmBiDevice device = iDeviceService.getOne(new QueryWrapper().eq("device_code", point.getDevice_code())); + BigDecimal currentQty = device.getDeviceinstor_qty().add(task.getMaterial_qty()); + iDeviceService.update(new UpdateWrapper().set("deviceinstor_qty",currentQty).eq("device_code",point.getDevice_code())); break; case STATUS_CANNEL: cancel(param.getString("task_id")); break; default: - throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); + throw new BadRequestException("未定义任务状态:"+sta); } } } @@ -238,10 +216,10 @@ public class SpeEmpTask extends AbstractAcsTask { ArrayList Merge = new ArrayList<>(); if (!CollectionUtils.isEmpty(array)){ String pointCollect = array.stream().map(a->a.getPoint_code1() + "','" + a.getPoint_code2()).collect(Collectors.joining("','")); - JSONArray needMergeCollect = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "5", "point_codes", "'" + pointCollect + "'")).process().getResultJSONArray(0); - //区域编号对应point_code - Map> pointRegionCollent = needMergeCollect.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("point_code"))); - Set mergePointCollent = needMergeCollect.stream().map(item -> ((JSONObject) item).getString("point_code")).collect(Collectors.toSet()); + List> needMergeCollect = basePointService.getAllPointRegin(pointCollect); + //区域编号对应point_code pointRegionCollent + Map>> pointRegionCollent = needMergeCollect.stream().collect(Collectors.groupingBy(o -> o.get("point_code"))); + Set mergePointCollent = needMergeCollect.stream().map(item -> item.get("point_code")).collect(Collectors.toSet()); //合并下发的任务 List notMerge = new ArrayList<>();//单独下发的任务 List waitingTask = new ArrayList<>();//可合并,但是只有单条任务 @@ -316,7 +294,7 @@ public class SpeEmpTask extends AbstractAcsTask { } - private String getMergePoint(Map> pointRegionCollent, String start,String end,List tasks,List taskIds) { + private String getMergePoint(Map>> pointRegionCollent, String start,String end,List tasks,List taskIds) { String findpoint = findpoint(pointRegionCollent, start, tasks, taskIds); if (findpoint == null){ findpoint = findpoint(pointRegionCollent, end, tasks, taskIds); @@ -324,13 +302,13 @@ public class SpeEmpTask extends AbstractAcsTask { return findpoint; } - private String findpoint(Map> pointRegionCollent, String start, List tasks, List taskIds) { - List objects = pointRegionCollent.get(start); + private String findpoint(Map>> pointRegionCollent, String start, List tasks, List taskIds) { + List> objects = pointRegionCollent.get(start); if (CollectionUtils.isEmpty(objects)){ return null; } - JSONObject startPointInfo = (JSONObject) objects.get(0); - String startPointCollent = startPointInfo.getString("pointcollent"); + Map startPointInfo = objects.get(0); + String startPointCollent = startPointInfo.get("pointcollent"); String[] split = startPointCollent.split(","); for (String s : split) { Optional any = tasks.stream().filter(a -> a.getPoint_code1().equals(s) && !taskIds.contains((a.getTask_id()))).findAny(); 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 2ec30c1a..8f42c1a6 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 @@ -66,9 +66,9 @@ public class SpeFullTask extends AbstractAcsTask { public SpeFullTask() { - SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe()); - SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache()); - SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_WASH.name() ,new Spe2Wash()); + SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.getDesc() ,new Spe2Spe()); + SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.getDesc() ,new Spe2Cache()); + SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_WASH.getDesc() ,new Spe2Wash()); } @Override @@ -77,14 +77,9 @@ public class SpeFullTask extends AbstractAcsTask { log.info(InterfaceLogType.ACS_TO_LMS.getDesc()); // 指令执行中 SchBaseTask task = taskService.getById(param.getString("task_id")); - AcsTaskEnum taskType = AcsTaskEnum.getType(task.getTask_type(),"TASK_"); pointService.update(new UpdateWrapper().set("lock_type","0").in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3())); - taskService.update(new UpdateWrapper() - .set("task_status",status) - .set("update_name","acs") - .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); try { - SpeHandles.get(taskType.name()).handle(param,status,task); + SpeHandles.get(task.getTask_name()).handle(param,status,task); }catch (Exception ex){ log.error(OPT_NAME+"updateStatus error:{}",ex); throw ex; @@ -115,14 +110,6 @@ public class SpeFullTask extends AbstractAcsTask { String taskId = IdUtil.getStringId(); JSONObject task = packageParam(form, taskId); taskService.save(task.toJavaObject(SchBaseTask.class)); -// try { -// pointConfirm(task); -// //下发 -// }catch (Exception ex){ -// task.put("task_status", TaskStatusEnum.SURE_START_ERROR.getCode()); -// task.put("remark",ex.getMessage()); -// WQLObject.getWQLObject("sch_base_task").update(task); -// } return taskId; } @@ -179,32 +166,23 @@ public class SpeFullTask extends AbstractAcsTask { .set("update_name","acs") .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); Map extParam = (Map)param.get("ext_param"); + //取货完成/放货完成暂不处理箱子 if (extParam.get("put_finish") != null){ - pointService.update(new UpdateWrapper() - .set("vehicle_code",task.getVehicle_code2()) - .eq("point_code",task.getPoint_code3())); - } - if (extParam.get("take_finish") != null){ - pointService.update(new UpdateWrapper() - .set("vehicle_code","") - .eq("point_code",task.getPoint_code3())); - pointService.update(new UpdateWrapper() - .set("vehicle_code",task.getVehicle_code2()) - .eq("point_code",task.getPoint_code1())); - } -// if (extParam.get("put_finish") != null){ + log.info("放货完成:{},vechile_code:{}",task.getTask_id(),task.getVehicle_code2()); // pointService.update(new UpdateWrapper() // .set("vehicle_code",task.getVehicle_code2()) // .eq("point_code",task.getPoint_code3())); -// } -// if (extParam.get("take_finish") != null){ + } + if (extParam.get("take_finish") != null){ + log.info("取货完成:{},vechile_code:{}",task.getTask_id(),task.getVehicle_code2()); // pointService.update(new UpdateWrapper() // .set("vehicle_code","") // .eq("point_code",task.getPoint_code3())); // pointService.update(new UpdateWrapper() // .set("vehicle_code",task.getVehicle_code2()) // .eq("point_code",task.getPoint_code1())); -// } + } + break; case STATUS_FINISH: taskService.update(new UpdateWrapper() @@ -232,15 +210,13 @@ public class SpeFullTask extends AbstractAcsTask { .set("task_status", StatusEnum.TASK_RUNNING.getCode()) .set("update_name", "acs") .set("update_time", DateUtil.now()).eq("task_id", task.getTask_id()); - - if (extParam.get("outboxt")!= null){ wrapper.set("vehicle_code2",extParam.get("outboxt")); } + if (extParam.get("outbox")!= null){ wrapper.set("vehicle_code2",extParam.get("outbox")); } taskService.update(wrapper); - //outboxt箱子更新到任务表vechile_code2? - if (extParam.get("inboxt") != null){ + if (extParam.get("inbox") != null){ SchCachelineVehilematerial vehilematerial = new SchCachelineVehilematerial(); vehilematerial.setVehmaterial_id(IdUtil.getStringId()); - vehilematerial.setVehicle_code(extParam.get("inboxt")); + vehilematerial.setVehicle_code(extParam.get("inbox")); vehilematerial.setMaterial_id(task.getMaterial_id()); vehilematerial.setErr_type("0"); vehilematerial.setCreate_time(DateUtil.now()); @@ -270,6 +246,10 @@ public class SpeFullTask extends AbstractAcsTask { switch (status){ case STATUS_START: Map extParam = (Map)param.get("ext_param"); + UpdateWrapper wrapper = new UpdateWrapper() + .set("task_status", StatusEnum.TASK_RUNNING.getCode()) + .set("update_name", "acs") + .set("update_time", DateUtil.now()).eq("task_id", task.getTask_id()); log.info("生坑到料完成:"+param.toString()); if (extParam.get("fall_finish") != null){ PdmBiDevice one = deviceService.getOne(new QueryWrapper().eq("device_code", task.getPoint_code2())); @@ -280,8 +260,13 @@ public class SpeFullTask extends AbstractAcsTask { } break; case STATUS_FINISH: + 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())); break; case STATUS_CANNEL: + cancel(param.getString("task_id")); break; default: throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/TaskScheduleService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/TaskScheduleService.java index f0d37294..e93787a7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/TaskScheduleService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/TaskScheduleService.java @@ -75,16 +75,15 @@ public class TaskScheduleService { try { AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(task.getHandle_class())); taskHandler.pointConfirm((JSONObject) JSONObject.toJSON(task)); - task.setTask_type(StatusEnum.TASK_START_END_P.getCode()); }catch (Exception ex){ - task.setTask_type(StatusEnum.TASK_START_ERROR.getCode()); + task.setTask_status(StatusEnum.TASK_START_ERROR.getCode()); task.setRemark(ex.getMessage()); task.setUpdate_time(new Date()); taskService.updateById(task); } } } - List all = taskService.list(new QueryWrapper().eq("is_auto_issue", "1").eq("is_delete",false).eq("task_status", StatusEnum.TASK_START_END_P.getCode())); + List all = taskService.list(new QueryWrapper().eq("is_auto_issue", "1").eq("is_delete",false).eq("task_status", StatusEnum.TASK_START_END_P.getCode()).orderByAsc("point_code2")); //分区域:不同区域调用不同acs接口 log.info("定时调度——2222——准备下发任务:{}", JSON.toJSONString(all.stream().map(a->a.getTask_id()+"__"+a.getPoint_code1()+a.getPoint_code2()+a.getPoint_code3()).collect(Collectors.toList()))); Map> areaCollent = all.stream().collect(Collectors.groupingBy(SchBaseTask::getProduct_area)); @@ -94,7 +93,13 @@ public class TaskScheduleService { for (Map.Entry> array : listMap.entrySet()) { //调用不同实现 AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(array.getKey())); - Merge.addAll(taskHandler.schedulerTask(array.getValue())); + try { + List schBaseTasks = taskHandler.schedulerTask(array.getValue()); + Merge.addAll(schBaseTasks); + }catch (Exception ex){ + log.error("调度任务分配异常:{}",ex); + continue; + } } JSONArray arr = new JSONArray(); for (SchBaseTask task : 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 c3b3b678..25a5a89f 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 @@ -20,7 +20,7 @@ + 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 e7d99441..4e698d00 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 @@ -163,4 +163,9 @@ public class SchBasePointServiceImpl extends ServiceImpl> getAllPointRegin(String points) { + return this.baseMapper.getRegionCollent(points); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/FlowConverter.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/FlowConverter.java index e2aacb89..fa75fb27 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/FlowConverter.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/FlowConverter.java @@ -4,6 +4,7 @@ import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseConverter; import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.xml.stream.XMLStreamConstants; @@ -19,6 +20,9 @@ import java.util.Map; */ @Service("flow") public class FlowConverter implements BaseConverter { + @Autowired + ParamConverter paramConverter; + String[] labels = new String[]{"id","name","sourceRef","targetRef"}; @Override @SneakyThrows @@ -37,6 +41,8 @@ public class FlowConverter implements BaseConverter { if (XMLStreamConstants.START_ELEMENT == xtr.next()){ System.out.println(xtr.getLocalName()); element.getParams().put(xtr.getAttributeValue(null,"id"),xtr.getAttributeValue(null,"value")); + ParamElement process = (ParamElement)paramConverter.process(xtr); + element.getParams().put(process.getId(),process.getValue()); i++; } } @@ -45,3 +51,4 @@ public class FlowConverter implements BaseConverter { } } + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/FlowElement.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/FlowElement.java index d07b61b5..1d44e10a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/FlowElement.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/FlowElement.java @@ -17,7 +17,7 @@ public class FlowElement extends BaseElement { private FlowElement targetRef; private String sourceRefId; private String targetRefId; - private Map params = new HashMap<>(); + private Map params = new HashMap<>(); @@ -55,11 +55,11 @@ public class FlowElement extends BaseElement { this.targetRefId = targetRefId; } - public Map getParams() { + public Map getParams() { return params; } - public void setParams(Map params) { + public void setParams(Map params) { this.params = params; } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamConverter.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamConverter.java new file mode 100644 index 00000000..4ea5da71 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamConverter.java @@ -0,0 +1,42 @@ +package org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl; + +import lombok.SneakyThrows; +import org.apache.commons.lang3.StringUtils; +import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseConverter; +import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement; +import org.springframework.stereotype.Service; + +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamReader; + +/* + * @author ZZQ + * @Date 2023/5/19 11:00 + */ +@Service("param") +public class ParamConverter implements BaseConverter { + String[] labels = new String[]{"id","value"}; + @Override + @SneakyThrows + public BaseElement process(XMLStreamReader xtr) { + ParamElement element = new ParamElement(); + setBaseLabel(element,xtr,labels); + element.setValue(xtr.getAttributeValue(null,"value")); + String has = xtr.getAttributeValue(null, "has"); + if (StringUtils.isNotEmpty(has)){ + int i = 0; + while (true){ + if (i == Integer.valueOf(has)){ + break; + } + if (XMLStreamConstants.START_ELEMENT == xtr.next()){ + element.getItem().put(xtr.getAttributeValue(null,"spec"),xtr.getAttributeValue(null,"value")); + i++; + } + } + element.setValue(element.getItem()); + } + return element; + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamElement.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamElement.java new file mode 100644 index 00000000..0750d14d --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamElement.java @@ -0,0 +1,18 @@ +package org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl; + +import lombok.Data; +import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement; + +import java.util.HashMap; +import java.util.Map; + +/* + * @author ZZQ + * @Date 2023/5/21 18:03 + */ +@Data +public class ParamElement extends BaseElement { + private Object value; + private Map item = new HashMap<>(); + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java index f7c6945d..16bc78ef 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java @@ -66,7 +66,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl(iStIvtIostorinvCpOutService.getStructIvt(whereJson),HttpStatus.OK); } + @PostMapping("/manualDiv") + @Log("手工分配保存") + @ApiOperation("手工分配保存") + public ResponseEntity manualDiv(@RequestBody JSONObject whereJson){ + iStIvtIostorinvCpOutService.manualDiv(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/moreOrLess/StIvtMoreorlessmstCpController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/moreOrLess/StIvtMoreorlessmstCpController.java index 6a3c6c01..4a52e4a0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/moreOrLess/StIvtMoreorlessmstCpController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/moreOrLess/StIvtMoreorlessmstCpController.java @@ -1,8 +1,16 @@ package org.nl.wms.storage_manage.productmanage.controller.moreOrLess; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +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.productmanage.service.moreOrLess.IStIvtMoreorlessmstCpService; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dto.MoreOrlessQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; /** *

@@ -13,8 +21,57 @@ import org.springframework.web.bind.annotation.RestController; * @since 2023-05-04 */ @RestController -@RequestMapping("/stIvtMoreorlessmstCp") +@RequestMapping("/api/stIvtMoreorlessmstCp") public class StIvtMoreorlessmstCpController { + @Autowired + private IStIvtMoreorlessmstCpService iStIvtMoreorlessmstCpService; + + @GetMapping + @Log("查询损溢单") + @ApiOperation("查询损溢单") + public ResponseEntity query(MoreOrlessQuery query, PageQuery page) { + return new ResponseEntity<>(iStIvtMoreorlessmstCpService.pageQuery(query, page), HttpStatus.OK); + } + + @PostMapping + @Log("创建损溢单") + @ApiOperation("创建损溢单") + public ResponseEntity create(@RequestBody JSONObject whereJson) { + iStIvtMoreorlessmstCpService.create(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getMlDtl") + @Log("查询损溢明细") + @ApiOperation("查询损溢明细") + public ResponseEntity getMlDtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(iStIvtMoreorlessmstCpService.getMlDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/update") + @Log("修改损溢单") + @ApiOperation("修改损溢单") + public ResponseEntity update(@RequestBody JSONObject whereJson) { + iStIvtMoreorlessmstCpService.update(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/delete") + @Log("删除入库单") + @ApiOperation("删除入库单") + public ResponseEntity delete(@RequestBody Long[] ids){ + iStIvtMoreorlessmstCpService.delete(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/confirm") + @Log("完成单据") + @ApiOperation("完成单据") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + iStIvtMoreorlessmstCpService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java index 128642f2..271c2b8f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java @@ -131,4 +131,14 @@ public interface IStIvtIostorinvCpOutService extends IService * } */ List getStructIvt(JSONObject whereJson); + + /** + * 手工分配保存 + * @param whereJson + * { + * rows:库存, + * iostorinvdtl_id:明细id, + * } + */ + void manualDiv(JSONObject whereJson); } 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 5c654ac1..c00e555f 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 @@ -59,6 +59,7 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.function.Consumer; +import java.util.stream.Collectors; /** *

@@ -478,11 +479,59 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl ivtDaoList = new ArrayList<>(); + + for (int i = 0; i < rows.size(); i++) { + JSONObject jsonObject = rows.getJSONObject(i); + StIvtStructivtCp ivtDao = iStIvtStructivtCpService.getById(jsonObject.getString("stockrecord_id")); + ivtDao.setCanuse_qty(jsonObject.getBigDecimal("plan_qty")); + + ivtDaoList.add(ivtDao); + } + + // 2.插入分配表 + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(whereJson.getString("iostorinvdtl_id")); + iostorinvdisCpService.onductDataOutDis(ivtDaoList,dtlDao); + + // 3.更新明细状态 + BigDecimal assign_qty = ivtDaoList.stream() + .map(StIvtStructivtCp::getCanuse_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); // 已分配数量 + + BigDecimal unassign_qty = NumberUtil.sub(dtlDao.getUnassign_qty(), assign_qty); // 未分配重量 + + if (unassign_qty.doubleValue() != 0) { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + } else { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); + } + + dtlDao.setUnassign_qty(unassign_qty); + dtlDao.setAssign_qty(assign_qty); + iostorinvdtlCpService.updateById(dtlDao); + + // 4.更新库存冻结数 、 锁定仓位 + StIvtIostorinvCp mstDao = this.getById(dtlDao.getIostorinv_id()); + updateIvtDiv(ivtDaoList,mstDao); + + // 5.更新主表 + updateMst(mstDao.getIostorinv_id()); + } + @NotNull private StIvtIostorinvCp packageMstForm(StIvtIostorinvCp stIvtIostorinvCp,JSONObject whereJson,Boolean isUpdate) { JSONArray rows = whereJson.getJSONArray("tableData"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/IStIvtMoreorlessdtlCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/IStIvtMoreorlessdtlCpService.java index bb6aeb74..dfa91e80 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/IStIvtMoreorlessdtlCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/IStIvtMoreorlessdtlCpService.java @@ -1,7 +1,13 @@ package org.nl.wms.storage_manage.productmanage.service.moreOrLess; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreorlessdtlCp; +import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreorlessmstCp; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +19,13 @@ import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreo */ public interface IStIvtMoreorlessdtlCpService extends IService { + /** + * 主单据使用 + * @param row + * @param mst + * @return + */ + double create(JSONArray row, StIvtMoreorlessmstCp mst); + + List getMlDtl(JSONObject form); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/IStIvtMoreorlessmstCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/IStIvtMoreorlessmstCpService.java index fb97c25a..fdff1812 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/IStIvtMoreorlessmstCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/IStIvtMoreorlessmstCpService.java @@ -1,7 +1,13 @@ package org.nl.wms.storage_manage.productmanage.service.moreOrLess; +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.moreOrLess.dao.StIvtMoreorlessmstCp; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dto.MoreOrlessQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +19,22 @@ import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreo */ public interface IStIvtMoreorlessmstCpService extends IService { + Object pageQuery(MoreOrlessQuery query, PageQuery page); + + void create(JSONObject jo); + + List getMlDtl(JSONObject map); + + void update(JSONObject map); + + /** + * 删除 + * @param ids + * { + * 主表id.. + * } + */ + void delete(Long[] ids); + + void confirm(JSONObject form); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/StIvtMoreorlessmstCp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/StIvtMoreorlessmstCp.java index d8048c62..54b069d4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/StIvtMoreorlessmstCp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/StIvtMoreorlessmstCp.java @@ -81,7 +81,7 @@ public class StIvtMoreorlessmstCp implements Serializable { /** * 创建时间 */ - private LocalDateTime create_time; + private String create_time; /** * 审核人 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessdtlCpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessdtlCpMapper.java index ee584507..7ccaeaec 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessdtlCpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessdtlCpMapper.java @@ -1,8 +1,13 @@ package org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.mapper; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreorlessdtlCp; +import java.util.List; +import java.util.Map; + /** *

* 损溢单明细表 Mapper 接口 @@ -13,4 +18,6 @@ import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreo */ public interface StIvtMoreorlessdtlCpMapper extends BaseMapper { + List getMlDtl(@Param("map") JSONObject map); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessdtlCpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessdtlCpMapper.xml index 4c48c3e3..59f6795b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessdtlCpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessdtlCpMapper.xml @@ -2,4 +2,19 @@ + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessmstCpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessmstCpMapper.java index de0f0bb7..3a27b37e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessmstCpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessmstCpMapper.java @@ -1,7 +1,13 @@ package org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.nl.common.domain.query.PageQuery; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreorlessmstCp; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dto.MoreOrlessQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +19,6 @@ import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreo */ public interface StIvtMoreorlessmstCpMapper extends BaseMapper { + List getMstDetail(@Param("query") MoreOrlessQuery query, @Param("pageQuery") PageQuery pageQuery); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessmstCpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessmstCpMapper.xml index 3fa5b1f5..6c918bb2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessmstCpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIvtMoreorlessmstCpMapper.xml @@ -1,5 +1,55 @@ + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/impl/StIvtMoreorlessdtlCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/impl/StIvtMoreorlessdtlCpServiceImpl.java index 2e8308ff..7b4165a8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/impl/StIvtMoreorlessdtlCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/impl/StIvtMoreorlessdtlCpServiceImpl.java @@ -1,11 +1,31 @@ package org.nl.wms.storage_manage.productmanage.service.moreOrLess.impl; +import cn.hutool.core.util.ObjectUtil; +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.nl.common.utils.IdUtil; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.IStIvtMoreorlessdtlCpService; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreorlessdtlCp; +import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreorlessmstCp; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.mapper.StIvtMoreorlessdtlCpMapper; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dao.StIvtMoreorlessdtlYl; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dao.StIvtMoreorlessmstYl; +import org.nl.wms.storage_manage.semimanage.MLEnum; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + /** *

* 损溢单明细表 服务实现类 @@ -17,4 +37,57 @@ import org.springframework.stereotype.Service; @Service public class StIvtMoreorlessdtlCpServiceImpl extends ServiceImpl implements IStIvtMoreorlessdtlCpService { + @Autowired + private IStIvtSectattrService sectattrService; // 库区属性服务 + + @Autowired + private IStIvtStructattrService structattrService; // 仓位属性服务 + + @Override + public List getMlDtl(JSONObject form) { + return this.baseMapper.getMlDtl(form); + } + + @Override + public double create(JSONArray rows, StIvtMoreorlessmstCp mst) { + double total_qty = 0; + + if (rows.size() > 0 && ObjectUtil.isNotEmpty(mst)) { + // 先删除在插入 + this.remove(new QueryWrapper().eq("mol_id", mst.getMol_id())); + + for (int i = 0; i < rows.size(); i++) { + String mol_dtl_id = IdUtil.getStringId(); + StIvtMoreorlessdtlCp row = rows.getJSONObject(i).toJavaObject(StIvtMoreorlessdtlCp.class); + row.setMol_dtl_id(mol_dtl_id); + row.setMol_id(mst.getMol_id()); + row.setMol_code(mst.getMol_code()); + row.setSeq_no(BigDecimal.valueOf(i + 1)); + + // 获取库区信息 + QueryWrapper sect_wrapper = new QueryWrapper<>(); + sect_wrapper.eq("sect_id", row.getSect_id()); + sect_wrapper.eq("is_used", true); + StIvtSectattr sectDao = sectattrService.getOne(sect_wrapper); + if (ObjectUtil.isEmpty(sectDao)) throw new BadRequestException("库区不存在或未启用!"); + row.setSect_name(sectDao.getSect_name()); + // 获取仓位信息 + QueryWrapper struct_wrapper = new QueryWrapper<>(); + struct_wrapper.eq("struct_id", row.getStruct_id()); + struct_wrapper.eq("is_used", true); + StIvtStructattr structDao = structattrService.getOne(struct_wrapper); + if (ObjectUtil.isEmpty(structDao)) throw new BadRequestException("仓位不存在或未启用!"); + row.setStruct_name(structDao.getStruct_name()); + + row.setStoragevehicle_id("999999"); + row.setStoragevehicle_code("999999"); + row.setStatus(MLEnum.DTL_STATUS.code("生成")); + this.save(row); + + //锁定货位 + structattrService.update(new UpdateWrapper().set("lock_type", "1").set("inv_code",mst.getMol_code()).eq("struct_id", row.getStruct_id())); + } + } + return total_qty; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/impl/StIvtMoreorlessmstCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/impl/StIvtMoreorlessmstCpServiceImpl.java index 7b0a6c0c..dfe48f1c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/impl/StIvtMoreorlessmstCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/impl/StIvtMoreorlessmstCpServiceImpl.java @@ -1,11 +1,48 @@ package org.nl.wms.storage_manage.productmanage.service.moreOrLess.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import io.jsonwebtoken.lang.Assert; +import org.jetbrains.annotations.NotNull; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +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.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.storage_manage.CHECKEnum; +import org.nl.wms.storage_manage.productmanage.service.moreOrLess.IStIvtMoreorlessdtlCpService; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.IStIvtMoreorlessmstCpService; +import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreorlessdtlCp; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIvtMoreorlessmstCp; import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.mapper.StIvtMoreorlessmstCpMapper; +import org.nl.wms.storage_manage.productmanage.service.structIvt.IStIvtStructivtCpService; +import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dao.StIvtMoreorlessdtlYl; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dao.StIvtMoreorlessmstYl; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dto.MoreOrlessQuery; +import org.nl.wms.storage_manage.rawmanage.service.structIvt.dao.StIvtStructivtYl; +import org.nl.wms.storage_manage.semimanage.MLEnum; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + /** *

* 损溢单主表 服务实现类 @@ -17,4 +54,193 @@ import org.springframework.stereotype.Service; @Service public class StIvtMoreorlessmstCpServiceImpl extends ServiceImpl implements IStIvtMoreorlessmstCpService { + @Autowired + private IStIvtMoreorlessdtlCpService iStIvtMoreorlessdtlCpService; // 损益明细服务 + + @Autowired + private IStIvtBsrealstorattrService stIvtBsrealstorattrService; // 实物属性服务 + + @Autowired + private IStIvtStructivtCpService iStIvtStructivtCpService; // 库存服务 + + @Autowired + private IStIvtStructattrService structattrService; // 仓位属性服务 + + @Override + public Object pageQuery(MoreOrlessQuery query, PageQuery pageQuery) { + Page page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); + List mst_detail = this.baseMapper.getMstDetail(query, pageQuery); + TableDataInfo build = TableDataInfo.build(mst_detail); + build.setTotalElements(page.getTotal()); + return build; + } + + @Override + public void create(JSONObject form) { + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + + // 调用主表 插入/更新方法 + StIvtMoreorlessmstCp mlmstCP = packageMstForm(new StIvtMoreorlessmstCp(), form); + this.save(mlmstCP); + + //调用明细表 插入方法 + iStIvtMoreorlessdtlCpService.create(rows, mlmstCP); + + if (form.containsKey("auto_confirm") && form.getString("auto_confirm").equals("1")) { + JSONObject mst = new JSONObject(); + mst.put("mol_id", mlmstCP.getMol_id()); + this.confirm(mst); + } + } + + @Override + public List getMlDtl(JSONObject map) { + return iStIvtMoreorlessdtlCpService.getMlDtl(map); + } + + @Override + public void update(JSONObject form) { + Assert.notNull(new Object[]{form, form.get("mol_id")}, "请求参数不能为空"); + StIvtMoreorlessmstCp mst = form.toJavaObject(StIvtMoreorlessmstCp.class); + this.updateById(mst); + + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + // 调用明细表 插入/更新方法 + iStIvtMoreorlessdtlCpService.create(rows, mst); + } + + @Override + public void delete(Long[] ids) { + for (Long id : ids) { + StIvtMoreorlessmstCp dao = this.getOne(new QueryWrapper().eq("mol_id", id)); + dao.setIs_delete(true); + this.updateById(dao); + } + } + + @Override + public void confirm(JSONObject whereJson) { + + String mol_id = (String) whereJson.get("mol_id"); + + StIvtMoreorlessmstCp mst = this.getOne(new QueryWrapper().eq("mol_id", mol_id)); + + if (!mst.getStatus().equals(MLEnum.BILL_STATUS.code("生成"))) { + throw new BadRequestException("请选择单据状态为生成的损溢单!"); + } + + String mol_type = mst.getMol_type(); + + List dtl_list = iStIvtMoreorlessdtlCpService.list(new QueryWrapper().eq("mol_id", mol_id)); + //更新库存 + if (mol_type.equals(MLEnum.MOL_TYPE.code("损"))) { + dtl_list.forEach(dtl -> { + StIvtStructivtCp ivt = iStIvtStructivtCpService.getOne(new QueryWrapper().eq("struct_id", dtl.getStruct_id()).eq("material_id", dtl.getMaterial_id())); + if (ObjectUtil.isEmpty(ivt)) { + throw new BadRequestException("未查询到相关库存!"); + } + BigDecimal canuse_qty = ivt.getCanuse_qty(); + BigDecimal ivt_qty = ivt.getIvt_qty(); + BigDecimal mol_qty = dtl.getMol_qty(); + ivt.setCanuse_qty(NumberUtil.sub(canuse_qty, mol_qty)); + ivt.setIvt_qty(NumberUtil.sub(ivt_qty, mol_qty)); + //如果库存变为0则删除记录 + if (canuse_qty.compareTo(mol_qty) == 0 && canuse_qty.compareTo(ivt_qty) == 0) { + iStIvtStructivtCpService.removeById(ivt.getStockrecord_id()); + } else { + iStIvtStructivtCpService.updateById(ivt); + } + }); + } else { + dtl_list.forEach(dtl -> { + StIvtStructivtCp ivt = iStIvtStructivtCpService.getOne(new QueryWrapper().eq("struct_id", dtl.getStruct_id()).eq("material_id", dtl.getMaterial_id())); + BigDecimal mol_qty = dtl.getMol_qty(); + + if (ObjectUtil.isEmpty(ivt)) { + StIvtStructattr struct_jo = structattrService.getOne(new QueryWrapper().eq("struct_id", dtl.getStruct_id())); + //新增一条库存记录 + iStIvtStructivtCpService.save(new StIvtStructivtCp() + .setStockrecord_id(IdUtil.getStringId()) + .setStruct_id(dtl.getStruct_id()) + .setStruct_code(struct_jo.getStruct_code()) + .setStruct_name(struct_jo.getStruct_name()) + .setMaterial_id(dtl.getMaterial_id()) + .setQuality_scode(dtl.getQuality_scode()) + .setPcsn(dtl.getPcsn()) + .setIvt_level(dtl.getIvt_level()) + .setIs_active(dtl.getIs_active()) + .setCanuse_qty(mol_qty) + .setIvt_qty(mol_qty) + .setQty_unit_id(dtl.getQty_unit_id()) + .setInstorage_time(DateUtil.now()) + .setStor_id(mst.getStor_id()) + ); + } else { + BigDecimal canuse_qty = ivt.getCanuse_qty(); + BigDecimal ivt_qty = ivt.getIvt_qty(); + ivt.setCanuse_qty(NumberUtil.add(canuse_qty, mol_qty)); + ivt.setIvt_qty(NumberUtil.add(ivt_qty, mol_qty)); + iStIvtStructivtCpService.updateById(ivt); + } + + //更新明细状态 + dtl.setStatus(MLEnum.DTL_STATUS.code("确认完成")); + iStIvtMoreorlessdtlCpService.updateById(dtl); + }); + } + + dtl_list.stream().map(dtl -> dtl.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update(new UpdateWrapper().set("lock_type", "0").set("inv_code", "").eq("struct_id", struct_id))); + + //更新损溢单主表 + mst.setStatus(MLEnum.BILL_STATUS.code("完成")); + mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + mst.setConfirm_time(DateUtil.now()); + this.updateById(mst); + } + + @NotNull + private StIvtMoreorlessmstCp packageMstForm(StIvtMoreorlessmstCp mlmstCP, JSONObject whereJson) { + JSONArray rows = whereJson.getJSONArray("tableData"); + // 新增 + mlmstCP.setMol_id(IdUtil.getStringId()); + mlmstCP.setMol_code(CodeUtil.getNewCode("MOL_CODE")); + if (StrUtil.isEmpty(whereJson.getString("buss_type"))) { + mlmstCP.setBuss_type(MLEnum.BILL_TYPE.code("普通损溢")); + mlmstCP.setMol_inv_type(MLEnum.BILL_TYPE.code("普通损溢")); + } else { + mlmstCP.setBuss_type(whereJson.getString("buss_type")); + mlmstCP.setMol_inv_type(whereJson.getString("buss_type")); + } + + mlmstCP.setMol_type(whereJson.getString("mol_type")); + + // 获取仓库信息 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("stor_id", whereJson.getString("stor_id")); + wrapper.eq("is_used", true); + StIvtBsrealstorattr bsrealDao = stIvtBsrealstorattrService.getOne(wrapper); + if (ObjectUtil.isEmpty(bsrealDao)) throw new BadRequestException("仓库不存在或未启用!"); + + mlmstCP.setStor_id(bsrealDao.getStor_id()); + mlmstCP.setStor_name(bsrealDao.getStor_name()); + mlmstCP.setDtl_num(BigDecimal.valueOf(rows.size())); + mlmstCP.setCreate_mode(CHECKEnum.CREATE_MODE.code("PC产生")); + mlmstCP.setStatus(CHECKEnum.BILL_STATUS.code("生成")); + mlmstCP.setCreate_id(SecurityUtils.getCurrentUserId()); + mlmstCP.setCreate_name(SecurityUtils.getCurrentNickName()); + mlmstCP.setCreate_time(DateUtil.now()); + mlmstCP.setIs_delete(false); + // TODO 暂时写死 + mlmstCP.setSysdeptid("111"); + mlmstCP.setSyscompanyid("111"); + + mlmstCP.setRemark(whereJson.getString("remark")); + + return mlmstCP; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/IStIvtStructivtCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/IStIvtStructivtCpService.java index ebf08d46..be7c8a0c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/IStIvtStructivtCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/IStIvtStructivtCpService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp; import java.util.List; +import java.util.Map; /** *

@@ -46,5 +47,5 @@ public interface IStIvtStructivtCpService extends IService { * 明细row * } */ - List getStructIvt(JSONObject whereJson); + List getStructIvt(JSONObject whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java index fb3a2e03..ebf7f4ef 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; @@ -17,6 +18,7 @@ import java.math.BigDecimal; * @since 2023-05-04 */ @Data +@Accessors(chain = true) @EqualsAndHashCode(callSuper = false) @TableName("st_ivt_structivt_cp") public class StIvtStructivtCp implements Serializable { diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml index 2d9b2b6d..1beb3a2b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml @@ -28,10 +28,18 @@ 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 715225b4..a83a57b4 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 @@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** *

@@ -87,7 +88,7 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl getStructIvt(JSONObject whereJson) { return baseMapper.getStructIvt(whereJson); } diff --git a/mes/hd/nladmin-system/src/main/resources/scheduler.xml b/mes/hd/nladmin-system/src/main/resources/scheduler.xml index 62cc0d57..0198fab3 100644 --- a/mes/hd/nladmin-system/src/main/resources/scheduler.xml +++ b/mes/hd/nladmin-system/src/main/resources/scheduler.xml @@ -8,8 +8,11 @@ - + + + + diff --git a/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue index 335679ac..f3fe8175 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue @@ -11,20 +11,35 @@ > - + - 保存 + 保存 关闭 - + - + @@ -64,12 +79,12 @@ - + - + @@ -84,7 +99,13 @@ - + @@ -92,7 +113,7 @@

- + @@ -46,15 +47,15 @@ @select="handleSelectionChange" @select-all="onSelectAll" > - - - - - - + + + + + + - + 取 消 确 定 @@ -64,7 +65,7 @@ - - - diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index 2f48d5d8..01f940a6 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -138,12 +138,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //取满箱任务起点 一般是专机满料点和缓存线 if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达取货点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达出缓存线取满框点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -175,13 +175,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //取满箱任务起点 一般是专机满料点和缓存线 if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,取货点1取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); } //入缓存线任务的起点有专机满料位 出缓存的起点是缓存线 if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线取满框点1取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -213,12 +213,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //双任务-取满箱任务起点2 一般是专机满料点和缓存线 if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达取货点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达出缓存线取满框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -249,12 +249,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //双任务-取满箱任务起点2 一般是专机满料点和缓存线 if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,取货点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,出缓存线取满框点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -285,7 +285,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位入到缓存线有到达送满框 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线入库到达送满框点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -320,13 +320,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达倒料点1,设备号:{}", device_code); hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); break; } if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达倒料点1,设备号:{}", device_code); hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); break; @@ -359,7 +359,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //送满框1 只有满料位到缓存线才有送满框1 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线入库送满框点1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -392,13 +392,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位、缓存线到倒料位、清洗储料仓才有倒料完毕1 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,倒料点1倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); break; } if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,倒料点1倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); break; @@ -430,7 +430,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线放满完成后才有到达取空框1 取空框是缓存线才有 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线入库,到达取空框1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -453,6 +453,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic log.info(agvaddr + "对应设备号为空!"); return; } + Collections.reverse(insts); for (Instruction inst : insts) { //校验agv上报站点编号与指令起始点相同 if (ObjectUtil.isEmpty(inst)) { @@ -462,13 +463,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达倒料点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); break; } if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达倒料点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); break; @@ -500,7 +501,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线入库才有取空框1完毕 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线入库,取空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -532,7 +533,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线才有到达送满框2 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线入库,到达送满框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -564,7 +565,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线才有到送满框完毕 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线入库,送满框点2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -597,7 +598,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线才有到达取空框2 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线入库,到达取空框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -629,7 +630,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线才有到达取空框完毕2 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线入库,取空框点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -662,13 +663,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,倒料点2倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); break; } if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,倒料点2倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); break; @@ -702,12 +703,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //所有任务都有到达送空框1 if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达还空框1,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线出库,还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -740,12 +741,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //所有任务都有到送空框1完毕 if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线出库还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -778,12 +779,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //所有双任务都有到达送空框2 if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,到达还空框2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线出库到达还空框2,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -816,12 +817,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //所有双任务都有送空框完毕2 if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,还空框2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { - log.info("开始设置phase值,设备号:{}", device_code); + log.info("开始设置phase值,缓存线出库还空框2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code()); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_machine_storage_station/HailiangCleaningMachineStorageStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_machine_storage_station/HailiangCleaningMachineStorageStationDeviceDriver.java index 01961111..9928a9af 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_machine_storage_station/HailiangCleaningMachineStorageStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_machine_storage_station/HailiangCleaningMachineStorageStationDeviceDriver.java @@ -11,6 +11,7 @@ import org.nl.acs.agv.server.impl.NDCAgvServiceImpl; import org.nl.acs.auto.run.NDCSocketConnectionAutoRun; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.MonitoringLargeScreenData; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; import org.nl.acs.history.ErrorUtil; @@ -139,6 +140,7 @@ public class HailiangCleaningMachineStorageStationDeviceDriver extends AbstractO logServer.deviceExecuteLog(this.device_code, "", "", "信号is_open:" + last_is_open + "->" + is_open); } if (silo_weight != last_silo_weight) { + MonitoringLargeScreenData.deviceNumData.put(this.device_code, this.getSilo_weight()); logServer.deviceExecuteLog(this.device_code, "", "", "信号silo_weight:" + last_silo_weight + "->" + silo_weight); } if (full_number != last_full_number) { diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java index 308e719a..aadc2b39 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java @@ -230,7 +230,7 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme } //修改工单状态为自动完成 - if (mode == 1 && finish != last_finish && finish == 1 && order > 0) { + if (mode == 1 && finish != last_finish && finish == 1 && order > 0 && now_order_prod_num == order_prod_allnum) { ProduceshiftorderDto pdto = produceshiftorderService.findByCodeFromCache(String.valueOf(order)); if (pdto != null) { if (pdto.getOrder_status().equals(WorkerOrderEnum.PRODUCTING.getCode())) { diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 861f837a..14ac7ffc 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.acs.instruction.service.impl; +import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -453,7 +454,9 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu dto2.setCreate_by(currentUsername2); dto2.setUpdate_by(currentUsername2); dto2.setUpdate_time(now2); - dto2.setCreate_time(now2); + Date date2 = DateUtil.parse(now2); + Date newDate = DateUtil.offset(date2, DateField.SECOND, 2); + dto2.setCreate_time(DateUtil.formatDateTime(newDate)); dto2.setStart_parent_code(task2.getStart_parent_code()); dto2.setNext_parent_code(task2.getNext_parent_code()); dto2.setAgv_inst_type(AgvTypeEnum.getAgvInstTypeByTaskType(task2.getTask_type())); @@ -1094,7 +1097,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu .orElse(new CopyOnWriteArrayList<>()) .stream() .filter(i -> i.getLink_num().equals(link_no)) - .sorted((inst1, inst2) -> inst1.getInstruction_code().compareTo(inst2.getInstruction_code())) + .sorted((inst1, inst2) -> inst1.getCreate_time().compareTo(inst2.getCreate_time())) .collect(Collectors.toList()); }