From d7c626bbb83393550b63678a49d73a9ba44b1c85 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期二, 10 三月 2026 13:16:58 +0800
Subject: [PATCH] 能耗管理的能源类型+能耗抄表明细

---
 src/main/java/com/ruoyi/energy/service/impl/EnergyServiceImpl.java                  |   88 ++++++
 src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java            |   23 +
 src/main/java/com/ruoyi/energy/pojo/EnergyConsumptionDetail.java                    |   93 +++++++
 src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java    |   76 +++++
 src/main/java/com/ruoyi/CodeGenerator.java                                          |    4 
 src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java          |   28 ++
 src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java |   91 +++++++
 src/main/java/com/ruoyi/energy/pojo/Energy.java                                     |   84 ++++++
 src/main/resources/mapper/energy/EnergyMapper.xml                                   |   32 ++
 doc/宁夏-中盛建材.sql                                                                     |   33 ++
 src/main/java/com/ruoyi/energy/service/EnergyService.java                           |   31 ++
 src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java                  |   29 ++
 src/main/java/com/ruoyi/energy/controller/EnergyController.java                     |   78 ++++++
 src/main/java/com/ruoyi/energy/mapper/EnergyMapper.java                             |   22 +
 src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml                  |   41 +++
 15 files changed, 750 insertions(+), 3 deletions(-)

diff --git "a/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql" "b/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
index ee0341f..3407354 100644
--- "a/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
+++ "b/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
@@ -31,4 +31,35 @@
     PRIMARY KEY (`id`),
     KEY `idx_form_instance_id` (`form_instance_id`)
 ) ENGINE = INNODB
-  DEFAULT CHARSET = utf8mb4 COMMENT = '閿�鍞敓浜ч渶姹�';
\ No newline at end of file
+  DEFAULT CHARSET = utf8mb4 COMMENT = '閿�鍞敓浜ч渶姹�';
+
+CREATE TABLE `product-inventory-management-zsjc`.`energy`  (
+    `id` int NOT NULL AUTO_INCREMENT,
+    `energy_tyep` varchar(255) NULL COMMENT '鑳芥簮绫诲瀷',
+    `energy_name` varchar(255) NULL COMMENT '鑳芥簮鍚嶇О',
+    `unit` varchar(255) NULL COMMENT '鍗曚綅',
+    `unit_price` decimal(10, 2) NULL COMMENT '鍗曚环',
+    `remark` varchar(255) NULL COMMENT '澶囨敞',
+    `create_time` datetime(0) NULL DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+    `update_time` datetime(0) NULL DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+    `create_user` bigint NULL DEFAULT NULL COMMENT '鍒涘缓鑰�',
+    `update_user` bigint NULL DEFAULT NULL COMMENT '鏇存柊鑰�',
+    PRIMARY KEY (`id`)
+    ) COMMENT = '鑳芥簮绫诲瀷';
+
+CREATE TABLE `product-inventory-management-zsjc`.`energy_consumption_detail`  (
+    `id` int NOT NULL AUTO_INCREMENT,
+    `energy_id` int NULL COMMENT '澶栨鍏宠仈鑳芥簮绫诲瀷id',
+    `type` varchar(255) NULL COMMENT '鍔炲叕/鐢熶骇',
+    `meter_reading_location` varchar(255) NULL COMMENT '鎶勮〃浣嶇疆',
+    `meter_reading_date` date NULL COMMENT '鎶勮〃鏃ユ湡',
+    `start_code` decimal(10, 2) NULL COMMENT '璧风爜',
+    `stop_code` decimal(10, 2) NULL COMMENT '姝㈢爜',
+    `dosage` decimal(10, 2) NULL COMMENT '鐢ㄩ噺',
+    `remark` varchar(255) NULL COMMENT '澶囨敞',
+    `create_time` datetime(0) NULL DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+    `update_time` datetime(0) NULL DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+    `create_user` bigint NULL DEFAULT NULL COMMENT '鍒涘缓鑰�',
+    `update_user` bigint NULL DEFAULT NULL COMMENT '鏇存柊鑰�',
+    PRIMARY KEY (`id`)
+    ) COMMENT = '鑳芥簮绫诲瀷-鑳借�楁妱琛ㄦ槑缁�';
diff --git a/src/main/java/com/ruoyi/CodeGenerator.java b/src/main/java/com/ruoyi/CodeGenerator.java
index 6356273..7960d87 100644
--- a/src/main/java/com/ruoyi/CodeGenerator.java
+++ b/src/main/java/com/ruoyi/CodeGenerator.java
@@ -19,11 +19,11 @@
 // 婕旂ず渚嬪瓙锛屾墽琛� main 鏂规硶鎺у埗鍙拌緭鍏ユā鍧楄〃鍚嶅洖杞﹁嚜鍔ㄧ敓鎴愬搴旈」鐩洰褰曚腑
 public class CodeGenerator {
 
-    public static String database_url = "jdbc:mysql://1.15.17.182:9999/product-inventory-management-new";
+    public static String database_url = "jdbc:mysql://1.15.17.182:9999/product-inventory-management-zsjc";
     public static String database_username = "root";
     public static String database_password= "xd@123456..";
     public static String author = "鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃";
-    public static String model = "staff"; // 妯″潡
+    public static String model = "energy"; // 妯″潡
     public static String setParent = "com.ruoyi."+ model; // 鍖呰矾寰�
     public static String tablePrefix = ""; // 璁剧疆杩囨护琛ㄥ墠缂�
     public static void main(String[] args) {
diff --git a/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java b/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java
new file mode 100644
index 0000000..22ef516
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java
@@ -0,0 +1,76 @@
+package com.ruoyi.energy.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.energy.dto.EnergyConsumptionDetailDto;
+import com.ruoyi.energy.pojo.Energy;
+import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
+import com.ruoyi.energy.service.EnergyConsumptionDetailService;
+import com.ruoyi.energy.service.EnergyService;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷-鑳借�楁妱琛ㄦ槑缁� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 11:22:20
+ */
+@RestController
+@RequestMapping("/energyConsumptionDetail")
+@Api(tags = "鑳借�楃鐞�-鑳借�楁妱琛ㄦ槑缁�")
+public class EnergyConsumptionDetailController {
+
+    @Autowired
+    private EnergyConsumptionDetailService energyConsumptionDetailService;
+
+    @GetMapping("page")
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    public R page(Page<EnergyConsumptionDetailDto> page, EnergyConsumptionDetailDto energyConsumptionDetailDto) {
+        return R.ok(energyConsumptionDetailService.pageEnergyConsumptionDetail(page, energyConsumptionDetailDto));
+    }
+
+    @ApiOperation("鏂板/淇敼鑳借�楁妱琛�")
+    @PostMapping()
+    public R add(@RequestBody EnergyConsumptionDetail energyConsumptionDetail) {
+        return R.ok(energyConsumptionDetailService.saveOrUpdate(energyConsumptionDetail));
+    }
+
+    @ApiOperation("鍒犻櫎鑳借�楁妱琛�")
+    @DeleteMapping("/{ids}")
+    public R delete(@PathVariable("ids") Long[] ids) {
+        return R.ok(energyConsumptionDetailService.removeBatchByIds(Arrays.asList(ids)));
+    }
+
+    @Log(title = "鑳借�楁妱琛ㄦ槑缁�-瀵煎叆", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public R importData(MultipartFile file) throws Exception {
+        return energyConsumptionDetailService.importData(file);
+    }
+
+    @PostMapping("/downloadTemplate")
+    @Log(title = "鑳借�楁妱琛�-涓嬭浇妯℃澘", businessType = BusinessType.EXPORT)
+    public void downloadTemplate(HttpServletResponse response) {
+        ExcelUtil<EnergyConsumptionDetailDto> util = new ExcelUtil<EnergyConsumptionDetailDto>(EnergyConsumptionDetailDto.class);
+        util.importTemplateExcel(response, "鑳借�楁妱琛ㄦā鐗�");
+    }
+
+    @PostMapping("/export")
+    @ApiOperation("鑳借�楁妱琛�-瀵煎嚭")
+    @Log(title = "鑳借�楁妱琛�-瀵煎嚭", businessType = BusinessType.EXPORT)
+    public void export(HttpServletResponse response) {
+        energyConsumptionDetailService.export(response);
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/energy/controller/EnergyController.java b/src/main/java/com/ruoyi/energy/controller/EnergyController.java
new file mode 100644
index 0000000..46bb32a
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/controller/EnergyController.java
@@ -0,0 +1,78 @@
+package com.ruoyi.energy.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.energy.pojo.Energy;
+import com.ruoyi.energy.service.EnergyService;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProcessRouteDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.service.ProcessRouteService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 10:50:18
+ */
+@RestController
+@RequestMapping("/energy")
+@Api(tags = "鑳借�楃鐞�-鑳芥簮绫诲瀷")
+public class EnergyController {
+
+    @Autowired
+    private EnergyService energyService;
+
+    @GetMapping("page")
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    public R page(Page<Energy> page, Energy energy) {
+        return R.ok(energyService.pageEnergy(page, energy));
+    }
+
+    @ApiOperation("鏂板/淇敼鑳芥簮绫诲瀷")
+    @PostMapping()
+    public R add(@RequestBody Energy energy) {
+        return R.ok(energyService.saveOrUpdate(energy));
+    }
+
+    @ApiOperation("鍒犻櫎鑳芥簮绫诲瀷")
+    @DeleteMapping("/{ids}")
+    public R delete(@PathVariable("ids") Long[] ids) {
+        return R.ok(energyService.batchDelete(Arrays.asList(ids)));
+    }
+
+    @Log(title = "鑳芥簮绫诲瀷-瀵煎叆", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public R importData(MultipartFile file) throws Exception {
+        return energyService.importData(file);
+    }
+
+    @PostMapping("/downloadTemplate")
+    @Log(title = "鑳芥簮绫诲瀷-涓嬭浇妯℃澘", businessType = BusinessType.EXPORT)
+    public void downloadTemplate(HttpServletResponse response) {
+        ExcelUtil<Energy> util = new ExcelUtil<Energy>(Energy.class);
+        util.importTemplateExcel(response, "鑳芥簮绫诲瀷妯$増");
+    }
+
+    @PostMapping("/export")
+    @ApiOperation("鑳芥簮绫诲瀷-瀵煎嚭")
+    @Log(title = "鑳芥簮绫诲瀷-瀵煎嚭", businessType = BusinessType.EXPORT)
+    public void export(HttpServletResponse response) {
+        energyService.export(response);
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
new file mode 100644
index 0000000..eec50f8
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.energy.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+//鑳借�楁妱琛ㄦ槑缁�
+@Data
+@ExcelIgnoreUnannotated
+public class EnergyConsumptionDetailDto extends EnergyConsumptionDetail {
+
+    @ApiModelProperty("鑳芥簮绫诲瀷")
+    @Excel(name = "鑳芥簮绫诲瀷")
+    private String energyTyep;
+
+    @ApiModelProperty("鑳芥簮鍚嶇О")
+    @Excel(name = "鑳芥簮鍚嶇О")
+    private String energyName;
+
+    @ApiModelProperty("鍗曚綅")
+    @Excel(name = "鍗曚綅")
+    private String unit;
+
+    //鍒涘缓浜�
+    private String createUserName;
+}
diff --git a/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java b/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
new file mode 100644
index 0000000..af10b49
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.energy.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.energy.dto.EnergyConsumptionDetailDto;
+import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷-鑳借�楁妱琛ㄦ槑缁� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 11:22:20
+ */
+@Mapper
+public interface EnergyConsumptionDetailMapper extends BaseMapper<EnergyConsumptionDetail> {
+
+    IPage<EnergyConsumptionDetailDto> pageEnergyConsumptionDetail(Page<EnergyConsumptionDetailDto> page, @Param("c") EnergyConsumptionDetailDto energyConsumptionDetailDto);
+}
diff --git a/src/main/java/com/ruoyi/energy/mapper/EnergyMapper.java b/src/main/java/com/ruoyi/energy/mapper/EnergyMapper.java
new file mode 100644
index 0000000..f46468e
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/mapper/EnergyMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.energy.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.energy.pojo.Energy;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 10:50:18
+ */
+@Mapper
+public interface EnergyMapper extends BaseMapper<Energy> {
+
+    IPage<Energy> pageEnergy(Page<Energy> page, @Param("c") Energy energy);
+}
diff --git a/src/main/java/com/ruoyi/energy/pojo/Energy.java b/src/main/java/com/ruoyi/energy/pojo/Energy.java
new file mode 100644
index 0000000..fd61c48
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/pojo/Energy.java
@@ -0,0 +1,84 @@
+package com.ruoyi.energy.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 10:50:18
+ */
+@Getter
+@Setter
+@TableName("energy")
+@ApiModel(value = "Energy瀵硅薄", description = "鑳芥簮绫诲瀷")
+@ExcelIgnoreUnannotated
+public class Energy implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鑳芥簮绫诲瀷")
+    @Excel(name = "鑳芥簮绫诲瀷")
+    private String energyTyep;
+
+    @ApiModelProperty("鑳芥簮鍚嶇О")
+    @Excel(name = "鑳芥簮鍚嶇О")
+    private String energyName;
+
+    @ApiModelProperty("鍗曚綅")
+    @Excel(name = "鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("鍗曚环")
+    @Excel(name = "鍗曚环")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty("澶囨敞")
+    @Excel(name = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓鑰�")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("鏇存柊鑰�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    //鍒涘缓浜�
+    @TableField(exist = false)
+    private String createUserName;
+}
diff --git a/src/main/java/com/ruoyi/energy/pojo/EnergyConsumptionDetail.java b/src/main/java/com/ruoyi/energy/pojo/EnergyConsumptionDetail.java
new file mode 100644
index 0000000..aa0d8ab
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/pojo/EnergyConsumptionDetail.java
@@ -0,0 +1,93 @@
+package com.ruoyi.energy.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷-鑳借�楁妱琛ㄦ槑缁�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 11:22:20
+ */
+@Getter
+@Setter
+@TableName("energy_consumption_detail")
+@ApiModel(value = "EnergyConsumptionDetail瀵硅薄", description = "鑳芥簮绫诲瀷-鑳借�楁妱琛ㄦ槑缁�")
+@ExcelIgnoreUnannotated
+public class EnergyConsumptionDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("澶栨鍏宠仈鑳芥簮绫诲瀷id")
+    private Integer energyId;
+
+    @ApiModelProperty("鍔炲叕/鐢熶骇")
+    @Excel(name = "鑳借�楀満鏅�")
+    private String type;
+
+    @ApiModelProperty("鎶勮〃浣嶇疆")
+    private String meterReadingLocation;
+
+    @ApiModelProperty("鎶勮〃鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鏃ユ湡")
+    private LocalDate meterReadingDate;
+
+    @ApiModelProperty("璧风爜")
+    @Excel(name = "璧风爜")
+    private BigDecimal startCode;
+
+    @ApiModelProperty("姝㈢爜")
+    @Excel(name = "姝㈢爜")
+    private BigDecimal stopCode;
+
+    @ApiModelProperty("鐢ㄩ噺")
+    @Excel(name = "鐢ㄩ噺")
+    private BigDecimal dosage;
+
+    @ApiModelProperty("澶囨敞")
+    @Excel(name = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓鑰�")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("鏇存柊鑰�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+}
diff --git a/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java b/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java
new file mode 100644
index 0000000..86a759d
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.energy.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.energy.dto.EnergyConsumptionDetailDto;
+import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.web.domain.R;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷-鑳借�楁妱琛ㄦ槑缁� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 11:22:20
+ */
+public interface EnergyConsumptionDetailService extends IService<EnergyConsumptionDetail> {
+
+    IPage<EnergyConsumptionDetailDto> pageEnergyConsumptionDetail(Page<EnergyConsumptionDetailDto> page, EnergyConsumptionDetailDto energyConsumptionDetailDto);
+
+    R importData(MultipartFile file);
+
+    void export(HttpServletResponse response);
+}
diff --git a/src/main/java/com/ruoyi/energy/service/EnergyService.java b/src/main/java/com/ruoyi/energy/service/EnergyService.java
new file mode 100644
index 0000000..66a2779
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/service/EnergyService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.energy.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.energy.pojo.Energy;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.web.domain.R;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 10:50:18
+ */
+public interface EnergyService extends IService<Energy> {
+
+    IPage<Energy> pageEnergy(Page<Energy> page, Energy energy);
+
+    boolean batchDelete(List<Long> ids);
+
+    R importData(MultipartFile file);
+
+    void export(HttpServletResponse response);
+
+}
diff --git a/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java b/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
new file mode 100644
index 0000000..305ad75
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
@@ -0,0 +1,91 @@
+package com.ruoyi.energy.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.energy.dto.EnergyConsumptionDetailDto;
+import com.ruoyi.energy.mapper.EnergyMapper;
+import com.ruoyi.energy.pojo.Energy;
+import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
+import com.ruoyi.energy.mapper.EnergyConsumptionDetailMapper;
+import com.ruoyi.energy.service.EnergyConsumptionDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.web.domain.R;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷-鑳借�楁妱琛ㄦ槑缁� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 11:22:20
+ */
+@Service
+public class EnergyConsumptionDetailServiceImpl extends ServiceImpl<EnergyConsumptionDetailMapper, EnergyConsumptionDetail> implements EnergyConsumptionDetailService {
+
+    @Autowired
+    private EnergyConsumptionDetailMapper energyConsumptionDetailMapper;
+
+    @Autowired
+    private EnergyMapper energyMapper;
+
+    @Override
+    public IPage<EnergyConsumptionDetailDto> pageEnergyConsumptionDetail(Page<EnergyConsumptionDetailDto> page, EnergyConsumptionDetailDto energyConsumptionDetailDto) {
+        return energyConsumptionDetailMapper.pageEnergyConsumptionDetail(page,energyConsumptionDetailDto);
+    }
+
+    @Override
+    public R importData(MultipartFile file) {
+        try {
+            ExcelUtil<EnergyConsumptionDetailDto> util = new ExcelUtil<EnergyConsumptionDetailDto>(EnergyConsumptionDetailDto.class);
+            List<EnergyConsumptionDetailDto> energyConsumptionDetailDtoList = util.importExcel(file.getInputStream());
+            if(CollectionUtils.isEmpty(energyConsumptionDetailDtoList)){
+                return R.fail("妯℃澘閿欒鎴栧鍏ユ暟鎹负绌�");
+            }
+            List<EnergyConsumptionDetail> list = energyConsumptionDetailDtoList.stream().map(energyConsumptionDetailDto -> {
+                if (ObjectUtils.isEmpty(energyConsumptionDetailDto)) {
+                    throw new RuntimeException("浣跨敤妯℃澘杩涜瀵煎叆");
+                }
+                if (ObjectUtils.isEmpty(energyConsumptionDetailDto.getEnergyTyep()) && ObjectUtils.isEmpty(energyConsumptionDetailDto.getEnergyName())) {
+                    throw new RuntimeException("鑳芥簮绫诲瀷涓嶈兘涓虹┖");
+                }
+                List<Energy> energy = energyMapper.selectList(Wrappers.<Energy>lambdaQuery()
+                        .eq(Energy::getEnergyTyep, energyConsumptionDetailDto.getEnergyTyep())
+                        .eq(Energy::getEnergyName, energyConsumptionDetailDto.getEnergyName()));
+                if (CollectionUtils.isEmpty(energy)) {
+                    throw new RuntimeException("瀵煎叆鏁版嵁涓殑鑳芥簮绫诲瀷鍦ㄧ郴缁熶腑涓嶅瓨鍦�,璇峰厛鍓嶅線鑳芥簮绫诲瀷涓厤缃�!");
+                }
+                EnergyConsumptionDetail energyConsumptionDetail = new EnergyConsumptionDetail();
+                BeanUtils.copyProperties(energyConsumptionDetailDto, energyConsumptionDetail);
+                energyConsumptionDetail.setEnergyId(energy.get(0).getId());
+                return energyConsumptionDetail;
+            }).collect(Collectors.toList());
+            this.saveOrUpdateBatch(list);
+            return R.ok(true);
+        }catch (Exception e){
+            e.printStackTrace();
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @Override
+    public void export(HttpServletResponse response) {
+        List<EnergyConsumptionDetailDto> list = energyConsumptionDetailMapper.pageEnergyConsumptionDetail(new Page<>(-1,-1),null).getRecords();
+        if(CollectionUtils.isEmpty(list)){
+            throw new RuntimeException("鏃犲鍑烘暟鎹�");
+        }
+        ExcelUtil<EnergyConsumptionDetailDto> util = new ExcelUtil<>(EnergyConsumptionDetailDto.class);
+        util.exportExcel(response, list, "鑳借�楁妱琛�");
+    }
+}
diff --git a/src/main/java/com/ruoyi/energy/service/impl/EnergyServiceImpl.java b/src/main/java/com/ruoyi/energy/service/impl/EnergyServiceImpl.java
new file mode 100644
index 0000000..b07e96d
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/service/impl/EnergyServiceImpl.java
@@ -0,0 +1,88 @@
+package com.ruoyi.energy.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.energy.mapper.EnergyConsumptionDetailMapper;
+import com.ruoyi.energy.pojo.Energy;
+import com.ruoyi.energy.mapper.EnergyMapper;
+import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
+import com.ruoyi.energy.service.EnergyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.web.domain.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鑳芥簮绫诲瀷 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-10 10:50:18
+ */
+@Service
+public class EnergyServiceImpl extends ServiceImpl<EnergyMapper, Energy> implements EnergyService {
+
+    @Autowired
+    private EnergyMapper energyMapper;
+
+    @Autowired
+    private EnergyConsumptionDetailMapper energyConsumptionDetailMapper;
+
+    @Override
+    public IPage<Energy> pageEnergy(Page<Energy> page, Energy energy) {
+        return energyMapper.pageEnergy(page,energy);
+    }
+
+    @Override
+    public boolean batchDelete(List<Long> ids) {
+        //鍏堝垽鏂槸鍚﹀凡缁忔湁濉啓鐨勮兘鑰楁暟鎹�
+        List<EnergyConsumptionDetail> energyConsumptionDetails = energyConsumptionDetailMapper.selectList(Wrappers.<EnergyConsumptionDetail>lambdaQuery().in(EnergyConsumptionDetail::getEnergyId, ids));
+        if (CollectionUtils.isNotEmpty(energyConsumptionDetails)){
+            throw new RuntimeException("閫変腑鐨勮兘婧愮被鍨嬪凡鏈夊搴旂殑鑳借�楁暟鎹�,鏃犳硶杩涜鍒犻櫎!");
+        }
+        return removeBatchByIds(ids);
+    }
+
+    @Override
+    public R importData(MultipartFile file) {
+        try {
+            ExcelUtil<Energy> util = new ExcelUtil<Energy>(Energy.class);
+            List<Energy> energyList = util.importExcel(file.getInputStream());
+            if(CollectionUtils.isEmpty(energyList)){
+                return R.fail("妯℃澘閿欒鎴栧鍏ユ暟鎹负绌�");
+            }
+            energyList.forEach(energy -> {
+                if (ObjectUtils.isEmpty(energy)) {
+                    throw new RuntimeException("浣跨敤妯℃澘杩涜瀵煎叆");
+                }
+                if (ObjectUtils.isEmpty(energy.getEnergyTyep())) {
+                    throw new RuntimeException("鑳芥簮绫诲瀷涓嶈兘涓虹┖");
+                }
+            });
+            this.saveOrUpdateBatch(energyList);
+            return R.ok(true);
+        }catch (Exception e){
+            e.printStackTrace();
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @Override
+    public void export(HttpServletResponse response) {
+        List<Energy> list = energyMapper.selectList(null);
+        if(CollectionUtils.isEmpty(list)){
+            throw new RuntimeException("鏃犲鍑烘暟鎹�");
+        }
+        ExcelUtil<Energy> util = new ExcelUtil<>(Energy.class);
+        util.exportExcel(response, list, "鑳芥簮绫诲瀷");
+    }
+}
diff --git a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
new file mode 100644
index 0000000..2fe5f17
--- /dev/null
+++ b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.energy.mapper.EnergyConsumptionDetailMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.energy.pojo.EnergyConsumptionDetail">
+        <id column="id" property="id"/>
+        <result column="energy_id" property="energyId"/>
+        <result column="type" property="type"/>
+        <result column="meter_reading_location" property="meterReadingLocation"/>
+        <result column="meter_reading_date" property="meterReadingDate"/>
+        <result column="start_code" property="startCode"/>
+        <result column="stop_code" property="stopCode"/>
+        <result column="dosage" property="dosage"/>
+        <result column="remark" property="remark"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="create_user" property="createUser"/>
+        <result column="update_user" property="updateUser"/>
+    </resultMap>
+    <select id="pageEnergyConsumptionDetail"
+            resultType="com.ruoyi.energy.dto.EnergyConsumptionDetailDto">
+        select *
+        from (select ecd.*, e.energy_tyep, e.energy_name, e.unit, su.nick_name createUserName
+              from energy_consumption_detail ecd
+                       left join energy e on ecd.energy_id = e.id
+                       left join sys_user su on ecd.create_user = su.user_id) A
+         <where>
+            <if test="c.energyTyep != null and c.energyTyep != ''">
+                and energy_tyep like concat('%',#{c.energyTyep},'%')
+            </if>
+             <if test="c.energyName != null and c.energyName != ''">
+                and energy_name like concat('%',#{c.energyName},'%')
+            </if>
+             <if test="c.meterReadingDate != null and c.meterReadingDate != ''">
+                 and meter_reading_date =#{c.meterReadingDate}
+            </if>
+        </where>
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/energy/EnergyMapper.xml b/src/main/resources/mapper/energy/EnergyMapper.xml
new file mode 100644
index 0000000..224a4ff
--- /dev/null
+++ b/src/main/resources/mapper/energy/EnergyMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.energy.mapper.EnergyMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.energy.pojo.Energy">
+        <id column="id" property="id"/>
+        <result column="energy_tyep" property="energyTyep"/>
+        <result column="energy_name" property="energyName"/>
+        <result column="unit" property="unit"/>
+        <result column="unit_price" property="unitPrice"/>
+        <result column="remark" property="remark"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="create_user" property="createUser"/>
+        <result column="update_user" property="updateUser"/>
+    </resultMap>
+    <select id="pageEnergy" resultType="com.ruoyi.energy.pojo.Energy">
+        select * from (select e.*, su.nick_name createUserName
+        from energy e
+                 left join sys_user su on e.create_user = su.user_id)A
+        <where>
+            <if test="c.energyTyep != null and c.energyTyep != ''">
+                and energy_tyep like concat('%',#{c.energyTyep},'%')
+            </if>
+             <if test="c.energyName != null and c.energyName != ''">
+                and energy_name like concat('%',#{c.energyName},'%')
+            </if>
+        </where>
+    </select>
+
+</mapper>

--
Gitblit v1.9.3