fix:代码合并

This commit is contained in:
zhouz
2024-07-08 09:26:13 +08:00
30 changed files with 267 additions and 202 deletions

View File

@@ -1,8 +1,6 @@
package org.nl;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
import com.alicp.jetcache.anno.config.EnableMethodCache;
import org.dromara.dynamictp.core.spring.EnableDynamicTp;
import org.mybatis.spring.annotation.MapperScan;
import org.nl.modules.wql.util.SpringContextHolder;
@@ -30,8 +28,6 @@ import org.springframework.web.bind.annotation.RestController;
})
@ServletComponentScan //https://blog.csdn.net/qq_36850813/article/details/101194250
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
@EnableMethodCache(basePackages = "org.nl")
@EnableCreateCacheAnnotation
@MapperScan("org.nl.**.mapper")
public class AppRun {

View File

@@ -178,6 +178,7 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
whereJson.put("bill_type", IOSEnum.IN_TYPE.code("改切入库"));
}
whereJson.put("box_no", whereJson.getString("box_no"));
JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("material_barcode") + "' AND status = '0'").getResultJSONArray(0);
if (ObjectUtil.isEmpty(resultJSONArray)) {
throw new BadRequestException("未查询到子卷包装信息!");

View File

@@ -808,9 +808,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (CollectionUtils.isEmpty(packagerelationList)) {
throw new BadRequestException("无选中子卷信息");
}
if (packagerelationList.size() > 1) {
throw new BadRequestException("暂时只能选择一个子卷");
}
// if (packagerelationList.size() > 1) {
// throw new BadRequestException("暂时只能选择一个子卷");
// }
//检查是否存在已分配规格的子卷号
List<PdmBiSubpackagerelation> isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList());
if (isOutBox.size() > 0) {
@@ -867,7 +867,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
System.out.println("木箱出库代码执行花费时间------------------------------------------------------------------------------------------*************************************************************************************************= totalTime = " + stopWatch.getTotalTimeMillis());
log.info("木箱出库代码执行花费时间------------------------------------------------------------------------------------------*************************************************************************************************= totalTime = " + stopWatch.getTotalTimeMillis());
//空木箱出库测试
//String boxSn = "33333";
//String boxSn = "MX240702000166";
StopWatch stopWatch1 = new StopWatch();
stopWatch1.start();
//更新及子卷包装状态已分配规格及木箱规格组
@@ -907,16 +907,16 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.collect(Collectors.toList());
//任务组id
String groupId = deviceCode.substring(deviceCode.lastIndexOf("_") + 1);
RLock lock = redissonClient.getLock(groupId);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
// RLock lock = redissonClient.getLock(groupId);
// boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
// try {
// if (tryLock) {
List<SchBaseTask> schBaseTaskList = new ArrayList<>();
//确定起点,安装装箱组标识加入任务队列
djqPoints.forEach(r -> {
//校验重复任务
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getVehicle_code, r.getContainer_name()).eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"))
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")).lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED));
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")).lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()));
if (CollectionUtils.isEmpty(taskList)) {
JSONObject jo = new JSONObject();
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"));
@@ -938,14 +938,14 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (CollectionUtils.isNotEmpty(schBaseTaskList)) {
taskQueue.addTasksToQueue(groupId, schBaseTaskList);
}
} else {
log.info("待检区->装箱区任务队列正在创建被锁住。");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
// } else {
// log.info("待检区->装箱区任务队列正在创建被锁住。");
// }
// } finally {
// if (tryLock) {
// lock.unlock();
// }
// }
}

View File

@@ -111,7 +111,11 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, null);
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, pointIds);
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"))) {
}
else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, null, pointIds, null);
}
else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds);
} else {
return packageinfoivtList;
@@ -230,12 +234,9 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
pointCode = getNewPoint(taskCode, actionType);
break;
case "3":
// 取货完成
updatePointStatus(taskCode, actionType);
break;
case "4":
// 货完成,就是任务完成,不需要执行任何操作,但是取货任务的放货完成,需要改变updateTaskStatus只更新终点库存
//updatePointStatus(taskCode, pointType);
// 货完成,放货完成
updatePointStatus(taskCode, actionType);
break;
default:
return null;
@@ -486,11 +487,13 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* @param actionType 动作类型
*/
private void updatePointStatus(String taskCode, String actionType) {
//执行中的任务
SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_code, taskCode)
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code(""))
.eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()));
if (baseTask == null) {
throw new BadRequestException("任务不存在!");
throw new BadRequestException("任务未执行或不存在!");
}
//取货任务
if (actionType.equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
@@ -507,6 +510,22 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
.setSql("ivt_status = '0', container_name = null")
.eq("point_code", baseTask.getPoint_code1()));
}
} else {
List<BstIvtPackageinfoivt> ivtList = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code2()));
if (CollectionUtils.isEmpty(ivtList)) {
throw new BadRequestException("任务编号为:" + baseTask.getTask_code() + "取货完成的目标点位不存在!");
}
if (ivtList.get(0).getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code(""))) {
//增加点位库存
bstIvtPackageinfoivtMapper.update(null, new UpdateWrapper<BstIvtPackageinfoivt>()
.set("container_name", baseTask.getVehicle_code())
.set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))
.eq("point_code", baseTask.getPoint_code2()));
} else {
throw new BadRequestException("该点位已有库存!");
}
}
}

View File

@@ -1,16 +1,14 @@
package org.nl.b_lms.sch.task.service;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.common.domain.query.PageQuery;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
/**
* {@code @Description:} 任务表(SchBaseTask)服务接口层
@@ -69,10 +67,18 @@ public interface IschBaseTaskService extends IService<SchBaseTask> {
/**
* 查找当前设备有没有送轴的任务
*
* @param resourceName /
* @return /
*/
List<SchBaseTask> getTaskByPlanQzzNoAndDevice(String resourceName);
/**
*校验相同任务类型
*/
List<SchBaseTask> getExistTasks(String taskType1, String taskType2, String taskType3);
}

View File

@@ -6,19 +6,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
/**
@@ -133,5 +132,18 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
}
public List<SchBaseTask> getExistTasks(String taskType1, String taskType2, String taskType3) {
LambdaQueryWrapper<SchBaseTask> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode());
queryWrapper.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""));
List<String> taskTypes = new ArrayList<>(Arrays.asList(taskType1, taskType2, taskType3));
taskTypes.removeIf(StringUtils::isBlank);
if (!taskTypes.isEmpty()) {
queryWrapper.in(SchBaseTask::getTask_type, taskTypes);
}
return this.list(queryWrapper);
}
}

View File

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
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.task.dao.SchBaseTask;
@@ -52,8 +53,6 @@ public class DjqTask extends AbstractAcsTask {
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private MzhcwTask mzhcwTask;
@Resource
private TaskQueueManager taskQueueManager;
@@ -73,7 +72,7 @@ public class DjqTask extends AbstractAcsTask {
.task_type(r.getAcs_task_type())
.start_device_code(r.getPoint_code1())
.next_device_code(r.getPoint_code2())
.vehicle_code(r.getVehicle_code())
//.vehicle_code(r.getVehicle_code())
.priority(r.getPriority())
.remark(r.getRemark())
.product_area(r.getProduct_area())
@@ -98,15 +97,17 @@ public class DjqTask extends AbstractAcsTask {
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + schBaseTask.getUpdate_time() + "被调用---------------------------------------------");
//1.更改任务状态为完成
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
//2.改变起点点位状态,二次分配,取货完成就改起点库存
//1.改变起点点位状态,二次分配,取货完成就改起点库存
//packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//3更新库存记录
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
//清除首次分配目标点位
//2.更新库存记录
//管制品重新质检
String ivtStatus = StringUtils.isBlank(schBaseTask.getRequest_param()) ? PackageInfoIvtEnum.IVT_STATUS.code("有子卷") : schBaseTask.getRequest_param();
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", ivtStatus).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
//3.更改任务状态为完成
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
//4.清除首次分配目标点位
schBaseTask.setPoint_code3("");
//4.判断是否存在确定起点的输送线->满轴缓存位任务,存在就下发任务
//5.判断是否存在确定起点的输送线->满轴缓存位任务,存在就下发任务
// List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
// //确定起点未下发
// .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())

View File

@@ -53,9 +53,6 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private SsxDjwTask ssxDjwTask;
@Override
public List<AcsTaskDto> addTask() {
@@ -95,30 +92,30 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode());
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
log.info("任务编号为:"+schBaseTask.getTask_code()+"的任务完成接口在"+schBaseTask.getUpdate_time()+"被调用---------------------------------------------");
//1.更改任务状态为完成
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
//2.改变起点点位状态
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//清除首次分配目标点位
schBaseTask.setPoint_code4("");
//更新库存记录
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2()));
//3.待检区或管制区搬运空载具到空载具缓存位完毕,判断是否存在确定终点的空载具缓存位->输送线任务,存在就下发任务
// List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
// //确定终点未下发
// .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
// .eq(SchBaseTask::getPoint_code2, "NBJ1002")
// .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))
// );
// if (CollectionUtils.isNotEmpty(taskList)) {
// SchBaseTask task = taskList.get(0);
// task.setPoint_code1(schBaseTask.getPoint_code2());
// task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
// taskService.update(task);
// //任务下发
// ssxDjwTask.immediateNotifyAcs(task.getTask_id().toString());
// }
log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + schBaseTask.getUpdate_time() + "被调用---------------------------------------------");
//1.改变起点点位状态
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//2.更新库存记录
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("载具")).eq("point_code", schBaseTask.getPoint_code2()));
//3.更改任务状态为完成
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
//4.清除首次分配目标点位
schBaseTask.setPoint_code4("");
//3.待检区或管制区搬运空载具到空载具缓存位完毕,判断是否存在确定终点的空载具缓存位->输送线任务,存在就下发任务
// List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
// //确定终点未下发
// .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
// .eq(SchBaseTask::getPoint_code2, "NBJ1002")
// .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))
// );
// if (CollectionUtils.isNotEmpty(taskList)) {
// SchBaseTask task = taskList.get(0);
// task.setPoint_code1(schBaseTask.getPoint_code2());
// task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
// taskService.update(task);
// //任务下发
// ssxDjwTask.immediateNotifyAcs(task.getTask_id().toString());
// }
}
// 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {

View File

@@ -48,8 +48,6 @@ public class GzqTask extends AbstractAcsTask {
private IschBaseTaskService taskService;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private MzhcwTask mzhcwTask;
@Override
public List<AcsTaskDto> addTask() {
@@ -99,7 +97,7 @@ public class GzqTask extends AbstractAcsTask {
//2.改变起点点位状态
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//更新库存记录
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("管制品")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
//3.判断是否存在确定起点的输送线->满轴缓存位任务,存在就下发任务
// List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
// //确定起点未下发

View File

@@ -53,8 +53,7 @@ public class GzqToKzjhcwTask extends AbstractAcsTask {
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private SsxDjwTask ssxDjwTask;
@Override

View File

@@ -93,7 +93,9 @@ public class MzhcwTask extends AbstractAcsTask {
.next_device_code(r.getPoint_code2())
.start_device_code2(r.getPoint_code3())
.next_device_code2(r.getPoint_code4())
.vehicle_code(r.getVehicle_code())
//四个点任务与两个点任务类型区分
.agv_action_type(r.getVehicle_code2())
.vehicle_code(r.getVehicle_code())
.priority(r.getPriority())
.remark(r.getRemark())
.product_area(r.getProduct_area())
@@ -127,23 +129,32 @@ public class MzhcwTask extends AbstractAcsTask {
//createTaskToDjq(schBaseTask);
//4.创建空载具到输送线任务,完成后需要创建空载具缓存位->输送线任务
if (schBaseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))) {
//如果是输送线->满轴缓存位任务
List<BstIvtPackageinfoivt> kzjPointList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具"))
.orderByDesc(BstIvtPackageinfoivt::getSort_seq));
JSONObject toSsxTask = new JSONObject();
toSsxTask.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
toSsxTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
toSsxTask.put("vehicle_code", schBaseTask.getVehicle_code());
//判断空载具缓存位是否有空载具库存,有就叫桁架去任一位置搬空载具,如果暂时没有空载具,定时任务会不断判断是否有空载具
if (CollectionUtils.isNotEmpty(kzjPointList)) {
//直接创建搬运空载具任务
toSsxTask.put("point_code1", kzjPointList.get(0).getPoint_code());
//终点为输送线点位
toSsxTask.put("point_code2", schBaseTask.getPoint_code1());
//校验任务是否存在
List<SchBaseTask> existTask = taskService.getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"),null,null);
if (CollectionUtils.isEmpty(existTask)) {
//如果是输送线->满轴缓存位任务
List<BstIvtPackageinfoivt> kzjPointList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具"))
.orderByDesc(BstIvtPackageinfoivt::getSort_seq));
JSONObject toSsxTask = new JSONObject();
toSsxTask.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
toSsxTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
toSsxTask.put("vehicle_code", schBaseTask.getVehicle_code());
//判断空载具缓存位是否有空载具库存,有就叫桁架去任一位置搬空载具,如果暂时没有空载具,定时任务会不断判断是否有空载具
if (CollectionUtils.isEmpty(kzjPointList)) {
toSsxTask.put("task_status", TaskStatusEnum.SURE_END.getCode());
//确定终点为输送线点位
toSsxTask.put("point_code2", schBaseTask.getPoint_code1());
} else {
toSsxTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
//直接创建搬运空载具任务
toSsxTask.put("point_code1", kzjPointList.get(0).getPoint_code());
//终点为输送线点位
toSsxTask.put("point_code2", schBaseTask.getPoint_code1());
}
ssxDjwTask.createTask(toSsxTask);
}
} else {

View File

@@ -69,7 +69,7 @@ public class SsxDjwTask extends AbstractAcsTask {
.next_device_code(r.getPoint_code2())
.start_device_code2(r.getPoint_code3())
.next_device_code2(r.getPoint_code4())
.vehicle_code(r.getVehicle_code())
//.vehicle_code(r.getVehicle_code())
.priority(r.getPriority())
.remark(r.getRemark())
.agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"))

View File

@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
@@ -51,10 +50,7 @@ import java.util.List;
@Slf4j
public class ZxDjwTask extends AbstractAcsTask {
@Resource
private DjqToKzjhcwTask djqToKzjhcwTask;
@Resource
private DjqTask djqTask;
@Resource
private BstIvtBoxinfoMapper bstIvtBoxinfoMapper;
@Resource
@@ -124,17 +120,14 @@ public class ZxDjwTask extends AbstractAcsTask {
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//3.判断是否最后一个子卷相同木箱号的子卷包装关系如果生成状态0,且个数等于1且子卷号等于当前载具号就是最后一个子卷
List<PdmBiSubpackagerelation> packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getPackage_box_sn, schBaseTask.getVehicle_code2()).eq(PdmBiSubpackagerelation::getStatus, "0"));
//所有木箱已装箱
if (CollectionUtils.isEmpty(packagerelationList)) {
if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(schBaseTask.getVehicle_code())) {
//4.更改木箱信息为已装箱:1
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1"));
if (bstIvtBoxinfo == null) {
throw new BadRequestException("子卷包装关系为已装箱或找该任务的木箱号不存在!");
}
//4.更改木箱信息为已装箱:1
bstIvtBoxinfo.setIs_packing(IOSEnum.IS_NOTANDYES.code(""));
bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo);
}
if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(schBaseTask.getVehicle_code())) {
//5.最后一个子卷,清除装箱位木箱信息
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code2()));
}

View File

@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
@@ -64,9 +63,6 @@ public class ZxqTask extends AbstractAcsTask {
@Resource
private IpdmBiSubpackagerelationService subpackageRelationService;
@Resource
private IPdmBiSlittingproductionplanService productionPlanService;
@Resource
private PdmBiSlittingproductionplanMapper pdmBiSlittingproductionplanMapper;
@Resource

View File

@@ -56,6 +56,7 @@ public class AutoExecuteWaitTask {
*/
@SneakyThrows
public void executeWaitTask() {
log.info(THIS_CLASS+"-放满与取空桁架定时任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
@@ -80,7 +81,7 @@ public class AutoExecuteWaitTask {
if (CollectionUtils.isEmpty(kzjPointList)) {
return;
}
List<SchBaseTask> existTaskList = getExistTasks(taskType, task.getVehicle_code());
List<SchBaseTask> existTaskList = taskService.getExistTasks(taskType,null,null);
if (existTaskList.size() > 1) {
throw new BadRequestException("存在多个子卷号相同的任务!");
}
@@ -99,7 +100,7 @@ public class AutoExecuteWaitTask {
return;
}
//校验相同是否存在相同子卷号任务
List<SchBaseTask> existTaskList = getExistTasks(taskType, task.getVehicle_code());
List<SchBaseTask> existTaskList = taskService.getExistTasks(taskType,null,null);
//如果有就不创建,没有就创建
if (existTaskList.size() > 1) {
throw new BadRequestException("存在多个子卷号相同的任务!");
@@ -121,15 +122,4 @@ public class AutoExecuteWaitTask {
}
}
//校验相同子卷号的任务
private List<SchBaseTask> getExistTasks(String taskType, String containerName) {
String startTime = LocalDate.now().atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, taskType)
.eq(SchBaseTask::getVehicle_code, containerName)
.gt(SchBaseTask::getCreate_time, startTime)
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
);
}
}

View File

@@ -44,6 +44,7 @@ public class AutoSendDjqToGzq {
*/
@SneakyThrows
public void sendDjqToGzq() {
log.info(THIS_CLASS+"-待检区->管制区定时任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {

View File

@@ -8,6 +8,7 @@ import org.apache.commons.collections4.CollectionUtils;
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.first_floor_area.DjqTask;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
@@ -44,6 +45,7 @@ public class AutoSendGzqToDjq {
*/
@SneakyThrows
public void sendGzqToDjq() {
log.info(THIS_CLASS+"-管制区->待检区定时任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
@@ -60,6 +62,8 @@ public class AutoSendGzqToDjq {
}
JSONObject task = new JSONObject();
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区"));
//区分管制品重新检测为合格品
task.put("request_param", PackageInfoIvtEnum.IVT_STATUS.code("合格品"));
task.put("vehicle_code", gzqPackageinfoivtList.get(0).getContainer_name());
task.put("point_code1", gzqPackageinfoivtList.get(0).getPoint_code());
task.put("point_code2", djqPackageinfoivtList.get(0).getPoint_code());

View File

@@ -62,14 +62,13 @@ public class AutoSendMzToDjq {
@SneakyThrows
public void sendMzqToDjq2() {
log.info(THIS_CLASS+"-满轴->待检区定时任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
String pointCode2 = null;
JSONObject task = new JSONObject();
//满轴有子卷且过滤未完成任务
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(mzqPackageinfoivtList)) {
return;
}
@@ -78,6 +77,8 @@ public class AutoSendMzToDjq {
if (CollectionUtils.isEmpty(djqPackageinfoivtList)) {
return;
}
String pointCode2;
JSONObject task = new JSONObject();
pointCode2 = djqPackageinfoivtList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"));

View File

@@ -1,13 +1,14 @@
package org.nl.b_lms.sch.tasks.first_floor_area.auto;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
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.first_floor_area.ZxqTask;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -22,6 +23,9 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class AutoSendToZxq {
private final String THIS_CLASS = AutoSendToZxq.class.getName();
@Resource
private RedissonClient redissonClient;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
@@ -41,7 +45,13 @@ public class AutoSendToZxq {
/**
* 二次分配任务
*/
@SneakyThrows
public void sendDjqToZxq() {
log.info(THIS_CLASS + "-待检区->装箱区定时任务开始执行扫描。");
// RLock lock = redissonClient.getLock(THIS_CLASS);
// boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
// try {
// if (tryLock) {
//装箱区有空位,去待检区消费合格品子卷
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(
PackageInfoIvtEnum.POINT_STATUS.code("装箱区"),
@@ -57,6 +67,14 @@ public class AutoSendToZxq {
//taskQueueManager.processTasks(ivtList);
taskQueue.processTasks(ivtList);
}
// } else {
// log.info("满轴->待检区agv自动搬运任务正在创建被锁住。");
// }
// } finally {
// if (tryLock) {
// lock.unlock();
// }
// }
}
}

View File

@@ -43,6 +43,7 @@ public class AutoSendVehicleToDjq {
@SneakyThrows
public void sendVehicleToDjqOrGzq1() {
log.info(THIS_CLASS+"-装箱区->待检区或管制区补空任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
@@ -55,7 +56,7 @@ public class AutoSendVehicleToDjq {
return;
}
//待检区有空位且过滤未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code(""), "");
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code(""), "");
if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) {
pointCode2 = djqPackageinfoivtList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));

View File

@@ -47,7 +47,7 @@ public class AutoSendVehicleToKzj {
@SneakyThrows
public void toKzjHcw() {
//存在空载具缓存位无空载具的点位
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(kzjIvtList)) {
return;
}
@@ -80,20 +80,21 @@ public class AutoSendVehicleToKzj {
*/
@SneakyThrows
public void toKzjHcw2() {
log.info(THIS_CLASS+"-待检区或管制区->空载具缓存位补空任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
//存在空载具缓存位无空载具的点位
String pointCode1 = null;
JSONObject task = new JSONObject();
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(kzjIvtList)) {
return;
}
String pointCode1 = null;
JSONObject task = new JSONObject();
boolean hasEmptyVehicle = true;
Optional<BstIvtPackageinfoivt> emptyList = kzjIvtList.stream()
.filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("")))
.filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("载具")))
.findFirst();
//判断点位外层是否有空载具
if (emptyList.isPresent()) {

View File

@@ -48,6 +48,7 @@ import static org.nl.wms.util.TaskUtil.getMaxNum;
@Component
@RequiredArgsConstructor
public class AutoSendZxToDjw {
private final String THIS_CLASS = AutoSendZxToDjw.class.getName();
private final RedissonClient redissonClient;
@Resource
@@ -112,6 +113,7 @@ public class AutoSendZxToDjw {
}
//获取与该木箱号匹配的子卷号
String containerName = relationList.get(0).getContainer_name();
log.info(THIS_CLASS+"-装箱区->装箱对接位任务开始执行扫描。");
RLock lock = redissonClient.getLock(containerName);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {

View File

@@ -62,15 +62,12 @@ public class TaskQueue {
private void executeTask(SchBaseTask task, String pointCode) {
if (task != null) {
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, task.getTask_id())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")).lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()));
//被取消或删除的任务不再执行
//if (CollectionUtils.isEmpty(taskList)) {
task.setPoint_code2(pointCode);
log.info("待检区->装箱区agv任务编号为"+task.getTask_code()+",任务状态为:"+task.getTask_status()+"任务开始下发。");
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(task);
zxqTask.immediateNotifyAcs(null);
//}
log.info("待检区->装箱区agv任务编号为"+task.getTask_code()+",任务状态为:"+task.getTask_status()+"下发完成。");
//同步删除子卷包装关系
LambdaQueryWrapper<PdmBiSubpackagerelation> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PdmBiSubpackagerelation::getContainer_name, task.getVehicle_code());

View File

@@ -300,7 +300,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
@Override
public void returnIn(JSONObject whereJson) {
// 载具表
///api/twoPda/vehicle/returnIn
//api/twoPda/vehicle/returnIn
/*
* 查询mes木箱信息插入木箱信息表
*/

View File

@@ -4,12 +4,11 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONAware;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.log4j.Log4j;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.A;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
@@ -18,21 +17,18 @@ import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvMapper;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService;
import org.nl.common.utils.MapOf;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.service.TaskService;
import org.nl.wms.ext.mes.service.LmsToMesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.Array;
import java.util.*;
import java.util.stream.Collectors;
@@ -45,6 +41,7 @@ import java.util.stream.Collectors;
* @since 2023-11-10
*/
@Service
@Log4j
public class InBussManageServiceImpl implements InBussManageService {
@Autowired
@@ -65,6 +62,10 @@ public class InBussManageServiceImpl implements InBussManageService {
@Autowired
private IBstIvtBoxinfoService iBstIvtBoxinfoService;
@Autowired
private LmsToMesService lmsToMesService;
/**
* 不需要查询的排集合
*/
@@ -228,13 +229,15 @@ public class InBussManageServiceImpl implements InBussManageService {
public void inTask(JSONObject jsonObject) {
// 子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
// 载具扩展属性表
WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
// 载具表
WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo");
// 处理子卷号
String material_barcode = jsonObject.getString("material_barcode");
if (ObjectUtil.isEmpty(material_barcode)) {
throw new BadRequestException("子卷号不能为空!");
}
if (ObjectUtil.isEmpty(jsonObject.getString("device_code"))) {
throw new BadRequestException("设备号不能为空!");
}
@@ -252,6 +255,47 @@ public class InBussManageServiceImpl implements InBussManageService {
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, subList.get(0).getString("package_box_sn"))
);
String vehicleType;
if (boxDao != null) {
vehicleType = boxDao.getVehicle_type();
} else {
//查询mes木箱信息插入木箱信息表
try {
JSONObject jo = new JSONObject();
jo.put("box_no", subList.get(0).getString("package_box_sn"));
lmsToMesService.momGetPackingInfo(jo);
} catch (Exception ex) {
throw new BadRequestException("MES系统未查询到木箱信息!");
}
BstIvtBoxinfo boxDao1 = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, subList.get(0).getString("package_box_sn"))
);
vehicleType = boxDao1.getVehicle_type();
}
//处理托盘扩展信息
JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + jsonObject.getString("vehicle_code") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVehicle)) {
throw new BadRequestException("载具不存在!");
}
JSONObject ext_jo = veExtTab.query("storagevehicle_code = '" + jsonVehicle.getString("storagevehicle_code") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(ext_jo)) {
JSONObject jsonVeExt = new JSONObject();
jsonVeExt.put("storagevehicleext_id", org.nl.common.utils.IdUtil.getLongId());
jsonVeExt.put("storagevehicle_id", jsonVehicle.getLongValue("storagevehicle_id"));
jsonVeExt.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code"));
jsonVeExt.put("storagevehicle_type", jsonVehicle.getString("storagevehicle_type"));
jsonVeExt.put("pcsn", subList.get(0).getString("package_box_sn"));
jsonVeExt.put("device_uuid", org.nl.common.utils.IdUtil.getLongId());
jsonVeExt.put("update_time", DateUtil.now());
veExtTab.insert(jsonVeExt);
} else {
ext_jo.put("pcsn", subList.get(0).getString("package_box_sn"));
ext_jo.put("device_uuid", org.nl.common.utils.IdUtil.getLongId());
ext_jo.put("update_time", DateUtil.now());
veExtTab.update(ext_jo);
}
// 主表
JSONObject mst = new JSONObject();
mst.put("stor_id", IOSEnum.STOR_ID.code("二期"));
@@ -261,14 +305,11 @@ public class InBussManageServiceImpl implements InBussManageService {
mst.put("bill_type", jsonObject.getString("bill_type"));
mst.put("biz_date", DateUtil.today());
mst.put("remark", "");
// 明细
ArrayList<LinkedHashMap> tableData = new ArrayList<>();
for (int i = 0; i < subList.size(); i++) {
JSONObject json = subList.get(i);
LinkedHashMap<String, Object> jsonDtl = new LinkedHashMap<>();
jsonDtl.put("package_box_sn", json.getString("package_box_sn"));
jsonDtl.put("thickness", json.getString("thickness"));
jsonDtl.put("plan_qty", json.getString("net_weight"));
@@ -287,13 +328,11 @@ public class InBussManageServiceImpl implements InBussManageService {
tableData.add(jsonDtl);
}
mst.put("tableData", tableData);
// 判断是否已经生成过入库单
String package_box_sn = (String) tableData.get(0).get("package_box_sn");
JSONObject param = new JSONObject();
param.put("package_box_sn",package_box_sn);
JSONObject iosMst = stIvtIostorinvMapper.queryBoxMst(param);
String iostorinv_id;
if (ObjectUtil.isNotEmpty(iosMst)) {
iostorinv_id = iosMst.getString("iostorinv_id");
@@ -325,7 +364,7 @@ public class InBussManageServiceImpl implements InBussManageService {
jsonDiv.put("stor_id", IOSEnum.STOR_ID.code("二期"));
jsonDiv.put("material_barcode", jsonObject.getString("material_barcode"));
jsonDiv.put("vehicle_code", jsonObject.getString("vehicle_code"));
jsonDiv.put("vehicle_type", boxDao.getVehicle_type());
jsonDiv.put("vehicle_type", vehicleType);
iStIvtIostorinvService.divStruct(jsonDiv);
}

View File

@@ -41,7 +41,7 @@ public enum PackageInfoIvtEnum {
//起点终点类型
TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2", "取货分配", "3", "放货分配", "4", "取货任务取货分配", "5", "放货任务放货分配", "6")),
TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2", "取货分配", "3", "放货分配", "4", "取货任务取货分配", "5", "放货任务放货分配", "6", "四个点任务放货", "7")),
//等待点类型
WAIT_POINT_TYPE(MapOf.of("满轴区等待点", "1", "待检区等待点", "2")),

View File

@@ -3,10 +3,6 @@ package org.nl.system.service.param.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alicp.jetcache.anno.CachePenetrationProtect;
import com.alicp.jetcache.anno.CacheType;
import com.alicp.jetcache.anno.CacheUpdate;
import com.alicp.jetcache.anno.Cached;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -77,7 +73,6 @@ public class SysParamServiceImpl extends ServiceImpl<SysParamMapper, Param> impl
}
@Override
@CacheUpdate(name="paramCache-", key="#param.code", value="#param")
@Transactional(rollbackFor = Exception.class)
public void update(Param param) {
Param paramObj = paramMapper.selectById(param.getId());
@@ -102,8 +97,6 @@ public class SysParamServiceImpl extends ServiceImpl<SysParamMapper, Param> impl
}
@Override
/*@CachePenetrationProtect
@Cached(name="paramCache-",key = "#code", expire = 3600, cacheType = CacheType.REMOTE)*/
public Param findByCode(String code) {
QueryWrapper<Param> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("code", code);

View File

@@ -1,6 +1,5 @@
package org.nl.wms.ext.acs.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
@@ -27,7 +26,6 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.TwoBoxExcepTask;
import org.nl.b_lms.sch.tasks.TwoExceptionInTask;
import org.nl.b_lms.sch.tasks.TwoOutHeapTask;
import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask;
import org.nl.b_lms.sch.tasks.first_floor_area.SsxDjwTask;
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
@@ -38,8 +36,8 @@ import org.nl.b_lms.storage_manage.ios.enums.TASKEnum;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.*;
import org.nl.common.enums.NoticeTypeEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
@@ -71,14 +69,11 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@Slf4j
@@ -1842,7 +1837,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
} else {
//如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), containerName);
List<SchBaseTask> existTaskList = taskService.getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"),PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
//如果有就不创建,没有就创建
if (CollectionUtils.isEmpty(existTaskList)) {
//只确定起点NBJ1002
@@ -1850,13 +1845,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo2.put("point_code1", "NBJ1002");
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo2.put("vehicle_code", containerName);
jo2.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo2.put("is_send", false);
mzhcwTask.createTask(jo2);
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
}else{
log.info("已存在任务编号为:"+existTaskList.get(0).getTask_code()+"未完成的桁架任务,请检查!");
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "已存在任务编号为:"+existTaskList.get(0).getTask_code()+"未完成的桁架任务,请检查!");
}
result.put("data", containerName);
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "满轴缓存位暂无空位!");
}
} else {
log.info("二楼到一楼成品子卷到达一楼输送线任务正在创建被锁住。");
@@ -1872,19 +1871,20 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
/**
* 无空载具下发确定终点的补空桁架任务
*/
private JSONObject createTask2(String containerName, JSONObject jo) {
JSONObject result = new JSONObject();
result.put("data", containerName);
//如果空载具缓存位确少空载具,创建输送线->满轴缓存位两个点任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
List<SchBaseTask> existTaskList1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), containerName);
List<SchBaseTask> existTaskList1 = taskService.getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"),PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
if (CollectionUtils.isEmpty(existTaskList1)) {
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
List<SchBaseTask> existTasks = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
List<SchBaseTask> existTask1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), containerName);
List<SchBaseTask> existTask1 = taskService.getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"),null,null);
if (CollectionUtils.isEmpty(existTask1)) {
JSONObject jo1 = new JSONObject();
//创建确定终点任务
@@ -1899,8 +1899,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
log.info("已存在任务编号为:"+existTaskList1.get(0).getTask_code()+"未完成的桁架任务,请检查!");
result.put("message", "已存在任务编号为:"+existTaskList1.get(0).getTask_code()+"未完成的桁架任务,请检查!");
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "该子卷号:" + containerName + "桁架任务已存在,二楼下一楼存在相同子卷号,请检查!");
}
return result;
}
@@ -1909,8 +1910,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject result = new JSONObject();
result.put("data", containerName);
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
List<SchBaseTask> existTaskList1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), containerName);
List<SchBaseTask> existTaskList1 = taskService.getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"),PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
if (CollectionUtils.isEmpty(existTaskList1)) {
jo.put("point_code3", pointCode3);
//终点为输送线点位
@@ -1921,30 +1921,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
log.info("已存在任务编号为:"+existTaskList1.get(0).getTask_code()+"未完成的桁架任务,请检查!");
result.put("message", "已存在任务编号为:"+existTaskList1.get(0).getTask_code()+"未完成的桁架任务,请检查!");
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "该子卷号:" + containerName + "桁架任务已存在,二楼下一楼存在相同子卷号,请检查!");
}
return result;
}
private List<SchBaseTask> getExistTasks(String taskType) {
return taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, taskType)
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")));
}
private List<SchBaseTask> getExistTasks(String taskType, String containerName) {
String startTime = LocalDate.now().atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, taskType)
.eq(SchBaseTask::getVehicle_code, containerName)
//.gt(SchBaseTask::getCreate_time, startTime)
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
);
}
@Override

View File

@@ -26,7 +26,6 @@ public class AcsUtil {
String isConnect = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_connect_acs").getValue();
JSONObject result = new JSONObject();
if (StrUtil.equals("0", isConnect)) {
result.put("status", HttpStatus.OK.value());
result.put("message", "下发成功但未连接ACS!");
result.put("data", new JSONObject());
@@ -62,7 +61,6 @@ public class AcsUtil {
String msg = e.getMessage();
//ConnectException: Connection refused: connect
//网络不通
System.out.println(msg);
result.put("status", HttpStatus.BAD_REQUEST);
result.put("message", "网络不通,操作失败!");
result.put("data", new JSONObject());
@@ -129,7 +127,6 @@ public class AcsUtil {
String msg = e.getMessage();
//ConnectException: Connection refused: connect
//网络不通
System.out.println(msg);
result.put("status", HttpStatus.BAD_REQUEST);
result.put("message", "网络不通,操作失败!");
result.put("data", new JSONObject());

View File

@@ -1,11 +1,18 @@
package org.nl.wms.util;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.sch.manage.TaskStatusEnum;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
public class TaskUtil {
/**
@@ -52,4 +59,5 @@ public class TaskUtil {
}
return maxNum;
}
}