learshaw 2 месяцев назад
Родитель
Сommit
54690629d2

+ 107 - 0
ems/ems-cloud/ems-server/src/main/java/com/ruoyi/ems/controller/DeviceLedgerController.java

@@ -0,0 +1,107 @@
+package com.ruoyi.ems.controller;
+
+import com.huashe.common.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.ems.domain.DeviceLedger;
+import com.ruoyi.ems.service.IDeviceLedgerService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 设备台账Controller
+ * 
+ * @author ruoyi
+ * @date 2024-09-10
+ */
+@RestController
+@RequestMapping("/device/ledger")
+@Api(value = "EmsDeviceLedgerController", description = "设备台账")
+public class DeviceLedgerController extends BaseController
+{
+    @Autowired
+    private IDeviceLedgerService deviceLedgerService;
+
+    /**
+     * 查询设备台账列表
+     */
+    @RequiresPermissions("ems:ledger:list")
+    @GetMapping("/list")
+    public TableDataInfo list(DeviceLedger Ledger)
+    {
+        startPage();
+        List<DeviceLedger> list = deviceLedgerService.selectDeviceLedgerList(Ledger);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出设备台账列表
+     */
+    @RequiresPermissions("ems:ledger:export")
+    @Log(title = "设备台账", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, DeviceLedger Ledger)
+    {
+        List<DeviceLedger> list = deviceLedgerService.selectDeviceLedgerList(Ledger);
+        ExcelUtil<DeviceLedger> util = new ExcelUtil<DeviceLedger>(DeviceLedger.class);
+        util.exportExcel(response, list, "设备台账数据");
+    }
+
+    /**
+     * 获取设备台账详细信息
+     */
+    @RequiresPermissions("ems:ledger:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(deviceLedgerService.selectDeviceLedgerById(id));
+    }
+
+    /**
+     * 新增设备台账
+     */
+    @RequiresPermissions("ems:ledger:add")
+    @Log(title = "设备台账", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody DeviceLedger Ledger)
+    {
+        return toAjax(deviceLedgerService.insertDeviceLedger(Ledger));
+    }
+
+    /**
+     * 修改设备台账
+     */
+    @RequiresPermissions("ems:ledger:edit")
+    @Log(title = "设备台账", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody DeviceLedger Ledger)
+    {
+        return toAjax(deviceLedgerService.updateDeviceLedger(Ledger));
+    }
+
+    /**
+     * 删除设备台账
+     */
+    @RequiresPermissions("ems:ledger:remove")
+    @Log(title = "设备台账", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(deviceLedgerService.deleteDeviceLedgerByIds(ids));
+    }
+}

+ 107 - 0
ems/ems-cloud/ems-server/src/main/java/com/ruoyi/ems/controller/OpAlarmPolicyController.java

@@ -0,0 +1,107 @@
+package com.ruoyi.ems.controller;
+
+import com.huashe.common.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.ems.domain.OpAlarmPolicy;
+import com.ruoyi.ems.service.IAdmOpAlarmPolicyService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 能源设施告警策略Controller
+ *
+ * @author ruoyi
+ * @date 2024-08-26
+ */
+@RestController
+@RequestMapping("/alarm")
+@Api(value = "AdmOpAlarmPolicyController", description = "能源设施告警策略")
+public class OpAlarmPolicyController extends BaseController
+{
+    @Autowired
+    private IAdmOpAlarmPolicyService opAlarmPolicyService;
+
+    /**
+     * 查询能源设施告警策略列表
+     */
+    @RequiresPermissions("ems:alarm-strategy:list")
+    @GetMapping("/list")
+    public TableDataInfo list(OpAlarmPolicy opAlarmPolicy)
+    {
+        startPage();
+        List<OpAlarmPolicy> list = opAlarmPolicyService.selectAdmOpAlarmPolicyList(opAlarmPolicy);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出能源设施告警策略列表
+     */
+    @RequiresPermissions("ems:alarm-strategy:export")
+    @Log(title = "能源设施告警策略", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, OpAlarmPolicy opAlarmPolicy)
+    {
+        List<OpAlarmPolicy> list = opAlarmPolicyService.selectAdmOpAlarmPolicyList(opAlarmPolicy);
+        ExcelUtil<OpAlarmPolicy> util = new ExcelUtil<OpAlarmPolicy>(OpAlarmPolicy.class);
+        util.exportExcel(response, list, "能源设施告警策略数据");
+    }
+
+    /**
+     * 获取能源设施告警策略详细信息
+     */
+    @RequiresPermissions("ems:alarm-strategy:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(opAlarmPolicyService.selectAdmOpAlarmPolicyById(id));
+    }
+
+    /**
+     * 新增能源设施告警策略
+     */
+    @RequiresPermissions("ems:alarm-strategy:add")
+    @Log(title = "能源设施告警策略", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody OpAlarmPolicy opAlarmPolicy)
+    {
+        return toAjax(opAlarmPolicyService.insertAdmOpAlarmPolicy(opAlarmPolicy));
+    }
+
+    /**
+     * 修改能源设施告警策略
+     */
+    @RequiresPermissions("ems:alarm-strategy:edit")
+    @Log(title = "能源设施告警策略", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody OpAlarmPolicy opAlarmPolicy)
+    {
+        return toAjax(opAlarmPolicyService.updateAdmOpAlarmPolicy(opAlarmPolicy));
+    }
+
+    /**
+     * 删除能源设施告警策略
+     */
+    @RequiresPermissions("ems:alarm-strategy:remove")
+    @Log(title = "能源设施告警策略", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(opAlarmPolicyService.deleteAdmOpAlarmPolicyByIds(ids));
+    }
+}

+ 192 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/domain/DeviceLedger.java

@@ -0,0 +1,192 @@
+package com.ruoyi.ems.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.huashe.common.annotation.Excel;
+import com.huashe.common.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 设备台账对象 adm_ems_device_rbook
+ *
+ * @author ruoyi
+ * @date 2024-09-10
+ */
+public class DeviceLedger extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 序号 */
+    private Long id;
+
+    /** 记录编号 */
+    @Excel(name = "记录编号")
+    private String recordCode;
+
+    /** 区域编号 */
+    private String areaCode;
+
+    @Excel(name = "对象名称")
+    private String areaName;
+
+    /** 对象类型 1:设施 2:设备 */
+    @Excel(name = "对象类型 1:设施 2:设备")
+    private Long objType;
+
+    /** 对象代码 */
+    @Excel(name = "对象代码")
+    private String objCode;
+
+    /** 对象名称 */
+    @Excel(name = "对象名称")
+    private String objName;
+
+    /** 日期 yyyy-MM-dd HH:mm:ss */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "日期 yyyy-MM-dd HH:mm:ss", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date recordTime;
+
+    /** 安装位置 */
+    @Excel(name = "安装位置")
+    private String insLocation;
+
+    /** 维护标题 */
+    @Excel(name = "维护标题")
+    private String maintainTitle;
+
+    /** 维护内容 */
+    @Excel(name = "维护内容")
+    private String maintainContent;
+
+    /** 维护人 */
+    @Excel(name = "维护人")
+    private String maintainPerson;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setRecordCode(String recordCode)
+    {
+        this.recordCode = recordCode;
+    }
+
+    public String getRecordCode()
+    {
+        return recordCode;
+    }
+
+    public String getAreaCode() {
+        return areaCode;
+    }
+
+    public void setAreaCode(String areaCode) {
+        this.areaCode = areaCode;
+    }
+
+    public String getAreaName() {
+        return areaName;
+    }
+
+    public void setAreaName(String areaName) {
+        this.areaName = areaName;
+    }
+
+    public void setObjType(Long objType)
+    {
+        this.objType = objType;
+    }
+
+    public Long getObjType()
+    {
+        return objType;
+    }
+    public void setObjCode(String objCode)
+    {
+        this.objCode = objCode;
+    }
+
+    public String getObjCode()
+    {
+        return objCode;
+    }
+    public void setObjName(String objName)
+    {
+        this.objName = objName;
+    }
+
+    public String getObjName()
+    {
+        return objName;
+    }
+    public void setRecordTime(Date recordTime)
+    {
+        this.recordTime = recordTime;
+    }
+
+    public Date getRecordTime()
+    {
+        return recordTime;
+    }
+    public void setInsLocation(String insLocation)
+    {
+        this.insLocation = insLocation;
+    }
+
+    public String getInsLocation()
+    {
+        return insLocation;
+    }
+    public void setMaintainTitle(String maintainTitle)
+    {
+        this.maintainTitle = maintainTitle;
+    }
+
+    public String getMaintainTitle()
+    {
+        return maintainTitle;
+    }
+    public void setMaintainContent(String maintainContent)
+    {
+        this.maintainContent = maintainContent;
+    }
+
+    public String getMaintainContent()
+    {
+        return maintainContent;
+    }
+    public void setMaintainPerson(String maintainPerson)
+    {
+        this.maintainPerson = maintainPerson;
+    }
+
+    public String getMaintainPerson()
+    {
+        return maintainPerson;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("recordCode", getRecordCode())
+                .append("objType", getObjType())
+                .append("objCode", getObjCode())
+                .append("objName", getObjName())
+                .append("recordTime", getRecordTime())
+                .append("insLocation", getInsLocation())
+                .append("maintainTitle", getMaintainTitle())
+                .append("maintainContent", getMaintainContent())
+                .append("maintainPerson", getMaintainPerson())
+                .append("createTime", getCreateTime())
+                .append("updateTime", getUpdateTime())
+                .toString();
+    }
+}

+ 185 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/domain/OpAlarmPolicy.java

@@ -0,0 +1,185 @@
+package com.ruoyi.ems.domain;
+
+import com.huashe.common.annotation.Excel;
+import com.huashe.common.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 能源设施告警策略对象 adm_op_alarm_policy
+ * 
+ * @author ruoyi
+ * @date 2024-08-26
+ */
+public class OpAlarmPolicy extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 序号 */
+    private Long id;
+
+    private String areaCode;
+
+    @Excel(name = "对象名称")
+    private String areaName;
+
+    /** 策略代码 */
+    @Excel(name = "策略代码")
+    private String policyCode;
+
+    /** 策略名称 */
+    @Excel(name = "策略名称")
+    private String policyName;
+
+    /** 告警对象类型 */
+    @Excel(name = "告警对象类型")
+    private Integer alarmObjType;
+
+    /** 告警对象指标 */
+    @Excel(name = "告警对象指标")
+    private String alarmObjIndex;
+
+    /** 告警规则 */
+    @Excel(name = "告警规则")
+    private Integer alarmRuleType;
+
+    /** 告警阈值 */
+    @Excel(name = "告警阈值")
+    private Double alarmThresholdValue;
+
+    /** 告警代码 */
+    @Excel(name = "告警代码")
+    private String alarmCode;
+
+    /** 告警描述 */
+    @Excel(name = "告警描述")
+    private String alarmMsg;
+
+    /** 告警类型 */
+    @Excel(name = "告警类型")
+    private Integer alarmType;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+
+    public String getAreaCode() {
+        return areaCode;
+    }
+
+    public void setAreaCode(String areaCode) {
+        this.areaCode = areaCode;
+    }
+
+    public String getAreaName() {
+        return areaName;
+    }
+
+    public void setAreaName(String areaName) {
+        this.areaName = areaName;
+    }
+
+    public void setPolicyCode(String policyCode)
+    {
+        this.policyCode = policyCode;
+    }
+
+    public String getPolicyCode() 
+    {
+        return policyCode;
+    }
+    public void setPolicyName(String policyName) 
+    {
+        this.policyName = policyName;
+    }
+
+    public String getPolicyName() 
+    {
+        return policyName;
+    }
+    public void setAlarmObjType(Integer alarmObjType) 
+    {
+        this.alarmObjType = alarmObjType;
+    }
+
+    public Integer getAlarmObjType() 
+    {
+        return alarmObjType;
+    }
+    public void setAlarmObjIndex(String alarmObjIndex) 
+    {
+        this.alarmObjIndex = alarmObjIndex;
+    }
+
+    public String getAlarmObjIndex() 
+    {
+        return alarmObjIndex;
+    }
+    public void setAlarmRuleType(Integer alarmRuleType) 
+    {
+        this.alarmRuleType = alarmRuleType;
+    }
+
+    public Integer getAlarmRuleType() 
+    {
+        return alarmRuleType;
+    }
+    public void setAlarmThresholdValue(Double alarmThresholdValue) 
+    {
+        this.alarmThresholdValue = alarmThresholdValue;
+    }
+
+    public Double getAlarmThresholdValue() 
+    {
+        return alarmThresholdValue;
+    }
+    public void setAlarmCode(String alarmCode) 
+    {
+        this.alarmCode = alarmCode;
+    }
+
+    public String getAlarmCode() 
+    {
+        return alarmCode;
+    }
+    public void setAlarmMsg(String alarmMsg) 
+    {
+        this.alarmMsg = alarmMsg;
+    }
+
+    public String getAlarmMsg() 
+    {
+        return alarmMsg;
+    }
+    public void setAlarmType(Integer alarmType) 
+    {
+        this.alarmType = alarmType;
+    }
+
+    public Integer getAlarmType() 
+    {
+        return alarmType;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("policyCode", getPolicyCode())
+            .append("policyName", getPolicyName())
+            .append("alarmObjType", getAlarmObjType())
+            .append("alarmObjIndex", getAlarmObjIndex())
+            .append("alarmRuleType", getAlarmRuleType())
+            .append("alarmThresholdValue", getAlarmThresholdValue())
+            .append("alarmCode", getAlarmCode())
+            .append("alarmMsg", getAlarmMsg())
+            .append("alarmType", getAlarmType())
+            .toString();
+    }
+}

+ 5 - 5
ems/ems-core/src/main/java/com/ruoyi/ems/mapper/AdmOpAlarmPolicyMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.ems.mapper;
 
-import com.ruoyi.ems.domain.AdmOpAlarmPolicy;
+import com.ruoyi.ems.domain.OpAlarmPolicy;
 
 import java.util.List;
 
@@ -17,7 +17,7 @@ public interface AdmOpAlarmPolicyMapper {
      * @param id 能源设施告警策略主键
      * @return 能源设施告警策略
      */
-    AdmOpAlarmPolicy selectAdmOpAlarmPolicyById(Long id);
+    OpAlarmPolicy selectAdmOpAlarmPolicyById(Long id);
 
     /**
      * 查询能源设施告警策略列表
@@ -25,7 +25,7 @@ public interface AdmOpAlarmPolicyMapper {
      * @param opAlarmPolicy 能源设施告警策略
      * @return 能源设施告警策略集合
      */
-    List<AdmOpAlarmPolicy> selectAdmOpAlarmPolicyList(AdmOpAlarmPolicy opAlarmPolicy);
+    List<OpAlarmPolicy> selectAdmOpAlarmPolicyList(OpAlarmPolicy opAlarmPolicy);
 
     /**
      * 新增能源设施告警策略
@@ -33,7 +33,7 @@ public interface AdmOpAlarmPolicyMapper {
      * @param opAlarmPolicy 能源设施告警策略
      * @return 结果
      */
-    int insertAdmOpAlarmPolicy(AdmOpAlarmPolicy opAlarmPolicy);
+    int insertAdmOpAlarmPolicy(OpAlarmPolicy opAlarmPolicy);
 
     /**
      * 修改能源设施告警策略
@@ -41,7 +41,7 @@ public interface AdmOpAlarmPolicyMapper {
      * @param opAlarmPolicy 能源设施告警策略
      * @return 结果
      */
-    int updateAdmOpAlarmPolicy(AdmOpAlarmPolicy opAlarmPolicy);
+    int updateAdmOpAlarmPolicy(OpAlarmPolicy opAlarmPolicy);
 
     /**
      * 删除能源设施告警策略

+ 61 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/mapper/DeviceLedgerMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.ems.mapper;
+
+import com.ruoyi.ems.domain.DeviceLedger;
+
+import java.util.List;
+
+/**
+ * 设备台账Mapper接口
+ *
+ * @author ruoyi
+ * @date 2024-09-10
+ */
+public interface DeviceLedgerMapper {
+    /**
+     * 查询设备台账
+     *
+     * @param id 设备台账主键
+     * @return 设备台账
+     */
+    DeviceLedger selectDeviceLedgerById(Long id);
+
+    /**
+     * 查询设备台账列表
+     *
+     * @param ledger 设备台账
+     * @return 设备台账集合
+     */
+    List<DeviceLedger> selectDeviceLedgerList(DeviceLedger ledger);
+
+    /**
+     * 新增设备台账
+     *
+     * @param ledger 设备台账
+     * @return 结果
+     */
+    int insertDeviceLedger(DeviceLedger ledger);
+
+    /**
+     * 修改设备台账
+     *
+     * @param ledger 设备台账
+     * @return 结果
+     */
+    int updateDeviceLedger(DeviceLedger ledger);
+
+    /**
+     * 删除设备台账
+     *
+     * @param id 设备台账主键
+     * @return 结果
+     */
+    int deleteDeviceLedgerById(Long id);
+
+    /**
+     * 批量删除设备台账
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteDeviceLedgerByIds(Long[] ids);
+}

+ 5 - 5
ems/ems-core/src/main/java/com/ruoyi/ems/service/IAdmOpAlarmPolicyService.java

@@ -1,6 +1,6 @@
 package com.ruoyi.ems.service;
 
-import com.ruoyi.ems.domain.AdmOpAlarmPolicy;
+import com.ruoyi.ems.domain.OpAlarmPolicy;
 
 import java.util.List;
 
@@ -17,7 +17,7 @@ public interface IAdmOpAlarmPolicyService {
      * @param id 能源设施告警策略主键
      * @return 能源设施告警策略
      */
-    AdmOpAlarmPolicy selectAdmOpAlarmPolicyById(Long id);
+    OpAlarmPolicy selectAdmOpAlarmPolicyById(Long id);
 
     /**
      * 查询能源设施告警策略列表
@@ -25,7 +25,7 @@ public interface IAdmOpAlarmPolicyService {
      * @param opAlarmPolicy 能源设施告警策略
      * @return 能源设施告警策略集合
      */
-    List<AdmOpAlarmPolicy> selectAdmOpAlarmPolicyList(AdmOpAlarmPolicy opAlarmPolicy);
+    List<OpAlarmPolicy> selectAdmOpAlarmPolicyList(OpAlarmPolicy opAlarmPolicy);
 
     /**
      * 新增能源设施告警策略
@@ -33,7 +33,7 @@ public interface IAdmOpAlarmPolicyService {
      * @param opAlarmPolicy 能源设施告警策略
      * @return 结果
      */
-    int insertAdmOpAlarmPolicy(AdmOpAlarmPolicy opAlarmPolicy);
+    int insertAdmOpAlarmPolicy(OpAlarmPolicy opAlarmPolicy);
 
     /**
      * 修改能源设施告警策略
@@ -41,7 +41,7 @@ public interface IAdmOpAlarmPolicyService {
      * @param opAlarmPolicy 能源设施告警策略
      * @return 结果
      */
-    int updateAdmOpAlarmPolicy(AdmOpAlarmPolicy opAlarmPolicy);
+    int updateAdmOpAlarmPolicy(OpAlarmPolicy opAlarmPolicy);
 
     /**
      * 批量删除能源设施告警策略

+ 61 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/IDeviceLedgerService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.ems.service;
+
+import com.ruoyi.ems.domain.DeviceLedger;
+
+import java.util.List;
+
+/**
+ * 设备台账Service接口
+ *
+ * @author ruoyi
+ * @date 2024-09-10
+ */
+public interface IDeviceLedgerService {
+    /**
+     * 查询设备台账
+     *
+     * @param id 设备台账主键
+     * @return 设备台账
+     */
+    DeviceLedger selectDeviceLedgerById(Long id);
+
+    /**
+     * 查询设备台账列表
+     *
+     * @param deviceLedger 设备台账
+     * @return 设备台账集合
+     */
+    List<DeviceLedger> selectDeviceLedgerList(DeviceLedger deviceLedger);
+
+    /**
+     * 新增设备台账
+     *
+     * @param deviceLedger 设备台账
+     * @return 结果
+     */
+    int insertDeviceLedger(DeviceLedger deviceLedger);
+
+    /**
+     * 修改设备台账
+     *
+     * @param deviceLedger 设备台账
+     * @return 结果
+     */
+    int updateDeviceLedger(DeviceLedger deviceLedger);
+
+    /**
+     * 批量删除设备台账
+     *
+     * @param ids 需要删除的设备台账主键集合
+     * @return 结果
+     */
+    int deleteDeviceLedgerByIds(Long[] ids);
+
+    /**
+     * 删除设备台账信息
+     *
+     * @param id 设备台账主键
+     * @return 结果
+     */
+    int deleteDeviceLedgerById(Long id);
+}

+ 5 - 5
ems/ems-core/src/main/java/com/ruoyi/ems/service/impl/AdmOpAlarmPolicyServiceImpl.java

@@ -1,6 +1,6 @@
 package com.ruoyi.ems.service.impl;
 
-import com.ruoyi.ems.domain.AdmOpAlarmPolicy;
+import com.ruoyi.ems.domain.OpAlarmPolicy;
 import com.ruoyi.ems.mapper.AdmOpAlarmPolicyMapper;
 import com.ruoyi.ems.service.IAdmOpAlarmPolicyService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,7 +26,7 @@ public class AdmOpAlarmPolicyServiceImpl implements IAdmOpAlarmPolicyService {
      * @return 能源设施告警策略
      */
     @Override
-    public AdmOpAlarmPolicy selectAdmOpAlarmPolicyById(Long id) {
+    public OpAlarmPolicy selectAdmOpAlarmPolicyById(Long id) {
         return admOpAlarmPolicyMapper.selectAdmOpAlarmPolicyById(id);
     }
 
@@ -37,7 +37,7 @@ public class AdmOpAlarmPolicyServiceImpl implements IAdmOpAlarmPolicyService {
      * @return 能源设施告警策略
      */
     @Override
-    public List<AdmOpAlarmPolicy> selectAdmOpAlarmPolicyList(AdmOpAlarmPolicy admOpAlarmPolicy) {
+    public List<OpAlarmPolicy> selectAdmOpAlarmPolicyList(OpAlarmPolicy admOpAlarmPolicy) {
         return admOpAlarmPolicyMapper.selectAdmOpAlarmPolicyList(admOpAlarmPolicy);
     }
 
@@ -48,7 +48,7 @@ public class AdmOpAlarmPolicyServiceImpl implements IAdmOpAlarmPolicyService {
      * @return 结果
      */
     @Override
-    public int insertAdmOpAlarmPolicy(AdmOpAlarmPolicy admOpAlarmPolicy) {
+    public int insertAdmOpAlarmPolicy(OpAlarmPolicy admOpAlarmPolicy) {
         return admOpAlarmPolicyMapper.insertAdmOpAlarmPolicy(admOpAlarmPolicy);
     }
 
@@ -59,7 +59,7 @@ public class AdmOpAlarmPolicyServiceImpl implements IAdmOpAlarmPolicyService {
      * @return 结果
      */
     @Override
-    public int updateAdmOpAlarmPolicy(AdmOpAlarmPolicy admOpAlarmPolicy) {
+    public int updateAdmOpAlarmPolicy(OpAlarmPolicy admOpAlarmPolicy) {
         return admOpAlarmPolicyMapper.updateAdmOpAlarmPolicy(admOpAlarmPolicy);
     }
 

+ 264 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/impl/DeviceLedgerServiceImpl.java

@@ -0,0 +1,264 @@
+package com.ruoyi.ems.service.impl;
+
+
+import com.huashe.common.utils.DateUtils;
+import com.ruoyi.ems.domain.DeviceLedger;
+import com.ruoyi.ems.mapper.DeviceLedgerMapper;
+import com.ruoyi.ems.service.IDeviceLedgerService;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * 设备台账Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2024-09-10
+ */
+@Service
+public class DeviceLedgerServiceImpl implements IDeviceLedgerService {
+
+    private static final Logger log = LoggerFactory.getLogger(DeviceLedgerServiceImpl.class);
+
+    @Autowired
+    private DeviceLedgerMapper deviceLedgerMapper;
+
+    /**
+     * 查询设备台账
+     *
+     * @param id 设备台账主键
+     * @return 设备台账
+     */
+    @Override
+    public DeviceLedger selectDeviceLedgerById(Long id) {
+        return deviceLedgerMapper.selectDeviceLedgerById(id);
+    }
+
+    /**
+     * 查询设备台账列表
+     *
+     * @param deviceLedger 设备台账
+     * @return 设备台账
+     */
+    @Override
+    public List<DeviceLedger> selectDeviceLedgerList(DeviceLedger deviceLedger) {
+        return deviceLedgerMapper.selectDeviceLedgerList(deviceLedger);
+    }
+
+    /**
+     * 新增设备台账
+     * 自动生成台账编号
+     *
+     * @param deviceLedger 设备台账
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int insertDeviceLedger(DeviceLedger deviceLedger) {
+        // 自动生成台账编号
+        if (StringUtils.isEmpty(deviceLedger.getRecordCode())) {
+            String recordCode = generateUniqueRecordCode();
+            deviceLedger.setRecordCode(recordCode);
+            log.info("自动生成台账编号: {}", recordCode);
+        }
+
+        // 设置创建时间
+        deviceLedger.setCreateTime(DateUtils.getNowDate());
+
+        return deviceLedgerMapper.insertDeviceLedger(deviceLedger);
+    }
+
+    /**
+     * 生成唯一的台账编号
+     * 如果生成的编号已存在,则重新生成
+     *
+     * @return 唯一的台账编号
+     */
+    private String generateUniqueRecordCode() {
+        String recordCode;
+        int maxRetries = 10;
+        int retries = 0;
+
+        do {
+            recordCode = LedgerCodeGenerator.generate();
+            // 检查是否已存在
+            DeviceLedger query = new DeviceLedger();
+            query.setRecordCode(recordCode);
+            List<DeviceLedger> existing = deviceLedgerMapper.selectDeviceLedgerList(query);
+            if (existing == null || existing.isEmpty()) {
+                return recordCode;
+            }
+            retries++;
+            log.warn("台账编号 {} 已存在,重新生成 (尝试 {}/{})", recordCode, retries, maxRetries);
+        } while (retries < maxRetries);
+
+        // 如果多次重试仍失败,使用时间戳作为后缀
+        return recordCode + System.currentTimeMillis() % 1000;
+    }
+
+    /**
+     * 修改设备台账
+     *
+     * @param deviceLedger 设备台账
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int updateDeviceLedger(DeviceLedger deviceLedger) {
+        deviceLedger.setUpdateTime(DateUtils.getNowDate());
+        return deviceLedgerMapper.updateDeviceLedger(deviceLedger);
+    }
+
+    /**
+     * 批量删除设备台账
+     *
+     * @param ids 需要删除的设备台账主键
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int deleteDeviceLedgerByIds(Long[] ids) {
+        return deviceLedgerMapper.deleteDeviceLedgerByIds(ids);
+    }
+
+    /**
+     * 删除设备台账信息
+     *
+     * @param id 设备台账主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDeviceLedgerById(Long id) {
+        return deviceLedgerMapper.deleteDeviceLedgerById(id);
+    }
+
+    /**
+     * 根据记录编号查询台账
+     *
+     * @param recordCode 记录编号
+     * @return 设备台账
+     */
+    public DeviceLedger selectDeviceLedgerByRecordCode(String recordCode) {
+        DeviceLedger query = new DeviceLedger();
+        query.setRecordCode(recordCode);
+        List<DeviceLedger> list = deviceLedgerMapper.selectDeviceLedgerList(query);
+        return list != null && !list.isEmpty() ? list.get(0) : null;
+    }
+
+    /**
+     * 根据对象类型和对象代码查询台账列表
+     *
+     * @param objType 对象类型
+     * @param objCode 对象代码
+     * @return 台账列表
+     */
+    public List<DeviceLedger> selectDeviceLedgerByObj(Long objType, String objCode) {
+        DeviceLedger query = new DeviceLedger();
+        query.setObjType(objType);
+        query.setObjCode(objCode);
+        return deviceLedgerMapper.selectDeviceLedgerList(query);
+    }
+}
+
+class LedgerCodeGenerator {
+
+    private static final String PREFIX = "TZ";
+    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
+
+    // 当前日期
+    private static String currentDate = "";
+    // 当日序号计数器
+    private static final AtomicInteger counter = new AtomicInteger(0);
+
+    /**
+     * 生成台账编号
+     * 线程安全的编号生成
+     *
+     * @return 台账编号 格式: TZ202601150001
+     */
+    public static synchronized String generate() {
+        String today = DATE_FORMAT.format(new Date());
+
+        // 如果日期变化,重置计数器
+        if (!today.equals(currentDate)) {
+            currentDate = today;
+            counter.set(0);
+        }
+
+        int seq = counter.incrementAndGet();
+        return String.format("%s%s%04d", PREFIX, today, seq);
+    }
+
+    /**
+     * 根据指定日期生成台账编号
+     *
+     * @param date 日期
+     * @param sequence 序号
+     * @return 台账编号
+     */
+    public static String generate(Date date, int sequence) {
+        String dateStr = DATE_FORMAT.format(date);
+        return String.format("%s%s%04d", PREFIX, dateStr, sequence);
+    }
+
+    /**
+     * 验证台账编号格式是否正确
+     *
+     * @param recordCode 台账编号
+     * @return 是否有效
+     */
+    public static boolean isValid(String recordCode) {
+        if (recordCode == null || recordCode.length() != 14) {
+            return false;
+        }
+        if (!recordCode.startsWith(PREFIX)) {
+            return false;
+        }
+        try {
+            // 验证日期部分
+            String datePart = recordCode.substring(2, 10);
+            DATE_FORMAT.parse(datePart);
+            // 验证序号部分
+            String seqPart = recordCode.substring(10);
+            Integer.parseInt(seqPart);
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+     * 从台账编号中提取日期
+     *
+     * @param recordCode 台账编号
+     * @return 日期字符串 yyyyMMdd
+     */
+    public static String extractDate(String recordCode) {
+        if (!isValid(recordCode)) {
+            return null;
+        }
+        return recordCode.substring(2, 10);
+    }
+
+    /**
+     * 从台账编号中提取序号
+     *
+     * @param recordCode 台账编号
+     * @return 序号
+     */
+    public static Integer extractSequence(String recordCode) {
+        if (!isValid(recordCode)) {
+            return null;
+        }
+        return Integer.parseInt(recordCode.substring(10));
+    }
+}

+ 4 - 4
ems/ems-core/src/main/resources/mapper/ems/AdmOpAlarmPolicyMapper.xml

@@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.ems.mapper.AdmOpAlarmPolicyMapper">
 
-    <resultMap type="com.ruoyi.ems.domain.AdmOpAlarmPolicy" id="AdmOpAlarmPolicyResult">
+    <resultMap type="com.ruoyi.ems.domain.OpAlarmPolicy" id="AdmOpAlarmPolicyResult">
         <result property="id"    column="id"    />
         <result property="areaCode"             column="area_code"    />
         <result property="areaName"             column="area_name"    />
@@ -23,7 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select id, policy_code, policy_name, alarm_obj_type, alarm_obj_index, alarm_rule_type, alarm_threshold_value, alarm_code, alarm_msg, alarm_type from adm_op_alarm_policy
     </sql>
 
-    <select id="selectAdmOpAlarmPolicyList" parameterType="com.ruoyi.ems.domain.AdmOpAlarmPolicy" resultMap="AdmOpAlarmPolicyResult">
+    <select id="selectAdmOpAlarmPolicyList" parameterType="com.ruoyi.ems.domain.OpAlarmPolicy" resultMap="AdmOpAlarmPolicyResult">
         select
             p.id, p.area_code, a.area_name, p.policy_code, p.policy_name, p.alarm_obj_type, p.alarm_obj_index, p.alarm_rule_type, p.alarm_threshold_value, p.alarm_code, p.alarm_msg, p.alarm_type
         from adm_op_alarm_policy p
@@ -42,7 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </select>
 
-    <insert id="insertAdmOpAlarmPolicy" parameterType="com.ruoyi.ems.domain.AdmOpAlarmPolicy" useGeneratedKeys="true" keyProperty="id">
+    <insert id="insertAdmOpAlarmPolicy" parameterType="com.ruoyi.ems.domain.OpAlarmPolicy" useGeneratedKeys="true" keyProperty="id">
         insert into adm_op_alarm_policy
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="areaCode != null and areaCode != ''">area_code,</if>
@@ -70,7 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
-    <update id="updateAdmOpAlarmPolicy" parameterType="com.ruoyi.ems.domain.AdmOpAlarmPolicy">
+    <update id="updateAdmOpAlarmPolicy" parameterType="com.ruoyi.ems.domain.OpAlarmPolicy">
         update adm_op_alarm_policy
         <trim prefix="SET" suffixOverrides=",">
             <if test="areaCode != null and areaCode != ''">area_code = #{areaCode},</if>

+ 113 - 0
ems/ems-core/src/main/resources/mapper/ems/DeviceLedgerMapper.xml

@@ -0,0 +1,113 @@
+<?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.ems.mapper.DeviceLedgerMapper">
+    <resultMap type="com.ruoyi.ems.domain.DeviceLedger" id="deviceLedgerResult">
+        <result property="id" column="id"/>
+        <result property="recordCode" column="record_code"/>
+        <result property="areaCode" column="area_code"/>
+        <result property="areaName" column="area_name"/>
+        <result property="objType" column="obj_type"/>
+        <result property="objCode" column="obj_code"/>
+        <result property="objName" column="obj_name"/>
+        <result property="recordTime" column="record_time"/>
+        <result property="insLocation" column="ins_location"/>
+        <result property="maintainTitle" column="maintain_title"/>
+        <result property="maintainContent" column="maintain_content"/>
+        <result property="maintainPerson" column="maintain_person"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <sql id="selectDeviceLedgerVo">
+        select id,
+               record_code,
+               area_code,
+               obj_type,
+               obj_code,
+               obj_name,
+               record_time,
+               ins_location,
+               maintain_title,
+               maintain_content,
+               maintain_person,
+               create_time,
+               update_time
+        from adm_ems_device_ledger
+    </sql>
+    <select id="selectDeviceLedgerList" parameterType="com.ruoyi.ems.domain.DeviceLedger" resultMap="deviceLedgerResult">
+        select
+            r.id, r.record_code, r.area_code, a.area_name, r.obj_type, r.obj_code, r.obj_name, r.record_time, r.ins_location, r.maintain_title, r.maintain_content, r.maintain_person, r.create_time, r.update_time
+        from adm_ems_device_ledger r
+            left join adm_area a on r.area_code = a.area_code
+        <where>
+            <if test="areaCode != null and areaCode != '' and areaCode != '-1'">and r.area_code= #{areaCode}</if>
+            <if test="objType != null "> and r.obj_type = #{objType}</if>
+            <if test="objName != null and objName != ''"> and r.obj_name like concat('%', #{objName}, '%')</if>
+            <if test="startRecTime != null  and startRecTime != '' and endRecTime != null and endRecTime !=''">
+                and r.record_time &gt;= #{startRecTime} and r.record_time &lt;= #{endRecTime}
+            </if>
+        </where>
+    </select>
+    <select id="selectDeviceLedgerById" parameterType="Long" resultMap="deviceLedgerResult">
+        <include refid="selectDeviceLedgerVo"/>
+        where id = #{id}
+    </select>
+    <insert id="insertDeviceLedger" parameterType="com.ruoyi.ems.domain.DeviceLedger" useGeneratedKeys="true" keyProperty="id">
+        insert into adm_ems_device_ledger
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="recordCode != null and recordCode != ''">record_code,</if>
+            <if test="areaCode != null and areaCode != ''">area_code,</if>
+            <if test="objType != null">obj_type,</if>
+            <if test="objCode != null and objCode != ''">obj_code,</if>
+            <if test="objName != null">obj_name,</if>
+            <if test="recordTime != null">record_time,</if>
+            <if test="insLocation != null">ins_location,</if>
+            <if test="maintainTitle != null and maintainTitle != ''">maintain_title,</if>
+            <if test="maintainContent != null">maintain_content,</if>
+            <if test="maintainPerson != null">maintain_person,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="recordCode != null and recordCode != ''">#{recordCode},</if>
+            <if test="areaCode != null and areaCode != ''">#{areaCode},</if>
+            <if test="objType != null">#{objType},</if>
+            <if test="objCode != null and objCode != ''">#{objCode},</if>
+            <if test="objName != null">#{objName},</if>
+            <if test="recordTime != null">#{recordTime},</if>
+            <if test="insLocation != null">#{insLocation},</if>
+            <if test="maintainTitle != null and maintainTitle != ''">#{maintainTitle},</if>
+            <if test="maintainContent != null">#{maintainContent},</if>
+            <if test="maintainPerson != null">#{maintainPerson},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+    <update id="updateDeviceLedger" parameterType="com.ruoyi.ems.domain.DeviceLedger">
+        update adm_ems_device_ledger
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="recordCode != null and recordCode != ''">record_code = #{recordCode},</if>
+            <if test="areaCode != null and areaCode != ''">area_code = #{areaCode},</if>
+            <if test="objType != null">obj_type = #{objType},</if>
+            <if test="objCode != null and objCode != ''">obj_code = #{objCode},</if>
+            <if test="objName != null">obj_name = #{objName},</if>
+            <if test="objName != null">obj_name = #{objName},</if>
+            <if test="recordTime != null">record_time = #{recordTime},</if>
+            <if test="insLocation != null">ins_location = #{insLocation},</if>
+            <if test="maintainTitle != null and maintainTitle != ''">maintain_title = #{maintainTitle},</if>
+            <if test="maintainContent != null">maintain_content = #{maintainContent},</if>
+            <if test="maintainPerson != null">maintain_person = #{maintainPerson},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <delete id="deleteDeviceLedgerById" parameterType="Long">
+        delete from adm_ems_device_ledger where id = #{id}
+    </delete>
+    <delete id="deleteDeviceLedgerByIds" parameterType="String">
+        delete from adm_ems_device_ledger where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")"> #{id} </foreach>
+    </delete>
+</mapper>

+ 238 - 395
ems/sql/ems_init_data_ctfwq.sql

@@ -2231,7 +2231,6 @@ INSERT INTO adm_op_alarm(area_code, system_code, obj_type, obj_code, obj_name, a
 -- 巡检计划
 -- =====================================================
 -- 巡检任务测试数据 - 常泰高速服务区能源管理平台
--- 生成时间: 2026-01-31
 -- =====================================================
 
 -- 清理旧数据(可选,谨慎使用)
@@ -2243,268 +2242,138 @@ INSERT INTO adm_op_alarm(area_code, system_code, obj_type, obj_code, obj_name, a
 -- =====================================================
 
 -- 1. 北区全部设备在线状态巡检(每天上午8点)
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3001',
-             'IP_TEST_AREA_001',
-             '北区设备在线状态日检',
-             2,  -- 自动巡检
-             0,  -- 待执行
-             0,  -- 目标类型:区域
-             '["321283124S3001"]',
-             '常泰高速服务区(北区)',
-             '0 0 8 * * ?',  -- 每天上午8点
-             1,  -- 启用调度
-             '每日上午8点自动检查北区所有设备在线状态、运行状态等关键指标',
-             'admin',
-             NOW()
-         );
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `description`, `create_by`, `create_time`) VALUES ('321283124S3001','IP_TEST_AREA_001','北区设备在线状态日检',2,0,0, '["321283124S3001"]','常泰高速服务区(北区)','0 0 8 * * ?',1,'每日上午8点自动检查北区所有设备在线状态、运行状态等关键指标','admin',NOW());
 
 -- 北区巡检规则
 INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES
--- 通用设备状态检查
-('IP_TEST_AREA_001', 'IR_AREA001_001', '设备在线状态', NULL, 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 1, 1),
+  -- 通用设备状态检查
+  ('IP_TEST_AREA_001', 'IR_AREA001_001', '设备在线状态', NULL, 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 1, 1),
 
--- BA新风设备检查
-('IP_TEST_AREA_001', 'IR_AREA001_002', '新风机运行状态', 'M_Z020_DEV_BA_XF', 'xfStatus', '新风机运行状态', 3, NULL, NULL, NULL, 2, 1),
-('IP_TEST_AREA_001', 'IR_AREA001_003', '新风机故障检查', 'M_Z020_DEV_BA_XF', 'xfFault', '新风机故障', 2, NULL, NULL, '0', 3, 1),
-('IP_TEST_AREA_001', 'IR_AREA001_004', '送风温度范围', 'M_Z020_DEV_BA_XF', 'sfTemp', '送风温度', 1, '15', '35', NULL, 4, 1),
+  -- BA新风设备检查
+  ('IP_TEST_AREA_001', 'IR_AREA001_002', '新风机运行状态', 'M_Z020_DEV_BA_XF', 'xfStatus', '新风机运行状态', 3, NULL, NULL, NULL, 2, 1),
+  ('IP_TEST_AREA_001', 'IR_AREA001_003', '新风机故障检查', 'M_Z020_DEV_BA_XF', 'xfFault', '新风机故障', 2, NULL, NULL, '0', 3, 1),
+  ('IP_TEST_AREA_001', 'IR_AREA001_004', '送风温度范围', 'M_Z020_DEV_BA_XF', 'sfTemp', '送风温度', 1, '15', '35', NULL, 4, 1),
 
--- BA水箱检查
-('IP_TEST_AREA_001', 'IR_AREA001_005', '水箱液位检查', 'M_Z020_DEV_BA_WT', 'tankLevel', '水箱液位', 1, '20', '95', NULL, 5, 1),
-('IP_TEST_AREA_001', 'IR_AREA001_006', '水箱高液位报警', 'M_Z020_DEV_BA_WT', 'highLevelAlarm', '高液位报警', 2, NULL, NULL, '0', 6, 1),
-('IP_TEST_AREA_001', 'IR_AREA001_007', '水箱低液位报警', 'M_Z020_DEV_BA_WT', 'lowLevelAlarm', '低液位报警', 2, NULL, NULL, '0', 7, 1),
+  -- BA水箱检查
+  ('IP_TEST_AREA_001', 'IR_AREA001_005', '水箱液位检查', 'M_Z020_DEV_BA_WT', 'tankLevel', '水箱液位', 1, '20', '95', NULL, 5, 1),
+  ('IP_TEST_AREA_001', 'IR_AREA001_006', '水箱高液位报警', 'M_Z020_DEV_BA_WT', 'highLevelAlarm', '高液位报警', 2, NULL, NULL, '0', 6, 1),
+  ('IP_TEST_AREA_001', 'IR_AREA001_007', '水箱低液位报警', 'M_Z020_DEV_BA_WT', 'lowLevelAlarm', '低液位报警', 2, NULL, NULL, '0', 7, 1),
 
--- 光伏采集器检查
-('IP_TEST_AREA_001', 'IR_AREA001_008', '光伏采集器数据更新', 'M_W2_DEV_PHOTOVOLTAIC_COL', 'lastUpdateTime', '数据最后接收时间', 3, NULL, NULL, NULL, 8, 1),
+  -- 光伏采集器检查
+  ('IP_TEST_AREA_001', 'IR_AREA001_008', '光伏采集器数据更新', 'M_W2_DEV_PHOTOVOLTAIC_COL', 'lastUpdateTime', '数据最后接收时间', 3, NULL, NULL, NULL, 8, 1),
 
--- 充电桩主机检查
-('IP_TEST_AREA_001', 'IR_AREA001_009', '充电桩在线状态', 'M_W2_DEV_CHARGING_HOST', 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 9, 1);
+  -- 充电桩主机检查
+  ('IP_TEST_AREA_001', 'IR_AREA001_009', '充电桩在线状态', 'M_W2_DEV_CHARGING_HOST', 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 9, 1);
 
 
 -- 2. 南区设备在线状态巡检(每天上午8点)
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3002',
-             'IP_TEST_AREA_002',
-             '南区设备在线状态日检',
-             2,  -- 自动巡检
-             0,  -- 待执行
-             0,  -- 目标类型:区域
-             '["321283124S3002"]',
-             '常泰高速服务区(南区)',
-             '0 0 8 * * ?',  -- 每天上午8点
-             1,  -- 启用调度
-             '每日上午8点自动检查南区所有设备在线状态及关键运行参数',
-             'admin',
-             NOW()
-         );
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `description`, `create_by`, `create_time`) VALUES ('321283124S3002','IP_TEST_AREA_002','南区设备在线状态日检',2,0,0,'["321283124S3002"]','常泰高速服务区(南区)','0 0 8 * * ?',1,'每日上午8点自动检查南区所有设备在线状态及关键运行参数','admin',NOW());
 
 -- 南区巡检规则(与北区类似)
-INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES
-                                                                                                                                                                                                           ('IP_TEST_AREA_002', 'IR_AREA002_001', '设备在线状态', NULL, 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 1, 1),
-                                                                                                                                                                                                           ('IP_TEST_AREA_002', 'IR_AREA002_002', '新风机运行状态', 'M_Z020_DEV_BA_XF', 'xfStatus', '新风机运行状态', 3, NULL, NULL, NULL, 2, 1),
-                                                                                                                                                                                                           ('IP_TEST_AREA_002', 'IR_AREA002_003', '新风机故障检查', 'M_Z020_DEV_BA_XF', 'xfFault', '新风机故障', 2, NULL, NULL, '0', 3, 1),
-                                                                                                                                                                                                           ('IP_TEST_AREA_002', 'IR_AREA002_004', '水箱液位检查', 'M_Z020_DEV_BA_WT', 'tankLevel', '水箱液位', 1, '20', '95', NULL, 4, 1),
-                                                                                                                                                                                                           ('IP_TEST_AREA_002', 'IR_AREA002_005', '水箱高液位报警', 'M_Z020_DEV_BA_WT', 'highLevelAlarm', '高液位报警', 2, NULL, NULL, '0', 5, 1);
-
+INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES ('IP_TEST_AREA_002', 'IR_AREA002_001', '设备在线状态', NULL, 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 1, 1);
+INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES ('IP_TEST_AREA_002', 'IR_AREA002_002', '新风机运行状态', 'M_Z020_DEV_BA_XF', 'xfStatus', '新风机运行状态', 3, NULL, NULL, NULL, 2, 1);
+INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES ('IP_TEST_AREA_002', 'IR_AREA002_003', '新风机故障检查', 'M_Z020_DEV_BA_XF', 'xfFault', '新风机故障', 2, NULL, NULL, '0', 3, 1);
+INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES ('IP_TEST_AREA_002', 'IR_AREA002_004', '水箱液位检查', 'M_Z020_DEV_BA_WT', 'tankLevel', '水箱液位', 1, '20', '95', NULL, 4, 1);
+INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES ('IP_TEST_AREA_002', 'IR_AREA002_005', '水箱高液位报警', 'M_Z020_DEV_BA_WT', 'highLevelAlarm', '高液位报警', 2, NULL, NULL, '0', 5, 1);
 
 -- =====================================================
 -- 二、自动巡检计划 - 按设施(针对设备模型)
 -- =====================================================
 
 -- 3. 北区暖通设施巡检(每天上午9点、下午3点)
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3001',
-             'IP_TEST_FACS_001',
-             '北区暖通设施运行巡检',
-             2,  -- 自动巡检
-             0,  -- 待执行
-             1,  -- 目标类型:设施
-             '["Z-KT-01"]',
-             '北区-暖通设施',
-             '0 0 9,15 * * ?',  -- 每天上午9点、下午3点
-             1,
-             '检查北区暖通设施(新风、空调、水箱、水泵)的运行状态和关键参数',
-             'admin',
-             NOW()
-         );
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `description`, `create_by`, `create_time`) VALUES ('321283124S3001','IP_TEST_FACS_001','北区暖通设施运行巡检',2,0,1,'["Z-KT-01"]','北区-暖通设施','0 0 9,15 * * ?',1,'检查北区暖通设施(新风、空调、水箱、水泵)的运行状态和关键参数','admin',NOW());
 
 -- 暖通设施巡检规则
 INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES
 -- 新风设备 M_Z020_DEV_BA_XF
-('IP_TEST_FACS_001', 'IR_FACS001_001', '新风机运行状态', 'M_Z020_DEV_BA_XF', 'xfStatus', '新风机运行状态', 3, NULL, NULL, NULL, 1, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_002', '新风机故障检测', 'M_Z020_DEV_BA_XF', 'xfFault', '新风机故障', 2, NULL, NULL, '0', 2, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_003', '排风机故障检测', 'M_Z020_DEV_BA_XF', 'pfFault', '排风机故障', 2, NULL, NULL, '0', 3, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_004', '送风温度范围', 'M_Z020_DEV_BA_XF', 'sfTemp', '送风温度', 1, '10', '40', NULL, 4, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_005', '回风温度范围', 'M_Z020_DEV_BA_XF', 'hfTemp', '回风温度', 1, '5', '45', NULL, 5, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_006', '滤网压差报警', 'M_Z020_DEV_BA_XF', 'lwDpAlarm', '滤网压差报警', 2, NULL, NULL, '0', 6, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_007', '防冻开关报警', 'M_Z020_DEV_BA_XF', 'afAlarm', '防冻开关报警', 2, NULL, NULL, '0', 7, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_001', '新风机运行状态', 'M_Z020_DEV_BA_XF', 'xfStatus', '新风机运行状态', 3, NULL, NULL, NULL, 1, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_002', '新风机故障检测', 'M_Z020_DEV_BA_XF', 'xfFault', '新风机故障', 2, NULL, NULL, '0', 2, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_003', '排风机故障检测', 'M_Z020_DEV_BA_XF', 'pfFault', '排风机故障', 2, NULL, NULL, '0', 3, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_004', '送风温度范围', 'M_Z020_DEV_BA_XF', 'sfTemp', '送风温度', 1, '10', '40', NULL, 4, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_005', '回风温度范围', 'M_Z020_DEV_BA_XF', 'hfTemp', '回风温度', 1, '5', '45', NULL, 5, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_006', '滤网压差报警', 'M_Z020_DEV_BA_XF', 'lwDpAlarm', '滤网压差报警', 2, NULL, NULL, '0', 6, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_007', '防冻开关报警', 'M_Z020_DEV_BA_XF', 'afAlarm', '防冻开关报警', 2, NULL, NULL, '0', 7, 1),
 
 -- 空调设备 M_Z020_DEV_BA_AHU
-('IP_TEST_FACS_001', 'IR_FACS001_008', '空调运行状态', 'M_Z020_DEV_BA_AHU', 'xfStatus', '新风机运行状态', 3, NULL, NULL, NULL, 8, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_009', '空调故障检测', 'M_Z020_DEV_BA_AHU', 'xfFault', '新风机故障', 2, NULL, NULL, '0', 9, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_010', '空调送风温度', 'M_Z020_DEV_BA_AHU', 'sfTemp', '送风温度', 1, '10', '40', NULL, 10, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_008', '空调运行状态', 'M_Z020_DEV_BA_AHU', 'xfStatus', '新风机运行状态', 3, NULL, NULL, NULL, 8, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_009', '空调故障检测', 'M_Z020_DEV_BA_AHU', 'xfFault', '新风机故障', 2, NULL, NULL, '0', 9, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_010', '空调送风温度', 'M_Z020_DEV_BA_AHU', 'sfTemp', '送风温度', 1, '10', '40', NULL, 10, 1),
 
 -- 水箱 M_Z020_DEV_BA_WT
-('IP_TEST_FACS_001', 'IR_FACS001_011', '水箱液位', 'M_Z020_DEV_BA_WT', 'tankLevel', '水箱液位', 1, '15', '90', NULL, 11, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_012', '高液位报警', 'M_Z020_DEV_BA_WT', 'highLevelAlarm', '高液位报警', 2, NULL, NULL, '0', 12, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_013', '低液位报警', 'M_Z020_DEV_BA_WT', 'lowLevelAlarm', '低液位报警', 2, NULL, NULL, '0', 13, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_011', '水箱液位', 'M_Z020_DEV_BA_WT', 'tankLevel', '水箱液位', 1, '15', '90', NULL, 11, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_012', '高液位报警', 'M_Z020_DEV_BA_WT', 'highLevelAlarm', '高液位报警', 2, NULL, NULL, '0', 12, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_013', '低液位报警', 'M_Z020_DEV_BA_WT', 'lowLevelAlarm', '低液位报警', 2, NULL, NULL, '0', 13, 1),
 
 -- 水泵 M_Z020_DEV_BA_WP
-('IP_TEST_FACS_001', 'IR_FACS001_014', '水泵运行状态', 'M_Z020_DEV_BA_WP', 'runningState', '运行状态', 3, NULL, NULL, NULL, 14, 1),
-('IP_TEST_FACS_001', 'IR_FACS001_015', '水泵故障检测', 'M_Z020_DEV_BA_WP', 'faultState', '故障状态', 2, NULL, NULL, '0', 15, 1);
-
+  ('IP_TEST_FACS_001', 'IR_FACS001_014', '水泵运行状态', 'M_Z020_DEV_BA_WP', 'runningState', '运行状态', 3, NULL, NULL, NULL, 14, 1),
+  ('IP_TEST_FACS_001', 'IR_FACS001_015', '水泵故障检测', 'M_Z020_DEV_BA_WP', 'faultState', '故障状态', 2, NULL, NULL, '0', 15, 1);
 
 -- 4. 北区能耗监测设施巡检(每小时执行)
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3001',
-             'IP_TEST_FACS_002',
-             '北区能耗监测设施巡检',
-             2,  -- 自动巡检
-             0,  -- 待执行
-             1,  -- 目标类型:设施
-             '["NH01"]',
-             '北区-能耗监测',
-             '0 0 * * * ?',  -- 每小时整点执行
-             1,
-             '每小时检查北区能耗监测设备的数据采集状态',
-             'admin',
-             NOW()
-         );
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `description`, `create_by`, `create_time`) VALUES ('321283124S3001','IP_TEST_FACS_002','北区能耗监测设施巡检',2,0,1,'["NH01"]', '北区-能耗监测','0 0 * * * ?',1,'每小时检查北区能耗监测设备的数据采集状态','admin',NOW());
 
 -- 能耗监测设施巡检规则
 INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES
--- BA采集网关 M_W4_DEV_BA_GA
-('IP_TEST_FACS_002', 'IR_FACS002_001', '采集器在线状态', 'M_W4_DEV_BA_GA', 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 1, 1),
+  -- BA采集网关 M_W4_DEV_BA_GA
+  ('IP_TEST_FACS_002', 'IR_FACS002_001', '采集器在线状态', 'M_W4_DEV_BA_GA', 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 1, 1),
 
--- 电能采集测点 M_W4_DEV_BA_METER_E
-('IP_TEST_FACS_002', 'IR_FACS002_002', '电表读数非空', 'M_W4_DEV_BA_METER_E', 'value', '表计读数', 3, NULL, NULL, NULL, 2, 1),
+  -- 电能采集测点 M_W4_DEV_BA_METER_E
+  ('IP_TEST_FACS_002', 'IR_FACS002_002', '电表读数非空', 'M_W4_DEV_BA_METER_E', 'value', '表计读数', 3, NULL, NULL, NULL, 2, 1),
 
--- 用水采集测点 M_W4_DEV_BA_METER_W
-('IP_TEST_FACS_002', 'IR_FACS002_003', '水表读数非空', 'M_W4_DEV_BA_METER_W', 'value', '表计读数', 3, NULL, NULL, NULL, 3, 1);
+  -- 用水采集测点 M_W4_DEV_BA_METER_W
+  ('IP_TEST_FACS_002', 'IR_FACS002_003', '水表读数非空', 'M_W4_DEV_BA_METER_W', 'value', '表计读数', 3, NULL, NULL, NULL, 3, 1);
 
 
 -- 5. 北区充电桩设施巡检(每30分钟)
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3001',
-             'IP_TEST_FACS_003',
-             '北区充电桩运行状态巡检',
-             2,  -- 自动巡检
-             0,  -- 待执行
-             1,  -- 目标类型:设施
-             '["Charge01"]',
-             '北区-充电桩监测',
-             '0 0,30 * * * ?',  -- 每30分钟
-             1,
-             '实时监控北区充电桩的运行状态和关键参数',
-             'admin',
-             NOW()
-         );
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `description`, `create_by`, `create_time`) VALUES ('321283124S3001','IP_TEST_FACS_003','北区充电桩运行状态巡检',2,0,1,'["Charge01"]','北区-充电桩监测','0 0,30 * * * ?',1,'实时监控北区充电桩的运行状态和关键参数','admin',NOW());
 
 -- 充电桩设施巡检规则
 INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES
--- 充电主机 M_W2_DEV_CHARGING_HOST
-('IP_TEST_FACS_003', 'IR_FACS003_001', '充电桩主机在线', 'M_W2_DEV_CHARGING_HOST', 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 1, 1),
-('IP_TEST_FACS_003', 'IR_FACS003_002', '充电枪数量检查', 'M_W2_DEV_CHARGING_HOST', 'gunCount', '充电枪数量', 1, '1', '16', NULL, 2, 1),
+  -- 充电主机 M_W2_DEV_CHARGING_HOST
+  ('IP_TEST_FACS_003', 'IR_FACS003_001', '充电桩主机在线', 'M_W2_DEV_CHARGING_HOST', 'deviceStatus', '设备状态', 4, NULL, NULL, '1', 1, 1),
+  ('IP_TEST_FACS_003', 'IR_FACS003_002', '充电枪数量检查', 'M_W2_DEV_CHARGING_HOST', 'gunCount', '充电枪数量', 1, '1', '16', NULL, 2, 1),
 
--- 充电枪 M_W2_DEV_CHARGING_PILE
-('IP_TEST_FACS_003', 'IR_FACS003_003', '充电枪状态检查', 'M_W2_DEV_CHARGING_PILE', 'status', '状态', 3, NULL, NULL, NULL, 3, 1),
-('IP_TEST_FACS_003', 'IR_FACS003_004', '输出电压范围', 'M_W2_DEV_CHARGING_PILE', 'outputVoltage', '输出电压', 1, '0', '1000', NULL, 4, 1),
-('IP_TEST_FACS_003', 'IR_FACS003_005', '输出电流范围', 'M_W2_DEV_CHARGING_PILE', 'outputCurrent', '输出电流', 1, '0', '500', NULL, 5, 1),
-('IP_TEST_FACS_003', 'IR_FACS003_006', '枪线温度范围', 'M_W2_DEV_CHARGING_PILE', 'gunTemperature', '枪线温度', 1, '-20', '80', NULL, 6, 1);
+  -- 充电枪 M_W2_DEV_CHARGING_PILE
+  ('IP_TEST_FACS_003', 'IR_FACS003_003', '充电枪状态检查', 'M_W2_DEV_CHARGING_PILE', 'status', '状态', 3, NULL, NULL, NULL, 3, 1),
+  ('IP_TEST_FACS_003', 'IR_FACS003_004', '输出电压范围', 'M_W2_DEV_CHARGING_PILE', 'outputVoltage', '输出电压', 1, '0', '1000', NULL, 4, 1),
+  ('IP_TEST_FACS_003', 'IR_FACS003_005', '输出电流范围', 'M_W2_DEV_CHARGING_PILE', 'outputCurrent', '输出电流', 1, '0', '500', NULL, 5, 1),
+  ('IP_TEST_FACS_003', 'IR_FACS003_006', '枪线温度范围', 'M_W2_DEV_CHARGING_PILE', 'gunTemperature', '枪线温度', 1, '-20', '80', NULL, 6, 1);
 
 
 -- 6. 南区照明设施巡检(每天晚上7点)
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3002',
-             'IP_TEST_FACS_004',
-             '南区照明设施夜间巡检',
-             2,  -- 自动巡检
-             0,  -- 待执行
-             1,  -- 目标类型:设施
-             '["Z-ZM-02"]',
-             '南区-照明设施',
-             '0 0 19 * * ?',  -- 每天晚上7点
-             1,
-             '每日傍晚检查南区照明设施的运行状态',
-             'admin',
-             NOW()
-         );
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `description`, `create_by`, `create_time`) VALUES ('321283124S3002','IP_TEST_FACS_004','南区照明设施夜间巡检',2,0,1,'["Z-ZM-02"]','南区-照明设施','0 0 19 * * ?',1,'每日傍晚检查南区照明设施的运行状态','admin',NOW());
 
 -- 照明设施巡检规则
 INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES
--- 照明灯组 M_Z010_DEV_SQUARE_LIGHT
-('IP_TEST_FACS_004', 'IR_FACS004_001', '灯组设备状态', 'M_Z010_DEV_SQUARE_LIGHT', 'deviceStatus', '设备状态', 2, NULL, NULL, '1', 1, 1),
-('IP_TEST_FACS_004', 'IR_FACS004_002', '信号强度检查', 'M_Z010_DEV_SQUARE_LIGHT', 'csq', '信号强度', 1, '5', '31', NULL, 2, 1),
-('IP_TEST_FACS_004', 'IR_FACS004_003', '电压范围检查', 'M_Z010_DEV_SQUARE_LIGHT', 'voltage', '电压', 1, '180', '260', NULL, 3, 1),
-('IP_TEST_FACS_004', 'IR_FACS004_004', '电流范围检查', 'M_Z010_DEV_SQUARE_LIGHT', 'current', '电流', 1, '0', '20', NULL, 4, 1),
-('IP_TEST_FACS_004', 'IR_FACS004_005', '设备温度检查', 'M_Z010_DEV_SQUARE_LIGHT', 'temperature', '设备温度', 1, '-30', '70', NULL, 5, 1),
+  -- 照明灯组 M_Z010_DEV_SQUARE_LIGHT
+  ('IP_TEST_FACS_004', 'IR_FACS004_001', '灯组设备状态', 'M_Z010_DEV_SQUARE_LIGHT', 'deviceStatus', '设备状态', 2, NULL, NULL, '1', 1, 1),
+  ('IP_TEST_FACS_004', 'IR_FACS004_002', '信号强度检查', 'M_Z010_DEV_SQUARE_LIGHT', 'csq', '信号强度', 1, '5', '31', NULL, 2, 1),
+  ('IP_TEST_FACS_004', 'IR_FACS004_003', '电压范围检查', 'M_Z010_DEV_SQUARE_LIGHT', 'voltage', '电压', 1, '180', '260', NULL, 3, 1),
+  ('IP_TEST_FACS_004', 'IR_FACS004_004', '电流范围检查', 'M_Z010_DEV_SQUARE_LIGHT', 'current', '电流', 1, '0', '20', NULL, 4, 1),
+  ('IP_TEST_FACS_004', 'IR_FACS004_005', '设备温度检查', 'M_Z010_DEV_SQUARE_LIGHT', 'temperature', '设备温度', 1, '-30', '70', NULL, 5, 1),
 
 -- 照明集中器 M_Z010_DEV_SQUARE_CONCENTRATOR
-('IP_TEST_FACS_004', 'IR_FACS004_006', '集中器设备状态', 'M_Z010_DEV_SQUARE_CONCENTRATOR', 'deviceStatus', '设备状态', 2, NULL, NULL, '1', 6, 1),
-('IP_TEST_FACS_004', 'IR_FACS004_007', 'A相电压范围', 'M_Z010_DEV_SQUARE_CONCENTRATOR', 'ua', 'A相电压', 1, '180', '260', NULL, 7, 1),
-('IP_TEST_FACS_004', 'IR_FACS004_008', 'B相电压范围', 'M_Z010_DEV_SQUARE_CONCENTRATOR', 'ub', 'B相电压', 1, '180', '260', NULL, 8, 1),
-('IP_TEST_FACS_004', 'IR_FACS004_009', 'C相电压范围', 'M_Z010_DEV_SQUARE_CONCENTRATOR', 'uc', 'C相电压', 1, '180', '260', NULL, 9, 1);
-
+  ('IP_TEST_FACS_004', 'IR_FACS004_006', '集中器设备状态', 'M_Z010_DEV_SQUARE_CONCENTRATOR', 'deviceStatus', '设备状态', 2, NULL, NULL, '1', 6, 1),
+  ('IP_TEST_FACS_004', 'IR_FACS004_007', 'A相电压范围', 'M_Z010_DEV_SQUARE_CONCENTRATOR', 'ua', 'A相电压', 1, '180', '260', NULL, 7, 1),
+  ('IP_TEST_FACS_004', 'IR_FACS004_008', 'B相电压范围', 'M_Z010_DEV_SQUARE_CONCENTRATOR', 'ub', 'B相电压', 1, '180', '260', NULL, 8, 1),
+  ('IP_TEST_FACS_004', 'IR_FACS004_009', 'C相电压范围', 'M_Z010_DEV_SQUARE_CONCENTRATOR', 'uc', 'C相电压', 1, '180', '260', NULL, 9, 1);
 
 -- 7. 电力监控设施巡检(每2小时)
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3001',
-             'IP_TEST_FACS_005',
-             '电力监控设备巡检',
-             2,  -- 自动巡检
-             0,  -- 待执行
-             1,  -- 目标类型:设施
-             '["W201"]',
-             '北区-供电网',
-             '0 0 */2 * * ?',  -- 每2小时
-             1,
-             '定期检查电力监控设备的运行状态和电力参数',
-             'admin',
-             NOW()
-         );
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `description`, `create_by`, `create_time`) VALUES ('321283124S3001','IP_TEST_FACS_005','电力监控设备巡检',2,0,1,'["W201"]','北区-供电网','0 0 */2 * * ?',1,'定期检查电力监控设备的运行状态和电力参数','admin',NOW());
 
 -- 电力监控设施巡检规则
 INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `device_model`, `attr_key`, `attr_name`, `check_type`, `min_value`, `max_value`, `expect_value`, `rule_order`, `enabled`) VALUES
--- 电力保护装置 M_W4_DEV_ELEC_MONITOR_BHZZ
-('IP_TEST_FACS_005', 'IR_FACS005_001', '保护装置在线', 'M_W4_DEV_ELEC_MONITOR_BHZZ', 'deviceStatus', '在线状态', 2, NULL, NULL, '1', 1, 1),
-('IP_TEST_FACS_005', 'IR_FACS005_002', '频率范围检查', 'M_W4_DEV_ELEC_MONITOR_BHZZ', 'Fr', '频率', 1, '49', '51', NULL, 2, 1),
-('IP_TEST_FACS_005', 'IR_FACS005_003', 'A相电流范围', 'M_W4_DEV_ELEC_MONITOR_BHZZ', 'Ia', 'A相电流', 1, '0', '1000', NULL, 3, 1),
-('IP_TEST_FACS_005', 'IR_FACS005_004', 'AB线电压范围', 'M_W4_DEV_ELEC_MONITOR_BHZZ', 'Uab', 'AB线电压', 1, '350', '420', NULL, 4, 1),
+  -- 电力保护装置 M_W4_DEV_ELEC_MONITOR_BHZZ
+  ('IP_TEST_FACS_005', 'IR_FACS005_001', '保护装置在线', 'M_W4_DEV_ELEC_MONITOR_BHZZ', 'deviceStatus', '在线状态', 2, NULL, NULL, '1', 1, 1),
+  ('IP_TEST_FACS_005', 'IR_FACS005_002', '频率范围检查', 'M_W4_DEV_ELEC_MONITOR_BHZZ', 'Fr', '频率', 1, '49', '51', NULL, 2, 1),
+  ('IP_TEST_FACS_005', 'IR_FACS005_003', 'A相电流范围', 'M_W4_DEV_ELEC_MONITOR_BHZZ', 'Ia', 'A相电流', 1, '0', '1000', NULL, 3, 1),
+  ('IP_TEST_FACS_005', 'IR_FACS005_004', 'AB线电压范围', 'M_W4_DEV_ELEC_MONITOR_BHZZ', 'Uab', 'AB线电压', 1, '350', '420', NULL, 4, 1),
 
 -- 多功能电表 M_W4_DEV_ELEC_MONITOR_DB
-('IP_TEST_FACS_005', 'IR_FACS005_005', '电表在线状态', 'M_W4_DEV_ELEC_MONITOR_DB', 'deviceStatus', '在线状态', 2, NULL, NULL, '1', 5, 1),
-('IP_TEST_FACS_005', 'IR_FACS005_006', '总功率因数', 'M_W4_DEV_ELEC_MONITOR_DB', 'Pf', '总功率因数', 1, '0.7', '1', NULL, 6, 1),
-('IP_TEST_FACS_005', 'IR_FACS005_007', '电流不平衡度', 'M_W4_DEV_ELEC_MONITOR_DB', 'CUB', '电流不平衡度', 1, '0', '30', NULL, 7, 1),
-('IP_TEST_FACS_005', 'IR_FACS005_008', '电压不平衡度', 'M_W4_DEV_ELEC_MONITOR_DB', 'VUB', '电压不平衡度', 1, '0', '10', NULL, 8, 1),
-('IP_TEST_FACS_005', 'IR_FACS005_009', '环境温度范围', 'M_W4_DEV_ELEC_MONITOR_DB', 'Temp', '环境温度', 1, '-20', '60', NULL, 9, 1);
+  ('IP_TEST_FACS_005', 'IR_FACS005_005', '电表在线状态', 'M_W4_DEV_ELEC_MONITOR_DB', 'deviceStatus', '在线状态', 2, NULL, NULL, '1', 5, 1),
+  ('IP_TEST_FACS_005', 'IR_FACS005_006', '总功率因数', 'M_W4_DEV_ELEC_MONITOR_DB', 'Pf', '总功率因数', 1, '0.7', '1', NULL, 6, 1),
+  ('IP_TEST_FACS_005', 'IR_FACS005_007', '电流不平衡度', 'M_W4_DEV_ELEC_MONITOR_DB', 'CUB', '电流不平衡度', 1, '0', '30', NULL, 7, 1),
+  ('IP_TEST_FACS_005', 'IR_FACS005_008', '电压不平衡度', 'M_W4_DEV_ELEC_MONITOR_DB', 'VUB', '电压不平衡度', 1, '0', '10', NULL, 8, 1),
+  ('IP_TEST_FACS_005', 'IR_FACS005_009', '环境温度范围', 'M_W4_DEV_ELEC_MONITOR_DB', 'Temp', '环境温度', 1, '-20', '60', NULL, 9, 1);
 
 
 -- =====================================================
@@ -2512,203 +2381,128 @@ INSERT INTO `adm_op_inspection_rule` (`plan_code`, `rule_code`, `rule_name`, `de
 -- =====================================================
 
 -- 8. 北区水箱人工巡检
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `plan_time`, `executor`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3001',
-             'IP_TEST_DEV_001',
-             '北区水箱人工巡检',
-             1,  -- 手动巡检
-             0,  -- 待执行
-             2,  -- 目标类型:设备
-             '["Z020-B-WT-1"]',
-             '北区水箱',
-             NULL,  -- 手动巡检无cron
-             0,     -- 不启用调度
-             DATE_ADD(NOW(), INTERVAL 1 DAY),  -- 计划明天执行
-             '张三',
-             '人工现场检查北区水箱的外观、管道连接、阀门状态、液位显示等',
-             'admin',
-             NOW()
-         );
-
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `plan_time`, `executor`, `description`, `create_by`, `create_time`) VALUES ('321283124S3001','IP_TEST_DEV_001','北区水箱人工巡检',1,0,2,'["Z020-B-WT-1"]','北区水箱',NULL,0,DATE_ADD(NOW(), INTERVAL 1 DAY),'张三','人工现场检查北区水箱的外观、管道连接、阀门状态、液位显示等','admin',NOW());
 
 -- 9. 北区充电桩群控箱人工巡检
-INSERT INTO `adm_op_inspection_plan` (
-    `area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,
-    `target_type`, `target_codes`, `target_names`, `cron_expression`,
-    `schedule_enabled`, `plan_time`, `executor`, `description`, `create_by`, `create_time`
-) VALUES (
-             '321283124S3001',
-             'IP_TEST_DEV_002',
-             '充电桩群控箱01人工巡检',
-             1,  -- 手动巡检
-             0,  -- 待执行
-             2,  -- 目标类型:设备
-             '["W2-B-CHARGING-HOST-01", "W2-B-CHARGING-HOST-02"]',
-             '充电桩群控箱01, 充电桩群控箱02',
-             NULL,  -- 手动巡检无cron
-             0,     -- 不启用调度
-             DATE_ADD(NOW(), INTERVAL 2 DAY),  -- 计划后天执行
-             '李四',
-             '人工现场检查充电桩群控箱的外观完整性、接线端子、散热风扇、指示灯状态、充电枪座等',
-             'admin',
-             NOW()
-         );
-
-
--- =====================================================
--- 四、查询验证
--- =====================================================
-
--- 查看已创建的巡检计划
--- SELECT plan_code, plan_name, plan_type, target_type, target_names, cron_expression, schedule_enabled
--- FROM adm_op_inspection_plan
--- WHERE plan_code LIKE 'IP_TEST%'
--- ORDER BY plan_code;
-
--- 查看巡检规则统计
--- SELECT p.plan_code, p.plan_name, COUNT(r.id) as rule_count
--- FROM adm_op_inspection_plan p
--- LEFT JOIN adm_op_inspection_rule r ON p.plan_code = r.plan_code
--- WHERE p.plan_code LIKE 'IP_TEST%'
--- GROUP BY p.plan_code, p.plan_name
--- ORDER BY p.plan_code;
-
--- 查看所有巡检规则详情
--- SELECT r.plan_code, r.rule_code, r.rule_name, r.device_model, r.attr_key, r.check_type,
---        r.min_value, r.max_value, r.expect_value
--- FROM adm_op_inspection_rule r
--- WHERE r.plan_code LIKE 'IP_TEST%'
--- ORDER BY r.plan_code, r.rule_order;
-
+INSERT INTO `adm_op_inspection_plan` (`area_code`, `plan_code`, `plan_name`, `plan_type`, `plan_status`,`target_type`, `target_codes`, `target_names`, `cron_expression`,`schedule_enabled`, `plan_time`, `executor`, `description`, `create_by`, `create_time`) VALUES ('321283124S3001','IP_TEST_DEV_002','充电桩群控箱01人工巡检',1,0,2, '["W2-B-CHARGING-HOST-01", "W2-B-CHARGING-HOST-02"]','充电桩群控箱01, 充电桩群控箱02',NULL, 0,DATE_ADD(NOW(), INTERVAL 2 DAY),'李四','人工现场检查充电桩群控箱的外观完整性、接线端子、散热风扇、指示灯状态、充电枪座等','admin',NOW());
 
 -- ============================================================================
--- 示例数据 - 数据源配置
+-- 自定义报表数据 - 数据源配置
 -- ============================================================================
 
 -- 1. 光伏产能数据源
-INSERT INTO `adm_report_datasource` (`ds_code`, `ds_name`, `ds_desc`, `main_table`, `main_alias`, `base_where`, `default_order`, `category`, `icon`, `sort_order`, `status`) VALUES
-    ('pv_supply', '光伏产能统计', '光伏发电量、自用电量、上网电量及收益统计', 'adm_ems_pv_supply_h', 't', 't.date IS NOT NULL', 't.record_time DESC', 'prod', 'el-icon-sunny', 1, 1);
-
+INSERT INTO `adm_report_datasource` (`ds_code`, `ds_name`, `ds_desc`, `main_table`, `main_alias`, `base_where`, `default_order`, `category`, `icon`, `sort_order`, `status`) VALUES ('pv_supply', '光伏产能统计', '光伏发电量、自用电量、上网电量及收益统计', 'adm_ems_pv_supply_h', 't', 't.date IS NOT NULL', 't.record_time DESC', 'prod', 'el-icon-sunny', 1, 1);
 -- 2. 用电统计数据源
-INSERT INTO `adm_report_datasource` (`ds_code`, `ds_name`, `ds_desc`, `main_table`, `main_alias`, `base_where`, `default_order`, `category`, `icon`, `sort_order`, `status`) VALUES
-    ('elec_meter', '用电统计', '区域/设备用电量及电费统计,支持峰谷电分析', 'adm_elec_meter_h', 't', 't.date IS NOT NULL', 't.record_time DESC', 'elec', 'el-icon-lightning', 2, 1);
-
+INSERT INTO `adm_report_datasource` (`ds_code`, `ds_name`, `ds_desc`, `main_table`, `main_alias`, `base_where`, `default_order`, `category`, `icon`, `sort_order`, `status`) VALUES ('elec_meter', '用电统计', '区域/设备用电量及电费统计,支持峰谷电分析', 'adm_elec_meter_h', 't', 't.date IS NOT NULL', 't.record_time DESC', 'elec', 'el-icon-lightning', 2, 1);
 -- 3. 用水统计数据源
-INSERT INTO `adm_report_datasource` (`ds_code`, `ds_name`, `ds_desc`, `main_table`, `main_alias`, `base_where`, `default_order`, `category`, `icon`, `sort_order`, `status`) VALUES
-    ('water_meter', '用水统计', '区域/设备用水量及水费统计', 'adm_water_meter_h', 't', 't.date IS NOT NULL', 't.record_time DESC', 'water', 'el-icon-cold-drink', 3, 1);
-
+INSERT INTO `adm_report_datasource` (`ds_code`, `ds_name`, `ds_desc`, `main_table`, `main_alias`, `base_where`, `default_order`, `category`, `icon`, `sort_order`, `status`) VALUES ('water_meter', '用水统计', '区域/设备用水量及水费统计', 'adm_water_meter_h', 't', 't.date IS NOT NULL', 't.record_time DESC', 'water', 'el-icon-cold-drink', 3, 1);
 -- 4. 储能统计数据源
-INSERT INTO `adm_report_datasource` (`ds_code`, `ds_name`, `ds_desc`, `main_table`, `main_alias`, `base_where`, `default_order`, `category`, `icon`, `sort_order`, `status`) VALUES
-    ('elec_store', '储能统计', '储能设备充放电量统计', 'adm_ems_elec_store_h', 't', 't.date IS NOT NULL', 't.record_time DESC', 'store', 'el-icon-coin', 4, 1);
+INSERT INTO `adm_report_datasource` (`ds_code`, `ds_name`, `ds_desc`, `main_table`, `main_alias`, `base_where`, `default_order`, `category`, `icon`, `sort_order`, `status`) VALUES ('elec_store', '储能统计', '储能设备充放电量统计', 'adm_ems_elec_store_h', 't', 't.date IS NOT NULL', 't.record_time DESC', 'store', 'el-icon-coin', 4, 1);
 
 
 -- ============================================================================
--- 示例数据 - 光伏产能字段配置
+-- 自定义报表数据 - 光伏产能字段配置
 -- ============================================================================
 INSERT INTO `adm_report_field` (`ds_code`, `field_code`, `field_name`, `field_alias`, `field_expr`, `field_type`, `field_format`, `decimals`, `unit`, `is_default`, `is_required`, `is_filterable`, `is_sortable`, `is_aggregatable`, `aggregate_func`, `group_name`, `min_width`, `sort_order`, `status`) VALUES
--- 基础信息字段
-('pv_supply', 'area_code', '区域代码', NULL, 't.area_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 1, 1),
-('pv_supply', 'area_name', '区域名称', NULL, 'a.area_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 2, 1),
-('pv_supply', 'facs_code', '设施代码', NULL, 't.facs_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 3, 1),
-('pv_supply', 'facs_name', '设施名称', NULL, 'f.facs_name', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 150, 4, 1),
-
--- 时间字段
-('pv_supply', 'record_time', '记录时间', NULL, 't.record_time', 'datetime', 'yyyy-MM-dd HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 160, 10, 1),
-('pv_supply', 'date', '日期', NULL, 't.date', 'date', 'yyyy-MM-dd', NULL, NULL, 1, 0, 1, 1, 0, NULL, '时间信息', 110, 11, 1),
-('pv_supply', 'time', '时间', NULL, 't.time', 'time', 'HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 12, 1),
-('pv_supply', 'time_index', '时间序列', NULL, 't.time_index', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 13, 1),
-('pv_supply', 'stat_month', '统计月份', 'stat_month', 'DATE_FORMAT(t.date, ''%Y-%m'')', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 14, 1),
-('pv_supply', 'stat_year', '统计年份', 'stat_year', 'YEAR(t.date)', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 15, 1),
-
--- 产能数据字段
-('pv_supply', 'gen_elec_quantity', '发电量', NULL, 't.gen_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '产能数据', 120, 20, 1),
-('pv_supply', 'use_elec_quantity', '自用电量', NULL, 't.use_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '产能数据', 120, 21, 1),
-('pv_supply', 'up_elec_quantity', '上网电量', NULL, 't.up_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '产能数据', 120, 22, 1),
-('pv_supply', 'up_elec_earn', '上网收益', NULL, 't.up_elec_earn', 'number', NULL, 2, '元', 1, 0, 1, 1, 1, 'SUM', '产能数据', 120, 23, 1),
-('pv_supply', 'up_unit_price', '上网电价', NULL, 't.up_unit_price', 'number', NULL, 4, '元/kW·h', 0, 0, 1, 1, 0, 'AVG', '产能数据', 120, 24, 1),
-
--- 计算字段
-('pv_supply', 'self_use_rate', '自用率', 'self_use_rate', 'ROUND(t.use_elec_quantity / NULLIF(t.gen_elec_quantity, 0) * 100, 2)', 'number', NULL, 2, '%', 0, 0, 1, 1, 0, NULL, '分析指标', 100, 30, 1);
+  -- 基础信息字段
+  ('pv_supply', 'area_code', '区域代码', NULL, 't.area_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 1, 1),
+  ('pv_supply', 'area_name', '区域名称', NULL, 'a.area_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 2, 1),
+  ('pv_supply', 'facs_code', '设施代码', NULL, 't.facs_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 3, 1),
+  ('pv_supply', 'facs_name', '设施名称', NULL, 'f.facs_name', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 150, 4, 1),
+
+  -- 时间字段
+  ('pv_supply', 'record_time', '记录时间', NULL, 't.record_time', 'datetime', 'yyyy-MM-dd HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 160, 10, 1),
+  ('pv_supply', 'date', '日期', NULL, 't.date', 'date', 'yyyy-MM-dd', NULL, NULL, 1, 0, 1, 1, 0, NULL, '时间信息', 110, 11, 1),
+  ('pv_supply', 'time', '时间', NULL, 't.time', 'time', 'HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 12, 1),
+  ('pv_supply', 'time_index', '时间序列', NULL, 't.time_index', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 13, 1),
+  ('pv_supply', 'stat_month', '统计月份', 'stat_month', 'DATE_FORMAT(t.date, ''%Y-%m'')', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 14, 1),
+  ('pv_supply', 'stat_year', '统计年份', 'stat_year', 'YEAR(t.date)', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 15, 1),
+
+  -- 产能数据字段
+  ('pv_supply', 'gen_elec_quantity', '发电量', NULL, 't.gen_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '产能数据', 120, 20, 1),
+  ('pv_supply', 'use_elec_quantity', '自用电量', NULL, 't.use_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '产能数据', 120, 21, 1),
+  ('pv_supply', 'up_elec_quantity', '上网电量', NULL, 't.up_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '产能数据', 120, 22, 1),
+  ('pv_supply', 'up_elec_earn', '上网收益', NULL, 't.up_elec_earn', 'number', NULL, 2, '元', 1, 0, 1, 1, 1, 'SUM', '产能数据', 120, 23, 1),
+  ('pv_supply', 'up_unit_price', '上网电价', NULL, 't.up_unit_price', 'number', NULL, 4, '元/kW·h', 0, 0, 1, 1, 0, 'AVG', '产能数据', 120, 24, 1),
+
+  -- 计算字段
+  ('pv_supply', 'self_use_rate', '自用率', 'self_use_rate', 'ROUND(t.use_elec_quantity / NULLIF(t.gen_elec_quantity, 0) * 100, 2)', 'number', NULL, 2, '%', 0, 0, 1, 1, 0, NULL, '分析指标', 100, 30, 1);
 
 
 -- ============================================================================
--- 示例数据 - 用电统计字段配置
+-- 自定义报表数据 - 用电统计字段配置
 -- ============================================================================
 INSERT INTO `adm_report_field` (`ds_code`, `field_code`, `field_name`, `field_alias`, `field_expr`, `field_type`, `field_format`, `decimals`, `unit`, `is_default`, `is_required`, `is_filterable`, `is_sortable`, `is_aggregatable`, `aggregate_func`, `group_name`, `min_width`, `sort_order`, `status`) VALUES
--- 基础信息字段
-('elec_meter', 'area_code', '区域代码', NULL, 't.area_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 1, 1),
-('elec_meter', 'area_name', '区域名称', NULL, 'a.area_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 2, 1),
-('elec_meter', 'device_code', '设备代码', NULL, 't.device_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 150, 3, 1),
-('elec_meter', 'device_name', '设备名称', NULL, 'd.device_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 4, 1),
-
--- 时间字段
-('elec_meter', 'record_time', '记录时间', NULL, 't.record_time', 'datetime', 'yyyy-MM-dd HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 160, 10, 1),
-('elec_meter', 'date', '日期', NULL, 't.date', 'date', 'yyyy-MM-dd', NULL, NULL, 1, 0, 1, 1, 0, NULL, '时间信息', 110, 11, 1),
-('elec_meter', 'time', '时间', NULL, 't.time', 'time', 'HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 12, 1),
-('elec_meter', 'time_index', '时间序列', NULL, 't.time_index', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 13, 1),
-('elec_meter', 'stat_month', '统计月份', 'stat_month', 'DATE_FORMAT(t.date, ''%Y-%m'')', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 14, 1),
-('elec_meter', 'stat_year', '统计年份', 'stat_year', 'YEAR(t.date)', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 15, 1),
-
--- 用电数据字段
-('elec_meter', 'elec_quantity', '用电量', NULL, 't.elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '用电数据', 120, 20, 1),
-('elec_meter', 'use_elec_cost', '用电费用', NULL, 't.use_elec_cost', 'number', NULL, 2, '元', 1, 0, 1, 1, 1, 'SUM', '用电数据', 120, 21, 1),
-('elec_meter', 'meter_type', '计量类型', NULL, 't.meter_type', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '用电数据', 100, 22, 1),
-('elec_meter', 'meter_type_name', '计量类型名称', 'meter_type_name', 'CASE t.meter_type WHEN 2 THEN ''尖峰'' WHEN 1 THEN ''高峰'' WHEN 0 THEN ''平峰'' WHEN -1 THEN ''低谷'' WHEN -2 THEN ''深谷'' ELSE ''未知'' END', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '用电数据', 100, 23, 1),
-('elec_meter', 'meter_unit_price', '单位电价', NULL, 't.meter_unit_price', 'number', NULL, 4, '元/kW·h', 0, 0, 1, 1, 0, 'AVG', '用电数据', 100, 24, 1),
-('elec_meter', 'meter_reading', '表计读数', NULL, 't.meter_reading', 'number', NULL, 2, NULL, 0, 0, 1, 1, 0, NULL, '用电数据', 120, 25, 1);
+  -- 基础信息字段
+  ('elec_meter', 'area_code', '区域代码', NULL, 't.area_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 1, 1),
+  ('elec_meter', 'area_name', '区域名称', NULL, 'a.area_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 2, 1),
+  ('elec_meter', 'device_code', '设备代码', NULL, 't.device_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 150, 3, 1),
+  ('elec_meter', 'device_name', '设备名称', NULL, 'd.device_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 4, 1),
+
+  -- 时间字段
+  ('elec_meter', 'record_time', '记录时间', NULL, 't.record_time', 'datetime', 'yyyy-MM-dd HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 160, 10, 1),
+  ('elec_meter', 'date', '日期', NULL, 't.date', 'date', 'yyyy-MM-dd', NULL, NULL, 1, 0, 1, 1, 0, NULL, '时间信息', 110, 11, 1),
+  ('elec_meter', 'time', '时间', NULL, 't.time', 'time', 'HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 12, 1),
+  ('elec_meter', 'time_index', '时间序列', NULL, 't.time_index', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 13, 1),
+  ('elec_meter', 'stat_month', '统计月份', 'stat_month', 'DATE_FORMAT(t.date, ''%Y-%m'')', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 14, 1),
+  ('elec_meter', 'stat_year', '统计年份', 'stat_year', 'YEAR(t.date)', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 15, 1),
+
+  -- 用电数据字段
+  ('elec_meter', 'elec_quantity', '用电量', NULL, 't.elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '用电数据', 120, 20, 1),
+  ('elec_meter', 'use_elec_cost', '用电费用', NULL, 't.use_elec_cost', 'number', NULL, 2, '元', 1, 0, 1, 1, 1, 'SUM', '用电数据', 120, 21, 1),
+  ('elec_meter', 'meter_type', '计量类型', NULL, 't.meter_type', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '用电数据', 100, 22, 1),
+  ('elec_meter', 'meter_type_name', '计量类型名称', 'meter_type_name', 'CASE t.meter_type WHEN 2 THEN ''尖峰'' WHEN 1 THEN ''高峰'' WHEN 0 THEN ''平峰'' WHEN -1 THEN ''低谷'' WHEN -2 THEN ''深谷'' ELSE ''未知'' END', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '用电数据', 100, 23, 1),
+  ('elec_meter', 'meter_unit_price', '单位电价', NULL, 't.meter_unit_price', 'number', NULL, 4, '元/kW·h', 0, 0, 1, 1, 0, 'AVG', '用电数据', 100, 24, 1),
+  ('elec_meter', 'meter_reading', '表计读数', NULL, 't.meter_reading', 'number', NULL, 2, NULL, 0, 0, 1, 1, 0, NULL, '用电数据', 120, 25, 1);
 
 
 -- ============================================================================
--- 示例数据 - 用水统计字段配置
+-- 自定义报表数据 - 用水统计字段配置
 -- ============================================================================
 INSERT INTO `adm_report_field` (`ds_code`, `field_code`, `field_name`, `field_alias`, `field_expr`, `field_type`, `field_format`, `decimals`, `unit`, `is_default`, `is_required`, `is_filterable`, `is_sortable`, `is_aggregatable`, `aggregate_func`, `group_name`, `min_width`, `sort_order`, `status`) VALUES
--- 基础信息字段
-('water_meter', 'area_code', '区域代码', NULL, 't.area_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 1, 1),
-('water_meter', 'area_name', '区域名称', NULL, 'a.area_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 2, 1),
-('water_meter', 'device_code', '设备代码', NULL, 't.device_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 150, 3, 1),
-('water_meter', 'device_name', '设备名称', NULL, 'd.device_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 4, 1),
-
--- 时间字段
-('water_meter', 'record_time', '记录时间', NULL, 't.record_time', 'datetime', 'yyyy-MM-dd HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 160, 10, 1),
-('water_meter', 'date', '日期', NULL, 't.date', 'date', 'yyyy-MM-dd', NULL, NULL, 1, 0, 1, 1, 0, NULL, '时间信息', 110, 11, 1),
-('water_meter', 'time', '时间', NULL, 't.time', 'time', 'HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 12, 1),
-('water_meter', 'time_index', '时间序列', NULL, 't.time_index', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 13, 1),
-('water_meter', 'stat_month', '统计月份', 'stat_month', 'DATE_FORMAT(t.date, ''%Y-%m'')', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 14, 1),
-('water_meter', 'stat_year', '统计年份', 'stat_year', 'YEAR(t.date)', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 15, 1),
-
--- 用水数据字段
-('water_meter', 'water_quantity', '用水量', NULL, 't.water_quantity', 'number', NULL, 2, '吨', 1, 0, 1, 1, 1, 'SUM', '用水数据', 120, 20, 1),
-('water_meter', 'use_water_cost', '用水费用', NULL, 't.use_water_cost', 'number', NULL, 2, '元', 1, 0, 1, 1, 1, 'SUM', '用水数据', 120, 21, 1),
-('water_meter', 'meter_unit_price', '单位水价', NULL, 't.meter_unit_price', 'number', NULL, 4, '元/吨', 0, 0, 1, 1, 0, 'AVG', '用水数据', 100, 22, 1),
-('water_meter', 'meter_reading', '表计读数', NULL, 't.meter_reading', 'number', NULL, 2, NULL, 0, 0, 1, 1, 0, NULL, '用水数据', 120, 23, 1);
+  -- 基础信息字段
+  ('water_meter', 'area_code', '区域代码', NULL, 't.area_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 1, 1),
+  ('water_meter', 'area_name', '区域名称', NULL, 'a.area_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 2, 1),
+  ('water_meter', 'device_code', '设备代码', NULL, 't.device_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 150, 3, 1),
+  ('water_meter', 'device_name', '设备名称', NULL, 'd.device_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 4, 1),
+
+  -- 时间字段
+  ('water_meter', 'record_time', '记录时间', NULL, 't.record_time', 'datetime', 'yyyy-MM-dd HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 160, 10, 1),
+  ('water_meter', 'date', '日期', NULL, 't.date', 'date', 'yyyy-MM-dd', NULL, NULL, 1, 0, 1, 1, 0, NULL, '时间信息', 110, 11, 1),
+  ('water_meter', 'time', '时间', NULL, 't.time', 'time', 'HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 12, 1),
+  ('water_meter', 'time_index', '时间序列', NULL, 't.time_index', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 13, 1),
+  ('water_meter', 'stat_month', '统计月份', 'stat_month', 'DATE_FORMAT(t.date, ''%Y-%m'')', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 14, 1),
+  ('water_meter', 'stat_year', '统计年份', 'stat_year', 'YEAR(t.date)', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 15, 1),
+
+  -- 用水数据字段
+  ('water_meter', 'water_quantity', '用水量', NULL, 't.water_quantity', 'number', NULL, 2, '吨', 1, 0, 1, 1, 1, 'SUM', '用水数据', 120, 20, 1),
+  ('water_meter', 'use_water_cost', '用水费用', NULL, 't.use_water_cost', 'number', NULL, 2, '元', 1, 0, 1, 1, 1, 'SUM', '用水数据', 120, 21, 1),
+  ('water_meter', 'meter_unit_price', '单位水价', NULL, 't.meter_unit_price', 'number', NULL, 4, '元/吨', 0, 0, 1, 1, 0, 'AVG', '用水数据', 100, 22, 1),
+  ('water_meter', 'meter_reading', '表计读数', NULL, 't.meter_reading', 'number', NULL, 2, NULL, 0, 0, 1, 1, 0, NULL, '用水数据', 120, 23, 1);
 
 
 -- ============================================================================
--- 示例数据 - 储能统计字段配置
+-- 自定义报表数据 - 储能统计字段配置
 -- ============================================================================
 INSERT INTO `adm_report_field` (`ds_code`, `field_code`, `field_name`, `field_alias`, `field_expr`, `field_type`, `field_format`, `decimals`, `unit`, `is_default`, `is_required`, `is_filterable`, `is_sortable`, `is_aggregatable`, `aggregate_func`, `group_name`, `min_width`, `sort_order`, `status`) VALUES
--- 基础信息字段
-('elec_store', 'area_code', '区域代码', NULL, 't.area_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 1, 1),
-('elec_store', 'area_name', '区域名称', NULL, 'a.area_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 2, 1),
-('elec_store', 'facs_code', '设施代码', NULL, 't.facs_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 3, 1),
-('elec_store', 'facs_name', '设施名称', NULL, 'f.facs_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 4, 1),
+  -- 基础信息字段
+  ('elec_store', 'area_code', '区域代码', NULL, 't.area_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 1, 1),
+  ('elec_store', 'area_name', '区域名称', NULL, 'a.area_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 2, 1),
+  ('elec_store', 'facs_code', '设施代码', NULL, 't.facs_code', 'string', NULL, NULL, NULL, 0, 0, 1, 1, 0, NULL, '基础信息', 120, 3, 1),
+  ('elec_store', 'facs_name', '设施名称', NULL, 'f.facs_name', 'string', NULL, NULL, NULL, 1, 0, 1, 1, 0, NULL, '基础信息', 150, 4, 1),
 
--- 时间字段
-('elec_store', 'record_time', '记录时间', NULL, 't.record_time', 'datetime', 'yyyy-MM-dd HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 160, 10, 1),
-('elec_store', 'date', '日期', NULL, 't.date', 'date', 'yyyy-MM-dd', NULL, NULL, 1, 0, 1, 1, 0, NULL, '时间信息', 110, 11, 1),
-('elec_store', 'time', '时间', NULL, 't.time', 'time', 'HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 12, 1),
-('elec_store', 'time_index', '时间序列', NULL, 't.time_index', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 13, 1),
+  -- 时间字段
+  ('elec_store', 'record_time', '记录时间', NULL, 't.record_time', 'datetime', 'yyyy-MM-dd HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 160, 10, 1),
+  ('elec_store', 'date', '日期', NULL, 't.date', 'date', 'yyyy-MM-dd', NULL, NULL, 1, 0, 1, 1, 0, NULL, '时间信息', 110, 11, 1),
+  ('elec_store', 'time', '时间', NULL, 't.time', 'time', 'HH:mm:ss', NULL, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 12, 1),
+  ('elec_store', 'time_index', '时间序列', NULL, 't.time_index', 'number', NULL, 0, NULL, 0, 0, 1, 1, 0, NULL, '时间信息', 100, 13, 1),
 
--- 储能数据字段
-('elec_store', 'charge_elec_quantity', '充电电量', NULL, 't.charge_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '储能数据', 120, 20, 1),
-('elec_store', 'discharge_elec_quantity', '放电电量', NULL, 't.discharge_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '储能数据', 120, 21, 1),
+  -- 储能数据字段
+  ('elec_store', 'charge_elec_quantity', '充电电量', NULL, 't.charge_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '储能数据', 120, 20, 1),
+  ('elec_store', 'discharge_elec_quantity', '放电电量', NULL, 't.discharge_elec_quantity', 'number', NULL, 2, 'kW·h', 1, 0, 1, 1, 1, 'SUM', '储能数据', 120, 21, 1),
 
--- 计算字段
-('elec_store', 'net_quantity', '净电量', 'net_quantity', 'ROUND(t.discharge_elec_quantity - t.charge_elec_quantity, 2)', 'number', NULL, 2, 'kW·h', 0, 0, 1, 1, 1, 'SUM', '分析指标', 120, 30, 1);
+  -- 计算字段
+  ('elec_store', 'net_quantity', '净电量', 'net_quantity', 'ROUND(t.discharge_elec_quantity - t.charge_elec_quantity, 2)', 'number', NULL, 2, 'kW·h', 0, 0, 1, 1, 1, 'SUM', '分析指标', 120, 30, 1);
 
 
 -- ============================================================================
@@ -2757,24 +2551,20 @@ SELECT ds_code, field_code, 'eq', '等于', '=', 1, 0, 4, 1 FROM `adm_report_fie
 -- ============================================================================
 
 -- 光伏产能关联
-INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES
-                                                                                                                                                                                                 ('pv_supply', 'rel_area', '区域关联', 'LEFT', 'adm_area', 'a', 't.area_code = a.area_code', 1, 1, 1, '用于获取区域名称'),
-                                                                                                                                                                                                 ('pv_supply', 'rel_facs', '设施关联', 'LEFT', 'adm_ems_facs', 'f', 't.facs_code = f.facs_code', 1, 2, 1, '用于获取设施名称');
+INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES ('pv_supply', 'rel_area', '区域关联', 'LEFT', 'adm_area', 'a', 't.area_code = a.area_code', 1, 1, 1, '用于获取区域名称');
+INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES ('pv_supply', 'rel_facs', '设施关联', 'LEFT', 'adm_ems_facs', 'f', 't.facs_code = f.facs_code', 1, 2, 1, '用于获取设施名称');
 
 -- 用电统计关联
-INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES
-                                                                                                                                                                                                 ('elec_meter', 'rel_area', '区域关联', 'LEFT', 'adm_area', 'a', 't.area_code = a.area_code', 1, 1, 1, '用于获取区域名称'),
-                                                                                                                                                                                                 ('elec_meter', 'rel_device', '设备关联', 'LEFT', 'adm_meter_device', 'd', 't.device_code = d.device_code', 1, 2, 1, '用于获取设备名称');
+INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES ('elec_meter', 'rel_area', '区域关联', 'LEFT', 'adm_area', 'a', 't.area_code = a.area_code', 1, 1, 1, '用于获取区域名称');
+INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES ('elec_meter', 'rel_device', '设备关联', 'LEFT', 'adm_meter_device', 'd', 't.device_code = d.device_code', 1, 2, 1, '用于获取设备名称');
 
 -- 用水统计关联
-INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES
-                                                                                                                                                                                                 ('water_meter', 'rel_area', '区域关联', 'LEFT', 'adm_area', 'a', 't.area_code = a.area_code', 1, 1, 1, '用于获取区域名称'),
-                                                                                                                                                                                                 ('water_meter', 'rel_device', '设备关联', 'LEFT', 'adm_meter_device', 'd', 't.device_code = d.device_code', 1, 2, 1, '用于获取设备名称');
+INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES ('water_meter', 'rel_area', '区域关联', 'LEFT', 'adm_area', 'a', 't.area_code = a.area_code', 1, 1, 1, '用于获取区域名称');
+INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES ('water_meter', 'rel_device', '设备关联', 'LEFT', 'adm_meter_device', 'd', 't.device_code = d.device_code', 1, 2, 1, '用于获取设备名称');
 
 -- 储能统计关联
-INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES
-                                                                                                                                                                                                 ('elec_store', 'rel_area', '区域关联', 'LEFT', 'adm_area', 'a', 't.area_code = a.area_code', 1, 1, 1, '用于获取区域名称'),
-                                                                                                                                                                                                 ('elec_store', 'rel_facs', '设施关联', 'LEFT', 'adm_ems_facs', 'f', 't.facs_code = f.facs_code', 1, 2, 1, '用于获取设施名称');
+INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES ('elec_store', 'rel_area', '区域关联', 'LEFT', 'adm_area', 'a', 't.area_code = a.area_code', 1, 1, 1, '用于获取区域名称');
+INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`, `join_type`, `join_table`, `join_alias`, `join_condition`, `is_auto_join`, `sort_order`, `status`, `remark`) VALUES ('elec_store', 'rel_facs', '设施关联', 'LEFT', 'adm_ems_facs', 'f', 't.facs_code = f.facs_code', 1, 2, 1, '用于获取设施名称');
 
 
 -- ============================================================================
@@ -2782,24 +2572,20 @@ INSERT INTO `adm_report_relation` (`ds_code`, `relation_code`, `relation_name`,
 -- ============================================================================
 
 -- 光伏产能字段关联映射
-INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES
-                                                                                       ('pv_supply', 'area_name', 'rel_area'),
-                                                                                       ('pv_supply', 'facs_name', 'rel_facs');
+INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES ('pv_supply', 'area_name', 'rel_area');
+INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES ('pv_supply', 'facs_name', 'rel_facs');
 
 -- 用电统计字段关联映射
-INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES
-                                                                                       ('elec_meter', 'area_name', 'rel_area'),
-                                                                                       ('elec_meter', 'device_name', 'rel_device');
+INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES ('elec_meter', 'area_name', 'rel_area');
+INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES ('elec_meter', 'device_name', 'rel_device');
 
 -- 用水统计字段关联映射
-INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES
-                                                                                       ('water_meter', 'area_name', 'rel_area'),
-                                                                                       ('water_meter', 'device_name', 'rel_device');
+INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES ('water_meter', 'area_name', 'rel_area');
+INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES ('water_meter', 'device_name', 'rel_device');
 
 -- 储能统计字段关联映射
-INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES
-                                                                                       ('elec_store', 'area_name', 'rel_area'),
-                                                                                       ('elec_store', 'facs_name', 'rel_facs');
+INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES ('elec_store', 'area_name', 'rel_area');
+INSERT INTO `adm_report_field_relation` (`ds_code`, `field_code`, `relation_code`) VALUES ('elec_store', 'facs_name', 'rel_facs');
 
 
 -- ============================================================================
@@ -2913,7 +2699,17 @@ INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_na
 INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_SYS_LJCY', 'Base', 'url', '服务地址', NULL, 'String');
 INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_SYS_LJCY', 'Base', 'token', '接口令牌', NULL, 'String');
 INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_SYS_LJCY', 'Base', 'plantList', '站点信息', NULL, 'String');
-
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W4_DEV_CN', 'Base', 'ratedCapacity', '额度容量', 'kWh', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W4_DEV_CN', 'Status', 'rtCapacity', '实时容量', 'kWh', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W4_DEV_CN', 'Status', 'chargingPower', '充电功率', 'W', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W4_DEV_CN', 'Status', 'dischargePower', '放电功率', 'W', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_DEV_HM', 'Status', 'wr', '蓄水量', 'm³', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_DEV_HM', 'Status', 'temperature', '温度', '℃', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_DEV_HM', 'Status', 'humidity', '湿度', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_DEV_HM', 'Status', 'sc', '调蓄量', 'm³', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_DEV_LJCY', 'Status', 'conveyCapacity', '输送量', '吨', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_DEV_LJCY', 'Status', 'processingCapacity', '处理量', '吨', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_Z010_DEV_LJCY', 'Status', 'runningTime', '运行时间', '小时', 'Value');
 
 INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('SYS_GCZR', 'M_W4_SYS_GCZR', 'interfaceType', 'http', NULL);
 INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('SYS_GCZR', 'M_W4_SYS_GCZR', 'url', 'https://openapi-cn.growatt.com', NULL);
@@ -2931,6 +2727,53 @@ INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `att
 INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('SYS_LG', 'M_Z010_SYS_LJCY', 'url', 'https://0.0.0.0', NULL);
 INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('SYS_LG', 'M_Z010_SYS_LJCY', 'token', '12345678', NULL);
 INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('SYS_LG', 'M_Z010_SYS_LJCY', 'plantList', '0000', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('ZHHM-01', 'M_Z010_DEV_HM', 'wr', '687', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('ZHHM-01', 'M_Z010_DEV_HM', 'temperature', '15', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('ZHHM-01', 'M_Z010_DEV_HM', 'humidity', '60%', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('ZHHM-01', 'M_Z010_DEV_HM', 'sc', '362', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('ZHHM-02', 'M_Z010_DEV_HM', 'wr', '722', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('ZHHM-02', 'M_Z010_DEV_HM', 'temperature', '14', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('ZHHM-02', 'M_Z010_DEV_HM', 'humidity', '58%', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('ZHHM-02', 'M_Z010_DEV_HM', 'sc', '218', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-001', 'M_W4_DEV_CN', 'ratedCapacity', '50', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-001', 'M_W4_DEV_CN', 'rtCapacity', '41', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-001', 'M_W4_DEV_CN', 'chargingPower', '500', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-001', 'M_W4_DEV_CN', 'dischargePower', '218', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-002', 'M_W4_DEV_CN', 'ratedCapacity', '50', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-002', 'M_W4_DEV_CN', 'rtCapacity', '27', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-002', 'M_W4_DEV_CN', 'chargingPower', '430', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-002', 'M_W4_DEV_CN', 'dischargePower', '122', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-003', 'M_W4_DEV_CN', 'ratedCapacity', '50', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-003', 'M_W4_DEV_CN', 'rtCapacity', '11', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-003', 'M_W4_DEV_CN', 'chargingPower', '480', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-003', 'M_W4_DEV_CN', 'dischargePower', '123', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-004', 'M_W4_DEV_CN', 'ratedCapacity', '50', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-004', 'M_W4_DEV_CN', 'rtCapacity', '28', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-004', 'M_W4_DEV_CN', 'chargingPower', '600', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-004', 'M_W4_DEV_CN', 'dischargePower', '500', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-005', 'M_W4_DEV_CN', 'ratedCapacity', '50', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-005', 'M_W4_DEV_CN', 'rtCapacity', '36', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-005', 'M_W4_DEV_CN', 'chargingPower', '400', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-005', 'M_W4_DEV_CN', 'dischargePower', '345', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-006', 'M_W4_DEV_CN', 'ratedCapacity', '50', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-006', 'M_W4_DEV_CN', 'rtCapacity', '9', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-006', 'M_W4_DEV_CN', 'chargingPower', '500', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-006', 'M_W4_DEV_CN', 'dischargePower', '222', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-007', 'M_W4_DEV_CN', 'ratedCapacity', '50', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-007', 'M_W4_DEV_CN', 'rtCapacity', '42', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-007', 'M_W4_DEV_CN', 'chargingPower', '410', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-007', 'M_W4_DEV_CN', 'dischargePower', '400', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-008', 'M_W4_DEV_CN', 'ratedCapacity', '50', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-008', 'M_W4_DEV_CN', 'rtCapacity', '37', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-008', 'M_W4_DEV_CN', 'chargingPower', '333', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('GCZR-008', 'M_W4_DEV_CN', 'dischargePower', '212', NULL);
+
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('LGCY-01', 'M_Z010_DEV_LJCY', 'conveyCapacity', '23', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('LGCY-01', 'M_Z010_DEV_LJCY', 'processingCapacity', '21', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('LGCY-01', 'M_Z010_DEV_LJCY', 'runningTime', '524', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('LGCY-02', 'M_Z010_DEV_LJCY', 'conveyCapacity', '35', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('LGCY-02', 'M_Z010_DEV_LJCY', 'processingCapacity', '27', NULL);
+INSERT INTO `adm_ems_obj_attr_value` (`obj_code`, `model_code`, `attr_key`, `attr_value`, `update_time`) VALUES ('LGCY-02', 'M_Z010_DEV_LJCY', 'runningTime', '515', NULL);
 
 INSERT INTO `adm_ems_obj_ability` (`model_code`, `ability_key`, `ability_name`, `ability_desc`, `param_definition`, `hidden_flag`) VALUES ('SYS_GCZR', 'SyncDevInverter', '同步逆变器设备', '从Growatt API同步逆变器设备列表和基础属性', null, 1);
 

+ 2 - 2
ems/sql/ems_server.sql

@@ -1366,8 +1366,8 @@ CREATE TABLE adm_op_inspection_report_detail (
 -- ----------------------------
 -- 设备台账表
 -- ----------------------------
-drop table if exists adm_ems_device_rbook;
-create table adm_ems_device_rbook (
+drop table if exists adm_ems_device_ledger;
+create table adm_ems_device_ledger (
   `id`               bigint(20)      not null auto_increment      comment '序号',
   `record_code`      varchar(32)     not null                     comment '记录编号',
   `area_code`        varchar(32)     not null                     comment '园区代码',

+ 1 - 1
ems/sql/ems_sys_data.sql

@@ -53,7 +53,7 @@ insert into sys_menu values ('120',  '趋势预测',       '3',    '6',  'predic
 insert into sys_menu values ('121',  '数据报表',       '3',    '7',  'analysis-statement', '',                          '', 1, 0, 'M', '0', '0',    'analysis:statement',     'statement',      'admin', sysdate(), '', null, '数据报表');
 
 insert into sys_menu values ('141',  '设备列表',       '4',    '1',  'device-list',         'devmgr/device',           '', 1, 0, 'C', '0', '0',    'ems:device:list',        'deviceattr',     'admin', sysdate(), '', null, '设备属性');
-insert into sys_menu values ('142',  '设备台账',       '4',    '2',  'device-el',           'devmgr/el',              '', 1, 0, 'C', '0', '0',   'device:el',              'excel',          'admin', sysdate(), '', null, '设备台账');
+insert into sys_menu values ('142',  '设备台账',       '4',    '2',  'device-ledger',       'devmgr/ledger',              '', 1, 0, 'C', '0', '0',   'device:el',              'excel',          'admin', sysdate(), '', null, '设备台账');
 insert into sys_menu values ('143',  '设备告警',       '4',    '3',  'device-warn',         'devmgr/warn',   '', 1, 0, 'C', '0', '0',   'analysis:device',        'deviceanalyze',  'admin', sysdate(), '', null, '设备分析');
 insert into sys_menu values ('144',  '抄表管理',       '4',    '4',  'deviceMeter',         '',                       '', 1, 0, 'M', '0', '0',   'device:meter',           'meterReading',   'admin', sysdate(), '', null, '抄表管理');