Browse Source

Merge remote-tracking branch 'origin/master'

chen.cheng 4 tháng trước cách đây
mục cha
commit
1360c503ed

+ 5 - 5
ems/ems-cloud/docker/start-all.sh

@@ -1,29 +1,29 @@
 #!/bin/bash
-nohup java -Dfile.encoding=UTF-8 -jar \
+nohup java -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -jar \
 -Dnacos.server.grpc.port.offset=1 \
 -Dspring.cloud.nacos.discovery.ip=172.192.13.95 \
 /opt/ems/ruoyi-gateway/ruoyi-gateway.jar >> /var/log/ruoyi-gateway.log 2>&1 &
 echo "ruoyi-gateway start! PID: $!"
 
-nohup java -Dfile.encoding=UTF-8 -jar \
+nohup java -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -jar \
 -Dnacos.server.grpc.port.offset=1 \
 -Dspring.cloud.nacos.discovery.ip=172.192.13.95 \
 /opt/ems/ruoyi-auth/ruoyi-auth.jar >> /var/log/ruoyi-auth.log 2>&1 &
 echo "ruoyi-auth start! PID: $!"
 
-nohup java -Dfile.encoding=UTF-8 -jar \
+nohup java -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -jar \
 -Dnacos.server.grpc.port.offset=1 \
 -Dspring.cloud.nacos.discovery.ip=172.192.13.95 \
 /opt/ems/ruoyi-system/ruoyi-system.jar >> /var/log/ruoyi-auth.log 2>&1 &
 echo "ruoyi-system start! PID: $!"
 
-nohup java -Dfile.encoding=UTF-8 -jar \
+nohup java -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -jar \
 -Dnacos.server.grpc.port.offset=1 \
 -Dspring.cloud.nacos.discovery.ip=172.192.13.95 \
 /opt/ems/ems-dev-adapter/ems-dev-adapter.jar >> /var/log/ems-dev-adapter.log 2>&1 &
 echo "ems-dev-adapter start! PID: $!"
 
-nohup java -Dfile.encoding=UTF-8 -jar \
+nohup java -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -jar \
 -Dnacos.server.grpc.port.offset=1 \
 -Dspring.cloud.nacos.discovery.ip=172.192.13.95 \
 /opt/ems/ems-server/ems-server.jar >> /var/log/ems-erver.log 2>&1 &

+ 43 - 25
ems/ems-cloud/ems-dev-adapter/src/main/java/com/ruoyi/ems/handle/GeekOpenCbHandler.java

@@ -19,22 +19,27 @@ import com.ruoyi.ems.core.MessageCache;
 import com.ruoyi.ems.domain.ElecMeterH;
 import com.ruoyi.ems.domain.EmsDevice;
 import com.ruoyi.ems.domain.EmsObjAbilityCallLog;
+import com.ruoyi.ems.domain.EmsObjReportLog;
 import com.ruoyi.ems.domain.MeterDevice;
 import com.ruoyi.ems.enums.DevObjType;
 import com.ruoyi.ems.enums.DevOnlineStatus;
 import com.ruoyi.ems.model.AbilityPayload;
 import com.ruoyi.ems.model.MqttCacheMsg;
 import com.ruoyi.ems.model.Price;
+import com.ruoyi.ems.model.QueryDevice;
 import com.ruoyi.ems.service.IElecMeterHService;
 import com.ruoyi.ems.service.IEmsObjAbilityCallLogService;
 import com.ruoyi.ems.service.IMeterDeviceService;
 import com.ruoyi.ems.service.IPriceService;
 import com.ruoyi.ems.util.IdUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -42,6 +47,8 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -60,8 +67,7 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
     @Autowired
     private MessageCache messageCache;
 
-    @Autowired
-    private IEmsObjAbilityCallLogService objAbilityCallLogService;
+
 
     @Autowired
     private IMeterDeviceService meterDeviceService;
@@ -96,7 +102,7 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
         sendMqttMsg(topic, msgBody, 2, false);
 
         // 写入日志
-        EmsObjAbilityCallLog logItem = saveLog(abilityParam, sendTime, 1);
+        EmsObjAbilityCallLog logItem = saveCallLog(abilityParam, sendTime, 1);
 
         JSONObject sendObject = JSONObject.parseObject(abilityParam.getAbilityParam());
         String type = sendObject.getString("type");
@@ -111,11 +117,11 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
 
                     if (checkResult(sendObject, receiveObject)) {
                         retStr = "执行成功!";
-                        updateLog(logItem, cacheMsg, 1);
+                        updateCallLog(logItem, cacheMsg, 1);
                     }
                     else {
                         retStr = "执行失败!";
-                        updateLog(logItem, cacheMsg, 2);
+                        updateCallLog(logItem, cacheMsg, 2);
                     }
                     break;
                 }
@@ -147,6 +153,7 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
                 // 自动上报数据: 1.更新属性值,2.更新电量计量数据
                 if (StringUtils.equals("auto", messageId)) {
                     updateAutoAttr(device, msgBody);
+                    saveReportLog(deviceCode, DevObjType.DEVC.getCode(), "电量上报", payload);
                 }
                 // 前序调用的响应消息:1.写入消息队列,2.更新属性值
                 else if (StringUtils.isNotEmpty(messageId) && StringUtils.startsWith(messageId, "CALL-")) {
@@ -157,6 +164,7 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
                 // 设备同步数据(INFO类,协议类):更新基础属性值
                 else {
                     updateBaseAttr(device, msgBody);
+                    saveReportLog(deviceCode, DevObjType.DEVC.getCode(), "信息上报", payload);
                 }
 
                 // 设备消息抵达,将数据库离线状态改为在线
@@ -179,6 +187,36 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
     }
 
     /**
+     * 定时检测在线状态
+     * <br/>每小时执行一次,扫描2个小时无消息的设备,标记为离线状态
+     */
+    @Scheduled(cron = "0 10 0/1 * * ?")
+    public void checkOnlineStatus() {
+        long currentTime = new Date().getTime();
+        long threshold = 2 * 60 * 60 * 1000; // 120分钟
+
+        QueryDevice queryDevice = new QueryDevice();
+        queryDevice.setDeviceModel("M_W2_QF_GEEKOPEN");
+        List<EmsDevice> deviceList = deviceService.selectList(queryDevice);
+
+        if (CollectionUtils.isNotEmpty(deviceList)) {
+            for (EmsDevice device : deviceList) {
+                Map<String, String> attrMap = attrCache.get(device.getDeviceCode());
+
+                if (MapUtils.isNotEmpty(attrMap)) {
+                    String lastMsgTime = attrMap.get(MQTT_LAST_TIME);
+
+                    if (StringUtils.isNotEmpty(lastMsgTime)
+                        && (currentTime - DateUtils.stringToDate(lastMsgTime, DateUtils.YYYY_MM_DD_HH_MM_SS).getTime())
+                        > threshold) {
+                        refreshStatus(device, DevOnlineStatus.OFFLINE);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
      * 据根据累计量更新电量计量数
      *
      * @param device  设备信息
@@ -344,24 +382,4 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
 
         return flag;
     }
-
-    private EmsObjAbilityCallLog saveLog(AbilityPayload abilityParam, long sendTime, int callStatus) {
-        EmsObjAbilityCallLog objAbilityCallLog = new EmsObjAbilityCallLog();
-        objAbilityCallLog.setObjCode(abilityParam.getObjCode());
-        objAbilityCallLog.setObjType(abilityParam.getObjType());
-        objAbilityCallLog.setModelCode(abilityParam.getModeCode());
-        objAbilityCallLog.setAbilityKey(abilityParam.getAbilityKey());
-        objAbilityCallLog.setCallTime(new Date(sendTime));
-        objAbilityCallLog.setCallParam(abilityParam.getAbilityParam());
-        objAbilityCallLog.setCallStatus(callStatus);
-        objAbilityCallLogService.addLog(objAbilityCallLog);
-        return objAbilityCallLog;
-    }
-
-    private void updateLog(EmsObjAbilityCallLog objAbilityCallLog, MqttCacheMsg cacheMsg, int callStatus) {
-        objAbilityCallLog.setResTime(cacheMsg.getReceiveTime());
-        objAbilityCallLog.setResParam(cacheMsg.getPayload());
-        objAbilityCallLog.setCallStatus(callStatus);
-        objAbilityCallLogService.updateLog(objAbilityCallLog);
-    }
 }

+ 41 - 28
ems/ems-cloud/ems-dev-adapter/src/main/java/com/ruoyi/ems/handle/MqttBaseHandler.java

@@ -14,23 +14,26 @@ import com.alibaba.fastjson2.JSONObject;
 import com.huashe.common.utils.DateUtils;
 import com.ruoyi.ems.core.MqttTemplate;
 import com.ruoyi.ems.domain.EmsDevice;
+import com.ruoyi.ems.domain.EmsObjAbilityCallLog;
 import com.ruoyi.ems.domain.EmsObjAttrValue;
+import com.ruoyi.ems.domain.EmsObjReportLog;
 import com.ruoyi.ems.enums.DevOnlineStatus;
 import com.ruoyi.ems.model.AbilityPayload;
+import com.ruoyi.ems.model.MqttCacheMsg;
 import com.ruoyi.ems.service.IEmsDeviceService;
+import com.ruoyi.ems.service.IEmsObjAbilityCallLogService;
 import com.ruoyi.ems.service.IEmsObjAttrValueService;
+import com.ruoyi.ems.service.IEmsObjReportLogService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.scheduling.annotation.Scheduled;
 
 import javax.annotation.Resource;
 import java.util.Calendar;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -71,6 +74,12 @@ public abstract class MqttBaseHandler {
     @Autowired
     protected IEmsObjAttrValueService objAttrValueService;
 
+    @Autowired
+    private IEmsObjAbilityCallLogService objAbilityCallLogService;
+
+    @Autowired
+    private IEmsObjReportLogService objReportLogService;
+
     /**
      * 抽象方法,用于能力调用
      *
@@ -202,36 +211,40 @@ public abstract class MqttBaseHandler {
     }
 
     protected static int getHourIndex(Date date) {
-        Calendar calendar =  Calendar.getInstance();
+        Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         int hour = calendar.get(Calendar.HOUR_OF_DAY);
         return hour + 1;
     }
 
-    /**
-     * 定时检测在线状态
-     * <br/>每小时执行一次,扫描2个小时无消息的设备,标记为离线状态
-     */
-    @Scheduled(cron = "0 5 0/1 * * ?")
-    public void checkOnlineStatus() {
-        long currentTime = new Date().getTime();
-        long threshold = 2 * 60 * 60 * 1000; // 120分钟
-
-        Iterator<Map.Entry<String, Map<String, String>>> iterator = attrCache.entrySet().iterator();
-        while (iterator.hasNext()) {
-            Map.Entry<String, Map<String, String>> entry = iterator.next();
-            String deviceCode = entry.getKey();
-            Map<String, String> msg = entry.getValue();
-
-            String lastMsgTime = msg.get(MQTT_LAST_TIME);
-
-            if (StringUtils.isNotEmpty(lastMsgTime)) {
-                Date lastMsgTimeDt = DateUtils.stringToDate(lastMsgTime, DateUtils.YYYY_MM_DD_HH_MM_SS);
-                if ((currentTime - lastMsgTimeDt.getTime()) > threshold) {
-                    EmsDevice device = deviceService.selectByCode(deviceCode);
-                    refreshStatus(device, DevOnlineStatus.OFFLINE);
-                }
-            }
-        }
+    protected EmsObjAbilityCallLog saveCallLog(AbilityPayload abilityParam, long sendTime, int callStatus) {
+        EmsObjAbilityCallLog objAbilityCallLog = new EmsObjAbilityCallLog();
+        objAbilityCallLog.setObjCode(abilityParam.getObjCode());
+        objAbilityCallLog.setObjType(abilityParam.getObjType());
+        objAbilityCallLog.setModelCode(abilityParam.getModeCode());
+        objAbilityCallLog.setAbilityKey(abilityParam.getAbilityKey());
+        objAbilityCallLog.setCallTime(new Date(sendTime));
+        objAbilityCallLog.setCallPayload(abilityParam.getAbilityParam());
+        objAbilityCallLog.setCallStatus(callStatus);
+        objAbilityCallLogService.addLog(objAbilityCallLog);
+        return objAbilityCallLog;
+    }
+
+    protected void updateCallLog(EmsObjAbilityCallLog objAbilityCallLog, MqttCacheMsg cacheMsg, int callStatus) {
+        objAbilityCallLog.setResTime(cacheMsg.getReceiveTime());
+        objAbilityCallLog.setResPayload(cacheMsg.getPayload());
+        objAbilityCallLog.setCallStatus(callStatus);
+        objAbilityCallLogService.updateLog(objAbilityCallLog);
+    }
+
+    protected void saveReportLog(String objCode, int objType, String msgDesc, String payload) {
+        EmsObjReportLog objReportLog = new EmsObjReportLog();
+        objReportLog.setObjCode(objCode);
+        objReportLog.setObjType(objType);
+        objReportLog.setMsgDesc(msgDesc);
+        objReportLog.setReportPayload(payload);
+        objReportLog.setReportTime(new Date());
+
+        objReportLogService.insertLog(objReportLog);
     }
 }

+ 1 - 1
ems/ems-cloud/ems-dev-adapter/src/main/resources/application-local.yml

@@ -46,7 +46,7 @@ spring:
 mqtt:
   server:
     host: tcp://xt.wenhq.top:8581
-    client_id: lear-Dev
+    client_id: ems-dev-adapter
   executor:
     msgHandle:
       corePoolSize: 20

+ 83 - 0
ems/ems-cloud/ems-server/src/main/java/com/ruoyi/ems/controller/EmsObjLogController.java

@@ -0,0 +1,83 @@
+package com.ruoyi.ems.controller;
+
+import com.huashe.common.domain.AjaxResult;
+import com.ruoyi.common.core.web.controller.BaseController;
+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.ElecAttr;
+import com.ruoyi.ems.domain.EmsObjAbilityCallLog;
+import com.ruoyi.ems.domain.EmsObjReportLog;
+import com.ruoyi.ems.service.IElecAttrService;
+import com.ruoyi.ems.service.IEmsObjAbilityCallLogService;
+import com.ruoyi.ems.service.IEmsObjReportLogService;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 用电业务Controller
+ *
+ * @author ruoyi
+ * @date 2024-07-23
+ */
+@RestController
+@RequestMapping("/object/log")
+@Api(value = "EmsObjLogController", description = "能源对象日志服务")
+public class EmsObjLogController extends BaseController {
+    /**
+     * 上报日志
+     */
+    @Autowired
+    private IEmsObjReportLogService reportLogService;
+
+    /**
+     * 能力调用日志
+     */
+    @Autowired
+    private IEmsObjAbilityCallLogService abilityCallLogService;
+
+    /**
+     * 获取上报日志详细
+     */
+    @GetMapping(value = "/reportLog/{id}")
+    public AjaxResult getReportLogInfo(@PathVariable("id") Long id) {
+        return success(reportLogService.selectLogById(id));
+    }
+
+    /**
+     * 查询上报日志列表
+     */
+    @GetMapping("/reportLog/list")
+    public AjaxResult listReportLog(EmsObjReportLog param) {
+        List<EmsObjReportLog> list = reportLogService.selectLog(param);
+        return success(list);
+    }
+
+    /**
+     * 获取上报日志详细
+     */
+    @GetMapping(value = "/callLog/{id}")
+    public AjaxResult getCallLogInfo(@PathVariable("id") Long id) {
+        return success(abilityCallLogService.selectLogById(id));
+    }
+
+    /**
+     * 查询上报日志列表
+     */
+    @GetMapping("/callLog/list")
+    public AjaxResult listCallLog(EmsObjAbilityCallLog param) {
+        List<EmsObjAbilityCallLog> list = abilityCallLogService.selectLogList(param);
+        return success(list);
+    }
+}

+ 76 - 57
ems/ems-core/src/main/java/com/ruoyi/ems/domain/EmsObjAbilityCallLog.java

@@ -9,7 +9,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 
 /**
  * 能源对象能力调用日志对象 adm_ems_obj_ability_call_log
- * 
+ *
  * @author ruoyi
  * @date 2025-02-27
  */
@@ -26,17 +26,23 @@ public class EmsObjAbilityCallLog extends BaseEntity
     /** 对象类型 */
     private Integer objType;
 
+    private String objName;
+
     private String modelCode;
 
+    private String modelName;
+
     /** 能力键 */
     private String abilityKey;
 
+    private String abilityName;
+
     /** 调用时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date callTime;
 
     /** 调用参数 */
-    private String callParam;
+    private String callPayload;
 
     /** 调用状态 */
     private Integer callStatus;
@@ -46,97 +52,110 @@ public class EmsObjAbilityCallLog extends BaseEntity
     private Date resTime;
 
     /** 响应内容 */
-    private String resParam;
+    private String resPayload;
+
+    public Long getId() {
+        return id;
+    }
 
-    public void setId(Long id) 
-    {
+    public void setId(Long id) {
         this.id = id;
     }
 
-    public Long getId() 
-    {
-        return id;
+    public String getObjCode() {
+        return objCode;
     }
-    public void setObjCode(String objCode) 
-    {
+
+    public void setObjCode(String objCode) {
         this.objCode = objCode;
     }
 
-    public String getObjCode() 
-    {
-        return objCode;
+    public Integer getObjType() {
+        return objType;
     }
-    public void setObjType(Integer objType)
-    {
+
+    public void setObjType(Integer objType) {
         this.objType = objType;
     }
 
-    public Integer getObjType()
-    {
-        return objType;
+    public String getObjName() {
+        return objName;
     }
-    public void setModelCode(String modelCode) 
-    {
-        this.modelCode = modelCode;
+
+    public void setObjName(String objName) {
+        this.objName = objName;
     }
 
-    public String getModelCode() 
-    {
+    public String getModelCode() {
         return modelCode;
     }
-    public void setAbilityKey(String abilityKey) 
-    {
-        this.abilityKey = abilityKey;
+
+    public void setModelCode(String modelCode) {
+        this.modelCode = modelCode;
+    }
+
+    public String getModelName() {
+        return modelName;
     }
 
-    public String getAbilityKey() 
-    {
+    public void setModelName(String modelName) {
+        this.modelName = modelName;
+    }
+
+    public String getAbilityKey() {
         return abilityKey;
     }
-    public void setCallTime(Date callTime) 
-    {
-        this.callTime = callTime;
+
+    public void setAbilityKey(String abilityKey) {
+        this.abilityKey = abilityKey;
     }
 
-    public Date getCallTime() 
-    {
+    public String getAbilityName() {
+        return abilityName;
+    }
+
+    public void setAbilityName(String abilityName) {
+        this.abilityName = abilityName;
+    }
+
+    public Date getCallTime() {
         return callTime;
     }
-    public void setCallParam(String callParam) 
-    {
-        this.callParam = callParam;
+
+    public void setCallTime(Date callTime) {
+        this.callTime = callTime;
     }
 
-    public String getCallParam() 
-    {
-        return callParam;
+    public String getCallPayload() {
+        return callPayload;
     }
-    public void setCallStatus(Integer callStatus)
-    {
-        this.callStatus = callStatus;
+
+    public void setCallPayload(String callPayload) {
+        this.callPayload = callPayload;
     }
 
-    public Integer getCallStatus()
-    {
+    public Integer getCallStatus() {
         return callStatus;
     }
-    public void setResTime(Date resTime) 
-    {
-        this.resTime = resTime;
+
+    public void setCallStatus(Integer callStatus) {
+        this.callStatus = callStatus;
     }
 
-    public Date getResTime() 
-    {
+    public Date getResTime() {
         return resTime;
     }
-    public void setResParam(String resParam) 
-    {
-        this.resParam = resParam;
+
+    public void setResTime(Date resTime) {
+        this.resTime = resTime;
+    }
+
+    public String getResPayload() {
+        return resPayload;
     }
 
-    public String getResParam() 
-    {
-        return resParam;
+    public void setResPayload(String resPayload) {
+        this.resPayload = resPayload;
     }
 
     @Override
@@ -148,10 +167,10 @@ public class EmsObjAbilityCallLog extends BaseEntity
             .append("modelCode", getModelCode())
             .append("abilityKey", getAbilityKey())
             .append("callTime", getCallTime())
-            .append("callParam", getCallParam())
+            .append("callPayload", getCallPayload())
             .append("callStatus", getCallStatus())
             .append("resTime", getResTime())
-            .append("resParam", getResParam())
+            .append("resPayload", getResPayload())
             .toString();
     }
 }

+ 11 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/domain/EmsObjAttrDto.java

@@ -38,6 +38,9 @@ public class EmsObjAttrDto {
     /** 属性值名称 */
     private String attrValueName;
 
+    /** 属性值单位 */
+    private String attrUnit;
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
@@ -81,6 +84,14 @@ public class EmsObjAttrDto {
         this.attrValueName = attrValueName;
     }
 
+    public String getAttrUnit() {
+        return attrUnit;
+    }
+
+    public void setAttrUnit(String attrUnit) {
+        this.attrUnit = attrUnit;
+    }
+
     public Date getUpdateTime() {
         return updateTime;
     }

+ 108 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/domain/EmsObjReportLog.java

@@ -0,0 +1,108 @@
+package com.ruoyi.ems.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+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_obj_report_log
+ *
+ * @author ruoyi
+ * @date 2025-02-27
+ */
+public class EmsObjReportLog extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 序号
+     */
+    private Long id;
+
+    /**
+     * 对象代码
+     */
+    private String objCode;
+
+    /**
+     * 对象类型
+     */
+    private Integer objType;
+
+    /**
+     * 消息描述
+     */
+    private String msgDesc;
+
+    /**
+     * 响应时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date reportTime;
+
+    /**
+     * 响应内容
+     */
+    private String reportPayload;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getObjCode() {
+        return objCode;
+    }
+
+    public void setObjCode(String objCode) {
+        this.objCode = objCode;
+    }
+
+    public Integer getObjType() {
+        return objType;
+    }
+
+    public void setObjType(Integer objType) {
+        this.objType = objType;
+    }
+
+    public String getMsgDesc() {
+        return msgDesc;
+    }
+
+    public void setMsgDesc(String msgDesc) {
+        this.msgDesc = msgDesc;
+    }
+
+    public Date getReportTime() {
+        return reportTime;
+    }
+
+    public void setReportTime(Date reportTime) {
+        this.reportTime = reportTime;
+    }
+
+    public String getReportPayload() {
+        return reportPayload;
+    }
+
+    public void setReportPayload(String reportPayload) {
+        this.reportPayload = reportPayload;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("objCode", getObjCode())
+            .append("objType", getObjType())
+            .append("msgDesc", getMsgDesc())
+            .append("reportTime", getReportTime())
+            .append("reportPayload", getReportPayload()).toString();
+    }
+}

+ 37 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/mapper/EmsObjReportLogMapper.java

@@ -0,0 +1,37 @@
+package com.ruoyi.ems.mapper;
+
+import com.ruoyi.ems.domain.EmsObjReportLog;
+
+import java.util.List;
+
+/**
+ * 能源对象能力调用日志Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-02-27
+ */
+public interface EmsObjReportLogMapper {
+    /**
+     * 查询能源对象能力调用日志
+     *
+     * @param id 能源对象能力调用日志主键
+     * @return 能源对象能力调用日志
+     */
+    EmsObjReportLog selectLogById(Long id);
+
+    /**
+     * 查询能源对象能力调用日志列表
+     *
+     * @param objReportLog 能源对象能力调用日志
+     * @return 能源对象能力调用日志集合
+     */
+    List<EmsObjReportLog> selectLog(EmsObjReportLog objReportLog);
+
+    /**
+     * 新增能源对象能力调用日志
+     *
+     * @param objReportLog 能源对象能力调用日志
+     * @return 结果
+     */
+    int insertLog(EmsObjReportLog objReportLog);
+}

+ 37 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/IEmsObjReportLogService.java

@@ -0,0 +1,37 @@
+package com.ruoyi.ems.service;
+
+import com.ruoyi.ems.domain.EmsObjReportLog;
+
+import java.util.List;
+
+/**
+ * 能源对象能力调用日志Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-02-27
+ */
+public interface IEmsObjReportLogService {
+    /**
+     * 查询能源对象能力调用日志
+     *
+     * @param id 能源对象能力调用日志主键
+     * @return 能源对象能力调用日志
+     */
+    EmsObjReportLog selectLogById(Long id);
+
+    /**
+     * 查询能源对象能力调用日志列表
+     *
+     * @param objReportLog 能源对象能力调用日志
+     * @return 能源对象能力调用日志集合
+     */
+    List<EmsObjReportLog> selectLog(EmsObjReportLog objReportLog);
+
+    /**
+     * 新增能源对象能力调用日志
+     *
+     * @param objReportLog 能源对象能力调用日志
+     * @return 结果
+     */
+    int insertLog(EmsObjReportLog objReportLog);
+}

+ 49 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/service/impl/EmsObjReportLogService.java

@@ -0,0 +1,49 @@
+/*
+ * 文 件 名:  EmsObjReportLogService
+ * 版    权:  华设设计集团股份有限公司
+ * 描    述:  <描述>
+ * 修 改 人:  lvwenbin
+ * 修改时间:  2025/3/11
+ * 跟踪单号:  <跟踪单号>
+ * 修改单号:  <修改单号>
+ * 修改内容:  <修改内容>
+ */
+package com.ruoyi.ems.service.impl;
+
+import com.ruoyi.ems.domain.EmsObjReportLog;
+import com.ruoyi.ems.mapper.EmsObjReportLogMapper;
+import com.ruoyi.ems.service.IEmsObjReportLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 对象上报日志服务
+ * <功能详细描述>
+ *
+ * @author lvwenbin
+ * @version [版本号, 2025/3/11]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+@Service
+public class EmsObjReportLogService implements IEmsObjReportLogService {
+    @Autowired
+    private EmsObjReportLogMapper emsObjReportLogMapper;
+
+    @Override
+    public EmsObjReportLog selectLogById(Long id) {
+        return emsObjReportLogMapper.selectLogById(id);
+    }
+
+    @Override
+    public List<EmsObjReportLog> selectLog(EmsObjReportLog objReportLog) {
+        return emsObjReportLogMapper.selectLog(objReportLog);
+    }
+
+    @Override
+    public int insertLog(EmsObjReportLog objReportLog) {
+        return emsObjReportLogMapper.insertLog(objReportLog);
+    }
+}

+ 1 - 1
ems/ems-core/src/main/resources/mapper/ems/EmsDeviceMapper.xml

@@ -58,7 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="locationRef != null  and locationRef != ''"> and d.`location_ref` = #{locationRef}</if>
             <if test="refFacs != null  and refFacs != ''"> and d.`ref_facs` = #{refFacs}</if>
             <if test="psCode != null  and psCode != ''"> and d.`ps_code` = #{psCode}</if>
-            <if test="deviceModel != null  and deviceModel != ''"> and d.`device_model` = #{device_model}</if>
+            <if test="deviceModel != null  and deviceModel != ''"> and d.`device_model` = #{deviceModel}</if>
             <if test="subsystemCode != null  and subsystemCode != ''"> and d.`subsystem_code` = #{subsystemCode}</if>
         </where>
     </select>

+ 39 - 18
ems/ems-core/src/main/resources/mapper/ems/EmsObjAbilityCallLogMapper.xml

@@ -8,38 +8,59 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="id"    column="id"    />
         <result property="objCode"    column="obj_code"    />
         <result property="objType"    column="obj_type"    />
+        <result property="objName"    column="obj_name"    />
         <result property="modelCode"    column="model_code"    />
+        <result property="modelName"    column="model_name"    />
         <result property="abilityKey"    column="ability_key"    />
+        <result property="abilityName"    column="ability_name"    />
         <result property="callTime"    column="call_time"    />
-        <result property="callParam"    column="call_param"    />
+        <result property="callPayload"    column="call_payload"    />
         <result property="callStatus"    column="call_status"    />
         <result property="resTime"    column="res_time"    />
-        <result property="resParam"    column="res_param"    />
+        <result property="resPayload"    column="res_payload"    />
     </resultMap>
 
     <sql id="selectList">
-        select id, obj_code, obj_type, model_code, ability_key, call_time, call_status, res_time from adm_ems_obj_ability_call_log
+        select l.id, l.obj_code,
+               CASE
+                   WHEN l.obj_type = 1 THEN f.facs_name
+                   WHEN l.obj_type = 2 THEN d.device_name
+                   END as obj_name,
+               l.obj_type, l.model_code, m.model_name, l.ability_key, a.ability_name, l.call_time, l.call_status from adm_ems_obj_ability_call_log l
+        left join adm_ems_facs f on l.obj_code = f.facs_code and l.obj_type = 1
+        left join adm_ems_device d on l.obj_code = d.device_code and l.obj_type = 2
+        left join adm_ems_obj_model m on l.model_code = m.model_code and l.obj_type = m.obj_type
+        left join adm_ems_obj_ability a on l.ability_key = a.ability_key
     </sql>
 
     <sql id="selectDetail">
-        select id, obj_code, obj_type, model_code, ability_key, call_time, call_param, call_status, res_time, res_param from adm_ems_obj_ability_call_log
+        select l.id, l.obj_code,
+               case
+                   when l.obj_type = 1 then f.facs_name
+                   when l.obj_type = 2 then d.device_name
+                   end as obj_name,
+               l.obj_type, l.model_code, m.model_name, l.ability_key, a.ability_name, l.call_time, l.call_status, l.call_payload, l.res_time, l.res_payload from adm_ems_obj_ability_call_log l
+        left join adm_ems_facs f on l.obj_code = f.facs_code and l.obj_type = 1
+        left join adm_ems_device d on l.obj_code = d.device_code and l.obj_type = 2
+        left join adm_ems_obj_model m on l.model_code = m.model_code and l.obj_type = m.obj_type
+        left join adm_ems_obj_ability a on l.ability_key = a.ability_key
     </sql>
 
     <select id="selectObjAbilityCallLogById" parameterType="java.lang.Long" resultMap="objAbilityCallLogResult">
         <include refid="selectDetail"/>
-        where id = #{id}
+        where l.id = #{id}
     </select>
 
     <select id="selectObjAbilityCallLog" parameterType="com.ruoyi.ems.domain.EmsObjAbilityCallLog" resultMap="objAbilityCallLogResult">
         <include refid="selectList"/>
         <where>  
-            <if test="objCode != null  and objCode != ''"> and obj_code = #{objCode}</if>
-            <if test="objType != null "> and obj_type = #{objType}</if>
-            <if test="modelCode != null  and modelCode != ''"> and model_code = #{modelCode}</if>
-            <if test="abilityKey != null  and abilityKey != ''"> and ability_key = #{abilityKey}</if>
-            <if test="callStatus != null "> and call_status = #{callStatus}</if>
+            <if test="objCode != null  and objCode != ''"> and l.obj_code = #{objCode}</if>
+            <if test="objType != null "> and l.obj_type = #{objType}</if>
+            <if test="modelCode != null  and modelCode != ''"> and l.model_code = #{modelCode}</if>
+            <if test="abilityKey != null  and abilityKey != ''"> and l.ability_key = #{abilityKey}</if>
+            <if test="callStatus != null "> and l.call_status = #{callStatus}</if>
             <if test="startRecTime != null  and startRecTime != '' and endRecTime != null and endRecTime !=''">
-                and call_time between #{startRecTime} and #{endRecTime}
+                and l.call_time between #{startRecTime} and #{endRecTime}
             </if>
         </where>
     </select>
@@ -52,10 +73,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="modelCode != null and modelCode != ''">model_code,</if>
             <if test="abilityKey != null and abilityKey != ''">ability_key,</if>
             <if test="callTime != null">call_time,</if>
-            <if test="callParam != null">call_param,</if>
+            <if test="callPayload != null">call_payload,</if>
             <if test="callStatus != null">call_status,</if>
             <if test="resTime != null">res_time,</if>
-            <if test="resParam != null">res_param,</if>
+            <if test="resPayload != null">res_payload,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="objCode != null and objCode != ''">#{objCode},</if>
@@ -63,14 +84,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="modelCode != null and modelCode != ''">#{modelCode},</if>
             <if test="abilityKey != null and abilityKey != ''">#{abilityKey},</if>
             <if test="callTime != null">#{callTime},</if>
-            <if test="callParam != null">#{callParam},</if>
+            <if test="callPayload != null">#{callPayload},</if>
             <if test="callStatus != null">#{callStatus},</if>
             <if test="resTime != null">#{resTime},</if>
-            <if test="resParam != null">#{resParam},</if>
+            <if test="resPayload != null">#{resPayload},</if>
          </trim>
     </insert>
 
-    <update id="updateObjAbilityCallLog" parameterType="EmsObjAbilityCallLog">
+    <update id="updateObjAbilityCallLog" parameterType="com.ruoyi.ems.domain.EmsObjAbilityCallLog">
         update adm_ems_obj_ability_call_log
         <trim prefix="SET" suffixOverrides=",">
             <if test="objCode != null and objCode != ''">obj_code = #{objCode},</if>
@@ -78,10 +99,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="modelCode != null and modelCode != ''">model_code = #{modelCode},</if>
             <if test="abilityKey != null and abilityKey != ''">ability_key = #{abilityKey},</if>
             <if test="callTime != null">call_time = #{callTime},</if>
-            <if test="callParam != null">call_param = #{callParam},</if>
+            <if test="callPayload != null">call_payload = #{callPayload},</if>
             <if test="callStatus != null">call_status = #{callStatus},</if>
             <if test="resTime != null">res_time = #{resTime},</if>
-            <if test="resParam != null">res_param = #{resParam},</if>
+            <if test="resPayload != null">res_payload = #{resPayload},</if>
         </trim>
         where id = #{id}
     </update>

+ 2 - 1
ems/ems-core/src/main/resources/mapper/ems/EmsObjAttrMapper.xml

@@ -20,6 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="attrName"    column="attr_name"    />
         <result property="attrValue"    column="attr_value"    />
         <result property="attrValueName"    column="attr_value_name"    />
+        <result property="attrUnit"    column="attr_unit"    />
         <result property="updateTime"    column="update_time"    />
     </resultMap>
 
@@ -45,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectObjAttrDto"  resultMap="ObjAttrDtoResult">
         select
-            a.attr_group, a.attr_key, a.attr_name, v.attr_value, e.attr_value_name, v.update_time from  adm_ems_obj_attr a
+            a.attr_group, a.attr_key, a.attr_name, v.attr_value, e.attr_value_name, a.attr_unit, v.update_time from  adm_ems_obj_attr a
         left join
             (
                select

+ 57 - 0
ems/ems-core/src/main/resources/mapper/ems/EmsObjReportLogMapper.xml

@@ -0,0 +1,57 @@
+<?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.EmsObjReportLogMapper">
+    
+    <resultMap type="com.ruoyi.ems.domain.EmsObjReportLog" id="objLogResult">
+        <result property="id"    column="id"    />
+        <result property="objCode"    column="obj_code"    />
+        <result property="objType"    column="obj_type"    />
+        <result property="msgDesc"    column="msg_desc"    />
+        <result property="reportPayload"    column="report_payload"    />
+        <result property="reportTime"    column="report_time"    />
+    </resultMap>
+
+    <sql id="selectList">
+        select id, obj_code, obj_type, msg_desc, report_time from adm_ems_obj_report_log
+    </sql>
+
+    <sql id="selectDetail">
+        select id, obj_code, obj_type, msg_desc, report_time, report_payload from adm_ems_obj_report_log
+    </sql>
+
+    <select id="selectLogById" parameterType="java.lang.Long" resultMap="objLogResult">
+        <include refid="selectDetail"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectLog" parameterType="com.ruoyi.ems.domain.EmsObjReportLog" resultMap="objLogResult">
+        <include refid="selectList"/>
+        <where>  
+            <if test="objCode != null  and objCode != ''"> and obj_code = #{objCode}</if>
+            <if test="objType != null "> and obj_type = #{objType}</if>
+            <if test="startRecTime != null  and startRecTime != '' and endRecTime != null and endRecTime !=''">
+                and report_time between #{startRecTime} and #{endRecTime}
+            </if>
+        </where>
+    </select>
+
+    <insert id="insertLog" parameterType="com.ruoyi.ems.domain.EmsObjReportLog" useGeneratedKeys="true" keyProperty="id">
+        insert into adm_ems_obj_report_log
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="objCode != null and objCode != ''">obj_code,</if>
+            <if test="objType != null">obj_type,</if>
+            <if test="msgDesc != null and msgDesc != ''">msg_desc,</if>
+            <if test="reportTime != null">report_time,</if>
+            <if test="reportPayload != null">report_payload,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="objCode != null and objCode != ''">#{objCode},</if>
+            <if test="objType != null">#{objType},</if>
+            <if test="msgDesc != null and msgDesc != ''">#{msgDesc},</if>
+            <if test="reportTime != null">#{reportTime},</if>
+            <if test="reportPayload != null">#{reportPayload},</if>
+         </trim>
+    </insert>
+</mapper>

+ 18 - 2
ems/sql/ems_server.sql

@@ -662,16 +662,32 @@ create table adm_ems_obj_ability_call_log  (
   `model_code`      varchar(64)     not null                     comment '模型code',
   `ability_key`     varchar(128)    not null                     comment '能力键',
   `call_time`       datetime        not null                     comment '调用时间',
-  `call_param`      text            default null                 comment '调用参数',
+  `call_payload`      text            default null                 comment '调用参数',
   `call_status`     int             not null                     comment '调用状态',
   `res_time`        datetime        default null                 comment '响应时间',
-  `res_param`       text            default null                 comment '响应内容',
+  `res_payload`       text            default null                 comment '响应内容',
   primary key (`id`),
   key i_ability_call_log(`obj_code`, `obj_type`, `ability_key`, `call_time`)
 ) engine=innodb auto_increment=1 comment = '能源对象能力调用日志表';
 
 
 -- ----------------------------
+-- 能源对象能力调用日志表
+-- ----------------------------
+drop table if exists adm_ems_obj_report_log;
+create table adm_ems_obj_report_log  (
+  `id`              bigint(20)      not null auto_increment      comment '序号',
+  `obj_code`        varchar(64)     not null                     comment '对象代码',
+  `obj_type`        int             not null                     comment '对象类型',
+  `msg_desc`        varchar(128)    default null                 comment '消息描述',
+  `report_time`     datetime        not null                     comment '上报时间',
+  `report_payload`  text            default null                 comment '上报参数',
+  primary key (`id`),
+  key i_obj_report_log(`obj_code`, `obj_type`, `report_time`)
+) engine=innodb auto_increment=1 comment = '能源对象上报日志表';
+
+
+-- ----------------------------
 -- 能源设施事件表
 -- ----------------------------
 drop table if exists adm_ems_obj_event;