代码修改
This commit is contained in:
@@ -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");
|
||||
|
||||
|
||||
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是否有对应类型的空载具
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Reference in New Issue
Block a user