activity_signup.go 13 KB

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