zhangqian
2023-08-11 ff3e203423f296965472d1f09347cda5cfe3a786
model/client.go
@@ -1,6 +1,7 @@
package model
import (
   "aps_crm/constvar"
   "aps_crm/pkg/mysqlx"
   "gorm.io/gorm"
   "time"
@@ -21,6 +22,7 @@
      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:销售负责人ID"`
      Member            User           `json:"member" gorm:"foreignKey:MemberId"`
      ServiceMemberId   int            `json:"service_member_id" gorm:"column:service_member_id;type:int(11);comment:服务负责人ID"`
      DetailAddress     string         `json:"detail_address" gorm:"column:detail_address;type:varchar(255);comment:详细地址"`
      Remark            string         `json:"remark" gorm:"column:remark;type:varchar(255);comment:备注"`
@@ -35,11 +37,11 @@
   ClientSearch struct {
      Client
      Orm      *gorm.DB
      Keyword  string
      OrderBy  string
      PageNum  int
      PageSize int
      Orm       *gorm.DB
      SearchMap map[string]interface{}
      OrderBy   string
      PageNum   int
      PageSize  int
   }
)
@@ -59,14 +61,61 @@
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)
   }
   if len(slf.SearchMap) > 0 {
      for key, value := range slf.SearchMap {
         switch v := value.(type) {
         case string:
            if key == "name" || key == "number" || key == "detail_address" {
               db = db.Where(key+" LIKE ?", "%"+v+"%")
            }
            if key == "phone" {
               db = db.Joins("Contacts").Where("Contacts.phone LIKE ?", "%"+v+"%")
            }
            if key == "contact_name" {
               db = db.Joins("Contacts").Where("Contacts.name LIKE ?", "%"+v+"%")
            }
            if key == "next_visit_time" {
               db = db.Where(key+" = ?", v)
            }
            // 查询超出15天未联系的客户
            if key == "not_contact" {
               db = db.Joins("FollowRecord").Where("FollowRecord.follow_time < ?", time.Now().AddDate(0, 0, -15)).Group("clients.id")
            }
            // 查询公海客户
            if key == "public_sea" {
               db = db.Where("member_id = ?", constvar.UserTypeSuper)
            }
            if key == "client_status" {
               db = db.Joins("ClientStatus").Where("ClientStatus.name LIKE ?", "%"+v+"%")
            }
            if key == "client_level" {
               db = db.Joins("ClientLevel").Where("ClientLevel.name LIKE ?", "%"+v+"%")
            }
            if key == "member_name" {
               db = db.Joins("Member").Where("Member.username LIKE ?", "%"+v+"%")
            }
         case int:
            if key == "id" || key == "client_type_id" || key == "client_status_id" || key == "member_id" {
               db = db.Where(key+" = ?", v)
            }
         }
      }
   }
   return db
@@ -97,6 +146,11 @@
   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
@@ -120,18 +174,13 @@
      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
   err := db.Preload("Member").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 {
@@ -143,3 +192,7 @@
   slf.OrderBy = order
   return slf
}
func (slf *ClientSearch) SetIds(ids []int) *ClientSearch {
   slf.Orm = slf.Orm.Where("id in (?)", ids)
   return slf
}