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, &params)
@@ -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, &params)
+	if !ok {
+		return
+	}
+
+	errCode := service.NewDevicePlcService().UpdateDevicePlc(&params)
+	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, &params)
-	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, &params)
-	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