diff --git a/Dockerfile b/Dockerfile
index 254c30d..7f43947 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,9 +5,13 @@ WORKDIR /go/src/panda
COPY ./pandax ./
COPY ./config.yml ./
COPY ./resource ./resource
+COPY ./uploads ./uploads
RUN chmod 755 ./pandax
EXPOSE 7788
+EXPOSE 9001
+EXPOSE 8801
+EXPOSE 5060
ENTRYPOINT ./pandax
\ No newline at end of file
diff --git a/README.md b/README.md
index e0c4780..5de0d3e 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# PandaX
-PandaX 物联网快速开发基座
+PandaX企业级物联网平台快速开发框架
基于Go前后端分离架构,代码精简,开箱即用,前端紧随前沿 Vue3.0 + TypeScript + vite3 + Element-plus技术
@@ -62,13 +62,12 @@
- ✔ **`代码生成`** - _可直接通过框架生成前后端基础业务代码(go、vue),减少开发时间。_
- ✔ **`组态大屏设计器`** - _通过拖拉拽直接生成组态、大屏。_
- ✔ **`规则链设计`** - _物联网规则链过滤_
+- ✔ **`表单设计`** - _表单设计_
- ✔ **`报表设计`** - _数据报表设计_
- ✔ **`产品管理`** - _设备的产品管理_
- ✔ **`设备管理`** - _设备的管理_
## 🛠 以后可能会有什么NB功能?
-- 开发中 **`应用管理`** - _基于K8S编排能力,创建应用管理模块。_
-- 开发中 **`多协议接入`** - _根据插件形式创建多协议接入_
- 开发中 **`3D组态`** - _根据2d组态自动生成3D组态_
- 开发中 **`数字孪生编辑器`** - _web直接构建数字孪生模型_
@@ -107,11 +106,6 @@
更多功能请访问系统。
-
-## ❤特别鸣谢
-
- * 感谢[VUE-NEXT-ADMIN](https://gitee.com/lyt-top/vue-next-admin)
-
---
版权说明
---
diff --git a/apps/develop/api/gen.go b/apps/develop/api/gen.go
index d0dcda8..ed37f3b 100644
--- a/apps/develop/api/gen.go
+++ b/apps/develop/api/gen.go
@@ -1,7 +1,7 @@
package api
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/develop/gen"
"pandax/apps/develop/services"
)
diff --git a/apps/develop/api/table.go b/apps/develop/api/table.go
index 3abd4c8..2fb09b7 100644
--- a/apps/develop/api/table.go
+++ b/apps/develop/api/table.go
@@ -1,9 +1,9 @@
package api
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/develop/api/vo"
"pandax/apps/develop/entity"
"pandax/apps/develop/gen"
diff --git a/apps/develop/entity/dev_gen_table.go b/apps/develop/entity/dev_gen_table.go
index 0d16202..2a61572 100644
--- a/apps/develop/entity/dev_gen_table.go
+++ b/apps/develop/entity/dev_gen_table.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
type DevGenTable struct {
TableId int64 `gorm:"primaryKey;autoIncrement" json:"tableId"` // 编号
diff --git a/apps/develop/gen/gen.go b/apps/develop/gen/gen.go
index 1856c2a..3acacda 100644
--- a/apps/develop/gen/gen.go
+++ b/apps/develop/gen/gen.go
@@ -3,8 +3,8 @@ package gen
import (
"bytes"
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/utils"
"github.com/kakuilan/kgo"
"os"
"pandax/apps/develop/entity"
diff --git a/apps/develop/router/gen.go b/apps/develop/router/gen.go
index 9d10a19..724579a 100644
--- a/apps/develop/router/gen.go
+++ b/apps/develop/router/gen.go
@@ -1,7 +1,7 @@
package router
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/develop/api"
diff --git a/apps/develop/router/table.go b/apps/develop/router/table.go
index d073090..343db9b 100644
--- a/apps/develop/router/table.go
+++ b/apps/develop/router/table.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/develop/api"
diff --git a/apps/develop/services/gen_table.go b/apps/develop/services/gen_table.go
index 5f279c4..dc0f24b 100644
--- a/apps/develop/services/gen_table.go
+++ b/apps/develop/services/gen_table.go
@@ -2,8 +2,8 @@ package services
import (
"errors"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/develop/entity"
"pandax/pkg/global"
)
diff --git a/apps/develop/services/gen_table_column.go b/apps/develop/services/gen_table_column.go
index 41d69c7..42d998f 100644
--- a/apps/develop/services/gen_table_column.go
+++ b/apps/develop/services/gen_table_column.go
@@ -2,7 +2,7 @@ package services
import (
"errors"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/develop/entity"
"pandax/pkg/global"
)
diff --git a/apps/device/api/device.go b/apps/device/api/device.go
index ed7a8fe..d99dc63 100644
--- a/apps/device/api/device.go
+++ b/apps/device/api/device.go
@@ -8,9 +8,9 @@ package api
import (
"encoding/json"
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"pandax/pkg/global"
"pandax/pkg/mqtt"
@@ -107,7 +107,7 @@ func (p *DeviceApi) DownAttribute(rc *restfulx.ReqCtx) {
key: value,
}
content, _ := json.Marshal(contentMap)
- var rpc = &mqtt.RpcRequest{Client: global.MqttClient, RequestId: 1, Mode: "single"}
+ var rpc = &mqtt.RpcRequest{Client: global.MqttClient, Mode: "single"}
rpc.GetRequestId()
err := rpc.RequestAttributes(mqtt.RpcPayload{Params: string(content)})
biz.ErrIsNil(err, "属性下发失败")
diff --git a/apps/device/api/device_alarm.go b/apps/device/api/device_alarm.go
index d8a167d..ede50e8 100644
--- a/apps/device/api/device_alarm.go
+++ b/apps/device/api/device_alarm.go
@@ -2,8 +2,8 @@ package api
// ==========================================================================
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"strings"
"pandax/apps/device/entity"
diff --git a/apps/device/api/device_cmd.go b/apps/device/api/device_cmd.go
index 1a806c5..ad2f289 100644
--- a/apps/device/api/device_cmd.go
+++ b/apps/device/api/device_cmd.go
@@ -2,9 +2,9 @@ package api
// ==========================================================================
import (
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"pandax/pkg/global"
"pandax/pkg/mqtt"
@@ -50,7 +50,7 @@ func (p *DeviceCmdLogApi) InsertDeviceCmdLog(rc *restfulx.ReqCtx) {
// 下发指令
var rpc = &mqtt.RpcRequest{Client: global.MqttClient, Mode: "single"}
rpc.GetRequestId()
- err = rpc.RequestCmd(mqtt.RpcPayload{Method: data.CmdName, Params: data.CmdContent})
+ _, err = rpc.RequestCmd(mqtt.RpcPayload{Method: data.CmdName, Params: data.CmdContent})
if err != nil {
global.Log.Error("指令下发失败")
}
diff --git a/apps/device/api/device_group.go b/apps/device/api/device_group.go
index 106317a..d5f62ed 100644
--- a/apps/device/api/device_group.go
+++ b/apps/device/api/device_group.go
@@ -1,7 +1,7 @@
package api
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"pandax/apps/device/entity"
"pandax/apps/device/services"
diff --git a/apps/device/api/product.go b/apps/device/api/product.go
index 4cff209..ac335d9 100644
--- a/apps/device/api/product.go
+++ b/apps/device/api/product.go
@@ -7,9 +7,9 @@ package api
// ==========================================================================
import (
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"pandax/pkg/global"
"strings"
diff --git a/apps/device/api/product_category.go b/apps/device/api/product_category.go
index 9e36c75..bdbb1a4 100644
--- a/apps/device/api/product_category.go
+++ b/apps/device/api/product_category.go
@@ -1,7 +1,7 @@
package api
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"pandax/apps/device/entity"
"pandax/apps/device/services"
diff --git a/apps/device/api/product_ota.go b/apps/device/api/product_ota.go
index 58246b1..9e32354 100644
--- a/apps/device/api/product_ota.go
+++ b/apps/device/api/product_ota.go
@@ -2,8 +2,8 @@ package api
// ==========================================================================
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"strings"
diff --git a/apps/device/api/product_template.go b/apps/device/api/product_template.go
index 8f4f22a..b254b85 100644
--- a/apps/device/api/product_template.go
+++ b/apps/device/api/product_template.go
@@ -1,9 +1,9 @@
package api
import (
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"log"
"pandax/pkg/global"
diff --git a/apps/device/router/device.go b/apps/device/router/device.go
index 8b24c90..765400c 100644
--- a/apps/device/router/device.go
+++ b/apps/device/router/device.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/device/api"
"pandax/apps/device/entity"
"pandax/apps/device/services"
diff --git a/apps/device/router/device_alarm.go b/apps/device/router/device_alarm.go
index a1de111..c882d14 100644
--- a/apps/device/router/device_alarm.go
+++ b/apps/device/router/device_alarm.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/device/api"
"pandax/apps/device/entity"
"pandax/apps/device/services"
diff --git a/apps/device/router/device_cmd.go b/apps/device/router/device_cmd.go
index dcc292b..b734ea8 100644
--- a/apps/device/router/device_cmd.go
+++ b/apps/device/router/device_cmd.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/device/api"
"pandax/apps/device/entity"
"pandax/apps/device/services"
diff --git a/apps/device/router/device_group.go b/apps/device/router/device_group.go
index b65bad2..75be435 100644
--- a/apps/device/router/device_group.go
+++ b/apps/device/router/device_group.go
@@ -1,7 +1,7 @@
package router
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/device/api"
diff --git a/apps/device/router/product.go b/apps/device/router/product.go
index 5dd22b9..0dcce47 100644
--- a/apps/device/router/product.go
+++ b/apps/device/router/product.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/device/api"
"pandax/apps/device/entity"
"pandax/apps/device/services"
diff --git a/apps/device/router/product_category.go b/apps/device/router/product_category.go
index 15ac48d..08068cb 100644
--- a/apps/device/router/product_category.go
+++ b/apps/device/router/product_category.go
@@ -1,7 +1,7 @@
package router
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/device/api"
diff --git a/apps/device/router/product_ota.go b/apps/device/router/product_ota.go
index 24663a5..092ee7d 100644
--- a/apps/device/router/product_ota.go
+++ b/apps/device/router/product_ota.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/device/api"
"pandax/apps/device/entity"
"pandax/apps/device/services"
diff --git a/apps/device/router/product_template.go b/apps/device/router/product_template.go
index 4c0ac9c..a6945d2 100644
--- a/apps/device/router/product_template.go
+++ b/apps/device/router/product_template.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/device/api"
"pandax/apps/device/entity"
"pandax/apps/device/services"
diff --git a/apps/device/services/device.go b/apps/device/services/device.go
index adfcd06..43ad352 100644
--- a/apps/device/services/device.go
+++ b/apps/device/services/device.go
@@ -2,7 +2,7 @@ package services
import (
"context"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/device/entity"
"pandax/pkg/global"
"pandax/pkg/tool"
diff --git a/apps/device/services/device_alarm.go b/apps/device/services/device_alarm.go
index 0b2428d..b357e91 100644
--- a/apps/device/services/device_alarm.go
+++ b/apps/device/services/device_alarm.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/device/entity"
"pandax/pkg/global"
)
diff --git a/apps/device/services/device_cmd_log.go b/apps/device/services/device_cmd_log.go
index 674a4c3..025ff39 100644
--- a/apps/device/services/device_cmd_log.go
+++ b/apps/device/services/device_cmd_log.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/device/entity"
"pandax/pkg/global"
"time"
diff --git a/apps/device/services/device_group.go b/apps/device/services/device_group.go
index 8666308..af9ccff 100644
--- a/apps/device/services/device_group.go
+++ b/apps/device/services/device_group.go
@@ -2,7 +2,7 @@ package services
import (
"errors"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/device/entity"
"pandax/pkg/global"
)
diff --git a/apps/device/services/product.go b/apps/device/services/product.go
index 289a0b1..f15c575 100644
--- a/apps/device/services/product.go
+++ b/apps/device/services/product.go
@@ -2,7 +2,7 @@ package services
import (
"context"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"log"
"pandax/apps/device/entity"
ruleEntity "pandax/apps/rule/entity"
diff --git a/apps/device/services/product_category.go b/apps/device/services/product_category.go
index 2aa5af8..c1da14c 100644
--- a/apps/device/services/product_category.go
+++ b/apps/device/services/product_category.go
@@ -2,7 +2,7 @@ package services
import (
"errors"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/device/entity"
"pandax/pkg/global"
)
diff --git a/apps/device/services/product_ota.go b/apps/device/services/product_ota.go
index 00e53f2..f832e6f 100644
--- a/apps/device/services/product_ota.go
+++ b/apps/device/services/product_ota.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"log"
"pandax/apps/device/entity"
"pandax/pkg/global"
diff --git a/apps/device/services/product_template.go b/apps/device/services/product_template.go
index 0bffa31..50fbb71 100644
--- a/apps/device/services/product_template.go
+++ b/apps/device/services/product_template.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/device/entity"
"pandax/pkg/global"
"strings"
diff --git a/apps/job/api/job.go b/apps/job/api/job.go
index e2b73ab..9a17629 100644
--- a/apps/job/api/job.go
+++ b/apps/job/api/job.go
@@ -1,9 +1,9 @@
package api
import (
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"log"
"pandax/apps/job/api/from"
diff --git a/apps/job/api/log_job.go b/apps/job/api/log_job.go
index 01122c5..5c24242 100644
--- a/apps/job/api/log_job.go
+++ b/apps/job/api/log_job.go
@@ -1,9 +1,9 @@
package api
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/job/entity"
"pandax/apps/job/services"
)
diff --git a/apps/job/router/job.go b/apps/job/router/job.go
index 36cad32..331b738 100644
--- a/apps/job/router/job.go
+++ b/apps/job/router/job.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/job/api"
diff --git a/apps/job/router/job_log.go b/apps/job/router/job_log.go
index d9c4ef4..823a1bd 100644
--- a/apps/job/router/job_log.go
+++ b/apps/job/router/job_log.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/job/api"
diff --git a/apps/job/services/job.go b/apps/job/services/job.go
index cf79a57..a6af771 100644
--- a/apps/job/services/job.go
+++ b/apps/job/services/job.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/job/entity"
"pandax/pkg/global"
)
diff --git a/apps/job/services/log_job.go b/apps/job/services/log_job.go
index 5b40198..9697593 100644
--- a/apps/job/services/log_job.go
+++ b/apps/job/services/log_job.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/job/entity"
"pandax/pkg/global"
)
diff --git a/apps/log/api/log_login.go b/apps/log/api/log_login.go
index e346178..400f8c9 100644
--- a/apps/log/api/log_login.go
+++ b/apps/log/api/log_login.go
@@ -1,9 +1,9 @@
package api
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/log/entity"
"pandax/apps/log/services"
)
diff --git a/apps/log/api/log_oper.go b/apps/log/api/log_oper.go
index 564653b..903059d 100644
--- a/apps/log/api/log_oper.go
+++ b/apps/log/api/log_oper.go
@@ -1,9 +1,9 @@
package api
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"log"
"pandax/apps/log/entity"
"pandax/apps/log/services"
diff --git a/apps/log/entity/log_login.go b/apps/log/entity/log_login.go
index f297ec5..2f6d7ea 100644
--- a/apps/log/entity/log_login.go
+++ b/apps/log/entity/log_login.go
@@ -1,7 +1,7 @@
package entity
import (
- "github.com/XM-GO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/model"
"time"
)
diff --git a/apps/log/entity/log_oper.go b/apps/log/entity/log_oper.go
index 11bd57c..fdee662 100644
--- a/apps/log/entity/log_oper.go
+++ b/apps/log/entity/log_oper.go
@@ -1,7 +1,7 @@
package entity
import (
- "github.com/XM-GO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/model"
)
type LogOper struct {
diff --git a/apps/log/router/login_log.go b/apps/log/router/login_log.go
index 54dec1b..f1ebcff 100644
--- a/apps/log/router/login_log.go
+++ b/apps/log/router/login_log.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/log/api"
diff --git a/apps/log/router/oper_log.go b/apps/log/router/oper_log.go
index 25f1d9e..044ebdb 100644
--- a/apps/log/router/oper_log.go
+++ b/apps/log/router/oper_log.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/log/api"
diff --git a/apps/log/services/log_login.go b/apps/log/services/log_login.go
index 898af23..6e99936 100644
--- a/apps/log/services/log_login.go
+++ b/apps/log/services/log_login.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/log/entity"
"pandax/pkg/global"
)
diff --git a/apps/log/services/log_oper.go b/apps/log/services/log_oper.go
index d90155e..1d2f380 100644
--- a/apps/log/services/log_oper.go
+++ b/apps/log/services/log_oper.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/log/entity"
"pandax/pkg/global"
)
diff --git a/apps/rule/api/rulechain.go b/apps/rule/api/rulechain.go
index 07f4035..b95172b 100644
--- a/apps/rule/api/rulechain.go
+++ b/apps/rule/api/rulechain.go
@@ -2,9 +2,9 @@ package api
import (
"context"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"github.com/kakuilan/kgo"
"pandax/apps/rule/entity"
"pandax/apps/rule/services"
@@ -24,9 +24,8 @@ func (r *RuleChainApi) GetNodeLabels(rc *restfulx.ReqCtx) {
func (r *RuleChainApi) RuleChainTest(rc *restfulx.ReqCtx) {
code := restfulx.QueryParam(rc, "code")
instance, _ := rule_engine.NewRuleChainInstance([]byte(code))
- newMessage := message.NewMessage()
- newMessage.SetMetadata(message.NewMetadata())
- instance.StartRuleChain(context.Background(), newMessage)
+ msg := message.NewMessage("1", message.TelemetryMes, message.Msg{"temperature": 60.4, "humidity": 32.5}, message.Metadata{})
+ instance.StartRuleChain(context.Background(), msg)
rc.ResData = []map[string]interface{}{}
}
diff --git a/apps/rule/api/rulechain_log.go b/apps/rule/api/rulechain_log.go
index f0b9a6a..8c190fd 100644
--- a/apps/rule/api/rulechain_log.go
+++ b/apps/rule/api/rulechain_log.go
@@ -1,8 +1,8 @@
package api
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/rule/entity"
"pandax/apps/rule/services"
"pandax/pkg/rule_engine/nodes"
diff --git a/apps/rule/router/rulechain.go b/apps/rule/router/rulechain.go
index 8a50b41..f5e07ab 100644
--- a/apps/rule/router/rulechain.go
+++ b/apps/rule/router/rulechain.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/rule/api"
diff --git a/apps/rule/router/rulechain_log.go b/apps/rule/router/rulechain_log.go
index 6cfc666..772cb03 100644
--- a/apps/rule/router/rulechain_log.go
+++ b/apps/rule/router/rulechain_log.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/rule/api"
diff --git a/apps/rule/services/rulechain.go b/apps/rule/services/rulechain.go
index 35088ba..2f087eb 100644
--- a/apps/rule/services/rulechain.go
+++ b/apps/rule/services/rulechain.go
@@ -7,7 +7,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"log"
"pandax/apps/rule/entity"
"pandax/pkg/events"
diff --git a/apps/rule/services/rulechain_log.go b/apps/rule/services/rulechain_log.go
index f5f1246..4f349aa 100644
--- a/apps/rule/services/rulechain_log.go
+++ b/apps/rule/services/rulechain_log.go
@@ -7,7 +7,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/rule/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/api/api.go b/apps/system/api/api.go
index d7595f8..f2b8bc7 100644
--- a/apps/system/api/api.go
+++ b/apps/system/api/api.go
@@ -1,10 +1,10 @@
package api
import (
- "github.com/XM-GO/PandaKit/casbin"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/casbin"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
entity "pandax/apps/system/entity"
services "pandax/apps/system/services"
"pandax/pkg/global"
diff --git a/apps/system/api/config.go b/apps/system/api/config.go
index c8669b0..9f5878f 100644
--- a/apps/system/api/config.go
+++ b/apps/system/api/config.go
@@ -1,10 +1,10 @@
package api
import (
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
entity "pandax/apps/system/entity"
services "pandax/apps/system/services"
)
diff --git a/apps/system/api/dept.go b/apps/system/api/dept.go
index 38fc5f6..befa3f7 100644
--- a/apps/system/api/dept.go
+++ b/apps/system/api/dept.go
@@ -3,9 +3,9 @@ package api
import (
"errors"
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/system/api/vo"
"pandax/apps/system/entity"
"pandax/apps/system/services"
diff --git a/apps/system/api/dict.go b/apps/system/api/dict.go
index 7a9cdd3..d74fefd 100644
--- a/apps/system/api/dict.go
+++ b/apps/system/api/dict.go
@@ -2,10 +2,10 @@ package api
import (
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
entity "pandax/apps/system/entity"
services "pandax/apps/system/services"
"pandax/pkg/global"
diff --git a/apps/system/api/menu.go b/apps/system/api/menu.go
index d5a3c16..e65e46f 100644
--- a/apps/system/api/menu.go
+++ b/apps/system/api/menu.go
@@ -1,9 +1,9 @@
package api
import (
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/system/api/vo"
entity "pandax/apps/system/entity"
services "pandax/apps/system/services"
diff --git a/apps/system/api/notice.go b/apps/system/api/notice.go
index fb4f2ce..de1f1fa 100644
--- a/apps/system/api/notice.go
+++ b/apps/system/api/notice.go
@@ -1,9 +1,9 @@
package api
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/system/entity"
"pandax/apps/system/services"
"strings"
diff --git a/apps/system/api/post.go b/apps/system/api/post.go
index 3ae1708..0e289a5 100644
--- a/apps/system/api/post.go
+++ b/apps/system/api/post.go
@@ -3,10 +3,10 @@ package api
import (
"errors"
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/system/entity"
"pandax/apps/system/services"
"pandax/pkg/global"
diff --git a/apps/system/api/role.go b/apps/system/api/role.go
index 1e60d33..fc02fb6 100644
--- a/apps/system/api/role.go
+++ b/apps/system/api/role.go
@@ -3,11 +3,11 @@ package api
import (
"errors"
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/casbin"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/casbin"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
entity "pandax/apps/system/entity"
services "pandax/apps/system/services"
"pandax/pkg/global"
diff --git a/apps/system/api/system.go b/apps/system/api/system.go
index ab3c576..1d50000 100644
--- a/apps/system/api/system.go
+++ b/apps/system/api/system.go
@@ -2,9 +2,9 @@ package api
import (
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/ws"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/ws"
"github.com/emicklei/go-restful/v3"
"github.com/gorilla/websocket"
"github.com/kakuilan/kgo"
diff --git a/apps/system/api/tenant.go b/apps/system/api/tenant.go
index 1f70651..19e1d20 100644
--- a/apps/system/api/tenant.go
+++ b/apps/system/api/tenant.go
@@ -6,9 +6,9 @@ package api
* @Date 2022/7/14 17:55
**/
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/system/entity"
"pandax/apps/system/services"
)
diff --git a/apps/system/api/upload.go b/apps/system/api/upload.go
index d48bd03..48e86bd 100644
--- a/apps/system/api/upload.go
+++ b/apps/system/api/upload.go
@@ -2,9 +2,9 @@ package api
import (
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/oss"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/oss"
+ "github.com/PandaXGO/PandaKit/restfulx"
"net/http"
"os"
"pandax/pkg/config"
diff --git a/apps/system/api/user.go b/apps/system/api/user.go
index 18bdac0..e6f30fa 100644
--- a/apps/system/api/user.go
+++ b/apps/system/api/user.go
@@ -1,8 +1,8 @@
package api
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/token"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/token"
"github.com/dgrijalva/jwt-go"
"github.com/emicklei/go-restful/v3"
"github.com/kakuilan/kgo"
@@ -16,11 +16,11 @@ import (
logEntity "pandax/apps/log/entity"
logServices "pandax/apps/log/services"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/captcha"
- filek "github.com/XM-GO/PandaKit/file"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/captcha"
+ filek "github.com/PandaXGO/PandaKit/file"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"pandax/apps/system/services"
"pandax/pkg/global"
"strings"
diff --git a/apps/system/entity/api.go b/apps/system/entity/api.go
index 9167c4a..1b50abe 100644
--- a/apps/system/entity/api.go
+++ b/apps/system/entity/api.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
type SysApi struct {
model.BaseAutoModel
diff --git a/apps/system/entity/config.go b/apps/system/entity/config.go
index 94e2d80..62ff5c7 100644
--- a/apps/system/entity/config.go
+++ b/apps/system/entity/config.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
type SysConfig struct {
ConfigId int64 `json:"configId" gorm:"primaryKey;AUTO_INCREMENT;comment:主键编码"`
diff --git a/apps/system/entity/dept.go b/apps/system/entity/dept.go
index e8c1ddd..a82343e 100644
--- a/apps/system/entity/dept.go
+++ b/apps/system/entity/dept.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
// 部门组织
type SysDept struct {
diff --git a/apps/system/entity/dict.go b/apps/system/entity/dict.go
index 99cdab3..5bccf7a 100644
--- a/apps/system/entity/dict.go
+++ b/apps/system/entity/dict.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
type SysDictData struct {
DictCode int64 `json:"dictCode" gorm:"primary_key;AUTO_INCREMENT"`
diff --git a/apps/system/entity/menu.go b/apps/system/entity/menu.go
index b84d15d..2d89ba5 100644
--- a/apps/system/entity/menu.go
+++ b/apps/system/entity/menu.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
type SysMenu struct {
MenuId int64 `json:"menuId" gorm:"primary_key;AUTO_INCREMENT"`
diff --git a/apps/system/entity/notice.go b/apps/system/entity/notice.go
index 224b2e4..d19186d 100644
--- a/apps/system/entity/notice.go
+++ b/apps/system/entity/notice.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
type SysNotice struct {
NoticeId int64 `json:"noticeId" gorm:"primary_key;AUTO_INCREMENT"`
diff --git a/apps/system/entity/post.go b/apps/system/entity/post.go
index f9b6e7c..cb02b63 100644
--- a/apps/system/entity/post.go
+++ b/apps/system/entity/post.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
type SysPost struct {
PostId int64 `gorm:"primary_key;AUTO_INCREMENT" json:"postId"`
diff --git a/apps/system/entity/role.go b/apps/system/entity/role.go
index f25352b..72a4d04 100644
--- a/apps/system/entity/role.go
+++ b/apps/system/entity/role.go
@@ -1,8 +1,8 @@
package entity
import (
- "github.com/XM-GO/PandaKit/casbin"
- "github.com/XM-GO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/casbin"
+ "github.com/PandaXGO/PandaKit/model"
)
type SysRole struct {
diff --git a/apps/system/entity/tenant.go b/apps/system/entity/tenant.go
index 1029f8e..b856cf2 100644
--- a/apps/system/entity/tenant.go
+++ b/apps/system/entity/tenant.go
@@ -1,7 +1,7 @@
package entity
import (
- "github.com/XM-GO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/model"
"time"
)
diff --git a/apps/system/entity/user.go b/apps/system/entity/user.go
index d5548f8..b674f76 100644
--- a/apps/system/entity/user.go
+++ b/apps/system/entity/user.go
@@ -1,6 +1,6 @@
package entity
-import "github.com/XM-GO/PandaKit/model"
+import "github.com/PandaXGO/PandaKit/model"
type LoginM struct {
Username string `gorm:"type:varchar(64)" json:"username"`
diff --git a/apps/system/router/api.go b/apps/system/router/api.go
index 3929374..d03547a 100644
--- a/apps/system/router/api.go
+++ b/apps/system/router/api.go
@@ -1,9 +1,9 @@
package router
import (
- "github.com/XM-GO/PandaKit/casbin"
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/casbin"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/config.go b/apps/system/router/config.go
index 413e2fb..7f12592 100644
--- a/apps/system/router/config.go
+++ b/apps/system/router/config.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/dept.go b/apps/system/router/dept.go
index a4e5b0f..1723c24 100644
--- a/apps/system/router/dept.go
+++ b/apps/system/router/dept.go
@@ -1,7 +1,7 @@
package router
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/dict.go b/apps/system/router/dict.go
index 95c3dc6..a6b8180 100644
--- a/apps/system/router/dict.go
+++ b/apps/system/router/dict.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/menu.go b/apps/system/router/menu.go
index c38578b..dbd0f92 100644
--- a/apps/system/router/menu.go
+++ b/apps/system/router/menu.go
@@ -1,7 +1,7 @@
package router
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/notice.go b/apps/system/router/notice.go
index 7608c62..62e8605 100644
--- a/apps/system/router/notice.go
+++ b/apps/system/router/notice.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/post.go b/apps/system/router/post.go
index 0c7675d..8da3011 100644
--- a/apps/system/router/post.go
+++ b/apps/system/router/post.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/role.go b/apps/system/router/role.go
index 8a62773..5645fab 100644
--- a/apps/system/router/role.go
+++ b/apps/system/router/role.go
@@ -1,8 +1,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/tenant.go b/apps/system/router/tenant.go
index 9d84536..48121a9 100644
--- a/apps/system/router/tenant.go
+++ b/apps/system/router/tenant.go
@@ -7,8 +7,8 @@ package router
**/
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/upload.go b/apps/system/router/upload.go
index 2cae168..79cec66 100644
--- a/apps/system/router/upload.go
+++ b/apps/system/router/upload.go
@@ -1,7 +1,7 @@
package router
import (
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
diff --git a/apps/system/router/user.go b/apps/system/router/user.go
index 95565f8..d45a106 100644
--- a/apps/system/router/user.go
+++ b/apps/system/router/user.go
@@ -1,7 +1,7 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/model"
restfulspec "github.com/emicklei/go-restful-openapi/v2"
"github.com/emicklei/go-restful/v3"
"pandax/apps/system/api"
@@ -10,7 +10,7 @@ import (
"pandax/apps/system/entity"
"pandax/apps/system/services"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/restfulx"
logServices "pandax/apps/log/services"
)
diff --git a/apps/system/services/api.go b/apps/system/services/api.go
index 48d64f4..ec7197f 100644
--- a/apps/system/services/api.go
+++ b/apps/system/services/api.go
@@ -2,8 +2,8 @@ package services
import (
"errors"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/casbin"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/casbin"
"gorm.io/gorm"
"pandax/apps/system/entity"
"pandax/pkg/global"
diff --git a/apps/system/services/config.go b/apps/system/services/config.go
index 1e53653..9deb01d 100644
--- a/apps/system/services/config.go
+++ b/apps/system/services/config.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/dept.go b/apps/system/services/dept.go
index 2ce287f..30ff5ac 100644
--- a/apps/system/services/dept.go
+++ b/apps/system/services/dept.go
@@ -2,7 +2,7 @@ package services
import (
"errors"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"github.com/kakuilan/kgo"
"pandax/apps/system/entity"
"pandax/pkg/global"
diff --git a/apps/system/services/dict_data.go b/apps/system/services/dict_data.go
index fd8ae31..dbaad3b 100644
--- a/apps/system/services/dict_data.go
+++ b/apps/system/services/dict_data.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/dict_type.go b/apps/system/services/dict_type.go
index 96c16d1..edc4c2b 100644
--- a/apps/system/services/dict_type.go
+++ b/apps/system/services/dict_type.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/menu.go b/apps/system/services/menu.go
index 75307e3..8701bc2 100644
--- a/apps/system/services/menu.go
+++ b/apps/system/services/menu.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/notice.go b/apps/system/services/notice.go
index 2ce1422..62b14e5 100644
--- a/apps/system/services/notice.go
+++ b/apps/system/services/notice.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/post.go b/apps/system/services/post.go
index 6288284..4d319d0 100644
--- a/apps/system/services/post.go
+++ b/apps/system/services/post.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/role.go b/apps/system/services/role.go
index f64c312..52cf316 100644
--- a/apps/system/services/role.go
+++ b/apps/system/services/role.go
@@ -2,7 +2,7 @@ package services
import (
"errors"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/role_dept.go b/apps/system/services/role_dept.go
index 7eccf53..15a6ad1 100644
--- a/apps/system/services/role_dept.go
+++ b/apps/system/services/role_dept.go
@@ -2,7 +2,7 @@ package services
import (
"fmt"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/role_menu.go b/apps/system/services/role_menu.go
index 1b721bc..1e396dd 100644
--- a/apps/system/services/role_menu.go
+++ b/apps/system/services/role_menu.go
@@ -2,7 +2,7 @@ package services
import (
"fmt"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/tenant.go b/apps/system/services/tenant.go
index 1e540b1..c0c4f9f 100644
--- a/apps/system/services/tenant.go
+++ b/apps/system/services/tenant.go
@@ -6,7 +6,7 @@ package services
* @Date 2022/7/14 17:49
**/
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/apps/system/entity"
"pandax/pkg/global"
)
diff --git a/apps/system/services/user.go b/apps/system/services/user.go
index 50d0ce4..f013a0c 100644
--- a/apps/system/services/user.go
+++ b/apps/system/services/user.go
@@ -1,7 +1,7 @@
package services
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"github.com/kakuilan/kgo"
"golang.org/x/crypto/bcrypt"
"pandax/apps/system/entity"
diff --git a/apps/video/api/ys.go b/apps/video/api/ys.go
new file mode 100644
index 0000000..b316cc0
--- /dev/null
+++ b/apps/video/api/ys.go
@@ -0,0 +1,57 @@
+package api
+
+import (
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "pandax/pkg/ys"
+)
+
+type YsApi struct {
+ Ys *ys.Ys
+}
+
+func (j *YsApi) GetDeviceList(rc *restfulx.ReqCtx) {
+ pageNum := restfulx.QueryInt(rc, "pageNum", 1)
+ pageSize := restfulx.QueryInt(rc, "pageSize", 10)
+ devices, total, err := j.Ys.GetDeviceList(pageNum, pageSize)
+ biz.ErrIsNilAppendErr(err, "设备列表获取失败")
+ rc.ResData = model.ResultPage{
+ Total: total,
+ PageNum: int64(pageNum),
+ PageSize: int64(pageNum),
+ Data: devices,
+ }
+}
+
+func (j *YsApi) GetDeviceChannelList(rc *restfulx.ReqCtx) {
+ deviceSerial := restfulx.PathParam(rc, "deviceSerial")
+ cameras, err := j.Ys.GetDeviceChannelList(deviceSerial)
+ biz.ErrIsNilAppendErr(err, "设备通道列表获取失败")
+ rc.ResData = cameras
+}
+
+func (j *YsApi) GetDeviceLiveAddress(rc *restfulx.ReqCtx) {
+ deviceSerial := restfulx.PathParam(rc, "deviceSerial")
+ channelNo := restfulx.QueryInt(rc, "channelNo", 1)
+ live, err := j.Ys.GetDeviceLiveAddress(deviceSerial, channelNo)
+ biz.ErrIsNilAppendErr(err, "设备直播地址获取失败")
+ rc.ResData = live
+}
+
+func (j *YsApi) StartPtz(rc *restfulx.ReqCtx) {
+ deviceSerial := restfulx.PathParam(rc, "deviceSerial")
+ channelNo := restfulx.QueryInt(rc, "channelNo", 1)
+ direction := restfulx.QueryInt(rc, "direction", 0)
+ speed := restfulx.QueryInt(rc, "speed", 0)
+ err := j.Ys.StartPtz(deviceSerial, channelNo, direction, speed)
+ biz.ErrIsNilAppendErr(err, "操作摄像头失败")
+}
+
+func (j *YsApi) StopPtz(rc *restfulx.ReqCtx) {
+ deviceSerial := restfulx.PathParam(rc, "deviceSerial")
+ channelNo := restfulx.QueryInt(rc, "channelNo", 1)
+ direction := restfulx.QueryInt(rc, "direction", 0)
+ err := j.Ys.StopPtz(deviceSerial, channelNo, direction)
+ biz.ErrIsNilAppendErr(err, "停止摄像头失败")
+}
diff --git a/apps/video/router/ys.go b/apps/video/router/ys.go
new file mode 100644
index 0000000..839a307
--- /dev/null
+++ b/apps/video/router/ys.go
@@ -0,0 +1,65 @@
+package router
+
+import (
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ restfulspec "github.com/emicklei/go-restful-openapi/v2"
+ "github.com/emicklei/go-restful/v3"
+ "pandax/apps/video/api"
+ "pandax/pkg/global"
+ "pandax/pkg/ys"
+)
+
+func InitEzvizRouter(container *restful.Container) {
+ // 登录日志
+ s := &api.YsApi{
+ Ys: &ys.Ys{
+ AppKey: global.Conf.Ys.AppKey,
+ Secret: global.Conf.Ys.Secret,
+ },
+ }
+ ws := new(restful.WebService)
+ ws.Path("/video/ys").Produces(restful.MIME_JSON)
+ tags := []string{"ys"}
+
+ ws.Route(ws.GET("/device/list").To(func(request *restful.Request, response *restful.Response) {
+ restfulx.NewReqCtx(request, response).WithLog("获取设备列表").Handle(s.GetDeviceList)
+ }).
+ Doc("获取设备列表").
+ Param(ws.QueryParameter("pageNum", "页数").Required(true).DataType("int")).
+ Param(ws.QueryParameter("pageSize", "每页条数").Required(true).DataType("int")).
+ Metadata(restfulspec.KeyOpenAPITags, tags).
+ Writes(model.ResultPage{}).
+ Returns(200, "OK", model.ResultPage{}))
+
+ ws.Route(ws.GET("/{deviceSerial}/channel").To(func(request *restful.Request, response *restful.Response) {
+ restfulx.NewReqCtx(request, response).WithLog("设备通道列表").Handle(s.GetDeviceChannelList)
+ }).
+ Doc("设备通道列表").
+ Param(ws.PathParameter("deviceSerial", "deviceSerial").DataType("string")).
+ Metadata(restfulspec.KeyOpenAPITags, tags).
+ Writes(ys.Channel{}). // on the response
+ Returns(200, "OK", []ys.Channel{}).
+ Returns(404, "Not Found", nil))
+
+ ws.Route(ws.GET("/{deviceSerial}/start/ptz").To(func(request *restful.Request, response *restful.Response) {
+ restfulx.NewReqCtx(request, response).WithLog("摄像头操作").Handle(s.StartPtz)
+ }).
+ Doc("摄像头操作").
+ Param(ws.PathParameter("deviceSerial", "deviceSerial").DataType("string")).
+ Param(ws.QueryParameter("channelNo", "通道序号").Required(true).DataType("int")).
+ Param(ws.QueryParameter("direction", "方向").Required(true).DataType("int")).
+ Param(ws.QueryParameter("speed", "速度").Required(true).DataType("int")).
+ Metadata(restfulspec.KeyOpenAPITags, tags))
+
+ ws.Route(ws.GET("/{deviceSerial}/stop/ptz").To(func(request *restful.Request, response *restful.Response) {
+ restfulx.NewReqCtx(request, response).WithLog("摄像头操作停止").Handle(s.StopPtz)
+ }).
+ Doc("摄像头操作停止").
+ Param(ws.PathParameter("deviceSerial", "deviceSerial").DataType("string")).
+ Param(ws.QueryParameter("channelNo", "通道序号").Required(true).DataType("int")).
+ Param(ws.QueryParameter("direction", "方向").Required(true).DataType("int")).
+ Metadata(restfulspec.KeyOpenAPITags, tags))
+
+ container.Add(ws)
+}
diff --git a/config.yml b/config.yml
index f940f8c..83e90a3 100644
--- a/config.yml
+++ b/config.yml
@@ -72,13 +72,6 @@ gen:
# 代码生成是使用前端代码存放位置,需要指定到src文件夹,相对路径
frontpath: ../PandaUi/src
-log:
- # 日志等级, trace, debug, info, warn, error, fatal
- level: info
- file:
- path: ./
-# name: panda_log.log
-
# 视频服务器使用的全局配置
global:
http:
@@ -86,6 +79,7 @@ global:
listenaddrtls: :8443 # 用于HTTPS方式访问API的端口配置
gb28181:
+ loglevel: info
#sip服务器地址 默认 自动适配设备网段
sipip: ""
serial: "34020000002000000001"
@@ -93,4 +87,15 @@ gb28181:
password: "pandax"
#sip服务器端口
port:
- sip: udp:5060
\ No newline at end of file
+ sip: tcp:5060
+# 萤石摄像头token
+ys:
+ appKey: 2db7f777fa6f44bdaf1c20b7f065887c
+ secret: bf59b1a2168da4b443473efe9b1cf1b0
+
+log:
+ # 日志等级, trace, debug, info, warn, error, fatal
+ level: info
+ file:
+ path: ./
+ name: panda_log.log
diff --git a/fatal.log b/fatal.log
index 1020b34..4837504 100644
--- a/fatal.log
+++ b/fatal.log
@@ -1,8 +1,19 @@
-2023-08-22 15:15:49--------------------------------
+2023-09-02 12:17:06--------------------------------
+panic: runtime error: index out of range [0] with length 0
-2023-08-22 15:51:54--------------------------------
+goroutine 101 [running]:
+m7s.live/plugin/gb28181/v4.(*GB28181Config).OnEvent(0x3b53c20, {0x2177be0?, 0xc00127c4e0?})
+ D:/workspace/go/pkg/mod/m7s.live/plugin/gb28181/v4@v4.3.9/main.go:83 +0x61d
+m7s.live/engine/v4.(*Plugin).run(0xc0002fe7e0)
+ D:/workspace/go/pkg/mod/m7s.live/engine/v4@v4.13.8/plugin.go:170 +0x13b
+m7s.live/engine/v4.(*Plugin).assign(0xc0002fe7e0)
+ D:/workspace/go/pkg/mod/m7s.live/engine/v4@v4.13.8/plugin.go:154 +0x4db
+m7s.live/engine/v4.Run({0x2c43a38?, 0xc000044050}, {0x23cd9d6, 0xa})
+ D:/workspace/go/pkg/mod/m7s.live/engine/v4@v4.13.8/main.go:135 +0x1197
+created by main.glob..func2
+ D:/workspace/go/project/PandaX/PandaX/main.go:81 +0x2e5
-2023-08-23 16:02:58--------------------------------
+2023-09-02 12:19:16--------------------------------
-2023-08-23 16:05:15--------------------------------
+2023-09-04 11:15:17--------------------------------
diff --git a/go.mod b/go.mod
index c2f6a16..e493780 100644
--- a/go.mod
+++ b/go.mod
@@ -3,8 +3,8 @@ module pandax
go 1.18
require (
+ github.com/PandaXGO/PandaKit v0.0.0-20230901074047-e0e8e4bf2bed
github.com/Shopify/sarama v1.38.1
- github.com/XM-GO/PandaKit v0.0.0-20230628055017-c47e7aa81cd4
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/didip/tollbooth v4.0.2+incompatible
github.com/dop251/goja v0.0.0-20230304130813-e2f543bf4b4c
@@ -76,6 +76,7 @@ require (
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/pprof v0.0.0-20230207041349-798e818bf904 // indirect
+ github.com/gorilla/schema v1.2.0 // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-uuid v1.0.3 // indirect
diff --git a/go.sum b/go.sum
index 920c02a..f57cb73 100644
--- a/go.sum
+++ b/go.sum
@@ -5,6 +5,8 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
+github.com/PandaXGO/PandaKit v0.0.0-20230901074047-e0e8e4bf2bed h1:O8K3C8IoadfpY+VKSMcaPRadPO1DDZbbj4B1opl9ntM=
+github.com/PandaXGO/PandaKit v0.0.0-20230901074047-e0e8e4bf2bed/go.mod h1:/H1PTodkWhRyVqE/1tROVJEO2nwqwE6el7ZzwSebLxY=
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/Shopify/sarama v1.38.1 h1:lqqPUPQZ7zPqYlWpTh+LQ9bhYNu2xJL6k1SJN4WVe2A=
@@ -12,8 +14,6 @@ github.com/Shopify/sarama v1.38.1/go.mod h1:iwv9a67Ha8VNa+TifujYoWGxWnu2kNVAQdSd
github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT0eahc=
github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 h1:5sXbqlSomvdjlRbWyNqkPsJ3Fg+tQZCbgeX1VGljbQY=
github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
-github.com/XM-GO/PandaKit v0.0.0-20230628055017-c47e7aa81cd4 h1:SlGUf970WIctMhu8ZZBNsZfY1bdCbGGo9wLm5V0ceeM=
-github.com/XM-GO/PandaKit v0.0.0-20230628055017-c47e7aa81cd4/go.mod h1:iyVx5byF4Z//dBpXMy22ZtgSnQAN/U9qjwGyU02QfSA=
github.com/aliyun/aliyun-oss-go-sdk v2.2.0+incompatible h1:ht2+VfbXtNLGhCsnTMc6/N26nSTBK6qdhktjYyjJQkk=
github.com/aliyun/aliyun-oss-go-sdk v2.2.0+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
@@ -198,6 +198,8 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/gorilla/schema v1.2.0 h1:YufUaxZYCKGFuAq3c96BOhjgd5nmXiOY9NGzF247Tsc=
+github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
diff --git a/iothub/hook_message_work.go b/iothub/hook_message_work.go
index dc5c8b8..30e6e64 100644
--- a/iothub/hook_message_work.go
+++ b/iothub/hook_message_work.go
@@ -7,12 +7,10 @@ import (
"pandax/apps/device/services"
ruleEntity "pandax/apps/rule/entity"
"pandax/pkg/global"
- "pandax/pkg/mqtt"
"pandax/pkg/rule_engine"
"pandax/pkg/rule_engine/message"
"pandax/pkg/tool"
"pandax/pkg/websocket"
- "strconv"
)
// 消息处理模块
@@ -40,7 +38,9 @@ func (s *HookService) handleOne(msg *DeviceEventInfo) {
switch msg.Type {
case message.RowMes, message.AttributesMes, message.TelemetryMes:
// 发送websocket到云组态
- go SendZtWebsocket(msg.DeviceId, msg.Datas)
+ if msg.Type == message.TelemetryMes {
+ go SendZtWebsocket(msg.DeviceId, msg.Datas)
+ }
// 业务逻辑执行
// 获取规则链代码
chain := getRuleChain(etoken)
@@ -59,24 +59,20 @@ func (s *HookService) handleOne(msg *DeviceEventInfo) {
}
// Rpc请求
case message.RpcRequestMes:
- var datas = mqtt.RpcPayload{}
- err := json.Unmarshal([]byte(msg.Datas), &datas)
- if err != nil {
- global.Log.Error("RPC请求数据解析错误,请检查数据格式")
+ chain := getRuleChain(etoken)
+ dataCode := chain.LfData.DataCode
+ code, err := json.Marshal(dataCode)
+ //新建规则链实体
+ instance, errs := rule_engine.NewRuleChainInstance(code)
+ if len(errs) > 0 {
+ global.Log.Error("规则链初始化失败", errs[0])
return
}
- RequestId, err := strconv.Atoi(msg.RequestId)
+ ruleMessage := buildRuleMessage(etoken, msg, msg.Type)
+ err = instance.StartRuleChain(context.Background(), ruleMessage)
if err != nil {
- global.Log.Error("RPC请求请求iD非整型")
- return
+ global.Log.Error("规则链执行失败", errs)
}
- var rpc = &mqtt.RpcRequest{Client: global.MqttClient, RequestId: RequestId}
- err = rpc.RespondTpc(datas)
- if err != nil {
- global.Log.Error("处理响应失败")
- return
- }
- //services.DeviceCmdLogModelDao.UpdateResp(id, content, state)
case message.DisConnectMes, message.ConnectMes:
// 更改设备在线状态
if msg.Type == message.ConnectMes {
@@ -108,17 +104,16 @@ func getRuleChain(etoken *tool.DeviceAuth) *ruleEntity.RuleDataJson {
return &ruleData
}
-func buildRuleMessage(etoken *tool.DeviceAuth, dei *DeviceEventInfo, msgType string) message.Message {
+func buildRuleMessage(etoken *tool.DeviceAuth, dei *DeviceEventInfo, msgType string) *message.Message {
metadataVals := map[string]interface{}{
"deviceId": etoken.DeviceId,
"deviceName": etoken.Name,
"deviceType": etoken.DeviceType,
"productId": etoken.ProductId,
}
- metadata := message.NewDefaultMetadata(metadataVals)
msgVals := make(map[string]interface{})
json.Unmarshal([]byte(dei.Datas), &msgVals)
- return message.NewMessageWithDetail(etoken.User, msgType, msgVals, metadata)
+ return message.NewMessage(etoken.User, msgType, msgVals, metadataVals)
}
func SendZtWebsocket(deviceId, message string) {
diff --git a/iothub/reverse_control.go b/iothub/reverse_control.go
deleted file mode 100644
index ef5d0c5..0000000
--- a/iothub/reverse_control.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package iothub
-
-// 指令下发
-/*func Control(assets, thingModel, device_name, parameter string, operation bool) error {
- topic := fmt.Sprintf("control/%s/%s", assets, device_name)
- log.Println(topic)
- payload := fmt.Sprintf(`{"method":"control","data":{"parameter": "%s","operation":%t}}`, parameter, operation)
- //Publish(*global.GVA_MQTT, topic, 1, payload)
- return nil
-}
-
-func ControlState(assets, thingModel, device_name string) (map[string]interface{}, error) {
- topic := fmt.Sprintf("control/%s/%s", assets, device_name)
- payload := fmt.Sprintf(`{"method":"state","data":{}}`)
- if Publish(*global.GVA_MQTT, topic, 1, payload) != nil {
- return nil, errors.New("下发获取状态参数指令失败")
- }
- select {
- case state := <-controlState:
- return state, nil
- case <-time.After(10 * time.Second):
- return nil, errors.New("请求指令状态超时")
- }
-}
-*/
diff --git a/main.go b/main.go
index 09a8ff7..2d4ba37 100644
--- a/main.go
+++ b/main.go
@@ -3,10 +3,10 @@ package main
import (
"context"
"fmt"
- "github.com/XM-GO/PandaKit/logger"
- "github.com/XM-GO/PandaKit/rediscli"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/starter"
+ "github.com/PandaXGO/PandaKit/logger"
+ "github.com/PandaXGO/PandaKit/rediscli"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/starter"
"github.com/spf13/cobra"
"log"
"m7s.live/engine/v4"
diff --git a/panda_log.log b/panda_log.log
new file mode 100644
index 0000000..2da3b4e
--- /dev/null
+++ b/panda_log.log
@@ -0,0 +1,400 @@
+2023-09-02 12:19:16.136 [INFO] [D:/workspace/go/pkg/mod/github.com/!panda!x!g!o/!panda!kit@v0.0.0-20230901074047-e0e8e4bf2bed/starter/gorm.go:36] : 连接mysql [root:!MyEMS1@tcp(127.0.0.1:3306)/pandax_iot?charset=utf8&loc=Local&parseTime=true]
+2023-09-02 12:19:16.142 [INFO] [D:/workspace/go/project/PandaX/PandaX/main.go:46] : mysql连接成功
+2023-09-02 12:19:16.144 [INFO] [D:/workspace/go/project/PandaX/PandaX/main.go:51] : Redis连接成功
+2023-09-02 12:19:16.145 [INFO] [D:/workspace/go/project/PandaX/PandaX/main.go:58] : Tdengine连接成功
+2023-09-02 12:19:16.153 [INFO] [D:/workspace/go/project/PandaX/PandaX/main.go:76] : 路由初始化完成
+2023-09-02 12:19:16.153 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/transport/http_server.go:38] : HTTP Server listen: :7788
+2023-09-02 12:19:16.153 [INFO] [D:/workspace/go/project/PandaX/PandaX/iothub/hook.go:37] : IOTHUB HOOK Start SUCCESS,Grpc Server listen: :9001
+2023-09-02 12:19:16.158 [INFO] [D:/workspace/go/project/PandaX/PandaX/apps/job/jobs/jobbase.go:83] : 2023-09-02 12:19:16 [INFO] JobCore start success.
+2023-09-02 12:19:16.160 [INFO] [D:/workspace/go/project/PandaX/PandaX/iothub/hook.go:154] : 账号pandax,密码pandax,开始认证
+2023-09-02 12:19:16.162 [INFO] [D:/workspace/go/project/PandaX/PandaX/iothub/hook.go:96] : Client emqx@172.17.0.2 Connected
+2023-09-02 13:41:42.373 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/user/login] : 登录 ->74ms
+2023-09-02 13:41:42.398 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/user/auth] [uid=1] : 认证信息 ->17ms
+2023-09-02 13:41:46.900 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/notice/list] : 获取通知分页列表 ->153ms
+2023-09-02 13:42:25.722 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/product/category/list/tree/label] [uid=1] : 获取ProductCategory树 ->8ms
+2023-09-02 13:42:25.725 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/product/list] [uid=1] : 获取Product分页列表 ->30ms
+2023-09-02 13:42:25.731 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 13:42:25.794 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/upload/get/d7432e83df771fad85aa4e74235b0591_20230819092625.png] : 获取图片 ->0ms
+2023-09-02 13:43:37.630 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/product/category/list] : 获取ProductCategory列表 ->3ms
+2023-09-02 13:43:37.641 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 13:49:30.139 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/list] [uid=1] [uname=panda] : 获取菜单列表 ->8ms
+2023-09-02 13:49:30.149 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 13:49:30.156 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 13:49:30.165 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 13:49:32.235 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->7ms
+2023-09-02 13:49:32.239 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 13:49:32.252 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 13:49:32.266 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->11ms
+2023-09-02 13:49:32.276 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 13:52:17.206 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->201ms
+2023-09-02 13:52:17.242 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->5ms
+2023-09-02 13:52:24.063 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->66ms
+2023-09-02 13:52:24.072 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 13:52:24.087 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 13:52:24.098 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 13:52:24.108 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 13:56:11.689 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->487ms
+2023-09-02 13:56:11.726 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->6ms
+2023-09-02 13:56:24.456 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->251ms
+2023-09-02 13:56:24.588 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->160ms
+2023-09-02 13:56:24.635 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->47ms
+2023-09-02 13:56:24.710 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->31ms
+2023-09-02 13:56:51.828 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->9ms
+2023-09-02 13:56:51.846 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->18ms
+2023-09-02 13:56:51.858 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 13:56:51.867 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 13:57:29.733 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->7ms
+2023-09-02 13:57:29.744 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 13:57:29.755 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 13:57:29.772 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 13:57:29.773 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->10ms
+2023-09-02 13:58:50.945 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->208ms
+2023-09-02 13:58:50.983 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->7ms
+2023-09-02 13:58:55.494 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->6ms
+2023-09-02 13:58:55.504 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 13:58:55.511 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 13:58:55.519 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 13:58:55.528 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:00:41.399 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->205ms
+2023-09-02 14:00:41.439 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->6ms
+2023-09-02 14:00:59.740 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->11ms
+2023-09-02 14:00:59.760 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->20ms
+2023-09-02 14:00:59.771 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:00:59.781 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:01:17.996 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/list] : 获取角色分页列表 ->7ms
+2023-09-02 14:01:18.000 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 14:01:22.171 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/role/1] [uid=1] [uname=panda] : 获取角色信息 ->9ms
+2023-09-02 14:01:22.178 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/roleMenuTreeSelect/1] : 获取角色菜单树 ->10ms
+2023-09-02 14:01:22.188 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/all] : 获取所有api ->32ms
+2023-09-02 14:01:22.239 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/api/getPolicyPathByRoleId] [uid=1] : 获取角色拥有的api权限 ->6ms
+2023-09-02 14:01:27.793 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [PUT=/system/role] [uid=1] : 修改角色信息 ->1070ms
+2023-09-02 14:01:27.824 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/list] : 获取角色分页列表 ->8ms
+2023-09-02 14:01:45.511 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/api/list] [uid=1] [uname=panda] : 获取api分页列表 ->10ms
+2023-09-02 14:01:45.515 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:01:48.802 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/api/list] [uid=1] [uname=panda] : 获取api分页列表 ->9ms
+2023-09-02 14:01:51.748 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->7ms
+2023-09-02 14:01:53.402 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->9ms
+2023-09-02 14:01:55.402 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/api/list] [uid=1] [uname=panda] : 获取api分页列表 ->8ms
+2023-09-02 14:01:57.603 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->9ms
+2023-09-02 14:01:59.341 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->9ms
+2023-09-02 14:02:02.298 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->8ms
+2023-09-02 14:02:05.147 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->7ms
+2023-09-02 14:02:08.063 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->8ms
+2023-09-02 14:02:10.458 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/api/list] [uid=1] [uname=panda] : 获取api分页列表 ->10ms
+2023-09-02 14:02:12.620 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/api/list] [uid=1] [uname=panda] : 获取api分页列表 ->8ms
+2023-09-02 14:02:16.393 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->10ms
+2023-09-02 14:02:18.576 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->9ms
+2023-09-02 14:02:22.033 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/api/list] [uid=1] : 获取api分页列表 ->8ms
+2023-09-02 14:02:50.695 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/user/login] : 登录 ->77ms
+2023-09-02 14:02:50.720 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/user/auth] [uid=1] : 认证信息 ->17ms
+2023-09-02 14:02:51.189 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/list] : 获取api分页列表 ->32ms
+2023-09-02 14:02:51.198 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 14:04:04.811 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/list] [uid=1] [uname=panda] : 获取菜单列表 ->11ms
+2023-09-02 14:04:04.817 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:04:04.825 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:04:04.832 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->3ms
+2023-09-02 14:04:11.742 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->6ms
+2023-09-02 14:04:11.749 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:04:11.760 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 14:04:11.768 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:04:11.779 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 14:05:45.827 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->192ms
+2023-09-02 14:05:45.862 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->6ms
+2023-09-02 14:06:26.280 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->17ms
+2023-09-02 14:06:26.288 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:06:26.299 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:06:26.308 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:08:07.406 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->9ms
+2023-09-02 14:08:07.413 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:08:07.427 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->10ms
+2023-09-02 14:08:07.436 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:08:07.444 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:10:27.405 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [POST=/system/menu] [uid=1] : 添加菜单信息 ->254ms
+2023-09-02 14:10:27.440 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->4ms
+2023-09-02 14:10:36.443 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->5ms
+2023-09-02 14:10:36.494 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->48ms
+2023-09-02 14:10:36.514 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->15ms
+2023-09-02 14:10:36.532 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->14ms
+2023-09-02 14:10:36.539 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 14:11:20.914 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [PUT=/system/menu] [uid=1] : 修改菜单信息 ->280ms
+2023-09-02 14:11:20.945 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->5ms
+2023-09-02 14:11:24.467 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->46ms
+2023-09-02 14:11:24.488 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->36ms
+2023-09-02 14:11:24.503 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->13ms
+2023-09-02 14:11:24.515 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 14:11:24.525 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 14:12:12.873 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/menu] [uid=1] [uname=panda] : 添加菜单信息 ->211ms
+2023-09-02 14:12:12.905 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/list] [uid=1] [uname=panda] : 获取菜单列表 ->4ms
+2023-09-02 14:12:25.196 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->60ms
+2023-09-02 14:12:25.210 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->10ms
+2023-09-02 14:12:25.222 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:12:25.231 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:12:25.238 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 14:14:00.454 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->452ms
+2023-09-02 14:14:00.490 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->4ms
+2023-09-02 14:14:04.587 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/list] : 获取角色分页列表 ->11ms
+2023-09-02 14:14:04.591 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:14:06.805 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/api/all] [uid=1] [uname=panda] : 获取所有api ->4ms
+2023-09-02 14:14:06.818 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/roleMenuTreeSelect/1] : 获取角色菜单树 ->10ms
+2023-09-02 14:14:06.823 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/1] : 获取角色信息 ->7ms
+2023-09-02 14:14:06.935 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/api/getPolicyPathByRoleId] [uid=1] : 获取角色拥有的api权限 ->7ms
+2023-09-02 14:14:25.259 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [PUT=/system/role] : 修改角色信息 ->1409ms
+2023-09-02 14:14:25.294 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/list] : 获取角色分页列表 ->13ms
+2023-09-02 14:14:46.127 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/list] : 获取角色分页列表 ->18ms
+2023-09-02 14:14:46.134 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->11ms
+2023-09-02 14:15:34.827 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/role/list] [uid=1] : 获取角色分页列表 ->15ms
+2023-09-02 14:15:34.840 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->16ms
+2023-09-02 14:16:49.692 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/user/login] : 登录 ->74ms
+2023-09-02 14:16:49.718 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/user/auth] : 认证信息 ->18ms
+2023-09-02 14:16:50.242 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 14:16:50.257 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/list] : 获取角色分页列表 ->14ms
+2023-09-02 14:25:38.179 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->8ms
+2023-09-02 14:25:38.183 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:25:38.190 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 14:25:38.201 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 14:25:39.864 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->7ms
+2023-09-02 14:25:39.871 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 14:25:39.883 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 14:25:39.892 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:25:39.901 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:27:38.973 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->251ms
+2023-09-02 14:27:39.006 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->5ms
+2023-09-02 14:27:47.232 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->7ms
+2023-09-02 14:27:47.240 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 14:27:47.247 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:27:47.254 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:27:47.262 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:32:36.565 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 14:32:36.577 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/rule/chain/list] : 获取规则引擎分页列表 ->8ms
+2023-09-02 14:32:47.976 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/list] [uid=1] [uname=panda] : 获取菜单列表 ->6ms
+2023-09-02 14:32:47.981 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:32:47.991 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:32:47.997 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:32:53.759 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->5ms
+2023-09-02 14:32:53.766 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:32:53.777 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 14:32:53.785 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:32:53.792 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->3ms
+2023-09-02 14:33:02.857 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [PUT=/system/menu] [uid=1] : 修改菜单信息 ->294ms
+2023-09-02 14:33:02.892 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->5ms
+2023-09-02 14:33:02.909 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->7ms
+2023-09-02 14:42:25.076 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->8ms
+2023-09-02 14:42:25.088 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->10ms
+2023-09-02 14:42:25.098 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:42:25.108 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:42:25.117 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:44:13.047 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->276ms
+2023-09-02 14:44:13.086 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->5ms
+2023-09-02 14:44:13.102 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->6ms
+2023-09-02 14:44:19.800 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->7ms
+2023-09-02 14:44:19.808 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:44:19.818 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:44:19.825 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:44:19.835 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:45:31.220 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->216ms
+2023-09-02 14:45:31.254 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->6ms
+2023-09-02 14:45:31.274 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->5ms
+2023-09-02 14:46:13.324 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->66ms
+2023-09-02 14:46:13.617 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->292ms
+2023-09-02 14:46:13.653 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->39ms
+2023-09-02 14:46:13.690 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->34ms
+2023-09-02 14:46:41.854 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->34ms
+2023-09-02 14:46:41.898 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->53ms
+2023-09-02 14:46:41.928 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->21ms
+2023-09-02 14:46:41.951 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->16ms
+2023-09-02 14:48:42.326 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->12ms
+2023-09-02 14:48:42.334 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->10ms
+2023-09-02 14:48:42.344 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:48:42.352 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 14:48:48.409 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->10ms
+2023-09-02 14:48:48.820 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->415ms
+2023-09-02 14:48:49.076 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->252ms
+2023-09-02 14:48:49.257 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->190ms
+2023-09-02 14:49:32.734 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->9ms
+2023-09-02 14:49:32.742 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 14:49:32.755 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 14:49:32.770 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 14:49:32.776 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->3ms
+2023-09-02 14:50:48.076 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->264ms
+2023-09-02 14:50:48.114 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->6ms
+2023-09-02 14:50:52.452 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->54ms
+2023-09-02 14:50:52.460 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-02 14:50:52.474 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->11ms
+2023-09-02 14:50:52.482 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:50:52.492 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 14:51:56.217 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [POST=/system/menu] : 添加菜单信息 ->222ms
+2023-09-02 14:51:56.249 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->5ms
+2023-09-02 14:52:00.995 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->7ms
+2023-09-02 14:52:01.004 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 14:52:01.008 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 14:52:01.017 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:52:01.026 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 14:52:45.288 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/menu] [uid=1] [uname=panda] : 添加菜单信息 ->257ms
+2023-09-02 14:52:45.320 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->5ms
+2023-09-02 14:56:04.586 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/list] : 获取角色分页列表 ->9ms
+2023-09-02 14:56:04.596 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->11ms
+2023-09-02 14:56:06.395 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/api/all] : 获取所有api ->3ms
+2023-09-02 14:56:06.411 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/roleMenuTreeSelect/1] : 获取角色菜单树 ->11ms
+2023-09-02 14:56:06.415 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/1] : 获取角色信息 ->9ms
+2023-09-02 14:56:06.596 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/api/getPolicyPathByRoleId] [uid=1] [uname=panda] : 获取角色拥有的api权限 ->12ms
+2023-09-02 14:56:31.455 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [PUT=/system/role] : 修改角色信息 ->995ms
+2023-09-02 14:56:31.491 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/role/list] : 获取角色分页列表 ->12ms
+2023-09-02 15:01:58.423 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/role/list] [uid=1] : 获取角色分页列表 ->9ms
+2023-09-02 15:01:58.430 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 15:02:34.675 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/role/list] [uid=1] : 获取角色分页列表 ->9ms
+2023-09-02 15:02:34.680 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 15:03:11.354 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/role/list] [uid=1] [uname=panda] : 获取角色分页列表 ->7ms
+2023-09-02 15:03:11.359 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 15:03:13.801 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 15:03:13.807 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/product/category/list] [uid=1] : 获取ProductCategory列表 ->3ms
+2023-09-02 15:03:39.592 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/product/category/list] [uid=1] : 获取ProductCategory列表 ->4ms
+2023-09-02 15:03:39.603 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 15:03:42.623 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 15:03:42.634 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/list] [uid=1] [uname=panda] : 获取菜单列表 ->6ms
+2023-09-02 15:03:42.644 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 15:03:42.650 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->3ms
+2023-09-02 15:03:46.694 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->6ms
+2023-09-02 15:03:46.698 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 15:03:46.707 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 15:03:46.718 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-02 15:03:46.724 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 15:03:55.304 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [PUT=/system/menu] [uid=1] [uname=panda] : 修改菜单信息 ->198ms
+2023-09-02 15:03:55.340 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/list] [uid=1] [uname=panda] : 获取菜单列表 ->4ms
+2023-09-02 15:03:58.020 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->6ms
+2023-09-02 15:03:58.026 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 15:03:58.035 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 15:03:58.041 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-02 15:03:58.051 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 15:04:06.355 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [PUT=/system/menu] [uid=1] [uname=panda] : 修改菜单信息 ->120ms
+2023-09-02 15:04:06.390 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->6ms
+2023-09-02 15:04:33.225 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/user/login] : 登录 ->71ms
+2023-09-02 15:04:33.251 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/user/auth] [uid=1] [uname=panda] : 认证信息 ->17ms
+2023-09-02 15:04:33.534 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->8ms
+2023-09-02 15:04:33.542 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->10ms
+2023-09-02 15:04:33.565 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->20ms
+2023-09-02 15:04:33.570 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->14ms
+2023-09-02 15:04:59.703 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/product/category/list] : 获取ProductCategory列表 ->5ms
+2023-09-02 15:04:59.719 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-02 15:05:01.818 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-02 15:05:01.832 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/rule/chain/list] : 获取规则引擎分页列表 ->10ms
+2023-09-02 15:06:40.662 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/rule/chain/list] : 获取规则引擎分页列表 ->135ms
+2023-09-02 15:06:40.707 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->134ms
+2023-09-02 15:06:45.186 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/device/product/category/list] [uid=1] [uname=panda] : 获取ProductCategory列表 ->5ms
+2023-09-02 15:06:45.233 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->40ms
+2023-09-02 15:07:08.041 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/product/category/list] : 获取ProductCategory列表 ->5ms
+2023-09-02 15:07:08.050 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-02 15:21:46.611 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/job/list] [uid=1] : 获取Job列表 ->15ms
+2023-09-02 15:21:46.615 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:52:40.476 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/user/login] : 登录 ->70ms
+2023-09-04 10:52:40.503 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/user/auth] : 认证信息 ->18ms
+2023-09-04 10:54:54.119 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->8ms
+2023-09-04 10:54:54.126 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-04 10:54:54.142 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->12ms
+2023-09-04 10:54:54.149 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-04 10:55:09.568 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->7ms
+2023-09-04 10:55:09.578 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-04 10:55:09.588 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-04 10:55:09.597 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:55:09.604 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:55:19.412 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [PUT=/system/menu] [uid=1] : 修改菜单信息 ->202ms
+2023-09-04 10:55:19.449 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/list] [uid=1] [uname=panda] : 获取菜单列表 ->6ms
+2023-09-04 10:55:28.395 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->15ms
+2023-09-04 10:55:28.405 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-04 10:55:28.413 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-04 10:55:28.422 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-04 10:55:45.069 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/user/login] : 登录 ->72ms
+2023-09-04 10:55:45.094 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/user/auth] [uid=1] : 认证信息 ->18ms
+2023-09-04 10:55:45.366 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->16ms
+2023-09-04 10:55:45.376 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->10ms
+2023-09-04 10:55:45.383 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:55:45.392 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-04 10:57:18.428 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-04 10:57:18.429 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/notice/list] [uid=1] : 获取通知分页列表 ->22ms
+2023-09-04 10:57:26.603 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/develop/code/table/list] [uid=1] [uname=panda] : 获取表列表 ->147ms
+2023-09-04 10:57:28.576 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/develop/code/gen/preview/3] : 获取生成代码视图 ->73ms
+2023-09-04 10:57:52.325 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/list] [uid=1] [uname=panda] : 获取菜单列表 ->8ms
+2023-09-04 10:57:52.333 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-04 10:57:52.347 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-04 10:57:52.355 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-04 10:58:01.435 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->7ms
+2023-09-04 10:58:01.440 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->15ms
+2023-09-04 10:58:01.455 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->9ms
+2023-09-04 10:58:01.472 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-04 10:58:01.479 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:58:51.588 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [PUT=/system/menu] : 修改菜单信息 ->196ms
+2023-09-04 10:58:51.629 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->5ms
+2023-09-04 10:58:51.651 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->6ms
+2023-09-04 10:59:13.095 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [POST=/system/user/login] : 登录 ->74ms
+2023-09-04 10:59:13.119 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/user/auth] : 认证信息 ->18ms
+2023-09-04 10:59:13.443 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->15ms
+2023-09-04 10:59:13.450 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-04 10:59:13.461 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-04 10:59:13.470 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-04 10:59:28.525 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->7ms
+2023-09-04 10:59:28.534 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:59:28.545 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:59:28.552 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:59:36.300 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/menu/menuTreeSelect] : 获取菜单树 ->6ms
+2023-09-04 10:59:36.305 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-04 10:59:36.315 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-04 10:59:36.324 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->6ms
+2023-09-04 10:59:36.330 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-04 11:02:29.464 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [PUT=/system/menu] [uid=1] : 修改菜单信息 ->207ms
+2023-09-04 11:02:29.505 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/menu/list] : 获取菜单列表 ->6ms
+2023-09-04 11:02:29.523 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/menu/list] [uid=1] : 获取菜单列表 ->4ms
+2023-09-04 11:07:54.456 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->11ms
+2023-09-04 11:07:54.473 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/job/list] [uid=1] : 获取Job列表 ->15ms
+2023-09-04 11:08:51.752 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-04 11:08:53.564 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/list/all] [uid=1] : 获取Device列表 ->14ms
+2023-09-04 11:08:54.287 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/product/list/all] : 获取Product分页列表 ->9ms
+2023-09-04 11:08:55.110 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/list/all] [uid=1] : 获取Device列表 ->12ms
+2023-09-04 11:08:57.432 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/device/product/list/all] [uid=1] [uname=panda] : 获取Product分页列表 ->9ms
+2023-09-04 11:13:43.275 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-04 11:14:02.103 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->5ms
+2023-09-04 11:14:03.895 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-04 11:15:17.499 [INFO] [D:/workspace/go/pkg/mod/github.com/!panda!x!g!o/!panda!kit@v0.0.0-20230901074047-e0e8e4bf2bed/starter/gorm.go:36] : 连接mysql [root:!MyEMS1@tcp(127.0.0.1:3306)/pandax_iot?charset=utf8&loc=Local&parseTime=true]
+2023-09-04 11:15:17.507 [INFO] [D:/workspace/go/project/PandaX/PandaX/main.go:46] : mysql连接成功
+2023-09-04 11:15:17.509 [INFO] [D:/workspace/go/project/PandaX/PandaX/main.go:51] : Redis连接成功
+2023-09-04 11:15:17.509 [INFO] [D:/workspace/go/project/PandaX/PandaX/main.go:58] : Tdengine连接成功
+2023-09-04 11:15:17.518 [INFO] [D:/workspace/go/project/PandaX/PandaX/main.go:76] : 路由初始化完成
+2023-09-04 11:15:17.518 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/transport/http_server.go:38] : HTTP Server listen: :7788
+2023-09-04 11:15:17.520 [INFO] [D:/workspace/go/project/PandaX/PandaX/iothub/hook.go:37] : IOTHUB HOOK Start SUCCESS,Grpc Server listen: :9001
+2023-09-04 11:15:17.525 [INFO] [D:/workspace/go/project/PandaX/PandaX/apps/job/jobs/jobbase.go:83] : 2023-09-04 11:15:17 [INFO] JobCore start success.
+2023-09-04 11:15:17.860 [INFO] [D:/workspace/go/project/PandaX/PandaX/iothub/hook.go:125] : pandax断开连接
+2023-09-04 11:15:17.862 [INFO] [D:/workspace/go/project/PandaX/PandaX/iothub/hook.go:154] : 账号pandax,密码pandax,开始认证
+2023-09-04 11:15:17.864 [INFO] [D:/workspace/go/project/PandaX/PandaX/iothub/hook.go:96] : Client emqx@172.17.0.2 Connected
+2023-09-04 11:15:28.972 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->8ms
+2023-09-04 11:15:48.282 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/rule/chain/list] [uid=1] : 获取规则引擎分页列表 ->13ms
+2023-09-04 11:15:48.286 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->10ms
+2023-09-04 11:24:52.570 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/user/auth] : 认证信息 ->30ms
+2023-09-04 11:24:54.036 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/rule/chain/rule_a37571bb6c45378b57803793] [uid=1] : 获取规则引擎信息 ->8ms
+2023-09-04 11:24:54.438 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/rule/chain/nodeLabels] : 获取所有节点标签 ->0ms
+2023-09-04 11:27:38.385 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/product/category/list] : 获取ProductCategory列表 ->4ms
+2023-09-04 11:27:38.393 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-04 11:27:39.916 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/dict/data/type] [uid=1] : 获取字典数据列表通过字典类型 ->7ms
+2023-09-04 11:27:39.925 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/device/product/category/list/tree/label] [uid=1] [uname=panda] : 获取ProductCategory树 ->4ms
+2023-09-04 11:27:39.942 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/product/list] [uid=1] : 获取Product分页列表 ->14ms
+2023-09-04 11:27:39.991 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/upload/get/d7432e83df771fad85aa4e74235b0591_20230819092625.png] : 获取图片 ->0ms
+2023-09-04 11:27:46.063 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/upload/get/d7432e83df771fad85aa4e74235b0591_20230819092625.png] : 获取图片 ->0ms
+2023-09-04 11:27:46.107 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/template/list] : 获取Template分页列表 ->30ms
+2023-09-04 11:27:50.517 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/device/template/list] [uid=1] [uname=panda] : 获取Template分页列表 ->11ms
+2023-09-04 11:27:51.340 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/template/list] : 获取Template分页列表 ->10ms
+2023-09-04 11:27:52.209 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/template/list] : 获取Template分页列表 ->11ms
+2023-09-04 11:27:53.102 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/ota/list] [uid=1] : 获取Ota分页列表 ->38ms
+2023-09-04 11:28:01.115 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/group/list] : 获取DeviceGroup列表 ->4ms
+2023-09-04 11:28:01.122 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->3ms
+2023-09-04 11:28:04.687 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/system/dict/data/type] : 获取字典数据列表通过字典类型 ->27ms
+2023-09-04 11:28:04.721 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/group/list/tree/label] : 获取DeviceGroup树 ->5ms
+2023-09-04 11:28:04.721 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/device/product/list/all] [uid=1] [uname=panda] : 获取Product分页列表 ->16ms
+2023-09-04 11:28:04.723 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/list] : 获取Device分页列表 ->32ms
+2023-09-04 11:28:21.688 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/device/d_1928b99619910dae5a001fa7/status] [uid=1] [uname=panda] : 获取Device状态信息 ->204ms
+2023-09-04 11:28:28.896 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/device/d_1928b99619910dae5a001fa7/status] [uid=1] : 获取Device状态信息 ->12ms
+2023-09-04 11:28:39.405 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/device/d_1928b99619910dae5a001fa7/status] [uid=1] [uname=panda] : 获取Device状态信息 ->12ms
+2023-09-04 11:28:41.043 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/alarm/list] : 获取告警分页列表 ->97ms
+2023-09-04 11:28:48.926 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/cmd/list] : 获取命令下发分页列表 ->152ms
+2023-09-04 11:28:52.109 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/device/alarm/list] : 获取告警分页列表 ->18ms
+2023-09-04 11:44:39.925 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/system/dict/data/type] [uid=1] [uname=panda] : 获取字典数据列表通过字典类型 ->4ms
+2023-09-04 11:44:39.937 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uid=1] [uname=panda] [GET=/rule/chain/list] : 获取规则引擎分页列表 ->10ms
+2023-09-04 13:53:13.955 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/rule/chain/rule_a37571bb6c45378b57803793] [uid=1] : 获取规则引擎信息 ->6ms
+2023-09-04 13:53:14.411 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [GET=/rule/chain/nodeLabels] [uid=1] [uname=panda] : 获取所有节点标签 ->0ms
+2023-09-04 14:37:03.350 [INFO] [D:/workspace/go/project/PandaX/PandaX/pkg/middleware/log.go:34] [uname=panda] [GET=/system/notice/list] [uid=1] : 获取通知分页列表 ->15ms
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 7b8eacc..fb2588e 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -3,8 +3,8 @@ package config
import (
"flag"
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/utils"
"path/filepath"
)
@@ -45,6 +45,7 @@ type Config struct {
Mqtt *Mqtt `yaml:"mqtt"`
Casbin *Casbin `yaml:"casbin"`
Gen *Gen `yaml:"gen"`
+ Ys *Ys `yaml:"ys"`
Log *Log `yaml:"log"`
}
diff --git a/pkg/config/jwt.go b/pkg/config/jwt.go
index c13b546..bbccf96 100644
--- a/pkg/config/jwt.go
+++ b/pkg/config/jwt.go
@@ -1,7 +1,7 @@
package config
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
)
type Jwt struct {
diff --git a/pkg/config/ys.go b/pkg/config/ys.go
new file mode 100644
index 0000000..0b3c62e
--- /dev/null
+++ b/pkg/config/ys.go
@@ -0,0 +1,6 @@
+package config
+
+type Ys struct {
+ AppKey string `yaml:"appKey"`
+ Secret string `yaml:"secret"`
+}
diff --git a/pkg/global/global.go b/pkg/global/global.go
index 251a26b..278503d 100644
--- a/pkg/global/global.go
+++ b/pkg/global/global.go
@@ -1,7 +1,7 @@
package global
import (
- "github.com/XM-GO/PandaKit/rediscli"
+ "github.com/PandaXGO/PandaKit/rediscli"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
"pandax/pkg/config"
diff --git a/pkg/initialize/router.go b/pkg/initialize/router.go
index 2381ef0..4990231 100644
--- a/pkg/initialize/router.go
+++ b/pkg/initialize/router.go
@@ -11,6 +11,7 @@ import (
jobRouter "pandax/apps/job/router"
logRouter "pandax/apps/log/router"
sysRouter "pandax/apps/system/router"
+ videoRouter "pandax/apps/video/router"
"pandax/pkg/middleware"
)
@@ -74,6 +75,10 @@ func InitRouter() *transport.HttpServer {
ruleRouter.InitRuleChainRouter(container)
ruleRouter.InitRuleChainMsgLogRouter(container)
}
+ {
+ //萤石摄像头
+ videoRouter.InitEzvizRouter(container)
+ }
// api接口
middleware.SwaggerConfig(container)
// 开启调度任务
diff --git a/pkg/initialize/table.go b/pkg/initialize/table.go
index 61ad40b..a94182c 100644
--- a/pkg/initialize/table.go
+++ b/pkg/initialize/table.go
@@ -1,7 +1,7 @@
package initialize
import (
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
devEntity "pandax/apps/develop/entity"
jobEntity "pandax/apps/job/entity"
logEntity "pandax/apps/log/entity"
diff --git a/pkg/middleware/log.go b/pkg/middleware/log.go
index aa020f5..8b01957 100644
--- a/pkg/middleware/log.go
+++ b/pkg/middleware/log.go
@@ -3,10 +3,10 @@ package middleware
import (
"encoding/json"
"fmt"
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/logger"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/logger"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"github.com/sirupsen/logrus"
"reflect"
"runtime/debug"
diff --git a/pkg/middleware/oper.go b/pkg/middleware/oper.go
index f6d483c..d6f381b 100644
--- a/pkg/middleware/oper.go
+++ b/pkg/middleware/oper.go
@@ -1,8 +1,8 @@
package middleware
import (
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/utils"
"net/http"
"pandax/apps/log/entity"
"pandax/apps/log/services"
diff --git a/pkg/middleware/permission.go b/pkg/middleware/permission.go
index ee5ec89..8c71da1 100644
--- a/pkg/middleware/permission.go
+++ b/pkg/middleware/permission.go
@@ -1,10 +1,10 @@
package middleware
import (
- "github.com/XM-GO/PandaKit/biz"
- "github.com/XM-GO/PandaKit/casbin"
- "github.com/XM-GO/PandaKit/restfulx"
- "github.com/XM-GO/PandaKit/token"
+ "github.com/PandaXGO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/casbin"
+ "github.com/PandaXGO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/token"
"github.com/dgrijalva/jwt-go"
"pandax/pkg/global"
)
diff --git a/pkg/mqtt/rpc.go b/pkg/mqtt/rpc.go
index 138102e..d4fd590 100644
--- a/pkg/mqtt/rpc.go
+++ b/pkg/mqtt/rpc.go
@@ -2,6 +2,7 @@ package mqtt
import (
"encoding/json"
+ "errors"
"fmt"
mqtt "github.com/eclipse/paho.mqtt.golang"
"math/rand"
@@ -22,34 +23,47 @@ type RpcRequest struct {
type RpcPayload struct {
Method string `json:"method"`
- Params string `json:"params"`
+ Params any `json:"params"`
}
-func (rpc RpcRequest) RequestCmd(rpcPayload RpcPayload) error {
+func (rpc RpcRequest) RequestCmd(rpcPayload RpcPayload) (respPayload string, err error) {
topic := fmt.Sprintf(RpcReqTopic, rpc.RequestId)
payload, err := json.Marshal(rpcPayload)
if err != nil {
- return err
+ return "", err
}
err = rpc.Client.Pub(topic, 0, string(payload))
if err != nil {
- return err
+ return "", err
}
if rpc.Mode == "single" {
- return nil
+ return "", nil
}
+ // 双向才会执行
+ repsChan := make(chan string)
respTopic := fmt.Sprintf(RpcRespTopic, rpc.RequestId)
+ // 订阅回调
+ mqMessagePubHandler := func(client mqtt.Client, msg mqtt.Message) {
+ if repsChan != nil {
+ repsChan <- string(msg.Payload())
+ }
+ }
rpc.Client.Sub(respTopic, 0, mqMessagePubHandler)
if rpc.Timeout == 0 {
rpc.Timeout = 30
}
- go func() {
+ defer func() {
+ close(repsChan)
+ rpc.Client.UnSub(respTopic)
+ }()
+ for {
select {
case <-time.After(time.Duration(rpc.Timeout) * time.Second):
- rpc.Client.UnSub(respTopic)
+ return "", errors.New("设备指令响应超时")
+ case resp := <-repsChan:
+ return resp, nil
}
- }()
- return nil
+ }
}
func (rpc RpcRequest) RequestAttributes(rpcPayload RpcPayload) error {
@@ -65,19 +79,20 @@ func (rpc RpcRequest) RequestAttributes(rpcPayload RpcPayload) error {
}
// 响应数据处理
-var mqMessagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
+/*var mqMessagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
//log.Println(fmt.Sprintf("Received message: %s from topic: %s\n", msg.Payload(), msg.Topic()))
-}
+}*/
// RespondTpc 处理设备端请求服务端方法
func (rpc RpcRequest) RespondTpc(reqPayload RpcPayload) error {
topic := fmt.Sprintf(RpcRespTopic, rpc.RequestId)
+ // 此处处理设备的请求参数逻辑
if reqPayload.Params == "getCurrentTime" {
unix := time.Now().Unix()
msg := fmt.Sprintf("%d", unix)
return rpc.Client.Pub(topic, 0, msg)
}
-
+ // 获取属性 ...
return nil
}
diff --git a/pkg/rule_engine/instance.go b/pkg/rule_engine/instance.go
index 34197df..869788a 100644
--- a/pkg/rule_engine/instance.go
+++ b/pkg/rule_engine/instance.go
@@ -41,7 +41,7 @@ func newInstanceWithManifest(m *manifest.Manifest) (*ruleChainInstance, []error)
}
// StartRuleChain TODO 是否需要添加context
-func (c *ruleChainInstance) StartRuleChain(context context.Context, message message.Message) error {
+func (c *ruleChainInstance) StartRuleChain(context context.Context, message *message.Message) error {
if node, found := c.nodes[c.firstRuleNodeId]; found {
node.Handle(message)
}
diff --git a/pkg/rule_engine/instance_test.go b/pkg/rule_engine/instance_test.go
index 13556b4..d4fc16b 100644
--- a/pkg/rule_engine/instance_test.go
+++ b/pkg/rule_engine/instance_test.go
@@ -18,13 +18,13 @@ func TestNewRuleChainInstance(t *testing.T) {
t.Error(errs[0])
}
- metadata := message.NewDefaultMetadata(map[string]interface{}{
+ metadata := message.Metadata{
"deviceName": "ws432",
"deviceId": "d_1928b99619910dae5a001fa7",
"deviceType": "direct",
"productId": "p_3ba460634520cf4590dc90e5",
- })
- msg := message.NewMessageWithDetail("1", message.TelemetryMes, map[string]interface{}{"temperature": 60.4, "humidity": 32.5}, metadata)
+ }
+ msg := message.NewMessage("1", message.TelemetryMes, message.Msg{"temperature": 60.4, "humidity": 32.5}, metadata)
t.Log("开始执行力流程")
err = instance.StartRuleChain(context.Background(), msg)
if err != nil {
@@ -33,8 +33,7 @@ func TestNewRuleChainInstance(t *testing.T) {
}
func TestScriptEngine(t *testing.T) {
- metadata := message.NewDefaultMetadata(map[string]interface{}{"device": "aa"})
- msg := message.NewMessageWithDetail("1", message.UpEventMes, map[string]interface{}{"aa": 5}, metadata)
+ msg := message.NewMessage("1", message.UpEventMes, map[string]interface{}{"aa": 5}, map[string]interface{}{"device": "aa"})
const baseScript = `
function nextRelation(metadata, msg) {
return ['one','nine'];
@@ -47,7 +46,7 @@ func TestScriptEngine(t *testing.T) {
}
return nextRelation(metadata, msg);
`
- scriptEngine := nodes.NewScriptEngine(msg, "Switch", baseScript)
+ scriptEngine := nodes.NewScriptEngine(*msg, "Switch", baseScript)
SwitchResults, err := scriptEngine.ScriptOnSwitch()
if err != nil {
@@ -57,19 +56,18 @@ func TestScriptEngine(t *testing.T) {
}
func TestScriptOnMessage(t *testing.T) {
- metadata := message.NewDefaultMetadata(map[string]interface{}{"device": "aa"})
- msg := message.NewMessageWithDetail("1", message.UpEventMes, map[string]interface{}{"aa": 5}, metadata)
+ msg := message.NewMessage("1", message.UpEventMes, map[string]interface{}{"aa": 5}, map[string]interface{}{"device": "aa"})
const baseScript = `
msg.bb = "33"
metadata.event = 55
return {msg: msg, metadata: metadata, msgType: msgType};
`
- scriptEngine := nodes.NewScriptEngine(msg, "Transform", baseScript)
+ scriptEngine := nodes.NewScriptEngine(*msg, "Transform", baseScript)
ScriptOnMessageResults, err := scriptEngine.ScriptOnMessage()
if err != nil {
t.Error(err)
}
- t.Log(ScriptOnMessageResults.GetMetadata())
+ t.Log(ScriptOnMessageResults.Metadata)
}
diff --git a/pkg/rule_engine/message/message.go b/pkg/rule_engine/message/message.go
index 4379799..6daeb52 100644
--- a/pkg/rule_engine/message/message.go
+++ b/pkg/rule_engine/message/message.go
@@ -1,11 +1,6 @@
package message
-import (
- "encoding/json"
- "github.com/google/uuid"
- "time"
-)
-
+/*
// 消息类型
const (
ConnectMes = "Connect"
@@ -154,3 +149,4 @@ func (t *defaultMetadata) GetValues() map[string]interface{} {
func (t *defaultMetadata) SetValues(values map[string]interface{}) {
t.values = values
}
+*/
diff --git a/pkg/rule_engine/message/message1.go b/pkg/rule_engine/message/message1.go
new file mode 100644
index 0000000..c3539c7
--- /dev/null
+++ b/pkg/rule_engine/message/message1.go
@@ -0,0 +1,99 @@
+package message
+
+import (
+ "encoding/json"
+ "github.com/google/uuid"
+ "time"
+)
+
+// 消息类型
+const (
+ ConnectMes = "Connect"
+ DisConnectMes = "Disconnect"
+ RpcRequestMes = "RpcRequest"
+ UpEventMes = "Event"
+ AlarmMes = "Alarm"
+ RowMes = "Row"
+ TelemetryMes = "Telemetry"
+ AttributesMes = "Attributes"
+)
+
+// 数据类型Originator
+const (
+ DEVICE = "DEVICE"
+ GATEWAY = "GATEWAY"
+ MONITOR = "MONITOR" //监控
+)
+
+type Msg map[string]interface{}
+type Metadata map[string]interface{}
+
+type Message struct {
+ Id string //uuid 消息Id
+ Ts time.Time //时间戳
+ MsgType string //消息类型, attributes(参数),telemetry(遥测),Connect连接事件
+ UserId string //客户Id UUID 设备发布人
+ Msg Msg //数据 数据结构JSON 设备原始数据 msg
+ Metadata Metadata //消息的元数据 包括设备Id,设备类型,产品ID等
+}
+
+// NewMessage ...
+func NewMessage(userId, messageType string, msg Msg, metadata Metadata) *Message {
+ return &Message{
+ Id: uuid.New().String(),
+ Ts: time.Now(),
+ UserId: userId,
+ MsgType: messageType,
+ Msg: msg,
+ Metadata: metadata,
+ }
+}
+
+func (t *Message) GetAllMap() map[string]interface{} {
+ data := make(map[string]interface{})
+ for msgKey, msgValue := range t.Msg {
+ for metaKey, metaValue := range t.Metadata {
+ if msgKey == metaKey {
+ data[msgKey] = metaValue
+ } else {
+ if _, ok := data[msgKey]; !ok {
+ data[msgKey] = msgValue
+ }
+ if _, ok := data[metaKey]; !ok {
+ data[metaKey] = metaValue
+ }
+ }
+ }
+ }
+ return data
+}
+
+func (t *Message) MarshalBinary() ([]byte, error) {
+ return json.Marshal(t)
+}
+
+func (meta *Metadata) Keys() []string {
+ keys := make([]string, 0)
+ for key := range *meta {
+ keys = append(keys, key)
+ }
+ return keys
+}
+
+func (meta *Metadata) GetValue(key string) any {
+ if _, found := (*meta)[key]; !found {
+ return nil
+ }
+ return (*meta)[key]
+}
+
+func (meta *Metadata) SetValue(key string, val interface{}) {
+ (*meta)[key] = val
+}
+
+func (msg *Msg) GetValue(key string) any {
+ if _, found := (*msg)[key]; !found {
+ return nil
+ }
+ return (*msg)[key]
+}
diff --git a/pkg/rule_engine/nodes/action_clear_alarm_node.go b/pkg/rule_engine/nodes/action_clear_alarm_node.go
index b9bf1fb..1d22f93 100644
--- a/pkg/rule_engine/nodes/action_clear_alarm_node.go
+++ b/pkg/rule_engine/nodes/action_clear_alarm_node.go
@@ -29,16 +29,16 @@ func (f clearAlarmNodeFactory) Create(id string, meta Metadata) (Node, error) {
return decodePath(meta, node)
}
-func (n *clearAlarmNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *clearAlarmNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
cleared := n.GetLinkedNode("Cleared")
failure := n.GetLinkedNode("Failure")
- alarm := services.DeviceAlarmModelDao.FindOneByType(msg.GetMetadata().GetKeyValue("deviceId").(string), n.AlarmType, "0")
+ alarm := services.DeviceAlarmModelDao.FindOneByType(msg.Metadata.GetValue("deviceId").(string), n.AlarmType, "0")
if alarm.DeviceId != "" {
log.Println("清除告警")
alarm.State = global.CLEARED
- marshal, _ := json.Marshal(msg.GetMsg())
+ marshal, _ := json.Marshal(msg.Msg)
alarm.Details = string(marshal)
err := services.DeviceAlarmModelDao.Update(*alarm)
if err != nil {
diff --git a/pkg/rule_engine/nodes/action_create_alarm_node.go b/pkg/rule_engine/nodes/action_create_alarm_node.go
index 68b681f..9d8ef4f 100644
--- a/pkg/rule_engine/nodes/action_create_alarm_node.go
+++ b/pkg/rule_engine/nodes/action_create_alarm_node.go
@@ -29,16 +29,16 @@ func (f createAlarmNodeFactory) Create(id string, meta Metadata) (Node, error) {
return decodePath(meta, node)
}
-func (n *createAlarmNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *createAlarmNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
created := n.GetLinkedNode("Created")
updated := n.GetLinkedNode("Updated")
failure := n.GetLinkedNode("Failure")
- alarm := services.DeviceAlarmModelDao.FindOneByType(msg.GetMetadata().GetKeyValue("deviceId").(string), n.AlarmType, "0")
+ alarm := services.DeviceAlarmModelDao.FindOneByType(msg.Metadata.GetValue("deviceId").(string), n.AlarmType, "0")
if alarm.DeviceId != "" {
- marshal, _ := json.Marshal(msg.GetMsg())
+ marshal, _ := json.Marshal(msg.Msg)
alarm.Details = string(marshal)
err := services.DeviceAlarmModelDao.Update(*alarm)
if err != nil {
@@ -53,14 +53,14 @@ func (n *createAlarmNode) Handle(msg message.Message) error {
} else {
alarm = &entity.DeviceAlarm{}
alarm.Id = kgo.KStr.Uniqid("a")
- alarm.DeviceId = msg.GetMetadata().GetKeyValue("deviceId").(string)
- alarm.ProductId = msg.GetMetadata().GetKeyValue("productId").(string)
- alarm.Name = msg.GetMetadata().GetKeyValue("deviceName").(string)
+ alarm.DeviceId = msg.Metadata.GetValue("deviceId").(string)
+ alarm.ProductId = msg.Metadata.GetValue("productId").(string)
+ alarm.Name = msg.Metadata.GetValue("deviceName").(string)
alarm.Level = n.AlarmSeverity
alarm.State = global.ALARMING
alarm.Type = n.AlarmType
alarm.Time = time.Now()
- marshal, _ := json.Marshal(msg.GetMsg())
+ marshal, _ := json.Marshal(msg.Msg)
alarm.Details = string(marshal)
err := services.DeviceAlarmModelDao.Insert(*alarm)
if err != nil {
diff --git a/pkg/rule_engine/nodes/action_delay_node.go b/pkg/rule_engine/nodes/action_delay_node.go
index 2105669..f0e35b0 100644
--- a/pkg/rule_engine/nodes/action_delay_node.go
+++ b/pkg/rule_engine/nodes/action_delay_node.go
@@ -13,11 +13,11 @@ const DelayNodeName = "DelayNode"
type delayNode struct {
bareNode
- PeriodTs int `json:"periodTs" yaml:"periodTs" jpath:"periodTs"` //周期时间
- MaxPendingMessages int `json:"maxPendingMessages" yaml:"maxPendingMessages" jpath:"maxPendingMessages"` //最大等待消息数
- messageQueue []message.Message `jpath:"-"`
- delayTimer *time.Timer `jpath:"-"`
- lock sync.Mutex `jpath:"-"`
+ PeriodTs int `json:"periodTs" yaml:"periodTs" jpath:"periodTs"` //周期时间
+ MaxPendingMessages int `json:"maxPendingMessages" yaml:"maxPendingMessages" jpath:"maxPendingMessages"` //最大等待消息数
+ messageQueue []*message.Message `jpath:"-"`
+ delayTimer *time.Timer `jpath:"-"`
+ lock sync.Mutex `jpath:"-"`
}
type delayNodeFactory struct{}
@@ -31,12 +31,12 @@ func (f delayNodeFactory) Create(id string, meta Metadata) (Node, error) {
lock: sync.Mutex{},
}
_, err := decodePath(meta, node)
- node.messageQueue = make([]message.Message, node.MaxPendingMessages)
+ node.messageQueue = make([]*message.Message, node.MaxPendingMessages)
return node, err
}
-func (n *delayNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *delayNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
diff --git a/pkg/rule_engine/nodes/action_generator_node.go b/pkg/rule_engine/nodes/action_generator_node.go
index 4cffe8c..84ea52c 100644
--- a/pkg/rule_engine/nodes/action_generator_node.go
+++ b/pkg/rule_engine/nodes/action_generator_node.go
@@ -25,8 +25,8 @@ func (f messageGeneratorNodeFactory) Create(id string, meta Metadata) (Node, err
return decodePath(meta, node)
}
-func (n *messageGeneratorNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *messageGeneratorNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
@@ -42,7 +42,7 @@ func (n *messageGeneratorNode) Handle(msg message.Message) error {
ticker.Stop()
return
}
- scriptEngine := NewScriptEngine(msg, "Generate", n.Script)
+ scriptEngine := NewScriptEngine(*msg, "Generate", n.Script)
generate, err := scriptEngine.ScriptGenerate()
if err != nil {
if failureLabelNode != nil {
@@ -50,9 +50,9 @@ func (n *messageGeneratorNode) Handle(msg message.Message) error {
}
return
}
- msg.SetMsg(generate["msg"].(map[string]interface{}))
- msg.SetType(generate["msgType"].(string))
- msg.SetMetadata(message.NewDefaultMetadata(generate["metadata"].(map[string]interface{})))
+ msg.Msg = generate["msg"].(message.Msg)
+ msg.Metadata = generate["metadata"].(message.Metadata)
+ msg.MsgType = generate["msgType"].(string)
if successLabelNode != nil {
go successLabelNode.Handle(msg)
}
diff --git a/pkg/rule_engine/nodes/action_log_node.go b/pkg/rule_engine/nodes/action_log_node.go
index 2939cf5..5cf3471 100644
--- a/pkg/rule_engine/nodes/action_log_node.go
+++ b/pkg/rule_engine/nodes/action_log_node.go
@@ -24,11 +24,11 @@ func (f logNodeFactory) Create(id string, meta Metadata) (Node, error) {
return decodePath(meta, node)
}
-func (n *logNode) Handle(msg message.Message) error {
+func (n *logNode) Handle(msg *message.Message) error {
successLableNode := n.GetLinkedNode("Success")
failureLableNode := n.GetLinkedNode("Failure")
- scriptEngine := NewScriptEngine(msg, "ToString", n.Script)
+ scriptEngine := NewScriptEngine(*msg, "ToString", n.Script)
logMessage, err := scriptEngine.ScriptToString()
if err != nil {
if failureLableNode != nil {
@@ -38,10 +38,10 @@ func (n *logNode) Handle(msg message.Message) error {
}
}
services.RuleChainMsgLogModelDao.Insert(entity.RuleChainMsgLog{
- MessageId: msg.GetId(),
- MsgType: msg.GetType(),
- DeviceName: msg.GetMetadata().GetValues()["deviceName"].(string),
- Ts: msg.GetTs(),
+ MessageId: msg.Id,
+ MsgType: msg.MsgType,
+ DeviceName: msg.Metadata["deviceName"].(string),
+ Ts: msg.Ts,
Content: logMessage,
})
global.Log.Info(logMessage)
diff --git a/pkg/rule_engine/nodes/action_rpc_request_node.go b/pkg/rule_engine/nodes/action_rpc_request_node.go
new file mode 100644
index 0000000..e709505
--- /dev/null
+++ b/pkg/rule_engine/nodes/action_rpc_request_node.go
@@ -0,0 +1,48 @@
+package nodes
+
+import (
+ "pandax/pkg/global"
+ "pandax/pkg/mqtt"
+ "pandax/pkg/rule_engine/message"
+)
+
+type rpcRequestNode struct {
+ bareNode
+ Timeout int `json:"timeout"`
+ Payload mqtt.RpcPayload `json:"payload"`
+}
+
+type rpcRequestNodeFactory struct{}
+
+func (f rpcRequestNodeFactory) Name() string { return "RpcRequestNode" }
+func (f rpcRequestNodeFactory) Category() string { return NODE_CATEGORY_ACTION }
+func (f rpcRequestNodeFactory) Labels() []string { return []string{"Success", "Failure"} }
+func (f rpcRequestNodeFactory) Create(id string, meta Metadata) (Node, error) {
+ node := &rpcRequestNode{
+ bareNode: newBareNode(f.Name(), id, meta, f.Labels()),
+ }
+ return decodePath(meta, node)
+}
+
+func (n *rpcRequestNode) Handle(msg *message.Message) error {
+ successLableNode := n.GetLinkedNode("Success")
+ failureLableNode := n.GetLinkedNode("Failure")
+
+ var rpc = &mqtt.RpcRequest{Client: global.MqttClient, Mode: "double", Timeout: n.Timeout}
+ rpc.GetRequestId()
+ respPayload, err := rpc.RequestCmd(n.Payload)
+ if err != nil {
+ if failureLableNode != nil {
+ return failureLableNode.Handle(msg)
+ } else {
+ return err
+ }
+ }
+ msgM := msg.Msg
+ msgM["payload"] = respPayload
+ msg.Msg = msgM
+ if successLableNode != nil {
+ return successLableNode.Handle(msg)
+ }
+ return nil
+}
diff --git a/pkg/rule_engine/nodes/action_rpc_respond_node.go b/pkg/rule_engine/nodes/action_rpc_respond_node.go
new file mode 100644
index 0000000..871988e
--- /dev/null
+++ b/pkg/rule_engine/nodes/action_rpc_respond_node.go
@@ -0,0 +1,50 @@
+package nodes
+
+import (
+ "pandax/pkg/global"
+ "pandax/pkg/mqtt"
+ "pandax/pkg/rule_engine/message"
+)
+
+type rpcRespondNode struct {
+ bareNode
+ RequestId int `json:"requestId"`
+}
+
+type rpcRespondFactory struct{}
+
+func (f rpcRespondFactory) Name() string { return "RpcRespondNode" }
+func (f rpcRespondFactory) Category() string { return NODE_CATEGORY_ACTION }
+func (f rpcRespondFactory) Labels() []string { return []string{"Success", "Failure"} }
+func (f rpcRespondFactory) Create(id string, meta Metadata) (Node, error) {
+ node := &rpcRespondNode{
+ bareNode: newBareNode(f.Name(), id, meta, f.Labels()),
+ }
+ return decodePath(meta, node)
+}
+
+func (n *rpcRespondNode) Handle(msg *message.Message) error {
+ successLableNode := n.GetLinkedNode("Success")
+ failureLableNode := n.GetLinkedNode("Failure")
+ RequestId := n.RequestId
+ if RequestId == 0 {
+ RequestId = int(msg.Metadata.GetValue("requestId").(float64))
+ }
+ var datas = mqtt.RpcPayload{
+ Method: msg.Msg.GetValue("method").(string),
+ Params: msg.Msg.GetValue("params"),
+ }
+ rpc := &mqtt.RpcRequest{Client: global.MqttClient, RequestId: RequestId}
+ err := rpc.RespondTpc(datas)
+ if err != nil {
+ if failureLableNode != nil {
+ return failureLableNode.Handle(msg)
+ } else {
+ return err
+ }
+ }
+ if successLableNode != nil {
+ return successLableNode.Handle(msg)
+ }
+ return nil
+}
diff --git a/pkg/rule_engine/nodes/action_save_attributes_node.go b/pkg/rule_engine/nodes/action_save_attributes_node.go
index d7cbc80..302121e 100644
--- a/pkg/rule_engine/nodes/action_save_attributes_node.go
+++ b/pkg/rule_engine/nodes/action_save_attributes_node.go
@@ -22,11 +22,11 @@ func (f saveAttributesNodeFactory) Create(id string, meta Metadata) (Node, error
return decodePath(meta, node)
}
-func (n *saveAttributesNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *saveAttributesNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
- if msg.GetType() != message.AttributesMes {
+ if msg.MsgType != message.AttributesMes {
if failureLabelNode != nil {
return failureLabelNode.Handle(msg)
} else {
@@ -34,8 +34,8 @@ func (n *saveAttributesNode) Handle(msg message.Message) error {
}
}
//deviceId := msg.GetMetadata().GetValues()["deviceId"].(string)
- deviceName := msg.GetMetadata().GetValues()["deviceName"].(string)
- err := global.TdDb.InsertDevice(deviceName+"_attributes", msg.GetMsg())
+ deviceName := msg.Metadata["deviceName"].(string)
+ err := global.TdDb.InsertDevice(deviceName+"_attributes", msg.Msg)
if err != nil {
if failureLabelNode != nil {
return failureLabelNode.Handle(msg)
diff --git a/pkg/rule_engine/nodes/action_save_timeseries_node.go b/pkg/rule_engine/nodes/action_save_timeseries_node.go
index 1cbd4b7..10a387c 100644
--- a/pkg/rule_engine/nodes/action_save_timeseries_node.go
+++ b/pkg/rule_engine/nodes/action_save_timeseries_node.go
@@ -23,11 +23,11 @@ func (f saveTimeSeriesNodeFactory) Create(id string, meta Metadata) (Node, error
return decodePath(meta, node)
}
-func (n *saveTimeSeriesNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *saveTimeSeriesNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
- if msg.GetType() != message.TelemetryMes {
+ if msg.MsgType != message.TelemetryMes {
if failureLabelNode != nil {
return failureLabelNode.Handle(msg)
} else {
@@ -35,9 +35,10 @@ func (n *saveTimeSeriesNode) Handle(msg message.Message) error {
}
}
//deviceId := msg.GetMetadata().GetValues()["deviceId"].(string)
- deviceName := msg.GetMetadata().GetValues()["deviceName"].(string)
- log.Println("telemetry", msg.GetMsg())
- err := global.TdDb.InsertDevice(deviceName+"_telemetry", msg.GetMsg())
+ deviceName := msg.Metadata["deviceName"].(string)
+ log.Println(msg.Msg)
+ log.Println(msg.Metadata)
+ err := global.TdDb.InsertDevice(deviceName+"_telemetry", msg.Msg)
log.Println(err)
if err != nil {
if failureLabelNode != nil {
diff --git a/pkg/rule_engine/nodes/external_ding_node.go b/pkg/rule_engine/nodes/external_ding_node.go
index 5f2fe38..cfd80a2 100644
--- a/pkg/rule_engine/nodes/external_ding_node.go
+++ b/pkg/rule_engine/nodes/external_ding_node.go
@@ -6,7 +6,7 @@ import (
"encoding/base64"
"encoding/json"
"fmt"
- "github.com/XM-GO/PandaKit/httpclient"
+ "github.com/PandaXGO/PandaKit/httpclient"
"github.com/sirupsen/logrus"
"net/url"
"pandax/pkg/rule_engine/message"
@@ -35,8 +35,8 @@ func (f externalDingNodeFactory) Create(id string, meta Metadata) (Node, error)
return decodePath(meta, node)
}
-func (n *externalDingNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalDingNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
diff --git a/pkg/rule_engine/nodes/external_kafka_node.go b/pkg/rule_engine/nodes/external_kafka_node.go
index 6bff75a..a235425 100644
--- a/pkg/rule_engine/nodes/external_kafka_node.go
+++ b/pkg/rule_engine/nodes/external_kafka_node.go
@@ -45,20 +45,20 @@ func (f externalKafkaNodeFactory) Create(id string, meta Metadata) (Node, error)
return node, nil
}
-func (n *externalKafkaNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalKafkaNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
defer n.KafkaCli.Close()
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
value := sarama.ByteEncoder("")
if n.KeyPattern == "metadataKey" {
- marshal, err := json.Marshal(msg.GetMetadata().GetValues())
+ marshal, err := json.Marshal(msg.Metadata)
if err != nil {
return err
}
value = marshal
} else {
- marshal, err := json.Marshal(msg.GetMsg())
+ marshal, err := json.Marshal(msg.Msg)
if err != nil {
return err
}
diff --git a/pkg/rule_engine/nodes/external_mqtt_node.go b/pkg/rule_engine/nodes/external_mqtt_node.go
index f47835c..48527a9 100644
--- a/pkg/rule_engine/nodes/external_mqtt_node.go
+++ b/pkg/rule_engine/nodes/external_mqtt_node.go
@@ -59,13 +59,13 @@ func (f externalMqttNodeFactory) Create(id string, meta Metadata) (Node, error)
return node, nil
}
-func (n *externalMqttNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalMqttNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
defer n.MqttCli.Disconnect(1000)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
topic := n.TopicPattern //need fix add msg.metadata in it
- sendmqttmsg, err := json.Marshal(msg.GetMsg())
+ sendmqttmsg, err := json.Marshal(msg.Msg)
if err != nil {
return err
}
diff --git a/pkg/rule_engine/nodes/external_nats_node.go b/pkg/rule_engine/nodes/external_nats_node.go
index e52c270..5298f10 100644
--- a/pkg/rule_engine/nodes/external_nats_node.go
+++ b/pkg/rule_engine/nodes/external_nats_node.go
@@ -35,8 +35,8 @@ func (f externalNatsNodeFactory) Create(id string, meta Metadata) (Node, error)
return node, nil
}
-func (n *externalNatsNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalNatsNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
defer n.client.Close()
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
diff --git a/pkg/rule_engine/nodes/external_restapi_node.go b/pkg/rule_engine/nodes/external_restapi_node.go
index cffcd88..9dff45b 100644
--- a/pkg/rule_engine/nodes/external_restapi_node.go
+++ b/pkg/rule_engine/nodes/external_restapi_node.go
@@ -3,7 +3,7 @@ package nodes
import (
"encoding/json"
"errors"
- "github.com/XM-GO/PandaKit/httpclient"
+ "github.com/PandaXGO/PandaKit/httpclient"
"github.com/sirupsen/logrus"
"pandax/pkg/rule_engine/message"
)
@@ -27,8 +27,8 @@ func (f externalRestapiNodeFactory) Create(id string, meta Metadata) (Node, erro
return decodePath(meta, node)
}
-func (n *externalRestapiNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalRestapiNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLableNode := n.GetLinkedNode("Success")
failureLableNode := n.GetLinkedNode("Failure")
if n.RequestMethod == "GET" {
@@ -42,11 +42,11 @@ func (n *externalRestapiNode) Handle(msg message.Message) error {
return failureLableNode.Handle(msg)
} else {
if successLableNode != nil {
- metadata := msg.GetMetadata()
+ metadata := msg.Metadata
for key, value := range response {
- metadata.SetKeyValue(key, value)
+ metadata.SetValue(key, value)
}
- msg.SetMetadata(metadata)
+ msg.Metadata = metadata
return successLableNode.Handle(msg)
}
}
diff --git a/pkg/rule_engine/nodes/external_rule_chain_node.go b/pkg/rule_engine/nodes/external_rule_chain_node.go
index c762a78..d099c71 100644
--- a/pkg/rule_engine/nodes/external_rule_chain_node.go
+++ b/pkg/rule_engine/nodes/external_rule_chain_node.go
@@ -27,8 +27,8 @@ func (f externalRuleChainNodeFactory) Create(id string, meta Metadata) (Node, er
return decodePath(meta, node)
}
-func (n *externalRuleChainNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalRuleChainNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
data := services.RuleChainModelDao.FindOne(n.RuleId)
if data == nil {
return errors.New(fmt.Sprintf("节点 %s ,获取规则链失败", n.Name()))
diff --git a/pkg/rule_engine/nodes/external_send_email_node.go b/pkg/rule_engine/nodes/external_send_email_node.go
index a5b4ede..167b954 100644
--- a/pkg/rule_engine/nodes/external_send_email_node.go
+++ b/pkg/rule_engine/nodes/external_send_email_node.go
@@ -38,8 +38,8 @@ func (f externalSendEmailNodeFactory) Create(id string, meta Metadata) (Node, er
return decodePath(meta, node)
}
-func (n *externalSendEmailNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalSendEmailNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
@@ -48,7 +48,7 @@ func (n *externalSendEmailNode) Handle(msg message.Message) error {
if tos[len(tos)-1] == "" { // 判断切片的最后一个元素是否为空,为空则移除
tos = tos[:len(tos)-1]
}
- err := n.send(tos, msg)
+ err := n.send(tos, *msg)
if err != nil {
if failureLabelNode != nil {
return failureLabelNode.Handle(msg)
@@ -73,7 +73,7 @@ func (m *externalSendEmailNode) send(to []string, msg message.Message) error {
}
e.To = to
e.Subject = m.Subject
- template, err := ParseTemplate(m.Body, msg.GetMetadata().GetValues())
+ template, err := ParseTemplate(m.Body, msg.Metadata)
if err != nil {
return err
}
diff --git a/pkg/rule_engine/nodes/external_send_sms_node.go b/pkg/rule_engine/nodes/external_send_sms_node.go
index ff854dc..e0a6e5a 100644
--- a/pkg/rule_engine/nodes/external_send_sms_node.go
+++ b/pkg/rule_engine/nodes/external_send_sms_node.go
@@ -27,8 +27,8 @@ func (f externalSendSmsNodeFactory) Create(id string, meta Metadata) (Node, erro
return decodePath(meta, node)
}
-func (n *externalSendSmsNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalSendSmsNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
//failureLabelNode := n.GetLinkedNode("Failure")
diff --git a/pkg/rule_engine/nodes/external_wechat_node.go b/pkg/rule_engine/nodes/external_wechat_node.go
index 0600ae6..5bf4a3e 100644
--- a/pkg/rule_engine/nodes/external_wechat_node.go
+++ b/pkg/rule_engine/nodes/external_wechat_node.go
@@ -2,7 +2,7 @@ package nodes
import (
"encoding/json"
- "github.com/XM-GO/PandaKit/httpclient"
+ "github.com/PandaXGO/PandaKit/httpclient"
"github.com/sirupsen/logrus"
"pandax/pkg/rule_engine/message"
)
@@ -28,8 +28,8 @@ func (f externalWechatNodeFactory) Create(id string, meta Metadata) (Node, error
return decodePath(meta, node)
}
-func (n *externalWechatNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *externalWechatNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
diff --git a/pkg/rule_engine/nodes/factory.go b/pkg/rule_engine/nodes/factory.go
index 8360126..042b241 100644
--- a/pkg/rule_engine/nodes/factory.go
+++ b/pkg/rule_engine/nodes/factory.go
@@ -22,10 +22,10 @@ type Factory interface {
}
var (
- // allNodeFactories hold all node's factory
+ // 所有节点对应关系
allNodeFactories map[string]Factory = make(map[string]Factory)
- // allNodeCategories hold node's metadata by category
+ // 所有节点的类型MAP
allNodeCategories map[string][]map[string]interface{} = make(map[string][]map[string]interface{})
allCategories []map[string]interface{} = make([]map[string]interface{}, 0)
)
@@ -48,7 +48,7 @@ func NewNode(nodeType string, id string, meta Metadata) (Node, error) {
return nil, fmt.Errorf("invalid node type '%s'", nodeType)
}
-// GetCategoryNodes return specified category's all nodes
+// GetCategoryNodes 获取所有分类节点
func GetCategoryNodes() map[string][]map[string]interface{} { return allNodeCategories }
func GetCategory() []map[string]interface{} { return allCategories }
diff --git a/pkg/rule_engine/nodes/filter_device_type_switch_node.go b/pkg/rule_engine/nodes/filter_device_type_switch_node.go
index ea38b28..b0b821e 100644
--- a/pkg/rule_engine/nodes/filter_device_type_switch_node.go
+++ b/pkg/rule_engine/nodes/filter_device_type_switch_node.go
@@ -5,8 +5,8 @@ import (
"pandax/pkg/rule_engine/message"
)
-//检查关联关系
-//该消息来自与哪个实体或到那个实体
+// 检查关联关系
+// 该消息来自与哪个实体或到那个实体
type deviceTypeSwitchNode struct {
bareNode
}
@@ -25,18 +25,18 @@ func (f deviceTypeSwitchNodeFactory) Create(id string, meta Metadata) (Node, err
return decodePath(meta, node)
}
-func (n *deviceTypeSwitchNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *deviceTypeSwitchNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
deviceLabelNode := n.GetLinkedNode(message.DEVICE)
gatewayLabelNode := n.GetLinkedNode(message.GATEWAY)
- if msg.GetMetadata().GetKeyValue("deviceType") == message.DEVICE {
+ if msg.Metadata.GetValue("deviceType").(string) == message.DEVICE {
if deviceLabelNode != nil {
return deviceLabelNode.Handle(msg)
}
}
- if msg.GetMetadata().GetKeyValue("deviceType") == message.GATEWAY {
+ if msg.Metadata.GetValue("deviceType").(string) == message.GATEWAY {
if gatewayLabelNode != nil {
return gatewayLabelNode.Handle(msg)
}
diff --git a/pkg/rule_engine/nodes/filter_message_type_node.go b/pkg/rule_engine/nodes/filter_message_type_node.go
index 31bfa5c..30b2ac2 100644
--- a/pkg/rule_engine/nodes/filter_message_type_node.go
+++ b/pkg/rule_engine/nodes/filter_message_type_node.go
@@ -24,12 +24,12 @@ func (f messageTypeFilterNodeFactory) Create(id string, meta Metadata) (Node, er
return decodePath(meta, node)
}
-func (n *messageTypeFilterNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *messageTypeFilterNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
trueLabelNode := n.GetLinkedNode("True")
falseLabelNode := n.GetLinkedNode("False")
- messageType := msg.GetType()
+ messageType := msg.MsgType
for _, filterType := range n.MessageTypes {
if filterType == messageType && trueLabelNode != nil {
diff --git a/pkg/rule_engine/nodes/filter_message_type_switch_node.go b/pkg/rule_engine/nodes/filter_message_type_switch_node.go
index 18a2ce6..0797117 100644
--- a/pkg/rule_engine/nodes/filter_message_type_switch_node.go
+++ b/pkg/rule_engine/nodes/filter_message_type_switch_node.go
@@ -32,11 +32,11 @@ func (f messageTypeSwitchNodeFactory) Create(id string, meta Metadata) (Node, er
return decodePath(meta, node)
}
-func (n *messageTypeSwitchNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
-
+func (n *messageTypeSwitchNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
+ msg.Metadata = map[string]interface{}{"AA": "BB", "deviceName": "fff"}
nodes := n.GetLinkedNodes()
- messageType := msg.GetType()
+ messageType := msg.MsgType
for label, node := range nodes {
if messageType == label {
return node.Handle(msg)
diff --git a/pkg/rule_engine/nodes/filter_script_node.go b/pkg/rule_engine/nodes/filter_script_node.go
index aa77322..369b48a 100644
--- a/pkg/rule_engine/nodes/filter_script_node.go
+++ b/pkg/rule_engine/nodes/filter_script_node.go
@@ -24,12 +24,12 @@ func (f scriptFilterNodeFactory) Create(id string, meta Metadata) (Node, error)
return decodePath(meta, node)
}
-func (n *scriptFilterNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *scriptFilterNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
trueLabelNode := n.GetLinkedNode("True")
falseLabelNode := n.GetLinkedNode("False")
- scriptEngine := NewScriptEngine(msg, "Filter", n.Script)
+ scriptEngine := NewScriptEngine(*msg, "Filter", n.Script)
isTrue, error := scriptEngine.ScriptOnFilter()
if isTrue == true && error == nil && trueLabelNode != nil {
return trueLabelNode.Handle(msg)
diff --git a/pkg/rule_engine/nodes/filter_switch_node.go b/pkg/rule_engine/nodes/filter_switch_node.go
index a4f0181..b128ed1 100644
--- a/pkg/rule_engine/nodes/filter_switch_node.go
+++ b/pkg/rule_engine/nodes/filter_switch_node.go
@@ -34,10 +34,10 @@ func (f switchFilterNodeFactory) Create(id string, meta Metadata) (Node, error)
return decodePath(meta, node)
}
-func (n *switchFilterNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *switchFilterNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
- scriptEngine := NewScriptEngine(msg, "Switch", n.Script)
+ scriptEngine := NewScriptEngine(*msg, "Switch", n.Script)
SwitchResults, err := scriptEngine.ScriptOnSwitch()
if err != nil {
return err
diff --git a/pkg/rule_engine/nodes/init.go b/pkg/rule_engine/nodes/init.go
index 722b905..529c779 100644
--- a/pkg/rule_engine/nodes/init.go
+++ b/pkg/rule_engine/nodes/init.go
@@ -28,5 +28,6 @@ func init() {
RegisterFactory(externalSendEmailNodeFactory{})
RegisterFactory(externalSendSmsNodeFactory{})
RegisterFactory(externalRuleChainNodeFactory{})
-
+ RegisterFactory(rpcRespondFactory{})
+ RegisterFactory(rpcRequestNodeFactory{})
}
diff --git a/pkg/rule_engine/nodes/input_node.go b/pkg/rule_engine/nodes/input_node.go
index 89f794e..34e1211 100644
--- a/pkg/rule_engine/nodes/input_node.go
+++ b/pkg/rule_engine/nodes/input_node.go
@@ -23,8 +23,8 @@ func (f inputNodeFactory) Create(id string, meta Metadata) (Node, error) {
return node, nil
}
-func (n *inputNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *inputNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
nodes := n.GetLinkedNodes()
for _, node := range nodes {
diff --git a/pkg/rule_engine/nodes/metadata.go b/pkg/rule_engine/nodes/metadata.go
index 84c38c6..a723021 100644
--- a/pkg/rule_engine/nodes/metadata.go
+++ b/pkg/rule_engine/nodes/metadata.go
@@ -10,6 +10,7 @@ const (
NODE_CONFIG_ORIGINATOR_TYPE_KEY = "originatorTypeKey"
)
+// Metadata 前端 参数 Properties
type Metadata interface {
Keys() []string
With(key string, val interface{}) Metadata
diff --git a/pkg/rule_engine/nodes/node.go b/pkg/rule_engine/nodes/node.go
index ed12f8f..a290850 100644
--- a/pkg/rule_engine/nodes/node.go
+++ b/pkg/rule_engine/nodes/node.go
@@ -13,7 +13,7 @@ type Node interface {
Id() string
Metadata() Metadata
MustLabels() []string
- Handle(message.Message) error
+ Handle(*message.Message) error
AddLinkedNode(label string, node Node)
GetLinkedNode(label string) Node
@@ -55,7 +55,7 @@ func (n *bareNode) GetLinkedNodes() map[string]Node { return n.nodes }
func (n *bareNode) Metadata() Metadata { return n.meta }
-func (n *bareNode) Handle(message.Message) error { return errors.New("not implemented") }
+func (n *bareNode) Handle(*message.Message) error { return errors.New("not implemented") }
func decodePath(meta Metadata, n Node) (Node, error) {
if err := meta.DecodePath(n); err != nil {
diff --git a/pkg/rule_engine/nodes/script_engine.go b/pkg/rule_engine/nodes/script_engine.go
index 52a4537..63ae1ae 100644
--- a/pkg/rule_engine/nodes/script_engine.go
+++ b/pkg/rule_engine/nodes/script_engine.go
@@ -8,7 +8,7 @@ import (
)
type ScriptEngine interface {
- ScriptOnMessage() (message.Message, error)
+ ScriptOnMessage() (*message.Message, error)
ScriptOnSwitch() ([]string, error)
ScriptOnFilter() (bool, error)
ScriptToString() (string, error)
@@ -29,7 +29,7 @@ func NewScriptEngine(msg message.Message, fun string, script string) ScriptEngin
}
}
-func (bse *baseScriptEngine) ScriptOnMessage() (message.Message, error) {
+func (bse *baseScriptEngine) ScriptOnMessage() (*message.Message, error) {
msg := bse.Msg
vm := goja.New()
_, err := vm.RunString(bse.Script)
@@ -43,11 +43,11 @@ func (bse *baseScriptEngine) ScriptOnMessage() (message.Message, error) {
logrus.Info("Js函数映射到 Go 函数失败!")
return nil, err
}
- datas := fn(msg.GetMsg(), msg.GetMetadata().GetValues(), msg.GetType())
- msg.SetMsg(datas["msg"].(map[string]interface{}))
- msg.SetMetadata(message.NewDefaultMetadata(datas["metadata"].(map[string]interface{})))
- msg.SetType(datas["msgType"].(string))
- return msg, nil
+ datas := fn(msg.Msg, msg.Metadata, msg.MsgType)
+ msg.Msg = datas["msg"].(map[string]interface{})
+ msg.Metadata = datas["metadata"].(map[string]interface{})
+ msg.MsgType = datas["msgType"].(string)
+ return &msg, nil
}
func (bse *baseScriptEngine) ScriptOnSwitch() ([]string, error) {
@@ -64,7 +64,7 @@ func (bse *baseScriptEngine) ScriptOnSwitch() ([]string, error) {
logrus.Info("Js函数映射到 Go 函数失败!")
return nil, err
}
- datas := fn(msg.GetMsg(), msg.GetMetadata().GetValues(), msg.GetType())
+ datas := fn(msg.Msg, msg.Metadata, msg.MsgType)
return datas, nil
}
@@ -82,7 +82,7 @@ func (bse *baseScriptEngine) ScriptOnFilter() (bool, error) {
logrus.Info("Js函数映射到 Go 函数失败!")
return false, err
}
- datas := fn(msg.GetMsg(), msg.GetMetadata().GetValues(), msg.GetType())
+ datas := fn(msg.Msg, msg.Metadata, msg.MsgType)
return datas, nil
}
@@ -100,7 +100,7 @@ func (bse *baseScriptEngine) ScriptToString() (string, error) {
logrus.Info("Js函数映射到 Go 函数失败!")
return "", err
}
- data := fn(msg.GetMsg(), msg.GetMetadata().GetValues(), msg.GetType())
+ data := fn(msg.Msg, msg.Metadata, msg.MsgType)
return data, nil
}
@@ -118,6 +118,6 @@ func (bse *baseScriptEngine) ScriptGenerate() (map[string]interface{}, error) {
logrus.Info("Js函数映射到 Go 函数失败!")
return nil, err
}
- datas := fn(msg.GetMsg(), msg.GetMetadata().GetValues(), msg.GetType())
+ datas := fn(msg.Msg, msg.Metadata, msg.MsgType)
return datas, nil
}
diff --git a/pkg/rule_engine/nodes/transform_delete_key_node.go b/pkg/rule_engine/nodes/transform_delete_key_node.go
index f20e418..7e45be5 100644
--- a/pkg/rule_engine/nodes/transform_delete_key_node.go
+++ b/pkg/rule_engine/nodes/transform_delete_key_node.go
@@ -23,27 +23,26 @@ func (f transformDeleteKeyNodeFactory) Create(id string, meta Metadata) (Node, e
return decodePath(meta, node)
}
-func (n *transformDeleteKeyNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *transformDeleteKeyNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
keys := strings.Split(n.Keys, ",")
if n.FormType == "msg" {
- data := msg.GetMsg()
+ data := msg.Msg
for _, key := range keys {
if _, found := data[key]; found {
delete(data, key)
- msg.SetMsg(data)
+ msg.Msg = data
}
}
} else if n.FormType == "metadata" {
- data := msg.GetMetadata()
+ data := msg.Metadata
for _, key := range keys {
- if data.GetKeyValue(key) != nil {
- values := data.GetValues()
- delete(values, key)
- msg.SetMetadata(message.NewDefaultMetadata(values))
+ if data.GetValue(key) != nil {
+ delete(data, key)
+ msg.Metadata = data
}
}
} else {
diff --git a/pkg/rule_engine/nodes/transform_rename_key_node.go b/pkg/rule_engine/nodes/transform_rename_key_node.go
index ebbc62e..6730d7e 100644
--- a/pkg/rule_engine/nodes/transform_rename_key_node.go
+++ b/pkg/rule_engine/nodes/transform_rename_key_node.go
@@ -26,28 +26,27 @@ func (f transformRenameKeyNodeFactory) Create(id string, meta Metadata) (Node, e
return decodePath(meta, node)
}
-func (n *transformRenameKeyNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *transformRenameKeyNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
if n.FormType == "msg" {
- data := msg.GetMsg()
+ data := msg.Msg
for _, key := range n.Keys {
if _, found := data[key.OldName]; found {
data[key.NewName] = data[key.OldName]
delete(data, key.OldName)
- msg.SetMsg(data)
+ msg.Msg = data
}
}
} else if n.FormType == "metadata" {
- data := msg.GetMetadata()
+ data := msg.Metadata
for _, key := range n.Keys {
- if data.GetKeyValue(key.OldName) != nil {
- values := data.GetValues()
- values[key.NewName] = values[key.OldName]
- delete(values, key.OldName)
- msg.SetMetadata(message.NewDefaultMetadata(values))
+ if data.GetValue(key.OldName) != nil {
+ data[key.NewName] = data[key.OldName]
+ delete(data, key.OldName)
+ msg.Metadata = data
}
}
} else {
diff --git a/pkg/rule_engine/nodes/transform_script_node.go b/pkg/rule_engine/nodes/transform_script_node.go
index ed86083..ea12a73 100644
--- a/pkg/rule_engine/nodes/transform_script_node.go
+++ b/pkg/rule_engine/nodes/transform_script_node.go
@@ -22,13 +22,13 @@ func (f transformScriptNodeFactory) Create(id string, meta Metadata) (Node, erro
return decodePath(meta, node)
}
-func (n *transformScriptNode) Handle(msg message.Message) error {
- logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
+func (n *transformScriptNode) Handle(msg *message.Message) error {
+ logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType)
successLabelNode := n.GetLinkedNode("Success")
failureLabelNode := n.GetLinkedNode("Failure")
- scriptEngine := NewScriptEngine(msg, "Transform", n.Script)
+ scriptEngine := NewScriptEngine(*msg, "Transform", n.Script)
newMessage, err := scriptEngine.ScriptOnMessage()
if err != nil {
if failureLabelNode != nil {
diff --git a/pkg/tool/conv.go b/pkg/tool/conv.go
index 4e6ff8a..bf9348e 100644
--- a/pkg/tool/conv.go
+++ b/pkg/tool/conv.go
@@ -78,3 +78,17 @@ func MapToStruct(m map[string]interface{}, s interface{}) error {
return nil
}
+
+func InterfaceToStruct(m interface{}, s interface{}) error {
+ data, err := json.Marshal(m)
+ if err != nil {
+ return err
+ }
+
+ err = json.Unmarshal(data, s)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/pkg/transport/http_server.go b/pkg/transport/http_server.go
index ab08496..b3283c6 100644
--- a/pkg/transport/http_server.go
+++ b/pkg/transport/http_server.go
@@ -2,7 +2,7 @@ package transport
import (
"context"
- "github.com/XM-GO/PandaKit/logger"
+ "github.com/PandaXGO/PandaKit/logger"
"github.com/emicklei/go-restful/v3"
"net/http"
"pandax/pkg/global"
diff --git a/pkg/ys/device.go b/pkg/ys/device.go
new file mode 100644
index 0000000..e6e5a09
--- /dev/null
+++ b/pkg/ys/device.go
@@ -0,0 +1,57 @@
+package ys
+
+import (
+ "pandax/pkg/tool"
+)
+
+const (
+ //设备列表
+ DEVICELIST = "https://open.ys7.com/api/lapp/device/list"
+ //获取指定设备的通道信息
+ DEVICECHANNELLIST = "https://open.ys7.com/api/lapp/device/camera/list"
+ // 获取播放地址
+ DEVICELIVEADDRESS = "https://open.ys7.com/api/lapp/v2/live/address/get"
+)
+
+// GetDeviceList 获取设备列表
+func (ys *Ys) GetDeviceList(pageNum, pageSize int) (devices []Device, total int64, err error) {
+ params := make(map[string]interface{})
+ params["pageStart"] = pageNum
+ params["pageSize"] = pageSize
+ status, err := ys.authorizeRequset("POST", DEVICELIST, params, &devices) //获取用户下的设备列表
+ if err != nil {
+ return nil, 0, err
+ }
+ var page Page
+ err = tool.InterfaceToStruct(status.Page, &page)
+ if err != nil {
+ return nil, 0, err
+ }
+ return devices, int64(page.Total), nil
+}
+
+// GetDeviceChannelList 获取指定设备的通道信息
+func (ys *Ys) GetDeviceChannelList(deviceSerial string) (cameras []Channel, err error) {
+ params := make(map[string]interface{})
+ params["deviceSerial"] = deviceSerial
+ _, err = ys.authorizeRequset("POST", DEVICECHANNELLIST, params, &cameras)
+ if err != nil {
+ return nil, err
+ }
+ return cameras, nil
+}
+
+// GetDeviceLiveAddress 获取指定设备通道的播放地址
+func (ys *Ys) GetDeviceLiveAddress(deviceSerial string, channelNo int) (live []LiveAddress, err error) {
+ params := make(map[string]interface{})
+ params["deviceSerial"] = deviceSerial
+ params["channelNo"] = channelNo
+ params["protocol"] = 1 //流播放协议,1-ezopen、2-hls、3-rtmp、4-flv,默认为1
+ params["type"] = "1" //地址的类型,1-预览,2-本地录像回放,3-云存储录像回放,非必选,默认为1;回放仅支持rtmp、ezopen、flv协议
+ params["quality"] = 1 //视频清晰度,1-高清(主码流)、2-流畅(子码流)
+ _, err = ys.authorizeRequset("POST", DEVICELIVEADDRESS, params, &live)
+ if err != nil {
+ return nil, err
+ }
+ return live, nil
+}
diff --git a/pkg/ys/ptz.go b/pkg/ys/ptz.go
new file mode 100644
index 0000000..7123824
--- /dev/null
+++ b/pkg/ys/ptz.go
@@ -0,0 +1,37 @@
+package ys
+
+const (
+ //云台控制开始
+ URLPTZSTAR = "https://open.ys7.com/api/lapp/device/ptz/start"
+ //云台控制结束
+ URLPTZSTOP = "https://open.ys7.com/api/lapp/device/ptz/stop"
+)
+
+// StartPtz 开始云台控制
+func (ys *Ys) StartPtz(deviceSerial string, channelNo, direction, speed int) (err error) {
+ params := make(map[string]interface{})
+ params["deviceSerial"] = deviceSerial
+ params["channelNo"] = channelNo
+ params["direction"] = direction
+ params["speed"] = speed
+
+ _, err = ys.authorizeRequset("POST", URLPTZSTAR, params, nil)
+ if err != nil {
+ return
+ }
+ return nil
+}
+
+// StopPtz 停止云台转动
+func (ys *Ys) StopPtz(deviceSerial string, channelNo, direction int) (err error) {
+ params := make(map[string]interface{})
+ params["deviceSerial"] = deviceSerial
+ params["channelNo"] = channelNo
+ params["direction"] = direction
+
+ _, err = ys.authorizeRequset("POST", URLPTZSTOP, params, nil)
+ if err != nil {
+ return
+ }
+ return nil
+}
diff --git a/pkg/ys/type.go b/pkg/ys/type.go
new file mode 100644
index 0000000..1ec5141
--- /dev/null
+++ b/pkg/ys/type.go
@@ -0,0 +1,49 @@
+package ys
+
+type AccessToken struct {
+ AccessToken string `json:"accessToken"`
+ ExpireTime int64 `json:"expireTime"`
+}
+
+type Status struct {
+ Code string `json:"code"`
+ Msg string `json:"msg"`
+ Data interface{} `json:"data"`
+ Page interface{} `json:"page"`
+}
+
+type Page struct {
+ Total float64 `json:"total"`
+ Page float64 `json:"page"`
+ Size float64 `json:"size"`
+}
+
+// Device 萤石设备数据结构
+type Device struct {
+ DeviceSerial string `json:"deviceSerial"`
+ DeviceName string `json:"deviceName"`
+ DeviceType string `json:"deviceType"`
+ Status int `json:"status"`
+ Defence int `json:"defence"`
+ DeviceVersion string `json:"deviceVersion"`
+}
+
+// Channel 萤石摄像头通道数据结构
+type Channel struct {
+ DeviceSerial string `json:"deviceSerial"`
+ IpcSerial string `json:"ipcSerial"`
+ ChannelNo int `json:"channelNo"`
+ ChannelName string `json:"channelName"`
+ PicURL string `json:"picUrl"`
+ IsShared string `json:"isShared"`
+ VideoLevel int `json:"videoLevel"`
+ IsEncrypt int `json:"isEncrypt"`
+ Status int `json:"status"`
+}
+
+// LiveAddress 播放地址
+type LiveAddress struct {
+ Id string `json:"id"`
+ Url string `json:"url"`
+ ExpireTime string `json:"expireTime"`
+}
diff --git a/pkg/ys/ys.go b/pkg/ys/ys.go
new file mode 100644
index 0000000..6422454
--- /dev/null
+++ b/pkg/ys/ys.go
@@ -0,0 +1,94 @@
+package ys
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "strings"
+ "time"
+)
+
+const (
+ //[用户]获取accessToken
+ ACCESSTOKEN = "https://open.ys7.com/api/lapp/token/get"
+)
+
+type Ys struct {
+ AppKey string
+ Secret string
+ AccessToken string
+ ExpireTime int64
+}
+
+func (ys *Ys) GetAccessToken() error {
+ params := make(map[string]interface{})
+ params["appKey"] = ys.AppKey
+ params["appSecret"] = ys.Secret
+ ac := &AccessToken{}
+ _, err := ys.requset("POST", ACCESSTOKEN, params, &ac)
+ if err != nil {
+ return err
+ }
+ ys.AccessToken = ac.AccessToken
+ ys.ExpireTime = ac.ExpireTime
+ return nil
+}
+
+func (ys *Ys) requset(method, url string, params map[string]interface{}, data interface{}) (status *Status, err error) {
+ defer func() {
+ if Rerr := recover(); Rerr != nil {
+ err = errors.New("recover error")
+ return
+ }
+ }()
+ var r http.Request
+ r.ParseForm()
+ for k, v := range params {
+ r.Form.Add(k, fmt.Sprint(v))
+ }
+ req, err := http.NewRequest(method, url, strings.NewReader(r.Form.Encode()))
+ if err != nil {
+ return nil, err
+ }
+ req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+ client := &http.Client{Timeout: 60 * time.Second}
+ resp, err := client.Do(req)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+ buf, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+
+ var res = Status{
+ Data: data,
+ }
+ err = json.Unmarshal(buf, &res)
+ if err != nil {
+ return nil, err
+ }
+ if res.Code != "200" {
+ return status, errors.New(res.Msg)
+ }
+ return status, nil
+}
+
+func (ys *Ys) authorizeRequset(method, url string, params map[string]interface{}, data interface{}) (status *Status, err error) {
+ exTime := time.Unix(ys.ExpireTime/1000, 0)
+ if exTime.Unix() < time.Now().Unix() || ys.AccessToken == "" {
+ ys.GetAccessToken()
+ }
+ defer func() {
+ if Rerr := recover(); Rerr != nil {
+ err = errors.New("recover error")
+ return
+ }
+ }()
+ params["accessToken"] = ys.AccessToken
+ status, err = ys.requset(method, url, params, data)
+ return
+}
diff --git a/resource/template/go/api.template b/resource/template/go/api.template
index 78bb145..809a525 100644
--- a/resource/template/go/api.template
+++ b/resource/template/go/api.template
@@ -5,12 +5,12 @@ package api
// 生成人:{{.FunctionAuthor}}
// ==========================================================================
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/{{.PackageName}}/entity"
"pandax/apps/{{.PackageName}}/services"
- "github.com/XM-GO/PandaKit/utils"
+ "github.com/PandaXGO/PandaKit/utils"
)
type {{.ClassName}}Api struct {
diff --git a/resource/template/go/router.template b/resource/template/go/router.template
index 621698b..039dcfc 100644
--- a/resource/template/go/router.template
+++ b/resource/template/go/router.template
@@ -6,8 +6,8 @@
package router
import (
- "github.com/XM-GO/PandaKit/model"
- "github.com/XM-GO/PandaKit/restfulx"
+ "github.com/PandaXGO/PandaKit/model"
+ "github.com/PandaXGO/PandaKit/restfulx"
"pandax/apps/{{.PackageName}}/api"
"pandax/apps/{{.PackageName}}/entity"
"pandax/apps/{{.PackageName}}/services"
diff --git a/resource/template/go/service.template b/resource/template/go/service.template
index 3113f13..3a82e33 100644
--- a/resource/template/go/service.template
+++ b/resource/template/go/service.template
@@ -8,7 +8,7 @@ package services
import (
"pandax/apps/{{.PackageName}}/entity"
- "github.com/XM-GO/PandaKit/biz"
+ "github.com/PandaXGO/PandaKit/biz"
"pandax/pkg/global"
)
diff --git a/shutdown.bat b/shutdown.bat
index 54b60e7..2807d7f 100644
--- a/shutdown.bat
+++ b/shutdown.bat
@@ -1 +1 @@
-taskkill /pid 25952 -t -f
\ No newline at end of file
+taskkill /pid 31288 -t -f
\ No newline at end of file