From a9a16bf0aabf5323a658d79a87473008d2197584 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期一, 10 七月 2023 14:10:45 +0800
Subject: [PATCH] add

---
 api/v1/index.go            |    2 
 model/request/status.go    |   14 +
 router/status.go           |   19 +
 service/status.go          |   59 ++++
 pkg/ecode/code.go          |    7 
 docs/swagger.yaml          |   94 +++++++
 docs/docs.go               |  147 ++++++++++++
 api/v1/status.go           |  112 +++++++++
 docs/swagger.json          |  147 ++++++++++++
 model/response/response.go |    4 
 service/index.go           |    1 
 model/status.go            |   86 +++++++
 model/index.go             |    1 
 router/index.go            |    2 
 14 files changed, 695 insertions(+), 0 deletions(-)

diff --git a/api/v1/index.go b/api/v1/index.go
index 3c575ef..54ebbba 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -30,6 +30,7 @@
 	SaleTypeApi
 	RegularCustomersApi
 	PossibilityApi
+	StatusApi
 }
 
 var ApiGroup = new(Group)
@@ -59,4 +60,5 @@
 	saleTypeService          = service.ServiceGroup.SaleTypeService
 	regularCustomersService  = service.ServiceGroup.RegularCustomersService
 	possibilityService       = service.ServiceGroup.PossibilityService
+	statusService            = service.ServiceGroup.StatusService
 )
diff --git a/api/v1/status.go b/api/v1/status.go
new file mode 100644
index 0000000..57729bc
--- /dev/null
+++ b/api/v1/status.go
@@ -0,0 +1,112 @@
+package v1
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/model/response"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"github.com/gin-gonic/gin"
+	"strconv"
+)
+
+type StatusApi struct{}
+
+// Add
+//
+//	@Tags		Status
+//	@Summary	娣诲姞鐘舵��
+//	@Produce	application/json
+//	@Param		object	body		request.AddStatus	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/status/add [post]
+func (s *StatusApi) Add(c *gin.Context) {
+	var params request.AddStatus
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	status := new(model.Status)
+	status.Name = params.Name
+
+	errCode := statusService.AddStatus(status)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+//
+//	@Tags		Status
+//	@Summary	鍒犻櫎鐘舵��
+//	@Produce	application/json
+//	@Param		id	path		int	true	"鏌ヨ鍙傛暟"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/status/delete/{id} [delete]
+func (s *StatusApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := statusService.DeleteStatus(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+//	@Tags		Status
+//	@Summary	鏇存柊鐘舵��
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateStatusList	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/status/update [put]
+func (s *StatusApi) Update(c *gin.Context) {
+	var params request.UpdateStatusList
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := statusService.UpdateStatus(params.List)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+//
+//	@Tags		Status
+//	@Summary	鐘舵�佸垪琛�
+//	@Produce	application/json
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/status/list [get]
+func (s *StatusApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	list, errCode := statusService.GetStatusList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.StatusResponse{
+		List: list,
+	})
+}
diff --git a/docs/docs.go b/docs/docs.go
index e2eca69..6cbada4 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -2818,6 +2818,113 @@
                 }
             }
         },
+        "/api/status/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Status"
+                ],
+                "summary": "娣诲姞鐘舵��",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/status/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Status"
+                ],
+                "summary": "鍒犻櫎鐘舵��",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/status/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Status"
+                ],
+                "summary": "鐘舵�佸垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/status/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Status"
+                ],
+                "summary": "鏇存柊鐘舵��",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateStatusList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/user/changePassword": {
             "post": {
                 "produces": [
@@ -4400,6 +4507,17 @@
                 }
             }
         },
+        "request.AddStatus": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.ChangePasswordReq": {
             "type": "object",
             "properties": {
@@ -5476,6 +5594,35 @@
                 }
             }
         },
+        "request.UpdateStatus": {
+            "type": "object",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdateStatusList": {
+            "type": "object",
+            "required": [
+                "list"
+            ],
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.UpdateStatus"
+                    }
+                }
+            }
+        },
         "response.CityResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 6f711d6..9805666 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -2806,6 +2806,113 @@
                 }
             }
         },
+        "/api/status/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Status"
+                ],
+                "summary": "娣诲姞鐘舵��",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/status/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Status"
+                ],
+                "summary": "鍒犻櫎鐘舵��",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/status/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Status"
+                ],
+                "summary": "鐘舵�佸垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/status/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Status"
+                ],
+                "summary": "鏇存柊鐘舵��",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateStatusList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/user/changePassword": {
             "post": {
                 "produces": [
@@ -4388,6 +4495,17 @@
                 }
             }
         },
+        "request.AddStatus": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.ChangePasswordReq": {
             "type": "object",
             "properties": {
@@ -5464,6 +5582,35 @@
                 }
             }
         },
+        "request.UpdateStatus": {
+            "type": "object",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdateStatusList": {
+            "type": "object",
+            "required": [
+                "list"
+            ],
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.UpdateStatus"
+                    }
+                }
+            }
+        },
         "response.CityResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 219a2f8..6c8e6f6 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -895,6 +895,13 @@
     required:
     - name
     type: object
+  request.AddStatus:
+    properties:
+      name:
+        type: string
+    required:
+    - name
+    type: object
   request.ChangePasswordReq:
     properties:
       newPassword:
@@ -1632,6 +1639,25 @@
         items:
           $ref: '#/definitions/request.UpdateSalesSources'
         type: array
+    type: object
+  request.UpdateStatus:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    required:
+    - id
+    - name
+    type: object
+  request.UpdateStatusList:
+    properties:
+      list:
+        items:
+          $ref: '#/definitions/request.UpdateStatus'
+        type: array
+    required:
+    - list
     type: object
   response.CityResponse:
     properties:
@@ -3524,6 +3550,74 @@
       summary: 鏇存柊鍟嗘満鏉ユ簮
       tags:
       - SalesSources
+  /api/status/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddStatus'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞鐘舵��
+      tags:
+      - Status
+  /api/status/delete/{id}:
+    delete:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鍒犻櫎鐘舵��
+      tags:
+      - Status
+  /api/status/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鐘舵�佸垪琛�
+      tags:
+      - Status
+  /api/status/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateStatusList'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊鐘舵��
+      tags:
+      - Status
   /api/user/changePassword:
     post:
       parameters:
diff --git a/model/index.go b/model/index.go
index 27988b4..0601b4d 100644
--- a/model/index.go
+++ b/model/index.go
@@ -45,6 +45,7 @@
 		SaleType{},
 		RegularCustomers{},
 		Possibility{},
+		Status{},
 	)
 	return err
 }
diff --git a/model/request/status.go b/model/request/status.go
new file mode 100644
index 0000000..de2d202
--- /dev/null
+++ b/model/request/status.go
@@ -0,0 +1,14 @@
+package request
+
+type AddStatus struct {
+	Name string `json:"name" binding:"required"`
+}
+
+type UpdateStatus struct {
+	Id   int    `json:"id" binding:"required"`
+	Name string `json:"name" binding:"required"`
+}
+
+type UpdateStatusList struct {
+	List []*UpdateStatus `json:"list" binding:"required"`
+}
diff --git a/model/response/response.go b/model/response/response.go
index 71e7f48..07ce959 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -117,4 +117,8 @@
 	PossibilityResponse struct {
 		List []*model.Possibility `json:"list"`
 	}
+
+	StatusResponse struct {
+		List []*model.Status `json:"list"`
+	}
 )
diff --git a/model/status.go b/model/status.go
new file mode 100644
index 0000000..a8cb7f9
--- /dev/null
+++ b/model/status.go
@@ -0,0 +1,86 @@
+package model
+
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+)
+
+type (
+	// Status 鐘舵��
+	Status struct {
+		Id   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name string `json:"name" gorm:"column:name;type:varchar(255);comment:鐘舵�佸悕绉�"`
+	}
+
+	// StatusSearch 鐘舵�佹悳绱㈡潯浠�
+	StatusSearch struct {
+		Status
+		Orm *gorm.DB
+	}
+)
+
+func (Status) TableName() string {
+	return "status"
+}
+
+func NewStatusSearch() *StatusSearch {
+	return &StatusSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *StatusSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&Status{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+	if slf.Name != "" {
+		db = db.Where("name = ?", slf.Name)
+	}
+
+	return db
+}
+
+func (slf *StatusSearch) Create(record *Status) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *StatusSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&Status{}).Error
+}
+
+func (slf *StatusSearch) Update(record *Status) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *StatusSearch) Find() (*Status, error) {
+	var db = slf.build()
+	var record = &Status{}
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *StatusSearch) FindAll() ([]*Status, error) {
+	var db = slf.build()
+	var records = make([]*Status, 0)
+	err := db.Find(&records).Error
+	return records, err
+}
+
+func (slf *StatusSearch) SetId(id int) *StatusSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *StatusSearch) SetName(name string) *StatusSearch {
+	slf.Name = name
+	return slf
+}
+
+func (slf *StatusSearch) Updates(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index 1307751..73faad0 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -170,4 +170,11 @@
 	PossibilityUpdateErr = 2300005 // 鏇存柊閿�鍞満浼氬彲鑳芥�уけ璐�
 	PossibilityDeleteErr = 2300006 // 鍒犻櫎閿�鍞満浼氬彲鑳芥�уけ璐�
 
+	StatusExist     = 2400001 // 閿�鍞満浼氱姸鎬佸凡瀛樺湪
+	StatusNotExist  = 2400002 // 閿�鍞満浼氱姸鎬佷笉瀛樺湪
+	StatusListErr   = 2400003 // 鑾峰彇閿�鍞満浼氱姸鎬佸垪琛ㄥけ璐�
+	StatusSetErr    = 2400004 // 璁剧疆閿�鍞満浼氱姸鎬佸け璐�
+	StatusUpdateErr = 2400005 // 鏇存柊閿�鍞満浼氱姸鎬佸け璐�
+	StatusDeleteErr = 2400006 // 鍒犻櫎閿�鍞満浼氱姸鎬佸け璐�
+
 )
diff --git a/router/index.go b/router/index.go
index 52471eb..d9f823d 100644
--- a/router/index.go
+++ b/router/index.go
@@ -36,6 +36,7 @@
 	SaleTypeRouter
 	RegularCustomersRouter
 	PossibilityRouter
+	StatusRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -89,6 +90,7 @@
 		routerGroup.InitSaleTypeRouter(PrivateGroup)          // 娉ㄥ唽saleType璺敱
 		routerGroup.InitRegularCustomersRouter(PrivateGroup)  // 娉ㄥ唽regularCustomers璺敱
 		routerGroup.InitPossibilityRouter(PrivateGroup)       // 娉ㄥ唽possibility璺敱
+		routerGroup.InitStatusRouter(PrivateGroup)            // 娉ㄥ唽status璺敱
 	}
 	return Router
 }
diff --git a/router/status.go b/router/status.go
new file mode 100644
index 0000000..5536c4b
--- /dev/null
+++ b/router/status.go
@@ -0,0 +1,19 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type StatusRouter struct{}
+
+func (s *StatusRouter) InitStatusRouter(router *gin.RouterGroup) {
+	statusRouter := router.Group("status")
+	statusApi := v1.ApiGroup.StatusApi
+	{
+		statusRouter.POST("add", statusApi.Add)             // 娣诲姞鐘舵��
+		statusRouter.DELETE("delete/:id", statusApi.Delete) // 鍒犻櫎鐘舵��
+		statusRouter.PUT("update", statusApi.Update)        // 鏇存柊鐘舵��
+		statusRouter.GET("list", statusApi.List)            // 鑾峰彇鐘舵�佸垪琛�
+	}
+}
diff --git a/service/index.go b/service/index.go
index 60ed2a6..0e56603 100644
--- a/service/index.go
+++ b/service/index.go
@@ -25,6 +25,7 @@
 	SaleTypeService
 	RegularCustomersService
 	PossibilityService
+	StatusService
 }
 
 var ServiceGroup = new(Group)
diff --git a/service/status.go b/service/status.go
new file mode 100644
index 0000000..f9cc80f
--- /dev/null
+++ b/service/status.go
@@ -0,0 +1,59 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type StatusService struct{}
+
+func (StatusService) AddStatus(status *model.Status) int {
+	err := model.NewStatusSearch().Create(status)
+	if err != nil {
+		return ecode.StatusExist
+	}
+
+	return ecode.OK
+}
+
+func (StatusService) DeleteStatus(id int) int {
+	_, err := model.NewStatusSearch().SetId(id).Find()
+	if err != nil {
+		return ecode.StatusNotExist
+	}
+
+	err = model.NewStatusSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.StatusNotExist
+	}
+	return ecode.OK
+}
+
+func (StatusService) GetStatusList() ([]*model.Status, int) {
+	list, err := model.NewStatusSearch().FindAll()
+	if err != nil {
+		return nil, ecode.StatusListErr
+	}
+
+	return list, ecode.OK
+}
+
+func (StatusService) UpdateStatus(statuses []*request.UpdateStatus) int {
+	for _, v := range statuses {
+		// check status exist
+		_, err := model.NewStatusSearch().SetId(v.Id).Find()
+		if err != nil {
+			return ecode.StatusNotExist
+		}
+
+		err = model.NewStatusSearch().SetId(v.Id).Updates(map[string]interface{}{
+			"name": v.Name,
+		})
+		if err != nil {
+			return ecode.StatusSetErr
+		}
+	}
+
+	return ecode.OK
+}

--
Gitblit v1.8.0