l3能源成本分摊
This commit is contained in:
@@ -95,4 +95,10 @@ public interface IEmsEnergyConsumptionService {
|
||||
* @return 统计信息(总记录数、总消耗量、平均消耗量、最大消耗量等)
|
||||
*/
|
||||
Map<String, Object> getStatistics(EmsEnergyConsumptionBo bo);
|
||||
|
||||
/**
|
||||
* 获取最近一次抄表的时间范围
|
||||
* @return 最近一次抄表的开始时间和结束时间
|
||||
*/
|
||||
com.klp.ems.domain.vo.LatestMeterReadTimeVo getLatestMeterReadTime();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -558,4 +558,12 @@ public class EmsEnergyConsumptionServiceImpl implements IEmsEnergyConsumptionSer
|
||||
}
|
||||
return stats;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最近一次抄表的时间范围
|
||||
*/
|
||||
@Override
|
||||
public com.klp.ems.domain.vo.LatestMeterReadTimeVo getLatestMeterReadTime() {
|
||||
return baseMapper.selectLatestMeterReadTime();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user