rev:1.出库任务优化:任务完成后更新仓位、库存等信息,单据完成后则根据情况更新库存,情况1:虚拟库,完成单据更新虚拟区仓位、库存,情况2:超期发货:如果子卷超期且是超期发货则更新库存、仓位信息。2.移库任务下发优化:判断是从左边开始移库还是右边开始移库修改

This commit is contained in:
2024-05-15 14:01:47 +08:00
parent 34a84e5bb6
commit 92105c1cb3
7 changed files with 538 additions and 55 deletions

View File

@@ -1208,6 +1208,10 @@ public class MesToLmsServiceImpl implements MesToLmsService {
String changeinv_id = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject jsonStor = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("stor_code = '" + stor_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonStor)) {
throw new BadRequestException("仓库不存在:"+stor_code);
}
JSONArray rowsDtl = new JSONArray();
for (int i = 0; i < rows.size(); i++) {

View File

@@ -141,7 +141,7 @@ public class VirtualOutServiceImpl implements VirtualOutService {
// 调用强制完成接口
JSONObject param = new JSONObject();
param.put("iostorinv_id", jsonDis.getString("iostorinv_id"));
checkOutBillService.confirm(param);
checkOutBillService.confirmOrder(param);
}
}
}

View File

@@ -183,12 +183,19 @@ public interface CheckOutBillService {
void manualDiv(JSONObject whereJson);
/**
* 出库单强制确认
* 出库单强制确认(更新仓位以及库存信息)
*
* @param whereJson /
*/
void confirm(JSONObject whereJson);
/**
* 出库单强制确认(只确认单据用-虚拟区的更新库存)
*
* @param whereJson /
*/
void confirmOrder(JSONObject whereJson);
/**
* 出库任务下发
*

View File

@@ -1416,8 +1416,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService {
isNumMap.put("flag", "6");
jsonLockArr = WQL.getWO("QST_IVT_HANDMOVESTOR").addParamMap(isNumMap).process().getResultJSONArray(0);
}
if (rightNumArr.size() < leftNumArr.size()) {
} else if (rightNumArr.size() < leftNumArr.size()) {
/*
* 右边开始
*/

View File

@@ -199,7 +199,7 @@ public class CheckOutBillController {
@Log("出库单强制确认")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
checkOutBillService.confirm(whereJson);
checkOutBillService.confirmOrder(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

View File

@@ -5101,6 +5101,373 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
}*/
}
@Override
@Transactional(rollbackFor = Exception.class)
public void confirmOrder(JSONObject form) {
//出库分配表
WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis");
//出库明细表
WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl");
//出库主表
WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv");
// 任务表
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
// 子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
//包装关系出入库记录表
WQLObject sub_record = WQLObject.getWQLObject("pdm_bi_subpackagerelationrecord");
String iostorinv_id = form.getString("iostorinv_id");
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
//查询主表信息
JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jo_mst)) {
throw new BadRequestException("未查到相关出库单");
}
//判断分配明细中是否有未生成状态的分配明细
JSONArray disArr = wo_dis.query("iostorinv_id = '" + iostorinv_id + "' and work_status = '00'").getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(disArr)) {
throw new BadRequestException("有未生成状态的分配明细,不允许强制确认");
}
// 查询是否有未完成的任务
List<JSONObject> isTaskEmp = WQL.getWO("QST_IVT_CHECKOUTBILL")
.addParam("flag", "555")
.addParam("iostorinv_id", iostorinv_id)
.process()
.getResultJSONArray(0)
.toJavaList(JSONObject.class);
if (ObjectUtil.isNotEmpty(isTaskEmp)) {
// 拼接字符串
String box_no = isTaskEmp.stream()
.map(row -> row.getString("box_no"))
.distinct()
.collect(Collectors.joining(","));
throw new BadRequestException("请先完成载具对应的出库任务:" + box_no);
}
//查询生成和未分配完的明细
JSONArray dtls = WQL.getWO("QST_IVT_CHECKOUTBILL")
.addParam("flag", "2")
.addParam("bill_status", "50")
.addParam("iostorinv_id", iostorinv_id)
.process()
.getResultJSONArray(0);
if (dtls.size() != 0) {
for (int i = 0; i < dtls.size(); i++) {
JSONObject dtl = dtls.getJSONObject(i);
HashMap<String, String> map_dtl = new HashMap<>();
//更新明细状态
map_dtl.put("bill_status", "99");
wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'");
}
}
HashMap<String, String> map_mst = new HashMap<>();
map_mst.put("bill_status", "99");
map_mst.put("confirm_optid", currentUserId + "");
map_mst.put("confirm_optname", nickName);
map_mst.put("confirm_time", now);
//更新主表状态
wo_mst.update(map_mst, "iostorinv_id = '" + iostorinv_id + "'");
//查询需要更新库存的分配记录
JSONArray diss = WQL.getWO("QST_IVT_CHECKOUTBILL")
.addParam("flag", "55")
.addParam("iostorinv_id", iostorinv_id)
.process()
.getResultJSONArray(0);
for (int i = 0; i < diss.size(); i++) {
JSONObject dis = diss.getJSONObject(i);
// 判断是否是主存区的仓位, 是否发超期
if ("ZC01,ZZ01".contains(dis.getString("sect_code"))) {
if (jo_mst.getString("is_overdue").equals("1")) {
// 不发超期
if (!dis.getString("is_overdue").equals("1")) {
continue;
}
} else {
continue;
}
}
double plan_qty = dis.getDoubleValue("plan_qty");
double real_qty = dis.getDoubleValue("real_qty");
//未出部分,按取消分配处理
if (Double.compare(real_qty, plan_qty) != 0) {
dis.put("change_qty", plan_qty - real_qty);
dis.put("bill_type_scode", jo_mst.getString("bill_type"));
dis.put("inv_id", iostorinv_id);
dis.put("bill_code", jo_mst.getString("bill_code"));
dis.put("bill_table", "ST_IVT_IOStorInv");
storPublicService.IOStor(dis, "12");
}
//更新已出库重量
if (real_qty != 0) {
dis.put("change_qty", real_qty);
dis.put("bill_type_scode", jo_mst.getString("bill_type"));
dis.put("inv_id", iostorinv_id);
dis.put("bill_code", jo_mst.getString("bill_code"));
dis.put("bill_table", "ST_IVT_IOStorInv");
if (jo_mst.getString("is_overdue").equals("1")) {
if (dis.getString("is_overdue").equals("1")) {
storPublicService.IOStor(dis, "12");
} else {
storPublicService.IOStor(dis, "21");
}
} else {
storPublicService.IOStor(dis, "21");
}
}
// 更新分配明细执行状态为 - 99
JSONObject jsonDis = wo_dis.query("iostorinvdis_id = '" + dis.getString("iostorinvdis_id") + "'").uniqueResult(0);
jsonDis.put("work_status", "99");
wo_dis.update(jsonDis);
if (jo_mst.getString("is_overdue").equals("1")) {
if (dis.getString("is_overdue").equals("1")) {
// 解锁起点
JSONObject from_start = new JSONObject();
from_start.put("struct_id", dis.getString("struct_id"));
from_start.put("lock_type", "1");
from_start.put("is_overdue", dis.getString("is_overdue"));
from_start.put("storagevehicle_code", dis.getString("box_no"));
storPublicService.updateStructAndPoint(from_start);
continue;
}
}
// 更新子卷包装关系表 状态 - 3
JSONObject jsonSub = subTab.query("container_name = '" + dis.getString("pcsn") + "' and package_box_sn = '" + dis.getString("box_no") + "' and status = '2'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonSub))
//查询对应的包装关系出入库记录表
{
jsonSub = sub_record.query("container_name = '" + dis.getString("pcsn") + "' and package_box_sn = '" + dis.getString("box_no") + "' and status = '2' AND bill_code = '" + jo_mst.getString("bill_code") + "'").uniqueResult(0);
}
if (ObjectUtil.isEmpty(jsonSub)) {
throw new BadRequestException("此子卷不存在或不为入库状态:" + dis.getString("pcsn"));
}
// 如果是拆分入库则将包装关系改为生成状态
if ("1005".equals(jo_mst.getString("bill_type")) || ("1009".equals(jo_mst.getString("bill_type")))) {
jsonSub.put("status", "0");
} else {
jsonSub.put("status", "3");
}
if (jo_mst.getString("bill_type").equals("1011")) {
// 更新子卷包装净重
double net_weight = NumberUtil.sub(jsonSub.getDoubleValue("net_weight"), plan_qty);
jsonSub.put("net_weight",net_weight);
if (net_weight <= 0) {
jsonSub.put("status","3");
} else {
jsonSub.put("status","2");
}
}
subTab.update(jsonSub);
// 解锁起点
JSONObject from_start = new JSONObject();
from_start.put("struct_id", dis.getString("struct_id"));
from_start.put("lock_type", "1");
from_start.put("is_overdue", dis.getString("is_overdue"));
if (jo_mst.getString("is_overdue").equals("1")) {
if (dis.getString("is_overdue").equals("1")) {
from_start.put("storagevehicle_code", dis.getString("box_no"));
} else {
from_start.put("storagevehicle_code", "");
}
} else {
from_start.put("storagevehicle_code", "");
}
if (jo_mst.getString("bill_type").equals("1011")) {
// 判断此木箱下的所有子卷净重是否为0如果为0则清空载具
List<JSONObject> packageList = subTab.query("package_box_sn = '" + jsonSub.getString("package_box_sn") + "'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
boolean is_zero = packageList.stream()
.allMatch(row -> row.getDoubleValue("net_weight") <= 0);
if (is_zero) {
from_start.put("storagevehicle_code", "");
} else {
from_start.put("bill_type","1011");
from_start.put("storagevehicle_code", jsonSub.getString("package_box_sn"));
}
}
storPublicService.updateStructAndPoint(from_start);
//插入包装关系出入库记录表
jsonSub.put("bill_code", jo_mst.getString("bill_code"));
jsonSub.put("bill_id", jo_mst.getString("iostorinv_id"));
jsonSub.put("bill_type", jo_mst.getString("bill_type"));
jsonSub.put("io_type", "1");
jsonSub.put("insert_time", DateUtil.now());
jsonSub.put("record_id", IdUtil.getSnowflake(1, 1).nextId());
sub_record.insert(jsonSub);
// 更新对应任务为完成
JSONObject jsonTask = taskTab.query("task_id = '" + jsonDis.getString("task_id") + "' and task_status < '07'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonTask)) {
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskTab.update(jsonTask);
}
}
JSONObject out_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0);
if ("1004".equals(out_jo.getString("bill_type"))) {
//调拨出库自动生成调拨入库单
WQLObject dtl_wql = WQLObject.getWQLObject("st_ivt_iostorinvdtl");
WQLObject mst_wql = WQLObject.getWQLObject("ST_IVT_IOStorInv");
WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis");
//校验主表状态为生成
if (!"99".equals(out_jo.getString("bill_status"))) {
throw new BadRequestException("主表状态必须为完成!");
}
JSONObject mst_row = mst_wql.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0);
JSONArray dis_rows = new JSONArray();
if (jo_mst.getString("is_overdue").equals("1")) {
dis_rows = dis_wql.query("iostorinv_id = '" + iostorinv_id + "' and is_overdue = '0'").getResultJSONArray(0);
} else {
dis_rows = dis_wql.query("iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0);
}
//生成手工入库单
String new_iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + "";
String bill_code = CodeUtil.getNewCode("IO_CODE");
jo_mst.put("iostorinv_id", new_iostorinv_id);
jo_mst.put("bill_code", bill_code);
jo_mst.put("io_type", "0");
jo_mst.put("bill_type", "0004");
jo_mst.put("buss_type", ((String) jo_mst.get("bill_type")).substring(0, 4));
//查询移入仓库的信息
JSONObject in_stor = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("stor_id = '" + out_jo.getString("out_stor_id") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(in_stor)) {
throw new BadRequestException("未查询到对应的移入仓库信息!");
}
jo_mst.put("stor_id", in_stor.getString("stor_id"));
jo_mst.put("stor_code", in_stor.getString("stor_code"));
jo_mst.put("stor_name", in_stor.getString("stor_name"));
jo_mst.put("bill_status", "30");
jo_mst.put("input_optid", currentUserId + "");
jo_mst.put("input_optname", nickName);
jo_mst.put("input_time", now);
jo_mst.put("update_optid", currentUserId + "");
jo_mst.put("update_optname", nickName);
jo_mst.put("update_time", now);
jo_mst.put("out_stor_id", out_jo.getString("stor_id"));
double total_qty = 0.00;
for (int i = 0; i < dis_rows.size(); i++) {
//插入明细表
String iostorinvdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject dis_row = dis_rows.getJSONObject(i);
//查询对应的出库单明细
JSONObject dtl_row = dtl_wql.query("iostorinvdtl_id = '" + dis_row.getString("iostorinvdtl_id") + "'").uniqueResult(0);
dis_row.put("iostorinvdtl_id", iostorinvdtl_id);
dis_row.put("iostorinv_id", new_iostorinv_id);
dis_row.put("seq_no", i + 1);
dis_row.put("bill_status", "30");
dis_row.put("real_qty", "0");
dis_row.put("vbeln", dtl_row.getString("vbeln"));
dis_row.put("source_billdtl_id", dtl_row.getString("iostorinvdtl_id"));
dis_row.put("source_bill_type", mst_row.getString("bill_type"));
dis_row.put("source_bill_code", dtl_row.getString("source_bill_code"));
dis_row.put("source_bill_table", "ST_IVT_IOStorInvDtl");
dis_row.put("assign_qty", dis_row.getString("plan_qty"));
dis_row.put("unassign_qty", "0");
//插入调拨明细表
dtl_wql.insert(dis_row);
dis_row.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId());
dis_row.put("seq_no", 1);
dis_row.put("sect_id", "");
dis_row.put("sect_code", "");
dis_row.put("sect_name", "");
dis_row.put("struct_id", "");
dis_row.put("struct_code", "");
dis_row.put("struct_name", "");
dis_row.put("work_status", "00");
dis_row.put("real_qty", "0");
dis_row.put("point_id", "");
dis_row.put("task_id", "");
//插入分配表
dis_wql.insert(dis_row);
total_qty = NumberUtil.add(total_qty,dis_row.getDoubleValue("plan_qty"));
//将包装关系中对应的记录状态改为包装
HashMap<String, String> map = new HashMap<>();
map.put("status", "1");
WQLObject.getWQLObject("PDM_BI_SubPackageRelation").update(map, "package_box_SN = '" + dis_row.getString("box_no") + "' AND status = '3'");
}
// 查询所有明细并计算实际重量
List<JSONObject> dtlList = dtl_wql.query("iostorinv_id = '" + iostorinv_id + "'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
double assign_qty = dtlList.stream()
.map(row -> row.getDoubleValue("assign_qty"))
.reduce(Double::sum).orElse(0.00);
jo_mst.put("detail_count", dis_rows.size());
// jo_mst.put("total_qty", total_qty);
jo_mst.put("total_qty", assign_qty);
mst_wql.insert(jo_mst);
}
if ("1003".equals(out_jo.getString("bill_type")) || "1006".equals(out_jo.getString("bill_type"))) {
//如果为返检出库或者改切出库删除对应的包装关系
JSONArray dis_rows = new JSONArray();
if (jo_mst.getString("is_overdue").equals("1")) {
dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + iostorinv_id + "' and is_overdue = '0'").getResultJSONArray(0);
} else {
dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0);
}
for (int i = 0; i < dis_rows.size(); i++) {
JSONObject dis_row = dis_rows.getJSONObject(i);
String sect_code = dis_row.getString("sect_code");
JSONObject sect_jo = WQLObject.getWQLObject("st_ivt_sectattr").query("sect_code = '" + sect_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(sect_jo)) {
throw new BadRequestException("未查询到对应的库区!");
}
//如果是虚拟区的出库直接把包装关系删除如果为立库的包装关系将解绑删除标识置为1。当发货区解绑时删除包装关系
String pcsn = dis_row.getString("pcsn");
if ("09".equals(sect_jo.getString("sect_type_attr"))) {
WQLObject.getWQLObject("pdm_bi_subpackagerelation").delete("container_name = '" + pcsn + "'");
} else {
HashMap<String, String> map = new HashMap<>();
map.put("need_delete", "1");
WQLObject.getWQLObject("pdm_bi_subpackagerelation").update(map, "container_name = '" + pcsn + "'");
}
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void issueTask(JSONObject whereJson) {
@@ -5136,75 +5503,163 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
WQLObject wo_mst = WQLObject.getWQLObject("st_ivt_iostorinv");
//任务表
WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task");
String task_id = whereJson.getString("task_id");
//子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
//包装关系出入库记录表
WQLObject sub_record = WQLObject.getWQLObject("pdm_bi_subpackagerelationrecord");
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
// 查询任务对应的分配明细
JSONArray disJsonArr = WQL.getWO("QST_IVT_CHECKOUTBILL")
.addParam("flag", "55")
.addParam("task_id", whereJson.getString("task_id"))
.process().getResultJSONArray(0);
JSONObject task = wo_Task.query("task_status<>'07' and task_id='" + task_id + "'").uniqueResult(0);
// 查询主表
JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + disJsonArr.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0);
String iostorinv_id = jo_mst.getString("iostorinv_id");
if (task == null) {
throw new BadRequestException("查询不到操作的任务记录!");
}
for (int i = 0; i < disJsonArr.size(); i++) {
JSONObject dis = disJsonArr.getJSONObject(i);
// 判断此任务是否有任务组
String task_group_id = task.getString("task_group_id");
if (ObjectUtil.isNotEmpty(task_group_id)) {
// 上一个任务组顺序号
String sort_seq_last = NumberUtil.sub(task.getString("sort_seq"), "1").toString();
double plan_qty = dis.getDoubleValue("plan_qty");
double real_qty = dis.getDoubleValue("real_qty");
JSONObject jsonTaskLast = wo_Task.query("task_group_id = '" + task_group_id + "' and sort_seq = '" + sort_seq_last + "' and task_status <> '07'").uniqueResult(0);
// if (ObjectUtil.isNotEmpty(jsonTaskLast)) throw new BadRequestException("请先完成" + jsonTaskLast.getString("task_code") + "的任务!");
}
//未出部分,按取消分配处理
if (Double.compare(real_qty, plan_qty) != 0) {
dis.put("change_qty", plan_qty - real_qty);
dis.put("bill_type_scode", jo_mst.getString("bill_type"));
dis.put("inv_id", iostorinv_id);
dis.put("bill_code", jo_mst.getString("bill_code"));
dis.put("bill_table", "ST_IVT_IOStorInv");
storPublicService.IOStor(dis, "12");
}
//更新已出库重量
if (real_qty != 0) {
dis.put("change_qty", real_qty);
dis.put("bill_type_scode", jo_mst.getString("bill_type"));
dis.put("inv_id", iostorinv_id);
dis.put("bill_code", jo_mst.getString("bill_code"));
dis.put("bill_table", "ST_IVT_IOStorInv");
JSONObject dtljo = wo_dis.query("task_id='" + task_id + "'").uniqueResult(0);
whereJson.put("iostorinv_id", dtljo.getString("iostorinv_id"));
JSONObject mst_jo = wo_mst.query("iostorinv_id = '" + dtljo.getString("iostorinv_id") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(mst_jo)) {
throw new BadRequestException("未查询到对应的出库单据!");
} else {
if ("1003".equals(mst_jo.getString("bill_type")) || "1006".equals(mst_jo.getString("bill_type"))) {
HashMap<String, String> map = new HashMap<>();
map.put("need_delete", "1");
WQLObject.getWQLObject("pdm_bi_subpackagerelation").update(map, "package_box_sn = '" + task.getString("vehicle_code") + "'");
JSONArray rows = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + task.getString("vehicle_code") + "'").getResultJSONArray(0);
for (int i = 0; i < rows.size(); i++) {
JSONObject row = rows.getJSONObject(i);
//插入包装关系出入库记录表
row.put("bill_code", mst_jo.getString("bill_code"));
row.put("bill_id", mst_jo.getString("iostorinv_id"));
row.put("bill_type", mst_jo.getString("bill_type"));
row.put("io_type", "1");
row.put("insert_time", DateUtil.now());
row.put("record_id", IdUtil.getSnowflake(1, 1).nextId());
WQLObject.getWQLObject("pdm_bi_subpackagerelationrecord").insert(row);
if (jo_mst.getString("is_overdue").equals("1")) {
if (dis.getString("is_overdue").equals("1")) {
storPublicService.IOStor(dis, "12");
} else {
storPublicService.IOStor(dis, "21");
}
} else {
storPublicService.IOStor(dis, "21");
}
}
// 更新分配明细执行状态为 - 99
JSONObject jsonDis = wo_dis.query("iostorinvdis_id = '" + dis.getString("iostorinvdis_id") + "'").uniqueResult(0);
jsonDis.put("work_status", "99");
wo_dis.update(jsonDis);
if (jo_mst.getString("is_overdue").equals("1")) {
if (dis.getString("is_overdue").equals("1")) {
continue;
}
}
// 更新子卷包装关系表 状态 - 3
JSONObject jsonSub = subTab.query("container_name = '" + dis.getString("pcsn") + "' and package_box_sn = '" + dis.getString("box_no") + "' and status = '2'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonSub))
//查询对应的包装关系出入库记录表
{
jsonSub = sub_record.query("container_name = '" + dis.getString("pcsn") + "' and package_box_sn = '" + dis.getString("box_no") + "' and status = '2' AND bill_code = '" + jo_mst.getString("bill_code") + "'").uniqueResult(0);
}
if (ObjectUtil.isEmpty(jsonSub)) {
throw new BadRequestException("此子卷不存在或不为入库状态:" + dis.getString("pcsn"));
}
// 如果是拆分入库则将包装关系改为生成状态
if ("1005".equals(jo_mst.getString("bill_type")) || ("1009".equals(jo_mst.getString("bill_type")))) {
jsonSub.put("status", "0");
} else {
jsonSub.put("status", "3");
}
if (jo_mst.getString("bill_type").equals("1011")) {
// 更新子卷包装净重
double net_weight = NumberUtil.sub(jsonSub.getDoubleValue("net_weight"), plan_qty);
jsonSub.put("net_weight",net_weight);
if (net_weight <= 0) {
jsonSub.put("status","3");
} else {
jsonSub.put("status","2");
}
}
subTab.update(jsonSub);
// 解锁起点
JSONObject from_start = new JSONObject();
from_start.put("struct_id", dis.getString("struct_id"));
from_start.put("lock_type", "1");
from_start.put("is_overdue", dis.getString("is_overdue"));
if (jo_mst.getString("is_overdue").equals("1")) {
if (dis.getString("is_overdue").equals("1")) {
from_start.put("storagevehicle_code", dis.getString("box_no"));
} else {
from_start.put("storagevehicle_code", "");
}
} else {
from_start.put("storagevehicle_code", "");
}
if (jo_mst.getString("bill_type").equals("1011")) {
// 判断此木箱下的所有子卷净重是否为0如果为0则清空载具
List<JSONObject> packageList = subTab.query("package_box_sn = '" + jsonSub.getString("package_box_sn") + "'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
boolean is_zero = packageList.stream()
.allMatch(row -> row.getDoubleValue("net_weight") <= 0);
if (is_zero) {
from_start.put("storagevehicle_code", "");
} else {
from_start.put("bill_type","1011");
from_start.put("storagevehicle_code", jsonSub.getString("package_box_sn"));
}
}
storPublicService.updateStructAndPoint(from_start);
//插入包装关系出入库记录表
jsonSub.put("bill_code", jo_mst.getString("bill_code"));
jsonSub.put("bill_id", jo_mst.getString("iostorinv_id"));
jsonSub.put("bill_type", jo_mst.getString("bill_type"));
jsonSub.put("io_type", "1");
jsonSub.put("insert_time", DateUtil.now());
jsonSub.put("record_id", IdUtil.getSnowflake(1, 1).nextId());
sub_record.insert(jsonSub);
}
HashMap<String, String> map = new HashMap<>();
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
map.put("finished_type", "01");
map.put("update_optid", currentUserId + "");
map.put("update_optname", nickName);
map.put("update_time", now);
map.put("update_optid", SecurityUtils.getCurrentUserId() + "");
map.put("update_optname", SecurityUtils.getCurrentNickName());
map.put("update_time", DateUtil.now());
//更新任务为完成
wo_Task.update(map, "task_id='" + task_id + "'");
wo_Task.update(map, "task_id='" + whereJson.getString("task_id") + "'");
// 查询此任务下所有的分配明细
JSONArray disArr = wo_dis.query("task_id='" + task_id + "'").getResultJSONArray(0);
JSONArray disArr = wo_dis.query("task_id='" + whereJson.getString("task_id") + "'").getResultJSONArray(0);
for (int i = 0; i < disArr.size(); i++) {
JSONObject jsonDis = disArr.getJSONObject(i);
JSONObject json = disArr.getJSONObject(i);
// 更新分配明细为完成
jsonDis.put("work_status", "99");
wo_dis.update(jsonDis);
json.put("work_status", "99");
wo_dis.update(json);
// 判断此明细下是否还有未完成的分配明细
JSONObject jsonDtl = wo_dtl.query("iostorinvdtl_id = '" + jsonDis.getString("iostorinvdtl_id") + "'").uniqueResult(0);
JSONObject jsonDtl = wo_dtl.query("iostorinvdtl_id = '" + json.getString("iostorinvdtl_id") + "'").uniqueResult(0);
JSONArray disArr2 = wo_dis.query("iostorinvdtl_id = '" + jsonDtl.getString("iostorinvdtl_id") + "' and work_status <> '99'").getResultJSONArray(0);
if (ObjectUtil.isEmpty(disArr2)) {
// 更新明细为完成
@@ -5214,9 +5669,9 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
}
//判断是否还有未完成的明细
JSONArray ja = wo_dtl.query("bill_status<>'99' and iostorinv_id='" + whereJson.getString("iostorinv_id") + "'").getResultJSONArray(0);
JSONArray ja = wo_dtl.query("bill_status<>'99' and iostorinv_id='" + disArr.getJSONObject(0).getString("iostorinv_id") + "'").getResultJSONArray(0);
if (ja.size() == 0) {
this.confirm(whereJson);
this.confirmOrder(jo_mst);
}
}

View File

@@ -708,6 +708,24 @@
ENDQUERY
ENDIF
IF 输入.flag = "555"
QUERY
SELECT
dis.*
FROM
ST_IVT_IOStorInvDis dis
LEFT JOIN SCH_BASE_Task task ON task.task_id = dis.task_id AND task.is_delete = '0' and task.vehicle_code = dis.storagevehicle_code
WHERE
task.task_status <> '07'
OPTION 输入.iostorinv_id <> ""
dis.iostorinv_id = 输入.iostorinv_id
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "6"
QUERY
SELECT