add:出库一键设置
This commit is contained in:
@@ -0,0 +1,198 @@
|
|||||||
|
package org.nl.b_lms.sch.tasks;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||||
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
|
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
|
||||||
|
import org.nl.wms.sch.AcsTaskDto;
|
||||||
|
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||||
|
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 二期出库异常任务类
|
||||||
|
* Created by Lxy on 2024/1/19.
|
||||||
|
*/
|
||||||
|
public class TwoOutExceptionalTask extends AbstractAcsTask {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理类
|
||||||
|
*/
|
||||||
|
private final String THIS_CLASS = TwoOutExceptionalTask.class.getName();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AcsTaskDto> addTask() {
|
||||||
|
/*
|
||||||
|
* 下发给ACS时需要特殊处理
|
||||||
|
*/
|
||||||
|
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
|
||||||
|
|
||||||
|
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||||
|
for (int i = 0; i < arr.size(); i++) {
|
||||||
|
JSONObject json = arr.getJSONObject(i);
|
||||||
|
|
||||||
|
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
||||||
|
AcsTaskDto dto = AcsTaskDto.builder()
|
||||||
|
.ext_task_id(json.getString("task_id"))
|
||||||
|
.task_code(json.getString("task_code"))
|
||||||
|
.task_type(json.getString("acs_task_type"))
|
||||||
|
.start_device_code(json.getString("point_code1"))
|
||||||
|
.next_device_code(json.getString("point_code2"))
|
||||||
|
.vehicle_code(json.getString("vehicle_code"))
|
||||||
|
.priority(json.getString("priority"))
|
||||||
|
.class_type(json.getString("task_type"))
|
||||||
|
.dtl_type(String.valueOf(dtl_type))
|
||||||
|
.remark(json.getString("remark"))
|
||||||
|
.build();
|
||||||
|
resultList.add(dto);
|
||||||
|
}
|
||||||
|
return resultList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||||
|
// 任务表
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
// 出入库分配明细表
|
||||||
|
WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis");
|
||||||
|
// 点位表
|
||||||
|
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||||
|
|
||||||
|
JSONObject jsonTask = taskTab.query("task_id = '" + taskObj.getString("task_id") + "'").uniqueResult(0);
|
||||||
|
|
||||||
|
// 更新任务的参数
|
||||||
|
JSONObject map = new JSONObject();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1-执行中, 2-完成 ,0-acs取消
|
||||||
|
*/
|
||||||
|
// 执行中
|
||||||
|
if (status.equals(TaskStatusEnum.EXECUTING.getCode())) {
|
||||||
|
|
||||||
|
map.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 完成
|
||||||
|
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||||
|
|
||||||
|
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||||
|
|
||||||
|
// 判断任务是否被标记
|
||||||
|
if (jsonTask.getString("is_auto_issue").equals(IOSEnum.IS_SEND.code("否"))) {
|
||||||
|
// 创建出库任务
|
||||||
|
JSONObject jsonDis = disTab.query("iostorinv_id = '" + jsonTask.getString("table_fk") + "' and struct_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
|
||||||
|
|
||||||
|
JSONObject jsonPoint = pointTab.query("region_id = '" + RegionTypeEnum.TWO_OUT01.getId() + "' and is_delete = '0' and is_used = '1'").uniqueResult(0);
|
||||||
|
|
||||||
|
JSONObject jsonTaskParam = new JSONObject();
|
||||||
|
jsonTaskParam.put("task_type", "010504");
|
||||||
|
jsonTaskParam.put("point_code1", jsonTask.getString("point_code2"));
|
||||||
|
jsonTaskParam.put("point_code2", jsonPoint.getString("point_code"));
|
||||||
|
jsonTaskParam.put("vehicle_code", jsonTask.getString("vehicle_code"));
|
||||||
|
jsonTaskParam.put("task_group_id", jsonDis.getString("task_id"));
|
||||||
|
jsonTaskParam.put("is_auto_issue", IOSEnum.IS_SEND.code("否"));
|
||||||
|
jsonTaskParam.put("table_fk", jsonTask.getString("table_fk"));
|
||||||
|
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("浅")));
|
||||||
|
|
||||||
|
TwoOutTask twoOutTask = new TwoOutTask();
|
||||||
|
String task_id = twoOutTask.createTask(jsonTaskParam);
|
||||||
|
|
||||||
|
// 更新分配明细
|
||||||
|
JSONObject param = new JSONObject();
|
||||||
|
param.put("task_id",task_id);
|
||||||
|
param.put("point_id",jsonPoint.getString("point_id"));
|
||||||
|
disTab.update(param,"iostorinv_id = '"+jsonTask.getString("table_fk")+"' and struct_code = '"+jsonTask.getString("point_code1")+"'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取消
|
||||||
|
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||||
|
|
||||||
|
if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) {
|
||||||
|
throw new BadRequestException("任务已执行不能取消");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新任务表删除字段
|
||||||
|
map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是"));
|
||||||
|
|
||||||
|
}
|
||||||
|
map.put("update_optid", SecurityUtils.getCurrentUserId());
|
||||||
|
map.put("update_optname", SecurityUtils.getCurrentNickName());
|
||||||
|
map.put("update_time", DateUtil.now());
|
||||||
|
|
||||||
|
WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void findStartPoint() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void findNextPoint() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public String createTask(JSONObject form) {
|
||||||
|
|
||||||
|
if (StrUtil.isBlank(form.getString("task_type"))) {
|
||||||
|
throw new BadRequestException("业务类型不能为空!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isBlank(form.getString("start_device_code"))) {
|
||||||
|
throw new BadRequestException("起点不能为空!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isBlank(form.getString("next_device_code"))) {
|
||||||
|
throw new BadRequestException("终点不能为空!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isBlank(form.getString("vehicle_code"))) {
|
||||||
|
throw new BadRequestException("托盘号不能为空!");
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
|
||||||
|
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());
|
||||||
|
json.put("task_type", form.getString("task_type"));
|
||||||
|
json.put("vehicle_code", form.getString("vehicle_code"));
|
||||||
|
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("handle_class", this.getClass().getName());
|
||||||
|
json.put("table_fk", form.getString("table_fk"));
|
||||||
|
json.put("create_id", SecurityUtils.getCurrentUserId());
|
||||||
|
json.put("create_name", SecurityUtils.getCurrentUsername());
|
||||||
|
json.put("create_time", DateUtil.now());
|
||||||
|
json.put("priority", "1");
|
||||||
|
json.put("acs_task_type", "7");
|
||||||
|
|
||||||
|
WQLObject.getWQLObject("SCH_BASE_Task").insert(json);
|
||||||
|
return json.getString("task_id");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void forceFinish(String task_id) {
|
||||||
|
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||||
|
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel(String task_id) {
|
||||||
|
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||||
|
this.updateTaskStatus(taskObj, IOSEnum.ACS_RESULT.code("取消"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,12 +2,12 @@ package org.nl.b_lms.sch.tasks;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import lombok.RequiredArgsConstructor;
|
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||||
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvOutServiceImpl;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
import org.nl.modules.common.exception.BadRequestException;
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
import org.nl.modules.wql.core.bean.WQLObject;
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
@@ -15,18 +15,16 @@ import org.nl.modules.wql.util.SpringContextHolder;
|
|||||||
import org.nl.wms.sch.AcsTaskDto;
|
import org.nl.wms.sch.AcsTaskDto;
|
||||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||||
import org.nl.wms.st.inbill.service.CheckOutBillService;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Lxy on 2021/12/22.
|
* Created by Lxy on 2021/12/22.
|
||||||
*/
|
*/
|
||||||
@Component
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class TwoOutTask extends AbstractAcsTask {
|
public class TwoOutTask extends AbstractAcsTask {
|
||||||
private final String THIS_CLASS = TwoOutTask.class.getName();
|
private final String THIS_CLASS = TwoOutTask.class.getName();
|
||||||
|
|
||||||
@@ -41,10 +39,24 @@ public class TwoOutTask extends AbstractAcsTask {
|
|||||||
JSONObject map = new JSONObject();
|
JSONObject map = new JSONObject();
|
||||||
map.put("flag", "1");
|
map.put("flag", "1");
|
||||||
map.put("handle_class", THIS_CLASS);
|
map.put("handle_class", THIS_CLASS);
|
||||||
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
|
|
||||||
|
List<JSONObject> arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' order by sort_seq")
|
||||||
|
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||||
|
|
||||||
|
// 根据任务组分组
|
||||||
|
Map<String, List<JSONObject>> groupMap = arr.stream()
|
||||||
|
.collect(Collectors.groupingBy(row -> row.getString("task_group_id")));
|
||||||
|
|
||||||
|
List<JSONObject> taskArr = new ArrayList<>();
|
||||||
|
|
||||||
|
for(String task_group_id : groupMap.keySet()) {
|
||||||
|
taskArr = groupMap.get(task_group_id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||||
for (int i = 0; i < arr.size(); i++) {
|
for (int i = 0; i < taskArr.size(); i++) {
|
||||||
JSONObject json = arr.getJSONObject(i);
|
JSONObject json = taskArr.get(i);
|
||||||
|
|
||||||
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
||||||
AcsTaskDto dto = AcsTaskDto.builder()
|
AcsTaskDto dto = AcsTaskDto.builder()
|
||||||
@@ -79,7 +91,7 @@ public class TwoOutTask extends AbstractAcsTask {
|
|||||||
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status < '07'").uniqueResult(0);
|
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status < '07'").uniqueResult(0);
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(jsonTask)) {
|
if (ObjectUtil.isNotEmpty(jsonTask)) {
|
||||||
if (StrUtil.equals(status, "0")) {
|
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||||
// 任务为执行之后就不允许取消
|
// 任务为执行之后就不允许取消
|
||||||
if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) {
|
if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) {
|
||||||
throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消");
|
throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消");
|
||||||
@@ -92,11 +104,11 @@ public class TwoOutTask extends AbstractAcsTask {
|
|||||||
|
|
||||||
// 更新分配明细为:未生成
|
// 更新分配明细为:未生成
|
||||||
JSONObject map = new JSONObject();
|
JSONObject map = new JSONObject();
|
||||||
map.put("work_status", "00");
|
map.put("work_status", IOSEnum.WORK_STATUS.code("未生成"));
|
||||||
map.put("point_id", "");
|
map.put("point_id", "");
|
||||||
|
map.put("task_id", "");
|
||||||
|
|
||||||
disTab.update(map, "task_id = '" + task_id + "'");
|
disTab.update(map, "task_id = '" + task_id + "'");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||||
@@ -108,26 +120,16 @@ public class TwoOutTask extends AbstractAcsTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
|
||||||
String currentUsername = SecurityUtils.getCurrentUsername();
|
|
||||||
|
|
||||||
// 判断此任务是否有任务组
|
|
||||||
String task_group_id = jsonTask.getString("task_group_id");
|
|
||||||
if (ObjectUtil.isNotEmpty(task_group_id)) {
|
|
||||||
// 上一个任务组顺序号
|
|
||||||
String sort_seq_last = NumberUtil.sub(jsonTask.getString("sort_seq"), "1").toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 调用标识完成
|
// 调用标识完成
|
||||||
CheckOutBillService checkOutBillService = SpringContextHolder.getBean(CheckOutBillService.class);
|
StIvtIostorinvOutServiceImpl bean = SpringContextHolder.getBean(StIvtIostorinvOutServiceImpl.class);
|
||||||
checkOutBillService.finishTask(jsonTask);
|
bean.finishTask(jsonTask);
|
||||||
|
// 判断此任务组是否全部完成
|
||||||
|
JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'")
|
||||||
|
.getResultJSONArray(0);
|
||||||
|
|
||||||
// 更改任务状态为完成
|
if (ObjectUtil.isEmpty(resultJSONArray)) {
|
||||||
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
this.immediateNotifyAcs(null);
|
||||||
jsonTask.put("update_optid", currentUserId);
|
}
|
||||||
jsonTask.put("update_optname", currentUsername);
|
|
||||||
jsonTask.put("update_time", DateUtil.now());
|
|
||||||
taskTab.update(jsonTask);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +161,9 @@ public class TwoOutTask extends AbstractAcsTask {
|
|||||||
json.put("point_code2", form.getString("point_code2"));
|
json.put("point_code2", form.getString("point_code2"));
|
||||||
json.put("material_id", form.getString("material_id"));
|
json.put("material_id", form.getString("material_id"));
|
||||||
json.put("task_group_id", form.getString("task_group_id"));
|
json.put("task_group_id", form.getString("task_group_id"));
|
||||||
json.put("sort_seq", form.getString("sort_seq"));
|
json.put("is_auto_issue", form.getString("is_auto_issue"));
|
||||||
|
json.put("table_fk", form.getString("table_fk"));
|
||||||
|
json.put("sort_seq", form.getIntValue("sort_seq"));
|
||||||
|
|
||||||
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||||
json.put("handle_class", THIS_CLASS);
|
json.put("handle_class", THIS_CLASS);
|
||||||
@@ -182,6 +186,6 @@ public class TwoOutTask extends AbstractAcsTask {
|
|||||||
@Override
|
@Override
|
||||||
public void cancel(String task_id) {
|
public void cancel(String task_id) {
|
||||||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||||
this.updateTaskStatus(taskObj, "0");
|
this.updateTaskStatus(taskObj, IOSEnum.IS_NOTANDYES.code("否"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ public enum IOSEnum {
|
|||||||
|
|
||||||
//仓位锁定类型
|
//仓位锁定类型
|
||||||
LOCK_TYPE(MapOf.of("未锁定", "1", "入库锁", "2", "出库锁", "3", "空托盘出库锁", "4",
|
LOCK_TYPE(MapOf.of("未锁定", "1", "入库锁", "2", "出库锁", "3", "空托盘出库锁", "4",
|
||||||
"空托盘入库锁", "5", "移出锁", "6", "移入锁", "7","木箱入库锁","8","木箱出库锁","9", "其它", "99"
|
"空托盘入库锁", "5", "移出锁", "6", "移入锁", "7","木箱入库锁","8","木箱出库锁","9",
|
||||||
|
"出库异常锁","10","其它", "99"
|
||||||
)),
|
)),
|
||||||
|
|
||||||
//仓库id
|
//仓库id
|
||||||
@@ -81,6 +82,9 @@ public enum IOSEnum {
|
|||||||
//仓位伸位
|
//仓位伸位
|
||||||
ZDEPTH_STRUCT(MapOf.of("浅", "1","深","2","无","3")),
|
ZDEPTH_STRUCT(MapOf.of("浅", "1","深","2","无","3")),
|
||||||
|
|
||||||
|
//是否自动下发
|
||||||
|
IS_SEND(MapOf.of("是", "1","否","2")),
|
||||||
|
|
||||||
//外部系统
|
//外部系统
|
||||||
EXT_SYSTEM(MapOf.of("mes", "mes","sap","sap","crm","crm")),
|
EXT_SYSTEM(MapOf.of("mes", "mes","sap","sap","crm","crm")),
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -119,4 +119,11 @@ public interface IStIvtIostorinvOutService extends IService<StIvtIostorinv> {
|
|||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
void confirm(JSONObject whereJson);
|
void confirm(JSONObject whereJson);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标识完成
|
||||||
|
* @param whereJson: 任务对象
|
||||||
|
*/
|
||||||
|
void finishTask(JSONObject whereJson);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
@@ -21,6 +22,7 @@ import java.math.BigDecimal;
|
|||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
@TableName("st_ivt_iostorinvdis")
|
@TableName("st_ivt_iostorinvdis")
|
||||||
@Builder
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
public class StIvtIostorinvdis implements Serializable {
|
public class StIvtIostorinvdis implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|||||||
@@ -113,7 +113,7 @@
|
|||||||
ST_IVT_IOStorInvDis dis
|
ST_IVT_IOStorInvDis dis
|
||||||
LEFT JOIN pdm_bi_subpackagerelation sub ON sub.container_name = dis.pcsn
|
LEFT JOIN pdm_bi_subpackagerelation sub ON sub.container_name = dis.pcsn
|
||||||
WHERE
|
WHERE
|
||||||
1 = 1
|
dis.work_status = '00'
|
||||||
<if test="iostorinvdtl_id != null and iostorinvdtl_id != ''">
|
<if test="iostorinvdtl_id != null and iostorinvdtl_id != ''">
|
||||||
AND dis.iostorinvdtl_id= #{iostorinvdtl_id}
|
AND dis.iostorinvdtl_id= #{iostorinvdtl_id}
|
||||||
</if>
|
</if>
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.nl.b_lms.pdm_manage.enums.SUBEnum;
|
import org.nl.b_lms.pdm_manage.enums.SUBEnum;
|
||||||
|
import org.nl.b_lms.sch.tasks.TwoOutExceptionalTask;
|
||||||
|
import org.nl.b_lms.sch.tasks.TwoOutTask;
|
||||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
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.IStIvtIostorinvOutService;
|
||||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService;
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService;
|
||||||
@@ -21,6 +23,7 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
|
|||||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
|
||||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvOutMapper;
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvOutMapper;
|
||||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdisMapper;
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdisMapper;
|
||||||
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService;
|
||||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBussManageService;
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBussManageService;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
@@ -30,6 +33,7 @@ import org.nl.modules.wql.WQL;
|
|||||||
import org.nl.modules.wql.core.bean.WQLObject;
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
import org.nl.wms.basedata.st.service.StorattrService;
|
import org.nl.wms.basedata.st.service.StorattrService;
|
||||||
import org.nl.wms.basedata.st.service.dto.StorattrDto;
|
import org.nl.wms.basedata.st.service.dto.StorattrDto;
|
||||||
|
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
|
||||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -87,6 +91,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtIostorinvService iStIvtIostorinvService;
|
private IStIvtIostorinvService iStIvtIostorinvService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库业务处理服务
|
||||||
|
*/
|
||||||
|
@Autowired
|
||||||
|
private InBussManageService inBussManageService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public String insertMst(JSONObject whereJson) {
|
public String insertMst(JSONObject whereJson) {
|
||||||
@@ -520,9 +530,19 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void allSetPoint(JSONObject whereJson) {
|
public void allSetPoint(JSONObject whereJson) {
|
||||||
|
// 任务表
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||||
|
|
||||||
StIvtIostorinv mstDao = this.getById(whereJson.getLongValue("iostorinv_id"));
|
StIvtIostorinv mstDao = this.getById(whereJson.getLongValue("iostorinv_id"));
|
||||||
|
|
||||||
|
// 判断是否有正在执行中的任务
|
||||||
|
List<JSONObject> arr = taskTab.query("handle_class = '" + TwoOutTask.class.getName() + "' and task_status = '" + TaskStatusEnum.EXECUTING.getCode() + "' and is_delete ='0'")
|
||||||
|
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(arr)) {
|
||||||
|
throw new BadRequestException("当前有出库任务正在执行,请稍后在试!");
|
||||||
|
}
|
||||||
|
|
||||||
// 查询此明细所有未生成的分配明细
|
// 查询此明细所有未生成的分配明细
|
||||||
List<JSONObject> disDaoList = stIvtIostorinvdisMapper.getNotCreateDis(whereJson);
|
List<JSONObject> disDaoList = stIvtIostorinvdisMapper.getNotCreateDis(whereJson);
|
||||||
|
|
||||||
@@ -548,6 +568,18 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
for (List<JSONObject> disLikeList : groupingDisMap.values()) {
|
for (List<JSONObject> disLikeList : groupingDisMap.values()) {
|
||||||
// 调用任务生成处理
|
// 调用任务生成处理
|
||||||
List<JSONObject> taskMangeList = createTaskMange(disLikeList,mstDao.getIostorinv_id().toString());
|
List<JSONObject> taskMangeList = createTaskMange(disLikeList,mstDao.getIostorinv_id().toString());
|
||||||
|
|
||||||
|
// 创建任务并下发一组任务
|
||||||
|
createTask(taskMangeList,disLikeList,whereJson.getString("point_code"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下发任务:判断当前单据是否有正在执行的的任务
|
||||||
|
JSONArray disArr = taskTab.query("table_fk = '" + mstDao.getIostorinv_id().toString() + "' and is_delete = '0' and task_status = '" + TaskStatusEnum.EXECUTING.getCode() + "'")
|
||||||
|
.getResultJSONArray(0);
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(disArr)) {
|
||||||
|
TwoOutTask twoOutTask = new TwoOutTask();
|
||||||
|
twoOutTask.immediateNotifyAcs(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -625,11 +657,13 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
needUpdateIvtList.add(jsonIvt);
|
needUpdateIvtList.add(jsonIvt);
|
||||||
|
|
||||||
if (disDao.getTask_id() != null) {
|
if (disDao.getTask_id() != null) {
|
||||||
|
|
||||||
needUpdateTaskList.add(disDao.getTask_id().toString());
|
needUpdateTaskList.add(disDao.getTask_id().toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理异常货位
|
||||||
|
UpdateExceptional(disDaoList);
|
||||||
|
|
||||||
// 更新库存
|
// 更新库存
|
||||||
outBussManageService.upateIvt(needUpdateIvtList,mstDao,IOSEnum.IVT_CHANGE.code("减库存"));
|
outBussManageService.upateIvt(needUpdateIvtList,mstDao,IOSEnum.IVT_CHANGE.code("减库存"));
|
||||||
|
|
||||||
@@ -766,6 +800,86 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void finishTask(JSONObject whereJson) {
|
||||||
|
//任务表
|
||||||
|
WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
|
||||||
|
// 查询任务
|
||||||
|
JSONObject jsonTask = wo_Task.query("task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' and task_id = '" + whereJson.getString("task_id") + "'")
|
||||||
|
.uniqueResult(0);
|
||||||
|
|
||||||
|
if (jsonTask == null) {
|
||||||
|
throw new BadRequestException("查询不到操作的任务记录!"+whereJson.getString("task_id"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询分配明细
|
||||||
|
List<StIvtIostorinvdis> disDaoList = iStIvtIostorinvdisService.list(
|
||||||
|
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||||
|
.eq(StIvtIostorinvdis::getTask_id, whereJson.getString("task_id"))
|
||||||
|
);
|
||||||
|
|
||||||
|
StIvtIostorinvdis disDao = disDaoList.get(0);
|
||||||
|
|
||||||
|
// 查询主表
|
||||||
|
StIvtIostorinv mstDao = this.getById(disDao.getIostorinv_id());
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(mstDao)) {
|
||||||
|
throw new BadRequestException("未查询到对应的出库单据!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IOSEnum.OUT_TYPE.code("改切出库").equals(mstDao.getBill_type()) || IOSEnum.OUT_TYPE.code("返检出库").equals(mstDao.getBill_type())) {
|
||||||
|
HashMap<String, String> map = new HashMap<>();
|
||||||
|
map.put("need_delete", IOSEnum.IS_NOTANDYES.code("是"));
|
||||||
|
|
||||||
|
WQLObject.getWQLObject("pdm_bi_subpackagerelation").update(map, "package_box_sn = '" + jsonTask.getString("vehicle_code") + "'");
|
||||||
|
|
||||||
|
JSONArray rows = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + jsonTask.getString("vehicle_code") + "'").getResultJSONArray(0);
|
||||||
|
for (int i = 0; i < rows.size(); i++) {
|
||||||
|
JSONObject row = rows.getJSONObject(i);
|
||||||
|
//插入包装关系出入库记录表
|
||||||
|
row.put("bill_code", mstDao.getBill_code());
|
||||||
|
row.put("bill_id", mstDao.getIostorinv_id());
|
||||||
|
row.put("bill_type", mstDao.getBill_type());
|
||||||
|
row.put("io_type", IOSEnum.IO_TYPE.code("出库"));
|
||||||
|
row.put("insert_time", DateUtil.now());
|
||||||
|
row.put("record_id", cn.hutool.core.util.IdUtil.getSnowflake(1, 1).nextId());
|
||||||
|
WQLObject.getWQLObject("pdm_bi_subpackagerelationrecord").insert(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//更新任务为完成
|
||||||
|
HashMap<String, String> map = new HashMap<>();
|
||||||
|
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||||
|
map.put("update_optid", SecurityUtils.getCurrentUserId());
|
||||||
|
map.put("update_optname", SecurityUtils.getCurrentNickName());
|
||||||
|
map.put("update_time", DateUtil.now());
|
||||||
|
|
||||||
|
wo_Task.update(map, "task_id='" + whereJson.getString("task_id") + "'");
|
||||||
|
|
||||||
|
// 查询此任务下所有的分配明细
|
||||||
|
disDaoList.forEach(row -> {
|
||||||
|
row.setWork_status(IOSEnum.WORK_STATUS.code("完成"));
|
||||||
|
});
|
||||||
|
|
||||||
|
iStIvtIostorinvdisService.updateBatchById(disDaoList);
|
||||||
|
|
||||||
|
// 更新明细状态
|
||||||
|
iStIvtIostorinvdtlService.updateStatus(disDao.getIostorinvdtl_id());
|
||||||
|
|
||||||
|
//判断是否还有未完成的明细
|
||||||
|
List<StIvtIostorinvdtl> dtlDaoList = iStIvtIostorinvdtlService.list(
|
||||||
|
new QueryWrapper<StIvtIostorinvdtl>().lambda()
|
||||||
|
.eq(StIvtIostorinvdtl::getIostorinv_id, mstDao.getIostorinv_id())
|
||||||
|
.ne(StIvtIostorinvdtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||||
|
);
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(dtlDaoList)) {
|
||||||
|
this.confirm(JSONObject.parseObject(JSON.toJSONString(mstDao)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建调拨入库单
|
* 创建调拨入库单
|
||||||
* @param disDaoList:出库分配明细集合
|
* @param disDaoList:出库分配明细集合
|
||||||
@@ -882,10 +996,10 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
List<JSONObject> attrRowList = attrTab.query("stor_id = '" + IOSEnum.STOR_ID.code("二期") + "' AND row_num IN ('" + rowIn + "')")
|
List<JSONObject> attrRowList = attrTab.query("stor_id = '" + IOSEnum.STOR_ID.code("二期") + "' AND row_num IN ('" + rowIn + "')")
|
||||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||||
|
|
||||||
// 需生成出库任务的仓位集合
|
// 需移库仓位集合
|
||||||
List<JSONObject> needMoveAttrList = new ArrayList<>();
|
List<JSONObject> needMoveAttrList = new ArrayList<>();
|
||||||
|
|
||||||
// 需移库仓位集合
|
// 需生成出库任务的仓位集合
|
||||||
List<JSONObject> needCreateAttrList = new ArrayList<>();
|
List<JSONObject> needCreateAttrList = new ArrayList<>();
|
||||||
|
|
||||||
// 循环准备任务参数
|
// 循环准备任务参数
|
||||||
@@ -894,19 +1008,22 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
|
|
||||||
// 判断是深位还是浅位
|
// 判断是深位还是浅位
|
||||||
if (jsonAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) {
|
if (jsonAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) {
|
||||||
// 深位,判断对应浅位是否阻挡
|
// 深位:判断对应浅位是否阻挡
|
||||||
JSONObject jsonBoxStop = ifBoxStop(jsonAttr,attrRowList,iostorinv_id);
|
JSONObject jsonBoxStop = ifBoxStop(jsonAttr,attrRowList,iostorinv_id);
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(jsonBoxStop)) {
|
if (ObjectUtil.isNotEmpty(jsonBoxStop)) {
|
||||||
// 加入需要移库的集合
|
// 加入需要移库的集合
|
||||||
needMoveAttrList.add(jsonBoxStop);
|
needMoveAttrList.add(jsonBoxStop);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加入需生成任务的集合
|
|
||||||
needCreateAttrList.add(jsonAttr);
|
|
||||||
}
|
}
|
||||||
|
// 加入需要出库的集合
|
||||||
|
needCreateAttrList.add(jsonAttr);
|
||||||
}
|
}
|
||||||
return needMoveAttrList;
|
|
||||||
|
// 创建移库单下发移库任务
|
||||||
|
outBussManageService.createMove(needMoveAttrList);
|
||||||
|
|
||||||
|
return needCreateAttrList;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -917,6 +1034,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
* @return JSONObject 需要移库的仓位
|
* @return JSONObject 需要移库的仓位
|
||||||
*/
|
*/
|
||||||
private JSONObject ifBoxStop(JSONObject jsonAttr, List<JSONObject> attrRowList, String iostorinv_id) {
|
private JSONObject ifBoxStop(JSONObject jsonAttr, List<JSONObject> attrRowList, String iostorinv_id) {
|
||||||
|
// 仓位表
|
||||||
|
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
|
||||||
|
// 子卷包装关系表
|
||||||
|
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
|
||||||
|
// 任务表
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||||
|
|
||||||
JSONObject result = new JSONObject();
|
JSONObject result = new JSONObject();
|
||||||
|
|
||||||
@@ -941,15 +1064,225 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
// 未锁定说明可以移库
|
// 未锁定说明可以移库
|
||||||
if (jsonLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
if (jsonLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||||
result = jsonLow;
|
result = jsonLow;
|
||||||
} else {
|
} else if (jsonLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库锁"))) {
|
||||||
// 锁定
|
boolean flag = true;
|
||||||
// TODO 判断是否是此单据下的木箱 || 不同单据下的(在分配时做限制只允许一个单据的任务做完才能分配)
|
|
||||||
|
// 判断是否是此单据下相同订单、长宽高、物料的木箱
|
||||||
|
List<StIvtIostorinvdis> disDaoList = iStIvtIostorinvdisService.list(
|
||||||
|
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||||
|
.eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id)
|
||||||
|
.eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code"))
|
||||||
|
);
|
||||||
|
|
||||||
|
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 = taskTab.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) {
|
||||||
|
// 查询移入货位
|
||||||
|
JSONObject moveParam = new JSONObject();
|
||||||
|
moveParam.put("stor_id", IOSEnum.STOR_ID.code("二期"));
|
||||||
|
moveParam.put("sect_id", RegionTypeEnum.TWO_ZZ01.getId());
|
||||||
|
moveParam.put("box_no", jsonLow.getString("storagevehicle_code"));
|
||||||
|
// moveParam.put("material_id", jsonMater.getString("material_id"));
|
||||||
|
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
|
||||||
|
|
||||||
|
// 生成任务
|
||||||
|
JSONObject jsonTaskParam = new JSONObject();
|
||||||
|
jsonTaskParam.put("task_type", "010504");
|
||||||
|
jsonTaskParam.put("start_device_code", jsonLow.getString("struct_code"));
|
||||||
|
jsonTaskParam.put("next_device_code", jsonMove.getString("struct_code"));
|
||||||
|
jsonTaskParam.put("vehicle_code", jsonLow.getString("storagevehicle_code"));
|
||||||
|
jsonTaskParam.put("table_fk", iostorinv_id);
|
||||||
|
|
||||||
|
TwoOutExceptionalTask taskBean = new TwoOutExceptionalTask();
|
||||||
|
String task_id = taskBean.createTask(jsonTaskParam);
|
||||||
|
taskBean.immediateNotifyAcs(task_id);
|
||||||
|
|
||||||
|
// 锁定:标记货位为异常并生成异常移库任务
|
||||||
|
jsonLow.put("lock_type", IOSEnum.LOCK_TYPE.code("出库异常锁"));
|
||||||
|
jsonLow.put("task_code", task_id);
|
||||||
|
attrTab.update(jsonLow);
|
||||||
|
|
||||||
|
// 更新移入货位为出库异常货位
|
||||||
|
jsonMove.put("lock_type",IOSEnum.LOCK_TYPE.code("出库异常锁"));
|
||||||
|
jsonLow.put("task_code", task_id);
|
||||||
|
attrTab.update(jsonMove);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建任务
|
||||||
|
* @param taskMangeList:仓位集合
|
||||||
|
* @param disLikeList:分配明细集合
|
||||||
|
* @param point_code : 终点
|
||||||
|
*/
|
||||||
|
private void createTask(List<JSONObject> taskMangeList,List<JSONObject> disLikeList, String point_code) {
|
||||||
|
// 任务表
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||||
|
// 点位表
|
||||||
|
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||||
|
|
||||||
|
// 查询异常货位任务集合
|
||||||
|
String TaskCodeIn = taskMangeList.stream()
|
||||||
|
.filter(row -> row.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁")))
|
||||||
|
.map(row -> row.getString("task_code"))
|
||||||
|
.distinct().collect(Collectors.joining("','"));
|
||||||
|
|
||||||
|
List<JSONObject> taskList = taskTab.query("task_id IN ('" + TaskCodeIn + "') and is_delete = '0'")
|
||||||
|
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||||
|
|
||||||
|
// 任务组标识
|
||||||
|
String task_group_id = IdUtil.getStringId();
|
||||||
|
|
||||||
|
// 起点
|
||||||
|
String start_device_code = "";
|
||||||
|
// 是否自动下发
|
||||||
|
String is_auto_issue = IOSEnum.IS_SEND.code("是");
|
||||||
|
|
||||||
|
for (int i = 0; i < taskMangeList.size(); i++) {
|
||||||
|
JSONObject json = taskMangeList.get(i);
|
||||||
|
start_device_code = json.getString("struct_code");
|
||||||
|
|
||||||
|
// 过滤此仓位的分配明细
|
||||||
|
List<StIvtIostorinvdis> disDaoList = disLikeList.stream()
|
||||||
|
.filter(row -> row.getString("struct_code").equals(json.getString("struct_code")))
|
||||||
|
.map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), StIvtIostorinvdis.class))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 判断是否是异常货位
|
||||||
|
if (json.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁"))) {
|
||||||
|
/*
|
||||||
|
* 判断异常货位上的任务是否完成
|
||||||
|
* 完成:生成完成任务的point_code2 当做起点的任务
|
||||||
|
* 未完成:只更新分配明细状态为生成
|
||||||
|
*/
|
||||||
|
JSONObject jsonTask = taskList.stream()
|
||||||
|
.filter(row -> row.getString("task_id").equals(json.getString("task_code")))
|
||||||
|
.collect(Collectors.toList()).get(0);
|
||||||
|
|
||||||
|
// 完成
|
||||||
|
if (jsonTask.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||||
|
start_device_code = jsonTask.getString("point_code2");
|
||||||
|
is_auto_issue = IOSEnum.IS_SEND.code("否");
|
||||||
|
} else {
|
||||||
|
// 未完成:只更新分配明细状态不更新任务id
|
||||||
|
disDaoList.forEach(row -> {
|
||||||
|
row.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
|
||||||
|
row.setTask_id(Long.parseLong(task_group_id));
|
||||||
|
});
|
||||||
|
iStIvtIostorinvdisService.updateBatchById(disDaoList);
|
||||||
|
|
||||||
|
// 标记任务
|
||||||
|
jsonTask.put("is_auto_issue",IOSEnum.IS_SEND.code("否"));
|
||||||
|
taskTab.update(jsonTask);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成任务
|
||||||
|
JSONObject jsonTaskParam = new JSONObject();
|
||||||
|
jsonTaskParam.put("task_type", "010504");
|
||||||
|
jsonTaskParam.put("point_code1", start_device_code);
|
||||||
|
jsonTaskParam.put("point_code2", point_code);
|
||||||
|
jsonTaskParam.put("vehicle_code", json.getString("storagevehicle_code"));
|
||||||
|
jsonTaskParam.put("task_group_id", task_group_id);
|
||||||
|
jsonTaskParam.put("is_auto_issue", is_auto_issue);
|
||||||
|
jsonTaskParam.put("table_fk", disDaoList.get(0).getIostorinv_id().toString());
|
||||||
|
|
||||||
|
if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")) ||
|
||||||
|
json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无")))
|
||||||
|
{
|
||||||
|
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("浅")));
|
||||||
|
} else {
|
||||||
|
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("深")));
|
||||||
|
}
|
||||||
|
|
||||||
|
TwoOutTask twoOutTask = new TwoOutTask();
|
||||||
|
String task_id = twoOutTask.createTask(jsonTaskParam);
|
||||||
|
|
||||||
|
// 更新分配明细
|
||||||
|
JSONObject jsonPoint = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0);
|
||||||
|
|
||||||
|
disDaoList.forEach(row -> {
|
||||||
|
row.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
|
||||||
|
row.setTask_id(Long.parseLong(task_id));
|
||||||
|
row.setPoint_id(jsonPoint.getLongValue("point_id"));
|
||||||
|
});
|
||||||
|
iStIvtIostorinvdisService.updateBatchById(disDaoList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新异常货位
|
||||||
|
* @param disDaoList:所有分配明细集合
|
||||||
|
*/
|
||||||
|
private void UpdateExceptional(List<StIvtIostorinvdis> disDaoList) {
|
||||||
|
// 仓位表
|
||||||
|
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
|
||||||
|
// 任务表
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||||
|
|
||||||
|
// 获取仓位集合
|
||||||
|
String structCodeIn = disDaoList.stream()
|
||||||
|
.map(StIvtIostorinvdis::getStruct_code)
|
||||||
|
.distinct().collect(Collectors.joining("','"));
|
||||||
|
|
||||||
|
List<JSONObject> attrList = attrTab.query("struct_code IN ('" + structCodeIn + "')")
|
||||||
|
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||||
|
|
||||||
|
// 过滤异常货位
|
||||||
|
List<JSONObject> attrExcepList = attrList.stream()
|
||||||
|
.filter(row -> ObjectUtil.isNotEmpty(row.getString("task_code")))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 找所有异常任务
|
||||||
|
String taskCodeIn = attrExcepList.stream()
|
||||||
|
.map(row -> row.getString("task_code"))
|
||||||
|
.distinct().collect(Collectors.joining("','"));
|
||||||
|
|
||||||
|
List<JSONObject> taskList = taskTab.query("task_id IN ('" + taskCodeIn + "')")
|
||||||
|
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||||
|
|
||||||
|
// 更新异常货位
|
||||||
|
List<String> structCodeInList = new ArrayList<>();
|
||||||
|
|
||||||
|
for (int i = 0; i < taskList.size(); i++) {
|
||||||
|
JSONObject json = taskList.get(0);
|
||||||
|
|
||||||
|
structCodeInList.add(json.getString("point_code1"));
|
||||||
|
structCodeInList.add(json.getString("point_code2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject jsonUpdate = new JSONObject();
|
||||||
|
jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||||
|
jsonUpdate.put("task_code", "");
|
||||||
|
|
||||||
|
attrTab.update(jsonUpdate,"struct_code IN ('"+String.join("','",structCodeInList)+"')");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新主表状态
|
* 更新主表状态
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import cn.hutool.core.util.NumberUtil;
|
|||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.nl.b_lms.sch.tasks.TwoOutTask;
|
|
||||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
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.IStIvtIostorinvOutService;
|
||||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class Init implements ApplicationRunner {
|
|||||||
@Override
|
@Override
|
||||||
public void run(ApplicationArguments args) throws Exception {
|
public void run(ApplicationArguments args) throws Exception {
|
||||||
// initTwoAttr(4,30,3,2, "2");
|
// initTwoAttr(4,30,3,2, "2");
|
||||||
|
// createAttr();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,27 +153,27 @@ public class Init implements ApplicationRunner {
|
|||||||
|
|
||||||
|
|
||||||
String now = DateUtil.now();
|
String now = DateUtil.now();
|
||||||
for (int i = 1; i <= 2000; i++) {
|
for (int i = 1; i <= 3000; i++) {
|
||||||
|
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put("struct_id", IdUtil.getSnowflake(1,1).nextId());
|
json.put("struct_id", IdUtil.getSnowflake(1,1).nextId());
|
||||||
|
|
||||||
if (i < 10) {
|
if (i < 10) {
|
||||||
json.put("struct_code", "B01-"+"000"+i+"-01");
|
json.put("struct_code", "81-"+"000"+i+"-01");
|
||||||
json.put("struct_name", "B01排"+"000"+i+"列-01层");
|
json.put("struct_name", "81排"+"000"+i+"列-01层");
|
||||||
|
|
||||||
}else if (i >= 10 && i < 100) {
|
}else if (i >= 10 && i < 100) {
|
||||||
json.put("struct_code", "B01-"+"00"+i+"-01");
|
json.put("struct_code", "81-"+"00"+i+"-01");
|
||||||
json.put("struct_name", "B01排"+"00"+i+"列-01层");
|
json.put("struct_name", "81排"+"00"+i+"列-01层");
|
||||||
}else if (i >= 100 && i < 1000) {
|
}else if (i >= 100 && i < 1000) {
|
||||||
json.put("struct_code", "B01-"+"0"+i+"-01");
|
json.put("struct_code", "81-"+"0"+i+"-01");
|
||||||
json.put("struct_name", "B01排"+"0"+i+"列-01层");
|
json.put("struct_name", "81排"+"0"+i+"列-01层");
|
||||||
} else {
|
} else {
|
||||||
json.put("struct_code", "B01-"+i+"-01");
|
json.put("struct_code", "81-"+i+"-01");
|
||||||
json.put("struct_name", "B01排"+i+"列-01层");
|
json.put("struct_name", "81排"+i+"列-01层");
|
||||||
}
|
}
|
||||||
JSONObject jsonObject = tab2.query("stor_id = '1582991156504039455'").uniqueResult(0);
|
JSONObject jsonObject = tab2.query("stor_id = '1597073830499717137'").uniqueResult(0);
|
||||||
JSONObject jsonObjec2 = tab3.query("stor_id = '1582991156504039455' and sect_code = 'BXN01'").uniqueResult(0);
|
JSONObject jsonObjec2 = tab3.query("stor_id = '1597073830499717137' and sect_code = 'XN81'").uniqueResult(0);
|
||||||
|
|
||||||
// 新增仓位
|
// 新增仓位
|
||||||
json.put("simple_name", json.getString("struct_name"));
|
json.put("simple_name", json.getString("struct_name"));
|
||||||
|
|||||||
@@ -20,11 +20,12 @@ public enum RegionTypeEnum {
|
|||||||
LKCK("17", "密集库出库输送线", "1585167595403874304"),
|
LKCK("17", "密集库出库输送线", "1585167595403874304"),
|
||||||
XN01("18", "虚拟区", "1586913215886004224"),
|
XN01("18", "虚拟区", "1586913215886004224"),
|
||||||
PD01("19", "盘点区", "1645705331612979200"),
|
PD01("19", "盘点区", "1645705331612979200"),
|
||||||
TWO_ZZ01("20", "二期暂存区", ""),
|
TWO_ZZ01("20", "二期暂存区", "1760183596628447232"),
|
||||||
TWO_TTP01("21", "二期空托盘区", "1750471797729529856"),
|
TWO_TTP01("21", "二期空托盘区", "1750471797729529856"),
|
||||||
TWO_MX01("22", "二期木箱区", "1752254266938101760"),
|
TWO_MX01("22", "二期木箱区", "1752254266938101760"),
|
||||||
TWO_KZ01("23", "二期捆扎区", "1754774130626007040"),
|
TWO_KZ01("23", "二期捆扎区", "1754774130626007040"),
|
||||||
TWO_FH01("24", "二期发货区", "1759453285649092608");
|
TWO_FH01("24", "二期发货区", "1759453285649092608"),
|
||||||
|
TWO_OUT01("25", "二期出库区", "1760141408548818944");
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String code;
|
private String code;
|
||||||
|
|||||||
Reference in New Issue
Block a user