cygx_user_record.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  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. }
  24. type OpenIdMobileList struct {
  25. OpenId string
  26. UserId int
  27. Mobile string `description:"手机号"`
  28. }
  29. func GetCygxUserRecord() (items []*CygxUserRecord, err error) {
  30. o := orm.NewOrmUsingDB("hz_cygx")
  31. sql := `SELECT union_id,open_id FROM cygx_user_record `
  32. _, err = o.Raw(sql).QueryRows(&items)
  33. return
  34. }
  35. // 获取所有有权限的用户的opid
  36. func GetCygxUserRecordPower(chartPermissionIds string) (items []*OpenIdList, err error) {
  37. //o := orm.NewOrm()
  38. //sql := `SELECT
  39. // cr.open_id,
  40. // u.user_id,
  41. // u.company_id,
  42. // u.real_name,
  43. // u.mobile
  44. // FROM
  45. // company_report_permission AS p
  46. // INNER JOIN wx_user AS u ON u.company_id = p.company_id
  47. // INNER JOIN user_record AS r ON r.user_id = u.user_id
  48. // INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id
  49. // WHERE
  50. // p.chart_permission_id IN (` + chartPermissionIds + `)
  51. // AND r.create_platform = 4
  52. // AND p.STATUS IN ('正式','试用','永续') GROUP BY cr.open_id `
  53. //_, err = o.Raw(sql).QueryRows(&items)
  54. listMobile, err := GetCygxUserRecordPowerMobileList(chartPermissionIds)
  55. if err != nil {
  56. return
  57. }
  58. var mobileArr []string
  59. for _, v := range listMobile {
  60. if v.Mobile != "" {
  61. mobileArr = append(mobileArr, v.Mobile)
  62. }
  63. }
  64. mobileLen := len(mobileArr)
  65. if mobileLen == 0 {
  66. return
  67. }
  68. openIdList, err := GetUserRecordListByMobileArr(mobileArr)
  69. if err != nil {
  70. return
  71. }
  72. items = openIdList
  73. return
  74. }
  75. // 获取所有有权限的用户的opid
  76. func GetCygxUserRecordPowerMobileList(chartPermissionIds string) (items []*OpenIdMobileList, err error) {
  77. o := orm.NewOrm()
  78. sql := `SELECT
  79. u.user_id,
  80. u.company_id,
  81. u.real_name,
  82. u.mobile
  83. FROM
  84. company_report_permission AS p
  85. INNER JOIN wx_user AS u ON u.company_id = p.company_id
  86. INNER JOIN user_record AS r ON r.user_id = u.user_id
  87. WHERE
  88. p.chart_permission_id IN (` + chartPermissionIds + `)
  89. AND r.create_platform = 4
  90. AND p.STATUS IN ('正式','试用','永续') GROUP BY u.user_id `
  91. _, err = o.Raw(sql).QueryRows(&items)
  92. return
  93. }
  94. // 获取关注这个文章对应产业的用户的 openid
  95. func GetCygxUserFllowOpenid(articleId int) (items []*OpenIdList, err error) {
  96. o := orm.NewOrmUsingDB("hz_cygx")
  97. sql := `SELECT
  98. cr.open_id,
  99. cr.cygx_user_id as user_id
  100. FROM
  101. cygx_xzs_choose_send AS s
  102. INNER JOIN cygx_industry_fllow AS f ON f.user_id = s.user_id
  103. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  104. INNER JOIN cygx_industrial_article_group_management as mg ON mg.industrial_management_id = f.industrial_management_id
  105. WHERE 1=1
  106. AND mg.article_id = ?`
  107. _, err = o.Raw(sql, articleId).QueryRows(&items)
  108. return
  109. }
  110. // 获取关注这个产业的用户的 openid
  111. func GetCygxUserindustryFllowOpenid(industrialId int) (items []*OpenIdList, err error) {
  112. o := orm.NewOrmUsingDB("hz_cygx")
  113. sql := `SELECT
  114. cr.open_id,
  115. cr.cygx_user_id as user_id
  116. FROM
  117. cygx_xzs_choose_send AS s
  118. INNER JOIN cygx_industry_fllow AS f ON f.user_id = s.user_id
  119. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  120. WHERE
  121. 1=1
  122. AND f.industrial_management_id = ?`
  123. _, err = o.Raw(sql, industrialId).QueryRows(&items)
  124. return
  125. }
  126. // 获取关注这个文章对应作者的用户的 openid
  127. func GetCygxUserFllowDepartmentOpenid(articleId int) (items []*OpenIdList, err error) {
  128. o := orm.NewOrmUsingDB("hz_cygx")
  129. sql := `SELECT
  130. cr.open_id,
  131. cr.cygx_user_id as user_id
  132. FROM
  133. cygx_article_department_follow AS f
  134. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = f.user_id
  135. INNER JOIN cygx_article AS a ON a.department_id = f.department_id
  136. WHERE
  137. 1=1
  138. AND a.article_id = ?`
  139. _, err = o.Raw(sql, articleId).QueryRows(&items)
  140. return
  141. }
  142. // 获取拒绝接收推送的的用户的 openid
  143. func GetCygxUserRefusetOpenid() (items []*OpenIdList, err error) {
  144. o := orm.NewOrmUsingDB("hz_cygx")
  145. sql := `SELECT
  146. cr.open_id,
  147. cr.cygx_user_id as user_id
  148. FROM
  149. cygx_xzs_choose_send AS s
  150. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  151. WHERE
  152. 1=1
  153. AND s.is_refuse = 1`
  154. _, err = o.Raw(sql).QueryRows(&items)
  155. return
  156. }
  157. // 获取选择策略推送的用户的openid openid
  158. func GetCygxUserFllowCeLueOpenid(categoryId int) (items []*OpenIdList, err error) {
  159. o := orm.NewOrm()
  160. sql := `SELECT
  161. cr.open_id,
  162. cr.cygx_user_id AS user_id
  163. FROM
  164. cygx_xzs_choose_send AS s
  165. INNER JOIN cygx_xzs_choose_category AS f ON f.user_id = s.user_id
  166. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  167. WHERE
  168. 1 = 1
  169. AND s.is_refuse = 0
  170. AND s.is_subjective = 1
  171. AND s.is_objective = 1
  172. AND f.category_id = ?`
  173. _, err = o.Raw(sql, categoryId).QueryRows(&items)
  174. return
  175. }
  176. // 获取关注这个活动对应产业的用户的 openid
  177. func GetCygxActiviyUserFllowOpenid(activityId int) (items []*OpenIdList, err error) {
  178. o := orm.NewOrm()
  179. sql := `SELECT
  180. cr.open_id,
  181. cr.cygx_user_id AS user_id
  182. FROM
  183. cygx_xzs_choose_send AS s
  184. INNER JOIN cygx_industry_fllow AS f ON f.user_id = s.user_id
  185. INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id
  186. INNER JOIN cygx_industrial_activity_group_management AS mg ON mg.industrial_management_id = f.industrial_management_id
  187. WHERE
  188. 1=1
  189. AND mg.activity_id = ?`
  190. _, err = o.Raw(sql, activityId).QueryRows(&items)
  191. return
  192. }
  193. //// 根据销售规模,获取所有有权限的用户的opid
  194. //func GetCygxUserRecordPowerByScale(chartPermissionIds, scale string) (items []*OpenIdList, err error) {
  195. // o := orm.NewOrm()
  196. // sql := `SELECT
  197. // cr.open_id,
  198. // u.user_id,
  199. // u.company_id,
  200. // u.real_name,
  201. // u.mobile
  202. // FROM
  203. // company_report_permission AS p
  204. // INNER JOIN wx_user AS u ON u.company_id = p.company_id
  205. // INNER JOIN user_record AS r ON r.user_id = u.user_id
  206. // INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id
  207. // INNER JOIN company_product AS cp ON cp.company_id = p.company_id
  208. // WHERE
  209. // p.chart_permission_id IN (` + chartPermissionIds + `)
  210. // AND cp.scale IN (` + scale + `)
  211. // AND r.create_platform = 4
  212. // AND p.STATUS IN ('正式','试用','永续') GROUP BY u.company_id `
  213. // _, err = o.Raw(sql).QueryRows(&items)
  214. // return
  215. //}
  216. // GetCygxUserRecordPowerByActivitySet 根据活动设置,获取所有有权限的用户的opid
  217. func GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition string) (items []*OpenIdList, err error) {
  218. //o := orm.NewOrm()
  219. //sql := `SELECT
  220. // cr.open_id,
  221. // u.user_id,
  222. // u.company_id,
  223. // u.real_name,
  224. // u.mobile
  225. // FROM
  226. // company_report_permission AS p
  227. // INNER JOIN wx_user AS u ON u.company_id = p.company_id
  228. // INNER JOIN user_record AS r ON r.user_id = u.user_id
  229. // INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id
  230. // WHERE
  231. // p.chart_permission_id IN (` + chartPermissionIds + `) ` + condition + ` AND r.create_platform = 4
  232. // AND p.STATUS IN ('正式','试用','永续') GROUP BY cr.open_id `
  233. //_, err = o.Raw(sql).QueryRows(&items)
  234. listMobile, err := GetCygxUserRecordPowerByActivitySetListMobile(chartPermissionIds, condition)
  235. if err != nil {
  236. return
  237. }
  238. var mobileArr []string
  239. for _, v := range listMobile {
  240. if v.Mobile != "" {
  241. mobileArr = append(mobileArr, v.Mobile)
  242. }
  243. }
  244. mobileLen := len(mobileArr)
  245. if mobileLen == 0 {
  246. return
  247. }
  248. openIdList, err := GetUserRecordListByMobileArr(mobileArr)
  249. if err != nil {
  250. return
  251. }
  252. items = openIdList
  253. return
  254. }
  255. // GetCygxUserRecordPowerByActivitySetListMobile 根据活动设置,获取所有有权限的用户的手机号
  256. func GetCygxUserRecordPowerByActivitySetListMobile(chartPermissionIds, condition string) (items []*OpenIdMobileList, err error) {
  257. o := orm.NewOrm()
  258. sql := `SELECT
  259. u.user_id,
  260. u.company_id,
  261. u.real_name,
  262. u.mobile
  263. FROM
  264. company_report_permission AS p
  265. INNER JOIN wx_user AS u ON u.company_id = p.company_id
  266. INNER JOIN user_record AS r ON r.user_id = u.user_id
  267. WHERE
  268. p.chart_permission_id IN (` + chartPermissionIds + `) ` + condition + `
  269. AND p.STATUS IN ('正式','试用','永续') GROUP BY u.user_id `
  270. _, err = o.Raw(sql).QueryRows(&items)
  271. return
  272. }
  273. // 获取关注了查研观向小助手公众号的所有公司ID
  274. func GetCygxUserRecordCompany() (items []*OpenIdList, err error) {
  275. listUser, err := GetCygxUserRecordCompanyUserId()
  276. if err != nil {
  277. return
  278. }
  279. var userIds []int
  280. for _, v := range listUser {
  281. userIds = append(userIds, v.UserId)
  282. }
  283. lenarr := len(userIds)
  284. if lenarr == 0 {
  285. return
  286. }
  287. var condition string
  288. var pars []interface{}
  289. condition = ` AND w.user_id IN (` + utils.GetOrmInReplace(lenarr) + `)`
  290. pars = append(pars, userIds)
  291. o := orm.NewOrm()
  292. sql := `SELECT
  293. w.company_id
  294. FROM
  295. wx_user AS w
  296. WHERE
  297. 1 = 1` + condition + `GROUP BY w.company_id `
  298. _, err = o.Raw(sql, pars).QueryRows(&items)
  299. return
  300. }
  301. // 获取关注了查研观向小助手公众号的所有用户ID
  302. func GetCygxUserRecordCompanyUserId() (items []*OpenIdList, err error) {
  303. o := orm.NewOrmUsingDB("hz_cygx")
  304. sql := `SELECT
  305. u.cygx_user_id AS user_id
  306. FROM
  307. cygx_user_record AS u
  308. WHERE
  309. 1 = 1
  310. AND subscribe = 1
  311. GROUP BY
  312. u.cygx_user_id `
  313. _, err = o.Raw(sql).QueryRows(&items)
  314. return
  315. }
  316. type CompanyReportPermissionItem struct {
  317. CompanyId int
  318. ChartPermissionId int
  319. IsUpgrade int `description:"是否升级,1是,0否"`
  320. Remark string `description:"备注,权限名称带有主观客观这种"`
  321. PermissionName string `description:"权限名称"`
  322. }
  323. // GetCompanyReportPermissionItem 获取客户对应的权限
  324. func GetCompanyReportPermissionItem(condition string, pars []interface{}) (items []*CompanyReportPermissionItem, err error) {
  325. o := orm.NewOrm()
  326. sql := `SELECT
  327. r.company_id,
  328. r.chart_permission_id,
  329. r.is_upgrade,
  330. c.remark,
  331. c.permission_name
  332. FROM
  333. company_report_permission AS r
  334. INNER JOIN chart_permission AS c ON r.chart_permission_id = c.chart_permission_id
  335. WHERE
  336. 1 = 1
  337. AND r.product_id = 2
  338. AND r.STATUS = '正式' ` + condition
  339. _, err = o.Raw(sql, pars).QueryRows(&items)
  340. return
  341. }
  342. // 根据手机号获取用户的openid
  343. func GetUserRecordListByMobileArr(bindAccount []string) (items []*OpenIdList, err error) {
  344. o := orm.NewOrmUsingDB("hz_cygx")
  345. lenarr := len(bindAccount)
  346. if lenarr == 0 {
  347. return
  348. }
  349. var condition string
  350. var pars []interface{}
  351. condition = ` AND u.cygx_bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
  352. pars = append(pars, bindAccount)
  353. sql := `SELECT
  354. u.open_id,
  355. u.cygx_user_id AS user_id
  356. FROM
  357. cygx_user_record AS u
  358. WHERE
  359. 1 = 1 ` + condition
  360. _, err = o.Raw(sql, pars).QueryRows(&items)
  361. return
  362. }