fix
wangpengfei
2023-08-08 747e890bdae1e5f894a4959d84853e74017ff91b
fix

improve the advancement function, add the status of advancement in progress and the reason for failure of advancement
10个文件已修改
1994 ■■■■■ 已修改文件
api/v1/salesLeads.go 351 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/docs.go 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.json 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.yaml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/request/client.go 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/request/salesLeads.go 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/salesLeads.go 347 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pkg/ecode/code.go 786 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
router/salesLeads.go 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/salesLeads.go 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/salesLeads.go
@@ -1,164 +1,187 @@
package v1
import (
    "aps_crm/constvar"
    "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 SalesLeadsApi struct{}
// Add
//
//    @Tags        SalesLeads
//    @Summary    添加销售线索
//    @Produce    application/json
//    @Param        object    body        request.AddSalesLeads    true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/salesLeads/add [post]
func (s *SalesLeadsApi) Add(c *gin.Context) {
    var params request.AddSalesLeads
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode, salesLeads := checkSalesLeadsParams(params.SalesLeads)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    errCode = salesLeadsService.AddSalesLeads(&salesLeads)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// Delete
//
//    @Tags        SalesLeads
//    @Summary    删除销售线索
//    @Produce    application/json
//    @Param        object    body        request.DeleteSalesLeads true    "查询参数"
//    @Success    200    {object}    contextx.Response{}
//    @Router        /api/salesLeads/delete [delete]
func (s *SalesLeadsApi) Delete(c *gin.Context) {
    var params request.DeleteSalesLeads
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode := salesLeadsService.DeleteSalesLeads(params.Ids)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// Update
//
//    @Tags        SalesLeads
//    @Summary    更新销售线索
//    @Produce    application/json
//    @Param        object    body        request.UpdateSalesLeads    true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/salesLeads/update [put]
func (s *SalesLeadsApi) Update(c *gin.Context) {
    var params request.UpdateSalesLeads
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode, salesLeads := checkSalesLeadsParams(params.SalesLeads)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    salesLeads.Id = params.Id
    errCode = salesLeadsService.UpdateSalesLeads(&salesLeads)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
func checkSalesLeadsParams(params request.SalesLeads) (errCode int, salesLeads model.SalesLeads) {
    //if params.Name == "" {
    //    return ecode.InvalidParams, salesLeads
    //}
    //
    //if params.Number == "" {
    //    return ecode.InvalidParams, salesLeads
    //}
    //
    //if params.SalesSourcesId == 0 {
    //    return ecode.InvalidParams, salesLeads
    //}
    //
    //if params.MemberId == 0 {
    //    return ecode.InvalidParams, salesLeads
    //}
    salesLeads = model.SalesLeads{
        Name:            params.Name,
        Number:          params.Number,
        ContactName:     params.ContactName,
        ContactPhone:    params.ContactPhone,
        ContactPosition: params.ContactPosition,
        SalesStatus:     constvar.SalesStatusNew,
        SalesSourcesId:  params.SalesSourcesId,
        MemberId:        params.MemberId,
        Desc:            params.Desc,
        Address: model.Address{
            ProvinceId: params.ProvinceId,
            CityId:     params.CityId,
            RegionId:   params.RegionId,
            CountryId:  params.CountryId,
        },
    }
    return ecode.OK, salesLeads
}
// List
//
//    @Tags        SalesLeads
//    @Summary    销售线索列表
//    @Produce    application/json
//    @Param        object    body        request.GetSalesLeadsList    true    "参数"
//    @Success    200        {object}    contextx.Response{data=response.SalesLeadsResponse}
//    @Router        /api/salesLeads/list [post]
func (s *SalesLeadsApi) List(c *gin.Context) {
    var params request.GetSalesLeadsList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    salesLeadss, total, errCode := salesLeadsService.GetSalesLeadsList(params.Page, params.PageSize, params.Keyword)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.OkWithDetailed(response.SalesLeadsResponse{
        List:  salesLeadss,
        Count: int(total),
    })
}
package v1
import (
    "aps_crm/constvar"
    "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 SalesLeadsApi struct{}
// Add
//
//    @Tags        SalesLeads
//    @Summary    添加销售线索
//    @Produce    application/json
//    @Param        object    body        request.AddSalesLeads    true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/salesLeads/add [post]
func (s *SalesLeadsApi) Add(c *gin.Context) {
    var params request.AddSalesLeads
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode, salesLeads := checkSalesLeadsParams(params.SalesLeads)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    errCode = salesLeadsService.AddSalesLeads(&salesLeads)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// Delete
//
//    @Tags        SalesLeads
//    @Summary    删除销售线索
//    @Produce    application/json
//    @Param        object    body        request.DeleteSalesLeads true    "查询参数"
//    @Success    200    {object}    contextx.Response{}
//    @Router        /api/salesLeads/delete [delete]
func (s *SalesLeadsApi) Delete(c *gin.Context) {
    var params request.DeleteSalesLeads
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode := salesLeadsService.DeleteSalesLeads(params.Ids)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
// Update
//
//    @Tags        SalesLeads
//    @Summary    更新销售线索
//    @Produce    application/json
//    @Param        object    body        request.UpdateSalesLeads    true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/salesLeads/update [put]
func (s *SalesLeadsApi) Update(c *gin.Context) {
    var params request.UpdateSalesLeads
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode, salesLeads := checkSalesLeadsParams(params.SalesLeads)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    salesLeads.Id = params.Id
    errCode = salesLeadsService.UpdateSalesLeads(&salesLeads)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
func checkSalesLeadsParams(params request.SalesLeads) (errCode int, salesLeads model.SalesLeads) {
    //if params.Name == "" {
    //    return ecode.InvalidParams, salesLeads
    //}
    //
    //if params.Number == "" {
    //    return ecode.InvalidParams, salesLeads
    //}
    //
    //if params.SalesSourcesId == 0 {
    //    return ecode.InvalidParams, salesLeads
    //}
    //
    //if params.MemberId == 0 {
    //    return ecode.InvalidParams, salesLeads
    //}
    salesLeads = model.SalesLeads{
        Name:            params.Name,
        Number:          params.Number,
        ContactName:     params.ContactName,
        ContactPhone:    params.ContactPhone,
        ContactPosition: params.ContactPosition,
        SalesStatus:     constvar.SalesStatusNew,
        SalesSourcesId:  params.SalesSourcesId,
        MemberId:        params.MemberId,
        Desc:            params.Desc,
        Address: model.Address{
            ProvinceId: params.ProvinceId,
            CityId:     params.CityId,
            RegionId:   params.RegionId,
            CountryId:  params.CountryId,
        },
    }
    return ecode.OK, salesLeads
}
// List
//
//    @Tags        SalesLeads
//    @Summary    销售线索列表
//    @Produce    application/json
//    @Param        object    body        request.GetSalesLeadsList    true    "参数"
//    @Success    200        {object}    contextx.Response{data=response.SalesLeadsResponse}
//    @Router        /api/salesLeads/list [post]
func (s *SalesLeadsApi) List(c *gin.Context) {
    var params request.GetSalesLeadsList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    salesLeadss, total, errCode := salesLeadsService.GetSalesLeadsList(params.Page, params.PageSize, params.Keyword)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.OkWithDetailed(response.SalesLeadsResponse{
        List:  salesLeadss,
        Count: int(total),
    })
}
// Push
//
//    @Tags        SalesLeads
//    @Summary    推进销售线索
//    @Produce    application/json
//    @Param        object    body        request.PushSalesLeads true    "查询参数"
//    @Success    200        {object}    contextx.Response{}
//    @Router        /api/salesLeads/push [post]
func (s *SalesLeadsApi) Push(c *gin.Context) {
    var params request.PushSalesLeads
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    errCode := salesLeadsService.PushSalesLeads(params.Id, params.Step, params.Reason)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
    }
    ctx.Ok()
}
docs/docs.go
@@ -6682,6 +6682,36 @@
                }
            }
        },
        "/api/salesLeads/push": {
            "post": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "SalesLeads"
                ],
                "summary": "推进销售线索",
                "parameters": [
                    {
                        "description": "查询参数",
                        "name": "object",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/request.PushSalesLeads"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/contextx.Response"
                        }
                    }
                }
            }
        },
        "/api/salesLeads/update": {
            "put": {
                "produces": [
@@ -11124,6 +11154,9 @@
                "province_id": {
                    "type": "integer"
                },
                "reason": {
                    "type": "string"
                },
                "region": {
                    "$ref": "#/definitions/model.Region"
                },
@@ -13539,6 +13572,7 @@
                    "type": "integer"
                },
                "search_map": {
                    "description": "搜索条件: map[string]interface{}{\"name\": \"xxx\"}; \"not_contact\": 超过15天未联系; \"public_sea\": 公海客户",
                    "type": "object",
                    "additionalProperties": true
                }
@@ -13907,6 +13941,25 @@
                }
            }
        },
        "request.PushSalesLeads": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer"
                },
                "reason": {
                    "type": "string"
                },
                "step": {
                    "description": "商机状态: 1: 跟进中; -1:失败",
                    "allOf": [
                        {
                            "$ref": "#/definitions/constvar.SalesStatus"
                        }
                    ]
                }
            }
        },
        "request.Register": {
            "type": "object",
            "properties": {
docs/swagger.json
@@ -6670,6 +6670,36 @@
                }
            }
        },
        "/api/salesLeads/push": {
            "post": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "SalesLeads"
                ],
                "summary": "推进销售线索",
                "parameters": [
                    {
                        "description": "查询参数",
                        "name": "object",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/request.PushSalesLeads"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/contextx.Response"
                        }
                    }
                }
            }
        },
        "/api/salesLeads/update": {
            "put": {
                "produces": [
@@ -11112,6 +11142,9 @@
                "province_id": {
                    "type": "integer"
                },
                "reason": {
                    "type": "string"
                },
                "region": {
                    "$ref": "#/definitions/model.Region"
                },
@@ -13527,6 +13560,7 @@
                    "type": "integer"
                },
                "search_map": {
                    "description": "搜索条件: map[string]interface{}{\"name\": \"xxx\"}; \"not_contact\": 超过15天未联系; \"public_sea\": 公海客户",
                    "type": "object",
                    "additionalProperties": true
                }
@@ -13895,6 +13929,25 @@
                }
            }
        },
        "request.PushSalesLeads": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer"
                },
                "reason": {
                    "type": "string"
                },
                "step": {
                    "description": "商机状态: 1: 跟进中; -1:失败",
                    "allOf": [
                        {
                            "$ref": "#/definitions/constvar.SalesStatus"
                        }
                    ]
                }
            }
        },
        "request.Register": {
            "type": "object",
            "properties": {
docs/swagger.yaml
@@ -1189,6 +1189,8 @@
        $ref: '#/definitions/model.Province'
      province_id:
        type: integer
      reason:
        type: string
      region:
        $ref: '#/definitions/model.Region'
      region_id:
@@ -2826,6 +2828,8 @@
        type: integer
      search_map:
        additionalProperties: true
        description: '搜索条件: map[string]interface{}{"name": "xxx"}; "not_contact":
          超过15天未联系; "public_sea": 公海客户'
        type: object
    type: object
  request.GetContactList:
@@ -3076,6 +3080,17 @@
        type: string
      subOrderId:
        type: integer
    type: object
  request.PushSalesLeads:
    properties:
      id:
        type: integer
      reason:
        type: string
      step:
        allOf:
        - $ref: '#/definitions/constvar.SalesStatus'
        description: '商机状态: 1: 跟进中; -1:失败'
    type: object
  request.Register:
    properties:
@@ -9369,6 +9384,25 @@
      summary: 销售线索列表
      tags:
      - SalesLeads
  /api/salesLeads/push:
    post:
      parameters:
      - description: 查询参数
        in: body
        name: object
        required: true
        schema:
          $ref: '#/definitions/request.PushSalesLeads'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/contextx.Response'
      summary: 推进销售线索
      tags:
      - SalesLeads
  /api/salesLeads/update:
    put:
      parameters:
model/request/client.go
@@ -1,38 +1,38 @@
package request
type AddClient struct {
    Client
}
type Client struct {
    Name              string  `json:"name"`                // 公司名称
    Number            string  `json:"number"`              // 公司编号
    ClientStatusId    int     `json:"client_status_id"`    // 客户状态ID
    ClientTypeId      int     `json:"client_type_id"`      // 客户类型ID
    ClientOriginId    int     `json:"client_origin_id"`    // 客户来源ID
    ClientLevelId     int     `json:"client_level_id"`     // 客户等级ID
    MemberId          int     `json:"member_id"`           // 销售负责人ID
    ServiceMemberId   int     `json:"service_member_id"`   // 服务负责人ID
    DetailAddress     string  `json:"detail_address"`      // 详细地址
    Remark            string  `json:"remark"`              // 备注
    NextVisitTime     string  `json:"next_visit_time"`     // 下次回访时间
    LatestServiceTime string  `json:"latest_service_time"` // 最晚服务时间
    Contact           Contact `json:"contact"`
    SalesLeadsId      int     `json:"sales_leads_id"` // 销售线索ID
    Address
    Business
}
type UpdateClient struct {
    Id int `json:"id"`
    Client
}
type GetClientList struct {
    PageInfo
    SearchMap map[string]interface{} `json:"search_map"`
}
type DeleteClient struct {
    Ids []int `json:"ids"`
}
package request
type AddClient struct {
    Client
}
type Client struct {
    Name              string  `json:"name"`                // 公司名称
    Number            string  `json:"number"`              // 公司编号
    ClientStatusId    int     `json:"client_status_id"`    // 客户状态ID
    ClientTypeId      int     `json:"client_type_id"`      // 客户类型ID
    ClientOriginId    int     `json:"client_origin_id"`    // 客户来源ID
    ClientLevelId     int     `json:"client_level_id"`     // 客户等级ID
    MemberId          int     `json:"member_id"`           // 销售负责人ID
    ServiceMemberId   int     `json:"service_member_id"`   // 服务负责人ID
    DetailAddress     string  `json:"detail_address"`      // 详细地址
    Remark            string  `json:"remark"`              // 备注
    NextVisitTime     string  `json:"next_visit_time"`     // 下次回访时间
    LatestServiceTime string  `json:"latest_service_time"` // 最晚服务时间
    Contact           Contact `json:"contact"`
    SalesLeadsId      int     `json:"sales_leads_id"` // 销售线索ID
    Address
    Business
}
type UpdateClient struct {
    Id int `json:"id"`
    Client
}
type GetClientList struct {
    PageInfo
    SearchMap map[string]interface{} `json:"search_map"` // 搜索条件: map[string]interface{}{"name": "xxx"}; "not_contact": 超过15天未联系; "public_sea": 公海客户
}
type DeleteClient struct {
    Ids []int `json:"ids"`
}
model/request/salesLeads.go
@@ -1,31 +1,40 @@
package request
type AddSalesLeads struct {
    SalesLeads
}
type SalesLeads struct {
    Name            string `json:"name"`             // 公司名称
    Number          string `json:"number"`           // 销售线索编号
    ContactName     string `json:"contact_name"`     // 联系人姓名
    ContactPhone    string `json:"contact_phone"`    // 联系人电话
    ContactPosition string `json:"contact_position"` // 联系人职位
    SalesSourcesId  int    `json:"sales_sources_id"` // 商机来源ID
    MemberId        int    `json:"member_id"`        // 销售负责人ID
    Desc            string `json:"desc"`             // 备注
    Address
}
type UpdateSalesLeads struct {
    Id int `json:"id"`
    SalesLeads
}
type GetSalesLeadsList struct {
    PageInfo
    Keyword string `json:"keyword"`
}
type DeleteSalesLeads struct {
    Ids []int `json:"ids"`
}
package request
import "aps_crm/constvar"
type AddSalesLeads struct {
    SalesLeads
}
type SalesLeads struct {
    Name            string `json:"name"`             // 公司名称
    Number          string `json:"number"`           // 销售线索编号
    ContactName     string `json:"contact_name"`     // 联系人姓名
    ContactPhone    string `json:"contact_phone"`    // 联系人电话
    ContactPosition string `json:"contact_position"` // 联系人职位
    SalesSourcesId  int    `json:"sales_sources_id"` // 商机来源ID
    MemberId        int    `json:"member_id"`        // 销售负责人ID
    Desc            string `json:"desc"`             // 备注
    Address
}
type UpdateSalesLeads struct {
    Id int `json:"id"`
    SalesLeads
}
type GetSalesLeadsList struct {
    PageInfo
    Keyword string `json:"keyword"`
}
type DeleteSalesLeads struct {
    Ids []int `json:"ids"`
}
// swagger:model PushSalesLeads
type PushSalesLeads struct {
    Id     int                  `json:"id"`
    Step   constvar.SalesStatus `json:"step"` // 商机状态: 1: 跟进中; -1:失败
    Reason string               `json:"reason"`
}
model/salesLeads.go
@@ -1,173 +1,174 @@
package model
import (
    "aps_crm/constvar"
    "aps_crm/pkg/mysqlx"
    "gorm.io/gorm"
)
type (
    SalesLeads struct {
        Id              int                  `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
        Name            string               `json:"name" gorm:"column:name;unique;type:varchar(255);comment:公司名称"`
        Number          string               `json:"number" gorm:"column:number;type:varchar(255);comment:销售线索编号"`
        ContactName     string               `json:"contact_name" gorm:"column:contact_name;type:varchar(255);comment:联系人姓名"`
        ContactPhone    string               `json:"contact_phone" gorm:"column:contact_phone;type:varchar(255);comment:联系人电话"`
        ContactPosition string               `json:"contact_position" gorm:"column:contact_position;type:varchar(255);comment:联系人职位"`
        SalesSourcesId  int                  `json:"sales_sources_id" gorm:"column:sales_sources_id;type:int(11);comment:商机来源ID"`
        MemberId        int                  `json:"member_id" gorm:"column:member_id;type:int(11);comment:销售负责人ID"`
        SalesStatus     constvar.SalesStatus `json:"sales_status" gorm:"column:sales_status;type:int(11);comment:销售状态"`
        Desc            string               `json:"desc" gorm:"column:desc;type:varchar(255);comment:备注"`
        FollowRecord    []FollowRecord       `gorm:"foreignKey:SalesLeadsId"`
        Address
        gorm.Model `json:"-"`
    }
    SalesLeadsSearch struct {
        SalesLeads
        Orm      *gorm.DB
        Keyword  string
        OrderBy  string
        PageNum  int
        PageSize int
    }
)
func (SalesLeads) TableName() string {
    return "sales_leads"
}
func NewSalesLeadsSearch(db *gorm.DB) *SalesLeadsSearch {
    if db == nil {
        db = mysqlx.GetDB()
    }
    return &SalesLeadsSearch{
        Orm: db,
    }
}
func (slf *SalesLeadsSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&SalesLeads{})
    if slf.Keyword != "" {
        db = db.Where("name LIKE ?", "%"+slf.Keyword+"%")
    }
    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.Number != "" {
        db = db.Where("number = ?", slf.Number)
    }
    if slf.ContactName != "" {
        db = db.Where("contact_name = ?", slf.ContactName)
    }
    if slf.ContactPhone != "" {
        db = db.Where("contact_phone = ?", slf.ContactPhone)
    }
    if slf.ContactPosition != "" {
        db = db.Where("contact_position = ?", slf.ContactPosition)
    }
    if slf.SalesSourcesId != 0 {
        db = db.Where("sales_sources_id = ?", slf.SalesSourcesId)
    }
    if slf.MemberId != 0 {
        db = db.Where("member_id = ?", slf.MemberId)
    }
    return db
}
func (slf *SalesLeadsSearch) Create(record *SalesLeads) error {
    var db = slf.build()
    return db.Create(record).Error
}
func (slf *SalesLeadsSearch) Update(record *SalesLeads) error {
    var db = slf.build()
    return db.Updates(record).Error
}
func (slf *SalesLeadsSearch) Delete() error {
    var db = slf.build()
    return db.Delete(&SalesLeads{}).Error
}
func (slf *SalesLeadsSearch) Find() (result []SalesLeads, err error) {
    var db = slf.build()
    err = db.Find(&result).Error
    return
}
func (slf *SalesLeadsSearch) FindOne() (result SalesLeads, err error) {
    var db = slf.build()
    err = db.First(&result).Error
    return
}
func (slf *SalesLeadsSearch) FindAll() ([]*SalesLeads, int64, error) {
    var db = slf.build()
    var records = make([]*SalesLeads, 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").Find(&records).Error
    return records, total, err
}
func (slf *SalesLeadsSearch) SetId(id int) *SalesLeadsSearch {
    slf.Id = id
    return slf
}
func (slf *SalesLeadsSearch) SetName(name string) *SalesLeadsSearch {
    slf.Name = name
    return slf
}
func (slf *SalesLeadsSearch) First() (result SalesLeads, err error) {
    var db = slf.build()
    err = db.First(&result).Error
    return
}
func (slf *SalesLeadsSearch) SetKeyword(keyword string) *SalesLeadsSearch {
    slf.Keyword = keyword
    return slf
}
func (slf *SalesLeadsSearch) SetPage(page, size int) *SalesLeadsSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *SalesLeadsSearch) SetOrder(order string) *SalesLeadsSearch {
    slf.OrderBy = order
    return slf
}
func (slf *SalesLeadsSearch) UpdateMap(data map[string]interface{}) error {
    var db = slf.build()
    return db.Updates(data).Error
}
func (slf *SalesLeadsSearch) SetIds(ids []int) *SalesLeadsSearch {
    slf.Orm = slf.Orm.Where("id in (?)", ids)
    return slf
}
package model
import (
    "aps_crm/constvar"
    "aps_crm/pkg/mysqlx"
    "gorm.io/gorm"
)
type (
    SalesLeads struct {
        Id              int                  `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
        Name            string               `json:"name" gorm:"column:name;unique;type:varchar(255);comment:公司名称"`
        Number          string               `json:"number" gorm:"column:number;type:varchar(255);comment:销售线索编号"`
        ContactName     string               `json:"contact_name" gorm:"column:contact_name;type:varchar(255);comment:联系人姓名"`
        ContactPhone    string               `json:"contact_phone" gorm:"column:contact_phone;type:varchar(255);comment:联系人电话"`
        ContactPosition string               `json:"contact_position" gorm:"column:contact_position;type:varchar(255);comment:联系人职位"`
        SalesSourcesId  int                  `json:"sales_sources_id" gorm:"column:sales_sources_id;type:int(11);comment:商机来源ID"`
        MemberId        int                  `json:"member_id" gorm:"column:member_id;type:int(11);comment:销售负责人ID"`
        SalesStatus     constvar.SalesStatus `json:"sales_status" gorm:"column:sales_status;type:int(11);comment:销售状态"`
        Desc            string               `json:"desc" gorm:"column:desc;type:varchar(255);comment:备注"`
        Reason          string               `json:"reason" gorm:"column:reason;type:text;comment:失败原因"`
        FollowRecord    []FollowRecord       `gorm:"foreignKey:SalesLeadsId"`
        Address
        gorm.Model `json:"-"`
    }
    SalesLeadsSearch struct {
        SalesLeads
        Orm      *gorm.DB
        Keyword  string
        OrderBy  string
        PageNum  int
        PageSize int
    }
)
func (SalesLeads) TableName() string {
    return "sales_leads"
}
func NewSalesLeadsSearch(db *gorm.DB) *SalesLeadsSearch {
    if db == nil {
        db = mysqlx.GetDB()
    }
    return &SalesLeadsSearch{
        Orm: db,
    }
}
func (slf *SalesLeadsSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&SalesLeads{})
    if slf.Keyword != "" {
        db = db.Where("name LIKE ?", "%"+slf.Keyword+"%")
    }
    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.Number != "" {
        db = db.Where("number = ?", slf.Number)
    }
    if slf.ContactName != "" {
        db = db.Where("contact_name = ?", slf.ContactName)
    }
    if slf.ContactPhone != "" {
        db = db.Where("contact_phone = ?", slf.ContactPhone)
    }
    if slf.ContactPosition != "" {
        db = db.Where("contact_position = ?", slf.ContactPosition)
    }
    if slf.SalesSourcesId != 0 {
        db = db.Where("sales_sources_id = ?", slf.SalesSourcesId)
    }
    if slf.MemberId != 0 {
        db = db.Where("member_id = ?", slf.MemberId)
    }
    return db
}
func (slf *SalesLeadsSearch) Create(record *SalesLeads) error {
    var db = slf.build()
    return db.Create(record).Error
}
func (slf *SalesLeadsSearch) Update(record *SalesLeads) error {
    var db = slf.build()
    return db.Updates(record).Error
}
func (slf *SalesLeadsSearch) Delete() error {
    var db = slf.build()
    return db.Delete(&SalesLeads{}).Error
}
func (slf *SalesLeadsSearch) Find() (result []SalesLeads, err error) {
    var db = slf.build()
    err = db.Find(&result).Error
    return
}
func (slf *SalesLeadsSearch) FindOne() (result SalesLeads, err error) {
    var db = slf.build()
    err = db.First(&result).Error
    return
}
func (slf *SalesLeadsSearch) FindAll() ([]*SalesLeads, int64, error) {
    var db = slf.build()
    var records = make([]*SalesLeads, 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").Find(&records).Error
    return records, total, err
}
func (slf *SalesLeadsSearch) SetId(id int) *SalesLeadsSearch {
    slf.Id = id
    return slf
}
func (slf *SalesLeadsSearch) SetName(name string) *SalesLeadsSearch {
    slf.Name = name
    return slf
}
func (slf *SalesLeadsSearch) First() (result SalesLeads, err error) {
    var db = slf.build()
    err = db.First(&result).Error
    return
}
func (slf *SalesLeadsSearch) SetKeyword(keyword string) *SalesLeadsSearch {
    slf.Keyword = keyword
    return slf
}
func (slf *SalesLeadsSearch) SetPage(page, size int) *SalesLeadsSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *SalesLeadsSearch) SetOrder(order string) *SalesLeadsSearch {
    slf.OrderBy = order
    return slf
}
func (slf *SalesLeadsSearch) UpdateMap(data map[string]interface{}) error {
    var db = slf.build()
    return db.Updates(data).Error
}
func (slf *SalesLeadsSearch) SetIds(ids []int) *SalesLeadsSearch {
    slf.Orm = slf.Orm.Where("id in (?)", ids)
    return slf
}
pkg/ecode/code.go
@@ -1,393 +1,393 @@
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 // 更新联系人失败
    ContactAssignErr = 600006 // 分配联系人失败
    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 // 删除跟进记录失败
    FollowRecordAssignErr = 1800007 // 分配跟进记录失败
    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 // 更新联系人失败
    ContactAssignErr = 600006 // 分配联系人失败
    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 // 获取销售线索列表失败
    SalesLeadsStatusErr = 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 // 删除跟进记录失败
    FollowRecordAssignErr = 1800007 // 分配跟进记录失败
    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 // 分配失败,分配对象类型为空
)
router/salesLeads.go
@@ -1,19 +1,20 @@
package router
import (
    v1 "aps_crm/api/v1"
    "github.com/gin-gonic/gin"
)
type SalesLeadsRouter struct{}
func (s *SalesLeadsRouter) InitSalesLeadsRouter(router *gin.RouterGroup) {
    salesLeadsRouter := router.Group("salesLeads")
    salesLeadsApi := v1.ApiGroup.SalesLeadsApi
    {
        salesLeadsRouter.POST("add", salesLeadsApi.Add)             // 添加销售线索
        salesLeadsRouter.DELETE("delete", salesLeadsApi.Delete)     // 删除销售线索
        salesLeadsRouter.PUT("update", salesLeadsApi.Update)        // 更新销售线索
        salesLeadsRouter.POST("list", salesLeadsApi.List)            // 获取销售线索列表
    }
}
package router
import (
    v1 "aps_crm/api/v1"
    "github.com/gin-gonic/gin"
)
type SalesLeadsRouter struct{}
func (s *SalesLeadsRouter) InitSalesLeadsRouter(router *gin.RouterGroup) {
    salesLeadsRouter := router.Group("salesLeads")
    salesLeadsApi := v1.ApiGroup.SalesLeadsApi
    {
        salesLeadsRouter.POST("add", salesLeadsApi.Add)         // 添加销售线索
        salesLeadsRouter.DELETE("delete", salesLeadsApi.Delete) // 删除销售线索
        salesLeadsRouter.PUT("update", salesLeadsApi.Update)    // 更新销售线索
        salesLeadsRouter.POST("list", salesLeadsApi.List)       // 获取销售线索列表
        salesLeadsRouter.POST("push", salesLeadsApi.Push)       // 推进销售线索
    }
}
service/salesLeads.go
@@ -1,76 +1,108 @@
package service
import (
    "aps_crm/model"
    "aps_crm/pkg/ecode"
)
type SalesLeadsService struct{}
func (SalesLeadsService) AddSalesLeads(salesLeads *model.SalesLeads) int {
    err := model.NewSalesLeadsSearch(nil).Create(salesLeads)
    if err != nil {
        return ecode.SalesLeadsExist
    }
    return ecode.OK
}
func (SalesLeadsService) UpdateSalesLeads(salesLeads *model.SalesLeads) int {
    // update salesLeads
    err := model.NewSalesLeadsSearch(nil).SetId(salesLeads.Id).Update(salesLeads)
    if err != nil {
        return ecode.SalesLeadsUpdateErr
    }
    return ecode.OK
}
// CheckSalesLeadsExist check salesLeads exist
func CheckSalesLeadsExist(id int) int {
    tmp, err := model.NewSalesLeadsSearch(nil).SetId(id).Find()
    if err != nil {
        return ecode.SalesLeadsNotExist
    }
    if len(tmp) == 0 {
        return ecode.SalesLeadsNotExist
    }
    return ecode.OK
}
func (SalesLeadsService) GetSalesLeadsList(page, pageSize int, keyword string) ([]*model.SalesLeads, int64, int) {
    // get contact list
    contacts, total, err := model.NewSalesLeadsSearch(nil).SetKeyword(keyword).SetPage(page, pageSize).FindAll()
    if err != nil {
        return nil, 0, ecode.SalesLeadsListErr
    }
    return contacts, total, ecode.OK
}
func (SalesLeadsService) Assign(ids []int, memberId int) int {
    // check salesLeads exist
    //errCode := CheckSalesLeadsExist(id)
    //if errCode != ecode.OK {
    //    return errCode
    //}
    // update salesLeads
    err := model.NewSalesLeadsSearch(nil).SetIds(ids).UpdateMap(map[string]interface{}{
        "member_id": memberId,
    })
    if err != nil {
        return ecode.SalesLeadsUpdateErr
    }
    return ecode.OK
}
func (SalesLeadsService) DeleteSalesLeads(ids []int) int {
    // delete client
    err := model.NewSalesLeadsSearch(nil).SetIds(ids).Delete()
    if err != nil {
        return ecode.SalesLeadsDeleteErr
    }
    return ecode.OK
}
package service
import (
    "aps_crm/constvar"
    "aps_crm/model"
    "aps_crm/pkg/ecode"
)
type SalesLeadsService struct{}
func (SalesLeadsService) AddSalesLeads(salesLeads *model.SalesLeads) int {
    err := model.NewSalesLeadsSearch(nil).Create(salesLeads)
    if err != nil {
        return ecode.SalesLeadsExist
    }
    return ecode.OK
}
func (SalesLeadsService) UpdateSalesLeads(salesLeads *model.SalesLeads) int {
    // update salesLeads
    err := model.NewSalesLeadsSearch(nil).SetId(salesLeads.Id).Update(salesLeads)
    if err != nil {
        return ecode.SalesLeadsUpdateErr
    }
    return ecode.OK
}
// CheckSalesLeadsExist check salesLeads exist
func CheckSalesLeadsExist(id int) int {
    tmp, err := model.NewSalesLeadsSearch(nil).SetId(id).Find()
    if err != nil {
        return ecode.SalesLeadsNotExist
    }
    if len(tmp) == 0 {
        return ecode.SalesLeadsNotExist
    }
    return ecode.OK
}
func (SalesLeadsService) GetSalesLeadsList(page, pageSize int, keyword string) ([]*model.SalesLeads, int64, int) {
    // get contact list
    contacts, total, err := model.NewSalesLeadsSearch(nil).SetKeyword(keyword).SetPage(page, pageSize).FindAll()
    if err != nil {
        return nil, 0, ecode.SalesLeadsListErr
    }
    return contacts, total, ecode.OK
}
func (SalesLeadsService) Assign(ids []int, memberId int) int {
    // check salesLeads exist
    //errCode := CheckSalesLeadsExist(id)
    //if errCode != ecode.OK {
    //    return errCode
    //}
    // update salesLeads
    err := model.NewSalesLeadsSearch(nil).SetIds(ids).UpdateMap(map[string]interface{}{
        "member_id": memberId,
    })
    if err != nil {
        return ecode.SalesLeadsUpdateErr
    }
    return ecode.OK
}
func (SalesLeadsService) DeleteSalesLeads(ids []int) int {
    // delete client
    err := model.NewSalesLeadsSearch(nil).SetIds(ids).Delete()
    if err != nil {
        return ecode.SalesLeadsDeleteErr
    }
    return ecode.OK
}
func (SalesLeadsService) PushSalesLeads(id int, step constvar.SalesStatus, txt string) int {
    // check salesLeads exist
    errCode := CheckSalesLeadsExist(id)
    if errCode != ecode.OK {
        return errCode
    }
    switch step {
    case constvar.SalesStatusFail:
        err := model.NewSalesLeadsSearch(nil).SetId(id).UpdateMap(map[string]interface{}{
            "sales_status": constvar.SalesStatusFail,
            "reason":       txt,
        })
        if err != nil {
            return ecode.SalesLeadsUpdateErr
        }
    case constvar.SalesStatusIng:
        err := model.NewSalesLeadsSearch(nil).SetId(id).UpdateMap(map[string]interface{}{
            "sales_status": constvar.SalesStatusIng,
        })
        if err != nil {
            return ecode.SalesLeadsUpdateErr
        }
        return ecode.OK
    default:
        return ecode.SalesLeadsStatusErr
    }
    return ecode.OK
}