From 7ffcc41e597c5af4169e3e2ab809fdbf869c2154 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期二, 18 七月 2023 16:08:47 +0800
Subject: [PATCH] add

---
 api/v1/index.go             |    2 
 router/department.go        |   20 +
 api/v1/department.go        |  112 ++++++++
 pkg/ecode/code.go           |    7 
 docs/swagger.yaml           |  113 ++++++++
 docs/docs.go                |  181 +++++++++++++
 docs/swagger.json           |  181 +++++++++++++
 model/response/response.go  |    4 
 service/department.go       |   59 ++++
 service/index.go            |    1 
 model/department.go         |   76 +++++
 model/index.go              |    1 
 model/request/department.go |   14 +
 router/index.go             |    2 
 14 files changed, 773 insertions(+), 0 deletions(-)

diff --git a/api/v1/department.go b/api/v1/department.go
new file mode 100644
index 0000000..8cc3ae0
--- /dev/null
+++ b/api/v1/department.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 DepartmentApi struct{}
+
+// Add
+//
+//	@Tags		Department
+//	@Summary	娣诲姞閮ㄩ棬
+//	@Produce	application/json
+//	@Param		object	body		request.AddDepartment	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/department/add [post]
+func (dep *DepartmentApi) Add(c *gin.Context) {
+	var params request.AddDepartment
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	department := new(model.Department)
+	department.Name = params.Name
+
+	errCode := departmentService.AddDepartment(department)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+//
+//	@Tags		Department
+//	@Summary	鍒犻櫎閮ㄩ棬
+//	@Produce	application/json
+//	@Param		id	path		int	true	"閮ㄩ棬ID"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/department/delete/{id} [delete]
+func (dep *DepartmentApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := departmentService.DeleteDepartment(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+//	@Tags		Department
+//	@Summary	鏇存柊閮ㄩ棬
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateDepartmentList	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/department/update/{id} [put]
+func (dep *DepartmentApi) Update(c *gin.Context) {
+	var params request.UpdateDepartmentList
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := departmentService.UpdateDepartment(params.Departments)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+//
+//	@Tags		Department
+//	@Summary	閮ㄩ棬鍒楄〃
+//	@Produce	application/json
+//	@Success	200	{object}	contextx.Response{data=response.DepartmentResponse}
+//	@Router		/api/department/list [get]
+func (dep *DepartmentApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	list, errCode := departmentService.GetDepartmentList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.DepartmentResponse{
+		List: list,
+	})
+}
diff --git a/api/v1/index.go b/api/v1/index.go
index 91b8105..1985418 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -47,6 +47,7 @@
 	AuthorityApi
 	MenuApi
 	GetAllDataApi
+	DepartmentApi
 }
 
 var ApiGroup = new(Group)
@@ -94,4 +95,5 @@
 	authorityService            = service.ServiceGroup.AuthorityService
 	menuService                 = service.ServiceGroup.MenuService
 	allDataServer               = service.ServiceGroup.DataServer
+	departmentService           = service.ServiceGroup.DepartmentService
 )
diff --git a/docs/docs.go b/docs/docs.go
index 1f314e2..3dd7099 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1414,6 +1414,125 @@
                 }
             }
         },
+        "/api/department/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Department"
+                ],
+                "summary": "娣诲姞閮ㄩ棬",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddDepartment"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/department/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Department"
+                ],
+                "summary": "鍒犻櫎閮ㄩ棬",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "閮ㄩ棬ID",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/department/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Department"
+                ],
+                "summary": "閮ㄩ棬鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.DepartmentResponse"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/department/update/{id}": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Department"
+                ],
+                "summary": "鏇存柊閮ㄩ棬",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateDepartmentList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/enterpriseNature/add": {
             "post": {
                 "produces": [
@@ -5366,6 +5485,17 @@
                 }
             }
         },
+        "model.Department": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.EnterpriseNature": {
             "type": "object",
             "properties": {
@@ -6494,6 +6624,17 @@
                 },
                 "serviceMode": {
                     "type": "integer"
+                }
+            }
+        },
+        "request.AddDepartment": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
                 }
             }
         },
@@ -7981,6 +8122,35 @@
                 }
             }
         },
+        "request.UpdateDepartment": {
+            "type": "object",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdateDepartmentList": {
+            "type": "object",
+            "required": [
+                "departments"
+            ],
+            "properties": {
+                "departments": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.UpdateDepartment"
+                    }
+                }
+            }
+        },
         "request.UpdateEnterpriseNature": {
             "type": "object",
             "required": [
@@ -9017,6 +9187,17 @@
                 }
             }
         },
+        "response.DepartmentResponse": {
+            "type": "object",
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Department"
+                    }
+                }
+            }
+        },
         "response.EnterpriseNatureResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 77ee54e..8ab6e77 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1402,6 +1402,125 @@
                 }
             }
         },
+        "/api/department/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Department"
+                ],
+                "summary": "娣诲姞閮ㄩ棬",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddDepartment"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/department/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Department"
+                ],
+                "summary": "鍒犻櫎閮ㄩ棬",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "閮ㄩ棬ID",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/department/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Department"
+                ],
+                "summary": "閮ㄩ棬鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.DepartmentResponse"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/department/update/{id}": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Department"
+                ],
+                "summary": "鏇存柊閮ㄩ棬",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateDepartmentList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/enterpriseNature/add": {
             "post": {
                 "produces": [
@@ -5354,6 +5473,17 @@
                 }
             }
         },
+        "model.Department": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.EnterpriseNature": {
             "type": "object",
             "properties": {
@@ -6482,6 +6612,17 @@
                 },
                 "serviceMode": {
                     "type": "integer"
+                }
+            }
+        },
+        "request.AddDepartment": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
                 }
             }
         },
@@ -7969,6 +8110,35 @@
                 }
             }
         },
+        "request.UpdateDepartment": {
+            "type": "object",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdateDepartmentList": {
+            "type": "object",
+            "required": [
+                "departments"
+            ],
+            "properties": {
+                "departments": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.UpdateDepartment"
+                    }
+                }
+            }
+        },
         "request.UpdateEnterpriseNature": {
             "type": "object",
             "required": [
@@ -9005,6 +9175,17 @@
                 }
             }
         },
+        "response.DepartmentResponse": {
+            "type": "object",
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Department"
+                    }
+                }
+            }
+        },
         "response.EnterpriseNatureResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 9ebebbd..085ec75 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -337,6 +337,13 @@
       serviceMode:
         type: integer
     type: object
+  model.Department:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
   model.EnterpriseNature:
     properties:
       id:
@@ -1092,6 +1099,13 @@
         type: integer
       serviceMode:
         type: integer
+    type: object
+  request.AddDepartment:
+    properties:
+      name:
+        type: string
+    required:
+    - name
     type: object
   request.AddEnterpriseNature:
     properties:
@@ -2102,6 +2116,25 @@
       serviceMode:
         type: integer
     type: object
+  request.UpdateDepartment:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    required:
+    - id
+    - name
+    type: object
+  request.UpdateDepartmentList:
+    properties:
+      departments:
+        items:
+          $ref: '#/definitions/request.UpdateDepartment'
+        type: array
+    required:
+    - departments
+    type: object
   request.UpdateEnterpriseNature:
     properties:
       id:
@@ -2788,6 +2821,13 @@
         description: 鍟嗘満鏉ユ簮
         items:
           $ref: '#/definitions/model.SalesSources'
+        type: array
+    type: object
+  response.DepartmentResponse:
+    properties:
+      list:
+        items:
+          $ref: '#/definitions/model.Department'
         type: array
     type: object
   response.EnterpriseNatureResponse:
@@ -3832,6 +3872,79 @@
       summary: 鑾峰彇鎵�鏈夋暟鎹�
       tags:
       - Data
+  /api/department/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddDepartment'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞閮ㄩ棬
+      tags:
+      - Department
+  /api/department/delete/{id}:
+    delete:
+      parameters:
+      - description: 閮ㄩ棬ID
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鍒犻櫎閮ㄩ棬
+      tags:
+      - Department
+  /api/department/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/contextx.Response'
+            - properties:
+                data:
+                  $ref: '#/definitions/response.DepartmentResponse'
+              type: object
+      summary: 閮ㄩ棬鍒楄〃
+      tags:
+      - Department
+  /api/department/update/{id}:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateDepartmentList'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊閮ㄩ棬
+      tags:
+      - Department
   /api/enterpriseNature/add:
     post:
       parameters:
diff --git a/model/department.go b/model/department.go
new file mode 100644
index 0000000..ef49895
--- /dev/null
+++ b/model/department.go
@@ -0,0 +1,76 @@
+package model
+
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+)
+
+type (
+	Department struct {
+		Id       int    `json:"id" gorm:"column:id;primaryKey;autoIncrement;not null"`
+		Name     string `json:"name" gorm:"column:name;type:varchar(255);comment:閮ㄩ棬鍚嶇О"`
+		ParentId int    `json:"-" gorm:"column:parent_id;type:int(11);comment:涓婄骇閮ㄩ棬ID"`
+	}
+
+	DepartmentSearch struct {
+		Department
+		Orm *gorm.DB
+	}
+)
+
+func (Department) TableName() string {
+	return "department"
+}
+
+func NewDepartmentSearch() *DepartmentSearch {
+	return &DepartmentSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *DepartmentSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&Department{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+	if slf.Name != "" {
+		db = db.Where("name = ?", slf.Name)
+	}
+	if slf.ParentId != 0 {
+		db = db.Where("parent_id = ?", slf.ParentId)
+	}
+
+	return db
+}
+
+func (slf *DepartmentSearch) Create(record *Department) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *DepartmentSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&Department{}).Error
+}
+
+func (slf *DepartmentSearch) Update(record *Department) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *DepartmentSearch) Find() ([]*Department, error) {
+	var db = slf.build()
+	var result []*Department
+	err := db.Find(&result).Error
+	return result, err
+}
+
+func (slf *DepartmentSearch) SetId(id int) *DepartmentSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *DepartmentSearch) Updates(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/index.go b/model/index.go
index 00b8544..8abb6b1 100644
--- a/model/index.go
+++ b/model/index.go
@@ -62,6 +62,7 @@
 		ServiceFeeManage{},
 		Authority{},
 		Api{},
+		Department{},
 	)
 	return err
 }
diff --git a/model/request/department.go b/model/request/department.go
new file mode 100644
index 0000000..ea3a87f
--- /dev/null
+++ b/model/request/department.go
@@ -0,0 +1,14 @@
+package request
+
+type AddDepartment struct {
+	Name string `json:"name" binding:"required"`
+}
+
+type UpdateDepartment struct {
+	Id   int    `json:"id" binding:"required"`
+	Name string `json:"name" binding:"required"`
+}
+
+type UpdateDepartmentList struct {
+	Departments []*UpdateDepartment `json:"departments" binding:"required"`
+}
diff --git a/model/response/response.go b/model/response/response.go
index efdb1ad..3fcc727 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -212,4 +212,8 @@
 		// 鑰佸鎴疯惀閿�
 		RegularCustomers []*model.RegularCustomers `json:"regular_customers"`
 	}
+
+	DepartmentResponse struct {
+		List []*model.Department `json:"list"`
+	}
 )
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index e6f7145..523c12c 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -279,4 +279,11 @@
 	MenuListErr         = 3900001 // 鑾峰彇鑿滃崟鍒楄〃澶辫触
 	SetMenuAuthorityErr = 3900002 // 璁剧疆鑿滃崟鏉冮檺澶辫触
 
+	DepartmentExist      = 4000001 // 閮ㄩ棬宸插瓨鍦�
+	DepartmentNotExist   = 4000002 // 閮ㄩ棬涓嶅瓨鍦�
+	DepartmentListErr    = 4000003 // 鑾峰彇閮ㄩ棬鍒楄〃澶辫触
+	DepartmentSetErr     = 4000004 // 璁剧疆閮ㄩ棬澶辫触
+	DepartmentUpdateErr  = 4000005 // 鏇存柊閮ㄩ棬澶辫触
+	DepartmentDeleteErr  = 4000006 // 鍒犻櫎閮ㄩ棬澶辫触
+	DepartmentDeleteErr1 = 4000007 // 璇ラ儴闂ㄤ笅瀛樺湪鐢ㄦ埛锛屾棤娉曞垹闄�
 )
diff --git a/router/department.go b/router/department.go
new file mode 100644
index 0000000..9d4d382
--- /dev/null
+++ b/router/department.go
@@ -0,0 +1,20 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type DepartmentRouter struct{}
+
+func (s *DepartmentRouter) InitDepartmentRouter(router *gin.RouterGroup) {
+	departmentRouter := router.Group("department")
+	//departmentRouterWithoutRecord := router.Group("department")
+	departmentApi := v1.ApiGroup.DepartmentApi
+	{
+		departmentRouter.POST("add", departmentApi.Add)             // 娣诲姞閮ㄩ棬
+		departmentRouter.DELETE("delete/:id", departmentApi.Delete) // 鍒犻櫎閮ㄩ棬
+		departmentRouter.PUT("update", departmentApi.Update)        // 鏇存柊閮ㄩ棬
+		departmentRouter.GET("list", departmentApi.List)            // 鑾峰彇閮ㄩ棬鍒楄〃
+	}
+}
diff --git a/router/index.go b/router/index.go
index cfe067d..b57c38c 100644
--- a/router/index.go
+++ b/router/index.go
@@ -53,6 +53,7 @@
 	AuthorityRouter
 	MenuRouter
 	DataRouter
+	DepartmentRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -125,6 +126,7 @@
 		routerGroup.InitAuthorityRouter(PrivateGroup)            // 娉ㄥ唽authority璺敱
 		routerGroup.InitMenuRouter(PrivateGroup)                 // 娉ㄥ唽menu璺敱
 		routerGroup.InitDataRouter(PrivateGroup)                 // 娉ㄥ唽data璺敱
+		routerGroup.InitDepartmentRouter(PrivateGroup)           // 娉ㄥ唽department璺敱
 	}
 	return Router
 }
diff --git a/service/department.go b/service/department.go
new file mode 100644
index 0000000..6a2d01f
--- /dev/null
+++ b/service/department.go
@@ -0,0 +1,59 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type DepartmentService struct{}
+
+func (DepartmentService) AddDepartment(department *model.Department) int {
+	err := model.NewDepartmentSearch().Create(department)
+	if err != nil {
+		return ecode.DepartmentExist
+	}
+
+	return ecode.OK
+}
+
+func (DepartmentService) DeleteDepartment(id int) int {
+	_, err := model.NewDepartmentSearch().SetId(id).Find()
+	if err != nil {
+		return ecode.DepartmentNotExist
+	}
+
+	err = model.NewDepartmentSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.DepartmentNotExist
+	}
+	return ecode.OK
+}
+
+func (DepartmentService) GetDepartmentList() ([]*model.Department, int) {
+	list, err := model.NewDepartmentSearch().Find()
+	if err != nil {
+		return nil, ecode.DepartmentListErr
+	}
+
+	return list, ecode.OK
+}
+
+func (DepartmentService) UpdateDepartment(departments []*request.UpdateDepartment) int {
+	for _, v := range departments {
+		// check department exist
+		_, err := model.NewDepartmentSearch().SetId(v.Id).Find()
+		if err != nil {
+			return ecode.DepartmentNotExist
+		}
+
+		err = model.NewDepartmentSearch().SetId(v.Id).Updates(map[string]interface{}{
+			"name": v.Name,
+		})
+		if err != nil {
+			return ecode.DepartmentSetErr
+		}
+	}
+
+	return ecode.OK
+}
diff --git a/service/index.go b/service/index.go
index eeffe08..fd0d2ed 100644
--- a/service/index.go
+++ b/service/index.go
@@ -43,6 +43,7 @@
 	AuthorityService
 	MenuService
 	DataServer
+	DepartmentService
 }
 
 var ServiceGroup = new(Group)

--
Gitblit v1.8.0