rev:1.出库六个位置在一个出库单上一起出库的时候 报错:‘仓位不足’

2.出库捆扎的时候要进行判断此规格是否只有一个箱子,如果是直接调用acs接口放行
3.捆扎的时候捆扎位如果有一个相同规格的箱子 要优先放在这个位置上
4.生成转库任务时 需要提前确定巷道的位置
This commit is contained in:
2024-06-18 16:34:21 +08:00
parent 15a46f0c62
commit 9186ce137f
9 changed files with 131 additions and 26 deletions

View File

@@ -141,6 +141,21 @@ public class TwoLashTask extends AbstractAcsTask {
// 完成
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
// 判断当前任务组的所有任务是否都为完成:如果都为完成则 调用acs接口允许此木箱离开
JSONObject groupTask = WQLObject.getWQLObject("sch_base_task").query("task_group_id = '" + taskObj.getString("task_group_id") + "' and is_delete = '0' and task_status <> 07 and task_id <> '"+taskObj.getString("task_id")+"'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(groupTask)) {
// 更新点位载具、数量
JSONObject pointDao = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0);
pointDao.put("vehicle_code", "");
pointDao.put("vehicle_qty",0);
WQLObject.getWQLObject("sch_base_point").update(pointDao);
// TODO 调用acs接口告诉此木箱可以离开
}
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
}
@@ -219,6 +234,7 @@ public class TwoLashTask extends AbstractAcsTask {
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
json.put("point_code1", form.getString("start_device_code"));
json.put("point_code2", form.getString("next_device_code"));
json.put("task_group_id", form.getString("task_group_id"));
json.put("is_auto_issue", form.getString("is_auto_issue"));
json.put("handle_class", this.getClass().getName());
json.put("create_id", SecurityUtils.getCurrentUserId());

View File

@@ -110,6 +110,7 @@ public class TwoOutHeapTask extends AbstractAcsTask {
JSONObject jsonParam = new JSONObject();
jsonParam.put("device_code",jsonTask.getString("point_code2"));
jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code"));
jsonParam.put("task_group_id",jsonTask.getString("task_group_id"));
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
bean1.createLashTask(jsonParam);

View File

@@ -163,13 +163,14 @@ public class TwoOutTask extends AbstractAcsTask {
bean.finishTask(jsonTask);
// 判断此任务组是否全部完成
JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'")
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);
// 下发堆垛机至行架任务2个行架位
JSONObject jsonParam = new JSONObject();
jsonParam.put("device_code",jsonTask.getString("point_code2"));
jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code"));
jsonParam.put("task_group_id",jsonTask.getString("task_group_id"));
jsonParam.put("vehicle_type",jsonTask.getJSONObject("request_param").getString("containerType"));
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);

View File

@@ -33,6 +33,7 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.system.service.param.ISysParamService;
import org.nl.wms.basedata.st.service.StorattrService;
import org.nl.wms.basedata.st.service.dto.StorattrDto;
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
@@ -102,6 +103,9 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
@Autowired
private IBstIvtBoxinfoService iBstIvtBoxinfoService;
@Autowired
private ISysParamService iSysParamService;
@Override
@Transactional
public String insertMst(JSONObject whereJson) {
@@ -1132,26 +1136,16 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
);
if (ObjectUtil.isNotEmpty(disDaoList)) {
// 相同
JSONObject jsonSub1 = subTab.query("package_box_sn = '" + jsonAttr.getString("storagevehicle_code") + "'").uniqueResult(0);
JSONObject jsonSub2 = subTab.query("package_box_sn = '" + jsonLow.getString("storagevehicle_code") + "'").uniqueResult(0);
if (jsonSub1.getString("sale_order_name").equals(jsonSub2.getString("sale_order_name")) &&
jsonSub1.getString("box_length").equals(jsonSub2.getString("box_length")) &&
jsonSub1.getString("box_width").equals(jsonSub2.getString("box_width")) &&
jsonSub1.getString("box_high").equals(jsonSub2.getString("box_high")) &&
jsonSub1.getString("product_name").equals(jsonSub2.getString("product_name"))) {
// 不为空说明是此单据下的木箱
flag = false;
} else {
// 为空:判断此木箱是否有任务
JSONObject jsonTask = taskService.query("vehicle_code = '" + jsonLow.getString("storagevehicle_code") + "' and task_status <> '07' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonTask)) {
flag = false;
} else {
// 不相同:判断是否有此木箱的任务
JSONObject jsonTask = taskService.query("table_fk = '" + iostorinv_id + "' and vehicle_code = '" + jsonLow.getString("storagevehicle_code") + "' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonTask)) {
flag = false;
}
}
}
if (flag) {
@@ -1160,7 +1154,36 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
moveParam.put("stor_id", IOSEnum.STOR_ID.code("二期"));
moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
moveParam.put("box_no", jsonLow.getString("storagevehicle_code"));
// moveParam.put("material_id", jsonMater.getString("material_id"));
//根据木箱高度,判断入库仓位的高度、
String height = "";
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue();
// 查询木箱信息
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, jsonLow.getString("storagevehicle_code"))
);
String box_high = boxDao.getBox_high();
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
height = "1";
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
height = "2";
} else {
height = "3";
}
moveParam.put("height", height);
moveParam.put("vehicle_type", boxDao.getVehicle_type());
moveParam.put("move_block_num", jsonLow.getString("block_num"));
// 查询物料id
StIvtIostorinvdis disDao = iStIvtIostorinvdisService.list(
new QueryWrapper<StIvtIostorinvdis>().lambda()
.ne(StIvtIostorinvdis::getWork_status,IOSEnum.BILL_STATUS.code("完成"))
.eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code"))
).get(0);
moveParam.put("material_id", disDao.getMaterial_id());
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
// 生成任务

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONAware;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -119,12 +120,27 @@ public class InBussManageServiceImpl implements InBussManageService {
* 判断是否有仓位
* 判断条件:库区、仓库、是否启用、是否删除、未锁定、没有载具
*/
JSONArray attrArry = 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 = '" + jsonObject.getString("stor_id") + "' " +
"AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" +
"AND height = '" + jsonObject.getString("height") + "'" +
"AND sect_id = '" + jsonObject.getString("sect_id") + "'").getResultJSONArray(0);
// 是否是移库: 提前确定的巷道
String block_num = jsonObject.getString("move_block_num");
JSONArray attrArry = new JSONArray();
if (ObjectUtil.isEmpty(block_num)) {
attrArry = 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 = '" + jsonObject.getString("stor_id") + "' " +
"AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" +
"AND height = '" + jsonObject.getString("height") + "'" +
"AND sect_id = '" + jsonObject.getString("sect_id") + "'").getResultJSONArray(0);
} else {
attrArry = 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 = '" + jsonObject.getString("stor_id") + "' " +
"AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" +
"AND height = '" + jsonObject.getString("height") + "'" +
"AND sect_id = '" + jsonObject.getString("sect_id") + "' AND block_num = '"+block_num+"'")
.getResultJSONArray(0);
}
if (ObjectUtil.isEmpty(attrArry)) {
notInRowList.clear();
@@ -143,7 +159,10 @@ public class InBussManageServiceImpl implements InBussManageService {
jsonSub.put("vehicle_type", jsonObject.getString("vehicle_type"));
jsonSub.put("height", jsonObject.getString("height"));
String block_num = getMinBlock(jsonSub);
// 不是移库则需要找新巷道
if (ObjectUtil.isEmpty(block_num)) {
block_num = getMinBlock(jsonSub);
}
/*
* 确定哪排:查看每排相同木箱规格等 的数量,找到数量最小的那排
*/
@@ -156,6 +175,11 @@ public class InBussManageServiceImpl implements InBussManageService {
jsonSub.put("row_num", row_num);
JSONObject jsonAttr = queryStruct(jsonSub);
// 如果是移库空并且仓位为空则报错
if (ObjectUtil.isNotEmpty(jsonObject.getString("move_block_num")) && ObjectUtil.isEmpty(jsonAttr)) {
throw new BadRequestException("仓位不足!");
}
// 为空则新找巷道
if (ObjectUtil.isEmpty(jsonAttr)) {

View File

@@ -10,6 +10,8 @@ import org.hibernate.annotations.Source;
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.point.service.IschBasePointService;
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.tasks.TwoLashTask;
import org.nl.b_lms.sch.tasks.TwoOutHeapTask;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
@@ -184,6 +186,7 @@ public class LashManageServiceImpl implements LashManageService {
jsonTaskParam.put("task_type", "010707");
jsonTaskParam.put("start_device_code", whereJson.getString("device_code"));
jsonTaskParam.put("next_device_code", end_point);
jsonTaskParam.put("task_group_id", whereJson.getString("task_group_id"));
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
jsonTaskParam.put("is_auto_issue", is_move);
@@ -218,6 +221,7 @@ public class LashManageServiceImpl implements LashManageService {
jsonTaskParam.put("task_type", "010720");
whereJson.put("containerType", whereJson.getString("vehicle_type"));
jsonTaskParam.put("point_code1", whereJson.getString("device_code"));
jsonTaskParam.put("task_group_id", whereJson.getString("task_group_id"));
jsonTaskParam.put("point_code2", next_device_code);
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
jsonTaskParam.put("request_param", whereJson);

View File

@@ -5,6 +5,9 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
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.IStIvtIostorinvOutService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
@@ -17,6 +20,7 @@ import org.nl.common.utils.IdUtil;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.system.service.param.ISysParamService;
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
import org.nl.wms.st.inbill.service.StorPublicService;
import org.nl.wms.st.instor.service.HandMoveStorService;
@@ -72,6 +76,12 @@ public class OutBussManageServiceImpl implements OutBussManageService {
@Autowired
private HandMoveStorService handMoveStorService;
@Autowired
private ISysParamService iSysParamService;
@Autowired
private IBstIvtBoxinfoService iBstIvtBoxinfoService;
@Override
@Transactional
public void lockStruct(List<String> param, JSONObject json) {
@@ -381,6 +391,29 @@ public class OutBussManageServiceImpl implements OutBussManageService {
moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
moveParam.put("box_no", json.getString("storagevehicle_code"));
moveParam.put("material_id", jsonMater.getString("material_id"));
//根据木箱高度,判断入库仓位的高度、
String height = "";
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue();
// 查询木箱信息
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, json.getString("storagevehicle_code"))
);
String box_high = boxDao.getBox_high();
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
height = "1";
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
height = "2";
} else {
height = "3";
}
moveParam.put("height", height);
moveParam.put("vehicle_type", boxDao.getVehicle_type());
// 移库巷道
moveParam.put("move_block_num",json.getString("block_num"));
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
// 查询移出货位的库存物料

View File

@@ -38,6 +38,7 @@ public interface InBussManageService {
* sect_id库区标识
* material_id: 物料标识
* box_no木箱号
* move_block_num: 是否移库:提前确定巷道
* }
* @return JSONObject 仓位对象
*/

View File

@@ -17,6 +17,7 @@ public interface LashManageService {
* @param whereJson {
* device_code起点
* vehicle_code 箱号
* task_group_id 任务组
*
* }
*/
@@ -28,6 +29,7 @@ public interface LashManageService {
* device_code起点
* vehicle_code 箱号
* vehicle_type: 载具类型
* task_group_id: 任务组
*
* }
*/