add
wangpengfei
2023-08-11 1129c91762fdb8c9940d87ca300851bc3065eef2
add

add multi-criteria search to saleChance
7个文件已修改
97 ■■■■ 已修改文件
api/v1/saleChance.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/docs.go 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.yaml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/request/saleChance.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/saleChance.go 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/saleChance.go 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/saleChance.go
@@ -201,7 +201,7 @@
        return
    }
    saleChances, total, errCode := saleChanceService.GetSaleChanceList(params.Page, params.PageSize, params.Keyword)
    saleChances, total, errCode := saleChanceService.GetSaleChanceList(params.Page, params.PageSize, params.SearchMap)
    if errCode != ecode.OK {
        ctx.Fail(errCode)
        return
docs/docs.go
@@ -14640,9 +14640,6 @@
        "request.GetSaleChanceList": {
            "type": "object",
            "properties": {
                "keyword": {
                    "type": "string"
                },
                "page": {
                    "description": "页码",
                    "type": "integer"
@@ -14650,6 +14647,11 @@
                "pageSize": {
                    "description": "每页大小",
                    "type": "integer"
                },
                "search_map": {
                    "description": "搜索条件: map[string]interface{}{\"name\": \"xxx\"}; {\"name\": \"机会名称\", \"client_name\": \"客户名称\",\"number\":\"编号\", \"contact_name\":\"联系人姓名\", \"member_name\": \"销售负责人\", \"status\": \"状态\", \"sale_stage\": \"阶段\", \"possibilities\": \"可能性\", \"expected_time\": \"预计成交时间\", \"budget\": \"资金绝对值\", \"projected_amount\": \"预计合同金额\"}",
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
docs/swagger.json
@@ -14628,9 +14628,6 @@
        "request.GetSaleChanceList": {
            "type": "object",
            "properties": {
                "keyword": {
                    "type": "string"
                },
                "page": {
                    "description": "页码",
                    "type": "integer"
@@ -14638,6 +14635,11 @@
                "pageSize": {
                    "description": "每页大小",
                    "type": "integer"
                },
                "search_map": {
                    "description": "搜索条件: map[string]interface{}{\"name\": \"xxx\"}; {\"name\": \"机会名称\", \"client_name\": \"客户名称\",\"number\":\"编号\", \"contact_name\":\"联系人姓名\", \"member_name\": \"销售负责人\", \"status\": \"状态\", \"sale_stage\": \"阶段\", \"possibilities\": \"可能性\", \"expected_time\": \"预计成交时间\", \"budget\": \"资金绝对值\", \"projected_amount\": \"预计合同金额\"}",
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
docs/swagger.yaml
@@ -3189,14 +3189,19 @@
    type: object
  request.GetSaleChanceList:
    properties:
      keyword:
        type: string
      page:
        description: 页码
        type: integer
      pageSize:
        description: 每页大小
        type: integer
      search_map:
        additionalProperties: true
        description: '搜索条件: map[string]interface{}{"name": "xxx"}; {"name": "机会名称",
          "client_name": "客户名称","number":"编号", "contact_name":"联系人姓名", "member_name":
          "销售负责人", "status": "状态", "sale_stage": "阶段", "possibilities": "可能性", "expected_time":
          "预计成交时间", "budget": "资金绝对值", "projected_amount": "预计合同金额"}'
        type: object
    type: object
  request.GetSalesDetailsList:
    properties:
model/request/saleChance.go
@@ -44,7 +44,7 @@
type GetSaleChanceList struct {
    PageInfo
    Keyword string `json:"keyword"`
    SearchMap map[string]interface{} `json:"search_map"` // 搜索条件: map[string]interface{}{"name": "xxx"}; {"name": "机会名称", "client_name": "客户名称","number":"编号", "contact_name":"联系人姓名", "member_name": "销售负责人", "status": "状态", "sale_stage": "阶段", "possibilities": "可能性", "expected_time": "预计成交时间", "budget": "资金绝对值", "projected_amount": "预计合同金额"}
}
type PushSaleChance struct {
model/saleChance.go
@@ -48,11 +48,11 @@
    SaleChanceSearch struct {
        SaleChance
        Orm      *gorm.DB
        Keyword  string
        OrderBy  string
        PageNum  int
        PageSize int
        Orm       *gorm.DB
        SearchMap map[string]interface{}
        OrderBy   string
        PageNum   int
        PageSize  int
    }
)
@@ -66,14 +66,52 @@
func (slf *SaleChanceSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&SaleChance{})
    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 len(slf.SearchMap) > 0 {
        for key, value := range slf.SearchMap {
            switch v := value.(type) {
            case string:
                if key == "name" || key == "number" {
                    db = db.Where(key+" LIKE ?", "%"+v+"%")
                }
                if key == "client_name" {
                    db = db.Joins("Client").Where("Client.name LIKE ?", "%"+v+"%")
                }
                if key == "contact_name" {
                    db = db.Joins("Contact").Where("Contact.name LIKE ?", "%"+v+"%")
                }
                if key == "member_name" {
                    db = db.Joins("User").Where("User.name LIKE ?", "%"+v+"%")
                }
                if key == "sale_stage" {
                    db = db.Joins("SaleStage").Where("SaleStage.name LIKE ?", "%"+v+"%")
                }
                if key == "possibilities" {
                    db = db.Joins("Possibilities").Where("Possibilities.name LIKE ?", "%"+v+"%")
                }
                if key == "expected_time" {
                    db = db.Where("expected_time LIKE ?", "%"+v+"%")
                }
            case int:
            case float64:
                if key == "member_id" || key == "budget" || key == "projected_amount" {
                    db = db.Where(key+" = ?", v)
                }
            }
        }
    }
    return db
@@ -128,11 +166,6 @@
    return slf
}
func (slf *SaleChanceSearch) SetKeyword(keyword string) *SaleChanceSearch {
    slf.Keyword = keyword
    return slf
}
func (slf *SaleChanceSearch) SetPage(page, size int) *SaleChanceSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
@@ -142,3 +175,8 @@
    slf.OrderBy = order
    return slf
}
func (slf *SaleChanceSearch) SetSearchMap(searchMap map[string]interface{}) *SaleChanceSearch {
    slf.SearchMap = searchMap
    return slf
}
service/saleChance.go
@@ -54,9 +54,9 @@
    return ecode.OK
}
func (SaleChanceService) GetSaleChanceList(page, pageSize int, keyword string) ([]*model.SaleChance, int64, int) {
func (SaleChanceService) GetSaleChanceList(page, pageSize int, data map[string]interface{}) ([]*model.SaleChance, int64, int) {
    // get contact list
    contacts, total, err := model.NewSaleChanceSearch().SetKeyword(keyword).SetPage(page, pageSize).FindAll()
    contacts, total, err := model.NewSaleChanceSearch().SetPage(page, pageSize).SetSearchMap(data).FindAll()
    if err != nil {
        return nil, 0, ecode.SaleChanceListErr
    }