fix
wangpengfei
2023-08-02 dac214fa72dc2974954a4d8ee934695f548ad155
fix
8个文件已修改
2250 ■■■■ 已修改文件
api/v1/followRecord.go 446 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/salesLeads.go 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/client.go 298 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/followRecord.go 370 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/request/followRecord.go 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pkg/ecode/code.go 782 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/client.go 156 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/followRecord.go 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/followRecord.go
@@ -1,224 +1,224 @@
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"
    "time"
)
type FollowRecordApi struct{}
// Add
//
//    @Tags        FollowRecord
//    @Summary    添加跟进记录
//    @Produce    application/json
//    @Param        object    body        request.AddFollowRecord    true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/followRecord/add [post]
func (fr *FollowRecordApi) Add(c *gin.Context) {
    var params request.AddFollowRecord
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode, followRecord := checkFollowRecordParams(params.FollowRecord)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    errCode = followRecordService.AddFollowRecord(followRecord)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// Delete
//
//    @Tags        FollowRecord
//    @Summary    删除跟进记录
//    @Produce    application/json
//    @Param        id    path        string    true    "跟进记录id"
//    @Success    200    {object}    contextx.Response{}
//    @Router        /api/followRecord/delete/{id} [delete]
func (fr *FollowRecordApi) Delete(c *gin.Context) {
    ctx, ok := contextx.NewContext(c, nil)
    if !ok {
        return
    }
    id, _ := strconv.Atoi(c.Param("id"))
    errCode := followRecordService.DeleteFollowRecord(id)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// Update
//
//    @Tags        FollowRecord
//    @Summary    更新跟进记录
//    @Produce    application/json
//    @Param        object    body        request.UpdateFollowRecord    true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/followRecord/update [put]
func (fr *FollowRecordApi) Update(c *gin.Context) {
    var params request.UpdateFollowRecord
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode, followRecord := checkFollowRecordParams(params.FollowRecord)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    followRecord.Id = params.Id
    errCode = followRecordService.UpdateFollowRecord(followRecord)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// checkFollowRecordParams
// 检查跟进记录参数
func checkFollowRecordParams(followRecord request.FollowRecord) (int, *model.FollowRecord) {
    var followRecordModel model.FollowRecord
    //if followRecord.ClientId != 0 {
    //    // check client exist
    //    if service.CheckClientExist(followRecord.ClientId) != ecode.OK {
    //        return ecode.ClientNotExist, &followRecordModel
    //    }
    //}
    //
    //if followRecord.ContactId != 0 {
    //    // check contact exist
    //    if service.CheckContactExist(followRecord.ContactId) != ecode.OK {
    //        return ecode.ContactNotExist, &followRecordModel
    //    }
    //}
    //
    //if followRecord.SalesLeadsId != 0 {
    //    // check sales leads exist
    //    if service.CheckSalesLeadsExist(followRecord.SalesLeadsId) != ecode.OK {
    //        return ecode.SalesLeadsNotExist, &followRecordModel
    //    }
    //}
    //
    //// check member id
    //if followRecord.MemberId == 0 {
    //    // todo check member exist
    //    return ecode.InvalidParams, &followRecordModel
    //}
    //
    //// check number
    //if followRecord.Number == "" {
    //    return ecode.InvalidParams, &followRecordModel
    //}
    //
    //// check follow content
    //if followRecord.Content == "" {
    //    return ecode.InvalidParams, &followRecordModel
    //}
    // check follow time
    t, err := checkTimeFormat(followRecord.FollowTime)
    if err != nil {
        return ecode.InvalidParams, &followRecordModel
    }
    followRecordModel.FollowTime = t
    t, err = checkTimeFormat(followRecord.NextFollowTime)
    if err != nil {
        return ecode.InvalidParams, &followRecordModel
    }
    followRecordModel.NextFollowTime = t
    followRecordModel.ClientId = followRecord.ClientId
    followRecordModel.Content = followRecord.Content
    followRecordModel.MemberId = followRecord.MemberId
    followRecordModel.Number = followRecord.Number
    followRecordModel.ClientStatusId = followRecord.ClientStatusId
    followRecordModel.ContactId = followRecord.ContactId
    followRecordModel.Topic = followRecord.Topic
    followRecordModel.SalesLeadsId = followRecord.SalesLeadsId
    followRecordModel.SaleChanceId = followRecord.SaleChanceId
    followRecordModel.ContactInformationId = followRecord.ContactInformationId
    followRecordModel.Purpose = followRecord.Purpose
    followRecordModel.Content = followRecord.Content
    followRecordModel.Record = followRecord.Record
    return ecode.OK, &followRecordModel
}
// checkTimeFormat
// 检查时间格式
func checkTimeFormat(t string) (time.Time, error) {
    if t == "" {
        t = "1900-01-01T00:00:00+08:00"
    }
    location, err := time.LoadLocation("Asia/Shanghai")
    if err != nil {
        return time.Time{}, err
    }
    tt, err := time.Parse("2006-01-02T15:04:05.000Z", t)
    if err == nil {
        return tt.In(location), nil
    }
    tt, err = time.Parse("2006-01-02T15:04:05-07:00", t)
    if err == nil {
        return tt.In(location), nil
    }
    return time.Time{}, err
}
// List
//
//    @Tags        FollowRecord
//    @Summary    回访记录列表
//    @Produce    application/json
//    @Param        object    body        request.GetFollowRecordList    true    "参数"
//    @Success    200        {object}    contextx.Response{data=response.FollowRecordResponse}
//    @Router        /api/followRecord/list [post]
func (fr *FollowRecordApi) List(c *gin.Context) {
    var params request.GetFollowRecordList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    followRecords, total, errCode := followRecordService.GetFollowRecordList(params.Page, params.PageSize, params.Keyword)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.OkWithDetailed(response.FollowRecordResponse{
        List:  followRecords,
        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"
    "strconv"
    "time"
)
type FollowRecordApi struct{}
// Add
//
//    @Tags        FollowRecord
//    @Summary    添加跟进记录
//    @Produce    application/json
//    @Param        object    body        request.AddFollowRecord    true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/followRecord/add [post]
func (fr *FollowRecordApi) Add(c *gin.Context) {
    var params request.AddFollowRecord
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode, followRecord := checkFollowRecordParams(params.FollowRecord)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    errCode = followRecordService.AddFollowRecord(followRecord)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// Delete
//
//    @Tags        FollowRecord
//    @Summary    删除跟进记录
//    @Produce    application/json
//    @Param        id    path        string    true    "跟进记录id"
//    @Success    200    {object}    contextx.Response{}
//    @Router        /api/followRecord/delete/{id} [delete]
func (fr *FollowRecordApi) Delete(c *gin.Context) {
    ctx, ok := contextx.NewContext(c, nil)
    if !ok {
        return
    }
    id, _ := strconv.Atoi(c.Param("id"))
    errCode := followRecordService.DeleteFollowRecord(id)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// Update
//
//    @Tags        FollowRecord
//    @Summary    更新跟进记录
//    @Produce    application/json
//    @Param        object    body        request.UpdateFollowRecord    true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/followRecord/update [put]
func (fr *FollowRecordApi) Update(c *gin.Context) {
    var params request.UpdateFollowRecord
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode, followRecord := checkFollowRecordParams(params.FollowRecord)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    followRecord.Id = params.Id
    errCode = followRecordService.UpdateFollowRecord(followRecord)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// checkFollowRecordParams
// 检查跟进记录参数
func checkFollowRecordParams(followRecord request.FollowRecord) (int, *model.FollowRecord) {
    var followRecordModel model.FollowRecord
    //if followRecord.ClientId != 0 {
    //    // check client exist
    //    if service.CheckClientExist(followRecord.ClientId) != ecode.OK {
    //        return ecode.ClientNotExist, &followRecordModel
    //    }
    //}
    //
    //if followRecord.ContactId != 0 {
    //    // check contact exist
    //    if service.CheckContactExist(followRecord.ContactId) != ecode.OK {
    //        return ecode.ContactNotExist, &followRecordModel
    //    }
    //}
    //
    //if followRecord.SalesLeadsId != 0 {
    //    // check sales leads exist
    //    if service.CheckSalesLeadsExist(followRecord.SalesLeadsId) != ecode.OK {
    //        return ecode.SalesLeadsNotExist, &followRecordModel
    //    }
    //}
    //
    //// check member id
    //if followRecord.MemberId == 0 {
    //    // todo check member exist
    //    return ecode.InvalidParams, &followRecordModel
    //}
    //
    //// check number
    //if followRecord.Number == "" {
    //    return ecode.InvalidParams, &followRecordModel
    //}
    //
    //// check follow content
    //if followRecord.Content == "" {
    //    return ecode.InvalidParams, &followRecordModel
    //}
    // check follow time
    t, err := checkTimeFormat(followRecord.FollowTime)
    if err != nil {
        return ecode.InvalidParams, &followRecordModel
    }
    followRecordModel.FollowTime = t
    t, err = checkTimeFormat(followRecord.NextFollowTime)
    if err != nil {
        return ecode.InvalidParams, &followRecordModel
    }
    followRecordModel.NextFollowTime = t
    followRecordModel.ClientId = followRecord.ClientId
    followRecordModel.Content = followRecord.Content
    followRecordModel.MemberId = followRecord.MemberId
    followRecordModel.Number = followRecord.Number
    followRecordModel.ClientStatusId = followRecord.ClientStatusId
    followRecordModel.ContactId = followRecord.ContactId
    followRecordModel.Topic = followRecord.Topic
    followRecordModel.SalesLeadsId = followRecord.SalesLeadsId
    followRecordModel.SaleChanceId = followRecord.SaleChanceId
    followRecordModel.ContactInformationId = followRecord.ContactInformationId
    followRecordModel.Purpose = followRecord.Purpose
    followRecordModel.Content = followRecord.Content
    followRecordModel.Record = followRecord.Record
    return ecode.OK, &followRecordModel
}
// checkTimeFormat
// 检查时间格式
func checkTimeFormat(t string) (time.Time, error) {
    if t == "" {
        t = "1900-01-01T00:00:00+08:00"
    }
    location, err := time.LoadLocation("Asia/Shanghai")
    if err != nil {
        return time.Time{}, err
    }
    tt, err := time.Parse("2006-01-02T15:04:05.000Z", t)
    if err == nil {
        return tt.In(location), nil
    }
    tt, err = time.Parse("2006-01-02T15:04:05-07:00", t)
    if err == nil {
        return tt.In(location), nil
    }
    return time.Time{}, err
}
// List
//
//    @Tags        FollowRecord
//    @Summary    回访记录列表
//    @Produce    application/json
//    @Param        object    body        request.GetFollowRecordList    true    "参数"
//    @Success    200        {object}    contextx.Response{data=response.FollowRecordResponse}
//    @Router        /api/followRecord/list [post]
func (fr *FollowRecordApi) List(c *gin.Context) {
    var params request.GetFollowRecordList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    followRecords, total, errCode := followRecordService.GetFollowRecordList(params.Page, params.PageSize, params.Keyword)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.OkWithDetailed(response.FollowRecordResponse{
        List:  followRecords,
        Count: int(total),
    })
}
api/v1/salesLeads.go
@@ -145,7 +145,7 @@
//    @Param        object    body        request.GetSalesLeadsList    true    "参数"
//    @Success    200        {object}    contextx.Response{data=response.SalesLeadsResponse}
//    @Router        /api/salesLeads/list [post]
func (con *SalesLeadsApi) List(c *gin.Context) {
func (s *SalesLeadsApi) List(c *gin.Context) {
    var params request.GetSalesLeadsList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
@@ -159,7 +159,7 @@
    }
    ctx.OkWithDetailed(response.SalesLeadsResponse{
        List: salesLeadss,
        List:  salesLeadss,
        Count: int(total),
    })
}
}
model/client.go
@@ -1,149 +1,149 @@
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:客户状态ID"`
        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:销售负责人ID"`
        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:备注"`
        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:客户状态ID"`
        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:销售负责人ID"`
        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:备注"`
        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
}
model/followRecord.go
@@ -1,185 +1,185 @@
package model
import (
    "aps_crm/pkg/mysqlx"
    "gorm.io/gorm"
    "time"
)
type (
    FollowRecord struct {
        Id                   int       `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
        ClientId             int       `json:"client_id" gorm:"column:client_id;type:int(11);comment:客户id"`
        ClientStatusId       int       `json:"client_status_id" gorm:"column:client_status_id;type:int(11);comment:客户状态id"`
        MemberId             int       `json:"member_id" gorm:"column:member_id;type:int(11);comment:跟进人id"`
        Number               string    `json:"number" gorm:"column:number;type:varchar(255);comment:跟进编号"`
        ContactId            int       `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:联系人id"`
        Topic                string    `json:"topic" gorm:"column:topic;type:varchar(255);comment:跟进主题"`
        Record               string    `json:"record" gorm:"column:record;type:MEDIUMTEXT;comment:跟进记录"`
        SaleChanceId         int       `json:"sale_chance_id" gorm:"column:sale_chance_id;type:int(11);comment:销售机会id"`
        SalesLeadsId         int       `json:"sales_leads_id" gorm:"column:sales_leads_id;type:int(11);comment:销售线索id"`
        ContactInformationId int       `json:"contact_information_id" gorm:"column:contact_information_id;type:int(11);comment:联系方式id"`
        FollowTime           time.Time `json:"follow_time" gorm:"column:follow_time;type:datetime;comment:跟进时间"`
        NextFollowTime       time.Time `json:"next_follow_time" gorm:"column:next_follow_time;type:datetime;comment:下次跟进时间"`
        Purpose              string    `json:"purpose" gorm:"column:purpose;type:varchar(255);comment:跟进目的"`
        Content              string    `json:"content" gorm:"column:content;type:MEDIUMTEXT;comment:跟进内容"`
        Client               Client    `json:"client" gorm:"foreignKey:ClientId"`
        Contact              Contact   `json:"contact" gorm:"foreignKey:ContactId"`
        gorm.Model           `json:"-"`
    }
    FollowRecordSearch struct {
        FollowRecord
        Orm      *gorm.DB
        Keyword  string
        OrderBy  string
        PageNum  int
        PageSize int
    }
)
func (FollowRecord) TableName() string {
    return "follow_records"
}
func NewFollowRecordSearch() *FollowRecordSearch {
    return &FollowRecordSearch{
        Orm: mysqlx.GetDB(),
    }
}
func (slf *FollowRecordSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&FollowRecord{})
    if slf.Keyword != "" {
        db = db.Where("name LIKE ?", "%"+slf.Keyword+"%")
    }
    if slf.Keyword != "" {
        db = db.Where("topic LIKE ?", "%"+slf.Keyword+"%")
    }
    if slf.Id != 0 {
        db = db.Where("id = ?", slf.Id)
    }
    if slf.ClientId != 0 {
        db = db.Where("client_id = ?", slf.ClientId)
    }
    if slf.ClientStatusId != 0 {
        db = db.Where("client_status_id = ?", slf.ClientStatusId)
    }
    if slf.MemberId != 0 {
        db = db.Where("member_id = ?", slf.MemberId)
    }
    if slf.Number != "" {
        db = db.Where("number = ?", slf.Number)
    }
    if slf.ContactId != 0 {
        db = db.Where("contact_id = ?", slf.ContactId)
    }
    if slf.Topic != "" {
        db = db.Where("topic = ?", slf.Topic)
    }
    if slf.Record != "" {
        db = db.Where("record = ?", slf.Record)
    }
    if slf.SaleChanceId != 0 {
        db = db.Where("sale_chance_id = ?", slf.SaleChanceId)
    }
    if slf.SalesLeadsId != 0 {
        db = db.Where("sales_leads_id = ?", slf.SalesLeadsId)
    }
    if slf.ContactInformationId != 0 {
        db = db.Where("contact_information_id = ?", slf.ContactInformationId)
    }
    if !slf.FollowTime.IsZero() {
        db = db.Where("follow_time = ?", slf.FollowTime)
    }
    if !slf.NextFollowTime.IsZero() {
        db = db.Where("next_follow_time = ?", slf.NextFollowTime)
    }
    if slf.Purpose != "" {
        db = db.Where("purpose = ?", slf.Purpose)
    }
    if slf.Content != "" {
        db = db.Where("content = ?", slf.Content)
    }
    return db
}
func (slf *FollowRecordSearch) First() (*FollowRecord, error) {
    var record = new(FollowRecord)
    err := slf.build().First(record).Error
    return record, err
}
func (slf *FollowRecordSearch) FindAll() ([]*FollowRecord, int64, error) {
    var db = slf.build()
    var records = make([]*FollowRecord, 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("Client").Preload("Contact").Find(&records).Error
    return records, total, err
}
func (slf *FollowRecordSearch) Count() (int64, error) {
    var count int64
    err := slf.build().Count(&count).Error
    return count, err
}
func (slf *FollowRecordSearch) Page(page, pageSize int) ([]*FollowRecord, int64, error) {
    var records = make([]*FollowRecord, 0)
    var count int64
    err := slf.build().Count(&count).Error
    if err != nil {
        return records, count, err
    }
    err = slf.build().Offset((page - 1) * pageSize).Limit(pageSize).Find(&records).Error
    return records, count, err
}
func (slf *FollowRecordSearch) Create(record *FollowRecord) error {
    var db = slf.build()
    return db.Create(record).Error
}
func (slf *FollowRecordSearch) Update(record *FollowRecord) error {
    var db = slf.build()
    return db.Updates(record).Error
}
func (slf *FollowRecordSearch) Delete() error {
    var db = slf.build()
    return db.Delete(&slf.FollowRecord).Error
}
func (slf *FollowRecordSearch) SetId(id int) *FollowRecordSearch {
    slf.Id = id
    return slf
}
func (slf *FollowRecordSearch) SetClientId(clientId int) *FollowRecordSearch {
    slf.ClientId = clientId
    return slf
}
func (slf *FollowRecordSearch) SetKeyword(keyword string) *FollowRecordSearch {
    slf.Keyword = keyword
    return slf
}
func (slf *FollowRecordSearch) SetPage(page, size int) *FollowRecordSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *FollowRecordSearch) SetOrder(order string) *FollowRecordSearch {
    slf.OrderBy = order
    return slf
}
package model
import (
    "aps_crm/pkg/mysqlx"
    "gorm.io/gorm"
    "time"
)
type (
    FollowRecord struct {
        Id                   int       `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
        ClientId             int       `json:"client_id" gorm:"column:client_id;type:int(11);comment:客户id"`
        ClientStatusId       int       `json:"client_status_id" gorm:"column:client_status_id;type:int(11);comment:客户状态id"`
        MemberId             int       `json:"member_id" gorm:"column:member_id;type:int(11);comment:跟进人id"`
        Number               string    `json:"number" gorm:"column:number;type:varchar(255);comment:跟进编号"`
        ContactId            int       `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:联系人id"`
        Topic                string    `json:"topic" gorm:"column:topic;type:varchar(255);comment:跟进主题"`
        Record               string    `json:"record" gorm:"column:record;type:MEDIUMTEXT;comment:跟进记录"`
        SaleChanceId         int       `json:"sale_chance_id" gorm:"column:sale_chance_id;type:int(11);comment:销售机会id"`
        SalesLeadsId         int       `json:"sales_leads_id" gorm:"column:sales_leads_id;type:int(11);comment:销售线索id"`
        ContactInformationId int       `json:"contact_information_id" gorm:"column:contact_information_id;type:int(11);comment:联系方式id"`
        FollowTime           time.Time `json:"follow_time" gorm:"column:follow_time;type:datetime;comment:跟进时间"`
        NextFollowTime       time.Time `json:"next_follow_time" gorm:"column:next_follow_time;type:datetime;comment:下次跟进时间"`
        Purpose              string    `json:"purpose" gorm:"column:purpose;type:varchar(255);comment:跟进目的"`
        Content              string    `json:"content" gorm:"column:content;type:MEDIUMTEXT;comment:跟进内容"`
        Client               Client    `json:"client" gorm:"foreignKey:ClientId"`
        Contact              Contact   `json:"contact" gorm:"foreignKey:ContactId"`
        gorm.Model           `json:"-"`
    }
    FollowRecordSearch struct {
        FollowRecord
        Orm      *gorm.DB
        Keyword  string
        OrderBy  string
        PageNum  int
        PageSize int
    }
)
func (FollowRecord) TableName() string {
    return "follow_records"
}
func NewFollowRecordSearch() *FollowRecordSearch {
    return &FollowRecordSearch{
        Orm: mysqlx.GetDB(),
    }
}
func (slf *FollowRecordSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&FollowRecord{})
    if slf.Keyword != "" {
        db = db.Where("name LIKE ?", "%"+slf.Keyword+"%")
    }
    if slf.Keyword != "" {
        db = db.Where("topic LIKE ?", "%"+slf.Keyword+"%")
    }
    if slf.Id != 0 {
        db = db.Where("id = ?", slf.Id)
    }
    if slf.ClientId != 0 {
        db = db.Where("client_id = ?", slf.ClientId)
    }
    if slf.ClientStatusId != 0 {
        db = db.Where("client_status_id = ?", slf.ClientStatusId)
    }
    if slf.MemberId != 0 {
        db = db.Where("member_id = ?", slf.MemberId)
    }
    if slf.Number != "" {
        db = db.Where("number = ?", slf.Number)
    }
    if slf.ContactId != 0 {
        db = db.Where("contact_id = ?", slf.ContactId)
    }
    if slf.Topic != "" {
        db = db.Where("topic = ?", slf.Topic)
    }
    if slf.Record != "" {
        db = db.Where("record = ?", slf.Record)
    }
    if slf.SaleChanceId != 0 {
        db = db.Where("sale_chance_id = ?", slf.SaleChanceId)
    }
    if slf.SalesLeadsId != 0 {
        db = db.Where("sales_leads_id = ?", slf.SalesLeadsId)
    }
    if slf.ContactInformationId != 0 {
        db = db.Where("contact_information_id = ?", slf.ContactInformationId)
    }
    if !slf.FollowTime.IsZero() {
        db = db.Where("follow_time = ?", slf.FollowTime)
    }
    if !slf.NextFollowTime.IsZero() {
        db = db.Where("next_follow_time = ?", slf.NextFollowTime)
    }
    if slf.Purpose != "" {
        db = db.Where("purpose = ?", slf.Purpose)
    }
    if slf.Content != "" {
        db = db.Where("content = ?", slf.Content)
    }
    return db
}
func (slf *FollowRecordSearch) First() (*FollowRecord, error) {
    var record = new(FollowRecord)
    err := slf.build().First(record).Error
    return record, err
}
func (slf *FollowRecordSearch) FindAll() ([]*FollowRecord, int64, error) {
    var db = slf.build()
    var records = make([]*FollowRecord, 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("Client").Preload("Contact").Find(&records).Error
    return records, total, err
}
func (slf *FollowRecordSearch) Count() (int64, error) {
    var count int64
    err := slf.build().Count(&count).Error
    return count, err
}
func (slf *FollowRecordSearch) Page(page, pageSize int) ([]*FollowRecord, int64, error) {
    var records = make([]*FollowRecord, 0)
    var count int64
    err := slf.build().Count(&count).Error
    if err != nil {
        return records, count, err
    }
    err = slf.build().Offset((page - 1) * pageSize).Limit(pageSize).Find(&records).Error
    return records, count, err
}
func (slf *FollowRecordSearch) Create(record *FollowRecord) error {
    var db = slf.build()
    return db.Create(record).Error
}
func (slf *FollowRecordSearch) Update(record *FollowRecord) error {
    var db = slf.build()
    return db.Updates(record).Error
}
func (slf *FollowRecordSearch) Delete() error {
    var db = slf.build()
    return db.Delete(&slf.FollowRecord).Error
}
func (slf *FollowRecordSearch) SetId(id int) *FollowRecordSearch {
    slf.Id = id
    return slf
}
func (slf *FollowRecordSearch) SetClientId(clientId int) *FollowRecordSearch {
    slf.ClientId = clientId
    return slf
}
func (slf *FollowRecordSearch) SetKeyword(keyword string) *FollowRecordSearch {
    slf.Keyword = keyword
    return slf
}
func (slf *FollowRecordSearch) SetPage(page, size int) *FollowRecordSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *FollowRecordSearch) SetOrder(order string) *FollowRecordSearch {
    slf.OrderBy = order
    return slf
}
model/request/followRecord.go
@@ -1,32 +1,32 @@
package request
type AddFollowRecord struct {
    FollowRecord FollowRecord `json:"follow_record" binding:"required"`
}
type FollowRecord struct {
    ClientId             int    `json:"client_id" gorm:"column:client_id;type:int(11);comment:客户id"`
    ClientStatusId       int    `json:"client_status_id" gorm:"column:client_status_id;type:int(11);comment:客户状态id"`
    MemberId             int    `json:"member_id" gorm:"column:member_id;type:int(11);comment:跟进人id"`
    Number               string `json:"number" gorm:"column:number;type:varchar(255);comment:跟进编号"`
    ContactId            int    `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:联系人id"`
    Topic                string `json:"topic" gorm:"column:topic;type:varchar(255);comment:跟进主题"`
    Record               string `json:"record" gorm:"column:record;type:MEDIUMTEXT;comment:跟进记录"`
    SaleChanceId         int    `json:"sale_chance_id" gorm:"column:sale_chance_id;type:int(11);comment:销售机会id"`
    SalesLeadsId         int    `json:"sales_leads_id" gorm:"column:sales_leads_id;type:int(11);comment:销售线索id"`
    ContactInformationId int    `json:"contact_information_id" gorm:"column:contact_information_id;type:int(11);comment:联系方式id"`
    FollowTime           string `json:"follow_time" gorm:"column:follow_time;type:datetime;comment:跟进时间"`
    NextFollowTime       string `json:"next_follow_time" gorm:"column:next_follow_time;type:datetime;comment:下次跟进时间"`
    Purpose              string `json:"purpose" gorm:"column:purpose;type:varchar(255);comment:跟进目的"`
    Content              string `json:"content" gorm:"column:content;type:varchar(255);comment:跟进内容"`
}
type UpdateFollowRecord struct {
    Id           int          `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
    FollowRecord FollowRecord `json:"follow_record" binding:"required"`
}
type GetFollowRecordList struct {
    PageInfo
    Keyword string `json:"keyword"`
}
package request
type AddFollowRecord struct {
    FollowRecord FollowRecord `json:"follow_record" binding:"required"`
}
type FollowRecord struct {
    ClientId             int    `json:"client_id" gorm:"column:client_id;type:int(11);comment:客户id"`
    ClientStatusId       int    `json:"client_status_id" gorm:"column:client_status_id;type:int(11);comment:客户状态id"`
    MemberId             int    `json:"member_id" gorm:"column:member_id;type:int(11);comment:跟进人id"`
    Number               string `json:"number" gorm:"column:number;type:varchar(255);comment:跟进编号"`
    ContactId            int    `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:联系人id"`
    Topic                string `json:"topic" gorm:"column:topic;type:varchar(255);comment:跟进主题"`
    Record               string `json:"record" gorm:"column:record;type:MEDIUMTEXT;comment:跟进记录"`
    SaleChanceId         int    `json:"sale_chance_id" gorm:"column:sale_chance_id;type:int(11);comment:销售机会id"`
    SalesLeadsId         int    `json:"sales_leads_id" gorm:"column:sales_leads_id;type:int(11);comment:销售线索id"`
    ContactInformationId int    `json:"contact_information_id" gorm:"column:contact_information_id;type:int(11);comment:联系方式id"`
    FollowTime           string `json:"follow_time" gorm:"column:follow_time;type:datetime;comment:跟进时间"`
    NextFollowTime       string `json:"next_follow_time" gorm:"column:next_follow_time;type:datetime;comment:下次跟进时间"`
    Purpose              string `json:"purpose" gorm:"column:purpose;type:varchar(255);comment:跟进目的"`
    Content              string `json:"content" gorm:"column:content;type:varchar(255);comment:跟进内容"`
}
type UpdateFollowRecord struct {
    Id           int          `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
    FollowRecord FollowRecord `json:"follow_record" binding:"required"`
}
type GetFollowRecordList struct {
    PageInfo
    Keyword string `json:"keyword"`
}
pkg/ecode/code.go
@@ -1,391 +1,391 @@
package ecode
const (
    OK = 200
    UnknownErr                      = 2001 // 未知错误
    DBErr                           = 2002 // db错误
    RedisErr                        = 2003 // redis错误
    ParamsErr                       = 2004 // 请求参数错误
    UserNotExist                    = 2005 // 用户不存在
    PasswordErr                     = 2006 // 密码错误
    UserForbidden                   = 2007 // 用户被禁用
    CaptchaGenerateFailed           = 2008 // 验证码生成失败
    CaptchaErr                      = 2009 // 验证码错误
    CreateTokenErr                  = 2010 // 创建token失败
    JWTInBlackList                  = 2011 // JWT在白名单
    JWTDisabled                     = 2012 // JWT失效
    JWTEmpty                        = 2013 // JWT为空
    JWTExpire                       = 2014 // JWT过期
    JWTParseErr                     = 2015 // JWT解析失败
    UserNameExistErr                = 2016 // 用户名已存在
    ChildrenExistErr                = 2017 // 存在子菜单
    MenuNotExist                    = 2018 // 菜单不存在
    MenuNameExistErr                = 2019 // 菜单名已存在
    DeviceIPExistErr                = 2020 // 该设备IP已存在
    DeviceInstallRancherErr         = 2021 // 安装rancher失败
    ClusterNameExistErr             = 2022 // 該集群已經存在
    CreateDatabaseErr               = 2023 // 创建数据库错误
    CreateDatabaseUserErr           = 2024 // 创建数据库用户错误
    CreateClusterErr                = 2025 // 创建集群失败
    GetClusterErr                   = 2026 // 获取集群失败
    GetClusterKubeConfigErr         = 2027 // 获取kube config失败
    ClusterInstallDockerErr         = 2028 // 安装docker失败
    ClusterInstallKubectlErr        = 2029 // 安装kubectl失败
    ClusterDeployKubernetesRolesErr = 2030 // 部署kubernetes角色失败
    ClusterGetNodeCommandErr        = 2031 // 获取node command失败
    UserHasCluster                  = 2032 // 删除用户失败,该用户下存在集群
    NoPowerErr                      = 2033 // 没有权限
    UploadImageErr                  = 2034 // 上传图像失败
    InvalidParams = 100001 // 请求参数错误
    CountryExist      = 200001 // 国家已存在
    CountryNotExist   = 200002 // 国家不存在
    CountryGetListErr = 200003 // 获取国家列表失败
    ProvinceExist      = 300001 // 省份已存在
    ProvinceNotExist   = 300002 // 省份不存在
    ProvinceGetListErr = 300003 // 获取省份列表失败
    ProvinceSetErr     = 300004 // 设置省份失败
    CityExist     = 400001 // 城市已存在
    CityNotExist  = 400002 // 城市不存在
    CityListErr   = 400003 // 获取城市列表失败
    CitySetErr    = 400004 // 设置城市失败
    CityDeleteErr = 400005 // 删除城市失败
    RegionExist    = 500001 // 区县已存在
    RegionNotExist = 500002 // 区县不存在
    RegionListErr  = 500003 // 获取区县列表失败
    RegionSetErr   = 500004 // 设置区县失败
    ContactExist     = 600001 // 联系人已存在
    ContactNotExist  = 600002 // 联系人不存在
    ContactListErr   = 600003 // 获取联系人列表失败
    ContactDeleteErr = 600004 // 删除联系人失败
    ContactUpdateErr = 600005 // 更新联系人失败
    ClientExist     = 700001 // 客户已存在
    ClientNotExist  = 700002 // 客户不存在
    ClientListErr   = 700003 // 获取客户列表失败
    ClientDeleteErr = 700004 // 删除客户失败
    ClientUpdateErr = 700005 // 更新客户失败
    ClientStatusExist    = 800001 // 客户状态已存在
    ClientStatusNotExist = 800002 // 客户状态不存在
    ClientStatusListErr  = 800003 // 获取客户状态列表失败
    ClientStatusSetErr   = 800004 // 设置客户状态失败
    ClientTypeExist    = 900001 // 客户类型已存在
    ClientTypeNotExist = 900002 // 客户类型不存在
    ClientTypeListErr  = 900003 // 获取客户类型列表失败
    ClientTypeSetErr   = 900004 // 设置客户类型失败
    ClientOriginExist    = 1000001 // 客户来源已存在
    ClientOriginNotExist = 1000002 // 客户来源不存在
    ClientOriginListErr  = 1000003 // 获取客户来源列表失败
    ClientOriginSetErr   = 1000004 // 设置客户来源失败
    ClientLevelExist     = 1100001 // 客户级别已存在
    ClientLevelNotExist  = 1100002 // 客户级别不存在
    ClientLevelListErr   = 1100003 // 获取客户级别列表失败
    ClientLevelSetErr    = 1100004 // 设置客户级别失败
    ClientLevelUpdateErr = 1100005 // 更新客户级别失败
    IndustryExist     = 1200001 // 行业已存在
    IndustryNotExist  = 1200002 // 行业不存在
    IndustryListErr   = 1200003 // 获取行业列表失败
    IndustrySetErr    = 1200004 // 设置行业失败
    IndustryUpdateErr = 1200005 // 更新行业失败
    EnterpriseNatureExist     = 1300001 // 企业性质已存在
    EnterpriseNatureNotExist  = 1300002 // 企业性质不存在
    EnterpriseNatureListErr   = 1300003 // 获取企业性质列表失败
    EnterpriseNatureSetErr    = 1300004 // 设置企业性质失败
    EnterpriseNatureUpdateErr = 1300005 // 更新企业性质失败
    RegisteredCapitalExist     = 1400001 // 注册资本已存在
    RegisteredCapitalNotExist  = 1400002 // 注册资本不存在
    RegisteredCapitalListErr   = 1400003 // 获取注册资本列表失败
    RegisteredCapitalSetErr    = 1400004 // 设置注册资本失败
    RegisteredCapitalUpdateErr = 1400005 // 更新注册资本失败
    EnterpriseScaleExist     = 1500001 // 企业规模已存在
    EnterpriseScaleNotExist  = 1500002 // 企业规模不存在
    EnterpriseScaleListErr   = 1500003 // 获取企业规模列表失败
    EnterpriseScaleSetErr    = 1500004 // 设置企业规模失败
    EnterpriseScaleUpdateErr = 1500005 // 更新企业规模失败
    SalesLeadsExist     = 1600001 // 销售线索已存在
    SalesLeadsNotExist  = 1600002 // 销售线索不存在
    SalesLeadsListErr   = 1600003 // 获取销售线索列表失败
    SalesLeadsSetErr    = 1600004 // 设置销售线索失败
    SalesLeadsUpdateErr = 1600005 // 更新销售线索失败
    SalesLeadsDeleteErr = 1600006 // 删除销售线索失败
    SalesSourceExist     = 1700001 // 销售线索来源已存在
    SalesSourceNotExist  = 1700002 // 销售线索来源不存在
    SalesSourceListErr   = 1700003 // 获取销售线索来源列表失败
    SalesSourceSetErr    = 1700004 // 设置销售线索来源失败
    SalesSourceUpdateErr = 1700005 // 更新销售线索来源失败
    FollowRecordExist     = 1800001 // 跟进记录已存在
    FollowRecordNotExist  = 1800002 // 跟进记录不存在
    FollowRecordListErr   = 1800003 // 获取跟进记录列表失败
    FollowRecordSetErr    = 1800004 // 设置跟进记录失败
    FollowRecordUpdateErr = 1800005 // 更新跟进记录失败
    FollowRecordDeleteErr = 1800006 // 删除跟进记录失败
    SaleChanceExist     = 1900001 // 销售机会已存在
    SaleChanceNotExist  = 1900002 // 销售机会不存在
    SaleChanceListErr   = 1900003 // 获取销售机会列表失败
    SaleChanceSetErr    = 1900004 // 设置销售机会失败
    SaleChanceUpdateErr = 1900005 // 更新销售机会失败
    SaleChanceDeleteErr = 1900006 // 删除销售机会失败
    SaleStageExist    = 2000001 // 销售阶段已存在
    SaleStageNotExist = 2000002 // 销售阶段不存在
    SaleStageListErr  = 2000003 // 获取销售阶段列表失败
    SaleStageSetErr   = 2000004 // 设置销售阶段失败
    SaleTypeExist     = 2100001 // 销售类型已存在
    SaleTypeNotExist  = 2100002 // 销售类型不存在
    SaleTypeListErr   = 2100003 // 获取销售类型列表失败
    SaleTypeSetErr    = 2100004 // 设置销售类型失败
    SaleTypeUpdateErr = 2100005 // 更新销售类型失败
    SaleTypeDeleteErr = 2100006 // 删除销售类型失败
    RegularCustomersExist     = 2200001 // 固定客户已存在
    RegularCustomersNotExist  = 2200002 // 固定客户不存在
    RegularCustomersListErr   = 2200003 // 获取固定客户列表失败
    RegularCustomersSetErr    = 2200004 // 设置固定客户失败
    RegularCustomersUpdateErr = 2200005 // 更新固定客户失败
    RegularCustomersDeleteErr = 2200006 // 删除固定客户失败
    PossibilityExist     = 2300001 // 销售机会可能性已存在
    PossibilityNotExist  = 2300002 // 销售机会可能性不存在
    PossibilityListErr   = 2300003 // 获取销售机会可能性列表失败
    PossibilitySetErr    = 2300004 // 设置销售机会可能性失败
    PossibilityUpdateErr = 2300005 // 更新销售机会可能性失败
    PossibilityDeleteErr = 2300006 // 删除销售机会可能性失败
    StatusExist     = 2400001 // 销售机会状态已存在
    StatusNotExist  = 2400002 // 销售机会状态不存在
    StatusListErr   = 2400003 // 获取销售机会状态列表失败
    StatusSetErr    = 2400004 // 设置销售机会状态失败
    StatusUpdateErr = 2400005 // 更新销售机会状态失败
    StatusDeleteErr = 2400006 // 删除销售机会状态失败
    QuotationExist     = 2500001 // 报价单已存在
    QuotationNotExist  = 2500002 // 报价单不存在
    QuotationListErr   = 2500003 // 获取报价单列表失败
    QuotationSetErr    = 2500004 // 设置报价单失败
    QuotationUpdateErr = 2500005 // 更新报价单失败
    QuotationDeleteErr = 2500006 // 删除报价单失败
    MasterOrderExist     = 2600001 // 主订单已存在
    MasterOrderNotExist  = 2600002 // 主订单不存在
    MasterOrderListErr   = 2600003 // 获取主订单列表失败
    MasterOrderSetErr    = 2600004 // 设置主订单失败
    MasterOrderUpdateErr = 2600005 // 更新主订单失败
    MasterOrderDeleteErr = 2600006 // 删除主订单失败
    SubOrderExist     = 2700001 // 子订单已存在
    SubOrderNotExist  = 2700002 // 子订单不存在
    SubOrderListErr   = 2700003 // 获取子订单列表失败
    SubOrderSetErr    = 2700004 // 设置子订单失败
    SubOrderUpdateErr = 2700005 // 更新子订单失败
    SubOrderDeleteErr = 2700006 // 删除子订单失败
    SalesDetailsExist     = 2800001 // 销售明细已存在
    SalesDetailsNotExist  = 2800002 // 销售明细不存在
    SalesDetailsListErr   = 2800003 // 获取销售明细列表失败
    SalesDetailsSetErr    = 2800004 // 设置销售明细失败
    SalesDetailsUpdateErr = 2800005 // 更新销售明细失败
    SalesDetailsDeleteErr = 2800006 // 删除销售明细失败
    SalesReturnExist     = 2900001 // 销售退货单已存在
    SalesReturnNotExist  = 2900002 // 销售退货单不存在
    SalesReturnListErr   = 2900003 // 获取销售退货单列表失败
    SalesReturnSetErr    = 2900004 // 设置销售退货单失败
    SalesReturnUpdateErr = 2900005 // 更新销售退货单失败
    SalesReturnDeleteErr = 2900006 // 删除销售退货单失败
    SalesRefundExist     = 3000001 // 销售退款单已存在
    SalesRefundNotExist  = 3000002 // 销售退款单不存在
    SalesRefundListErr   = 3000003 // 获取销售退款单列表失败
    SalesRefundSetErr    = 3000004 // 设置销售退款单失败
    SalesRefundUpdateErr = 3000005 // 更新销售退款单失败
    SalesRefundDeleteErr = 3000006 // 删除销售退款单失败
    ContractExist     = 3100001 // 合同已存在
    ContractNotExist  = 3100002 // 合同不存在
    ContractListErr   = 3100003 // 获取合同列表失败
    ContractSetErr    = 3100004 // 设置合同失败
    ContractUpdateErr = 3100005 // 更新合同失败
    ContractDeleteErr = 3100006 // 删除合同失败
    PlanExist     = 3200001 // 计划已存在
    PlanNotExist  = 3200002 // 计划不存在
    PlanListErr   = 3200003 // 获取计划列表失败
    PlanSetErr    = 3200004 // 设置计划失败
    PlanUpdateErr = 3200005 // 更新计划失败
    PlanDeleteErr = 3200006 // 删除计划失败
    SContractExist     = 3300001 // 服务合同已存在
    SContractNotExist  = 3300002 // 服务合同不存在
    SContractListErr   = 3300003 // 获取服务合同列表失败
    SContractSetErr    = 3300004 // 设置服务合同失败
    SContractUpdateErr = 3300005 // 更新服务合同失败
    SContractDeleteErr = 3300006 // 删除服务合同失败
    OrderManageExist     = 3400001 // 订单管理已存在
    OrderManageNotExist  = 3400002 // 订单管理不存在
    OrderManageListErr   = 3400003 // 获取订单管理列表失败
    OrderManageSetErr    = 3400004 // 设置订单管理失败
    OrderManageUpdateErr = 3400005 // 更新订单管理失败
    OrderManageDeleteErr = 3400006 // 删除订单管理失败
    ServiceFollowupExist     = 3500001 // 服务跟进已存在
    ServiceFollowupNotExist  = 3500002 // 服务跟进不存在
    ServiceFollowupListErr   = 3500003 // 获取服务跟进列表失败
    ServiceFollowupSetErr    = 3500004 // 设置服务跟进失败
    ServiceFollowupUpdateErr = 3500005 // 更新服务跟进失败
    ServiceFollowupDeleteErr = 3500006 // 删除服务跟进失败
    CustomerServiceSheetExist     = 3600001 // 客服单已存在
    CustomerServiceSheetNotExist  = 3600002 // 客服单不存在
    CustomerServiceSheetListErr   = 3600003 // 获取客服单列表失败
    CustomerServiceSheetSetErr    = 3600004 // 设置客服单失败
    CustomerServiceSheetUpdateErr = 3600005 // 更新客服单失败
    CustomerServiceSheetDeleteErr = 3600006 // 删除客服单失败
    ServiceFeeManageExist     = 3700001 // 服务费管理已存在
    ServiceFeeManageNotExist  = 3700002 // 服务费管理不存在
    ServiceFeeManageListErr   = 3700003 // 获取服务费管理列表失败
    ServiceFeeManageSetErr    = 3700004 // 设置服务费管理失败
    ServiceFeeManageUpdateErr = 3700005 // 更新服务费管理失败
    ServiceFeeManageDeleteErr = 3700006 // 删除服务费管理失败
    RoleExist      = 3800001 // 角色已存在
    RoleNotExist   = 3800002 // 角色不存在
    RoleListErr    = 3800003 // 获取角色列表失败
    RoleSetErr     = 3800004 // 设置角色失败
    RoleUpdateErr  = 3800005 // 更新角色失败
    RoleDeleteErr  = 3800006 // 删除角色失败
    RoleDeleteErr1 = 3800007 // 该角色下存在用户,无法删除
    MenuListErr         = 3900001 // 获取菜单列表失败
    SetMenuAuthorityErr = 3900002 // 设置菜单权限失败
    DepartmentExist      = 4000001 // 部门已存在
    DepartmentNotExist   = 4000002 // 部门不存在
    DepartmentListErr    = 4000003 // 获取部门列表失败
    DepartmentSetErr     = 4000004 // 设置部门失败
    DepartmentUpdateErr  = 4000005 // 更新部门失败
    DepartmentDeleteErr  = 4000006 // 删除部门失败
    DepartmentDeleteErr1 = 4000007 // 该部门下存在用户,无法删除
    VettingExist           = 4100001 // 审批已存在
    VettingNotExist        = 4100002 // 审批不存在
    VettingListErr         = 4100003 // 获取审批列表失败
    VettingSetErr          = 4100004 // 设置审批失败
    VettingNotBelongToUser = 4100005 // 审批不属于当前用户
    SatisfactionExist     = 4200001 // 满意度已存在
    SatisfactionNotExist  = 4200002 // 满意度不存在
    SatisfactionListErr   = 4200003 // 获取满意度列表失败
    SatisfactionSetErr    = 4200004 // 设置满意度失败
    SatisfactionUpdateErr = 4200005 // 更新满意度失败
    TimelyRateExist     = 4300001 // 及时率已存在
    TimelyRateNotExist  = 4300002 // 及时率不存在
    TimelyRateListErr   = 4300003 // 获取及时率列表失败
    TimelyRateSetErr    = 4300004 // 设置及时率失败
    TimelyRateUpdateErr = 4300005 // 更新及时率失败
    SolveRateExist     = 4400001 // 解决率已存在
    SolveRateNotExist  = 4400002 // 解决率不存在
    SolveRateListErr   = 4400003 // 获取解决率列表失败
    SolveRateSetErr    = 4400004 // 设置解决率失败
    SolveRateUpdateErr = 4400005 // 更新解决率失败
    IsVisitExist     = 4500001 // 服务人员是否来过已存在
    IsVisitNotExist  = 4500002 // 服务人员是否来过不存在
    IsVisitListErr   = 4500003 // 获取服务人员是否来过列表失败
    IsVisitSetErr    = 4500004 // 设置服务人员是否来过失败
    IsVisitUpdateErr = 4500005 // 更新服务人员是否来过失败
    ReportSourceExist     = 4600001 // 报表来源已存在
    ReportSourceNotExist  = 4600002 // 报表来源不存在
    ReportSourceListErr   = 4600003 // 获取报表来源列表失败
    ReportSourceSetErr    = 4600004 // 设置报表来源失败
    ReportSourceUpdateErr = 4600005 // 更新报表来源失败
    OrderTypeExist     = 4700001 // 工单类型已存在
    OrderTypeNotExist  = 4700002 // 工单类型不存在
    OrderTypeListErr   = 4700003 // 获取工单类型列表失败
    OrderTypeSetErr    = 4700004 // 设置工单类型失败
    OrderTypeUpdateErr = 4700005 // 更新工单类型失败
    ServiceContractStatusExist     = 4800001 // 服务合同状态已存在
    ServiceContractStatusNotExist  = 4400002 // 服务合同状态不存在
    ServiceContractStatusListErr   = 4800003 // 获取服务合同状态列表失败
    ServiceContractStatusSetErr    = 4800004 // 设置服务合同状态失败
    ServiceContractStatusUpdateErr = 4800005 // 更新服务合同状态失败
    ServiceContractTypeExist     = 4900001 // 服务合同类型已存在
    ServiceContractTypeNotExist  = 4900002 // 服务合同类型不存在
    ServiceContractTypeListErr   = 4900003 // 获取服务合同类型列表失败
    ServiceContractTypeSetErr    = 4900004 // 设置服务合同类型失败
    ServiceContractTypeUpdateErr = 4900005 // 更新服务合同类型失败
    RefundMethodExist     = 5000001 // 退款方式已存在
    RefundMethodNotExist  = 5000002 // 退款方式不存在
    RefundMethodListErr   = 5000003 // 获取退款方式列表失败
    RefundMethodSetErr    = 5000004 // 设置退款方式失败
    RefundMethodUpdateErr = 5000005 // 更新退款方式失败
    IsInvoiceExist     = 5100001 // 是否开票已存在
    IsInvoiceNotExist  = 5100002 // 是否开票不存在
    IsInvoiceListErr   = 5100003 // 获取是否开票列表失败
    IsInvoiceSetErr    = 5100004 // 设置是否开票失败
    IsInvoiceUpdateErr = 5100005 // 更新是否开票失败
    AccountIdExist     = 5200001 // 账户已存在
    AccountIdNotExist  = 5200002 // 账户不存在
    AccountIdListErr   = 5200003 // 获取账户列表失败
    AccountIdSetErr    = 5200004 // 设置账户失败
    AccountIdUpdateErr = 5200005 // 更新账户失败
    SalesReturnStatusExist     = 5300001 // 退货单状态已存在
    SalesReturnStatusNotExist  = 5300002 // 退货单状态不存在
    SalesReturnStatusListErr   = 5300003 // 获取退货单状态列表失败
    SalesReturnStatusSetErr    = 5300004 // 设置退货单状态失败
    SalesReturnStatusUpdateErr = 5300005 // 更新退货单状态失败
    RepositoryExist     = 5400001 // 退货仓库已存在
    RepositoryNotExist  = 5400002 // 退货仓库不存在
    RepositoryListErr   = 5400003 // 获取退货仓库列表失败
    RepositorySetErr    = 5400004 // 设置退货仓库失败
    RepositoryUpdateErr = 5400005 // 更新退货仓库失败
    QuotationStatusExist     = 5500001 // 报价单状态已存在
    QuotationStatusNotExist  = 5500002 // 报价单状态不存在
    QuotationStatusListErr   = 5500003 // 获取报价单状态列表失败
    QuotationStatusSetErr    = 5500004 // 设置报价单状态失败
    QuotationStatusUpdateErr = 5500005 // 更新报价单状态失败
    CurrencyExist     = 5600001 // 币种已存在
    CurrencyNotExist  = 5600002 // 币种不存在
    CurrencyListErr   = 5600003 // 获取币种列表失败
    CurrencySetErr    = 5600004 // 设置币种失败
    CurrencyUpdateErr = 5600005 // 更新币种失败
    AssignErr            = 5700001 // 分配失败
    AssignWrongMemberId  = 5700002 // 分配失败,分配人为空
    AssignWrongId        = 5700003 // 分配失败,分配对象为空
    AssignWrongModelType = 5700004 // 分配失败,分配对象类型为空
)
package ecode
const (
    OK = 200
    UnknownErr                      = 2001 // 未知错误
    DBErr                           = 2002 // db错误
    RedisErr                        = 2003 // redis错误
    ParamsErr                       = 2004 // 请求参数错误
    UserNotExist                    = 2005 // 用户不存在
    PasswordErr                     = 2006 // 密码错误
    UserForbidden                   = 2007 // 用户被禁用
    CaptchaGenerateFailed           = 2008 // 验证码生成失败
    CaptchaErr                      = 2009 // 验证码错误
    CreateTokenErr                  = 2010 // 创建token失败
    JWTInBlackList                  = 2011 // JWT在白名单
    JWTDisabled                     = 2012 // JWT失效
    JWTEmpty                        = 2013 // JWT为空
    JWTExpire                       = 2014 // JWT过期
    JWTParseErr                     = 2015 // JWT解析失败
    UserNameExistErr                = 2016 // 用户名已存在
    ChildrenExistErr                = 2017 // 存在子菜单
    MenuNotExist                    = 2018 // 菜单不存在
    MenuNameExistErr                = 2019 // 菜单名已存在
    DeviceIPExistErr                = 2020 // 该设备IP已存在
    DeviceInstallRancherErr         = 2021 // 安装rancher失败
    ClusterNameExistErr             = 2022 // 該集群已經存在
    CreateDatabaseErr               = 2023 // 创建数据库错误
    CreateDatabaseUserErr           = 2024 // 创建数据库用户错误
    CreateClusterErr                = 2025 // 创建集群失败
    GetClusterErr                   = 2026 // 获取集群失败
    GetClusterKubeConfigErr         = 2027 // 获取kube config失败
    ClusterInstallDockerErr         = 2028 // 安装docker失败
    ClusterInstallKubectlErr        = 2029 // 安装kubectl失败
    ClusterDeployKubernetesRolesErr = 2030 // 部署kubernetes角色失败
    ClusterGetNodeCommandErr        = 2031 // 获取node command失败
    UserHasCluster                  = 2032 // 删除用户失败,该用户下存在集群
    NoPowerErr                      = 2033 // 没有权限
    UploadImageErr                  = 2034 // 上传图像失败
    InvalidParams = 100001 // 请求参数错误
    CountryExist      = 200001 // 国家已存在
    CountryNotExist   = 200002 // 国家不存在
    CountryGetListErr = 200003 // 获取国家列表失败
    ProvinceExist      = 300001 // 省份已存在
    ProvinceNotExist   = 300002 // 省份不存在
    ProvinceGetListErr = 300003 // 获取省份列表失败
    ProvinceSetErr     = 300004 // 设置省份失败
    CityExist     = 400001 // 城市已存在
    CityNotExist  = 400002 // 城市不存在
    CityListErr   = 400003 // 获取城市列表失败
    CitySetErr    = 400004 // 设置城市失败
    CityDeleteErr = 400005 // 删除城市失败
    RegionExist    = 500001 // 区县已存在
    RegionNotExist = 500002 // 区县不存在
    RegionListErr  = 500003 // 获取区县列表失败
    RegionSetErr   = 500004 // 设置区县失败
    ContactExist     = 600001 // 联系人已存在
    ContactNotExist  = 600002 // 联系人不存在
    ContactListErr   = 600003 // 获取联系人列表失败
    ContactDeleteErr = 600004 // 删除联系人失败
    ContactUpdateErr = 600005 // 更新联系人失败
    ClientExist     = 700001 // 客户已存在
    ClientNotExist  = 700002 // 客户不存在
    ClientListErr   = 700003 // 获取客户列表失败
    ClientDeleteErr = 700004 // 删除客户失败
    ClientUpdateErr = 700005 // 更新客户失败
    ClientStatusExist    = 800001 // 客户状态已存在
    ClientStatusNotExist = 800002 // 客户状态不存在
    ClientStatusListErr  = 800003 // 获取客户状态列表失败
    ClientStatusSetErr   = 800004 // 设置客户状态失败
    ClientTypeExist    = 900001 // 客户类型已存在
    ClientTypeNotExist = 900002 // 客户类型不存在
    ClientTypeListErr  = 900003 // 获取客户类型列表失败
    ClientTypeSetErr   = 900004 // 设置客户类型失败
    ClientOriginExist    = 1000001 // 客户来源已存在
    ClientOriginNotExist = 1000002 // 客户来源不存在
    ClientOriginListErr  = 1000003 // 获取客户来源列表失败
    ClientOriginSetErr   = 1000004 // 设置客户来源失败
    ClientLevelExist     = 1100001 // 客户级别已存在
    ClientLevelNotExist  = 1100002 // 客户级别不存在
    ClientLevelListErr   = 1100003 // 获取客户级别列表失败
    ClientLevelSetErr    = 1100004 // 设置客户级别失败
    ClientLevelUpdateErr = 1100005 // 更新客户级别失败
    IndustryExist     = 1200001 // 行业已存在
    IndustryNotExist  = 1200002 // 行业不存在
    IndustryListErr   = 1200003 // 获取行业列表失败
    IndustrySetErr    = 1200004 // 设置行业失败
    IndustryUpdateErr = 1200005 // 更新行业失败
    EnterpriseNatureExist     = 1300001 // 企业性质已存在
    EnterpriseNatureNotExist  = 1300002 // 企业性质不存在
    EnterpriseNatureListErr   = 1300003 // 获取企业性质列表失败
    EnterpriseNatureSetErr    = 1300004 // 设置企业性质失败
    EnterpriseNatureUpdateErr = 1300005 // 更新企业性质失败
    RegisteredCapitalExist     = 1400001 // 注册资本已存在
    RegisteredCapitalNotExist  = 1400002 // 注册资本不存在
    RegisteredCapitalListErr   = 1400003 // 获取注册资本列表失败
    RegisteredCapitalSetErr    = 1400004 // 设置注册资本失败
    RegisteredCapitalUpdateErr = 1400005 // 更新注册资本失败
    EnterpriseScaleExist     = 1500001 // 企业规模已存在
    EnterpriseScaleNotExist  = 1500002 // 企业规模不存在
    EnterpriseScaleListErr   = 1500003 // 获取企业规模列表失败
    EnterpriseScaleSetErr    = 1500004 // 设置企业规模失败
    EnterpriseScaleUpdateErr = 1500005 // 更新企业规模失败
    SalesLeadsExist     = 1600001 // 销售线索已存在
    SalesLeadsNotExist  = 1600002 // 销售线索不存在
    SalesLeadsListErr   = 1600003 // 获取销售线索列表失败
    SalesLeadsSetErr    = 1600004 // 设置销售线索失败
    SalesLeadsUpdateErr = 1600005 // 更新销售线索失败
    SalesLeadsDeleteErr = 1600006 // 删除销售线索失败
    SalesSourceExist     = 1700001 // 销售线索来源已存在
    SalesSourceNotExist  = 1700002 // 销售线索来源不存在
    SalesSourceListErr   = 1700003 // 获取销售线索来源列表失败
    SalesSourceSetErr    = 1700004 // 设置销售线索来源失败
    SalesSourceUpdateErr = 1700005 // 更新销售线索来源失败
    FollowRecordExist     = 1800001 // 跟进记录已存在
    FollowRecordNotExist  = 1800002 // 跟进记录不存在
    FollowRecordListErr   = 1800003 // 获取跟进记录列表失败
    FollowRecordSetErr    = 1800004 // 设置跟进记录失败
    FollowRecordUpdateErr = 1800005 // 更新跟进记录失败
    FollowRecordDeleteErr = 1800006 // 删除跟进记录失败
    SaleChanceExist     = 1900001 // 销售机会已存在
    SaleChanceNotExist  = 1900002 // 销售机会不存在
    SaleChanceListErr   = 1900003 // 获取销售机会列表失败
    SaleChanceSetErr    = 1900004 // 设置销售机会失败
    SaleChanceUpdateErr = 1900005 // 更新销售机会失败
    SaleChanceDeleteErr = 1900006 // 删除销售机会失败
    SaleStageExist    = 2000001 // 销售阶段已存在
    SaleStageNotExist = 2000002 // 销售阶段不存在
    SaleStageListErr  = 2000003 // 获取销售阶段列表失败
    SaleStageSetErr   = 2000004 // 设置销售阶段失败
    SaleTypeExist     = 2100001 // 销售类型已存在
    SaleTypeNotExist  = 2100002 // 销售类型不存在
    SaleTypeListErr   = 2100003 // 获取销售类型列表失败
    SaleTypeSetErr    = 2100004 // 设置销售类型失败
    SaleTypeUpdateErr = 2100005 // 更新销售类型失败
    SaleTypeDeleteErr = 2100006 // 删除销售类型失败
    RegularCustomersExist     = 2200001 // 固定客户已存在
    RegularCustomersNotExist  = 2200002 // 固定客户不存在
    RegularCustomersListErr   = 2200003 // 获取固定客户列表失败
    RegularCustomersSetErr    = 2200004 // 设置固定客户失败
    RegularCustomersUpdateErr = 2200005 // 更新固定客户失败
    RegularCustomersDeleteErr = 2200006 // 删除固定客户失败
    PossibilityExist     = 2300001 // 销售机会可能性已存在
    PossibilityNotExist  = 2300002 // 销售机会可能性不存在
    PossibilityListErr   = 2300003 // 获取销售机会可能性列表失败
    PossibilitySetErr    = 2300004 // 设置销售机会可能性失败
    PossibilityUpdateErr = 2300005 // 更新销售机会可能性失败
    PossibilityDeleteErr = 2300006 // 删除销售机会可能性失败
    StatusExist     = 2400001 // 销售机会状态已存在
    StatusNotExist  = 2400002 // 销售机会状态不存在
    StatusListErr   = 2400003 // 获取销售机会状态列表失败
    StatusSetErr    = 2400004 // 设置销售机会状态失败
    StatusUpdateErr = 2400005 // 更新销售机会状态失败
    StatusDeleteErr = 2400006 // 删除销售机会状态失败
    QuotationExist     = 2500001 // 报价单已存在
    QuotationNotExist  = 2500002 // 报价单不存在
    QuotationListErr   = 2500003 // 获取报价单列表失败
    QuotationSetErr    = 2500004 // 设置报价单失败
    QuotationUpdateErr = 2500005 // 更新报价单失败
    QuotationDeleteErr = 2500006 // 删除报价单失败
    MasterOrderExist     = 2600001 // 主订单已存在
    MasterOrderNotExist  = 2600002 // 主订单不存在
    MasterOrderListErr   = 2600003 // 获取主订单列表失败
    MasterOrderSetErr    = 2600004 // 设置主订单失败
    MasterOrderUpdateErr = 2600005 // 更新主订单失败
    MasterOrderDeleteErr = 2600006 // 删除主订单失败
    SubOrderExist     = 2700001 // 子订单已存在
    SubOrderNotExist  = 2700002 // 子订单不存在
    SubOrderListErr   = 2700003 // 获取子订单列表失败
    SubOrderSetErr    = 2700004 // 设置子订单失败
    SubOrderUpdateErr = 2700005 // 更新子订单失败
    SubOrderDeleteErr = 2700006 // 删除子订单失败
    SalesDetailsExist     = 2800001 // 销售明细已存在
    SalesDetailsNotExist  = 2800002 // 销售明细不存在
    SalesDetailsListErr   = 2800003 // 获取销售明细列表失败
    SalesDetailsSetErr    = 2800004 // 设置销售明细失败
    SalesDetailsUpdateErr = 2800005 // 更新销售明细失败
    SalesDetailsDeleteErr = 2800006 // 删除销售明细失败
    SalesReturnExist     = 2900001 // 销售退货单已存在
    SalesReturnNotExist  = 2900002 // 销售退货单不存在
    SalesReturnListErr   = 2900003 // 获取销售退货单列表失败
    SalesReturnSetErr    = 2900004 // 设置销售退货单失败
    SalesReturnUpdateErr = 2900005 // 更新销售退货单失败
    SalesReturnDeleteErr = 2900006 // 删除销售退货单失败
    SalesRefundExist     = 3000001 // 销售退款单已存在
    SalesRefundNotExist  = 3000002 // 销售退款单不存在
    SalesRefundListErr   = 3000003 // 获取销售退款单列表失败
    SalesRefundSetErr    = 3000004 // 设置销售退款单失败
    SalesRefundUpdateErr = 3000005 // 更新销售退款单失败
    SalesRefundDeleteErr = 3000006 // 删除销售退款单失败
    ContractExist     = 3100001 // 合同已存在
    ContractNotExist  = 3100002 // 合同不存在
    ContractListErr   = 3100003 // 获取合同列表失败
    ContractSetErr    = 3100004 // 设置合同失败
    ContractUpdateErr = 3100005 // 更新合同失败
    ContractDeleteErr = 3100006 // 删除合同失败
    PlanExist     = 3200001 // 计划已存在
    PlanNotExist  = 3200002 // 计划不存在
    PlanListErr   = 3200003 // 获取计划列表失败
    PlanSetErr    = 3200004 // 设置计划失败
    PlanUpdateErr = 3200005 // 更新计划失败
    PlanDeleteErr = 3200006 // 删除计划失败
    SContractExist     = 3300001 // 服务合同已存在
    SContractNotExist  = 3300002 // 服务合同不存在
    SContractListErr   = 3300003 // 获取服务合同列表失败
    SContractSetErr    = 3300004 // 设置服务合同失败
    SContractUpdateErr = 3300005 // 更新服务合同失败
    SContractDeleteErr = 3300006 // 删除服务合同失败
    OrderManageExist     = 3400001 // 订单管理已存在
    OrderManageNotExist  = 3400002 // 订单管理不存在
    OrderManageListErr   = 3400003 // 获取订单管理列表失败
    OrderManageSetErr    = 3400004 // 设置订单管理失败
    OrderManageUpdateErr = 3400005 // 更新订单管理失败
    OrderManageDeleteErr = 3400006 // 删除订单管理失败
    ServiceFollowupExist     = 3500001 // 服务跟进已存在
    ServiceFollowupNotExist  = 3500002 // 服务跟进不存在
    ServiceFollowupListErr   = 3500003 // 获取服务跟进列表失败
    ServiceFollowupSetErr    = 3500004 // 设置服务跟进失败
    ServiceFollowupUpdateErr = 3500005 // 更新服务跟进失败
    ServiceFollowupDeleteErr = 3500006 // 删除服务跟进失败
    CustomerServiceSheetExist     = 3600001 // 客服单已存在
    CustomerServiceSheetNotExist  = 3600002 // 客服单不存在
    CustomerServiceSheetListErr   = 3600003 // 获取客服单列表失败
    CustomerServiceSheetSetErr    = 3600004 // 设置客服单失败
    CustomerServiceSheetUpdateErr = 3600005 // 更新客服单失败
    CustomerServiceSheetDeleteErr = 3600006 // 删除客服单失败
    ServiceFeeManageExist     = 3700001 // 服务费管理已存在
    ServiceFeeManageNotExist  = 3700002 // 服务费管理不存在
    ServiceFeeManageListErr   = 3700003 // 获取服务费管理列表失败
    ServiceFeeManageSetErr    = 3700004 // 设置服务费管理失败
    ServiceFeeManageUpdateErr = 3700005 // 更新服务费管理失败
    ServiceFeeManageDeleteErr = 3700006 // 删除服务费管理失败
    RoleExist      = 3800001 // 角色已存在
    RoleNotExist   = 3800002 // 角色不存在
    RoleListErr    = 3800003 // 获取角色列表失败
    RoleSetErr     = 3800004 // 设置角色失败
    RoleUpdateErr  = 3800005 // 更新角色失败
    RoleDeleteErr  = 3800006 // 删除角色失败
    RoleDeleteErr1 = 3800007 // 该角色下存在用户,无法删除
    MenuListErr         = 3900001 // 获取菜单列表失败
    SetMenuAuthorityErr = 3900002 // 设置菜单权限失败
    DepartmentExist      = 4000001 // 部门已存在
    DepartmentNotExist   = 4000002 // 部门不存在
    DepartmentListErr    = 4000003 // 获取部门列表失败
    DepartmentSetErr     = 4000004 // 设置部门失败
    DepartmentUpdateErr  = 4000005 // 更新部门失败
    DepartmentDeleteErr  = 4000006 // 删除部门失败
    DepartmentDeleteErr1 = 4000007 // 该部门下存在用户,无法删除
    VettingExist           = 4100001 // 审批已存在
    VettingNotExist        = 4100002 // 审批不存在
    VettingListErr         = 4100003 // 获取审批列表失败
    VettingSetErr          = 4100004 // 设置审批失败
    VettingNotBelongToUser = 4100005 // 审批不属于当前用户
    SatisfactionExist     = 4200001 // 满意度已存在
    SatisfactionNotExist  = 4200002 // 满意度不存在
    SatisfactionListErr   = 4200003 // 获取满意度列表失败
    SatisfactionSetErr    = 4200004 // 设置满意度失败
    SatisfactionUpdateErr = 4200005 // 更新满意度失败
    TimelyRateExist     = 4300001 // 及时率已存在
    TimelyRateNotExist  = 4300002 // 及时率不存在
    TimelyRateListErr   = 4300003 // 获取及时率列表失败
    TimelyRateSetErr    = 4300004 // 设置及时率失败
    TimelyRateUpdateErr = 4300005 // 更新及时率失败
    SolveRateExist     = 4400001 // 解决率已存在
    SolveRateNotExist  = 4400002 // 解决率不存在
    SolveRateListErr   = 4400003 // 获取解决率列表失败
    SolveRateSetErr    = 4400004 // 设置解决率失败
    SolveRateUpdateErr = 4400005 // 更新解决率失败
    IsVisitExist     = 4500001 // 服务人员是否来过已存在
    IsVisitNotExist  = 4500002 // 服务人员是否来过不存在
    IsVisitListErr   = 4500003 // 获取服务人员是否来过列表失败
    IsVisitSetErr    = 4500004 // 设置服务人员是否来过失败
    IsVisitUpdateErr = 4500005 // 更新服务人员是否来过失败
    ReportSourceExist     = 4600001 // 报表来源已存在
    ReportSourceNotExist  = 4600002 // 报表来源不存在
    ReportSourceListErr   = 4600003 // 获取报表来源列表失败
    ReportSourceSetErr    = 4600004 // 设置报表来源失败
    ReportSourceUpdateErr = 4600005 // 更新报表来源失败
    OrderTypeExist     = 4700001 // 工单类型已存在
    OrderTypeNotExist  = 4700002 // 工单类型不存在
    OrderTypeListErr   = 4700003 // 获取工单类型列表失败
    OrderTypeSetErr    = 4700004 // 设置工单类型失败
    OrderTypeUpdateErr = 4700005 // 更新工单类型失败
    ServiceContractStatusExist     = 4800001 // 服务合同状态已存在
    ServiceContractStatusNotExist  = 4400002 // 服务合同状态不存在
    ServiceContractStatusListErr   = 4800003 // 获取服务合同状态列表失败
    ServiceContractStatusSetErr    = 4800004 // 设置服务合同状态失败
    ServiceContractStatusUpdateErr = 4800005 // 更新服务合同状态失败
    ServiceContractTypeExist     = 4900001 // 服务合同类型已存在
    ServiceContractTypeNotExist  = 4900002 // 服务合同类型不存在
    ServiceContractTypeListErr   = 4900003 // 获取服务合同类型列表失败
    ServiceContractTypeSetErr    = 4900004 // 设置服务合同类型失败
    ServiceContractTypeUpdateErr = 4900005 // 更新服务合同类型失败
    RefundMethodExist     = 5000001 // 退款方式已存在
    RefundMethodNotExist  = 5000002 // 退款方式不存在
    RefundMethodListErr   = 5000003 // 获取退款方式列表失败
    RefundMethodSetErr    = 5000004 // 设置退款方式失败
    RefundMethodUpdateErr = 5000005 // 更新退款方式失败
    IsInvoiceExist     = 5100001 // 是否开票已存在
    IsInvoiceNotExist  = 5100002 // 是否开票不存在
    IsInvoiceListErr   = 5100003 // 获取是否开票列表失败
    IsInvoiceSetErr    = 5100004 // 设置是否开票失败
    IsInvoiceUpdateErr = 5100005 // 更新是否开票失败
    AccountIdExist     = 5200001 // 账户已存在
    AccountIdNotExist  = 5200002 // 账户不存在
    AccountIdListErr   = 5200003 // 获取账户列表失败
    AccountIdSetErr    = 5200004 // 设置账户失败
    AccountIdUpdateErr = 5200005 // 更新账户失败
    SalesReturnStatusExist     = 5300001 // 退货单状态已存在
    SalesReturnStatusNotExist  = 5300002 // 退货单状态不存在
    SalesReturnStatusListErr   = 5300003 // 获取退货单状态列表失败
    SalesReturnStatusSetErr    = 5300004 // 设置退货单状态失败
    SalesReturnStatusUpdateErr = 5300005 // 更新退货单状态失败
    RepositoryExist     = 5400001 // 退货仓库已存在
    RepositoryNotExist  = 5400002 // 退货仓库不存在
    RepositoryListErr   = 5400003 // 获取退货仓库列表失败
    RepositorySetErr    = 5400004 // 设置退货仓库失败
    RepositoryUpdateErr = 5400005 // 更新退货仓库失败
    QuotationStatusExist     = 5500001 // 报价单状态已存在
    QuotationStatusNotExist  = 5500002 // 报价单状态不存在
    QuotationStatusListErr   = 5500003 // 获取报价单状态列表失败
    QuotationStatusSetErr    = 5500004 // 设置报价单状态失败
    QuotationStatusUpdateErr = 5500005 // 更新报价单状态失败
    CurrencyExist     = 5600001 // 币种已存在
    CurrencyNotExist  = 5600002 // 币种不存在
    CurrencyListErr   = 5600003 // 获取币种列表失败
    CurrencySetErr    = 5600004 // 设置币种失败
    CurrencyUpdateErr = 5600005 // 更新币种失败
    AssignErr            = 5700001 // 分配失败
    AssignWrongMemberId  = 5700002 // 分配失败,分配人为空
    AssignWrongId        = 5700003 // 分配失败,分配对象为空
    AssignWrongModelType = 5700004 // 分配失败,分配对象类型为空
)
service/client.go
@@ -1,79 +1,79 @@
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
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
}
service/followRecord.go
@@ -1,65 +1,65 @@
package service
import (
    "aps_crm/model"
    "aps_crm/pkg/ecode"
)
type FollowRecordService struct{}
func (FollowRecordService) AddFollowRecord(followRecord *model.FollowRecord) int {
    err := model.NewFollowRecordSearch().Create(followRecord)
    if err != nil {
        return ecode.FollowRecordExist
    }
    return ecode.OK
}
func (FollowRecordService) DeleteFollowRecord(id int) int {
    // check followRecord exist
    _, err := model.NewFollowRecordSearch().SetId(id).First()
    if err != nil {
        return ecode.FollowRecordNotExist
    }
    // delete followRecord
    err = model.NewFollowRecordSearch().SetId(id).Delete()
    if err != nil {
        return ecode.FollowRecordDeleteErr
    }
    return ecode.OK
}
// check followRecord exist
func checkFollowRecordExist(id int) int {
    _, err := model.NewFollowRecordSearch().SetId(id).First()
    if err != nil {
        return ecode.FollowRecordNotExist
    }
    return ecode.OK
}
func (FollowRecordService) UpdateFollowRecord(followRecord *model.FollowRecord) int {
    // check followRecord exist
    errCode := checkFollowRecordExist(followRecord.Id)
    if errCode != ecode.OK {
        return errCode
    }
    // update followRecord
    err := model.NewFollowRecordSearch().SetId(followRecord.Id).Update(followRecord)
    if err != nil {
        return ecode.FollowRecordUpdateErr
    }
    return ecode.OK
}
func (FollowRecordService) GetFollowRecordList(page, pageSize int, keyword string) ([]*model.FollowRecord, int64, int) {
    // get contact list
    contacts, total, err := model.NewFollowRecordSearch().SetKeyword(keyword).SetPage(page, pageSize).FindAll()
    if err != nil {
    return nil, 0, ecode.FollowRecordListErr
    }
    return contacts, total, ecode.OK
package service
import (
    "aps_crm/model"
    "aps_crm/pkg/ecode"
)
type FollowRecordService struct{}
func (FollowRecordService) AddFollowRecord(followRecord *model.FollowRecord) int {
    err := model.NewFollowRecordSearch().Create(followRecord)
    if err != nil {
        return ecode.FollowRecordExist
    }
    return ecode.OK
}
func (FollowRecordService) DeleteFollowRecord(id int) int {
    // check followRecord exist
    _, err := model.NewFollowRecordSearch().SetId(id).First()
    if err != nil {
        return ecode.FollowRecordNotExist
    }
    // delete followRecord
    err = model.NewFollowRecordSearch().SetId(id).Delete()
    if err != nil {
        return ecode.FollowRecordDeleteErr
    }
    return ecode.OK
}
// check followRecord exist
func checkFollowRecordExist(id int) int {
    _, err := model.NewFollowRecordSearch().SetId(id).First()
    if err != nil {
        return ecode.FollowRecordNotExist
    }
    return ecode.OK
}
func (FollowRecordService) UpdateFollowRecord(followRecord *model.FollowRecord) int {
    // check followRecord exist
    errCode := checkFollowRecordExist(followRecord.Id)
    if errCode != ecode.OK {
        return errCode
    }
    // update followRecord
    err := model.NewFollowRecordSearch().SetId(followRecord.Id).Update(followRecord)
    if err != nil {
        return ecode.FollowRecordUpdateErr
    }
    return ecode.OK
}
func (FollowRecordService) GetFollowRecordList(page, pageSize int, keyword string) ([]*model.FollowRecord, int64, int) {
    // get contact list
    contacts, total, err := model.NewFollowRecordSearch().SetKeyword(keyword).SetPage(page, pageSize).FindAll()
    if err != nil {
    return nil, 0, ecode.FollowRecordListErr
    }
    return contacts, total, ecode.OK
}