From 045199a75fceedea2e310d8798922c302f317849 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期五, 07 七月 2023 14:56:19 +0800
Subject: [PATCH] add

---
 api/v1/index.go            |    2 
 router/saleType.go         |   19 +
 pkg/ecode/code.go          |    8 
 docs/swagger.yaml          |  113 ++++++++
 model/request/saleType.go  |   14 +
 service/saleType.go        |   59 ++++
 docs/docs.go               |  181 ++++++++++++
 docs/swagger.json          |  181 ++++++++++++
 model/response/response.go |    4 
 service/index.go           |    1 
 api/v1/saleType.go         |  112 ++++++++
 model/index.go             |    1 
 router/index.go            |    2 
 model/saleType.go          |   84 ++++++
 14 files changed, 781 insertions(+), 0 deletions(-)

diff --git a/api/v1/index.go b/api/v1/index.go
index 3eb61f6..d14c159 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -27,6 +27,7 @@
 	FollowRecordApi
 	SaleChanceApi
 	SaleStageApi
+	SaleTypeApi
 }
 
 var ApiGroup = new(Group)
@@ -53,4 +54,5 @@
 	followRecordService      = service.ServiceGroup.FollowRecordService
 	saleChanceService        = service.ServiceGroup.SaleChanceService
 	saleStageService         = service.ServiceGroup.SaleStageService
+	saleTypeService          = service.ServiceGroup.SaleTypeService
 )
diff --git a/api/v1/saleType.go b/api/v1/saleType.go
new file mode 100644
index 0000000..21fd66b
--- /dev/null
+++ b/api/v1/saleType.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 SaleTypeApi struct{}
+
+// Add
+//
+// @Tags SaleType
+// @Summary 娣诲姞閿�鍞被鍨�
+// @Produce application/json
+// @Param object body request.AddSaleType true "鏌ヨ鍙傛暟"
+// @Success 200 {object} contextx.Response{}
+// @Router /api/saleType/add [post]
+func (s *SaleTypeApi) Add(c *gin.Context) {
+	var params request.AddSaleType
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	saleType := new(model.SaleType)
+	saleType.Name = params.Name
+
+	errCode := saleTypeService.AddSaleType(saleType)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+//
+// @Tags SaleType
+// @Summary 鍒犻櫎閿�鍞被鍨�
+// @Produce application/json
+// @Param id path int true "鏌ヨ鍙傛暟"
+// @Success 200 {object} contextx.Response{}
+// @Router /api/saleType/delete/{id} [delete]
+func (s *SaleTypeApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := saleTypeService.DeleteSaleType(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+// @Tags SaleType
+// @Summary 鏇存柊閿�鍞被鍨�
+// @Produce application/json
+// @Param object body request.UpdateSaleTypes true "鏌ヨ鍙傛暟"
+// @Success 200 {object} contextx.Response{}
+// @Router /api/saleType/update [put]
+func (s *SaleTypeApi) Update(c *gin.Context) {
+	var params request.UpdateSaleTypes
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := saleTypeService.UpdateSaleType(params.SaleTypes)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+//
+// @Tags SaleType
+// @Summary 鑾峰彇閿�鍞被鍨嬪垪琛�
+// @Produce application/json
+// @Success 200 {object} contextx.Response{data=response.SaleTypeResponse}
+// @Router /api/saleType/list [get]
+func (s *SaleTypeApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	saleTypes, errCode := saleTypeService.GetSaleTypeList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.SaleTypeResponse{
+		List: saleTypes,
+	})
+}
diff --git a/docs/docs.go b/docs/docs.go
index 9139769..f8d51cf 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -2223,6 +2223,125 @@
                 }
             }
         },
+        "/api/saleType/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SaleType"
+                ],
+                "summary": "娣诲姞閿�鍞被鍨�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddSaleType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/saleType/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SaleType"
+                ],
+                "summary": "鍒犻櫎閿�鍞被鍨�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/saleType/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SaleType"
+                ],
+                "summary": "鑾峰彇閿�鍞被鍨嬪垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.SaleTypeResponse"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/saleType/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SaleType"
+                ],
+                "summary": "鏇存柊閿�鍞被鍨�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateSaleTypes"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/salesLeads/add": {
             "post": {
                 "produces": [
@@ -3378,6 +3497,17 @@
                 }
             }
         },
+        "model.SaleType": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.SalesLeads": {
             "type": "object",
             "properties": {
@@ -3907,6 +4037,17 @@
             }
         },
         "request.AddSaleStage": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddSaleType": {
             "type": "object",
             "required": [
                 "name"
@@ -4888,6 +5029,35 @@
                 }
             }
         },
+        "request.UpdateSaleType": {
+            "type": "object",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdateSaleTypes": {
+            "type": "object",
+            "required": [
+                "sale_types"
+            ],
+            "properties": {
+                "sale_types": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.UpdateSaleType"
+                    }
+                }
+            }
+        },
         "request.UpdateSalesLeads": {
             "type": "object",
             "properties": {
@@ -5171,6 +5341,17 @@
                 }
             }
         },
+        "response.SaleTypeResponse": {
+            "type": "object",
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.SaleType"
+                    }
+                }
+            }
+        },
         "response.SalesLeadsResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 0b77f5d..6e7d691 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -2211,6 +2211,125 @@
                 }
             }
         },
+        "/api/saleType/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SaleType"
+                ],
+                "summary": "娣诲姞閿�鍞被鍨�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddSaleType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/saleType/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SaleType"
+                ],
+                "summary": "鍒犻櫎閿�鍞被鍨�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/saleType/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SaleType"
+                ],
+                "summary": "鑾峰彇閿�鍞被鍨嬪垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.SaleTypeResponse"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/saleType/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SaleType"
+                ],
+                "summary": "鏇存柊閿�鍞被鍨�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateSaleTypes"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/salesLeads/add": {
             "post": {
                 "produces": [
@@ -3366,6 +3485,17 @@
                 }
             }
         },
+        "model.SaleType": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.SalesLeads": {
             "type": "object",
             "properties": {
@@ -3895,6 +4025,17 @@
             }
         },
         "request.AddSaleStage": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddSaleType": {
             "type": "object",
             "required": [
                 "name"
@@ -4876,6 +5017,35 @@
                 }
             }
         },
+        "request.UpdateSaleType": {
+            "type": "object",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdateSaleTypes": {
+            "type": "object",
+            "required": [
+                "sale_types"
+            ],
+            "properties": {
+                "sale_types": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.UpdateSaleType"
+                    }
+                }
+            }
+        },
         "request.UpdateSalesLeads": {
             "type": "object",
             "properties": {
@@ -5159,6 +5329,17 @@
                 }
             }
         },
+        "response.SaleTypeResponse": {
+            "type": "object",
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.SaleType"
+                    }
+                }
+            }
+        },
         "response.SalesLeadsResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index fee26cc..030a27f 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -444,6 +444,13 @@
       name:
         type: string
     type: object
+  model.SaleType:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
   model.SalesLeads:
     properties:
       city:
@@ -805,6 +812,13 @@
         type: string
     type: object
   request.AddSaleStage:
+    properties:
+      name:
+        type: string
+    required:
+    - name
+    type: object
+  request.AddSaleType:
     properties:
       name:
         type: string
@@ -1480,6 +1494,25 @@
     required:
     - sale_stages
     type: object
+  request.UpdateSaleType:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    required:
+    - id
+    - name
+    type: object
+  request.UpdateSaleTypes:
+    properties:
+      sale_types:
+        items:
+          $ref: '#/definitions/request.UpdateSaleType'
+        type: array
+    required:
+    - sale_types
+    type: object
   request.UpdateSalesLeads:
     properties:
       city_id:
@@ -1663,6 +1696,13 @@
       list:
         items:
           $ref: '#/definitions/model.SaleStage'
+        type: array
+    type: object
+  response.SaleTypeResponse:
+    properties:
+      list:
+        items:
+          $ref: '#/definitions/model.SaleType'
         type: array
     type: object
   response.SalesLeadsResponse:
@@ -3039,6 +3079,79 @@
       summary: 鏇存柊閿�鍞樁娈�
       tags:
       - SaleStage
+  /api/saleType/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddSaleType'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞閿�鍞被鍨�
+      tags:
+      - SaleType
+  /api/saleType/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:
+      - SaleType
+  /api/saleType/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/contextx.Response'
+            - properties:
+                data:
+                  $ref: '#/definitions/response.SaleTypeResponse'
+              type: object
+      summary: 鑾峰彇閿�鍞被鍨嬪垪琛�
+      tags:
+      - SaleType
+  /api/saleType/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateSaleTypes'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊閿�鍞被鍨�
+      tags:
+      - SaleType
   /api/salesLeads/add:
     post:
       parameters:
diff --git a/model/index.go b/model/index.go
index 921ba9f..b94d2bf 100644
--- a/model/index.go
+++ b/model/index.go
@@ -42,6 +42,7 @@
 		SalesLeads{},
 		SalesSources{},
 		SaleStage{},
+		SaleType{},
 	)
 	return err
 }
diff --git a/model/request/saleType.go b/model/request/saleType.go
new file mode 100644
index 0000000..2e86579
--- /dev/null
+++ b/model/request/saleType.go
@@ -0,0 +1,14 @@
+package request
+
+type AddSaleType struct {
+	Name string `json:"name" binding:"required"`
+}
+
+type UpdateSaleType struct {
+	Id   int    `json:"id" binding:"required"`
+	Name string `json:"name" binding:"required"`
+}
+
+type UpdateSaleTypes struct {
+	SaleTypes []*UpdateSaleType `json:"sale_types" binding:"required"`
+}
diff --git a/model/response/response.go b/model/response/response.go
index b8909b4..f1ee34f 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -105,4 +105,8 @@
 	SaleStageResponse struct {
 		List []*model.SaleStage `json:"list"`
 	}
+
+	SaleTypeResponse struct {
+		List []*model.SaleType `json:"list"`
+	}
 )
diff --git a/model/saleType.go b/model/saleType.go
new file mode 100644
index 0000000..8370ee7
--- /dev/null
+++ b/model/saleType.go
@@ -0,0 +1,84 @@
+package model
+
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+)
+
+type (
+	SaleType struct {
+		Id   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name string `json:"name" gorm:"column:name;type:varchar(255);comment:鍟嗘満绫诲瀷鍚嶇О"`
+	}
+
+	SaleTypeSearch struct {
+		SaleType
+		Orm *gorm.DB
+	}
+)
+
+func (SaleType) TableName() string {
+	return "sale_type"
+}
+
+func NewSaleTypeSearch() *SaleTypeSearch {
+	return &SaleTypeSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *SaleTypeSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&SaleType{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+	if slf.Name != "" {
+		db = db.Where("name = ?", slf.Name)
+	}
+
+	return db
+}
+
+func (slf *SaleTypeSearch) Create(record *SaleType) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *SaleTypeSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&SaleType{}).Error
+}
+
+func (slf *SaleTypeSearch) Update(record *SaleType) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *SaleTypeSearch) Find() (*SaleType, error) {
+	var db = slf.build()
+	var record = &SaleType{}
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *SaleTypeSearch) FindAll() ([]*SaleType, error) {
+	var db = slf.build()
+	var records = make([]*SaleType, 0)
+	err := db.Find(&records).Error
+	return records, err
+}
+
+func (slf *SaleTypeSearch) SetId(id int) *SaleTypeSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *SaleTypeSearch) SetName(name string) *SaleTypeSearch {
+	slf.Name = name
+	return slf
+}
+
+func (slf *SaleTypeSearch) 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 d0cdd6e..519dbc2 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -148,4 +148,12 @@
 	SaleStageNotExist = 2000002 // 閿�鍞樁娈典笉瀛樺湪
 	SaleStageListErr  = 2000003 // 鑾峰彇閿�鍞樁娈靛垪琛ㄥけ璐�
 	SaleStageSetErr   = 2000004 // 璁剧疆閿�鍞樁娈靛け璐�
+
+	SaleTypeExist     = 2100001 // 閿�鍞被鍨嬪凡瀛樺湪
+	SaleTypeNotExist  = 2100002 // 閿�鍞被鍨嬩笉瀛樺湪
+	SaleTypeListErr   = 2100003 // 鑾峰彇閿�鍞被鍨嬪垪琛ㄥけ璐�
+	SaleTypeSetErr    = 2100004 // 璁剧疆閿�鍞被鍨嬪け璐�
+	SaleTypeUpdateErr = 2100005 // 鏇存柊閿�鍞被鍨嬪け璐�
+	SaleTypeDeleteErr = 2100006 // 鍒犻櫎閿�鍞被鍨嬪け璐�
+
 )
diff --git a/router/index.go b/router/index.go
index 530a686..71d997c 100644
--- a/router/index.go
+++ b/router/index.go
@@ -33,6 +33,7 @@
 	FollowRecordRouter
 	SaleChanceRouter
 	SaleStageRouter
+	SaleTypeRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -83,6 +84,7 @@
 		routerGroup.InitFollowRecordRouter(PrivateGroup)      // 娉ㄥ唽followRecord璺敱
 		routerGroup.InitSaleChanceRouter(PrivateGroup)        // 娉ㄥ唽saleChance璺敱
 		routerGroup.InitSaleStageRouter(PrivateGroup)         // 娉ㄥ唽saleStage璺敱
+		routerGroup.InitSaleTypeRouter(PrivateGroup)          // 娉ㄥ唽saleType璺敱
 	}
 	return Router
 }
diff --git a/router/saleType.go b/router/saleType.go
new file mode 100644
index 0000000..2e5685f
--- /dev/null
+++ b/router/saleType.go
@@ -0,0 +1,19 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type SaleTypeRouter struct{}
+
+func (s *SaleTypeRouter) InitSaleTypeRouter(router *gin.RouterGroup) {
+	saleTypeRouter := router.Group("saleType")
+	saleTypeApi := v1.ApiGroup.SaleTypeApi
+	{
+		saleTypeRouter.POST("add", saleTypeApi.Add)             // 娣诲姞閿�鍞被鍨�
+		saleTypeRouter.DELETE("delete/:id", saleTypeApi.Delete) // 鍒犻櫎閿�鍞被鍨�
+		saleTypeRouter.PUT("update", saleTypeApi.Update)        // 鏇存柊閿�鍞被鍨�
+		saleTypeRouter.GET("list", saleTypeApi.List)            // 鑾峰彇閿�鍞被鍨嬪垪琛�
+	}
+}
diff --git a/service/index.go b/service/index.go
index 5b17919..4e61453 100644
--- a/service/index.go
+++ b/service/index.go
@@ -22,6 +22,7 @@
 	FollowRecordService
 	SaleChanceService
 	SaleStageService
+	SaleTypeService
 }
 
 var ServiceGroup = new(Group)
diff --git a/service/saleType.go b/service/saleType.go
new file mode 100644
index 0000000..76ce49e
--- /dev/null
+++ b/service/saleType.go
@@ -0,0 +1,59 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type SaleTypeService struct{}
+
+func (SaleTypeService) AddSaleType(saleType *model.SaleType) int {
+	err := model.NewSaleTypeSearch().Create(saleType)
+	if err != nil {
+		return ecode.SaleTypeExist
+	}
+
+	return ecode.OK
+}
+
+func (SaleTypeService) DeleteSaleType(id int) int {
+	_, err := model.NewSaleTypeSearch().SetId(id).Find()
+	if err != nil {
+		return ecode.SaleTypeNotExist
+	}
+
+	err = model.NewSaleTypeSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.SaleTypeNotExist
+	}
+	return ecode.OK
+}
+
+func (SaleTypeService) GetSaleTypeList() ([]*model.SaleType, int) {
+	list, err := model.NewSaleTypeSearch().FindAll()
+	if err != nil {
+		return nil, ecode.SaleTypeListErr
+	}
+
+	return list, ecode.OK
+}
+
+func (SaleTypeService) UpdateSaleType(saleTypes []*request.UpdateSaleType) int {
+	for _, v := range saleTypes {
+		// check saleType exist
+		_, err := model.NewSaleTypeSearch().SetId(v.Id).Find()
+		if err != nil {
+			return ecode.SaleTypeNotExist
+		}
+
+		err = model.NewSaleTypeSearch().SetId(v.Id).Updates(map[string]interface{}{
+			"name": v.Name,
+		})
+		if err != nil {
+			return ecode.SaleTypeSetErr
+		}
+	}
+
+	return ecode.OK
+}

--
Gitblit v1.8.0