代码更新

This commit is contained in:
2022-10-22 18:29:31 +08:00
parent 6b55b1aab2
commit 1c95c8c103
5 changed files with 112 additions and 174 deletions

View File

@@ -121,19 +121,21 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@LokiLog(type = LokiLogType.ACS_TO_LMS)
@Override
public String againApply(String task_id) {
log.info("输入参数:"+task_id);
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
String point_code = "";
try {
Class<?> clz = Class.forName(jsonTask.getString("handle_class"));
Object obj = clz.newInstance();
Method m = obj.getClass().getDeclaredMethod("againApply", JSONObject.class, String.class);
Object invoke = m.invoke(task_id);
Method m = obj.getClass().getDeclaredMethod("againApply",String.class);
point_code = (String) m.invoke(obj,task_id);
} catch (Exception e) {
}
return null;
log.info("输出参数:"+point_code);
return point_code;
}
@LokiLog(type = LokiLogType.ACS_TO_LMS)
@@ -295,28 +297,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
param.put("qty", jsonVeQty.getString("qty"));
param.put("point_code1", point_code);
param.put("vehicle_code", vehicle_code);
param.put("vehicle_type", vehicle_type);
// 创建任务
HtSendEmpVehicleTask taskBean = SpringContextHolder.getBean(HtSendEmpVehicleTask.class);
String task_id = taskBean.createTask(param);
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
if (StrUtil.equals(jsonTask.getString("task_status"), "4")) {
// 起点终点确定则下发
// JSONObject jsonObject = taskBean.renotifyAcs(task_id);
JSONObject jsonObject=new JSONObject();
if (StrUtil.equals(jsonObject.getString("status"), "200")) {
// 更新任务状态
jsonTask.put("task_status", TaskStatusEnum.ISSUE.getCode());
taskTab.update(jsonTask);
// 更新终点点位状态
JSONObject jsonEndPoint = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
jsonEndPoint.put("lock_type", "2");
pointTab.update(jsonEndPoint);
} else {
throw new BadRequestException(jsonObject.getString("message"));
}
}
} else if (StrUtil.equals(type, "7")) {
JSONObject param = new JSONObject();
param.put("point_code1", point_code);

View File

@@ -38,7 +38,7 @@ public abstract class AbstractAcsTask {
/**
* @param taskObj 代表一条任务对象
* @param status 代表wcs任务完成状态 //1:执行中,2:完成 ,3:acs取消
* @param status 代表wcs任务完成状态 //0acs,取消,:执行中,2:完成
* @return
* @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息任务完成的时候清除a的物料信息
* @author ldjun
@@ -131,7 +131,7 @@ public abstract class AbstractAcsTask {
* @param task_id: 任务标识
* @return 二次申请的点位
*/
String againApply(String task_id) {
public String againApply(String task_id) {
return null;
}

View File

@@ -1,8 +1,10 @@
package org.nl.wms.sch.tasks;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class AcsTaskDto {
//任务标识
private String task_id;

View File

@@ -218,7 +218,7 @@ public class CallMaterialTask extends AbstractAcsTask {
JSONArray tasks = taskTab.query("handle_class = '" + this.getClass().getName() + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
List<AcsTaskDto> arr = new ArrayList<>();
for (int i = 0, j = tasks.size(); i < j; i++) {
JSONObject json = tasks.getJSONObject(i);
/*JSONObject json = tasks.getJSONObject(i);
AcsTaskDto taskDto = new AcsTaskDto();
taskDto.setTask_id(json.getString("task_id"));
taskDto.setTask_code(json.getString("task_code"));
@@ -227,7 +227,7 @@ public class CallMaterialTask extends AbstractAcsTask {
taskDto.setStart_device_code(json.getString("point_code1"));
taskDto.setNext_device_code(json.getString("point_code2"));
taskDto.setVehicle_code(json.getString("vehicle_code"));
arr.add(taskDto);
arr.add(taskDto);*/
}
return arr;
}

View File

@@ -5,6 +5,7 @@ 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;
@@ -12,6 +13,7 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
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;
@@ -19,6 +21,7 @@ import org.nl.wms.sch.tasks.RegionTypeEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
@@ -27,8 +30,6 @@ import java.util.List;
public class HtSendEmpVehicleTask extends AbstractAcsTask {
private final String THIS_CLASS = HtSendEmpVehicleTask.class.getName();
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) {
@@ -40,6 +41,21 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
if (StrUtil.equals(status, "0")) {
// 取消删除任务
if (StrUtil.equals(jsonTask.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
throw new BadRequestException("已完成不能取消!");
}
String point_code3 = jsonTask.getString("point_code3");
String point_code2 = jsonTask.getString("point_code2");
if (ObjectUtil.isNotEmpty(point_code3)) {
JSONObject jsonPoint3 = pointTab.query("point_code ='" + point_code3 + "'").uniqueResult(0);
jsonPoint3.put("point_status", "1");
pointTab.update(jsonPoint3);
}
if (ObjectUtil.isNotEmpty(point_code2)) {
JSONObject jsonPoint2 = pointTab.query("point_code ='" + point_code2 + "'").uniqueResult(0);
jsonPoint2.put("point_status", "1");
pointTab.update(jsonPoint2);
}
taskTab.delete("task_id = '" + task_id + "'");
}
@@ -62,6 +78,10 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
// 更新终点判断point_code3是否为空为空就更新point_code2
if (ObjectUtil.isNotEmpty(point_code3)) {
point_code = point_code3;
// 更新point_code2:解锁
JSONObject point2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
point2.put("lock_type", "1");
pointTab.update(point2);
} else {
point_code = jsonTask.getString("point_code2");
}
@@ -79,6 +99,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
pointTab.update(endPoint);
} else {//非叠盘架
endPoint.put("lock_type", "1");
endPoint.put("vehicle_code", jsonTask.getString("vehicle_code"));
endPoint.put("vehicle_qty", jsonTask.getString("vehicle_qty"));
endPoint.put("vehicle_type", jsonTask.getString("vehicle_type"));
endPoint.put("point_status", "2");
@@ -91,132 +112,42 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
/*
* 1.先生成确定起点的任务
* 2.通过findNextPoint()找终点
* 3.下发给ACS
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表
WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_vehicle"); // 载具表
String qty = form.getString("qty");
String point_code1 = form.getString("point_code1");
String point_code2 = "";
String task_id = "";
JSONObject jsonVehicle = vehicleTab.query("vehicle_code = '" + form.getString("vehicle_code") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVehicle)) throw new BadRequestException("此载具号不存在");
// 1.判断货梯是否有任务,如果有生成起点确定的任务
// 空托盘一楼到二楼固定点位SSX01A1 , SSX02A1
//判断SSX01A1是否有任务没有则判断其他的三个点位
boolean ssx_1 = this.isTask("SSX01A1");
if (ssx_1) {
String like = "SSX01%";
JSONArray taskArrNum = new JSONArray();
JSONArray pointArr = pointTab.query("region_id = '" + RegionTypeEnum.SSX.getId() + "' and is_used = '1' and is_delete = '0' and point_code like '" + like + "'").getResultJSONArray(0);
for (int i = 0; i < pointArr.size(); i++) {
JSONObject json = pointArr.getJSONObject(i);
boolean is_empTask = this.isTask(json.getString("point_code"));
if (!is_empTask) taskArrNum.add(json);
}
if (taskArrNum.size() > 0) {
} else {
point_code2 = "SSX01A1";
}
}
// 判断SSX02A1是否有任务没有则判断其他的三个点位
if (ObjectUtil.isEmpty(point_code2)) {
boolean ssx_2 = this.isTask("SSX02A1");
if (ssx_2) {
String like = "SSX02%";
JSONArray taskArrNum = new JSONArray();
JSONArray pointArr = pointTab.query("region_id = '" + RegionTypeEnum.SSX.getId() + "' and is_used = '1' and is_delete = '0' and point_code like '" + like + "'").getResultJSONArray(0);
for (int i = 0; i < pointArr.size(); i++) {
JSONObject json = pointArr.getJSONObject(i);
boolean is_empTask = this.isTask(json.getString("point_code"));
if (!is_empTask) taskArrNum.add(json);
}
if (taskArrNum.size() > 0) {
} else {
point_code2 = "SSX02A1";
}
}
}
// 如果此时point_code2为空则生成起点确认的任务
if (ObjectUtil.isEmpty(point_code2)) {
JSONObject param = new JSONObject();
param.put("task_status", "2");
param.put("point_code1", point_code1);
param.put("vehicle_type", jsonVehicle.getString("vehicle_type"));
param.put("vehicle_qty", qty);
param.put("vehicle_code", jsonVehicle.getString("vehicle_code"));
param.put("acs_task_type", "1");
task_id = this.pubCreateTask(param);
} else {
// 说明货梯无任务:找终点
JSONObject param = new JSONObject();
param.put("vehicle_type", jsonVehicle.getString("vehicle_type"));
param.put("qty", qty);
String endPoint = this.endPoint(param);
// 如果终点为空则创建起点确定的任务
if (ObjectUtil.isEmpty(endPoint)) {
JSONObject param2 = new JSONObject();
param2.put("task_status", "2");
param2.put("point_code1", point_code1);
param2.put("vehicle_type", jsonVehicle.getString("vehicle_type"));
param2.put("vehicle_qty", qty);
param2.put("vehicle_code", jsonVehicle.getString("vehicle_code"));
param.put("acs_task_type", "1");
task_id = this.pubCreateTask(param2);
} else {
// 不为空则创建到养生A区等待点的任务
// 处理终点编码:入在第一个 '-'前加1出在第一个 '-'前加2
// String sub_1 = endPoint.substring(0, endPoint.indexOf("-"));
// String sub_2 = endPoint.substring(endPoint.indexOf("-"), endPoint.length());
JSONObject param2 = new JSONObject();
param2.put("task_status", "4");
param2.put("point_code1", point_code1);
param2.put("point_code2", endPoint);
param2.put("vehicle_type", jsonVehicle.getString("vehicle_type"));
param2.put("vehicle_qty", qty);
param2.put("vehicle_code", jsonVehicle.getString("vehicle_code"));
param.put("acs_task_type", "1");
task_id = this.pubCreateTask(param2);
// 锁定终点
JSONObject jsonEnd = pointTab.query("point_code = '" + endPoint + "'").uniqueResult(0);
jsonEnd.put("lock_type", "2");
pointTab.update(jsonEnd);
}
}
return task_id;
SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("")
.task_status(TaskStatusEnum.SURE_START.getCode())
.point_code1(point_code1)
.vehicle_code(form.getString("vehicle_code"))
.vehicle_type(form.getString("vehicle_type"))
.vehicle_qty(form.getIntValue("qty"))
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
this.findNextPoint();
// this.immediateNotifyAcs();
return String.valueOf(dto.getTask_id());
}
/**
* @return
* @discription 确定下一点位
* @author ldjun
* @created 2020年6月12日 下午6:01:06
*/
@Override
public void findNextPoint() {
/*
* 根据业务找对应的终点
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
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);
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 jsonTask = taskArr.getJSONObject(i);
String point_code_ht = "";
@@ -298,6 +229,9 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
@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());
}
@@ -371,32 +305,11 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
return end_code;
}
@Transactional(rollbackFor = Exception.class)
public String pubCreateTask(JSONObject param) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
JSONObject jsonTask = new JSONObject();
jsonTask.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
jsonTask.put("task_type", "");
jsonTask.put("task_status", param.getString("task_status"));
jsonTask.put("point_code1", param.getString("point_code1"));
jsonTask.put("point_code2", param.getString("point_code2"));
jsonTask.put("vehicle_type", param.getString("vehicle_type"));
jsonTask.put("vehicle_qty", param.getString("vehicle_qty"));
jsonTask.put("vehicle_code", param.getString("vehicle_code"));
jsonTask.put("priority", "1");
jsonTask.put("handle_class", THIS_CLASS);
jsonTask.put("sort_seq", "1");
jsonTask.put("acs_task_type", param.getString("acs_task_type"));
jsonTask.put("create_time", DateUtil.now());
taskTab.insert(jsonTask);
return jsonTask.getString("task_id");
}
@Transactional(rollbackFor = Exception.class)
public boolean isTask(String point_code) {
/*
* 判断点位是否有任务存在
*/
WQLObject tab = WQLObject.getWQLObject("SCH_BASE_Task");
boolean result;
@@ -416,7 +329,12 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
}
@Transactional(rollbackFor = Exception.class)
@Override
public String againApply(String task_id) {
/*
* 再次下发任务处理方法
* 涉及业务:入空载具、出空载具、入物料、出物料
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表
@@ -430,7 +348,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
JSONObject jsonOnePoint = pointTab.query("region_id = '" + jsonPoint2.getString("region_id") +
"' and block_num = '" + jsonPoint2.getString("block_num") +
"' and col_num = '" + jsonPoint2.getString("col_num") +
"' and point_code <> '"+jsonPoint2.getString("point_code")+
"' and point_code <> '" + jsonPoint2.getString("point_code") +
"' and point_status = '2' order by in_empty_seq ASC").uniqueResult(0);
// 如果为空说明这一列其他货位为空 则入到最后一个货位
@@ -438,10 +356,14 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
JSONObject jsonEmpPoint = pointTab.query("region_id = '" + jsonPoint2.getString("region_id") +
"' and block_num = '" + jsonPoint2.getString("block_num") +
"' and col_num = '" + jsonPoint2.getString("col_num") +
"' and point_code <> '"+jsonPoint2.getString("point_code")+
"' and point_code <> '" + jsonPoint2.getString("point_code") +
"' and point_status = '1' order by in_empty_seq DESC").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonEmpPoint)) point_code = jsonEmpPoint.getString("point_code");
if (ObjectUtil.isNotEmpty(jsonEmpPoint)) {
point_code = jsonEmpPoint.getString("point_code");
jsonTask.put("point_code3", point_code);
taskTab.update(jsonTask);
}
} else {
// 找前一位的空位
double in_empty_seq = NumberUtil.sub(jsonOnePoint.getIntValue("in_empty_seq"), 1);
@@ -449,17 +371,46 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask {
JSONObject jsonEmpPoint = pointTab.query("region_id = '" + jsonPoint2.getString("region_id") +
"' and block_num = '" + jsonPoint2.getString("block_num") +
"' and col_num = '" + jsonPoint2.getString("col_num") +
"' and point_code <> '"+jsonPoint2.getString("point_code")+
"' and in_empty_seq = '"+ in_empty_seq +
"' and point_code <> '" + jsonPoint2.getString("point_code") +
"' and in_empty_seq = '" + in_empty_seq +
"' and point_status = '1'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonEmpPoint)) point_code = jsonEmpPoint.getString("point_code");
if (ObjectUtil.isNotEmpty(jsonEmpPoint)) {
point_code = jsonEmpPoint.getString("point_code");
jsonTask.put("point_code3", point_code);
taskTab.update(jsonTask);
}
}
JSONObject jsonEndPoint = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0);
jsonEndPoint.put("lock_type", "2");
pointTab.update(jsonEndPoint);
return point_code;
}
@Override
public List<AcsTaskDto> addTask() {
return null;
/*
* 下发给ACS时需要特殊处理
*/
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '"+THIS_CLASS+"' and task_status = '"+TaskStatusEnum.START_AND_POINT.getCode()+"' and is_delete ='0'").getResultJSONArray(0);
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
for (int i = 0; i < arr.size(); i++) {
JSONObject json = arr.getJSONObject(i);
AcsTaskDto dto = AcsTaskDto.builder()
.task_id(json.getString("task_id"))
.task_code(json.getString("task_code"))
.task_type(json.getString("task_type"))
.start_device_code(json.getString("point_code1"))
.next_device_code(json.getString("point_code3"))
.vehicle_code(json.getString("vehicle_code"))
.vehicle_type(json.getString("vehicle_type"))
.priority(json.getString("priority"))
.remark(json.getString("remark"))
.build();
resultList.add(dto);
}
return resultList;
}
}