clueInfoList.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package service
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. "bp.jydev.jianyu360.cn/BaseService/biService/entity"
  5. "bp.jydev.jianyu360.cn/BaseService/biService/rpc/pb"
  6. "fmt"
  7. "github.com/gogf/gf/v2/util/gconv"
  8. "math"
  9. )
  10. type ClueInfo struct {
  11. Id int64 `json:"id"`
  12. Uid string `json:"uid"`
  13. ClueName string `json:"cluename"`
  14. PositionId int64 `json:"position_id"`
  15. SeatNumber string `json:"seatNumber"`
  16. CompanyNature int `json:"company_natural"` // 公司性质 集团/非集团
  17. CompanyNatureStr string `json:"company_natural_str"` // 公司性质 集团/非集团
  18. LockStatus int `json:"lock_status"` // 锁定状态
  19. LockStatusStr string `json:"lock_status_str"`
  20. LockPerson string `json:"lock_person"` // 锁定人
  21. LockTime string `json:"lock_time"` // 锁定时间
  22. LockPositionId int64 `json:"lock_position_id"`
  23. Name string `json:"name"` // 联系人
  24. SalesPeople string `json:"sales_people"` // 销售人员
  25. IsAssign int `json:"is_assign"` // 线索池
  26. IsAssignStr string `json:"is_assign_str"` // 线索池
  27. CustomerDemand string `json:"customer_demand"` // 客户需求
  28. IntendedProducts string `json:"intended_products"` // 意向产品
  29. CustomerBudget int64 `json:"customer_budget"` // 客户预算
  30. Content string `json:"content"` // 最近跟进内容
  31. TrailTime string `json:"trail_time"` // 最近跟进时间
  32. StartTrailTime string `json:"start_trail_time"` // 开始跟进时间
  33. ClueStatus string `json:"clue_status"` // 线索状态
  34. IsTransfer int `json:"is_transfer"`
  35. CompanyVerification int `json:"company_verification"`
  36. //客成
  37. SucManager string `json:"suc_manager"` // 客成经理
  38. // 企业
  39. LegalPerson string `json:"legal_person"` // 法人
  40. ClueOwn string `json:"clue_own"` // 线索归属
  41. }
  42. func CheckingList(in *pb.ClueInfoReq) *pb.BiReply {
  43. sql0 := `SELECT a1.*, a3.name as customer, a4.name as trailstatus_name, a5.name as sales_people FROM dwd_f_crm_clue_info a1 LEFT JOIN dwd_f_csm_customer_info a3 ON a1.id = a3.clue_id
  44. LEFT JOIN dwd_d_crm_trailstatus_code a4 ON a1.trailstatus = a4.code
  45. LEFT JOIN dwd_d_crm_department_level_succbi a5 ON a1.position_id = a5.position_id
  46. WHERE a1.cluename LIKE '%%%s%%' ORDER BY a1.lock_status ASC, a1.trail_time DESC, a1.id ASC limit ? offset ?`
  47. cq0 := `SELECT COUNT(1) FROM dwd_f_crm_clue_info a1 WHERE a1.cluename LIKE '%%%s%%'`
  48. sql1 := `SELECT a1.*, a3.name as customer, a4.name as trailstatus_name, a5.name as sales_people FROM dwd_f_crm_clue_info a1 LEFT JOIN dwd_f_csm_customer_info a3 ON a1.id = a3.clue_id
  49. LEFT JOIN dwd_d_crm_trailstatus_code a4 ON a1.trailstatus = a4.code
  50. LEFT JOIN dwd_d_crm_department_level_succbi a5 ON a1.position_id = a5.position_id
  51. WHERE a1.name = '%s' ORDER BY a1.lock_status ASC, a1.trail_time DESC, a1.id ASC limit ? offset ?`
  52. cq1 := `SELECT COUNT(1) FROM dwd_f_crm_clue_info a1 WHERE a1.name = '%s'`
  53. sql2 := `SELECT a1.*, a3.name as customer, a4.name as trailstatus_name, a5.name as sales_people FROM dwd_f_crm_clue_info a1 LEFT JOIN dwd_f_csm_customer_info a3 ON a1.id = a3.clue_id
  54. LEFT JOIN dwd_d_crm_trailstatus_code a4 ON a1.trailstatus = a4.code
  55. LEFT JOIN dwd_d_crm_department_level_succbi a5 ON a1.position_id = a5.position_id
  56. WHERE a1.phone = '%s' ORDER BY a1.lock_status ASC, a1.trail_time DESC, a1.id ASC limit ? offset ?`
  57. cq2 := `SELECT COUNT(1) FROM dwd_f_crm_clue_info a1 WHERE a1.phone = '%s'`
  58. sql, cq := "", ""
  59. if in.SearchType == "0" {
  60. sql = sql0
  61. cq = cq0
  62. } else if in.SearchType == "1" {
  63. sql = sql1
  64. cq = cq1
  65. } else if in.SearchType == "2" {
  66. sql = sql2
  67. cq = cq2
  68. }
  69. if in.PageSize == 0 {
  70. in.PageSize = 10
  71. }
  72. rows := entity.JyBiTidb.Query(fmt.Sprintf(sql, in.SearchTxt), in.PageSize, (in.PageNum-1)*in.PageSize)
  73. var resultList []*ClueInfo
  74. for _, m := range *rows {
  75. resultList = append(resultList, getClueInfo(m))
  76. }
  77. count := entity.JyBiTidb.CountBySql(fmt.Sprintf(cq, in.SearchTxt))
  78. totalPage := int64(math.Ceil(float64(count) / float64(in.PageSize)))
  79. result := map[string]interface{}{
  80. "list": resultList,
  81. "count": count,
  82. }
  83. if totalPage > in.PageNum {
  84. result["hasNextPage"] = true
  85. } else {
  86. result["hasNextPage"] = false
  87. }
  88. return &pb.BiReply{
  89. Data: gconv.Bytes(result),
  90. }
  91. }
  92. func getClueInfo(tmp map[string]interface{}) *ClueInfo {
  93. clueInfo := &ClueInfo{
  94. Id: common.Int64All(tmp["id"]),
  95. Uid: common.ObjToString(tmp["uid"]),
  96. ClueName: common.ObjToString(tmp["cluename"]),
  97. SeatNumber: common.ObjToString(tmp["seatNumber"]),
  98. PositionId: common.Int64All(tmp["position_id"]),
  99. CompanyNature: common.IntAll(tmp["company_nature"]),
  100. CompanyNatureStr: common.ObjToString(common.If(common.IntAll(tmp["company_nature"]) == 0, "非集团公司", "集团公司")),
  101. LockStatus: common.IntAll(tmp["lock_status"]),
  102. LockTime: common.ObjToString(tmp["lock_time"]),
  103. LockPositionId: common.Int64All(tmp["lock_position_id"]),
  104. Name: common.ObjToString(tmp["name"]),
  105. IsAssign: common.IntAll(tmp["is_assign"]),
  106. CustomerDemand: common.ObjToString(tmp["customer_demand"]),
  107. IntendedProducts: common.ObjToString(tmp["intended_products"]),
  108. CustomerBudget: common.Int64All(tmp["customer_budget"]),
  109. Content: common.ObjToString(tmp["content"]),
  110. TrailTime: common.ObjToString(tmp["trail_time"]),
  111. SalesPeople: common.ObjToString(tmp["sales_people"]),
  112. SucManager: common.ObjToString(common.If(common.IntAll(tmp["is_transfer"]) == 1, common.ObjToString(tmp["customer"]), "/")),
  113. ClueStatus: common.ObjToString(tmp["trailstatus_name"]),
  114. IsTransfer: common.IntAll(tmp["is_transfer"]),
  115. CompanyVerification: common.IntAll(tmp["company_verification"]),
  116. }
  117. switch clueInfo.IsAssign {
  118. case 0:
  119. clueInfo.IsAssignStr = "公海"
  120. case 1:
  121. clueInfo.IsAssignStr = "私海"
  122. case -1:
  123. clueInfo.IsAssignStr = "退出公海"
  124. case -2:
  125. clueInfo.IsAssignStr = "域外"
  126. case -3:
  127. clueInfo.IsAssignStr = "冻结池"
  128. case -4:
  129. clueInfo.IsAssignStr = "内部员工"
  130. case -5:
  131. clueInfo.IsAssignStr = "存在大会员子账号权益,临时处理"
  132. case -6:
  133. clueInfo.IsAssignStr = "特殊原因,不允许销售进行跟进"
  134. }
  135. switch clueInfo.LockStatus {
  136. case 1:
  137. clueInfo.LockStatusStr = "已锁定"
  138. case 2:
  139. clueInfo.LockStatusStr = "未锁定"
  140. case 3:
  141. clueInfo.LockStatusStr = "无需锁定"
  142. }
  143. clueInfo.LockPerson, _ = getSeatNumber(common.Int64All(tmp["lock_position_id"]))
  144. if common.IntAll(tmp["company_verification"]) == 1 {
  145. ent, b := entity.MgoQyxy.FindOneByField("qyxy_std", map[string]interface{}{"company_name": clueInfo.ClueName},
  146. map[string]interface{}{"legal_person": 1})
  147. if b && len(*ent) > 0 {
  148. clueInfo.LegalPerson = common.ObjToString((*ent)["legal_person"])
  149. }
  150. }
  151. if common.IntAll(tmp["is_transfer"]) == 1 {
  152. clueInfo.ClueOwn = "客户成功组"
  153. } else if clueInfo.IsAssign == 0 && clueInfo.PositionId == 0 {
  154. clueInfo.ClueOwn = "销售一部、三部"
  155. } else if clueInfo.IsAssign == -4 && clueInfo.PositionId == 0 {
  156. clueInfo.ClueOwn = "/"
  157. } else if clueInfo.PositionId != 0 {
  158. info := entity.JyBiTidb.FindOne("dwd_d_crm_department_level_succbi", map[string]interface{}{"position_id": clueInfo.PositionId}, "dept_name", "")
  159. if info != nil && len(*info) > 0 {
  160. clueInfo.ClueOwn = common.ObjToString((*info)["dept_name"])
  161. }
  162. }
  163. return clueInfo
  164. }