fix:优化托盘混料出库报错问题;

This commit is contained in:
2025-03-22 22:16:35 +08:00
parent 0341568eb7
commit 73202ff37d
5 changed files with 83 additions and 74 deletions

View File

@@ -5,8 +5,8 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.constant.DictConstantPool; import org.nl.common.domain.constant.DictConstantPool;
import org.nl.common.domain.exception.BadRequestException; import org.nl.common.domain.exception.BadRequestException;
@@ -19,9 +19,10 @@ import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.Decisi
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.pm_manage.form_data.service.IPmFormDataService; import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
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.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
@@ -30,6 +31,7 @@ import org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -46,81 +48,85 @@ public class OutStorageTask extends AbstractTask {
private ISchBaseTaskService taskService; private ISchBaseTaskService taskService;
@Autowired @Autowired
private MoveStorageTask moveStorageTask; private MoveStorageTask moveStorageTask;
@Autowired @Autowired
private IStIvtStructattrService iStIvtStructattrService; private IStIvtStructattrService iStIvtStructattrService;
@Autowired @Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService; private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Autowired
private IPmFormDataService iPmFormDataService;
@Override @Override
@Transactional @Transactional
@SneakyThrows
public JSONObject createTask(JSONObject from) { public JSONObject createTask(JSONObject from) {
String vehicle_code = from.getString("vehicle_code"); String vehicle_code = from.getString("vehicle_code");
String target_point = from.getString("target_point"); String target_point = from.getString("target_point");
//通过全局变量获取目标位置 //通过全局变量获取目标位置
String product_area = from.getString("product_area"); String product_area = from.getString("product_area");
if (StringUtils.isEmpty(product_area)) { if (StringUtils.isEmpty(product_area)) {
JSONObject formData = from.getJSONObject("form_data"); JSONObject formData = from.getJSONObject("form_data");
if (!StringUtils.isEmpty(formData.getString("product_area"))) { if (!StringUtils.isEmpty(formData.getString("product_area"))) {
product_area = formData.getString("product_area"); product_area = formData.getString("product_area");
} }
} }
if (StringUtils.isNotEmpty(product_area)) { if (StringUtils.isNotEmpty(product_area)) {
String configTarget; String configTarget;
if (vehicle_code.contains("T")) { if (vehicle_code.contains("T")) {
configTarget = DictConstantPool.PRODUCT_OUT_POINT_TP.get(product_area); configTarget = DictConstantPool.PRODUCT_OUT_POINT_TP.get(product_area);
} else { } else {
configTarget = DictConstantPool.PRODUCT_OUT_POINT.get(product_area); configTarget = DictConstantPool.PRODUCT_OUT_POINT.get(product_area);
} }
if (StringUtils.isEmpty(configTarget)) { if (StringUtils.isEmpty(configTarget)) {
throw new BadRequestException("创建任务失败:出库点车间点位对应关系配置异常"); throw new BadRequestException("创建任务失败:出库点车间点位对应关系配置异常");
} }
target_point = configTarget; target_point = configTarget;
} }
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 = taskService.list(new QueryWrapper<SchBaseTask>() List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("vehicle_code", vehicle_code) .eq("vehicle_code", vehicle_code)
.ne("task_type",StatusEnum.IOBILL_TYPE_MOVE.code("移库")) .ne("task_type", StatusEnum.IOBILL_TYPE_MOVE.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(","))); if (!from.getString("task_type").equals(StatusEnum.IOBILL_TYPE_MOVE.code("移库"))) {
} //一个托盘绑定多个物料,物料编码相同批号不同,防止生成相同起点终点相同的任务
StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("vehicle_code", vehicle_code)); if (list.get(0).getPoint_code2().equals(target_point)&&list.get(0).getVehicle_code().contains("T")) {
log.info("OutStorgeTask出入分配货位信息:{}",struct.toString()); return (JSONObject) JSON.toJSON(list.get(0));
String end_struct_code = struct.getStruct_code(); }
} else {
if (struct.getStor_code().equals("FStockId")){ throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
synchronized ("FStockId"){ }
end_struct_code = SpringContextHolder.getBean(OutStorageTask.class).DoubleStor(struct); }
} StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("vehicle_code", vehicle_code));
} log.info("OutStorgeTask出入分配货位信息:{}", struct.toString());
SchBaseTask task = new SchBaseTask(); String end_struct_code = struct.getStruct_code();
task.setId(IdUtil.getStringId()); if (struct.getStor_code().equals("FStockId")) {
task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); synchronized ("FStockId") {
task.setStatus(StatusEnum.FORM_STATUS.code("生成")); end_struct_code = SpringContextHolder.getBean(OutStorageTask.class).DoubleStor(struct);
task.setHandle_class(this.getClass().getName()); }
task.setAcs_type(StatusEnum.ACS_TYPE.code("立库")); }
task.setCreate_time(DateUtil.now()); SchBaseTask task = new SchBaseTask();
task.setCreate_name(SecurityUtils.getCurrentNickName()); task.setId(IdUtil.getStringId());
task.setTask_type(from.getString("task_type")); task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setVehicle_code(vehicle_code); task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
task.setPoint_code1(end_struct_code); task.setHandle_class(this.getClass().getName());
task.setPoint_code2(target_point); task.setAcs_type(StatusEnum.ACS_TYPE.code("立库"));
taskService.save(task); task.setCreate_time(DateUtil.now());
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>() task.setCreate_name(SecurityUtils.getCurrentNickName());
.set(MdPbVehicleMater::getTask_code,task.getTask_code()) task.setTask_type(from.getString("task_type"));
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()) task.setVehicle_code(vehicle_code);
.eq(MdPbVehicleMater::getIs_delete,false)); task.setPoint_code1(end_struct_code);
//TODO:是否下发 task.setPoint_code2(target_point);
Boolean isSend = from.getBoolean("is_send"); taskService.save(task);
if (isSend){ iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
//参数封装调acs接口 .set(MdPbVehicleMater::getTask_code, task.getTask_code())
} .eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code())
return (JSONObject)JSON.toJSON(task); .eq(MdPbVehicleMater::getIs_delete, false));
Boolean isSend = from.getBoolean("is_send");
if (isSend) {
//参数封装调acs接口
}
return (JSONObject) JSON.toJSON(task);
} }
@Transactional(propagation= Propagation.REQUIRES_NEW) @Transactional(propagation= Propagation.REQUIRES_NEW)

View File

@@ -414,7 +414,7 @@ public class PdaIOService {
dtl.getPcsn()))); dtl.getPcsn())));
List<MdPbVehicleMater> MdPbVehicleMaters = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>() List<MdPbVehicleMater> MdPbVehicleMaters = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
.in("vehicle_code", vehicles.split(",")) .in("vehicle_code", vehicles.split(","))
.eq("is_delete", false)); .eq("is_delete", false).eq("material_id", dtl.getMaterial_id()));
Map<String, List<MdPbVehicleMater>> pcsnListMap = MdPbVehicleMaters.stream().collect(Collectors.groupingBy(MdPbVehicleMater::getPcsn)); Map<String, List<MdPbVehicleMater>> pcsnListMap = MdPbVehicleMaters.stream().collect(Collectors.groupingBy(MdPbVehicleMater::getPcsn));
for (String disPcsn : pcsnListMap.keySet()) { for (String disPcsn : pcsnListMap.keySet()) {
List<MdPbVehicleMater> currentPcsnMater = pcsnListMap.get(disPcsn); List<MdPbVehicleMater> currentPcsnMater = pcsnListMap.get(disPcsn);
@@ -422,7 +422,7 @@ public class PdaIOService {
StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl(); StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl();
ivtDtl.setMaterial_id(dtl.getMaterial_id()); ivtDtl.setMaterial_id(dtl.getMaterial_id());
ivtDtl.setForm_data(new JSONObject(map)); ivtDtl.setForm_data(new JSONObject(map));
ivtDtl.setQty(BigDecimal.valueOf(currentPcsnMater.stream().mapToInt(a->a.getFrozen_qty().intValue()).sum())); ivtDtl.setQty(BigDecimal.valueOf(currentPcsnMater.stream().mapToInt(a -> a.getFrozen_qty().intValue()).sum()));
ivtDtl.setPcsn(disPcsn); ivtDtl.setPcsn(disPcsn);
ivtDtl.setStor_code(storCode);//pdaFormOutMst.getStor_code() ivtDtl.setStor_code(storCode);//pdaFormOutMst.getStor_code()
ivtDtl.setId(IdUtil.getStringId()); ivtDtl.setId(IdUtil.getStringId());

View File

@@ -87,11 +87,14 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
JSONObject formData = iostorinvdtl.getForm_data(); JSONObject formData = iostorinvdtl.getForm_data();
for (String vehicle_id : iostorinvdtl.getVehicle_id().split(",")) { for (String vehicle_id : iostorinvdtl.getVehicle_id().split(",")) {
StIvtIostorinvdtlVo vo = new StIvtIostorinvdtlVo(); StIvtIostorinvdtlVo vo = new StIvtIostorinvdtlVo();
BeanUtils.copyProperties(iostorinvdtl,vo); BeanUtils.copyProperties(iostorinvdtl, vo);
MdPbVehicleMater one = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>() MdPbVehicleMater one = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>()
.eq("id", vehicle_id) .eq("id", vehicle_id)
.eq("is_delete", false) .eq("is_delete", false)
.eq("material_id", iostorinvdtl.getMaterial_id())); .eq("material_id", iostorinvdtl.getMaterial_id()));
if (one == null) {
continue;
}
vo.setVehicleMater(one); vo.setVehicleMater(one);
vo.setVehicle_code(one.getVehicle_code()); vo.setVehicle_code(one.getVehicle_code());
vo.setVehicle_id(vehicle_id); vo.setVehicle_id(vehicle_id);

View File

@@ -129,7 +129,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
} else { } else {
//托盘整出需要扣库存,除了二楼料箱整出不扣库存,其他都扣库存 //托盘整出需要扣库存,除了二楼料箱整出不扣库存,其他都扣库存
if (!("2114").equals(point_code2)) { if (!("2114").equals(point_code2)) {
update.set("qty", subtract); update.set("qty", subtract).set("is_delete", 1);
} }
} }
vehicleMaterService.update(update); vehicleMaterService.update(update);

View File

@@ -396,7 +396,7 @@ public class SyncErpBillsScheduleService {
String m_spec = object.getString("m_spec"); String m_spec = object.getString("m_spec");
String m_unit = mainFormData.getUnit_id(); String m_unit = mainFormData.getUnit_id();
PmFormData formData = formDataList.stream().filter(rs1 -> "BD_MATERIAL_1".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0); PmFormData formData = formDataList.stream().filter(rs1 -> "BD_MATERIAL_1".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0);
MdMeMaterialbase materialInfo = iMdMeMaterialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_code", m_code)); MdMeMaterialbase materialInfo = iMdMeMaterialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", mainFormData.getId()));
if (materialInfo != null) { if (materialInfo != null) {
iMdMeMaterialbaseService.update(new LambdaUpdateWrapper<MdMeMaterialbase>() iMdMeMaterialbaseService.update(new LambdaUpdateWrapper<MdMeMaterialbase>()
.set(MdMeMaterialbase::getMaterial_code, m_code) .set(MdMeMaterialbase::getMaterial_code, m_code)