cygx_activity.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. package cygx_activity
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "time"
  6. )
  7. // 活动详情
  8. type CygxActivity struct {
  9. ActivityId int `orm:"column(activity_id);pk";description:"活动ID 等于0新增活动,大于0修改活动"`
  10. ActivityTypeId int `description:"活动类型id"`
  11. ActivityTypeName string `description:"活动类型名称"`
  12. ChartPermissionId int `description:"行业id"`
  13. ChartPermissionName string `description:"行业名称"`
  14. ChartPermissionNames string `description:"行业名称辅助字段,区分研选子分类"`
  15. Body string `description:"内容"`
  16. CreateTime time.Time `description:"创建时间"`
  17. IsLimitPeople int `description:"是否限制人数 1是,0否"`
  18. LimitPeopleNum int `description:"限制的人数数量"`
  19. CustomerTypeIds string `description:"活动可见的客户类型,多个ID用 , 隔开"`
  20. PublishStatus int `description:"发布状态 1已发布,0未发布"`
  21. LastUpdatedTime time.Time `description:"更新时间"`
  22. ActivityTime string `description:"活动时间"`
  23. ActivityTimeText string `description:"活动时间带文字"`
  24. DistinguishedGuest string `description:"嘉宾"`
  25. Host string `description:"主持人"`
  26. MainlandTell string `description:"大陆拨入号"`
  27. HongKongTell string `description:"香港拨入号"`
  28. TaiwanTell string `description:"台湾拨入号"`
  29. AmericaTell string `description:"美国拨入号"`
  30. ParticipationCode string `description:"参会密码"`
  31. Theme string `description:"主题"`
  32. Expert string `description:"专家"`
  33. ActivityName string `description:"活动名称"`
  34. ActivityNameTask string `description:"活动名称定时任务同步的时候使用"`
  35. OnlineParticipation string `description:"网络参会"`
  36. ReportLink string `description:"报告链接"`
  37. City string `description:"城市"`
  38. Address string `description:"活动地址"`
  39. Highlights string `description:"活动亮点"`
  40. Remarks string `description:"备注"`
  41. Speaker string `description:"主讲人"`
  42. ArticleId int `description:"关联报告id"`
  43. Label string `description:"标签"`
  44. LinkParticipants string `description:"链接参会"`
  45. AppAttendance string `description:"App参会"`
  46. ConferencePassword string `description:"会议密码"`
  47. TemporaryLabel string `description:"临时标签"`
  48. IsMakerShow int `description:"是否仅决策人可见 0,否 、1,是"`
  49. VisibleRange int `description:"可见范围 1,仅本组可见 、2,全部客户可见"`
  50. Scale string `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
  51. IsShowSubjectName int `description:"小程序内是否展示标的名称 1是 ,0 否 默认0 "`
  52. IsHideAppointment int `description:"是否隐藏预约纪要按钮 1是 ,0 否 默认0 "`
  53. AdminId int `description:"销售/管理员ID"`
  54. AdminName string `description:"销售/管理员姓名"`
  55. TencentConferenceNumber string `description:"腾讯会议号"`
  56. VmpRobotMeetingId string `description:"会议ID"`
  57. }
  58. type CygxActivitySignup struct {
  59. Id int `orm:"column(id)" description:"自增Id"`
  60. UserId int `description:"用户id,多个用,隔开"`
  61. ActivityId int `description:"活动ID"`
  62. CreateTime time.Time `description:"创建时间"`
  63. Mobile string `description:"手机号"`
  64. Email string `description:"邮箱号"`
  65. CompanyId int `description:"公司ID"`
  66. CompanyName string `description:"公司名称"`
  67. OutboundMobile string `description:"外呼手机号"`
  68. CountryCode string `description:"手机国家区号"`
  69. Source int `description:"来源,1小程序,2后台添加"`
  70. SignupType int `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
  71. RealName string `description:"用户实际名称"`
  72. SellerName string `description:"所属销售"`
  73. YidongExamineStatus int `description:"易董活动报名审核状态0审核中,1:审核通过、2审核不通过"`
  74. ThreeSource int `description:"三方来源,1进门财经"`
  75. }
  76. type CygxYidongActivityExamineStatus struct {
  77. Id int `orm:"column(id)" description:"自增Id"`
  78. ActivityId int `description:"活动ID"`
  79. YidongActivityId string `description:"易董活动ID"`
  80. CreateTime time.Time `description:"创建时间"`
  81. ExamineTime string `description:"审核时间"`
  82. Mobile string `description:"手机号"`
  83. YidongExamineStatus int `description:"易董活动报名审核状态0审核中,1:审核通过、2审核不通过"`
  84. }
  85. // 通过ID获取活动详情
  86. func GetAddActivityInfoById(activityIdYiDong string) (item *CygxActivity, err error) {
  87. o := orm.NewOrmUsingDB("hz_cygx")
  88. sql := `SELECT
  89. a.*
  90. FROM
  91. cygx_activity as a
  92. WHERE
  93. yidong_activity_id =? OR yidong_activity_id_by_cygx = ? LIMIT 1 `
  94. err = o.Raw(sql, activityIdYiDong, activityIdYiDong).QueryRow(&item)
  95. return
  96. }
  97. // 通过ID获取活动详情
  98. func GetAddActivityInfoByActivityId(activityId int) (item *CygxActivity, err error) {
  99. o := orm.NewOrmUsingDB("hz_cygx")
  100. sql := `SELECT
  101. a.*
  102. FROM
  103. cygx_activity as a
  104. WHERE
  105. activity_id = ? `
  106. err = o.Raw(sql, activityId).QueryRow(&item)
  107. return
  108. }
  109. type ExamineStatusReq struct {
  110. ActivityId int `description:"活动ID"`
  111. Mobile string `description:"手机号" json:"mobile"`
  112. ExamineStatus int `description:"审核状态 1,通过、2:未通过" json:"examine_status"`
  113. }
  114. // UpdateActivitySignupNumMulti 批量修改易董报名用户审核状态
  115. func UpdateActivitySignupNumMulti(items []*ExamineStatusReq) (err error) {
  116. o := orm.NewOrmUsingDB("hz_cygx")
  117. p, err := o.Raw("UPDATE cygx_activity_signup SET yidong_examine_status = ? WHERE mobile = ? AND activity_id = ? ").Prepare()
  118. if err != nil {
  119. return
  120. }
  121. defer func() {
  122. _ = p.Close() // 别忘记关闭 statement
  123. }()
  124. if len(items) > 0 {
  125. for _, v := range items {
  126. _, err = p.Exec(v.ExamineStatus, v.Mobile, v.ActivityId)
  127. if err != nil {
  128. return
  129. }
  130. }
  131. }
  132. return
  133. }
  134. // AddActivitySignupNumMulti 批量新增易董报名用户审核状态
  135. func AddActivitySignupNumMulti(items []*CygxActivitySignup) (err error) {
  136. o := orm.NewOrmUsingDB("hz_cygx")
  137. if len(items) > 0 {
  138. //批量新增易董报名用户审核状态
  139. _, err = o.InsertMulti(len(items), items)
  140. }
  141. return
  142. }
  143. // GetActivitySignupListByActivity获取已经报名了的用户列表
  144. func GetActivitySignupListByActivity(activityId int) (items []*CygxActivitySignup, err error) {
  145. o := orm.NewOrmUsingDB("hz_cygx")
  146. sql := `SELECT * FROM cygx_activity_signup WHERE activity_id = ?`
  147. _, err = o.Raw(sql, activityId).QueryRows(&items)
  148. return
  149. }
  150. type UserAndCompanyName struct {
  151. UserId int `orm:"column(user_id);pk"`
  152. Mobile string
  153. Email string
  154. CompanyId int
  155. CompanyName string `description:"公司名称"`
  156. CountryCode string `description:"手机国家区号"`
  157. OutboundMobile string `description:"外呼手机号"`
  158. OutboundCountryCode string `description:"外呼手机号区号"`
  159. SellerName string `description:"所属销售"`
  160. RealName string `description:"真实姓名"`
  161. }
  162. func GetUserListByMobile(mobile string) (items []*UserAndCompanyName, err error) {
  163. o := orm.NewOrm()
  164. sql := ` SELECT u.*, c.company_name FROM wx_user AS u
  165. INNER JOIN company AS c ON c.company_id = u.company_id
  166. WHERE u.mobile IN (` + mobile + `)`
  167. _, err = o.Raw(sql).QueryRows(&items)
  168. return
  169. }
  170. type CygxYidongActivitySignupLog struct {
  171. Id int `orm:"column(id)" description:"自增Id"`
  172. ActivityId int `description:"活动ID"`
  173. YidongActivityId string `description:"易董活动ID"`
  174. CreateTime time.Time `description:"创建时间"`
  175. Mobile string `description:"手机号"`
  176. }
  177. // AddCygxYidongActivitySignup 记录易董传过来的报名信息
  178. func AddCygxYidongActivitySignupLog(item *CygxYidongActivitySignupLog) (err error) {
  179. o := orm.NewOrmUsingDB("hz_cygx")
  180. _, err = o.Insert(item)
  181. return
  182. }
  183. type CygxYidongActivitySignupReq struct {
  184. RealName string `description:"真实姓名" json:"real_name"`
  185. Mobile string `description:"手机号" json:"mobile"`
  186. CountryCode string `description:"手机国家区号" json:"country_code"`
  187. Email string `description:"手机号" json:"email"`
  188. CompanyName string `description:"公司名称" json:"company_name"`
  189. Job string `description:"职务" json:"job"`
  190. }
  191. // 通过纪要ID获取活动详情
  192. func GetAddActivityInfoByMobile(mobile string) (item *CygxYidongActivitySignupReq, err error) {
  193. o := orm.NewOrm()
  194. sql := ` SELECT u.*, c.company_name FROM wx_user AS u
  195. INNER JOIN company AS c ON c.company_id = u.company_id
  196. WHERE u.mobile = ?`
  197. err = o.Raw(sql, mobile).QueryRow(&item)
  198. return
  199. }
  200. // AddActivityItemsLogNumMulti 记录审核日志
  201. func AddActivityItemsLogNumMulti(items []*CygxYidongActivityExamineStatus) (err error) {
  202. o := orm.NewOrmUsingDB("hz_cygx")
  203. if len(items) > 0 {
  204. //批量添加记录审核日志
  205. _, err = o.InsertMulti(len(items), items)
  206. }
  207. return
  208. }
  209. // 我的日程
  210. type CygxMySchedule struct {
  211. Id int `orm:"column(id);pk"`
  212. ActivityId int `description:"活动ID"`
  213. UserId int `description:"用户ID"`
  214. CreateTime time.Time `description:"创建时间"`
  215. Mobile string `description:"手机号"`
  216. Email string `description:"邮箱"`
  217. CompanyId int `description:"公司id"`
  218. CompanyName string `description:"公司名称"`
  219. }
  220. // 报名记录日志
  221. type CygxActivitySignupLog struct {
  222. Id int `orm:"column(id);pk"`
  223. ActivityId int `description:"活动ID"`
  224. UserId int `description:"用户ID"`
  225. CreateTime time.Time `description:"创建时间"`
  226. Mobile string `description:"手机号"`
  227. Email string `description:"邮箱"`
  228. CompanyId int `description:"公司id"`
  229. CompanyName string `description:"公司名称"`
  230. Type int `description:"操作方式,1报名,2取消报名"`
  231. }
  232. // GetCygxMyScheduleList 获取我的日程数据
  233. func GetCygxMyScheduleList(activityId int) (items []*CygxMySchedule, err error) {
  234. o := orm.NewOrmUsingDB("hz_cygx")
  235. sql := `SELECT * FROM cygx_my_schedule WHERE activity_id = ?`
  236. _, err = o.Raw(sql, activityId).QueryRows(&items)
  237. return
  238. }
  239. // AddCygxMyScheduleLNumMulti 添加我的日程
  240. func AddCygxMyScheduleLNumMulti(items []*CygxMySchedule) (err error) {
  241. o := orm.NewOrmUsingDB("hz_cygx")
  242. if len(items) > 0 {
  243. //添加我的日程
  244. _, err = o.InsertMulti(len(items), items)
  245. }
  246. return
  247. }
  248. // DelCygxMyScheduleList 删除我的日程
  249. func DelCygxMyScheduleList(mobile string, activityId int) (err error) {
  250. o := orm.NewOrmUsingDB("hz_cygx")
  251. sql := ` DELETE FROM cygx_my_schedule WHERE mobile IN (` + mobile + `) AND activity_id=?`
  252. _, err = o.Raw(sql, activityId).Exec()
  253. return
  254. }
  255. // DelCygxcActivitySignup 删除我的报名信息
  256. func DelCygxcActivitySignup(mobile string, activityId int) (err error) {
  257. o := orm.NewOrmUsingDB("hz_cygx")
  258. sql := ` DELETE FROM cygx_activity_signup WHERE mobile IN (` + mobile + `) AND activity_id=?`
  259. _, err = o.Raw(sql, activityId).Exec()
  260. return
  261. }
  262. // 添加报名信息
  263. func AddActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
  264. o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
  265. if err != nil {
  266. return
  267. }
  268. defer func() {
  269. fmt.Println(err)
  270. if err == nil {
  271. o.Commit()
  272. } else {
  273. o.Rollback()
  274. }
  275. }()
  276. var count int
  277. var countMySchedule int
  278. sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
  279. err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
  280. if err != nil {
  281. return
  282. }
  283. if countMySchedule == 0 {
  284. itemMy := new(CygxMySchedule)
  285. itemMy.UserId = item.UserId
  286. itemMy.ActivityId = item.ActivityId
  287. itemMy.CreateTime = time.Now()
  288. itemMy.Mobile = item.Mobile
  289. itemMy.Email = item.Email
  290. itemMy.CompanyId = item.CompanyId
  291. itemMy.CompanyName = item.CompanyName
  292. lastId, err = o.Insert(itemMy)
  293. if err != nil {
  294. return
  295. }
  296. }
  297. sql = `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
  298. err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
  299. if err != nil {
  300. return
  301. }
  302. if count > 0 {
  303. sql = `UPDATE cygx_activity_signup SET is_cancel = 0 ,do_fail_type = 0, signup_type=? WHERE user_id=? AND activity_id=? `
  304. _, err = o.Raw(sql, item.SignupType, item.UserId, item.ActivityId).Exec()
  305. } else {
  306. lastId, err = o.Insert(item)
  307. }
  308. if err != nil {
  309. return
  310. }
  311. itemLog := new(CygxActivitySignupLog)
  312. itemLog.UserId = item.UserId
  313. itemLog.ActivityId = item.ActivityId
  314. itemLog.CreateTime = time.Now()
  315. itemLog.Mobile = item.Mobile
  316. itemLog.Email = item.Email
  317. itemLog.CompanyId = item.CompanyId
  318. itemLog.CompanyName = item.CompanyName
  319. itemLog.Type = 1
  320. lastId, err = o.Insert(itemLog)
  321. return
  322. }
  323. // 取消报名
  324. func CancelActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
  325. o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
  326. if err != nil {
  327. return
  328. }
  329. defer func() {
  330. if err == nil {
  331. o.Commit()
  332. } else {
  333. o.Rollback()
  334. }
  335. }()
  336. sql := `DELETE FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
  337. _, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
  338. if err != nil {
  339. return
  340. }
  341. sql = `DELETE FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
  342. _, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
  343. if err != nil {
  344. return
  345. }
  346. itemLog := new(CygxActivitySignupLog)
  347. itemLog.UserId = item.UserId
  348. itemLog.ActivityId = item.ActivityId
  349. itemLog.CreateTime = time.Now()
  350. itemLog.Mobile = item.Mobile
  351. itemLog.Email = item.Email
  352. itemLog.CompanyId = item.CompanyId
  353. itemLog.CompanyName = item.CompanyName
  354. itemLog.Type = 2
  355. lastId, err = o.Insert(itemLog)
  356. return
  357. }
  358. // 获取用户是否报了名
  359. func GetActivitySignupCountByUserId(uid, activityId int) (count int, err error) {
  360. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
  361. o := orm.NewOrmUsingDB("hz_cygx")
  362. err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
  363. return
  364. }
  365. // 获取用户是否报了名(有效的)
  366. func GetActivitySignupCountByUserIdeffective(uid, activityId int) (count int, err error) {
  367. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND do_fail_type = 0 AND user_id=? AND activity_id=? `
  368. o := orm.NewOrmUsingDB("hz_cygx")
  369. err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
  370. return
  371. }
  372. // 获取某一活动已经报名的数量
  373. func GetActivitySignupSuccessCount(activityId int) (count int, err error) {
  374. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND do_fail_type = 0 AND company_id != 16 AND activity_id=? `
  375. o := orm.NewOrmUsingDB("hz_cygx")
  376. err = o.Raw(sqlCount, activityId).QueryRow(&count)
  377. return
  378. }