Browse Source

add:增加出入库分配规则调用

master
zhangzq 1 month ago
parent
commit
a4ae1009bc
  1. 6
      nladmin-system/nlsso-server/src/main/java/org/nl/config/SpringContextHolder.java
  2. 6
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java
  3. 19
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java
  4. 49
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java
  5. 64
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
  6. 5
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/sectStrategy/dao/StSectStrategy.java

6
nladmin-system/nlsso-server/src/main/java/org/nl/config/SpringContextHolder.java

@ -22,6 +22,7 @@ import org.springframework.context.ApplicationContextAware;
import org.springframework.core.env.Environment;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author Jie
@ -154,4 +155,9 @@ public class SpringContextHolder implements ApplicationContextAware, DisposableB
}
SpringContextHolder.addCallback = false;
}
public static <T> Map<String,T> getBeansOfType(Class<T> requiredType) {
assertContextInjected();
return applicationContext.getBeansOfType(requiredType);
}
}

6
nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java

@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
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.dto.StrategyStructMaterialVO;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
import org.springframework.data.domain.Pageable;
@ -105,4 +107,8 @@ public interface IStructattrService extends IService<Structattr> {
List<StructattrVechielDto> collectVechicle(Map query);
List<StrategyStructMaterialVO> outBoundSectDiv(StrategyStructParam param);
List<Structattr> inBoundSectDiv(StrategyStructParam param);
}

19
nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java

@ -0,0 +1,19 @@
package org.nl.wms.basedata_manage.service.dto;
import lombok.Data;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
@Data
public class StrategyStructMaterialVO extends GroupPlate {
private String sect_code;
/**
* 仓位编码
*/
private String struct_code;
/**
* 锁定类型
*/
private String lock_type;
}

49
nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java

@ -0,0 +1,49 @@
package org.nl.wms.basedata_manage.service.dto;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import java.math.BigDecimal;
@Data
public class StrategyStructParam {
private String sect_code;
/**
* 仓位编码
*/
private String stor_code;
/**
* 物料标识
*/
private String material_code;
/**
* 批次
*/
private String pcsn;
/**
* 计量单位标识
*/
private String qty_unit_id;
/**
* 组盘数量
*/
private BigDecimal qty;
/**
* 同步单号
*/
private String ext_code;
/**
* 来源单据类型
*/
private String ext_type;
}

64
nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java

@ -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;
}
}

5
nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/sectStrategy/dao/StSectStrategy.java

@ -44,6 +44,11 @@ public class StSectStrategy implements Serializable {
@TableField(typeHandler = ListStrTypeHandler.class)
private List<String> strategy;
/**
* 策略类型
*/
private List<String> strategy_type;
/**
* 描述
*/

Loading…
Cancel
Save