add: 新增需求: 空托限位送空盘,货梯满料入库
fix: 修复供给线点位冲突bug
This commit is contained in:
@@ -18,10 +18,12 @@ import org.nl.wms.sch.service.TaskService;
|
||||
import org.nl.wms.sch.tasks.callEmpty.GjxCallEmpVehicleTask;
|
||||
import org.nl.wms.sch.tasks.callEmpty.YqxCallEmpVehicleTask;
|
||||
import org.nl.wms.sch.tasks.callMaterial.YqxCallMaterialTask;
|
||||
import org.nl.wms.sch.tasks.sendEmpty.DpxwSendEmpVehicleTask;
|
||||
import org.nl.wms.sch.tasks.sendEmpty.HtSendEmpVehicleTask;
|
||||
import org.nl.wms.sch.tasks.sendEmpty.YqxSendEmpVehicleTask;
|
||||
import org.nl.wms.sch.tasks.sendMaterial.GjxSendMaterialTask;
|
||||
import org.nl.wms.sch.tasks.sendMaterial.HkxSendMaterialTask;
|
||||
import org.nl.wms.sch.tasks.sendMaterial.HtSendMaterialTask;
|
||||
import org.nl.wms.sch.tasks.sendMaterial.YqxSendMaterialTask;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -190,6 +192,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
* 6.一楼空盘入库 (有载具号)
|
||||
* 7.油漆线->输送线(油漆线满料)
|
||||
* 8.豪凯自动线下料入库
|
||||
* 9.碟盘限位送空盘到输送线
|
||||
* 10.一楼货梯送料
|
||||
*/
|
||||
if (StrUtil.equals(type, "1")) {
|
||||
// 1.共挤线申请空盘: 调用空托盘出库处理类创建任务
|
||||
@@ -249,30 +253,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", point_code);
|
||||
param.put("qty", vehicle_num);
|
||||
// param.put("vehicle_type", vehicle_type);
|
||||
// param.put("vehicle_code", vehicle_code);
|
||||
// 创建任务
|
||||
YqxSendEmpVehicleTask taskBean = SpringContextHolder.getBean(YqxSendEmpVehicleTask.class);
|
||||
taskBean.createTask(param);
|
||||
|
||||
|
||||
} else if (StrUtil.equals(type, "6")) {
|
||||
// 6.一楼空盘入库 (有载具号): 调用空托盘入库处理类创建任务
|
||||
if (ObjectUtil.isEmpty(vehicle_code)) throw new BadRequestException("载具号不能为空");
|
||||
JSONObject param = new JSONObject();
|
||||
|
||||
// 查询载具号对应的数量
|
||||
// JSONObject jsonVeQty = new JSONObject();
|
||||
// if (ObjectUtil.isEmpty(vehicle_num)) {
|
||||
// if (ObjectUtil.isEmpty(jsonVeQty)) throw new BadRequestException("请先手持扫码");
|
||||
// } else {
|
||||
// jsonVeQty.put("qty", vehicle_num);
|
||||
// }
|
||||
|
||||
// param.put("qty", jsonVeQty.getString("qty"));
|
||||
param.put("point_code1", point_code);
|
||||
param.put("vehicle_code", vehicle_code);
|
||||
// param.put("vehicle_type", vehicle_type);
|
||||
// 创建任务
|
||||
HtSendEmpVehicleTask taskBean = SpringContextHolder.getBean(HtSendEmpVehicleTask.class);
|
||||
String task_id = taskBean.createTask(param);
|
||||
@@ -295,6 +284,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
HkxSendMaterialTask taskBean = SpringContextHolder.getBean(HkxSendMaterialTask.class);
|
||||
String task_id = taskBean.createTask(param);
|
||||
|
||||
} else if (StrUtil.equals(type, "9")) {
|
||||
// 9.碟盘限位送空盘到输送线
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", point_code);
|
||||
param.put("vehicle_code", vehicle_code);
|
||||
param.put("vehicle_qty", vehicle_num);
|
||||
DpxwSendEmpVehicleTask taskBean = SpringContextHolder.getBean(DpxwSendEmpVehicleTask.class);
|
||||
String task_id = taskBean.createTask(param);
|
||||
} else if (StrUtil.equals(type, "10")) {
|
||||
// 10.一楼货梯送料
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", point_code);
|
||||
param.put("vehicle_code", vehicle_code);
|
||||
param.put("task_id", whereJson.getString("task_id"));
|
||||
HtSendMaterialTask taskBean = SpringContextHolder.getBean(HtSendMaterialTask.class);
|
||||
String task_id = taskBean.createTask(param);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.nl.wms.pda.group;
|
||||
package org.nl.wms.pda.group.rest;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -31,7 +31,7 @@ public class SendVehicleServiceImpl implements SendVehicleService {
|
||||
JSONObject resultJson = new JSONObject();
|
||||
for (int i = 0; i < regionArr.size(); i++) {
|
||||
JSONObject jsonRegion = regionArr.getJSONObject(i);
|
||||
if (StrUtil.equals(jsonRegion.getString("region_id"), RegionTypeEnum.SSX.getId())) {
|
||||
if (StrUtil.equals(jsonRegion.getString("region_id"), RegionTypeEnum.DPXWQ01.getId())) {
|
||||
JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0);
|
||||
jsonRegion.put("pointArr", pointArr);
|
||||
} else {
|
||||
@@ -50,13 +50,13 @@ public class SendVehicleServiceImpl implements SendVehicleService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject confirm(JSONObject whereJson) {
|
||||
JSONObject result = new JSONObject();
|
||||
// 1、准备参数:point_code、type:6为输送线区域,5为油漆区域
|
||||
// 1、准备参数:point_code、type:9为碟盘限位区,5为油漆区域
|
||||
JSONObject param = new JSONObject();
|
||||
|
||||
String region_id = whereJson.getString("region_id");
|
||||
JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0);
|
||||
String region_code = jsonObject.getString("region_code");
|
||||
if (StrUtil.equals(region_code, "SSX01")) param.put("type","6");
|
||||
if (StrUtil.equals(region_code, "DPXWQ01")) param.put("type","9");
|
||||
if (StrUtil.equals(region_code, "YQQY01")) param.put("type","5");
|
||||
|
||||
param.put("point_code",whereJson.getString("point_code"));
|
||||
@@ -64,15 +64,9 @@ public class SendVehicleServiceImpl implements SendVehicleService {
|
||||
param.put("vehicle_num",whereJson.getString("qty"));
|
||||
// 2、调用接口
|
||||
JSONObject json = acsToWmsService.apply(param);
|
||||
if (StrUtil.equals(json.getString("status"), "200")) {
|
||||
result.put("result", "");
|
||||
result.put("code", "1");
|
||||
result.put("desc", "操作成功");
|
||||
} else {
|
||||
result.put("result", "");
|
||||
result.put("code", "0");
|
||||
result.put("desc", "操作失败:"+json.getString("message"));
|
||||
}
|
||||
result.put("result", "");
|
||||
result.put("code", "1");
|
||||
result.put("desc", "操作成功");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
FROM
|
||||
sch_base_region
|
||||
WHERE
|
||||
region_code in ('SSX01','YQQY01')
|
||||
region_code in ('YQQY01','DPXWQ01')
|
||||
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
@@ -64,8 +64,7 @@
|
||||
WHERE
|
||||
is_used = '1'
|
||||
AND is_delete = '0'
|
||||
AND point_type = '6'
|
||||
|
||||
AND lock_type = '1'
|
||||
OPTION 输入.region_id <> ""
|
||||
region_id = 输入.region_id
|
||||
ENDOPTION
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package org.nl.wms.pda.sendvehicle.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.ext.acs.service.AcsToWmsService;
|
||||
import org.nl.wms.pda.sendvehicle.service.SendVehicleService;
|
||||
import org.nl.wms.sch.tasks.RegionTypeEnum;
|
||||
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class SendVehicleServiceImpl implements SendVehicleService {
|
||||
|
||||
private final AcsToWmsService acsToWmsService;
|
||||
|
||||
@Override
|
||||
public JSONObject queryPoint() {
|
||||
JSONObject result = new JSONObject();
|
||||
// 1.查询区域:输送区域 SSX01、油漆区域 YQQY01
|
||||
JSONArray regionArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "1").process().getResultJSONArray(0);
|
||||
// 2.根据区域查询对应的物料上料位
|
||||
JSONObject resultJson = new JSONObject();
|
||||
for (int i = 0; i < regionArr.size(); i++) {
|
||||
JSONObject jsonRegion = regionArr.getJSONObject(i);
|
||||
if (StrUtil.equals(jsonRegion.getString("region_id"), RegionTypeEnum.SSX.getId())) {
|
||||
JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0);
|
||||
jsonRegion.put("pointArr", pointArr);
|
||||
} else {
|
||||
JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "3").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0);
|
||||
jsonRegion.put("pointArr", pointArr);
|
||||
}
|
||||
}
|
||||
resultJson.put("regionja", regionArr);
|
||||
result.put("result", resultJson);
|
||||
result.put("code", "1");
|
||||
result.put("desc", "查询成功");
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject confirm(JSONObject whereJson) {
|
||||
JSONObject result = new JSONObject();
|
||||
// 1、准备参数:point_code、type:6为输送线区域,5为油漆区域
|
||||
JSONObject param = new JSONObject();
|
||||
|
||||
String region_id = whereJson.getString("region_id");
|
||||
JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0);
|
||||
String region_code = jsonObject.getString("region_code");
|
||||
if (StrUtil.equals(region_code, "SSX01")) param.put("type","6");
|
||||
if (StrUtil.equals(region_code, "YQQY01")) param.put("type","5");
|
||||
|
||||
param.put("point_code",whereJson.getString("point_code"));
|
||||
param.put("vehicle_code",whereJson.getString("vehicle_code"));
|
||||
param.put("vehicle_num",whereJson.getString("qty"));
|
||||
// 2、调用接口
|
||||
JSONObject json = acsToWmsService.apply(param);
|
||||
if (StrUtil.equals(json.getString("status"), "200")) {
|
||||
result.put("result", "");
|
||||
result.put("code", "1");
|
||||
result.put("desc", "操作成功");
|
||||
} else {
|
||||
result.put("result", "");
|
||||
result.put("code", "0");
|
||||
result.put("desc", "操作失败:"+json.getString("message"));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -168,6 +168,7 @@ public class PointServiceImpl implements PointService {
|
||||
|
||||
WQLObject materialBaseTab = WQLObject.getWQLObject("MD_ME_MaterialBase");
|
||||
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
|
||||
WQLObject regionTab = WQLObject.getWQLObject("sch_base_region");
|
||||
|
||||
Long currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
@@ -181,6 +182,11 @@ public class PointServiceImpl implements PointService {
|
||||
dto.setUpdate_optname(nickName);
|
||||
String pointStatus = dto.getPoint_status();
|
||||
|
||||
JSONObject regionObj = regionTab.query("region_id = '" + dto.getRegion_id() + "'").uniqueResult(0);
|
||||
dto.setRegion_id(regionObj.getLong("region_id"));
|
||||
dto.setRegion_code(regionObj.getString("region_code"));
|
||||
dto.setRegion_name(regionObj.getString("region_name"));
|
||||
|
||||
if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals("1")) { // 空位
|
||||
dto.setMaterial_id("");
|
||||
dto.setVehicle_type("");
|
||||
|
||||
@@ -15,7 +15,9 @@ public enum RegionTypeEnum {
|
||||
KTPHCQB(9, "KTPHCQB01", "空托盘缓存B区","1558015870570205184"),
|
||||
HKQY(10, "HKQY01", "豪凯区域","1564862312702152704"),
|
||||
SSX(12, "SSX01", "输送线区域","1559374522581389312"),
|
||||
YSAQKTPQ01(13, "YSAQKTPQ01", "养生A空托盘区","1582909373552922624");
|
||||
YSAQKTPQ01(13, "YSAQKTPQ01", "养生A空托盘区","1582909373552922624"),
|
||||
DPXWQ01(14, "DPXWQ01", "碟盘限位区01","1663805048154624000"),
|
||||
YSQB01(15, "YSQB01", "养生区B","1663803432005406720");
|
||||
|
||||
private int index;
|
||||
private String code;
|
||||
|
||||
@@ -0,0 +1,237 @@
|
||||
package org.nl.wms.sch.tasks.sendEmpty;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.nl.wms.pda.group.service.impl.GroupServiceImpl;
|
||||
import org.nl.wms.sch.SchTaskDto;
|
||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.nl.wms.sch.tasks.AcsTaskDto;
|
||||
import org.nl.wms.sch.tasks.utils.PointUpdateUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 碟盘限位送空盘
|
||||
* @Date: 2023/5/31
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class DpxwSendEmpVehicleTask extends AbstractAcsTask {
|
||||
private final String THIS_CLASS = DpxwSendEmpVehicleTask.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> acsTaskArr = new ArrayList<>();
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JSONObject json = arr.getJSONObject(i);
|
||||
AcsTaskDto dto = AcsTaskDto.builder()
|
||||
.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"))
|
||||
.vehicle_type(json.getString("vehicle_type"))
|
||||
.priority(json.getString("priority"))
|
||||
.remark(json.getString("remark"))
|
||||
.build();
|
||||
acsTaskArr.add(dto);
|
||||
}
|
||||
return acsTaskArr;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
/**
|
||||
*改变任务状态
|
||||
**/
|
||||
String task_id = taskObj.getString("task_id");
|
||||
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||
//点位基础表【SCH_BASE_Point】
|
||||
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
|
||||
JSONObject jsonTask = taskTab.query("task_id='" + task_id + "'").uniqueResult(0);
|
||||
|
||||
if (StrUtil.equals(status, "0")) {
|
||||
//取消任务,释放相关点位的锁
|
||||
String point_code2 = jsonTask.getString("point_code2");
|
||||
if (ObjectUtil.isNotEmpty(point_code2)) {
|
||||
// 锁定所有当前货梯
|
||||
String allPre = point_code2.substring(0, 5);
|
||||
JSONObject param2 = new JSONObject();
|
||||
param2.put("lock_type", "1");
|
||||
param2.put("task_id", "");
|
||||
pointTab.update(param2, "point_code like '" + allPre + "%' AND point_code <> '" + allPre + "'");
|
||||
}
|
||||
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
jsonTask.put("remark", "已取消");
|
||||
taskTab.update(jsonTask);
|
||||
}
|
||||
|
||||
if (StrUtil.equals(status, "1")) {
|
||||
//更新任务状态为执行中
|
||||
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
jsonTask.put("car_no", taskObj.getString("car_no"));
|
||||
taskTab.update(jsonTask);
|
||||
}
|
||||
|
||||
if (StrUtil.equals(status, "2")) {
|
||||
// 更新任务状态为完成
|
||||
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode"));
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
jsonTask.put("remark", "任务执行完成");
|
||||
taskTab.update(jsonTask);
|
||||
|
||||
//取消任务,释放相关点位的锁
|
||||
String point_code2 = jsonTask.getString("point_code2");
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("lock_type", "1");
|
||||
param.put("task_id", "");
|
||||
if (ObjectUtil.isNotEmpty(point_code2)) {
|
||||
// 锁定所有当前货梯
|
||||
String allPre = point_code2.substring(0, 5);
|
||||
JSONObject param2 = new JSONObject();
|
||||
param2.put("lock_type", "1");
|
||||
param2.put("task_id", "");
|
||||
pointTab.update(param2, "point_code like '" + allPre + "%' " +
|
||||
"AND point_code <> '" + allPre + "' " +
|
||||
"AND point_code <> '" + point_code2 + "'");
|
||||
}
|
||||
param.put("point_status", "2");
|
||||
pointTab.update(param, "point_code = '" + point_code2 + "'");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject form) {
|
||||
/*
|
||||
* 1.先生成确定起点的任务
|
||||
* 2.通过findNextPoint()找终点
|
||||
* 3.下发给ACS
|
||||
*/
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
|
||||
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_point"); // 点位表
|
||||
//任务表【SCH_BASE_Task】
|
||||
//判断当前点是否有未完成的任务
|
||||
String point_code1 = form.getString("point_code1");
|
||||
|
||||
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务");
|
||||
|
||||
SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId())
|
||||
.task_code(CodeUtil.getNewCode("TASK_CODE"))
|
||||
.task_type("")
|
||||
.acs_task_type("1")
|
||||
.task_name("碟盘限位送空托盘")
|
||||
.task_status(TaskStatusEnum.SURE_START.getCode())
|
||||
.point_code1(point_code1)
|
||||
.vehicle_code(form.getString("vehicle_code"))
|
||||
.vehicle_qty(form.getInteger("vehicle_qty"))
|
||||
.handle_class(THIS_CLASS)
|
||||
.create_time(DateUtil.now())
|
||||
.build();
|
||||
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
|
||||
taskTab.insert(json);
|
||||
// this.findNextPoint();
|
||||
this.immediateNotifyAcs();
|
||||
return String.valueOf(dto.getTask_id());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void findNextPoint() {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
|
||||
JSONArray taskArry = taskTab.query("task_status='" + TaskStatusEnum.SURE_START.getCode() + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0);
|
||||
for (int i = 0; i < taskArry.size(); i++) {
|
||||
JSONObject taskObj = taskArry.getJSONObject(i);
|
||||
String task_id = taskObj.getString("task_id");
|
||||
// 更新点位
|
||||
// JSONArray jsonArray = WQL.getWO("QSCH_yqxSendMaterial_01").addParam("flag", "2").process().getResultJSONArray(0);
|
||||
// PointUpdateUtil.updatePoint(jsonArray);
|
||||
// 判断楼上是否有送下来得任务 ???
|
||||
// 1、找到货梯货位
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("flag", "1");
|
||||
JSONObject endPoint = WQL.getWO("QSCH_yqxSendMaterial_01").addParamMap(param).process().uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(endPoint)) {
|
||||
taskObj.put("remark", "电梯无可用点");
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
} else { // 找到对应的货梯单位
|
||||
// 锁定所有当前货梯
|
||||
String pointCode = endPoint.getString("point_code");
|
||||
String allPre = pointCode.substring(0, 5);
|
||||
JSONObject param2 = new JSONObject();
|
||||
param2.put("lock_type", "2");
|
||||
param2.put("task_id", task_id);;
|
||||
pointTab.update(param2, "point_code like '" + allPre + "%' AND point_code <> '" + allPre + "'");
|
||||
|
||||
//修改任务状态
|
||||
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
taskObj.put("point_code2", pointCode);
|
||||
taskObj.put("remark", "");
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
}
|
||||
// 2、组盘
|
||||
GroupServiceImpl groupService = SpringContextHolder.getBean(GroupServiceImpl.class);
|
||||
JSONObject pa = new JSONObject();
|
||||
pa.put("qty", taskObj.getString("vehicle_qty"));
|
||||
pa.put("vehicle_code", taskObj.getString("vehicle_code"));
|
||||
JSONObject confirm = groupService.confirm(pa);
|
||||
if (confirm.getString("code").equals("0")) { // 组盘出错就给提示需要人工组盘
|
||||
// taskObj.put("remark", confirm.getString("desc") + ", 请人工组盘");
|
||||
// taskObj.put("update_time", DateUtil.now());
|
||||
throw new BadRequestException(confirm.getString("desc"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_id) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj))
|
||||
this.updateTaskStatus(taskObj,"2");
|
||||
else {
|
||||
throw new BadRequestException("未找到该任务或者任务已完成!");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_id) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj))
|
||||
this.updateTaskStatus(taskObj,"0");
|
||||
else {
|
||||
throw new BadRequestException("未找到该任务或者任务已完成!");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -280,11 +280,11 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
|
||||
// }
|
||||
// }
|
||||
// 为空就去养生A区
|
||||
JSONObject endPointObj = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'", "in_empty_seq desc").uniqueResult(0);
|
||||
String endPointCode = goToYSAQ(vehicle_type);
|
||||
// 判断是否有任务
|
||||
boolean is_point = this.isTask(endPointObj.getString("point_code"));
|
||||
boolean is_point = this.isTask(endPointCode);
|
||||
if (is_point) {
|
||||
end_code = endPointObj.getString("point_code");
|
||||
end_code = endPointCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -306,18 +306,55 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask {
|
||||
// }
|
||||
// }
|
||||
// 为空就去养生A区
|
||||
JSONObject endPointObj = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'", "in_empty_seq desc").uniqueResult(0);
|
||||
String endPointCode = goToYSAQ(vehicle_type);
|
||||
// 判断是否有任务
|
||||
boolean is_point = this.isTask(endPointObj.getString("point_code"));
|
||||
boolean is_point = this.isTask(endPointCode);
|
||||
if (is_point) {
|
||||
end_code = endPointObj.getString("point_code");
|
||||
end_code = endPointCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return end_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* 到养生A区寻找点位
|
||||
* @param vehicle_type
|
||||
* @return
|
||||
*/
|
||||
public String goToYSAQ(String vehicle_type) {
|
||||
String endPointCode = null;
|
||||
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表
|
||||
// 先找看看有没有放过托盘的
|
||||
JSONObject emptyObj = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "'" +
|
||||
" AND can_vehicle_type = '" + vehicle_type + "'" +
|
||||
" AND point_status = '2' AND is_used = '1' AND is_delete = '0'","block_num, row_num, in_empty_seq")
|
||||
.uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(emptyObj)) {
|
||||
// 如果存在则往下继续放
|
||||
Integer block_num = emptyObj.getInteger("block_num");
|
||||
Integer col_num = emptyObj.getInteger("col_num"); // 列
|
||||
Integer row_num = emptyObj.getInteger("row_num"); // 排
|
||||
// 因为找到的是对应相同的物料点,所以是下一个位置
|
||||
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "'" +
|
||||
" and row_num = '" + row_num + "'and col_num = '" + (col_num - 1) +"'" +
|
||||
" and lock_type = '1' and point_status = '1' and is_used = '1'" +
|
||||
" and is_delete = '0' and region_code = 'YSAQKTPQ01'")
|
||||
.uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(firstRow)) {
|
||||
endPointCode = firstRow.getString("point_code");
|
||||
}
|
||||
}
|
||||
if (ObjectUtil.isEmpty(emptyObj) || ObjectUtil.isEmpty(endPointCode)) {
|
||||
// 找一个空位
|
||||
JSONObject endPointObj = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId()
|
||||
+ "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' " +
|
||||
"and point_status = '1'", "block_num, row_num, in_empty_seq desc").uniqueResult(0);
|
||||
endPointCode = endPointObj.getString("point_code");
|
||||
}
|
||||
return endPointCode;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean isTask(String point_code) {
|
||||
/*
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
[交易说明]
|
||||
交易名: 手持呼叫送空托盘请求
|
||||
所属模块:
|
||||
功能简述:
|
||||
版权所有:
|
||||
表引用:
|
||||
版本经历:
|
||||
|
||||
[数据库]
|
||||
--指定数据库,为空采用默认值,默认为db.properties中列出的第一个库
|
||||
|
||||
[IO定义]
|
||||
#################################################
|
||||
## 表字段对应输入参数
|
||||
#################################################
|
||||
输入.flag TYPEAS s_string
|
||||
输入.region_code TYPEAS s_string
|
||||
输入.material_id TYPEAS s_string
|
||||
输入.vehicle_type TYPEAS s_string
|
||||
|
||||
|
||||
[临时表]
|
||||
--这边列出来的临时表就会在运行期动态创建
|
||||
|
||||
[临时变量]
|
||||
--所有中间过程变量均可在此处定义
|
||||
|
||||
[业务过程]
|
||||
|
||||
##########################################
|
||||
# 1、输入输出检查 #
|
||||
##########################################
|
||||
|
||||
|
||||
##########################################
|
||||
# 2、主过程前处理 #
|
||||
##########################################
|
||||
|
||||
|
||||
##########################################
|
||||
# 3、业务主过程 #
|
||||
##########################################
|
||||
|
||||
IF 输入.flag = "1"
|
||||
QUERY
|
||||
SELECT
|
||||
p.point_id,
|
||||
p.point_code,
|
||||
p.point_name
|
||||
FROM
|
||||
SCH_BASE_Point p
|
||||
WHERE
|
||||
lock_type = '1'
|
||||
AND is_used = '1'
|
||||
AND is_delete = '0'
|
||||
AND point_status = '1'
|
||||
and (point_code = 'SSX01B1' or point_code = 'SSX02B1')
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
@@ -224,7 +224,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
|
||||
Integer col_num = json1.getInteger("col_num"); // 列
|
||||
Integer row_num = json1.getInteger("row_num"); // 排
|
||||
// 因为找到的是对应相同的物料点,所以是下一个位置
|
||||
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "'and col_num = '" + (col_num - 1) +"' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0'").uniqueResult(0);
|
||||
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "'and col_num = '" + (col_num - 1) +"' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0' and region_code = 'YSQA01'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(firstRow)) {
|
||||
taskObj.put("point_code2", firstRow.getString("point_code"));
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
@@ -264,7 +264,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
|
||||
Integer block_num = json2.getInteger("block_num");
|
||||
Integer row_num = json2.getInteger("row_num");
|
||||
Integer sum = json2.getInteger("sum");
|
||||
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0'", "col_num desc").uniqueResult(0); // and col_num = '" + sum + "'
|
||||
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0' and region_code = 'YSQA01'", "col_num desc").uniqueResult(0); // and col_num = '" + sum + "'
|
||||
taskObj.put("point_code2", firstRow.getString("point_code"));
|
||||
//二楼普通任务
|
||||
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
|
||||
@@ -0,0 +1,259 @@
|
||||
package org.nl.wms.sch.tasks.sendMaterial;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.log.LokiLogType;
|
||||
import org.nl.wms.sch.SchTaskDto;
|
||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.nl.wms.sch.tasks.AcsTaskDto;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 货梯送料
|
||||
* @Date: 2023/6/1
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class HtSendMaterialTask extends AbstractAcsTask {
|
||||
private final String THIS_CLASS = HtSendMaterialTask.class.getName();
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
/*
|
||||
* 下发给ACS时需要特殊处理
|
||||
*/
|
||||
JSONArray arr = taskTab.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
|
||||
|
||||
ArrayList<AcsTaskDto> acsTaskArr = new ArrayList<>();
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JSONObject json = arr.getJSONObject(i);
|
||||
|
||||
//养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1)
|
||||
String point_code = json.getString("point_code2");
|
||||
String newPoint = point_code.substring(0, 4) + "1" + point_code.substring(4, 10);
|
||||
|
||||
AcsTaskDto dto = AcsTaskDto.builder()
|
||||
.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(newPoint)
|
||||
.vehicle_code(json.getString("vehicle_code"))
|
||||
.vehicle_type(json.getString("vehicle_type"))
|
||||
.priority(json.getString("priority"))
|
||||
.remark(json.getString("remark"))
|
||||
.build();
|
||||
acsTaskArr.add(dto);
|
||||
}
|
||||
return acsTaskArr;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject task, String status) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
String task_id = task.getString("task_id");
|
||||
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
String point_code2 = taskObj.getString("point_code2");
|
||||
JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
|
||||
//任务取消
|
||||
if (StrUtil.equals(status, "0")) {
|
||||
// 取消删除任务
|
||||
if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
|
||||
throw new BadRequestException("已完成不能取消!");
|
||||
}
|
||||
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
taskObj.put("remark", "已取消");
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
if (ObjectUtil.isEmpty(endPoint)) return;
|
||||
endPoint.put("lock_type", "1");
|
||||
endPoint.put("update_time", DateUtil.now());
|
||||
pointTab.update(endPoint);
|
||||
}
|
||||
|
||||
if ("1".equals(status)) {
|
||||
// 更新任务状态为执行中
|
||||
taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("car_no", taskObj.getString("car_no"));
|
||||
taskTab.update(taskObj);
|
||||
}
|
||||
|
||||
if (StrUtil.equals(status, "2")) {
|
||||
//完成后入库
|
||||
if (ObjectUtil.isNotEmpty(endPoint)) {
|
||||
// 点位解锁
|
||||
endPoint.put("lock_type", "1");
|
||||
endPoint.put("point_status", "3");
|
||||
endPoint.put("material_id", taskObj.getString("material_id"));
|
||||
endPoint.put("ivt_qty", taskObj.getString("material_qty"));
|
||||
endPoint.put("instorage_time", DateUtil.now());
|
||||
endPoint.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
|
||||
endPoint.put("vehicle_code", taskObj.getString("vehicle_code"));
|
||||
endPoint.put("vehicle_type", taskObj.getString("vehicle_type"));
|
||||
endPoint.put("vehicle_qty", taskObj.getString("vehicle_qty"));
|
||||
endPoint.put("update_time", DateUtil.now());
|
||||
pointTab.update(endPoint);
|
||||
}
|
||||
|
||||
// 更改任务状态为完成
|
||||
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("remark", "任务执行完成");
|
||||
taskTab.update(taskObj);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject form) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
String startPointCode = form.getString("point_code1");
|
||||
String taskId = form.getString("task_id");
|
||||
String vehicleCode = form.getString("vehicle_code");
|
||||
//判断当前点是否有未完成的任务
|
||||
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + startPointCode + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + startPointCode + "存在未完成的任务");
|
||||
JSONObject task = taskTab.query("task_id = '" + taskId + "'").uniqueResult(0);
|
||||
// 创建任务
|
||||
SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId())
|
||||
.task_code(CodeUtil.getNewCode("TASK_CODE"))
|
||||
.task_type("")
|
||||
.acs_task_type("1")
|
||||
.task_name("货梯物料入库")
|
||||
.task_status(TaskStatusEnum.SURE_START.getCode())
|
||||
.point_code1(startPointCode)
|
||||
.priority("1")
|
||||
.material_id(task.getLong("material_id"))
|
||||
.vehicle_type(task.getString("vehicle_type"))
|
||||
.vehicle_code(vehicleCode)
|
||||
.vehicle_qty(1)
|
||||
.material_qty(task.getString("material_qty"))
|
||||
.handle_class(THIS_CLASS)
|
||||
.create_time(DateUtil.now())
|
||||
.build();
|
||||
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
|
||||
taskTab.insert(json);
|
||||
this.immediateNotifyAcs();
|
||||
return String.valueOf(dto.getTask_id());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void findNextPoint() {
|
||||
// 养生B区寻找一个货位
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
//点位基础表【SCH_BASE_Point】
|
||||
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
|
||||
JSONArray taskArr = taskTab.query("task_status='" + TaskStatusEnum.SURE_START.getCode() + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0);
|
||||
for (int i = 0; i < taskArr.size(); i++) {
|
||||
JSONObject taskObj = taskArr.getJSONObject(i);
|
||||
String material_id = taskObj.getString("material_id");
|
||||
String vehicle_type = taskObj.getString("vehicle_type");
|
||||
String reminder = "";
|
||||
//1、查找库区类是否有响应的载具类型和对应的物料
|
||||
// json1: 对应相同物料的点位
|
||||
JSONObject param1 = new JSONObject();
|
||||
param1.put("flag", "1");
|
||||
param1.put("material_id", material_id);
|
||||
param1.put("region_code", "YSQB01");
|
||||
param1.put("vehicle_type", vehicle_type );
|
||||
JSONObject json1 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param1).process().uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(json1)) { // json1: 对应相同物料的点位
|
||||
Integer block_num = json1.getInteger("block_num");
|
||||
Integer col_num = json1.getInteger("col_num"); // 列
|
||||
Integer row_num = json1.getInteger("row_num"); // 排
|
||||
// 因为找到的是对应相同的物料点,所以是下一个位置
|
||||
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "'and col_num = '" + (col_num - 1) +"' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0' and region_code = 'YSQB01'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(firstRow)) {
|
||||
taskObj.put("point_code2", firstRow.getString("point_code"));
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("remark", "");
|
||||
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
//一楼普通任务
|
||||
taskTab.update(taskObj);
|
||||
//锁住相关货位
|
||||
JSONObject point = new JSONObject();
|
||||
point.put("lock_type", "2");
|
||||
pointTab.update(point, "point_code = '" + firstRow.getString("point_code") + "'");
|
||||
continue;
|
||||
}
|
||||
MDC.put("log_file_type", LokiLogType.DEFAULT.getDesc());
|
||||
log.info("异常日志:" + "第" + block_num + "块" + row_num + "排" + (col_num - 1) + "列被锁,重新安排一排.");
|
||||
// 下一列被锁住,给提示
|
||||
reminder = "第" + block_num + "块" + row_num + "排" + (col_num - 1) + "列被锁,重新安排一排.";
|
||||
}
|
||||
//找空位入: 物料点查找在第一列或者是没有找到物料点
|
||||
JSONObject param2 = new JSONObject();
|
||||
param2.put("flag", "2");
|
||||
param2.put("region_code", "YSQB01");
|
||||
param2.put("vehicle_type",vehicle_type);
|
||||
//1、查找整列为空的货位
|
||||
JSONObject json2 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param2).process().uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(json2)) {
|
||||
taskObj.put("remark", ObjectUtil.isNotEmpty(reminder) ? reminder : "养生A区无可用货位");
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
} else {
|
||||
Integer block_num = json2.getInteger("block_num");
|
||||
Integer row_num = json2.getInteger("row_num");
|
||||
Integer sum = json2.getInteger("sum");
|
||||
JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0' and region_code = 'YSQB01'", "col_num desc").uniqueResult(0); // and col_num = '" + sum + "'
|
||||
taskObj.put("point_code2", firstRow.getString("point_code"));
|
||||
//一楼普通任务
|
||||
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
taskObj.put("remark", ObjectUtil.isNotEmpty(reminder) ? reminder : "");
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
//锁住相关货位
|
||||
JSONObject point = new JSONObject();
|
||||
point.put("lock_type", "2");
|
||||
pointTab.update(point, "point_code = '" + firstRow.getString("point_code") + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_id) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status < " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj)) {
|
||||
this.updateTaskStatus(taskObj, "2");
|
||||
} else {
|
||||
throw new BadRequestException("任务已删除或者已完成!");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void cancel(String task_id) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj)) {
|
||||
this.updateTaskStatus(taskObj, "0");
|
||||
} else {
|
||||
throw new BadRequestException("任务已完成不能取消!");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -54,13 +54,7 @@ public class YqxSendMaterialTask extends AbstractAcsTask {
|
||||
|
||||
if (StrUtil.equals(status, "0")) {
|
||||
//取消任务,释放相关点位的锁
|
||||
// String point_code1 = jsonTask.getString("point_code1");
|
||||
String point_code2 = jsonTask.getString("point_code2");
|
||||
// JSONObject param = new JSONObject();
|
||||
// param.put("lock_type", "1");
|
||||
// param.put("task_id", "");
|
||||
// pointTab.update(param, "point_code = '" + point_code1 + "'");
|
||||
// pointTab.update(param, "point_code = '" + point_code2 + "'");
|
||||
if (ObjectUtil.isNotEmpty(point_code2)) {
|
||||
// 锁定所有当前货梯
|
||||
String allPre = point_code2.substring(0, 5);
|
||||
@@ -91,7 +85,6 @@ public class YqxSendMaterialTask extends AbstractAcsTask {
|
||||
taskTab.update(jsonTask);
|
||||
|
||||
//取消任务,释放相关点位的锁
|
||||
// String point_code1 = jsonTask.getString("point_code1");
|
||||
String point_code2 = jsonTask.getString("point_code2");
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("lock_type", "1");
|
||||
@@ -106,9 +99,6 @@ public class YqxSendMaterialTask extends AbstractAcsTask {
|
||||
"AND point_code <> '" + allPre + "' " +
|
||||
"AND point_code <> '" + point_code2 + "'");
|
||||
}
|
||||
|
||||
// pointTab.update(param, "point_code = '" + point_code1 + "'");
|
||||
|
||||
param.put("point_status", "3");
|
||||
pointTab.update(param, "point_code = '" + point_code2 + "'");
|
||||
}
|
||||
@@ -143,7 +133,7 @@ public class YqxSendMaterialTask extends AbstractAcsTask {
|
||||
String allPre = pointCode.substring(0, 5);
|
||||
JSONObject param2 = new JSONObject();
|
||||
param2.put("lock_type", "2");
|
||||
param2.put("task_id", task_id);;
|
||||
param2.put("task_id", task_id);
|
||||
pointTab.update(param2, "point_code like '" + allPre + "%' AND point_code <> '" + allPre + "'");
|
||||
|
||||
//修改任务状态
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
p.row_num
|
||||
FROM
|
||||
SCH_BASE_Point p
|
||||
where
|
||||
WHERE
|
||||
p.is_used = '1'
|
||||
AND is_delete = '0'
|
||||
AND lock_type = '1'
|
||||
@@ -67,8 +67,33 @@
|
||||
OPTION 输入.vehicle_type <> ""
|
||||
p.can_vehicle_type like "%" 输入.vehicle_type "%"
|
||||
ENDOPTION
|
||||
AND '3' <> (SELECT p2.point_status FROM SCH_BASE_Point p2 WHERE p2.block_num = p.block_num AND p2.row_num = p.row_num
|
||||
AND p2.col_num = (SELECT MIN(p3.col_num) FROM SCH_BASE_Point p3 WHERE p3.block_num = p2.block_num AND p3.row_num = p2.row_num AND p3.is_used = '1' AND p3.is_delete = '0' AND p3.lock_type = '1'))
|
||||
AND '3' <> (
|
||||
SELECT
|
||||
p2.point_status
|
||||
FROM
|
||||
SCH_BASE_Point p2
|
||||
WHERE
|
||||
p2.block_num = p.block_num
|
||||
AND p2.row_num = p.row_num
|
||||
AND p2.col_num = (
|
||||
SELECT
|
||||
MIN( p3.col_num )
|
||||
FROM
|
||||
SCH_BASE_Point p3
|
||||
WHERE
|
||||
p3.block_num = p2.block_num
|
||||
AND p3.row_num = p2.row_num
|
||||
AND p3.is_used = '1'
|
||||
AND p3.is_delete = '0'
|
||||
AND p3.lock_type = '1'
|
||||
OPTION 输入.region_code <> ""
|
||||
p3.region_code = 输入.region_code
|
||||
ENDOPTION
|
||||
)
|
||||
OPTION 输入.region_code <> ""
|
||||
p2.region_code = 输入.region_code
|
||||
ENDOPTION
|
||||
)
|
||||
ORDER BY block_num,row_num,col_num
|
||||
FOR UPDATE
|
||||
ENDSELECT
|
||||
@@ -76,39 +101,43 @@
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "2"
|
||||
QUERY
|
||||
SELECT
|
||||
p.block_num,
|
||||
p.row_num,
|
||||
COUNT(*) AS sum
|
||||
FROM
|
||||
SCH_BASE_Point p
|
||||
WHERE
|
||||
p.is_delete = '0'
|
||||
AND p.is_used = '1'
|
||||
AND p.region_code = 'YSQA01'
|
||||
AND p.point_status = '1'
|
||||
AND p.lock_type = '1'
|
||||
OPTION 输入.vehicle_type <> ""
|
||||
QUERY
|
||||
SELECT
|
||||
p.block_num,
|
||||
p.row_num,
|
||||
COUNT(*) AS sum
|
||||
FROM
|
||||
SCH_BASE_Point p
|
||||
WHERE
|
||||
p.is_delete = '0'
|
||||
AND p.is_used = '1'
|
||||
AND p.point_status = '1'
|
||||
AND p.lock_type = '1'
|
||||
OPTION 输入.vehicle_type <> ""
|
||||
p.can_vehicle_type like "%" 输入.vehicle_type "%"
|
||||
ENDOPTION
|
||||
GROUP BY p.block_num, p.row_num
|
||||
HAVING sum = (
|
||||
SELECT
|
||||
COUNT(*) AS s
|
||||
FROM
|
||||
sch_base_point p2
|
||||
WHERE
|
||||
p2.region_code = 'YSQA01'
|
||||
AND p.block_num = p2.block_num
|
||||
AND p.row_num = p2.row_num
|
||||
AND p2.is_used = '1'
|
||||
AND p2.is_delete = '0'
|
||||
)
|
||||
ORDER BY p.block_num, p.row_num
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
ENDOPTION
|
||||
OPTION 输入.region_code <> ""
|
||||
p.region_code = 输入.region_code
|
||||
ENDOPTION
|
||||
GROUP BY p.block_num, p.row_num
|
||||
HAVING sum = (
|
||||
SELECT
|
||||
COUNT(*) AS s
|
||||
FROM
|
||||
sch_base_point p2
|
||||
WHERE
|
||||
p.block_num = p2.block_num
|
||||
AND p.row_num = p2.row_num
|
||||
AND p2.is_used = '1'
|
||||
AND p2.is_delete = '0'
|
||||
OPTION 输入.region_code <> ""
|
||||
p2.region_code = 输入.region_code
|
||||
ENDOPTION
|
||||
)
|
||||
ORDER BY p.block_num, p.row_num
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
FROM
|
||||
SCH_BASE_Point p
|
||||
WHERE
|
||||
region_code = 'SSX01'
|
||||
region_code IN ('SSX01', 'SSX02')
|
||||
and point_code <>'SSX01'
|
||||
and point_code <>'SSX02'
|
||||
ENDSELECT
|
||||
|
||||
Reference in New Issue
Block a user