wx_user.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. package models
  2. import (
  3. "github.com/beego/beego/v2/client/orm"
  4. "hongze/hongze_cygx/utils"
  5. "time"
  6. )
  7. type WxUser struct {
  8. UserId int `orm:"column(user_id);pk"`
  9. OpenId string `description:"open_id"`
  10. UnionId string `description:"union_id"`
  11. Subscribe string `description:"是否关注"`
  12. CompanyId int `description:"客户id"`
  13. NickName string `description:"用户昵称"`
  14. RealName string `description:"用户实际名称"`
  15. UserCode string `description:"用户编码"`
  16. Mobile string `description:"手机号码"`
  17. BindAccount string `description:"绑定时的账号"`
  18. WxCode string `description:"微信号"`
  19. Profession string `description:"职业"`
  20. Email string `description:"邮箱"`
  21. Telephone string `description:"座机"`
  22. Sex int `description:"普通用户性别,1为男性,2为女性"`
  23. Province string `description:"普通用户个人资料填写的省份"`
  24. City string `description:"普通用户个人资料填写的城市"`
  25. Country string `description:"国家,如中国为CN"`
  26. SubscribeTime int `description:"关注时间"`
  27. Remark string `description:"备注"`
  28. Headimgurl string `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
  29. Privilege string `description:"用户特权信息,json数组,如微信沃卡用户为(chinaunicom)"`
  30. Unionid string `description:"用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。"`
  31. FirstLogin int `description:"是否第一次登陆"`
  32. Enabled int `description:"是否可用"`
  33. CreatedTime time.Time `description:"创建时间"`
  34. LastUpdatedTime time.Time `description:"最新一次修改时间"`
  35. Seller string `description:"销售员"`
  36. Note string `description:"客户备份信息"`
  37. IsNote int `description:"是否备注过信息"`
  38. FromType string `description:"report' COMMENT 'report:研报,teleconference:电话会"`
  39. ApplyMethod int `description:"0:未申请,1:已付费客户申请试用,2:非客户申请试用"`
  40. RegisterTime time.Time `description:"注册时间"`
  41. RegisterPlatform int `description:"注册平台,1:微信端,2:PC网页端"`
  42. IsFreeLogin bool `description:"是否免登陆,true:免登陆,false:非免登陆"`
  43. LoginTime time.Time `description:"最近一次登录时间"`
  44. SessionKey string `description:"微信小程序会话密钥"`
  45. IsRegister int `description:"是否注册:1:已注册,0:未注册"`
  46. Source int `description:"绑定来源,1:微信端,2:pc网页端,3:查研观向小程序,4:每日咨询"`
  47. CountryCode string `description:"区号"`
  48. OutboundMobile string `description:"外呼手机号"`
  49. OutboundCountryCode string `description:"外呼手机号区号"`
  50. TripartiteCode string `description:"第三方给过来的用户编码,判断用户是否存在"`
  51. }
  52. //添加用户信息
  53. func AddWxUser(item *WxUser) (lastId int64, err error) {
  54. o := orm.NewOrm()
  55. lastId, err = o.Insert(item)
  56. return
  57. }
  58. type WxUserItem struct {
  59. UserId int `description:"用户id"`
  60. OpenId string `description:"open_id"`
  61. UnionId string `description:"union_id"`
  62. CompanyId int `description:"客户id"`
  63. NickName string `description:"用户昵称"`
  64. RealName string `description:"用户实际名称"`
  65. Mobile string `description:"手机号码"`
  66. BindAccount string `description:"绑定时的账号"`
  67. Email string `description:"邮箱"`
  68. Headimgurl string `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
  69. ApplyMethod int `description:"0:未申请,1:已付费客户申请试用,2:非客户申请试用"`
  70. FirstLogin int `description:"是否第一次登陆"`
  71. IsFreeLogin int `description:"是否免登陆,true:免登陆,false:非免登陆"`
  72. LoginTime time.Time `description:"登录时间"`
  73. CreatedTime time.Time `description:"创建时间"`
  74. LastUpdatedTime time.Time `description:"最近一次修改时间"`
  75. SessionKey string `description:"微信小程序会话密钥"`
  76. CompanyName string `description:"公司名称"`
  77. IsRegister int `description:"是否注册:1:已注册,0:未注册"`
  78. CountryCode string `description:"手机国家区号"`
  79. OutboundMobile string `description:"外呼手机号"`
  80. OutboundCountryCode string `description:"外呼手机号区号"`
  81. IsMsgOutboundMobile int `description:"是否弹窗过绑定外呼手机号区号"`
  82. IsMaker int `description:"是否是决策人"`
  83. Position string `description:"职务"`
  84. Source int
  85. }
  86. func GetWxUserItemByUnionid(unionid string) (item *WxUserItem, err error) {
  87. sql := `SELECT * FROM wx_user WHERE union_id=? `
  88. err = orm.NewOrm().Raw(sql, unionid).QueryRow(&item)
  89. return
  90. }
  91. //根据用户ID获取相关信息
  92. func GetWxUserItemByUserId(userId int) (item *WxUserItem, err error) {
  93. sql := `SELECT a.*,b.company_name FROM wx_user AS a
  94. LEFT JOIN company AS b on a.company_id=b.company_id
  95. WHERE a.user_id=? `
  96. err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
  97. return
  98. }
  99. func GetWxUserItemByOpenId(openId string) (item *WxUserItem, err error) {
  100. sql := `SELECT * FROM wx_user WHERE open_id=? `
  101. err = orm.NewOrm().Raw(sql, openId).QueryRow(&item)
  102. return
  103. }
  104. type WxLoginResp struct {
  105. Authorization string
  106. UserId int
  107. FirstLogin int
  108. Headimgurl string `description:"用户头像"`
  109. Mobile string `description:"手机号"`
  110. Email string `description:"邮箱"`
  111. CompanyName string `description:"客户名称"`
  112. Status string `description:"状态"`
  113. EndDate string `description:"到期日期"`
  114. ProductName string `description:"客户类型名称"`
  115. }
  116. type WxGetUserInfoReq struct {
  117. RawData string `description:"rawData"`
  118. Signature string `description:"signature"`
  119. EncryptedData string `description:"encryptedData"`
  120. Iv string `description:"iv"`
  121. }
  122. //修改用户会话key
  123. func ModifyWxUserSessionKey(sessionKey string, userId int) (err error) {
  124. o := orm.NewOrm()
  125. sql := `UPDATE wx_user SET session_key=? WHERE user_id=? `
  126. _, err = o.Raw(sql, sessionKey, userId).Exec()
  127. return
  128. }
  129. //添加用户信息
  130. func ModifyWxUserInfo(unionId, nickName, province, city, country, avatar string, gender, userId int) (err error) {
  131. o := orm.NewOrm()
  132. sql := `UPDATE wx_user SET union_id=?,unionid=?,nick_name=?,sex=?,province=?,city=?,country=?,headimgurl=? WHERE user_id=? `
  133. _, err = o.Raw(sql, unionId, unionId, nickName, gender, province, city, country, avatar, userId).Exec()
  134. return
  135. }
  136. //修改用户会话key
  137. func DeleteWxUserByUserId(userId int) (err error) {
  138. o := orm.NewOrm()
  139. sql := `DELETE FROM wx_user WHERE user_id=? `
  140. _, err = o.Raw(sql, userId).Exec()
  141. return
  142. }
  143. type WxGetUserInfoResp struct {
  144. //UsersId int `orm:"column(id);pk"`
  145. //Mobile string `description:"手机号"`
  146. //NickName string `description:"昵称"`
  147. //Gender int `description:"用户性别 1:男性,2:女性,0:未知(默认)"`
  148. //CreateTime time.Time `description:"注册时间"`
  149. //ModifyTime time.Time `description:"修改时间"`
  150. //AvatarUrl string `description:"头像地址"`
  151. //City string `description:"城市"`
  152. //Province string `description:"省"`
  153. //Country string `description:"国家"`
  154. //Language string `description:"语言"`
  155. //Appid string `description:"Appid"`
  156. //Timestamp int64 `description:"时间戳"`
  157. Authorization string `description:"登陆凭证,后续接口调用时,带在请求头里面Key:Authorization"`
  158. }
  159. type WxGetPhoneNumberReq struct {
  160. EncryptedData string `description:"encryptedData"`
  161. Iv string `description:"iv"`
  162. }
  163. func ModifyUsersMobile(usersId int, phoneNumber string) (err error) {
  164. o := orm.NewOrm()
  165. sql := `UPDATE wx_user SET mobile=? WHERE user_id=? `
  166. _, err = o.Raw(sql, phoneNumber, usersId).Exec()
  167. return
  168. }
  169. type WxGetPhoneNumberResp struct {
  170. PhoneNumber string `description:"用户绑定的手机号(国外手机号会有区号)"`
  171. PurePhoneNumber string `description:"没有区号的手机号"`
  172. CountryCode string `description:"区号"`
  173. }
  174. //根据用户手机号获取相关信息
  175. func GetWxUserItemByMobile(mobile string) (item *WxUserItem, err error) {
  176. sql := `SELECT a.*,b.company_name FROM wx_user AS a
  177. LEFT JOIN company AS b on a.company_id=b.company_id
  178. WHERE a.mobile= '` + mobile + `' ORDER BY a.company_id DESC LIMIT 1 `
  179. err = orm.NewOrm().Raw(sql).QueryRow(&item)
  180. return
  181. }
  182. //根据用户手机号获取相关信息
  183. func GetWxUserAouthByMobile(mobile string) (item *WxUserItem, err error) {
  184. sql := `SELECT
  185. a.*,
  186. s.mobile,
  187. b.company_name
  188. FROM
  189. cygx_session_mobile AS s
  190. LEFT JOIN wx_user AS a ON a.mobile = s.mobile
  191. LEFT JOIN company AS b ON a.company_id = b.company_id
  192. WHERE
  193. s.mobile = ?
  194. ORDER BY
  195. a.company_id DESC
  196. LIMIT 1`
  197. err = orm.NewOrm().Raw(sql, mobile).QueryRow(&item)
  198. return
  199. }
  200. func GetWxUserItemByEmail(email string) (item *WxUserItem, err error) {
  201. sql := `SELECT * FROM wx_user WHERE email=? `
  202. err = orm.NewOrm().Raw(sql, email).QueryRow(&item)
  203. return
  204. }
  205. func ModifyReportLastViewTime(uid int) (err error) {
  206. sql := ` UPDATE wx_user SET report_last_view_time=NOW()
  207. WHERE user_id=? `
  208. _, err = orm.NewOrm().Raw(sql, uid).Exec()
  209. return
  210. }
  211. //变更联系人是否已注册状态
  212. func ModifyWxUserRegisterStatus(userId int) (err error) {
  213. o := orm.NewOrm()
  214. sql := `UPDATE wx_user SET is_register=?,source=3,register_time=NOW() WHERE user_id = ? `
  215. _, err = o.Raw(sql, 1, userId).Exec()
  216. return
  217. }
  218. //修改用户是否绑定外呼手机号弹窗
  219. func ModifyWxUserIsMsgOutboundMobile(userId int) (err error) {
  220. o := orm.NewOrm()
  221. sql := `UPDATE wx_user SET is_msg_outbound_mobile=1 WHERE user_id=? `
  222. _, err = o.Raw(sql, userId).Exec()
  223. return
  224. }
  225. //列表
  226. func GetUserListAll() (items []*WxUserItem, err error) {
  227. o := orm.NewOrm()
  228. sql := `SELECT * FROM wx_user WHERE mobile <>'' AND outbound_mobile = ''`
  229. _, err = o.Raw(sql).QueryRows(&items)
  230. return
  231. }
  232. //修改手机号区号 8位号码+852,9位号码+886,10位号码+1,11位及以上号码+86
  233. func UPdateUserCountryCode(item *WxUserItem) (err error) {
  234. o := orm.NewOrm()
  235. if item.CountryCode == "" && len(item.Mobile) >= 11 {
  236. sql := ` UPDATE wx_user SET outbound_mobile= ? , outbound_country_code=86 , country_code=86 WHERE user_id = ?`
  237. _, err = o.Raw(sql, item.Mobile, item.UserId).Exec()
  238. } else if item.CountryCode == "" && len(item.Mobile) == 8 {
  239. sql := ` UPDATE wx_user SET outbound_mobile= ? , outbound_country_code=852 , country_code=852 WHERE user_id = ?`
  240. _, err = o.Raw(sql, item.Mobile, item.UserId).Exec()
  241. } else if item.CountryCode == "" && len(item.Mobile) == 9 {
  242. sql := ` UPDATE wx_user SET outbound_mobile= ? , outbound_country_code=886 , country_code=886 WHERE user_id = ?`
  243. _, err = o.Raw(sql, item.Mobile, item.UserId).Exec()
  244. } else if item.CountryCode == "" && len(item.Mobile) == 10 {
  245. sql := ` UPDATE wx_user SET outbound_mobile= ? , outbound_country_code=1 , country_code=1 WHERE user_id = ?`
  246. _, err = o.Raw(sql, item.Mobile, item.UserId).Exec()
  247. } else {
  248. sql := ` UPDATE wx_user SET outbound_mobile= ? , outbound_country_code=? WHERE user_id = ?`
  249. _, err = o.Raw(sql, item.Mobile, item.CountryCode, item.UserId).Exec()
  250. }
  251. return
  252. }
  253. //判断公司下用户名称是否存在
  254. func GetUserCountByName(companyId int, name string) (count int, err error) {
  255. sql := `SELECT COUNT(1) AS count FROM wx_user WHERE company_id = ? AND real_name = ?`
  256. err = orm.NewOrm().Raw(sql, companyId, name).QueryRow(&count)
  257. return
  258. }
  259. //判断这个用户是否被设置消息提醒
  260. func GetUserRemind(uid int) (count int, err error) {
  261. sql := `SELECT COUNT(1) AS count FROM cygx_user_remind WHERE user_id = ? `
  262. err = orm.NewOrm().Raw(sql, uid).QueryRow(&count)
  263. return
  264. }
  265. //判断公司下用户名称是否存在
  266. func GetUserCountByThirdName(companyId int, name string) (count int, err error) {
  267. sql := `SELECT COUNT(1) AS count FROM wx_user WHERE company_id = ? AND tripartite_code = ?`
  268. err = orm.NewOrm().Raw(sql, companyId, name).QueryRow(&count)
  269. return
  270. }
  271. //获取公司下一共有多少用户
  272. func GetUserCountByCompanyId(companyId int) (count int, err error) {
  273. sql := `SELECT COUNT(1) AS count FROM wx_user WHERE company_id = ? `
  274. err = orm.NewOrm().Raw(sql, companyId).QueryRow(&count)
  275. return
  276. }
  277. func UpdateUserMobile(uid int, mobile string) (err error) {
  278. sql := ` UPDATE wx_user SET mobile=?
  279. WHERE user_id=? `
  280. _, err = orm.NewOrm().Raw(sql, mobile, uid).Exec()
  281. return
  282. }
  283. //获取公司下用户详情详情详情
  284. func GetUserByName(companyId int, name string) (item *WxUser, err error) {
  285. o := orm.NewOrm()
  286. sql := `SELECT * FROM wx_user WHERE company_id = ? AND real_name = ? `
  287. err = o.Raw(sql, companyId, name).QueryRow(&item)
  288. return
  289. }
  290. //获取公司下用户详情详情详情
  291. func GetUserByThirdName(companyId int, name string) (item *WxUser, err error) {
  292. o := orm.NewOrm()
  293. sql := `SELECT * FROM wx_user WHERE company_id = ? AND tripartite_code = ? `
  294. err = o.Raw(sql, companyId, name).QueryRow(&item)
  295. return
  296. }
  297. //获取所有注册的权益用户
  298. func GetUserRegisterList() (items []*WxUser, err error) {
  299. o := orm.NewOrm()
  300. sql := `SELECT
  301. u.user_id,
  302. u.company_id,
  303. u.mobile,
  304. u.email,
  305. u.real_name,
  306. u.is_register,
  307. u.is_maker,
  308. u.register_time
  309. FROM
  310. wx_user AS u
  311. INNER JOIN company AS c ON c.company_id = u.company_id
  312. INNER JOIN company_product AS cp ON cp.company_id = c.company_id
  313. WHERE
  314. u.company_id IN (
  315. SELECT
  316. a.company_id
  317. FROM
  318. company AS a
  319. INNER JOIN company_product AS b ON a.company_id = b.company_id
  320. WHERE
  321. a.enabled = 1
  322. AND b.STATUS IN ( '正式', '试用', '冻结' )
  323. AND cp.product_id = 2
  324. )
  325. AND cp.product_id = 2
  326. GROUP BY
  327. u.user_id `
  328. _, err = o.Raw(sql).QueryRows(&items)
  329. //AND u.register_time IS NOT NULL OR u.report_last_view_time <>'' 统计阅读时间与注册时间不为空的用户
  330. return
  331. }
  332. type CygxCompanyUser struct {
  333. Labels string `description:"标签,用英文,隔开"`
  334. }
  335. type UserLabel struct {
  336. Label string `description:"标签 多个用 , 隔开"`
  337. }
  338. //对获取关注的产业
  339. func GetCygxCompanyUserListSplit(userIds string) (labels string, err error) {
  340. o := orm.NewOrm()
  341. sql := `SELECT
  342. (
  343. SELECT
  344. GROUP_CONCAT( DISTINCT man.industry_name SEPARATOR ',' )
  345. FROM
  346. cygx_industrial_management AS man
  347. WHERE
  348. man.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industry_fllow AS f WHERE f.user_id = u.user_id AND f.type = 1 )
  349. ) AS labels
  350. FROM
  351. wx_user AS u WHERE u.user_id = ? `
  352. err = o.Raw(sql, userIds).QueryRow(&labels)
  353. return
  354. }
  355. //阅读记录
  356. type ArticlePvCountResp struct {
  357. ArticleId int `description:"文章ID"`
  358. Pv int `description:"Pv"`
  359. }
  360. func GetArticlePvCount(mobile, email, dateTime string) (item []*ArticlePvCountResp, err error) {
  361. o := orm.NewOrm()
  362. sql := `SELECT
  363. article_id,
  364. COUNT(article_id) as pv
  365. FROM
  366. cygx_article_history_record_newpv as h
  367. WHERE
  368. mobile = ?
  369. AND email = ?
  370. AND create_time >= ?
  371. GROUP BY article_id `
  372. _, err = o.Raw(sql, mobile, email, dateTime).QueryRows(&item)
  373. return
  374. }
  375. //产业名称
  376. type ArticleIndustryNameResp struct {
  377. ArticleId int `description:"文章ID"`
  378. IndustryName string `description:"产业名称"`
  379. SubjectName string `description:"标的名称"`
  380. }
  381. func GetArticleGroupyIndustryName(articleIds string) (item []*ArticleIndustryNameResp, err error) {
  382. o := orm.NewOrm()
  383. sql := `SELECT
  384. art.article_id,
  385. (
  386. SELECT
  387. GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR '/' )
  388. FROM
  389. cygx_industrial_subject AS s
  390. WHERE
  391. s.industrial_subject_id IN ( SELECT industrial_subject_id FROM cygx_industrial_article_group_subject AS sg WHERE sg.article_id = art.article_id )
  392. ) AS subject_name,
  393. (
  394. SELECT
  395. GROUP_CONCAT( DISTINCT man.industry_name SEPARATOR '/' )
  396. FROM
  397. cygx_industrial_management AS man
  398. WHERE
  399. man.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industrial_article_group_management AS man_g WHERE man_g.article_id = art.article_id )
  400. ) AS industry_name
  401. FROM
  402. cygx_article_history_record_newpv AS r
  403. INNER JOIN cygx_article AS art ON art.article_id = r.article_id
  404. LEFT JOIN cygx_report_mapping AS re ON re.category_id = art.category_id_two
  405. LEFT JOIN cygx_industrial_article_group_management AS man ON man.article_id = art.article_id
  406. WHERE
  407. art.article_id IN ( ` + articleIds + `) GROUP BY art.article_id `
  408. _, err = o.Raw(sql).QueryRows(&item)
  409. return
  410. }
  411. func GetCygxArticleCollectId(uid int, dateTime string) (articleIds string, err error) {
  412. sql := `SELECT
  413. GROUP_CONCAT( DISTINCT article_id SEPARATOR ',' ) AS permission
  414. FROM
  415. cygx_article_collect
  416. WHERE
  417. user_id = ?
  418. AND create_time >= ? `
  419. o := orm.NewOrm()
  420. err = o.Raw(sql, uid, dateTime).QueryRow(&articleIds)
  421. return
  422. }
  423. //活动标签记录
  424. type ActivityLabelCountResp struct {
  425. Label string `description:"标签"`
  426. Pv int `description:"Pv"`
  427. }
  428. func GetActivitySignCount(mobile, dateTime string) (item []*ActivityLabelCountResp, err error) {
  429. o := orm.NewOrm()
  430. sql := `SELECT
  431. label ,
  432. COUNT( label ) AS pv
  433. FROM
  434. cygx_activity
  435. WHERE
  436. activity_id IN ( SELECT activity_id FROM cygx_activity_signup WHERE mobile = ? )
  437. AND label != ''
  438. AND activity_time >= ?
  439. AND is_submit_meeting = 1
  440. GROUP BY
  441. label`
  442. _, err = o.Raw(sql, mobile, dateTime).QueryRows(&item)
  443. return
  444. }
  445. type CygxUserInteractionNumDetail struct {
  446. UserId int64 `orm:"column(user_id);pk"`
  447. Mobile string `description:"手机号"`
  448. Email string `description:"邮箱"`
  449. CompanyId int `description:"公司id"`
  450. CompanyName string `description:"公司名称"`
  451. RealName string `description:"姓名"`
  452. CreatedTime string `description:"创建时间"`
  453. IsMaker int `description:"是否决策人,1:是,0:否"`
  454. IsRegister bool `description:"是否注册,true:已注册,false:未注册"`
  455. Status string `description:"客户状态"`
  456. RegisterTime string `description:"注册时间"`
  457. SellerName string `description:"销售名称"`
  458. InteractionNum int `description:"互动量"`
  459. Labels string `description:"标签,用英文,隔开"`
  460. ActivityLabel string `description:"活动标签,用英文,隔开"`
  461. IsShowSee bool `description:"是否展示查看"`
  462. IsShowSeeNum int `description:"是否展示查看"`
  463. HistoryNum int `description:"报告阅读"`
  464. CountNum int `description:"报告收藏"`
  465. ChartCountNum int `description:"图表收藏"`
  466. IndustryFllowNum int `description:"产业关注"`
  467. DepartmentFollowNum int `description:"作者关注"`
  468. KeyWordNum int `description:"搜索关键词"`
  469. OnLineNum int `description:"线上互动活动"`
  470. OfficeNum int `description:"线下互动活动"`
  471. TripNum int `description:"专项产业调研数量"`
  472. RoadshowVideoNum int `description:"产业视频播放量"`
  473. ActivityVideoNum int `description:"活动视频播放量"`
  474. ActivityVoiceNum int `description:"活动音频播放量"`
  475. PackageType int `description:"套餐类型,0:无,1:大套餐,2:小套餐"`
  476. TryStage int `description:"试用客户子标签:0全部、1未分类、2 推进、3 跟踪、4 预备"`
  477. }
  478. //获取用户的互动量
  479. func GetCygxCompanyUserUserInteraction(userIds string) (items []*CygxUserInteractionNumDetail, err error) {
  480. o := orm.NewOrm()
  481. sql := `SELECT
  482. u.user_id,
  483. u.company_id,
  484. ( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h INNER JOIN cygx_article as art ON art.article_id = h.article_id WHERE h.mobile = u.mobile AND h.is_del = 0 AND h.mobile <>'' ) AS history_num,
  485. ( SELECT COUNT( 1 ) FROM cygx_article_collect AS h WHERE h.user_id = u.user_id ) AS count_num,
  486. ( SELECT COUNT( 1 ) FROM cygx_chart_collect AS h WHERE h.user_id = u.user_id ) AS chart_count_num,
  487. ( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.user_id = u.user_id ) AS industry_fllow_num,
  488. ( SELECT COUNT( 1 ) FROM cygx_article_department_follow AS h WHERE h.user_id = u.user_id ) AS department_follow_num,
  489. ( SELECT COUNT( 1 ) FROM cygx_search_key_word_log AS h WHERE h.user_id = u.user_id ) AS key_word_num,
  490. ( SELECT COUNT( 1 ) FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id WHERE h.mobile = u.mobile
  491. AND t.activity_type = 1 AND h.do_fail_type = 0 ) AS on_line_num,
  492. ( SELECT COUNT( 1 ) FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id WHERE h.mobile = u.mobile
  493. AND t.activity_type = 0 AND h.do_fail_type = 0 ) AS office_num,
  494. ( SELECT COUNT( 1 ) FROM cygx_activity_special_trip AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile AND h.is_cancel = 0 ) AS trip_num,
  495. ( SELECT COUNT( 1 ) FROM cygx_micro_roadshow_video_history AS h INNER JOIN cygx_micro_roadshow_video as v ON v.video_id = h.video_id WHERE h.mobile = u.mobile ) AS roadshow_video_num,
  496. ( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS h INNER JOIN cygx_activity_video as v ON v.video_id = h.video_id WHERE h.mobile = u.mobile ) AS activity_video_num,
  497. ( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS h INNER JOIN cygx_activity_voice as v ON v.activity_voice_id = h.activity_voice_id WHERE h.mobile = u.mobile ) AS activity_voice_num,
  498. (
  499. SELECT
  500. GROUP_CONCAT( DISTINCT man.industry_name SEPARATOR ',' )
  501. FROM
  502. cygx_industrial_management AS man
  503. WHERE
  504. man.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industry_fllow AS f WHERE f.user_id = u.user_id AND f.type = 1 )
  505. ) AS labels,
  506. (
  507. SELECT
  508. GROUP_CONCAT( DISTINCT man.label SEPARATOR ',' )
  509. FROM
  510. cygx_activity AS man
  511. WHERE
  512. man.activity_id IN ( SELECT activity_id FROM cygx_activity_signup AS f WHERE f.user_id = u.user_id AND label != '')
  513. ) AS activity_label
  514. FROM
  515. wx_user AS u WHERE u.user_id IN( ` + userIds + `) `
  516. _, err = o.Raw(sql).QueryRows(&items)
  517. return
  518. }
  519. // GetWxUserListByUserIds 根据用户ID集合获取用户
  520. func GetWxUserListByUserIds(userIds string) (list []*WxUserItem, err error) {
  521. o := orm.NewOrm()
  522. sql := ` SELECT u.*, c.company_name FROM wx_user AS u
  523. INNER JOIN company AS c ON c.company_id = u.company_id
  524. WHERE user_id IN (` + userIds + `) `
  525. _, err = o.Raw(sql).QueryRows(&list)
  526. return
  527. }
  528. // GetWxUserByMobiles 根据用户手机号获取用户详情
  529. func GetWxUserByMobiles(mobiles []string) (items []*WxUser, err error) {
  530. lenmobiles := len(mobiles)
  531. if lenmobiles == 0 {
  532. return
  533. }
  534. sql := `SELECT* FROM wx_user WHERE mobile in (` + utils.GetOrmInReplace(lenmobiles) + `) `
  535. o := orm.NewOrm()
  536. _, err = o.Raw(sql, mobiles).QueryRows(&items)
  537. return
  538. }