activity_signup.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. package models
  2. import (
  3. "fmt"
  4. "rdluck_tools/orm"
  5. "time"
  6. )
  7. type CygxActivitySignup struct {
  8. Id int `orm:"column(id);pk"`
  9. ActivityId int `description:"活动ID"`
  10. UserId int `description:"用户ID"`
  11. CreateTime time.Time `description:"创建时间"`
  12. Mobile string `description:"手机号"`
  13. Email string `description:"邮箱"`
  14. CompanyId int `description:"公司id"`
  15. CompanyName string `description:"公司名称"`
  16. FailType int `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
  17. SignupType int `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
  18. DoFailType int `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
  19. OutboundMobile string `description:"外呼手机号"`
  20. CountryCode string `description:"手机国家区号"`
  21. }
  22. type SignupStatus struct {
  23. SignupStatus string `description:"返回状态:人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"`
  24. GoFollow bool `description:"是否去关注"`
  25. SignupType int `description:"报名方式,1预约外呼,2我要报名"`
  26. ActivityId int `description:"活动ID"`
  27. HaqveJurisdiction bool `description:"是否有权限"`
  28. OperationMode string `description:"操作方式 Apply:立即申请、Call:拨号 为空则为有权限"`
  29. HasPermission int `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"`
  30. PopupMsg string `description:"权限弹窗信息"`
  31. SellerMobile string `description:"销售电话"`
  32. MsgType string `description:"Type : 类型 , Industry : 行业"`
  33. SellerName string `description:"销售姓名"`
  34. Mobile string `description:"外呼手机号"`
  35. CountryCode string `description:"外呼手机号区号"`
  36. GoOutboundMobile bool `description:"是否去绑定手机号"`
  37. GoBindEmail bool `description:"是否去绑定邮箱"`
  38. }
  39. //我的日程
  40. type CygxMySchedule struct {
  41. Id int `orm:"column(id);pk"`
  42. ActivityId int `description:"活动ID"`
  43. UserId int `description:"用户ID"`
  44. CreateTime time.Time `description:"创建时间"`
  45. Mobile string `description:"手机号"`
  46. Email string `description:"邮箱"`
  47. CompanyId int `description:"公司id"`
  48. CompanyName string `description:"公司名称"`
  49. }
  50. //报名记录日志
  51. type CygxActivitySignupLog struct {
  52. Id int `orm:"column(id);pk"`
  53. ActivityId int `description:"活动ID"`
  54. UserId int `description:"用户ID"`
  55. CreateTime time.Time `description:"创建时间"`
  56. Mobile string `description:"手机号"`
  57. Email string `description:"邮箱"`
  58. CompanyId int `description:"公司id"`
  59. CompanyName string `description:"公司名称"`
  60. Type int `description:"操作方式,1报名,2取消报名"`
  61. }
  62. //添加报名信息
  63. func AddActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
  64. o := orm.NewOrm()
  65. o.Begin()
  66. defer func() {
  67. fmt.Println(err)
  68. if err == nil {
  69. o.Commit()
  70. } else {
  71. o.Rollback()
  72. }
  73. }()
  74. var count int
  75. var countMySchedule int
  76. sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
  77. err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
  78. if err != nil {
  79. return
  80. }
  81. if countMySchedule == 0 {
  82. itemMy := new(CygxMySchedule)
  83. itemMy.UserId = item.UserId
  84. itemMy.ActivityId = item.ActivityId
  85. itemMy.CreateTime = time.Now()
  86. itemMy.Mobile = item.Mobile
  87. itemMy.Email = item.Email
  88. itemMy.CompanyId = item.CompanyId
  89. itemMy.CompanyName = item.CompanyName
  90. lastId, err = o.Insert(itemMy)
  91. if err != nil {
  92. return
  93. }
  94. }
  95. sql = `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
  96. err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
  97. if err != nil {
  98. return
  99. }
  100. if count > 0 {
  101. sql := `UPDATE cygx_activity_signup SET is_cancel = 0 ,do_fail_type = 0, signup_type=? WHERE user_id=? AND activity_id=? `
  102. _, err = o.Raw(sql, item.SignupType, item.UserId, item.ActivityId).Exec()
  103. } else {
  104. lastId, err = o.Insert(item)
  105. }
  106. if err != nil {
  107. return
  108. }
  109. itemLog := new(CygxActivitySignupLog)
  110. itemLog.UserId = item.UserId
  111. itemLog.ActivityId = item.ActivityId
  112. itemLog.CreateTime = time.Now()
  113. itemLog.Mobile = item.Mobile
  114. itemLog.Email = item.Email
  115. itemLog.CompanyId = item.CompanyId
  116. itemLog.CompanyName = item.CompanyName
  117. itemLog.Type = 1
  118. lastId, err = o.Insert(itemLog)
  119. return
  120. }
  121. //仅绑定邮箱的用户修改报名后,添加报名信息
  122. func AddActivitySignupFromEmail(item *CygxActivitySignup) (lastId int64, err error) {
  123. o := orm.NewOrm()
  124. o.Begin()
  125. defer func() {
  126. fmt.Println(err)
  127. if err == nil {
  128. o.Commit()
  129. } else {
  130. o.Rollback()
  131. }
  132. }()
  133. var count int
  134. var countMySchedule int
  135. sql := `UPDATE wx_user SET outbound_mobile=? ,outbound_country_code = ? ,is_msg_outbound_mobile = 1 WHERE user_id=? `
  136. _, err = o.Raw(sql, item.OutboundMobile, item.CountryCode, item.UserId).Exec()
  137. if err != nil {
  138. return
  139. }
  140. sql = `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
  141. err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
  142. if err != nil {
  143. return
  144. }
  145. if countMySchedule == 0 {
  146. itemMy := new(CygxMySchedule)
  147. itemMy.UserId = item.UserId
  148. itemMy.ActivityId = item.ActivityId
  149. itemMy.CreateTime = time.Now()
  150. itemMy.Mobile = item.Mobile
  151. itemMy.Email = item.Email
  152. itemMy.CompanyId = item.CompanyId
  153. itemMy.CompanyName = item.CompanyName
  154. lastId, err = o.Insert(itemMy)
  155. if err != nil {
  156. return
  157. }
  158. }
  159. sql = `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
  160. err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
  161. if err != nil {
  162. return
  163. }
  164. if count > 0 {
  165. sql := `UPDATE cygx_activity_signup SET is_cancel = 0 ,do_fail_type = 0, signup_type=? WHERE user_id=? AND activity_id=? `
  166. _, err = o.Raw(sql, item.SignupType, item.UserId, item.ActivityId).Exec()
  167. } else {
  168. lastId, err = o.Insert(item)
  169. }
  170. if err != nil {
  171. return
  172. }
  173. itemLog := new(CygxActivitySignupLog)
  174. itemLog.UserId = item.UserId
  175. itemLog.ActivityId = item.ActivityId
  176. itemLog.CreateTime = time.Now()
  177. itemLog.Mobile = item.Mobile
  178. itemLog.Email = item.Email
  179. itemLog.CompanyId = item.CompanyId
  180. itemLog.CompanyName = item.CompanyName
  181. itemLog.Type = 1
  182. lastId, err = o.Insert(itemLog)
  183. return
  184. }
  185. //添加报名信息
  186. func AddActivitySignupNoSchedule(item *CygxActivitySignup) (lastId int64, err error) {
  187. o := orm.NewOrm()
  188. o.Begin()
  189. defer func() {
  190. fmt.Println(err)
  191. if err == nil {
  192. o.Commit()
  193. } else {
  194. o.Rollback()
  195. }
  196. }()
  197. lastId, err = o.Insert(item)
  198. if err != nil {
  199. return
  200. }
  201. itemLog := new(CygxActivitySignupLog)
  202. itemLog.UserId = item.UserId
  203. itemLog.ActivityId = item.ActivityId
  204. itemLog.CreateTime = time.Now()
  205. itemLog.Mobile = item.Mobile
  206. itemLog.Email = item.Email
  207. itemLog.CompanyId = item.CompanyId
  208. itemLog.CompanyName = item.CompanyName
  209. itemLog.Type = 1
  210. lastId, err = o.Insert(itemLog)
  211. return
  212. }
  213. //获取用户报名成功数量
  214. func GetActivitySignupCount(uid, activityId int) (count int, err error) {
  215. 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=? `
  216. o := orm.NewOrm()
  217. err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
  218. return
  219. }
  220. //获取用户报名数量
  221. func GetActivitySignupByUserCount(uid, activityId int) (count int, err error) {
  222. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND user_id=? AND activity_id=? `
  223. o := orm.NewOrm()
  224. err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
  225. return
  226. }
  227. //获取用户报名禁止数量
  228. func GetActivitySignupByUserRestrictCount(uid, activityId int) (count int, err error) {
  229. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE do_fail_type=3 AND user_id=? AND activity_id=? `
  230. o := orm.NewOrm()
  231. err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
  232. return
  233. }
  234. //获取某一活动已经报名的数量
  235. func GetActivitySignupSuccessCount(activityId int) (count int, err error) {
  236. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND fail_type = 0 AND activity_id=? `
  237. o := orm.NewOrm()
  238. err = o.Raw(sqlCount, activityId).QueryRow(&count)
  239. return
  240. }
  241. //获取某一活动某个机构已经报名的数量
  242. func GetActivitySignupCompanyCount(activityId, companyId int) (count int, err error) {
  243. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND fail_type = 0 AND activity_id=? AND company_id=? `
  244. o := orm.NewOrm()
  245. err = o.Raw(sqlCount, activityId, companyId).QueryRow(&count)
  246. return
  247. }
  248. //获取某一用户是否被限制报名
  249. func GetUserRestrictCount(mobile string) (count int, err error) {
  250. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_restrict_signup WHERE is_restrict=1 AND mobile=? `
  251. o := orm.NewOrm()
  252. err = o.Raw(sqlCount, mobile).QueryRow(&count)
  253. return
  254. }
  255. //获取某一用户的日程数量
  256. func GetUserMeetingReminderCount(uid int) (count int, err error) {
  257. sqlCount := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? `
  258. o := orm.NewOrm()
  259. err = o.Raw(sqlCount, uid).QueryRow(&count)
  260. return
  261. }
  262. //获取某一用户的报名的数量
  263. func GetUserSignupCount(uid int) (count int, err error) {
  264. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup_log WHERE user_id=? `
  265. o := orm.NewOrm()
  266. err = o.Raw(sqlCount, uid).QueryRow(&count)
  267. return
  268. }
  269. //取消报名
  270. func CancelActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
  271. o := orm.NewOrm()
  272. o.Begin()
  273. defer func() {
  274. fmt.Println(err)
  275. if err == nil {
  276. o.Commit()
  277. } else {
  278. o.Rollback()
  279. }
  280. }()
  281. //判断是否删除我的日程
  282. var count int
  283. sql := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE is_cancel = 0 AND user_id=? AND activity_id=? `
  284. err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
  285. if err != nil {
  286. return
  287. }
  288. if count == 0 {
  289. sql = `DELETE FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
  290. _, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
  291. if err != nil {
  292. return
  293. }
  294. }
  295. sql = `DELETE FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
  296. _, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
  297. if err != nil {
  298. return
  299. }
  300. itemLog := new(CygxActivitySignupLog)
  301. itemLog.UserId = item.UserId
  302. itemLog.ActivityId = item.ActivityId
  303. itemLog.CreateTime = time.Now()
  304. itemLog.Mobile = item.Mobile
  305. itemLog.Email = item.Email
  306. itemLog.CompanyId = item.CompanyId
  307. itemLog.CompanyName = item.CompanyName
  308. itemLog.Type = 2
  309. lastId, err = o.Insert(itemLog)
  310. return
  311. }
  312. //详情
  313. func GetActivitySignupDetail(activityId, uid int) (item *CygxActivitySignup, err error) {
  314. o := orm.NewOrm()
  315. sql := `SELECT * FROM cygx_activity_signup WHERE activity_id = ? AND user_id =? `
  316. err = o.Raw(sql, activityId, uid).QueryRow(&item)
  317. return
  318. }
  319. //解除报名限制之后二次报名
  320. func AddActivitySignupByRestrict(item *CygxActivitySignup) (lastId int64, err error) {
  321. o := orm.NewOrm()
  322. o.Begin()
  323. defer func() {
  324. fmt.Println(err)
  325. if err == nil {
  326. o.Commit()
  327. } else {
  328. o.Rollback()
  329. }
  330. }()
  331. itemMy := new(CygxMySchedule)
  332. itemMy.UserId = item.UserId
  333. itemMy.ActivityId = item.ActivityId
  334. itemMy.CreateTime = time.Now()
  335. itemMy.Mobile = item.Mobile
  336. itemMy.Email = item.Email
  337. itemMy.CompanyId = item.CompanyId
  338. itemMy.CompanyName = item.CompanyName
  339. lastId, err = o.Insert(itemMy)
  340. if err != nil {
  341. return
  342. }
  343. sql := `UPDATE cygx_activity_signup SET do_fail_type = 0 , fail_type=0 WHERE user_id=? AND activity_id=? `
  344. _, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
  345. itemLog := new(CygxActivitySignupLog)
  346. itemLog.UserId = item.UserId
  347. itemLog.ActivityId = item.ActivityId
  348. itemLog.CreateTime = time.Now()
  349. itemLog.Mobile = item.Mobile
  350. itemLog.Email = item.Email
  351. itemLog.CompanyId = item.CompanyId
  352. itemLog.CompanyName = item.CompanyName
  353. itemLog.Type = 1
  354. lastId, err = o.Insert(itemLog)
  355. return
  356. }
  357. //列表
  358. func GetActivitySignupListAll() (items []*CygxActivitySignup, err error) {
  359. o := orm.NewOrm()
  360. sql := `SELECT * FROM cygx_activity_signup `
  361. _, err = o.Raw(sql).QueryRows(&items)
  362. return
  363. }
  364. //修改是否推送消息状态
  365. func UPdateSignup(item *CygxActivitySignup) (err error) {
  366. sql := ` UPDATE cygx_activity_signup SET outbound_mobile= ? , country_code=86 WHERE id = ?`
  367. o := orm.NewOrm()
  368. _, err = o.Raw(sql, item.Mobile, item.Id).Exec()
  369. return
  370. }
  371. //获取数量
  372. func GetActivityCountByIdWithUid(activityId, Uid int) (count int, err error) {
  373. o := orm.NewOrm()
  374. sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE activity_id = ? AND user_id = ?`
  375. err = o.Raw(sqlCount, activityId, Uid).QueryRow(&count)
  376. return
  377. }