From 1ba1ecb2760ff21fc66db7a91fa099db489dd385 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期三, 02 八月 2023 17:10:28 +0800
Subject: [PATCH] add
---
api/v1/client.go | 2
service/client.go | 157 ++++++++--------
model/client.go | 310 +++++++++++++++++----------------
model/request/client.go | 2
docs/swagger.yaml | 5
docs/docs.go | 7
docs/swagger.json | 7
7 files changed, 252 insertions(+), 238 deletions(-)
diff --git a/api/v1/client.go b/api/v1/client.go
index 3be607b..278374b 100644
--- a/api/v1/client.go
+++ b/api/v1/client.go
@@ -191,7 +191,7 @@
return
}
- clients, total, errCode := clientService.GetClientList(params.Page, params.PageSize, params.Keyword)
+ clients, total, errCode := clientService.GetClientList(params.Page, params.PageSize, params.SearchMap)
if errCode != ecode.OK {
ctx.Fail(errCode)
return
diff --git a/docs/docs.go b/docs/docs.go
index ba26073..20ef8a0 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -10000,9 +10000,6 @@
"request.GetClientList": {
"type": "object",
"properties": {
- "keyword": {
- "type": "string"
- },
"page": {
"description": "椤电爜",
"type": "integer"
@@ -10010,6 +10007,10 @@
"pageSize": {
"description": "姣忛〉澶у皬",
"type": "integer"
+ },
+ "search_map": {
+ "type": "object",
+ "additionalProperties": true
}
}
},
diff --git a/docs/swagger.json b/docs/swagger.json
index 2da771e..76b7c6e 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -9988,9 +9988,6 @@
"request.GetClientList": {
"type": "object",
"properties": {
- "keyword": {
- "type": "string"
- },
"page": {
"description": "椤电爜",
"type": "integer"
@@ -9998,6 +9995,10 @@
"pageSize": {
"description": "姣忛〉澶у皬",
"type": "integer"
+ },
+ "search_map": {
+ "type": "object",
+ "additionalProperties": true
}
}
},
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 26faa50..5283f1d 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -1950,14 +1950,15 @@
type: object
request.GetClientList:
properties:
- keyword:
- type: string
page:
description: 椤电爜
type: integer
pageSize:
description: 姣忛〉澶у皬
type: integer
+ search_map:
+ additionalProperties: true
+ type: object
type: object
request.GetContactList:
properties:
diff --git a/model/client.go b/model/client.go
index a1c5cf2..a026006 100644
--- a/model/client.go
+++ b/model/client.go
@@ -1,149 +1,161 @@
-package model
-
-import (
- "aps_crm/pkg/mysqlx"
- "gorm.io/gorm"
- "time"
-)
-
-type (
- Client struct {
- Id int `json:"id" gorm:"column:id;primaryKey;autoIncrement;not null"`
- Name string `json:"name" gorm:"column:name;unique;type:varchar(255);comment:瀹㈡埛鍚嶇О"`
- Number string `json:"number" gorm:"column:number;type:varchar(255);comment:瀹㈡埛缂栧彿"`
- ClientStatusId int `json:"client_status_id" gorm:"column:client_status_id;type:int(11);comment:瀹㈡埛鐘舵�両D"`
- ClientStatus ClientStatus `json:"client_status" gorm:"foreignKey:ClientStatusId"`
- ClientTypeId int `json:"client_type_id" gorm:"column:client_type_id;type:int(11);comment:瀹㈡埛绫诲瀷ID"`
- ClientType ClientType `json:"client_type" gorm:"foreignKey:ClientTypeId"`
- ClientOriginId int `json:"client_origin_id" gorm:"column:client_origin_id;type:int(11);comment:瀹㈡埛鏉ユ簮ID"`
- ClientOrigin ClientOrigin `json:"client_origin" gorm:"foreignKey:ClientOriginId"`
- ClientLevelId int `json:"client_level_id" gorm:"column:client_level_id;type:int(11);comment:瀹㈡埛绛夌骇ID"`
- ClientLevel ClientLevel `json:"client_level" gorm:"foreignKey:ClientLevelId"`
- Contacts []Contact `json:"contacts" gorm:"foreignKey:ClientId"`
- MemberId int `json:"member_id" gorm:"column:member_id;type:int(11);comment:閿�鍞礋璐d汉ID"`
- ServiceMemberId int `json:"service_member_id" gorm:"column:service_member_id;type:int(11);comment:鏈嶅姟璐熻矗浜篒D"`
- DetailAddress string `json:"detail_address" gorm:"column:detail_address;type:varchar(255);comment:璇︾粏鍦板潃"`
- Remark string `json:"remark" gorm:"column:remark;type:varchar(255);comment:澶囨敞"`
- NextVisitTime time.Time `json:"next_visit_time" gorm:"column:next_visit_time;type:datetime;comment:涓嬫鍥炶鏃堕棿"`
- LatestServiceTime time.Time `json:"latest_service_time" gorm:"column:latest_service_time;type:datetime;comment:鏈�鏅氭湇鍔℃椂闂�"`
- FollowRecord []FollowRecord `json:"follow_record" gorm:"foreignKey:ClientId"`
- Address
- Business
- gorm.Model `json:"-"`
- }
-
- ClientSearch struct {
- Client
-
- Orm *gorm.DB
- Keyword string
- OrderBy string
- PageNum int
- PageSize int
- }
-)
-
-func (Client) TableName() string {
- return "clients"
-}
-
-func NewClientSearch(db *gorm.DB) *ClientSearch {
- if db == nil {
- db = mysqlx.GetDB()
- }
-
- return &ClientSearch{
- Orm: db,
- }
-}
-
-func (slf *ClientSearch) build() *gorm.DB {
- var db = slf.Orm.Model(&Client{})
- if slf.Keyword != "" {
- db = db.Where("name LIKE ?", "%"+slf.Keyword+"%")
- }
- if slf.Id != 0 {
- db.Where("id = ?", slf.Id)
- }
- if slf.Name != "" {
- db.Where("name = ?", slf.Name)
- }
-
- return db
-}
-
-func (slf *ClientSearch) Create(record *Client) error {
- var db = slf.build()
- return db.Create(record).Error
-}
-
-func (slf *ClientSearch) Update(record *Client) error {
- var db = slf.build()
- return db.Updates(record).Error
-}
-
-func (slf *ClientSearch) Delete() error {
- var db = slf.build()
- return db.Delete(&Client{}).Error
-}
-
-func (slf *ClientSearch) SetId(id int) *ClientSearch {
- slf.Id = id
- return slf
-}
-
-func (slf *ClientSearch) SetName(name string) *ClientSearch {
- slf.Name = name
- return slf
-}
-
-func (slf *ClientSearch) SetNumber(number string) *ClientSearch {
- slf.Number = number
- return slf
-}
-
-func (slf *ClientSearch) First() (*Client, error) {
- var db = slf.build()
- var record = &Client{}
- err := db.First(record).Error
- return record, err
-}
-
-func (slf *ClientSearch) Find() ([]*Client, int64, error) {
- var db = slf.build()
- var records = make([]*Client, 0)
- var total int64
- if err := db.Count(&total).Error; err != nil {
- return records, total, err
- }
- if slf.PageNum > 0 && slf.PageSize > 0 {
- db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
- }
-
- err := db.Preload("ClientStatus").Preload("ClientType").Preload("ClientOrigin").Preload("ClientLevel").Preload("FollowRecord").Preload("EnterpriseNature").Preload("RegisteredCapital").Preload("Industry").Preload("EnterpriseScale").Preload("Contacts").Preload("Country").Preload("Province").Preload("City").Preload("Region").Find(&records).Error
- return records, total, err
-}
-
-func (slf *ClientSearch) UpdateByMap(data map[string]interface{}) error {
- var db = slf.build()
- return db.Updates(data).Error
-}
-
-func (slf *ClientSearch) SetKeyword(keyword string) *ClientSearch {
- slf.Keyword = keyword
- return slf
-}
-
-func (slf *ClientSearch) SetPage(page, size int) *ClientSearch {
- slf.PageNum, slf.PageSize = page, size
- return slf
-}
-
-func (slf *ClientSearch) SetOrder(order string) *ClientSearch {
- slf.OrderBy = order
- return slf
-}
-func (slf *ClientSearch) SetIds(ids []int) *ClientSearch {
- slf.Orm = slf.Orm.Where("id in (?)", ids)
- return slf
-}
+package model
+
+import (
+ "aps_crm/pkg/mysqlx"
+ "gorm.io/gorm"
+ "time"
+)
+
+type (
+ Client struct {
+ Id int `json:"id" gorm:"column:id;primaryKey;autoIncrement;not null"`
+ Name string `json:"name" gorm:"column:name;unique;type:varchar(255);comment:瀹㈡埛鍚嶇О"`
+ Number string `json:"number" gorm:"column:number;type:varchar(255);comment:瀹㈡埛缂栧彿"`
+ ClientStatusId int `json:"client_status_id" gorm:"column:client_status_id;type:int(11);comment:瀹㈡埛鐘舵�両D"`
+ ClientStatus ClientStatus `json:"client_status" gorm:"foreignKey:ClientStatusId"`
+ ClientTypeId int `json:"client_type_id" gorm:"column:client_type_id;type:int(11);comment:瀹㈡埛绫诲瀷ID"`
+ ClientType ClientType `json:"client_type" gorm:"foreignKey:ClientTypeId"`
+ ClientOriginId int `json:"client_origin_id" gorm:"column:client_origin_id;type:int(11);comment:瀹㈡埛鏉ユ簮ID"`
+ ClientOrigin ClientOrigin `json:"client_origin" gorm:"foreignKey:ClientOriginId"`
+ ClientLevelId int `json:"client_level_id" gorm:"column:client_level_id;type:int(11);comment:瀹㈡埛绛夌骇ID"`
+ ClientLevel ClientLevel `json:"client_level" gorm:"foreignKey:ClientLevelId"`
+ Contacts []Contact `json:"contacts" gorm:"foreignKey:ClientId"`
+ MemberId int `json:"member_id" gorm:"column:member_id;type:int(11);comment:閿�鍞礋璐d汉ID"`
+ ServiceMemberId int `json:"service_member_id" gorm:"column:service_member_id;type:int(11);comment:鏈嶅姟璐熻矗浜篒D"`
+ DetailAddress string `json:"detail_address" gorm:"column:detail_address;type:varchar(255);comment:璇︾粏鍦板潃"`
+ Remark string `json:"remark" gorm:"column:remark;type:varchar(255);comment:澶囨敞"`
+ NextVisitTime time.Time `json:"next_visit_time" gorm:"column:next_visit_time;type:datetime;comment:涓嬫鍥炶鏃堕棿"`
+ LatestServiceTime time.Time `json:"latest_service_time" gorm:"column:latest_service_time;type:datetime;comment:鏈�鏅氭湇鍔℃椂闂�"`
+ FollowRecord []FollowRecord `json:"follow_record" gorm:"foreignKey:ClientId"`
+ Address
+ Business
+ gorm.Model `json:"-"`
+ }
+
+ ClientSearch struct {
+ Client
+
+ Orm *gorm.DB
+ SearchMap map[string]interface{}
+ OrderBy string
+ PageNum int
+ PageSize int
+ }
+)
+
+func (Client) TableName() string {
+ return "clients"
+}
+
+func NewClientSearch(db *gorm.DB) *ClientSearch {
+ if db == nil {
+ db = mysqlx.GetDB()
+ }
+
+ return &ClientSearch{
+ Orm: db,
+ }
+}
+
+func (slf *ClientSearch) build() *gorm.DB {
+ var db = slf.Orm.Model(&Client{})
+ if slf.Id != 0 {
+ db.Where("id = ?", slf.Id)
+ }
+ if slf.Name != "" {
+ db.Where("name = ?", slf.Name)
+ }
+
+ if len(slf.SearchMap) > 0 {
+ for key, value := range slf.SearchMap {
+ switch v := value.(type) {
+ case string:
+ if key == "name" || key == "number" || key == "phone" || key == "detail_address" {
+ db = db.Where(key+" LIKE ?", "%"+v+"%")
+ }
+ case int:
+ if key == "id" || key == "client_type_id" || key == "client_status_id" {
+ db = db.Where(key+" = ?", v)
+ }
+ }
+ }
+ }
+
+ return db
+}
+
+func (slf *ClientSearch) Create(record *Client) error {
+ var db = slf.build()
+ return db.Create(record).Error
+}
+
+func (slf *ClientSearch) Update(record *Client) error {
+ var db = slf.build()
+ return db.Updates(record).Error
+}
+
+func (slf *ClientSearch) Delete() error {
+ var db = slf.build()
+ return db.Delete(&Client{}).Error
+}
+
+func (slf *ClientSearch) SetId(id int) *ClientSearch {
+ slf.Id = id
+ return slf
+}
+
+func (slf *ClientSearch) SetName(name string) *ClientSearch {
+ slf.Name = name
+ return slf
+}
+
+func (slf *ClientSearch) SetSearchMap(data map[string]interface{}) *ClientSearch {
+ slf.SearchMap = data
+ return slf
+}
+
+func (slf *ClientSearch) SetNumber(number string) *ClientSearch {
+ slf.Number = number
+ return slf
+}
+
+func (slf *ClientSearch) First() (*Client, error) {
+ var db = slf.build()
+ var record = &Client{}
+ err := db.First(record).Error
+ return record, err
+}
+
+func (slf *ClientSearch) Find() ([]*Client, int64, error) {
+ var db = slf.build()
+ var records = make([]*Client, 0)
+ var total int64
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, err
+ }
+ if slf.PageNum > 0 && slf.PageSize > 0 {
+ db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
+ }
+
+ err := db.Preload("ClientStatus").Preload("ClientType").Preload("ClientOrigin").Preload("ClientLevel").Preload("FollowRecord").Preload("EnterpriseNature").Preload("RegisteredCapital").Preload("Industry").Preload("EnterpriseScale").Preload("Contacts").Preload("Country").Preload("Province").Preload("City").Preload("Region").Find(&records).Error
+ return records, total, err
+}
+
+func (slf *ClientSearch) UpdateByMap(data map[string]interface{}) error {
+ var db = slf.build()
+ return db.Updates(data).Error
+}
+
+func (slf *ClientSearch) SetPage(page, size int) *ClientSearch {
+ slf.PageNum, slf.PageSize = page, size
+ return slf
+}
+
+func (slf *ClientSearch) SetOrder(order string) *ClientSearch {
+ slf.OrderBy = order
+ return slf
+}
+func (slf *ClientSearch) SetIds(ids []int) *ClientSearch {
+ slf.Orm = slf.Orm.Where("id in (?)", ids)
+ return slf
+}
diff --git a/model/request/client.go b/model/request/client.go
index 527f503..7ebbf6c 100644
--- a/model/request/client.go
+++ b/model/request/client.go
@@ -29,7 +29,7 @@
type GetClientList struct {
PageInfo
- Keyword string `json:"keyword"`
+ SearchMap map[string]interface{} `json:"search_map"`
}
type DeleteClient struct {
diff --git a/service/client.go b/service/client.go
index ada1710..9eae140 100644
--- a/service/client.go
+++ b/service/client.go
@@ -1,79 +1,78 @@
-package service
-
-import (
- "aps_crm/model"
- "aps_crm/pkg/ecode"
-)
-
-type ClientService struct{}
-
-func (ClientService) AddClient(client *model.Client) int {
- err := model.NewClientSearch(nil).Create(client)
- if err != nil {
- return ecode.ClientExist
- }
- return ecode.OK
-}
-
-
-// CheckClientExist check client exist
-func CheckClientExist(id int) int {
- _, err := model.NewClientSearch(nil).SetId(id).First()
- if err != nil {
- return ecode.ClientNotExist
- }
-
- return ecode.OK
-}
-
-func (ClientService) UpdateClient(client *model.Client) int {
- // check client exist
- errCode := CheckClientExist(client.Id)
- if errCode != ecode.OK {
- return errCode
- }
-
- // update client
- err := model.NewClientSearch(nil).SetId(client.Id).Update(client)
- if err != nil {
- return ecode.ClientUpdateErr
- }
-
- return ecode.OK
-}
-
-func (ClientService) GetClientList(page, pageSize int, keyword string) ([]*model.Client, int64, int) {
- // get contact list
- contacts, total, err := model.NewClientSearch(nil).SetKeyword(keyword).SetPage(page, pageSize).Find()
- if err != nil {
- return nil, 0, ecode.ClientListErr
- }
- return contacts, total, ecode.OK
-}
-
-func (ClientService) Assign(id, memberId int) int {
- // 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
-}
-
-func (ClientService) DeleteClient (ids []int) int {
- // delete client
- err := model.NewClientSearch(nil).SetIds(ids).Delete()
- if err != nil {
- return ecode.ClientDeleteErr
- }
- return ecode.OK
-}
\ No newline at end of file
+package service
+
+import (
+ "aps_crm/model"
+ "aps_crm/pkg/ecode"
+)
+
+type ClientService struct{}
+
+func (ClientService) AddClient(client *model.Client) int {
+ err := model.NewClientSearch(nil).Create(client)
+ if err != nil {
+ return ecode.ClientExist
+ }
+ return ecode.OK
+}
+
+// CheckClientExist check client exist
+func CheckClientExist(id int) int {
+ _, err := model.NewClientSearch(nil).SetId(id).First()
+ if err != nil {
+ return ecode.ClientNotExist
+ }
+
+ return ecode.OK
+}
+
+func (ClientService) UpdateClient(client *model.Client) int {
+ // check client exist
+ errCode := CheckClientExist(client.Id)
+ if errCode != ecode.OK {
+ return errCode
+ }
+
+ // update client
+ err := model.NewClientSearch(nil).SetId(client.Id).Update(client)
+ if err != nil {
+ return ecode.ClientUpdateErr
+ }
+
+ return ecode.OK
+}
+
+func (ClientService) GetClientList(page, pageSize int, data map[string]interface{}) ([]*model.Client, int64, int) {
+ // get contact list
+ contacts, total, err := model.NewClientSearch(nil).SetPage(page, pageSize).SetSearchMap(data).Find()
+ if err != nil {
+ return nil, 0, ecode.ClientListErr
+ }
+ return contacts, total, ecode.OK
+}
+
+func (ClientService) Assign(id, memberId int) int {
+ // 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
+}
+
+func (ClientService) DeleteClient(ids []int) int {
+ // delete client
+ err := model.NewClientSearch(nil).SetIds(ids).Delete()
+ if err != nil {
+ return ecode.ClientDeleteErr
+ }
+ return ecode.OK
+}
--
Gitblit v1.8.0