Browse Source

add 成品入库、托盘出入库

master
李帅 1 week ago
parent
commit
01d4172057
  1. 5
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dto/StructattrQuerry.java
  2. 268
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InVehicleManageServiceImpl.java
  3. 212
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutVehicleManageServiceImpl.java
  4. 9
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/TwoInBussManageServiceImpl.java
  5. 22
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructattrMapper.java
  6. 292
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructattrMapper.xml
  7. 5
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  8. 2
      lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java
  9. 4
      lms/nladmin-system/src/main/resources/config/application-dev.yml

5
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dto/StructattrQuerry.java

@ -12,6 +12,11 @@ public class StructattrQuerry extends PdmBiSubpackagerelation {
private String material_id;
private String vehicle_type;
private String block_num;
//木箱数
private String box_num;
//托盘数
private String vehicle_num;
private String row_num;
List<String> height;
private String not_in_block_num;

268
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InVehicleManageServiceImpl.java

@ -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");
// 判断起点点位是否存在
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);
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("是")));
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);
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);
}
if (ObjectUtil.isEmpty(structArray)) {
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("flag", "2");
jsonParam.put("block_in", "('" + block_in + "')");
jsonParam.put("block_in",vehicleBlock);
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 {
}
}
return jsonAttr;
if (ObjectUtil.isEmpty(stIvtStructattrReturn)){
return null;
}else {
JSONObject jsonAttr = (JSONObject) JSONObject.toJSON(stIvtStructattrReturn);
return jsonAttr;
}
}
}

212
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutVehicleManageServiceImpl.java

@ -1,17 +1,23 @@
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.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.TwoExcepionalMoveTask;
import org.nl.b_lms.sch.tasks.TwoInEmpTask;
import org.nl.b_lms.sch.tasks.TwoOutEmpTask;
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.ios.service.iostorInv.util.service.OutVehicleManageService;
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;
@ -49,9 +55,15 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
/**
* 任务服务
*/
@Autowired
private SchBaseTaskMapper schBaseTaskMapper;
@Autowired
private IschBaseTaskService ischBaseTaskService;
@Autowired
private StIvtStructattrMapper stIvtStructattrMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void outVehicle(JSONObject whereJson) {
@ -60,10 +72,8 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
* 2.找到相同托盘类型的最多排
* 3.确定仓位
*/
// 点位表
WQLObject schBasePointService = WQLObject.getWQLObject("sch_base_point");
// 仓位表
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
whereJson.put("stor_id", IOSEnum.STOR_ID.code("二期"));
whereJson.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
@ -80,12 +90,11 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
}*/
//判断当前点位是否存在任务,如果存在则不生成任务
WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject jsonObject = wo_Task.query("point_code2 = '" + whereJson.getString("device_code") + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonObject)){
throw new BadRequestException("点位【"+jsonObject.getString("point_code2")+"】正在出空托盘任务!");
}
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()+"】正在出空托盘任务!");
}
JSONObject jsonAttr = getStruct(whereJson);
if (ObjectUtil.isEmpty(jsonAttr)) {
@ -111,9 +120,12 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
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"))
);
// 清空缓存
notOutRowList.clear();
notOutBlockList.clear();
@ -148,7 +160,7 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
if (ObjectUtil.isEmpty(jsonAttrNow)) {
throw new BadRequestException("仓位不足!");
}
// 锁定新终点
jsonAttrNow.put("lock_type", IOSEnum.LOCK_TYPE.code("空托盘出库锁"));
@ -210,29 +222,26 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
* @return JSONObject 仓位对象
*/
private JSONObject getStruct(JSONObject whereJson) {
// 仓位表
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
/*
* 判断是否有相同类型的托盘
* 判断条件库区仓库是否启用是否删除未锁定有载具相同载具类型
*/
String block_num = whereJson.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 = '"+whereJson.getString("stor_id")+"' " +
"AND sect_id = '"+whereJson.getString("sect_id")+"' AND storagevehicle_type = '"+whereJson.getString("storagevehicle_type")+"' AND is_emptyvehicle = '1'").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 = '"+whereJson.getString("stor_id")+"' " +
"AND sect_id = '"+whereJson.getString("sect_id")+"' AND storagevehicle_type = '"+whereJson.getString("storagevehicle_type")+"' AND block_num = '"+block_num+"' AND is_emptyvehicle = '1'").getResultJSONArray(0);
String block_num = whereJson.getString("move_block_num");
LambdaQueryWrapper<StIvtStructattr> 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");
if (!ObjectUtil.isEmpty(block_num)) {
stIvtStructattrLambdaQueryWrapper.eq(StIvtStructattr::getBlock_num, block_num);
}
List<StIvtStructattr> stIvtStructattrs = stIvtStructattrMapper.selectList(stIvtStructattrLambdaQueryWrapper);
if (ObjectUtil.isEmpty(structArray)) {
if (CollUtil.isEmpty(stIvtStructattrs)) {
notOutRowList.clear();
notOutBlockList.clear();
if (ObjectUtil.isNotEmpty(block_num)) {
@ -258,21 +267,19 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
// 为空则新找巷道
if (ObjectUtil.isEmpty(jsonAttr)) {
whereJson.put("flag", "1");
notOutBlockList.add(whereJson.getString("block_num"));
String join = "('" + String.join("','", notOutBlockList) + "')";
whereJson.put("not_block_id", join);
whereJson.put("not_block_id", notOutBlockList);
List<JSONObject> blockList = WQL.getWO("BST_OUTVEHICLE").addParamMap(whereJson)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
List<String> vehicleBlock = stIvtStructattrMapper.getOutVehicleBlockList(whereJson);
for (int i = 0; i < blockList.size(); i++) {
JSONObject json = blockList.get(i);
for (int i = 0; i < vehicleBlock.size(); i++) {
String vehicleBlockStr = vehicleBlock.get(i);
JSONObject json = new JSONObject();
json.put("stor_id", whereJson.getString("stor_id"));
json.put("sect_id", whereJson.getString("sect_id"));
json.put("storagevehicle_type", whereJson.getString("vehicle_type"));
json.put("block_num", vehicleBlockStr);
String row_num_2 = getMaxRow(json);
json.put("row_num",row_num_2);
@ -309,8 +316,8 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
if (ObjectUtil.isEmpty(jsonAttr)) {
notOutRowList.add(whereJson.getString("row_num"));
String join = "('" + String.join("','", notOutRowList) + "')";
whereJson.put("not_row_in", join);
whereJson.put("not_row_in", notOutRowList);
// 新的一排
String row_num_new = this.getMaxRow(whereJson);
@ -332,51 +339,42 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
* @return String 巷道
*/
private String getMaxBlock(JSONObject whereJson) {
whereJson.put("flag", "1");
// 查询所有相同载具类型的巷道集合
List<JSONObject> allBlockList = WQL.getWO("BST_OUTVEHICLE").addParamMap(whereJson)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
List<String> outVehicleBlockList = stIvtStructattrMapper.getOutVehicleBlockList(whereJson);
if (ObjectUtil.isEmpty(allBlockList)) {
if (CollUtil.isEmpty(outVehicleBlockList)) {
notOutRowList.clear();
notOutBlockList.clear();
throw new BadRequestException("没有相同类型的空托盘库存!");
}
// 查询所有相同托盘类型巷道的仓位
String block_num_in = allBlockList.stream()
.map(row -> row.getString("block_num"))
.collect(Collectors.joining("','"));
whereJson.put("block_num_in",outVehicleBlockList);
List<StIvtStructattr> outVehicleStructattr = stIvtStructattrMapper.getOutVehicleStructattr(whereJson);
whereJson.put("flag", "2");
whereJson.put("block_num_in", "('"+block_num_in+"')");
List<JSONObject> likeAttrList = WQL.getWO("BST_OUTVEHICLE").addParamMap(whereJson)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
// 计算每个巷道的数量
ArrayList<JSONObject> blockVehicleList = new ArrayList<>();
ArrayList<StructattrQuerry> blockVehicleList = new ArrayList<>();
for (int i = 0; i < allBlockList.size(); i++) {
JSONObject jsonBlock = allBlockList.get(i);
for (int i = 0; i < outVehicleBlockList.size(); i++) {
String block_num = outVehicleBlockList.get(i);
List<JSONObject> blockAttrNum = likeAttrList.stream()
.filter(row -> row.getString("block_num").equals(jsonBlock.getString("block_num")))
List<StIvtStructattr> stIvtStructattrs = outVehicleStructattr.stream()
.filter(row -> row.getBlock_num().equals(block_num))
.collect(Collectors.toList());
jsonBlock.put("vehicle_num", String.valueOf(blockAttrNum.size()));
blockVehicleList.add(jsonBlock);
StructattrQuerry structattrQuerry = new StructattrQuerry();
structattrQuerry.setBlock_num(block_num);
structattrQuerry.setVehicle_num(String.valueOf(stIvtStructattrs.size()));
blockVehicleList.add(structattrQuerry);
}
// 最大托盘数的巷道
List<JSONObject> boxNumList = blockVehicleList.stream()
.sorted(Comparator.comparing(row -> row.getIntValue("vehicle_num")))
.collect(Collectors.toList());
List<StructattrQuerry> boxNumList = blockVehicleList.stream().sorted(Comparator.comparing(row -> row.getVehicle_num())).collect(Collectors.toList());
String block_num = "";
if (ObjectUtil.isNotEmpty(boxNumList)) {
block_num = boxNumList.get(boxNumList.size() - 1).getString("block_num");
block_num = boxNumList.get(boxNumList.size() - 1).getBlock_num();
}
return block_num ;
@ -393,49 +391,44 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
* @return String
*/
private String getMaxRow(JSONObject whereJson) {
whereJson.put("flag", "3");
// 查询所有某一巷道相同载具类型的排集合
List<JSONObject> allRowList = WQL.getWO("BST_OUTVEHICLE").addParamMap(whereJson)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
List<String> outVehicleStructRow = stIvtStructattrMapper.getOutVehicleStructRow(whereJson);
if (ObjectUtil.isEmpty(allRowList)) {
if (CollUtil.isEmpty(outVehicleStructRow)) {
throw new BadRequestException("请当前排列任务执行完后在试!");
}
// 查询某一巷道所有相同托盘类型排的仓位
String row_num_in = allRowList.stream()
.map(row -> row.getString("row_num"))
.collect(Collectors.joining("','"));
whereJson.put("row_num_in", outVehicleStructRow);
whereJson.put("flag", "2");
whereJson.put("row_num_in", "('"+row_num_in+"')");
List<JSONObject> likeAttrList = WQL.getWO("BST_OUTVEHICLE").addParamMap(whereJson)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
List<StIvtStructattr> boxAllList = stIvtStructattrMapper.getOutVehicleStructattr(whereJson);
// 计算每个排的数量
ArrayList<JSONObject> blockVehicleList = new ArrayList<>();
ArrayList<StructattrQuerry> blockVehicleList = new ArrayList<>();
for (int i = 0; i < allRowList.size(); i++) {
JSONObject jsonRow = allRowList.get(i);
for (int i = 0; i < outVehicleStructRow.size(); i++) {
String structRow = outVehicleStructRow.get(i);
List<JSONObject> blockAttrNum = likeAttrList.stream()
.filter(row -> row.getString("row_num").equals(jsonRow.getString("row_num")))
List<StIvtStructattr> stIvtStructattrs = boxAllList.stream()
.filter(row -> row.getRow_num().equals(structRow))
.collect(Collectors.toList());
jsonRow.put("vehicle_num", String.valueOf(blockAttrNum.size()));
blockVehicleList.add(jsonRow);
StructattrQuerry structattrQuerry = new StructattrQuerry();
structattrQuerry.setRow_num(structRow);
structattrQuerry.setVehicle_num(String.valueOf(stIvtStructattrs.size()));
blockVehicleList.add(structattrQuerry);
}
// 最大托盘数的排
List<JSONObject> boxNumList = blockVehicleList.stream()
.sorted(Comparator.comparing(row -> row.getIntValue("vehicle_num")))
List<StructattrQuerry> structattrQuerryList = blockVehicleList.stream()
.sorted(Comparator.comparing(row -> row.getVehicle_num()))
.collect(Collectors.toList());
String row_num = "";
if (ObjectUtil.isNotEmpty(boxNumList)) {
row_num = boxNumList.get(boxNumList.size() - 1).getString("row_num");
if (ObjectUtil.isNotEmpty(structattrQuerryList)) {
row_num = structattrQuerryList.get(structattrQuerryList.size() - 1).getRow_num();
}
return row_num;
@ -455,59 +448,58 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
private JSONObject getVehicleOne(JSONObject whereJson) {
// 查相同托盘类型某一巷道某一排的所有托盘
whereJson.put("flag", "4");
List<JSONObject> allAttrList = WQL.getWO("BST_OUTVEHICLE").addParamMap(whereJson)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
// 获取此仓库、库区、巷道、排的所有仓位
whereJson.put("flag", "5");
List<StIvtStructattr> vehicleRowStructattr = stIvtStructattrMapper.getOutVehicleRowStructattr(whereJson);
List<JSONObject> structAllList = WQL.getWO("BST_OUTVEHICLE").addParamMap(whereJson)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
// 获取此仓库、库区、巷道、排的所有仓位
List<StIvtStructattr> allVehicleStruct = stIvtStructattrMapper.getAllOutVehicleStruct(whereJson);
JSONObject jsonAttr = new JSONObject();
StIvtStructattr stIvtStructattrReturn = new StIvtStructattr();
// 确定仓位
for (int i = 0; i < allAttrList.size(); i++) {
JSONObject json = allAttrList.get(i);
for (int i = 0; i < vehicleRowStructattr.size(); i++) {
StIvtStructattr stIvtStructattr = vehicleRowStructattr.get(i);
if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) {
jsonAttr = json;
if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) {
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) {
notOutRowList.clear();
notOutBlockList.clear();
throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的浅货位错误!");
throw new BadRequestException("仓位:" + stIvtStructattr.getStruct_code() + "对应的浅货位错误!");
}
if (lowAttr.get(0).getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
jsonAttr = json;
if (lowAttr.get(0).getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
stIvtStructattrReturn = stIvtStructattr;
break;
} else {
continue;
}
} else if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) {
} else if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) {
/*
* 浅货位 直接出
*/
jsonAttr = json;
stIvtStructattrReturn = stIvtStructattr;
break;
}
}
return jsonAttr;
if (ObjectUtil.isEmpty(stIvtStructattrReturn)){
return null;
}else {
JSONObject jsonAttr = (JSONObject) JSONObject.toJSON(stIvtStructattrReturn);
return jsonAttr;
}
}
}

9
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/TwoInBussManageServiceImpl.java

@ -330,9 +330,12 @@ public class TwoInBussManageServiceImpl implements TwoInBussManageService {
}
}
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(stIvtStructattrReturn);
return jsonObject;
if (ObjectUtil.isEmpty(stIvtStructattrReturn)){
return null;
}else {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(stIvtStructattrReturn);
return jsonObject;
}
}
/**

22
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructattrMapper.java

@ -22,5 +22,25 @@ public interface StIvtStructattrMapper extends BaseMapper<StIvtStructattr> {
List<StIvtStructattr> getstructRow(@Param("param")StructattrQuerry structattrQuerry);
List<StIvtStructattr> getAllStruct(StructattrQuerry structattrQuerry);
List<StIvtStructattr> getAllStruct(@Param("param")StructattrQuerry structattrQuerry);
List<String> getInVehicleBlock(JSONObject jsonParam);
List<StIvtStructattr> getInVehicleStructattr(JSONObject jsonParam);
List<String> getInVehicleStructRow(JSONObject jsonParam);
List<StIvtStructattr> getInVehicleRowStructattr(JSONObject jsonParam);
List<StIvtStructattr> getAllInVehicleStruct(JSONObject jsonParam);
List<String> getOutVehicleBlockList(JSONObject whereJson);
List<StIvtStructattr> getOutVehicleStructattr(JSONObject whereJson);
List<String> getOutVehicleStructRow(JSONObject whereJson);
List<StIvtStructattr> getOutVehicleRowStructattr(JSONObject whereJson);
List<StIvtStructattr> getAllOutVehicleStruct(JSONObject whereJson);
}

292
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructattrMapper.xml

@ -251,5 +251,297 @@
</if>
</select>
<select id="getInVehicleBlock" resultType="java.lang.String" parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.block_num
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.lock_type = '1'
AND attr.height = '2'
AND IFNULL(attr.storagevehicle_code, '') = ''
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
<!-- 动态条件:not_block -->
<if test="not_block != null and !not_block.isEmpty()">
AND attr.block_num NOT IN
<foreach item="item" collection="not_block" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<!-- 动态条件:not_in_block_num -->
<if test="not_in_block_num != null and not_in_block_num != ''">
AND attr.block_num != #{not_in_block_num}
</if>
<!-- 动态条件:vehicle_type -->
<if test="vehicle_type != null and vehicle_type != ''">
AND attr.storagevehicle_type = #{vehicle_type}
</if>
GROUP BY attr.block_num
ORDER BY attr.block_num
</select>
<select id="getInVehicleStructattr" resultType="org.nl.b_lms.storage_manage.st.dao.StIvtStructattr"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.*
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.height = '2'
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
AND IFNULL(attr.storagevehicle_code,'') != ''
AND attr.is_emptyvehicle = '1'
<if test="block_in != null and !block_in.isEmpty()">
AND attr.block_num IN
<foreach item="item" collection="block_in" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="row_in != null and !row_in.isEmpty()">
AND attr.row_in IN
<foreach item="item" collection="row_in" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<select id="getInVehicleStructRow" resultType="java.lang.String"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.row_num
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.lock_type = '1'
AND height = '2'
AND IFNULL(attr.storagevehicle_code,'') = ''
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
<if test="block_num != null and block_num != ''">
AND attr.block_num != #{block_num}
</if>
<if test="row_in != null and !row_in.isEmpty()">
AND attr.row_in IN
<foreach item="item" collection="row_in" open="(" separator="," close=")">
#{item}
</foreach>
</if>
group by attr.row_num
order by attr.row_num
</select>
<select id="getInVehicleRowStructattr" resultType="org.nl.b_lms.storage_manage.st.dao.StIvtStructattr"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.*
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.lock_type = '1'
AND IFNULL(attr.storagevehicle_code,'') = ''
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
AND attr.block_num = #{block_num}
AND attr.row_num = #{row_num}
order by attr.col_num DESC,attr.layer_num ASC,attr.zdepth DESC
</select>
<select id="getAllInVehicleStruct" resultType="org.nl.b_lms.storage_manage.st.dao.StIvtStructattr"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.*,
CASE
WHEN IFNULL(box.is_packing,'') = '' THEN '0'
ELSE box.is_packing
END AS is_packing,
CASE
WHEN IFNULL(attr.is_emptyvehicle,'') = '' THEN '0'
ELSE attr.is_emptyvehicle
END AS is_vehicle
FROM
st_ivt_structattr attr
LEFT JOIN bst_ivt_boxinfo box ON box.box_no = attr.storagevehicle_code
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
AND attr.block_num = #{block_num}
AND attr.row_num = #{row_num}
</select>
<select id="getOutVehicleBlockList" resultType="java.lang.String"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.block_num
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.lock_type = '1'
AND IFNULL(attr.storagevehicle_code,'') != ''
AND attr.is_emptyvehicle = '1'
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
<if test="storagevehicle_type != null and storagevehicle_type != ''">
AND attr.storagevehicle_type = #{storagevehicle_type}
</if>
<if test="not_block_id != null and !not_block_id.isEmpty()">
AND attr.block_num NOT IN
<foreach item="item" collection="not_block_id" open="(" separator="," close=")">
#{item}
</foreach>
</if>
group by attr.block_num
order by attr.block_num
</select>
<select id="getOutVehicleStructattr" resultType="org.nl.b_lms.storage_manage.st.dao.StIvtStructattr"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.*
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.lock_type = '1'
AND IFNULL(attr.storagevehicle_code,'') != ''
AND attr.is_emptyvehicle = '1'
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
<if test="storagevehicle_type != null and storagevehicle_type != ''">
AND attr.storagevehicle_type = #{storagevehicle_type}
</if>
<if test="block_num != null and block_num != ''">
AND attr.block_num = #{block_num}
</if>
<if test="block_num_in != null and !block_num_in.isEmpty()">
AND attr.block_num IN
<foreach item="item" collection="block_num_in" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="row_num_in != null and !row_num_in.isEmpty()">
AND attr.row_in IN
<foreach item="item" collection="row_num_in" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<select id="getOutVehicleStructRow" resultType="java.lang.String"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.row_num
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.lock_type = '1'
AND IFNULL(attr.storagevehicle_code,'') != ''
AND attr.is_emptyvehicle = '1'
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
<if test="storagevehicle_type != null and storagevehicle_type != ''">
AND attr.storagevehicle_type = #{storagevehicle_type}
</if>
<if test="block_num != null and block_num != ''">
AND attr.block_num = #{block_num}
</if>
<if test="not_row_in != null and !not_row_in.isEmpty()">
AND attr.row_in not IN
<foreach item="item" collection="not_row_in" open="(" separator="," close=")">
#{item}
</foreach>
</if>
group by attr.row_num
order by attr.row_num
</select>
<select id="getOutVehicleRowStructattr" resultType="org.nl.b_lms.storage_manage.st.dao.StIvtStructattr"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.*
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.lock_type = '1'
AND IFNULL(attr.storagevehicle_code,'') != ''
AND attr.is_emptyvehicle = '1'
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
<if test="storagevehicle_type != null and storagevehicle_type != ''">
AND attr.storagevehicle_type = #{storagevehicle_type}
</if>
<if test="block_num != null and block_num != ''">
AND attr.block_num = #{block_num}
</if>
<if test="row_num != null and row_num != ''">
AND attr.row_num = #{row_num}
</if>
order by attr.col_num DESC, attr.zdepth
</select>
<select id="getAllOutVehicleStruct" resultType="org.nl.b_lms.storage_manage.st.dao.StIvtStructattr"
parameterType="com.alibaba.fastjson.JSONObject">
SELECT
attr.*
FROM
st_ivt_structattr attr
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.stor_id = #{stor_id}
AND attr.sect_id = #{sect_id}
<if test="block_num != null and block_num != ''">
AND attr.block_num = #{block_num}
</if>
<if test="row_num != null and row_num != ''">
AND attr.row_num = #{row_num}
</if>
</select>
</mapper>

5
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java

@ -1266,6 +1266,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String pcsn = mdPdStoragevehicleext.getPcsn();
if (StringUtils.isNotEmpty(pcsn)) {
JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + pcsn + "'").getResultJSONArray(0);
if (stIvtStructattr != null && stIvtStructattr.size() > 0) {
errorMsg.add("载具" + whereJson.getString("vehicle_code") + "已绑定" + pcsn);
}
@ -1347,10 +1348,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
jsonTaskParam.put("vehicle_code", whereJson.getString("material_barcode"));
TwoBoxExcepTask taskBean = new TwoBoxExcepTask();
taskBean.createTask(jsonTaskParam);
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("木箱入库"))) {
// 5-木箱入库
whereJson.put("box_no", whereJson.getString("material_barcode"));
inBoxManageService.inBox(whereJson);
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("退货入库"))) {
String materialBarcode = whereJson.getString("material_barcode");
if (StrUtil.isEmpty(materialBarcode)) {

2
lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java

@ -193,7 +193,7 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
String is_productstore = stor_jo.getString("is_productstore");
//生产入库
if (StrUtil.equals(bill_type, "0001") || StrUtil.equals(bill_type, "0007")) {
//1.回传MES
//查询该入库单下的所有箱子回传

4
lms/nladmin-system/src/main/resources/config/application-dev.yml

@ -45,7 +45,7 @@ spring:
DruidFilter,stat
url: jdbc:mysql://localhost:3306/lanzhou_lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true
username: root
password: root
password: 123456
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
@ -86,7 +86,7 @@ spring:
DruidFilter,stat
url: jdbc:mysql://127.0.0.1:3306/lanzhou_lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true
username: root
password: root
password: 123456
rules:
readwrite-splitting:
data-sources:

Loading…
Cancel
Save