|
|
@ -13,11 +13,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.nl.common.domain.query.PageQuery; |
|
|
|
import org.nl.common.exception.BadRequestException; |
|
|
|
import org.nl.common.utils.IdUtil; |
|
|
|
import org.nl.common.utils.MapOf; |
|
|
|
import org.nl.common.utils.SecurityUtils; |
|
|
|
import org.nl.config.SpringContextHolder; |
|
|
|
import org.nl.wms.basedata_manage.enums.BaseDataEnum; |
|
|
|
import org.nl.wms.basedata_manage.service.IBsrealStorattrService; |
|
|
|
import org.nl.wms.basedata_manage.service.ISectattrService; |
|
|
@ -27,10 +29,19 @@ import org.nl.wms.basedata_manage.service.dao.Sectattr; |
|
|
|
import org.nl.wms.basedata_manage.service.dao.Structattr; |
|
|
|
import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto; |
|
|
|
import org.nl.wms.basedata_manage.service.dao.mapper.StructattrMapper; |
|
|
|
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; |
|
|
|
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; |
|
|
|
import org.nl.wms.decision_manage.service.sectStrategy.IStSectStrategyService; |
|
|
|
import org.nl.wms.decision_manage.service.sectStrategy.dao.StSectStrategy; |
|
|
|
import org.nl.wms.decision_manage.service.sectStrategy.decisionChar.DecisionerChain; |
|
|
|
import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner; |
|
|
|
import org.nl.wms.sch_manage.enums.StatusEnum; |
|
|
|
import org.nl.wms.warehouse_management.enums.IOSEnum; |
|
|
|
import org.nl.wms.warehouse_management.service.dao.IOStorInv; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.util.CollectionUtils; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.math.BigDecimal; |
|
|
@ -47,17 +58,21 @@ import java.util.stream.Collectors; |
|
|
|
* 2025/5/15 |
|
|
|
*/ |
|
|
|
@Service |
|
|
|
@Slf4j |
|
|
|
public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structattr> implements IStructattrService { |
|
|
|
|
|
|
|
@Resource |
|
|
|
private StructattrMapper structattrMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
@Autowired |
|
|
|
private IBsrealStorattrService iBsrealStorattrService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
@Autowired |
|
|
|
private ISectattrService iSectattrService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private IStSectStrategyService iStSectStrategyService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public IPage<Structattr> queryAll(Map whereJson, PageQuery page) { |
|
|
|
|
|
|
@ -308,4 +323,49 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public List<StrategyStructMaterialVO> outBoundSectDiv(StrategyStructParam param) { |
|
|
|
StSectStrategy one = iStSectStrategyService.getOne(new LambdaQueryWrapper<StSectStrategy>() |
|
|
|
.eq(StSectStrategy::getSect_code, param.getSect_code()) |
|
|
|
.eq(StSectStrategy::getStrategy_type, StatusEnum.STRATEGY_TYPE.code("入库"))); |
|
|
|
List<String> strategy = one.getStrategy(); |
|
|
|
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class); |
|
|
|
List list = null; |
|
|
|
for (String decisionerType : strategy) { |
|
|
|
Decisioner decisioner = decisionerMap.get(decisionerType); |
|
|
|
log.info("执行出入库规格:"+decisioner.strategyConfig.getStrategy_name()); |
|
|
|
list = decisioner.handler(list, param); |
|
|
|
if (CollectionUtils.isEmpty(list)){ |
|
|
|
throw new BadRequestException("当前策略"+decisioner.strategyConfig.getStrategy_name()+"无可用货位,分配前数量:"+transfers.size()); |
|
|
|
} |
|
|
|
} |
|
|
|
return list; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<Structattr> inBoundSectDiv(StrategyStructParam param) { |
|
|
|
StSectStrategy one = iStSectStrategyService.getOne(new LambdaQueryWrapper<StSectStrategy>() |
|
|
|
.eq(StSectStrategy::getSect_code, param.getSect_code()) |
|
|
|
.eq(StSectStrategy::getStrategy_type, StatusEnum.STRATEGY_TYPE.code("入库"))); |
|
|
|
List<String> strategy = one.getStrategy(); |
|
|
|
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class); |
|
|
|
QueryWrapper<Structattr> query = new QueryWrapper<Structattr>() |
|
|
|
.eq("is_used", true) |
|
|
|
.eq("lock_type", StatusEnum.LOCK.code("无锁")) |
|
|
|
.eq("stor_code", param.getStor_code()) |
|
|
|
.eq("sect_code", param.getSect_code()) |
|
|
|
.isNull("storagevehicle_code"); |
|
|
|
List<Structattr> list = this.list(query); |
|
|
|
for (String decisionerType : strategy) { |
|
|
|
Decisioner decisioner = decisionerMap.get(decisionerType); |
|
|
|
log.info("执行入库规格:"+decisioner.strategyConfig.getStrategy_name()); |
|
|
|
list = decisioner.handler(list, param); |
|
|
|
if (CollectionUtils.isEmpty(list)){ |
|
|
|
throw new BadRequestException("当前策略"+decisioner.strategyConfig.getStrategy_name()+"无可用货位,分配前数量:"+list.size()); |
|
|
|
} |
|
|
|
} |
|
|
|
return list; |
|
|
|
} |
|
|
|
} |
|
|
|