Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryPlanCoilOperateServiceImpl.java
Joshi 0052c40b80 feat(wms):丰富发货计划钢卷操作查询功能
- 添加 MyBatis Plus 分页插件及相关查询包装器依赖
- 实现 selectVoPagePlus 方法支持复杂关联查询分页
- 扩展 XML 映射文件以支持详细的钢卷操作数据查询
- 新增 buildQueryWrapperPlus 方法构建查询条件与排序规则
- 集成钢卷详情、仓库信息及异常统计等多表联查逻辑
- 优化分页查询接口以提升大数据量下的响应性能
2025-12-18 13:52:46 +08:00

177 lines
7.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import com.klp.domain.bo.WmsMaterialCoilBo;
import com.klp.domain.vo.WmsMaterialCoilVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsDeliveryPlanCoilOperateBo;
import com.klp.domain.vo.WmsDeliveryPlanCoilOperateVo;
import com.klp.domain.WmsDeliveryPlanCoilOperate;
import com.klp.mapper.WmsDeliveryPlanCoilOperateMapper;
import com.klp.service.IWmsDeliveryPlanCoilOperateService;
import java.util.*;
import java.util.stream.Collectors;
/**
* 发货计划钢卷操作记录Service业务层处理
*
* @author klp
* @date 2025-12-17
*/
@RequiredArgsConstructor
@Service
public class WmsDeliveryPlanCoilOperateServiceImpl implements IWmsDeliveryPlanCoilOperateService {
private final WmsDeliveryPlanCoilOperateMapper baseMapper;
private final WmsMaterialCoilServiceImpl materialCoilService;
/**
* 查询发货计划钢卷操作记录
*/
@Override
public WmsDeliveryPlanCoilOperateVo queryById(Long operateId){
return baseMapper.selectVoById(operateId);
}
/**
* 查询发货计划钢卷操作记录列表
*/
@Override
public TableDataInfo<WmsDeliveryPlanCoilOperateVo> queryPageList(WmsDeliveryPlanCoilOperateBo bo, PageQuery pageQuery) {
QueryWrapper<WmsDeliveryPlanCoilOperate> lqw = buildQueryWrapperPlus(bo);
Page<WmsDeliveryPlanCoilOperateVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
private QueryWrapper<WmsDeliveryPlanCoilOperate> buildQueryWrapperPlus(WmsDeliveryPlanCoilOperateBo bo) {
QueryWrapper<WmsDeliveryPlanCoilOperate> lqw = Wrappers.query();
lqw.eq(bo.getPlanId() != null, "dpco.plan_id", bo.getPlanId());
lqw.eq(bo.getCoilId() != null, "dpco.coil_id", bo.getCoilId());
lqw.eq(StringUtils.isNotBlank(bo.getOperateType()), "dpco.operate_type", bo.getOperateType());
// 默认按操作时间倒序排列
lqw.orderByDesc("dpco.create_time");
return lqw;
}
/**
* 查询发货计划钢卷操作记录列表
*/
@Override
public List<WmsDeliveryPlanCoilOperateVo> queryList(WmsDeliveryPlanCoilOperateBo bo) {
LambdaQueryWrapper<WmsDeliveryPlanCoilOperate> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<WmsDeliveryPlanCoilOperate> buildQueryWrapper(WmsDeliveryPlanCoilOperateBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsDeliveryPlanCoilOperate> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getPlanId() != null, WmsDeliveryPlanCoilOperate::getPlanId, bo.getPlanId());
lqw.eq(bo.getCoilId() != null, WmsDeliveryPlanCoilOperate::getCoilId, bo.getCoilId());
lqw.eq(StringUtils.isNotBlank(bo.getOperateType()), WmsDeliveryPlanCoilOperate::getOperateType, bo.getOperateType());
return lqw;
}
/**
* 新增发货计划钢卷操作记录
*/
@Override
public Boolean insertByBo(WmsDeliveryPlanCoilOperateBo bo) {
WmsDeliveryPlanCoilOperate add = BeanUtil.toBean(bo, WmsDeliveryPlanCoilOperate.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setOperateId(add.getOperateId());
}
return flag;
}
/**
* 修改发货计划钢卷操作记录
*/
@Override
public Boolean updateByBo(WmsDeliveryPlanCoilOperateBo bo) {
WmsDeliveryPlanCoilOperate update = BeanUtil.toBean(bo, WmsDeliveryPlanCoilOperate.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsDeliveryPlanCoilOperate entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除发货计划钢卷操作记录
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public List<WmsDeliveryPlanCoilOperateVo> getCoilOperate(Long planId, String coilIds) {
// 边界校验:空值/空字符串直接返回空列表
if (planId == null || coilIds == null || coilIds.trim().isEmpty()) {
return Collections.emptyList();
}
String[] coilIdArray = coilIds.split(",");
// 过滤空字符串避免split出""的情况比如coilIds是",1002,"
coilIdArray = Arrays.stream(coilIdArray)
.filter(StringUtils::isNotBlank)
.toArray(String[]::new);
if (coilIdArray.length == 0) {
return Collections.emptyList();
}
List<WmsDeliveryPlanCoilOperate> coilOperateList = baseMapper.getCoilOperate(planId, coilIdArray);
// 转Vo并构建操作记录Mapkey=coilIdvalue=对应的操作记录)
Map<Long, WmsDeliveryPlanCoilOperateVo> operateMap = BeanUtil.copyToList(coilOperateList, WmsDeliveryPlanCoilOperateVo.class)
.stream()
.collect(Collectors.toMap(
WmsDeliveryPlanCoilOperateVo::getCoilId,
operate -> operate,
(v1, v2) -> v1 // 防重复(理论上窗口函数已保证唯一,兜底)
));
//接着就是根据钢卷ids去查询钢卷list了 用分页查询的list就需要设置分页参数都设置为最大即可
if (materialCoilService != null) {
WmsMaterialCoilBo bo = new WmsMaterialCoilBo();
bo.setCoilIds(coilIds);
PageQuery pageQuery = new PageQuery();
pageQuery.setPageNum(1);
pageQuery.setPageSize(Integer.MAX_VALUE);
TableDataInfo<WmsMaterialCoilVo> tableDataInfo = materialCoilService.queryPageList(bo, pageQuery);
if (tableDataInfo != null && tableDataInfo.getRows() != null) {
List<WmsMaterialCoilVo> coilDetails = tableDataInfo.getRows();
List<WmsDeliveryPlanCoilOperateVo> resultList = new ArrayList<>();
for (WmsMaterialCoilVo coilDetail : coilDetails) {
if (coilDetail != null) {
Long coilId = coilDetail.getCoilId();
// 初始化操作记录Vo无操作记录则新建空Vo保证钢卷信息不丢失
WmsDeliveryPlanCoilOperateVo operateVo = operateMap.getOrDefault(coilId, new WmsDeliveryPlanCoilOperateVo());
// 给操作记录绑定钢卷信息(核心:钢卷为主,操作记录为附属)
operateVo.setCoilId(coilId); // 确保coilId不为空
operateVo.setCoilDetail(coilDetail); // 绑定钢卷详情
resultList.add(operateVo);
}
}
return resultList;
}
}
return Collections.emptyList();
}
}