diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StructattrMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StructattrMapper.java index 2f285ba..7e821fc 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StructattrMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StructattrMapper.java @@ -1,9 +1,14 @@ package org.nl.wms.basedata_manage.service.dao.mapper; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.nl.wms.basedata_manage.service.dao.Structattr; +import java.util.List; +import java.util.Map; + /** * @author dsh * 2025/5/15 @@ -11,4 +16,11 @@ import org.nl.wms.basedata_manage.service.dao.Structattr; @Mapper public interface StructattrMapper extends BaseMapper{ + /** + * 查询一组全部都为空的一组仓位(中间站) + * @param json 入参 + * @return List 返回组序号 block_num + */ + List queryAttrGroup(@Param("param") Map json); + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StructattrMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StructattrMapper.xml new file mode 100644 index 0000000..ef3c191 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/StructattrMapper.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/decisioner/impl/base/MiddleRuleHandler.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/decisioner/impl/base/MiddleRuleHandler.java index 40bc68a..10c6c7b 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/decisioner/impl/base/MiddleRuleHandler.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/decisioner/impl/base/MiddleRuleHandler.java @@ -3,16 +3,21 @@ package org.nl.wms.decision_manage.service.decisioner.impl.base; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.MapOf; import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService; +import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.basedata_manage.service.dao.mapper.StructattrMapper; import org.nl.wms.basedata_manage.service.dto.StrategyMater; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.decision_manage.service.decisioner.Decisioner; +import org.nl.wms.warehouse_management.enums.IOSEnum; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.Comparator; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -31,24 +36,42 @@ public class MiddleRuleHandler extends Decisioner handler(List list, StrategyStructParam param) { log.info("---------执行middle入库分配规则---------"); - // 根据托盘查询库内库存 - List vehicleList = list.stream() - .filter(row -> ObjectUtil.isNotEmpty(row.getStoragevehicle_code())) + List resuList = new ArrayList<>(); + + Structattr structattr = list.get(0); + List attrList = iStructattrService.list( + new QueryWrapper().lambda() + .eq(Structattr::getSect_id, structattr.getSect_id()) + .and(row -> row.isNotNull(Structattr::getStoragevehicle_code) + .ne(Structattr::getStoragevehicle_code, "") + ) + ); + // 查询此托盘对应的库存信息 + List vehicleList = attrList.stream() .map(Structattr::getStoragevehicle_code) .distinct() .collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(vehicleList)) { + // 为空:查询空的一组可用货位 + return this.queryAttrGroup(structattr); + } + List extList = iMdPbStoragevehicleextService.list( new QueryWrapper().lambda() .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleList) ); - if (ObjectUtil.isEmpty(extList)) { - // 查询一组未有货的仓位 - } - // 不为空则判断是否有匹配的物料仓位 + // 不为空:判断是否有相同物料批次的库存 StrategyMater strategyMater = param.getStrategyMaters().get(0); MdPbStoragevehicleext extDaoLike = extList.stream() .filter(row -> row.getMaterial_id().equals(strategyMater.getMaterial_id()) @@ -56,11 +79,50 @@ public class MiddleRuleHandler extends Decisioner().lambda() + .eq(Structattr::getStoragevehicle_code, extDaoLike.getStoragevehicle_code()) + ); + resuList = iStructattrService.list( + new QueryWrapper().lambda() + .eq(Structattr::getSect_id, structattr.getSect_id()) + .eq(Structattr::getBlock_num, attrLikeVehicle.getBlock_num()) + .eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .and(row -> row.isNull(Structattr::getStoragevehicle_code) + .or().eq(Structattr::getStoragevehicle_code, "") + ) + .orderByAsc(Structattr::getStruct_code) + ); + if (ObjectUtil.isEmpty(resuList)) { + return this.queryAttrGroup(structattr); + } + return resuList; } + /** + * 查询空的一组可用货位 + * + * @param structattr 实体类 + * @return List + */ + public List queryAttrGroup(Structattr structattr) { + // 查询一组未有货组仓位 + List groupBlockList = structattrMapper.queryAttrGroup(MapOf.of("sect_id", structattr.getSect_id())); + if (ObjectUtil.isEmpty(groupBlockList)) { + throw new BadRequestException("当前组仓位不足!"); + } + // 根据组查询可用仓位 + return iStructattrService.list( + new QueryWrapper().lambda() + .eq(Structattr::getSect_id, structattr.getSect_id()) + .eq(Structattr::getBlock_num, groupBlockList.get(0).getBlock_num()) + .orderByAsc(Structattr::getStruct_code) + ); + } + }