opt:1.空出取消分配,自动取消,异常处理流程;

2.顶楼出库不允许到1308;
This commit is contained in:
2025-07-15 12:15:51 +08:00
parent 368b846b1f
commit 9c6cb85e50
2 changed files with 61 additions and 35 deletions

View File

@@ -21,7 +21,6 @@ import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.md_manage.vehicleMater.service.dto.MdPbVehicleMaterVo;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +29,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/*
@@ -60,39 +58,45 @@ public class ToPickPlatformTask extends AbstractTask {
String vehicle_code = from.getString("vehicle_code");
String target_point = null;// = from.getString("target_point");
String priority = from.getString("priority");
List<SchBasePoint> targetPoints = iSchBasePointService.list(new QueryWrapper<SchBasePoint>()
.eq("region_code", "PICK01").eq("is_used", true));
//通过全局变量获取目标位置
if (CollectionUtils.isEmpty(targetPoints)){
throw new BadRequestException("当前拣选工位未启用");
StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("vehicle_code", vehicle_code));
if (ObjectUtils.isEmpty(struct)) {
throw new BadRequestException("创建任务失败:未找到该物料对应起点仓位");
}
//轮询
log.info("上次拣选平台分配位置:{},拣选平台开放点:{}",Lask_Point,targetPoints);
for (int i = 0; i < targetPoints.size(); i++) {
String code = targetPoints.get(i).getCode();
if (targetPoints.size()>1 && !code.equals(Lask_Point)){
target_point = code;
break;
String start_struct_code = struct.getStruct_code();
//25.7.15acs新增规则顶楼出库拣选任务不允许去1308
if (start_struct_code.contains("B")) {
target_point = "1311";
} else {
List<SchBasePoint> targetPoints = iSchBasePointService.list(new QueryWrapper<SchBasePoint>()
.eq("region_code", "PICK01").eq("is_used", true));
//通过全局变量获取目标位置
if (CollectionUtils.isEmpty(targetPoints)) {
throw new BadRequestException("当前拣选工位未启用");
}
//轮询
log.info("上次拣选平台分配位置:{},拣选平台开放点:{}", Lask_Point, targetPoints);
for (int i = 0; i < targetPoints.size(); i++) {
String code = targetPoints.get(i).getCode();
if (targetPoints.size() > 1 && !code.equals(Lask_Point)) {
target_point = code;
break;
}
target_point = code;
}
target_point = code;
}
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)){
if (StringUtils.isEmpty(vehicle_code) || StringUtils.isEmpty(target_point)) {
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
}
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
if (!CollectionUtils.isEmpty(list)) {
throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("vehicle_code", vehicle_code));
if (ObjectUtils.isEmpty(struct)){
throw new BadRequestException("创建任务失败:未找到该物料对应起点仓位");
}
String start_struct_code = struct.getStruct_code();
//移库判断
if (struct.getStor_code().equals("FStockId")){
synchronized ("FStockId"){
start_struct_code= SpringContextHolder.getBean(OutStorageTask.class).DoubleStor(struct);
if (struct.getStor_code().equals("FStockId")) {
synchronized ("FStockId") {
start_struct_code = SpringContextHolder.getBean(OutStorageTask.class).DoubleStor(struct);
}
}
SchBaseTask task = new SchBaseTask();

View File

@@ -256,7 +256,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
.eq("task_code", task.getTask_code()).eq("vehicle_code", task.getVehicle_code()).eq("is_delete", "0"));
if (ObjectUtils.isNotEmpty(vehicleMaterList)) {
//查找非二楼任务的未完成的出库单与明细
if (StringUtils.isBlank(vehicleMaterList.get(0).getPrd_ppbom_no())) {
if (vehicleMaterList.get(0).getRemark().contains("空出")) {
List<Map> formData = this.getIoSourceFormData(task.getVehicle_code(), vehicleMaterList.get(0).getPcsn());
if (ObjectUtils.isNotEmpty(formData)) {
Map formDataMap = formData.get(0);
@@ -265,16 +265,27 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
String id = formDataId.getString("id");
String qty = formDataId.getString("qty");
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(qty)) {
BigDecimal cancelQty = BigDecimal.valueOf(Long.parseLong(qty)).subtract(vehicleMaterList.get(0).getFrozen_qty());
iPmFormDataService.update(new LambdaUpdateWrapper<PmFormData>()
.set(PmFormData::getAssign_qty, cancelQty)
.eq(PmFormData::getId, id));
LambdaUpdateWrapper<PmFormData> lambdaUpdateWrapper = new LambdaUpdateWrapper<PmFormData>();
PmFormData pmFormData = iPmFormDataService.getById(id);
BigDecimal cancelQty = pmFormData.getAssign_qty().subtract(vehicleMaterList.get(0).getFrozen_qty()).abs();
if (cancelQty.compareTo(BigDecimal.ZERO) == 0) {
lambdaUpdateWrapper.set(PmFormData::getQty, pmFormData.getAssign_qty());
}
lambdaUpdateWrapper.set(PmFormData::getAssign_qty, cancelQty).eq(PmFormData::getId, id);
iPmFormDataService.update(lambdaUpdateWrapper);
}
String msg = "该库存在执行出库单id为" + id + ",任务号为:" + task.getTask_code() + ",触发空出或被手动取消,取消数量为:" + vehicleMaterList.get(0).getFrozen_qty();
//冻结解锁
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>().set(MdPbVehicleMater::getFrozen_qty, 0).set(MdPbVehicleMater::getRemark, msg).eq(MdPbVehicleMater::getId, vehicleMaterList.get(0).getId()));
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
.set(MdPbVehicleMater::getFrozen_qty, 0)
.set(MdPbVehicleMater::getRemark, msg)
.eq(MdPbVehicleMater::getId, vehicleMaterList.get(0).getId()));
//库位空出
iStIvtStructattrService.update(new LambdaUpdateWrapper<StIvtStructattr>().set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("空出锁")).set(StIvtStructattr::getRemark, msg).eq(StIvtStructattr::getVehicle_code, task.getVehicle_code()));
iStIvtStructattrService.update(new LambdaUpdateWrapper<StIvtStructattr>()
.set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("空出锁"))
.set(StIvtStructattr::getRemark, msg)
.eq(StIvtStructattr::getVehicle_code, task.getVehicle_code()));
}
}
}
@@ -321,11 +332,14 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
}
switch (type) {
case "ck":
if (task.getStatus().equals(StatusEnum.FORM_STATUS.code("完成")) || task.getStatus().equals(StatusEnum.FORM_STATUS.code("取消")) || task.getStatus().equals(StatusEnum.FORM_STATUS.code("强制完成"))) {
throw new BadRequestException("当前任务已完成或被取消");
}
List<MdPbVehicleMater> vehicleList = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
.eq("vehicle_code", task.getVehicle_code())
.eq("is_delete", false));
if (ObjectUtils.isNotEmpty(vehicleList)) {
//非混料托盘
//非混料托盘,混料托盘不能直接清除库存
if (vehicleList.size() == 1) {
//清除库位库存
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
@@ -334,6 +348,11 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
.set("lock_type", StatusEnum.LOCK.code("无锁"))
.set("remark", struct_code + "空出异常")
.eq("struct_code", struct_code));
//标记空出,清除组盘信息
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
.set("update_time", DateUtil.now())
.set("remark", "空出")
.eq("id", vehicleList.get(0).getId()));
}
//流程异常完成
vehicleList = vehicleList.stream().filter(r -> StringUtils.isNotBlank(r.getProc_inst_id())).collect(Collectors.toList());
@@ -343,11 +362,14 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
.set("remark", task.getVehicle_code() + "载具空出:货位" + struct_code)
.eq("proc_inst_id", vehicleList.get(0).getProc_inst_id()));
}
//增加备注
this.update(new UpdateWrapper<SchBaseTask>()
.set("status", StatusEnum.FORM_STATUS.code("取消"))
.set("remark", struct_code + "空出异常")
.set("update_time", DateUtil.now())
.eq("task_code", task_code));
param.put("status", StatusEnum.FORM_STATUS.code("取消"));
//取消分配数据
operation(param);
}
break;
case "rm":