代码更新

This commit is contained in:
2022-10-24 20:36:50 +08:00
parent b9fd966f96
commit 108885261a
2 changed files with 226 additions and 186 deletions

View File

@@ -2,8 +2,10 @@ package org.nl.wms.sch.tasks.callEmpty;
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.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
@@ -13,9 +15,11 @@ 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.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.RegionTypeEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -42,6 +46,9 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
if (StrUtil.equals(status, "0")) {
// 取消删除任务
if (StrUtil.equals(jsonTask.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
throw new BadRequestException("已完成不能取消!");
}
taskTab.delete("task_id = '" + task_id + "'");
}
@@ -54,47 +61,65 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
// 更改任务状态为完成
/*
* 更改任务状态为完成
* 1.终点为叠盘架更新叠盘架数量、起点点位状态、等待位状态,更新任务组状态
* 2.终点为供给线,更新起点载数量
*/
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);
String end_point_code = jsonTask.getString("point_code2");
String start_point_code = jsonTask.getString("point_code1");
JSONObject endPoint = pointTab.query("point_code = '" + end_point_code + "'").uniqueResult(0);
//从空托盘缓存B区或养生A区搬运到叠盘架
if (StrUtil.equals("DPJQB01", endPoint.getString("region_code"))) {
//解锁起点
JSONObject startPoint = new JSONObject();
startPoint.put("lock_type", "1");
startPoint.put("point_status", "1");
startPoint.put("update_time", DateUtil.now());
pointTab.update(startPoint, "point_code = '" + start_point_code + "'");
//更新终点点位状态
endPoint.put("point_status", "2");
endPoint.put("lock_type", "00");
endPoint.put("vehicle_qty", jsonTask.getString("vehicle_qty"));
endPoint.put("vehicle_type", jsonTask.getString("vehicle_type"));
endPoint.put("update_time", DateUtil.now());
pointTab.update(endPoint);
} else {
JSONObject startPoint = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0);
Integer vehicle_qty = startPoint.getInteger("vehicle_qty");
int after_qty = vehicle_qty - 1;
startPoint.put("lock_type", "1");
startPoint.put("vehicle_qty", after_qty);
if (after_qty > 0) {
startPoint.put("point_status", "2");
} else {
startPoint.put("point_status", "1");
// 判断终点在哪里
String point_code1 = jsonTask.getString("point_code1");
String point_code2 = jsonTask.getString("point_code2");
JSONObject jsonEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
// 终点在叠盘架
if (StrUtil.equals(jsonEnd.getString("region_id"), RegionTypeEnum.DPJQB.getId())) {
// 更新起点点位状态
JSONObject jsonStart = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
// 判断此起点是否是等待点
if (!StrUtil.equals(jsonStart.getString("row_num"), "9")) {
// 如果不是等待点更新等待点状态
JSONObject jsonEmpWait = pointTab.query("region_id = '" + jsonStart.getString("region_id") +
"' and block_num = '" + jsonStart.getString("block_num") +
"' and col_num = '" + jsonStart.getString("col_num") +
"' and row_num = '9'").uniqueResult(0);
jsonEmpWait.put("lock_type", "1");
pointTab.update(jsonEmpWait);
}
startPoint.put("update_time", DateUtil.now());
pointTab.update(startPoint, "point_code = '" + start_point_code + "'");
jsonStart.put("point_status", "1");
jsonStart.put("lock_type", "1");
jsonStart.put("vehicle_type", "");
jsonStart.put("vehicle_code", "");
jsonStart.put("vehicle_qty", 0);
pointTab.update(jsonStart);
// 更新终点(叠盘架状态)
jsonEnd.put("vehicle_qty", NumberUtil.add(jsonEnd.getString("vehicle_qty"),jsonTask.getString("vehicle_qty")));
jsonEnd.put("lock_type", "1");
pointTab.update(jsonEnd);
// 更新任务组状态
JSONObject jsonTask2 = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_id <> '" + jsonTask.getString("task_id") + "'").uniqueResult(0);
jsonTask2.put("point_code1", jsonEnd.getString("point_code"));
jsonTask2.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskTab.update(jsonTask2);
} else {
// 终点在油漆线: 更新起点(叠盘架)数量
JSONObject jsonStart = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
jsonStart.put("vehicle_qty",NumberUtil.sub(jsonStart.getString("vehicle_qty"),"1"));
jsonStart.put("lock_type", "1");
pointTab.update(jsonStart);
}
}
}
@Override
public List<AcsTaskDto> addTask() {
return null;
@@ -102,8 +127,8 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
@Override
public void findStartPoint() {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表
JSONArray taskArr = taskTab.query("is_delete = '0' and handle_class = '" + this.THIS_CLASS + "' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0);
for (int i = 0; i < taskArr.size(); i++) {
@@ -111,74 +136,119 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
JSONObject jsonTask = taskArr.getJSONObject(i);
String vehicle_type = jsonTask.getString("vehicle_type");
//判断叠盘是否有另外任务
JSONObject taskObj = taskTab.query("is_delete='0' and handle_class='" + this.THIS_CLASS + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "' and task_id <> " + jsonTask.getLong("task_id")).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) continue;
//叠盘是否与对应的载具类型
JSONObject jsonDpjStart = 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);
//判断叠盘架是否有载具
JSONObject dpjPoint = pointTab.query("is_used ='1' and lock_type='00' and is_delete='0' and region_code='DPJQB01' and vehicle_qty >0 and can_vehicle_type like '%" + vehicle_type + "%'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(dpjPoint)) {
jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
jsonTask.put("point_code1", dpjPoint.getString("point_code"));
jsonTask.put("update_time", DateUtil.now());
if (ObjectUtil.isNotEmpty(jsonDpjStart)) {
// 判断叠盘架是否有任务 有就下一个任务
boolean is_point = this.isTask(jsonDpjStart.getString("point_code"));
if (!is_point) continue;
// 更新任务起点
jsonTask.put("point_code1", jsonDpjStart.getString("point_code"));
jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT);
taskTab.update(jsonTask);
//锁住点位
dpjPoint.put("lock_type", "2");
pointTab.update(dpjPoint);
} else {
//查找叠盘架编码
JSONObject dpjPoint1 = pointTab.query("is_delete='0' and region_code='DPJQB01' and can_vehicle_type like '%" + vehicle_type + "%'").uniqueResult(0);
// 判断叠盘架载具数量是否是0
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;
//叠盘架无载具:1-判断是否有在执行中的堆叠任务有则等堆叠任务完成以后再去否则去去缓存位和养生A区找
JSONObject ddTask = taskTab.query("is_delete='0' and point_code2 = '" + dpjPoint1.getString("point_code") + "'" + " and task_status <> '7' ").uniqueResult(0);
if (ObjectUtil.isNotEmpty(ddTask)) continue;
// 判断叠盘架是否有任务
boolean is_point = this.isTask(jsonDpjStart2.getString("point_code"));
if (!is_point) continue;
//去缓存位和养生A区找,生成到叠盘架的任务
JSONObject whereParam = new JSONObject();
whereParam.put("flag", "1");
whereParam.put("vehicle_type", '%' + jsonTask.getString("vehicle_type") + "%");
JSONObject outJsonObj = WQL.getWO("QSCH_GjxCallEmpVehicleTask").addParamMap(whereParam).process().uniqueResult(0);
// 找叠盘架暂存位是否有空托盘
JSONObject map = new JSONObject();
map.put("flag", "1");
map.put("vehicle_type", vehicle_type);
// 空托盘缓存货架或者养生A区------>叠盘架B区
JSONObject param = new JSONObject();
Long task_id = IdUtil.getSnowflake(1, 1).nextId();
Long task_group_id = IdUtil.getSnowflake(1, 1).nextId();
param.put("task_id", task_id);
param.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
param.put("vehicle_type", vehicle_type);
param.put("priority", 100);
param.put("handle_class", THIS_CLASS);
param.put("task_type", "kzj");
param.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
param.put("task_group_id", task_group_id);
param.put("sort_seq", 1);
param.put("point_code1", outJsonObj.getString("point_code"));
param.put("point_code2", dpjPoint1.getString("point_code"));
param.put("create_name", SecurityUtils.getCurrentUsername());
param.put("create_id", SecurityUtils.getCurrentUserId());
param.put("create_time", DateUtil.now());
taskTab.insert(param);
JSONObject jsonZcKtp = WQL.getWO("QSCH_GjxCallEmpVehicleTask").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonZcKtp)) {
// 创建任务:空载具暂存位 --> 叠盘架
SchTaskDto dto = SchTaskDto.builder()
.task_id(org.nl.wms.util.IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("")
.task_status(TaskStatusEnum.START_AND_POINT.getCode())
.point_code1(jsonZcKtp.getString("point_code"))
.point_code2(jsonDpjStart2.getString("point_code"))
.vehicle_code(jsonZcKtp.getString("vehicle_code"))
.vehicle_type(jsonZcKtp.getString("vehicle_type"))
.vehicle_qty(jsonZcKtp.getIntValue("vehicle_qty"))
.task_group_id(jsonTask.getLong("task_group_id"))
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
// 锁定起点
jsonZcKtp.put("lock_type", "2");
pointTab.update(jsonZcKtp);
} else {
// 空托盘暂存区没有就到养生A区找: 先找到出库等待点
JSONObject jsonEmpWait = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() +
"' and row_num = '9' and can_vehicle_type = '" + vehicle_type +
"' and is_used = '1' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonEmpWait)) continue;
//锁住起点
outJsonObj.put("lock_type", "2");
pointTab.update(outJsonObj);
this.notifyAcs(String.valueOf(task_id));
JSONObject jsonStartPoint = pointTab.query("region_id = '" + jsonEmpWait.getString("region_id") +
"' and block_num = '" + jsonEmpWait.getString("block_num") +
"' and col_num = '" + jsonEmpWait.getString("col_num") +
"' and point_status = '2' and lock_type = '1' order by out_empty_seq DESC").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonStartPoint)) continue;
jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
jsonTask.put("point_code1", outJsonObj.getString("point_code"));
jsonTask.put("sort_seq", 2);
jsonTask.put("task_group_id", task_group_id);
jsonTask.put("remark", "叠盘架无载具!");
taskTab.update(jsonTask);
//锁住点位
dpjPoint1.put("lock_type", "2");
pointTab.update(outJsonObj);
// 判断找到的空载具点位是否是等待点
if (StrUtil.equals(jsonEmpWait.getString("point_code"),jsonStartPoint.getString("point_code"))) {
// 创建 养生A区空载具等待点 --> 叠盘架
SchTaskDto dto = SchTaskDto.builder()
.task_id(org.nl.wms.util.IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("")
.task_status(TaskStatusEnum.START_AND_POINT.getCode())
.point_code1(jsonStartPoint.getString("point_code"))
.point_code2(jsonDpjStart2.getString("point_code"))
.vehicle_code(jsonStartPoint.getString("vehicle_code"))
.vehicle_type(jsonStartPoint.getString("vehicle_type"))
.vehicle_qty(jsonStartPoint.getIntValue("vehicle_qty"))
.task_group_id(jsonTask.getLong("task_group_id"))
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
// 锁起点
jsonStartPoint.put("lock_type", "2");
pointTab.update(jsonStartPoint);
} else {
// 判断等待点是否是 未锁定、为空载具
if (StrUtil.equals(jsonEmpWait.getString("lock_type"), "1") && StrUtil.equals(jsonEmpWait.getString("point_status"), "2")) {
// 创建 养生A区空载具 --> 叠盘架
SchTaskDto dto = SchTaskDto.builder()
.task_id(org.nl.wms.util.IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("")
.task_status(TaskStatusEnum.START_AND_POINT.getCode())
.point_code1(jsonStartPoint.getString("point_code"))
.point_code2(jsonDpjStart2.getString("point_code"))
.vehicle_code(jsonStartPoint.getString("vehicle_code"))
.vehicle_type(jsonStartPoint.getString("vehicle_type"))
.vehicle_qty(jsonStartPoint.getIntValue("vehicle_qty"))
.task_group_id(jsonTask.getLong("task_group_id"))
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
// 锁起点
jsonStartPoint.put("lock_type", "2");
pointTab.update(jsonStartPoint);
} else {
continue;
}
}
}
}
}
}
@@ -187,41 +257,40 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
/*
* 1.先生成确定终点的任务
* 2.通过findStartPoint()找起点
* 3.下发给ACS
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 生产工单表
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); //点位基础表
String end_point_code = form.getString("point_code2");
String vehicle_type = form.getString("vehicle_type");
String point_code2 = form.getString("point_code1");
// 终点不能为空
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);
String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code");
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());
JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0);
if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除");
//见基础分类表的任务分类
jsonTask.put("task_type", "gjxsqkp");
jsonTask.put("task_status", TaskStatusEnum.SURE_END.getCode());
jsonTask.put("point_code1", "");
taskTab.insert(jsonTask);
SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("")
.task_status(TaskStatusEnum.SURE_END.getCode())
.point_code2(point_code2)
.vehicle_code(form.getString("vehicle_code"))
.vehicle_type(workOrderObj.getString("vehicle_type"))
.vehicle_qty(form.getIntValue("qty"))
.task_group_id(org.nl.wms.util.IdUtil.getLongId())
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
this.findStartPoint();
return String.valueOf(task_id);
// this.immediateNotifyAcs();
return String.valueOf(dto.getTask_id());
}
@Override
@@ -236,4 +305,28 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
}
@Transactional(rollbackFor = Exception.class)
public boolean isTask(String point_code) {
/*
* 判断点位是否有任务存在
*/
WQLObject tab = WQLObject.getWQLObject("SCH_BASE_Task");
boolean result;
JSONObject jsonPointCode1 = tab.query("point_code1 = '" + point_code + "' and task_status <> '7' and is_delete = '0'").uniqueResult(0);
JSONObject jsonPointCode2 = tab.query("point_code2 = '" + point_code + "' and task_status <> '7' and is_delete = '0'").uniqueResult(0);
JSONObject jsonPointCode3 = tab.query("point_code3 = '" + point_code + "' and task_status <> '7' and is_delete = '0'").uniqueResult(0);
JSONObject jsonPointCode4 = tab.query("point_code4 = '" + point_code + "' and task_status <> '7' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonPointCode1) && ObjectUtil.isEmpty(jsonPointCode2) && ObjectUtil.isEmpty(jsonPointCode3) && ObjectUtil.isEmpty(jsonPointCode4)) {
result = true;
} else {
result = false;
}
return result;
}
}

View File

@@ -14,9 +14,7 @@
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.vehicle_qty TYPEAS s_string
输入.vehicle_type TYPEAS s_string
输入.region_code TYPEAS s_string
输入.vehicle_type TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
@@ -42,72 +40,21 @@
IF 输入.flag = "1"
QUERY
SELECT
p.point_id,
p.point_code,
p.point_name
FROM
SCH_BASE_Point p
WHERE
p.is_used = '1'
AND p.is_delete = '0'
AND p.lock_type = '00'
AND p.point_status = '2'
and region_code in ('KTPHCQB01','YSQA01')
SELECT
*
FROM
SCH_BASE_Point
WHERE
is_used = '1'
AND is_delete = '0'
AND lock_type = '1'
AND point_status = '2'
AND region_code = 'KTPHCQB01'
OPTION 输入.vehicle_type <> ""
p.vehicle_type like 输入.vehicle_type
can_vehicle_type = 输入.vehicle_type
ENDOPTION
order by out_empty_seq,p.vehicle_qty
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
point.*
FROM
sch_base_point point
LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id
WHERE
point.lock_type = '00'
AND point.point_status = '01'
AND IFNULL(point.vehicle_qty,0) == 输入.vehicle_qty
OPTION 输入.region_code <> ""
region.region_code = 输入.region_code
ENDOPTION
OPTION 输入.vehicle_type <> ""
point.vehicle_type = 输入.vehicle_type
ENDOPTION
order by point.point_code DESC
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
point.*
FROM
sch_base_point point
LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id
WHERE
point.lock_type = '00'
AND point.point_status = '00'
OPTION 输入.region_code <> ""
region.region_code = 输入.region_code
ENDOPTION
order by point.point_code DESC
ENDSELECT
ENDQUERY
ENDIF
ENDIF