opt:优化二期堆垛机完成并发任务优化
opt:优化木箱信息获取
This commit is contained in:
@@ -193,40 +193,33 @@ public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
|
||||
|
||||
String task_id = taskObj.getString("task_id");
|
||||
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status < '07'").uniqueResult(0);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(jsonTask)) {
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
// 任务为执行之后就不允许取消
|
||||
if (jsonTask.getIntValue("task_status") > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消");
|
||||
}
|
||||
|
||||
// 更新删除字段
|
||||
jsonTask.put("is_delete", "1");
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("is_delete", "1");
|
||||
param.put("update_time", DateUtil.now());
|
||||
taskTab.update(param,"task_id = '" + task_id);
|
||||
}
|
||||
|
||||
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||
// 更新任务状态为执行中
|
||||
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
param.put("update_time", DateUtil.now());
|
||||
taskTab.update(param,"task_id = '" + task_id);
|
||||
}
|
||||
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
// 更新任务完成
|
||||
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
param.put("update_time", DateUtil.now());
|
||||
taskTab.update(param,"task_id = '" + task_id);
|
||||
// 如果是异常出库口则不需要下发行架任务
|
||||
if (jsonTask.getString("point_code2").equals(IOSEnum.EXCEP_OUT.code("异常出库口"))) {
|
||||
// 解绑托盘对应关系
|
||||
WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
|
||||
JSONObject ext_jo = veExtTab.query("pcsn = '" + jsonTask.getString("vehicle_code") + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(ext_jo)) {
|
||||
@@ -239,7 +232,6 @@ public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
jsonParam.put("device_code", jsonTask.getString("point_code2"));
|
||||
jsonParam.put("vehicle_code", jsonTask.getString("vehicle_code"));
|
||||
jsonParam.put("task_group_id", jsonTask.getString("task_group_id"));
|
||||
|
||||
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
|
||||
bean1.createLashTask(jsonParam);
|
||||
// 再次下发:找相同任务组的下发
|
||||
@@ -319,10 +311,9 @@ public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
if (ObjectUtil.isEmpty(taskArrAll)) {
|
||||
return;
|
||||
// taskArrAll = wo_Task
|
||||
// .query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' ORDER BY create_time")
|
||||
// .getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
taskArrAll = wo_Task
|
||||
.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' ORDER BY create_time")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
}
|
||||
|
||||
// 是否下发多个AGV输送出库任务
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvOutServiceImpl;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.LashManageServiceImpl;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.WQL;
|
||||
@@ -164,44 +165,33 @@ public class TwoOutTask extends AbstractAcsTask {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
|
||||
WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); // 出入库分配表
|
||||
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); // 仓位表
|
||||
|
||||
String task_id = taskObj.getString("task_id");
|
||||
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status < '07'").uniqueResult(0);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(jsonTask)) {
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
// 任务为执行之后就不允许取消
|
||||
if (jsonTask.getIntValue("task_status") > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消");
|
||||
}
|
||||
|
||||
// 更新删除字段
|
||||
jsonTask.put("is_delete", "1");
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
|
||||
// 更新分配明细为:未生成
|
||||
JSONObject map = new JSONObject();
|
||||
map.put("work_status", IOSEnum.WORK_STATUS.code("未生成"));
|
||||
map.put("point_id", "");
|
||||
map.put("task_id", "");
|
||||
|
||||
disTab.update(map, "task_id = '" + task_id + "'");
|
||||
if (ObjectUtil.isEmpty(jsonTask)){
|
||||
return;
|
||||
}
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
if (jsonTask.getIntValue("task_status") > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消");
|
||||
}
|
||||
|
||||
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||
// 更新任务状态为执行中
|
||||
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
|
||||
}
|
||||
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
// 调用标识完成
|
||||
jsonTask.put("is_delete", "1");
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
JSONObject map = new JSONObject();
|
||||
map.put("work_status", IOSEnum.WORK_STATUS.code("未生成"));
|
||||
map.put("point_id", "");
|
||||
map.put("task_id", "");
|
||||
disTab.update(map, "task_id = '" + task_id + "'");
|
||||
}
|
||||
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
}
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
RedissonUtils.lock(c -> {
|
||||
StIvtIostorinvOutServiceImpl bean = SpringContextHolder.getBean(StIvtIostorinvOutServiceImpl.class);
|
||||
bean.finishTask(jsonTask);
|
||||
|
||||
// 判断是否有异常货位的需要更新
|
||||
JSONObject jsonExt = attrTab.query("inv_code = '" + jsonTask.getString("vehicle_code") + "' AND lock_type = '"+IOSEnum.LOCK_TYPE.code("出库异常锁")+"'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(jsonExt)) {
|
||||
@@ -209,27 +199,21 @@ public class TwoOutTask extends AbstractAcsTask {
|
||||
jsonExt.put("inv_code", "");
|
||||
attrTab.update(jsonExt);
|
||||
}
|
||||
|
||||
// 判断此任务组是否全部完成
|
||||
JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' and handle_class = '"+THIS_CLASS+"'")
|
||||
.getResultJSONArray(0);
|
||||
|
||||
// 下发堆垛机至行架任务(2个行架位)
|
||||
JSONObject jsonParam = new JSONObject();
|
||||
jsonParam.put("device_code",jsonTask.getString("point_code2"));
|
||||
jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code"));
|
||||
jsonParam.put("task_group_id",jsonTask.getString("task_group_id"));
|
||||
jsonParam.put("vehicle_type",jsonTask.getJSONObject("request_param").getString("containerType"));
|
||||
|
||||
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
|
||||
bean1.createHeapTask(jsonParam);
|
||||
|
||||
// 判断此任务组是否全部完成
|
||||
JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' and handle_class = '"+THIS_CLASS+"'")
|
||||
.getResultJSONArray(0);
|
||||
if (ObjectUtil.isEmpty(resultJSONArray)) {
|
||||
this.immediateNotifyAcs(null);
|
||||
}
|
||||
}
|
||||
}, "出库堆垛机任务反馈完成", 30, this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -73,7 +73,8 @@ public class AutoSendMzToDjq {
|
||||
}
|
||||
JSONObject task = new JSONObject();
|
||||
//满轴有子卷且过滤未完成任务
|
||||
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务取货"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
|
||||
|
||||
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"));
|
||||
if (ObjectUtils.isEmpty(mzqPackageinfoivtList)) {
|
||||
return;
|
||||
}
|
||||
@@ -88,7 +89,8 @@ public class AutoSendMzToDjq {
|
||||
task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name());
|
||||
task.put("point_code1", packageinfoivtService.getWaitPoint(mzqPackageinfoivtList.get(0).getBlock(), mzqPackageinfoivtList.get(0).getWait_point_type()));
|
||||
//如果浅库位和深库位都有空位,且为一组,优先深库位
|
||||
task.put("point_code2", mzqPackageinfoivtList.get(0).getPoint_code());
|
||||
task.put("point_code2", selectEmpPoints.get(0).getPoint_code());
|
||||
task.put("point_code3", mzqPackageinfoivtList.get(0).getPoint_code());
|
||||
djqTask.createTask(task);
|
||||
} else {
|
||||
log.info("满轴->待检区agv自动搬运任务正在创建被锁住。");
|
||||
|
||||
@@ -81,9 +81,14 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl<BstIvtBoxinfoMapper, B
|
||||
BstIvtBoxinfo boxDao = this.getOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, whereJson.getString("ContainerName")));
|
||||
|
||||
if (ObjectUtil.isEmpty(boxDao)) {
|
||||
String height = whereJson.getString("Height");
|
||||
int i = height.indexOf("|");
|
||||
if (i>1){
|
||||
height=height.substring(0,i);
|
||||
}
|
||||
boxDao = BstIvtBoxinfo.builder()
|
||||
.box_id(IdUtil.getStringId())
|
||||
.box_high(whereJson.getString("Height"))
|
||||
.box_high(height)
|
||||
.box_length(whereJson.getString("Length"))
|
||||
.box_width(whereJson.getString("Width"))
|
||||
.material_code(whereJson.getString("ProductName"))
|
||||
@@ -96,7 +101,6 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl<BstIvtBoxinfoMapper, B
|
||||
|
||||
// 截取子卷号
|
||||
String description = whereJson.getString("Description");
|
||||
|
||||
try {
|
||||
String one = description.substring(description.indexOf("|") + 1);
|
||||
String two = one.substring(one.indexOf("|") + 1);
|
||||
@@ -109,7 +113,12 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl<BstIvtBoxinfoMapper, B
|
||||
this.save(boxDao);
|
||||
|
||||
}else {
|
||||
boxDao.setBox_high(whereJson.getString("Height"));
|
||||
String height = whereJson.getString("Height");
|
||||
int i = height.indexOf("|");
|
||||
if (i>1){
|
||||
height=height.substring(0,i);
|
||||
}
|
||||
boxDao.setBox_high(height);
|
||||
boxDao.setBox_length(whereJson.getString("Length"));
|
||||
boxDao.setBox_width(whereJson.getString("Width"));
|
||||
boxDao.setVehicle_type(vehicle_type);
|
||||
@@ -128,7 +137,6 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl<BstIvtBoxinfoMapper, B
|
||||
|
||||
return boxDao;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject saveBoxInfo(JSONObject jsonObject) {
|
||||
//从MES获取包装关系
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package org.nl.common.utils;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@@ -41,4 +43,33 @@ public class RedissonUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param process
|
||||
* @param key
|
||||
* @param secend:最大等待时间
|
||||
* @param param
|
||||
*/
|
||||
@SneakyThrows
|
||||
public static void lock(Consumer process, String key, int secend, Object param){
|
||||
RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class);
|
||||
RLock lock = redissonClient.getLock(key);
|
||||
boolean isLock;
|
||||
isLock = lock.tryLock(secend,secend+5,TimeUnit.SECONDS);
|
||||
try {
|
||||
if (isLock){
|
||||
process.accept(param);
|
||||
} else {
|
||||
throw new BadRequestException("当前业务"+key+"正在执行");
|
||||
}
|
||||
}catch (Exception ex){
|
||||
ex.printStackTrace();
|
||||
throw ex;
|
||||
}finally {
|
||||
if (isLock && lock.isHeldByCurrentThread()){
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,9 +85,11 @@ public class LmsToBigScreenServiceImpl implements LmsToBigScreenService {
|
||||
Map<String, List<PdmBiSubpackagerelation>> collect = list.stream().filter(a->StringUtils.isNotEmpty(a.getPackage_box_sn())).collect(Collectors.groupingBy(item -> item.getPackage_box_sn()));
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
JSONObject row = rows.get(i);
|
||||
JSONObject item = new JSONObject();
|
||||
item.put("struct_code", row.getString("struct_code"));
|
||||
item.put("struct_status", "0");
|
||||
String box = row.getString("storagevehicle_code");
|
||||
if (!StringUtils.isEmpty(box)){
|
||||
JSONObject item = new JSONObject();
|
||||
item.put("storagevehicle_code", box);
|
||||
if (box.startsWith("KTP")) {
|
||||
item.put("struct_status", "1");
|
||||
@@ -99,21 +101,21 @@ public class LmsToBigScreenServiceImpl implements LmsToBigScreenService {
|
||||
item.put("container_weight", container_weight);
|
||||
item.put("product_description", subs.get(0).getProduct_description());
|
||||
item.put("sale_order_name", subs.get(0).getSale_order_name());
|
||||
item.put("quanlity_in_box", subs.get(0).getQuanlity_in_box());
|
||||
item.put("quanlity_in_box", subs.get(0).getQuanlity_in_box().toString());
|
||||
item.put("box_weight", subs.get(0).getBox_weight());
|
||||
item.put("struct_status", "2");
|
||||
JSONArray detail = new JSONArray();
|
||||
for (PdmBiSubpackagerelation dtl : subs) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("container_name", dtl.getContainer_name());
|
||||
jsonObject.put("net_weight", dtl.getNet_weight());
|
||||
jsonObject.put("net_weight", dtl.getNet_weight().toString());
|
||||
detail.add(jsonObject);
|
||||
}
|
||||
item.put("detail", detail);
|
||||
}
|
||||
}
|
||||
data.add(item);
|
||||
}
|
||||
data.add(item);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ spring:
|
||||
url-pattern: /druid/*
|
||||
reset-enable: false
|
||||
filters:
|
||||
`DruidFilter`,stat
|
||||
DruidFilter,stat
|
||||
url: jdbc:mysql://10.1.3.87:3306/lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
|
||||
username: root
|
||||
password: NLABC&hl123
|
||||
|
||||
@@ -6,7 +6,7 @@ spring:
|
||||
freemarker:
|
||||
check-template-location: false
|
||||
profiles:
|
||||
active: dev
|
||||
active: prod
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
data:
|
||||
|
||||
Reference in New Issue
Block a user