activity.go 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_mfyx/models"
  6. "hongze/hongze_mfyx/utils"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. // 获取 用户类型 //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户
  12. func GetUserType(companyId int) (userType int, permissionStrnew string, err error) {
  13. var permissionStr, permissionZhengShiStr string
  14. if companyId <= 1 {
  15. userType = 0
  16. } else {
  17. total, errs := models.GetCountCompanyDetailByIdGroup(companyId)
  18. if errs != nil {
  19. err = errs
  20. return
  21. }
  22. if total == 0 {
  23. userType = 0
  24. } else {
  25. companyDetail, errs := models.GetCompanyDetailByIdGroup(companyId)
  26. if errs != nil {
  27. err = errs
  28. return
  29. }
  30. permissionStr, errs = models.GetCompanyPermission(companyId)
  31. if errs != nil {
  32. err = errs
  33. return
  34. }
  35. permissionStrnew = permissionStr
  36. //大套餐客户,数据库添加标识,
  37. companyUserTypeDetail, errs := models.GetCygxCompanyUserType(companyId)
  38. if errs != nil && errs.Error() != utils.ErrNoRow() {
  39. err = errs
  40. return
  41. }
  42. if companyUserTypeDetail != nil {
  43. if companyUserTypeDetail.CustomerTypeId != 0 {
  44. userType = companyUserTypeDetail.CustomerTypeId
  45. return
  46. }
  47. }
  48. permissionZhengShiStr, errs = models.GetCompanyPermissionByUserZhengShi(companyId)
  49. if errs != nil {
  50. err = errs
  51. return
  52. }
  53. //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户、 10: 30W套餐客户
  54. //大套餐客户定义:医药、消费、科技、智造、策略。5个行业中任意4个及以上是正式权限的,属于大套餐客户(医药、消费、科技、智造需要主客观都开)
  55. if companyDetail.Status == "永续" {
  56. userType = 1
  57. } else if companyDetail.Status == "试用" {
  58. userType = 5
  59. } else if companyDetail.Status == "冻结" {
  60. userType = 6
  61. } else if companyDetail.Status == "流失" {
  62. userType = 7
  63. }
  64. //大套餐客户定义:医药、消费、科技、智造、策略。5个行业中任意4个及以上是正式权限的,属于大套餐客户(医药、消费、科技、智造需要主客观都开)
  65. if userType == 0 && companyDetail.Status == "正式" {
  66. var permissionZhegnshiNum int
  67. if strings.Count(permissionZhengShiStr, "医药") == 2 {
  68. permissionZhegnshiNum++
  69. }
  70. if strings.Count(permissionZhengShiStr, "消费") == 2 {
  71. permissionZhegnshiNum++
  72. }
  73. if strings.Count(permissionZhengShiStr, "科技") == 2 {
  74. permissionZhegnshiNum++
  75. }
  76. if strings.Count(permissionZhengShiStr, "智造") == 2 {
  77. permissionZhegnshiNum++
  78. }
  79. if strings.Count(permissionZhengShiStr, "策略") == 1 {
  80. permissionZhegnshiNum++
  81. }
  82. if strings.Count(permissionZhengShiStr, "路演服务") == 1 {
  83. permissionZhegnshiNum++
  84. }
  85. //if permissionZhegnshiNum == 6 {
  86. // userType = 2
  87. //} else
  88. //大套餐客户,数据库添加标识,条件大于等于四的都是 30W套餐客户
  89. if permissionZhegnshiNum >= 4 {
  90. userType = 10
  91. } else {
  92. userType = 3
  93. }
  94. }
  95. }
  96. }
  97. permissionStrnew = permissionStr
  98. return
  99. }
  100. func GetUserTypeZhengShi(companyId int) (userType int, permissionStrnew, permissionStrZhengShinew string, err error) {
  101. var permissionStr, permissionZhengShiStr string
  102. if companyId <= 1 {
  103. userType = 0
  104. } else {
  105. total, errs := models.GetCountCompanyDetailByIdGroup(companyId)
  106. if errs != nil {
  107. err = errs
  108. return
  109. }
  110. if total == 0 {
  111. userType = 0
  112. } else {
  113. companyDetail, errs := models.GetCompanyDetailByIdGroup(companyId)
  114. if errs != nil {
  115. err = errs
  116. return
  117. }
  118. permissionStr, errs = models.GetCompanyPermission(companyId)
  119. if errs != nil {
  120. err = errs
  121. return
  122. }
  123. permissionStrnew = permissionStr
  124. permissionZhengShiStr, errs = models.GetCompanyPermissionByUserZhengShi(companyId)
  125. if errs != nil {
  126. err = errs
  127. return
  128. }
  129. permissionStrZhengShinew = permissionZhengShiStr
  130. //大套餐客户,数据库添加标识,
  131. companyUserTypeDetail, errs := models.GetCygxCompanyUserType(companyId)
  132. if errs != nil && errs.Error() != utils.ErrNoRow() {
  133. err = errs
  134. return
  135. }
  136. if companyUserTypeDetail != nil {
  137. if companyUserTypeDetail.CustomerTypeId != 0 {
  138. userType = companyUserTypeDetail.CustomerTypeId
  139. return
  140. }
  141. }
  142. //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户、 10: 30W套餐客户
  143. //大套餐客户定义:医药、消费、科技、智造、策略。5个行业中任意4个及以上是正式权限的,属于大套餐客户(医药、消费、科技、智造需要主客观都开)
  144. if companyDetail.Status == "永续" {
  145. userType = 1
  146. } else if companyDetail.Status == "试用" {
  147. userType = 5
  148. } else if companyDetail.Status == "冻结" {
  149. userType = 6
  150. } else if companyDetail.Status == "流失" {
  151. userType = 7
  152. }
  153. //大套餐客户定义:医药、消费、科技、智造、策略。5个行业中任意4个及以上是正式权限的,属于大套餐客户(医药、消费、科技、智造需要主客观都开)
  154. if userType == 0 && companyDetail.Status == "正式" {
  155. var permissionZhegnshiNum int
  156. if strings.Count(permissionZhengShiStr, "医药") == 2 {
  157. permissionZhegnshiNum++
  158. }
  159. if strings.Count(permissionZhengShiStr, "消费") == 2 {
  160. permissionZhegnshiNum++
  161. }
  162. if strings.Count(permissionZhengShiStr, "科技") == 2 {
  163. permissionZhegnshiNum++
  164. }
  165. if strings.Count(permissionZhengShiStr, "智造") == 2 {
  166. permissionZhegnshiNum++
  167. }
  168. if strings.Count(permissionZhengShiStr, "策略") == 1 {
  169. permissionZhegnshiNum++
  170. }
  171. if strings.Count(permissionZhengShiStr, "路演服务") == 1 {
  172. permissionZhegnshiNum++
  173. }
  174. //if permissionZhegnshiNum == 6 {
  175. // userType = 2
  176. //} else
  177. //大套餐客户,数据库添加标识,条件大于等于四的都是 30W套餐客户
  178. if permissionZhegnshiNum >= 4 {
  179. userType = 10
  180. } else {
  181. userType = 3
  182. }
  183. }
  184. }
  185. }
  186. permissionStrnew = permissionStr
  187. permissionStrZhengShinew = permissionZhengShiStr
  188. return
  189. }
  190. // GetSpecialDetailUserPower 处理用户查看详情的权限
  191. func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.ActivityDetail) (havePower, isResearchSpecial bool, err error) {
  192. var companyDetailStatus string
  193. var userTypeStr string
  194. userId := user.UserId
  195. activityId := activityInfo.ActivityId
  196. activityPointsByUserAllMap := GetActivityPointsByUserAllMap() // 获取对用户进行研选扣点的活动
  197. //勾选【研选扣点】且扣点对象为参会人的活动,需要有买方研选的正式权限
  198. if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) && activityPointsByUserAllMap[activityInfo.ActivityId] {
  199. isResearchSpecial = true
  200. }
  201. //如果是弘则的用户或者宏观的权限不做校验
  202. //if (GetBelongingRai(user.Mobile) && user.CompanyId == utils.HZ_COMPANY_ID) || activityInfo.ChartPermissionName == utils.HONG_GUAN_NAME {
  203. if GetBelongingRai(user.Mobile) && user.CompanyId == utils.HZ_COMPANY_ID {
  204. havePower = true
  205. return
  206. }
  207. if (!activityInfo.IsResearchPoints && activityInfo.IsLimitPeople == 0) || activityInfo.YidongActivityId != "" { //易董的活动 或者(不扣点且不限制人数)走月卡日卡逻辑
  208. //用户是否持有有效卡片
  209. userCardTotal := GetCygxOrderUserCardTotal(user.Mobile)
  210. if userCardTotal == 1 {
  211. havePower = true
  212. return
  213. }
  214. } else {
  215. activtyPayTotal := GetCygxOrderVirtualAssetdCountTotal(user.Mobile, activityId)
  216. if activtyPayTotal == 1 {
  217. havePower = true
  218. return
  219. }
  220. }
  221. userType, permissionStr, permissionStrZhengShi, e := GetUserTypeZhengShi(user.CompanyId)
  222. if e != nil {
  223. err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
  224. return
  225. }
  226. //判断用户是否开通了个人研选权限,如果有权限后缀拼接权限名称
  227. //判断用户是否开通了个人研选权限,如果有权限后缀拼接权限名称
  228. mfyxUserPermissionTotal := GetMfyxUserPermissionTotal(userId)
  229. if mfyxUserPermissionTotal == 1 {
  230. permissionStr += "," + utils.CHART_PERMISSION_NAME_MF_YANXUAN
  231. }
  232. //如果正式权限有开通 研选扣点包 ,那么就拼接一个 研选订阅的权限
  233. if strings.Contains(permissionStrZhengShi, utils.YAN_XUAN_KOU_DIAN_BAO_NAME) {
  234. permissionStr += "," + utils.CHART_PERMISSION_NAME_MF_YANXUAN
  235. permissionStrZhengShi += "," + utils.CHART_PERMISSION_NAME_MF_YANXUAN
  236. }
  237. //如果测试权限有开通 研选扣点包 ,那么就拼接一个 研选订阅的权限
  238. if strings.Contains(permissionStr, utils.YAN_XUAN_KOU_DIAN_BAO_NAME) {
  239. permissionStr += "," + utils.CHART_PERMISSION_NAME_MF_YANXUAN
  240. }
  241. //如果一个权限都没有就返回无权限
  242. if permissionStr == "" {
  243. return
  244. }
  245. //永续客户,无法查看研选权限,但是下面的联系人,单独开通研选后,也可以查看研选内容
  246. if userType == 1 && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) && mfyxUserPermissionTotal == 0 {
  247. havePower = false
  248. return
  249. }
  250. permissionStr += "," + utils.HONG_GUAN_NAME // 添加一个宏观权限
  251. if permissionStrZhengShi == "" {
  252. permissionStrZhengShi = utils.HONG_GUAN_NAME // 添加一个宏观权限
  253. } else {
  254. permissionStrZhengShi += "," + utils.HONG_GUAN_NAME // 添加一个宏观权限
  255. }
  256. //如果是易董的活动,主、副权限有一个满足即可
  257. if activityInfo.YidongActivityId != "" {
  258. if strings.Contains(permissionStr, activityInfo.ChartPermissionName) || strings.Contains(permissionStr, activityInfo.ChartPermissionNameDeputy) {
  259. havePower = true
  260. return
  261. }
  262. }
  263. //如果权限不包含那么直接返回
  264. if !strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
  265. return
  266. }
  267. //如果是 对用户的研选扣点的必须要有研选的正式权限
  268. if activityInfo.IsResearchPoints {
  269. //获取活动对用户要扣的点
  270. userPointsNum, e := models.GetCygxActivityPointsSetUserNum(activityInfo.ActivityId)
  271. if e != nil {
  272. err = errors.New("GetActivitySignupSuccessByUserCountNoHz, Err: " + e.Error())
  273. return
  274. }
  275. if userPointsNum > 0 {
  276. //if !strings.Contains(permissionStr, utils.CHART_PERMISSION_NAME_YANXUAN) {
  277. // //如果连试用权限都没有,那么久按照普通的研选样式展示
  278. // isResearchSpecial = false
  279. //}
  280. if !strings.Contains(permissionStrZhengShi, activityInfo.ChartPermissionName) {
  281. havePower = false
  282. return
  283. }
  284. }
  285. }
  286. //处理决策人可见权限
  287. if user.IsMaker == 0 && activityInfo.IsMakerShow == 1 {
  288. havePower = false
  289. return
  290. }
  291. // 处理本组可见权限
  292. if activityInfo.VisibleRange == 1 {
  293. adminIds, e := models.GetSelleridWhichGroup(user.CompanyId, 2)
  294. if e != nil {
  295. err = errors.New("GetSelleridWhichGroup, Err: " + e.Error())
  296. return
  297. }
  298. haveVisibleRange := false
  299. adminIdSlice := strings.Split(adminIds, ",")
  300. for _, v := range adminIdSlice {
  301. if v == strconv.Itoa(activityInfo.AdminId) {
  302. haveVisibleRange = true
  303. }
  304. }
  305. if !haveVisibleRange {
  306. havePower = false
  307. return
  308. }
  309. }
  310. if permissionStr == "" {
  311. return
  312. }
  313. //如果是易董的活动且属于研选类型,只要开通任何权限就可以查看详情
  314. if activityInfo.YidongActivityId != "" && permissionStr != "" && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
  315. havePower = true
  316. return
  317. }
  318. //医药消费,科技,智造四大行业,验证主客观。如果主客观校验不通过,那么直接返回
  319. if strings.Contains(utils.YI_YAO_NAME+utils.XIAO_FEI_NAME+utils.KE_JI_NAME+utils.ZHI_ZAO_NAME, activityInfo.ChartPermissionName) {
  320. if activityInfo.ActivityTypeId == 2 || activityInfo.ActivityTypeId == 6 || activityInfo.ActivityTypeId == 7 {
  321. if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(主观)") {
  322. havePower = true
  323. } else {
  324. havePower = false
  325. }
  326. } else {
  327. if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(客观)") {
  328. havePower = true
  329. } else {
  330. havePower = false
  331. }
  332. }
  333. if !havePower {
  334. return
  335. }
  336. }
  337. if activityInfo.LimitPeopleNum > 0 {
  338. mapUserType, e := GetActivityCcustomerTypeList()
  339. if e != nil {
  340. err = e
  341. return
  342. }
  343. userTypeStr = mapUserType[userType]
  344. // 永续客户、大套餐客户、30W套餐客户可以查看行业升级套餐客户 权限
  345. if userTypeStr == "1" || userTypeStr == "2" || userTypeStr == "AA" {
  346. if strings.Contains(activityInfo.CustomerTypeIds, userTypeStr) && strings.Contains(activityInfo.CustomerTypeIds, "8") {
  347. havePower = true
  348. //return
  349. }
  350. }
  351. } else {
  352. if strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
  353. havePower = true
  354. return
  355. }
  356. }
  357. //判断管理规模是否满足
  358. companyProduct, e := models.GetCompanyProductDetail(user.CompanyId, 2)
  359. if e != nil {
  360. err = e
  361. return
  362. }
  363. if companyProduct != nil && activityInfo.Scale != "" {
  364. if strings.Contains(activityInfo.Scale, companyProduct.Scale) {
  365. havePower = true
  366. }
  367. }
  368. if user.CompanyId <= 1 {
  369. return
  370. } else {
  371. if permissionStr == "" {
  372. return
  373. } else {
  374. companyDetail, e := models.GetCompanyDetailById(user.CompanyId)
  375. if e != nil {
  376. err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
  377. return
  378. }
  379. if companyDetail == nil {
  380. err = errors.New("客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId))
  381. return
  382. }
  383. companyDetailStatus = companyDetail.Status
  384. }
  385. }
  386. //宏观满足用户可见身份验证权限既满足 2023-9-18
  387. if activityInfo.ChartPermissionId == 1 {
  388. if activityInfo.LimitPeopleNum > 0 {
  389. if strings.Contains(activityInfo.CustomerTypeIds, userTypeStr) {
  390. havePower = true
  391. return
  392. }
  393. } else {
  394. havePower = true
  395. return
  396. }
  397. }
  398. if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 {
  399. havePower = true
  400. } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") {
  401. havePower = true
  402. } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") {
  403. havePower = true
  404. } else if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3 || activityInfo.ActivityTypeId == 4 || activityInfo.ActivityTypeId == 5) && strings.Contains(permissionStr, "专家") {
  405. havePower = true
  406. }
  407. fmt.Println(permissionStrZhengShi)
  408. //if (strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略") && strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
  409. // havePower = true
  410. // return
  411. //}
  412. if strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略" {
  413. if strings.Contains(activityInfo.CustomerTypeIds, "5") {
  414. if strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
  415. havePower = true
  416. return
  417. }
  418. } else {
  419. if strings.Contains(permissionStrZhengShi, activityInfo.ChartPermissionName) {
  420. havePower = true
  421. return
  422. }
  423. }
  424. }
  425. permissionShengji, errs := models.GetCompanyPermissionByUserTrip(user.CompanyId)
  426. if errs != nil {
  427. err = errs
  428. return
  429. }
  430. //fmt.Println("主客观2", havePower)
  431. //if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, userTypeStr) {
  432. // havePower = true
  433. //}
  434. //fmt.Println("主客观3", havePower)
  435. //处理升级权限以及用户身份的 双重判断
  436. if activityInfo.CustomerTypeIds != "" {
  437. if !strings.Contains(activityInfo.CustomerTypeIds, userTypeStr) && userTypeStr != "8" {
  438. havePower = false
  439. if strings.Contains(permissionShengji, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, "8") {
  440. havePower = true
  441. }
  442. }
  443. }
  444. if havePower && activityInfo.LimitPeopleNum > 0 {
  445. //对于一些特殊的活动,即使权限满足也不给产看
  446. noPower, e := GetShareNoPowe(activityInfo, permissionStr, userType, user)
  447. if e != nil {
  448. err = errors.New("GetShareNoPowe, Err: " + e.Error())
  449. return
  450. }
  451. if noPower {
  452. havePower = false
  453. }
  454. }
  455. return
  456. }
  457. // 校验被分享的用户是否有查看详情的权限
  458. func GetShareNoPowe(activityInfo *models.ActivityDetail, permissionStr string, userType int, user *models.WxUserItem) (noPower bool, err error) {
  459. //如果是弘则的就不进行可见权限校验
  460. if user.CompanyId == utils.HZ_COMPANY_ID {
  461. return
  462. }
  463. //var noPower bool
  464. //if !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) {
  465. // noPower = true
  466. //}
  467. //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户
  468. //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)) {
  469. // noPower = true
  470. //}
  471. //if userType == 2 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
  472. // noPower = true
  473. //}
  474. //if userType == 3 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
  475. // noPower = true
  476. //}
  477. //if userType == 3 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
  478. // noPower = true
  479. //}
  480. fmt.Println(userType)
  481. if userType == 8 {
  482. permissionShengji, errs := models.GetCompanyPermissionByUserZhengShiTrip(user.CompanyId)
  483. if errs != nil {
  484. err = errs
  485. return
  486. }
  487. if !strings.Contains(permissionShengji, activityInfo.ChartPermissionName) {
  488. noPower = true
  489. return
  490. }
  491. }
  492. if !noPower {
  493. noPower, err = CheckUserPowerByActivityChoose(user, activityInfo)
  494. }
  495. return
  496. }
  497. // 处理活动本组们是否决策人权限
  498. func CheckUserPowerByActivityChoose(user *models.WxUserItem, activityInfo *models.ActivityDetail) (noPower bool, err error) {
  499. //处理 见范围 1,仅本组可见 、2,全部客户可见
  500. if activityInfo.VisibleRange == 1 {
  501. adminIds, errAdmin := models.GetSelleridWhichGroup(user.CompanyId, 2)
  502. if errAdmin != nil {
  503. err = errAdmin
  504. return
  505. }
  506. sliceAdminIds := strings.Split(adminIds, ",")
  507. var haveAdminId bool
  508. for _, v := range sliceAdminIds {
  509. if v == strconv.Itoa(activityInfo.AdminId) {
  510. haveAdminId = true
  511. }
  512. }
  513. if !haveAdminId {
  514. noPower = true
  515. }
  516. }
  517. //处理 是否仅决策人可见 0,否 、1,是
  518. if activityInfo.IsMakerShow == 1 {
  519. if user.IsMaker == 0 {
  520. noPower = true
  521. }
  522. }
  523. return
  524. }
  525. // 根据用户身份处理活动可见
  526. func ActivityConditioninitSql(user *models.WxUserItem, condition string, isPower int) (conditionActivity string, err error) {
  527. //未登录的用户也可以查看所有活动v12.2.1
  528. if user.UserId == 0 {
  529. conditionActivity = ` AND art.publish_status = 1 AND art.yidong_activity_id = '' ` + condition
  530. return
  531. }
  532. // cygx_10.9 未绑定联系方式的客户可以看到部分活动
  533. if user.UserId == 0 || user.CompanyId == 1 {
  534. conditionActivity = ` AND art.publish_status = 1 AND art.visible_range != 1 AND (art.is_limit_people = 0 OR (art.is_limit_people=1 AND art.is_all_customer_type=1)) ` + condition
  535. return
  536. }
  537. condition += ` AND art.publish_status = 1 `
  538. conditionActivity = condition
  539. //弘则可以查看所有活动
  540. if (GetBelongingRai(user.Mobile) && user.CompanyId == utils.HZ_COMPANY_ID) || user.UserId == 0 {
  541. return
  542. }
  543. adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
  544. if err != nil {
  545. return
  546. }
  547. userType, permissionStr, permissionStrZhengShi, err := GetUserTypeZhengShi(user.CompanyId)
  548. if err != nil {
  549. return
  550. }
  551. //判断客户规模是否属于可见范围的活动
  552. companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2)
  553. if err != nil && err.Error() != utils.ErrNoRow() {
  554. return
  555. }
  556. isMaker := user.IsMaker
  557. slicePer := strings.Split(permissionStr, ",")
  558. var permissionSqlStr string
  559. var permissionNameStr string
  560. for _, v := range slicePer {
  561. if userType == 1 {
  562. //研选权限处理
  563. if !strings.Contains(v, utils.CHART_PERMISSION_NAME_YANXUAN) {
  564. permissionNameStr += "'" + v + "',"
  565. }
  566. } else {
  567. permissionNameStr += "'" + v + "',"
  568. }
  569. }
  570. permissionNameStr = strings.Replace(permissionNameStr, "(主观)", "", -1)
  571. permissionNameStr = strings.Replace(permissionNameStr, "(客观)", "", -1)
  572. permissionNameStr = strings.TrimRight(permissionNameStr, ",")
  573. slicePerZhengShi := strings.Split(permissionStrZhengShi, ",")
  574. var permissionNameStrZhengShi string
  575. for _, v := range slicePerZhengShi {
  576. if userType == 1 {
  577. //研选权限处理
  578. if !strings.Contains(v, utils.CHART_PERMISSION_NAME_YANXUAN) {
  579. permissionNameStrZhengShi += "'" + v + "',"
  580. }
  581. } else {
  582. permissionNameStrZhengShi += "'" + v + "',"
  583. }
  584. }
  585. permissionNameStrZhengShi = strings.Replace(permissionNameStrZhengShi, "(主观)", "", -1)
  586. permissionNameStrZhengShi = strings.Replace(permissionNameStrZhengShi, "(客观)", "", -1)
  587. permissionNameStrZhengShi = strings.TrimRight(permissionNameStrZhengShi, ",")
  588. mapUserType, e := GetActivityCcustomerTypeList()
  589. if e != nil {
  590. err = e
  591. return
  592. }
  593. var userTypeStr string
  594. userTypeStr = mapUserType[userType]
  595. // 查研观向7.4-始终查询宏观的权限(无论是否有权限)
  596. if permissionNameStr == `` {
  597. permissionNameStr = `'宏观'`
  598. } else {
  599. permissionNameStr += `, '宏观'`
  600. }
  601. var sqlExport string // 专家权限处理
  602. sqlExport = ` AND (art.customer_type_ids LIKE '%` + userTypeStr + `%' `
  603. if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
  604. sqlExport += ` OR art.customer_type_ids LIKE '%4%' `
  605. }
  606. sqlExport += `) `
  607. if isPower == 1 {
  608. //permissionSqlStr = ` AND art.chart_permission_name IN (` + permissionNameStr + `)`
  609. //condition += permissionSqlStr
  610. }
  611. var conditionOr string
  612. //查询全部可见的数据(是否全部客户可见)
  613. if adminIds != "" {
  614. condition += ` AND ( art.visible_range != 1 OR ( art.admin_id IN ( ` + adminIds + ` ) AND art.visible_range = 1 )) `
  615. }
  616. //活动仅决策人可见
  617. if isMaker == 0 {
  618. condition += ` AND art.is_maker_show = 0 `
  619. }
  620. //condition += ` AND art.visible_range != 1 `
  621. if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
  622. conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + condition + `) `
  623. }
  624. if (userType == 5) && strings.Contains(permissionStr, "专家") {
  625. conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%' ` + condition + `) `
  626. }
  627. if userType == 1 {
  628. conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + permissionSqlStr + `) `
  629. } else {
  630. conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) `
  631. }
  632. if userType == 6 || userType == 7 {
  633. conditionOr += ` OR ( art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' ` + condition + `) `
  634. }
  635. if companyProduct != nil {
  636. if companyProduct.Scale != "" {
  637. conditionOr += ` OR ( art.scale LIKE '%` + companyProduct.Scale + `%' ` + condition + `) `
  638. }
  639. }
  640. //if userType == 3 {
  641. // condition += ` AND art.chart_permission_name IN (` + permissionNameStrZhengShi + `) `
  642. //}
  643. condition += ` AND art.is_limit_people = 1 `
  644. conditionActivity = condition + permissionSqlStr + sqlExport + conditionOr
  645. return
  646. }
  647. // 活动标签字符串处理
  648. func LabelStr(label string) (labelNew string) {
  649. slicebr := strings.Split(label, "-")
  650. if len(slicebr) < 2 {
  651. labelNew = label
  652. } else {
  653. labelNew = slicebr[1]
  654. }
  655. return labelNew
  656. }
  657. // 判断预约纪要按钮是否显示
  658. func IsShowAppointment(activityTypeId int, chartPermissionName string) (isShowAppointment bool) {
  659. if activityTypeId == 1 || activityTypeId == 2 || activityTypeId == 3 || activityTypeId == 4 {
  660. isShowAppointment = true
  661. }
  662. if activityTypeId == 5 && chartPermissionName == "医药" {
  663. isShowAppointment = true
  664. }
  665. return
  666. }
  667. // 用户报告操作行为,模板消息推送 (先放在活动模块下,避免代码冲突)
  668. func ArticleUserRemind(user *models.WxUserItem, articleDetail *models.ArticleDetail, source int) (err error) {
  669. defer func() {
  670. if err != nil {
  671. go utils.SendAlarmMsg(" 用户报告操作行为,模板消息推送失败"+fmt.Sprint("UserId:", user.UserId, "ArticleId:", articleDetail.ArticleId), 2)
  672. }
  673. }()
  674. countUser, err := models.GetUserRemind(user.UserId)
  675. if err != nil {
  676. return err
  677. }
  678. if countUser == 0 {
  679. return err
  680. }
  681. var sourceMsg string
  682. if source == 1 {
  683. sourceMsg = "阅读报告"
  684. } else {
  685. sourceMsg = "收藏报告"
  686. }
  687. //获取销售手机号
  688. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  689. if err != nil && err.Error() != utils.ErrNoRow() {
  690. return err
  691. }
  692. if sellerItemQy != nil {
  693. openIdList, err := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
  694. if err != nil {
  695. fmt.Println(err)
  696. return err
  697. }
  698. var keyword1 string
  699. var keyword2 string
  700. keyword1 = articleDetail.Title
  701. keyword2 = fmt.Sprint("互动:", sourceMsg, ",", user.RealName, "--", user.CompanyName)
  702. SendWxMsgWithArticleUserRemind(keyword1, keyword2, openIdList, articleDetail.ArticleId)
  703. }
  704. return
  705. }
  706. // 用户活动操作行为,模板消息推送
  707. func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.ActivityDetail, source int) (err error) {
  708. defer func() {
  709. if err != nil {
  710. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ActivityUserRemind ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  711. }
  712. }()
  713. //获取销售手机号
  714. countUser, e := models.GetUserRemind(user.UserId)
  715. if e != nil {
  716. err = errors.New("GetUserRemind, Err: " + e.Error())
  717. return
  718. }
  719. // 如果是买方研选下的专家沙龙,同时推给内容组四人
  720. if activityDetail.ActivityTypeId == 5 {
  721. go SendNeiRongZuActivitieSignTemplateMsg(user, activityDetail)
  722. go SendNeiRongZuActivitieSignCategoryTemplateMsg(user, activityDetail)
  723. }
  724. //获取销售手机号
  725. sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  726. if e != nil && e.Error() != utils.ErrNoRow() {
  727. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  728. return
  729. }
  730. if sellerItemQy == nil {
  731. err = nil
  732. return
  733. }
  734. //某销售下的所有客户活动报名/预约外呼时,模板消息提醒该销售(可设置销售范围,随时增减销售)
  735. conf, e := models.GetConfigByCode("tpl_msg_seller_mobile")
  736. if e != nil {
  737. err = errors.New("GetConfigByCode, Err: " + e.Error())
  738. return
  739. }
  740. //如果用户没有设置消息提醒,而且销售的手机号也没有添加到配置中,那么就不推送模版消息
  741. if countUser == 0 && !strings.Contains(conf.ConfigValue, sellerItemQy.Mobile) {
  742. err = nil
  743. return
  744. }
  745. var sourceMsg string
  746. if source == 1 {
  747. sourceMsg = "预约外呼"
  748. } else if source == 2 {
  749. sourceMsg = "设置会议提醒"
  750. } else if source == 3 {
  751. sourceMsg = "预约纪要"
  752. } else if source == 4 {
  753. sourceMsg = "活动报名"
  754. }
  755. openIdList, e := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
  756. if e != nil {
  757. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error())
  758. return err
  759. }
  760. var keyword1 string
  761. var keyword2 string
  762. keyword1 = activityDetail.ActivityName
  763. keyword2 = fmt.Sprint("互动:", sourceMsg, ",", user.RealName, "--", user.CompanyName)
  764. SendWxMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
  765. // 类目模版
  766. keyword1 = user.RealName + "-" + user.CompanyName
  767. keyword2 = fmt.Sprint("互动提醒:", sourceMsg)
  768. keyword3 := activityDetail.ActivityName
  769. keyword4 := time.Now().Format(utils.FormatDateTimeMinute2)
  770. SendWxCategoryMsgWithActivityUserRemind(keyword1, keyword2, keyword3, keyword4, openIdList, activityDetail.ActivityId)
  771. return
  772. }
  773. func ActivityButtonShow(item *models.ActivityDetail) (activityDetail *models.ActivityDetail) {
  774. if item.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  775. item.IsResearch = true
  776. }
  777. activityDetail = item
  778. //IsShowAppointment bool `description:"是否展示预约纪要"`
  779. //IsShowOutboundCall bool `description:"是否展示预约外呼"`
  780. //IsShowMeetingReminder bool `description:"是否展示会议提醒"`
  781. //IsShowHelpSsk bool `description:"是否展示帮我带问"`
  782. //IsShowSignup bool `description:"是否展示我要报名"`
  783. activityTypeIdMap := GetActivityTypeIdMap()
  784. activityDetail.ActivityType = activityTypeIdMap[activityDetail.ActivityTypeId] // 线上还是线下
  785. activityPointsByUserAllMap := GetActivityPointsByUserAllMap() // 获取对用户进行研选扣点的活动
  786. activityDetail.IsResearchPoints = activityPointsByUserAllMap[activityDetail.ActivityId]
  787. if activityDetail.SiginupDeadline == utils.FormatDateTimeInit { //报名截止时间处理
  788. activityDetail.SiginupDeadline = ""
  789. }
  790. //如果报名截止时间不规范,或者是非研选扣点活动就把截止时间设置为空
  791. if activityDetail.CancelDeadline == utils.FormatDateTimeInit || !activityDetail.IsResearchPoints {
  792. activityDetail.CancelDeadline = ""
  793. }
  794. activityTimeText := activityDetail.ActivityTimeText
  795. activityTimeText = strings.Replace(activityTimeText, "(", "(", -1)
  796. activityTimeText = strings.Replace(activityTimeText, ")", ")", -1)
  797. activityDetail.ActivityTimeText = activityTimeText
  798. if activityDetail.SourceType != 2 {
  799. activityDetail.SourceType = 1
  800. }
  801. activityDetail.IsShowAppointment = false
  802. //易董的操作按钮都隐藏
  803. if activityDetail.YidongActivityId != "" {
  804. activityDetail.SourceType = 1
  805. activityDetail.IsShowSignup = false
  806. activityDetail.IsShowDetails = true
  807. activityDetail.IsExternalLabel = true
  808. activityDetail.IsResearch = false
  809. activityDetail.IsResearchSpecial = false
  810. return
  811. }
  812. //专家电话会 1
  813. if activityDetail.ActivityTypeId == 1 && activityDetail.IsLimitPeople == 0 && (activityDetail.ActiveState == "1" || activityDetail.ActiveState == "2") {
  814. activityDetail.IsShowHelpSsk = true
  815. }
  816. //新的是否展示规则
  817. if activityDetail.IsCanAppointmentMinutes == 1 {
  818. activityDetail.IsShowAppointment = true
  819. } else {
  820. activityDetail.IsShowAppointment = false
  821. }
  822. if activityDetail.ActiveState == "1" {
  823. //专家电话会 1
  824. //专家电话会限制人数的展示我要报名,不限制的展示预约外外呼
  825. if activityDetail.ActivityTypeId == 1 {
  826. //articleDetail.IsShowOutboundCall = true
  827. if activityDetail.LimitPeopleNum == 0 {
  828. activityDetail.IsShowOutboundCall = true
  829. //articleDetail.IsShowHelpSsk = true
  830. } else {
  831. activityDetail.IsShowSignup = true
  832. }
  833. activityDetail.IsShowMeetingReminder = true
  834. activityDetail.IsShowHelpSsk = true
  835. }
  836. //分析师电话会 2
  837. if activityDetail.ActivityTypeId == 2 {
  838. if activityDetail.LimitPeopleNum == 0 {
  839. activityDetail.IsShowOutboundCall = true
  840. //articleDetail.IsShowHelpSsk = true
  841. } else {
  842. activityDetail.IsShowSignup = true
  843. }
  844. activityDetail.IsShowMeetingReminder = true
  845. }
  846. //公司调研电话会 3
  847. if activityDetail.ActivityTypeId == 3 {
  848. if activityDetail.IsResearchPoints || activityDetail.LimitPeopleNum > 0 {
  849. activityDetail.IsShowSignup = true
  850. } else {
  851. activityDetail.IsShowMeetingReminder = true
  852. activityDetail.IsShowOutboundCall = true
  853. }
  854. }
  855. //公司线下调研 4
  856. if activityDetail.ActivityTypeId == 4 {
  857. activityDetail.IsShowSignup = true
  858. }
  859. //专家线下沙龙 5
  860. if activityDetail.ActivityTypeId == 5 {
  861. activityDetail.IsShowSignup = true
  862. }
  863. //分析师线下沙龙 6
  864. if activityDetail.ActivityTypeId == 6 {
  865. activityDetail.IsShowSignup = true
  866. }
  867. //分析师电话会(C类) 7
  868. if activityDetail.ActivityTypeId == 7 {
  869. activityDetail.IsShowSignup = true
  870. activityDetail.IsShowMeetingReminder = true
  871. activityDetail.ActivityTypeName = "分析师电话会"
  872. }
  873. //买方线下交流 8 // 查研观向 11.0
  874. if activityDetail.ActivityTypeId == 8 {
  875. activityDetail.IsShowSignup = true
  876. }
  877. }
  878. //如果是易董创建的活动,展示我要报名,不展示预约外呼
  879. if activityDetail.IsYidongConduct {
  880. activityDetail.IsShowSignup = true
  881. activityDetail.IsShowOutboundCall = false
  882. }
  883. return
  884. }
  885. func ActivityArrButtonShow(items []*models.ActivityDetail) (activityDetails []*models.ActivityDetail) {
  886. activityPointsByUserAllMap := GetActivityPointsByUserAllMap() // 获取对用户进行研选扣点的活动
  887. activityTypeIdMap := GetActivityTypeIdMap()
  888. for _, activityDetail := range items {
  889. activityDetail.ActivityType = activityTypeIdMap[activityDetail.ActivityTypeId] // 线上还是线下
  890. if activityDetail.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  891. activityDetail.IsResearch = true
  892. }
  893. //勾选【研选扣点】且扣点对象为参会人的活动,需要有买方研选的正式权限
  894. if strings.Contains(activityDetail.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) && activityPointsByUserAllMap[activityDetail.ActivityId] {
  895. activityDetail.IsResearchSpecial = true
  896. }
  897. //IsShowAppointment bool `description:"是否展示预约纪要"`
  898. //IsShowOutboundCall bool `description:"是否展示预约外呼"`
  899. //IsShowMeetingReminder bool `description:"是否展示会议提醒"`
  900. //IsShowHelpSsk bool `description:"是否展示帮我带问"`
  901. //IsShowSignup bool `description:"是否展示我要报名"`
  902. activityDetail.IsResearchPoints = activityPointsByUserAllMap[activityDetail.ActivityId]
  903. if activityDetail.SiginupDeadline == utils.FormatDateTimeInit { //报名截止时间处理
  904. activityDetail.SiginupDeadline = ""
  905. }
  906. //如果报名截止时间不规范,或者是非研选扣点活动就把截止时间设置为空
  907. if activityDetail.CancelDeadline == utils.FormatDateTimeInit || !activityDetail.IsResearchPoints {
  908. activityDetail.CancelDeadline = ""
  909. }
  910. activityTimeText := activityDetail.ActivityTimeText
  911. activityTimeText = strings.Replace(activityTimeText, "(", "(", -1)
  912. activityTimeText = strings.Replace(activityTimeText, ")", ")", -1)
  913. activityDetail.ActivityTimeText = activityTimeText
  914. if activityDetail.SourceType != 2 {
  915. activityDetail.SourceType = 1
  916. }
  917. activityDetail.IsShowAppointment = false
  918. //易董的操作按钮都隐藏
  919. if activityDetail.YidongActivityId != "" {
  920. activityDetail.SourceType = 1
  921. activityDetail.IsShowSignup = false
  922. activityDetail.IsShowDetails = true
  923. } else {
  924. //专家电话会 1
  925. if activityDetail.ActivityTypeId == 1 && activityDetail.IsLimitPeople == 0 && (activityDetail.ActiveState == "1" || activityDetail.ActiveState == "2") {
  926. activityDetail.IsShowHelpSsk = true
  927. }
  928. //新的是否展示规则
  929. if activityDetail.IsCanAppointmentMinutes == 1 {
  930. activityDetail.IsShowAppointment = true
  931. } else {
  932. activityDetail.IsShowAppointment = false
  933. }
  934. if activityDetail.ActiveState == "1" {
  935. //专家电话会 1
  936. //专家电话会限制人数的展示我要报名,不限制的展示预约外外呼
  937. if activityDetail.ActivityTypeId == 1 {
  938. //articleDetail.IsShowOutboundCall = true
  939. if activityDetail.LimitPeopleNum == 0 {
  940. activityDetail.IsShowOutboundCall = true
  941. //articleDetail.IsShowHelpSsk = true
  942. } else {
  943. activityDetail.IsShowSignup = true
  944. }
  945. activityDetail.IsShowMeetingReminder = true
  946. activityDetail.IsShowHelpSsk = true
  947. }
  948. //分析师电话会 2
  949. if activityDetail.ActivityTypeId == 2 {
  950. if activityDetail.LimitPeopleNum == 0 {
  951. activityDetail.IsShowOutboundCall = true
  952. //articleDetail.IsShowHelpSsk = true
  953. } else {
  954. activityDetail.IsShowSignup = true
  955. }
  956. activityDetail.IsShowMeetingReminder = true
  957. }
  958. //公司调研电话会 3
  959. if activityDetail.ActivityTypeId == 3 {
  960. if activityDetail.IsResearchPoints || activityDetail.LimitPeopleNum > 0 {
  961. activityDetail.IsShowSignup = true
  962. } else {
  963. activityDetail.IsShowMeetingReminder = true
  964. activityDetail.IsShowOutboundCall = true
  965. }
  966. }
  967. //公司线下调研 4
  968. if activityDetail.ActivityTypeId == 4 {
  969. activityDetail.IsShowSignup = true
  970. }
  971. //专家线下沙龙 5
  972. if activityDetail.ActivityTypeId == 5 {
  973. activityDetail.IsShowSignup = true
  974. }
  975. //分析师线下沙龙 6
  976. if activityDetail.ActivityTypeId == 6 {
  977. activityDetail.IsShowSignup = true
  978. }
  979. //分析师电话会(C类) 7
  980. if activityDetail.ActivityTypeId == 7 {
  981. activityDetail.IsShowSignup = true
  982. activityDetail.IsShowMeetingReminder = true
  983. activityDetail.ActivityTypeName = "分析师电话会"
  984. }
  985. //买方线下交流 8 // 查研观向 11.0
  986. if activityDetail.ActivityTypeId == 8 {
  987. activityDetail.IsShowSignup = true
  988. }
  989. }
  990. //如果是易董创建的活动,展示我要报名,不展示预约外呼
  991. if activityDetail.IsYidongConduct {
  992. activityDetail.IsShowSignup = true
  993. activityDetail.IsShowOutboundCall = false
  994. }
  995. }
  996. //如果是易董同步过来的,只展示外部资源标签
  997. if activityDetail.YidongActivityId != "" {
  998. activityDetail.IsExternalLabel = true
  999. activityDetail.IsResearch = false
  1000. activityDetail.IsResearchSpecial = false
  1001. }
  1002. if activityDetail.ActivityTypeName == "买方线下交流" {
  1003. activityDetail.LabelKeyword = utils.LABEL_L1_2
  1004. activityDetail.LabelKeywordImgLink = utils.LABEL_ICO_1
  1005. }
  1006. if activityDetail.ActivityTypeName == "专家电话会" || activityDetail.ActivityTypeName == "专家线下沙龙" {
  1007. activityDetail.LabelKeyword = utils.LABEL_L1_3
  1008. activityDetail.LabelKeywordImgLink = utils.LABEL_ICO_2
  1009. }
  1010. if activityDetail.ActivityTypeName == "公司调研电话会" {
  1011. activityDetail.LabelKeyword = utils.LABEL_L1_4
  1012. activityDetail.LabelKeywordImgLink = utils.LABEL_ICO_3
  1013. }
  1014. activityDetails = append(activityDetails, activityDetail)
  1015. }
  1016. return
  1017. }
  1018. // GetActivityNewLabelMap 获取活动【新】标签Map
  1019. func GetActivityNewLabelMap(activityIds []int) (labelMap map[int]bool, industryNewMap map[int]bool, err error) {
  1020. labelMap = make(map[int]bool, 0)
  1021. industryNewMap = make(map[int]bool, 0)
  1022. if len(activityIds) == 0 {
  1023. return
  1024. }
  1025. // 获取活动关联的产业
  1026. var groupCond string
  1027. var groupPars []interface{}
  1028. groupCond += ` AND a.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `) AND b.source = 1 `
  1029. groupPars = append(groupPars, activityIds)
  1030. groups, e := models.GetActivityIndustryRelationList(groupCond, groupPars)
  1031. if e != nil {
  1032. err = errors.New("获取活动产业关联列表失败, Err: " + e.Error())
  1033. return
  1034. }
  1035. activityIndustryMap := make(map[int][]int, 0)
  1036. industryIds := make([]int, 0)
  1037. for i := range groups {
  1038. industryIds = append(industryIds, groups[i].IndustrialManagementId)
  1039. activityIndustryMap[groups[i].ActivityId] = append(activityIndustryMap[groups[i].ActivityId], groups[i].IndustrialManagementId)
  1040. }
  1041. // 获取新产业Map
  1042. industryLabelMap, e := GetIndustryNewLabelMap(industryIds)
  1043. if e != nil {
  1044. err = errors.New("获取产业新标签Map失败, Err: " + e.Error())
  1045. return
  1046. }
  1047. // 判断活动是否为新
  1048. for k := range industryLabelMap {
  1049. for k2, v2 := range activityIndustryMap {
  1050. if labelMap[k2] {
  1051. continue
  1052. }
  1053. // 活动的产业ID中存在一个新产业即为新活动
  1054. if utils.InArrayByInt(v2, k) {
  1055. labelMap[k2] = true
  1056. }
  1057. }
  1058. }
  1059. ////产业关联的弘则报告发布日期在三个月以内的活动、产业显示 NEW标签
  1060. //articNewLabel, e := GetArticNewLabelWhithActivity3Month()
  1061. //if e != nil {
  1062. // err = errors.New("获取产业新标签Map失败, Err: " + e.Error())
  1063. // return
  1064. //}
  1065. //for k := range articNewLabel {
  1066. // labelMap[k] = true
  1067. //}
  1068. return
  1069. }
  1070. // GetActivityVoiceResp 处理活动音频回放
  1071. func GetActivityVoiceResp(mapActivityId []int) (mapItem map[int]*models.CygxActivityVoiceReq, err error) {
  1072. activityVoiceList, err := models.GetCygxActivityVoiceReqList(mapActivityId)
  1073. if err != nil && err.Error() != utils.ErrNoRow() {
  1074. return
  1075. }
  1076. mapActivityVoice := make(map[int]*models.CygxActivityVoiceReq)
  1077. if len(activityVoiceList) > 0 {
  1078. for _, v := range activityVoiceList {
  1079. mapActivityVoice[v.ActivityId] = v
  1080. }
  1081. }
  1082. mapItem = mapActivityVoice
  1083. return
  1084. }
  1085. // GetActivityVideoResp 处理活动视频频回放
  1086. func GetActivityVideoResp(mapActivityId []int) (mapItem map[int]*models.CygxActivityVideoListResp, err error) {
  1087. var condition string
  1088. var ativityVIdstr string
  1089. for _, v := range mapActivityId {
  1090. ativityVIdstr += strconv.Itoa(v) + ","
  1091. }
  1092. if ativityVIdstr == "" {
  1093. return
  1094. }
  1095. ativityVIdstr = strings.TrimRight(ativityVIdstr, ",")
  1096. condition += ` AND art.activity_id IN (` + ativityVIdstr + `) `
  1097. var pars []interface{}
  1098. //endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
  1099. //condition += ` AND art.activity_time > ? `
  1100. //pars = append(pars, endTime)
  1101. videoList, e := models.GetActivityVideoListAll(condition, pars, 0, 1000)
  1102. if e != nil && e.Error() != utils.ErrNoRow() {
  1103. err = e
  1104. return
  1105. }
  1106. mapActivityVideo := make(map[int]*models.CygxActivityVideoListResp)
  1107. if len(videoList) > 0 {
  1108. for _, v := range videoList {
  1109. mapActivityVideo[v.ActivityId] = v
  1110. }
  1111. }
  1112. mapItem = mapActivityVideo
  1113. return
  1114. }
  1115. // 用户音视频回放操作操作行为,模板消息推送
  1116. func ActivityVideoUserRmind(user *models.WxUserItem, activityId, fileType int) (err error) {
  1117. defer func() {
  1118. if err != nil {
  1119. go utils.SendAlarmMsg("用户音视频回放操作操作行为,模板消息推送失败"+err.Error(), 2)
  1120. }
  1121. }()
  1122. countUser, err := models.GetUserRemind(user.UserId)
  1123. if err != nil {
  1124. return err
  1125. }
  1126. if countUser == 0 {
  1127. return err
  1128. }
  1129. var first string
  1130. var keyword1 string
  1131. var keyword2 string
  1132. var keyword3 string
  1133. var keyword4 string
  1134. var remark string
  1135. //获取销售手机号
  1136. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  1137. if err != nil && err.Error() != utils.ErrNoRow() {
  1138. return err
  1139. }
  1140. if sellerItemQy != nil {
  1141. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  1142. if e != nil {
  1143. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  1144. return
  1145. }
  1146. //TripStatus int `description:"行程进行状态 1:预报名,2:确定行程"`
  1147. if fileType == 1 {
  1148. activityInfo, e := models.GetCygxActivityVideoByActivityId(activityId)
  1149. if e != nil {
  1150. err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
  1151. return
  1152. }
  1153. if activityInfo == nil {
  1154. return
  1155. }
  1156. keyword1 = activityInfo.VideoName
  1157. keyword2 = fmt.Sprint("互动:播放视频,", user.RealName, "--", user.CompanyName)
  1158. first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放视频")
  1159. } else {
  1160. activityInfo, e := models.GetCygxActivityVoiceByActivityId(activityId)
  1161. if e != nil {
  1162. err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
  1163. return
  1164. }
  1165. if activityInfo == nil {
  1166. return
  1167. }
  1168. keyword1 = activityInfo.VoiceName
  1169. keyword2 = fmt.Sprint("互动:播放音频,", user.RealName, "--", user.CompanyName)
  1170. first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放音频")
  1171. }
  1172. //keyword2 = "__"
  1173. //remark = "点击查看活动详情"
  1174. openIdArr := make([]string, 0)
  1175. for _, v := range openIdList {
  1176. openIdArr = append(openIdArr, v.OpenId)
  1177. }
  1178. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)
  1179. sendInfo := new(SendWxTemplate)
  1180. sendInfo.First = first
  1181. sendInfo.Keyword1 = keyword1
  1182. sendInfo.Keyword2 = keyword2
  1183. sendInfo.Keyword3 = keyword3
  1184. sendInfo.Keyword4 = keyword4
  1185. sendInfo.Remark = remark
  1186. sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
  1187. sendInfo.RedirectUrl = redirectUrl
  1188. sendInfo.RedirectTarget = 3
  1189. sendInfo.Resource = strconv.Itoa(activityId)
  1190. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  1191. sendInfo.OpenIdArr = openIdArr
  1192. err = PublicSendTemplateMsg(sendInfo)
  1193. if err != nil {
  1194. return
  1195. }
  1196. }
  1197. return
  1198. }
  1199. // 解析活动填写的报告链接
  1200. func GetActivityReportLinkToArticleList(item *models.ActivityDetail) (items []*models.ActivityArticleResp, err error) {
  1201. reportLink := item.ReportLink
  1202. //处理活动的
  1203. var articleIds []int
  1204. var articleList []string
  1205. if strings.Contains(reportLink, ";") {
  1206. articleList = strings.Split(reportLink, ";")
  1207. } else {
  1208. articleList = strings.Split(reportLink, ";")
  1209. }
  1210. for _, v := range articleList {
  1211. linkList := strings.Split(v, "/")
  1212. if linkList[len(linkList)-1] != "" {
  1213. linkArticleId, _ := strconv.Atoi(linkList[len(linkList)-1])
  1214. articleIds = append(articleIds, linkArticleId)
  1215. }
  1216. }
  1217. lenarticleIds := len(articleIds)
  1218. if lenarticleIds == 0 {
  1219. return
  1220. }
  1221. var condition string
  1222. var pars []interface{}
  1223. pars = make([]interface{}, 0)
  1224. condition = ` AND a.article_id IN (` + utils.GetOrmInReplace(lenarticleIds) + `)`
  1225. pars = append(pars, articleIds)
  1226. listArticle, e := models.GetHomeList(condition, pars, 0, len(articleIds))
  1227. if e != nil {
  1228. err = errors.New("GetResourceDataList, Err: " + e.Error())
  1229. return
  1230. }
  1231. if len(listArticle) > 0 {
  1232. for _, v := range listArticle {
  1233. artItem := new(models.ActivityArticleResp)
  1234. artItem.ArticleId = v.ArticleId
  1235. artItem.Title = v.Title
  1236. items = append(items, artItem)
  1237. }
  1238. }
  1239. return
  1240. }
  1241. // 获取活动线上还是线下的类型
  1242. func GetActivityTypeIdMap() (mapResp map[int]int) {
  1243. var err error
  1244. defer func() {
  1245. if err != nil {
  1246. fmt.Println(err)
  1247. go utils.SendAlarmMsg("获取活动线上还是线下的类型,失败,GetActivityTypeIdMap:Err "+err.Error(), 2)
  1248. }
  1249. }()
  1250. list, e := models.GetActivityTypeList("")
  1251. if e != nil {
  1252. err = errors.New("GetActivityTypeList, Err: " + e.Error())
  1253. return
  1254. }
  1255. mapResp = make(map[int]int, 0)
  1256. for _, v := range list {
  1257. mapResp[v.ActivityTypeId] = v.ActivityType
  1258. }
  1259. return
  1260. }
  1261. // GetYanxuanActivityIds 获取研选活动ID
  1262. func GetYanxuanActivityIds(user *models.WxUserItem) (activityIds []int) {
  1263. var err error
  1264. defer func() {
  1265. if err != nil {
  1266. fmt.Println(err)
  1267. go utils.SendAlarmMsg("获取研选活动ID GetYanxuanActivityIds,失败:"+err.Error(), 2)
  1268. }
  1269. }()
  1270. var condition string
  1271. var pars []interface{}
  1272. condition = ` AND chart_permission_id = 31 AND art.publish_status = 1 `
  1273. //pars = append(pars, utils.CHART_PERMISSION_ID_YANXUAN)
  1274. if user.CompanyId > 1 {
  1275. conditionActivity, e := ActivityConditioninitSql(user, condition, 0)
  1276. if e != nil && e.Error() != utils.ErrNoRow() {
  1277. err = errors.New("ActivityConditioninitSql, Err: " + e.Error())
  1278. return
  1279. }
  1280. condition += conditionActivity
  1281. }
  1282. condition += ` ORDER BY art.activity_time DESC , art.active_state ASC `
  1283. list, e := models.GetCygxActivityList(condition, pars, 0, 2000)
  1284. if e != nil {
  1285. err = errors.New("GetCygxActivityIdList, Err: " + e.Error())
  1286. return
  1287. }
  1288. for _, v := range list {
  1289. activityIds = append(activityIds, v.ActivityId)
  1290. }
  1291. return
  1292. }