l3能源成本分摊
This commit is contained in:
@@ -143,6 +143,15 @@ public class EmsEnergyConsumptionController extends BaseController {
|
||||
return R.ok(monthlyConsumption);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最近一次抄表的时间范围
|
||||
*/
|
||||
@GetMapping("/latestMeterReadTime")
|
||||
public R<com.klp.ems.domain.vo.LatestMeterReadTimeVo> getLatestMeterReadTime() {
|
||||
com.klp.ems.domain.vo.LatestMeterReadTimeVo meterReadTime = iEmsEnergyConsumptionService.getLatestMeterReadTime();
|
||||
return R.ok(meterReadTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增能耗记录
|
||||
*/
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.klp.ems.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.io.IOException;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -20,6 +21,8 @@ import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
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.ems.service.IEmsMeterService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
@@ -115,4 +118,24 @@ public class EmsMeterController extends BaseController {
|
||||
public R<Void> importMeters(@RequestParam("file") MultipartFile file) {
|
||||
return toAjax(iEmsMeterService.importMeters(file));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询库区-设备绑定矩阵
|
||||
* 按库区维度查询绑定的设备及其能源类型
|
||||
*/
|
||||
@GetMapping("/matrix")
|
||||
public R<List<EnergyLinkMatrixVo>> queryEnergyLinkMatrix() {
|
||||
List<EnergyLinkMatrixVo> matrix = iEmsMeterService.queryEnergyLinkMatrix();
|
||||
return R.ok(matrix);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询能源绑定统计信息
|
||||
* 统计库区总数、设备总数、绑定总数、能源类型总数
|
||||
*/
|
||||
@GetMapping("/statistics")
|
||||
public R<EnergyLinkStatisticsVo> queryEnergyLinkStatistics() {
|
||||
EnergyLinkStatisticsVo statistics = iEmsMeterService.queryEnergyLinkStatistics();
|
||||
return R.ok(statistics);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,16 @@ import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
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.CoilTotalMergedExportVo;
|
||||
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.service.IEnergyCostReportService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -16,8 +24,10 @@ import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 能源成本报表 Controller
|
||||
@@ -47,4 +57,56 @@ public class EnergyCostReportController extends BaseController {
|
||||
public TableDataInfo<WmsEnergyCoilDailyVo> detail(EnergyCostReportBo bo, PageQuery pageQuery) {
|
||||
return reportService.detail(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "仓库生产成本", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/warehouseProduction/stats")
|
||||
public R<WarehouseProductionStatVo> warehouseProductionStats(WarehouseProductionBo bo) {
|
||||
return R.ok(reportService.warehouseProductionStats(bo));
|
||||
}
|
||||
|
||||
@Log(title = "仓库生产成本", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/warehouseProduction/detail")
|
||||
public TableDataInfo<WarehouseProductionCoilVo> warehouseProductionDetail(WarehouseProductionBo bo, PageQuery pageQuery) {
|
||||
return reportService.warehouseProductionDetail(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "仓库生产成本", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/warehouseProduction/coilDetail")
|
||||
public R<WarehouseProductionCoilVo> warehouseProductionCoilDetail(Long coilId) {
|
||||
return R.ok(reportService.warehouseProductionCoilDetail(coilId));
|
||||
}
|
||||
|
||||
@Log(title = "入场卷能源汇总", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/coilTotal/summary")
|
||||
public R<CoilTotalCostVo> coilTotalEnergySummary(CoilTotalCostBo bo) {
|
||||
return R.ok(reportService.coilTotalEnergySummary(bo));
|
||||
}
|
||||
|
||||
@Log(title = "入场卷能源明细", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/coilTotal/detail")
|
||||
public TableDataInfo<CoilTotalCostDetailVo> coilTotalEnergyDetail(CoilTotalCostBo bo, PageQuery pageQuery) {
|
||||
return reportService.coilTotalEnergyDetail(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "入场卷成本汇总", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/coilTotal/merged")
|
||||
public TableDataInfo<CoilTotalCostVo> coilTotalMerged(CoilTotalCostBo bo, PageQuery pageQuery) {
|
||||
return reportService.coilTotalMerged(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "入场卷成本汇总", businessType = BusinessType.EXPORT)
|
||||
@GetMapping("/coilTotal/merged/export")
|
||||
public void coilTotalMergedExport(CoilTotalCostBo bo, HttpServletResponse response) {
|
||||
List<CoilTotalCostVo> list = reportService.coilTotalMergedExport(bo);
|
||||
List<CoilTotalMergedExportVo> exportList = list.stream().map(item -> {
|
||||
CoilTotalMergedExportVo vo = new CoilTotalMergedExportVo();
|
||||
vo.setEnterCoilNo(item.getEnterCoilNo());
|
||||
vo.setCurrentCoilNo(item.getCurrentCoilNo());
|
||||
vo.setEnergyCost(item.getTotalEnergyCost());
|
||||
vo.setStockCost(item.getStockCost());
|
||||
vo.setTotalCost(item.getTotalCost());
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
ExcelUtil.exportExcel(exportList, "入场卷成本汇总", CoilTotalMergedExportVo.class, response);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.klp.ems.domain.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 入场钢卷总费用查询参数
|
||||
*/
|
||||
@Data
|
||||
public class CoilTotalCostBo {
|
||||
/** 入场卷号(模糊) */
|
||||
private String enterCoilNo;
|
||||
/** 当前卷号(模糊) */
|
||||
private String currentCoilNo;
|
||||
/** 最早创建时间过滤(日期) */
|
||||
private String startDate;
|
||||
/** 最早创建时间过滤(日期) */
|
||||
private String endDate;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.klp.ems.domain.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 仓库生产统计查询参数
|
||||
*/
|
||||
@Data
|
||||
public class WarehouseProductionBo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 逻辑库区ID */
|
||||
private Long logicWarehouseId;
|
||||
|
||||
/** 开始日期(yyyy-MM-dd) */
|
||||
private String startDate;
|
||||
|
||||
/** 结束日期(yyyy-MM-dd) */
|
||||
private String endDate;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.klp.ems.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 入场钢卷能源费用明细(按流转记录)
|
||||
*/
|
||||
@Data
|
||||
public class CoilTotalCostDetailVo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String enterCoilNo;
|
||||
private Long coilId;
|
||||
private String currentCoilNo;
|
||||
/** 逻辑库区名称 */
|
||||
private String warehouseName;
|
||||
private Long warehouseId;
|
||||
private Integer actionStatus;
|
||||
private Date startTime;
|
||||
private Date endTime;
|
||||
/** 生产时长(小时) */
|
||||
private Double duration;
|
||||
/** 分摊能耗 */
|
||||
private Double consumption;
|
||||
/** 分摊能源成本 */
|
||||
private Double totalCost;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.klp.ems.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 入场钢卷总费用(能源分摊部分)VO
|
||||
*/
|
||||
@Data
|
||||
public class CoilTotalCostVo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 入场卷号 */
|
||||
private String enterCoilNo;
|
||||
/** 当前卷号(展示用,取同一入场卷号下任一当前卷号) */
|
||||
private String currentCoilNo;
|
||||
/** 关联的钢卷数量 */
|
||||
private Long coilCount;
|
||||
/** 总生产时长(小时) */
|
||||
private Double totalDuration;
|
||||
/** 总分摊能耗 */
|
||||
private Double totalConsumption;
|
||||
/** 总分摊能源成本 */
|
||||
private Double totalEnergyCost;
|
||||
/** 囤积成本(当日/按 stock 计算) */
|
||||
private Double stockCost;
|
||||
/** 净重 */
|
||||
private Double totalNetWeight;
|
||||
/** 毛重 */
|
||||
private Double totalGrossWeight;
|
||||
/** 总成本(能源+囤积) */
|
||||
private Double totalCost;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.klp.ems.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class CoilTotalMergedExportVo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty("入场卷号")
|
||||
private String enterCoilNo;
|
||||
|
||||
@ExcelProperty("当前卷号")
|
||||
private String currentCoilNo;
|
||||
|
||||
@ExcelProperty("能源成本")
|
||||
private Double energyCost;
|
||||
|
||||
@ExcelProperty("囤积成本")
|
||||
private Double stockCost;
|
||||
|
||||
@ExcelProperty("总成本")
|
||||
private Double totalCost;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.klp.ems.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class EnergyBreakdownItemVo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long energyTypeId;
|
||||
private String energyTypeName;
|
||||
private String consumptionUnit;
|
||||
private Double consumption;
|
||||
private Double cost;
|
||||
private Double percentage;
|
||||
private Double averageUnitCost;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.klp.ems.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class WarehouseProductionCoilVo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long coilId;
|
||||
private String coilCode;
|
||||
private String enterCoilNo;
|
||||
private String currentCoilNo;
|
||||
private Long warehouseId;
|
||||
/** 待操作状态 0待上料 1在产 2完成 */
|
||||
private Integer actionStatus;
|
||||
private Date startTime;
|
||||
private Date endTime;
|
||||
/** 生产时长(小时) */
|
||||
private Double duration;
|
||||
/** 分摊能耗 */
|
||||
private Double consumption;
|
||||
/** 分摊成本 */
|
||||
private Double totalCost;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.klp.ems.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class WarehouseProductionStatVo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 卷数 */
|
||||
private Integer coilCount;
|
||||
/** 总生产时长(小时) */
|
||||
private Double totalDuration;
|
||||
/** 总能耗 */
|
||||
private Double totalConsumption;
|
||||
/** 总成本 */
|
||||
private Double totalCost;
|
||||
/** 单位成本(元/卷) */
|
||||
private Double unitCost;
|
||||
/** 能源分解列表 */
|
||||
private List<EnergyBreakdownItemVo> energyBreakdownList;
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 钢卷能源成本统计 VO
|
||||
@@ -13,22 +14,27 @@ import java.math.BigDecimal;
|
||||
public class WmsEnergyCoilDailyStatisticsVo {
|
||||
|
||||
/**
|
||||
* 钢卷总数
|
||||
* 生产中总数(status=0,1的钢卷)
|
||||
*/
|
||||
private Long totalCoils;
|
||||
|
||||
/**
|
||||
* 总消耗量
|
||||
* 操作总数(status=0,1,2的钢卷)
|
||||
*/
|
||||
private BigDecimal totalConsumption;
|
||||
private Long totalOperationCoils;
|
||||
|
||||
/**
|
||||
* 总成本
|
||||
* 平均分摊比率(0-1之间,表示该钢卷占库区总消耗的比例)
|
||||
*/
|
||||
private BigDecimal avgAllocationFactor;
|
||||
|
||||
/**
|
||||
* 总分摊成本
|
||||
*/
|
||||
private BigDecimal totalCost;
|
||||
|
||||
/**
|
||||
* 平均单位成本(¥/小时)
|
||||
* 平均单位成本(¥/单位消耗)
|
||||
*/
|
||||
private BigDecimal avgUnitCost;
|
||||
|
||||
@@ -36,4 +42,14 @@ public class WmsEnergyCoilDailyStatisticsVo {
|
||||
* 总生产时长(分钟)
|
||||
*/
|
||||
private Long totalProductionDuration;
|
||||
|
||||
/**
|
||||
* 最近一次抄表的开始时间(上一次抄表的结束时间)
|
||||
*/
|
||||
private LocalDateTime latestMeterReadStartTime;
|
||||
|
||||
/**
|
||||
* 最近一次抄表的结束时间
|
||||
*/
|
||||
private LocalDateTime latestMeterReadEndTime;
|
||||
}
|
||||
|
||||
@@ -81,4 +81,14 @@ public class WmsEnergyCoilDailyVo {
|
||||
|
||||
@ExcelProperty("能源类型名称")
|
||||
private String energyTypeName;
|
||||
|
||||
/**
|
||||
* 该库区最近一次抄表的开始时间
|
||||
*/
|
||||
private LocalDateTime latestMeterReadStartTime;
|
||||
|
||||
/**
|
||||
* 该库区最近一次抄表的结束时间
|
||||
*/
|
||||
private LocalDateTime latestMeterReadEndTime;
|
||||
}
|
||||
|
||||
@@ -57,4 +57,9 @@ public interface EmsEnergyConsumptionMapper extends BaseMapperPlus<EmsEnergyCons
|
||||
* 获取能耗统计信息(用SQL聚合函数计算)
|
||||
*/
|
||||
Map<String, Object> getStatistics(EmsEnergyConsumptionBo bo);
|
||||
|
||||
/**
|
||||
* 查询最近一次抄表的时间范围
|
||||
*/
|
||||
com.klp.ems.domain.vo.LatestMeterReadTimeVo selectLatestMeterReadTime();
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.klp.ems.mapper;
|
||||
|
||||
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.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.ems.domain.bo.MeterFilterBo;
|
||||
|
||||
@@ -19,4 +21,17 @@ public interface EmsMeterMapper extends BaseMapperPlus<EmsMeterMapper, EmsMeter,
|
||||
* 根据可选条件筛选计量设备ID列表
|
||||
*/
|
||||
java.util.List<Long> selectMeterIds(MeterFilterBo filter);
|
||||
|
||||
/**
|
||||
* 查询库区-设备绑定矩阵
|
||||
* 按库区维度查询绑定的设备及其能源类型
|
||||
*/
|
||||
List<EnergyLinkMatrixVo> selectEnergyLinkMatrix();
|
||||
|
||||
/**
|
||||
* 查询能源绑定统计信息
|
||||
* 统计库区总数、设备总数、绑定总数、能源类型总数
|
||||
*/
|
||||
EnergyLinkStatisticsVo selectEnergyLinkStatistics();
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package com.klp.ems.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
|
||||
import com.klp.ems.domain.WmsEnergyCoilDaily;
|
||||
import com.klp.ems.domain.bo.CoilTotalCostBo;
|
||||
import com.klp.ems.domain.bo.EnergyCostReportBo;
|
||||
import com.klp.ems.domain.vo.EnergyCostSummaryVo;
|
||||
import com.klp.ems.domain.vo.WmsEnergyCoilDailyStatisticsVo;
|
||||
import com.klp.ems.domain.vo.WmsEnergyCoilDailyVo;
|
||||
import com.klp.ems.domain.bo.WarehouseProductionBo;
|
||||
import com.klp.ems.domain.bo.WmsEnergyCoilDailyBo;
|
||||
import com.klp.ems.domain.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
@@ -15,11 +19,20 @@ import java.util.Map;
|
||||
/**
|
||||
* 钢卷日能源成本分摊结果 Mapper
|
||||
*/
|
||||
public interface WmsEnergyCoilDailyMapper extends BaseMapperPlus<WmsEnergyCoilDailyMapper, WmsEnergyCoilDaily, WmsEnergyCoilDailyVo> {
|
||||
public interface WmsEnergyCoilDailyMapper extends BaseMapper<WmsEnergyCoilDaily> {
|
||||
|
||||
/** 物理清理指定任务的明细 */
|
||||
int deleteByTaskId(Long taskId);
|
||||
|
||||
/** 查询单条 */
|
||||
WmsEnergyCoilDailyVo selectVoById(Long energyCostId);
|
||||
|
||||
/** 查询列表 */
|
||||
List<WmsEnergyCoilDailyVo> selectVoList(@Param("ew") Wrapper<WmsEnergyCoilDaily> queryWrapper);
|
||||
|
||||
/** 分页查询 */
|
||||
IPage<WmsEnergyCoilDailyVo> selectVoPage(Page<WmsEnergyCoilDailyVo> page, @Param("ew") Wrapper<WmsEnergyCoilDaily> queryWrapper);
|
||||
|
||||
/** 查询指定任务的所有分摊记录 */
|
||||
List<WmsEnergyCoilDaily> selectListByTask(Long taskId);
|
||||
|
||||
@@ -39,7 +52,37 @@ public interface WmsEnergyCoilDailyMapper extends BaseMapperPlus<WmsEnergyCoilDa
|
||||
Map<String, Object> selectEnergyOverview(@Param("bo") EnergyCostReportBo bo);
|
||||
|
||||
/** 明细分页 */
|
||||
Page<WmsEnergyCoilDailyVo> selectReportDetail(Page<WmsEnergyCoilDailyVo> page, @Param("bo") EnergyCostReportBo bo);
|
||||
IPage<WmsEnergyCoilDailyVo> selectReportDetail(Page<WmsEnergyCoilDailyVo> page, @Param("bo") EnergyCostReportBo bo);
|
||||
|
||||
/** 仓库生产统计 */
|
||||
WarehouseProductionStatVo selectWarehouseProductionStats(@Param("bo") WarehouseProductionBo bo);
|
||||
|
||||
/** 仓库生产明细 */
|
||||
IPage<WarehouseProductionCoilVo> selectWarehouseProductionDetail(Page<WarehouseProductionCoilVo> page, @Param("bo") WarehouseProductionBo bo);
|
||||
|
||||
/** 仓库生产能源分解 */
|
||||
List<EnergyBreakdownItemVo> selectWarehouseProductionEnergyBreakdown(@Param("bo") WarehouseProductionBo bo);
|
||||
|
||||
/** 单卷详情(含分摊成本) */
|
||||
WarehouseProductionCoilVo selectWarehouseProductionCoilDetail(@Param("coilId") Long coilId);
|
||||
|
||||
/** 入场卷号维度能源费用汇总 */
|
||||
CoilTotalCostVo selectCoilTotalEnergySummary(@Param("bo") CoilTotalCostBo bo);
|
||||
|
||||
/** 入场卷号维度能源费用明细 */
|
||||
IPage<CoilTotalCostDetailVo> selectCoilTotalEnergyDetail(Page<CoilTotalCostDetailVo> page, @Param("bo") CoilTotalCostBo bo);
|
||||
|
||||
/** 入场卷号维度能源+囤积成本汇总 */
|
||||
@com.baomidou.mybatisplus.annotation.InterceptorIgnore(tenantLine = "true", blockAttack = "true", dynamicTableName = "true", illegalSql = "true")
|
||||
List<CoilTotalCostVo> selectCoilTotalMerged(@Param("bo") CoilTotalCostBo bo,
|
||||
@Param("offset") long offset,
|
||||
@Param("pageSize") long pageSize);
|
||||
|
||||
/** 入场卷号维度能源+囤积成本汇总总数 */
|
||||
Long selectCoilTotalMergedCount(@Param("bo") CoilTotalCostBo bo);
|
||||
|
||||
/** 入场卷号维度能源+囤积成本汇总(导出) */
|
||||
List<CoilTotalCostVo> selectCoilTotalMergedExport(@Param("bo") CoilTotalCostBo bo);
|
||||
|
||||
/** 查询待操作钢卷的能源成本(一次性SQL查询) */
|
||||
List<WmsEnergyCoilDailyVo> selectPendingActionCoilCost();
|
||||
|
||||
@@ -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