add:中间站入库分配规则
This commit is contained in:
@@ -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<Structattr>{
|
||||
|
||||
/**
|
||||
* 查询一组全部都为空的一组仓位(中间站)
|
||||
* @param json 入参
|
||||
* @return List<Structattr> 返回组序号 block_num
|
||||
*/
|
||||
List<Structattr> queryAttrGroup(@Param("param") Map json);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.basedata_manage.service.dao.mapper.StructattrMapper">
|
||||
<select id="queryAttrGroup" resultType="org.nl.wms.basedata_manage.service.dao.Structattr">
|
||||
SELECT
|
||||
attr.block_num
|
||||
FROM
|
||||
st_ivt_structattr attr
|
||||
<where>
|
||||
1 = 1
|
||||
<if test="param.sect_id != null and param.sect_id != ''">
|
||||
AND
|
||||
attr.sect_id LIKE #{param.sect_id}
|
||||
</if>
|
||||
|
||||
</where>
|
||||
GROUP BY
|
||||
attr.block_num
|
||||
HAVING
|
||||
MAX(TRIM(COALESCE(attr.storagevehicle_code, ''))) = ''
|
||||
AND MAX(TRIM( attr.lock_type )) = '0'
|
||||
ORDER BY attr.block_num
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -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<Structattr, StrategyStructPara
|
||||
@Resource
|
||||
private IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
|
||||
|
||||
@Resource
|
||||
private IStructattrService iStructattrService;
|
||||
|
||||
@Resource
|
||||
private StructattrMapper structattrMapper;
|
||||
|
||||
@Override
|
||||
public List<Structattr> handler(List<Structattr> list, StrategyStructParam param) {
|
||||
log.info("---------执行middle入库分配规则---------");
|
||||
// 根据托盘查询库内库存
|
||||
List<String> vehicleList = list.stream()
|
||||
.filter(row -> ObjectUtil.isNotEmpty(row.getStoragevehicle_code()))
|
||||
List<Structattr> resuList = new ArrayList<>();
|
||||
|
||||
Structattr structattr = list.get(0);
|
||||
List<Structattr> attrList = iStructattrService.list(
|
||||
new QueryWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getSect_id, structattr.getSect_id())
|
||||
.and(row -> row.isNotNull(Structattr::getStoragevehicle_code)
|
||||
.ne(Structattr::getStoragevehicle_code, "")
|
||||
)
|
||||
);
|
||||
// 查询此托盘对应的库存信息
|
||||
List<String> vehicleList = attrList.stream()
|
||||
.map(Structattr::getStoragevehicle_code)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (ObjectUtil.isEmpty(vehicleList)) {
|
||||
// 为空:查询空的一组可用货位
|
||||
return this.queryAttrGroup(structattr);
|
||||
}
|
||||
|
||||
List<MdPbStoragevehicleext> extList = iMdPbStoragevehicleextService.list(
|
||||
new QueryWrapper<MdPbStoragevehicleext>().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<Structattr, StrategyStructPara
|
||||
).findFirst().orElse(null);
|
||||
|
||||
if (ObjectUtil.isEmpty(extDaoLike)) {
|
||||
|
||||
// 为空:查询空的一组可用货位
|
||||
return this.queryAttrGroup(structattr);
|
||||
}
|
||||
|
||||
return null;
|
||||
// 不为空查询此组空位
|
||||
Structattr attrLikeVehicle = iStructattrService.getOne(
|
||||
new QueryWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStoragevehicle_code, extDaoLike.getStoragevehicle_code())
|
||||
);
|
||||
resuList = iStructattrService.list(
|
||||
new QueryWrapper<Structattr>().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<Structattr>
|
||||
*/
|
||||
public List<Structattr> queryAttrGroup(Structattr structattr) {
|
||||
// 查询一组未有货组仓位
|
||||
List<Structattr> groupBlockList = structattrMapper.queryAttrGroup(MapOf.of("sect_id", structattr.getSect_id()));
|
||||
if (ObjectUtil.isEmpty(groupBlockList)) {
|
||||
throw new BadRequestException("当前组仓位不足!");
|
||||
}
|
||||
// 根据组查询可用仓位
|
||||
return iStructattrService.list(
|
||||
new QueryWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getSect_id, structattr.getSect_id())
|
||||
.eq(Structattr::getBlock_num, groupBlockList.get(0).getBlock_num())
|
||||
.orderByAsc(Structattr::getStruct_code)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user