Merge branch '0.8.X' of https://gitee.com/hdka/klp-oa into 0.8.X
This commit is contained in:
@@ -188,16 +188,6 @@ public class WmsMaterialCoilController extends BaseController {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询未被任何发货计划引用的钢卷列表
|
|
||||||
* 用于发货计划选择钢卷时,避免选择已经被其他发货计划引用的钢卷
|
|
||||||
*/
|
|
||||||
@GetMapping("/availableForDelivery")
|
|
||||||
public TableDataInfo<WmsMaterialCoilVo> getAvailableCoilsForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery) {
|
|
||||||
return iWmsMaterialCoilService.queryAvailableForDelivery(bo, pageQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量更新钢卷发货状态
|
* 批量更新钢卷发货状态
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -176,5 +176,7 @@ public class WmsMaterialCoilBo extends BaseEntity {
|
|||||||
// 锌层厚度(两表通用字段名:zinc_layer)
|
// 锌层厚度(两表通用字段名:zinc_layer)
|
||||||
private String itemZincLayer;
|
private String itemZincLayer;
|
||||||
|
|
||||||
|
private Boolean onlyUnshippedAndUnplanned;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,6 @@ public interface IWmsMaterialCoilService {
|
|||||||
|
|
||||||
int exportCoil(@NotEmpty(message = "主键不能为空") Long coilId);
|
int exportCoil(@NotEmpty(message = "主键不能为空") Long coilId);
|
||||||
|
|
||||||
TableDataInfo<WmsMaterialCoilVo> queryAvailableForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery);
|
|
||||||
|
|
||||||
Boolean batchUpdateDeliveryStatus(List<Long> coilIdList, Integer status);
|
Boolean batchUpdateDeliveryStatus(List<Long> coilIdList, Integer status);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,6 +450,17 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
qw.in("mc.coil_id", coilIdList);
|
qw.in("mc.coil_id", coilIdList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 仅查询未发货且未绑定在发货计划里的钢卷
|
||||||
|
if (Boolean.TRUE.equals(bo.getOnlyUnshippedAndUnplanned())) {
|
||||||
|
// 未发货:排除状态=1(已出库/已发货)
|
||||||
|
qw.ne("mc.status", 1);
|
||||||
|
// 未绑定在任一有效发货计划:计划未删除,coil 字段包含当前 coil_id
|
||||||
|
// 这里使用 NOT EXISTS + FIND_IN_SET,避免将所有计划加载到内存
|
||||||
|
qw.apply("NOT EXISTS (SELECT 1 FROM wms_delivery_plan dp " +
|
||||||
|
"WHERE dp.del_flag = 0 AND dp.coil IS NOT NULL AND dp.coil <> '' " +
|
||||||
|
"AND FIND_IN_SET(CAST(mc.coil_id AS CHAR), dp.coil))");
|
||||||
|
}
|
||||||
//逻辑删除
|
//逻辑删除
|
||||||
qw.eq("mc.del_flag", 0);
|
qw.eq("mc.del_flag", 0);
|
||||||
//把team字段作为筛选条件
|
//把team字段作为筛选条件
|
||||||
@@ -1856,84 +1867,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
return lqw;
|
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