Merge remote-tracking branch 'origin/b_lms' into b_lms

# Conflicts:
#	lms/nladmin-system/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java
#	lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
This commit is contained in:
2024-02-26 14:24:07 +08:00
103 changed files with 8486 additions and 561 deletions

View File

@@ -29,12 +29,16 @@ public class AcsToWmsController {
@PostMapping("/status")
@Log(value = "ACS给WMS反馈任务状态", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> receiveTaskStatusAcs(@RequestBody String string) {
return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK);
}
@PostMapping("/orderFinish")
@Log(value = "ACS给WMS下发工单完成状态", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@@ -137,4 +141,34 @@ public class AcsToWmsController {
}
@PostMapping("/sendProductToFirstFloor")
@Log(value = "成品子卷到达一楼输送线", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> sendProductToFirstFloor(@RequestBody JSONObject json) {
return new ResponseEntity<>(acsToWmsService.sendProductToFirstFloor(json), HttpStatus.OK);
}
@PostMapping("/applyTwo")
@Log(value = "二期入库申请任务", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> applyTwo(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.applyTwo(whereJson), HttpStatus.OK);
}
@PostMapping("/applySendOutTwo")
@Log(value = "二期发货申请任务", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> applySendOutTwo(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.applySendOutTwo(whereJson), HttpStatus.OK);
}
@PostMapping("/deviceApplyTwo")
@Log(value = "二期发货申请捆扎、贴标", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> deviceApplyTwo(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.deviceApplyTwo(whereJson), HttpStatus.OK);
}
}

View File

@@ -79,6 +79,9 @@ public interface AcsToWmsService {
*/
JSONObject shipDeviceUpdate(JSONObject whereJson);
/**
* ACS客户端--->LMS服务端
* 输送线光电无货上报
@@ -105,4 +108,51 @@ public interface AcsToWmsService {
* 点位初始化
*/
void initPoint();
/**
* ACS客户端--->LMS服务端
* 成品子卷到达一楼输送线
*
* @param whereJson 条件
* @return JSONObject
*/
JSONObject sendProductToFirstFloor(JSONObject whereJson);
/**
* 二期入库任务申请
* @param whereJson {
* type任务类型1-成品入库任务 2-空盘入库 3-空盘出库 4-异常处理位)
* device_code设备号
* vehicle_code载具号
* material_barcode子卷编码a,b,c
* container_type托盘类型1-小托盘 2-大托盘)
*
* }
* @return JSONObject 反馈状态
*/
JSONObject applyTwo(JSONObject whereJson);
/**
* 二期发货申请任务
* @param whereJson {
* device_code: 设备号
* vehicle_code: 载具号
* }
* @return JSONObject 反馈状态
*/
JSONObject applySendOutTwo(JSONObject whereJson);
/**
* 二期申请捆扎、贴标
* @param whereJson {
* device_code: 设备号
* vehicle_code: 载具号
* type: 任务类型1-贴标 2-捆扎)
* }
* @return
*/
JSONObject deviceApplyTwo(JSONObject whereJson);
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.ext.acs.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
@@ -7,6 +8,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.google.common.collect.Interner;
import com.google.common.collect.Interners;
import lombok.RequiredArgsConstructor;
@@ -38,12 +40,15 @@ import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
@RequiredArgsConstructor
@Slf4j
@@ -66,6 +71,37 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private final ISysNoticeService noticeService;
/**
* 入库处理类服务
*/
private final InBussManageService inBussManageService;
/**
* 空载具入库处理服务
*/
private final InVehicleManageService inVehicleManageService;
/**
* 空载具出库处理服务
*/
private final OutVehicleManageService outVehicleManageService;
/**
* 发货处理服务
*/
private final SendOutManageService sendOutManageService;
@Resource
private IschBaseTaskService taskService;
@Resource
private IschBasePointService pointService;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private MzhcwTask mzhcwTask;
/**
* task_id任务标识
* task_code任务编码
@@ -1655,4 +1691,244 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
}
/**
* 成品子卷到达一楼输送线
*/
@Override
public JSONObject sendProductToFirstFloor(JSONObject whereJson) {
// JSONObject whereJson 应该传子卷号,设备号,车间号
// 先查询满轴缓存位是否有可用库位,有创建搬运任务
// 任务完成创建空载具补充到输送线桁架任务子卷搬运至待检区或或管制区agv任务
// 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
// 这个情况是有agv任务在搬去待检区或管制区的路上还没有更新任务状态需要查询是否有这种任务等这个任务更新完后
// 再补发之前创建的输送线到满轴缓存位任务;
log.info("sendProductToFirstFloor--------------------------" + whereJson.toString());
JSONObject result = new JSONObject();
if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) {
throw new BadRequestException("接口sendProductToFirstFloor任务号或子卷号参数为空");
}
//1.查询满轴缓存位是否有空位
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"))
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("")).orderByAsc(BstIvtPackageinfoivt::getSort_seq));
JSONObject jo = new JSONObject();
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
//todo 获取子卷号,子卷号就是载具号?
jo.put("vehicle_code", whereJson.getString("material_barcode"));
//2.创建输送线->满轴位桁架任务,
String point_code1 = whereJson.getString("device_code");
jo.put("point_code1", point_code1);
if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) {
//任意一个满轴缓存位为终点
jo.put("point_code2", bstIvtPackageinfoivtList.get(0).getPoint_code());
jo.put("is_send", true);
mzhcwTask.createTask(jo);
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
return result;
} else {
//3.满轴缓存位点位,查找正在搬运到待检区的任务
List<BstIvtPackageinfoivt> packageinfoivtList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位")));
//todo 查找正在起点为满轴缓存位点位,且执行中搬运到待检区或管制区的任务,如果有一个或多个,现场其实有多个车正在搬运过去
List<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//执行中
.nested(
r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))
.or().eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")))
.eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())
.and(
r -> r.in(SchBaseTask::getPoint_code1, packageinfoivtList)
));
//4.满轴缓存位无空闲库位,且无执行中搬运到待检区或管制区的任务,则报错!
if (CollectionUtils.isEmpty(taskList)) {
throw new BadRequestException("接口sendProductToFirstFloor满轴缓存位暂无空闲库位");
}
// 5.如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, point_code1)
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()));
//6.如果有就不创建,没有就创建
// 等这边空出来点位,也就是满轴位->待检区或管制区任务完成后,再补发;
if (CollectionUtils.isEmpty(existTaskList)) {
//暂时只确定起点,正在搬运的满轴位->待检区的点位,暂不作为终点
//jo.put("point_code2", taskList.get(0).getPoint_code1());
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo.put("is_send", false);
mzhcwTask.createTask(jo);
}
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
return result;
}
}
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public JSONObject applyTwo(JSONObject whereJson) {
log.info("applyTwo请求参数---------------------------------------------" + whereJson.toString());
JSONObject result = new JSONObject();
String type = whereJson.getString("type");
RLock lock = redissonClient.getLock("acs_to_wms_two_a:" + type);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
// 基础校验
if (ObjectUtil.isEmpty(whereJson.getString("device_code"))) {
throw new BadRequestException("设备不能为空!");
}
if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘入库")) || type.equals(IOSEnum.ACSTOLMS_TYPE.code("异常处理位"))) {
if (ObjectUtil.isEmpty(whereJson.getString("container_type"))) {
throw new BadRequestException("载具类型不能为空!");
}
if (ObjectUtil.isEmpty(whereJson.getString("vehicle_code"))) {
throw new BadRequestException("载具不能为空!");
}
}
// 1-成品入库任务
if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("成品入库任务"))) {
// 调用服务处理
if (ObjectUtil.isEmpty(whereJson.getString("material_barcode"))) {
throw new BadRequestException("子卷号不能为空!");
}
inBussManageService.inTask(whereJson);
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘入库"))) {
// 2-空盘入库
whereJson.put("vehicle_type", whereJson.getString("container_type"));
inVehicleManageService.inVehicle(whereJson);
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘出库"))) {
// 3-空盘出库
if (ObjectUtil.isEmpty(whereJson.getString("container_type"))) {
throw new BadRequestException("载具类型不能为空!");
}
whereJson.put("vehicle_type", whereJson.getString("container_type"));
outVehicleManageService.outVehicle(whereJson);
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("异常处理位"))) {
// 4-异常处理
JSONObject jsonTaskParam = new JSONObject();
jsonTaskParam.put("task_type", "010504");
jsonTaskParam.put("start_device_code", whereJson.getString("device_code"));
jsonTaskParam.put("next_device_code", "");
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
jsonTaskParam.put("vehicle_type", whereJson.getString("container_type"));
TwoEmpExcepTask taskBean = new TwoEmpExcepTask();
taskBean.createTask(jsonTaskParam);
}
result.put("status", HttpStatus.OK.value());
result.put("message", "下发成功!");
log.info("applyTwo返回参数---------------------------------------------" + result.toString());
return result;
}
} finally {
if (tryLock) {
lock.unlock();
}
}
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "申请任务超时!" + type);
log.info("applyTwo返回参数---------------------------------------------" + result.toString());
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject applySendOutTwo(JSONObject whereJson) {
log.info("applySendOutTwo输入参数---------------------------------------------" + whereJson.toString());
// 校验
if (ObjectUtil.isEmpty(whereJson.getString("device_code"))) {
throw new BadRequestException("设备号不能为空!");
}
if (ObjectUtil.isEmpty(whereJson.getString("vehicle_code"))) {
throw new BadRequestException("载具号不能为空!");
}
JSONObject result = new JSONObject();
try {
// 调用服务
sendOutManageService.createSendOutTask(whereJson);
result.put("status", HttpStatus.OK.value());
result.put("message", "下发成功!");
return result;
} catch (Exception e) {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", e.getMessage());
}
log.info("applySendOutTwo返回参数---------------------------------------------" + result.toString());
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public JSONObject deviceApplyTwo(JSONObject whereJson) {
log.info("deviceApplyTwo请求参数---------------------------------------------" + whereJson.toString());
JSONObject result = new JSONObject();
String type = whereJson.getString("type");
RLock lock = redissonClient.getLock("acs_to_wms_two_b:" + type);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
// 校验
if (ObjectUtil.isEmpty(whereJson.getString("device_code"))) {
throw new BadRequestException("设备号不能为空!");
}
if (ObjectUtil.isEmpty(whereJson.getString("vehicle_code"))) {
throw new BadRequestException("载具号不能为空!");
}
// 1-贴标
if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("贴标"))) {
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("贴标"))) {
// 2-捆扎
}
result.put("status", HttpStatus.OK.value());
result.put("message", "下发成功!");
log.info("deviceApplyTwo返回参数---------------------------------------------" + result.toString());
return result;
}
} finally {
if (tryLock) {
lock.unlock();
}
}
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "申请任务超时!" + type);
log.info("deviceApplyTwo返回参数---------------------------------------------" + result.toString());
return result;
}
}

View File

@@ -114,4 +114,12 @@ public class MesToLmsController {
}
@PostMapping("/sendTargetHouse")
@Log("MES传递给LMS入线边库或者入成品库")
@SaIgnore
public ResponseEntity<Object> sendTargetHouse(@RequestBody JSONObject jo) {
return new ResponseEntity<>(mesToLmsService.sendTargetHouse(jo), HttpStatus.OK);
}
}

View File

@@ -62,4 +62,12 @@ public interface MesToLmsService {
JSONObject sendAuditResult(JSONObject param);
JSONObject sendProcessInfo(JSONObject param);
/**
* MES传递给LMS入线边库或者入成品库
*/
JSONObject sendTargetHouse(JSONObject param);
}

View File

@@ -7,9 +7,17 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.tasks.ProcessTask;
import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask;
import org.nl.b_lms.sch.tasks.first_floor_area.GzqTask;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
@@ -28,8 +36,11 @@ import org.nl.wms.st.instor.service.impl.ProductScrapServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@@ -42,6 +53,15 @@ public class MesToLmsServiceImpl implements MesToLmsService {
private final InService inService;
@Resource
private DjqTask djqTask;
@Resource
private GzqTask gzqTask;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
/**
* 生箔烘箱:
* 母卷批次创建信息发送智能物流MES生箔工序Move In
@@ -1470,68 +1490,68 @@ public class MesToLmsServiceImpl implements MesToLmsService {
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+"]应的表处机设备!");
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)){
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+"】表处机上还存在母卷号,不能进行上料!");
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)){
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("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"));
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 {
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("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"));
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)){
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_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"));
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);
}
@@ -1547,4 +1567,68 @@ public class MesToLmsServiceImpl implements MesToLmsService {
log.info("sendProcessInfo接口输出参数为-------------------" + resultParam.toString());
return resultParam;
}
@Override
public JSONObject sendTargetHouse(JSONObject param) {
log.info("sendTargetHouse输入参数为-------------------" + param.toString());
JSONObject resultParam = new JSONObject();
try {
String containerName = param.getString("sconds");
String TargetHouse = param.getString("TargetHouse");
if (StringUtils.isBlank(containerName)) {
throw new BadRequestException("传入的母卷号不能为空!");
}
if (StringUtils.isBlank(TargetHouse)) {
throw new BadRequestException("传入的目标库不能为空!");
}
//待检区和管制区库位信息
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.in(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.POINT_STATUS.code("管制区"))
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
//子卷信息
BstIvtPackageinfoivt containerInfo =
bstIvtPackageinfoivtList.stream().filter(r -> r.getContainer_name().equals(containerName)).collect(Collectors.toList()).get(0);
JSONObject toDjqTask = new JSONObject();
toDjqTask.put("vehicle_code", containerName);
//0 管制区 1待检区
if ("0".equals(TargetHouse)) {
if (containerInfo.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区"))) {
List<BstIvtPackageinfoivt> djqList = bstIvtPackageinfoivtList.stream().filter(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区")) && r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code(""))).collect(Collectors.toList());
//待检区有空位,搬到待检区
if (CollectionUtils.isNotEmpty(djqList)) {
toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区"));
toDjqTask.put("point_code1", containerInfo.getPoint_code());
toDjqTask.put("point_code2", djqList.get(0).getPoint_code());
djqTask.createTask(toDjqTask);
}
}
} else if ("1".equals(TargetHouse)) {
if (containerInfo.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("管制区"))) {
List<BstIvtPackageinfoivt> gzqList = bstIvtPackageinfoivtList.stream().filter(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("管制区")) && r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code(""))).collect(Collectors.toList());
//管制区有空位
if (CollectionUtils.isNotEmpty(gzqList)) {
toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区"));
toDjqTask.put("point_code1", containerInfo.getPoint_code());
toDjqTask.put("point_code2", gzqList.get(0).getPoint_code());
gzqTask.createTask(toDjqTask);
}
}
}
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("sendTargetHouse接口输出参数为-------------------" + resultParam);
return resultParam;
}
}

View File

@@ -20,8 +20,12 @@ public enum RegionTypeEnum {
LKCK("17", "密集库出库输送线", "1585167595403874304"),
XN01("18", "虚拟区", "1586913215886004224"),
PD01("19", "盘点区", "1645705331612979200"),
TWO_ZZ01("20", "二期暂存区", ""),
TWO_TTP01("21", "二期空托盘区", "1750471797729529856");
TWO_ZZ01("20", "二期暂存区", "1760183596628447232"),
TWO_TTP01("21", "二期空托盘区", "1750471797729529856"),
TWO_MX01("22", "二期木箱区", "1752254266938101760"),
TWO_KZ01("23", "二期捆扎区", "1754774130626007040"),
TWO_FH01("24", "二期发货区", "1759453285649092608"),
TWO_OUT01("25", "二期出库区", "1760141408548818944");
private String name;
private String code;

View File

@@ -110,7 +110,6 @@ public abstract class AbstractAcsTask {
public JSONObject immediateNotifyAcs(String task_id) {
List<AcsTaskDto> taskList = this.schedule();
if (ObjectUtil.isNotEmpty(taskList)) {
JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList));
return AcsUtil.notifyAcs("api/wms/task", arr);
}

View File

@@ -1,6 +1,7 @@
package org.nl.wms.sch.manage;
public enum TaskStatusEnum {
CREATED("01", "生成"),
SURE_START("02", "确定起点"),
SURE_END("03", "确定终点"),

View File

@@ -85,71 +85,6 @@ public class CutTrussTask extends AbstractAcsTask {
String task_id = taskObj.getString("task_id");
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
if (StrUtil.equals(status, "0")) {
// 更新删除字段
jsonTask.put("is_delete", "1");
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
//桁架标准任务
if ("010403".equals(jsonTask.getString("task_type"))) {
//更新入站气涨轴的分切计划状态
JSONArray plan_jo = WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").query("qzzno = '" + jsonTask.getString("vehicle_code") + "' AND is_child_tz_ok = '1' AND is_child_ps_ok = '1' AND is_delete = '0' AND status IN ('04','05')").getResultJSONArray(0);
if (ObjectUtil.isEmpty(plan_jo)) {
throw new BadRequestException("未查询到气涨轴:" + jsonTask.getString("vehicle_code") + "状态为:入站中或入站完成的分切计划!");
}
for (int i = 0; i < plan_jo.size(); i++) {
JSONObject plan_row = plan_jo.getJSONObject(i);
plan_row.put("status", "03");
plan_row.put("end_time", DateUtil.now());
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(plan_row);
}
//更新出站气涨轴的分切计划状态
JSONArray plan_jo2 = WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").query("qzzno = '" + jsonTask.getString("vehicle_code2") + "' AND is_child_tz_ok = '1' AND is_child_ps_ok = '1' AND is_delete = '0' AND status = '06'").getResultJSONArray(0);
if (ObjectUtil.isEmpty(plan_jo2)) {
throw new BadRequestException("未查询到气涨轴:" + jsonTask.getString("vehicle_code2") + "状态为:出站中的分切计划!");
}
for (int i = 0; i < plan_jo2.size(); i++) {
JSONObject plan_row = plan_jo2.getJSONObject(i);
plan_row.put("status", "05");
plan_row.put("end_time", DateUtil.now());
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(plan_row);
}
}
//分切>输送线 子卷出站
if ("010404".equals(jsonTask.getString("task_type"))) {
if (!jsonTask.getString("vehicle_code").contains("废箔")) {
//更新出站气涨轴的分切计划状态
JSONArray plan_jo2 = WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").query("qzzno = '" + jsonTask.getString("vehicle_code") + "' AND is_child_tz_ok = '1' AND is_child_ps_ok = '1' AND is_delete = '0' AND status = '06'").getResultJSONArray(0);
if (ObjectUtil.isEmpty(plan_jo2)) {
throw new BadRequestException("未查询到气涨轴:" + jsonTask.getString("vehicle_code") + "状态为:出站中的分切计划!");
}
for (int i = 0; i < plan_jo2.size(); i++) {
JSONObject plan_row = plan_jo2.getJSONObject(i);
plan_row.put("status", "05");
plan_row.put("end_time", DateUtil.now());
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(plan_row);
}
}
}
//分切>输送线 子卷入站
if ("010405".equals(jsonTask.getString("task_type"))) {
//更新入站气涨轴的分切计划状态
JSONArray plan_jo = WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").query("qzzno = '" + jsonTask.getString("vehicle_code") + "' AND is_child_tz_ok = '1' AND is_child_ps_ok = '1' AND is_delete = '0' AND status IN ('04','05') ").getResultJSONArray(0);
if (ObjectUtil.isEmpty(plan_jo)) {
throw new BadRequestException("未查询到气涨轴:" + jsonTask.getString("vehicle_code") + "状态为:入站中或入站完成的分切计划!");
}
for (int i = 0; i < plan_jo.size(); i++) {
JSONObject plan_row = plan_jo.getJSONObject(i);
plan_row.put("status", "03");
plan_row.put("end_time", DateUtil.now());
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(plan_row);
}
}
}
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
// 更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
@@ -165,7 +100,6 @@ public class CutTrussTask extends AbstractAcsTask {
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
//桁架标准任务,双工位任务
if ("010403".equals(jsonTask.getString("task_type"))) {
//更新分切机对应位置的气涨轴
@@ -264,84 +198,6 @@ public class CutTrussTask extends AbstractAcsTask {
cutConveyorTask.createTask(form);
}
//子卷入站
if ("010405".equals(jsonTask.getString("task_type"))) {
//更新输送线的气涨轴编码
JSONObject delivery_point = WQLObject.getWQLObject("ST_IVT_DeliveryPointIvt").query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(delivery_point)) {
throw new BadRequestException("未查询到对应的输送线点位!");
}
delivery_point.put("qzzno", "");
delivery_point.put("point_status", "02");
WQLObject.getWQLObject("ST_IVT_DeliveryPointIvt").update(delivery_point);
//更新入站气涨轴的分切计划状态
JSONArray plan_jo = WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").query("qzzno = '" + jsonTask.getString("vehicle_code") + "' AND is_child_tz_ok = '1' AND is_child_ps_ok = '1' AND is_delete = '0' AND status IN ('04','05') ").getResultJSONArray(0);
if (ObjectUtil.isEmpty(plan_jo)) {
throw new BadRequestException("未查询到气涨轴:" + jsonTask.getString("vehicle_code") + "对应的分切计划!");
}
for (int i = 0; i < plan_jo.size(); i++) {
JSONObject plan_row = plan_jo.getJSONObject(i);
plan_row.put("status", "05");
plan_row.put("end_time", DateUtil.now());
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(plan_row);
}
//如果桁架任务执行完,右侧的输送线上存在气涨轴,则生成一个输送出的任务,防止左侧空载具挡住右侧气涨轴进行横移
log.debug("如果桁架任务执行完,缓存位的输送线上存在气涨轴,则对上料位的空载具生成一个输送出的任务");
char dtl_type = jsonTask.getString("point_code1").charAt(jsonTask.getString("point_code1").length() - 1);
if (Integer.valueOf(String.valueOf(dtl_type)) % 2 != 0) {
String point_location = delivery_point.getString("point_location");
String product_area = delivery_point.getString("product_area");
String sort_seq = delivery_point.getString("sort_seq");
JSONObject right_point = WQL.getWO("PDA_02")
.addParam("point_location", point_location)
.addParam("point_code", jsonTask.getString("point_code1"))
.addParam("product_area", product_area)
.addParam("sort_seq", sort_seq)
.addParam("find_type", "3")
.addParam("flag", "17").process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(right_point)) {
log.debug("生成一个输送线出库任务");
//生成一个输送线出库任务
JSONObject form = new JSONObject();
form.put("point_code1", jsonTask.getString("point_code1"));
JSONObject ss_jo = WQLObject.getWQLObject("sch_base_point").query("product_area = '" + delivery_point.getString("product_area") + "' AND point_type = '7'").uniqueResult(0);
form.put("point_code2", ss_jo.getString("point_code"));
if (StrUtil.isEmpty(delivery_point.getString("vehicle_code"))) {
throw new BadRequestException("点位:" + delivery_point.getString("point_code") + "载具号为空!");
}
form.put("vehicle_code2", delivery_point.getString("vehicle_code"));
//分切输送出
form.put("task_type", "010401");
form.put("product_area", delivery_point.getString("product_area"));
cutConveyorTask.createTask(form);
} else {
right_point = WQL.getWO("PDA_02")
.addParam("point_location", point_location)
.addParam("point_code", jsonTask.getString("point_code1"))
.addParam("product_area", product_area)
.addParam("sort_seq", sort_seq)
.addParam("find_type", "4")
.addParam("flag", "18").process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(right_point)) {
//判断对应缓存位是否存在需要末次下卷或者废箔下卷的任务
JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("vehicle_code2 = '" + right_point.getString("vehicle_code") + "' AND is_delete = '0' AND task_status = '02'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(task_jo)) {
if ("010404".equals(task_jo.getString("task_type"))) {
//出站
task_jo.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
task_jo.put("point_code2", jsonTask.getString("point_code1"));
task_jo.put("vehicle_code2", delivery_point.getString("vehicle_code"));
WQLObject.getWQLObject("sch_base_task").update(task_jo);
new CutTrussTask().immediateNotifyAcs(null);
}
}
}
}
}
}
}
}

View File

@@ -5,8 +5,10 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.util.impl.InVehicleManageServiceImpl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.OutVehicleManageServiceImpl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.*;
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.LashManageService;
import org.nl.modules.logging.annotation.Log;
import org.nl.wms.st.inbill.service.CheckOutBillService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +38,12 @@ public class CheckOutBillController {
@Autowired
private IStIvtIostorinvOutService iStIvtIostorinvOutService;
private final LashManageService lashManageService;
private final InBussManageService inBussManageService;
private final SendOutManageServiceImpl sendOutManageService;
@GetMapping
@Log("查询出库单")
@@ -377,4 +385,39 @@ public class CheckOutBillController {
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/testInBox")
@Log("木箱入库测试")
public ResponseEntity<Object> testInBox(@RequestBody JSONObject whereJson) {
new InBoxManageServiceImpl().inBox(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/testOutBox")
@Log("木箱出库测试")
public ResponseEntity<Object> testOutBox(@RequestBody JSONObject whereJson) {
new OutBoxManageServiceImpl().outBox(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/testBoxLash")
@Log("木箱捆扎测试")
public ResponseEntity<Object> testBoxLash(@RequestBody JSONObject whereJson) {
lashManageService.createLashTask(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/testSendOut")
@Log("发货区测试")
public ResponseEntity<Object> testSendOut(@RequestBody JSONObject whereJson) {
sendOutManageService.createSendOutTask(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/testIn")
@Log("申请入库")
public ResponseEntity<Object> testIn(@RequestBody JSONObject whereJson) {
inBussManageService.inTask(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}