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