Merge pull request 'b_lms' (#2) from b_lms into master_merge

Reviewed-on: http://121.40.234.130:8899/root/lanzhouhailiang_one/pulls/2
This commit is contained in:
2024-06-12 18:57:32 +08:00
55 changed files with 1170 additions and 408 deletions

View File

@@ -27,6 +27,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.TwoBoxExcepTask;
import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask;
import org.nl.b_lms.sch.tasks.first_floor_area.SsxDjwTask;
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
@@ -143,6 +144,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Resource
private MzhcwTask mzhcwTask;
@Resource
private SsxDjwTask ssxDjwTask;
@Autowired
private ISysParamService iSysParamService;
@@ -1775,9 +1780,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
/**
* 成品子卷到达一楼输送线
* 二楼到一楼,成品子卷到达一楼输送线
*/
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public JSONObject sendProductToFirstFloor(JSONObject whereJson) {
// JSONObject whereJson 应该传子卷号,设备号,车间号
// 先查询满轴缓存位是否有可用库位,有创建搬运任务
@@ -1790,78 +1797,87 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) {
throw new BadRequestException("接口sendProductToFirstFloor任务号或子卷号参数为空");
}
//1.查询满轴缓存位是否有空位
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
List<BstIvtPackageinfoivt> mzPointList = bstIvtPackageinfoivtList.stream()
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位").equals(r.getPoint_status())
&& PackageInfoIvtEnum.IVT_STATUS.code("").equals(r.getIvt_status())).collect(Collectors.toList());
JSONObject jo = new JSONObject();
jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo.put("vehicle_code", whereJson.getString("material_barcode"));
//2.创建输送线->满轴位桁架任务,
String point_code1 = whereJson.getString("device_code");
jo.put("point_code1", point_code1);
if (CollectionUtils.isNotEmpty(mzPointList)) {
//任意一个满轴缓存位为终点
jo.put("point_code2", mzPointList.get(0).getPoint_code());
List<BstIvtPackageinfoivt> kzjPointList = bstIvtPackageinfoivtList.stream()
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status())
&& PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())).collect(Collectors.toList());
//空载具缓存位有空载具
if (CollectionUtils.isNotEmpty(kzjPointList)) {
jo.put("point_code3", kzjPointList.get(0).getPoint_code());
//终点为输送线点位
jo.put("point_code4", whereJson.getString("device_code"));
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
RLock lock = redissonClient.getLock(whereJson.getString("material_barcode"));
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
//1.查询满轴缓存位是否有空位
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
List<BstIvtPackageinfoivt> mzPointList = bstIvtPackageinfoivtList.stream()
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位").equals(r.getPoint_status())
&& PackageInfoIvtEnum.IVT_STATUS.code("").equals(r.getIvt_status())).collect(Collectors.toList());
JSONObject jo = new JSONObject();
jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo.put("vehicle_code", whereJson.getString("material_barcode"));
//2.创建输送线->满轴位桁架任务,
String point_code1 = whereJson.getString("device_code");
jo.put("point_code1", point_code1);
if (CollectionUtils.isNotEmpty(mzPointList)) {
//任意一个满轴缓存位为终点
jo.put("point_code2", mzPointList.get(0).getPoint_code());
List<BstIvtPackageinfoivt> kzjPointList = bstIvtPackageinfoivtList.stream()
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status())
&& PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())).collect(Collectors.toList());
//空载具缓存位有空载具
if (CollectionUtils.isNotEmpty(kzjPointList)) {
jo.put("point_code3", kzjPointList.get(0).getPoint_code());
//终点为输送线点位
jo.put("point_code4", whereJson.getString("device_code"));
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
} else {
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")));
if (CollectionUtils.isEmpty(existTaskList)) {
JSONObject jo1 = new JSONObject();
jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
jo1.put("point_code2", "NBJ1002");
jo1.put("task_status", TaskStatusEnum.SURE_END.getCode());
jo1.put("is_send", false);
ssxDjwTask.createTask(jo1);
}
}
jo.put("is_send", true);
mzhcwTask.createTask(jo);
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
// 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")));
//如果有就不创建,没有就创建
if (CollectionUtils.isEmpty(existTaskList)) {
//只确定起点NBJ1002
JSONObject jo2 = new JSONObject();
jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo2.put("point_code1", "NBJ1002");
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo2.put("is_send", false);
mzhcwTask.createTask(jo2);
}
}
} else {
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "任务正在创建中!");
}
jo.put("is_send", true);
mzhcwTask.createTask(jo);
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
return result;
} else {
//3.满轴缓存位点位,查找正在搬运到待检区的任务
List<BstIvtPackageinfoivt> packageinfoivtList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位")));
//todo 查找正在起点为满轴缓存位点位,且执行中搬运到待检区或管制区的任务,如果有一个或多个,现场其实有多个车正在搬运过去
List<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//执行中
.nested(
r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))
.or().eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")))
.eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())
.and(
r -> r.in(SchBaseTask::getPoint_code1, packageinfoivtList)
));
//4.满轴缓存位无空闲库位,且无执行中搬运到待检区或管制区的任务,则报错!
if (CollectionUtils.isEmpty(taskList)) {
throw new BadRequestException("接口sendProductToFirstFloor满轴缓存位暂无空闲库位");
} finally {
if (tryLock) {
lock.unlock();
}
// 5.如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, point_code1)
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()));
//6.如果有就不创建,没有就创建
// 等这边空出来点位,也就是满轴位->待检区或管制区任务完成后,再补发;
if (CollectionUtils.isEmpty(existTaskList)) {
//暂时只确定起点,正在搬运的满轴位->待检区的点位,暂不作为终点
//jo.put("point_code2", taskList.get(0).getPoint_code1());
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo.put("is_send", false);
mzhcwTask.createTask(jo);
}
result.put("status", HttpStatus.OK.value());
result.put("message", "操作成功!");
return result;
}
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
@@ -1950,7 +1966,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
log.info("applyTwo返回参数---------------------------------------------" + result.toString());
return result;
}
} finally {
}catch (Exception ex){
log.info("applyTwo申请任务异常,任务类型为:---------------------------------------------"+type+"异常信息为"+ex.toString());
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message","申请任务异常,任务类型为:"+type+"异常信息为"+ex.toString());
return result;
}
finally {
if (tryLock) {
lock.unlock();
}
@@ -2224,20 +2246,24 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String device_code = param.getString("device_code");
String material_barcode = param.getString("material_barcode");
String vehicle_code = param.getString("vehicle_code");
if (device_code.equals("RK1018")) {
JSONObject vehicle_info = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + vehicle_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_info)) {
throw new BadRequestException("未查询到载具号【" + vehicle_code + "】对应的载具信息!");
//干燥剂模板
String desiccantTemplate = "4";
//是否开盖
String isUncap = "1";
if (StringUtils.isNotBlank(vehicle_code)) {
if (device_code.equals("RK1018")) {
JSONObject vehicle_info = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + vehicle_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_info)) {
throw new BadRequestException("未查询到载具号【" + vehicle_code + "】对应的载具信息!");
}
material_barcode = vehicle_info.getString("pcsn");
}
material_barcode = vehicle_info.getString("pcsn");
}
// 查询木箱信息
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, material_barcode)
);
//根据木箱高度,判断入库仓位的高度
String height = "";
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
@@ -2251,6 +2277,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
height = "3";
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("boxLength", boxDao.getBox_length());
jsonObject.put("boxWidth", boxDao.getBox_width());
jsonObject.put("boxHigh", boxDao.getBox_high());
jsonObject.put("desiccantTemplate", desiccantTemplate);
jsonObject.put("isUncap", isUncap);
jsonObject.put("heightLevel", height);
jsonObject.put("status", HttpStatus.OK.value());
return jsonObject;

View File

@@ -55,6 +55,11 @@ public class AcsTaskDto {
* 备注
*/
private String remark;
/**
* 大小托盘路由类型
*/
private String route_plan_code;
/**
* 扩展参数
*/

View File

@@ -49,8 +49,7 @@ public class AcsUtil {
log.info(product_area);
throw new BadRequestException("未查询到区域对应的acs地址");
}
//String url =acs_url + api;
String url =acs_url+ api;
String url =acs_url + api;
try {
JSONArray rows = new JSONArray();
rows.add(jo);
@@ -58,7 +57,7 @@ public class AcsUtil {
.body(String.valueOf(rows))
.execute().body();
result = JSONObject.parseObject(resultMsg);
log.info("ACS相应参数----------------------------------------+" + api + ",---" + result.toString());
log.info("下发acs任务成功返回参数----------------------------------------+" + api + ",---" + result.toString());
} catch (Exception e) {
String msg = e.getMessage();
//ConnectException: Connection refused: connect
@@ -67,9 +66,11 @@ public class AcsUtil {
result.put("status", HttpStatus.BAD_REQUEST);
result.put("message", "网络不通,操作失败!");
result.put("data", new JSONObject());
log.info("下发ACS任务失败原因是----------------------------------------+"+ msg);
}
//acs抛异常这里
if (!StrUtil.equals(result.getString("status"), "200")) {
log.info("下发acs任务失败原因是----------------------------------------+"+ result.getString("message"));
throw new BadRequestException(result.getString("message"));
} else {
//如果向ACS下发任务变更任务状态为下发
@@ -84,6 +85,7 @@ public class AcsUtil {
}
}
log.info("下发acs任务结果是----------------------------------------+"+ result);
return result;
}

View File

@@ -97,11 +97,11 @@ public class TaskServiceImpl implements TaskService {
map.put("is_delete", whereJson.getString("is_delete"));
}
//获取人员对应的区域
UserAreaServiceImpl userAreaService = new UserAreaServiceImpl();
String in_area_id = userAreaService.getInArea();
if (ObjectUtil.isNotEmpty(in_area_id)) {
map.put("in_area_id", in_area_id);
}
// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl();
// String in_area_id = userAreaService.getInArea();
// if (ObjectUtil.isNotEmpty(in_area_id)) {
// map.put("in_area_id", in_area_id);
// }
JSONObject json = WQL.getWO("QSCH_TASK_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc");
JSONArray content = json.getJSONArray("content");
JSONArray res = new JSONArray();

View File

@@ -215,7 +215,6 @@ public class StorPublicServiceImpl implements StorPublicService {
map.put("storagevehicle_code", storagevehicle_code);
}
}
// 获取仓位物料信息
JSONObject jo_in = WQL.getWO("QST_IVT_STORPUBLIC").addParamMap(map).process().uniqueResult(0);
switch (change_type_scode) {

View File

@@ -211,7 +211,6 @@ public class CheckOutBillController {
} else {
checkOutBillService.allSetPoint(whereJson);
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

View File

@@ -0,0 +1,15 @@
package org.nl.wms.util;
public class TaskUtil {
/**
* 一楼立库获取托盘路由方案two大托盘normal小托盘
*/
public static String getRoutePlanCode(String location) {
if (location.contains("L1-") || location.contains("L2-") || location.contains("L3-") || location.contains("L4-")) {
return "two";
} else {
return "normal";
}
}
}