cygx_user_record.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. package cygx
  2. import (
  3. "github.com/beego/beego/v2/client/orm"
  4. "hongze/hz_crm_api/utils"
  5. "time"
  6. )
  7. type CygxUserRecord struct {
  8. UserRecordId int `orm:"column(user_record_id);pk"`
  9. OpenId string `description:"用户openid,最大长度:32"`
  10. UnionId string `description:"用户unionid,最大长度:64"`
  11. NickName string `descritpion:"用户昵称,最大长度:32"`
  12. Sex int `descritpion:"普通用户性别,1为男性,2为女性"`
  13. Province string `description:"普通用户个人资料填写的省份,最大长度:30"`
  14. City string `description:"普通用户个人资料填写的城市,最大长度:30"`
  15. Country string `description:"国家,如中国为CN,最大长度:30"`
  16. Headimgurl string `description:"用户第三方(微信)头像,最大长度:512"`
  17. CreateTime time.Time `description:"创建时间,关系添加时间、用户授权时间"`
  18. }
  19. type OpenIdList struct {
  20. OpenId string
  21. UserId int
  22. CompanyId int `description:"公司ID"`
  23. Mobile string `description:"手机号"`
  24. }
  25. type OpenIdMobileList struct {
  26. OpenId string
  27. UserId int
  28. Mobile string `description:"手机号"`
  29. CompanyId int `description:"公司ID"`
  30. }
  31. func GetCygxUserRecord() (items []*CygxUserRecord, err error) {
  32. o := orm.NewOrmUsingDB("hz_cygx")
  33. sql := `SELECT union_id,open_id FROM cygx_user_record `
  34. _, err = o.Raw(sql).QueryRows(&items)
  35. return
  36. }
  37. // 获取所有有权限的用户的opid
  38. func GetCygxUserRecordPower(chartPermissionIds string) (items []*OpenIdList, err error) {
  39. listMobile, err := GetCygxUserRecordPowerMobileList(chartPermissionIds)
  40. if err != nil {
  41. return
  42. }
  43. var mobileArr []string
  44. for _, v := range listMobile {
  45. if v.Mobile != "" {
  46. mobileArr = append(mobileArr, v.Mobile)
  47. }
  48. }
  49. mobileLen := len(mobileArr)
  50. if mobileLen == 0 {
  51. return
  52. }
  53. openIdList, err := GetUserRecordListByMobileArr(mobileArr)
  54. if err != nil {
  55. return
  56. }
  57. items = openIdList
  58. return
  59. }
  60. // 获取所有有权限的用户的opid
  61. func GetCygxUserRecordPowerArticle(chartPermissionIds string) (items []*OpenIdList, err error) {
  62. listMobile, err := GetCygxUserRecordPowerMobileList(chartPermissionIds)
  63. if err != nil {
  64. return
  65. }
  66. var mobileArr []string
  67. for _, v := range listMobile {
  68. if v.CompanyId == utils.JMCJ_COMPANY_ID {
  69. continue //需求池 1043:深圳进门财经科技股份有限公司下所有的账号,所有活动的新增修改都做推送,所有的报告的新增修改都不做推送。
  70. }
  71. if v.Mobile != "" {
  72. mobileArr = append(mobileArr, v.Mobile)
  73. }
  74. }
  75. mobileLen := len(mobileArr)
  76. if mobileLen == 0 {
  77. return
  78. }
  79. openIdList, err := GetUserRecordListByMobileArr(mobileArr)
  80. if err != nil {
  81. return
  82. }
  83. items = openIdList
  84. return
  85. }
  86. // 获取所有有权限的用户的opid
  87. func GetCygxUserRecordPowerMobileList(chartPermissionIds string) (items []*OpenIdMobileList, err error) {
  88. o := orm.NewOrm()
  89. sql := `SELECT
  90. u.user_id,
  91. u.company_id,
  92. u.real_name,
  93. u.mobile
  94. FROM
  95. company_report_permission AS p
  96. INNER JOIN wx_user AS u ON u.company_id = p.company_id
  97. INNER JOIN user_record AS r ON r.user_id = u.user_id
  98. WHERE
  99. p.chart_permission_id IN (` + chartPermissionIds + `)
  100. AND r.create_platform = 4
  101. AND p.STATUS IN ('正式','试用','永续') GROUP BY u.user_id `
  102. _, err = o.Raw(sql).QueryRows(&items)
  103. return
  104. }
  105. // 获取关注这个文章对应产业的用户的 openid
  106. func GetCygxUserFllowOpenid(articleId int) (items []*OpenIdList, err error) {
  107. o := orm.NewOrmUsingDB("hz_cygx")
  108. sql := `SELECT
  109. cr.open_id,
  110. cr.cygx_user_id as user_id
  111. FROM
  112. cygx_xzs_choose_send AS s
  113. INNER JOIN cygx_industry_fllow AS f ON f.user_id = s.user_id
  114. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  115. INNER JOIN cygx_industrial_article_group_management as mg ON mg.industrial_management_id = f.industrial_management_id
  116. WHERE 1=1
  117. AND mg.article_id = ? AND f.follow_type = 1 `
  118. _, err = o.Raw(sql, articleId).QueryRows(&items)
  119. return
  120. }
  121. // 获取关注这个产业的用户的 openid
  122. func GetCygxUserindustryFllowOpenid(industrialId int) (items []*OpenIdList, err error) {
  123. o := orm.NewOrmUsingDB("hz_cygx")
  124. sql := `SELECT
  125. cr.open_id,
  126. cr.cygx_user_id as user_id
  127. FROM
  128. cygx_xzs_choose_send AS s
  129. INNER JOIN cygx_industry_fllow AS f ON f.user_id = s.user_id
  130. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  131. WHERE
  132. 1=1
  133. AND f.industrial_management_id = ?`
  134. _, err = o.Raw(sql, industrialId).QueryRows(&items)
  135. return
  136. }
  137. // 获取关注这个文章对应作者的用户的 openid
  138. func GetCygxUserFllowDepartmentOpenid(articleId int) (items []*OpenIdList, err error) {
  139. o := orm.NewOrmUsingDB("hz_cygx")
  140. sql := `SELECT
  141. cr.open_id,
  142. cr.cygx_user_id as user_id
  143. FROM
  144. cygx_article_department_follow AS f
  145. INNER JOIN cygx_user_record AS cr ON cr.cygx_bind_account = f.mobile
  146. INNER JOIN cygx_article AS a ON a.department_id = f.department_id
  147. WHERE
  148. 1=1
  149. AND a.article_id = ?`
  150. _, err = o.Raw(sql, articleId).QueryRows(&items)
  151. return
  152. }
  153. // 获取拒绝接收推送的的用户的 openid
  154. func GetCygxUserRefusetOpenid() (items []*OpenIdList, err error) {
  155. o := orm.NewOrmUsingDB("hz_cygx")
  156. sql := `SELECT
  157. cr.open_id,
  158. cr.cygx_user_id as user_id
  159. FROM
  160. cygx_xzs_choose_send AS s
  161. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  162. WHERE
  163. 1=1
  164. AND s.is_refuse = 1`
  165. _, err = o.Raw(sql).QueryRows(&items)
  166. return
  167. }
  168. // 获取选择策略推送的用户的openid openid
  169. func GetCygxUserFllowCeLueOpenid(categoryId int) (items []*OpenIdList, err error) {
  170. o := orm.NewOrmUsingDB("hz_cygx")
  171. sql := `SELECT
  172. cr.open_id,
  173. cr.cygx_user_id AS user_id
  174. FROM
  175. cygx_xzs_choose_send AS s
  176. INNER JOIN cygx_xzs_choose_category AS f ON f.user_id = s.user_id
  177. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  178. WHERE
  179. 1 = 1
  180. AND s.is_refuse = 0
  181. AND s.is_subjective = 1
  182. AND s.is_objective = 1
  183. AND f.follow_type = 1
  184. AND f.category_id = ?`
  185. _, err = o.Raw(sql, categoryId).QueryRows(&items)
  186. return
  187. }
  188. // 获取关注这个活动对应产业的用户的 openid
  189. func GetCygxActiviyUserFllowOpenid(activityId int) (items []*OpenIdList, err error) {
  190. o := orm.NewOrmUsingDB("hz_cygx")
  191. sql := `SELECT
  192. cr.open_id,
  193. cr.cygx_user_id AS user_id
  194. FROM
  195. cygx_user_record AS cr
  196. INNER JOIN cygx_industry_fllow AS f ON f.user_id = cr.cygx_user_id
  197. INNER JOIN cygx_industrial_activity_group_management AS mg ON mg.industrial_management_id = f.industrial_management_id
  198. WHERE
  199. 1 = 1
  200. AND mg.activity_id = ?
  201. AND mg.source = 1
  202. AND f.follow_type = 1 `
  203. _, err = o.Raw(sql, activityId).QueryRows(&items)
  204. return
  205. }
  206. //// 根据销售规模,获取所有有权限的用户的opid
  207. //func GetCygxUserRecordPowerByScale(chartPermissionIds, scale string) (items []*OpenIdList, err error) {
  208. // o := orm.NewOrm()
  209. // sql := `SELECT
  210. // cr.open_id,
  211. // u.user_id,
  212. // u.company_id,
  213. // u.real_name,
  214. // u.mobile
  215. // FROM
  216. // company_report_permission AS p
  217. // INNER JOIN wx_user AS u ON u.company_id = p.company_id
  218. // INNER JOIN user_record AS r ON r.user_id = u.user_id
  219. // INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id
  220. // INNER JOIN company_product AS cp ON cp.company_id = p.company_id
  221. // WHERE
  222. // p.chart_permission_id IN (` + chartPermissionIds + `)
  223. // AND cp.scale IN (` + scale + `)
  224. // AND r.create_platform = 4
  225. // AND p.STATUS IN ('正式','试用','永续') GROUP BY u.company_id `
  226. // _, err = o.Raw(sql).QueryRows(&items)
  227. // return
  228. //}
  229. // GetCygxUserRecordPowerByActivitySet 根据活动设置,获取所有有权限的用户的opid
  230. func GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition string, mobileArrJmcj []string) (items []*OpenIdList, itemsYx []*OpenIdList, err error) {
  231. listMobile, err := GetCygxUserRecordPowerByActivitySetListMobile(chartPermissionIds, condition)
  232. if err != nil {
  233. return
  234. }
  235. var mobileArr []string
  236. var mobileArrYx []string
  237. //需求池 1043:深圳进门财经科技股份有限公司下所有的账号,所有活动的新增修改都做推送,所有的报告的新增修改都不做推送。
  238. for _, v := range mobileArrJmcj {
  239. if v != "" {
  240. mobileArr = append(mobileArr, v)
  241. }
  242. }
  243. for _, v := range listMobile {
  244. if v.Mobile != "" {
  245. if !utils.InArrayByStr(mobileArrJmcj, v.Mobile) {
  246. mobileArrYx = append(mobileArrYx, v.Mobile)
  247. }
  248. mobileArr = append(mobileArr, v.Mobile)
  249. }
  250. }
  251. mobileLen := len(mobileArr)
  252. if mobileLen == 0 {
  253. return
  254. }
  255. openIdList, err := GetUserRecordListByMobileArr(mobileArr)
  256. if err != nil {
  257. return
  258. }
  259. items = openIdList
  260. openIdListYx, err := GetMfyxUserRecordListByMobileArr(mobileArrYx)
  261. if err != nil {
  262. return
  263. }
  264. itemsYx = openIdListYx
  265. return
  266. }
  267. // GetCygxUserRecordPowerByActivitySetListMobile 根据活动设置,获取所有有权限的用户的手机号
  268. func GetCygxUserRecordPowerByActivitySetListMobile(chartPermissionIds, condition string) (items []*OpenIdMobileList, err error) {
  269. o := orm.NewOrm()
  270. sql := `SELECT
  271. u.user_id,
  272. u.company_id,
  273. u.real_name,
  274. u.mobile
  275. FROM
  276. company_report_permission AS p
  277. INNER JOIN wx_user AS u ON u.company_id = p.company_id
  278. INNER JOIN user_record AS r ON r.user_id = u.user_id
  279. WHERE
  280. p.chart_permission_id IN (` + chartPermissionIds + `) ` + condition + `
  281. AND p.STATUS IN ('正式','试用','永续') GROUP BY u.user_id `
  282. _, err = o.Raw(sql).QueryRows(&items)
  283. return
  284. }
  285. // 获取关注了查研观向小助手公众号的所有公司ID
  286. func GetCygxUserRecordCompany() (items []*OpenIdList, err error) {
  287. listUser, err := GetCygxUserRecordCompanyUserId()
  288. if err != nil {
  289. return
  290. }
  291. var userIds []int
  292. for _, v := range listUser {
  293. userIds = append(userIds, v.UserId)
  294. }
  295. lenarr := len(userIds)
  296. if lenarr == 0 {
  297. return
  298. }
  299. var condition string
  300. var pars []interface{}
  301. condition = ` AND w.user_id IN (` + utils.GetOrmInReplace(lenarr) + `)`
  302. pars = append(pars, userIds)
  303. o := orm.NewOrm()
  304. sql := `SELECT
  305. w.company_id
  306. FROM
  307. wx_user AS w
  308. WHERE
  309. 1 = 1` + condition + `GROUP BY w.company_id `
  310. _, err = o.Raw(sql, pars).QueryRows(&items)
  311. return
  312. }
  313. // 获取关注了查研观向小助手公众号的所有用户ID
  314. func GetCygxUserRecordCompanyUserId() (items []*OpenIdList, err error) {
  315. o := orm.NewOrmUsingDB("hz_cygx")
  316. sql := `SELECT
  317. u.open_id,
  318. u.cygx_user_id AS user_id
  319. FROM
  320. cygx_user_record AS u
  321. WHERE
  322. 1 = 1
  323. AND subscribe = 1
  324. GROUP BY
  325. u.cygx_user_id `
  326. _, err = o.Raw(sql).QueryRows(&items)
  327. return
  328. }
  329. type CompanyReportPermissionItem struct {
  330. CompanyId int
  331. ChartPermissionId int
  332. IsUpgrade int `description:"是否升级,1是,0否"`
  333. Remark string `description:"备注,权限名称带有主观客观这种"`
  334. PermissionName string `description:"权限名称"`
  335. }
  336. // GetCompanyReportPermissionItem 获取客户对应的权限
  337. func GetCompanyReportPermissionItem(condition string, pars []interface{}) (items []*CompanyReportPermissionItem, err error) {
  338. o := orm.NewOrm()
  339. sql := `SELECT
  340. r.company_id,
  341. r.chart_permission_id,
  342. r.is_upgrade,
  343. c.remark,
  344. c.permission_name
  345. FROM
  346. company_report_permission AS r
  347. INNER JOIN chart_permission AS c ON r.chart_permission_id = c.chart_permission_id
  348. WHERE
  349. 1 = 1
  350. AND r.product_id = 2
  351. AND r.STATUS = '正式' ` + condition
  352. _, err = o.Raw(sql, pars).QueryRows(&items)
  353. return
  354. }
  355. // 根据手机号获取用户的openid
  356. func GetUserRecordListByMobileArr(bindAccount []string) (items []*OpenIdList, err error) {
  357. o := orm.NewOrmUsingDB("hz_cygx")
  358. lenarr := len(bindAccount)
  359. if lenarr == 0 {
  360. return
  361. }
  362. var condition string
  363. var pars []interface{}
  364. condition = ` AND u.cygx_bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
  365. pars = append(pars, bindAccount)
  366. sql := `SELECT
  367. u.open_id,
  368. u.cygx_user_id AS user_id
  369. FROM
  370. cygx_user_record AS u
  371. WHERE
  372. 1 = 1 ` + condition
  373. _, err = o.Raw(sql, pars).QueryRows(&items)
  374. return
  375. }
  376. // 获取单个用户openid
  377. func GetUserRecordOpenidByMobile(bindAccount string) (item *OpenIdList, err error) {
  378. o := orm.NewOrmUsingDB("hz_cygx")
  379. var sql string
  380. sql = `SELECT cr.open_id,cr.cygx_user_id as user_id
  381. FROM cygx_user_record AS cr
  382. WHERE cr.cygx_bind_account = ?`
  383. err = o.Raw(sql, bindAccount).QueryRow(&item)
  384. return
  385. }
  386. // 获取预约活动的用户的openID
  387. func GetActivityOpenIdList(activityId int) (items []*OpenIdList, err error) {
  388. o := orm.NewOrmUsingDB("hz_cygx")
  389. sql := `SELECT DISTINCT cr.open_id,cr.cygx_user_id as user_id
  390. FROM
  391. cygx_my_schedule AS m
  392. INNER JOIN cygx_user_record AS cr ON cr.cygx_bind_account = m.mobile
  393. WHERE m.activity_id = ? `
  394. _, err = o.Raw(sql, activityId).QueryRows(&items)
  395. return
  396. }
  397. // 获取预约活动的用户的openID
  398. func GetActivitySpecialOpenIdList() (items []*OpenIdList, err error) {
  399. o := orm.NewOrmUsingDB("hz_cygx")
  400. sql := `SELECT DISTINCT cr.open_id,cr.cygx_user_id as user_id
  401. FROM
  402. cygx_user_follow_special AS m
  403. INNER JOIN cygx_user_record AS cr ON cr.cygx_bind_account = m.mobile `
  404. _, err = o.Raw(sql).QueryRows(&items)
  405. return
  406. }
  407. // 获取关注作者的用户的openID
  408. func GetFollowDepartmentOpenIdList(departmentId int) (items []*OpenIdList, err error) {
  409. o := orm.NewOrmUsingDB("hz_cygx")
  410. sql := `SELECT DISTINCT cr.open_id,cr.cygx_user_id as user_id
  411. FROM
  412. cygx_article_department_follow AS f
  413. INNER JOIN cygx_user_record AS cr ON cr.cygx_bind_account = f.mobile
  414. WHERE
  415. f.department_id = ? `
  416. _, err = o.Raw(sql, departmentId).QueryRows(&items)
  417. return
  418. }
  419. // 获取关注产业的用户的openID
  420. func GetFollowindustrialOpenIdList(industrialManagementId int) (items []*OpenIdList, err error) {
  421. o := orm.NewOrmUsingDB("hz_cygx")
  422. sql := `SELECT DISTINCT cr.open_id,cr.cygx_user_id as user_id
  423. FROM
  424. cygx_industry_fllow AS f
  425. INNER JOIN cygx_user_record AS cr ON cr.cygx_bind_account = f.mobile
  426. WHERE
  427. f.industrial_management_id = ? `
  428. _, err = o.Raw(sql, industrialManagementId).QueryRows(&items)
  429. return
  430. }
  431. // 获取所有关注了该产业用户的openid
  432. func GetCygxUserIndustryFllowOpneidByActivityIds(activityId int) (items []*OpenIdList, err error) {
  433. o := orm.NewOrm()
  434. sql := `SELECT
  435. cr.open_id,
  436. cr.cygx_bind_account as mobile,
  437. cr.cygx_user_id AS user_id
  438. FROM
  439. cygx_industrial_activity_group_management AS agm
  440. INNER JOIN cygx_industry_fllow AS f ON f.industrial_management_id = agm.industrial_management_id
  441. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = f.user_id
  442. WHERE
  443. agm.activity_id = ? `
  444. _, err = o.Raw(sql, activityId).QueryRows(&items)
  445. return
  446. }
  447. // 获取预约活动的用户的openID
  448. func GetMfyxActivityOpenIdList(activityId int) (items []*OpenIdList, err error) {
  449. o := orm.NewOrmUsingDB("hz_cygx")
  450. sql := `SELECT DISTINCT cr.open_id,cr.cygx_user_id as user_id
  451. FROM
  452. cygx_my_schedule AS m
  453. INNER JOIN cygx_mfyx_gzh_user_record AS cr ON cr.cygx_bind_account = m.mobile
  454. WHERE m.activity_id = ? `
  455. _, err = o.Raw(sql, activityId).QueryRows(&items)
  456. return
  457. }
  458. // 根据手机号获取用户的openid
  459. func GetMfyxUserRecordListByMobileArr(bindAccount []string) (items []*OpenIdList, err error) {
  460. o := orm.NewOrmUsingDB("hz_cygx")
  461. lenarr := len(bindAccount)
  462. if lenarr == 0 {
  463. return
  464. }
  465. var condition string
  466. var pars []interface{}
  467. condition = ` AND u.cygx_bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
  468. pars = append(pars, bindAccount)
  469. sql := `SELECT
  470. u.open_id,
  471. u.cygx_user_id AS user_id
  472. FROM
  473. cygx_mfyx_gzh_user_record AS u
  474. WHERE
  475. 1 = 1 ` + condition
  476. _, err = o.Raw(sql, pars).QueryRows(&items)
  477. return
  478. }
  479. // 获取单个用户openid
  480. func GetMfyxUserRecordOpenidByMobile(bindAccount string) (item *OpenIdList, err error) {
  481. o := orm.NewOrmUsingDB("hz_cygx")
  482. var sql string
  483. sql = `SELECT cr.open_id,cr.cygx_user_id as user_id
  484. FROM cygx_mfyx_gzh_user_record AS cr
  485. WHERE cr.cygx_bind_account = ?`
  486. err = o.Raw(sql, bindAccount).QueryRow(&item)
  487. return
  488. }