代码更新

This commit is contained in:
ldj_willow
2022-10-19 17:15:30 +08:00
parent 4a602adf27
commit ffc0c80aa6
12 changed files with 173 additions and 290 deletions

View File

@@ -1,90 +0,0 @@
[交易说明]
交易名: 物料参数弹窗数据查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.material_id TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
QUERY
SELECT
m.*,
e.*,
c.class_name,
c.class_code,
u.unit_name
FROM
MD_ME_MaterialBase m
LEFT JOIN MD_ME_StockMaterialExt e ON m.material_id = e.material_id
LEFT JOIN MD_PB_ClassStandard c ON c.class_id = m.material_type_id
LEFT JOIN md_pb_measureunit u ON u.measure_unit_id = m.base_unit_id
WHERE
m.is_used = '1'
AND m.is_delete = '0'
OPTION 输入.material_id <> ""
m.material_id = 输入.material_id
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
m2.*,
e2.*,
c2.class_name,
c2.class_code,
u2.unit_name
FROM
MD_ME_MaterialBase m2
LEFT JOIN MD_ME_ProducMaterialExt e2 ON m2.material_id = e2.material_id
LEFT JOIN MD_PB_ClassStandard c2 ON c2.class_id = m2.material_type_id
LEFT JOIN md_pb_measureunit u2 ON u2.measure_unit_id = m2.base_unit_id
WHERE
m2.is_used = '1'
AND m2.is_delete = '0'
OPTION 输入.material_id <> ""
m2.material_id = 输入.material_id
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -30,8 +30,8 @@ public abstract class AbstractAcsTask {
*/
public List<AcsTaskDto> schedule() {
this.autoCreate();
this.findStartPoint(null);
this.findNextPoint(null);
this.findStartPoint();
this.findNextPoint();
return addTask();
}
@@ -77,7 +77,9 @@ public abstract class AbstractAcsTask {
* @created 2020年6月12日 下午6:01:30
*/
public abstract JSONObject findStartPoint(JSONObject param);
public void findStartPoint(){
}
/**
* @return
@@ -85,7 +87,9 @@ public abstract class AbstractAcsTask {
* @author ldjun
* @created 2020年6月12日 下午6:01:06
*/
public abstract JSONObject findNextPoint(JSONObject param);
public void findNextPoint(){
};
/**
* @param form 创建任务需要的参数

View File

@@ -4,13 +4,13 @@ package org.nl.wms.sch.manage;
* Task状态:00生成 ,01下发02、执行中03、完成
*/
public enum TaskStatusEnum {
CREATED("01", "生成"),
SURE_START("02", "确定起点"),
SURE_END("03", "确定终点"),
START_AND_POINT("04", "起点终点确认"),
ISSUE("05", "下发"),
EXECUTING("06", "执行中"),
FINISHED("07", "完成");
CREATED("1", "生成"),
SURE_START("2", "确定起点"),
SURE_END("3", "确定终点"),
START_AND_POINT("4", "起点终点确认"),
ISSUE("5", "下发"),
EXECUTING("6", "执行中"),
FINISHED("7", "完成");
private String name;
private String code;

View File

@@ -84,15 +84,7 @@ public class CallEmpVehicleTask extends AbstractAcsTask {
}
}
@Override
public JSONObject findStartPoint(JSONObject param) {
return null;
}
@Override
public JSONObject findNextPoint(JSONObject param) {
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)

View File

@@ -82,7 +82,7 @@ public class CallMaterialTask extends AbstractAcsTask {
}
@Override
public JSONObject findStartPoint(JSONObject data) {
public void findStartPoint() {
String task_status = TaskStatusEnum.SURE_START.getCode();
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONArray taskArry = taskTab.query("task_status='" + task_status + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0);
@@ -118,14 +118,10 @@ public class CallMaterialTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
}
return null;
}
@Override
public JSONObject findNextPoint(JSONObject param) {
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.NumberUtil;
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;
@@ -15,8 +16,6 @@ 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.pdm.service.DeviceService;
import org.nl.wms.pdm.service.dto.DeviceDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.PointService;
@@ -88,24 +87,53 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
}
@Override
public JSONObject findStartPoint(JSONObject param) {
return null;
}
public void findStartPoint() {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
JSONArray taskArr = taskTab.query("is_delete = '0' and handle_class = '" + this.THIS_CLASS + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").getResultJSONArray(0);
for (int i = 0; i < taskArr.size(); i++) {
// 创建任务
JSONObject jsonTask = taskArr.getJSONObject(i);
String vehicle_type = jsonTask.getString("vehicle_type");
//判断叠盘位是否有任务
JSONObject taskObj = taskTab.query("is_delete='0' and task_type='" + jsonTask.getString("gjxsqkp") + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) {
jsonTask.put("task_status", TaskStatusEnum.SURE_END.getCode());
jsonTask.put("point_code1", "");
} else {//叠盘架无执行中的AGV任务
//判断叠盘架是否有载具
JSONObject dpjPoint = pointTab.query("is_used ='1' and lock_type='00' and is_delete='0' and region_code='DPJQB01' and vehicle_qty >0 and can_vehicle_type like '%" + vehicle_type + "%'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(dpjPoint)) {
jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
jsonTask.put("point_code1", dpjPoint.getString("point_code"));
//锁住点位
dpjPoint.put("lock_type", "01");
pointTab.update(dpjPoint);
} else {//去缓存位和养生A区找
JSONObject whereParam = new JSONObject();
whereParam.put("flag", "1");
whereParam.put("vehicle_type", jsonTask.getString("vehicle_type"));
JSONObject outJsonObj = WQL.getWO("ST_VEHICLE_OUT_01").addParamMap(whereParam).process().uniqueResult(0);
jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
jsonTask.put("point_code1", outJsonObj.getString("point_code"));
//锁住点位
dpjPoint.put("lock_type", "01");
pointTab.update(outJsonObj);
}
}
}
@Override
public JSONObject findNextPoint(JSONObject param) {
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
String start_point_code = form.getString("point_code1");
String end_point_code = form.getString("point_code2");
String qty = form.getString("qty");
String vehicle_type = form.getString("vehicle_type");
// 终点不能为空
@@ -132,22 +160,11 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
//见基础分类表的任务分类
jsonTask.put("task_type", "gjxsqkp");
//判断叠盘位是否有任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)){
jsonTask.put("task_status", TaskStatusEnum.SURE_END);
jsonTask.put("point_code1", "");
}else {
// 锁定起点点位
JSONObject jsonPoint = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0);
jsonPoint.put("lock_type", "02");
pointTab.update(jsonPoint);
}
jsonTask.put("task_status", TaskStatusEnum.SURE_END.getCode());
jsonTask.put("point_code1", "");
taskTab.insert(jsonTask);
super.schedule();
return String.valueOf(task_id);
}
@@ -168,117 +185,4 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
}
@Transactional(rollbackFor = Exception.class)
public JSONObject findBeginPoint(JSONObject json) {
String point_code2 = json.getString("point_code2");
String vehicle_qty = json.getString("vehicle_qty");
if (ObjectUtil.isEmpty(point_code2)) throw new BadRequestException("终点不能为空");
if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region");
WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
// 根据终点区域判断优先的起点区域
JSONObject jsonPointEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonPointEnd)) throw new BadRequestException("终点点位不存在");
JSONObject jsonRegionEnd = regionTab.query("region_id ='" + jsonPointEnd.getString("region_id") + "'").uniqueResult(0);
// 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型
String device_code = point_code2.substring(0, point_code2.indexOf("_"));
DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class);
DeviceDto deviceDto = deviceBean.findByCode(device_code);
if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在");
JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在");
//当前设备所需要的载具类型
String vehicle_type = jsonOrder.getString("vehicle_type");
/*
* 空托盘出库任务:
* 1.叠盘架B区、养生A区 --> 共挤线 优先级1叠盘架B区 2养生A区
* 2.叠盘架A区、养生A区 --> 油漆线 优先级1叠盘架A区 2养生A区
*/
String point_code1 = "";
JSONObject map = new JSONObject();
if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.GJQY.getCode())) {
//1、判断是否有拆托盘任务。
taskTab.query("task_type= 'gjxsqkp' ");
//2、判断是否有到该叠盘位的堆叠任务。
//1、判断叠盘架B是否有对应类型的空载具
JSONObject jsonDpjB = pointTab.query("point_status ='2' and lock_type='00' and can_vehicle_type = '" + vehicle_type + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonDpjB)) {//没有则去空托盘缓存区B和养生A区找
}
// 共挤线呼叫空托盘业务查找叠盘架B区是否有满足条件的点位
map.put("flag", "1");
map.put("vehicle_qty", vehicle_qty);
map.put("vehicle_type", jsonOrder.getString("vehicle_type"));
map.put("region_code", RegionTypeEnum.DPJQB.getCode());
JSONObject jsonStartPointDPB = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonStartPointDPB)) {
point_code1 = jsonStartPointDPB.getString("point_code");
} else {
// 为空说明叠盘架B区没有则去养生A区找 : 只能找数量为1的空托盘
map.put("flag", "3");
map.put("region_code", RegionTypeEnum.YSQA.getCode());
JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonStartPointYSA)) {
point_code1 = jsonStartPointYSA.getString("point_code");
} else {
throw new BadRequestException("没有满足需求数量的点位");
/* // 如果没有则需要从养生区A区里找到 > 1的货位 出库到叠盘架B中
map.put("flag", "1");
map.put("region_code", RegionTypeEnum.YSQA.getCode());
// 起点
JSONObject jsonStart = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isEmpty(jsonStart)) throw new BadRequestException("没有满足需求数量的点位");
// 终点
JSONObject jsonEnd = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and point_status = '00' and lock_type = '00' and is_used = '1' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonEnd)) throw new BadRequestException("叠盘架B货位不足");
JSONObject parem = new JSONObject();
parem.put("point_code1",jsonStart.getString("point_code"));
parem.put("point_code2",jsonEnd.getString("point_code"));
parem.put("qty",jsonStart.getString("vehicle_qty"));
parem.put("vehicle_type",jsonStart.getString("vehicle_qty"));
String task_id = this.createTask(parem);
// 生成 叠盘架 -> 共挤线的任务 返回叠盘架B的点位code
point_code1 = jsonEnd.getString("point_code");*/
}
}
} else if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.YQQY.getCode())) {
// 油漆线呼叫空托盘业务查找叠盘架A区是否有满足条件的点位
map.put("flag", "1");
map.put("vehicle_qty", vehicle_qty);
map.put("vehicle_type", jsonOrder.getString("vehicle_type"));
map.put("region_code", RegionTypeEnum.DPJQA.getCode());
JSONObject jsonStartPointDPA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonStartPointDPA)) {
point_code1 = jsonStartPointDPA.getString("point_code");
} else {
// 为空说明叠盘架A区没有则去养生A区找
map.put("flag", "3");
map.put("region_code", RegionTypeEnum.YSQA.getCode());
JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isEmpty(jsonStartPointYSA)) throw new BadRequestException("没有满足需求数量的点位");
point_code1 = jsonStartPointYSA.getString("point_code");
}
}
JSONObject resuft = new JSONObject();
resuft.put("point_code1", point_code1);
resuft.put("vehicle_type", jsonOrder.getString("vehicle_type"));
return resuft;
}
}

View File

@@ -50,15 +50,6 @@ public class PointToPointTask extends AbstractAcsTask {
}
@Override
public JSONObject findStartPoint(JSONObject param) {
return null;
}
@Override
public JSONObject findNextPoint(JSONObject param) {
return null;
}
@Override

View File

@@ -102,15 +102,6 @@ public class SendEmpVehicleTask extends AbstractAcsTask {
}
}
@Override
public JSONObject findStartPoint(JSONObject param) {
return null;
}
@Override
public JSONObject findNextPoint(JSONObject param) {
return null;
}
@Override

View File

@@ -115,13 +115,7 @@ public class SendMaterialTask extends AbstractAcsTask {
}
@Override
public JSONObject findStartPoint(JSONObject param) {
return null;
}
@Override
public JSONObject findNextPoint(JSONObject data) {
public void findNextPoint() {
String task_status = TaskStatusEnum.SURE_START.getCode();
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONArray taskArry = taskTab.query("task_status='" + task_status + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0);
@@ -158,8 +152,6 @@ public class SendMaterialTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
}
return null;
}
@Override

View File

@@ -84,15 +84,6 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask {
}
}
@Override
public JSONObject findStartPoint(JSONObject param) {
return null;
}
@Override
public JSONObject findNextPoint(JSONObject param) {
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)

View File

@@ -0,0 +1,112 @@
[交易说明]
交易名: 空载具出库业务
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.vehicle_qty TYPEAS s_string
输入.vehicle_type TYPEAS s_string
输入.region_code 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
p.is_used = '1'
AND p.is_delete = '0'
AND p.lock_type = '00'
and region_code in ('DPJQB01','YSQA01')
OPTION 输入.vehicle_type <> ""
point.vehicle_type like 输入.vehicle_type
ENDOPTION
order by out_empty_seq,point.vehicle_qty
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
point.*
FROM
sch_base_point point
LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id
WHERE
point.lock_type = '00'
AND point.point_status = '01'
AND IFNULL(point.vehicle_qty,0) == 输入.vehicle_qty
OPTION 输入.region_code <> ""
region.region_code = 输入.region_code
ENDOPTION
OPTION 输入.vehicle_type <> ""
point.vehicle_type = 输入.vehicle_type
ENDOPTION
order by point.point_code DESC
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
point.*
FROM
sch_base_point point
LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id
WHERE
point.lock_type = '00'
AND point.point_status = '00'
OPTION 输入.region_code <> ""
region.region_code = 输入.region_code
ENDOPTION
order by point.point_code DESC
ENDSELECT
ENDQUERY
ENDIF