代码修改,去除养生区整列锁定、添加供给线判断去货梯口还是养生区

This commit is contained in:
2023-01-29 10:10:50 +08:00
parent 17721a9269
commit a94a274cbf
24 changed files with 193 additions and 108 deletions

View File

@@ -145,6 +145,7 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
dto.setUpdate_optname(nickName);
dto.setUpdate_time(now);
dto.setCreate_time(now);
dto.setBase_unit_id(15);
WQLObject wo = WQLObject.getWQLObject("md_me_materialbase");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.insert(json);

View File

@@ -90,4 +90,7 @@ public class WorkorderDto implements Serializable {
/** 修改时间 */
private String update_time;
/** 工单类型 **/
private String workorder_type;
}

View File

@@ -2,7 +2,6 @@
package org.nl.wms.sch.rest;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

View File

@@ -54,6 +54,10 @@ public class TaskServiceImpl implements TaskService {
if (StrUtil.isNotEmpty(task_status)) {
task_status = task_status.replace("[\"", "").replace("\"]", "").replace("\"", "");
}
String moreTaskStatus = whereJson.getString("more_task_status");
if (ObjectUtil.isNotEmpty(moreTaskStatus)) {
task_status = moreTaskStatus;
}
map.put("task_status", task_status);
//处理状态为未完成
if (StrUtil.isNotEmpty(task_status) && task_status.contains("-1")) {

View File

@@ -28,5 +28,7 @@ public class AcsTaskDto {
private String params;
//路由类型
private String route_plan_code;
// 载具数量
private String vehicle_qty;
}

View File

@@ -181,7 +181,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
// 创建任务
JSONObject jsonTask = taskArr.getJSONObject(i);
String vehicle_type = jsonTask.getString("vehicle_type");
// 更新点位
// 更新点位 更新所有叠盘架B
Map query = new HashMap<>();
query.put("flag", "2");
query.put("region_code", RegionTypeEnum.DPJQB.getCode());
@@ -192,7 +192,8 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
JSONObject jsonDpjStart = pointTab.query("region_code = '" + RegionTypeEnum.DPJQB.getCode() + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and vehicle_qty <> '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonDpjStart)) {
// 判断叠盘架是否有任务 有就下一个任务
// todo
// 判断叠盘架是否有任务 有就下一个任务 : 可以去除
boolean is_point = this.isTask(jsonDpjStart.getString("point_code"));
if (!is_point) continue;
@@ -210,10 +211,12 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
JSONObject jsonDpjStart2 = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and vehicle_qty = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonDpjStart2)) continue;
// todo: 删除任务校验
// 判断叠盘架是否有任务
boolean is_point = this.isTask(jsonDpjStart2.getString("point_code"));
if (!is_point) continue;
// todo: 如何知道缓存位是否有空托盘
// 找叠盘架暂存位是否有空托盘
JSONObject map = new JSONObject();
map.put("flag", "1");
@@ -357,7 +360,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
.acs_task_type("2")
.vehicle_code(form.getString("vehicle_code"))
.vehicle_type(workOrderObj.getString("vehicle_type"))
.vehicle_qty(form.getIntValue("qty"))
.vehicle_qty(1)
.task_group_id(IdUtil.getLongId())
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
@@ -420,6 +423,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
.vehicle_type(json.getString("vehicle_type"))
.priority(json.getString("priority"))
.remark(json.getString("remark"))
.vehicle_qty(json.getString("vehicle_qty"))
.build();
resultList.add(dto);
}

View File

@@ -89,7 +89,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
taskTab.delete("task_id = '" + task_id + "'");
}
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
if (StrUtil.equals(status, "1")) {
// 更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
@@ -97,7 +97,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
taskTab.update(jsonTask);
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
if (StrUtil.equals(status, "2")) {
/*
* 更改任务状态为完成
* 1.终点为叠盘架更新叠盘架数量、起点点位状态、等待位状态,更新任务组状态
@@ -364,7 +364,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
.acs_task_type("2")
.vehicle_code(form.getString("vehicle_code"))
.vehicle_type(workOrderObj.getString("vehicle_type"))
.vehicle_qty(form.getIntValue("qty"))
.vehicle_qty(1)
.task_group_id(org.nl.wms.util.IdUtil.getLongId())
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
@@ -427,6 +427,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
.vehicle_type(json.getString("vehicle_type"))
.priority(json.getString("priority"))
.remark(json.getString("remark"))
.vehicle_qty(json.getString("vehicle_qty"))
.build();
resultList.add(dto);
}

View File

@@ -61,7 +61,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
taskTab.delete("task_id = '" + task_id + "'");
}
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
if (StrUtil.equals(status, "1")) {
// 更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
@@ -69,7 +69,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
taskTab.update(jsonTask);
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
if (StrUtil.equals(status, "2")) {
// 更改任务状态为完成
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
jsonTask.put("update_time", DateUtil.now());

View File

@@ -59,7 +59,7 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
taskTab.delete("task_id = '" + task_id + "'");
}
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
if (StrUtil.equals(status, "1")) {
// 更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
@@ -67,7 +67,7 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
taskTab.update(jsonTask);
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
if (StrUtil.equals(status, "2")) {
// 更改任务状态为完成
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
jsonTask.put("update_time", DateUtil.now());

View File

@@ -17,6 +17,7 @@ import org.nl.wms.sch.SchTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.sch.tasks.utils.PointUpdateUtil;
import org.nl.wms.util.IdUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -40,10 +41,11 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
public void updateTaskStatus(JSONObject task, String status) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
String task_id = task.getString("task_id");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
String workOrderId = taskObj.getString("material_info_id");
//任务取消
if (StrUtil.equals(status, "0")) {
// 取消删除任务
@@ -84,8 +86,19 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_time", DateUtil.now());
taskObj.put("remark", "任务执行完成");
taskTab.update(taskObj);
JSONObject order = orderTab.query("workorder_id = '" + workOrderId + "'").uniqueResult(0);
if (order.getString("workorder_type").equals("1")) {
// 货梯口
String point_code2 = taskObj.getString("point_code2");
JSONObject param = new JSONObject();
param.put("lock_type", "1");
param.put("point_status", "3");
pointTab.update(param, "point_code = '" + point_code2 + "'");
}
String point_code2 = taskObj.getString("point_code2");
JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
@@ -146,24 +159,56 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
public void findNextPoint() {
//判断共挤线是否有执行中的任务,如果任务数>=3,则不生成任务
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
/*
WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
/**
* 根据业务找对应的终点
*/
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '2'").getResultJSONArray(0);
for (int i = 0; i < taskArr.size(); i++) {
JSONObject taskObj = taskArr.getJSONObject(i);
String task_id = taskObj.getString("task_id");
String material_id = taskObj.getString("material_id");
String vehicle_type = taskObj.getString("vehicle_type");
String workOrderId = taskObj.getString("material_info_id"); // 工单号
// 获取工单判断是去养生区还是货梯口
JSONObject workOrder = orderTab.query("workorder_id = '" + workOrderId + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(workOrder)) throw new BadRequestException("工单不能为空");
if (workOrder.getString("workorder_type").equals("1")) { // 机采去货梯扣
// 更新点位
JSONArray ssxArray = WQL.getWO("QSCH_yqxSendMaterial_01").addParam("flag", "2").process().getResultJSONArray(0);
PointUpdateUtil.updatePoint(ssxArray);
JSONObject param = new JSONObject();
param.put("flag", "1");
JSONObject endPoint = WQL.getWO("QSCH_yqxSendMaterial_01").addParamMap(param).process().uniqueResult(0);
if (ObjectUtil.isEmpty(endPoint)) {
taskObj.put("remark", "电梯无可用点");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
} else {
//锁住点位
endPoint.put("lock_type", "2");
endPoint.put("task_id", task_id);
pointTab.update(endPoint);
//修改任务状态
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskObj.put("remark", "");
taskObj.put("point_code2", endPoint.getString("point_code"));
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
}
return;
}
JSONObject param1 = new JSONObject();
param1.put("flag", "1");
param1.put("material_id", material_id);
param1.put("region_code", "YSQA01");
param1.put("vehicle_type", "%" + vehicle_type + "%");
param1.put("vehicle_type", vehicle_type );
//1、查找库区类是否有响应的载具类型和对应的物料
// json1: 对应相同物料的点位
JSONObject json1 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param1).process().uniqueResult(0);
//判断是否有到同一列的相同物料SKU的AGV任务如果有则等待
JSONArray taskIngs = taskTab.query("is_delete='0' and material_id = '" + material_id + "' and (task_status = '4' or task_status = '5' or task_status = '6' )").getResultJSONArray(0);
@@ -181,59 +226,68 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
}
if (ObjectUtil.isNotEmpty(json1)) {
if (ObjectUtil.isNotEmpty(json1)) { // json1: 对应相同物料的点位
Integer block_num = json1.getInteger("block_num");
Integer col_num = json1.getInteger("col_num");
Integer row_num = json1.getInteger("row_num");
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and col_num ='" + (col_num - 1) + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(firstRow)) throw new BadRequestException("数据错误,请校验!");
taskObj.put("point_code2", firstRow.getString("point_code"));
taskObj.put("update_time", DateUtil.now());
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
//二楼普通任务
taskTab.update(taskObj);
//锁住相关货位
JSONObject point = new JSONObject();
point.put("lock_type", "2");
point.put("task_id", taskObj.getString("task_id"));
pointTab.update(point, "block_num = '" + block_num + "' and row_num = '" + row_num + "' and col_num <= '" + (col_num - 1) + "'");
} else {//找空位入
if (ObjectUtil.isNotEmpty(taskIngs) && taskIngs.size() > 1) {
taskObj.put("remark", "相应列有AGV在工作,等待执行!");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
continue;
}
JSONObject param2 = new JSONObject();
param2.put("flag", "2");
param2.put("region_code", "YSQA01");
param2.put("vehicle_type", "%" + vehicle_type + "%");
//1、查找整列为空的货位
JSONObject json2 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param2).process().uniqueResult(0);
if (ObjectUtil.isEmpty(json2)) {
taskObj.put("remark", "养生A区无可用货位");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
} else {
Integer block_num = json2.getInteger("block_num");
Integer row_num = json2.getInteger("row_num");
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and col_num ='9'").uniqueResult(0);
if (col_num != 1) {// 物料位在第一个位置说明已经叠满了
// 因为找到的是对应相同的物料点,所以是下一个位置
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0'", "col_num desc").uniqueResult(0); // and col_num ='" + (col_num - 1) + "'
if (ObjectUtil.isEmpty(firstRow)) throw new BadRequestException("数据错误,请校验!");
taskObj.put("point_code2", firstRow.getString("point_code"));
//二楼普通任务
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskObj.put("update_time", DateUtil.now());
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
//二楼普通任务
taskTab.update(taskObj);
//锁住相关货位
JSONObject point = new JSONObject();
point.put("lock_type", "2");
point.put("task_id", taskObj.getString("task_id"));
pointTab.update(point, "block_num = '" + block_num + "' and row_num = '" + row_num + "' and col_num <= '" + 9 + "'");
pointTab.update(point, "point_code = '" + firstRow.getString("point_code") + "'");
return;
// JSONObject point = new JSONObject();
// point.put("lock_type", "2");
// point.put("task_id", taskObj.getString("task_id"));
// pointTab.update(point, "block_num = '" + block_num + "' and row_num = '" + row_num + "' and col_num <= '" + (col_num - 1) + "'");
}
}
//找空位入: 物料点查找在第一列或者是没有找到物料点
if (ObjectUtil.isNotEmpty(taskIngs) && taskIngs.size() > 1) {
taskObj.put("remark", "相应列有AGV在工作,等待执行!");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
continue;
}
JSONObject param2 = new JSONObject();
param2.put("flag", "2");
param2.put("region_code", "YSQA01");
param2.put("vehicle_type",vehicle_type);
//1、查找整列为空的货位
JSONObject json2 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param2).process().uniqueResult(0);
if (ObjectUtil.isEmpty(json2)) {
taskObj.put("remark", "养生A区无可用货位");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
} else {
Integer block_num = json2.getInteger("block_num");
Integer row_num = json2.getInteger("row_num");
Integer sum = json2.getInteger("sum");
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0'", "col_num desc").uniqueResult(0); // and col_num = '" + sum + "'
taskObj.put("point_code2", firstRow.getString("point_code"));
//二楼普通任务
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
//锁住相关货位
JSONObject point = new JSONObject();
point.put("lock_type", "2");
pointTab.update(point, "point_code = '" + firstRow.getString("point_code") + "'");
// JSONObject point = new JSONObject();
// point.put("lock_type", "2");
// point.put("task_id", taskObj.getString("task_id"));
// pointTab.update(point, "block_num = '" + block_num + "' and row_num = '" + row_num + "' and col_num <= '" + sum + "'"); // 9
}
}
}
@@ -273,7 +327,6 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
@Override
public String createTask(JSONObject whereJson) {
String point_code1 = whereJson.getString("point_code1");
String vehicle_type = whereJson.getString("vehicle_type");
String vehicle_code = whereJson.getString("vehicle_code");
String qty = whereJson.getString("qty");

View File

@@ -67,7 +67,7 @@ public class YqxSendMaterialTask extends AbstractAcsTask {
taskTab.update(jsonTask);
}
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
if (StrUtil.equals(status, "1")) {
//更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
@@ -75,7 +75,7 @@ public class YqxSendMaterialTask extends AbstractAcsTask {
taskTab.update(jsonTask);
}
if (TaskStatusEnum.FINISHED.getCode().equals(status)) {
if (StrUtil.equals(status, "2")) {
// 更新任务状态为完成
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode"));
@@ -130,8 +130,7 @@ public class YqxSendMaterialTask extends AbstractAcsTask {
//修改任务状态
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskObj.put("point_code2", endPoint.getString("point_code"));
taskObj.put("update_optid", SecurityUtils.getCurrentUserId());
taskObj.put("update_optname", SecurityUtils.getCurrentNickName());
taskObj.put("remark", "");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
}

View File

@@ -57,7 +57,7 @@
AND is_delete = '0'
AND lock_type = '1'
AND point_status = '3'
and col_num>1
and col_num>=1
OPTION 输入.material_id <> ""
p.material_id = 输入.material_id
ENDOPTION
@@ -65,7 +65,7 @@
p.region_code = 输入.region_code
ENDOPTION
OPTION 输入.vehicle_type <> ""
p.can_vehicle_type like 输入.vehicle_type
p.can_vehicle_type like "%" 输入.vehicle_type "%"
ENDOPTION
ORDER BY block_num,row_num,col_num
ENDSELECT
@@ -87,10 +87,10 @@
AND point_status = '1'
AND lock_type = '1'
OPTION 输入.vehicle_type <> ""
p.can_vehicle_type like 输入.vehicle_type
p.can_vehicle_type like "%" 输入.vehicle_type "%"
ENDOPTION
GROUP BY block_num,row_num
HAVING sum = 9
HAVING sum in ('9','13')
ORDER BY block_num,row_num
ENDSELECT
ENDQUERY

View File

@@ -32,6 +32,7 @@ public class PointUpdateUtil {
if (pointObj2.getString("region_code").equals(RegionTypeEnum.DPJQB.getCode())) { // 碟盘机
String vehicleNum = pointObj.getString("vehicle_num");
pointObj2.put("vehicle_qty", vehicleNum);
pointObj2.put("point_status", vehicleNum.equals("0")?"1":"2");
pointTable.update(pointObj2);
} else if (pointObj2.getString("region_code").equals(RegionTypeEnum.SSX.getCode())) {
String move = pointObj.getString("move");

View File

@@ -54,7 +54,9 @@
SELECT
point.*,
d3.label as lock_type_name,
ma.material_name
ma.material_name,
ma.material_code,
ma.material_spec
FROM
sch_base_point point
LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id

View File

@@ -72,7 +72,7 @@
task.create_time <= 输入.end_time
ENDOPTION
OPTION 输入.unFinish <> ""
task.task_status <> '07'
task.task_status <> '7'
ENDOPTION
OPTION 输入.task_status <> ""
find_in_set( task.task_status, 输入.task_status)