gaoluyang
2026-10-30 cbadfd8e691ab335965202a984db16e55ac8e42c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package cn.iocoder.yudao.module.mes.service.wm.statistics;
 
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.mes.controller.admin.wm.statistics.vo.MesWmOutboundSummaryRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.statistics.vo.MesWmSortSummaryRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesItemStatisticsDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.sorting.MesWmSortWarehouseStatisticsDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesLineMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.sorting.MesWmSortTaskMapper;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
 
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
/**
 * MES 销售出库统计 Service 实现类
 *
 * @author 超级管理员
 */
@Service
@Validated
public class MesWmSalesStatisticsServiceImpl implements MesWmSalesStatisticsService {
 
    @Resource
    private MesWmSortTaskMapper sortTaskMapper;
    @Resource
    private MesWmProductSalesLineMapper productSalesLineMapper;
    @Resource
    private MesWmWarehouseService warehouseService;
    @Resource
    private MesMdmItemService mdmItemService;
 
    @Override
    public List<MesWmSortSummaryRespVO> getSortSummary(Long warehouseId, LocalDateTime beginTime, LocalDateTime endTime) {
        List<MesWmSortWarehouseStatisticsDO> statisticsList =
                sortTaskMapper.selectWarehouseStatistics(warehouseId, beginTime, endTime);
        if (CollectionUtils.isAnyEmpty(statisticsList)) {
            return new ArrayList<>();
        }
        Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap(
                CollectionUtils.convertSet(statisticsList, MesWmSortWarehouseStatisticsDO::getWarehouseId));
        List<MesWmSortSummaryRespVO> result = new ArrayList<>(statisticsList.size());
        for (MesWmSortWarehouseStatisticsDO statistics : statisticsList) {
            MesWmWarehouseDO warehouse = warehouseMap.get(statistics.getWarehouseId());
            MesWmSortSummaryRespVO vo = new MesWmSortSummaryRespVO();
            vo.setWarehouseId(statistics.getWarehouseId());
            vo.setWarehouseName(warehouse != null ? warehouse.getName()
                    : "仓库(ID=" + statistics.getWarehouseId() + ")");
            vo.setTaskCount(statistics.getTaskCount());
            vo.setPlanQuantity(statistics.getPlanQuantity());
            vo.setSortedQuantity(statistics.getSortedQuantity());
            result.add(vo);
        }
        return result;
    }
 
    @Override
    public List<MesWmOutboundSummaryRespVO> getOutboundSummary(Long itemId, LocalDateTime beginTime, LocalDateTime endTime) {
        List<MesWmProductSalesItemStatisticsDO> statisticsList =
                productSalesLineMapper.selectItemStatistics(itemId, beginTime, endTime);
        if (CollectionUtils.isAnyEmpty(statisticsList)) {
            return new ArrayList<>();
        }
        Map<Long, MesMdmItemDO> itemMap = mdmItemService.getItemMap(
                CollectionUtils.convertSet(statisticsList, MesWmProductSalesItemStatisticsDO::getItemId));
        List<MesWmOutboundSummaryRespVO> result = new ArrayList<>(statisticsList.size());
        for (MesWmProductSalesItemStatisticsDO statistics : statisticsList) {
            MesMdmItemDO item = itemMap.get(statistics.getItemId());
            MesWmOutboundSummaryRespVO vo = new MesWmOutboundSummaryRespVO();
            vo.setItemId(statistics.getItemId());
            vo.setItemCode(item != null ? item.getCode() : null);
            vo.setItemName(item != null ? item.getName() : "物料(ID=" + statistics.getItemId() + ")");
            vo.setSalesCount(statistics.getSalesCount());
            vo.setQuantity(statistics.getQuantity());
            result.add(vo);
        }
        return result;
    }
 
}