From 94a8c84e8d29300644a689ce2cd6f537f1993224 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期六, 19 八月 2023 17:41:30 +0800
Subject: [PATCH] plc查询和修改接口
---
/dev/null | 66 ----
model/device_plc.go | 247 ++++++++++++++++
model/plc_brand.go | 22 +
model/request/plc.go | 14
model/index.go | 2
service/device_plc.go | 66 ++++
router/index.go | 9
docs/swagger.yaml | 142 ++++++---
api/v1/config.go | 46 +++
docs/docs.go | 131 ++++++-
docs/swagger.json | 131 ++++++-
11 files changed, 694 insertions(+), 182 deletions(-)
diff --git a/api/v1/config.go b/api/v1/config.go
index d14c0a6..43065ad 100644
--- a/api/v1/config.go
+++ b/api/v1/config.go
@@ -2,6 +2,7 @@
import (
"apsClient/model"
+ "apsClient/model/request"
_ "apsClient/model/response"
"apsClient/pkg/contextx"
"apsClient/pkg/ecode"
@@ -40,7 +41,7 @@
// @Produce application/json
// @Param object body model.NetConfig true "鍙傛暟"
// @Success 200 {object} contextx.Response{data=[]response.ProcessParams} "鎴愬姛"
-// @Router /v1/config/net [put]
+// @Router /v1/config/net [post]
func (slf *ConfigApi) SetNetConfig(c *gin.Context) {
var params model.NetConfig
ctx, ok := contextx.NewContext(c, ¶ms)
@@ -64,3 +65,46 @@
}
ctx.Ok()
}
+
+// PlcGet
+// @Tags Config
+// @Summary 鑾峰彇plc閰嶇疆
+// @Produce application/json
+// @Success 200 {object} contextx.Response{data=model.DevicePlc} "鎴愬姛"
+// @Router /v1/config/plc [get]
+func (slf *ConfigApi) PlcGet(c *gin.Context) {
+ ctx, ok := contextx.NewContext(c, nil)
+ if !ok {
+ return
+ }
+
+ plcData, code := service.NewDevicePlcService().GetDevicePlc()
+ if code != ecode.OK {
+ ctx.Fail(code)
+ return
+ }
+ ctx.OkWithDetailed(plcData)
+}
+
+// PlcUpdate
+// @Tags Config
+// @Summary 鏇存柊plc閰嶇疆
+// @Produce application/json
+// @Param object body request.UpdatePlc true "鏌ヨ鍙傛暟"
+// @Success 200 {object} contextx.Response{}
+// @Router /v1/config/plc [post]
+func (slf *ConfigApi) PlcUpdate(c *gin.Context) {
+ var params request.UpdatePlc
+ ctx, ok := contextx.NewContext(c, ¶ms)
+ if !ok {
+ return
+ }
+
+ errCode := service.NewDevicePlcService().UpdateDevicePlc(¶ms)
+ if errCode != ecode.OK {
+ ctx.Fail(errCode)
+ return
+ }
+
+ ctx.Ok()
+}
diff --git a/api/v1/config2.go b/api/v1/config2.go
deleted file mode 100644
index 9fddc51..0000000
--- a/api/v1/config2.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package v1
-
-import (
- "apsClient/model"
- _ "apsClient/model/response"
- "apsClient/pkg/contextx"
- "apsClient/pkg/ecode"
- "apsClient/pkg/logx"
- "apsClient/service"
- "github.com/gin-gonic/gin"
-)
-
-type ConfigApi2 struct{}
-
-// GetNetConfig
-// @Tags Config
-// @Summary 鑾峰彇缃戠粶閰嶇疆
-// @Produce application/json
-// @Success 200 {object} contextx.Response{data=[]model.NetConfig} "鎴愬姛"
-// @Router /v1/cc/nn [get]
-func (slf *ConfigApi2) GetNetConfig(c *gin.Context) {
- ctx, ok := contextx.NewContext(c, nil)
- if !ok {
- return
- }
-
- ConfigData, err := service.NewConfigService().GetNetConfigList()
- if err != nil {
- logx.Errorf("get net config error: %v", err.Error())
- ctx.FailWithMsg(ecode.UnknownErr, "鑾峰彇缃戠粶閰嶇疆澶辫触")
- return
- }
-
- ctx.OkWithDetailed(ConfigData)
-}
-
-// SetNetConfig
-// @Tags Config
-// @Summary 璁剧疆缃戠粶閰嶇疆
-// @Produce application/json
-// @Param object body model.NetConfig true "鍙傛暟"
-// @Success 200 {object} contextx.Response{data=[]response.ProcessParams} "鎴愬姛"
-// @Router /v1/cc/nn [put]
-func (slf *ConfigApi2) SetNetConfig(c *gin.Context) {
- var params model.NetConfig
- ctx, ok := contextx.NewContext(c, ¶ms)
- if !ok {
- return
- }
-
- _, err := service.NewConfigService().GetNetConfig(params.Id)
-
- if err != nil {
- logx.Errorf("get net config error: %v", err.Error())
- ctx.FailWithMsg(ecode.UnknownErr, "鑾峰彇缃戠粶閰嶇疆澶辫触")
- return
- }
-
- err = service.NewConfigService().SetNetConfig(params.Id, ¶ms)
- if err != nil {
- logx.Errorf("SetNetConfig error: %v", err.Error())
- ctx.FailWithMsg(ecode.DBErr, "璁剧疆澶辫触")
- return
- }
- ctx.Ok()
-}
diff --git a/docs/docs.go b/docs/docs.go
index 4b11609..f066af8 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -16,7 +16,7 @@
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
- "/v1/cc/nn": {
+ "/v1/config/net": {
"get": {
"produces": [
"application/json"
@@ -49,7 +49,7 @@
}
}
},
- "put": {
+ "post": {
"produces": [
"application/json"
],
@@ -93,7 +93,7 @@
}
}
},
- "/v1/config/net": {
+ "/v1/config/plc": {
"get": {
"produces": [
"application/json"
@@ -101,7 +101,7 @@
"tags": [
"Config"
],
- "summary": "鑾峰彇缃戠粶閰嶇疆",
+ "summary": "鑾峰彇plc閰嶇疆",
"responses": {
"200": {
"description": "鎴愬姛",
@@ -114,10 +114,7 @@
"type": "object",
"properties": {
"data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/model.NetConfig"
- }
+ "$ref": "#/definitions/model.DevicePlc"
}
}
}
@@ -126,45 +123,30 @@
}
}
},
- "put": {
+ "post": {
"produces": [
"application/json"
],
"tags": [
"Config"
],
- "summary": "璁剧疆缃戠粶閰嶇疆",
+ "summary": "鏇存柊plc閰嶇疆",
"parameters": [
{
- "description": "鍙傛暟",
+ "description": "鏌ヨ鍙傛暟",
"name": "object",
"in": "body",
"required": true,
"schema": {
- "$ref": "#/definitions/model.NetConfig"
+ "$ref": "#/definitions/request.UpdatePlc"
}
}
],
"responses": {
"200": {
- "description": "鎴愬姛",
+ "description": "OK",
"schema": {
- "allOf": [
- {
- "$ref": "#/definitions/contextx.Response"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/response.ProcessParams"
- }
- }
- }
- }
- ]
+ "$ref": "#/definitions/contextx.Response"
}
}
}
@@ -520,6 +502,62 @@
}
}
},
+ "model.DevicePlc": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "brand": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/model.DevicePlcAddress"
+ }
+ },
+ "frequency": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "isOpen": {
+ "type": "boolean"
+ },
+ "method": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ },
+ "portName": {
+ "type": "string"
+ }
+ }
+ },
+ "model.DevicePlcAddress": {
+ "type": "object",
+ "properties": {
+ "fieldName": {
+ "description": "瀵瑰簲绯荤粺瀛楁",
+ "type": "string"
+ },
+ "length": {
+ "description": "鏁版嵁闀垮害",
+ "type": "integer"
+ },
+ "startAddress": {
+ "description": "鏁版嵁璧峰鍦板潃",
+ "type": "integer"
+ },
+ "type": {
+ "description": "鏁版嵁绫诲瀷",
+ "type": "string"
+ }
+ }
+ },
"model.NetConfig": {
"type": "object",
"required": [
@@ -691,6 +729,41 @@
}
}
},
+ "request.UpdatePlc": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "brand": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/model.DevicePlcAddress"
+ }
+ },
+ "frequency": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "isOpen": {
+ "type": "boolean"
+ },
+ "method": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ },
+ "portName": {
+ "type": "string"
+ }
+ }
+ },
"request.UpdatePlcBrand": {
"type": "object",
"properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index d175615..c6f1919 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -4,7 +4,7 @@
"contact": {}
},
"paths": {
- "/v1/cc/nn": {
+ "/v1/config/net": {
"get": {
"produces": [
"application/json"
@@ -37,7 +37,7 @@
}
}
},
- "put": {
+ "post": {
"produces": [
"application/json"
],
@@ -81,7 +81,7 @@
}
}
},
- "/v1/config/net": {
+ "/v1/config/plc": {
"get": {
"produces": [
"application/json"
@@ -89,7 +89,7 @@
"tags": [
"Config"
],
- "summary": "鑾峰彇缃戠粶閰嶇疆",
+ "summary": "鑾峰彇plc閰嶇疆",
"responses": {
"200": {
"description": "鎴愬姛",
@@ -102,10 +102,7 @@
"type": "object",
"properties": {
"data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/model.NetConfig"
- }
+ "$ref": "#/definitions/model.DevicePlc"
}
}
}
@@ -114,45 +111,30 @@
}
}
},
- "put": {
+ "post": {
"produces": [
"application/json"
],
"tags": [
"Config"
],
- "summary": "璁剧疆缃戠粶閰嶇疆",
+ "summary": "鏇存柊plc閰嶇疆",
"parameters": [
{
- "description": "鍙傛暟",
+ "description": "鏌ヨ鍙傛暟",
"name": "object",
"in": "body",
"required": true,
"schema": {
- "$ref": "#/definitions/model.NetConfig"
+ "$ref": "#/definitions/request.UpdatePlc"
}
}
],
"responses": {
"200": {
- "description": "鎴愬姛",
+ "description": "OK",
"schema": {
- "allOf": [
- {
- "$ref": "#/definitions/contextx.Response"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/response.ProcessParams"
- }
- }
- }
- }
- ]
+ "$ref": "#/definitions/contextx.Response"
}
}
}
@@ -508,6 +490,62 @@
}
}
},
+ "model.DevicePlc": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "brand": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/model.DevicePlcAddress"
+ }
+ },
+ "frequency": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "isOpen": {
+ "type": "boolean"
+ },
+ "method": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ },
+ "portName": {
+ "type": "string"
+ }
+ }
+ },
+ "model.DevicePlcAddress": {
+ "type": "object",
+ "properties": {
+ "fieldName": {
+ "description": "瀵瑰簲绯荤粺瀛楁",
+ "type": "string"
+ },
+ "length": {
+ "description": "鏁版嵁闀垮害",
+ "type": "integer"
+ },
+ "startAddress": {
+ "description": "鏁版嵁璧峰鍦板潃",
+ "type": "integer"
+ },
+ "type": {
+ "description": "鏁版嵁绫诲瀷",
+ "type": "string"
+ }
+ }
+ },
"model.NetConfig": {
"type": "object",
"required": [
@@ -679,6 +717,41 @@
}
}
},
+ "request.UpdatePlc": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "brand": {
+ "type": "string"
+ },
+ "details": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/model.DevicePlcAddress"
+ }
+ },
+ "frequency": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "isOpen": {
+ "type": "boolean"
+ },
+ "method": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ },
+ "portName": {
+ "type": "string"
+ }
+ }
+ },
"request.UpdatePlcBrand": {
"type": "object",
"properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index b251b21..6a2ec4e 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -63,6 +63,44 @@
msg:
type: string
type: object
+ model.DevicePlc:
+ properties:
+ address:
+ type: string
+ brand:
+ type: string
+ details:
+ items:
+ $ref: '#/definitions/model.DevicePlcAddress'
+ type: array
+ frequency:
+ type: integer
+ id:
+ type: integer
+ isOpen:
+ type: boolean
+ method:
+ type: string
+ port:
+ type: integer
+ portName:
+ type: string
+ type: object
+ model.DevicePlcAddress:
+ properties:
+ fieldName:
+ description: 瀵瑰簲绯荤粺瀛楁
+ type: string
+ length:
+ description: 鏁版嵁闀垮害
+ type: integer
+ startAddress:
+ description: 鏁版嵁璧峰鍦板潃
+ type: integer
+ type:
+ description: 鏁版嵁绫诲瀷
+ type: string
+ type: object
model.NetConfig:
properties:
dns:
@@ -178,6 +216,29 @@
name:
type: string
type: object
+ request.UpdatePlc:
+ properties:
+ address:
+ type: string
+ brand:
+ type: string
+ details:
+ items:
+ $ref: '#/definitions/model.DevicePlcAddress'
+ type: array
+ frequency:
+ type: integer
+ id:
+ type: integer
+ isOpen:
+ type: boolean
+ method:
+ type: string
+ port:
+ type: integer
+ portName:
+ type: string
+ type: object
request.UpdatePlcBrand:
properties:
id:
@@ -217,50 +278,6 @@
info:
contact: {}
paths:
- /v1/cc/nn:
- get:
- produces:
- - application/json
- responses:
- "200":
- description: 鎴愬姛
- schema:
- allOf:
- - $ref: '#/definitions/contextx.Response'
- - properties:
- data:
- items:
- $ref: '#/definitions/model.NetConfig'
- type: array
- type: object
- summary: 鑾峰彇缃戠粶閰嶇疆
- tags:
- - Config
- put:
- parameters:
- - description: 鍙傛暟
- in: body
- name: object
- required: true
- schema:
- $ref: '#/definitions/model.NetConfig'
- produces:
- - application/json
- responses:
- "200":
- description: 鎴愬姛
- schema:
- allOf:
- - $ref: '#/definitions/contextx.Response'
- - properties:
- data:
- items:
- $ref: '#/definitions/response.ProcessParams'
- type: array
- type: object
- summary: 璁剧疆缃戠粶閰嶇疆
- tags:
- - Config
/v1/config/net:
get:
produces:
@@ -280,7 +297,7 @@
summary: 鑾峰彇缃戠粶閰嶇疆
tags:
- Config
- put:
+ post:
parameters:
- description: 鍙傛暟
in: body
@@ -305,6 +322,41 @@
summary: 璁剧疆缃戠粶閰嶇疆
tags:
- Config
+ /v1/config/plc:
+ get:
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: 鎴愬姛
+ schema:
+ allOf:
+ - $ref: '#/definitions/contextx.Response'
+ - properties:
+ data:
+ $ref: '#/definitions/model.DevicePlc'
+ type: object
+ summary: 鑾峰彇plc閰嶇疆
+ tags:
+ - Config
+ post:
+ parameters:
+ - description: 鏌ヨ鍙傛暟
+ in: body
+ name: object
+ required: true
+ schema:
+ $ref: '#/definitions/request.UpdatePlc'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/contextx.Response'
+ summary: 鏇存柊plc閰嶇疆
+ tags:
+ - Config
/v1/plcBrand/add:
post:
parameters:
diff --git a/model/device_plc.go b/model/device_plc.go
new file mode 100644
index 0000000..9fe1119
--- /dev/null
+++ b/model/device_plc.go
@@ -0,0 +1,247 @@
+package model
+
+import (
+ "apsClient/pkg/sqlitex"
+ "encoding/json"
+ "fmt"
+ "gorm.io/gorm"
+)
+
+type (
+
+ // DevicePlc 璁惧鐨凱LC閰嶇疆
+ DevicePlc struct {
+ gorm.Model `json:"-"`
+ Id int `gorm:"primarykey;type:int;"`
+ Brand string `gorm:"type:varchar(191);comment:PLC鍝佺墝" json:"brand"`
+ Method string `gorm:"type:varchar(191);comment:鎺ュ彛鏂瑰紡" json:"method"`
+ PortName string `gorm:"type:varchar(191);comment:绔彛鍚嶇О" json:"portName"`
+ Frequency int `gorm:"type:int(11);comment:鏁版嵁鏇存柊棰戠巼 0-瀹炴椂鏇存柊 1-1娆�/绉�" json:"frequency"`
+ Address string `gorm:"type:varchar(191);comment:PLC鍦板潃" json:"address"`
+ Port int `gorm:"type:int(11);comment:绔彛" json:"port"`
+ IsOpen bool `gorm:"type:tinyint(1);comment:鏄惁寮�鍚�" json:"isOpen"`
+ Detail string `gorm:"type:varchar(2048);comment:鏁版嵁璇︽儏" json:"-"`
+
+ Details []*DevicePlcAddress `gorm:"-" json:"details"`
+ }
+
+ DevicePlcAddress struct {
+ StartAddress int `json:"startAddress"` // 鏁版嵁璧峰鍦板潃
+ Length int `json:"length"` // 鏁版嵁闀垮害
+ Type string `json:"type"` // 鏁版嵁绫诲瀷
+ FieldName string `json:"fieldName"` // 瀵瑰簲绯荤粺瀛楁
+ }
+
+ DevicePlcSearch struct {
+ DevicePlc
+ Order string
+ PageNum int
+ PageSize int
+ Orm *gorm.DB
+ }
+)
+
+func (slf *DevicePlc) TableName() string {
+ return "device_plc"
+}
+
+func (slf *DevicePlc) AfterFind(tx *gorm.DB) error {
+ details := make([]*DevicePlcAddress, 0)
+ err := json.Unmarshal([]byte(slf.Detail), &details)
+ if err != nil {
+ return err
+ }
+ slf.Details = details
+ return nil
+}
+
+func NewDevicePlcSearch() *DevicePlcSearch {
+ return &DevicePlcSearch{Orm: sqlitex.GetDB()}
+}
+
+func (slf *DevicePlcSearch) SetOrm(tx *gorm.DB) *DevicePlcSearch {
+ slf.Orm = tx
+ return slf
+}
+
+func (slf *DevicePlcSearch) SetPage(page, size int) *DevicePlcSearch {
+ slf.PageNum, slf.PageSize = page, size
+ return slf
+}
+
+func (slf *DevicePlcSearch) SetOrder(order string) *DevicePlcSearch {
+ slf.Order = order
+ return slf
+}
+
+func (slf *DevicePlcSearch) SetId(id int) *DevicePlcSearch {
+ slf.Id = id
+ return slf
+}
+
+func (slf *DevicePlcSearch) build() *gorm.DB {
+ var db = slf.Orm.Table(slf.TableName())
+
+ if slf.Id > 0 {
+ db = db.Where("id = ?", slf.Id)
+ }
+
+ if slf.Order != "" {
+ db = db.Order(slf.Order)
+ }
+
+ return db
+}
+
+// Create 鍗曟潯鎻掑叆
+func (slf *DevicePlcSearch) Create(record *DevicePlc) error {
+ var db = slf.build()
+
+ if err := db.Create(record).Error; err != nil {
+ return fmt.Errorf("create err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// CreateBatch 鎵归噺鎻掑叆
+func (slf *DevicePlcSearch) CreateBatch(records []*DevicePlc) error {
+ var db = slf.build()
+
+ if err := db.Create(&records).Error; err != nil {
+ return fmt.Errorf("create batch err: %v, records: %+v", err, records)
+ }
+
+ return nil
+}
+
+func (slf *DevicePlcSearch) Save(record *DevicePlc) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+func (slf *DevicePlcSearch) UpdateByMap(upMap map[string]interface{}) error {
+ var (
+ db = slf.build()
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
+ }
+
+ return nil
+}
+
+func (slf *DevicePlcSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
+ var (
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
+ }
+
+ return nil
+}
+
+func (slf *DevicePlcSearch) Delete() error {
+ var db = slf.build()
+
+ if err := db.Unscoped().Delete(&DevicePlc{}).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (slf *DevicePlcSearch) First() (*DevicePlc, error) {
+ var (
+ record = new(DevicePlc)
+ db = slf.build()
+ )
+
+ if err := db.First(record).Error; err != nil {
+ return record, err
+ }
+
+ return record, nil
+}
+
+func (slf *DevicePlcSearch) Find() ([]*DevicePlc, int64, error) {
+ var (
+ records = make([]*DevicePlc, 0)
+ total int64
+ db = slf.build()
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, total, nil
+}
+
+func (slf *DevicePlcSearch) FindNotTotal() ([]*DevicePlc, error) {
+ var (
+ records = make([]*DevicePlc, 0)
+ db = slf.build()
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, nil
+}
+
+// FindByQuery 鎸囧畾鏉′欢鏌ヨ.
+func (slf *DevicePlcSearch) FindByQuery(query string, args []interface{}) ([]*DevicePlc, int64, error) {
+ var (
+ records = make([]*DevicePlc, 0)
+ total int64
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find by query count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, total, nil
+}
+
+// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�.
+func (slf *DevicePlcSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*DevicePlc, error) {
+ var (
+ records = make([]*DevicePlc, 0)
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, nil
+}
diff --git a/model/index.go b/model/index.go
index 12e013e..6ac0cf7 100644
--- a/model/index.go
+++ b/model/index.go
@@ -26,6 +26,7 @@
Procedures{},
NetConfig{},
PlcBrand{},
+ DevicePlc{},
)
return err
}
@@ -40,6 +41,7 @@
models := []interface{}{
NewNetConfigSearch(nil),
+ NewPlcBrandSearch(),
}
for _, model := range models {
diff --git a/model/plc_brand.go b/model/plc_brand.go
index a91bf44..4bf7bff 100644
--- a/model/plc_brand.go
+++ b/model/plc_brand.go
@@ -6,6 +6,7 @@
"errors"
"fmt"
"gorm.io/gorm"
+ "sync"
)
type (
@@ -129,17 +130,28 @@
}
// InitDefaultData 鍒濆鍖栨暟鎹�
-func (slf *PlcBrandSearch) InitDefaultData() error {
+func (slf *PlcBrandSearch) InitDefaultData(errCh chan<- error, wg *sync.WaitGroup) {
var (
db = slf.Orm.Table(slf.TableName())
total int64 = 0
)
+ defer wg.Done()
+
if err := db.Count(&total).Error; err != nil {
- return err
+ errCh <- err
+ return
}
if total != 0 {
- return nil
+ return
}
- records := []*PlcBrand{}
- return slf.CreateBatch(records)
+ records := []*PlcBrand{
+ {1, "娆у榫�"},
+ {2, "瑗块棬瀛�"},
+ {3, "鏉句笅"},
+ }
+ err := slf.CreateBatch(records)
+ if err != nil {
+ errCh <- err
+ return
+ }
}
diff --git a/model/request/plc.go b/model/request/plc.go
new file mode 100644
index 0000000..d0d930f
--- /dev/null
+++ b/model/request/plc.go
@@ -0,0 +1,14 @@
+package request
+
+import (
+ "apsClient/model"
+)
+
+type AddPlc struct {
+ model.DevicePlc
+}
+
+type UpdatePlc struct {
+ Id int `json:"id"`
+ model.DevicePlc
+}
diff --git a/router/index.go b/router/index.go
index 3ba1a70..a4360b4 100644
--- a/router/index.go
+++ b/router/index.go
@@ -46,13 +46,8 @@
{
configGroup.GET("net", configApi.GetNetConfig) // 鑾峰彇缃戠粶閰嶇疆
configGroup.POST("net", configApi.SetNetConfig) // 璁剧疆缃戠粶
- }
-
- configApi1 := new(v1.ConfigApi2)
- configGroup1 := v1Group.Group("cc")
- {
- configGroup1.GET("nn", configApi1.GetNetConfig) // 鑾峰彇缃戠粶閰嶇疆
- configGroup1.POST("nn", configApi1.SetNetConfig) // 璁剧疆缃戠粶
+ configGroup.GET("plc", configApi.PlcGet) // 鑾峰彇plc閰嶇疆
+ configGroup.POST("plc", configApi.PlcUpdate) // 璁剧疆plc
}
InitPlcBrandRouter(v1Group)
diff --git a/service/device_plc.go b/service/device_plc.go
new file mode 100644
index 0000000..7ec6fee
--- /dev/null
+++ b/service/device_plc.go
@@ -0,0 +1,66 @@
+package service
+
+import (
+ "apsClient/model"
+ "apsClient/model/request"
+ "apsClient/pkg/ecode"
+ "apsClient/pkg/logx"
+ "apsClient/pkg/structx"
+ "encoding/json"
+ "gorm.io/gorm"
+)
+
+type DevicePlcService struct{}
+
+func NewDevicePlcService() DevicePlcService {
+ return DevicePlcService{}
+}
+
+func (DevicePlcService) GetDevicePlc() (*model.DevicePlc, int) {
+ DevicePlc, err := model.NewDevicePlcSearch().SetOrder("id desc").First()
+ if err == gorm.ErrRecordNotFound {
+ return &model.DevicePlc{
+ Brand: "",
+ Method: "",
+ PortName: "",
+ Frequency: 0,
+ Address: "",
+ Port: 0,
+ IsOpen: false,
+ Detail: "",
+ Details: make([]*model.DevicePlcAddress, 0),
+ }, ecode.OK
+ }
+ if err != nil {
+ return nil, ecode.DBErr
+ }
+
+ return DevicePlc, ecode.OK
+}
+
+func (DevicePlcService) UpdateDevicePlc(plc *request.UpdatePlc) int {
+ var record model.DevicePlc
+ err := structx.AssignTo(plc, &record)
+ if err != nil {
+ logx.Errorf("UpdateDevicePlc err: %v", err.Error())
+ return ecode.UnknownErr
+ }
+
+ detail, err := json.Marshal(plc.Details)
+ if err != nil {
+ return ecode.ParamsErr
+ }
+ record.Detail = string(detail)
+
+ if plc.Id == 0 {
+ err = model.NewDevicePlcSearch().Create(&record)
+ } else {
+ err = model.NewDevicePlcSearch().SetId(plc.Id).Save(&record)
+ }
+
+ if err != nil {
+ logx.Errorf("UpdateDevicePlc err: %v", err.Error())
+ return ecode.DBErr
+ }
+ return ecode.OK
+}
--
Gitblit v1.8.0