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:
@@ -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;
|
||||
|
||||
@@ -55,6 +55,11 @@ public class AcsTaskDto {
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 大小托盘路由类型
|
||||
*/
|
||||
private String route_plan_code;
|
||||
/**
|
||||
* 扩展参数
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -211,7 +211,6 @@ public class CheckOutBillController {
|
||||
} else {
|
||||
checkOutBillService.allSetPoint(whereJson);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user