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.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; 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.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.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +29,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/* /*
@@ -60,39 +58,45 @@ public class ToPickPlatformTask extends AbstractTask {
String vehicle_code = from.getString("vehicle_code"); String vehicle_code = from.getString("vehicle_code");
String target_point = null;// = from.getString("target_point"); String target_point = null;// = from.getString("target_point");
String priority = from.getString("priority"); String priority = from.getString("priority");
List<SchBasePoint> targetPoints = iSchBasePointService.list(new QueryWrapper<SchBasePoint>() StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("vehicle_code", vehicle_code));
.eq("region_code", "PICK01").eq("is_used", true)); if (ObjectUtils.isEmpty(struct)) {
//通过全局变量获取目标位置 throw new BadRequestException("创建任务失败:未找到该物料对应起点仓位");
if (CollectionUtils.isEmpty(targetPoints)){
throw new BadRequestException("当前拣选工位未启用");
} }
//轮询 String start_struct_code = struct.getStruct_code();
log.info("上次拣选平台分配位置:{},拣选平台开放点:{}",Lask_Point,targetPoints); //25.7.15acs新增规则顶楼出库拣选任务不允许去1308
for (int i = 0; i < targetPoints.size(); i++) { if (start_struct_code.contains("B")) {
String code = targetPoints.get(i).getCode(); target_point = "1311";
if (targetPoints.size()>1 && !code.equals(Lask_Point)){ } else {
target_point = code; List<SchBasePoint> targetPoints = iSchBasePointService.list(new QueryWrapper<SchBasePoint>()
break; .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("创建任务失败:方法请求参数不能为空"); throw new BadRequestException("创建任务失败:方法请求参数不能为空");
} }
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code) List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成"))); .lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (!CollectionUtils.isEmpty(list)){ if (!CollectionUtils.isEmpty(list)) {
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); 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")){ if (struct.getStor_code().equals("FStockId")) {
synchronized ("FStockId"){ synchronized ("FStockId") {
start_struct_code= SpringContextHolder.getBean(OutStorageTask.class).DoubleStor(struct); start_struct_code = SpringContextHolder.getBean(OutStorageTask.class).DoubleStor(struct);
} }
} }
SchBaseTask task = new SchBaseTask(); 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")); .eq("task_code", task.getTask_code()).eq("vehicle_code", task.getVehicle_code()).eq("is_delete", "0"));
if (ObjectUtils.isNotEmpty(vehicleMaterList)) { 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()); List<Map> formData = this.getIoSourceFormData(task.getVehicle_code(), vehicleMaterList.get(0).getPcsn());
if (ObjectUtils.isNotEmpty(formData)) { if (ObjectUtils.isNotEmpty(formData)) {
Map formDataMap = formData.get(0); Map formDataMap = formData.get(0);
@@ -265,16 +265,27 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
String id = formDataId.getString("id"); String id = formDataId.getString("id");
String qty = formDataId.getString("qty"); String qty = formDataId.getString("qty");
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(qty)) { if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(qty)) {
BigDecimal cancelQty = BigDecimal.valueOf(Long.parseLong(qty)).subtract(vehicleMaterList.get(0).getFrozen_qty()); LambdaUpdateWrapper<PmFormData> lambdaUpdateWrapper = new LambdaUpdateWrapper<PmFormData>();
iPmFormDataService.update(new LambdaUpdateWrapper<PmFormData>() PmFormData pmFormData = iPmFormDataService.getById(id);
.set(PmFormData::getAssign_qty, cancelQty) BigDecimal cancelQty = pmFormData.getAssign_qty().subtract(vehicleMaterList.get(0).getFrozen_qty()).abs();
.eq(PmFormData::getId, id)); 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(); 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) { switch (type) {
case "ck": 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>() List<MdPbVehicleMater> vehicleList = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
.eq("vehicle_code", task.getVehicle_code()) .eq("vehicle_code", task.getVehicle_code())
.eq("is_delete", false)); .eq("is_delete", false));
if (ObjectUtils.isNotEmpty(vehicleList)) { if (ObjectUtils.isNotEmpty(vehicleList)) {
//非混料托盘 //非混料托盘,混料托盘不能直接清除库存
if (vehicleList.size() == 1) { if (vehicleList.size() == 1) {
//清除库位库存 //清除库位库存
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>() iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
@@ -334,6 +348,11 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
.set("lock_type", StatusEnum.LOCK.code("无锁")) .set("lock_type", StatusEnum.LOCK.code("无锁"))
.set("remark", struct_code + "空出异常") .set("remark", struct_code + "空出异常")
.eq("struct_code", 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()); 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) .set("remark", task.getVehicle_code() + "载具空出:货位" + struct_code)
.eq("proc_inst_id", vehicleList.get(0).getProc_inst_id())); .eq("proc_inst_id", vehicleList.get(0).getProc_inst_id()));
} }
//增加备注
this.update(new UpdateWrapper<SchBaseTask>() this.update(new UpdateWrapper<SchBaseTask>()
.set("status", StatusEnum.FORM_STATUS.code("取消"))
.set("remark", struct_code + "空出异常") .set("remark", struct_code + "空出异常")
.set("update_time", DateUtil.now()) .set("update_time", DateUtil.now())
.eq("task_code", task_code)); .eq("task_code", task_code));
param.put("status", StatusEnum.FORM_STATUS.code("取消"));
//取消分配数据
operation(param);
} }
break; break;
case "rm": case "rm":