From c229f8922a4142a8ae2ac161bb6c121b9c9de672 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期三, 09 八月 2023 19:35:49 +0800
Subject: [PATCH] fix

---
 service/contact.go       |  278 +++++++-------
 api/v1/contact.go        |  344 +++++++++---------
 docs/swagger.yaml        |    8 
 model/contact.go         |  366 ++++++++++---------
 docs/docs.go             |    8 
 docs/swagger.json        |    8 
 model/request/contact.go |   74 +-
 7 files changed, 555 insertions(+), 531 deletions(-)

diff --git a/api/v1/contact.go b/api/v1/contact.go
index 5530eed..7daace8 100644
--- a/api/v1/contact.go
+++ b/api/v1/contact.go
@@ -1,172 +1,172 @@
-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"
-)
-
-type ContactApi struct{}
-
-// Add
-//
-//	@Tags		Contact
-//	@Summary	娣诲姞鑱旂郴浜�
-//	@Produce	application/json
-//	@Param		object	body		request.AddContact	true	"鏌ヨ鍙傛暟"
-//	@Success	200		{object}	contextx.Response{}
-//	@Router		/api/contact/add [post]
-func (con *ContactApi) Add(c *gin.Context) {
-	var params request.AddContact
-	ctx, ok := contextx.NewContext(c, &params)
-	if !ok {
-		return
-	}
-
-	errCode, contact := checkContactParams(params.Contact)
-	if errCode != ecode.OK {
-		ctx.Fail(errCode)
-		return
-	}
-
-	errCode = contactService.AddContact(&contact)
-	if errCode != ecode.OK {
-		ctx.Fail(errCode)
-		return
-	}
-
-	ctx.Ok()
-}
-
-// Delete
-//
-//	@Tags		Contact
-//	@Summary	鍒犻櫎鑱旂郴浜�
-//	@Produce	application/json
-//	@Param		object	body		request.DeleteContact true	"鏌ヨ鍙傛暟"
-//	@Success	200	{object}	contextx.Response{}
-//	@Router		/api/contact/delete [delete]
-func (con *ContactApi) Delete(c *gin.Context) {
-	var params request.DeleteContact
-	ctx, ok := contextx.NewContext(c, &params)
-	if !ok {
-		return
-	}
-
-	errCode := contactService.DeleteContact(params.Ids)
-	if errCode != ecode.OK {
-		ctx.Fail(errCode)
-		return
-	}
-
-	ctx.Ok()
-}
-
-// Update
-//
-//	@Tags		Contact
-//	@Summary	鏇存柊鑱旂郴浜�
-//	@Produce	application/json
-//	@Param		object	body		request.UpdateContact	true	"鏌ヨ鍙傛暟"
-//	@Success	200		{object}	contextx.Response{}
-//	@Router		/api/contact/update [put]
-func (con *ContactApi) Update(c *gin.Context) {
-	var params request.UpdateContact
-	ctx, ok := contextx.NewContext(c, &params)
-	if !ok {
-		return
-	}
-
-	// check id
-	if params.Id == 0 {
-		ctx.Fail(ecode.InvalidParams)
-		return
-	}
-
-	errCode, contact := checkContactParams(params.Contact)
-	if errCode != ecode.OK {
-		ctx.Fail(errCode)
-		return
-	}
-
-	contact.Id = params.Id
-
-	errCode = contactService.UpdateContact(&contact)
-	if errCode != ecode.OK {
-		ctx.Fail(errCode)
-		return
-	}
-
-	ctx.Ok()
-}
-
-func checkContactParams(params request.Contact) (int, model.Contact) {
-	var contact model.Contact
-	// name not empty
-	//if params.Name == "" {
-	//	return ecode.InvalidParams, contact
-	//}
-	contact.Name = params.Name
-
-	contact.Phone = params.Phone
-	contact.Email = params.Email
-
-	// check member id not -1
-	//if params.MemberId == 0 {
-	//	return ecode.InvalidParams, contact
-	//}
-	contact.MemberId = params.MemberId
-
-	contact.ProvinceId = params.ProvinceId
-	contact.CityId = params.CityId
-	contact.CountryId = params.CountryId
-	contact.RegionId = params.RegionId
-	contact.Position = params.Position
-	contact.ClientId = params.ClientId
-	contact.Desc = params.Desc
-
-	// check number not empty
-	//if params.Number == "" {
-	//	return ecode.InvalidParams, contact
-	//}
-	contact.Number = params.Number
-
-	t, err := checkTimeFormat(params.Birthday)
-	if err != nil {
-		return ecode.InvalidParams, contact
-	}
-	contact.Birthday = t
-	contact.Wechat = params.Wechat
-	contact.IsFirst = params.IsFirst
-	return ecode.OK, contact
-}
-
-// List
-//
-//	@Tags		Contact
-//	@Summary	鑱旂郴浜哄垪琛�
-//	@Produce	application/json
-//	@Param		object	body		request.GetContactList	true	"鍙傛暟"
-//	@Success	200		{object}	contextx.Response{data=response.ContactResponse}
-//	@Router		/api/contact/list [post]
-func (con *ContactApi) List(c *gin.Context) {
-	var params request.GetContactList
-	ctx, ok := contextx.NewContext(c, &params)
-	if !ok {
-		return
-	}
-
-	contacts, total, errCode := contactService.GetContactList(params.Page, params.PageSize, params.Keyword)
-	if errCode != ecode.OK {
-		ctx.Fail(errCode)
-		return
-	}
-
-	ctx.OkWithDetailed(response.ContactResponse{
-		List:  contacts,
-		Count: int(total),
-	})
-}
+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"
+)
+
+type ContactApi struct{}
+
+// Add
+//
+//	@Tags		Contact
+//	@Summary	娣诲姞鑱旂郴浜�
+//	@Produce	application/json
+//	@Param		object	body		request.AddContact	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/contact/add [post]
+func (con *ContactApi) Add(c *gin.Context) {
+	var params request.AddContact
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode, contact := checkContactParams(params.Contact)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	errCode = contactService.AddContact(&contact)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+//
+//	@Tags		Contact
+//	@Summary	鍒犻櫎鑱旂郴浜�
+//	@Produce	application/json
+//	@Param		object	body		request.DeleteContact true	"鏌ヨ鍙傛暟"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/contact/delete [delete]
+func (con *ContactApi) Delete(c *gin.Context) {
+	var params request.DeleteContact
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := contactService.DeleteContact(params.Ids)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+//	@Tags		Contact
+//	@Summary	鏇存柊鑱旂郴浜�
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateContact	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/contact/update [put]
+func (con *ContactApi) Update(c *gin.Context) {
+	var params request.UpdateContact
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	// check id
+	if params.Id == 0 {
+		ctx.Fail(ecode.InvalidParams)
+		return
+	}
+
+	errCode, contact := checkContactParams(params.Contact)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	contact.Id = params.Id
+
+	errCode = contactService.UpdateContact(&contact)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+func checkContactParams(params request.Contact) (int, model.Contact) {
+	var contact model.Contact
+	// name not empty
+	//if params.Name == "" {
+	//	return ecode.InvalidParams, contact
+	//}
+	contact.Name = params.Name
+
+	contact.Phone = params.Phone
+	contact.Email = params.Email
+
+	// check member id not -1
+	//if params.MemberId == 0 {
+	//	return ecode.InvalidParams, contact
+	//}
+	contact.MemberId = params.MemberId
+
+	contact.ProvinceId = params.ProvinceId
+	contact.CityId = params.CityId
+	contact.CountryId = params.CountryId
+	contact.RegionId = params.RegionId
+	contact.Position = params.Position
+	contact.ClientId = params.ClientId
+	contact.Desc = params.Desc
+
+	// check number not empty
+	//if params.Number == "" {
+	//	return ecode.InvalidParams, contact
+	//}
+	contact.Number = params.Number
+
+	t, err := checkTimeFormat(params.Birthday)
+	if err != nil {
+		return ecode.InvalidParams, contact
+	}
+	contact.Birthday = t
+	contact.Wechat = params.Wechat
+	contact.IsFirst = params.IsFirst
+	return ecode.OK, contact
+}
+
+// List
+//
+//	@Tags		Contact
+//	@Summary	鑱旂郴浜哄垪琛�
+//	@Produce	application/json
+//	@Param		object	body		request.GetContactList	true	"鍙傛暟"
+//	@Success	200		{object}	contextx.Response{data=response.ContactResponse}
+//	@Router		/api/contact/list [post]
+func (con *ContactApi) List(c *gin.Context) {
+	var params request.GetContactList
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	contacts, total, errCode := contactService.GetContactList(params.Page, params.PageSize, params.SearchMap)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.ContactResponse{
+		List:  contacts,
+		Count: int(total),
+	})
+}
diff --git a/docs/docs.go b/docs/docs.go
index 8e464c9..fac055d 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -13673,9 +13673,6 @@
         "request.GetContactList": {
             "type": "object",
             "properties": {
-                "keyword": {
-                    "type": "string"
-                },
                 "page": {
                     "description": "椤电爜",
                     "type": "integer"
@@ -13683,6 +13680,11 @@
                 "pageSize": {
                     "description": "姣忛〉澶у皬",
                     "type": "integer"
+                },
+                "search_map": {
+                    "description": "鎼滅储鏉′欢: map[string]interface{}{\"name\": \"xxx\"}; {\"name\": \"瀹㈡埛鍚嶇О\", \"phone\": \"鎵嬫満鍙风爜\", \"detail_address\":\"璇︾粏鍦板潃\", \"next_visit_time\":\"涓嬪洖鍥炶鏃ユ湡\", \"member_name\": \"閿�鍞礋璐d汉\", \"client_status\": \"瀹㈡埛鐘舵�乗", \"client_level\": \"閲嶈绾у埆\"}",
+                    "type": "object",
+                    "additionalProperties": true
                 }
             }
         },
diff --git a/docs/swagger.json b/docs/swagger.json
index 4be0e23..009ad54 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -13661,9 +13661,6 @@
         "request.GetContactList": {
             "type": "object",
             "properties": {
-                "keyword": {
-                    "type": "string"
-                },
                 "page": {
                     "description": "椤电爜",
                     "type": "integer"
@@ -13671,6 +13668,11 @@
                 "pageSize": {
                     "description": "姣忛〉澶у皬",
                     "type": "integer"
+                },
+                "search_map": {
+                    "description": "鎼滅储鏉′欢: map[string]interface{}{\"name\": \"xxx\"}; {\"name\": \"瀹㈡埛鍚嶇О\", \"phone\": \"鎵嬫満鍙风爜\", \"detail_address\":\"璇︾粏鍦板潃\", \"next_visit_time\":\"涓嬪洖鍥炶鏃ユ湡\", \"member_name\": \"閿�鍞礋璐d汉\", \"client_status\": \"瀹㈡埛鐘舵�乗", \"client_level\": \"閲嶈绾у埆\"}",
+                    "type": "object",
+                    "additionalProperties": true
                 }
             }
         },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 4b9f789..53bcd8b 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -2842,14 +2842,18 @@
     type: object
   request.GetContactList:
     properties:
-      keyword:
-        type: string
       page:
         description: 椤电爜
         type: integer
       pageSize:
         description: 姣忛〉澶у皬
         type: integer
+      search_map:
+        additionalProperties: true
+        description: '鎼滅储鏉′欢: map[string]interface{}{"name": "xxx"}; {"name": "瀹㈡埛鍚嶇О",
+          "phone": "鎵嬫満鍙风爜", "detail_address":"璇︾粏鍦板潃", "next_visit_time":"涓嬪洖鍥炶鏃ユ湡", "member_name":
+          "閿�鍞礋璐d汉", "client_status": "瀹㈡埛鐘舵��", "client_level": "閲嶈绾у埆"}'
+        type: object
     type: object
   request.GetContractList:
     properties:
diff --git a/model/contact.go b/model/contact.go
index a65213b..43d899a 100644
--- a/model/contact.go
+++ b/model/contact.go
@@ -1,175 +1,191 @@
-package model
-
-import (
-	"aps_crm/pkg/mysqlx"
-	"gorm.io/gorm"
-	"time"
-)
-
-type (
-	Contact struct {
-		Id       int       `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		Name     string    `json:"name" gorm:"column:name;type:varchar(255);comment:鑱旂郴浜哄鍚�"`
-		Number   string    `json:"number" gorm:"column:number;type:varchar(255);comment:鑱旂郴浜虹紪鍙�"`
-		ClientId int       `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛ID"`
-		Position string    `json:"position" gorm:"column:position;type:varchar(255);comment:鑱屼綅"`
-		Phone    string    `json:"phone" gorm:"column:phone;type:varchar(255);comment:鐢佃瘽"`
-		MemberId int       `json:"member_id" gorm:"column:member_id;type:int(11);comment:璐熻矗浜篒D"`
-		IsFirst  bool      `json:"is_first" gorm:"column:is_first;type:tinyint(1);comment:鏄惁棣栬鑱旂郴浜�"`
-		Wechat   string    `json:"wechat" gorm:"column:wechat;type:varchar(255);comment:寰俊"`
-		Birthday time.Time `json:"birthday" gorm:"column:birthday;type:datetime;comment:鐢熸棩"`
-		Email    string    `json:"email" gorm:"column:email;type:varchar(255);comment:閭"`
-		Desc     string    `json:"desc" gorm:"column:desc;type:varchar(255);comment:澶囨敞"`
-		Address
-		gorm.Model `json:"-"`
-	}
-
-	ContactSearch struct {
-		Contact
-
-		Orm      *gorm.DB
-		Keyword  string
-		OrderBy  string
-		PageNum  int
-		PageSize int
-	}
-
-	ContactDetail struct {
-		Contact
-		Client       Client
-		FollowRecord []FollowRecord `gorm:"foreignKey:ContactId"`
-	}
-)
-
-func (Contact) TableName() string {
-	return "contacts"
-}
-
-func NewContactSearch(db *gorm.DB) *ContactSearch {
-	if db == nil {
-		db = mysqlx.GetDB()
-	}
-	return &ContactSearch{
-		Orm: db,
-	}
-}
-
-func (slf *ContactSearch) build() *gorm.DB {
-	var db = slf.Orm.Model(&Contact{})
-	if slf.Keyword != "" {
-		db = db.Where("name LIKE ?", "%"+slf.Keyword+"%")
-	}
-	if slf.Id != 0 {
-		db = db.Where("id = ?", slf.Id)
-	}
-	if slf.Name != "" {
-		db = db.Where("name = ?", slf.Name)
-	}
-
-	if slf.ClientId != 0 {
-		db = db.Where("client_id = ?", slf.ClientId)
-	}
-
-	return db
-}
-
-func (slf *ContactSearch) Create(record *Contact) error {
-	var db = slf.build()
-	return db.Create(record).Error
-}
-
-func (slf *ContactSearch) Update(record *Contact) error {
-	var db = slf.build()
-	m := map[string]interface{}{
-		"name":        record.Name,
-		"number":      record.Number,
-		"client_id":   record.ClientId,
-		"position":    record.Position,
-		"phone":       record.Phone,
-		"member_id":   record.MemberId,
-		"is_first":    record.IsFirst,
-		"wechat":      record.Wechat,
-		"birthday":    record.Birthday,
-		"email":       record.Email,
-		"desc":        record.Desc,
-		"country_id":  record.CountryId,
-		"province_id": record.ProvinceId,
-		"city_id":     record.CityId,
-		"region_id":   record.RegionId,
-	}
-	return db.Updates(m).Error
-}
-
-func (slf *ContactSearch) Delete() error {
-	var db = slf.build()
-	return db.Delete(&Contact{}).Error
-}
-
-func (slf *ContactSearch) Find() (*Contact, error) {
-	var db = slf.build()
-	var record = new(Contact)
-	err := db.First(record).Error
-	return record, err
-}
-
-func (slf *ContactSearch) FindAll() ([]*ContactDetail, int64, error) {
-	var db = slf.build()
-	var records = make([]*ContactDetail, 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("FollowRecord").Preload("Client").Preload("Country").Preload("Province").Preload("City").Preload("Region").Find(&records).Error
-	return records, total, err
-}
-
-func (slf *ContactSearch) SetId(id int) *ContactSearch {
-	slf.Id = id
-	return slf
-}
-
-func (slf *ContactSearch) SetName(name string) *ContactSearch {
-	slf.Name = name
-	return slf
-}
-
-func (slf *ContactSearch) First() (*Contact, error) {
-	var db = slf.build()
-	var record = new(Contact)
-	err := db.First(record).Error
-	return record, err
-}
-
-func (slf *ContactSearch) SetClientId(clientId int) *ContactSearch {
-	slf.ClientId = clientId
-	return slf
-}
-
-func (slf *ContactSearch) UpdateByMap(data map[string]interface{}) error {
-	var db = slf.build()
-	return db.Updates(data).Error
-}
-
-func (slf *ContactSearch) SetKeyword(keyword string) *ContactSearch {
-	slf.Keyword = keyword
-	return slf
-}
-
-func (slf *ContactSearch) SetPage(page, size int) *ContactSearch {
-	slf.PageNum, slf.PageSize = page, size
-	return slf
-}
-
-func (slf *ContactSearch) SetOrder(order string) *ContactSearch {
-	slf.OrderBy = order
-	return slf
-}
-func (slf *ContactSearch) SetIds(ids []int) *ContactSearch {
-	slf.Orm = slf.Orm.Where("id in (?)", ids)
-	return slf
-}
+package model
+
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+	"time"
+)
+
+type (
+	Contact struct {
+		Id       int       `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name     string    `json:"name" gorm:"column:name;type:varchar(255);comment:鑱旂郴浜哄鍚�"`
+		Number   string    `json:"number" gorm:"column:number;type:varchar(255);comment:鑱旂郴浜虹紪鍙�"`
+		ClientId int       `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛ID"`
+		Position string    `json:"position" gorm:"column:position;type:varchar(255);comment:鑱屼綅"`
+		Phone    string    `json:"phone" gorm:"column:phone;type:varchar(255);comment:鐢佃瘽"`
+		MemberId int       `json:"member_id" gorm:"column:member_id;type:int(11);comment:璐熻矗浜篒D"`
+		IsFirst  bool      `json:"is_first" gorm:"column:is_first;type:tinyint(1);comment:鏄惁棣栬鑱旂郴浜�"`
+		Wechat   string    `json:"wechat" gorm:"column:wechat;type:varchar(255);comment:寰俊"`
+		Birthday time.Time `json:"birthday" gorm:"column:birthday;type:datetime;comment:鐢熸棩"`
+		Email    string    `json:"email" gorm:"column:email;type:varchar(255);comment:閭"`
+		Desc     string    `json:"desc" gorm:"column:desc;type:varchar(255);comment:澶囨敞"`
+		Address
+		gorm.Model `json:"-"`
+	}
+
+	ContactSearch struct {
+		Contact
+
+		Orm       *gorm.DB
+		SearchMap map[string]interface{}
+		OrderBy   string
+		PageNum   int
+		PageSize  int
+	}
+
+	ContactDetail struct {
+		Contact
+		Client       Client
+		FollowRecord []FollowRecord `gorm:"foreignKey:ContactId"`
+	}
+)
+
+func (Contact) TableName() string {
+	return "contacts"
+}
+
+func NewContactSearch(db *gorm.DB) *ContactSearch {
+	if db == nil {
+		db = mysqlx.GetDB()
+	}
+	return &ContactSearch{
+		Orm: db,
+	}
+}
+
+func (slf *ContactSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&Contact{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+	if slf.Name != "" {
+		db = db.Where("name = ?", slf.Name)
+	}
+
+	if slf.ClientId != 0 {
+		db = db.Where("client_id = ?", slf.ClientId)
+	}
+
+	if len(slf.SearchMap) > 0 {
+		for key, value := range slf.SearchMap {
+			switch v := value.(type) {
+			case string:
+				if key == "name" || key == "position" || key == "phone" || key == "Number" {
+					db = db.Where(key+" LIKE ?", "%"+v+"%")
+				}
+
+				if key == "member_name" {
+					db = db.Joins("Member").Where("Member.username LIKE ?", "%"+v+"%")
+				}
+
+				if key == "client_name" {
+					db = db.Joins("inner join clients on clients.id = contacts.client_id").Where("clients.name LIKE ?", "%"+v+"%")
+				}
+			case int:
+			}
+		}
+	}
+
+	return db
+}
+
+func (slf *ContactSearch) Create(record *Contact) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *ContactSearch) Update(record *Contact) error {
+	var db = slf.build()
+	m := map[string]interface{}{
+		"name":        record.Name,
+		"number":      record.Number,
+		"client_id":   record.ClientId,
+		"position":    record.Position,
+		"phone":       record.Phone,
+		"member_id":   record.MemberId,
+		"is_first":    record.IsFirst,
+		"wechat":      record.Wechat,
+		"birthday":    record.Birthday,
+		"email":       record.Email,
+		"desc":        record.Desc,
+		"country_id":  record.CountryId,
+		"province_id": record.ProvinceId,
+		"city_id":     record.CityId,
+		"region_id":   record.RegionId,
+	}
+	return db.Updates(m).Error
+}
+
+func (slf *ContactSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&Contact{}).Error
+}
+
+func (slf *ContactSearch) Find() (*Contact, error) {
+	var db = slf.build()
+	var record = new(Contact)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *ContactSearch) FindAll() ([]*ContactDetail, int64, error) {
+	var db = slf.build()
+	var records = make([]*ContactDetail, 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("FollowRecord").Preload("Client").Preload("Country").Preload("Province").Preload("City").Preload("Region").Find(&records).Error
+	return records, total, err
+}
+
+func (slf *ContactSearch) SetId(id int) *ContactSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *ContactSearch) SetName(name string) *ContactSearch {
+	slf.Name = name
+	return slf
+}
+
+func (slf *ContactSearch) First() (*Contact, error) {
+	var db = slf.build()
+	var record = new(Contact)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *ContactSearch) SetClientId(clientId int) *ContactSearch {
+	slf.ClientId = clientId
+	return slf
+}
+
+func (slf *ContactSearch) UpdateByMap(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
+
+func (slf *ContactSearch) SetPage(page, size int) *ContactSearch {
+	slf.PageNum, slf.PageSize = page, size
+	return slf
+}
+
+func (slf *ContactSearch) SetOrder(order string) *ContactSearch {
+	slf.OrderBy = order
+	return slf
+}
+func (slf *ContactSearch) SetIds(ids []int) *ContactSearch {
+	slf.Orm = slf.Orm.Where("id in (?)", ids)
+	return slf
+}
+
+func (slf *ContactSearch) SetSearchMap(data map[string]interface{}) *ContactSearch {
+	slf.SearchMap = data
+	return slf
+}
diff --git a/model/request/contact.go b/model/request/contact.go
index b8a2255..7503d8c 100644
--- a/model/request/contact.go
+++ b/model/request/contact.go
@@ -1,37 +1,37 @@
-package request
-
-type AddContact struct {
-	Contact
-}
-
-type Contact struct {
-	Name       string `json:"name"`                                   // 鑱旂郴浜哄悕绉�
-	Number     string `json:"number"`                                 // 鑱旂郴浜虹紪鍙�
-	MemberId   int    `json:"member_id"`                              // 鎵�灞炴垚鍛業D
-	ClientId   int    `json:"client_id"`                              // 鎵�灞炲叕鍙窱D
-	Position   string `json:"position"`                               // 鑱屼綅
-	Phone      string `json:"phone"`                                  // 鎵嬫満鍙�
-	IsFirst    bool   `json:"is_first"`                               // 鏄惁棣栬鑱旂郴浜�
-	Wechat     string `json:"wechat"`                                 // 寰俊鍙�
-	Birthday   string `json:"birthday" example:"1970-01-01 08:00:00"` // 鐢熸棩
-	Email      string `json:"email"`                                  // 閭
-	Desc       string `json:"desc"`                                   // 澶囨敞
-	CountryId  int    `json:"country_id"`                             // 鍥藉ID
-	ProvinceId int    `json:"province_id"`                            // 鐪佷唤ID
-	CityId     int    `json:"city_id"`                                // 鍩庡競ID
-	RegionId   int    `json:"region_id"`                              // 鍖哄煙ID
-}
-
-type UpdateContact struct {
-	Id int `json:"id"`
-	Contact
-}
-
-type GetContactList struct {
-	PageInfo
-	Keyword string `json:"keyword"`
-}
-
-type DeleteContact struct {
-	Ids []int `json:"ids"`
-}
+package request
+
+type AddContact struct {
+	Contact
+}
+
+type Contact struct {
+	Name       string `json:"name"`                                   // 鑱旂郴浜哄悕绉�
+	Number     string `json:"number"`                                 // 鑱旂郴浜虹紪鍙�
+	MemberId   int    `json:"member_id"`                              // 鎵�灞炴垚鍛業D
+	ClientId   int    `json:"client_id"`                              // 鎵�灞炲叕鍙窱D
+	Position   string `json:"position"`                               // 鑱屼綅
+	Phone      string `json:"phone"`                                  // 鎵嬫満鍙�
+	IsFirst    bool   `json:"is_first"`                               // 鏄惁棣栬鑱旂郴浜�
+	Wechat     string `json:"wechat"`                                 // 寰俊鍙�
+	Birthday   string `json:"birthday" example:"1970-01-01 08:00:00"` // 鐢熸棩
+	Email      string `json:"email"`                                  // 閭
+	Desc       string `json:"desc"`                                   // 澶囨敞
+	CountryId  int    `json:"country_id"`                             // 鍥藉ID
+	ProvinceId int    `json:"province_id"`                            // 鐪佷唤ID
+	CityId     int    `json:"city_id"`                                // 鍩庡競ID
+	RegionId   int    `json:"region_id"`                              // 鍖哄煙ID
+}
+
+type UpdateContact struct {
+	Id int `json:"id"`
+	Contact
+}
+
+type GetContactList struct {
+	PageInfo
+	SearchMap map[string]interface{} `json:"search_map"` // 鎼滅储鏉′欢: map[string]interface{}{"name": "xxx"}; {"name": "瀹㈡埛鍚嶇О", "phone": "鎵嬫満鍙风爜", "detail_address":"璇︾粏鍦板潃", "next_visit_time":"涓嬪洖鍥炶鏃ユ湡", "member_name": "閿�鍞礋璐d汉", "client_status": "瀹㈡埛鐘舵��", "client_level": "閲嶈绾у埆"}
+}
+
+type DeleteContact struct {
+	Ids []int `json:"ids"`
+}
diff --git a/service/contact.go b/service/contact.go
index 1455dc3..daab40e 100644
--- a/service/contact.go
+++ b/service/contact.go
@@ -1,139 +1,139 @@
-package service
-
-import (
-	"aps_crm/model"
-	"aps_crm/pkg/ecode"
-	"aps_crm/pkg/mysqlx"
-	"gorm.io/gorm"
-)
-
-type ContactService struct{}
-
-func (ContactService) AddContact(contact *model.Contact) int {
-
-	code := checkMemberAndCompany(contact)
-	if code != ecode.OK {
-		return code
-	}
-
-	tx := mysqlx.GetDB().Begin()
-	// check isFirst
-	errCode := setFirstContact(tx, contact)
-	if errCode != ecode.OK {
-		return errCode
-	}
-
-	err := model.NewContactSearch(tx).Create(contact)
-	if err != nil {
-		tx.Rollback()
-		return ecode.ContactExist
-	}
-
-	tx.Commit()
-	return ecode.OK
-}
-
-func (ContactService) UpdateContact(contact *model.Contact) int {
-	// check contact exist
-	_, err := model.NewContactSearch(nil).SetId(contact.Id).First()
-	if err != nil {
-		return ecode.ContactNotExist
-	}
-
-	code := checkMemberAndCompany(contact)
-	if code != ecode.OK {
-		return code
-	}
-
-	tx := mysqlx.GetDB().Begin()
-	code = setFirstContact(tx, contact)
-	if code != ecode.OK {
-		return code
-	}
-
-	// update contact
-	err = model.NewContactSearch(tx).SetId(contact.Id).Update(contact)
-	if err != nil {
-		tx.Rollback()
-		return ecode.ContactUpdateErr
-	}
-
-	tx.Commit()
-
-	return ecode.OK
-}
-
-func checkMemberAndCompany(contact *model.Contact) int {
-	// check client exist
-	code := CheckClientExist(contact.ClientId)
-	if code != ecode.OK {
-		return code
-	}
-
-	// check member exist
-	return ecode.OK
-}
-
-func setFirstContact(tx *gorm.DB, contact *model.Contact) int {
-	if contact.IsFirst && contact.ClientId != 0 {
-		err := model.NewContactSearch(tx).SetClientId(contact.ClientId).UpdateByMap(map[string]interface{}{
-			"is_first": false,
-		})
-		if err != nil {
-			tx.Rollback()
-			return ecode.ContactUpdateErr
-		}
-	}
-
-	return ecode.OK
-}
-
-// CheckContactExist check contact exist
-func CheckContactExist(id int) int {
-	tmp, err := model.NewContactSearch(nil).SetId(id).First()
-	if err != nil {
-		return ecode.ContactNotExist
-	}
-
-	if tmp.Id == 0 {
-		return ecode.ContactNotExist
-	}
-
-	return ecode.OK
-}
-
-func (ContactService) GetContactList(page, pageSize int, keyword string) ([]*model.ContactDetail, int64, int) {
-	// get contact list
-	contacts, total, err := model.NewContactSearch(nil).SetKeyword(keyword).SetPage(page, pageSize).FindAll()
-	if err != nil {
-		return nil, 0, ecode.ContactListErr
-	}
-	return contacts, total, ecode.OK
-}
-
-func (ContactService) DeleteContact(ids []int) int {
-	// delete client
-	err := model.NewContactSearch(nil).SetIds(ids).Delete()
-	if err != nil {
-		return ecode.ContactDeleteErr
-	}
-	return ecode.OK
-}
-
-func (ContactService) Assign(ids []int, memberId int) int {
-	// check contact exist
-	//errCode := CheckContactExist(id)
-	//if errCode != ecode.OK {
-	//	return errCode
-	//}
-
-	// assign contact
-	err := model.NewContactSearch(nil).SetIds(ids).UpdateByMap(map[string]interface{}{
-		"member_id": memberId,
-	})
-	if err != nil {
-		return ecode.ContactAssignErr
-	}
-
-	return ecode.OK
-}
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/pkg/ecode"
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+)
+
+type ContactService struct{}
+
+func (ContactService) AddContact(contact *model.Contact) int {
+
+	code := checkMemberAndCompany(contact)
+	if code != ecode.OK {
+		return code
+	}
+
+	tx := mysqlx.GetDB().Begin()
+	// check isFirst
+	errCode := setFirstContact(tx, contact)
+	if errCode != ecode.OK {
+		return errCode
+	}
+
+	err := model.NewContactSearch(tx).Create(contact)
+	if err != nil {
+		tx.Rollback()
+		return ecode.ContactExist
+	}
+
+	tx.Commit()
+	return ecode.OK
+}
+
+func (ContactService) UpdateContact(contact *model.Contact) int {
+	// check contact exist
+	_, err := model.NewContactSearch(nil).SetId(contact.Id).First()
+	if err != nil {
+		return ecode.ContactNotExist
+	}
+
+	code := checkMemberAndCompany(contact)
+	if code != ecode.OK {
+		return code
+	}
+
+	tx := mysqlx.GetDB().Begin()
+	code = setFirstContact(tx, contact)
+	if code != ecode.OK {
+		return code
+	}
+
+	// update contact
+	err = model.NewContactSearch(tx).SetId(contact.Id).Update(contact)
+	if err != nil {
+		tx.Rollback()
+		return ecode.ContactUpdateErr
+	}
+
+	tx.Commit()
+
+	return ecode.OK
+}
+
+func checkMemberAndCompany(contact *model.Contact) int {
+	// check client exist
+	code := CheckClientExist(contact.ClientId)
+	if code != ecode.OK {
+		return code
+	}
+
+	// check member exist
+	return ecode.OK
+}
+
+func setFirstContact(tx *gorm.DB, contact *model.Contact) int {
+	if contact.IsFirst && contact.ClientId != 0 {
+		err := model.NewContactSearch(tx).SetClientId(contact.ClientId).UpdateByMap(map[string]interface{}{
+			"is_first": false,
+		})
+		if err != nil {
+			tx.Rollback()
+			return ecode.ContactUpdateErr
+		}
+	}
+
+	return ecode.OK
+}
+
+// CheckContactExist check contact exist
+func CheckContactExist(id int) int {
+	tmp, err := model.NewContactSearch(nil).SetId(id).First()
+	if err != nil {
+		return ecode.ContactNotExist
+	}
+
+	if tmp.Id == 0 {
+		return ecode.ContactNotExist
+	}
+
+	return ecode.OK
+}
+
+func (ContactService) GetContactList(page, pageSize int, data map[string]interface{}) ([]*model.ContactDetail, int64, int) {
+	// get contact list
+	contacts, total, err := model.NewContactSearch(nil).SetPage(page, pageSize).SetSearchMap(data).FindAll()
+	if err != nil {
+		return nil, 0, ecode.ContactListErr
+	}
+	return contacts, total, ecode.OK
+}
+
+func (ContactService) DeleteContact(ids []int) int {
+	// delete client
+	err := model.NewContactSearch(nil).SetIds(ids).Delete()
+	if err != nil {
+		return ecode.ContactDeleteErr
+	}
+	return ecode.OK
+}
+
+func (ContactService) Assign(ids []int, memberId int) int {
+	// check contact exist
+	//errCode := CheckContactExist(id)
+	//if errCode != ecode.OK {
+	//	return errCode
+	//}
+
+	// assign contact
+	err := model.NewContactSearch(nil).SetIds(ids).UpdateByMap(map[string]interface{}{
+		"member_id": memberId,
+	})
+	if err != nil {
+		return ecode.ContactAssignErr
+	}
+
+	return ecode.OK
+}

--
Gitblit v1.8.0