jinmencaijing.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. jinmencaijingReq "hongze/hongze_open_api/models/request/jinmencaijing"
  6. "hongze/hongze_open_api/models/response/jinmencaijing"
  7. "hongze/hongze_open_api/models/tables/company"
  8. "hongze/hongze_open_api/models/tables/company_product"
  9. "hongze/hongze_open_api/models/tables/company_report_permission"
  10. cygxActivity "hongze/hongze_open_api/models/tables/cygx/cygx_activity"
  11. "hongze/hongze_open_api/models/tables/cygx/cygx_three_api_log"
  12. "hongze/hongze_open_api/models/tables/wx_user"
  13. "hongze/hongze_open_api/services/alarm_msg"
  14. servicesWxUser "hongze/hongze_open_api/services/wx_user"
  15. "hongze/hongze_open_api/utils"
  16. "strconv"
  17. "time"
  18. )
  19. // JinMenCaiJingControllerCommon 进门财经模块
  20. type JinMenCaiJingController struct {
  21. BaseAuth
  22. }
  23. // 活动详情
  24. // @Title 活动详情接口
  25. // @Description 活动详情接口
  26. // @router /activity/detail [get]
  27. func (c *JinMenCaiJingController) ActivityDetail() {
  28. //回调中url参数要做签名(get请求中的参数,按照自己的方式签名,避免链接被别人拿去随意请求)
  29. activityId, _ := c.GetInt("activity_id")
  30. activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
  31. if err != nil {
  32. c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
  33. return
  34. }
  35. //resp := new(*jinmencaijing.CygxActivityDetailResp)
  36. detail := new(jinmencaijing.CygxActivityResp)
  37. detail.ActivityID = activityInfo.ActivityId
  38. detail.PublishStatus = activityInfo.PublishStatus
  39. detail.ActivityName = activityInfo.ActivityName
  40. detail.Label = activityInfo.Label
  41. detail.ActivityTime = activityInfo.ActivityTime
  42. detail.ActivityTimeText = activityInfo.ActivityTimeText
  43. detail.ActivityTypeId = activityInfo.ActivityTypeId
  44. detail.ActivityTypeName = activityInfo.ActivityTypeName
  45. detail.ChartPermissionName = activityInfo.ChartPermissionName
  46. detail.IsLimitPeople = activityInfo.IsLimitPeople
  47. detail.LimitPeopleNum = activityInfo.LimitPeopleNum
  48. detail.Expert = activityInfo.Expert
  49. detail.Host = activityInfo.Host
  50. detail.Speaker = activityInfo.Speaker
  51. detail.City = activityInfo.City
  52. detail.Address = activityInfo.Address
  53. detail.Highlights = activityInfo.Highlights
  54. detail.DistinguishedGuest = activityInfo.DistinguishedGuest
  55. detail.MainlandTell = activityInfo.MainlandTell
  56. detail.HongKongTell = activityInfo.HongKongTell
  57. detail.TaiwanTell = activityInfo.TaiwanTell
  58. detail.AmericaTell = activityInfo.AmericaTell
  59. detail.ParticipationCode = activityInfo.ParticipationCode
  60. detail.OnlineParticipation = activityInfo.OnlineParticipation
  61. detail.TencentConferenceNumber = activityInfo.TencentConferenceNumber
  62. detail.LinkParticipants = activityInfo.LinkParticipants
  63. detail.VmpRobotMeetingId = activityInfo.VmpRobotMeetingId
  64. detail.ConferencePassword = activityInfo.ConferencePassword
  65. detail.ReportLink = activityInfo.ReportLink
  66. detail.Theme = activityInfo.Theme
  67. detail.Remarks = activityInfo.Remarks
  68. //添加请求日志记录
  69. itemApiLog := new(cygx_three_api_log.CygxThreeApiLog)
  70. itemApiLog.CreateTime = time.Now()
  71. itemApiLog.Source = 2
  72. itemApiLog.Url = c.Ctx.Input.URI()
  73. jsonstr := strconv.Itoa(activityId)
  74. itemApiLog.Body = fmt.Sprint(jsonstr)
  75. itemApiLog.Result = fmt.Sprint(detail)
  76. _, errlog := cygx_three_api_log.AddCygxThreeApiLog(itemApiLog)
  77. if errlog != nil {
  78. go alarm_msg.SendAlarmMsg("进门财经活动详情接口 AddCygxThreeApiLog:"+errlog.Error()+fmt.Sprint("activityId=", activityId), 3)
  79. }
  80. c.OkDetailed(detail, "获取成功")
  81. }
  82. // 活动报名
  83. // @Title 活动报名接口
  84. // @Description 活动报名接口
  85. // @router /activity/signup/add [post]
  86. func (c *JinMenCaiJingController) ActivitySignupAdd() {
  87. //回调中url参数要做签名(get请求中的参数,按照自己的方式签名,避免链接被别人拿去随意请求)
  88. var req jinmencaijingReq.ActivitySignupReq
  89. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  90. if err != nil {
  91. c.FailWithMessage("参数解析异常")
  92. return
  93. }
  94. activityId := req.ActivityId
  95. mobile := req.Mobile
  96. countryCode := req.CountryCode
  97. realName := req.RealName
  98. companyName := req.CompanyName
  99. var dateTxt = []byte(mobile)
  100. resultDe := utils.DesBase64Decrypt(dateTxt)
  101. deMobile := string(resultDe)
  102. resp := new(jinmencaijing.CygxActivitySignupResp)
  103. activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
  104. if err != nil {
  105. c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
  106. return
  107. }
  108. resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
  109. if time.Now().After(resultTime.Add(-time.Minute * 60)) {
  110. resp.SignupStatus = 2
  111. c.OkDetailed(resp, "报名失败时间超时")
  112. }
  113. if activityInfo.LimitPeopleNum > 0 {
  114. totalSuccess, err := cygxActivity.GetActivitySignupSuccessCount(activityId)
  115. if err != nil {
  116. c.FailWithMessage("获取已报名的用户数量失败!" + err.Error())
  117. return
  118. }
  119. if activityInfo.LimitPeopleNum <= totalSuccess {
  120. resp.SignupStatus = 3
  121. c.OkDetailed(resp, "报名失败人数已满")
  122. }
  123. }
  124. userTotal, err := wx_user.GetWxUserCountByMobile(deMobile)
  125. if err != nil {
  126. c.FailWithMessage("根据手机号判断用户信息失败")
  127. return
  128. }
  129. var user *wx_user.WxUser
  130. if userTotal == 0 {
  131. userId, err := servicesWxUser.AddWxUserByMobile(deMobile, countryCode, realName)
  132. if err != nil {
  133. c.FailWithMessage("根据手机号录入用户信息失败")
  134. return
  135. }
  136. user, err = wx_user.GetByUserId(userId)
  137. if err != nil {
  138. c.FailWithMessage("获取用户信息失败")
  139. return
  140. }
  141. } else {
  142. user, err = wx_user.GetByUserMobile(deMobile)
  143. if err != nil {
  144. c.FailWithMessage("获取用户信息失败")
  145. return
  146. }
  147. }
  148. signupCount, err := cygxActivity.GetActivitySignupCountByUserId(int(user.UserId), activityId)
  149. if err != nil {
  150. c.FailWithMessage("获取用户是否报名信息失败")
  151. return
  152. }
  153. if signupCount == 0 {
  154. item := new(cygxActivity.CygxActivitySignup)
  155. item.UserId = int(user.UserId)
  156. item.RealName = user.RealName
  157. item.ActivityId = activityId
  158. item.CreateTime = time.Now()
  159. item.Email = user.Email
  160. item.CompanyId = user.CompanyId
  161. item.CompanyName = companyName
  162. item.SignupType = 3
  163. item.ThreeSource = 1
  164. item.Mobile = user.Mobile
  165. item.CountryCode = user.CountryCode
  166. item.OutboundMobile = user.OutboundMobile
  167. if user.OutboundMobile == "" {
  168. item.OutboundMobile = user.Mobile
  169. }
  170. if user.CountryCode == "" {
  171. item.CountryCode = "86"
  172. }
  173. _, err = cygxActivity.AddActivitySignup(item)
  174. if err != nil {
  175. c.OkDetailed(resp, "报名成功")
  176. return
  177. }
  178. }
  179. resp.SignupStatus = 1
  180. c.OkDetailed(resp, "报名成功")
  181. }
  182. // 活动取消报名
  183. // @Title 活动取消报名接口
  184. // @Description 活动取消报名接口
  185. // @router /activity/signup/cancel [post]
  186. func (c *JinMenCaiJingController) ActivitySignupCancel() {
  187. //回调中url参数要做签名(get请求中的参数,按照自己的方式签名,避免链接被别人拿去随意请求)
  188. var req jinmencaijingReq.ActivitySignupReq
  189. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  190. if err != nil {
  191. c.FailWithMessage("参数解析异常")
  192. return
  193. }
  194. activityId := req.ActivityId
  195. mobile := req.Mobile
  196. var dateTxt = []byte(mobile)
  197. resultDe := utils.DesBase64Decrypt(dateTxt)
  198. deMobile := string(resultDe)
  199. activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
  200. if err != nil {
  201. c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
  202. return
  203. }
  204. resp := new(jinmencaijing.CygxActivitySignupcancelResp)
  205. resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
  206. if time.Now().After(resultTime.Add(-time.Minute * 60)) {
  207. resp.CancelStatus = 2
  208. c.OkDetailed(resp, "活动开始前1小时内无法取消报名")
  209. }
  210. var user *wx_user.WxUser
  211. user, err = wx_user.GetByUserMobile(deMobile)
  212. if err != nil {
  213. c.FailWithMessage("获取用户信息失败")
  214. return
  215. }
  216. item := new(cygxActivity.CygxActivitySignup)
  217. item.UserId = int(user.UserId)
  218. item.ActivityId = activityId
  219. item.CreateTime = time.Now()
  220. _, err = cygxActivity.CancelActivitySignup(item)
  221. if err != nil {
  222. c.OkDetailed(resp, "取消报名失败")
  223. return
  224. }
  225. resp.CancelStatus = 1
  226. c.OkDetailed(resp, "取消报名成功")
  227. }
  228. // 活动白名单校验
  229. // @Title 活动白名单校验接口
  230. // @Description 活动白名单校验接口
  231. // @router /activity/white/check [post]
  232. func (c *JinMenCaiJingController) ActivityWhiteCheck() {
  233. //回调中url参数要做签名(get请求中的参数,按照自己的方式签名,避免链接被别人拿去随意请求)
  234. var req jinmencaijingReq.ActivitySignupReq
  235. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  236. if err != nil {
  237. c.FailWithMessage("参数解析异常")
  238. return
  239. }
  240. activityId := req.ActivityId
  241. mobile := req.Mobile
  242. var dateTxt = []byte(mobile)
  243. resultDe := utils.DesBase64Decrypt(dateTxt)
  244. deMobile := string(resultDe)
  245. userTotal, err := wx_user.GetWxUserCountByMobile(deMobile)
  246. if err != nil {
  247. c.FailWithMessage("根据手机号判断用户信息失败")
  248. return
  249. }
  250. activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
  251. if err != nil {
  252. c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
  253. return
  254. }
  255. var user *wx_user.WxUser
  256. resp := new(jinmencaijing.CygxActivityWhiteCheckResp)
  257. if userTotal == 0 {
  258. c.OkDetailed(resp, "获取成功")
  259. return
  260. } else {
  261. user, err = wx_user.GetByUserMobile(deMobile)
  262. if err != nil {
  263. c.FailWithMessage("获取用户信息失败")
  264. return
  265. }
  266. }
  267. companyInfo, err := company.GetCompanyById(user.CompanyId)
  268. if err != nil {
  269. c.FailWithMessage("获取客户信息失败")
  270. return
  271. }
  272. resp.RealName = user.RealName
  273. resp.Position = user.Position
  274. resp.CompanyName = companyInfo.CompanyName
  275. if activityInfo.LimitPeopleNum > 0 {
  276. total, err := company_product.CheckUserAaiPerssionByMobile(deMobile)
  277. if err != nil {
  278. c.FailWithMessage("校验失败!" + err.Error())
  279. return
  280. }
  281. if total > 0 {
  282. resp.IsWhite = true
  283. }
  284. } else {
  285. listPermissionName, err := company_report_permission.GetPermissionListNameByCompanyIdAndProductId(user.CompanyId, 2)
  286. if err != nil {
  287. c.FailWithMessage("获取用户权限信息失败:" + strconv.Itoa(activityId))
  288. return
  289. }
  290. if len(listPermissionName) > 0 {
  291. listPermissionName = append(listPermissionName, &company_report_permission.ChartPermissionNameResp{ChartPermissionName: "宏观"})
  292. }
  293. for _, v := range listPermissionName {
  294. if v.ChartPermissionName == activityInfo.ChartPermissionName {
  295. resp.IsWhite = true
  296. break
  297. }
  298. }
  299. }
  300. //添加请求日志记录
  301. itemApiLog := new(cygx_three_api_log.CygxThreeApiLog)
  302. itemApiLog.CreateTime = time.Now()
  303. itemApiLog.Source = 2
  304. itemApiLog.Url = c.Ctx.Input.URI()
  305. data, _ := json.Marshal(req)
  306. jsonstr := string(data)
  307. itemApiLog.Body = fmt.Sprint(jsonstr, "deMobile=", deMobile)
  308. itemApiLog.Result = fmt.Sprint(resp)
  309. _, errlog := cygx_three_api_log.AddCygxThreeApiLog(itemApiLog)
  310. if errlog != nil {
  311. go alarm_msg.SendAlarmMsg("进门财经活动白名单接口 AddCygxThreeApiLog:"+errlog.Error()+fmt.Sprint("activityId=", activityId), 3)
  312. }
  313. c.OkDetailed(resp, "获取成功")
  314. }
  315. // 活动用户报名信息回显(自己是否报名,以及已经报名的人数)
  316. // @Title 活动用户报名信息回显接口
  317. // @Description 活动用户报名信息回显接口
  318. // @router /activity/signup/detail [post]
  319. func (c *JinMenCaiJingController) ActivitySignupDetail() {
  320. //回调中url参数要做签名(get请求中的参数,按照自己的方式签名,避免链接被别人拿去随意请求)
  321. var req jinmencaijingReq.ActivitySignupReq
  322. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  323. if err != nil {
  324. c.FailWithMessage("参数解析异常")
  325. return
  326. }
  327. activityId := req.ActivityId
  328. mobile := req.Mobile
  329. var dateTxt = []byte(mobile)
  330. resultDe := utils.DesBase64Decrypt(dateTxt)
  331. deMobile := string(resultDe)
  332. userTotal, err := wx_user.GetWxUserCountByMobile(deMobile)
  333. if err != nil {
  334. c.FailWithMessage("根据手机号判断用户信息失败")
  335. return
  336. }
  337. activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
  338. if err != nil {
  339. c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
  340. return
  341. }
  342. resp := new(jinmencaijing.CygxActivitySignupCheckResp)
  343. var user *wx_user.WxUser
  344. if userTotal == 0 {
  345. c.OkDetailed(resp, "获取成功")
  346. } else {
  347. user, err = wx_user.GetByUserMobile(deMobile)
  348. if err != nil {
  349. c.FailWithMessage("获取用户信息失败")
  350. return
  351. }
  352. }
  353. if activityInfo.LimitPeopleNum > 0 {
  354. total, err := cygxActivity.GetActivitySignupSuccessCount(activityId)
  355. if err != nil {
  356. c.FailWithMessage("获取已报名的用户数量失败!" + err.Error())
  357. return
  358. }
  359. resp.SignupNum = total
  360. }
  361. totalUser, err := cygxActivity.GetActivitySignupCountByUserIdeffective(int(user.UserId), activityId)
  362. if err != nil {
  363. c.FailWithMessage("获取已报名的用户数量失败!" + err.Error())
  364. return
  365. }
  366. resp.IsSignup = totalUser
  367. c.OkDetailed(resp, "获取成功")
  368. }
  369. //func init() {
  370. // mobile := "15557270777"
  371. // encryptMobile := string(utils.DesBase64Encrypt([]byte(mobile)))
  372. // fmt.Println(encryptMobile)
  373. //}