From a4ae1009bc808a0524c59ade3f3ded984d29ee11 Mon Sep 17 00:00:00 2001 From: zhangzq Date: Thu, 26 Jun 2025 17:42:29 +0800 Subject: [PATCH] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E5=87=BA=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E5=88=86=E9=85=8D=E8=A7=84=E5=88=99=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/config/SpringContextHolder.java | 6 ++ .../service/IStructattrService.java | 6 ++ .../service/dto/StrategyStructMaterialVO.java | 19 ++++++ .../service/dto/StrategyStructParam.java | 49 ++++++++++++++ .../service/impl/StructattrServiceImpl.java | 64 ++++++++++++++++++- .../sectStrategy/dao/StSectStrategy.java | 5 ++ 6 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/SpringContextHolder.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/SpringContextHolder.java index 3ca72c1..ab9c634 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/SpringContextHolder.java +++ b/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 Map getBeansOfType(Class requiredType) { + assertContextInjected(); + return applicationContext.getBeansOfType(requiredType); + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java index 8a4d79a..16f8f8f 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IStructattrService.java +++ b/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 { List collectVechicle(Map query); + + List outBoundSectDiv(StrategyStructParam param); + + List inBoundSectDiv(StrategyStructParam param); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructMaterialVO.java new file mode 100644 index 0000000..a74a9b0 --- /dev/null +++ b/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; + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java new file mode 100644 index 0000000..ad4dc1d --- /dev/null +++ b/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; + + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java index c09ee2c..161c17e 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java +++ b/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 implements IStructattrService { @Resource private StructattrMapper structattrMapper; - @Resource + @Autowired private IBsrealStorattrService iBsrealStorattrService; - @Resource + @Autowired private ISectattrService iSectattrService; + @Autowired + private IStSectStrategyService iStSectStrategyService; + @Override public IPage queryAll(Map whereJson, PageQuery page) { @@ -308,4 +323,49 @@ public class StructattrServiceImpl extends ServiceImpl outBoundSectDiv(StrategyStructParam param) { + StSectStrategy one = iStSectStrategyService.getOne(new LambdaQueryWrapper() + .eq(StSectStrategy::getSect_code, param.getSect_code()) + .eq(StSectStrategy::getStrategy_type, StatusEnum.STRATEGY_TYPE.code("入库"))); + List strategy = one.getStrategy(); + Map 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 inBoundSectDiv(StrategyStructParam param) { + StSectStrategy one = iStSectStrategyService.getOne(new LambdaQueryWrapper() + .eq(StSectStrategy::getSect_code, param.getSect_code()) + .eq(StSectStrategy::getStrategy_type, StatusEnum.STRATEGY_TYPE.code("入库"))); + List strategy = one.getStrategy(); + Map decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class); + QueryWrapper query = new QueryWrapper() + .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 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; + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/sectStrategy/dao/StSectStrategy.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/sectStrategy/dao/StSectStrategy.java index 53ed4bb..2026066 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/sectStrategy/dao/StSectStrategy.java +++ b/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 strategy; + /** + * 策略类型 + */ + private List strategy_type; + /** * 描述 */