|
|
@ -1,22 +1,27 @@ |
|
|
|
package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import org.nl.b_lms.sch.point.dao.SchBasePoint; |
|
|
|
import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper; |
|
|
|
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.TwoInEmpTask; |
|
|
|
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; |
|
|
|
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; |
|
|
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.StructattrQuerry; |
|
|
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InVehicleManageService; |
|
|
|
import org.nl.b_lms.storage_manage.st.dao.StIvtStructattr; |
|
|
|
import org.nl.b_lms.storage_manage.st.dao.mapper.StIvtStructattrMapper; |
|
|
|
import org.nl.modules.common.exception.BadRequestException; |
|
|
|
import org.nl.modules.wql.WQL; |
|
|
|
import org.nl.modules.wql.core.bean.WQLObject; |
|
|
|
import org.nl.modules.wql.util.SpringContextHolder; |
|
|
|
import org.nl.system.service.param.impl.SysParamServiceImpl; |
|
|
|
import org.nl.wms.basedata.st.service.impl.StructattrServiceImpl; |
|
|
|
import org.nl.wms.pda.mps.eum.RegionTypeEnum; |
|
|
|
import org.nl.wms.sch.manage.TaskStatusEnum; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
@ -52,33 +57,25 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
*/ |
|
|
|
@Autowired |
|
|
|
private IschBaseTaskService ischBaseTaskService; |
|
|
|
@Autowired |
|
|
|
private SchBasePointMapper schBasePointMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private StIvtStructattrMapper stIvtStructattrMapper; |
|
|
|
@Autowired |
|
|
|
private StructattrServiceImpl structattrServiceImpl; |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void inVehicle(JSONObject whereJson) { |
|
|
|
// 点位表
|
|
|
|
WQLObject schBasePointService = WQLObject.getWQLObject("sch_base_point"); |
|
|
|
// 仓位表
|
|
|
|
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); |
|
|
|
SchBasePoint schBasePoint = schBasePointMapper.selectOne(new QueryWrapper<SchBasePoint>().eq("point_code", whereJson.getString("device_code")) |
|
|
|
.eq("is_delete", IOSEnum.IS_NOTANDYES.code("否")) |
|
|
|
.eq("is_used", IOSEnum.IS_NOTANDYES.code("是"))); |
|
|
|
|
|
|
|
// 判断起点点位是否存在
|
|
|
|
JSONObject jsonPoint = schBasePointService.query("point_code = '" + whereJson.getString("device_code") + "' AND is_delete = '" + |
|
|
|
IOSEnum.IS_NOTANDYES.code("否") + "' AND is_used = '" + |
|
|
|
IOSEnum.IS_NOTANDYES.code("是") + "'") |
|
|
|
.uniqueResult(0); |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(jsonPoint)) { |
|
|
|
if (ObjectUtil.isEmpty(schBasePoint)) { |
|
|
|
throw new BadRequestException("起始点位不存在或未启用!"); |
|
|
|
} |
|
|
|
/* int count = ischBaseTaskService.count(new QueryWrapper<SchBaseTask>() |
|
|
|
.eq("point_code1", whereJson.getString("device_code")) |
|
|
|
.eq("vehicle_code", whereJson.getString("vehicle_code")) |
|
|
|
.eq("task_type", "010705") |
|
|
|
.eq("is_delete", "0") |
|
|
|
.lt("task_status", TaskStatusEnum.EXECUTING.getCode())); |
|
|
|
if (count>0){ |
|
|
|
return; |
|
|
|
}*/ |
|
|
|
|
|
|
|
// 找一个托盘区的空仓位
|
|
|
|
JSONObject jsonParam = new JSONObject(); |
|
|
|
jsonParam.put("stor_id", IOSEnum.STOR_ID.code("二期")); |
|
|
@ -110,9 +107,11 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
taskBean.immediateNotifyAcs(null); |
|
|
|
|
|
|
|
// 锁定终点
|
|
|
|
jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("空托盘入库锁")); |
|
|
|
attrTab.update(jsonAttr); |
|
|
|
|
|
|
|
StIvtStructattr stIvtStructattr = stIvtStructattrMapper.selectOne(new QueryWrapper<StIvtStructattr>().lambda().eq(StIvtStructattr::getStruct_code, jsonAttr.getString("struct_code"))); |
|
|
|
stIvtStructattr.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘入库锁")); |
|
|
|
stIvtStructattrMapper.update(stIvtStructattr, new QueryWrapper<StIvtStructattr>().lambda() |
|
|
|
.eq(StIvtStructattr::getStruct_code, jsonAttr.getString("struct_code")) |
|
|
|
); |
|
|
|
// 清空缓存
|
|
|
|
notInRowList.clear(); |
|
|
|
notInBlockList.clear(); |
|
|
@ -170,8 +169,7 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
* @return JSONObject : 仓位对象 |
|
|
|
*/ |
|
|
|
private JSONObject getStruct(JSONObject jsonParam) { |
|
|
|
// 仓位表
|
|
|
|
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
* 判断是否有仓位 |
|
|
@ -179,24 +177,17 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
*/ |
|
|
|
String block_num = jsonParam.getString("move_block_num"); |
|
|
|
|
|
|
|
JSONArray structArray = new JSONArray(); |
|
|
|
if (ObjectUtil.isEmpty(block_num)) { |
|
|
|
structArray = attrTab.query("IFNULL(storagevehicle_code,'') = '' " + |
|
|
|
"AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " + |
|
|
|
"AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonParam.getString("stor_id") + "' " + |
|
|
|
"AND storagevehicle_type = '" + jsonParam.getString("vehicle_type") + "'" + |
|
|
|
"AND height = '2'" + |
|
|
|
"AND sect_id = '" + jsonParam.getString("sect_id") + "'").getResultJSONArray(0); |
|
|
|
} else { |
|
|
|
structArray = attrTab.query("IFNULL(storagevehicle_code,'') = '' " + |
|
|
|
"AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " + |
|
|
|
"AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonParam.getString("stor_id") + "' " + |
|
|
|
"AND storagevehicle_type = '" + jsonParam.getString("vehicle_type") + "'" + |
|
|
|
"AND height = '2'" + |
|
|
|
"AND sect_id = '" + jsonParam.getString("sect_id") + "' AND block_num = '"+block_num+"'").getResultJSONArray(0); |
|
|
|
} |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(structArray)) { |
|
|
|
LambdaQueryWrapper<StIvtStructattr> 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"); |
|
|
|
if (!ObjectUtil.isEmpty(block_num)) { |
|
|
|
stIvtStructattrLambdaQueryWrapper.eq(StIvtStructattr::getBlock_num, block_num); |
|
|
|
} |
|
|
|
List<StIvtStructattr> stIvtStructattrs = stIvtStructattrMapper.selectList(stIvtStructattrLambdaQueryWrapper); |
|
|
|
if (CollUtil.isEmpty(stIvtStructattrs)) { |
|
|
|
notInRowList.clear(); |
|
|
|
notInBlockList.clear(); |
|
|
|
throw new BadRequestException("仓位不足!"); |
|
|
@ -219,21 +210,20 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
// 为空则新找巷道
|
|
|
|
if (ObjectUtil.isEmpty(jsonAttr)) { |
|
|
|
|
|
|
|
jsonParam.put("flag", "1"); |
|
|
|
notInBlockList.add(jsonParam.getString("block_num")); |
|
|
|
|
|
|
|
String join = "('" + String.join("','", notInBlockList) + "')"; |
|
|
|
jsonParam.put("not_block", join); |
|
|
|
jsonParam.put("not_block", notInBlockList); |
|
|
|
jsonParam.put("storagevehicle_type", jsonParam.getString("vehicle_type")); |
|
|
|
|
|
|
|
List<JSONObject> blockList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) |
|
|
|
.process().getResultJSONArray(0).toJavaList(JSONObject.class); |
|
|
|
|
|
|
|
for (int i = 0; i < blockList.size(); i++) { |
|
|
|
JSONObject json = blockList.get(i); |
|
|
|
List<String> vehicleBlock = stIvtStructattrMapper.getInVehicleBlock(jsonParam); |
|
|
|
|
|
|
|
for (int i = 0; i < vehicleBlock.size(); i++) { |
|
|
|
String vehicleBlockStr = vehicleBlock.get(i); |
|
|
|
JSONObject json = new JSONObject(); |
|
|
|
json.put("stor_id", jsonParam.getString("stor_id")); |
|
|
|
json.put("sect_id", jsonParam.getString("sect_id")); |
|
|
|
json.put("vehicle_type", jsonParam.getString("vehicle_type")); |
|
|
|
json.put("block_num", vehicleBlockStr); |
|
|
|
|
|
|
|
String row_num_2 = getMinRow(json); |
|
|
|
json.put("row_num", row_num_2); |
|
|
@ -266,51 +256,39 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
if (!not_in_block_num.equals(IOSEnum.IS_NOTANDYES.code("否"))) { |
|
|
|
jsonParam.put("not_in_block_num", not_in_block_num); |
|
|
|
} |
|
|
|
|
|
|
|
jsonParam.put("flag", "1"); |
|
|
|
|
|
|
|
// 获取仓库、库区有空位的巷道
|
|
|
|
List<JSONObject> blockList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) |
|
|
|
.process().getResultJSONArray(0).toJavaList(JSONObject.class); |
|
|
|
|
|
|
|
List<String> vehicleBlock = stIvtStructattrMapper.getInVehicleBlock(jsonParam); |
|
|
|
/* |
|
|
|
* 查询所属巷道所有托盘 |
|
|
|
*/ |
|
|
|
String block_in = blockList.stream() |
|
|
|
.map(row -> row.getString("block_num")) |
|
|
|
.collect(Collectors.joining("','")); |
|
|
|
jsonParam.put("block_in",vehicleBlock); |
|
|
|
|
|
|
|
jsonParam.put("flag", "2"); |
|
|
|
jsonParam.put("block_in", "('" + block_in + "')"); |
|
|
|
|
|
|
|
List<JSONObject> boxAllList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) |
|
|
|
.process().getResultJSONArray(0).toJavaList(JSONObject.class); |
|
|
|
List<StIvtStructattr> vehicleStructattr = stIvtStructattrMapper.getInVehicleStructattr(jsonParam); |
|
|
|
|
|
|
|
// 为空说明没有托盘,返回最小巷道
|
|
|
|
if (ObjectUtil.isEmpty(boxAllList)) { |
|
|
|
return blockList.get(0).getString("block_num"); |
|
|
|
if (CollUtil.isEmpty(vehicleStructattr)) { |
|
|
|
return vehicleBlock.get(0); |
|
|
|
} |
|
|
|
|
|
|
|
// 计算每个巷道的托盘数
|
|
|
|
ArrayList<JSONObject> blockBoxList = new ArrayList<>(); |
|
|
|
List<StructattrQuerry> blockBoxList = new ArrayList<>(); |
|
|
|
|
|
|
|
for (int i = 0; i < blockList.size(); i++) { |
|
|
|
JSONObject jsonBlock = blockList.get(i); |
|
|
|
for (int i = 0; i < vehicleBlock.size(); i++) { |
|
|
|
String structattr = vehicleBlock.get(i); |
|
|
|
|
|
|
|
List<JSONObject> box_num = boxAllList.stream() |
|
|
|
.filter(row -> row.getString("block_num").equals(jsonBlock.getString("block_num"))) |
|
|
|
List<StIvtStructattr> stIvtStructattrList = vehicleStructattr.stream() |
|
|
|
.filter(row -> row.getBlock_num().equals(structattr)) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
jsonBlock.put("box_num", String.valueOf(box_num.size())); |
|
|
|
blockBoxList.add(jsonBlock); |
|
|
|
StructattrQuerry structattrQuerry = new StructattrQuerry(); |
|
|
|
structattrQuerry.setBlock_num(structattr); |
|
|
|
structattrQuerry.setBox_num(String.valueOf(stIvtStructattrList.size())); |
|
|
|
blockBoxList.add(structattrQuerry); |
|
|
|
} |
|
|
|
|
|
|
|
// 最小托盘数的巷道
|
|
|
|
List<JSONObject> boxNumList = blockBoxList.stream() |
|
|
|
.sorted(Comparator.comparing(row -> row.getIntValue("box_num"))) |
|
|
|
List<StructattrQuerry> structattrQuerries = blockBoxList.stream() |
|
|
|
.sorted(Comparator.comparing(row -> row.getBox_num())) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
return boxNumList.get(0).getString("block_num"); |
|
|
|
return structattrQuerries.get(0).getBlock_num(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
@ -326,55 +304,45 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
*/ |
|
|
|
private String getMinRow(JSONObject jsonParam) { |
|
|
|
|
|
|
|
jsonParam.put("flag", "3"); |
|
|
|
|
|
|
|
// 获取此仓库、库区、巷道 有空位的排
|
|
|
|
List<JSONObject> rowList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) |
|
|
|
.process().getResultJSONArray(0).toJavaList(JSONObject.class); |
|
|
|
List<String> vehicleStructRow = stIvtStructattrMapper.getInVehicleStructRow(jsonParam); |
|
|
|
|
|
|
|
/* |
|
|
|
* 查询所属排的所有托盘号 |
|
|
|
*/ |
|
|
|
String row_in = rowList.stream() |
|
|
|
.map(row -> row.getString("row_num")) |
|
|
|
.collect(Collectors.joining("','")); |
|
|
|
|
|
|
|
jsonParam.put("flag", "2"); |
|
|
|
jsonParam.put("row_in", "('" + row_in + "')"); |
|
|
|
|
|
|
|
List<JSONObject> boxAllList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) |
|
|
|
.process().getResultJSONArray(0).toJavaList(JSONObject.class); |
|
|
|
jsonParam.put("row_in",vehicleStructRow); |
|
|
|
List<StIvtStructattr> boxAllList = stIvtStructattrMapper.getInVehicleStructattr(jsonParam); |
|
|
|
|
|
|
|
// 为空说明没有托盘,返回最小排
|
|
|
|
if (ObjectUtil.isEmpty(boxAllList)) { |
|
|
|
if (ObjectUtil.isNotEmpty(rowList)) { |
|
|
|
return rowList.get(0).getString("row_num"); |
|
|
|
if (ObjectUtil.isNotEmpty(vehicleStructRow)) { |
|
|
|
return vehicleStructRow.get(0); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 计算最小排的托盘
|
|
|
|
ArrayList<JSONObject> rowkBoxList = new ArrayList<>(); |
|
|
|
|
|
|
|
for (int i = 0; i < rowList.size(); i++) { |
|
|
|
JSONObject jsonRow = rowList.get(i); |
|
|
|
|
|
|
|
List<JSONObject> box_num = boxAllList.stream() |
|
|
|
.filter(row -> row.getString("row_num").equals(jsonRow.getString("row_num"))) |
|
|
|
List<StructattrQuerry> rowkBoxList = new ArrayList<>(); |
|
|
|
for (int i = 0; i < vehicleStructRow.size(); i++) { |
|
|
|
String vehicleStr = vehicleStructRow.get(i); |
|
|
|
List<StIvtStructattr> stIvtStructattrList = boxAllList.stream() |
|
|
|
.filter(row -> row.getRow_num().equals(vehicleStr)) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
jsonRow.put("box_num", String.valueOf(box_num.size())); |
|
|
|
rowkBoxList.add(jsonRow); |
|
|
|
StructattrQuerry structattrQuerry = new StructattrQuerry(); |
|
|
|
structattrQuerry.setBox_num(String.valueOf(stIvtStructattrList.size())); |
|
|
|
structattrQuerry.setRow_num(vehicleStr); |
|
|
|
rowkBoxList.add(structattrQuerry); |
|
|
|
} |
|
|
|
|
|
|
|
// 最小木箱数的排
|
|
|
|
List<JSONObject> boxNumList = rowkBoxList.stream() |
|
|
|
.sorted(Comparator.comparing(row -> row.getIntValue("box_num"))) |
|
|
|
List<StructattrQuerry> structattrQuerries = rowkBoxList.stream() |
|
|
|
.sorted(Comparator.comparing(row -> row.getBox_num())) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
String row_num = ""; |
|
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(boxNumList)) { |
|
|
|
row_num = boxNumList.get(0).getString("row_num"); |
|
|
|
if (ObjectUtil.isNotEmpty(structattrQuerries)) { |
|
|
|
row_num = structattrQuerries.get(0).getRow_num(); |
|
|
|
} |
|
|
|
return row_num; |
|
|
|
} |
|
|
@ -401,9 +369,7 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
if (ObjectUtil.isEmpty(jsonParam.getString("row_num"))) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
String join = "('" + String.join("','", notInRowList) + "')"; |
|
|
|
jsonParam.put("not_row_in", join); |
|
|
|
jsonParam.put("not_row_in", notInRowList); |
|
|
|
|
|
|
|
// 新的一排
|
|
|
|
String row_num_new = this.getMinRow(jsonParam); |
|
|
@ -428,90 +394,85 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
private JSONObject getStructOne(JSONObject jsonParam) { |
|
|
|
|
|
|
|
// 获取此仓库、库区、巷道、排的所有空位 根据列、层、深度排序
|
|
|
|
jsonParam.put("flag", "4"); |
|
|
|
|
|
|
|
List<JSONObject> rowStructList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) |
|
|
|
.process().getResultJSONArray(0).toJavaList(JSONObject.class); |
|
|
|
List<StIvtStructattr> vehicleRowStructattr = stIvtStructattrMapper.getInVehicleRowStructattr(jsonParam); |
|
|
|
|
|
|
|
// 获取此仓库、库区、巷道、排的所有仓位
|
|
|
|
jsonParam.put("flag", "5"); |
|
|
|
List<StIvtStructattr> allVehicleStruct = stIvtStructattrMapper.getAllInVehicleStruct(jsonParam); |
|
|
|
|
|
|
|
List<JSONObject> structAllList = WQL.getWO("BST_INVEHICLE").addParamMap(jsonParam) |
|
|
|
.process().getResultJSONArray(0).toJavaList(JSONObject.class); |
|
|
|
|
|
|
|
// 需要返回的仓位
|
|
|
|
JSONObject jsonAttr = new JSONObject(); |
|
|
|
|
|
|
|
for (int i = 0; i < rowStructList.size(); i++) { |
|
|
|
JSONObject json = rowStructList.get(i); |
|
|
|
StIvtStructattr stIvtStructattrReturn = new StIvtStructattr(); |
|
|
|
for (int i = 0; i < vehicleRowStructattr.size(); i++) { |
|
|
|
StIvtStructattr stIvtStructattr = vehicleRowStructattr.get(i); |
|
|
|
|
|
|
|
// 判断伸位
|
|
|
|
if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) { |
|
|
|
if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) { |
|
|
|
// 无需深度
|
|
|
|
jsonAttr = json; |
|
|
|
stIvtStructattrReturn = stIvtStructattr; |
|
|
|
break; |
|
|
|
|
|
|
|
} else if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) { |
|
|
|
} else if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) { |
|
|
|
/* |
|
|
|
* 深货位:判断浅货位是否被锁定 |
|
|
|
*/ |
|
|
|
|
|
|
|
// 获取此货位对应的浅货位
|
|
|
|
List<JSONObject> lowAttr = structAllList.stream() |
|
|
|
.filter(row -> row.getString("col_num").equals(json.getString("col_num")) && |
|
|
|
row.getString("layer_num").equals(json.getString("layer_num")) && |
|
|
|
row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) |
|
|
|
List<StIvtStructattr> lowAttr = allVehicleStruct.stream() |
|
|
|
.filter(row -> row.getCol_num().equals(stIvtStructattr.getCol_num()) && |
|
|
|
row.getLayer_num().equals(stIvtStructattr.getLayer_num()) && |
|
|
|
row.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(lowAttr) || lowAttr.size() != 1) { |
|
|
|
if (CollUtil.isEmpty(lowAttr) || lowAttr.size() != 1) { |
|
|
|
notInRowList.clear(); |
|
|
|
notInBlockList.clear(); |
|
|
|
throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的浅货位错误!"); |
|
|
|
throw new BadRequestException("仓位:" + stIvtStructattr.getStruct_code() + "对应的浅货位错误!"); |
|
|
|
} |
|
|
|
|
|
|
|
// 判断是否被锁定
|
|
|
|
JSONObject jsonAttrLow = lowAttr.get(0); |
|
|
|
StIvtStructattr stIvtStructattrLow = lowAttr.get(0); |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(jsonAttrLow.getString("storagevehicle_code")) && jsonAttrLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { |
|
|
|
if (ObjectUtil.isEmpty(stIvtStructattrLow.getStoragevehicle_code()) && stIvtStructattrLow.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { |
|
|
|
// 没有载具和被锁定
|
|
|
|
jsonAttr = json; |
|
|
|
stIvtStructattrReturn = stIvtStructattr; |
|
|
|
break; |
|
|
|
} else { |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
} else if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) { |
|
|
|
} else if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) { |
|
|
|
/* |
|
|
|
* 浅货位:判断深货位是否空洞,是否是相同类型的托盘 |
|
|
|
*/ |
|
|
|
// 获取此货位对应的深货位
|
|
|
|
List<JSONObject> darkAttr = structAllList.stream() |
|
|
|
.filter(row -> row.getString("col_num").equals(json.getString("col_num")) && |
|
|
|
row.getString("layer_num").equals(json.getString("layer_num")) && |
|
|
|
row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) |
|
|
|
List<StIvtStructattr> darkAttr = allVehicleStruct.stream() |
|
|
|
.filter(row -> row.getCol_num().equals(stIvtStructattr.getCol_num()) && |
|
|
|
row.getLayer_num().equals(stIvtStructattr.getLayer_num()) && |
|
|
|
row.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(darkAttr) || darkAttr.size() != 1) { |
|
|
|
notInRowList.clear(); |
|
|
|
notInBlockList.clear(); |
|
|
|
throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的深货位错误!"); |
|
|
|
throw new BadRequestException("仓位:" + stIvtStructattr.getStruct_code() + "对应的深货位错误!"); |
|
|
|
} |
|
|
|
|
|
|
|
// 判断是否有托盘
|
|
|
|
JSONObject jsonAttrDark = darkAttr.get(0); |
|
|
|
StIvtStructattr stIvtStructattrDark = darkAttr.get(0); |
|
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(jsonAttrDark.getString("storagevehicle_code"))) { |
|
|
|
if (ObjectUtil.isNotEmpty(stIvtStructattrDark.getStoragevehicle_code())) { |
|
|
|
|
|
|
|
// 判断是否是空托盘
|
|
|
|
if (jsonAttrDark.getString("is_vehicle").equals(IOSEnum.IS_NOTANDYES.code("否")) |
|
|
|
if (stIvtStructattrDark.getIs_vehicle().equals(IOSEnum.IS_NOTANDYES.code("否")) |
|
|
|
) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
if (jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { |
|
|
|
if (stIvtStructattrDark.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { |
|
|
|
|
|
|
|
if (jsonAttrDark.getString("storagevehicle_type").equals(jsonParam.getString("vehicle_type"))) { |
|
|
|
jsonAttr = json; |
|
|
|
if (stIvtStructattrDark.getStoragevehicle_type().equals(jsonParam.getString("vehicle_type"))) { |
|
|
|
stIvtStructattrReturn = stIvtStructattr; |
|
|
|
break; |
|
|
|
} else { |
|
|
|
continue; |
|
|
@ -521,8 +482,8 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
if (jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { |
|
|
|
jsonAttr = jsonAttrDark; |
|
|
|
if (stIvtStructattrDark.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { |
|
|
|
stIvtStructattrReturn = stIvtStructattrDark; |
|
|
|
break; |
|
|
|
} else { |
|
|
|
continue; |
|
|
@ -531,7 +492,12 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
if (ObjectUtil.isEmpty(stIvtStructattrReturn)){ |
|
|
|
return null; |
|
|
|
}else { |
|
|
|
JSONObject jsonAttr = (JSONObject) JSONObject.toJSON(stIvtStructattrReturn); |
|
|
|
return jsonAttr; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|