|
|
|
|
@@ -6,6 +6,8 @@ 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.sch.task.dao.SchBaseTask;
|
|
|
|
|
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
|
|
|
|
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;
|
|
|
|
|
@@ -83,6 +85,12 @@ public class OutBussManageServiceImpl implements OutBussManageService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private IBstIvtBoxinfoService iBstIvtBoxinfoService;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 任务服务
|
|
|
|
|
*/
|
|
|
|
|
@Autowired
|
|
|
|
|
private IschBaseTaskService ischBaseTaskService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public void lockStruct(List<String> param, JSONObject json) {
|
|
|
|
|
@@ -627,4 +635,265 @@ public class OutBussManageServiceImpl implements OutBussManageService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public JSONObject taskExceptional(JSONObject jsonObject) {
|
|
|
|
|
// 判断是 正常出库转库任务 还是 异常出库转库任务
|
|
|
|
|
// 仓位表
|
|
|
|
|
WQLObject attrTab = WQLObject.getWQLObject("ST_IVT_StructAttr");
|
|
|
|
|
|
|
|
|
|
SchBaseTask taskDao = ischBaseTaskService.getOne(
|
|
|
|
|
new QueryWrapper<SchBaseTask>().lambda()
|
|
|
|
|
.eq(SchBaseTask::getTask_code, jsonObject.getString("task_code"))
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
JSONObject jsonPointOne = attrTab.query("struct_code = '" + taskDao.getPoint_code1() + "'").uniqueResult(0);
|
|
|
|
|
JSONObject jsonPointTwo = attrTab.query("struct_code = '" + taskDao.getPoint_code2() + "'").uniqueResult(0);
|
|
|
|
|
|
|
|
|
|
// 需要返回的仓位
|
|
|
|
|
JSONObject result;
|
|
|
|
|
if (jsonPointOne.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁"))
|
|
|
|
|
&& jsonPointTwo.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁"))
|
|
|
|
|
) {
|
|
|
|
|
// 异常出库转库任务
|
|
|
|
|
result = unusualMove(jsonObject);
|
|
|
|
|
} else {
|
|
|
|
|
// 正常出库转库任务
|
|
|
|
|
result = normalMove(jsonObject);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 异常出库转库任务
|
|
|
|
|
* @param jsonObject {task_code : 任务编码}
|
|
|
|
|
* @return JSONObject 仓位对象
|
|
|
|
|
*/
|
|
|
|
|
private JSONObject unusualMove(JSONObject jsonObject) {
|
|
|
|
|
/*
|
|
|
|
|
* 1.更新原仓位为满入异常锁
|
|
|
|
|
* 2.重新分配货位
|
|
|
|
|
* 3.更新任务终点
|
|
|
|
|
*/
|
|
|
|
|
// 仓位表
|
|
|
|
|
WQLObject attrTab = WQLObject.getWQLObject("ST_IVT_StructAttr");
|
|
|
|
|
// 子卷包装关系
|
|
|
|
|
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
|
|
|
|
|
// 物料信息
|
|
|
|
|
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase");
|
|
|
|
|
|
|
|
|
|
SchBaseTask taskDao = ischBaseTaskService.getOne(
|
|
|
|
|
new QueryWrapper<SchBaseTask>().lambda()
|
|
|
|
|
.eq(SchBaseTask::getTask_code, jsonObject.getString("task_code"))
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 查询物料信息
|
|
|
|
|
JSONObject jsonSub = subTab.query("package_box_sn = '" + taskDao.getVehicle_code() + "'").uniqueResult(0);
|
|
|
|
|
JSONObject jsonMater = materTab.query("material_code = '" + jsonSub.getString("product_name") + "'").uniqueResult(0);
|
|
|
|
|
if (ObjectUtil.isEmpty(jsonMater)) {
|
|
|
|
|
throw new BadRequestException("物料编码【"+jsonSub.getString("product_name")+"】信息不存在!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 1.更新原仓位为满入异常锁
|
|
|
|
|
JSONObject jsonPoint = attrTab.query("struct_code = '" + taskDao.getPoint_code2() + "'").uniqueResult(0);
|
|
|
|
|
jsonPoint.put("lock_type", IOSEnum.LOCK_TYPE.code("货位异常锁"));
|
|
|
|
|
jsonPoint.put("remark", "立库转库-满入/浅货位阻挡异常锁定!");
|
|
|
|
|
jsonPoint.put("task_code", "");
|
|
|
|
|
jsonPoint.put("inv_type", "");
|
|
|
|
|
jsonPoint.put("inv_id", "");
|
|
|
|
|
jsonPoint.put("inv_code", "");
|
|
|
|
|
attrTab.update(jsonPoint);
|
|
|
|
|
|
|
|
|
|
// 2.重新分配货位
|
|
|
|
|
// 组织查询移入仓位数据
|
|
|
|
|
JSONObject moveParam = new JSONObject();
|
|
|
|
|
moveParam.put("stor_id", IOSEnum.STOR_ID.code("二期"));
|
|
|
|
|
moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
|
|
|
|
|
moveParam.put("box_no", taskDao.getVehicle_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, taskDao.getVehicle_code())
|
|
|
|
|
);
|
|
|
|
|
if (ObjectUtil.isEmpty(boxDao)) {
|
|
|
|
|
throw new BadRequestException("木箱号为【"+taskDao.getVehicle_code()+"】的木箱信息不存在!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String box_high = boxDao.getBox_high();
|
|
|
|
|
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
|
|
|
|
|
height = "('1','2','3')";
|
|
|
|
|
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
|
|
|
|
|
height = "('2','3')";
|
|
|
|
|
} else {
|
|
|
|
|
height = "('3')";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
moveParam.put("height", height);
|
|
|
|
|
moveParam.put("vehicle_type", boxDao.getVehicle_type());
|
|
|
|
|
// 移库巷道
|
|
|
|
|
moveParam.put("move_block_num",jsonPoint.getString("block_num"));
|
|
|
|
|
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
|
|
|
|
|
if (ObjectUtil.isEmpty(jsonMove)) {
|
|
|
|
|
throw new BadRequestException("当前【"+jsonPoint.getString("block_num")+"】号巷道没有可用仓位!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新新仓位状态
|
|
|
|
|
jsonMove.put("lock_type",IOSEnum.LOCK_TYPE.code("出库异常锁"));
|
|
|
|
|
jsonMove.put("inv_code", taskDao.getVehicle_code());
|
|
|
|
|
attrTab.update(jsonMove);
|
|
|
|
|
|
|
|
|
|
// 3.更新任务终点
|
|
|
|
|
taskDao.setPoint_code2(jsonMove.getString("struct_code"));
|
|
|
|
|
taskDao.setRemark("转库满入或浅货位有货!");
|
|
|
|
|
ischBaseTaskService.updateById(taskDao);
|
|
|
|
|
|
|
|
|
|
return jsonMove;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 正常出库转库任务
|
|
|
|
|
* @param jsonObject {task_code : 任务编码}
|
|
|
|
|
* @return JSONObject 仓位对象
|
|
|
|
|
*/
|
|
|
|
|
public JSONObject normalMove(JSONObject jsonObject) {
|
|
|
|
|
/*
|
|
|
|
|
* 1.锁定原货位
|
|
|
|
|
* 2.重新找新货位 - 更新库存
|
|
|
|
|
* 3.更新单据相关数据
|
|
|
|
|
* 4.更新任务终点
|
|
|
|
|
*/
|
|
|
|
|
// 仓位表
|
|
|
|
|
WQLObject attrTab = WQLObject.getWQLObject("ST_IVT_StructAttr");
|
|
|
|
|
// 移库单明细
|
|
|
|
|
WQLObject moveDtlTab = WQLObject.getWQLObject("st_ivt_moveinvdtl");
|
|
|
|
|
// 移库单主表
|
|
|
|
|
WQLObject moveMstTab = WQLObject.getWQLObject("st_ivt_moveinv");
|
|
|
|
|
// 子卷包装关系
|
|
|
|
|
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
|
|
|
|
|
// 物料信息
|
|
|
|
|
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase");
|
|
|
|
|
|
|
|
|
|
// 1.锁定原货位
|
|
|
|
|
SchBaseTask taskDao = ischBaseTaskService.getOne(
|
|
|
|
|
new QueryWrapper<SchBaseTask>().lambda()
|
|
|
|
|
.eq(SchBaseTask::getTask_code, jsonObject.getString("task_code"))
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 查询对应单据
|
|
|
|
|
JSONObject jsonMoveDtl = moveDtlTab.query("task_id = '" + taskDao.getTask_id() + "'").uniqueResult(0);
|
|
|
|
|
JSONObject jsonMoveMst = moveMstTab.query("moveinv_id = '" + jsonMoveDtl.getString("moveinv_id") + "' AND bill_status <> '99'")
|
|
|
|
|
.uniqueResult(0);
|
|
|
|
|
if (ObjectUtil.isEmpty(jsonMoveMst)) {
|
|
|
|
|
throw new BadRequestException("未找到任务号为【"+taskDao.getTask_code()+"】的移库单,请检查数据!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查询物料信息
|
|
|
|
|
JSONObject jsonSub = subTab.query("package_box_sn = '" + taskDao.getVehicle_code() + "'").uniqueResult(0);
|
|
|
|
|
JSONObject jsonMater = materTab.query("material_code = '" + jsonSub.getString("product_name") + "'").uniqueResult(0);
|
|
|
|
|
if (ObjectUtil.isEmpty(jsonMater)) {
|
|
|
|
|
throw new BadRequestException("物料编码【"+jsonSub.getString("product_name")+"】信息不存在!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 标记原货位为货位异常锁-并更新库存
|
|
|
|
|
JSONObject jsonAttr = attrTab.query("struct_code = '" + taskDao.getPoint_code2() + "'").uniqueResult(0);
|
|
|
|
|
jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
|
|
|
|
|
attrTab.update(jsonAttr);
|
|
|
|
|
|
|
|
|
|
//更新原仓位库存
|
|
|
|
|
JSONObject jsonParam = new JSONObject();
|
|
|
|
|
jsonParam.put("struct_id", jsonAttr.getString("struct_id"));
|
|
|
|
|
jsonParam.put("material_id", jsonMater.getString("material_id"));
|
|
|
|
|
jsonParam.put("pcsn", jsonMoveDtl.getString("pcsn"));
|
|
|
|
|
jsonParam.put("change_qty", jsonMoveDtl.getString("qty"));
|
|
|
|
|
jsonParam.put("inv_id", jsonMoveMst.getString("moveinv_id"));
|
|
|
|
|
jsonParam.put("bill_code", jsonMoveMst.getString("bill_code"));
|
|
|
|
|
jsonParam.put("quality_scode", IOSEnum.QUALITY_SCODE.code("合格品"));
|
|
|
|
|
storPublicService.IOStor(jsonParam, IOSEnum.IVT_CHANGE.code("减待入"));
|
|
|
|
|
|
|
|
|
|
jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("货位异常锁"));
|
|
|
|
|
jsonAttr.put("remark", "立库转库-满入/浅货位阻挡异常锁定!");
|
|
|
|
|
jsonAttr.put("task_code", "");
|
|
|
|
|
jsonAttr.put("inv_type", "");
|
|
|
|
|
jsonAttr.put("inv_id", "");
|
|
|
|
|
jsonAttr.put("inv_code", "");
|
|
|
|
|
attrTab.update(jsonAttr);
|
|
|
|
|
|
|
|
|
|
// 2.重新分配货位
|
|
|
|
|
// 组织查询移入仓位数据
|
|
|
|
|
JSONObject moveParam = new JSONObject();
|
|
|
|
|
moveParam.put("stor_id", jsonMoveMst.getString("stor_id"));
|
|
|
|
|
moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
|
|
|
|
|
moveParam.put("box_no", taskDao.getVehicle_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, taskDao.getVehicle_code())
|
|
|
|
|
);
|
|
|
|
|
if (ObjectUtil.isEmpty(boxDao)) {
|
|
|
|
|
throw new BadRequestException("木箱号为【"+taskDao.getVehicle_code()+"】的木箱信息不存在!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String box_high = boxDao.getBox_high();
|
|
|
|
|
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
|
|
|
|
|
height = "('1','2','3')";
|
|
|
|
|
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
|
|
|
|
|
height = "('2','3')";
|
|
|
|
|
} else {
|
|
|
|
|
height = "('3')";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
moveParam.put("height", height);
|
|
|
|
|
moveParam.put("vehicle_type", boxDao.getVehicle_type());
|
|
|
|
|
// 移库巷道
|
|
|
|
|
moveParam.put("move_block_num",jsonAttr.getString("block_num"));
|
|
|
|
|
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
|
|
|
|
|
if (ObjectUtil.isEmpty(jsonMove)) {
|
|
|
|
|
throw new BadRequestException("当前【"+jsonAttr.getString("block_num")+"】号巷道没有可用仓位!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新新移入货位锁类型,更新库存
|
|
|
|
|
JSONObject jsonParam2 = new JSONObject();
|
|
|
|
|
jsonParam2.put("struct_id", jsonMove.getString("struct_id"));
|
|
|
|
|
jsonParam2.put("material_id", jsonMater.getString("material_id"));
|
|
|
|
|
jsonParam2.put("pcsn", jsonMoveDtl.getString("pcsn"));
|
|
|
|
|
jsonParam2.put("change_qty", jsonMoveDtl.getString("qty"));
|
|
|
|
|
jsonParam2.put("quality_scode", IOSEnum.QUALITY_SCODE.code("合格品"));
|
|
|
|
|
jsonParam2.put("inv_id", jsonMoveMst.getString("moveinv_id"));
|
|
|
|
|
jsonParam2.put("bill_code", jsonMoveMst.getString("bill_code"));
|
|
|
|
|
jsonParam2.put("bill_type_scode", jsonMoveMst.getString("bill_code"));
|
|
|
|
|
jsonParam2.put("qty_unit_id", jsonMoveDtl.getString("qty_unit_id"));
|
|
|
|
|
storPublicService.IOStor(jsonParam2, IOSEnum.IVT_CHANGE.code("加待入"));
|
|
|
|
|
|
|
|
|
|
jsonMove.put("lock_type", IOSEnum.LOCK_TYPE.code("移入锁"));
|
|
|
|
|
attrTab.update(jsonMove);
|
|
|
|
|
|
|
|
|
|
// 3.更新单据相关数据
|
|
|
|
|
jsonMoveDtl.put("turnin_struct_id", jsonMove.getString("struct_id"));
|
|
|
|
|
jsonMoveDtl.put("turnin_struct_code", jsonMove.getString("struct_code"));
|
|
|
|
|
jsonMoveDtl.put("turnin_struct_name", jsonMove.getString("struct_name"));
|
|
|
|
|
moveDtlTab.update(jsonMoveDtl);
|
|
|
|
|
|
|
|
|
|
// 4.更新任务终点
|
|
|
|
|
taskDao.setPoint_code2(jsonMove.getString("struct_code"));
|
|
|
|
|
taskDao.setRemark("转库满入或浅货位有货!");
|
|
|
|
|
ischBaseTaskService.updateById(taskDao);
|
|
|
|
|
return jsonMove;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|