rev:内包间优化

This commit is contained in:
2024-01-05 15:57:04 +08:00
parent c883a4d1ee
commit 65ac6ccf47
6 changed files with 195 additions and 111 deletions

View File

@@ -76,6 +76,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public Map<String, Object> receiveTaskStatusAcs(String string) {
log.info("receiveTaskStatusAcs请求参数--------------------------------------" + string);
JSONArray array = JSONArray.parseArray(string);
@@ -84,41 +85,53 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
for (int i = 0; i < array.size(); i++) {
JSONObject row = array.getJSONObject(i);
String task_id = row.getString("task_id");
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
// 任务处理类
String processing_class = taskObj.getString("handle_class");
//1:执行中,2:完成 ,3:acs取消
String acs_task_status = row.getString("task_status");
String car_no = row.getString("car_no");
if (StrUtil.isNotEmpty(car_no)) {
taskObj.put("car_no", car_no);
WQLObject.getWQLObject("SCH_BASE_Task").update(taskObj);
}
String message = "";
String status = "";
if ("1".equals(acs_task_status)) {
status = TaskStatusEnum.EXECUTING.getCode();
}
if ("2".equals(acs_task_status)) {
status = TaskStatusEnum.FINISHED.getCode();
}
if ("3".equals(acs_task_status)) {
status = "0";
}
// 任务处理类
RLock lock = redissonClient.getLock(task_id);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
Class<?> clz = Class.forName(processing_class);
Object obj = clz.newInstance();
// 调用每个任务类的forceFinishInst()强制结束方法
Method m = obj.getClass().getDeclaredMethod("updateTaskStatus", JSONObject.class, String.class);
m.invoke(obj, row, status);
} catch (Exception e) {
e.printStackTrace();
message = e.getMessage();
throw new BadRequestException(message);
if (tryLock){
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
// 任务处理类
String processing_class = taskObj.getString("handle_class");
//1:执行中,2:完成 ,3:acs取消
String acs_task_status = row.getString("task_status");
String car_no = row.getString("car_no");
if (StrUtil.isNotEmpty(car_no)) {
taskObj.put("car_no", car_no);
WQLObject.getWQLObject("SCH_BASE_Task").update(taskObj);
}
String message = "";
String status = "";
if ("1".equals(acs_task_status)) {
status = TaskStatusEnum.EXECUTING.getCode();
}
if ("2".equals(acs_task_status)) {
status = TaskStatusEnum.FINISHED.getCode();
}
if ("3".equals(acs_task_status)) {
status = "0";
}
// 任务处理类
try {
Class<?> clz = Class.forName(processing_class);
Object obj = clz.newInstance();
// 调用每个任务类的forceFinishInst()强制结束方法
Method m = obj.getClass().getDeclaredMethod("updateTaskStatus", JSONObject.class, String.class);
m.invoke(obj, row, status);
} catch (Exception e) {
e.printStackTrace();
message = e.getMessage();
throw new BadRequestException(message);
}
}else {
throw new BadRequestException("任务标识为:"+task_id+"的任务正在操作中!");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
}
}
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "任务状态反馈成功!");
@@ -947,7 +960,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override
public JSONObject sendGetGoalStruct(JSONObject whereJson) {
log.info("sendGetGoalStruct请求参数为--------------------------" + whereJson.toString());
//type:2、反馈尺寸3、申请4、申请6、套轴申请7、套轴完成8、拔轴完成
//type:2、反馈尺寸3、申请4、申请6、套轴申请7、套轴完成8、拔轴完成
String type = whereJson.getString("type");
JSONObject result = new JSONObject();
@@ -978,24 +991,37 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String zg_generation = zg_jo.getString("qzz_generation");
if (StrUtil.isEmpty(zg_generation) || StrUtil.isEmpty(zg_size)) {
//如果纸管工位的代数和尺寸为空,则把气胀轴搬运到气胀轴缓存位
JSONObject jo = new JSONObject();
jo.put("task_type", "010603");
jo.put("point_code1", cbz_jo.getString("point_code"));
JSONObject fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0);
jo.put("point_code2", fhd_jo.getString("point_code"));
jo.put("product_area", product_area);
jo.put("vehicle_code", "qzz");
jo.put("truss_type", "8");
JSONObject request_param = new JSONObject();
request_param.put("have_size", cbz_size);
request_param.put("have_generation", cbz_generation);
jo.put("request_param", request_param.toString());
paperTrussTask.createTask(jo);
result.put("status", HttpStatus.OK.value());
result.put("is_bushing", "0");
result.put("message", "反馈成功!");
return result;
/*如果纸管工位的代数和尺寸为空,判断是否存在正在纸管出库且符合条件的任务
1、存在则反馈ACS等待
2、不存在则把气胀轴搬运到气胀轴缓存位*/
JSONObject paper_jo = WQLObject.getWQLObject("sch_base_task").query("task_type = '010601' AND task_status < '07' AND is_delete = '0' AND product_area = '" + product_area + "' order by create_time").uniqueResult(0);
if (ObjectUtil.isNotEmpty(paper_jo)) {
JSONObject resq_jo = paper_jo.getJSONObject("request_param");
JSONObject plan_jo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("container_name = '" + resq_jo.getString("container_name1") + "'").uniqueResult(0);
String paper_tube_or_FRP = plan_jo.getString("paper_tube_or_frp");
String paper_name;
if ("1".equals(paper_tube_or_FRP)) {
paper_name = plan_jo.getString("paper_tube_description");
} else {
paper_name = plan_jo.getString("frp_description");
}
String need_size = String.valueOf(paper_name.split("\\|")[2].charAt(0));
JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("ext_code = '" + plan_jo.getString("resource_name") + "'").uniqueResult(0);
//获取分切机维护的气涨轴代数
String need_generation = cut_jo.getString("qzz_generation");
if (cbz_size.equals(need_size) && zg_generation.equals(need_generation)) {
//todo:反馈ACS让气胀轴等待
result.put("status", HttpStatus.OK.value());
result.put("is_bushing", "2");
result.put("message", "反馈成功!");
return result;
} else {
return createTask(result, product_area, cbz_jo, cbz_size, cbz_generation);
}
} else {
return createTask(result, product_area, cbz_jo, cbz_size, cbz_generation);
}
} else {
if (cbz_size.equals(zg_size) && zg_generation.equals(cbz_generation)) {
//todo:反馈ACS可以进行穿轴
@@ -1168,11 +1194,34 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
result.put("status", HttpStatus.OK.value());
result.put("device_code", struct_jo.getString("point_code"));
result.put("message", "反馈成功!");
log.info("sendGetGoalStruct输出参数为--------------------------" + result.toString());
return result;
}
//创建气胀轴放货任务
private JSONObject createTask(JSONObject result, String product_area, JSONObject cbz_jo, String cbz_size, String cbz_generation) {
JSONObject jo = new JSONObject();
jo.put("task_type", "010603");
jo.put("point_code1", cbz_jo.getString("point_code"));
JSONObject fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0);
jo.put("point_code2", fhd_jo.getString("point_code"));
jo.put("product_area", product_area);
jo.put("vehicle_code", "qzz");
jo.put("truss_type", "8");
JSONObject request_param = new JSONObject();
request_param.put("have_size", cbz_size);
request_param.put("have_generation", cbz_generation);
jo.put("request_param", request_param.toString());
paperTrussTask.createTask(jo);
result.put("status", HttpStatus.OK.value());
result.put("is_bushing", "0");
result.put("message", "反馈成功!");
return result;
}
@Override
public JSONObject actionFinishRequest(JSONObject whereJson) {
log.info("actionFinishRequest请求参数为--------------------------" + whereJson.toString());
String type = whereJson.getString("action");
String task_code = whereJson.getString("task_code1");
WQLObject ivt_shaftivt = WQLObject.getWQLObject("st_ivt_shaftivt");
@@ -1227,7 +1276,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject jo = new JSONObject();
jo.put("task_type", "010606");
jo.put("truss_type", "1");
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
jo.put("point_code1", plan_jo.getString("start_code"));
jo.put("point_code2", in_jo.getString("point_code"));
JSONObject hchj_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_code = '" + plan_jo.getString("start_code") + "'").uniqueResult(0);

View File

@@ -238,12 +238,6 @@ public class OutServiceImpl implements OutService {
throw new BadRequestException("点位:" + empty_vehicle.getString("point_code") + "载具号为空!");
}
jo.put("vehicle_code", point_code + "废箔");
if (jo.getString("vehicle_code").contains("废箔")) {
System.out.println("YES-------");
}
if (!jo.getString("vehicle_code").contains("废箔")) {
System.out.println("NO-------");
}
jo.put("product_area", cut_ivt.getString("product_area"));
//分切>输送线 子卷出站
jo.put("task_type", "010404");

View File

@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
@@ -20,6 +21,8 @@ import org.nl.wms.basedata.master.service.dto.ClassstandardDto;
import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.TaskService;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -28,6 +31,7 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @author ldjun
@@ -41,6 +45,8 @@ public class TaskServiceImpl implements TaskService {
private final ClassstandardService classstandardService;
private final RedissonClient redissonClient;
@Override
public Map<String, Object> queryAll(Map form, Pageable page) {
@@ -110,61 +116,75 @@ public class TaskServiceImpl implements TaskService {
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public void operation(Map<String, Object> map) {
String task_id = MapUtil.getStr(map, "task_id");
String method_name = MapUtil.getStr(map, "method_name");
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
if ("finish".equals(method_name)) {
//强制执行,只把任务变更成完成状态
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_optid", SecurityUtils.getCurrentUserId());
taskObj.put("update_optname", SecurityUtils.getCurrentUsername());
taskObj.put("update_time", DateUtil.now());
taskObj.put("remark", "任务被强制完成,不执行任何逻辑!");
WQLObject.getWQLObject("SCH_BASE_Task").update(taskObj);
} else {
// 任务处理类
String processing_class = taskObj.getString("handle_class");
String message = "";
try {
Class<?> clz = Class.forName(processing_class);
Object obj = clz.newInstance();
// 调用每个任务类的method_name()强制结束方法
Method m = obj.getClass().getMethod(method_name, String.class);
JSONObject result = (JSONObject) m.invoke(obj, task_id);
if (ObjectUtil.isEmpty(result)) {
return;
}
JSONArray arr = result.getJSONArray("errArr");
WQLObject wo = WQLObject.getWQLObject("sch_base_task");
if (ObjectUtil.isNotEmpty(arr)) {
for (int i = 0; i < arr.size(); i++) {
JSONObject json = arr.getJSONObject(i);
JSONObject param = new JSONObject();
param.put("task_id", json.getString("task_id"));
param.put("remark", json.getString("message"));
wo.update(param);
RLock lock = redissonClient.getLock(task_id);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock){
String method_name = MapUtil.getStr(map, "method_name");
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
if ("finish".equals(method_name)) {
//强制执行,只把任务变更成完成状态
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_optid", SecurityUtils.getCurrentUserId());
taskObj.put("update_optname", SecurityUtils.getCurrentUsername());
taskObj.put("update_time", DateUtil.now());
taskObj.put("remark", "任务被强制完成,不执行任何逻辑!");
WQLObject.getWQLObject("SCH_BASE_Task").update(taskObj);
} else {
// 任务处理类
String processing_class = taskObj.getString("handle_class");
String message = "";
try {
Class<?> clz = Class.forName(processing_class);
Object obj = clz.newInstance();
// 调用每个任务类的method_name()强制结束方法
Method m = obj.getClass().getMethod(method_name, String.class);
JSONObject result = (JSONObject) m.invoke(obj, task_id);
if (ObjectUtil.isEmpty(result)) {
return;
}
JSONArray arr = result.getJSONArray("errArr");
WQLObject wo = WQLObject.getWQLObject("sch_base_task");
if (ObjectUtil.isNotEmpty(arr)) {
for (int i = 0; i < arr.size(); i++) {
JSONObject json = arr.getJSONObject(i);
JSONObject param = new JSONObject();
param.put("task_id", json.getString("task_id"));
param.put("remark", json.getString("message"));
wo.update(param);
}
throw new BadRequestException("任务操作失败!");
} else {
JSONObject param = new JSONObject();
param.put("task_id", task_id);
param.put("remark", "操作成功");
wo.update(param);
}
} catch (InvocationTargetException e) {
if (ObjectUtil.isNull(e.getTargetException().getMessage())) {
message = e.getTargetException().toString();
} else {
message = e.getTargetException().getMessage();
}
throw new BadRequestException(message);
} catch (Exception e) {
e.printStackTrace();
throw new BadRequestException(e.getMessage());
}
throw new BadRequestException("任务操作失败!");
} else {
JSONObject param = new JSONObject();
param.put("task_id", task_id);
param.put("remark", "操作成功");
wo.update(param);
}
} catch (InvocationTargetException e) {
if (ObjectUtil.isNull(e.getTargetException().getMessage())) {
message = e.getTargetException().toString();
} else {
message = e.getTargetException().getMessage();
}
throw new BadRequestException(message);
} catch (Exception e) {
e.printStackTrace();
throw new BadRequestException(e.getMessage());
}else {
throw new BadRequestException("任务标识为:"+task_id+"的任务正在操作中!");
}
}finally {
if (tryLock) {
lock.unlock();
}
}
}
}

View File

@@ -63,7 +63,7 @@ public class PaperTrussTask extends AbstractAcsTask {
if ("010605".equals(json.getString("task_type")) || "010603".equals(json.getString("task_type")) || "010604".equals(json.getString("task_type"))) {
dto.setVersion(json.getJSONObject("request_param").getString("have_generation"));
}
if ("010606".equals(json.getString("task_type"))) {
if ("010606".equals(json.getString("task_type")) || "010602".equals(json.getString("task_type"))) {
dto.setVersion(json.getJSONObject("request_param").getString("need_generation"));
}
resultList.add(dto);

View File

@@ -2,6 +2,7 @@ package org.nl.wms.sch.tasks;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -11,6 +12,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
@@ -93,7 +95,7 @@ public class PaperTubeTask extends AbstractAcsTask {
out_jo.put("container_name2", req_param.getString("container_name2"));
//查询对应的分切计划
JSONObject plan_jo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("container_name = '" + req_param.getString("container_name1") + "'").uniqueResult(0);
JSONObject plan_jo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("container_name = '" + req_param.getString("container_name1") + "' AND is_delete = '0'").uniqueResult(0);
String paper_tube_or_FRP = plan_jo.getString("paper_tube_or_frp");
String paper_name;
if ("1".equals(paper_tube_or_FRP)) {
@@ -141,6 +143,25 @@ public class PaperTubeTask extends AbstractAcsTask {
request_param.put("need_generation", need_generation);
jo.put("request_param", request_param.toString());
paperTrussTask.createTask(jo);
} else {
//如果穿拔轴上存在一根气胀轴且没有任务则下发ACS允许套轴
if ("1".equals(have_qzz)) {
String device_code = cbz_jo.getString("point_code");
//判断是否存在任务
JSONObject paper_jo = WQLObject.getWQLObject("sch_base_task").query("point_code1 = '" + device_code + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(paper_jo)) {
//给穿拔轴机下发套轴
WmsToAcsService wmsToAcsService = SpringContextHolder.getBean(WmsToAcsService.class);
JSONArray action_rows = new JSONArray();
JSONObject action_jo = new JSONObject();
action_jo.put("device_code", device_code);
action_jo.put("code", "to_command");
action_jo.put("product_area", product_area);
action_jo.put("value", "4");
action_rows.add(action_jo);
wmsToAcsService.action(action_rows);
}
}
}
//更新出库口的库存信息

View File

@@ -91,8 +91,8 @@ public class HandMoveStorAcsTask extends AbstractAcsTask {
throw new BadRequestException("查询不到操作的任务记录!");
}
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
map.put("work_status", "02");
wo_dtl.update(map, "task_id='" + task_id + "'");
/*map.put("work_status", "02");
wo_dtl.update(map, "task_id='" + task_id + "'");*/
map.put("task_status", TaskStatusEnum.EXECUTING.getCode());
map.put("update_optid", currentUserId + "");
map.put("update_optname", nickName);