feat(wms): 新增可发货钢卷查询功能
- 在IWmsMaterialCoilService接口中新增queryAvailableForDelivery方法 - 在WmsMaterialCoilController中新增/availableForDelivery接口 - 在WmsMaterialCoilServiceImpl中实现查询逻辑 - 构建排除已被发货计划引用钢卷的查询条件 - 支持按入库号、当前卷号、供应商卷号等条件筛选 - 实现分页查询和钢卷状态过滤 - 关联WmsDeliveryPlanMapper以获取发货计划数据 - 处理发货计划中钢卷ID的解析和去重逻辑
This commit is contained in:
@@ -184,5 +184,16 @@ public class WmsMaterialCoilController extends BaseController {
|
||||
List<WmsMaterialCoilVo> distribution = iWmsMaterialCoilService.getDistributionByActualItemType(itemType, itemId);
|
||||
return R.ok(distribution);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询未被任何发货计划引用的钢卷列表
|
||||
* 用于发货计划选择钢卷时,避免选择已经被其他发货计划引用的钢卷
|
||||
*/
|
||||
@GetMapping("/availableForDelivery")
|
||||
public TableDataInfo<WmsMaterialCoilVo> getAvailableCoilsForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery) {
|
||||
return iWmsMaterialCoilService.queryAvailableForDelivery(bo, pageQuery);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -99,5 +99,7 @@ public interface IWmsMaterialCoilService {
|
||||
List<com.klp.domain.vo.WmsMaterialCoilExportVo> queryExportList(WmsMaterialCoilBo bo);
|
||||
|
||||
int exportCoil(@NotEmpty(message = "主键不能为空") Long coilId);
|
||||
|
||||
TableDataInfo<WmsMaterialCoilVo> queryAvailableForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.helper.LoginHelper;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.common.utils.spring.SpringUtils;
|
||||
import com.klp.domain.WmsDeliveryPlan;
|
||||
import com.klp.domain.bo.*;
|
||||
import com.klp.domain.vo.*;
|
||||
import com.klp.mapper.WmsDeliveryPlanMapper;
|
||||
import com.klp.system.service.ISysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -56,6 +58,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
private final IWmsBomItemService bomItemService;
|
||||
private final IWmsProductService productService;
|
||||
private final ISysUserService userService;
|
||||
private final WmsDeliveryPlanMapper deliveryPlanMapper;
|
||||
|
||||
/**
|
||||
* 查询钢卷物料表
|
||||
@@ -1752,4 +1755,83 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询可用于发货计划的钢卷(未被任何发货计划引用的钢卷)
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 钢卷分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<WmsMaterialCoilVo> queryAvailableForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery) {
|
||||
// 构建查询条件
|
||||
LambdaQueryWrapper<WmsMaterialCoil> lqw = buildAvailableCoilQueryWrapper(bo);
|
||||
Page<WmsMaterialCoilVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建可用于发货计划的钢卷查询条件
|
||||
* 排除已被任何发货计划引用的钢卷
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 查询构造器
|
||||
*/
|
||||
private LambdaQueryWrapper<WmsMaterialCoil> buildAvailableCoilQueryWrapper(WmsMaterialCoilBo bo) {
|
||||
LambdaQueryWrapper<WmsMaterialCoil> lqw = Wrappers.lambdaQuery();
|
||||
|
||||
// 基础查询条件
|
||||
lqw.eq(WmsMaterialCoil::getDelFlag, 0); // 未删除
|
||||
lqw.eq(WmsMaterialCoil::getStatus, 0); // 在库状态
|
||||
lqw.eq(WmsMaterialCoil::getDataType, 1); // 当前数据
|
||||
|
||||
// 应用传入的查询条件
|
||||
if (StringUtils.isNotBlank(bo.getEnterCoilNo())) {
|
||||
lqw.like(WmsMaterialCoil::getEnterCoilNo, bo.getEnterCoilNo());
|
||||
}
|
||||
if (StringUtils.isNotBlank(bo.getCurrentCoilNo())) {
|
||||
lqw.like(WmsMaterialCoil::getCurrentCoilNo, bo.getCurrentCoilNo());
|
||||
}
|
||||
if (StringUtils.isNotBlank(bo.getSupplierCoilNo())) {
|
||||
lqw.like(WmsMaterialCoil::getSupplierCoilNo, bo.getSupplierCoilNo());
|
||||
}
|
||||
if (bo.getWarehouseId() != null) {
|
||||
lqw.eq(WmsMaterialCoil::getWarehouseId, bo.getWarehouseId());
|
||||
}
|
||||
if (bo.getItemId() != null) {
|
||||
lqw.eq(WmsMaterialCoil::getItemId, bo.getItemId());
|
||||
}
|
||||
if (StringUtils.isNotBlank(bo.getItemType())) {
|
||||
lqw.eq(WmsMaterialCoil::getItemType, bo.getItemType());
|
||||
}
|
||||
|
||||
// 排除已被发货计划引用的钢卷
|
||||
LambdaQueryWrapper<WmsDeliveryPlan> planQuery =Wrappers.lambdaQuery();
|
||||
planQuery.eq(WmsDeliveryPlan::getDelFlag, 0) // 过滤已删除的计划
|
||||
.isNotNull(WmsDeliveryPlan::getCoil) // 只查有钢卷ID的计划
|
||||
.ne(WmsDeliveryPlan::getCoil, ""); // 排除空字符串
|
||||
List<WmsDeliveryPlan> plans = deliveryPlanMapper.selectList(planQuery);
|
||||
if (!plans.isEmpty()) {
|
||||
Set<Long> usedCoilIds = new HashSet<>();
|
||||
for (WmsDeliveryPlan plan : plans) {
|
||||
if (StringUtils.isNotBlank(plan.getCoil())) {
|
||||
String[] coilIds = plan.getCoil().split(",");
|
||||
for (String coilIdStr : coilIds) {
|
||||
try {
|
||||
usedCoilIds.add(Long.parseLong(coilIdStr.trim()));
|
||||
} catch (NumberFormatException ignored) {
|
||||
// 忽略无效的ID
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!usedCoilIds.isEmpty()) {
|
||||
lqw.notIn(WmsMaterialCoil::getCoilId, usedCoilIds);
|
||||
}
|
||||
}
|
||||
|
||||
return lqw;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user