micro_roadshow.go 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_cygx/models"
  7. "hongze/hongze_cygx/utils"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. // GetMicroRoadShowDefaultImgConfig 获取微路演默认图/分享图配置
  13. func GetMicroRoadShowDefaultImgConfig() (audioMap, videoMap, audioShareMap, videoShareMap map[int]string, err error) {
  14. audioMap = make(map[int]string, 0)
  15. videoMap = make(map[int]string, 0)
  16. audioShareMap = make(map[int]string, 0)
  17. videoShareMap = make(map[int]string, 0)
  18. key := models.MicroRoadshowDefaultImgKey
  19. conf, e := models.GetConfigByCode(key)
  20. if e != nil {
  21. err = errors.New("获取微路演默认图配置失败, Err: " + e.Error())
  22. return
  23. }
  24. if conf.ConfigValue == "" {
  25. err = errors.New("获取微路演默认图配置有误")
  26. return
  27. }
  28. list := new(models.MicroRoadShowDefaultImgList)
  29. if e = json.Unmarshal([]byte(conf.ConfigValue), &list); e != nil {
  30. err = errors.New("微路演默认图配置配置值解析失败, Err: " + e.Error())
  31. return
  32. }
  33. audioList := list.Audio
  34. for i := range audioList {
  35. audioMap[audioList[i].ChartPermissionId] = audioList[i].ImgUrl
  36. audioShareMap[audioList[i].ChartPermissionId] = audioList[i].ShareImg
  37. }
  38. videoList := list.Video
  39. for i := range videoList {
  40. videoMap[videoList[i].ChartPermissionId] = videoList[i].ImgUrl
  41. videoShareMap[videoList[i].ChartPermissionId] = videoList[i].ShareImg
  42. }
  43. return
  44. }
  45. // GetHomeNewestList 获取首页最新列表
  46. func GetHomeNewestList(userId, companyId, startSize, pageSize int, condition string, pars []interface{}) (resp []*models.HomeArticle, total int, err error) {
  47. resp = make([]*models.HomeArticle, 0)
  48. unionList, e := models.GetHomeNewestListUnionList(condition, pars, startSize, pageSize)
  49. if e != nil {
  50. err = errors.New("获取首页最新列表失败")
  51. return
  52. }
  53. unionTotal, e := models.GetHomeNewestListUnionCount(condition, pars)
  54. if e != nil {
  55. err = errors.New("获取首页最新列表总数失败")
  56. return
  57. }
  58. total = unionTotal
  59. // 用户权限
  60. authInfo, permissionArr, e := GetUserRaiPermissionInfo(userId, companyId)
  61. if e != nil {
  62. err = errors.New("获取用户权限失败, Err: " + e.Error())
  63. return
  64. }
  65. // 获取默认图配置
  66. audioMap, videoMap, audioShareMap, videoShareMap, e := GetMicroRoadShowDefaultImgConfig()
  67. if e != nil {
  68. err = errors.New("获取微路演默认图配置失败, Err: " + e.Error())
  69. return
  70. }
  71. // 此处没有直接使用HomeArticle结构体而是多加了一层, 纯粹是为了方便前端区分纪要和微路演音频=_=!
  72. for _, v := range unionList {
  73. item := new(models.HomeArticle)
  74. item.HomeType = v.HomeType
  75. // 纪要
  76. if item.HomeType == 0 {
  77. item.ArticleId = v.ArticleId
  78. item.Title = v.Title
  79. item.TitleEn = v.TitleEn
  80. item.UpdateFrequency = v.UpdateFrequency
  81. item.CreateDate = v.CreateDate
  82. item.PublishDate = v.PublishDate
  83. item.Body = v.Body
  84. item.BodyHtml = v.BodyHtml
  85. item.Abstract = v.Abstract
  86. item.CategoryName = v.CategoryName
  87. item.SubCategoryName = v.SubCategoryName
  88. item.ExpertBackground = v.ExpertBackground
  89. item.IsResearch = v.IsResearch
  90. item.Pv = v.Pv
  91. item.ImgUrlPc = v.ImgUrlPc
  92. item.CategoryId = v.CategoryId
  93. item.HttpUrl = v.HttpUrl
  94. item.IsNeedJump = v.IsNeedJump
  95. item.Source = v.Source
  96. item.Annotation = v.Annotation
  97. }
  98. // 音频
  99. if v.HomeType == 1 {
  100. ad := new(models.MicroAudioUnionList)
  101. ad.Id = v.Id
  102. ad.AudioTitle = v.AudioTitle
  103. ad.AudioResourceUrl = v.AudioResourceUrl
  104. ad.AudioType = v.AudioType
  105. ad.AudioPublishTime = utils.StrTimeToTime(v.AudioPublishTime).Format(utils.FormatDate)
  106. ad.AudioImgUrl = v.AudioImgUrl
  107. ad.AudioChartPermissionId = v.AudioChartPermissionId
  108. ad.AudioChartPermissionName = v.AudioChartPermissionName
  109. ad.AudioPlaySeconds = v.AudioPlaySeconds
  110. ad.AudioPlaySeconds = v.AudioPlaySeconds
  111. ad.AudioActivityId = v.AudioActivityId
  112. item.MicroAudio = ad
  113. // 默认图
  114. if ad.AudioImgUrl == "" {
  115. if ad.AudioType == 1 {
  116. ad.AudioImgUrl = audioMap[ad.AudioChartPermissionId]
  117. } else {
  118. ad.AudioImgUrl = videoMap[ad.AudioChartPermissionId]
  119. }
  120. }
  121. // 分享图
  122. if ad.AudioType == 1 {
  123. ad.AudioShareImg = audioShareMap[ad.AudioChartPermissionId]
  124. } else {
  125. ad.AudioShareImg = videoShareMap[ad.AudioChartPermissionId]
  126. }
  127. // 权限
  128. au := new(models.UserPermissionAuthInfo)
  129. au.SellerName = authInfo.SellerName
  130. au.SellerMobile = authInfo.SellerMobile
  131. au.HasPermission = authInfo.HasPermission
  132. au.OperationMode = authInfo.OperationMode
  133. if au.HasPermission == 1 {
  134. // 非宏观权限进一步判断是否有权限
  135. if ad.AudioChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, ad.AudioChartPermissionName) {
  136. au.HasPermission = 2
  137. }
  138. }
  139. // 无权限的弹框提示
  140. if au.HasPermission != 1 {
  141. if au.OperationMode == UserPermissionOperationModeCall {
  142. if ad.AudioType == 1 {
  143. au.PopupMsg = UserPermissionPopupMsgCallActivity
  144. } else {
  145. au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
  146. }
  147. } else {
  148. if ad.AudioType == 1 {
  149. au.PopupMsg = UserPermissionPopupMsgApplyActivity
  150. } else {
  151. au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
  152. }
  153. }
  154. }
  155. ad.AuthInfo = au
  156. }
  157. resp = append(resp, item)
  158. }
  159. return
  160. }
  161. // GetMicroRoadShowPageList 获取微路演列表添加活动视频 更新与8.1版本
  162. func GetMicroRoadShowPageListV8(pageSize, currentIndex, audioId, videoId, activityVideoId int, filter, keywords, audioIds, videoIds, activityVideoIds, chartPermissionIds string) (respList []*models.MicroRoadShowPageList, total int, err error) {
  163. var e error
  164. // 根据每页数据量获取音视频配比
  165. startSize := utils.StartIndex(currentIndex, pageSize)
  166. videoList := make([]*models.MicroRoadShowPageList, 0)
  167. if keywords != "" {
  168. keywords = "%" + keywords + "%"
  169. }
  170. //音频的查询
  171. var audioCond string
  172. var audioPars []interface{}
  173. // 如果筛选条件为指定视频ID或只看视频则不做音频查询
  174. //if videoId > 0 || activityVideoId > 0 || filter == 1 {
  175. // audioCond = ""
  176. //} else {
  177. // 活动已发布且已结束
  178. audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
  179. //活动音频,设置有效时间为30天,失效后该活动就不再支持音频回放。有效期起始时间为活动的开始时间
  180. //endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
  181. //audioCond += ` AND b.activity_time > ? `
  182. //audioPars = append(audioPars, endTime)
  183. if keywords != "" {
  184. audioCond += ` AND ( a.voice_name LIKE ? OR b.label LIKE ? )`
  185. audioPars = append(audioPars, keywords, keywords)
  186. }
  187. if audioId > 0 {
  188. audioCond += ` AND a.activity_voice_id = ?`
  189. audioPars = append(audioPars, audioId)
  190. }
  191. if audioIds != "" {
  192. sliceId := strings.Split(audioIds, ",")
  193. var idSqlStr string
  194. for _, v := range sliceId {
  195. idSqlStr += "'" + v + "',"
  196. }
  197. idSqlStr = strings.TrimRight(idSqlStr, ",")
  198. audioCond += ` AND a.activity_voice_id IN (` + idSqlStr + `)`
  199. }
  200. //}
  201. //视频的处理
  202. var videoCond string
  203. var videoCondAct string
  204. var videoPars []interface{}
  205. var videoParsAct []interface{}
  206. //if audioId > 0 || filter == 2 {
  207. // videoCond = ""
  208. //} else {
  209. if keywords != "" {
  210. videoCond += ` AND video_name LIKE ?`
  211. videoPars = append(videoPars, keywords)
  212. videoCondAct += ` AND (video_name LIKE ? OR art.label LIKE ?)`
  213. videoParsAct = append(videoParsAct, keywords, keywords)
  214. }
  215. if videoId > 0 {
  216. videoCond += ` AND video_id = ?`
  217. videoPars = append(videoPars, videoId)
  218. }
  219. if activityVideoId > 0 {
  220. videoCondAct += ` AND video_id = ?`
  221. videoParsAct = append(videoParsAct, activityVideoId)
  222. }
  223. if activityVideoIds != "" {
  224. sliceId := strings.Split(activityVideoIds, ",")
  225. var idSqlStr string
  226. for _, v := range sliceId {
  227. idSqlStr += "'" + v + "',"
  228. }
  229. idSqlStr = strings.TrimRight(idSqlStr, ",")
  230. videoCondAct += ` AND v.video_id IN (` + idSqlStr + `)`
  231. }
  232. //如果传了路演的或者活动的视频ID只查询一个
  233. if videoId > 0 {
  234. videoCondAct += ` AND video_id = 0 `
  235. audioCond += ` AND a.activity_voice_id = 0 `
  236. }
  237. if activityVideoId > 0 {
  238. videoCond += ` AND video_id = 0 `
  239. audioCond += ` AND a.activity_voice_id = 0 `
  240. }
  241. if audioId > 0 {
  242. videoCondAct += ` AND video_id = 0 `
  243. videoCond += ` AND video_id = 0 `
  244. }
  245. if strings.Contains(filter, "1") && !strings.Contains(filter, "2") {
  246. audioCond += ` AND a.activity_voice_id = 0 `
  247. } else if !strings.Contains(filter, "1") && strings.Contains(filter, "2") {
  248. videoCondAct += ` AND video_id = 0 `
  249. videoCond += ` AND video_id = 0 `
  250. }
  251. if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  252. audioCond += ` AND a.activity_voice_id = 0 `
  253. videoCondAct += ` AND video_id = 0 `
  254. } else if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  255. videoCond += ` AND video_id = 0 `
  256. }
  257. if videoIds != "" {
  258. sliceId := strings.Split(videoIds, ",")
  259. var idSqlStr string
  260. for _, v := range sliceId {
  261. idSqlStr += "'" + v + "',"
  262. }
  263. idSqlStr = strings.TrimRight(idSqlStr, ",")
  264. videoCond += ` AND video_id IN (` + idSqlStr + `)`
  265. }
  266. videoCond += ` AND publish_status = 1`
  267. if chartPermissionIds != "" {
  268. videoCond += ` AND chart_permission_id IN (` + chartPermissionIds + `)`
  269. audioCond += ` AND b.chart_permission_id IN (` + chartPermissionIds + `)`
  270. videoCondAct += ` AND art.chart_permission_id IN (` + chartPermissionIds + `)`
  271. }
  272. //}
  273. total, videoList, e = models.GetMicroRoadShowVideoPageListV8(startSize, pageSize, videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars)
  274. if e != nil {
  275. err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
  276. return
  277. }
  278. respList = videoList
  279. return
  280. }
  281. // GetMicroRoadShowPageList 获取微路演列表添加活动视频 更新与8.1版本
  282. func GetMicroRoadShowPageListV12(pageSize, currentIndex, sourceId, tableType int, filter, keywords, searchType, chartPermissionIds string) (respList []*models.MicroRoadShowPageList, total int, err error) {
  283. //Type int `description:"类型: 1-活动音频; 2-活动视频; 3-产业视频; 4-系列问答"`
  284. var e error
  285. // 根据每页数据量获取音视频配比
  286. startSize := utils.StartIndex(currentIndex, pageSize)
  287. videoList := make([]*models.MicroRoadShowPageList, 0)
  288. var audioAct string // 活动音频 1
  289. var audioActPars []interface{}
  290. var videoAct string // 活动视频 2
  291. var videoActPars []interface{}
  292. //视频的处理
  293. var videoMico string //产业视频 3
  294. var videoMicoPars []interface{}
  295. var conditionAskserie string // 系列问答 4
  296. var askseriePars []interface{}
  297. if sourceId > 0 && tableType > 0 {
  298. //先给不相干的表查询ID = 0
  299. audioAct += ` AND b.chart_permission_id = 0 `
  300. videoAct += ` AND b.chart_permission_id = 0`
  301. videoMico += ` AND a.chart_permission_id = 0 `
  302. conditionAskserie += ` AND a.chart_permission_id = 0 `
  303. switch tableType {
  304. case 1:
  305. audioAct += ` OR a.activity_id = ` + strconv.Itoa(sourceId)
  306. case 2:
  307. videoAct += ` OR a.activity_id = ` + strconv.Itoa(sourceId)
  308. case 3:
  309. videoMico += ` OR a.video_id = ` + strconv.Itoa(sourceId)
  310. case 4:
  311. conditionAskserie += ` OR a.askserie_video_id = ` + strconv.Itoa(sourceId)
  312. }
  313. }
  314. if filter == "1" {
  315. audioAct += ` AND b.chart_permission_id = 0 `
  316. } else if filter == "2" {
  317. videoAct += ` AND b.chart_permission_id = 0 `
  318. videoMico += ` AND a.chart_permission_id = 0 `
  319. conditionAskserie += ` AND a.chart_permission_id = 0 `
  320. }
  321. if searchType != "" {
  322. // @Param SearchType string int true "搜索类型: 1-路演回放; 2-问答系列; 3-调研反馈 多个用 , 隔开"
  323. videoMico += ` AND a.chart_permission_id = 0 ` // 产业视频不在搜索范围内
  324. if strings.Contains(searchType, "1") && !strings.Contains(searchType, "3") {
  325. audioAct += ` AND a.file_type = 1 `
  326. videoAct += ` AND a.file_type = 1 `
  327. }
  328. if !strings.Contains(searchType, "1") && strings.Contains(searchType, "3") {
  329. audioAct += ` AND a.file_type = 2 `
  330. videoAct += ` AND a.file_type = 2 `
  331. }
  332. if !strings.Contains(searchType, "2") {
  333. conditionAskserie += ` AND a.chart_permission_id = 0 `
  334. }
  335. if !strings.Contains(searchType, "3") && !strings.Contains(searchType, "1") {
  336. audioAct += ` AND b.chart_permission_id = 0 `
  337. videoAct += ` AND b.chart_permission_id = 0 `
  338. }
  339. }
  340. if keywords != "" {
  341. keywords = "%" + keywords + "%"
  342. audioAct += ` AND a.voice_name LIKE ? `
  343. videoAct += ` AND a.video_name LIKE ? `
  344. videoMico += ` AND a.video_name LIKE ? `
  345. conditionAskserie += ` AND a.video_name LIKE ? `
  346. audioActPars = append(audioActPars, keywords)
  347. videoActPars = append(videoActPars, keywords)
  348. videoMicoPars = append(videoMicoPars, keywords)
  349. askseriePars = append(askseriePars, keywords)
  350. }
  351. //行业筛选
  352. if chartPermissionIds != "" {
  353. audioAct += ` AND b.chart_permission_id IN (` + chartPermissionIds + `)`
  354. videoAct += ` AND b.chart_permission_id IN (` + chartPermissionIds + `)`
  355. videoMico += ` AND a.chart_permission_id IN (` + chartPermissionIds + `)`
  356. conditionAskserie += ` AND a.chart_permission_id IN (` + chartPermissionIds + `)`
  357. }
  358. //发布状态
  359. audioAct += ` AND b.publish_status = 1 `
  360. videoAct += ` AND b.publish_status = 1 `
  361. videoMico += ` AND a.publish_status = 1 `
  362. conditionAskserie += ` AND a.publish_status = 1 `
  363. total, videoList, e = models.GetMicroRoadShowVideoPageListV12(startSize, pageSize, audioAct, audioActPars, videoAct, videoActPars, videoMico, videoMicoPars, conditionAskserie, askseriePars)
  364. if e != nil {
  365. err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
  366. return
  367. }
  368. var activiiTyIds []int
  369. for _, v := range videoList {
  370. v.LabelType = v.Type
  371. if v.Type == 1 || v.Type == 2 {
  372. v.LabelType = 2 // 先将路演回放设置为调研反馈类型,再做处理
  373. activiiTyIds = append(activiiTyIds, v.SourceId)
  374. }
  375. }
  376. mapactiviiTyIds := GetActivityLYHFMapByActivityIds(activiiTyIds)
  377. for _, v := range videoList {
  378. if v.Type == 1 && mapactiviiTyIds[v.SourceId] {
  379. v.LabelType = 1 // 处理路演回放
  380. }
  381. }
  382. respList = videoList
  383. return
  384. }
  385. // GetMicroRoadShowPageListIkWord 添加IK分词联想词 获取微路演列表添加活动视频 更新与8.1版本
  386. func CountMicroRoadShowPageListIkWord(audioId, videoId, activityVideoId int, keywordArr []string, filter, audioIds, videoIds, activityVideoIds string) (total int, err error) {
  387. var e error
  388. var keywords string
  389. if len(keywordArr) > 0 {
  390. keywords = KeyWordArrSqlRegexpAll(keywordArr)
  391. }
  392. //if keywords == "" {
  393. // return
  394. //}
  395. //音频的查询
  396. var audioCond string
  397. var audioPars []interface{}
  398. // 如果筛选条件为指定视频ID或只看视频则不做音频查询
  399. //if videoId > 0 || activityVideoId > 0 || filter == 1 {
  400. // audioCond += ` AND a.activity_voice_id = 0 `
  401. //} else {
  402. // 活动已发布且已结束
  403. audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
  404. if keywords != "" {
  405. audioCond += ` AND (a.voice_name REGEXP ? OR b.label REGEXP ? ) `
  406. audioPars = append(audioPars, keywords, keywords)
  407. }
  408. if audioId > 0 {
  409. audioCond += ` AND a.activity_voice_id = ?`
  410. audioPars = append(audioPars, audioId)
  411. }
  412. if audioIds != "" {
  413. sliceId := strings.Split(audioIds, ",")
  414. var idSqlStr string
  415. for _, v := range sliceId {
  416. idSqlStr += "'" + v + "',"
  417. }
  418. idSqlStr = strings.TrimRight(idSqlStr, ",")
  419. audioCond += ` AND a.activity_voice_id IN (` + idSqlStr + `)`
  420. }
  421. //}
  422. //视频的处理
  423. var videoCond string
  424. var videoCondAct string
  425. var videoPars []interface{}
  426. var videoParsAct []interface{}
  427. //if audioId > 0 || filter == 2 {
  428. // videoCond = ""
  429. //} else {
  430. if keywords != "" {
  431. videoCond += ` AND video_name REGEXP ? `
  432. videoPars = append(videoPars, keywords)
  433. videoCondAct += ` AND (video_name REGEXP ? OR art.label REGEXP ? )`
  434. videoParsAct = append(videoParsAct, keywords, keywords)
  435. }
  436. if videoId > 0 {
  437. videoCond += ` AND video_id = ? `
  438. videoPars = append(videoPars, videoId)
  439. }
  440. if activityVideoId > 0 {
  441. videoCondAct += ` AND video_id = ?`
  442. videoParsAct = append(videoParsAct, activityVideoId)
  443. }
  444. if activityVideoIds != "" {
  445. sliceId := strings.Split(activityVideoIds, ",")
  446. var idSqlStr string
  447. for _, v := range sliceId {
  448. idSqlStr += "'" + v + "',"
  449. }
  450. idSqlStr = strings.TrimRight(idSqlStr, ",")
  451. videoCondAct += ` AND v.video_id IN (` + idSqlStr + `)`
  452. }
  453. //如果传了路演的或者活动的视频ID只查询一个
  454. if videoId > 0 {
  455. videoCondAct += ` AND video_id = 0 `
  456. audioCond += ` AND a.activity_voice_id = 0 `
  457. }
  458. if activityVideoId > 0 {
  459. videoCond += ` AND video_id = 0 `
  460. audioCond += ` AND a.activity_voice_id = 0 `
  461. }
  462. if audioId > 0 {
  463. videoCondAct += ` AND video_id = 0 `
  464. videoCond += ` AND video_id = 0 `
  465. }
  466. if strings.Contains(filter, "1") && !strings.Contains(filter, "2") {
  467. audioCond += ` AND a.activity_voice_id = 0 `
  468. } else if !strings.Contains(filter, "1") && strings.Contains(filter, "2") {
  469. videoCondAct += ` AND video_id = 0 `
  470. videoCond += ` AND video_id = 0 `
  471. }
  472. if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  473. audioCond += ` AND a.activity_voice_id = 0 `
  474. videoCondAct += ` AND video_id = 0 `
  475. } else if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  476. videoCond += ` AND video_id = 0 `
  477. }
  478. if videoIds != "" {
  479. sliceId := strings.Split(videoIds, ",")
  480. var idSqlStr string
  481. for _, v := range sliceId {
  482. idSqlStr += "'" + v + "',"
  483. }
  484. idSqlStr = strings.TrimRight(idSqlStr, ",")
  485. videoCond += ` AND video_id IN (` + idSqlStr + `)`
  486. }
  487. videoCond += ` AND publish_status = 1`
  488. //}
  489. total, e = models.CountMicroRoadShowVideoPageList(videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars)
  490. if e != nil {
  491. err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
  492. return
  493. }
  494. return
  495. }
  496. // GetMicroRoadShowPageListIkWord 添加IK分词联想词 获取微路演列表添加活动视频 更新与8.1版本
  497. func GetMicroRoadShowPageListIkWord(startSize, pageSize, audioId, videoId, activityVideoId int, keywordArr []string, filter, audioIds, videoIds, activityVideoIds, keywords string) (respList []*models.MicroRoadShowPageList, err error) {
  498. videoList := make([]*models.MicroRoadShowPageList, 0)
  499. var e error
  500. var keywordsIk string
  501. if len(keywordArr) > 1 {
  502. keywordsIk = KeyWordArrSqlRegexp(keywordArr)
  503. }
  504. if keywords != "" {
  505. keywords = "%" + keywords + "%"
  506. }
  507. //音频的查询
  508. var audioCond string
  509. var audioPars []interface{}
  510. // 如果筛选条件为指定视频ID或只看视频则不做音频查询
  511. //if videoId > 0 || activityVideoId > 0 || filter == 1 {
  512. // audioCond += ` AND a.activity_voice_id = 0 `
  513. //} else {
  514. // 活动已发布且已结束
  515. audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
  516. if keywordsIk != "" {
  517. audioCond += ` AND ( a.voice_name REGEXP ? OR b.label REGEXP ? )`
  518. audioCond += ` AND ( a.voice_name NOT LIKE ? AND b.label NOT LIKE ? )`
  519. audioPars = append(audioPars, keywordsIk, keywordsIk, keywords, keywords)
  520. }
  521. if audioId > 0 {
  522. audioCond += ` AND a.activity_voice_id = ?`
  523. audioPars = append(audioPars, audioId)
  524. }
  525. if audioIds != "" {
  526. sliceId := strings.Split(audioIds, ",")
  527. var idSqlStr string
  528. for _, v := range sliceId {
  529. idSqlStr += "'" + v + "',"
  530. }
  531. idSqlStr = strings.TrimRight(idSqlStr, ",")
  532. audioCond += ` AND a.activity_voice_id IN (` + idSqlStr + `)`
  533. }
  534. //}
  535. //视频的处理
  536. var videoCond string
  537. var videoCondAct string
  538. var videoPars []interface{}
  539. var videoParsAct []interface{}
  540. //if audioId > 0 || filter == 2 {
  541. // videoCond = ""
  542. //} else {
  543. if keywordsIk != "" {
  544. videoCond += ` AND video_name REGEXP ?`
  545. videoPars = append(videoPars, keywordsIk)
  546. videoCondAct += ` AND ( v.video_name REGEXP ? OR art.label REGEXP ? )`
  547. videoCondAct += ` AND ( v.video_name NOT LIKE ? AND art.label NOT LIKE ? )`
  548. //videoCondAct += ` AND video_name REGEXP ?`
  549. videoParsAct = append(videoParsAct, keywordsIk, keywordsIk, keywords, keywords)
  550. }
  551. if videoId > 0 {
  552. videoCond += ` AND video_id = ?`
  553. videoPars = append(videoPars, videoId)
  554. }
  555. if activityVideoId > 0 {
  556. videoCondAct += ` AND video_id = ?`
  557. videoParsAct = append(videoParsAct, activityVideoId)
  558. }
  559. if activityVideoIds != "" {
  560. sliceId := strings.Split(activityVideoIds, ",")
  561. var idSqlStr string
  562. for _, v := range sliceId {
  563. idSqlStr += "'" + v + "',"
  564. }
  565. idSqlStr = strings.TrimRight(idSqlStr, ",")
  566. videoCondAct += ` AND v.video_id IN (` + idSqlStr + `)`
  567. }
  568. //如果传了路演的或者活动的视频ID只查询一个
  569. if videoId > 0 {
  570. videoCondAct += ` AND video_id = 0 `
  571. audioCond += ` AND a.activity_voice_id = 0 `
  572. }
  573. if activityVideoId > 0 {
  574. videoCond += ` AND video_id = 0 `
  575. audioCond += ` AND a.activity_voice_id = 0 `
  576. }
  577. if audioId > 0 {
  578. videoCondAct += ` AND video_id = 0 `
  579. videoCond += ` AND video_id = 0 `
  580. }
  581. if strings.Contains(filter, "1") && !strings.Contains(filter, "2") {
  582. audioCond += ` AND a.activity_voice_id = 0 `
  583. } else if !strings.Contains(filter, "1") && strings.Contains(filter, "2") {
  584. videoCondAct += ` AND video_id = 0 `
  585. videoCond += ` AND video_id = 0 `
  586. }
  587. if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  588. audioCond += ` AND a.activity_voice_id = 0 `
  589. videoCondAct += ` AND video_id = 0 `
  590. } else if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  591. videoCond += ` AND video_id = 0 `
  592. }
  593. if videoIds != "" {
  594. sliceId := strings.Split(videoIds, ",")
  595. var idSqlStr string
  596. for _, v := range sliceId {
  597. idSqlStr += "'" + v + "',"
  598. }
  599. idSqlStr = strings.TrimRight(idSqlStr, ",")
  600. videoCond += ` AND video_id IN (` + idSqlStr + `)`
  601. }
  602. videoCond += ` AND publish_status = 1`
  603. //}
  604. videoList, e = models.GetMicroRoadShowVideoPageListIkWord(startSize, pageSize, videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars)
  605. if e != nil {
  606. err = errors.New("获取微路演音视频列表失败分词, Err: " + e.Error())
  607. return
  608. }
  609. respList = videoList
  610. return
  611. }
  612. // 我的收藏
  613. func GetMicroRoadShowMycollect(pageSize, currentIndex int, audioIds, videoIds, activityVideoIds string) (respList []*models.MicroRoadShowPageList, total int, err error) {
  614. var e error
  615. // 根据每页数据量获取音视频配比
  616. startSize := utils.StartIndex(currentIndex, pageSize)
  617. videoList := make([]*models.MicroRoadShowPageList, 0)
  618. //音频的查询
  619. var audioCond string
  620. var audioPars []interface{}
  621. // 如果筛选条件为指定视频ID或只看视频则不做音频查询
  622. // 活动已发布且已结束
  623. audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
  624. if audioIds != "" {
  625. sliceId := strings.Split(audioIds, ",")
  626. var idSqlStr string
  627. for _, v := range sliceId {
  628. idSqlStr += "'" + v + "',"
  629. }
  630. idSqlStr = strings.TrimRight(idSqlStr, ",")
  631. audioCond += ` AND a.activity_voice_id IN (` + idSqlStr + `)`
  632. } else {
  633. audioCond += ` AND a.activity_voice_id = 0 `
  634. }
  635. //视频的处理
  636. var videoCond string
  637. var videoCondAct string
  638. if activityVideoIds != "" {
  639. sliceId := strings.Split(activityVideoIds, ",")
  640. var idSqlStr string
  641. for _, v := range sliceId {
  642. idSqlStr += "'" + v + "',"
  643. }
  644. idSqlStr = strings.TrimRight(idSqlStr, ",")
  645. videoCondAct += ` AND v.video_id IN (` + idSqlStr + `)`
  646. } else {
  647. videoCondAct += ` AND v.video_id = 0 `
  648. }
  649. var videoPars []interface{}
  650. var videoParsAct []interface{}
  651. if videoIds != "" {
  652. sliceId := strings.Split(videoIds, ",")
  653. var idSqlStr string
  654. for _, v := range sliceId {
  655. idSqlStr += "'" + v + "',"
  656. }
  657. idSqlStr = strings.TrimRight(idSqlStr, ",")
  658. videoCond += ` AND video_id IN (` + idSqlStr + `)`
  659. } else {
  660. videoCond += ` AND video_id = 0 `
  661. }
  662. videoCond += ` AND publish_status = 1`
  663. total, videoList, e = models.GetMicroRoadShowVideoPageListV8(startSize, pageSize, videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars)
  664. if e != nil {
  665. err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
  666. return
  667. }
  668. respList = videoList
  669. return
  670. }
  671. // 我的收藏
  672. func GetMicroRoadShowMycollectV12(pageSize, currentIndex int, audioIds, activityVideoIds, roadshowIdsStr, askserieVideoIds string, user *models.WxUserItem) (respList []*models.MicroRoadShowPageList, total int, err error) {
  673. //Type int `description:"类型: 1-活动音频; 2-活动视频; 3-产业视频; 4-系列问答"`
  674. var e error
  675. // 根据每页数据量获取音视频配比
  676. startSize := utils.StartIndex(currentIndex, pageSize)
  677. videoList := make([]*models.MicroRoadShowPageList, 0)
  678. var audioAct string // 活动音频 1
  679. var audioActPars []interface{}
  680. var videoAct string // 活动视频 2
  681. var videoActPars []interface{}
  682. //视频的处理
  683. var videoMico string //产业视频 3
  684. var videoMicoPars []interface{}
  685. var conditionAskserie string // 系列问答 4
  686. var askseriePars []interface{}
  687. if audioIds != "" {
  688. sliceId := strings.Split(audioIds, ",")
  689. audioAct += ` AND a.activity_voice_id IN (` + strings.Join(sliceId, ",") + `)`
  690. } else {
  691. audioAct += ` AND a.activity_voice_id = 0 `
  692. }
  693. if activityVideoIds != "" {
  694. sliceId := strings.Split(activityVideoIds, ",")
  695. videoAct += ` AND a.video_id IN (` + strings.Join(sliceId, ",") + `)`
  696. } else {
  697. videoAct += ` AND a.video_id = 0 `
  698. }
  699. if roadshowIdsStr != "" {
  700. sliceId := strings.Split(roadshowIdsStr, ",")
  701. videoMico += ` AND a.video_id IN (` + strings.Join(sliceId, ",") + `)`
  702. } else {
  703. videoMico += ` AND a.video_id = 0 `
  704. }
  705. if askserieVideoIds != "" {
  706. sliceId := strings.Split(askserieVideoIds, ",")
  707. conditionAskserie += ` AND a.askserie_video_id IN (` + strings.Join(sliceId, ",") + `)`
  708. } else {
  709. conditionAskserie += ` AND a.askserie_video_id = 0 `
  710. }
  711. //发布状态
  712. audioAct += ` AND b.publish_status = 1 `
  713. videoAct += ` AND b.publish_status = 1 `
  714. videoMico += ` AND a.publish_status = 1 `
  715. conditionAskserie += ` AND a.publish_status = 1 `
  716. total, videoList, e = models.GetMicroRoadShowVideoPageListV12(startSize, pageSize, audioAct, audioActPars, videoAct, videoActPars, videoMico, videoMicoPars, conditionAskserie, askseriePars)
  717. if e != nil {
  718. err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
  719. return
  720. }
  721. userId := user.UserId
  722. listMycollect, e := models.GetUserMicroRoadshowCollectList(userId)
  723. if e != nil {
  724. err = errors.New("GetUserMicroRoadshowCollectList, Err: " + e.Error())
  725. return
  726. }
  727. mapaudioIds := make(map[int]int) //活动音频
  728. mapvideoIds := make(map[int]int) // 微路演视频
  729. mapactivityVideoIds := make(map[int]int) // 活动视频
  730. mapAskserieVideoIds := make(map[int]int) // 活动视频
  731. for _, item := range listMycollect {
  732. if item.ActivityVoiceId > 0 {
  733. mapaudioIds[item.ActivityVoiceId] = item.ActivityVoiceId
  734. } else if item.VideoId > 0 {
  735. mapvideoIds[item.VideoId] = item.VideoId
  736. } else if item.ActivityVideoId > 0 {
  737. mapactivityVideoIds[item.ActivityVideoId] = item.ActivityVideoId
  738. }
  739. }
  740. listAskserieVideoCollect, e := models.GetUserCygxAskserieVideoCollectList(userId)
  741. if e != nil {
  742. err = errors.New("GetUserCygxAskserieVideoCollectList, Err: " + e.Error())
  743. return
  744. }
  745. for _, v := range listAskserieVideoCollect {
  746. if v.AskserieVideoId > 0 {
  747. mapAskserieVideoIds[v.AskserieVideoId] = v.AskserieVideoId
  748. }
  749. }
  750. for _, item := range videoList {
  751. if item.Type == 1 {
  752. //音频
  753. if mapaudioIds[item.Id] > 0 {
  754. item.IsCollect = true
  755. }
  756. } else if item.Type == 2 {
  757. //活动视频
  758. if mapactivityVideoIds[item.Id] > 0 {
  759. item.IsCollect = true
  760. }
  761. } else if item.Type == 3 {
  762. //微路演视频
  763. if mapvideoIds[item.Id] > 0 {
  764. item.IsCollect = true
  765. }
  766. } else if item.Type == 4 {
  767. //系列问答视频
  768. if mapAskserieVideoIds[item.SourceId] > 0 {
  769. item.IsCollect = true
  770. }
  771. }
  772. }
  773. var activiiTyIds []int
  774. for _, v := range videoList {
  775. v.LabelType = v.Type
  776. if v.Type == 1 || v.Type == 2 {
  777. v.LabelType = 2 // 先将路演回放设置为调研反馈类型,再做处理
  778. activiiTyIds = append(activiiTyIds, v.SourceId)
  779. }
  780. }
  781. mapactiviiTyIds := GetActivityLYHFMapByActivityIds(activiiTyIds)
  782. for _, v := range videoList {
  783. if v.Type == 1 && mapactiviiTyIds[v.SourceId] {
  784. v.LabelType = 1 // 处理路演回放
  785. }
  786. }
  787. respList = videoList
  788. return
  789. }
  790. // GetMicroRoadshowVideoMap 获取已经发布的微路演的产业ID
  791. func GetMicroRoadshowVideoMap() (items map[int]int, err error) {
  792. list, e := models.GetMicroRoadshowVideoList()
  793. if e != nil && e.Error() != utils.ErrNoRow() {
  794. err = errors.New("获取已经发布的微路演的产业失败,GetMicroRoadshowVideoList " + e.Error())
  795. return
  796. }
  797. mapindustrialId := make(map[int]int)
  798. for _, v := range list {
  799. mapindustrialId[v.IndustryId] = v.IndustryId
  800. }
  801. items = mapindustrialId
  802. return
  803. }
  804. func GetindustryVideo(user *models.WxUserItem, industrialManagementId int) (industryVideo *models.MicroVideoSimpleInfo, AuthInfo *models.UserPermissionAuthInfo, err error) {
  805. total, e := models.GetMicroRoadshowVideoByIndustryIdCount(industrialManagementId)
  806. if e != nil {
  807. err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryIdCount " + e.Error())
  808. return
  809. }
  810. if total == 0 {
  811. return
  812. }
  813. // 用户权限
  814. authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
  815. if e != nil {
  816. err = errors.New("获取用户权限失败,GetUserRaiPermissionInfo " + e.Error())
  817. return
  818. }
  819. videoSimple := new(models.MicroVideoSimpleInfo)
  820. // 权限
  821. var au *models.UserPermissionAuthInfo
  822. video, e := models.GetMicroRoadshowVideoByIndustryId(industrialManagementId)
  823. if e != nil {
  824. err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
  825. return
  826. } else {
  827. videoSimple.Id = video.VideoId
  828. videoSimple.Title = "5min【" + video.IndustryName + "】逻辑解析"
  829. videoSimple.BackgroundImg = video.ImgUrl
  830. videoSimple.DetailImgUrl = video.DetailImgUrl
  831. if videoSimple.BackgroundImg == "" {
  832. // 获取默认图配置
  833. _, videoMap, _, _, e := GetMicroRoadShowDefaultImgConfig()
  834. if e != nil {
  835. err = errors.New("获取视频默认配置图失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
  836. return
  837. }
  838. videoSimple.BackgroundImg = videoMap[video.ChartPermissionId]
  839. }
  840. videoSimple.PlaySeconds = video.VideoDuration
  841. videoSimple.ResourceUrl = video.VideoUrl
  842. au = new(models.UserPermissionAuthInfo)
  843. au.SellerName = authInfo.SellerName
  844. au.SellerMobile = authInfo.SellerMobile
  845. au.HasPermission = authInfo.HasPermission
  846. au.OperationMode = authInfo.OperationMode
  847. if au.HasPermission == 1 {
  848. // 非宏观权限进一步判断是否有权限
  849. if video.ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, video.ChartPermissionName) {
  850. au.HasPermission = 2
  851. }
  852. }
  853. // 无权限的弹框提示
  854. if au.HasPermission != 1 {
  855. if au.OperationMode == UserPermissionOperationModeCall {
  856. au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
  857. } else {
  858. au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
  859. }
  860. videoSimple.ResourceUrl = ""
  861. }
  862. }
  863. industryVideo = videoSimple
  864. AuthInfo = au
  865. return
  866. }
  867. // 用户微路演视频回放操作操作行为,模板消息推送
  868. func MicroRoadshowVideoUserRmind(user *models.WxUserItem, videoId int) (err error) {
  869. defer func() {
  870. if err != nil {
  871. go utils.SendAlarmMsg("用户音视频回放操作操作行为,模板消息推送失败"+err.Error(), 2)
  872. }
  873. }()
  874. countUser, err := models.GetUserRemind(user.UserId)
  875. if err != nil {
  876. return err
  877. }
  878. if countUser == 0 {
  879. return err
  880. }
  881. var first string
  882. var keyword1 string
  883. var keyword2 string
  884. var keyword3 string
  885. var keyword4 string
  886. var remark string
  887. //获取销售手机号
  888. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  889. if err != nil && err.Error() != utils.ErrNoRow() {
  890. return err
  891. }
  892. if sellerItemQy != nil {
  893. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  894. if e != nil {
  895. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  896. return
  897. }
  898. videoInfo, e := models.GetMicroRoadshowVideoByVideoId(videoId)
  899. if e != nil {
  900. err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
  901. return
  902. }
  903. if videoInfo == nil {
  904. return
  905. }
  906. first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放微路演详视频")
  907. keyword1 = videoInfo.VideoName
  908. keyword2 = fmt.Sprint("互动:播放微路演详视频,", user.RealName, "--", user.CompanyName)
  909. remark = "点击查看微路演详情"
  910. openIdArr := make([]string, 0)
  911. for _, v := range openIdList {
  912. openIdArr = append(openIdArr, v.OpenId)
  913. }
  914. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(videoInfo.IndustryId)
  915. sendInfo := new(SendWxTemplate)
  916. sendInfo.First = first
  917. sendInfo.Keyword1 = keyword1
  918. sendInfo.Keyword2 = keyword2
  919. sendInfo.Keyword3 = keyword3
  920. sendInfo.Keyword4 = keyword4
  921. sendInfo.Remark = remark
  922. sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
  923. sendInfo.RedirectUrl = redirectUrl
  924. sendInfo.RedirectTarget = 3
  925. sendInfo.Resource = strconv.Itoa(videoId)
  926. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  927. sendInfo.OpenIdArr = openIdArr
  928. err = PublicSendTemplateMsg(sendInfo)
  929. if err != nil {
  930. return
  931. }
  932. }
  933. return
  934. }
  935. // 记录产业视频播放记录
  936. func AddMicroRoadshowVideoRecord(user *models.WxUserItem, videoId, playSeconds int) {
  937. //if playSeconds == 0 {
  938. // return
  939. //}
  940. key := utils.CYGX_VIDEO_HISTORY_KEY + utils.CYGX_OBJ_ROADSHOW + strconv.Itoa(videoId) + "_" + strconv.Itoa(user.UserId)
  941. if utils.Rc.IsExist(key) {
  942. return
  943. }
  944. utils.Rc.Put(key, 1, 10*time.Minute)
  945. var err error
  946. defer func() {
  947. if err != nil {
  948. go utils.SendAlarmMsg(fmt.Sprint("记录用户活动音频播放记录失败 AddMicroRoadshowVideoRecord Err:", err.Error(), "videoId:", videoId, "UserId:", user.UserId), 2)
  949. }
  950. }()
  951. item := new(models.CygxMicroRoadshowVideoHistory)
  952. item.UserId = user.UserId
  953. item.RealName = user.RealName
  954. item.VideoId = videoId
  955. item.PlaySeconds = strconv.Itoa(playSeconds)
  956. item.Mobile = user.Mobile
  957. item.Email = user.Email
  958. item.CompanyId = user.CompanyId
  959. item.CompanyName = user.CompanyName
  960. item.CreateTime = time.Now()
  961. item.ModifyTime = time.Now()
  962. item.RegisterPlatform = utils.REGISTER_PLATFORM
  963. sellerItem, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  964. if e != nil && e.Error() != utils.ErrNoRow() {
  965. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  966. return
  967. }
  968. if sellerItem != nil {
  969. item.SellerName = sellerItem.RealName
  970. }
  971. //if !utils.Rc.IsExist(key) {
  972. //添加记录
  973. e = models.AddCygxMicroRoadshowVideoHistory(item)
  974. if e != nil {
  975. err = errors.New("AddCygxMicroRoadshowVideoHistory, Err: " + e.Error())
  976. return
  977. }
  978. //播放记录加1
  979. e = models.UpdateCygxMicroRoadshowVideo(videoId)
  980. if e != nil {
  981. err = errors.New("UpdateCygxActivityVideoCounts, Err: " + e.Error())
  982. return
  983. }
  984. go MicroRoadshowVideoUserRmind(user, videoId)
  985. //utils.Rc.Put(key, 1, 10*time.Minute)
  986. //} else {
  987. // //更新停留时长
  988. // lastItem, e := models.GetLastCygxMicroRoadshowVideoHistory(videoId, user.UserId)
  989. // if e != nil {
  990. // err = errors.New("GetLastCygxMicroRoadshowVideoHistory, Err: " + e.Error())
  991. // return
  992. // }
  993. // //更新播放时间
  994. // e = models.UpdateLastCygxMicroRoadshowVideoHistory(strconv.Itoa(playSeconds), lastItem.Id)
  995. // if e != nil {
  996. // err = errors.New("UpdateLastCygxMicroRoadshowVideoHistory, Err: " + e.Error())
  997. // return
  998. // }
  999. //}
  1000. //if playSeconds != 0 {
  1001. // lastItem, e := models.GetLastCygxMicroRoadshowVideoHistory(videoId, user.UserId)
  1002. // if e != nil {
  1003. // err = errors.New("GetLastCygxMicroRoadshowVideoHistory, Err: " + e.Error())
  1004. // return
  1005. // }
  1006. // e = models.UpdateLastCygxActivityVideoHistory(strconv.Itoa(playSeconds), lastItem.Id)
  1007. // if e != nil {
  1008. // err = errors.New("UpdateLastCygxActivityVideoHistory, Err: " + e.Error())
  1009. // return
  1010. // }
  1011. // utils.Rc.Put(key, 1, 10*time.Second)
  1012. //} else {
  1013. // e = models.AddCygxMicroRoadshowVideoHistory(item)
  1014. // if e != nil {
  1015. // err = errors.New("AddCygxMicroRoadshowVideoHistory, Err: " + e.Error())
  1016. // return
  1017. // }
  1018. // e = models.UpdateCygxMicroRoadshowVideo(videoId)
  1019. // if e != nil {
  1020. // err = errors.New("UpdateCygxActivityVideoCounts, Err: " + e.Error())
  1021. // return
  1022. // }
  1023. // go MicroRoadshowVideoUserRmind(user, videoId)
  1024. //}
  1025. return
  1026. }
  1027. // 记录所有微路演音视频播放记录
  1028. func AddAllCygxVoiceAndVideoHistory(user *models.WxUserItem, sourceId, sourceType, playSeconds int) {
  1029. var err error
  1030. defer func() {
  1031. if err != nil {
  1032. go utils.SendAlarmMsg(fmt.Sprint("记录所有微路演音视频播放记录失败 AddAllCygxVoiceAndVideoHistory Err:", err.Error(), "sourceId:", sourceId, "UserId:", user.UserId), 2)
  1033. }
  1034. }()
  1035. item := new(models.CygxVoiceAndVideoHistory)
  1036. item.UserId = user.UserId
  1037. item.RealName = user.RealName
  1038. item.SourceId = sourceId
  1039. item.SourceType = sourceType
  1040. item.PlaySeconds = strconv.Itoa(playSeconds)
  1041. item.Mobile = user.Mobile
  1042. item.Email = user.Email
  1043. item.CompanyId = user.CompanyId
  1044. item.CompanyName = user.CompanyName
  1045. item.CreateTime = time.Now()
  1046. item.ModifyTime = time.Now()
  1047. item.RegisterPlatform = utils.REGISTER_PLATFORM
  1048. sellerItem, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  1049. if e != nil && e.Error() != utils.ErrNoRow() {
  1050. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  1051. return
  1052. }
  1053. if sellerItem != nil {
  1054. item.SellerName = sellerItem.RealName
  1055. }
  1056. _, e = models.AddCygxVoiceAndVideoHistory(item)
  1057. if e != nil {
  1058. err = errors.New("AddCygxVoiceAndVideoHistory, Err: " + e.Error())
  1059. return
  1060. }
  1061. return
  1062. }
  1063. // 获取满足路演回放的活动类型
  1064. func GetActivityLYHFMapByActivityIds(activityIds []int) (mapResp map[int]bool) {
  1065. var err error
  1066. defer func() {
  1067. if err != nil {
  1068. go utils.SendAlarmMsg("获取满足路演回放的活动类型 GetActivityLYHFMapByActivityIds,失败,活动ID:"+fmt.Sprint(activityIds)+err.Error(), 2)
  1069. }
  1070. }()
  1071. var condition string
  1072. var pars []interface{}
  1073. lenArr := len(activityIds)
  1074. if lenArr == 0 {
  1075. return
  1076. }
  1077. condition = ` AND activity_id IN (` + utils.GetOrmInReplace(lenArr) + `) `
  1078. pars = append(pars, activityIds)
  1079. list, e := models.GetCygxActivityList(condition, pars, 0, lenArr)
  1080. if e != nil {
  1081. err = errors.New("GetIndustrialManagementNewList, Err: " + e.Error())
  1082. return
  1083. }
  1084. mapResp = make(map[int]bool, 0)
  1085. for _, v := range list {
  1086. mapResp[v.ActivityId] = true
  1087. }
  1088. return
  1089. }