diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java index 3b5ff9d6..6cc91a42 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java @@ -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 list = taskService.list(new QueryWrapper() - .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().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() - .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 list = taskService.list(new QueryWrapper() + .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().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() + .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) diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java index 15c0695f..db2f3ab4 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java @@ -414,7 +414,7 @@ public class PdaIOService { dtl.getPcsn()))); List MdPbVehicleMaters = iMdPbVehicleMaterService.list(new QueryWrapper() .in("vehicle_code", vehicles.split(",")) - .eq("is_delete", false)); + .eq("is_delete", false).eq("material_id", dtl.getMaterial_id())); Map> pcsnListMap = MdPbVehicleMaters.stream().collect(Collectors.groupingBy(MdPbVehicleMater::getPcsn)); for (String disPcsn : pcsnListMap.keySet()) { List 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()); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor_dtl/impl/StIvtIostorinvdtlServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor_dtl/impl/StIvtIostorinvdtlServiceImpl.java index 98ae6bda..00116e88 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor_dtl/impl/StIvtIostorinvdtlServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor_dtl/impl/StIvtIostorinvdtlServiceImpl.java @@ -87,11 +87,14 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl() .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); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/impl/StIvtStructattrServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/impl/StIvtStructattrServiceImpl.java index 5eb7561c..57761f21 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/impl/StIvtStructattrServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/impl/StIvtStructattrServiceImpl.java @@ -129,7 +129,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl "BD_MATERIAL_1".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0); - MdMeMaterialbase materialInfo = iMdMeMaterialbaseService.getOne(new QueryWrapper().eq("material_code", m_code)); + MdMeMaterialbase materialInfo = iMdMeMaterialbaseService.getOne(new QueryWrapper().eq("material_id", mainFormData.getId())); if (materialInfo != null) { iMdMeMaterialbaseService.update(new LambdaUpdateWrapper() .set(MdMeMaterialbase::getMaterial_code, m_code)