rev:新增表处相关逻辑和任务类

This commit is contained in:
2024-01-17 17:34:06 +08:00
parent 1473ba1a72
commit 1e96343e7e
5 changed files with 396 additions and 12 deletions

View File

@@ -0,0 +1,251 @@
package org.nl.b_lms.sch.tasks;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
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.common.utils.SecurityUtils;
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.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.tasks.CutConveyorTask;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/***
* @Auther:Zhouz
* @Date:2024/1/17
* @Description:裹膜区和表处区之间的任务创建
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class ProcessTask extends AbstractAcsTask {
private final String THIS_CLASS = ProcessTask.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);
String product_area = json.getString("product_area");
String agv_system_type = "2";
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"))
.start_device_code2(json.getString("point_code3"))
.next_device_code2(json.getString("point_code4"))
.vehicle_code(json.getString("vehicle_code"))
.agv_system_type(agv_system_type)
.priority(json.getString("priority"))
.remark(json.getString("remark"))
.product_area(product_area)
.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 ivtTab = WQLObject.getWQLObject("ST_IVT_CoolPointIvt"); // 冷却区库存表
WQLObject coolTab = WQLObject.getWQLObject("ST_IVT_CoolRegionIO"); // 冷却区出入表
WQLObject stTab = WQLObject.getWQLObject("st_ivt_stpointivt"); // 生箔区域点位表
String task_id = taskObj.getString("task_id");
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
if (StrUtil.equals(status, "0")) {
// 更新删除字段
jsonTask.put("is_delete", "1");
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
}
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
// 更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
// 更改任务状态为完成
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
jsonTask.put("update_optid", SecurityUtils.getCurrentUserId());
jsonTask.put("update_optname", SecurityUtils.getCurrentUsername());
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
String point_code1 = jsonTask.getString("point_code1");
String point_code2 = jsonTask.getString("point_code2");
String point_code4 = jsonTask.getString("point_code4");
String task_type = jsonTask.getString("task_type");
if ("010701".equals(task_type)) {
//维护冷却区满轴点位的库存
JSONObject cool_jo1 = ivtTab.query("full_point_code = '" + point_code1 + "'").uniqueResult(0);
String container_name = cool_jo1.getString("container_name");
String full_vehicle_code = cool_jo1.getString("full_vehicle_code");
HashMap map = new HashMap();
map.put("container_name", "");
map.put("full_vehicle_code", "");
ivtTab.update(map, "full_point_code = '" + point_code1 + "'");
//维护表处区点位
JSONObject st_jo1 = stTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
String empty_vehicle_code = st_jo1.getString("up_scroll");
HashMap map2 = new HashMap();
map2.put("up_scroll", full_vehicle_code);
map2.put("up_pcsn", container_name);
stTab.update(map2, "point_code = '" + point_code2 + "'").uniqueResult(0);
//维护冷却区空轴点位的库存
HashMap map3 = new HashMap();
map3.put("empty_vehicle_code", empty_vehicle_code);
ivtTab.update(map3, "empty_point_code = '" + point_code4 + "'");
}
if ("010702".equals(task_type)) {
//维护冷却区满轴点位的库存
JSONObject cool_jo1 = ivtTab.query("full_point_code = '" + point_code1 + "'").uniqueResult(0);
String container_name = cool_jo1.getString("container_name");
String full_vehicle_code = cool_jo1.getString("full_vehicle_code");
HashMap map = new HashMap();
map.put("container_name", "");
map.put("full_vehicle_code", "");
ivtTab.update(map, "full_point_code = '" + point_code1 + "'");
//维护表处区点位
HashMap map2 = new HashMap();
map2.put("up_scroll", full_vehicle_code);
map2.put("up_pcsn", container_name);
stTab.update(map2, "point_code = '" + point_code2 + "'").uniqueResult(0);
}
if ("010703".equals(task_type)) {
//维护表处区点位
JSONObject st_jo1 = stTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
String empty_vehicle_code = st_jo1.getString("up_scroll");
HashMap map1 = new HashMap();
map1.put("up_scroll", "");
map1.put("up_pcsn", "");
stTab.update(map1, "point_code = '" + point_code1 + "'").uniqueResult(0);
//维护冷却区空轴点位的库存
HashMap map3 = new HashMap();
map3.put("empty_vehicle_code", empty_vehicle_code);
ivtTab.update(map3, "empty_point_code = '" + point_code2 + "'");
}
if ("010704".equals(task_type)) {
//维护表处区点位
JSONObject st_jo1 = stTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
String full_vehicle_code = st_jo1.getString("up_scroll");
String container_name = st_jo1.getString("up_pcsn");
HashMap map1 = new HashMap();
map1.put("up_scroll", "");
map1.put("up_pcsn", "");
stTab.update(map1, "point_code = '" + point_code1 + "'").uniqueResult(0);
//维护冷却区空轴点位的库存
HashMap map3 = new HashMap();
map3.put("full_vehicle_code", full_vehicle_code);
map3.put("container_name", container_name);
ivtTab.update(map3, "full_point_code = '" + point_code2 + "'");
}
}
}
@Override
public void findStartPoint() {
}
@Override
public void findNextPoint() {
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
WQLObject tab = WQLObject.getWQLObject("SCH_BASE_Task");
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
CutConveyorTask cutConveyorTask = new CutConveyorTask();
String point_code1 = form.getString("point_code1");
String point_code2 = form.getString("point_code2");
String point_code3 = form.getString("point_code3");
String point_code4 = form.getString("point_code4");
if (cutConveyorTask.isSingleTask(point_code1)) {
throw new BadRequestException("点位:" + point_code1 + "存在未完成的任务!");
}
if (cutConveyorTask.isSingleTask(point_code2)) {
throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!");
}
if (cutConveyorTask.isSingleTask(point_code3)) {
throw new BadRequestException("点位:" + point_code3 + "存在未完成的任务!");
}
if (cutConveyorTask.isSingleTask(point_code4)) {
throw new BadRequestException("点位:" + point_code4 + "存在未完成的任务!");
}
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_status", TaskStatusEnum.START_AND_POINT.getCode());
json.put("material_code", form.getString("material_code"));
json.put("vehicle_code", form.getString("vehicle_code"));
json.put("point_code1", form.getString("point_code1"));
json.put("point_code2", form.getString("point_code2"));
json.put("point_code3", form.getString("point_code3"));
json.put("point_code4", form.getString("point_code4"));
json.put("task_type", form.getString("task_type"));
json.put("product_area", form.getString("product_area"));
json.put("handle_class", THIS_CLASS);
json.put("sort_seq", "1");
json.put("create_id", currentUserId);
json.put("create_name", currentUsername);
json.put("create_time", DateUtil.now());
json.put("acs_task_type", "1");
tab.insert(json);
this.immediateNotifyAcs(json.getString("task_id"));
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, "0");
}
}

View File

@@ -24,7 +24,6 @@ public class MesToLmsController {
@PostMapping("/momRollFoilStart")
@Log("母卷批次创建信息发送智能物流MES生箔工序Move In")
@SaIgnore
public ResponseEntity<Object> momRollFoilStart(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.momRollFoilStart(jo), HttpStatus.OK);
@@ -32,7 +31,6 @@ public class MesToLmsController {
@PostMapping("momRollFoilWeighing")
@Log("MES获取AGV称重信息")
@SaIgnore
public ResponseEntity<Object> momRollFoilWeighing(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.momRollFoilWeighing(jo), HttpStatus.OK);
@@ -40,7 +38,6 @@ public class MesToLmsController {
@PostMapping("/momRollFoilComplete")
@Log("MES执行下卷动作告诉LMS")
@SaIgnore
public ResponseEntity<Object> momRollFoilComplete(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.momRollFoilComplete(jo), HttpStatus.OK);
@@ -48,7 +45,6 @@ public class MesToLmsController {
@PostMapping("/momRollBakeNextSpecTransfer")
@Log("MES下达烘箱温度和时间配方给智能物流(MES 包装防护工序Move Out)")
@SaIgnore
public ResponseEntity<Object> momRollBakeNextSpecTransfer(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.momRollBakeNextSpecTransfer(jo), HttpStatus.OK);
@@ -56,7 +52,6 @@ public class MesToLmsController {
@PostMapping("/cutPlanTransfer")
@Log("分切包装段:分切计划(单表,包含母卷/改制子卷-包装箱号、空包装箱物料、纸筒/FRP管MES下发智能物流")
@SaIgnore
public ResponseEntity<Object> cutPlanTransfer(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.cutPlanTransfer(jo), HttpStatus.OK);
@@ -64,7 +59,6 @@ public class MesToLmsController {
@PostMapping("/callNextAssAndMomRoll")
@Log("分切即将完成,呼叫配送下一个母卷/改制子卷MES传智能物流")
@SaIgnore
public ResponseEntity<Object> callNextAssAndMomRoll(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.callNextAssAndMomRoll(jo), HttpStatus.OK);
@@ -72,7 +66,6 @@ public class MesToLmsController {
@PostMapping("/childRollCutStartComp")
@Log("当母卷开始分切时MES系统会将对应的子卷进站信息发送给只能物流系统一方面物流系统可以预估下个母卷的送达时间也可以闭环期分切计划指令")
@SaIgnore
public ResponseEntity<Object> childRollCutStartComp(@RequestBody JSONArray ja) {
return new ResponseEntity<>(mesToLmsService.childRollCutStartComp(ja), HttpStatus.OK);
@@ -80,7 +73,6 @@ public class MesToLmsController {
@PostMapping("/childRollPackComplete")
@Log("包装完成传智能物流包装箱与子卷关系及子卷属性值LMS执行入库")
@SaIgnore
public ResponseEntity<Object> childRollPackComplete(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.childRollPackComplete(jo), HttpStatus.OK);
@@ -88,7 +80,6 @@ public class MesToLmsController {
@PostMapping("/inventoryTransferInfoSync")
@Log("转单指令在MES平台查看后更新信息发送LMS是否拆包、更新后的入库日期、是否更换外包装箱标签,LMS重打子卷标签、包装箱外标签")
@SaIgnore
public ResponseEntity<Object> inventoryTransferInfoSync(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.inventoryTransferInfoSync(jo), HttpStatus.OK);
@@ -96,7 +87,6 @@ public class MesToLmsController {
@PostMapping("/childRollInfoUpdate")
@Log("子卷信息更新:计划外需求有可能入库完成后ERP才回传计划外需求SalesOrder")
@SaIgnore
public ResponseEntity<Object> childRollInfoUpdate(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.childRollInfoUpdate(jo), HttpStatus.OK);
@@ -104,7 +94,6 @@ public class MesToLmsController {
@PostMapping("/cutPlanTransferCancel")
@Log("分切计划取消")
@SaIgnore
public ResponseEntity<Object> cutPlanTransferCancel(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.cutPlanTransferCancel(jo), HttpStatus.OK);
@@ -112,11 +101,17 @@ public class MesToLmsController {
@PostMapping("/sendAuditResult")
@Log("子卷审批结果")
@SaIgnore
public ResponseEntity<Object> sendAuditResult(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.sendAuditResult(jo), HttpStatus.OK);
}
@PostMapping("/sendProcessInfo")
@Log("表处母卷上料、下料接口")
@SaIgnore
public ResponseEntity<Object> sendProcessInfo(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.sendProcessInfo(jo), HttpStatus.OK);
}
}

View File

@@ -60,4 +60,6 @@ public interface MesToLmsService {
JSONObject cutPlanTransferCancel(JSONObject param);
JSONObject sendAuditResult(JSONObject param);
JSONObject sendProcessInfo(JSONObject param);
}

View File

@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.tasks.ProcessTask;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
@@ -1445,4 +1446,105 @@ public class MesToLmsServiceImpl implements MesToLmsService {
log.info("sendAuditResult接口输出参数为-------------------" + resultParam.toString());
return resultParam;
}
@Override
public JSONObject sendProcessInfo(JSONObject param) {
log.info("sendProcessInfo输入参数为-------------------" + param.toString());
WQLObject coolIvtTab = WQLObject.getWQLObject("ST_IVT_CoolPointIvt"); // 冷却区点位库存表
JSONObject resultParam = new JSONObject();
try {
String containerName = param.getString("ContainerName");
String ResourceName = param.getString("ResourceName");
String Type = param.getString("Type");
if (ObjectUtil.isEmpty(containerName)) {
throw new BadRequestException("传入的母卷号不能为空!");
}
if (ObjectUtil.isEmpty(ResourceName)) {
throw new BadRequestException("传入的设备号不能为空!");
}
if (ObjectUtil.isEmpty(Type)) {
throw new BadRequestException("传入的类型不能为空!");
}
JSONObject device_jo = WQLObject.getWQLObject("st_ivt_stpointivt").query("ext_code = '"+ResourceName+"'").uniqueResult(0);
if (ObjectUtil.isEmpty(device_jo)){
throw new BadRequestException("未查询到["+ResourceName+"]应的表处机设备!");
}
ProcessTask processTask = SpringContextHolder.getBean(ProcessTask.class);
//上料
if ("1".equals(Type)){
String up_scroll = device_jo.getString("up_scroll");
String up_pcsn = device_jo.getString("up_pcsn");
if (StrUtil.isNotEmpty(up_pcsn)){
throw new BadRequestException("LMS系统上【"+ResourceName+"】表处机上还存在母卷号,不能进行上料!");
}
//查询母卷所在点位
JSONObject jsonCoolIvt = coolIvtTab.query("container_name = '" + containerName + "' and full_point_status = '02' and cool_ivt_status <> '04'").uniqueResult(0);
JSONObject form = new JSONObject();
if (StrUtil.isEmpty(up_scroll)){
//取满放满
form.put("point_code1",jsonCoolIvt.getString("point_code"));
form.put("point_code2",device_jo.getString("point_code"));
form.put("task_type","010702");
form.put("material_code",jsonCoolIvt.getString("container_name"));
form.put("vehicle_code",jsonCoolIvt.getString("full_vehicle_code"));
form.put("product_area",device_jo.getString("product_area"));
}else {
//取满取空放满放空
form.put("point_code1",jsonCoolIvt.getString("full_point_code"));
form.put("point_code2",device_jo.getString("point_code"));
form.put("point_code3",device_jo.getString("point_code"));
//判断对应空轴点位是否为空,为空用当前点位,不为空查询其他点位
if (jsonCoolIvt.getString("empty_point_status").equals("01")){
form.put("point_code4",jsonCoolIvt.getString("empty_point_code"));
}else {
JSONObject map = new JSONObject();
map.put("flag", "6");
map.put("product_area", device_jo.getString("product_area"));
JSONObject jsonIvt = WQL.getWO("PDA_RAWFOIL_01").addParamMap(map).process().uniqueResult(0);
form.put("point_code4",jsonIvt.getString("empty_point_code"));
}
form.put("task_type","010701");
form.put("material_code",jsonCoolIvt.getString("container_name"));
form.put("vehicle_code",jsonCoolIvt.getString("full_vehicle_code"));
form.put("product_area",device_jo.getString("product_area"));
}
processTask.createTask(form);
}
//退料
if ("2".equals(Type)){
//取满取空放满放空
JSONObject form = new JSONObject();
JSONObject map = new JSONObject();
map.put("flag", "1");
map.put("product_area", device_jo.getString("product_area"));
JSONObject jsonIvt = WQL.getWO("PDA_RAWFOIL_01").addParamMap(map).process().uniqueResult(0);
form.put("point_code1",device_jo.getString("point_code"));
//寻找可用的冷却区满轴点位
form.put("point_code2",jsonIvt.getString("full_point_code"));
form.put("task_type","010704");
form.put("material_code",device_jo.getString("up_pcsn"));
form.put("vehicle_code",device_jo.getString("up_scroll"));
form.put("product_area",device_jo.getString("product_area"));
processTask.createTask(form);
}
resultParam.put("RTYPE", "S");
resultParam.put("Code", "0");
resultParam.put("RTMSG", "操作成功!");
} catch (Exception e) {
resultParam.put("RTYPE", "E");
resultParam.put("Code", "1");
resultParam.put("RTMSG", "操作失败!" + e.getMessage());
}
log.info("sendProcessInfo接口输出参数为-------------------" + resultParam.toString());
return resultParam;
}
}

View File

@@ -205,4 +205,38 @@
ENDPAGEQUERY
ENDIF
IF 输入.flag = "6"
QUERY
SELECT
ivt.*
FROM
ST_IVT_CoolPointIvt ivt
WHERE
ivt.empty_point_status = '01'
AND
ivt.is_used = '1'
AND NOT EXISTS (
SELECT
*
FROM
sch_base_task
WHERE
( point_code1 = ivt.full_point_code OR point_code4 = ivt.full_point_code )
AND task_status < '07'
AND is_delete = '0'
)
OPTION 输入.product_area <> ""
ivt.product_area = 输入.product_area
ENDOPTION
OPTION 输入.point_location <> ""
ivt.point_location = 输入.point_location
ENDOPTION
order by ivt.point_code ASC
ENDSELECT
ENDQUERY
ENDIF