l3能源成本分摊

This commit is contained in:
2025-12-09 16:43:45 +08:00
parent d919c5ce7a
commit a2d0cce233
36 changed files with 3297 additions and 1298 deletions

View File

@@ -95,4 +95,10 @@ public interface IEmsEnergyConsumptionService {
* @return 统计信息(总记录数、总消耗量、平均消耗量、最大消耗量等)
*/
Map<String, Object> getStatistics(EmsEnergyConsumptionBo bo);
/**
* 获取最近一次抄表的时间范围
* @return 最近一次抄表的开始时间和结束时间
*/
com.klp.ems.domain.vo.LatestMeterReadTimeVo getLatestMeterReadTime();
}

View File

@@ -2,6 +2,8 @@ package com.klp.ems.service;
import com.klp.ems.domain.EmsMeter;
import com.klp.ems.domain.vo.EmsMeterVo;
import com.klp.ems.domain.vo.EnergyLinkMatrixVo;
import com.klp.ems.domain.vo.EnergyLinkStatisticsVo;
import com.klp.ems.domain.bo.EmsMeterBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
@@ -58,4 +60,16 @@ public interface IEmsMeterService {
* 导入设备
*/
Boolean importMeters(MultipartFile file);
/**
* 查询库区-设备绑定矩阵
* 按库区维度查询绑定的设备及其能源类型
*/
List<EnergyLinkMatrixVo> queryEnergyLinkMatrix();
/**
* 查询能源绑定统计信息
* 统计库区总数、设备总数、绑定总数、能源类型总数
*/
EnergyLinkStatisticsVo queryEnergyLinkStatistics();
}

View File

@@ -3,7 +3,13 @@ package com.klp.ems.service;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.page.TableDataInfo;
import com.klp.ems.domain.bo.EnergyCostReportBo;
import com.klp.ems.domain.bo.CoilTotalCostBo;
import com.klp.ems.domain.bo.WarehouseProductionBo;
import com.klp.ems.domain.vo.CoilTotalCostDetailVo;
import com.klp.ems.domain.vo.CoilTotalCostVo;
import com.klp.ems.domain.vo.EnergyCostSummaryVo;
import com.klp.ems.domain.vo.WarehouseProductionCoilVo;
import com.klp.ems.domain.vo.WarehouseProductionStatVo;
import com.klp.ems.domain.vo.WmsEnergyCoilDailyVo;
import java.util.List;
@@ -22,4 +28,25 @@ public interface IEnergyCostReportService {
/** 明细分页 */
TableDataInfo<WmsEnergyCoilDailyVo> detail(EnergyCostReportBo bo, PageQuery pageQuery);
/** 仓库生产统计 */
WarehouseProductionStatVo warehouseProductionStats(WarehouseProductionBo bo);
/** 仓库生产明细 */
TableDataInfo<WarehouseProductionCoilVo> warehouseProductionDetail(WarehouseProductionBo bo, PageQuery pageQuery);
/** 单卷详情 */
WarehouseProductionCoilVo warehouseProductionCoilDetail(Long coilId);
/** 入场卷号维度能源费用汇总 */
CoilTotalCostVo coilTotalEnergySummary(CoilTotalCostBo bo);
/** 入场卷号维度能源费用明细 */
TableDataInfo<CoilTotalCostDetailVo> coilTotalEnergyDetail(CoilTotalCostBo bo, PageQuery pageQuery);
/** 入场卷号维度能源+囤积综合汇总 */
TableDataInfo<CoilTotalCostVo> coilTotalMerged(CoilTotalCostBo bo, PageQuery pageQuery);
/** 入场卷号维度能源+囤积综合汇总导出 */
java.util.List<CoilTotalCostVo> coilTotalMergedExport(CoilTotalCostBo bo);
}

View File

@@ -558,4 +558,12 @@ public class EmsEnergyConsumptionServiceImpl implements IEmsEnergyConsumptionSer
}
return stats;
}
/**
* 获取最近一次抄表的时间范围
*/
@Override
public com.klp.ems.domain.vo.LatestMeterReadTimeVo getLatestMeterReadTime() {
return baseMapper.selectLatestMeterReadTime();
}
}

View File

@@ -13,6 +13,8 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.klp.ems.domain.bo.EmsMeterBo;
import com.klp.ems.domain.vo.EmsMeterVo;
import com.klp.ems.domain.vo.EnergyLinkMatrixVo;
import com.klp.ems.domain.vo.EnergyLinkStatisticsVo;
import com.klp.ems.domain.EmsMeter;
import com.klp.ems.domain.EmsEnergyType;
import com.klp.ems.domain.dto.MeterTemplateDto;
@@ -23,8 +25,8 @@ import com.klp.ems.service.IEmsMeterService;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Map;
/**
* 计量设备阈值移至此处Service业务层处理
@@ -231,4 +233,22 @@ public class EmsMeterServiceImpl implements IEmsMeterService {
return null;
}
/**
* 查询库区-设备绑定矩阵
* 按库区维度查询绑定的设备及其能源类型
*/
@Override
public List<EnergyLinkMatrixVo> queryEnergyLinkMatrix() {
return baseMapper.selectEnergyLinkMatrix();
}
/**
* 查询能源绑定统计信息
* 统计库区总数、设备总数、绑定总数、能源类型总数
*/
@Override
public EnergyLinkStatisticsVo queryEnergyLinkStatistics() {
return baseMapper.selectEnergyLinkStatistics();
}
}

View File

@@ -1,10 +1,17 @@
package com.klp.ems.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.page.TableDataInfo;
import com.klp.ems.domain.bo.CoilTotalCostBo;
import com.klp.ems.domain.bo.EnergyCostReportBo;
import com.klp.ems.domain.bo.WarehouseProductionBo;
import com.klp.ems.domain.vo.CoilTotalCostDetailVo;
import com.klp.ems.domain.vo.CoilTotalCostVo;
import com.klp.ems.domain.vo.EnergyCostSummaryVo;
import com.klp.ems.domain.vo.WarehouseProductionCoilVo;
import com.klp.ems.domain.vo.WarehouseProductionStatVo;
import com.klp.ems.domain.vo.WmsEnergyCoilDailyVo;
import com.klp.ems.mapper.WmsEnergyCoilDailyMapper;
import com.klp.ems.service.IEnergyCostReportService;
@@ -49,7 +56,90 @@ public class EnergyCostReportServiceImpl implements IEnergyCostReportService {
@Override
public TableDataInfo<WmsEnergyCoilDailyVo> detail(EnergyCostReportBo bo, PageQuery pageQuery) {
Page<WmsEnergyCoilDailyVo> page = coilDailyMapper.selectReportDetail(pageQuery.build(), bo);
IPage<WmsEnergyCoilDailyVo> page = coilDailyMapper.selectReportDetail(pageQuery.build(), bo);
return TableDataInfo.build(page);
}
@Override
public WarehouseProductionStatVo warehouseProductionStats(WarehouseProductionBo bo) {
WarehouseProductionStatVo statVo = coilDailyMapper.selectWarehouseProductionStats(bo);
if (statVo == null) {
statVo = new WarehouseProductionStatVo();
}
// 能源分解
List<com.klp.ems.domain.vo.EnergyBreakdownItemVo> items = coilDailyMapper.selectWarehouseProductionEnergyBreakdown(bo);
if (items == null) {
items = Collections.emptyList();
}
double totalCost = items.stream().mapToDouble(i -> i.getCost() == null ? 0D : i.getCost()).sum();
for (com.klp.ems.domain.vo.EnergyBreakdownItemVo item : items) {
double cost = item.getCost() == null ? 0D : item.getCost();
double consumption = item.getConsumption() == null ? 0D : item.getConsumption();
item.setPercentage(totalCost > 0 ? (cost * 100 / totalCost) : 0D);
item.setAverageUnitCost(consumption > 0 ? (cost / consumption) : 0D);
}
statVo.setEnergyBreakdownList(items);
// unitCost 补充
if (statVo.getUnitCost() == null || statVo.getUnitCost() == 0) {
double coils = statVo.getCoilCount() == null ? 0D : statVo.getCoilCount();
double cost = statVo.getTotalCost() == null ? 0D : statVo.getTotalCost();
statVo.setUnitCost(coils > 0 ? cost / coils : 0D);
}
return statVo;
}
@Override
public TableDataInfo<WarehouseProductionCoilVo> warehouseProductionDetail(WarehouseProductionBo bo, PageQuery pageQuery) {
if (pageQuery.getPageSize() == null) {
pageQuery.setPageSize(15);
}
IPage<WarehouseProductionCoilVo> page = coilDailyMapper.selectWarehouseProductionDetail(pageQuery.build(), bo);
return TableDataInfo.build(page);
}
@Override
public WarehouseProductionCoilVo warehouseProductionCoilDetail(Long coilId) {
return coilDailyMapper.selectWarehouseProductionCoilDetail(coilId);
}
@Override
public CoilTotalCostVo coilTotalEnergySummary(CoilTotalCostBo bo) {
CoilTotalCostVo vo = coilDailyMapper.selectCoilTotalEnergySummary(bo);
if (vo == null) {
vo = new CoilTotalCostVo();
vo.setTotalEnergyCost(0D);
vo.setTotalConsumption(0D);
vo.setTotalDuration(0D);
vo.setCoilCount(0L);
}
return vo;
}
@Override
public TableDataInfo<CoilTotalCostDetailVo> coilTotalEnergyDetail(CoilTotalCostBo bo, PageQuery pageQuery) {
if (pageQuery.getPageSize() == null) {
pageQuery.setPageSize(15);
}
IPage<CoilTotalCostDetailVo> page = coilDailyMapper.selectCoilTotalEnergyDetail(pageQuery.build(), bo);
return TableDataInfo.build(page);
}
@Override
public TableDataInfo<CoilTotalCostVo> coilTotalMerged(CoilTotalCostBo bo, PageQuery pageQuery) {
long pageNum = pageQuery.getPageNum() == null ? 1L : pageQuery.getPageNum();
long pageSize = pageQuery.getPageSize() == null ? 15L : pageQuery.getPageSize();
long offset = (pageNum - 1) * pageSize;
// 手工 count 与数据分页,避免复杂 SQL 自动 count 解析
Long total = coilDailyMapper.selectCoilTotalMergedCount(bo);
java.util.List<CoilTotalCostVo> rows = coilDailyMapper.selectCoilTotalMerged(bo, offset, pageSize);
Page<CoilTotalCostVo> page = new Page<>(pageNum, pageSize);
page.setTotal(total == null ? 0L : total);
page.setRecords(rows);
return TableDataInfo.build(page);
}
@Override
public java.util.List<CoilTotalCostVo> coilTotalMergedExport(CoilTotalCostBo bo) {
return coilDailyMapper.selectCoilTotalMergedExport(bo);
}
}

View File

@@ -3,6 +3,7 @@ package com.klp.ems.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.common.core.domain.PageQuery;
@@ -37,7 +38,7 @@ public class WmsEnergyCoilDailyServiceImpl implements IWmsEnergyCoilDailyService
@Override
public TableDataInfo<WmsEnergyCoilDailyVo> queryPageList(WmsEnergyCoilDailyBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WmsEnergyCoilDaily> lqw = buildQueryWrapper(bo);
Page<WmsEnergyCoilDailyVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
IPage<WmsEnergyCoilDailyVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}