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

View File

@@ -414,7 +414,7 @@ public class PdaIOService {
dtl.getPcsn())));
List<MdPbVehicleMater> MdPbVehicleMaters = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
.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));
for (String disPcsn : pcsnListMap.keySet()) {
List<MdPbVehicleMater> currentPcsnMater = pcsnListMap.get(disPcsn);
@@ -422,7 +422,7 @@ public class PdaIOService {
StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl();
ivtDtl.setMaterial_id(dtl.getMaterial_id());
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.setStor_code(storCode);//pdaFormOutMst.getStor_code()
ivtDtl.setId(IdUtil.getStringId());

View File

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

View File

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

View File

@@ -396,7 +396,7 @@ public class SyncErpBillsScheduleService {
String m_spec = object.getString("m_spec");
String m_unit = mainFormData.getUnit_id();
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) {
iMdMeMaterialbaseService.update(new LambdaUpdateWrapper<MdMeMaterialbase>()
.set(MdMeMaterialbase::getMaterial_code, m_code)