feat(wms): 优化盘点任务按物料类型过滤库存功能

- 新增按物料类型过滤库存的方法 queryInventoryByLocationAndMaterialType
- 在 RemoteInventoryCheckServiceImpl 中根据任务类型和物料类型查询库存- 修改 WmsCheckTaskServiceImpl 中的任务名称生成逻辑
- 优化 WmsInventoryCheckServiceImpl 中的检查单号生成逻辑
master
zangch@mesnac.com 4 months ago
parent 0ab46c978f
commit b4a8575d66

@ -90,7 +90,16 @@ public class RemoteInventoryCheckServiceImpl implements RemoteInventoryCheckServ
for (WmsBaseLocationVo location : locations) {
WmsInventoryBo invBo = new WmsInventoryBo();
invBo.setLocationCode(location.getLocationCode());
List<WmsInventoryVo> inventories = wmsInventoryService.queryList(invBo);
// 当抽检任务且指定了物料类型时,需要关联查询对应物料类型的库存
List<WmsInventoryVo> inventories;
if ("0".equals(task.getWmsCheckTaskType()) && task.getMaterialTypeId() != null) {
// 抽检模式且指定了物料类型,需要过滤物料类型
inventories = wmsInventoryService.queryInventoryByLocationAndMaterialType(location.getLocationCode(), task.getMaterialTypeId());
} else {
// 全盘或未指定物料类型
inventories = wmsInventoryService.queryList(invBo);
}
// 遍历当前库位下的所有库存记录
for (WmsInventoryVo inventory : inventories) {

@ -125,11 +125,17 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService {
public Boolean insertByBo(WmsCheckTaskBo bo) {
WmsCheckTask add = MapstructUtils.convert(bo, WmsCheckTask.class);
validEntityBeforeSave(add);
String jobName = null;
if (bo.getWmsCheckTaskType().equals("0")) {
jobName = "WMS抽检任务" + bo.getTaskCode() + bo.getTaskName();
}else {
jobName = "WMS盘点任务" + bo.getTaskCode() + bo.getTaskName();
}
// 创建SnailJob任务
DmsJobEntity job = new DmsJobEntity();
job.setRouteKey(AllocationAlgorithmEnum.ROUND)
.setJobName("WMS盘点任务" + bo.getTaskCode())
.setJobName(jobName)
.setExecutorInfo("wsmCheckTsk")//执行器名称
.setExecutorTimeout(30)//执行超时时间
.setBlockStrategy(JobBlockStrategyEnum.DISCARD)//阻塞策略:丢弃后续任务,避免重复执行
@ -144,7 +150,7 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService {
R<Long> jobResp = remoteJobService.addClusterJob(job);
Long jobId = jobResp != null ? jobResp.getData() : null;//任务ID
add.setJobId(jobId);
if(ObjectUtils.isNotEmpty(jobId)){
if (ObjectUtils.isNotEmpty(jobId)) {
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setTaskId(add.getTaskId());
@ -170,10 +176,15 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService {
WmsCheckTask update = MapstructUtils.convert(bo, WmsCheckTask.class);
validEntityBeforeSave(update);
String jobName = null;
if (bo.getWmsCheckTaskType().equals("0")) {
jobName = "WMS抽检任务" + bo.getTaskCode() + bo.getTaskName();
}else {
jobName = "WMS盘点任务" + bo.getTaskCode() + bo.getTaskName();
}
DmsJobEntity job = new DmsJobEntity();
job.setRouteKey(AllocationAlgorithmEnum.ROUND)
.setJobName("WMS盘点任务" + bo.getTaskCode())//任务名称
.setJobName(jobName)//任务名称
.setExecutorInfo("wsmCheckTsk")//执行器名称
.setExecutorTimeout(30)//执行超时时间
.setBlockStrategy(JobBlockStrategyEnum.DISCARD)//阻塞策略:丢弃后续任务,避免重复执行

@ -1,20 +1,17 @@
package org.dromara.wms.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.wms.domain.BaseMaterialCategory;
import org.dromara.wms.domain.WmsBaseWarehouse;
import org.dromara.wms.domain.WmsInstockOrder;
import org.dromara.wms.domain.WmsInventoryCheck;
import org.dromara.wms.domain.bo.WmsInstockOrderBo;
import org.dromara.wms.domain.bo.WmsInventoryCheckBo;
import org.dromara.wms.domain.vo.WmsInventoryCheckVo;
import org.dromara.wms.mapper.WmsInventoryCheckMapper;
@ -22,10 +19,10 @@ import org.dromara.wms.service.IWmsInventoryCheckService;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger;
/**
@ -151,7 +148,9 @@ public class WmsInventoryCheckServiceImpl implements IWmsInventoryCheckService {
}
String stockingOrder = order + orderDate + orderLast;
WmsInventoryCheck add = MapstructUtils.convert(bo, WmsInventoryCheck.class);
add.setCheckCode(stockingOrder);
if (add != null && add.getCheckCode() == null) {
add.setCheckCode(stockingOrder);
}
add.setCreateBy(LoginHelper.getUserId());
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;

@ -230,6 +230,38 @@ public class WmsInventoryServiceImpl implements IWmsInventoryService {
return baseMapper.deleteByIds(ids) > 0;
}
/**
*
*
*
* @param locationCode
* @param materialTypeId ID
* @return
*/
@Override
public List<WmsInventoryVo> queryInventoryByLocationAndMaterialType(String locationCode, Long materialTypeId) {
MPJLambdaWrapper<WmsInventory> lqw = JoinWrappers.lambda(WmsInventory.class)
.selectAll(WmsInventory.class)
// 关联表查询物料信息
.select(BaseMaterialInfo::getMaterialCode, BaseMaterialInfo::getMaterialName, BaseMaterialInfo::getMaterialTypeId)
.leftJoin(BaseMaterialInfo.class, BaseMaterialInfo::getMaterialId, WmsInventory::getMaterialId)
// 关联表查询物料大类名称
.select(BaseMaterialCategory::getMaterialCategoryName)
.leftJoin(BaseMaterialCategory.class, BaseMaterialCategory::getMaterialCategoryId, WmsInventory::getMaterialCategoryId)
// 按库位编码过滤
.eq(StringUtils.isNotBlank(locationCode), WmsInventory::getLocationCode, locationCode)
// 按物料类型过滤
.eq(materialTypeId != null, BaseMaterialInfo::getMaterialTypeId, materialTypeId)
// 只查询有库存的记录
.gt(WmsInventory::getInventoryQty, BigDecimal.ZERO)
// 只查询正常库存
// .eq(WmsInventory::getInventoryStatus, "1")
.orderByDesc(WmsInventory::getCreateTime);
return baseMapper.selectVoList(lqw);
}
/**
*

Loading…
Cancel
Save