stack_company_statistic.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package models
  2. import (
  3. "rdluck_tools/orm"
  4. "time"
  5. )
  6. //存量客户数据表
  7. type StackCompanyStatistic struct {
  8. StatisticId int `orm:"column(statistic_id);pk"`
  9. Type string `description:"数据类型,取值范围:新签客户,续约客户,未续约客户"`
  10. CompanyId int `description:"企业客户id"`
  11. CompanyName string `description:"企业客户名称"`
  12. ProductId int `description:"客户产品id"`
  13. ProductName string `description:"客户产品名称"`
  14. ContractNum int `description:"第几份合同,默认是:1"`
  15. SellerId int `description:"所属销售id"`
  16. SellerName string `description:"所属销售名称"`
  17. GroupId int `description:"所属销售分组id"`
  18. DepartmentId int `description:"所属销售部门id"`
  19. Date string `description:"记录日期"`
  20. StartDate string `description:"服务起始时间"`
  21. EndDate string `description:"服务截止时间"`
  22. RegionType string `description:"所属区域,国内,海外"`
  23. CreateTime time.Time `description:"记录添加时间"`
  24. }
  25. //添加存量客户记录
  26. func AddStackCompanyStatistic(item *StackCompanyStatistic) (err error) {
  27. o := orm.NewOrm()
  28. _, err = o.Insert(item)
  29. return
  30. }
  31. //获取某天的存量客户统计数据数量
  32. func GetStackCompanyCount(dayStr string) (count int, err error) {
  33. o := orm.NewOrm()
  34. //产品权限
  35. sql := `SELECT count(1) count FROM stack_company_statistic WHERE date = ?`
  36. err = o.Raw(sql, dayStr).QueryRow(&count)
  37. return
  38. }
  39. //待签约用户列表
  40. type WillExpireCompanyList struct {
  41. CompanyContractId int `description:"合同id"`
  42. ContractType string `description:"合同类型"`
  43. CompanyId int `description:"企业客户id"`
  44. CompanyName string `description:"企业客户名称"`
  45. ProductId int `description:"产品id"`
  46. ProductName string `description:"产品名称"`
  47. CompanyProductId int `description:"客户购买产品授权id"`
  48. ContractCode string `description:"合同编码"`
  49. StartDate string `description:"合同开始日期"`
  50. EndDate string `description:"合同结束日期"`
  51. Money float64 `description:"合同金额"`
  52. PayMethod string `description:"付款方式"`
  53. PayChannel string `description:"付款渠道"`
  54. ImgUrl string `description:"合同图片"`
  55. CreateTime string `description:"合同创建时间"`
  56. ModifyTime string `description:"合同修改时间"`
  57. Status string `description:"合同审批状态,0:待审批,1:已审批;默认:1"`
  58. RegionType string `description:"企业客户所属区域;可选范围:国内,海外"`
  59. SellerId int `description:"归属销售id"`
  60. GroupId int `description:"归属销售分组id"`
  61. DepartmentId int `description:"所属销售部门id"`
  62. SellerName string `description:"归属销售名称"`
  63. ProductStatus string `description:"产品状态"`
  64. Count int `description:"合同数量"`
  65. }
  66. //新签客户数(存量客户)
  67. func GetStackCompanyListV1() (total int64, items []*WillExpireCompanyList, err error) {
  68. o := orm.NewOrm()
  69. //产品权限
  70. sql := `SELECT *,count(1) count FROM (
  71. SELECT a.*,b.region_type,c.seller_id,c.seller_name,c.company_name,c.group_id,c.department_id,c.status as product_status FROM company_contract a
  72. LEFT JOIN company b ON a.company_id = b.company_id
  73. LEFT JOIN company_product c ON a.company_id = c.company_id and a.product_id=c.product_id where a.status = 1
  74. order by a.end_date desc ) d
  75. GROUP BY company_id,product_id `
  76. total, err = o.Raw(sql).QueryRows(&items)
  77. return
  78. }
  79. //增量客户统计报表列表数据结构
  80. type IncrementalList struct {
  81. CompanyContractId int `description:"合同id"`
  82. ContractType string `description:"合同类型"`
  83. CompanyId int `description:"企业客户id"`
  84. CompanyName string `description:"企业客户名称"`
  85. ProductId int `description:"产品id"`
  86. ProductName string `description:"产品名称"`
  87. CompanyProductId int `description:"客户购买产品授权id"`
  88. ContractCode string `description:"合同编码"`
  89. StartDate string `description:"合同开始日期"`
  90. EndDate string `description:"合同结束日期"`
  91. Money float64 `description:"合同金额"`
  92. PayMethod string `description:"付款方式"`
  93. PayChannel string `description:"付款渠道"`
  94. ImgUrl string `description:"合同图片"`
  95. CreateTime string `description:"合同创建时间"`
  96. ModifyTime string `description:"合同修改时间"`
  97. Status string `description:"合同审批状态,0:待审批,1:已审批;默认:1"`
  98. RegionType string `description:"企业客户所属区域;可选范围:国内,海外"`
  99. SellerId int `description:"归属销售id"`
  100. GroupId int `description:"归属分组id"`
  101. DepartmentId int `description:"归属部门id"`
  102. SellerName string `description:"归属销售名称"`
  103. ExpireDay string `description:"剩余可用天数"`
  104. }
  105. //未续约客户数(存量客户)
  106. func GetNotRenewalCompanyTotalV1(dateTime string) (total int64, items []*IncrementalList, err error) {
  107. o := orm.NewOrm()
  108. //产品权限
  109. sql := `SELECT * FROM
  110. ( SELECT a.id,a.company_id,a.company_name,c.seller_id,c.seller_name,c.group_id,c.department_id,a.product_id,a.product_name,a.create_time,b.region_type
  111. FROM company_operation_record a
  112. RIGHT JOIN company b ON a.company_id = b.company_id
  113. JOIN company_product c ON b.company_id = c.company_id AND a.product_id = c.product_id
  114. WHERE
  115. 1 = 1 AND c.STATUS NOT IN ( "永续", "正式" ) AND a.create_time <= ?
  116. AND a.operation = 'try_out'
  117. ORDER BY create_time ASC
  118. ) f
  119. GROUP BY company_id, product_id
  120. ORDER BY create_time DESC , company_id DESC `
  121. total, err = o.Raw(sql, dateTime).QueryRows(&items)
  122. return
  123. }