opt:优化

This commit is contained in:
2026-08-07 17:28:21 +07:00
parent 87a7cdd496
commit f41571698d
17 changed files with 195 additions and 146 deletions

View File

@@ -552,7 +552,7 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
whereJson.put("box_no", whereJson.getString("box_no"));
List<PdmBiSubpackagerelation> sub_list = ipdmBiSubpackagerelationService.list(new LambdaQueryWrapper<PdmBiSubpackagerelation>()
.eq(PdmBiSubpackagerelation::getPackage_box_sn, whereJson.getString("material_barcode"))
.in(PdmBiSubpackagerelation::getStatus, Arrays.asList('0', '1')));
.in(PdmBiSubpackagerelation::getStatus, Arrays.asList('0', '1','3')));
if (ObjectUtil.isEmpty(sub_list)) {
throw new BadRequestException("未查询到子卷包装信息!");
}

View File

@@ -57,6 +57,6 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
List<SchBasePointDto> selectDjwPoints( JSONObject map);
@Select("SELECT * FROM sch_base_point WHERE region_code = 'BLKCK' and is_used = '1'")
@Select("SELECT * FROM sch_base_point WHERE region_code = 'BLKCK' and is_used = '1' and product_area ='normal'")
List<SchBasePoint> selectByReginCode();
}

View File

@@ -198,6 +198,16 @@ public class TwoLashTask extends AbstractAcsTask {
action_rows.add(action_jo);
wmsToAcsService.action(action_rows);
JSONArray action_rows2 = new JSONArray();
JSONObject action_jo2 = new JSONObject();
action_jo2.put("device_code", "MXDDHJ");
action_jo2.put("product_area", "BLK");
action_jo2.put("code", "to_command");
action_jo2.put("value", task_jo.getString("point_code2").replace("CK",""));
action_rows2.add(action_jo2);
wmsToAcsService.action(action_rows2);
// 更新点位载具、数量
JSONObject pointDao = pointTab.query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0);
pointDao.put("vehicle_code", "");

View File

@@ -73,91 +73,90 @@ public class TwoOutHeapTask extends AbstractAcsTask {
List<JSONObject> pointJson = wo_Task.query("handle_class = '" + THIS_CLASS + "' AND task_status IN ('05','06') AND is_delete = '0' ORDER BY point_code2")
.getResultJSONArray(0).toJavaList(JSONObject.class);
// 统计行架1、行架2 当前负载数量
long countHanger1 = pointJson.stream()
.filter(j -> IOSEnum.OUT_HANGER.code("行架位1").equals(j.getString("point_code2"))).count();
long countHanger2 = pointJson.stream()
.filter(j -> IOSEnum.OUT_HANGER.code("行架位2").equals(j.getString("point_code2"))).count();
// ==========2. 预分组待下发任务只遍历一次taskArrAll ==========
Map<String, List<JSONObject>> taskGroupMap = taskArrAll.stream()
.collect(Collectors.groupingBy(item -> item.getString("point_code2")));
List<JSONObject> exceptTaskList = taskGroupMap.getOrDefault(IOSEnum.EXCEP_OUT.code("1"), Collections.emptyList());
exceptTaskList.addAll(taskGroupMap.getOrDefault(IOSEnum.EXCEP_OUT.code("2"), Collections.emptyList()));
List<JSONObject> changeTaskList = taskGroupMap.getOrDefault(IOSEnum.CHANGE_OUT.code("换标出库口"), Collections.emptyList());
List<JSONObject> waitHanger1List = taskGroupMap.getOrDefault(IOSEnum.OUT_HANGER.code("行架位1"), Collections.emptyList());
List<JSONObject> waitHanger2List = taskGroupMap.getOrDefault(IOSEnum.OUT_HANGER.code("行架位2"), Collections.emptyList());
// ==========3. 优先下发异常出库任务限制最多1条点位独占 ==========
if (CollUtil.isNotEmpty(exceptTaskList)) {
// 只取第一条下发
taskArr.add(exceptTaskList.get(0));
}
if (CollUtil.isNotEmpty(changeTaskList)) {
// 只取第一条下发
taskArr.add(changeTaskList.get(0));
// 下发两个的任务
List<JSONObject> err_list = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.EXCEP_OUT.code("1"))
|| row.getString("point_code2").equals(IOSEnum.EXCEP_OUT.code("2")))
.collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(err_list)) {
taskArr.addAll(err_list);
}
// ==========4. 行架负载均衡分配核心逻辑 ==========
// 判断哪边负载更小
boolean hanger1Less = countHanger1 < countHanger2;
boolean hanger2Less = countHanger2 < countHanger1;
JSONObject selectTask = null;
String targetPoint = null;
if (hanger1Less) {
// 行架1负载低优先原生行架1任务
selectTask = waitHanger1List.stream().findFirst().orElse(null);
targetPoint = IOSEnum.OUT_HANGER.code("行架位1");
// 若无原生任务则把行架2任务 转移 → 行架1
if (ObjectUtil.isNull(selectTask)) {
selectTask = waitHanger2List.stream().findFirst().orElse(null);
targetPoint = IOSEnum.OUT_HANGER.code("行架位1");
if (ObjectUtil.isEmpty(pointJson)) {
// 下发两个的任务
JSONObject oneJson = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(oneJson)) {
taskArr.add(oneJson);
}
} else if (hanger2Less) {
// 行架2负载低优先原生行架2任务
selectTask = waitHanger2List.stream().findFirst().orElse(null);
targetPoint = IOSEnum.OUT_HANGER.code("行架位2");
// 若无原生任务则把行架1任务 转移 → 行架2
if (ObjectUtil.isNull(selectTask)) {
selectTask = waitHanger1List.stream().findFirst().orElse(null);
targetPoint = IOSEnum.OUT_HANGER.code("行架位2");
JSONObject twoJson = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(twoJson)) {
taskArr.add(twoJson);
}
} else {
// count相等默认优先行架1
selectTask = waitHanger1List.stream().findFirst().orElse(null);
targetPoint = IOSEnum.OUT_HANGER.code("行架位1");
if (ObjectUtil.isNull(selectTask)) {
selectTask = waitHanger2List.stream().findFirst().orElse(null);
targetPoint = IOSEnum.OUT_HANGER.code("行架位2");
}
}
// 哪里空了就下发哪里的
if (pointJson.size() == 1) {
JSONObject json = pointJson.get(0);
if (json.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1"))) {
// 行架位1有任务则下发行架位2的任务
JSONObject twoJson = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(twoJson)) {
// 如果能找到去行架位2的任务则下发当前任务
taskArr.add(twoJson);
} else {
// 如果不能找到去行架位2则找去行架位1的任务进行二次分配到行架位2
JSONObject twoJsonOne = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1")))
.findFirst().orElse(null);
// ==========5. 处理选中任务,区分是否需要变更点位 ==========
if (ObjectUtil.isNotEmpty(selectTask)) {
String originalPoint = selectTask.getString("point_code2");
// 深拷贝禁止操作原始taskArrAll对象
JSONObject taskCopy = JSONObject.parseObject(selectTask.toJSONString());
if (ObjectUtil.isNotEmpty(twoJsonOne)) {
// 进行二次分配
// 判断点位是否启用
JSONObject jsonOne = pointTab.query("point_code = '" + IOSEnum.OUT_HANGER.code("行架位2") + "'")
.uniqueResult(0);
if (jsonOne.getString("is_used").equals("1")) {
twoJsonOne.put("point_code2", IOSEnum.OUT_HANGER.code("行架位2"));
wo_Task.update(twoJsonOne);
taskArr.add(twoJsonOne);
}
}
if (!originalPoint.equals(targetPoint)) {
// 需要二次分配、变更点位
// 校验目标点位是否启用
JSONObject pointInfo = pointTab.query("point_code = '" + targetPoint + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(pointInfo) && "1".equals(pointInfo.getString("is_used"))) {
// 修改副本点位
taskCopy.put("point_code2", targetPoint);
// 更新数据库
wo_Task.update(taskCopy);
taskArr.add(taskCopy);
}
} else {
// 行架位2有任务则下发行架位1的任务
JSONObject oneJson = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(oneJson)) {
// 如果能找到去行架位1的任务则下发当前任务
taskArr.add(oneJson);
} else {
// 如果不能找到去行架位1则找去行架位2的任务进行二次分配到行架位1
JSONObject twoJsonTwo = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(twoJsonTwo)) {
// 进行二次分配
JSONObject jsonTwo = pointTab.query("point_code = '" + IOSEnum.OUT_HANGER.code("行架位1") + "'")
.uniqueResult(0);
if (jsonTwo.getString("is_used").equals("1")) {
twoJsonTwo.put("point_code2", IOSEnum.OUT_HANGER.code("行架位1"));
wo_Task.update(twoJsonTwo);
taskArr.add(twoJsonTwo);
}
}
}
}
} else {
// 原生点位,无需修改,直接加入下发列表
taskArr.add(taskCopy);
}
}
return taskArr;
}

View File

@@ -103,10 +103,10 @@ public class TwoOutTask extends AbstractAcsTask {
.collect(Collectors.groupingBy(row -> row.getString("task_group_id")));
// 判断长度
if (likeArr.size() >= 3) {
log.warn("twoOutTasklikeArr>=3");
return null;
}
if (likeArr.size() >= flag) {
log.warn("twoOutTasklikeArr>out_queue_num");
return null;
}
if (likeArr.size() == 1) {
flag = 1;
@@ -242,12 +242,6 @@ public class TwoOutTask extends AbstractAcsTask {
stIvtStructattrMapper.updateById(stIvtStructattr);
}
// 更新载具信息表
MdPdStoragevehicleext mdPdStoragevehicleext = mdPdStoragevehicleextMapper.selectOne(new LambdaQueryWrapper<MdPdStoragevehicleext>()
.eq(MdPdStoragevehicleext::getPcsn, jsonTask.getVehicle_code()));
mdPdStoragevehicleext.setPcsn("");
mdPdStoragevehicleextMapper.updateById(mdPdStoragevehicleext);
JSONObject parse = (JSONObject) JSONObject.parse(jsonTask.getRequest_param());
JSONObject jsonParam = new JSONObject();
jsonParam.put("device_code",jsonTask.getPoint_code2());
@@ -285,9 +279,6 @@ public class TwoOutTask extends AbstractAcsTask {
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);
List<SchBaseTask> schBaseTasks = schBaseTaskMapper.selectList(new QueryWrapper<SchBaseTask>().eq("task_group_id", jsonTask.getTask_group_id()).ne("task_status", TaskStatusEnum.FINISHED.getCode()).eq("handle_class", THIS_CLASS));
@@ -301,6 +292,12 @@ public class TwoOutTask extends AbstractAcsTask {
}
}
}
} else {
// 更新载具信息表
MdPdStoragevehicleext mdPdStoragevehicleext = mdPdStoragevehicleextMapper.selectOne(new LambdaQueryWrapper<MdPdStoragevehicleext>()
.eq(MdPdStoragevehicleext::getPcsn, jsonTask.getVehicle_code()));
mdPdStoragevehicleext.setPcsn("");
mdPdStoragevehicleextMapper.updateById(mdPdStoragevehicleext);
}
}, "cratergv", 30, this);
}

View File

@@ -106,6 +106,9 @@ public enum IOSEnum {
OUT_POINT2(MapOf.of("1","xxx", "2","xxx", "3","xxx", "4","xxx" ,"5","xxx",
"6","xxx", "7","xxx", "8","xxx", "9","9", "10","10")),
INVENTORYCHECK_OUT_POINT(MapOf.of("1","RK1022", "2","RK1022", "3","RK1020", "4","RK1020" ,"5","RK1010",
"6","RK1010", "7","RK1003", "8","1018", "9","9", "10","10")),
// 载具类型对应1楼拆叠盘点位
VEHICLE_TYPE_POINT(MapOf.of("1","RK1006", "2","RK1013")),

View File

@@ -707,7 +707,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 创建出库任务
try {
for (List<JSONObject> outTaskMangeList : outTaskMangeMap.values()) {
createTask(outTaskMangeList, disTaskMangeList, whereJson.getString("point_code"),whereJson.getString("checked"));
createTask(outTaskMangeList, disTaskMangeList, whereJson.getString("point_code"),whereJson.getString("checked"),whereJson.getString("bill_type"));
}
} finally {
// 下发出库任务:判断当前单据是否有正在执行的的任务
@@ -1261,35 +1261,43 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 确定终点: 根据仓位所在排确定终点,
String end_device_code = "";
if ("true".equals(where.getString("checked"))) {
if("RK2009".equals(where.getString("point_code"))
||"RK1010".equals(where.getString("point_code"))
||"RK1018".equals(where.getString("point_code"))
||"RK1020".equals(where.getString("point_code"))
||"RK1022".equals(where.getString("point_code"))
||"RK1003".equals(where.getString("point_code"))){
if(StringUtils.isBlank(json.getString("storagevehicle_type"))){
throw new BadRequestException("点位没有大小托盘类型,请确认" );
if (IOSEnum.OUT_TYPE.code("盘点出库").equals(json.getString("bill_type"))) {
end_device_code = IOSEnum.INVENTORYCHECK_OUT_POINT.code(json.getString("row_num"));
if (!end_device_code.equals(where.getString("point_code"))) {
throw new BadRequestException("请选择正常的盘点出库口【" + end_device_code + "");
}
} else if ("true".equals(where.getString("checked"))) {
if ("RK2009".equals(where.getString("point_code"))
|| "RK1010".equals(where.getString("point_code"))
|| "RK1018".equals(where.getString("point_code"))
|| "RK1020".equals(where.getString("point_code"))
|| "RK1022".equals(where.getString("point_code"))
|| "RK1003".equals(where.getString("point_code"))) {
if (StringUtils.isBlank(json.getString("storagevehicle_type"))) {
throw new BadRequestException("点位没有大小托盘类型,请确认");
}
if (!IOSEnum.EXCEP_OUT.code(json.getString("storagevehicle_type")).equals(where.getString("point_code"))) {
throw new BadRequestException("出库口选择有误,请确认起点的大小托盘类型与终点是否匹配");
}
// if(!IOSEnum.EXCEP_OUT.code(json.getString("storagevehicle_type")).equals(where.getString("point_code"))){
// throw new BadRequestException("出库口选择有误,请确认起点的大小托盘类型与终点是否匹配" );
// }
end_device_code = where.getString("point_code");
} else {
throw new BadRequestException("异常出库点位只能选择【RK2009】" );
throw new BadRequestException("异常出库点位只能选择【RK2009】");
}
} else {
if("RK2009".equals(where.getString("point_code"))
||"RK1010".equals(where.getString("point_code"))
||"RK1003".equals(where.getString("point_code"))
||"RK1018".equals(where.getString("point_code"))
||"RK1020".equals(where.getString("point_code"))
||"RK1022".equals(where.getString("point_code"))){
throw new BadRequestException("此点位为异常出库点,请勾选【是否异常出库】" );
if ("RK2009".equals(where.getString("point_code"))
|| "RK1010".equals(where.getString("point_code"))
|| "RK1003".equals(where.getString("point_code"))
|| "RK1018".equals(where.getString("point_code"))
|| "RK1020".equals(where.getString("point_code"))
|| "RK1022".equals(where.getString("point_code"))) {
throw new BadRequestException("此点位为异常出库点,请勾选【是否异常出库】");
}
end_device_code = IsEndCode(json);
}
// 过滤此仓位的分配明细
List<StIvtIostorinvdis> disDaoList = disLikeList.stream()
.filter(row -> row.getString("struct_code").equals(json.getString("struct_code")))
@@ -1905,7 +1913,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
* @param disLikeList分配明细集合
* @param point_code 终点
*/
private void createTask(List<JSONObject> taskMangeList, List<JSONObject> disLikeList, String point_code, String checked) {
private void createTask(List<JSONObject> taskMangeList, List<JSONObject> disLikeList, String point_code, String checked, String bill_type) {
// 查询异常货位任务集合
@@ -1933,6 +1941,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
flag = jsonParam.getString("value");
}
IStIvtIostorinvOutService aopService = SpringContextHolder.getBean(IStIvtIostorinvOutService.class);
for (int i = 0; i < taskMangeList.size(); i++) {
JSONObject json = taskMangeList.get(i);
if(StringUtils.isBlank(json.getString("storagevehicle_code"))){
throw new BadRequestException("批次不能为空!");
}
}
for (int i = 0; i < taskMangeList.size(); i++) {
JSONObject json = taskMangeList.get(i);
// TODO ---
@@ -1944,6 +1958,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonObject.put("task_group_id", task_group_id);
jsonObject.put("point_code", point_code);
jsonObject.put("checked", checked);
jsonObject.put("bill_type", bill_type);
aopService.createForTask(json, jsonObject);
}
}

View File

@@ -466,7 +466,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
String boxListString = split.stream().collect(Collectors.joining(","));
JSONObject taskParam = new JSONObject();
taskParam.put("task_type", "010713");
taskParam.put("task_type", "010739");
taskParam.put("start_device_code", whereJson.getString("point_code"));
//都强制到1005
@@ -520,7 +520,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
);
// 下发桁架任务
JSONObject taskParam = new JSONObject();
taskParam.put("task_type", "010713");
taskParam.put("task_type", "010739");
taskParam.put("start_device_code", whereJson.getString("point_code"));
taskParam.put("next_device_code", IOSEnum.VEHICLE_TYPE_SCAN_POINT.code(boxDao.getVehicle_type()));
taskParam.put("vehicle_code", whereJson.getString("box_no"));
@@ -607,7 +607,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
/*
* 查询mes木箱信息插入木箱信息表
*/
JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("box_no") + "' AND status = '0'").getResultJSONArray(0);
JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("box_no") + "' AND status IN ('0','3')").getResultJSONArray(0);
if (ObjectUtil.isEmpty(resultJSONArray)) {
throw new BadRequestException("未查询到子卷包装信息!");
}
@@ -647,7 +647,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
// 下发桁架任务
JSONObject taskParam = new JSONObject();
taskParam.put("task_type", "010713");
taskParam.put("task_type", "010739");
taskParam.put("start_device_code", whereJson.getString("point_code"));
taskParam.put("next_device_code", IOSEnum.VEHICLE_TYPE_SCAN_POINT.code("1"));
taskParam.put("vehicle_code", whereJson.getString("box_no"));

View File

@@ -85,7 +85,7 @@ public class InVehicleManageServiceImpl implements InVehicleManageService {
jsonParam.put("vehicle_type", whereJson.getString("vehicle_type"));
if("2".equals(whereJson.getString("vehicle_type"))) {
//todo 默认需要调整,根据当前的出库任务确认如果是2楼入库则需要判断出库任务如果出库任务
//jsonParam.put("move_block_num","3");
jsonParam.put("move_block_num","3");
} else {
jsonParam.put("move_block_num","4");
}
@@ -214,6 +214,15 @@ public class InVehicleManageServiceImpl implements InVehicleManageService {
stIvtStructattrLambdaQueryWrapper.eq(StIvtStructattr::getBlock_num, block_num);
}
List<StIvtStructattr> stIvtStructattrs = stIvtStructattrMapper.selectList(stIvtStructattrLambdaQueryWrapper);
if (CollUtil.isEmpty(stIvtStructattrs)) {
stIvtStructattrLambdaQueryWrapper = new LambdaQueryWrapper<>();
stIvtStructattrLambdaQueryWrapper.eq(StIvtStructattr::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
.eq(StIvtStructattr::getIs_used, IOSEnum.IS_NOTANDYES.code("")).eq(StIvtStructattr::getSect_id, jsonParam.getString("sect_id"))
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")).eq(StIvtStructattr::getStor_id, jsonParam.getString("stor_id"))
.eq(StIvtStructattr::getStoragevehicle_type, jsonParam.getString("vehicle_type"))
.eq(StIvtStructattr::getHeight, "2");
stIvtStructattrs = stIvtStructattrMapper.selectList(stIvtStructattrLambdaQueryWrapper);
}
if (CollUtil.isEmpty(stIvtStructattrs)) {
notInRowList.clear();
notInBlockList.clear();

View File

@@ -137,7 +137,7 @@ public class LashManageServiceImpl implements LashManageService {
.query("package_box_sn = '" + boxDao.getBox_no() + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonSub)) {
throw new BadRequestException("子卷包装关系不存在:【"+boxDao.getBox_no()+"");
throw new BadRequestException("子卷包装关系不存在:【" + boxDao.getBox_no() + "");
}
//查询木箱对应的托盘绑定关系,并清除
@@ -165,7 +165,6 @@ public class LashManageServiceImpl implements LashManageService {
// 桁架任务终点
String end_point;
// todo 检查一下这个堆叠的代码逻辑是否正常
// 判断是否有相同订单号、木箱规格的木箱
List<JSONObject> likeBoxList = pointDaoList.stream()
.filter(row -> ObjectUtil.isNotEmpty(row.getString("box_length")) &&
@@ -227,25 +226,6 @@ public class LashManageServiceImpl implements LashManageService {
// 有空位
JSONObject jsonPoint = empPointList.get(0);
// 判断这两个点位是否有任务:如果没有则下发任务
WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task");
List<JSONObject> pointJson = wo_Task.query("task_type = '010707' AND task_status IN ('05','06') AND is_delete = '0' ORDER BY point_code2")
.getResultJSONArray(0).toJavaList(JSONObject.class);
if (!CollectionUtils.isEmpty(pointJson) && empPointList.size() > 1) {
// 统计第一个点位的任务数量
JSONObject finalJsonPoint = jsonPoint;
long countPoint1 = pointJson.stream()
.filter(j -> finalJsonPoint.getString("point_code").equals(j.getString("point_code2"))).count();
//第一个点有任务
if (countPoint1 > 0) {
jsonPoint = empPointList.get(1);
}
}
// 判断是否堆叠
String two_is_lash = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("two_is_lash").getValue();
if (two_is_lash.equals(IOSEnum.IS_NOTANDYES.code(""))) {
@@ -538,6 +518,15 @@ public class LashManageServiceImpl implements LashManageService {
action_rows.add(action_jo);
wmsToAcsService.action(action_rows);
JSONArray action_rows2 = new JSONArray();
JSONObject action_jo2 = new JSONObject();
action_jo2.put("device_code", "MXDDHJ");
action_jo2.put("product_area", "BLK");
action_jo2.put("code", "to_command");
action_jo2.put("value", "1125");
action_rows2.add(action_jo2);
wmsToAcsService.action(action_rows2);
// 更新点位数量
pointDao.setVehicle_qty(BigDecimal.valueOf(0));
pointDao.setVehicle_code("");

View File

@@ -243,7 +243,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
if (ObjectUtil.isEmpty(likePcsnBoxList)) {
throw new BadRequestException("库存不足!");
throw new BadRequestException("库存不足!,也可能是库存已经被锁定");
}
// 计算重量

View File

@@ -95,9 +95,9 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
//判断当前点位是否存在任务,如果存在则不生成任务
List<SchBaseTask> taskList = schBaseTaskMapper.selectList(new QueryWrapper<SchBaseTask>().lambda().eq(SchBaseTask::getPoint_code2, whereJson.getString("device_code")).lt(SchBaseTask::getTask_status, "07").eq(SchBaseTask::getIs_delete, "0"));
// if (ObjectUtil.isNotEmpty(taskList)) {
// throw new BadRequestException("点位【" + taskList.get(0).getPoint_code2() + "】正在出空托盘任务!");
// }
if (ObjectUtil.isNotEmpty(taskList)) {
throw new BadRequestException("点位【" + taskList.get(0).getPoint_code2() + "】正在出空托盘任务!");
}
JSONObject jsonAttr = getStruct(whereJson);
if (ObjectUtil.isEmpty(jsonAttr)) {
@@ -260,7 +260,16 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
stIvtStructattrLambdaQueryWrapper.eq(StIvtStructattr::getBlock_num, block_num);
}
List<StIvtStructattr> stIvtStructattrs = stIvtStructattrMapper.selectList(stIvtStructattrLambdaQueryWrapper);
if (CollUtil.isEmpty(stIvtStructattrs)) {
stIvtStructattrLambdaQueryWrapper = new LambdaQueryWrapper<>();
stIvtStructattrLambdaQueryWrapper.apply("IFNULL(storagevehicle_code,'') != '' ")
.eq(StIvtStructattr::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
.eq(StIvtStructattr::getIs_used, IOSEnum.IS_NOTANDYES.code("")).eq(StIvtStructattr::getSect_id, whereJson.getString("sect_id"))
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")).eq(StIvtStructattr::getStor_id, whereJson.getString("stor_id"))
.eq(StIvtStructattr::getStoragevehicle_type, whereJson.getString("storagevehicle_type"))
.eq(StIvtStructattr::getIs_emptyvehicle, "1");
stIvtStructattrs = stIvtStructattrMapper.selectList(stIvtStructattrLambdaQueryWrapper);
}
if (CollUtil.isEmpty(stIvtStructattrs)) {
notOutRowList.clear();
notOutBlockList.clear();

View File

@@ -33,6 +33,11 @@ public class AcsToWmsController {
@PostMapping("/status")
@Log(value = "ACS给WMS反馈任务状态", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
@ApiLog(
bizCode = "/api/wms/task/status",
bizDesc = "ACS给WMS反馈任务状态",
systemFlag = "acs"
)
public ResponseEntity<Object> receiveTaskStatusAcs(@RequestBody String string) {
log.info("ACS给WMS反馈任务状态:{}", string);
return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK);
@@ -58,6 +63,11 @@ public class AcsToWmsController {
@PostMapping("/deviceApply")
@Log(value = "申请贴标、捆扎", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
@ApiLog(
bizCode = "/api/wms/task/deviceApply",
bizDesc = "申请贴标、捆扎",
systemFlag = "acs"
)
public ResponseEntity<Object> deviceApply(@RequestBody JSONObject jo) {
return new ResponseEntity<>(acsToWmsService.deviceApply(jo), HttpStatus.OK);
}
@@ -151,6 +161,11 @@ public class AcsToWmsController {
@PostMapping("/deviceApplyExceptional")
@Log(value = "二期任务异常反馈", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
@ApiLog(
bizCode = "/api/wms/task/deviceApplyExceptional",
bizDesc = "二期任务异常反馈",
systemFlag = "acs"
)
public ResponseEntity<Object> deviceApplyExceptional(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.deviceApplyExceptional(whereJson), HttpStatus.OK);
}

View File

@@ -1420,7 +1420,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
map.put("status", "0");
WQLObject.getWQLObject("pdm_bi_subpackagerelation").update(map, "package_box_sn = '" + whereJson.getString("box_no") + "'");
}
resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("box_no") + "' AND status in ('0','1','99')").getResultJSONArray(0);
resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("box_no") + "' AND status in ('0','1','3','99')").getResultJSONArray(0);
if (ObjectUtil.isEmpty(resultJSONArray)) {
throw new BadRequestException("未查询到子卷包装信息!");
}

View File

@@ -176,7 +176,9 @@ public abstract class AbstractAcsTask {
List<SchBaseTask> outSmallTaskList = workingTaskList.stream().filter(task->oneFloorReturnSmallVehicleOutTaskStartPoint.contains(task.getPoint_code2())).collect(Collectors.toList());
if(CollectionUtil.isEmpty(taskList)){
return null;
}
Iterator<AcsTaskDto> it = taskList.iterator();
while (it.hasNext()) {
AcsTaskDto acsTaskDto = it.next();