package cn.iocoder.yudao.module.mes.api.productsales;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.mes.api.productsales.dto.MesWmProductSalesLineRespDTO;
|
import cn.iocoder.yudao.module.mes.api.productsales.dto.MesWmProductSalesRespDTO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesLineMapper;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesMapper;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* MES 销售出库单 API 实现类
|
*/
|
@Service
|
public class MesWmProductSalesApiImpl implements MesWmProductSalesApi {
|
|
@Resource
|
private MesWmProductSalesMapper productSalesMapper;
|
@Resource
|
private MesWmProductSalesLineMapper productSalesLineMapper;
|
|
@Override
|
public List<MesWmProductSalesRespDTO> getProductSalesListBySaleOrderId(Long saleOrderId) {
|
if (saleOrderId == null) {
|
return List.of();
|
}
|
List<MesWmProductSalesDO> salesList = productSalesMapper.selectListBySaleOrderId(saleOrderId);
|
return convertList(salesList);
|
}
|
|
@Override
|
public List<MesWmProductSalesRespDTO> getProductSalesListByClientId(Long clientId) {
|
if (clientId == null) {
|
return List.of();
|
}
|
return convertList(productSalesMapper.selectListByClientId(clientId));
|
}
|
|
@Override
|
public MesWmProductSalesRespDTO getProductSales(Long id) {
|
MesWmProductSalesDO sales = productSalesMapper.selectById(id);
|
if (sales == null) {
|
return null;
|
}
|
return convert(sales, productSalesLineMapper.selectListBySalesId(id));
|
}
|
|
private List<MesWmProductSalesRespDTO> convertList(List<MesWmProductSalesDO> salesList) {
|
if (CollUtil.isEmpty(salesList)) {
|
return List.of();
|
}
|
Map<Long, List<MesWmProductSalesLineDO>> lineMap = productSalesLineMapper
|
.selectListBySalesIds(salesList.stream().map(MesWmProductSalesDO::getId).toList())
|
.stream().collect(Collectors.groupingBy(MesWmProductSalesLineDO::getSalesId));
|
return salesList.stream()
|
.map(sales -> convert(sales, lineMap.getOrDefault(sales.getId(), List.of())))
|
.toList();
|
}
|
|
private MesWmProductSalesRespDTO convert(MesWmProductSalesDO sales, List<MesWmProductSalesLineDO> lines) {
|
MesWmProductSalesRespDTO resp = BeanUtils.toBean(sales, MesWmProductSalesRespDTO.class);
|
List<MesWmProductSalesLineRespDTO> lineResps = BeanUtils.toBean(lines, MesWmProductSalesLineRespDTO.class);
|
resp.setLines(lineResps);
|
resp.setTotalPrice(lineResps.stream()
|
.map(line -> line.getTotalPrice() != null ? line.getTotalPrice() : calcLineAmount(line))
|
.filter(amount -> amount != null)
|
.reduce(BigDecimal.ZERO, BigDecimal::add));
|
return resp;
|
}
|
|
private BigDecimal calcLineAmount(MesWmProductSalesLineRespDTO line) {
|
if (line.getPrice() == null || line.getQuantity() == null) {
|
return null;
|
}
|
return line.getPrice().multiply(line.getQuantity());
|
}
|
|
}
|