activity_meet.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. package cygx
  2. import (
  3. "fmt"
  4. "hongze/hz_crm_api/utils"
  5. //"hongze/hz_crm_api/models"
  6. "github.com/beego/beego/v2/client/orm"
  7. "github.com/rdlucklib/rdluck_tools/paging"
  8. "time"
  9. )
  10. // 活动详情
  11. type CygxMeetList struct {
  12. ActivityId int `orm:"column(activity_id);pk";description:"活动ID 等于0新增活动,大于0修改活动"`
  13. ActivityName string `description:"活动名称"`
  14. ActivityTypeName string `description:"活动类型名称"`
  15. ActivityTypeId int `description:"活动类型ID"`
  16. ChartPermissionName string `description:"行业名称"`
  17. ChartPermissionNames string `description:"行业名称"`
  18. ActivityTime string `description:"活动时间"`
  19. ActivityTimeText string `description:"活动时间带文字"`
  20. SignupPeopleNum int `description:"报名人数/预约外呼人数"`
  21. MeetPeopleNum int `description:"实际参会人数"`
  22. PotentialPeopleNum int `description:"潜在参会人数"`
  23. OmeetPeopleNum int `description:"实际参会人数(辅助字段不使用)"`
  24. IsSubmitMeeting int `description:"是否提交过到会信息 ,1是,0否"`
  25. OperationStyle int `description:"操作方式,1提交到会情况/上传参会表格,2修改到会详情/重新上传"`
  26. UpdateTime string `description:"更新时间"`
  27. IsCClassMeeting bool `description:"是否是c类电话会"`
  28. SubmitMeetingType int `description:"操作展示类型 ,1修改到会详情"`
  29. IsShowAttendanceDetails bool `description:"是否展示到会详情"`
  30. IsShowHandMovement bool `description:"是否展示手动匹配"`
  31. IsShowSubmitMeeting bool `description:"是否展示提交到会情况"`
  32. IsShowUpdateMeeting bool `description:"是否展示修改到会情况"`
  33. YidongActivityId string `description:"易董的活动ID"`
  34. ActivityJoinType string `description:"易董活动入会类型01报名审核后可入会 02预约即可入会 03仅定向邀请人员可入会"`
  35. IsYidongConduct int `description:"是否属于易董办会 1:是 、0:否"`
  36. IsShowSigninButton bool `description:"是否展示签到码按钮"`
  37. SigninImg string `description:"签到码图片"`
  38. ChartPermissionNameDeputy string `description:"副行业名称"`
  39. }
  40. type GetCygxMeetListRep struct {
  41. Paging *paging.PagingItem `description:"分页数据"`
  42. List []*CygxMeetList
  43. }
  44. // 获取数量
  45. func GetCygxMeetCount(condition string, pars []interface{}) (count int, err error) {
  46. sqlCount := ` SELECT COUNT(1) AS count FROM cygx_activity as a WHERE 1= 1 `
  47. if condition != "" {
  48. sqlCount += condition
  49. }
  50. o := orm.NewOrm()
  51. err = o.Raw(sqlCount, pars).QueryRow(&count)
  52. return
  53. }
  54. // 列表
  55. func GetCygxMeetListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxMeetList, err error) {
  56. o := orm.NewOrm()
  57. sql := `SELECT
  58. ( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s INNER JOIN wx_user as u ON u.user_id = s.user_id WHERE s.activity_id = a.activity_id AND s.is_cancel = 0 AND s.do_fail_type = 0 AND s.company_id != 16 ) AS signup_people_num,
  59. ( SELECT COUNT( 1 ) FROM cygx_activity_signin AS s INNER JOIN wx_user as u ON u.user_id = s.user_id WHERE s.activity_id = a.activity_id AND s.company_id <= 1 ) AS potential_people_num,
  60. ( SELECT COUNT( DISTINCT d.mobile ) FROM cygx_activity_attendance_detail AS d WHERE d.activity_id = a.activity_id AND( is_meeting_str = 1 or d.company_id <= 1) ) AS meet_people_num,
  61. ( SELECT COUNT( 1 ) FROM cygx_activity_offline_meeting_detail AS o WHERE o.activity_id = a.activity_id AND is_meeting = 1 ) AS omeet_people_num,
  62. a.*
  63. FROM cygx_activity as a
  64. WHERE 1= 1 `
  65. if condition != "" {
  66. sql += condition
  67. }
  68. sql += ` LIMIT ?,?`
  69. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  70. return
  71. }
  72. type CygxActivityMeet struct {
  73. Id int `orm:"column(id);pk"description:"ID"`
  74. UserId int `description:"用户id,多个用,隔开"`
  75. ActivityId int `description:"活动ID"`
  76. CreateTime time.Time `description:"创建时间"`
  77. Mobile string `description:"手机号"`
  78. Email string `description:"邮箱号"`
  79. CompanyId int `description:"公司ID"`
  80. CompanyName string `description:"公司名称"`
  81. Source int `description:"来源,1小程序,2后台添加"`
  82. }
  83. // 获取用户报名数量
  84. func GetActivityMeetCount(uid, activityId int) (count int, err error) {
  85. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND activity_id=? `
  86. o := orm.NewOrm()
  87. err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
  88. return
  89. }
  90. // 报名信息Excel下载
  91. type MeetExportRep struct {
  92. Mobile string `description:"手机号"`
  93. CompanyName string `description:"公司名称"`
  94. RealName string `description:"姓名"`
  95. CountryCode string `description:"区号"`
  96. }
  97. type MeetingDoRep struct {
  98. Ids string `description:"报名ID,多个ID用 , 隔开"`
  99. ActivityId int `description:"活动ID"`
  100. }
  101. type SignUpRestrictUid struct {
  102. UserId int `description:"用户ID"`
  103. }
  104. // 到会操作
  105. func MeetingDo(meetingUids, noMeetingUids string, ActivityId int, items []*CygxActivityOfflineMeetingDetail) (err error) {
  106. o := orm.NewOrm()
  107. to, err := o.Begin()
  108. if err != nil {
  109. return
  110. }
  111. defer func() {
  112. if err != nil {
  113. fmt.Println(err)
  114. _ = to.Rollback()
  115. } else {
  116. _ = to.Commit()
  117. }
  118. }()
  119. fmt.Println("ActivityId", ActivityId)
  120. //修改报名表的参会记录
  121. sql := `UPDATE cygx_activity_signup SET is_meeting = 0 WHERE activity_id =? `
  122. _, err = to.Raw(sql, ActivityId).Exec()
  123. if err != nil {
  124. return
  125. }
  126. sql = `UPDATE cygx_activity_signup SET is_meeting = 1 WHERE activity_id =? AND user_id IN (` + meetingUids + `)`
  127. _, err = to.Raw(sql, ActivityId).Exec()
  128. if err != nil {
  129. return
  130. }
  131. sql = `UPDATE cygx_activity SET is_submit_meeting = 1 , submit_meeting_type = 1 WHERE activity_id = ? `
  132. _, err = to.Raw(sql, ActivityId).Exec()
  133. if err != nil {
  134. return
  135. }
  136. //删除老的记录并插入新的记录
  137. sql = `DELETE FROM cygx_activity_offline_meeting_detail WHERE activity_id = ? `
  138. _, err = to.Raw(sql, ActivityId).Exec()
  139. if err != nil {
  140. return
  141. }
  142. if len(items) > 0 {
  143. //批量添加记录
  144. _, err = to.InsertMulti(len(items), items)
  145. if err != nil {
  146. return
  147. }
  148. }
  149. if len(noMeetingUids) > 0 {
  150. sql = `UPDATE cygx_activity_offline_meeting_detail SET is_meeting = 0 WHERE activity_id =? AND user_id IN (` + noMeetingUids + `)`
  151. _, err = to.Raw(sql, ActivityId).Exec()
  152. if err != nil {
  153. return
  154. }
  155. }
  156. //添加记录表的到会信息
  157. sql = `UPDATE cygx_activity_signup_detail SET is_meeting = 1 WHERE activity_id =? AND user_id IN (` + meetingUids + `)`
  158. _, err = to.Raw(sql, ActivityId).Exec()
  159. if err != nil {
  160. return
  161. }
  162. return
  163. }
  164. // 获取数量
  165. func GetCygxBreakAppointmentCount(condition string, pars []interface{}) (count int, err error) {
  166. sqlCount := ` SELECT COUNT(1) count FROM ( SELECT u.user_id
  167. FROM
  168. cygx_activity_signup_break AS s
  169. INNER JOIN wx_user AS u ON u.user_id = s.user_id
  170. INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  171. INNER JOIN company_product AS p ON p.company_id = u.company_id WHERE 1 = 1 ` + condition + ` GROUP BY u.user_id) AS c `
  172. o := orm.NewOrm()
  173. err = o.Raw(sqlCount, pars).QueryRow(&count)
  174. return
  175. }
  176. // 爽约记录列表
  177. type CygxBreakAppointmentList struct {
  178. UserId int `description:"用户ID"`
  179. CompanyId int `description:"公司ID"`
  180. RealName string `description:"姓名"`
  181. Mobile string `description:"手机号"`
  182. CompanyName string `description:"公司名称"`
  183. SellerName string `description:"销售姓名"`
  184. BreakAppointmentNum int `description:"爽约次数"`
  185. IsRestrict int `description:"是否被限制报名"`
  186. Operation bool `description:"是否被限制报名操作,true限制,false不限制"`
  187. }
  188. type GetCygxBreakAppointmentListRep struct {
  189. Paging *paging.PagingItem `description:"分页数据"`
  190. List []*CygxBreakAppointmentList
  191. }
  192. func GetCygxBreakAppointmentList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxBreakAppointmentList, err error) {
  193. o := orm.NewOrm()
  194. sql := `SELECT
  195. ( SELECT COUNT( 1 ) FROM cygx_activity_restrict_signup AS sig WHERE sig.user_id = u.user_id AND sig.is_restrict = 1 ) AS is_restrict,
  196. (
  197. SELECT
  198. COUNT( 1 ) count
  199. FROM
  200. cygx_activity_signup_break AS s
  201. INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  202. WHERE
  203. 1 = 1
  204. AND s.user_id = u.user_id
  205. ) AS break_appointment_num,
  206. u.real_name,
  207. u.mobile,
  208. u.user_id,
  209. u.company_id,
  210. c.company_name,
  211. s.activity_id
  212. FROM
  213. cygx_activity_signup_break AS s
  214. INNER JOIN wx_user AS u ON u.user_id = s.user_id
  215. INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  216. INNER JOIN company_product AS p ON p.company_id = u.company_id
  217. INNER JOIN company AS c ON c.company_id = u.company_id
  218. WHERE
  219. 1 = 1 `
  220. if condition != "" {
  221. sql += condition
  222. }
  223. sql += ` GROUP BY u.user_id ORDER BY break_appointment_num DESC,a.activity_time DESC LIMIT ?,?`
  224. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  225. return
  226. }
  227. // 获取爽约次数数量
  228. func GetCygxBreakAppointmentUserCount(uid int) (count int, err error) {
  229. sqlCount := ` SELECT COUNT(1) count
  230. FROM
  231. cygx_activity_signup AS s
  232. LEFT JOIN wx_user AS u ON u.user_id = s.user_id
  233. LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  234. WHERE
  235. s.activity_id = a.activity_id
  236. AND s.is_meeting = 0
  237. AND a.is_submit_meeting = 1
  238. AND s.user_id = ? `
  239. o := orm.NewOrm()
  240. err = o.Raw(sqlCount, uid).QueryRow(&count)
  241. return
  242. }
  243. func GetCompanySellerName(companyId int) (sellerName string, err error) {
  244. sql := `SELECT
  245. GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS sellerName
  246. FROM
  247. company_product AS p
  248. WHERE
  249. p.company_id = ?`
  250. o := orm.NewOrm()
  251. err = o.Raw(sql, companyId).QueryRow(&sellerName)
  252. return
  253. }
  254. //end
  255. // 销售名称
  256. type CygxSellerNameList struct {
  257. SellerName string `orm:"column(real_name);"description:"销售姓名"`
  258. }
  259. type GetCygxSellerNameListRep struct {
  260. List []*CygxSellerNameList
  261. }
  262. func GetCygxSellerNameList() (items []*CygxSellerNameList, err error) {
  263. o := orm.NewOrm()
  264. sql := `SELECT real_name FROM admin WHERE role = 'sales' `
  265. _, err = o.Raw(sql).QueryRows(&items)
  266. return
  267. }
  268. //end
  269. // 活动详情
  270. type CygxActivityBreakAppointment struct {
  271. ActivityName string `description:"活动名称"`
  272. ActivityTypeName string `description:"活动类型名称"`
  273. ChartPermissionName string `description:"行业名称"`
  274. ActivityTimeText string `description:"活动时间带文字"`
  275. }
  276. type GetCygxActivityBreakAppointmentRep struct {
  277. List []*CygxActivityBreakAppointment
  278. }
  279. func GetCygxActivityBreakAppointmentList(mobile string) (items []*CygxActivityBreakAppointment, err error) {
  280. o := orm.NewOrm()
  281. sql := `SELECT a.activity_name,a.activity_type_name,a.chart_permission_name,a.activity_time_text
  282. FROM cygx_activity AS a
  283. INNER JOIN cygx_activity_signup_break AS s ON s.activity_id = a.activity_id
  284. WHERE 1 = 1
  285. AND s.mobile = ? `
  286. _, err = o.Raw(sql, mobile).QueryRows(&items)
  287. return
  288. } //end
  289. // 报名限制
  290. func AddSignUpRestrict(uid int) (err error) {
  291. o := orm.NewOrm()
  292. to, err := o.Begin()
  293. if err != nil {
  294. return
  295. }
  296. defer func() {
  297. if err != nil {
  298. _ = to.Rollback()
  299. } else {
  300. _ = to.Commit()
  301. }
  302. }()
  303. var count int
  304. sql := `SELECT COUNT(1) AS count FROM cygx_activity_restrict_signup WHERE user_id=? `
  305. err = to.Raw(sql, uid).QueryRow(&count)
  306. if err != nil {
  307. return
  308. }
  309. //if count == 0 {
  310. // sql = `DELETE FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
  311. // _, err = to.Raw(sql, item.UserId, item.ActivityId).Exec()
  312. // if err != nil {
  313. // return
  314. // }
  315. //}
  316. //
  317. //sql := `UPDATE cygx_activity_signup SET is_meeting = 0 WHERE activity_id =? `
  318. //_, err = to.Raw(sql, uid).Exec()
  319. //if err != nil {
  320. // return
  321. //}
  322. //sql = `UPDATE cygx_activity_signup SET is_meeting = 1 WHERE activity_id =? AND id IN `
  323. //_, err = to.Raw(sql, uid).Exec()
  324. //if err != nil {
  325. // return
  326. //}
  327. sql = `UPDATE cygx_activity SET is_submit_meeting = 1 WHERE activity_id = ? `
  328. _, err = to.Raw(sql, uid).Exec()
  329. return
  330. }
  331. // 获取爽约次数
  332. func GetUserBreakAppointmentCount(uid int) (count int, err error) {
  333. sqlCount := `SELECT COUNT(1) count FROM (
  334. SELECT
  335. ( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = a.activity_id AND s.is_meeting = 0 AND a.is_submit_meeting = 1 ) AS break_appointment_num
  336. FROM
  337. cygx_activity_signup AS s
  338. INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  339. WHERE
  340. 1 = 1
  341. AND s.is_meeting = 0
  342. AND a.is_submit_meeting = 1
  343. AND s.user_id = ?
  344. GROUP BY
  345. s.user_id ) as cn `
  346. o := orm.NewOrm()
  347. err = o.Raw(sqlCount, uid).QueryRow(&count)
  348. return
  349. }
  350. func GetCygxActivityRestrictSignupCount(uid int) (count int, err error) {
  351. o := orm.NewOrm()
  352. sql := `SELECT COUNT(1) AS count FROM cygx_activity_restrict_signup WHERE user_id=? `
  353. err = o.Raw(sql, uid).QueryRow(&count)
  354. return
  355. }
  356. // 获取限制报名详情
  357. func GetCygxActivityRestrictSignupInfo(uid int) (item *CygxActivityRestrictSignup, err error) {
  358. o := orm.NewOrm()
  359. sql := `SELECT * FROM cygx_activity_restrict_signup WHERE user_id=?`
  360. err = o.Raw(sql, uid).QueryRow(&item)
  361. return
  362. }
  363. // 修改报名限制状态
  364. func UpdateCygxActivityRestrictSignup(newIsRestrict, uid int) (err error) {
  365. sql := `UPDATE cygx_activity_restrict_signup SET is_restrict=? WHERE user_id=? `
  366. o := orm.NewOrm()
  367. _, err = o.Raw(sql, newIsRestrict, uid).Exec()
  368. return
  369. }
  370. type MeetingExportRep struct {
  371. CompanyName string `description:"公司名称"`
  372. CompanyId int `description:"公司ID"`
  373. Status string `description:"状态"`
  374. RealName string `description:"姓名"`
  375. Mobile string `description:"手机号"`
  376. PsellerName string `description:"所属销售"`
  377. ActivityName string `description:"活动名称"`
  378. ChartPermissionName string `description:"行业名称"`
  379. ActivityTypeName string `description:"活动类型名称"`
  380. ActivityTimeText string `description:"活动时间带文字"`
  381. Permission string `description:"开通权限"`
  382. }
  383. func GetMeetingExport(sqlStr string) (item []*MeetingExportRep, err error) {
  384. o := orm.NewOrm()
  385. sql := `SELECT s.id, s.company_name,s.mobile,u.real_name,a.activity_name,a.chart_permission_name,a.activity_type_name,a.activity_time_text,p.status,p.seller_name,
  386. GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name,
  387. GROUP_CONCAT( DISTINCT c.chart_permission_name SEPARATOR '/' ) AS permission,
  388. ( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.company_id = u.company_id AND s.is_cancel = 0 AND s.fail_type = 0 ) AS company_num,
  389. ( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.user_id = u.user_id AND s.is_cancel = 0 AND s.fail_type = 0 ) AS user_num
  390. FROM
  391. cygx_activity_signup AS s
  392. INNER JOIN wx_user AS u ON u.user_id = s.user_id
  393. INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  394. LEFT JOIN company_product AS p ON p.company_id = s.company_id
  395. LEFT JOIN company_report_permission AS re ON re.company_id = s.company_id
  396. LEFT JOIN chart_permission AS c ON c.chart_permission_id = re.chart_permission_id
  397. WHERE 1 = 1
  398. AND s.fail_type = 0
  399. AND s.is_cancel = 0
  400. AND p.status IN ( '正式', '试用' )
  401. AND p.is_suspend = 0
  402. AND c.is_report = 1 ` + sqlStr + ` GROUP BY s.id ORDER BY company_num DESC,user_num DESC,a.activity_time DESC `
  403. _, err = o.Raw(sql).QueryRows(&item)
  404. return
  405. }
  406. // 获取报名了的用户IDs
  407. func GetSignupUserIds(activityId int, uIds string) (signupUids string, err error) {
  408. sql := ` SELECT
  409. GROUP_CONCAT( DISTINCT s.user_id SEPARATOR ',' ) AS signupUids
  410. FROM cygx_activity_signup AS s
  411. WHERE s.activity_id = ? AND s.do_fail_type = 0 AND s.user_id not IN (` + uIds + `)`
  412. o := orm.NewOrm()
  413. err = o.Raw(sql, activityId).QueryRow(&signupUids)
  414. return
  415. }
  416. // 获取报名了的用户IDs
  417. func GetSignupUserIdsFromOfflineMeeting(Ids string) (signupUids string, err error) {
  418. sql := ` SELECT
  419. GROUP_CONCAT( DISTINCT s.user_id SEPARATOR ',' ) AS signupUids
  420. FROM cygx_activity_offline_meeting_detail AS s WHERE s.id IN (` + Ids + `)`
  421. o := orm.NewOrm()
  422. err = o.Raw(sql).QueryRow(&signupUids)
  423. return
  424. }
  425. // 线下到会数据
  426. func GetMeetingExportOffline(condition string) (items []*MeetingExportRep, err error) {
  427. o := orm.NewOrm()
  428. sql := `SELECT
  429. s.id,
  430. s.company_name,
  431. s.company_id,
  432. s.mobile,
  433. u.real_name,
  434. a.activity_name,
  435. a.chart_permission_name,
  436. a.activity_type_name,
  437. a.activity_time_text,
  438. p.status,
  439. p.seller_name,
  440. GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name,
  441. GROUP_CONCAT( DISTINCT c.chart_permission_name SEPARATOR '/' ) AS permission,
  442. ( SELECT COUNT( 1 ) FROM cygx_activity_offline_meeting_detail AS s WHERE s.company_id = u.company_id AND s.is_meeting = 1 ) AS company_num,
  443. ( SELECT COUNT( 1 ) FROM cygx_activity_offline_meeting_detail AS s WHERE s.user_id = u.user_id AND s.is_meeting = 1 ) AS user_num
  444. FROM
  445. cygx_activity_offline_meeting_detail AS s
  446. INNER JOIN wx_user AS u ON u.user_id = s.user_id
  447. INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  448. LEFT JOIN company_product AS p ON p.company_id = s.company_id
  449. LEFT JOIN company_report_permission AS re ON re.company_id = s.company_id
  450. LEFT JOIN chart_permission AS c ON c.chart_permission_id = re.chart_permission_id
  451. WHERE
  452. 1 = 1
  453. AND p.status IN ( '正式', '试用' )
  454. AND p.is_suspend = 0
  455. AND c.is_report = 1
  456. AND a.active_state = 3
  457. AND s.is_meeting = 1 `
  458. if condition != "" {
  459. sql += condition
  460. }
  461. sql += ` GROUP BY s.id ORDER BY company_num DESC, user_num DESC, a.activity_time DESC, p.company_id DESC `
  462. _, err = o.Raw(sql).QueryRows(&items)
  463. return
  464. }
  465. // 线上到会数据
  466. func GetMeetingExportOnline(condition string) (items []*MeetingExportRep, err error) {
  467. o := orm.NewOrm()
  468. sql := `SELECT
  469. s.attendance_id,
  470. s.company_name,
  471. s.company_id,
  472. s.mobile,
  473. u.real_name,
  474. a.activity_name,
  475. a.chart_permission_name,
  476. a.activity_type_name,
  477. a.activity_time_text,
  478. p.status,
  479. p.seller_name,
  480. GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name,
  481. GROUP_CONCAT( DISTINCT c.chart_permission_name SEPARATOR '/' ) AS permission,
  482. ( SELECT COUNT( 1 ) FROM cygx_activity_attendance_detail AS s WHERE s.company_id = p.company_id ) AS company_num,
  483. ( SELECT COUNT( 1 ) FROM cygx_activity_attendance_detail AS s WHERE s.mobile = u.outbound_mobile ) AS user_num
  484. FROM
  485. cygx_activity_attendance_detail AS s
  486. INNER JOIN wx_user AS u ON u.outbound_mobile = s.mobile
  487. INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  488. LEFT JOIN company_product AS p ON p.company_id = u.company_id
  489. LEFT JOIN company_report_permission AS re ON re.company_id = u.company_id
  490. LEFT JOIN chart_permission AS c ON c.chart_permission_id = re.chart_permission_id
  491. WHERE
  492. 1 = 1
  493. AND p.status IN ( '正式', '试用' )
  494. AND p.is_suspend = 0
  495. AND c.is_report = 1
  496. AND a.active_state = 3 `
  497. if condition != "" {
  498. sql += condition
  499. }
  500. sql += `GROUP BY s.attendance_id ORDER BY company_num DESC, user_num DESC, a.activity_time DESC,p.company_id DESC `
  501. _, err = o.Raw(sql).QueryRows(&items)
  502. return
  503. }
  504. // 到会数据
  505. func GetMeetingExportAll(condition string) (items []*MeetingExportRep, err error) {
  506. o := orm.NewOrm()
  507. sql := `SELECT
  508. s.attendance_id,
  509. s.company_name,
  510. s.company_id,
  511. s.mobile,
  512. u.real_name,
  513. a.activity_name,
  514. a.chart_permission_name,
  515. a.activity_type_name,
  516. a.activity_time_text,
  517. p.status,
  518. p.seller_name,
  519. GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name,
  520. GROUP_CONCAT( DISTINCT c.chart_permission_name SEPARATOR '/' ) AS permission
  521. FROM
  522. cygx_activity_meet_detail_log AS s
  523. INNER JOIN wx_user AS u ON u.outbound_mobile = s.mobile
  524. INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
  525. INNER JOIN company_product AS p ON p.company_id = u.company_id
  526. INNER JOIN company_report_permission AS re ON re.company_id = u.company_id
  527. INNER JOIN chart_permission AS c ON c.chart_permission_id = re.chart_permission_id
  528. WHERE
  529. 1 = 1
  530. AND p.status IN ( '正式', '试用' )
  531. AND p.is_suspend = 0
  532. AND c.is_report = 1
  533. AND s.company_name != ''
  534. AND a.active_state = 3 `
  535. if condition != "" {
  536. sql += condition
  537. }
  538. sql += ` GROUP BY s.attendance_id ORDER BY s.company_meet_num DESC, s.user_meet_num DESC, a.activity_time DESC,p.company_id DESC `
  539. _, err = o.Raw(sql).QueryRows(&items)
  540. return
  541. }
  542. func GetCompanyAciviytyGroupDate() (item []*CreateTimesResp, err error) {
  543. o := orm.NewOrm()
  544. sql := ` SELECT date_format(activity_time,'%Y-%m') as create_times FROM cygx_activity WHERE 1=1 AND activity_time <= NOW() GROUP BY create_times ORDER BY create_times DESC `
  545. _, err = o.Raw(sql).QueryRows(&item)
  546. return
  547. }
  548. type CygxYidongActivityMeetingApiLog struct {
  549. Id int `orm:"column(id);pk"`
  550. Data string `description:"返回结果数据"`
  551. YidongActivityId string `description:"易董活动ID"`
  552. CreateTime string `description:"本地创建时间"`
  553. }
  554. // 获取限制报名详情
  555. func GetCygxActivityYiDongUpdateTime(yidongActivityId string) (item *CygxYidongActivityMeetingApiLog, err error) {
  556. o := orm.NewOrm()
  557. sql := `SELECT * FROM cygx_yidong_activity_meeting_api_log WHERE yidong_activity_id = ? ORDER BY id DESC LIMIT 1`
  558. err = o.Raw(sql, yidongActivityId).QueryRow(&item)
  559. return
  560. }
  561. type CygxAtivityIdMeetNum struct {
  562. ActivityId int `description:"活动ID"`
  563. Num int `description:"数量"`
  564. }
  565. // GetCygxActivityYiDongMeetNum 根据活动ID获取到会数量的列表
  566. func GetCygxActivityYiDongMeetNum(activityId []int) (items []*CygxAtivityIdMeetNum, err error) {
  567. lenactivityId := len(activityId)
  568. if lenactivityId == 0 {
  569. return
  570. }
  571. sql := `SELECT
  572. activity_id,
  573. ( SELECT count( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = a.activity_id AND is_meeting = 1 AND yidong_examine_status = 1 ) AS num
  574. FROM
  575. cygx_activity AS a
  576. WHERE
  577. a.activity_id IN (` + utils.GetOrmInReplace(lenactivityId) + `) `
  578. o := orm.NewOrm()
  579. _, err = o.Raw(sql, activityId).QueryRows(&items)
  580. return
  581. }
  582. type GetSellerUserMobileResp struct {
  583. Mobile string `description:"手机号"`
  584. }
  585. // 获取销售所能查看到的手机号
  586. func GetSellerUserMobile(condition string) (items []*GetSellerUserMobileResp, err error) {
  587. o := orm.NewOrm()
  588. _, err = o.Raw(condition).QueryRows(&items)
  589. return
  590. }