diff --git a/klp-ems/src/main/java/com/klp/ems/controller/EmsEnergyConsumptionController.java b/klp-ems/src/main/java/com/klp/ems/controller/EmsEnergyConsumptionController.java index 9c1068c6..03246d6d 100644 --- a/klp-ems/src/main/java/com/klp/ems/controller/EmsEnergyConsumptionController.java +++ b/klp-ems/src/main/java/com/klp/ems/controller/EmsEnergyConsumptionController.java @@ -143,6 +143,15 @@ public class EmsEnergyConsumptionController extends BaseController { return R.ok(monthlyConsumption); } + /** + * 获取最近一次抄表的时间范围 + */ + @GetMapping("/latestMeterReadTime") + public R getLatestMeterReadTime() { + com.klp.ems.domain.vo.LatestMeterReadTimeVo meterReadTime = iEmsEnergyConsumptionService.getLatestMeterReadTime(); + return R.ok(meterReadTime); + } + /** * 新增能耗记录 */ diff --git a/klp-ems/src/main/java/com/klp/ems/controller/EmsMeterController.java b/klp-ems/src/main/java/com/klp/ems/controller/EmsMeterController.java index b983d3a0..239b74a5 100644 --- a/klp-ems/src/main/java/com/klp/ems/controller/EmsMeterController.java +++ b/klp-ems/src/main/java/com/klp/ems/controller/EmsMeterController.java @@ -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 importMeters(@RequestParam("file") MultipartFile file) { return toAjax(iEmsMeterService.importMeters(file)); } + + /** + * 查询库区-设备绑定矩阵 + * 按库区维度查询绑定的设备及其能源类型 + */ + @GetMapping("/matrix") + public R> queryEnergyLinkMatrix() { + List matrix = iEmsMeterService.queryEnergyLinkMatrix(); + return R.ok(matrix); + } + + /** + * 查询能源绑定统计信息 + * 统计库区总数、设备总数、绑定总数、能源类型总数 + */ + @GetMapping("/statistics") + public R queryEnergyLinkStatistics() { + EnergyLinkStatisticsVo statistics = iEmsMeterService.queryEnergyLinkStatistics(); + return R.ok(statistics); + } } diff --git a/klp-ems/src/main/java/com/klp/ems/controller/EnergyCostReportController.java b/klp-ems/src/main/java/com/klp/ems/controller/EnergyCostReportController.java index 7595abb7..cd559d3f 100644 --- a/klp-ems/src/main/java/com/klp/ems/controller/EnergyCostReportController.java +++ b/klp-ems/src/main/java/com/klp/ems/controller/EnergyCostReportController.java @@ -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 detail(EnergyCostReportBo bo, PageQuery pageQuery) { return reportService.detail(bo, pageQuery); } + + @Log(title = "仓库生产成本", businessType = BusinessType.OTHER) + @GetMapping("/warehouseProduction/stats") + public R warehouseProductionStats(WarehouseProductionBo bo) { + return R.ok(reportService.warehouseProductionStats(bo)); + } + + @Log(title = "仓库生产成本", businessType = BusinessType.OTHER) + @GetMapping("/warehouseProduction/detail") + public TableDataInfo warehouseProductionDetail(WarehouseProductionBo bo, PageQuery pageQuery) { + return reportService.warehouseProductionDetail(bo, pageQuery); + } + + @Log(title = "仓库生产成本", businessType = BusinessType.OTHER) + @GetMapping("/warehouseProduction/coilDetail") + public R warehouseProductionCoilDetail(Long coilId) { + return R.ok(reportService.warehouseProductionCoilDetail(coilId)); + } + + @Log(title = "入场卷能源汇总", businessType = BusinessType.OTHER) + @GetMapping("/coilTotal/summary") + public R coilTotalEnergySummary(CoilTotalCostBo bo) { + return R.ok(reportService.coilTotalEnergySummary(bo)); + } + + @Log(title = "入场卷能源明细", businessType = BusinessType.OTHER) + @GetMapping("/coilTotal/detail") + public TableDataInfo coilTotalEnergyDetail(CoilTotalCostBo bo, PageQuery pageQuery) { + return reportService.coilTotalEnergyDetail(bo, pageQuery); + } + + @Log(title = "入场卷成本汇总", businessType = BusinessType.OTHER) + @GetMapping("/coilTotal/merged") + public TableDataInfo 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 list = reportService.coilTotalMergedExport(bo); + List 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); + } } diff --git a/klp-ems/src/main/java/com/klp/ems/domain/bo/CoilTotalCostBo.java b/klp-ems/src/main/java/com/klp/ems/domain/bo/CoilTotalCostBo.java new file mode 100644 index 00000000..bf5c890b --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/bo/CoilTotalCostBo.java @@ -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; +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/bo/WarehouseProductionBo.java b/klp-ems/src/main/java/com/klp/ems/domain/bo/WarehouseProductionBo.java new file mode 100644 index 00000000..338d6aa5 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/bo/WarehouseProductionBo.java @@ -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; +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalCostDetailVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalCostDetailVo.java new file mode 100644 index 00000000..a2a12524 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalCostDetailVo.java @@ -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; +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalCostVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalCostVo.java new file mode 100644 index 00000000..0c2042e5 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalCostVo.java @@ -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; +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalMergedExportVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalMergedExportVo.java new file mode 100644 index 00000000..624fdc3b --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/CoilTotalMergedExportVo.java @@ -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; +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/EnergyBreakdownItemVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/EnergyBreakdownItemVo.java new file mode 100644 index 00000000..533875b4 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/EnergyBreakdownItemVo.java @@ -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; +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/WarehouseProductionCoilVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/WarehouseProductionCoilVo.java new file mode 100644 index 00000000..78cd56dd --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/WarehouseProductionCoilVo.java @@ -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; +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/WarehouseProductionStatVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/WarehouseProductionStatVo.java new file mode 100644 index 00000000..33036808 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/WarehouseProductionStatVo.java @@ -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 energyBreakdownList; +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/WmsEnergyCoilDailyStatisticsVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/WmsEnergyCoilDailyStatisticsVo.java index f9a44a7f..23e571c8 100644 --- a/klp-ems/src/main/java/com/klp/ems/domain/vo/WmsEnergyCoilDailyStatisticsVo.java +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/WmsEnergyCoilDailyStatisticsVo.java @@ -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; } diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/WmsEnergyCoilDailyVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/WmsEnergyCoilDailyVo.java index 7ad9dc6f..294ed1ab 100644 --- a/klp-ems/src/main/java/com/klp/ems/domain/vo/WmsEnergyCoilDailyVo.java +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/WmsEnergyCoilDailyVo.java @@ -81,4 +81,14 @@ public class WmsEnergyCoilDailyVo { @ExcelProperty("能源类型名称") private String energyTypeName; + + /** + * 该库区最近一次抄表的开始时间 + */ + private LocalDateTime latestMeterReadStartTime; + + /** + * 该库区最近一次抄表的结束时间 + */ + private LocalDateTime latestMeterReadEndTime; } diff --git a/klp-ems/src/main/java/com/klp/ems/mapper/EmsEnergyConsumptionMapper.java b/klp-ems/src/main/java/com/klp/ems/mapper/EmsEnergyConsumptionMapper.java index 378cd7fb..1f16b3ee 100644 --- a/klp-ems/src/main/java/com/klp/ems/mapper/EmsEnergyConsumptionMapper.java +++ b/klp-ems/src/main/java/com/klp/ems/mapper/EmsEnergyConsumptionMapper.java @@ -57,4 +57,9 @@ public interface EmsEnergyConsumptionMapper extends BaseMapperPlus getStatistics(EmsEnergyConsumptionBo bo); + + /** + * 查询最近一次抄表的时间范围 + */ + com.klp.ems.domain.vo.LatestMeterReadTimeVo selectLatestMeterReadTime(); } diff --git a/klp-ems/src/main/java/com/klp/ems/mapper/EmsMeterMapper.java b/klp-ems/src/main/java/com/klp/ems/mapper/EmsMeterMapper.java index 7ba24e12..b9b9209f 100644 --- a/klp-ems/src/main/java/com/klp/ems/mapper/EmsMeterMapper.java +++ b/klp-ems/src/main/java/com/klp/ems/mapper/EmsMeterMapper.java @@ -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 selectMeterIds(MeterFilterBo filter); + + /** + * 查询库区-设备绑定矩阵 + * 按库区维度查询绑定的设备及其能源类型 + */ + List selectEnergyLinkMatrix(); + + /** + * 查询能源绑定统计信息 + * 统计库区总数、设备总数、绑定总数、能源类型总数 + */ + EnergyLinkStatisticsVo selectEnergyLinkStatistics(); + } diff --git a/klp-ems/src/main/java/com/klp/ems/mapper/WmsEnergyCoilDailyMapper.java b/klp-ems/src/main/java/com/klp/ems/mapper/WmsEnergyCoilDailyMapper.java index ad0a2f9e..c2e8e15b 100644 --- a/klp-ems/src/main/java/com/klp/ems/mapper/WmsEnergyCoilDailyMapper.java +++ b/klp-ems/src/main/java/com/klp/ems/mapper/WmsEnergyCoilDailyMapper.java @@ -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 { +public interface WmsEnergyCoilDailyMapper extends BaseMapper { /** 物理清理指定任务的明细 */ int deleteByTaskId(Long taskId); + /** 查询单条 */ + WmsEnergyCoilDailyVo selectVoById(Long energyCostId); + + /** 查询列表 */ + List selectVoList(@Param("ew") Wrapper queryWrapper); + + /** 分页查询 */ + IPage selectVoPage(Page page, @Param("ew") Wrapper queryWrapper); + /** 查询指定任务的所有分摊记录 */ List selectListByTask(Long taskId); @@ -39,7 +52,37 @@ public interface WmsEnergyCoilDailyMapper extends BaseMapperPlus selectEnergyOverview(@Param("bo") EnergyCostReportBo bo); /** 明细分页 */ - Page selectReportDetail(Page page, @Param("bo") EnergyCostReportBo bo); + IPage selectReportDetail(Page page, @Param("bo") EnergyCostReportBo bo); + + /** 仓库生产统计 */ + WarehouseProductionStatVo selectWarehouseProductionStats(@Param("bo") WarehouseProductionBo bo); + + /** 仓库生产明细 */ + IPage selectWarehouseProductionDetail(Page page, @Param("bo") WarehouseProductionBo bo); + + /** 仓库生产能源分解 */ + List selectWarehouseProductionEnergyBreakdown(@Param("bo") WarehouseProductionBo bo); + + /** 单卷详情(含分摊成本) */ + WarehouseProductionCoilVo selectWarehouseProductionCoilDetail(@Param("coilId") Long coilId); + + /** 入场卷号维度能源费用汇总 */ + CoilTotalCostVo selectCoilTotalEnergySummary(@Param("bo") CoilTotalCostBo bo); + + /** 入场卷号维度能源费用明细 */ + IPage selectCoilTotalEnergyDetail(Page page, @Param("bo") CoilTotalCostBo bo); + + /** 入场卷号维度能源+囤积成本汇总 */ + @com.baomidou.mybatisplus.annotation.InterceptorIgnore(tenantLine = "true", blockAttack = "true", dynamicTableName = "true", illegalSql = "true") + List selectCoilTotalMerged(@Param("bo") CoilTotalCostBo bo, + @Param("offset") long offset, + @Param("pageSize") long pageSize); + + /** 入场卷号维度能源+囤积成本汇总总数 */ + Long selectCoilTotalMergedCount(@Param("bo") CoilTotalCostBo bo); + + /** 入场卷号维度能源+囤积成本汇总(导出) */ + List selectCoilTotalMergedExport(@Param("bo") CoilTotalCostBo bo); /** 查询待操作钢卷的能源成本(一次性SQL查询) */ List selectPendingActionCoilCost(); diff --git a/klp-ems/src/main/java/com/klp/ems/service/IEmsEnergyConsumptionService.java b/klp-ems/src/main/java/com/klp/ems/service/IEmsEnergyConsumptionService.java index 8bf67a42..8149c9dd 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/IEmsEnergyConsumptionService.java +++ b/klp-ems/src/main/java/com/klp/ems/service/IEmsEnergyConsumptionService.java @@ -95,4 +95,10 @@ public interface IEmsEnergyConsumptionService { * @return 统计信息(总记录数、总消耗量、平均消耗量、最大消耗量等) */ Map getStatistics(EmsEnergyConsumptionBo bo); + + /** + * 获取最近一次抄表的时间范围 + * @return 最近一次抄表的开始时间和结束时间 + */ + com.klp.ems.domain.vo.LatestMeterReadTimeVo getLatestMeterReadTime(); } diff --git a/klp-ems/src/main/java/com/klp/ems/service/IEmsMeterService.java b/klp-ems/src/main/java/com/klp/ems/service/IEmsMeterService.java index 134e3e08..3af885e9 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/IEmsMeterService.java +++ b/klp-ems/src/main/java/com/klp/ems/service/IEmsMeterService.java @@ -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 queryEnergyLinkMatrix(); + + /** + * 查询能源绑定统计信息 + * 统计库区总数、设备总数、绑定总数、能源类型总数 + */ + EnergyLinkStatisticsVo queryEnergyLinkStatistics(); } diff --git a/klp-ems/src/main/java/com/klp/ems/service/IEnergyCostReportService.java b/klp-ems/src/main/java/com/klp/ems/service/IEnergyCostReportService.java index 1f108ca7..9019877b 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/IEnergyCostReportService.java +++ b/klp-ems/src/main/java/com/klp/ems/service/IEnergyCostReportService.java @@ -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 detail(EnergyCostReportBo bo, PageQuery pageQuery); + + /** 仓库生产统计 */ + WarehouseProductionStatVo warehouseProductionStats(WarehouseProductionBo bo); + + /** 仓库生产明细 */ + TableDataInfo warehouseProductionDetail(WarehouseProductionBo bo, PageQuery pageQuery); + + /** 单卷详情 */ + WarehouseProductionCoilVo warehouseProductionCoilDetail(Long coilId); + + /** 入场卷号维度能源费用汇总 */ + CoilTotalCostVo coilTotalEnergySummary(CoilTotalCostBo bo); + + /** 入场卷号维度能源费用明细 */ + TableDataInfo coilTotalEnergyDetail(CoilTotalCostBo bo, PageQuery pageQuery); + + /** 入场卷号维度能源+囤积综合汇总 */ + TableDataInfo coilTotalMerged(CoilTotalCostBo bo, PageQuery pageQuery); + + /** 入场卷号维度能源+囤积综合汇总导出 */ + java.util.List coilTotalMergedExport(CoilTotalCostBo bo); } diff --git a/klp-ems/src/main/java/com/klp/ems/service/impl/EmsEnergyConsumptionServiceImpl.java b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsEnergyConsumptionServiceImpl.java index b77341de..34a09e95 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/impl/EmsEnergyConsumptionServiceImpl.java +++ b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsEnergyConsumptionServiceImpl.java @@ -558,4 +558,12 @@ public class EmsEnergyConsumptionServiceImpl implements IEmsEnergyConsumptionSer } return stats; } + + /** + * 获取最近一次抄表的时间范围 + */ + @Override + public com.klp.ems.domain.vo.LatestMeterReadTimeVo getLatestMeterReadTime() { + return baseMapper.selectLatestMeterReadTime(); + } } diff --git a/klp-ems/src/main/java/com/klp/ems/service/impl/EmsMeterServiceImpl.java b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsMeterServiceImpl.java index c5195388..058a672b 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/impl/EmsMeterServiceImpl.java +++ b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsMeterServiceImpl.java @@ -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 queryEnergyLinkMatrix() { + return baseMapper.selectEnergyLinkMatrix(); + } + + /** + * 查询能源绑定统计信息 + * 统计库区总数、设备总数、绑定总数、能源类型总数 + */ + @Override + public EnergyLinkStatisticsVo queryEnergyLinkStatistics() { + return baseMapper.selectEnergyLinkStatistics(); + } } diff --git a/klp-ems/src/main/java/com/klp/ems/service/impl/EnergyCostReportServiceImpl.java b/klp-ems/src/main/java/com/klp/ems/service/impl/EnergyCostReportServiceImpl.java index 45ada7f1..cd8d8cff 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/impl/EnergyCostReportServiceImpl.java +++ b/klp-ems/src/main/java/com/klp/ems/service/impl/EnergyCostReportServiceImpl.java @@ -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 detail(EnergyCostReportBo bo, PageQuery pageQuery) { - Page page = coilDailyMapper.selectReportDetail(pageQuery.build(), bo); + IPage 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 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 warehouseProductionDetail(WarehouseProductionBo bo, PageQuery pageQuery) { + if (pageQuery.getPageSize() == null) { + pageQuery.setPageSize(15); + } + IPage 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 coilTotalEnergyDetail(CoilTotalCostBo bo, PageQuery pageQuery) { + if (pageQuery.getPageSize() == null) { + pageQuery.setPageSize(15); + } + IPage page = coilDailyMapper.selectCoilTotalEnergyDetail(pageQuery.build(), bo); + return TableDataInfo.build(page); + } + + @Override + public TableDataInfo 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 rows = coilDailyMapper.selectCoilTotalMerged(bo, offset, pageSize); + Page page = new Page<>(pageNum, pageSize); + page.setTotal(total == null ? 0L : total); + page.setRecords(rows); + return TableDataInfo.build(page); + } + + @Override + public java.util.List coilTotalMergedExport(CoilTotalCostBo bo) { + return coilDailyMapper.selectCoilTotalMergedExport(bo); + } } diff --git a/klp-ems/src/main/java/com/klp/ems/service/impl/WmsEnergyCoilDailyServiceImpl.java b/klp-ems/src/main/java/com/klp/ems/service/impl/WmsEnergyCoilDailyServiceImpl.java index 5f6ed44b..215aaba9 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/impl/WmsEnergyCoilDailyServiceImpl.java +++ b/klp-ems/src/main/java/com/klp/ems/service/impl/WmsEnergyCoilDailyServiceImpl.java @@ -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 queryPageList(WmsEnergyCoilDailyBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + IPage result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } diff --git a/klp-ems/src/main/resources/mapper/EmsEnergyConsumptionMapper.xml b/klp-ems/src/main/resources/mapper/EmsEnergyConsumptionMapper.xml index ce7edb1b..799b49d2 100644 --- a/klp-ems/src/main/resources/mapper/EmsEnergyConsumptionMapper.xml +++ b/klp-ems/src/main/resources/mapper/EmsEnergyConsumptionMapper.xml @@ -163,4 +163,15 @@ + + + diff --git a/klp-ems/src/main/resources/mapper/EmsMeterMapper.xml b/klp-ems/src/main/resources/mapper/EmsMeterMapper.xml index 162c09d5..2768748e 100644 --- a/klp-ems/src/main/resources/mapper/EmsMeterMapper.xml +++ b/klp-ems/src/main/resources/mapper/EmsMeterMapper.xml @@ -39,6 +39,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-ems/src/main/resources/mapper/WmsEnergyCoilDailyMapper.xml b/klp-ems/src/main/resources/mapper/WmsEnergyCoilDailyMapper.xml index e82baae7..e94117b1 100644 --- a/klp-ems/src/main/resources/mapper/WmsEnergyCoilDailyMapper.xml +++ b/klp-ems/src/main/resources/mapper/WmsEnergyCoilDailyMapper.xml @@ -19,10 +19,6 @@ - - - - @@ -33,6 +29,615 @@ SELECT * FROM wms_energy_coil_daily WHERE task_id = #{taskId} + + + + + + + + + + + + + + @@ -141,7 +746,706 @@ + + + + + + + + + + + + + + + SELECT + base.warehouse_id, + ( + SELECT ec_inner.start_time + FROM wms_energy_area_link eal_inner + JOIN ems_meter m_inner ON eal_inner.meter_id = m_inner.meter_id + JOIN ems_energy_consumption ec_inner ON m_inner.meter_id = ec_inner.meter_id + WHERE eal_inner.warehouse_id = base.warehouse_id + AND ec_inner.end_time = base.latest_end_time + ORDER BY ec_inner.start_time DESC + LIMIT 1 + ) AS warehouse_start_time, + base.latest_end_time AS warehouse_end_time + FROM ( + SELECT + eal.warehouse_id, + MAX(ec.end_time) AS latest_end_time + FROM wms_energy_area_link eal + JOIN ems_meter m ON eal.meter_id = m.meter_id + JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id + WHERE eal.warehouse_id IS NOT NULL + AND ec.end_time IS NOT NULL + GROUP BY eal.warehouse_id + ) base + + + + + SELECT + wmt.warehouse_id, + et.energy_type_id, + et.name AS energy_type_name, + et.unit AS energy_unit, + SUM(COALESCE(ec.consumption, 0)) AS total_consumption, + SUM( + COALESCE(ec.consumption, 0) * + COALESCE( + CASE + WHEN er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 THEN + COALESCE(tpl.rate, er.rate, 0) + WHEN er.use_peak_valley = 1 THEN + COALESCE(rtpl.rate, er.rate, 0) + WHEN er.use_tiered_pricing = 1 THEN + COALESCE(rt.rate, er.rate, 0) + ELSE COALESCE(er.rate, 0) + END, + 0 + ) + ) AS total_cost + FROM ( + + ) wmt + LEFT JOIN wms_energy_area_link eal ON wmt.warehouse_id = eal.warehouse_id + LEFT JOIN ems_meter m ON eal.meter_id = m.meter_id + LEFT JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id + AND ec.start_time =]]> wmt.warehouse_start_time + AND ec.end_time wmt.warehouse_end_time + LEFT JOIN ems_energy_type et ON m.energy_type_id = et.energy_type_id + LEFT JOIN ( + SELECT er1.* + FROM ems_energy_rate er1 + WHERE er1.del_flag = '0' + ) er ON et.energy_type_id = er.energy_type_id + AND er.effective_date COALESCE(DATE(wmt.warehouse_end_time), CURDATE()) + AND ( + er.expiry_date IS NULL + OR er.expiry_date =]]> COALESCE(DATE(wmt.warehouse_start_time), CURDATE()) + ) + LEFT JOIN ems_rate_time_period_link rtpl ON er.use_peak_valley = 1 + AND er.use_tiered_pricing = 0 + AND rtpl.energy_rate_id = er.energy_rate_id + AND rtpl.del_flag = '0' + LEFT JOIN ems_time_period tp ON rtpl.period_id = tp.period_id + AND tp.del_flag = '0' + AND ( + (tp.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp.start_time, '%H:%i') AND STR_TO_DATE(tp.end_time, '%H:%i')) + OR (tp.cross_day = 1 AND (TIME(ec.end_time) =]]> STR_TO_DATE(tp.start_time, '%H:%i') OR TIME(ec.end_time) STR_TO_DATE(tp.end_time, '%H:%i'))) + ) + LEFT JOIN ems_rate_tier rt ON er.use_peak_valley = 0 + AND er.use_tiered_pricing = 1 + AND rt.energy_rate_id = er.energy_rate_id + AND rt.del_flag = '0' + AND (rt.min_usage IS NULL OR ec.consumption =]]> rt.min_usage) + AND (rt.max_usage IS NULL OR ec.consumption rt.max_usage) + LEFT JOIN ems_rate_tier rt_combo ON er.use_peak_valley = 1 + AND er.use_tiered_pricing = 1 + AND rt_combo.energy_rate_id = er.energy_rate_id + AND rt_combo.del_flag = '0' + AND (rt_combo.min_usage IS NULL OR ec.consumption =]]> rt_combo.min_usage) + AND (rt_combo.max_usage IS NULL OR ec.consumption rt_combo.max_usage) + LEFT JOIN ems_tier_period_link tpl ON er.use_peak_valley = 1 + AND er.use_tiered_pricing = 1 + AND tpl.tier_id = rt_combo.tier_id + AND tpl.del_flag = '0' + LEFT JOIN ems_time_period tp_combo ON tpl.period_id = tp_combo.period_id + AND tp_combo.del_flag = '0' + AND ( + (tp_combo.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp_combo.start_time, '%H:%i') AND STR_TO_DATE(tp_combo.end_time, '%H:%i')) + OR (tp_combo.cross_day = 1 AND (TIME(ec.end_time) =]]> STR_TO_DATE(tp_combo.start_time, '%H:%i') OR TIME(ec.end_time) STR_TO_DATE(tp_combo.end_time, '%H:%i'))) + ) + WHERE wmt.warehouse_start_time IS NOT NULL + AND wmt.warehouse_end_time IS NOT NULL + GROUP BY wmt.warehouse_id, et.energy_type_id, et.name, et.unit + + + + + SELECT + wmt.warehouse_id, + SUM(COALESCE(ec.consumption, 0)) AS total_warehouse_consumption, + SUM( + COALESCE(ec.consumption, 0) * + COALESCE( + CASE + WHEN er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 THEN + COALESCE(tpl.rate, er.rate, 0) + WHEN er.use_peak_valley = 1 THEN + COALESCE(rtpl.rate, er.rate, 0) + WHEN er.use_tiered_pricing = 1 THEN + COALESCE(rt.rate, er.rate, 0) + ELSE COALESCE(er.rate, 0) + END, + 0 + ) + ) AS total_warehouse_cost + FROM ( + + ) wmt + LEFT JOIN wms_energy_area_link eal ON wmt.warehouse_id = eal.warehouse_id + LEFT JOIN ems_meter m ON eal.meter_id = m.meter_id + LEFT JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id + AND ec.start_time >= wmt.warehouse_start_time + AND ec.end_time wmt.warehouse_end_time + LEFT JOIN ems_energy_type et ON m.energy_type_id = et.energy_type_id + LEFT JOIN ( + SELECT er1.* + FROM ems_energy_rate er1 + WHERE er1.del_flag = '0' + ) er ON et.energy_type_id = er.energy_type_id + AND er.effective_date COALESCE(DATE(wmt.warehouse_end_time), CURDATE()) + AND (er.expiry_date IS NULL OR er.expiry_date >= COALESCE(DATE(wmt.warehouse_start_time), CURDATE())) + LEFT JOIN ems_rate_time_period_link rtpl + ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 0 + AND rtpl.energy_rate_id = er.energy_rate_id + AND rtpl.del_flag = '0' + LEFT JOIN ems_time_period tp + ON rtpl.period_id = tp.period_id + AND tp.del_flag = '0' + AND ( + (tp.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp.start_time,'%H:%i') AND STR_TO_DATE(tp.end_time,'%H:%i')) + OR (tp.cross_day = 1 AND (TIME(ec.end_time) >= STR_TO_DATE(tp.start_time,'%H:%i') OR TIME(ec.end_time) STR_TO_DATE(tp.end_time,'%H:%i'))) + ) + LEFT JOIN ems_rate_tier rt + ON er.use_peak_valley = 0 AND er.use_tiered_pricing = 1 + AND rt.energy_rate_id = er.energy_rate_id + AND rt.del_flag = '0' + AND (rt.min_usage IS NULL OR ec.consumption =]]> rt.min_usage) + AND (rt.max_usage IS NULL OR ec.consumption rt.max_usage) + LEFT JOIN ems_rate_tier rt_combo + ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 + AND rt_combo.energy_rate_id = er.energy_rate_id + AND rt_combo.del_flag = '0' + AND (rt_combo.min_usage IS NULL OR ec.consumption =]]> rt_combo.min_usage) + AND (rt_combo.max_usage IS NULL OR ec.consumption rt_combo.max_usage) + LEFT JOIN ems_tier_period_link tpl + ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 + AND tpl.tier_id = rt_combo.tier_id + AND tpl.del_flag = '0' + LEFT JOIN ems_time_period tp_combo + ON tpl.period_id = tp_combo.period_id + AND tp_combo.del_flag = '0' + AND ( + (tp_combo.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp_combo.start_time,'%H:%i') AND STR_TO_DATE(tp_combo.end_time,'%H:%i')) + OR (tp_combo.cross_day = 1 AND (TIME(ec.end_time) >= STR_TO_DATE(tp_combo.start_time,'%H:%i') OR TIME(ec.end_time) STR_TO_DATE(tp_combo.end_time,'%H:%i'))) + ) + WHERE wmt.warehouse_start_time IS NOT NULL + AND wmt.warehouse_end_time IS NOT NULL + GROUP BY wmt.warehouse_id + + - + diff --git a/klp-ui/src/api/ems/energyAllocation.js b/klp-ui/src/api/ems/energyAllocation.js index 807f7bb9..e0b491b5 100644 --- a/klp-ui/src/api/ems/energyAllocation.js +++ b/klp-ui/src/api/ems/energyAllocation.js @@ -122,6 +122,24 @@ export function listPendingActionCoilCost(query) { }) } +// 查询待操作钢卷成本详情(单卷) +export function getPendingActionCoilCostDetail(coilId) { + return request({ + url: '/ems/energy/coilDaily/pendingAction/detail', + method: 'get', + params: { coilId } + }) +} + +// 查询待操作钢卷的能源成本统计(只统计status=0,1的钢卷) +export function getPendingActionCoilCostStatistics(query) { + return request({ + url: '/ems/energy/coilDaily/pendingAction/statistics', + method: 'get', + params: query + }) +} + // 导出钢卷能源成本分摊 export function exportEnergyCoilDaily(query) { return request({ diff --git a/klp-ui/src/api/ems/energyConsumption.js b/klp-ui/src/api/ems/energyConsumption.js index a89712a6..415e1aa0 100644 --- a/klp-ui/src/api/ems/energyConsumption.js +++ b/klp-ui/src/api/ems/energyConsumption.js @@ -72,3 +72,11 @@ export function getStatistics(query) { params: query }) } + +// 获取最近一次抄表的时间范围 +export function getLatestMeterReadTime() { + return request({ + url: '/ems/energyConsumption/latestMeterReadTime', + method: 'get' + }) +} diff --git a/klp-ui/src/api/ems/energyCostReport.js b/klp-ui/src/api/ems/energyCostReport.js index aabfb107..fcfe1521 100644 --- a/klp-ui/src/api/ems/energyCostReport.js +++ b/klp-ui/src/api/ems/energyCostReport.js @@ -23,3 +23,40 @@ export function fetchEnergyDetail(query) { params: query }) } + +// 入场卷能源汇总 +export function fetchCoilTotalEnergySummary(query) { + return request({ + url: '/ems/energy/report/coilTotal/summary', + method: 'get', + params: query + }) +} + +// 入场卷能源明细 +export function fetchCoilTotalEnergyDetail(query) { + return request({ + url: '/ems/energy/report/coilTotal/detail', + method: 'get', + params: query + }) +} + +// 入场卷能源+囤积汇总 +export function fetchCoilTotalMerged(query) { + return request({ + url: '/ems/energy/report/coilTotal/merged', + method: 'get', + params: query + }) +} + +// 入场卷能源+囤积汇总导出 +export function exportCoilTotalMerged(query) { + return request({ + url: '/ems/energy/report/coilTotal/merged/export', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/klp-ui/src/api/ems/energyLink.js b/klp-ui/src/api/ems/energyLink.js index 18f64669..92a2943c 100644 --- a/klp-ui/src/api/ems/energyLink.js +++ b/klp-ui/src/api/ems/energyLink.js @@ -40,7 +40,7 @@ export function delEnergyLink(linkId) { export function fetchEnergyLinkMatrix(query) { return request({ - url: '/ems/energy/link/matrix', + url: '/mes/meter/matrix', method: 'get', params: query }) @@ -65,7 +65,7 @@ export function exportEnergyLinks(query) { export function getStatistics() { return request({ - url: '/ems/energy/link/statistics', + url: '/mes/meter/statistics', method: 'get' }) } diff --git a/klp-ui/src/components/Pagination/index.vue b/klp-ui/src/components/Pagination/index.vue index 13573cb3..1997a10e 100644 --- a/klp-ui/src/components/Pagination/index.vue +++ b/klp-ui/src/components/Pagination/index.vue @@ -37,7 +37,7 @@ export default { pageSizes: { type: Array, default() { - return [10, 20, 30, 50] + return [15, 20, 30, 50] } }, // 移动端页码按钮的数量端默认值5 diff --git a/klp-ui/src/views/ems/cost/coilCost.vue b/klp-ui/src/views/ems/cost/coilCost.vue index dbaa2561..2ea23bef 100644 --- a/klp-ui/src/views/ems/cost/coilCost.vue +++ b/klp-ui/src/views/ems/cost/coilCost.vue @@ -3,21 +3,17 @@
-
钢卷总数
+
生产中总数
{{ statistics.totalCoils }}
-
总消耗量
-
{{ formatNumber(statistics.totalConsumption, 2) }}
+
生产总数
+
{{ statistics.totalOperationCoils }}
-
总成本
+
预估总成本
¥ {{ formatNumber(statistics.totalCost, 2) }}
-
-
平均单位成本
-
¥ {{ formatNumber(statistics.avgUnitCost, 2) }}
-
@@ -65,6 +61,19 @@ + + + - + @@ -85,11 +94,6 @@ {{ formatNumber(scope.row.costAmount, 2) }} - - - + + diff --git a/klp-ui/src/views/ems/cost/energyCostSummary.vue b/klp-ui/src/views/ems/cost/energyCostSummary.vue deleted file mode 100644 index 32b01414..00000000 --- a/klp-ui/src/views/ems/cost/energyCostSummary.vue +++ /dev/null @@ -1,572 +0,0 @@ - - - - - diff --git a/klp-ui/src/views/ems/cost/warehouseProduction.vue b/klp-ui/src/views/ems/cost/warehouseProduction.vue index 2505c839..9cb13d18 100644 --- a/klp-ui/src/views/ems/cost/warehouseProduction.vue +++ b/klp-ui/src/views/ems/cost/warehouseProduction.vue @@ -88,24 +88,24 @@ - - + + - - + + - + - + @@ -117,44 +117,77 @@
该库区生产的钢卷列表 - (共 {{ coilList.length }} 卷) + (共 {{ total }} 卷)
- - + + - + - + - + - + +
+ + + + + + {{ coilDetail.coilId || '-' }} + {{ formatActionStatus(coilDetail.actionStatus) }} + {{ coilDetail.enterCoilNo || '-' }} + {{ coilDetail.currentCoilNo || '-' }} + {{ coilDetail.warehouseId || '-' }} + {{ formatNumber(coilDetail.duration, 2) }} h + {{ formatNumber(coilDetail.consumption, 2) }} + ¥ {{ formatNumber(coilDetail.totalCost, 2) }} + {{ formatTime(coilDetail.startTime) }} + {{ formatTime(coilDetail.endTime) }} + + + + 关 闭 + +