Merge branch 'refs/heads/b_lms' into master_merge
This commit is contained in:
@@ -70,4 +70,11 @@ public interface IPdmBiSlittingproductionplanService extends IService<PdmBiSlitt
|
||||
* @return /
|
||||
*/
|
||||
List<SlitterPlanDistinctDto> getAllHalfPlan(List<String> qzzs);
|
||||
|
||||
/**
|
||||
* 根据子卷获取分切
|
||||
* @param containerName 子卷
|
||||
* @return /
|
||||
*/
|
||||
PdmBiSlittingproductionplan getByContainerName(String containerName);
|
||||
}
|
||||
|
||||
@@ -104,5 +104,12 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
|
||||
return pdmBiSlittingproductionplanMapper.getAllHalfPlan(qzzs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdmBiSlittingproductionplan getByContainerName(String containerName) {
|
||||
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
|
||||
lam.eq(PdmBiSlittingproductionplan::getContainer_name, containerName);
|
||||
return pdmBiSlittingproductionplanMapper.selectOne(lam);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.b_lms.pdm.subpackagerelation.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@@ -20,6 +21,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.*;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueueManager;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueue;
|
||||
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService;
|
||||
@@ -30,6 +32,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -62,7 +65,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
@Resource
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
|
||||
@Resource
|
||||
private IBstIvtBoxinfoService iBstIvtBoxinfoService;
|
||||
@Resource
|
||||
private DjqTask djqTask;
|
||||
@Resource
|
||||
@@ -322,9 +326,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
boxInfo.put("material_code", boxType);
|
||||
boxInfo.put("num", entityList.size());
|
||||
String boxSn = outBoxManageService.outBox(boxInfo);
|
||||
if (StringUtils.isBlank(boxSn)) {
|
||||
throw new BadRequestException("装箱区 -> 装箱对接位,木箱码不能为空!");
|
||||
}
|
||||
//更新及子卷包装状态已分配规格及木箱规格组
|
||||
CompletableFuture.runAsync(() -> {
|
||||
try {
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
@@ -56,10 +57,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
private IschBaseTaskService taskService;
|
||||
@Resource
|
||||
private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper;
|
||||
|
||||
@Resource
|
||||
private IbstIvtPackageinfoivtService packageinfoivtService;
|
||||
|
||||
|
||||
/**
|
||||
* 查询数据分页
|
||||
*
|
||||
@@ -90,7 +91,8 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) {
|
||||
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, pointIds);
|
||||
} else {
|
||||
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds);
|
||||
//taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds)
|
||||
return packageinfoivtList;
|
||||
}
|
||||
// 过滤未完成任务的任务
|
||||
if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) {
|
||||
@@ -122,8 +124,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
private List<BstIvtPackageinfoivt> getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) {
|
||||
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<BstIvtPackageinfoivt>()
|
||||
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
|
||||
.eq(BstIvtPackageinfoivt::getPoint_status, ivtType)
|
||||
.eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus);
|
||||
.eq(BstIvtPackageinfoivt::getPoint_status, ivtType);
|
||||
if (StringUtils.isNotEmpty(ivtStatus)) {
|
||||
queryWrapper.eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus);
|
||||
}
|
||||
if (PackageInfoIvtEnum.SORT_TYPE.code("升序").equals(sortType)) {
|
||||
queryWrapper.orderByAsc(BstIvtPackageinfoivt::getSort_seq);
|
||||
} else if (PackageInfoIvtEnum.SORT_TYPE.code("降序").equals(sortType)) {
|
||||
@@ -239,7 +243,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
* @return 新的点位
|
||||
*/
|
||||
private String getNewPoint(String taskCode, String actionType) {
|
||||
String taskPointType = null;
|
||||
//执行中的任务
|
||||
SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_code, taskCode)
|
||||
@@ -247,7 +250,64 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
if (baseTask == null) {
|
||||
throw new BadRequestException("该任务未执行或不存在!");
|
||||
}
|
||||
//已分配过二次分配点位
|
||||
if (StringUtils.isNotBlank(baseTask.getRequest_param())) {
|
||||
if (baseTask.getRequest_param().equals(IOSEnum.IS_SEND.code("是"))) {
|
||||
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
|
||||
return baseTask.getPoint_code1();
|
||||
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
|
||||
return baseTask.getPoint_code2();
|
||||
}
|
||||
}
|
||||
}
|
||||
BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt();
|
||||
String taskPointType = null;
|
||||
//空载具缓存位特殊二次分配逻辑:先判断是否有执行中的行架任务,有就分配行架搬运起点,无就按顺序排序分配点位
|
||||
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) ||
|
||||
baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))
|
||||
) {
|
||||
//是否有执行中的行架任务,有就分配行架搬运起点
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())
|
||||
.and(
|
||||
r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))
|
||||
.or()
|
||||
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")
|
||||
)));
|
||||
if (CollectionUtils.isNotEmpty(taskList)) {
|
||||
if (taskList.get(0).getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))) {
|
||||
newPoint.setPoint_code(taskList.get(0).getPoint_code3());
|
||||
} else {
|
||||
newPoint.setPoint_code(taskList.get(0).getPoint_code1());
|
||||
}
|
||||
} else {
|
||||
//newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask);
|
||||
newPoint = checkIvtSBlock();
|
||||
}
|
||||
} else {
|
||||
newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask);
|
||||
}
|
||||
if (StringUtils.isNotBlank(newPoint.getPoint_code())) {
|
||||
//更新任务起点或终点
|
||||
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
|
||||
baseTask.setPoint_code1(newPoint.getPoint_code());
|
||||
if (StringUtils.isNotBlank(newPoint.getContainer_name())) {
|
||||
//更新子卷号
|
||||
baseTask.setVehicle_code(newPoint.getContainer_name());
|
||||
}
|
||||
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
|
||||
baseTask.setPoint_code2(newPoint.getPoint_code());
|
||||
}
|
||||
baseTask.setRequest_param(IOSEnum.IS_SEND.code("是"));
|
||||
taskService.updateById(baseTask);
|
||||
return newPoint.getPoint_code();
|
||||
} else {
|
||||
throw new BadRequestException("点位外层有载具阻挡或暂无点位资源!");
|
||||
}
|
||||
}
|
||||
|
||||
private BstIvtPackageinfoivt getBstIvtPackageinfoivt(String actionType, String taskPointType, SchBaseTask baseTask) {
|
||||
BstIvtPackageinfoivt newPoint;
|
||||
//1取货任务2放货任务
|
||||
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
|
||||
@@ -264,23 +324,34 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
if (CollectionUtils.isEmpty(newPointList)) {
|
||||
throw new BadRequestException("暂无点位资源!");
|
||||
}
|
||||
BstIvtPackageinfoivt point = newPointList.get(0);
|
||||
if (point != null) {
|
||||
//更新任务起点或终点
|
||||
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
|
||||
baseTask.setPoint_code1(point.getPoint_code());
|
||||
if (StringUtils.isNotBlank(point.getContainer_name())) {
|
||||
//更新子卷号
|
||||
baseTask.setVehicle_code(point.getContainer_name());
|
||||
}
|
||||
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
|
||||
baseTask.setPoint_code2(point.getPoint_code());
|
||||
}
|
||||
taskService.updateById(baseTask);
|
||||
return point.getPoint_code();
|
||||
} else {
|
||||
return "";
|
||||
newPoint = newPointList.get(0);
|
||||
return newPoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取不阻挡的空载具缓存点位
|
||||
*/
|
||||
public BstIvtPackageinfoivt checkIvtSBlock() {
|
||||
BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt();
|
||||
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
|
||||
if (CollectionUtils.isEmpty(kzjIvtList)) {
|
||||
return newPoint;
|
||||
}
|
||||
boolean hasEmptyVehicle = true;
|
||||
Optional<BstIvtPackageinfoivt> emptyList = kzjIvtList.stream()
|
||||
.filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空")))
|
||||
.findFirst();
|
||||
//判断点位外层是否有空载具
|
||||
if (emptyList.isPresent()) {
|
||||
BigDecimal sortSeq = emptyList.get().getSort_seq();
|
||||
hasEmptyVehicle = kzjIvtList.stream()
|
||||
.anyMatch(r -> r.getSort_seq().compareTo(sortSeq) < 0 &&
|
||||
r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具")));
|
||||
}
|
||||
if (hasEmptyVehicle) {
|
||||
return newPoint;
|
||||
}
|
||||
return emptyList.get();
|
||||
}
|
||||
|
||||
|
||||
@@ -383,11 +454,19 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
}
|
||||
//取货任务
|
||||
if (actionType.equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
|
||||
//清空起点库存状态
|
||||
bstIvtPackageinfoivtMapper.update(null, new UpdateWrapper<BstIvtPackageinfoivt>()
|
||||
.setSql("ivt_status = '0', container_name = null")
|
||||
.eq("point_code", baseTask.getPoint_code1()));
|
||||
|
||||
List<BstIvtPackageinfoivt> ivtList = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
|
||||
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
|
||||
.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code1()));
|
||||
if (CollectionUtils.isEmpty(ivtList)) {
|
||||
throw new BadRequestException("任务编号为:" + baseTask.getTask_code() + "取货完成的目标点位不存在!");
|
||||
}
|
||||
//只有子卷号相同才能清除库存
|
||||
if (baseTask.getVehicle_code().equals(ivtList.get(0).getContainer_name())) {
|
||||
//清空起点库存状态
|
||||
bstIvtPackageinfoivtMapper.update(null, new UpdateWrapper<BstIvtPackageinfoivt>()
|
||||
.setSql("ivt_status = '0', container_name = null")
|
||||
.eq("point_code", baseTask.getPoint_code1()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -93,6 +93,9 @@ public class DjqTask extends AbstractAcsTask {
|
||||
if (schBaseTask == null) {
|
||||
throw new BadRequestException("满轴缓存位 -> 待检区完成接口任务号为空!");
|
||||
}
|
||||
if (schBaseTask.getTask_status().equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||
return;
|
||||
}
|
||||
if (StringUtils.isBlank(schBaseTask.getVehicle_code())) {
|
||||
throw new BadRequestException("满轴缓存位 -> 待检区,子卷号不能为空!");
|
||||
}
|
||||
@@ -139,7 +142,7 @@ public class DjqTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("任务已执行不能取消");
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -199,7 +202,7 @@ public class DjqTask extends AbstractAcsTask {
|
||||
|
||||
public void sendDjqToZxq(SchBaseTask schBaseTask) {
|
||||
//装箱区有空位
|
||||
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"),PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "","");
|
||||
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
|
||||
if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) {
|
||||
Map<String, List<String>> ivtList = bstIvtPackageinfoivtList.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
@@ -217,9 +220,13 @@ public class DjqTask extends AbstractAcsTask {
|
||||
public void forceFinish(String taskId) {
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_id, taskId), false);
|
||||
//todo 增加校验,完成状态不执行任何操作
|
||||
if (schBaseTask == null) {
|
||||
throw new BadRequestException("满轴缓存位 -> 待检区强制完成接口任务号为空!");
|
||||
}
|
||||
if (schBaseTask.getTask_status().equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||
return;
|
||||
}
|
||||
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
|
||||
}
|
||||
|
||||
@@ -232,6 +239,7 @@ public class DjqTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("满轴缓存位 -> 待检区取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -132,6 +132,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -210,6 +211,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("待检区->空载具缓存位取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
@@ -294,4 +296,4 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
|
||||
// this.createTask(toKzjHcwTask);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
package org.nl.b_lms.sch.tasks.first_floor_area;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
@@ -26,6 +27,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -83,7 +85,7 @@ public class GzqTask extends AbstractAcsTask {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
|
||||
if (schBaseTask == null) {
|
||||
throw new BadRequestException("满轴缓存位 -> 管制区完成接口任务号为空!");
|
||||
}
|
||||
@@ -125,6 +127,7 @@ public class GzqTask extends AbstractAcsTask {
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -194,8 +197,6 @@ public class GzqTask extends AbstractAcsTask {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void cancel(String taskId) {
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
|
||||
@@ -204,6 +205,7 @@ public class GzqTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("满轴缓存位 -> 管制区取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -132,6 +132,7 @@ public class GzqToKzjhcwTask extends AbstractAcsTask {
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -210,6 +211,7 @@ public class GzqToKzjhcwTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("管制区->空载具缓存位取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -158,6 +158,7 @@ public class MzhcwTask extends AbstractAcsTask {
|
||||
}
|
||||
// 更新任务表删除字段
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -360,6 +361,7 @@ public class MzhcwTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("输送线点位 -> 满轴缓存位取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -102,6 +102,7 @@ public class SendDjqKzjTask extends AbstractAcsTask {
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -132,7 +133,7 @@ public class SendDjqKzjTask extends AbstractAcsTask {
|
||||
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
|
||||
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
|
||||
.task_type(taskType)
|
||||
.vehicle_code(vehicleCode)
|
||||
.vehicle_code(vehicleCode)
|
||||
.vehicle_code2(form.getString("vehicle_code2"))
|
||||
.point_code1(pointCode1)
|
||||
.point_code2(pointCode2)
|
||||
@@ -180,6 +181,7 @@ public class SendDjqKzjTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("装箱区->待检区送空载具取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -102,6 +102,7 @@ public class SendGzqKzjTask extends AbstractAcsTask {
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -132,7 +133,7 @@ public class SendGzqKzjTask extends AbstractAcsTask {
|
||||
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
|
||||
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
|
||||
.task_type(taskType)
|
||||
.vehicle_code(vehicleCode)
|
||||
.vehicle_code(vehicleCode)
|
||||
.vehicle_code2(form.getString("vehicle_code2"))
|
||||
.point_code1(pointCode1)
|
||||
.point_code2(pointCode2)
|
||||
@@ -180,6 +181,7 @@ public class SendGzqKzjTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("装箱区->管制区送空载具取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
package org.nl.b_lms.sch.tasks.first_floor_area;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
@@ -24,6 +25,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -49,9 +51,6 @@ public class SsxDjwTask extends AbstractAcsTask {
|
||||
private IbstIvtPackageinfoivtService packageinfoivtService;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||
@@ -83,7 +82,7 @@ public class SsxDjwTask extends AbstractAcsTask {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
|
||||
if (schBaseTask == null) {
|
||||
throw new BadRequestException("空载具缓存位 -> 输送线完成接口任务号为空!");
|
||||
}
|
||||
@@ -120,7 +119,9 @@ public class SsxDjwTask extends AbstractAcsTask {
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -192,11 +193,12 @@ public class SsxDjwTask extends AbstractAcsTask {
|
||||
@Override
|
||||
public void cancel(String taskId) {
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_id, taskId), false) ;
|
||||
.eq(SchBaseTask::getTask_id, taskId), false);
|
||||
if (schBaseTask == null) {
|
||||
throw new BadRequestException("空载具缓存位 -> 输送线取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -151,6 +151,7 @@ public class ZxDjwTask extends AbstractAcsTask {
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setRemark("任务被强制取消,不执行任何逻辑!");
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
@@ -231,6 +232,7 @@ public class ZxDjwTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("装箱区 -> 装箱对接位取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -121,13 +121,13 @@ public class ZxqTask extends AbstractAcsTask {
|
||||
schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode());
|
||||
}
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper<PdmBiSlittingproductionplan>()
|
||||
.eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code()));
|
||||
if (containerInfo == null) {
|
||||
throw new BadRequestException("该子卷信息不存在!");
|
||||
} else if (StrUtil.isEmpty(containerInfo.getContainer_name())) {
|
||||
throw new BadRequestException("子卷号不能为空!");
|
||||
}
|
||||
// PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper<PdmBiSlittingproductionplan>()
|
||||
// .eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code()));
|
||||
// if (containerInfo == null) {
|
||||
// throw new BadRequestException("该子卷信息不存在!");
|
||||
// } else if (StrUtil.isEmpty(containerInfo.getContainer_name())) {
|
||||
// throw new BadRequestException("子卷号不能为空!");
|
||||
// }
|
||||
//1.更改任务状态为完成
|
||||
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
//2.改变起点点位状态
|
||||
@@ -144,6 +144,7 @@ public class ZxqTask extends AbstractAcsTask {
|
||||
}
|
||||
//任务被标记为取消
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -303,6 +304,7 @@ public class ZxqTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("待检区 -> 装箱区取消接口任务号为空!");
|
||||
}
|
||||
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
|
||||
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
package org.nl.b_lms.sch.tasks.first_floor_area.auto;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask;
|
||||
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.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AutoExecuteWaitTask {
|
||||
|
||||
@Resource
|
||||
private MzhcwTask mzhcwTask;
|
||||
|
||||
@Resource
|
||||
private SsxDjwTask ssxDjwTask;
|
||||
@Resource
|
||||
private IschBaseTaskService taskService;
|
||||
@Resource
|
||||
private IbstIvtPackageinfoivtService packageinfoivtService;
|
||||
|
||||
//自动执行等待的桁架任务
|
||||
public void run() {
|
||||
this.executeWaitTask();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 放满与取空桁架任务
|
||||
*/
|
||||
void executeWaitTask() {
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new LambdaQueryWrapper<SchBaseTask>()
|
||||
.or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
|
||||
.and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))))
|
||||
.or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())
|
||||
.and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))))
|
||||
);
|
||||
for (SchBaseTask task : taskList) {
|
||||
if (task != null) {
|
||||
String taskType = task.getTask_type();
|
||||
if (PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)").equals(taskType)) {
|
||||
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("空载具"))
|
||||
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
|
||||
if (CollectionUtils.isEmpty(kzjPointList)) {
|
||||
return;
|
||||
}
|
||||
List<SchBaseTask> existTaskList = getExistTasks(taskType, task.getVehicle_code());
|
||||
if (existTaskList.size() > 1) {
|
||||
throw new BadRequestException("存在多个子卷号相同的任务!");
|
||||
}
|
||||
task.setPoint_code1(kzjPointList.get(0).getPoint_code());
|
||||
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
taskService.updateById(task);
|
||||
ssxDjwTask.immediateNotifyAcs(null);
|
||||
} else if (PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位").equals(taskType)) {
|
||||
List<BstIvtPackageinfoivt> mzPointList = 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));
|
||||
if (CollectionUtils.isEmpty(mzPointList)) {
|
||||
return;
|
||||
}
|
||||
//校验相同是否存在相同子卷号任务
|
||||
List<SchBaseTask> existTaskList = getExistTasks(taskType, task.getVehicle_code());
|
||||
//如果有就不创建,没有就创建
|
||||
if (existTaskList.size() > 1) {
|
||||
throw new BadRequestException("存在多个子卷号相同的任务!");
|
||||
}
|
||||
task.setPoint_code2(mzPointList.get(0).getPoint_code());
|
||||
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
taskService.updateById(task);
|
||||
mzhcwTask.immediateNotifyAcs(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//校验相同子卷号的任务
|
||||
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("否"))
|
||||
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -42,19 +42,19 @@ public class AutoSendVehicleToDjq {
|
||||
//存在装箱区有空载具的点位
|
||||
String pointCode2 = null;
|
||||
JSONObject task = new JSONObject();
|
||||
List<BstIvtPackageinfoivt> zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), "", "");
|
||||
List<BstIvtPackageinfoivt> zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
|
||||
if (CollectionUtils.isEmpty(zxqIvtList)) {
|
||||
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("普通任务"));
|
||||
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
|
||||
} else {
|
||||
//管制区有空位
|
||||
List<BstIvtPackageinfoivt> gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
|
||||
List<BstIvtPackageinfoivt> gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
|
||||
if (CollectionUtils.isNotEmpty(gzqList)) {
|
||||
pointCode2 = gzqList.get(0).getPoint_code();
|
||||
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
|
||||
|
||||
@@ -12,7 +12,11 @@ import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@@ -72,10 +76,24 @@ public class AutoSendVehicleToKzj {
|
||||
//存在空载具缓存位无空载具的点位
|
||||
String pointCode1 = null;
|
||||
JSONObject task = new JSONObject();
|
||||
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), "", "");
|
||||
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
|
||||
if (CollectionUtils.isEmpty(kzjIvtList)) {
|
||||
return;
|
||||
}
|
||||
boolean hasEmptyVehicle = true;
|
||||
Optional<BstIvtPackageinfoivt> emptyList = kzjIvtList.stream()
|
||||
.filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空")))
|
||||
.findFirst();
|
||||
//判断点位外层是否有空载具
|
||||
if (emptyList.isPresent()) {
|
||||
BigDecimal sortSeq = emptyList.get().getSort_seq();
|
||||
hasEmptyVehicle = kzjIvtList.stream()
|
||||
.anyMatch(r -> r.getSort_seq().compareTo(sortSeq) < 0 &&
|
||||
r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具")));
|
||||
}
|
||||
if (hasEmptyVehicle) {
|
||||
return;
|
||||
}
|
||||
//待检区有空载具且过滤未完成任务
|
||||
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)) {
|
||||
@@ -95,7 +113,7 @@ public class AutoSendVehicleToKzj {
|
||||
if (pointCode1 != null) {
|
||||
task.put("point_code1", pointCode1);
|
||||
//送空二次分配,目标点分配等待点
|
||||
task.put("point_code4", kzjIvtList.get(0).getPoint_code());
|
||||
task.put("point_code4", emptyList.get().getPoint_code());
|
||||
task.put("point_code2", packageinfoivtService.getWaitPoint(kzjIvtList.get(0).getBlock(), kzjIvtList.get(0).getWait_point_type()));
|
||||
if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))) {
|
||||
djqToKzjhcwTask.createTask(task);
|
||||
|
||||
@@ -57,7 +57,7 @@ public class AutoSendZxToDjw {
|
||||
|
||||
void sendZxToDjw() {
|
||||
//装箱位有木箱
|
||||
List<BstIvtPackageinfoivt> zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位"));
|
||||
List<BstIvtPackageinfoivt> zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位"));
|
||||
if (CollectionUtils.isEmpty(zxwPackageinfoivtList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -243,15 +243,6 @@ public class AutoCallAirShaftTask {
|
||||
// 找一个点位: 目的需要的点位
|
||||
BstIvtStockingivt needPoint = stockingivtList.get(0);
|
||||
// 找到就创建AGV搬运任务
|
||||
// 查找一个没有任务的空位
|
||||
List<BstIvtStockingivt> list = stockingivtService.getEmptyPointNotTask(location, "0");
|
||||
if (list.size() == 0) {
|
||||
noticeService.createNotice("备货区找不到空位置搬运",
|
||||
"点位[" + empty.getPoint_name() + "]无法从备货区找到空位",
|
||||
NoticeTypeEnum.EXCEPTION.getCode());
|
||||
return;
|
||||
}
|
||||
BstIvtStockingivt endPoint = list.get(0);
|
||||
// 筛选3个位置中数量最少的搬走
|
||||
BstIvtStockingivt needMovePoint = stockingivtService.getCanMovePointOne(location, "1");
|
||||
// 空位就直接创建搬过来的任务
|
||||
@@ -261,6 +252,7 @@ public class AutoCallAirShaftTask {
|
||||
param.put("point_code1", needPoint.getPoint_code());
|
||||
param.put("point_code2", needMovePoint.getPoint_code());
|
||||
param.put("vehicle_code", needPoint.getVehicle_code());
|
||||
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管"));
|
||||
// 存储纸管信息
|
||||
List<MdPbPapervehicle> paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
|
||||
@@ -269,6 +261,15 @@ public class AutoCallAirShaftTask {
|
||||
stockAreaCallTubeTask.createTask(param);
|
||||
return;
|
||||
}
|
||||
// 查找一个没有任务的空位
|
||||
List<BstIvtStockingivt> list = stockingivtService.getEmptyPointNotTask(location, "0");
|
||||
if (list.size() == 0) {
|
||||
noticeService.createNotice("备货区找不到空位置搬运",
|
||||
"点位[" + empty.getPoint_name() + "]无法从备货区找到空位",
|
||||
NoticeTypeEnum.EXCEPTION.getCode());
|
||||
return;
|
||||
}
|
||||
BstIvtStockingivt endPoint = list.get(0);
|
||||
// 创建任务 -> HINT: 在此任务完成之后会调用搬回来的任务,因此任务中要记录需要搬运的点位放在任务请求参数中。
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", needMovePoint.getPoint_code());
|
||||
|
||||
@@ -840,6 +840,9 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject acsActionFinishRequestToRelease(JSONObject param) {
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.HTTP_OK);
|
||||
result.put("message", "反馈取货成功!");
|
||||
String taskCode = param.getString("task_code");
|
||||
if (ObjectUtil.isEmpty(taskCode)) {
|
||||
throw new BadRequestException("ACS二楼请求取货完成失败,任务号不能为空!");
|
||||
@@ -848,6 +851,11 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
// 起点释放
|
||||
String startPoint = task.getPoint_code1();
|
||||
BstIvtCutpointivt startPointObj = bcutpointivtService.getPintByAgvCode(startPoint, false);
|
||||
if (ObjectUtil.isEmpty(startPointObj)) {
|
||||
log.error("BstIvtCutpointivt-任务{}起点不存在,放行", taskCode);
|
||||
result.put("message", "不更新库存,放行!");
|
||||
return result;
|
||||
}
|
||||
startPointObj.setPoint_status("1");
|
||||
startPointObj.setQzz_no1("");
|
||||
startPointObj.setQzz_no2("");
|
||||
@@ -856,9 +864,6 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
task.setTask_status(TaskStatusEnum.PICK_UP_COMPLETED.getCode());
|
||||
TaskUtils.updateOptMessageByTask(task);
|
||||
taskService.updateById(task);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.HTTP_OK);
|
||||
result.put("message", "反馈取货成功!");
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -976,7 +981,25 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
|
||||
@Override
|
||||
public JSONObject slitterSpliceOperation(JSONObject param) {
|
||||
// todo:
|
||||
// param:OutsideContainerName 、 InsideContainerName、CarrierStatus
|
||||
String outsideContainerName = param.getString("OutsideContainerName");
|
||||
String insideContainerName = param.getString("InsideContainerName");
|
||||
String carrierStatus = param.getString("CarrierStatus");
|
||||
if (SlitterConstant.SLITTER_NO.equals(carrierStatus)) {
|
||||
// 不下卷需要修改。
|
||||
PdmBiSlittingproductionplan outPlan = slittingproductionplanService.getByContainerName(outsideContainerName);
|
||||
PdmBiSlittingproductionplan inPlan = slittingproductionplanService.getByContainerName(insideContainerName);
|
||||
outPlan.setQzzno(inPlan.getQzzno());
|
||||
outPlan.setStatus(inPlan.getStatus());
|
||||
outPlan.setIs_child_tz_ok(inPlan.getIs_child_tz_ok());
|
||||
outPlan.setIs_paper_ok(inPlan.getIs_paper_ok());
|
||||
TaskUtils.updateOptMessageBySlitterPlan(outPlan);
|
||||
inPlan.setQzzno(inPlan.getQzzno() + "拼接");
|
||||
inPlan.setStatus("09");
|
||||
TaskUtils.updateOptMessageBySlitterPlan(outPlan);
|
||||
List<PdmBiSlittingproductionplan> collect = Stream.of(outPlan, inPlan).collect(Collectors.toList());
|
||||
slittingproductionplanService.updateBatchById(collect);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package org.nl.b_lms.storage_manage.database.controller;
|
||||
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.b_lms.storage_manage.database.service.IMdpbBoxtypeService;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.MdpbBoxtype;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.modules.logging.annotation.Log;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 木箱规格信息前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author author
|
||||
* @since 2024-06-28
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/boxtype")
|
||||
@Slf4j
|
||||
public class MdpbBoxtypeController {
|
||||
|
||||
@Autowired
|
||||
private IMdpbBoxtypeService iMdpbBoxtypeService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询木箱类型")
|
||||
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page) {
|
||||
return new ResponseEntity<>(TableDataInfo.build(iMdpbBoxtypeService.queryAll(whereJson, page)), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Log("新增木箱类型")
|
||||
public ResponseEntity<Object> create(@Validated @RequestBody MdpbBoxtype dao) {
|
||||
iMdpbBoxtypeService.create(dao);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@Log("修改木箱类型")
|
||||
public ResponseEntity<Object> update(@Validated @RequestBody MdpbBoxtype dao) {
|
||||
iMdpbBoxtypeService.update(dao);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@DeleteMapping
|
||||
@Log("删除木箱类型")
|
||||
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
|
||||
iMdpbBoxtypeService.delete(ids);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package org.nl.b_lms.storage_manage.database.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.MdpbBoxtype;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 木箱规格信息服务类
|
||||
* </p>
|
||||
*
|
||||
* @author author
|
||||
* @since 2024-06-28
|
||||
*/
|
||||
public interface IMdpbBoxtypeService extends IService<MdpbBoxtype> {
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param whereJson : {查询参数}
|
||||
* @param pageable : 分页对象
|
||||
* @return 返回结果
|
||||
*/
|
||||
IPage<MdpbBoxtype> queryAll(Map whereJson, PageQuery pageable);
|
||||
|
||||
/**
|
||||
* 新增
|
||||
* @param dao : {实体对象}
|
||||
*/
|
||||
void create(MdpbBoxtype dao);
|
||||
|
||||
/**
|
||||
* 修改
|
||||
* @param dao: {实体对象}
|
||||
*/
|
||||
void update(MdpbBoxtype dao);
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @param ids : {集合}
|
||||
*/
|
||||
void delete(Set<String> ids);
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package org.nl.b_lms.storage_manage.database.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 木箱规格信息表
|
||||
* </p>
|
||||
*
|
||||
* @author author
|
||||
* @since 2024-06-28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("mdpb_boxtype")
|
||||
public class MdpbBoxtype implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 木箱类型
|
||||
*/
|
||||
@TableId(value = "box_type")
|
||||
private String box_type;
|
||||
|
||||
/**
|
||||
* 木箱描述
|
||||
*/
|
||||
private String box_name;
|
||||
|
||||
/**
|
||||
* 捆扎模版
|
||||
*/
|
||||
private String lash_num;
|
||||
|
||||
/**
|
||||
* 一次捆扎次数
|
||||
*/
|
||||
private String lash_num_one;
|
||||
|
||||
/**
|
||||
* 二次捆扎次数
|
||||
*/
|
||||
private String lash_num_tow;
|
||||
|
||||
/**
|
||||
* 是否一次捆扎
|
||||
*/
|
||||
private String need_lash_one;
|
||||
|
||||
/**
|
||||
* 是否二次捆扎
|
||||
*/
|
||||
private String need_lash_two;
|
||||
|
||||
/**
|
||||
* 叉车取货宽度
|
||||
*/
|
||||
private String expend_width;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.nl.b_lms.storage_manage.database.service.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.MdpbBoxtype;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 木箱规格信息表Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author author
|
||||
* @since 2024-06-28
|
||||
*/
|
||||
public interface MdpbBoxtypeMapper extends BaseMapper<MdpbBoxtype> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.b_lms.storage_manage.database.service.dao.mapper.MdpbBoxtypeMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,72 @@
|
||||
package org.nl.b_lms.storage_manage.database.service.impl;
|
||||
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
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.storage_manage.database.service.IMdpbBoxtypeService;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.MdpbBoxtype;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.mapper.MdpbBoxtypeMapper;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 木箱规格信息服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author author
|
||||
* @since 2024-06-28
|
||||
*/
|
||||
@Service
|
||||
public class MdpbBoxtypeServiceImpl extends ServiceImpl<MdpbBoxtypeMapper, MdpbBoxtype> implements IMdpbBoxtypeService {
|
||||
|
||||
@Override
|
||||
public IPage<MdpbBoxtype> queryAll(Map whereJson, PageQuery page) {
|
||||
// 查询条件
|
||||
LambdaQueryWrapper<MdpbBoxtype> queryWrapper = new QueryWrapper<MdpbBoxtype>().lambda();
|
||||
String box_type = MapUtil.getStr(whereJson, "box_type");
|
||||
String box_name = MapUtil.getStr(whereJson, "box_name");
|
||||
|
||||
if (ObjectUtil.isNotEmpty(box_type)) {
|
||||
queryWrapper.likeRight(MdpbBoxtype::getBox_type, box_type);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(box_name)) {
|
||||
queryWrapper.likeRight(MdpbBoxtype::getBox_name, box_name);
|
||||
}
|
||||
|
||||
return this.baseMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()),
|
||||
queryWrapper
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void create(MdpbBoxtype dao) {
|
||||
// 判断当前木箱类型是否存在
|
||||
MdpbBoxtype mdpbBoxtype = this.baseMapper.selectById(dao.getBox_type());
|
||||
if (ObjectUtil.isNotEmpty(mdpbBoxtype)) {
|
||||
throw new BadRequestException("当前木箱类型已存在:"+mdpbBoxtype.getBox_type());
|
||||
}
|
||||
this.baseMapper.insert(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(MdpbBoxtype dao) {
|
||||
this.baseMapper.updateById(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(Set<String> ids) {
|
||||
this.baseMapper.deleteBatchIds(ids);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user