diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java index 286b449..b7238ef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java @@ -121,19 +121,25 @@ public class CallEmpVehicleTask extends AbstractAcsTask { * 1. 点对点: 起点和终点都确定,直接创建任务 * 2. 终点确定: 需要找到对应起点,在创建任务 具体找起点货位的规则在findBeginPoint()中 */ - // 终点确定:找起点 + //起点不确定 if (ObjectUtil.isEmpty(point_code1)) { + JSONObject param = new JSONObject(); - param.put("point_code2", point_code2); - param.put("vehicle_qty", qty); - JSONObject json = this.findNextPoint(param); - point_code1 = json.getString("point_code1"); + param.put("point_code2",point_code2); + param.put("vehicle_qty",qty); + + + JSONObject json = this.findBeginPoint(param); + point_code1 = json.getString("start_point_code"); vehicle_type = json.getString("vehicle_type"); } else { // 判断终点是否是空位 JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "' and lock_type = '00' and point_status <> '02' and is_delete = '0' and is_used = '1'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("起点点位不可用或不存在"); } + + + // 创建任务 JSONObject jsonTask = new JSONObject(); String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; @@ -189,6 +195,7 @@ public class CallEmpVehicleTask extends AbstractAcsTask { WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 根据终点区域判断优先的起点区域 JSONObject jsonPointEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonPointEnd)) throw new BadRequestException("终点点位不存在"); @@ -213,7 +220,11 @@ public class CallEmpVehicleTask extends AbstractAcsTask { String point_code1 = ""; JSONObject map = new JSONObject(); if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.GJQY.getCode())) { - //1、判断是否有到该叠盘位的堆叠任务。 + //1、判断是否有拆托盘任务。 + taskTab.query("task_type= 'gjxsqkp' "); + + //2、判断是否有到该叠盘位的堆叠任务。 + //1、判断叠盘架B是否有对应类型的空载具 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/GjxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/GjxCallEmpVehicleTask.java new file mode 100644 index 0000000..c946b2a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/GjxCallEmpVehicleTask.java @@ -0,0 +1,284 @@ +package org.nl.wms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; + +@Service +@RequiredArgsConstructor +@Slf4j +/** + * 共挤线申请空盘 + */ +public class GjxCallEmpVehicleTask extends AbstractAcsTask { + private final String THIS_CLASS = GjxCallEmpVehicleTask.class.getName(); + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String task_id = taskObj.getString("task_id"); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status, "0")) { + // 取消删除任务 + taskTab.delete("task_id = '" + task_id + "'"); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + } + + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + // 更改任务状态为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + PointService point = SpringContextHolder.getBean(PointService.class); + // 校验起点是否存在 + PointDto point_code1 = point.findByCode(jsonTask.getString("point_code1")); + if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("未找到可用点位:" + point_code1); + // 校验终点是否存在 + PointDto point_code2 = point.findByCode(jsonTask.getString("point_code2")); + if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("未找到可用点位:" + point_code2); + + // 1.更新点位数量 2.解锁点位 + int vehicle_qty = JSONObject.parseObject(JSON.toJSONString(point_code1)).getIntValue("vehicle_qty"); + BigDecimal vehicle_qty_point = NumberUtil.sub(String.valueOf(vehicle_qty), String.valueOf(1)); + + point_code1.setVehicle_qty(vehicle_qty_point); + if (StrUtil.equals(vehicle_qty_point.toString(), "0")) { + point_code1.setPoint_status("00"); + point_code1.setVehicle_type(""); + } + point_code1.setLock_type("00"); + pointTab.update(JSONObject.parseObject(JSON.toJSONString(point_code1))); + } + } + + @Override + public JSONObject findStartPoint(JSONObject param) { + return null; + } + + @Override + public JSONObject findNextPoint(JSONObject param) { + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject form) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String start_point_code = form.getString("point_code1"); + String end_point_code = form.getString("point_code2"); + String qty = form.getString("qty"); + String vehicle_type = form.getString("vehicle_type"); + + // 终点不能为空 + if (ObjectUtil.isEmpty(end_point_code)) { + throw new BadRequestException("终点不能为空"); + } else { + // 判断终点是否有正在执行的任务 + JSONObject beforTaskObj = taskTab.query("is_delete='0' and point_code2='" + end_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) + throw new BadRequestException("存在任务号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + // 创建任务 + JSONObject jsonTask = new JSONObject(); + Long task_id = IdUtil.getSnowflake(1, 1).nextId(); + jsonTask.put("task_id", task_id); + jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + jsonTask.put("handle_class", THIS_CLASS); + jsonTask.put("vehicle_type", vehicle_type); + + jsonTask.put("point_code2", end_point_code); + jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); + jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); + jsonTask.put("create_time", DateUtil.now()); + + //见基础分类表的任务分类 + jsonTask.put("task_type", "gjxsqkp"); + + //判断叠盘位是否有任务 + JSONObject taskObj = taskTab.query("is_delete='0' and point_code1='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(taskObj)){ + jsonTask.put("task_status", TaskStatusEnum.SURE_END); + jsonTask.put("point_code1", ""); + }else { + // 锁定起点点位 + JSONObject jsonPoint = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0); + jsonPoint.put("lock_type", "02"); + pointTab.update(jsonPoint); + } + + taskTab.insert(jsonTask); + + return String.valueOf(task_id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void pullBack(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } + + @Transactional(rollbackFor = Exception.class) + public JSONObject findBeginPoint(JSONObject json) { + String point_code2 = json.getString("point_code2"); + String vehicle_qty = json.getString("vehicle_qty"); + if (ObjectUtil.isEmpty(point_code2)) throw new BadRequestException("终点不能为空"); + if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空"); + + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + // 根据终点区域判断优先的起点区域 + JSONObject jsonPointEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPointEnd)) throw new BadRequestException("终点点位不存在"); + JSONObject jsonRegionEnd = regionTab.query("region_id ='" + jsonPointEnd.getString("region_id") + "'").uniqueResult(0); + + // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 + String device_code = point_code2.substring(0, point_code2.indexOf("_")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + + //当前设备所需要的载具类型 + String vehicle_type = jsonOrder.getString("vehicle_type"); + /* + * 空托盘出库任务: + * 1.叠盘架B区、养生A区 --> 共挤线 (优先级:1叠盘架B区 2养生A区) + * 2.叠盘架A区、养生A区 --> 油漆线 (优先级:1叠盘架A区 2养生A区) + */ + String point_code1 = ""; + JSONObject map = new JSONObject(); + if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.GJQY.getCode())) { + //1、判断是否有拆托盘任务。 + taskTab.query("task_type= 'gjxsqkp' "); + + //2、判断是否有到该叠盘位的堆叠任务。 + + + + //1、判断叠盘架B是否有对应类型的空载具 + JSONObject jsonDpjB = pointTab.query("point_status ='2' and lock_type='00' and can_vehicle_type = '" + vehicle_type + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonDpjB)) {//没有则去空托盘缓存区B和养生A区找 + + } + + + // 共挤线呼叫空托盘业务:查找叠盘架B区是否有满足条件的点位 + map.put("flag", "1"); + map.put("vehicle_qty", vehicle_qty); + map.put("vehicle_type", jsonOrder.getString("vehicle_type")); + map.put("region_code", RegionTypeEnum.DPJQB.getCode()); + JSONObject jsonStartPointDPB = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonStartPointDPB)) { + point_code1 = jsonStartPointDPB.getString("point_code"); + } else { + // 为空说明叠盘架B区没有,则去养生A区找 : 只能找数量为1的空托盘 + map.put("flag", "3"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonStartPointYSA)) { + point_code1 = jsonStartPointYSA.getString("point_code"); + } else { + throw new BadRequestException("没有满足需求数量的点位"); + /* // 如果没有则需要从养生区A区里找到 > 1的货位 出库到叠盘架B中 + map.put("flag", "1"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + // 起点 + JSONObject jsonStart = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonStart)) throw new BadRequestException("没有满足需求数量的点位"); + // 终点 + JSONObject jsonEnd = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and point_status = '00' and lock_type = '00' and is_used = '1' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonEnd)) throw new BadRequestException("叠盘架B货位不足"); + + JSONObject parem = new JSONObject(); + parem.put("point_code1",jsonStart.getString("point_code")); + parem.put("point_code2",jsonEnd.getString("point_code")); + parem.put("qty",jsonStart.getString("vehicle_qty")); + parem.put("vehicle_type",jsonStart.getString("vehicle_qty")); + String task_id = this.createTask(parem); + + // 生成 叠盘架 -> 共挤线的任务 返回叠盘架B的点位code + point_code1 = jsonEnd.getString("point_code");*/ + } + + } + + } else if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.YQQY.getCode())) { + // 油漆线呼叫空托盘业务:查找叠盘架A区是否有满足条件的点位 + map.put("flag", "1"); + map.put("vehicle_qty", vehicle_qty); + map.put("vehicle_type", jsonOrder.getString("vehicle_type")); + map.put("region_code", RegionTypeEnum.DPJQA.getCode()); + JSONObject jsonStartPointDPA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonStartPointDPA)) { + point_code1 = jsonStartPointDPA.getString("point_code"); + } else { + // 为空说明叠盘架A区没有,则去养生A区找 + map.put("flag", "3"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonStartPointYSA)) throw new BadRequestException("没有满足需求数量的点位"); + point_code1 = jsonStartPointYSA.getString("point_code"); + } + } + JSONObject resuft = new JSONObject(); + resuft.put("point_code1", point_code1); + resuft.put("vehicle_type", jsonOrder.getString("vehicle_type")); + return resuft; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxCallEmpVehicleTask.java new file mode 100644 index 0000000..9a498b7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/YqxCallEmpVehicleTask.java @@ -0,0 +1,301 @@ +package org.nl.wms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; + +@Service +@RequiredArgsConstructor +@Slf4j +public class YqxCallEmpVehicleTask extends AbstractAcsTask { + private final String THIS_CLASS = YqxCallEmpVehicleTask.class.getName(); + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String task_id = taskObj.getString("task_id"); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status, "0")) { + // 取消删除任务 + taskTab.delete("task_id = '" + task_id + "'"); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + } + + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + // 更改任务状态为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + PointService point = SpringContextHolder.getBean(PointService.class); + // 校验起点是否存在 + PointDto point_code1 = point.findByCode(jsonTask.getString("point_code1")); + if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("未找到可用点位:" + point_code1); + // 校验终点是否存在 + PointDto point_code2 = point.findByCode(jsonTask.getString("point_code2")); + if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("未找到可用点位:" + point_code2); + + // 1.更新点位数量 2.解锁点位 + int vehicle_qty = JSONObject.parseObject(JSON.toJSONString(point_code1)).getIntValue("vehicle_qty"); + BigDecimal vehicle_qty_point = NumberUtil.sub(String.valueOf(vehicle_qty), String.valueOf(1)); + + point_code1.setVehicle_qty(vehicle_qty_point); + if (StrUtil.equals(vehicle_qty_point.toString(), "0")) { + point_code1.setPoint_status("00"); + point_code1.setVehicle_type(""); + } + point_code1.setLock_type("00"); + pointTab.update(JSONObject.parseObject(JSON.toJSONString(point_code1))); + } + } + + @Override + public JSONObject findStartPoint(JSONObject param) { + return null; + } + + @Override + public JSONObject findNextPoint(JSONObject param) { + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject form) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String point_code1 = form.getString("point_code1"); + String point_code2 = form.getString("point_code2"); + String qty = form.getString("qty"); + String vehicle_type = form.getString("vehicle_type"); + + // 出库终点不能为空 + if (ObjectUtil.isEmpty(point_code2)) { + throw new BadRequestException("终点不能为空"); + } else { + // 判断终点是否有正在执行的任务 + JSONObject beforTaskObj = taskTab.query("is_delete='0' and point_code2='" + point_code2 + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) + throw new BadRequestException("存在任务号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + // 载具数量不能为空 + if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("载具数量不能为空"); + + /* + * 1. 点对点: 起点和终点都确定,直接创建任务 + * 2. 终点确定: 需要找到对应起点,在创建任务 具体找起点货位的规则在findBeginPoint()中 + */ + //起点不确定 + if (ObjectUtil.isEmpty(point_code1)) { + + JSONObject param = new JSONObject(); + param.put("point_code2",point_code2); + param.put("vehicle_qty",qty); + + + JSONObject json = this.findBeginPoint(param); + point_code1 = json.getString("start_point_code"); + vehicle_type = json.getString("vehicle_type"); + } else { + // 判断终点是否是空位 + JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "' and lock_type = '00' and point_status <> '02' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("起点点位不可用或不存在"); + } + + + + // 创建任务 + JSONObject jsonTask = new JSONObject(); + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + + jsonTask.put("task_id", task_id); + jsonTask.put("taskdtl_id", task_id); + jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + jsonTask.put("task_type", "04"); + jsonTask.put("taskdtl_type", "04"); + jsonTask.put("task_status", "01"); + jsonTask.put("point_code1", point_code1); + jsonTask.put("point_code2", point_code2); + jsonTask.put("handle_class", THIS_CLASS); + jsonTask.put("vehicle_type", vehicle_type); + jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); + jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); + jsonTask.put("create_time", DateUtil.now()); + jsonTask.put("acs_task_type", "1"); + taskTab.insert(jsonTask); + + // 锁定起点点位 + JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); + jsonPoint.put("lock_type", "02"); + pointTab.update(jsonPoint); + + return task_id; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void pullBack(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } + + @Transactional(rollbackFor = Exception.class) + public JSONObject findBeginPoint(JSONObject json) { + String point_code2 = json.getString("point_code2"); + String vehicle_qty = json.getString("vehicle_qty"); + if (ObjectUtil.isEmpty(point_code2)) throw new BadRequestException("终点不能为空"); + if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空"); + + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + // 根据终点区域判断优先的起点区域 + JSONObject jsonPointEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPointEnd)) throw new BadRequestException("终点点位不存在"); + JSONObject jsonRegionEnd = regionTab.query("region_id ='" + jsonPointEnd.getString("region_id") + "'").uniqueResult(0); + + // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 + String device_code = point_code2.substring(0, point_code2.indexOf("_")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + + //当前设备所需要的载具类型 + String vehicle_type = jsonOrder.getString("vehicle_type"); + /* + * 空托盘出库任务: + * 1.叠盘架B区、养生A区 --> 共挤线 (优先级:1叠盘架B区 2养生A区) + * 2.叠盘架A区、养生A区 --> 油漆线 (优先级:1叠盘架A区 2养生A区) + */ + String point_code1 = ""; + JSONObject map = new JSONObject(); + if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.GJQY.getCode())) { + //1、判断是否有拆托盘任务。 + taskTab.query("task_type= 'gjxsqkp' "); + + //2、判断是否有到该叠盘位的堆叠任务。 + + + + //1、判断叠盘架B是否有对应类型的空载具 + JSONObject jsonDpjB = pointTab.query("point_status ='2' and lock_type='00' and can_vehicle_type = '" + vehicle_type + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonDpjB)) {//没有则去空托盘缓存区B和养生A区找 + + } + + + // 共挤线呼叫空托盘业务:查找叠盘架B区是否有满足条件的点位 + map.put("flag", "1"); + map.put("vehicle_qty", vehicle_qty); + map.put("vehicle_type", jsonOrder.getString("vehicle_type")); + map.put("region_code", RegionTypeEnum.DPJQB.getCode()); + JSONObject jsonStartPointDPB = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonStartPointDPB)) { + point_code1 = jsonStartPointDPB.getString("point_code"); + } else { + // 为空说明叠盘架B区没有,则去养生A区找 : 只能找数量为1的空托盘 + map.put("flag", "3"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonStartPointYSA)) { + point_code1 = jsonStartPointYSA.getString("point_code"); + } else { + throw new BadRequestException("没有满足需求数量的点位"); + /* // 如果没有则需要从养生区A区里找到 > 1的货位 出库到叠盘架B中 + map.put("flag", "1"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + // 起点 + JSONObject jsonStart = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonStart)) throw new BadRequestException("没有满足需求数量的点位"); + // 终点 + JSONObject jsonEnd = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and point_status = '00' and lock_type = '00' and is_used = '1' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonEnd)) throw new BadRequestException("叠盘架B货位不足"); + + JSONObject parem = new JSONObject(); + parem.put("point_code1",jsonStart.getString("point_code")); + parem.put("point_code2",jsonEnd.getString("point_code")); + parem.put("qty",jsonStart.getString("vehicle_qty")); + parem.put("vehicle_type",jsonStart.getString("vehicle_qty")); + String task_id = this.createTask(parem); + + // 生成 叠盘架 -> 共挤线的任务 返回叠盘架B的点位code + point_code1 = jsonEnd.getString("point_code");*/ + } + + } + + } else if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.YQQY.getCode())) { + // 油漆线呼叫空托盘业务:查找叠盘架A区是否有满足条件的点位 + map.put("flag", "1"); + map.put("vehicle_qty", vehicle_qty); + map.put("vehicle_type", jsonOrder.getString("vehicle_type")); + map.put("region_code", RegionTypeEnum.DPJQA.getCode()); + JSONObject jsonStartPointDPA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonStartPointDPA)) { + point_code1 = jsonStartPointDPA.getString("point_code"); + } else { + // 为空说明叠盘架A区没有,则去养生A区找 + map.put("flag", "3"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonStartPointYSA)) throw new BadRequestException("没有满足需求数量的点位"); + point_code1 = jsonStartPointYSA.getString("point_code"); + } + } + JSONObject resuft = new JSONObject(); + resuft.put("point_code1", point_code1); + resuft.put("vehicle_type", jsonOrder.getString("vehicle_type")); + return resuft; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index 7e21f29..94552da 100644 Binary files a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls and b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls differ