send_company_user.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package models
  2. import (
  3. "github.com/beego/beego/v2/client/orm"
  4. "time"
  5. )
  6. type CompanyJson struct {
  7. CompanyName string `json:"name"` //公司名称
  8. ShortName string `json:"short_name"` //公司简称
  9. CreditCode string `json:"social"` //社会信用代码
  10. City string `json:"city"` //所在地级市或直辖市
  11. SignType string `json:"sign_type"` //客户重要度(A类、B类、C类、D类)
  12. Fe string `json:"f_e"` //客户类型(FICC、权益、策略)
  13. IndustryName string `json:"industry"` //所属行业(公募、私募、券商资管、保险、海外、其他类型)
  14. Mobile string `json:"sale_phone"` //所属销售(销售手机号)
  15. Status string `json:"status"` //客户状态(正式、试用)
  16. Permission string `json:"permissions"` //客户权限(医药,科技,智造,消费,策略,专家,路演服务,研选)
  17. StartDate string `json:"start_time"` //服务期限开始时间
  18. EndDate string `json:"end_time"` //服务期限结束时间
  19. Info string `json:"info"` //简介
  20. CreatedTime string `json:"create_time"` //创建时间
  21. //CreatedTimes string //创建时间
  22. EndDateTime time.Time //创建时间
  23. }
  24. type UserJson struct {
  25. CreditCode string `json:"social"` //社会信用代码
  26. RealName string `json:"name"` //昵称
  27. Mobile string `json:"phone"` //手机号1
  28. CountryCode string `json:"area_code"` //国家号1(+86..)
  29. OutboundMobile string `json:"phone2"` //手机号2
  30. OutboundCountryCode string `json:"area_code2"` //国家号2(+86..)
  31. Telephone string `json:"machine"` //座机
  32. MachineAreaCode string `json:"machine_area_code"` //座机国家号(+86..)
  33. Sex string `json:"sex"` //性别(男、女)
  34. Email string `json:"email"` //电子邮箱,比如 example@qq.com
  35. Department string `json:"department"` //部门
  36. Position string `json:"position"` //职位
  37. Level string `json:"level"` //职位等级(研究员、基金经理、部门总监)
  38. IsMaker string `json:"policymakers"` //是否决策人(是、否)
  39. CreatedTime string `json:"create_time"` //创建时间
  40. }
  41. type CompanyJsonList struct {
  42. SyncData *[]CompanyJson `json:"sync_data"`
  43. }
  44. type CompanyUnJsonList struct {
  45. SyncData []CompanyJson `json:"sync_data"`
  46. }
  47. //删除用户
  48. type ShangHaiCrmUserDeleteResp struct {
  49. Social string `json:"social"`
  50. Mobile string `json:"phone"`
  51. Name string `json:"name"`
  52. }
  53. //获取公司
  54. func GetSendCompanyList(condition string) (items []*CompanyJson, err error) {
  55. o := orm.NewOrm()
  56. sql := ` SELECT
  57. c.company_name,
  58. c.company_id as cid,
  59. c.credit_code,
  60. c.city,
  61. p.industry_name,
  62. am.real_name,
  63. am.mobile,
  64. p.status,
  65. p.end_date as end_date_time,
  66. UNIX_TIMESTAMP( p.start_date ) AS start_date,
  67. UNIX_TIMESTAMP( p.end_date ) AS end_date,
  68. UNIX_TIMESTAMP( a.created_time ) AS created_time,
  69. (SELECT GROUP_CONCAT(DISTINCT b.chart_permission_name ORDER BY b.sort ASC SEPARATOR ',')
  70. FROM company_report_permission AS a
  71. INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
  72. INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id
  73. WHERE a.company_id=cid
  74. AND c.enabled = 1
  75. AND b.cygx_auth=1
  76. AND a.STATUS IN ( '正式', '试用', '永续' )) AS permission
  77. FROM
  78. company_report_permission AS a
  79. INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
  80. INNER JOIN company_product AS p ON a.company_id = p.company_id
  81. INNER JOIN company AS c ON c.company_id = a.company_id
  82. INNER JOIN admin AS am ON am.admin_id = p.seller_id
  83. AND a.product_id = p.product_id
  84. WHERE
  85. 1 = 1
  86. AND c.enabled = 1
  87. AND b.cygx_auth = 1
  88. AND p.STATUS IN ( '正式', '试用','冻结','流失' )
  89. AND( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' )
  90. AND p.product_id = 2 ` + condition +
  91. `GROUP BY
  92. c.company_id `
  93. _, err = o.Raw(sql).QueryRows(&items)
  94. return
  95. }
  96. //获取FICC公司
  97. func GetSendCompanyFiccList(condition string) (items []*CompanyJson, err error) {
  98. o := orm.NewOrm()
  99. sql := ` SELECT
  100. c.company_name,
  101. c.company_id AS cid,
  102. c.credit_code,
  103. c.city,
  104. p.industry_name,
  105. am.real_name,
  106. am.mobile,
  107. p.status,
  108. p.end_date AS end_date_time,
  109. UNIX_TIMESTAMP( p.start_date ) AS start_date,
  110. UNIX_TIMESTAMP( p.end_date ) AS end_date,
  111. UNIX_TIMESTAMP( a.created_time ) AS created_time,
  112. (
  113. SELECT
  114. GROUP_CONCAT( DISTINCT b.chart_permission_name ORDER BY b.sort ASC SEPARATOR ',' )
  115. FROM
  116. company_report_permission AS a
  117. INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
  118. INNER JOIN company_product AS c ON a.company_id = c.company_id
  119. AND a.product_id = c.product_id
  120. WHERE
  121. a.company_id = cid
  122. AND c.enabled = 1
  123. AND b.cygx_auth = 1
  124. AND a.STATUS IN ( '正式', '试用', '永续' )) AS permission
  125. FROM
  126. company_report_permission AS a
  127. INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
  128. INNER JOIN company_product AS p ON a.company_id = p.company_id
  129. INNER JOIN company AS c ON c.company_id = a.company_id
  130. INNER JOIN admin AS am ON am.admin_id = p.seller_id
  131. AND a.product_id = p.product_id
  132. WHERE
  133. 1 = 1
  134. AND c.enabled = 1
  135. AND b.cygx_auth = 1
  136. AND p.STATUS IN ( '正式', '试用','冻结','流失' )
  137. AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' )
  138. AND p.product_id = 1 ` + condition +
  139. `AND c.company_id NOT IN (
  140. SELECT
  141. c.company_id
  142. FROM
  143. company_report_permission AS a
  144. INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
  145. INNER JOIN company_product AS p ON a.company_id = p.company_id
  146. INNER JOIN company AS c ON c.company_id = a.company_id
  147. INNER JOIN admin AS am ON am.admin_id = p.seller_id
  148. AND a.product_id = p.product_id
  149. WHERE
  150. 1 = 1
  151. AND c.enabled = 1
  152. AND b.cygx_auth = 1
  153. AND p.STATUS IN ( '正式', '试用' ,'冻结','流失')
  154. AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' )
  155. AND p.product_id = 2
  156. GROUP BY
  157. c.company_id
  158. )
  159. GROUP BY
  160. c.company_id `
  161. _, err = o.Raw(sql).QueryRows(&items)
  162. return
  163. }
  164. //获取用户
  165. func GetSendUserList(condition string) (items []*UserJson, err error) {
  166. o := orm.NewOrm()
  167. sql := ` SELECT
  168. c.credit_code,
  169. u.real_name,
  170. u.mobile,
  171. u.country_code,
  172. u.outbound_mobile,
  173. u.outbound_country_code,
  174. u.telephone,
  175. u.sex,
  176. u.is_maker,
  177. c.company_id,
  178. UNIX_TIMESTAMP( us.create_time ) AS created_time
  179. FROM
  180. wx_user AS u
  181. INNER JOIN company AS c ON c.company_id = u.company_id
  182. INNER JOIN user_seller_relation AS us ON us.user_id = u.user_id
  183. WHERE
  184. 1 = 1
  185. AND u.company_id IN (
  186. SELECT
  187. c.company_id
  188. FROM
  189. company_report_permission AS a
  190. INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
  191. INNER JOIN company_product AS p ON a.company_id = p.company_id
  192. INNER JOIN company AS c ON c.company_id = a.company_id
  193. INNER JOIN admin AS am ON am.admin_id = p.seller_id
  194. AND a.product_id = p.product_id
  195. WHERE
  196. 1 = 1
  197. AND c.enabled = 1
  198. AND b.cygx_auth = 1
  199. AND p.STATUS IN ( '正式', '试用','冻结','流失')
  200. AND us.create_time != '' ` + condition +
  201. `GROUP BY
  202. c.company_id
  203. )
  204. AND us.create_time != ''
  205. AND u.real_name != ''
  206. AND u.mobile != ''
  207. AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' ) GROUP BY u.user_id ORDER BY c.company_id DESC `
  208. _, err = o.Raw(sql).QueryRows(&items)
  209. return
  210. }
  211. type WxUserOpLogResp struct {
  212. CompanyId int `description:"客户ID"`
  213. UserId int `description:"用户ID"`
  214. Mobile string `description:"用户ID"`
  215. }
  216. type WxUserOpLogDeleteResp struct {
  217. CompanyId int `description:"客户ID"`
  218. UserId int `description:"用户ID"`
  219. Mobile string `description:"用户ID"`
  220. OriginalUserInfo string `description:"用户详情"`
  221. CreditCode string `description:"社会信用码"`
  222. RealName string `description:"真实姓名"`
  223. }
  224. //获取指定时间内更新的用户
  225. func GetWxUserOpLog(createTime string) (items []*WxUserOpLogResp, err error) {
  226. o := orm.NewOrm()
  227. sql := ` SELECT
  228. u.company_id
  229. FROM
  230. wx_user_op_log AS l
  231. INNER JOIN wx_user AS u ON u.mobile = l.mobile
  232. WHERE
  233. l.create_time >= '` + createTime + `' GROUP BY u.company_id `
  234. _, err = o.Raw(sql).QueryRows(&items)
  235. return
  236. }
  237. //获取指定时间内删除的用户
  238. func GetWxUserOpLogDelete(createTime string) (items []*WxUserOpLogDeleteResp, err error) {
  239. o := orm.NewOrm()
  240. sql := `SELECT
  241. l.*,
  242. c.credit_code
  243. FROM
  244. wx_user_op_log AS l
  245. INNER JOIN company AS c ON c.company_id = l.company_id WHERE l.log_type = 'delete' AND l.create_time >= '` + createTime + `'`
  246. _, err = o.Raw(sql).QueryRows(&items)
  247. return
  248. }
  249. //获取指定时间内被暂停的客户
  250. func GetWxUserOpLogSuspend(createTime string) (items []*WxUserOpLogDeleteResp, err error) {
  251. o := orm.NewOrm()
  252. sql := `SELECT
  253. *
  254. FROM
  255. company_operation_record AS p
  256. WHERE
  257. remark = '暂停'
  258. AND p.id IN ( SELECT MAX( p.id ) AS max_id FROM company_operation_record AS p WHERE 1 = 1 AND p.create_time > '` + createTime + `' ) `
  259. _, err = o.Raw(sql).QueryRows(&items)
  260. return
  261. }
  262. //获取指定时间内被移动的客户
  263. func GetCompanyOperationRecord(createTime string) (items []*WxUserOpLogDeleteResp, err error) {
  264. o := orm.NewOrm()
  265. sql := `SELECT
  266. *
  267. FROM
  268. company_operation_record AS p
  269. WHERE
  270. operation IN ('move_seller')
  271. AND p.create_time > '` + createTime + `' GROUP BY company_id `
  272. _, err = o.Raw(sql).QueryRows(&items)
  273. return
  274. }
  275. //获取指定时间内试用转冻结,冻结转流失的客户
  276. func GetCompanyFreezeAndLoss(createTime string) (items []*WxUserOpLogResp, err error) {
  277. o := orm.NewOrm()
  278. sql := ` SELECT * FROM company_operation_record WHERE status IN ('冻结','流失') AND create_time > '` + createTime + `' GROUP BY company_id `
  279. _, err = o.Raw(sql).QueryRows(&items)
  280. return
  281. }
  282. //获取指定时间内被移动的用户
  283. func GetWxUserOpLogList(startDate, endDate string) (items []*WxUserOpLogResp, err error) {
  284. o := orm.NewOrm()
  285. sql := ` SELECT company_id,user_id,mobile FROM wx_user_op_log WHERE log_type IN ('move','add') AND create_time >= '` + startDate + `' AND create_time <= '` + endDate + `' GROUP BY user_id `
  286. _, err = o.Raw(sql).QueryRows(&items)
  287. return
  288. }
  289. //获取指定时间内被删除的用户
  290. func GetWxUserOpLogDeleteList(startDate, endDate string) (items []*WxUserOpLogResp, err error) {
  291. o := orm.NewOrm()
  292. sql := ` SELECT company_id,user_id,mobile FROM wx_user_op_log WHERE log_type IN ('delete') AND create_time >= '` + startDate + `' AND create_time <= '` + endDate + `' GROUP BY user_id `
  293. _, err = o.Raw(sql).QueryRows(&items)
  294. return
  295. }