Merge branch '0.8.X' of https://gitee.com/hdka/klp-oa into 0.8.X

This commit is contained in:
砂糖
2025-12-08 13:10:17 +08:00
5 changed files with 101 additions and 4 deletions

View File

@@ -6,6 +6,7 @@ import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.klp.domain.vo.*;
import liquibase.pro.packaged.W;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
@@ -131,12 +132,11 @@ public class WmsDeliveryPlanController extends BaseController {
/**
* 根据逗号分隔的coil_id字符串查询对应的钢卷信息
*
* @param coilIds 逗号分隔的coil_id字符串
* @return 钢卷信息列表
*/
@GetMapping("/coils")
public R<List<WmsMaterialCoilVo>> getCoilInfoByIds(@RequestParam String coilIds) {
List<WmsMaterialCoilVo> coilInfoList = iWmsDeliveryPlanService.getCoilInfoByIds(coilIds);
@PostMapping("/coils")
public R<List<WmsMaterialCoilVo>> getCoilInfoByIds(@RequestBody WmsDeliveryPlanBo bo) {
List<WmsMaterialCoilVo> coilInfoList = iWmsDeliveryPlanService.getCoilInfoByIds(bo.getCoilIds());
return R.ok(coilInfoList);
}
}

View File

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

View File

@@ -46,5 +46,7 @@ public class WmsDeliveryPlanBo extends BaseEntity {
// 钢卷集合
private String coil;
private String coilIds;
}

View File

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

View File

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