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 getSortSummary(Long warehouseId, LocalDateTime beginTime, LocalDateTime endTime) { List statisticsList = sortTaskMapper.selectWarehouseStatistics(warehouseId, beginTime, endTime); if (CollectionUtils.isAnyEmpty(statisticsList)) { return new ArrayList<>(); } Map warehouseMap = warehouseService.getWarehouseMap( CollectionUtils.convertSet(statisticsList, MesWmSortWarehouseStatisticsDO::getWarehouseId)); List 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 getOutboundSummary(Long itemId, LocalDateTime beginTime, LocalDateTime endTime) { List statisticsList = productSalesLineMapper.selectItemStatistics(itemId, beginTime, endTime); if (CollectionUtils.isAnyEmpty(statisticsList)) { return new ArrayList<>(); } Map itemMap = mdmItemService.getItemMap( CollectionUtils.convertSet(statisticsList, MesWmProductSalesItemStatisticsDO::getItemId)); List 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; } }