fix:优化托盘混料出库报错问题;
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user