activity_meet.go 22 KB

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