activity.go 64 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/tealeg/xlsx"
  6. "hongze/hongze_cygx/models"
  7. "hongze/hongze_cygx/utils"
  8. "os"
  9. "path/filepath"
  10. "rdluck_tools/paging"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. //活动
  16. type ActivityCoAntroller struct {
  17. BaseAuthController
  18. }
  19. type ActivityABaseController struct {
  20. BaseCommonController
  21. }
  22. // @Title 活动类型列表
  23. // @Description活动类型列表接口
  24. // @Success 200 {object} models.ActivityTypeListResp
  25. // @router /activityTypelist [get]
  26. func (this *ActivityCoAntroller) List() {
  27. br := new(models.BaseResponse).Init()
  28. defer func() {
  29. this.Data["json"] = br
  30. this.ServeJSON()
  31. }()
  32. user := this.User
  33. if user == nil {
  34. br.Msg = "请登录"
  35. br.ErrMsg = "请登录,SysUser Is Empty"
  36. br.Ret = 408
  37. return
  38. }
  39. resp := new(models.ActivityTypeListResp)
  40. list, err := models.GetActivityTypeList()
  41. if err != nil {
  42. br.Msg = "获取失败"
  43. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  44. return
  45. }
  46. resp.List = list
  47. br.Ret = 200
  48. br.Success = true
  49. br.Msg = "获取成功"
  50. br.Data = resp
  51. }
  52. // @Title 活动列表
  53. // @Description 获取活动列表接口
  54. // @Param PageSize query int true "每页数据条数"
  55. // @Param CurrentIndex query int true "当前页页码,从1开始"
  56. // @Param ChartPermissionIds query string false "行业id 多个用 , 隔开"
  57. // @Param ActivityTypeIds query string false "活动类型id 多个用 , 隔开"
  58. // @Param KeyWord query string false "搜索关键词 多个用 , 隔开"
  59. // @Param ActiveState query string false "活动进行状态 未开始:1、进行中2、已结束3"
  60. // @Param WhichDay query string false "哪一天 今天:1、明天:2,多个用 , 隔开"
  61. // @Param IsShowJurisdiction query int false "是否仅展示有权限的,1是,2否 默认为零"
  62. // @Param Label query string false "搜索主题 多个用 , 隔开"
  63. // @Success 200 {object} models.GetCygxActivityListRep
  64. // @router /list [get]
  65. func (this *ActivityCoAntroller) ActivityList() {
  66. br := new(models.BaseResponse).Init()
  67. defer func() {
  68. this.Data["json"] = br
  69. this.ServeJSON()
  70. }()
  71. user := this.User
  72. if user == nil {
  73. br.Msg = "请登录"
  74. br.ErrMsg = "请登录,SysUser Is Empty"
  75. return
  76. }
  77. uid := user.UserId
  78. pageSize, _ := this.GetInt("PageSize")
  79. currentIndex, _ := this.GetInt("CurrentIndex")
  80. chartPermissionIds := this.GetString("ChartPermissionIds")
  81. activityTypeIds := this.GetString("ActivityTypeIds")
  82. whichDay := this.GetString("WhichDay")
  83. isShowJurisdiction, _ := this.GetInt("IsShowJurisdiction")
  84. keyWord := this.GetString("KeyWord")
  85. activeState := this.GetString("ActiveState")
  86. label := this.GetString("Label")
  87. //入参为 undefined 时的处理
  88. if chartPermissionIds == "undefined" {
  89. chartPermissionIds = ""
  90. }
  91. if activityTypeIds == "undefined" {
  92. activityTypeIds = ""
  93. }
  94. if whichDay == "undefined" {
  95. whichDay = ""
  96. }
  97. if activeState == "undefined" {
  98. activeState = ""
  99. }
  100. if label == "undefined" {
  101. label = ""
  102. }
  103. itemSearch := new(models.CygxActivityUserSearchContent)
  104. itemSearch.UserId = uid
  105. itemSearch.CreateTime = time.Now()
  106. itemSearch.Mobile = user.Mobile
  107. itemSearch.Email = user.Email
  108. itemSearch.CompanyId = user.CompanyId
  109. itemSearch.CompanyName = user.CompanyName
  110. itemSearch.ModifyTime = time.Now()
  111. itemSearch.ChartPermissionids = chartPermissionIds
  112. itemSearch.ActivityTypeids = activityTypeIds
  113. itemSearch.ActiveState = activeState
  114. itemSearch.IsShowJurisdiction = isShowJurisdiction
  115. //并发缓存校验
  116. cacheKey := fmt.Sprint("xygx:activity_user_search:add:", uid)
  117. ttlTime := utils.Rc.GetRedisTTL(cacheKey)
  118. _, errSearch := models.AddUserSearchContent(itemSearch, ttlTime)
  119. if errSearch != nil {
  120. br.Msg = "操作失败"
  121. br.ErrMsg = "操作失败,Err:" + errSearch.Error()
  122. return
  123. }
  124. utils.Rc.SetNX(cacheKey, user.Mobile, time.Second*10)
  125. var userType int
  126. var permissionStr string
  127. if user.CompanyId <= 1 {
  128. userType = 0
  129. } else {
  130. total, err := models.GetCountCompanyDetailByIdGroup(user.CompanyId)
  131. if err != nil {
  132. br.Msg = "获取失败"
  133. br.ErrMsg = "获取失败,Err:" + err.Error()
  134. return
  135. }
  136. if total == 0 {
  137. userType = 0
  138. } else {
  139. companyDetail, err := models.GetCompanyDetailByIdGroup(user.CompanyId)
  140. if err != nil {
  141. br.Msg = "获取信息失败!"
  142. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  143. return
  144. }
  145. if companyDetail == nil {
  146. br.Msg = "获取信息失败!"
  147. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
  148. return
  149. }
  150. permissionStr, err = models.GetCompanyPermission(user.CompanyId)
  151. if err != nil {
  152. br.Msg = "获取信息失败"
  153. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  154. return
  155. }
  156. //1、永续客户
  157. //2、大套餐客户(4个行业全开通的正式客户)
  158. //3、分行业套餐客户(开通对应行业的正式客户)
  159. //4、仅开通专家套餐的正式客户
  160. //5、开通对应行业套餐或专家套餐的试用客户
  161. if companyDetail.Status == "永续" {
  162. userType = 1
  163. } else if companyDetail.Status == "试用" {
  164. userType = 5
  165. } else if companyDetail.Status == "正式" {
  166. if permissionStr == "专家" {
  167. userType = 4
  168. } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") {
  169. userType = 2
  170. } else {
  171. userType = 3
  172. }
  173. if userType == 3 {
  174. if !strings.Contains(permissionStr, "医药") && !strings.Contains(permissionStr, "消费") && !strings.Contains(permissionStr, "科技") && !strings.Contains(permissionStr, "智造") {
  175. userType = 4
  176. }
  177. }
  178. }
  179. }
  180. }
  181. if isShowJurisdiction == 1 && chartPermissionIds == "" && userType == 4 {
  182. activityTypeIds = "1,3"
  183. }
  184. var startSize int
  185. if pageSize <= 0 {
  186. pageSize = utils.PageSize20
  187. }
  188. if currentIndex <= 0 {
  189. currentIndex = 1
  190. }
  191. startSize = utils.StartIndex(currentIndex, pageSize)
  192. var condition string
  193. var pars []interface{}
  194. //活动可见限制
  195. var sqlExport string
  196. slicePer := strings.Split(permissionStr, ",")
  197. var permissionSqlStr string
  198. for _, v := range slicePer {
  199. permissionSqlStr += "'" + v + "',"
  200. }
  201. permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
  202. permissionSqlStr = ` AND art.chart_permission_name IN (` + permissionSqlStr + `)`
  203. sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
  204. if userType == 2 {
  205. sqlExport += ` OR art.customer_type_ids LIKE '%3%' `
  206. }
  207. if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
  208. sqlExport += ` OR art.customer_type_ids LIKE '%4%' `
  209. }
  210. sqlExport += `) `
  211. if keyWord != "" {
  212. var mirrorword string
  213. var mirrorwordSql string
  214. slicemirrorword := strings.Split(keyWord, ",")
  215. for _, v := range slicemirrorword {
  216. mirrorwordSql += "'" + v + "'" + ","
  217. }
  218. mirrorwordSql = strings.TrimRight(mirrorwordSql, ",")
  219. total, err := models.GetActivityMirrorWordCount(mirrorwordSql)
  220. if err != nil {
  221. br.Msg = "获取失败"
  222. br.ErrMsg = "获取失败,Err:" + err.Error()
  223. return
  224. }
  225. if total > 0 {
  226. mirrorword, err = models.GetMirrorWord(mirrorwordSql)
  227. if err != nil {
  228. br.Msg = "获取信息失败"
  229. br.ErrMsg = "关系词映射获取失败,Err:" + err.Error()
  230. return
  231. }
  232. }
  233. keyWord = keyWord + "," + mirrorword
  234. slicekeyWord := strings.Split(keyWord, ",")
  235. var sqlKeyOr string
  236. if len(slicekeyWord) >= 2 {
  237. for _, v := range slicekeyWord {
  238. if v != "" {
  239. sqlKeyOr += ` OR art.activity_name LIKE '%` + v + `%' `
  240. }
  241. }
  242. condition += ` AND (art.activity_name LIKE '%` + keyWord + `%' ` + sqlKeyOr + ` )`
  243. } else {
  244. condition += ` AND (art.activity_name LIKE '%` + keyWord + `%' )`
  245. }
  246. }
  247. //主题
  248. if label != "" {
  249. sliceLabel := strings.Split(label, ",")
  250. var labelSqlStr string
  251. for _, v := range sliceLabel {
  252. labelSqlStr += "'" + v + "',"
  253. }
  254. labelSqlStr = strings.TrimRight(labelSqlStr, ",")
  255. condition = ` AND art.label IN (` + labelSqlStr + `)`
  256. }
  257. //行业名称
  258. if len(chartPermissionIds) > 0 {
  259. condition += ` AND art.chart_permission_id IN (` + chartPermissionIds + `)`
  260. }
  261. if activityTypeIds != "" {
  262. condition += ` AND art.activity_type_id IN (` + activityTypeIds + `)`
  263. }
  264. if whichDay != "" {
  265. var startDate string
  266. var endDate string
  267. if whichDay == "1" {
  268. startDate = time.Now().Format(utils.FormatDate)
  269. endDate = startDate
  270. } else if whichDay == "2" {
  271. startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
  272. endDate = startDate
  273. } else {
  274. startDate = time.Now().Format(utils.FormatDate)
  275. endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
  276. }
  277. condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
  278. condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"
  279. }
  280. if activeState != "" {
  281. condition += ` AND art.active_state IN (` + activeState + `)`
  282. }
  283. condition += ` AND art.publish_status = 1 `
  284. var conditionOr string
  285. //if strings.Contains(permissionStr, "专家") && (userType == 2 || userType == 3 || userType == 4) {
  286. //conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + permissionSqlStr + condition + `) `
  287. //conditionOr += ` OR ( art.is_limit_people = 1 AND art.activity_type_id = 3 AND art.customer_type_ids LIKE '%4%' ` + condition + `) `
  288. //}
  289. // 有专家权限的这几种用户,不做行业权限校验
  290. if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
  291. conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + condition + `) `
  292. }
  293. if (userType == 5) && strings.Contains(permissionStr, "专家") {
  294. conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%' ` + condition + `) `
  295. }
  296. conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) `
  297. condition += ` AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
  298. total, err := models.GetActivityCount(condition, pars)
  299. if err != nil {
  300. br.Msg = "获取失败"
  301. br.ErrMsg = "获取失败,Err:" + err.Error()
  302. return
  303. }
  304. condition += ` ORDER BY art.active_state ASC, art.activity_time ASC `
  305. list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize)
  306. if errList != nil {
  307. br.Msg = "获取失败"
  308. br.ErrMsg = "获取失败,Err:" + errList.Error()
  309. return
  310. }
  311. for k, v := range list {
  312. if strings.Contains(v.ActivityName, "【") {
  313. list[k].IsBrackets = 1
  314. }
  315. if v.SignupNum > v.LimitPeopleNum {
  316. list[k].SignupNum = v.LimitPeopleNum
  317. }
  318. }
  319. page := paging.GetPaging(currentIndex, pageSize, total)
  320. resp := new(models.GetCygxActivityListRep)
  321. resp.List = list
  322. resp.Paging = page
  323. br.Ret = 200
  324. br.Success = true
  325. br.Msg = "获取成功"
  326. br.Data = resp
  327. }
  328. // @Title 我的日程
  329. // @Description 我的日程列表接口
  330. // @Param PageSize query int true "每页数据条数"
  331. // @Param CurrentIndex query int true "当前页页码,从1开始"
  332. // @Success 200 {object} models.GetCygxActivityListRep
  333. // @router /scheduleList [get]
  334. func (this *ActivityCoAntroller) ScheduleList() {
  335. br := new(models.BaseResponse).Init()
  336. defer func() {
  337. this.Data["json"] = br
  338. this.ServeJSON()
  339. }()
  340. user := this.User
  341. if user == nil {
  342. br.Msg = "请登录"
  343. br.ErrMsg = "请登录,SysUser Is Empty"
  344. return
  345. }
  346. uid := user.UserId
  347. pageSize, _ := this.GetInt("PageSize")
  348. currentIndex, _ := this.GetInt("CurrentIndex")
  349. var startSize int
  350. if pageSize <= 0 {
  351. pageSize = utils.PageSize20
  352. }
  353. if currentIndex <= 0 {
  354. currentIndex = 1
  355. }
  356. startSize = utils.StartIndex(currentIndex, pageSize)
  357. var condition string
  358. var pars []interface{}
  359. //condition += ` AND art.publish_status = 1 AND art.active_state IN(1,2) AND s.is_cancel = 0 AND s.fail_type = 0 `
  360. condition += ` AND art.publish_status = 1 AND art.active_state IN(1,2) `
  361. total, err := models.GetScheduleCount(uid)
  362. if err != nil {
  363. br.Msg = "获取失败"
  364. br.ErrMsg = "获取失败,Err:" + err.Error()
  365. return
  366. }
  367. list, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
  368. if errList != nil {
  369. br.Msg = "获取失败"
  370. br.ErrMsg = "获取失败,Err:" + errList.Error()
  371. return
  372. }
  373. for k, v := range list {
  374. if strings.Contains(v.ActivityName, "【") {
  375. list[k].IsBrackets = 1
  376. }
  377. if v.SignupNum > v.LimitPeopleNum {
  378. list[k].SignupNum = v.LimitPeopleNum
  379. }
  380. }
  381. page := paging.GetPaging(currentIndex, pageSize, total)
  382. resp := new(models.GetCygxActivityListRep)
  383. resp.List = list
  384. resp.Paging = page
  385. br.Ret = 200
  386. br.Success = true
  387. br.Msg = "获取成功"
  388. br.Data = resp
  389. }
  390. // @Title 活动详情
  391. // @Description 获取活动详情接口
  392. // @Param ActivityId query int true "活动ID"
  393. // @Success Ret=200 {object} models.CygxActivityResp
  394. // @router /detail [get]
  395. func (this *ActivityCoAntroller) Detail() {
  396. br := new(models.BaseResponse).Init()
  397. defer func() {
  398. this.Data["json"] = br
  399. this.ServeJSON()
  400. }()
  401. user := this.User
  402. if user == nil {
  403. br.Msg = "请登录"
  404. br.ErrMsg = "请登录,用户信息为空"
  405. br.Ret = 408
  406. return
  407. }
  408. uid := user.UserId
  409. activityId, _ := this.GetInt("ActivityId")
  410. if activityId < 1 {
  411. br.Msg = "请输入活动ID"
  412. return
  413. }
  414. resp := new(models.CygxActivityResp)
  415. hasPermission := 0
  416. var companyDetailStatus string
  417. activityInfo, err := models.GetAddActivityInfoByIdShow(uid, activityId)
  418. if err != nil && err.Error() != utils.ErrNoRow() {
  419. br.Msg = "获取信息失败"
  420. br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
  421. return
  422. }
  423. if activityInfo == nil {
  424. br.Msg = "活动不存在"
  425. br.ErrMsg = "活动ID错误,Err:" + "activityId:" + strconv.Itoa(activityId)
  426. return
  427. }
  428. applyCount, err := models.GetApplyRecordCount(uid)
  429. if err != nil && err.Error() != utils.ErrNoRow() {
  430. br.Msg = "获取信息失败"
  431. br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
  432. return
  433. }
  434. if user.CompanyId <= 1 {
  435. companyDetailStatus = ""
  436. } else {
  437. companyPermission, err := models.GetCompanyPermission(user.CompanyId)
  438. if err != nil {
  439. br.Msg = "获取信息失败"
  440. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  441. return
  442. }
  443. if companyPermission == "" {
  444. if applyCount > 0 {
  445. hasPermission = 4
  446. } else {
  447. hasPermission = 3
  448. }
  449. resp.HasPermission = hasPermission
  450. resp.OperationMode = "Apply"
  451. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦"
  452. br.Ret = 200
  453. br.Success = true
  454. br.Msg = "获取成功"
  455. br.Data = resp
  456. return
  457. }
  458. companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
  459. if err != nil {
  460. br.Msg = "获取信息失败!"
  461. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  462. return
  463. }
  464. if companyDetail == nil {
  465. br.Msg = "获取信息失败!"
  466. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
  467. return
  468. }
  469. companyDetailStatus = companyDetail.Status
  470. }
  471. var userType int
  472. var permissionStr string
  473. if user.CompanyId <= 1 {
  474. userType = 0
  475. } else {
  476. companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
  477. if err != nil {
  478. br.Msg = "获取信息失败!"
  479. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  480. return
  481. }
  482. if companyDetail == nil {
  483. br.Msg = "获取信息失败!"
  484. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
  485. return
  486. }
  487. //1、永续客户
  488. //2、大套餐客户(4个行业全开通的正式客户)
  489. //3、分行业套餐客户(开通对应行业的正式客户)
  490. //4、仅开通专家套餐的正式客户
  491. //5、开通对应行业套餐或专家套餐的试用客户
  492. if companyDetail.Status == "永续" {
  493. userType = 1
  494. } else if companyDetail.Status == "试用" {
  495. userType = 5
  496. } else if companyDetail.Status == "正式" {
  497. permissionStr, err = models.GetCompanyPermission(user.CompanyId)
  498. if err != nil {
  499. br.Msg = "获取信息失败"
  500. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  501. return
  502. }
  503. if permissionStr == "专家" {
  504. userType = 4
  505. } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") {
  506. userType = 2
  507. } else {
  508. userType = 3
  509. }
  510. }
  511. }
  512. if activityInfo.IsLimitPeople > 0 {
  513. var noPower bool
  514. if (userType == 1 || userType == 4 || userType == 5) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) {
  515. noPower = true
  516. }
  517. //带有专家权限的 2、大套餐客户(4个行业全开通的正式客户) 3、分行业套餐客户(开通对应行业的正式客户)
  518. if userType == 2 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
  519. noPower = true
  520. }
  521. if userType == 2 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
  522. noPower = true
  523. }
  524. if userType == 3 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
  525. noPower = true
  526. }
  527. if userType == 3 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
  528. noPower = true
  529. }
  530. if noPower {
  531. br.Msg = "您暂无查看该活动权限"
  532. br.ErrMsg = "被分享客户不可见,获取信息失败,Err:"
  533. return
  534. }
  535. }
  536. fmt.Println("权限可见校验")
  537. detail, errDetail := models.GetActivityTypeDetailById(activityInfo.ActivityTypeId)
  538. if errDetail != nil {
  539. br.Msg = "获取信息失败"
  540. br.ErrMsg = "获取信息失败,Err:" + errDetail.Error()
  541. return
  542. }
  543. if activityInfo.IsSignup > 0 {
  544. detail, errDetail := models.GetActivitySignupDetail(activityId, uid)
  545. if errDetail != nil {
  546. br.Msg = "获取信息失败"
  547. br.ErrMsg = "获取信息失败,Err:" + errDetail.Error()
  548. return
  549. }
  550. activityInfo.SignupType = detail.SignupType
  551. }
  552. activityInfo.ShowType = detail.ShowType
  553. //判断是否已经申请过
  554. if user.CompanyId > 1 {
  555. permissionStr, err := models.GetCompanyPermission(user.CompanyId)
  556. if err != nil {
  557. br.Msg = "获取信息失败"
  558. br.ErrMsg = "获取客户权限信息失败,Err:" + err.Error()
  559. return
  560. }
  561. companyItem, err := models.GetCompanyDetailById(user.CompanyId)
  562. //冻结客户
  563. if err != nil {
  564. if err.Error() == utils.ErrNoRow() {
  565. resp.HasPermission = 4
  566. resp.OperationMode = "Apply"
  567. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动"
  568. br.Ret = 200
  569. br.Success = true
  570. br.Msg = "获取成功"
  571. br.Data = resp
  572. return
  573. } else {
  574. br.Msg = "获取信息失败"
  575. br.ErrMsg = "获取客户公司信息失败,Err:" + err.Error()
  576. return
  577. }
  578. }
  579. //1专家电话会、2分析师电话会、3公司调研电话会、4公司线下调研、5专家线下沙龙、6分析师线下沙龙
  580. //OperationMode string `description:"操作方式 Apply:立即申请、Call:拨号 为空则为有权限"`
  581. var havePower bool
  582. if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 {
  583. havePower = true
  584. } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") {
  585. havePower = true
  586. } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") {
  587. havePower = true
  588. } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) {
  589. havePower = true
  590. } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
  591. havePower = true
  592. }
  593. if havePower {
  594. hasPermission = 1
  595. resp.HaqveJurisdiction = true
  596. } else {
  597. if permissionStr == "专家" {
  598. resp.PopupMsg = "您暂无权限参加【" + activityInfo.ActivityTypeName + "】类型活动"
  599. resp.MsgType = "Type"
  600. } else {
  601. resp.PopupMsg = "您暂无权限参加【" + activityInfo.ChartPermissionName + "】行业活动"
  602. resp.MsgType = "Industry"
  603. }
  604. resp.SellerMobile = companyItem.Mobile
  605. resp.SellerName = companyItem.SellerName
  606. resp.OperationMode = "Call"
  607. hasPermission = 2
  608. }
  609. } else { //潜在客户
  610. if applyCount > 0 {
  611. hasPermission = 4
  612. } else {
  613. hasPermission = 3
  614. }
  615. resp.OperationMode = "Apply"
  616. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦"
  617. }
  618. if hasPermission == 1 {
  619. if activityInfo.SignupNum > activityInfo.LimitPeopleNum {
  620. activityInfo.SignupNum = activityInfo.LimitPeopleNum
  621. }
  622. if activityInfo.ChartPermissionNames != "" {
  623. activityInfo.ChartPermissionName = activityInfo.ChartPermissionNames
  624. }
  625. resp.Detail = activityInfo
  626. }
  627. resp.HasPermission = hasPermission
  628. br.Ret = 200
  629. br.Success = true
  630. br.Msg = "获取成功"
  631. br.Data = resp
  632. }
  633. // @Title 活动报名
  634. // @Description 活动报名接口
  635. // @Param request body models.ActivitySingnupRep true "type json string"
  636. // @Success Ret=200 {object} models.SignupStatus
  637. // @router /signup/add [post]
  638. func (this *ActivityCoAntroller) SignupAdd() {
  639. br := new(models.BaseResponse).Init()
  640. defer func() {
  641. this.Data["json"] = br
  642. this.ServeJSON()
  643. }()
  644. user := this.User
  645. if user == nil {
  646. br.Msg = "请登录"
  647. br.ErrMsg = "请登录,用户信息为空"
  648. br.Ret = 408
  649. return
  650. }
  651. uid := user.UserId
  652. signupStatus := ""
  653. var req models.ActivitySingnupRep
  654. resp := new(models.SignupStatus)
  655. var total int
  656. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  657. if err != nil {
  658. br.Msg = "参数解析异常!"
  659. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  660. return
  661. }
  662. activityId := req.ActivityId
  663. signupType := req.SignupType
  664. hasPermission := 0
  665. if signupType == 1 && user.Mobile == "" && user.OutboundMobile == "" {
  666. resp.GoBindEmail = true
  667. }
  668. //判断是否已经申请过
  669. applyCount, err := models.GetApplyRecordCount(uid)
  670. if err != nil && err.Error() != utils.ErrNoRow() {
  671. br.Msg = "获取信息失败"
  672. br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
  673. return
  674. }
  675. activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
  676. if activityInfo == nil {
  677. br.Msg = "操作失败"
  678. br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
  679. return
  680. }
  681. if errInfo != nil {
  682. br.Msg = "操作失败"
  683. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  684. return
  685. }
  686. //SignupStatus "报名状态:人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"`
  687. //HasPermission "1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"`
  688. var companyDetailStatus string
  689. if user.CompanyId <= 1 {
  690. companyDetailStatus = ""
  691. } else {
  692. companyPermission, err := models.GetCompanyPermission(user.CompanyId)
  693. if err != nil {
  694. br.Msg = "获取信息失败"
  695. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  696. return
  697. }
  698. if companyPermission == "" {
  699. if applyCount > 0 {
  700. hasPermission = 4
  701. } else {
  702. hasPermission = 3
  703. }
  704. resp.HasPermission = hasPermission
  705. resp.OperationMode = "Apply"
  706. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦"
  707. br.Ret = 200
  708. br.Success = true
  709. br.Msg = "获取成功"
  710. br.Data = resp
  711. return
  712. }
  713. companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
  714. if err != nil {
  715. br.Msg = "获取信息失败!"
  716. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  717. return
  718. }
  719. if companyDetail == nil {
  720. br.Msg = "获取信息失败!"
  721. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
  722. return
  723. }
  724. companyDetailStatus = companyDetail.Status
  725. }
  726. var userType int
  727. var permissionStr string
  728. if user.CompanyId <= 1 {
  729. userType = 0
  730. } else {
  731. companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
  732. if err != nil {
  733. br.Msg = "获取信息失败!"
  734. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  735. return
  736. }
  737. if companyDetail == nil {
  738. br.Msg = "获取信息失败!"
  739. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
  740. return
  741. }
  742. if companyDetail.Status == "永续" {
  743. userType = 1
  744. } else if companyDetail.Status == "试用" {
  745. userType = 5
  746. } else if companyDetail.Status == "正式" {
  747. permissionStr, err = models.GetCompanyPermission(user.CompanyId)
  748. if err != nil {
  749. br.Msg = "获取信息失败"
  750. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  751. return
  752. }
  753. if permissionStr == "专家" {
  754. userType = 4
  755. } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") {
  756. userType = 2
  757. } else {
  758. userType = 3
  759. }
  760. }
  761. }
  762. item := new(models.CygxActivitySignup)
  763. if user.CompanyId > 1 {
  764. permissionStr, err := models.GetCompanyPermission(user.CompanyId)
  765. if err != nil {
  766. br.Msg = "获取信息失败"
  767. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  768. return
  769. }
  770. companyItem, err := models.GetCompanyDetailById(user.CompanyId)
  771. //冻结客户
  772. if err != nil {
  773. if err.Error() == utils.ErrNoRow() {
  774. resp.HasPermission = 4
  775. resp.OperationMode = "Apply"
  776. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦"
  777. br.Ret = 200
  778. br.Success = true
  779. br.Msg = "获取成功"
  780. br.Data = resp
  781. return
  782. } else {
  783. br.Msg = "获取信息失败"
  784. br.ErrMsg = "获取客户公司信息失败,Err:" + err.Error()
  785. return
  786. }
  787. }
  788. //1专家电话会、2分析师电话会、3公司调研电话会、4公司线下调研、5专家线下沙龙、6分析师线下沙龙
  789. //OperationMode string `description:"操作方式 Apply:立即申请、Call:拨号 为空则为有权限"`
  790. var havePower bool
  791. if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 {
  792. havePower = true
  793. } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") {
  794. havePower = true
  795. } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") {
  796. havePower = true
  797. } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) {
  798. havePower = true
  799. } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
  800. havePower = true
  801. }
  802. if havePower {
  803. hasPermission = 1
  804. signupStatus = "Success"
  805. resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
  806. if time.Now().After(resultTime.Add(-time.Minute * 60)) {
  807. signupStatus = "Overtime"
  808. resp.SignupType = signupType
  809. resp.SignupStatus = signupStatus
  810. resp.HasPermission = hasPermission
  811. br.Ret = 200
  812. br.Success = true
  813. br.Msg = ""
  814. br.Data = resp
  815. return
  816. }
  817. //人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"`
  818. //如果是下面几种情况则对报名信息做判断限制 (公司调研电话会(限制人数)、公司线下调研、专家/分析师线下沙龙)
  819. if (activityInfo.ActivityTypeId == 3 && activityInfo.IsLimitPeople == 1) || activityInfo.ActivityTypeId > 3 {
  820. //判断优先级:总人数限制→单机构2人限制→爽约3次限制
  821. totalRestrict, err := models.GetUserRestrictCount(user.Mobile)
  822. if err != nil {
  823. br.Msg = "获取信息失败"
  824. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  825. return
  826. }
  827. if totalRestrict >= 1 {
  828. signupStatus = "BreakPromise"
  829. item.FailType = 3
  830. }
  831. totalSignupCompany, err := models.GetActivitySignupCompanyCount(activityId, user.CompanyId)
  832. if err != nil {
  833. br.Msg = "获取信息失败"
  834. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  835. return
  836. }
  837. if totalSignupCompany >= 2 {
  838. signupStatus = "TwoPeople"
  839. item.FailType = 2
  840. }
  841. totaSignupPeopleNum, err := models.GetActivitySignupSuccessCount(activityId)
  842. if err != nil {
  843. br.Msg = "获取信息失败"
  844. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  845. return
  846. }
  847. if totaSignupPeopleNum >= activityInfo.LimitPeopleNum {
  848. signupStatus = "FullStarffed"
  849. item.FailType = 1
  850. }
  851. totalUserRestrictCount, err := models.GetActivitySignupByUserRestrictCount(uid, activityId)
  852. if err != nil {
  853. br.Msg = "获取失败"
  854. br.ErrMsg = "获取失败,Err:" + err.Error()
  855. return
  856. }
  857. //解除报名限制之后二次报名相同活动
  858. if totalUserRestrictCount > 0 && totalRestrict == 0 && resp.GoBindEmail != true {
  859. item.UserId = uid
  860. item.ActivityId = activityId
  861. item.CreateTime = time.Now()
  862. item.Mobile = user.Mobile
  863. item.Email = user.Email
  864. item.CompanyId = user.CompanyId
  865. item.CompanyName = user.CompanyName
  866. item.SignupType = signupType
  867. item.FailType = 0
  868. item.DoFailType = 0
  869. _, errSignup := models.AddActivitySignupByRestrict(item)
  870. if errSignup != nil {
  871. br.Msg = "操作失败"
  872. br.ErrMsg = "操作失败,Err:" + errSignup.Error()
  873. return
  874. }
  875. resp.HaqveJurisdiction = true
  876. resp.SignupType = signupType
  877. resp.SignupStatus = "Success"
  878. resp.HasPermission = hasPermission
  879. resp.ActivityId = activityId
  880. total, err = models.GetUserMeetingReminderCount(user.UserId)
  881. if err != nil {
  882. br.Msg = "获取信息失败"
  883. br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
  884. return
  885. }
  886. if total == 0 {
  887. resp.GoFollow = true
  888. }
  889. br.Ret = 200
  890. br.Success = true
  891. br.Msg = "操作成功"
  892. br.Data = resp
  893. return
  894. }
  895. totalMy, err := models.GetActivitySignupByUserCount(uid, activityId)
  896. if err != nil {
  897. br.Msg = "获取失败"
  898. br.ErrMsg = "获取失败,Err:" + err.Error()
  899. return
  900. }
  901. if signupStatus != "Success" && totalMy == 0 && resp.GoBindEmail != true {
  902. item.UserId = uid
  903. item.ActivityId = activityId
  904. item.CreateTime = time.Now()
  905. item.Mobile = user.Mobile
  906. item.Email = user.Email
  907. item.CompanyId = user.CompanyId
  908. item.CompanyName = user.CompanyName
  909. item.SignupType = signupType
  910. item.DoFailType = item.FailType
  911. if user.OutboundMobile != "" {
  912. item.OutboundMobile = user.OutboundMobile
  913. if user.OutboundCountryCode == "" {
  914. item.CountryCode = "86"
  915. } else {
  916. item.CountryCode = user.OutboundCountryCode
  917. }
  918. } else {
  919. item.OutboundMobile = user.Mobile
  920. if user.CountryCode == "" {
  921. item.CountryCode = "86"
  922. } else {
  923. item.CountryCode = user.CountryCode
  924. }
  925. }
  926. //添加报名信息,但是不加入日程
  927. _, errSignup := models.AddActivitySignupNoSchedule(item)
  928. if errSignup != nil {
  929. br.Msg = "操作失败"
  930. br.ErrMsg = "操作失败,Err:" + errSignup.Error()
  931. return
  932. }
  933. }
  934. }
  935. totalMySuccess, err := models.GetActivitySignupCount(uid, activityId)
  936. if err != nil {
  937. br.Msg = "获取失败"
  938. br.ErrMsg = "获取失败,Err:" + err.Error()
  939. return
  940. }
  941. if totalMySuccess > 0 {
  942. br.Msg = "您已报名这个活动"
  943. return
  944. }
  945. if signupStatus == "Success" && resp.GoBindEmail != true {
  946. item.UserId = uid
  947. item.ActivityId = activityId
  948. item.CreateTime = time.Now()
  949. item.Mobile = user.Mobile
  950. item.Email = user.Email
  951. item.CompanyId = user.CompanyId
  952. item.CompanyName = user.CompanyName
  953. item.SignupType = signupType
  954. item.FailType = 0
  955. item.DoFailType = 0
  956. item.OutboundMobile = user.Mobile
  957. if user.OutboundMobile != "" {
  958. item.OutboundMobile = user.OutboundMobile
  959. if user.OutboundCountryCode == "" {
  960. item.CountryCode = "86"
  961. } else {
  962. item.CountryCode = user.OutboundCountryCode
  963. }
  964. } else {
  965. item.OutboundMobile = user.Mobile
  966. if user.CountryCode == "" {
  967. item.CountryCode = "86"
  968. } else {
  969. item.CountryCode = user.CountryCode
  970. }
  971. }
  972. _, errSignup := models.AddActivitySignup(item)
  973. if errSignup != nil {
  974. br.Msg = "操作失败"
  975. br.ErrMsg = "操作失败,Err:" + errSignup.Error()
  976. return
  977. }
  978. resp.HaqveJurisdiction = true
  979. }
  980. } else {
  981. hasPermission = 2
  982. resp.SellerMobile = companyItem.Mobile
  983. resp.SellerName = companyItem.SellerName
  984. resp.MsgType = "Type"
  985. resp.OperationMode = "Call"
  986. if permissionStr == "专家" {
  987. resp.PopupMsg = "您暂无权限参加【" + activityInfo.ActivityTypeName + "】类型活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile
  988. resp.MsgType = "Type"
  989. } else {
  990. resp.PopupMsg = "您暂无权限参加【" + activityInfo.ChartPermissionName + "】行业活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile
  991. resp.MsgType = "Industry"
  992. }
  993. }
  994. } else { //潜在客户
  995. if applyCount > 0 {
  996. hasPermission = 4
  997. } else {
  998. hasPermission = 3
  999. }
  1000. resp.OperationMode = "Apply"
  1001. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦"
  1002. }
  1003. if signupType == 1 && user.IsMsgOutboundMobile == 0 {
  1004. resp.GoOutboundMobile = true
  1005. if user.Mobile != "" || user.OutboundMobile != "" {
  1006. go models.ModifyWxUserIsMsgOutboundMobile(user.UserId)
  1007. }
  1008. }
  1009. if user.OutboundMobile == "" {
  1010. resp.Mobile = user.Mobile
  1011. if user.CountryCode == "" && len(user.Mobile) == 11 {
  1012. resp.CountryCode = "86"
  1013. } else {
  1014. resp.CountryCode = user.CountryCode
  1015. }
  1016. } else {
  1017. resp.Mobile = user.OutboundMobile
  1018. resp.CountryCode = user.OutboundCountryCode
  1019. }
  1020. //如果用户有绑定手机号,但是没有绑定外呼手机号
  1021. if signupType == 1 && user.Mobile != "" && user.OutboundMobile == "" {
  1022. var countryCode string
  1023. if len(user.Mobile) == 8 {
  1024. countryCode = "852"
  1025. } else if len(user.Mobile) == 9 {
  1026. countryCode = "886"
  1027. } else if len(user.Mobile) == 10 {
  1028. countryCode = "1"
  1029. } else if len(user.Mobile) >= 11 {
  1030. countryCode = "86"
  1031. }
  1032. models.BindUserOutboundMobileByMobile(user.Mobile, countryCode, uid)
  1033. }
  1034. resp.SignupType = signupType
  1035. resp.SignupStatus = signupStatus
  1036. resp.HasPermission = hasPermission
  1037. if signupStatus == "Success" {
  1038. resp.ActivityId = activityId
  1039. }
  1040. total, err = models.GetUserSignupCount(user.UserId)
  1041. if err != nil {
  1042. br.Msg = "获取信息失败"
  1043. br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
  1044. return
  1045. }
  1046. if total <= 1 {
  1047. resp.GoFollow = true
  1048. }
  1049. br.Ret = 200
  1050. br.Success = true
  1051. br.Msg = "操作成功"
  1052. br.Data = resp
  1053. }
  1054. // @Title 活动取消报名
  1055. // @Description 活动取消报名接口
  1056. // @Param request body models.ActivitySingnupRep true "type json string"
  1057. // @Success Ret=200 {object} models.SignupStatus
  1058. // @router /signup/cancel [post]
  1059. func (this *ActivityCoAntroller) SignupCancel() {
  1060. br := new(models.BaseResponse).Init()
  1061. defer func() {
  1062. this.Data["json"] = br
  1063. this.ServeJSON()
  1064. }()
  1065. user := this.User
  1066. if user == nil {
  1067. br.Msg = "请登录"
  1068. br.ErrMsg = "请登录,用户信息为空"
  1069. br.Ret = 408
  1070. return
  1071. }
  1072. uid := user.UserId
  1073. var req models.ActivitySingnupRep
  1074. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1075. if err != nil {
  1076. br.Msg = "参数解析异常!"
  1077. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1078. return
  1079. }
  1080. activityId := req.ActivityId
  1081. signupType := req.SignupType
  1082. item := new(models.CygxActivitySignup)
  1083. activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
  1084. if activityInfo == nil {
  1085. br.Msg = "操作失败"
  1086. br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
  1087. return
  1088. }
  1089. if errInfo != nil {
  1090. br.Msg = "操作失败"
  1091. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  1092. return
  1093. }
  1094. resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
  1095. if time.Now().After(resultTime.Add(-time.Minute * 60)) {
  1096. if signupType == 1 {
  1097. br.Msg = "活动开始前1小时内无法取消预约外呼,请联系对口销售处理"
  1098. } else {
  1099. br.Msg = "活动开始前1小时内无法取消报名,请联系对口销售处理"
  1100. }
  1101. return
  1102. }
  1103. total, err := models.GetActivitySignupCount(uid, activityId)
  1104. if err != nil {
  1105. br.Msg = "获取失败"
  1106. br.ErrMsg = "获取失败,Err:" + err.Error()
  1107. return
  1108. }
  1109. if total == 0 {
  1110. br.Msg = "您暂未报名这个活动"
  1111. return
  1112. }
  1113. item.UserId = uid
  1114. item.ActivityId = activityId
  1115. item.CreateTime = time.Now()
  1116. item.Mobile = user.Mobile
  1117. item.Email = user.Email
  1118. item.CompanyId = user.CompanyId
  1119. item.CompanyName = user.CompanyName
  1120. resp := new(models.SignupStatus)
  1121. resp.ActivityId = activityId
  1122. _, errSignup := models.CancelActivitySignup(item)
  1123. if errSignup != nil {
  1124. br.Msg = "操作失败"
  1125. br.ErrMsg = "操作失败,Err:" + errSignup.Error()
  1126. return
  1127. }
  1128. br.Ret = 200
  1129. br.Success = true
  1130. br.Msg = "操作成功"
  1131. br.Data = resp
  1132. }
  1133. // @Title 用户搜索详情
  1134. // @Description 获取用户搜索详情接口
  1135. // @Param IsShowJurisdiction query int true "是否仅展示有权限的,默认为0,1是,2否 "
  1136. // @Success Ret=200 {object} models.ActivityUserSearchContentList
  1137. // @router /getUserSearchContent [get]
  1138. func (this *ActivityCoAntroller) GetUserSearchContent() {
  1139. br := new(models.BaseResponse).Init()
  1140. defer func() {
  1141. this.Data["json"] = br
  1142. this.ServeJSON()
  1143. }()
  1144. user := this.User
  1145. if user == nil {
  1146. br.Msg = "请登录"
  1147. br.ErrMsg = "请登录,用户信息为空"
  1148. br.Ret = 408
  1149. return
  1150. }
  1151. uid := user.UserId
  1152. detailSeearch := new(models.CygxActivityUserSearchContent)
  1153. detailSeearch.IsShowJurisdiction = 0
  1154. detailSeearch.ChartPermissionids = ""
  1155. detailSeearch.ActiveState = ""
  1156. resp := new(models.ActivityUserSearchContentList)
  1157. detail, _ := models.GetUserSearchContentByUid(uid)
  1158. if detail == nil {
  1159. detail = detailSeearch
  1160. }
  1161. isShowJurisdiction, _ := this.GetInt("IsShowJurisdiction")
  1162. listActivityType, errActivityType := models.GetActivityTypeList()
  1163. if errActivityType != nil {
  1164. br.Msg = "获取失败"
  1165. br.ErrMsg = "获取数据失败,Err:" + errActivityType.Error()
  1166. return
  1167. }
  1168. var listChartPermissionid []*models.ActivityChartPermission
  1169. var errChart error
  1170. if isShowJurisdiction == 1 {
  1171. listChartPermissionidAll, errChartAll := models.GetUserCompanyPermission(user.CompanyId)
  1172. listChartPermissionid = listChartPermissionidAll
  1173. errChart = errChartAll
  1174. } else if isShowJurisdiction == 2 {
  1175. listChartPermissionidAll, errChartAll := models.GetChartPermissionActivity()
  1176. listChartPermissionid = listChartPermissionidAll
  1177. errChart = errChartAll
  1178. } else {
  1179. if detail.IsShowJurisdiction == 1 {
  1180. listChartPermissionidAll, errChartAll := models.GetUserCompanyPermission(user.CompanyId)
  1181. listChartPermissionid = listChartPermissionidAll
  1182. errChart = errChartAll
  1183. } else {
  1184. listChartPermissionidAll, errChartAll := models.GetChartPermissionActivity()
  1185. listChartPermissionid = listChartPermissionidAll
  1186. errChart = errChartAll
  1187. }
  1188. }
  1189. if errChart != nil {
  1190. br.Msg = "获取信息失败"
  1191. br.ErrMsg = "获取品种信息失败,Err:" + errChart.Error()
  1192. return
  1193. }
  1194. if detail.IsShowJurisdiction == 1 {
  1195. resp.IsShowJurisdiction = true
  1196. }
  1197. fmt.Println(isShowJurisdiction)
  1198. if isShowJurisdiction == 1 || detail.IsShowJurisdiction == 1 {
  1199. resp.IsShowJurisdiction = true
  1200. for k, _ := range listChartPermissionid {
  1201. listChartPermissionid[k].IsChoose = true
  1202. }
  1203. }
  1204. if isShowJurisdiction == 2 {
  1205. resp.IsShowJurisdiction = false
  1206. }
  1207. activeStateList := []models.ActivityStaus{models.ActivityStaus{Id: 1, StatusName: "未开始", IsChoose: true}, models.ActivityStaus{Id: 2, StatusName: "进行中"}, models.ActivityStaus{Id: 3, StatusName: "已结束"}}
  1208. list2, err := models.GetChartPermissionActivity()
  1209. if err != nil {
  1210. br.Msg = "获取信息失败"
  1211. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  1212. return
  1213. }
  1214. resp.ListChartPermission2 = list2
  1215. if activeStateList[1].IsChoose == activeStateList[2].IsChoose == false {
  1216. activeStateList[0].IsChoose = true
  1217. }
  1218. resp.ListActivityType = listActivityType
  1219. resp.ListChartPermission = listChartPermissionid
  1220. resp.ListActivityStaus = activeStateList
  1221. br.Ret = 200
  1222. br.Success = true
  1223. br.Msg = "获取成功"
  1224. br.Data = resp
  1225. }
  1226. // @Title 添加会议提醒
  1227. // @Description 添加会议提醒接口
  1228. // @Param request body models.ActivityIdRep true "type json string"
  1229. // @Success Ret=200 {object} models.SignupStatus
  1230. // @router /meetingReminder/add [post]
  1231. func (this *ActivityCoAntroller) MeetingReminderAdd() {
  1232. br := new(models.BaseResponse).Init()
  1233. defer func() {
  1234. this.Data["json"] = br
  1235. this.ServeJSON()
  1236. }()
  1237. user := this.User
  1238. if user == nil {
  1239. br.Msg = "请登录"
  1240. br.ErrMsg = "请登录,用户信息为空"
  1241. br.Ret = 408
  1242. return
  1243. }
  1244. uid := user.UserId
  1245. //var signupStatus string
  1246. signupStatus := "Success"
  1247. var req models.ActivityIdRep
  1248. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1249. if err != nil {
  1250. br.Msg = "参数解析异常!"
  1251. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1252. return
  1253. }
  1254. activityId := req.ActivityId
  1255. activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
  1256. if activityInfo == nil {
  1257. br.Msg = "操作失败"
  1258. br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
  1259. return
  1260. }
  1261. if errInfo != nil {
  1262. br.Msg = "操作失败"
  1263. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  1264. return
  1265. }
  1266. //判断是否已经申请过
  1267. applyCount, err := models.GetApplyRecordCount(uid)
  1268. if err != nil && err.Error() != utils.ErrNoRow() {
  1269. br.Msg = "获取信息失败"
  1270. br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
  1271. return
  1272. }
  1273. //SignupStatus string `description:"报名状态:人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"`
  1274. item := new(models.CygxActivityMeetingReminder)
  1275. resp := new(models.SignupStatus)
  1276. hasPermission := 0
  1277. var companyDetailStatus string
  1278. if user.CompanyId <= 1 {
  1279. companyDetailStatus = ""
  1280. } else {
  1281. companyPermission, err := models.GetCompanyPermission(user.CompanyId)
  1282. if err != nil {
  1283. br.Msg = "获取信息失败"
  1284. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  1285. return
  1286. }
  1287. if companyPermission == "" {
  1288. if applyCount > 0 {
  1289. hasPermission = 4
  1290. } else {
  1291. hasPermission = 3
  1292. }
  1293. resp.HasPermission = hasPermission
  1294. resp.OperationMode = "Apply"
  1295. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦"
  1296. br.Ret = 200
  1297. br.Success = true
  1298. br.Msg = "获取成功"
  1299. br.Data = resp
  1300. return
  1301. }
  1302. companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
  1303. if err != nil {
  1304. br.Msg = "获取信息失败!"
  1305. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  1306. return
  1307. }
  1308. if companyDetail == nil {
  1309. br.Msg = "获取信息失败!"
  1310. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
  1311. return
  1312. }
  1313. companyDetailStatus = companyDetail.Status
  1314. }
  1315. var userType int
  1316. var permissionStr string
  1317. if user.CompanyId <= 1 {
  1318. userType = 0
  1319. } else {
  1320. companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
  1321. if err != nil {
  1322. br.Msg = "获取信息失败!"
  1323. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  1324. return
  1325. }
  1326. if companyDetail == nil {
  1327. br.Msg = "获取信息失败!"
  1328. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
  1329. return
  1330. }
  1331. if companyDetail.Status == "永续" {
  1332. userType = 1
  1333. } else if companyDetail.Status == "试用" {
  1334. userType = 5
  1335. } else if companyDetail.Status == "正式" {
  1336. permissionStr, err = models.GetCompanyPermission(user.CompanyId)
  1337. if err != nil {
  1338. br.Msg = "获取信息失败"
  1339. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  1340. return
  1341. }
  1342. if permissionStr == "专家" {
  1343. userType = 4
  1344. } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") {
  1345. userType = 2
  1346. } else {
  1347. userType = 3
  1348. }
  1349. }
  1350. }
  1351. resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
  1352. if time.Now().After(resultTime.Add(-time.Minute * 15)) {
  1353. br.Msg = "活动开始前15分钟无法设置会议提醒"
  1354. return
  1355. }
  1356. if user.CompanyId > 1 {
  1357. permissionStr, err := models.GetCompanyPermission(user.CompanyId)
  1358. if err != nil {
  1359. br.Msg = "获取信息失败"
  1360. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  1361. return
  1362. }
  1363. companyItem, err := models.GetCompanyDetailById(user.CompanyId)
  1364. //冻结客户
  1365. if err != nil {
  1366. if err.Error() == utils.ErrNoRow() {
  1367. resp.HasPermission = 4
  1368. resp.OperationMode = "Apply"
  1369. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦"
  1370. br.Ret = 200
  1371. br.Success = true
  1372. br.Msg = "获取成功"
  1373. br.Data = resp
  1374. return
  1375. } else {
  1376. br.Msg = "获取信息失败"
  1377. br.ErrMsg = "获取客户公司信息失败,Err:" + err.Error()
  1378. return
  1379. }
  1380. }
  1381. var havePower bool
  1382. if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 {
  1383. havePower = true
  1384. } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") {
  1385. havePower = true
  1386. } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") {
  1387. havePower = true
  1388. } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) {
  1389. havePower = true
  1390. } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
  1391. havePower = true
  1392. }
  1393. if havePower {
  1394. hasPermission = 1
  1395. signupStatus = "Success"
  1396. totalMeeting, errMeeting := models.GetActivityMeetingReminderCount(uid, activityId)
  1397. if errMeeting != nil {
  1398. br.Msg = "获取失败"
  1399. br.ErrMsg = "获取失败,Err:" + errMeeting.Error()
  1400. return
  1401. }
  1402. if totalMeeting > 0 {
  1403. br.Msg = "您已预约,请勿重复预约"
  1404. return
  1405. }
  1406. item.UserId = uid
  1407. item.ActivityId = activityId
  1408. item.CreateTime = time.Now()
  1409. item.Mobile = user.Mobile
  1410. item.Email = user.Email
  1411. item.CompanyId = user.CompanyId
  1412. item.CompanyName = user.CompanyName
  1413. _, errSignup := models.AddActivityMeetingReminder(item)
  1414. if errSignup != nil {
  1415. br.Msg = "操作失败"
  1416. br.ErrMsg = "操作失败,Err:" + errSignup.Error()
  1417. return
  1418. }
  1419. resp.HaqveJurisdiction = true
  1420. } else {
  1421. hasPermission = 2
  1422. resp.SellerMobile = companyItem.Mobile
  1423. resp.SellerName = companyItem.SellerName
  1424. resp.MsgType = "Type"
  1425. resp.OperationMode = "Call"
  1426. if permissionStr == "专家" {
  1427. resp.PopupMsg = "您暂无权限参加【" + activityInfo.ActivityTypeName + "】类型活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile
  1428. resp.MsgType = "Type"
  1429. } else {
  1430. resp.PopupMsg = "您暂无权限参加【" + activityInfo.ChartPermissionName + "】行业活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile
  1431. resp.MsgType = "Industry"
  1432. }
  1433. }
  1434. } else { //潜在客户
  1435. if applyCount > 0 {
  1436. hasPermission = 4
  1437. } else {
  1438. hasPermission = 3
  1439. }
  1440. resp.OperationMode = "Apply"
  1441. resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦"
  1442. }
  1443. resp.HasPermission = hasPermission
  1444. resp.SignupStatus = signupStatus
  1445. resp.ActivityId = activityId
  1446. var total int
  1447. total, err = models.GetUserActivityMeetingReminderCount(user.UserId)
  1448. if err != nil {
  1449. br.Msg = "获取信息失败"
  1450. br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
  1451. return
  1452. }
  1453. if total <= 1 {
  1454. resp.GoFollow = true
  1455. }
  1456. br.Ret = 200
  1457. br.Success = true
  1458. if hasPermission == 1 {
  1459. br.Msg = "设置成功,会前15分钟会为您推送微信消息提醒"
  1460. }
  1461. br.Data = resp
  1462. }
  1463. // @Title 取消会议提醒
  1464. // @Description 取消会议提醒接口
  1465. // @Param request body models.ActivityIdRep true "type json string"
  1466. // @Success Ret=200 {object} models.SignupStatus
  1467. // @router /meetingReminder/cancel [post]
  1468. func (this *ActivityCoAntroller) MeetingReminderCancel() {
  1469. br := new(models.BaseResponse).Init()
  1470. defer func() {
  1471. this.Data["json"] = br
  1472. this.ServeJSON()
  1473. }()
  1474. user := this.User
  1475. if user == nil {
  1476. br.Msg = "请登录"
  1477. br.ErrMsg = "请登录,用户信息为空"
  1478. br.Ret = 408
  1479. return
  1480. }
  1481. uid := user.UserId
  1482. var req models.ActivityIdRep
  1483. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1484. if err != nil {
  1485. br.Msg = "参数解析异常!"
  1486. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1487. return
  1488. }
  1489. activityId := req.ActivityId
  1490. signupStatus := "Success"
  1491. item := new(models.CygxActivityMeetingReminder)
  1492. activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
  1493. if activityInfo == nil {
  1494. br.Msg = "操作失败"
  1495. br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
  1496. return
  1497. }
  1498. if errInfo != nil {
  1499. br.Msg = "操作失败"
  1500. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  1501. return
  1502. }
  1503. //if signupStatus == "Success" {
  1504. total, err := models.GetActivityMeetingReminderCount(uid, activityId)
  1505. if err != nil {
  1506. br.Msg = "获取失败"
  1507. br.ErrMsg = "获取失败,Err:" + err.Error()
  1508. return
  1509. }
  1510. if total == 0 {
  1511. br.Msg = "您暂未添加该活动会议提醒"
  1512. return
  1513. }
  1514. resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
  1515. if time.Now().After(resultTime.Add(-time.Minute * 15)) {
  1516. br.Msg = "活动开始前15分钟无法取消会议提醒"
  1517. return
  1518. }
  1519. item.UserId = uid
  1520. item.ActivityId = activityId
  1521. item.CreateTime = time.Now()
  1522. item.Mobile = user.Mobile
  1523. item.Email = user.Email
  1524. item.CompanyId = user.CompanyId
  1525. item.CompanyName = user.CompanyName
  1526. _, errSignup := models.CancelActivityMeetingReminder(item)
  1527. if errSignup != nil {
  1528. br.Msg = "操作失败"
  1529. br.ErrMsg = "操作失败,Err:" + errSignup.Error()
  1530. return
  1531. }
  1532. //}
  1533. resp := new(models.SignupStatus)
  1534. resp.SignupStatus = signupStatus
  1535. resp.ActivityId = activityId
  1536. br.Ret = 200
  1537. br.Success = true
  1538. br.Msg = "会议提醒已取消"
  1539. br.Data = resp
  1540. }
  1541. // @Title 敏捷搜索关键词的列表
  1542. // @Description 获取敏捷搜索关键词的列表接口
  1543. // @Success 200 {object} models.ActivityFastsearchKeywordsListResp
  1544. // @router /fastSearchKeWord [get]
  1545. func (this *ActivityABaseController) FastSearch() {
  1546. br := new(models.BaseResponse).Init()
  1547. defer func() {
  1548. this.Data["json"] = br
  1549. this.ServeJSON()
  1550. }()
  1551. resp := new(models.ActivityFastsearchKeywordsListResp)
  1552. list, err := models.GetActivityFastsearchKeywordsList()
  1553. if err != nil {
  1554. br.Msg = "获取失败"
  1555. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1556. return
  1557. }
  1558. resp.List = list
  1559. br.Ret = 200
  1560. br.Success = true
  1561. br.Msg = "获取成功"
  1562. br.Data = resp
  1563. }
  1564. // @Title 主题列表
  1565. // @Description 获取活动主题列表接口
  1566. // @Param ChartPermissionIds query string false "行业id 多个用 , 隔开"
  1567. // @Param ActivityTypeIds query string false "活动类型id 多个用 , 隔开"
  1568. // @Param ActiveState query string false "活动进行状态 未开始:1、进行中2、已结束3"
  1569. // @Param WhichDay query string false "哪一天 今天:1、明天:2,多个用 , 隔开"
  1570. // @Param Label query string false "搜索主题 多个用 , 隔开 (空为活动主题,非空为更多主题)"
  1571. // @Success 200 {object} models.GetCygxActivityLabelListRep
  1572. // @router /labelList [get]
  1573. func (this *ActivityCoAntroller) LabelList() {
  1574. br := new(models.BaseResponse).Init()
  1575. defer func() {
  1576. this.Data["json"] = br
  1577. this.ServeJSON()
  1578. }()
  1579. user := this.User
  1580. if user == nil {
  1581. br.Msg = "请登录"
  1582. br.ErrMsg = "请登录,SysUser Is Empty"
  1583. return
  1584. }
  1585. pageSize, _ := this.GetInt("PageSize")
  1586. //currentIndex, _ := this.GetInt("CurrentIndex")
  1587. chartPermissionIds := this.GetString("ChartPermissionIds")
  1588. activityTypeIds := this.GetString("ActivityTypeIds")
  1589. whichDay := this.GetString("WhichDay")
  1590. isShowJurisdiction, _ := this.GetInt("IsShowJurisdiction")
  1591. activeState := this.GetString("ActiveState")
  1592. label := this.GetString("Label")
  1593. //入参为 undefined 时的处理
  1594. if chartPermissionIds == "undefined" {
  1595. chartPermissionIds = ""
  1596. }
  1597. if activityTypeIds == "undefined" {
  1598. activityTypeIds = ""
  1599. }
  1600. if whichDay == "undefined" {
  1601. whichDay = ""
  1602. }
  1603. if activeState == "undefined" {
  1604. activeState = ""
  1605. }
  1606. if label == "undefined" {
  1607. label = ""
  1608. }
  1609. var userType int
  1610. var permissionStr string
  1611. if user.CompanyId <= 1 {
  1612. userType = 0
  1613. } else {
  1614. total, err := models.GetCountCompanyDetailByIdGroup(user.CompanyId)
  1615. if err != nil {
  1616. br.Msg = "获取失败"
  1617. br.ErrMsg = "获取失败,Err:" + err.Error()
  1618. return
  1619. }
  1620. if total == 0 {
  1621. userType = 0
  1622. } else {
  1623. companyDetail, err := models.GetCompanyDetailByIdGroup(user.CompanyId)
  1624. if err != nil {
  1625. br.Msg = "获取信息失败!"
  1626. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  1627. return
  1628. }
  1629. if companyDetail == nil {
  1630. br.Msg = "获取信息失败!"
  1631. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
  1632. return
  1633. }
  1634. permissionStr, err = models.GetCompanyPermission(user.CompanyId)
  1635. if err != nil {
  1636. br.Msg = "获取信息失败"
  1637. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  1638. return
  1639. }
  1640. //1、永续客户
  1641. //2、大套餐客户(4个行业全开通的正式客户)
  1642. //3、分行业套餐客户(开通对应行业的正式客户)
  1643. //4、仅开通专家套餐的正式客户
  1644. //5、开通对应行业套餐或专家套餐的试用客户
  1645. if companyDetail.Status == "永续" {
  1646. userType = 1
  1647. } else if companyDetail.Status == "试用" {
  1648. userType = 5
  1649. } else if companyDetail.Status == "正式" {
  1650. if permissionStr == "专家" {
  1651. userType = 4
  1652. } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") {
  1653. userType = 2
  1654. } else {
  1655. userType = 3
  1656. }
  1657. if userType == 3 {
  1658. if !strings.Contains(permissionStr, "医药") && !strings.Contains(permissionStr, "消费") && !strings.Contains(permissionStr, "科技") && !strings.Contains(permissionStr, "智造") {
  1659. userType = 4
  1660. }
  1661. }
  1662. }
  1663. }
  1664. }
  1665. if isShowJurisdiction == 1 && chartPermissionIds == "" && userType == 4 {
  1666. activityTypeIds = "1,3"
  1667. }
  1668. var startSize int
  1669. //if pageSize <= 0 {
  1670. // pageSize = utils.PageSize20
  1671. //}
  1672. //currentIndex = 1
  1673. pageSize = 16
  1674. //startSize = utils.StartIndex(currentIndex, pageSize)
  1675. var condition string
  1676. var sortTime string
  1677. var pars []interface{}
  1678. //活动可见限制
  1679. var sqlExport string
  1680. slicePer := strings.Split(permissionStr, ",")
  1681. var permissionSqlStr string
  1682. for _, v := range slicePer {
  1683. permissionSqlStr += "'" + v + "',"
  1684. }
  1685. permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
  1686. permissionSqlStr = ` AND art.chart_permission_name IN (` + permissionSqlStr + `)`
  1687. sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
  1688. if userType == 2 {
  1689. sqlExport += ` OR art.customer_type_ids LIKE '%3%' `
  1690. }
  1691. if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
  1692. sqlExport += ` OR art.customer_type_ids LIKE '%4%' `
  1693. }
  1694. sqlExport += `) `
  1695. condition += ` AND art.publish_status = 1 AND art.label != '' `
  1696. //condition += ` AND art.active_state = 1 `
  1697. var conditionOr string
  1698. if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
  1699. conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + condition + `) `
  1700. }
  1701. if (userType == 5) && strings.Contains(permissionStr, "专家") {
  1702. conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%' ` + condition + `) `
  1703. }
  1704. conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) `
  1705. condition += `AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
  1706. resp := new(models.GetCygxActivityLabelListRep)
  1707. //conditionLaable := condition
  1708. //主题
  1709. if label != "" {
  1710. sortTime = ` timesort DESC `
  1711. listAll, errList := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, 32)
  1712. if errList != nil {
  1713. br.Msg = "获取失败"
  1714. br.ErrMsg = "获取失败,Err:" + errList.Error()
  1715. return
  1716. }
  1717. sortTime = ` mintimesort ASC `
  1718. condition += ` AND art.active_state = 1 `
  1719. list1, errList := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, 16)
  1720. if errList != nil {
  1721. br.Msg = "获取失败"
  1722. br.ErrMsg = "获取失败,Err:" + errList.Error()
  1723. return
  1724. }
  1725. for _, v := range listAll {
  1726. var isHAve bool
  1727. for _, v2 := range list1 {
  1728. if v2.KeyWord == v.KeyWord {
  1729. isHAve = true
  1730. }
  1731. }
  1732. if !isHAve {
  1733. resp.List = append(resp.List, v)
  1734. }
  1735. }
  1736. br.Ret = 200
  1737. br.Success = true
  1738. br.Msg = "获取成功"
  1739. br.Data = resp
  1740. return
  1741. } else {
  1742. //行业名称
  1743. condition = ` AND art.publish_status = 1 AND art.label != '' `
  1744. if len(chartPermissionIds) > 0 {
  1745. condition += ` AND art.chart_permission_id IN (` + chartPermissionIds + `)`
  1746. }
  1747. if activityTypeIds != "" {
  1748. condition += ` AND art.activity_type_id IN (` + activityTypeIds + `)`
  1749. }
  1750. var conditionOr string
  1751. if whichDay != "" {
  1752. var startDate string
  1753. var endDate string
  1754. if whichDay == "1" {
  1755. startDate = time.Now().Format(utils.FormatDate)
  1756. endDate = startDate
  1757. } else if whichDay == "2" {
  1758. startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
  1759. endDate = startDate
  1760. } else {
  1761. startDate = time.Now().Format(utils.FormatDate)
  1762. endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
  1763. }
  1764. condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
  1765. condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"
  1766. }
  1767. if activeState != "" {
  1768. condition += ` AND art.active_state IN (` + activeState + `)`
  1769. } else {
  1770. condition += ` AND art.active_state IN (1)`
  1771. }
  1772. if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
  1773. conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + condition + `) `
  1774. }
  1775. if (userType == 5) && strings.Contains(permissionStr, "专家") {
  1776. conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%' ` + condition + `) `
  1777. }
  1778. conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) `
  1779. condition += `AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
  1780. }
  1781. sortTime = ` mintimesort ASC `
  1782. list, errList := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, pageSize)
  1783. if errList != nil {
  1784. br.Msg = "获取失败"
  1785. br.ErrMsg = "获取失败,Err:" + errList.Error()
  1786. return
  1787. }
  1788. //resp := new(models.GetCygxActivityLabelListRep)
  1789. resp.List = list
  1790. br.Ret = 200
  1791. br.Success = true
  1792. br.Msg = "获取成功"
  1793. br.Data = resp
  1794. }
  1795. // @Title 上传公司名称excel
  1796. // @Description 上传参会表格数据
  1797. // @Param File query file true "文件"
  1798. // @Success 200 Ret=200 导入成功
  1799. // @router /activityMeet/import [post]
  1800. func (this *ActivityCoAntroller) Import() {
  1801. br := new(models.BaseResponse).Init()
  1802. defer func() {
  1803. this.Data["json"] = br
  1804. this.ServeJSON()
  1805. }()
  1806. sysUser := this.User
  1807. if sysUser == nil {
  1808. br.Msg = "请重新登录"
  1809. return
  1810. }
  1811. file, h, err := this.GetFile("File")
  1812. if err != nil {
  1813. br.Msg = "获取文件失败"
  1814. br.ErrMsg = "获取文件失败,Err:" + err.Error()
  1815. return
  1816. }
  1817. uploadDir := "static/xls"
  1818. err = os.MkdirAll(uploadDir, 766)
  1819. if err != nil {
  1820. br.Msg = "存储目录创建失败"
  1821. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  1822. return
  1823. }
  1824. path := uploadDir + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + h.Filename
  1825. defer file.Close()
  1826. err = this.SaveToFile("File", path)
  1827. if err != nil {
  1828. br.Msg = "文件保存失败"
  1829. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  1830. return
  1831. }
  1832. xlFile, err := xlsx.OpenFile(path)
  1833. if err != nil {
  1834. br.Msg = "文件导入失败"
  1835. br.ErrMsg = "文件导入失败,Err:" + err.Error()
  1836. return
  1837. }
  1838. //允许添加的联系人
  1839. needAddAttendanc := make([]*models.UserWhiteList, 0)
  1840. // 遍历sheet页读取
  1841. for _, sheet := range xlFile.Sheets {
  1842. //遍历行读取
  1843. maxRow := sheet.MaxRow
  1844. for i := 0; i < maxRow; i++ {
  1845. if i >= 1 {
  1846. row := sheet.Row(i)
  1847. cells := row.Cells
  1848. var companyName, permission string
  1849. for k, cell := range cells {
  1850. if k == 0 {
  1851. companyName = cell.String()
  1852. }
  1853. if k == 2 {
  1854. permission = cell.String()
  1855. }
  1856. }
  1857. //这些字段都没有的话,系统认为excel到底了
  1858. if companyName == "" {
  1859. break
  1860. }
  1861. item := new(models.UserWhiteList)
  1862. item.CompanyName = companyName
  1863. item.Permission = permission
  1864. needAddAttendanc = append(needAddAttendanc, item)
  1865. }
  1866. }
  1867. }
  1868. //var mobileStr string
  1869. var permissionStr string
  1870. for k, v := range needAddAttendanc {
  1871. if k > 0 && v.CompanyName != needAddAttendanc[k-1].CompanyName {
  1872. permissionStr, err = models.GetCompanyPermissionByName(v.CompanyName)
  1873. if err != nil {
  1874. br.Msg = "获取信息失败"
  1875. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  1876. return
  1877. }
  1878. }
  1879. if k == 0 {
  1880. permissionStr, err = models.GetCompanyPermissionByName(v.CompanyName)
  1881. if err != nil {
  1882. br.Msg = "获取信息失败"
  1883. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  1884. return
  1885. }
  1886. }
  1887. needAddAttendanc[k].Permission = permissionStr
  1888. fmt.Println(permissionStr)
  1889. }
  1890. defer func() {
  1891. os.Remove(path)
  1892. }()
  1893. //创建excel
  1894. dir, errFile := os.Executable()
  1895. exPath := filepath.Dir(dir)
  1896. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1897. xlsxFile := xlsx.NewFile()
  1898. if errFile != nil {
  1899. br.Msg = "生成文件失败Err:" + errFile.Error()
  1900. return
  1901. }
  1902. style := xlsx.NewStyle()
  1903. alignment := xlsx.Alignment{
  1904. Horizontal: "center",
  1905. Vertical: "center",
  1906. WrapText: true,
  1907. }
  1908. style.Alignment = alignment
  1909. style.ApplyAlignment = true
  1910. sheet, err := xlsxFile.AddSheet("白名单")
  1911. if err != nil {
  1912. br.Msg = "新增Sheet失败,Err:" + err.Error()
  1913. return
  1914. }
  1915. //标头
  1916. rowTitle := sheet.AddRow()
  1917. cellA := rowTitle.AddCell()
  1918. cellA.Value = ""
  1919. cellB := rowTitle.AddCell()
  1920. cellB.Value = "公司"
  1921. cellC := rowTitle.AddCell()
  1922. cellC.Value = "权限"
  1923. for _, item := range needAddAttendanc {
  1924. row := sheet.AddRow()
  1925. cellA := row.AddCell()
  1926. cellA.Value = item.CompanyName
  1927. cellB := row.AddCell()
  1928. if item.Permission == "" {
  1929. //item.Permission = "专家/医药/智造/消费/研选/科技/策略/路演服务"
  1930. }
  1931. cellB.Value = item.Permission
  1932. }
  1933. errFile = xlsxFile.Save(downLoadnFilePath)
  1934. if errFile != nil {
  1935. br.Msg = "保存文件失败Err:" + errFile.Error()
  1936. return
  1937. }
  1938. br.Msg = "导入成功"
  1939. br.Ret = 200
  1940. br.Success = true
  1941. }