- 在IWmsDeliveryPlanService中新增getCoilInfoByIds方法定义 - 在WmsDeliveryPlanController中添加/coils GET接口用于查询钢卷信息 - 在WmsDeliveryPlanServiceImpl中实现根据逗号分隔的coil_id字符串查询钢卷信息逻辑 - 引入WmsMaterialCoil实体类和WmsMaterialCoilMapper数据访问层组件 - 使用Stream API处理coil_id字符串分割、过滤及类型转换操作 - 返回封装后的WmsMaterialCoilVo对象列表供前端使用
195 lines
6.5 KiB
Java
195 lines
6.5 KiB
Java
package com.klp.service.impl;
|
||
|
||
import cn.hutool.core.bean.BeanUtil;
|
||
import com.klp.common.core.domain.entity.SysUser;
|
||
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.WmsMaterialCoil;
|
||
import com.klp.domain.vo.*;
|
||
import com.klp.mapper.WmsMaterialCoilMapper;
|
||
import com.klp.system.service.ISysUserService;
|
||
import lombok.RequiredArgsConstructor;
|
||
import org.springframework.stereotype.Service;
|
||
import com.klp.domain.bo.WmsDeliveryPlanBo;
|
||
import com.klp.domain.WmsDeliveryPlan;
|
||
import com.klp.mapper.WmsDeliveryPlanMapper;
|
||
import com.klp.service.IWmsDeliveryPlanService;
|
||
|
||
import java.util.*;
|
||
import java.util.stream.Collectors;
|
||
|
||
/**
|
||
* 发货计划Service业务层处理
|
||
*
|
||
* @author klp
|
||
* @date 2025-11-25
|
||
*/
|
||
@RequiredArgsConstructor
|
||
@Service
|
||
public class WmsDeliveryPlanServiceImpl implements IWmsDeliveryPlanService {
|
||
|
||
private final WmsDeliveryPlanMapper baseMapper;
|
||
|
||
private final ISysUserService userService;
|
||
|
||
private final WmsMaterialCoilMapper coilMapper;
|
||
|
||
/**
|
||
* 查询发货计划
|
||
*/
|
||
@Override
|
||
public WmsDeliveryPlanVo queryById(Long planId){
|
||
return baseMapper.selectVoById(planId);
|
||
}
|
||
|
||
/**
|
||
* 查询发货计划列表
|
||
*/
|
||
@Override
|
||
public TableDataInfo<WmsDeliveryPlanVo> queryPageList(WmsDeliveryPlanBo bo, PageQuery pageQuery) {
|
||
LambdaQueryWrapper<WmsDeliveryPlan> lqw = buildQueryWrapper(bo);
|
||
Page<WmsDeliveryPlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||
List<WmsDeliveryPlanVo> records = result.getRecords();
|
||
Set<String> userNames = records.stream()
|
||
.flatMap(v -> java.util.stream.Stream.of(v.getCreateBy(), v.getUpdateBy()))
|
||
.filter(StringUtils::isNotBlank)
|
||
.collect(Collectors.toSet());
|
||
if (!userNames.isEmpty()) {
|
||
Map<String, String> nickMap = userService.selectNickNameMapByUserNames(records.stream()
|
||
.flatMap(v -> java.util.stream.Stream.of(v.getCreateBy(), v.getUpdateBy()))
|
||
.filter(StringUtils::isNotBlank)
|
||
.distinct()
|
||
.collect(Collectors.toList()));
|
||
records.forEach(item -> {
|
||
if (StringUtils.isNotBlank(item.getCreateBy())) {
|
||
item.setCreateByName(nickMap.getOrDefault(item.getCreateBy(), item.getCreateBy()));
|
||
}
|
||
if (StringUtils.isNotBlank(item.getUpdateBy())) {
|
||
item.setUpdateByName(nickMap.getOrDefault(item.getUpdateBy(), item.getUpdateBy()));
|
||
}
|
||
});
|
||
}
|
||
return TableDataInfo.build(result);
|
||
}
|
||
|
||
/**
|
||
* 查询发货计划列表
|
||
*/
|
||
@Override
|
||
public List<WmsDeliveryPlanVo> queryList(WmsDeliveryPlanBo bo) {
|
||
LambdaQueryWrapper<WmsDeliveryPlan> lqw = buildQueryWrapper(bo);
|
||
return baseMapper.selectVoList(lqw);
|
||
}
|
||
|
||
private LambdaQueryWrapper<WmsDeliveryPlan> buildQueryWrapper(WmsDeliveryPlanBo bo) {
|
||
Map<String, Object> params = bo.getParams();
|
||
LambdaQueryWrapper<WmsDeliveryPlan> lqw = Wrappers.lambdaQuery();
|
||
lqw.like(StringUtils.isNotBlank(bo.getPlanName()), WmsDeliveryPlan::getPlanName, bo.getPlanName());
|
||
lqw.eq(bo.getPlanDate() != null, WmsDeliveryPlan::getPlanDate, bo.getPlanDate());
|
||
lqw.eq(bo.getPlanType() != null, WmsDeliveryPlan::getPlanType, bo.getPlanType());
|
||
return lqw;
|
||
}
|
||
|
||
/**
|
||
* 新增发货计划
|
||
*/
|
||
@Override
|
||
public Boolean insertByBo(WmsDeliveryPlanBo bo) {
|
||
WmsDeliveryPlan add = BeanUtil.toBean(bo, WmsDeliveryPlan.class);
|
||
validEntityBeforeSave(add);
|
||
boolean flag = baseMapper.insert(add) > 0;
|
||
if (flag) {
|
||
bo.setPlanId(add.getPlanId());
|
||
}
|
||
return flag;
|
||
}
|
||
|
||
/**
|
||
* 修改发货计划
|
||
*/
|
||
@Override
|
||
public Boolean updateByBo(WmsDeliveryPlanBo bo) {
|
||
WmsDeliveryPlan update = BeanUtil.toBean(bo, WmsDeliveryPlan.class);
|
||
validEntityBeforeSave(update);
|
||
return baseMapper.updateById(update) > 0;
|
||
}
|
||
|
||
/**
|
||
* 保存前的数据校验
|
||
*/
|
||
private void validEntityBeforeSave(WmsDeliveryPlan entity){
|
||
//TODO 做一些数据校验,如唯一约束
|
||
}
|
||
|
||
/**
|
||
* 批量删除发货计划
|
||
*/
|
||
@Override
|
||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||
if(isValid){
|
||
//TODO 做一些业务上的校验,判断是否需要校验
|
||
}
|
||
return baseMapper.deleteBatchIds(ids) > 0;
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取发货计划统计信息
|
||
*
|
||
* @param planId 计划ID,可选
|
||
* @return 统计信息列表
|
||
*/
|
||
public List<WmsDeliveryPlanStatisticsVo> getDeliveryPlanStatistics(Long planId) {
|
||
return baseMapper.selectDeliveryPlanStatistics(planId);
|
||
}
|
||
|
||
/**
|
||
* 获取发货报表统计信息
|
||
*
|
||
* @param startTime 开始时间
|
||
* @param endTime 结束时间
|
||
* @return 报表统计信息(包含汇总和按类型统计)
|
||
*/
|
||
public WmsDeliveryReportResultVo getDeliveryReport(Date startTime, Date endTime) {
|
||
WmsDeliveryReportResultVo result = new WmsDeliveryReportResultVo();
|
||
|
||
// 获取汇总数据
|
||
WmsDeliveryReportSummaryVo summary = baseMapper.selectDeliveryReportSummary(startTime, endTime);
|
||
result.setSummary(summary);
|
||
|
||
// 获取按钢卷类型分类的数据
|
||
List<WmsDeliveryReportByTypeVo> details = baseMapper.selectDeliveryReportByType(startTime, endTime);
|
||
result.setDetails(details);
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
/**
|
||
* 根据逗号分隔的coil_id字符串查询对应的钢卷信息
|
||
*
|
||
* @param coilIds 逗号分隔的coil_id字符串
|
||
* @return 钢卷信息列表
|
||
*/
|
||
@Override
|
||
public List<WmsMaterialCoilVo> getCoilInfoByIds(String coilIds) {
|
||
if (StringUtils.isBlank(coilIds)) {
|
||
return Collections.emptyList();
|
||
}
|
||
|
||
// 将逗号分隔的字符串转换为ID列表
|
||
List<Long> idList = Arrays.stream(coilIds.split(","))
|
||
.map(String::trim)
|
||
.filter(s -> !s.isEmpty())
|
||
.map(Long::valueOf)
|
||
.collect(Collectors.toList());
|
||
|
||
// 查询对应的钢卷信息
|
||
return coilMapper.selectVoBatchIds(idList);
|
||
}
|
||
}
|