From 309001358628a493208b6130c3b6088e5749a8d7 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期一, 31 七月 2023 14:32:06 +0800
Subject: [PATCH] add

---
 api/v1/index.go         |  144 +++++++++--------
 service/client.go       |   23 ++
 pkg/ecode/code.go       |    5 
 docs/swagger.yaml       |   28 +++
 router/assign.go        |   16 ++
 docs/docs.go            |   44 +++++
 docs/swagger.json       |   44 +++++
 model/request/assign.go |    7 
 api/v1/assign.go        |   49 ++++++
 service/assign.go       |   25 +++
 service/index.go        |   25 +-
 model/user.go           |    5 
 router/index.go         |   48 +++--
 13 files changed, 357 insertions(+), 106 deletions(-)

diff --git a/api/v1/assign.go b/api/v1/assign.go
new file mode 100644
index 0000000..4889095
--- /dev/null
+++ b/api/v1/assign.go
@@ -0,0 +1,49 @@
+package v1
+
+import (
+	"aps_crm/model/request"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"github.com/gin-gonic/gin"
+)
+
+type AssignApi struct{}
+
+// Assign
+//
+//	@Tags		Assign
+//	@Summary	瀹℃牳
+//	@Produce	application/json
+//	@Param		object	body		request.Assign true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/assign/assign [post]
+func (au *AssignApi) Assign(c *gin.Context) {
+	var params request.Assign
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	if params.MemberId == 0 {
+		ctx.Fail(ecode.AssignWrongMemberId)
+		return
+	}
+
+	if params.Id == 0 {
+		ctx.Fail(ecode.AssignWrongId)
+		return
+	}
+
+	if params.Type == "" {
+		ctx.Fail(ecode.AssignWrongModelType)
+		return
+	}
+
+	errCode := assignService.Assign(params.MemberId, params.Id, params.Type)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
diff --git a/api/v1/index.go b/api/v1/index.go
index d7f869b..00c8f70 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -5,17 +5,17 @@
 )
 
 type Group struct {
-    CurrencyApi
-    QuotationStatusApi
-    RepositoryApi
-    SalesReturnStatusApi
-    AccountIdApi
-    IsInvoiceApi
-    RefundMethodApi
-    ServiceContractTypeApi
-    ServiceContractStatusApi
-    OrderTypeApi
-    ReportSourceApi
+	CurrencyApi
+	QuotationStatusApi
+	RepositoryApi
+	SalesReturnStatusApi
+	AccountIdApi
+	IsInvoiceApi
+	RefundMethodApi
+	ServiceContractTypeApi
+	ServiceContractStatusApi
+	OrderTypeApi
+	ReportSourceApi
 	IsVisitApi
 	SolveRateApi
 	TimelyRateApi
@@ -64,68 +64,70 @@
 	DepartmentApi
 	VettingApi
 	SatisfactionApi
+	AssignApi
 }
 
 var ApiGroup = new(Group)
 
 var (
-	userService                 = service.ServiceGroup.UserService
-	jwtService                  = service.ServiceGroup.JwtService
-	countryService              = service.ServiceGroup.CountryService
-	provinceService             = service.ServiceGroup.ProvinceService
-	cityService                 = service.ServiceGroup.CityService
-	regionService               = service.ServiceGroup.RegionService
-	contactService              = service.ServiceGroup.ContactService
-	clientService               = service.ServiceGroup.ClientService
-	clientStatusService         = service.ServiceGroup.ClientStatusService
-	clientTypeService           = service.ServiceGroup.ClientTypeService
-	clientOriginService         = service.ServiceGroup.ClientOriginService
-	clientLevelService          = service.ServiceGroup.ClientLevelService
-	industryService             = service.ServiceGroup.IndustryService
-	enterpriseNatureService     = service.ServiceGroup.EnterpriseNatureService
-	registeredCapitalService    = service.ServiceGroup.RegisteredCapitalService
-	enterpriseScaleService      = service.ServiceGroup.EnterpriseScaleService
-	salesLeadsService           = service.ServiceGroup.SalesLeadsService
-	salesSourcesService         = service.ServiceGroup.SalesSourcesService
-	followRecordService         = service.ServiceGroup.FollowRecordService
-	saleChanceService           = service.ServiceGroup.SaleChanceService
-	saleStageService            = service.ServiceGroup.SaleStageService
-	saleTypeService             = service.ServiceGroup.SaleTypeService
-	regularCustomersService     = service.ServiceGroup.RegularCustomersService
-	possibilityService          = service.ServiceGroup.PossibilityService
-	statusService               = service.ServiceGroup.StatusService
-	quotationService            = service.ServiceGroup.QuotationService
-	masterOrderService          = service.ServiceGroup.MasterOrderService
-	subOrderService             = service.ServiceGroup.SubOrderService
-	salesDetailsService         = service.ServiceGroup.SalesDetailsService
-	salesReturnService          = service.ServiceGroup.SalesReturnService
-	salesRefundService          = service.ServiceGroup.SalesRefundService
-	contractService             = service.ServiceGroup.ContractService
-	planService                 = service.ServiceGroup.PlanService
-	serviceContractService      = service.ServiceGroup.SContractService
-	orderManageService          = service.ServiceGroup.OrderManageService
-	serviceFollowupService      = service.ServiceGroup.FollowupService
-	customerServiceSheetService = service.ServiceGroup.CustomerServiceSheetService
-	serviceFeeManageService     = service.ServiceGroup.FeeManageService
-	casbinService               = service.ServiceGroup.CasbinService
-	authorityService            = service.ServiceGroup.AuthorityService
-	menuService                 = service.ServiceGroup.MenuService
-	allDataServer               = service.ServiceGroup.DataServer
-	departmentService           = service.ServiceGroup.DepartmentService
-	vettingService              = service.ServiceGroup.VettingService
-	satisfactionService         = service.ServiceGroup.SatisfactionService
-	timelyRateService           = service.ServiceGroup.TimelyRateService
-	solveRateService            = service.ServiceGroup.SolveRateService
-	isVisitService              = service.ServiceGroup.IsVisitService
-   reportSourceService    = service.ServiceGroup.ReportSourceService
-   orderTypeService    = service.ServiceGroup.OrderTypeService
-   serviceContractStatusService    = service.ServiceGroup.ServiceContractStatusService
-   serviceContractTypeService    = service.ServiceGroup.ServiceContractTypeService
-   refundMethodService    = service.ServiceGroup.RefundMethodService
-   isInvoiceService    = service.ServiceGroup.IsInvoiceService
-   accountIdService    = service.ServiceGroup.AccountIdService
-   salesReturnStatusService    = service.ServiceGroup.SalesReturnStatusService
-   repositoryService    = service.ServiceGroup.RepositoryService
-   quotationStatusService    = service.ServiceGroup.QuotationStatusService
-   currencyService    = service.ServiceGroup.CurrencyService
-)
\ No newline at end of file
+	userService                  = service.ServiceGroup.UserService
+	jwtService                   = service.ServiceGroup.JwtService
+	countryService               = service.ServiceGroup.CountryService
+	provinceService              = service.ServiceGroup.ProvinceService
+	cityService                  = service.ServiceGroup.CityService
+	regionService                = service.ServiceGroup.RegionService
+	contactService               = service.ServiceGroup.ContactService
+	clientService                = service.ServiceGroup.ClientService
+	clientStatusService          = service.ServiceGroup.ClientStatusService
+	clientTypeService            = service.ServiceGroup.ClientTypeService
+	clientOriginService          = service.ServiceGroup.ClientOriginService
+	clientLevelService           = service.ServiceGroup.ClientLevelService
+	industryService              = service.ServiceGroup.IndustryService
+	enterpriseNatureService      = service.ServiceGroup.EnterpriseNatureService
+	registeredCapitalService     = service.ServiceGroup.RegisteredCapitalService
+	enterpriseScaleService       = service.ServiceGroup.EnterpriseScaleService
+	salesLeadsService            = service.ServiceGroup.SalesLeadsService
+	salesSourcesService          = service.ServiceGroup.SalesSourcesService
+	followRecordService          = service.ServiceGroup.FollowRecordService
+	saleChanceService            = service.ServiceGroup.SaleChanceService
+	saleStageService             = service.ServiceGroup.SaleStageService
+	saleTypeService              = service.ServiceGroup.SaleTypeService
+	regularCustomersService      = service.ServiceGroup.RegularCustomersService
+	possibilityService           = service.ServiceGroup.PossibilityService
+	statusService                = service.ServiceGroup.StatusService
+	quotationService             = service.ServiceGroup.QuotationService
+	masterOrderService           = service.ServiceGroup.MasterOrderService
+	subOrderService              = service.ServiceGroup.SubOrderService
+	salesDetailsService          = service.ServiceGroup.SalesDetailsService
+	salesReturnService           = service.ServiceGroup.SalesReturnService
+	salesRefundService           = service.ServiceGroup.SalesRefundService
+	contractService              = service.ServiceGroup.ContractService
+	planService                  = service.ServiceGroup.PlanService
+	serviceContractService       = service.ServiceGroup.SContractService
+	orderManageService           = service.ServiceGroup.OrderManageService
+	serviceFollowupService       = service.ServiceGroup.FollowupService
+	customerServiceSheetService  = service.ServiceGroup.CustomerServiceSheetService
+	serviceFeeManageService      = service.ServiceGroup.FeeManageService
+	casbinService                = service.ServiceGroup.CasbinService
+	authorityService             = service.ServiceGroup.AuthorityService
+	menuService                  = service.ServiceGroup.MenuService
+	allDataServer                = service.ServiceGroup.DataServer
+	departmentService            = service.ServiceGroup.DepartmentService
+	vettingService               = service.ServiceGroup.VettingService
+	satisfactionService          = service.ServiceGroup.SatisfactionService
+	timelyRateService            = service.ServiceGroup.TimelyRateService
+	solveRateService             = service.ServiceGroup.SolveRateService
+	isVisitService               = service.ServiceGroup.IsVisitService
+	reportSourceService          = service.ServiceGroup.ReportSourceService
+	orderTypeService             = service.ServiceGroup.OrderTypeService
+	serviceContractStatusService = service.ServiceGroup.ServiceContractStatusService
+	serviceContractTypeService   = service.ServiceGroup.ServiceContractTypeService
+	refundMethodService          = service.ServiceGroup.RefundMethodService
+	isInvoiceService             = service.ServiceGroup.IsInvoiceService
+	accountIdService             = service.ServiceGroup.AccountIdService
+	salesReturnStatusService     = service.ServiceGroup.SalesReturnStatusService
+	repositoryService            = service.ServiceGroup.RepositoryService
+	quotationStatusService       = service.ServiceGroup.QuotationStatusService
+	currencyService              = service.ServiceGroup.CurrencyService
+	assignService                = service.ServiceGroup.AssignService
+)
diff --git a/docs/docs.go b/docs/docs.go
index 5793111..e705bbf 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -135,6 +135,36 @@
                 }
             }
         },
+        "/api/assign/assign": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Assign"
+                ],
+                "summary": "瀹℃牳",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.Assign"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/authority/add": {
             "post": {
                 "security": [
@@ -9754,6 +9784,20 @@
                 }
             }
         },
+        "request.Assign": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "member_id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
         "request.CasbinInfo": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 33a070f..4164e14 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -123,6 +123,36 @@
                 }
             }
         },
+        "/api/assign/assign": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Assign"
+                ],
+                "summary": "瀹℃牳",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.Assign"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/authority/add": {
             "post": {
                 "security": [
@@ -9742,6 +9772,20 @@
                 }
             }
         },
+        "request.Assign": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "member_id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
         "request.CasbinInfo": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 38e6140..15c3026 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -1801,6 +1801,15 @@
     - vettingId
     - vettingType
     type: object
+  request.Assign:
+    properties:
+      id:
+        type: integer
+      member_id:
+        type: integer
+      type:
+        type: string
+    type: object
   request.CasbinInfo:
     properties:
       method:
@@ -4141,6 +4150,25 @@
       summary: 鏇存柊璐︽埛
       tags:
       - AccountId
+  /api/assign/assign:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.Assign'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 瀹℃牳
+      tags:
+      - Assign
   /api/authority/add:
     post:
       consumes:
diff --git a/model/request/assign.go b/model/request/assign.go
new file mode 100644
index 0000000..d0b8413
--- /dev/null
+++ b/model/request/assign.go
@@ -0,0 +1,7 @@
+package request
+
+type Assign struct {
+	MemberId int    `json:"member_id"`
+	Type     string `json:"type"`
+	Id       int    `json:"id"`
+}
diff --git a/model/user.go b/model/user.go
index f0d074d..69fc4fa 100644
--- a/model/user.go
+++ b/model/user.go
@@ -70,6 +70,11 @@
 	return slf
 }
 
+func (slf *UserSearch) SetUserId(userId int) *UserSearch {
+	slf.ID = userId
+	return slf
+}
+
 func (slf *UserSearch) SetUserName(username string) *UserSearch {
 	slf.Username = username
 	return slf
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index d859d9d..0837cb4 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -383,4 +383,9 @@
 	CurrencySetErr    = 5600004 // 璁剧疆甯佺澶辫触
 	CurrencyUpdateErr = 5600005 // 鏇存柊甯佺澶辫触
 
+	AssignErr            = 5700001 // 鍒嗛厤澶辫触
+	AssignWrongMemberId  = 5700002 // 鍒嗛厤澶辫触锛屽垎閰嶄汉涓虹┖
+	AssignWrongId        = 5700003 // 鍒嗛厤澶辫触锛屽垎閰嶅璞′负绌�
+	AssignWrongModelType = 5700004 // 鍒嗛厤澶辫触锛屽垎閰嶅璞$被鍨嬩负绌�
+
 )
diff --git a/router/assign.go b/router/assign.go
new file mode 100644
index 0000000..ea395ce
--- /dev/null
+++ b/router/assign.go
@@ -0,0 +1,16 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type AssignRouter struct{}
+
+func (a *AssignRouter) InitAssignRouter(router *gin.RouterGroup) {
+	assignRouter := router.Group("assign")
+	assignApi := v1.ApiGroup.AssignApi
+	{
+		assignRouter.POST("assign", assignApi.Assign) // 鍒嗛厤
+	}
+}
diff --git a/router/index.go b/router/index.go
index 43f890a..a05ce9f 100644
--- a/router/index.go
+++ b/router/index.go
@@ -11,17 +11,17 @@
 )
 
 type Group struct {
-    CurrencyRouter
-    QuotationStatusRouter
-    RepositoryRouter
-    SalesReturnStatusRouter
-    AccountIdRouter
-    IsInvoiceRouter
-    RefundMethodRouter
-    ServiceContractTypeRouter
-    ServiceContractStatusRouter
-    OrderTypeRouter
-    ReportSourceRouter
+	CurrencyRouter
+	QuotationStatusRouter
+	RepositoryRouter
+	SalesReturnStatusRouter
+	AccountIdRouter
+	IsInvoiceRouter
+	RefundMethodRouter
+	ServiceContractTypeRouter
+	ServiceContractStatusRouter
+	OrderTypeRouter
+	ReportSourceRouter
 	IsVisitRouter
 	SolveRateRouter
 	TimelyRateRouter
@@ -69,6 +69,7 @@
 	DataRouter
 	DepartmentRouter
 	SatisfactionRouter
+	AssignRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -146,17 +147,18 @@
 		routerGroup.InitTimelyRateRouter(PrivateGroup)
 		routerGroup.InitSolveRateRouter(PrivateGroup)
 		routerGroup.InitIsVisitRouter(PrivateGroup)
-        routerGroup.InitReportSourceRouter(PrivateGroup)
-        routerGroup.InitOrderTypeRouter(PrivateGroup)
-        routerGroup.InitServiceContractStatusRouter(PrivateGroup)
-        routerGroup.InitServiceContractTypeRouter(PrivateGroup)
-        routerGroup.InitRefundMethodRouter(PrivateGroup)
-        routerGroup.InitIsInvoiceRouter(PrivateGroup)
-        routerGroup.InitAccountIdRouter(PrivateGroup)
-        routerGroup.InitSalesReturnStatusRouter(PrivateGroup)
-        routerGroup.InitRepositoryRouter(PrivateGroup)
-        routerGroup.InitQuotationStatusRouter(PrivateGroup)
-        routerGroup.InitCurrencyRouter(PrivateGroup)
+		routerGroup.InitReportSourceRouter(PrivateGroup)
+		routerGroup.InitOrderTypeRouter(PrivateGroup)
+		routerGroup.InitServiceContractStatusRouter(PrivateGroup)
+		routerGroup.InitServiceContractTypeRouter(PrivateGroup)
+		routerGroup.InitRefundMethodRouter(PrivateGroup)
+		routerGroup.InitIsInvoiceRouter(PrivateGroup)
+		routerGroup.InitAccountIdRouter(PrivateGroup)
+		routerGroup.InitSalesReturnStatusRouter(PrivateGroup)
+		routerGroup.InitRepositoryRouter(PrivateGroup)
+		routerGroup.InitQuotationStatusRouter(PrivateGroup)
+		routerGroup.InitCurrencyRouter(PrivateGroup)
+		routerGroup.InitAssignRouter(PrivateGroup)
 	}
 	return Router
-}
\ No newline at end of file
+}
diff --git a/service/assign.go b/service/assign.go
new file mode 100644
index 0000000..28d7a05
--- /dev/null
+++ b/service/assign.go
@@ -0,0 +1,25 @@
+package service
+
+import "aps_crm/pkg/ecode"
+
+type AssignService struct{}
+
+type Assign interface {
+	Assign(id int) error
+}
+
+func (AssignService) Assign(memberId, id int, modelType string) int {
+	var errCode int
+	switch modelType {
+	case "client":
+		errCode = ClientService{}.Assign(id, memberId)
+	default:
+		errCode = ecode.AssignWrongModelType
+	}
+
+	if errCode != ecode.OK {
+		return errCode
+	}
+
+	return ecode.OK
+}
diff --git a/service/client.go b/service/client.go
index 9c2a431..86ab918 100644
--- a/service/client.go
+++ b/service/client.go
@@ -64,3 +64,26 @@
 	}
 	return contacts, total, ecode.OK
 }
+
+func (ClientService) Assign(id, memberId int) int {
+	// check member exist
+	_, err := model.NewUserSearch(nil).SetUserId(memberId).First()
+	if err != nil {
+		return ecode.UserNotExist
+	}
+	// check client exist
+	errCode := CheckClientExist(id)
+	if errCode != ecode.OK {
+		return errCode
+	}
+
+	// assign client
+	err = model.NewClientSearch(nil).SetId(id).UpdateByMap(map[string]interface{}{
+		"member_id": memberId,
+	})
+	if err != nil {
+		return ecode.AssignErr
+	}
+
+	return ecode.OK
+}
diff --git a/service/index.go b/service/index.go
index e48386e..ae1c0c6 100644
--- a/service/index.go
+++ b/service/index.go
@@ -49,17 +49,18 @@
 	TimelyRateService
 	SolveRateService
 	IsVisitService
-    ReportSourceService
-    OrderTypeService
-    ServiceContractStatusService
-    ServiceContractTypeService
-    RefundMethodService
-    IsInvoiceService
-    AccountIdService
-    SalesReturnStatusService
-    RepositoryService
-    QuotationStatusService
-    CurrencyService
+	ReportSourceService
+	OrderTypeService
+	ServiceContractStatusService
+	ServiceContractTypeService
+	RefundMethodService
+	IsInvoiceService
+	AccountIdService
+	SalesReturnStatusService
+	RepositoryService
+	QuotationStatusService
+	CurrencyService
+	AssignService
 }
 
-var ServiceGroup = new(Group)
\ No newline at end of file
+var ServiceGroup = new(Group)

--
Gitblit v1.8.0