Merge branch 'refs/heads/b_lms' into master_merge

This commit is contained in:
zhouz
2024-06-29 16:50:20 +08:00
28 changed files with 855 additions and 69 deletions

View File

@@ -70,4 +70,11 @@ public interface IPdmBiSlittingproductionplanService extends IService<PdmBiSlitt
* @return /
*/
List<SlitterPlanDistinctDto> getAllHalfPlan(List<String> qzzs);
/**
* 根据子卷获取分切
* @param containerName 子卷
* @return /
*/
PdmBiSlittingproductionplan getByContainerName(String containerName);
}

View File

@@ -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);
}
}

View File

@@ -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 {

View File

@@ -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()));
}
}
}

View File

@@ -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());

View File

@@ -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);
// }
// }
}
}

View File

@@ -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());

View File

@@ -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());

View File

@@ -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());

View File

@@ -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());

View File

@@ -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());

View File

@@ -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());

View File

@@ -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());

View File

@@ -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());

View File

@@ -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(""))
);
}
}

View File

@@ -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("普通任务"));

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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());

View File

@@ -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:
// paramOutsideContainerName 、 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;
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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> {
}

View File

@@ -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>

View File

@@ -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);
}
}