micro_roadshow.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_clpt/models"
  7. "hongze/hongze_clpt/utils"
  8. "strconv"
  9. "strings"
  10. )
  11. // GetMicroRoadShowDefaultImgConfig 获取微路演默认图/分享图配置
  12. func GetMicroRoadShowDefaultImgConfig() (audioMap, videoMap, audioShareMap, videoShareMap map[int]string, err error) {
  13. audioMap = make(map[int]string, 0)
  14. videoMap = make(map[int]string, 0)
  15. audioShareMap = make(map[int]string, 0)
  16. videoShareMap = make(map[int]string, 0)
  17. key := models.MicroRoadshowDefaultImgKey
  18. conf, e := models.GetConfigByCode(key)
  19. if e != nil {
  20. err = errors.New("获取微路演默认图配置失败, Err: " + e.Error())
  21. return
  22. }
  23. if conf.ConfigValue == "" {
  24. err = errors.New("获取微路演默认图配置有误")
  25. return
  26. }
  27. list := new(models.MicroRoadShowDefaultImgList)
  28. if e = json.Unmarshal([]byte(conf.ConfigValue), &list); e != nil {
  29. err = errors.New("微路演默认图配置配置值解析失败, Err: " + e.Error())
  30. return
  31. }
  32. audioList := list.Audio
  33. for i := range audioList {
  34. audioMap[audioList[i].ChartPermissionId] = audioList[i].ImgUrl
  35. audioShareMap[audioList[i].ChartPermissionId] = audioList[i].ShareImg
  36. }
  37. videoList := list.Video
  38. for i := range videoList {
  39. videoMap[videoList[i].ChartPermissionId] = videoList[i].ImgUrl
  40. videoShareMap[videoList[i].ChartPermissionId] = videoList[i].ShareImg
  41. }
  42. return
  43. }
  44. func GetindustryVideo(user *models.WxUserItem, industrialManagementId int) (industryVideo *models.MicroVideoSimpleInfo, AuthInfo *models.UserPermissionAuthInfo, err error) {
  45. total, e := models.GetMicroRoadshowVideoByIndustryIdCount(industrialManagementId)
  46. if e != nil {
  47. err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryIdCount " + e.Error())
  48. return
  49. }
  50. if total == 0 {
  51. return
  52. }
  53. // 用户权限
  54. authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
  55. if e != nil {
  56. err = errors.New("获取用户权限失败,GetUserRaiPermissionInfo " + e.Error())
  57. return
  58. }
  59. videoSimple := new(models.MicroVideoSimpleInfo)
  60. // 权限
  61. var au *models.UserPermissionAuthInfo
  62. video, e := models.GetMicroRoadshowVideoByIndustryId(industrialManagementId)
  63. if e != nil {
  64. err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
  65. return
  66. } else {
  67. videoSimple.Id = video.VideoId
  68. videoSimple.Title = "5min【" + video.IndustryName + "】逻辑解析"
  69. videoSimple.BackgroundImg = video.ImgUrl
  70. videoSimple.DetailImgUrl = video.DetailImgUrl
  71. if videoSimple.BackgroundImg == "" {
  72. // 获取默认图配置
  73. _, videoMap, _, _, e := GetMicroRoadShowDefaultImgConfig()
  74. if e != nil {
  75. err = errors.New("获取视频默认配置图失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
  76. return
  77. }
  78. videoSimple.BackgroundImg = videoMap[video.ChartPermissionId]
  79. }
  80. videoSimple.PlaySeconds = video.VideoDuration
  81. videoSimple.ResourceUrl = video.VideoUrl
  82. au = new(models.UserPermissionAuthInfo)
  83. au.SellerName = authInfo.SellerName
  84. au.SellerMobile = authInfo.SellerMobile
  85. au.HasPermission = authInfo.HasPermission
  86. au.OperationMode = authInfo.OperationMode
  87. if au.HasPermission == 1 {
  88. // 非宏观权限进一步判断是否有权限
  89. if video.ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, video.ChartPermissionName) {
  90. au.HasPermission = 2
  91. }
  92. }
  93. // 无权限的弹框提示
  94. if au.HasPermission != 1 {
  95. if au.OperationMode == UserPermissionOperationModeCall {
  96. au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
  97. } else {
  98. au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
  99. }
  100. videoSimple.ResourceUrl = ""
  101. }
  102. }
  103. industryVideo = videoSimple
  104. AuthInfo = au
  105. return
  106. }
  107. // GetindustryVideoDetailById 通过视频ID获取视频详情
  108. func GetindustryVideoDetailById(user *models.WxUserItem, videoId int) (industryVideo *models.MicroVideoSimpleInfo, AuthInfo *models.UserPermissionAuthInfo, err error) {
  109. total, e := models.GetMicroRoadshowVideoByVideoIdCount(videoId)
  110. if e != nil {
  111. err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryIdCount " + e.Error())
  112. return
  113. }
  114. if total == 0 {
  115. err = errors.New("视频不存在,或已取消发布")
  116. return
  117. }
  118. // 用户权限
  119. authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
  120. if e != nil {
  121. err = errors.New("获取用户权限失败,GetUserRaiPermissionInfo " + e.Error())
  122. return
  123. }
  124. videoSimple := new(models.MicroVideoSimpleInfo)
  125. // 权限
  126. var au *models.UserPermissionAuthInfo
  127. video, e := models.GetMicroRoadshowVideoById(videoId)
  128. if e != nil {
  129. err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
  130. return
  131. } else {
  132. videoSimple.Id = video.VideoId
  133. videoSimple.Title = "5min【" + video.IndustryName + "】逻辑解析"
  134. videoSimple.BackgroundImg = video.ImgUrl
  135. videoSimple.DetailImgUrl = video.DetailImgUrl
  136. if videoSimple.BackgroundImg == "" {
  137. // 获取默认图配置
  138. _, videoMap, _, _, e := GetMicroRoadShowDefaultImgConfig()
  139. if e != nil {
  140. err = errors.New("获取视频默认配置图失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
  141. return
  142. }
  143. videoSimple.BackgroundImg = videoMap[video.ChartPermissionId]
  144. }
  145. videoSimple.PlaySeconds = video.VideoDuration
  146. videoSimple.ResourceUrl = video.VideoUrl
  147. au = new(models.UserPermissionAuthInfo)
  148. au.SellerName = authInfo.SellerName
  149. au.SellerMobile = authInfo.SellerMobile
  150. au.HasPermission = authInfo.HasPermission
  151. au.OperationMode = authInfo.OperationMode
  152. if au.HasPermission == 1 {
  153. // 非宏观权限进一步判断是否有权限
  154. if video.ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, video.ChartPermissionName) {
  155. au.HasPermission = 2
  156. }
  157. }
  158. // 无权限的弹框提示
  159. if au.HasPermission != 1 {
  160. if au.OperationMode == UserPermissionOperationModeCall {
  161. au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
  162. } else {
  163. au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
  164. }
  165. videoSimple.ResourceUrl = ""
  166. }
  167. }
  168. videoSimple.Type = 3
  169. industryVideo = videoSimple
  170. AuthInfo = au
  171. return
  172. }
  173. // GetMicroRoadshowVideoMap 获取已经发布的微路演的产业ID
  174. func GetMicroRoadshowVideoMap() (items map[int]int, err error) {
  175. list, e := models.GetMicroRoadshowVideoList()
  176. if e != nil && e.Error() != utils.ErrNoRow() {
  177. err = errors.New("获取已经发布的微路演的产业失败,GetMicroRoadshowVideoList " + e.Error())
  178. return
  179. }
  180. mapindustrialId := make(map[int]int)
  181. for _, v := range list {
  182. mapindustrialId[v.IndustryId] = v.IndustryId
  183. }
  184. items = mapindustrialId
  185. return
  186. }
  187. // GetMicroRoadShowPageList 获取微路演列表添加活动视频 更新与8.1版本
  188. func GetMicroRoadShowPageListV8(pageSize, currentIndex, audioId, videoId, activityVideoId int, filter, keywords string) (respList []*models.MicroRoadShowPageList, total int, err error) {
  189. var e error
  190. // 根据每页数据量获取音视频配比
  191. startSize := utils.StartIndex(currentIndex, pageSize)
  192. videoList := make([]*models.MicroRoadShowPageList, 0)
  193. if keywords != "" {
  194. keywords = "%" + keywords + "%"
  195. }
  196. //音频的查询
  197. var audioCond string
  198. var audioPars []interface{}
  199. // 如果筛选条件为指定视频ID或只看视频则不做音频查询
  200. // 活动已发布且已结束
  201. audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
  202. //活动音频,设置有效时间为30天,失效后该活动就不再支持音频回放。有效期起始时间为活动的开始时间
  203. //endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
  204. //audioCond += ` AND b.activity_time > ? `
  205. //audioPars = append(audioPars, endTime)
  206. if keywords != "" {
  207. audioCond += ` AND ( a.voice_name LIKE ? OR b.label LIKE ? )`
  208. audioPars = append(audioPars, keywords, keywords)
  209. }
  210. if audioId > 0 {
  211. audioCond += ` AND a.activity_voice_id = ?`
  212. audioPars = append(audioPars, audioId)
  213. }
  214. //}
  215. //视频的处理
  216. var videoCond string
  217. var videoCondAct string
  218. var videoPars []interface{}
  219. var videoParsAct []interface{}
  220. if keywords != "" {
  221. videoCond += ` AND video_name LIKE ?`
  222. videoPars = append(videoPars, keywords)
  223. videoCondAct += ` AND ( video_name LIKE ? OR art.label LIKE ? )`
  224. videoParsAct = append(videoParsAct, keywords, keywords)
  225. }
  226. if videoId > 0 {
  227. videoCond += ` AND video_id = ?`
  228. videoPars = append(videoPars, videoId)
  229. }
  230. if activityVideoId > 0 {
  231. videoCondAct += ` AND video_id = ?`
  232. videoParsAct = append(videoParsAct, activityVideoId)
  233. }
  234. //如果传了路演的或者活动的视频ID只查询一个
  235. if videoId > 0 {
  236. videoCondAct += ` AND video_id = 0 `
  237. audioCond += ` AND a.activity_voice_id = 0 `
  238. }
  239. if activityVideoId > 0 {
  240. videoCond += ` AND video_id = 0 `
  241. audioCond += ` AND a.activity_voice_id = 0 `
  242. }
  243. if audioId > 0 {
  244. videoCondAct += ` AND video_id = 0 `
  245. videoCond += ` AND video_id = 0 `
  246. }
  247. if strings.Contains(filter, "1") && !strings.Contains(filter, "2") {
  248. audioCond += ` AND a.activity_voice_id = 0 `
  249. } else if !strings.Contains(filter, "1") && strings.Contains(filter, "2") {
  250. videoCondAct += ` AND video_id = 0 `
  251. videoCond += ` AND video_id = 0 `
  252. }
  253. if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  254. audioCond += ` AND a.activity_voice_id = 0 `
  255. videoCondAct += ` AND video_id = 0 `
  256. } else if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  257. videoCond += ` AND video_id = 0 `
  258. }
  259. //if filter == "1" {
  260. // audioCond += ` AND a.activity_voice_id = 0 `
  261. //} else if filter == "2" {
  262. // videoCondAct += ` AND video_id = 0 `
  263. // videoCond += ` AND video_id = 0 `
  264. //}
  265. videoCond += ` AND publish_status = 1`
  266. total, videoList, e = models.GetMicroRoadShowVideoPageListV8(startSize, pageSize, videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars, audioId, videoId, activityVideoId, 0)
  267. if e != nil {
  268. err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
  269. return
  270. }
  271. if total == 0 {
  272. return
  273. }
  274. var activityIds []int
  275. for _, v := range videoList {
  276. if v.Type == 2 {
  277. activityIds = append(activityIds, v.ActivityId)
  278. }
  279. }
  280. if len(activityIds) > 0 {
  281. // 获取活动关联的产业
  282. var groupCond string
  283. var groupPars []interface{}
  284. groupCond += ` AND a.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)`
  285. groupPars = append(groupPars, activityIds)
  286. groups, e := models.GetActivityIndustryRelationList(groupCond, groupPars)
  287. if e != nil {
  288. err = errors.New("获取活动产业关联列表失败, Err: " + e.Error())
  289. return
  290. }
  291. activityIndustryMap := make(map[int]int, 0)
  292. for _, v := range groups {
  293. activityIndustryMap[v.ActivityId] = v.IndustrialManagementId
  294. }
  295. for _, v := range videoList {
  296. if v.Type == 2 {
  297. v.IndustrialManagementId = activityIndustryMap[v.ActivityId]
  298. }
  299. }
  300. }
  301. respList = videoList
  302. return
  303. }
  304. // GetMicroRoadShowPageList 获取微路演列表添加活动视频 更新与8.1版本
  305. func GetMicroRoadShowPageListV12(pageSize, currentIndex, sourceId, tableType int, filter, keywords, searchType, chartPermissionIds string) (respList []*models.MicroRoadShowPageList, total int, err error) {
  306. //Type int `description:"类型: 1-活动音频; 2-活动视频; 3-产业视频; 4-系列问答"`
  307. var e error
  308. // 根据每页数据量获取音视频配比
  309. startSize := utils.StartIndex(currentIndex, pageSize)
  310. videoList := make([]*models.MicroRoadShowPageList, 0)
  311. var audioAct string // 活动音频 1
  312. var audioActPars []interface{}
  313. var videoAct string // 活动视频 2
  314. var videoActPars []interface{}
  315. //视频的处理
  316. var videoMico string //产业视频 3
  317. var videoMicoPars []interface{}
  318. var conditionAskserie string // 系列问答 4
  319. var askseriePars []interface{}
  320. if sourceId > 0 && tableType > 0 {
  321. //先给不相干的表查询ID = 0
  322. audioAct += ` AND b.chart_permission_id = 0 `
  323. videoAct += ` AND b.chart_permission_id = 0`
  324. videoMico += ` AND a.chart_permission_id = 0 `
  325. conditionAskserie += ` AND a.chart_permission_id = 0 `
  326. switch tableType {
  327. case 1:
  328. audioAct += ` OR a.activity_id = ` + strconv.Itoa(sourceId)
  329. case 2:
  330. videoAct += ` OR a.activity_id = ` + strconv.Itoa(sourceId)
  331. case 3:
  332. videoMico += ` OR a.id = ` + strconv.Itoa(sourceId)
  333. case 4:
  334. conditionAskserie += ` OR a.askserie_video_id = ` + strconv.Itoa(sourceId)
  335. }
  336. }
  337. if filter == "1" {
  338. audioAct += ` AND b.chart_permission_id = 0 `
  339. } else if filter == "2" {
  340. videoAct += ` AND b.chart_permission_id = 0`
  341. videoMico += ` AND a.chart_permission_id = 0 `
  342. conditionAskserie += ` AND a.chart_permission_id = 0 `
  343. }
  344. if searchType != "" {
  345. // @Param SearchType string int true "搜索类型: 1-路演回放; 2-问答系列; 3-调研反馈 多个用 , 隔开"
  346. videoMico += ` AND a.chart_permission_id = 0 ` // 产业视频不在搜索范围内
  347. if !strings.Contains(searchType, "1") {
  348. audioAct += ` AND b.activity_type_id != 2 `
  349. videoAct += ` AND b.activity_type_id != 2`
  350. }
  351. if !strings.Contains(searchType, "2") {
  352. conditionAskserie += ` AND a.chart_permission_id = 0 `
  353. }
  354. if !strings.Contains(searchType, "3") && !strings.Contains(searchType, "1") {
  355. audioAct += ` AND b.chart_permission_id = 0 `
  356. videoAct += ` AND b.chart_permission_id = 0 `
  357. }
  358. }
  359. if keywords != "" {
  360. keywords = "%" + keywords + "%"
  361. audioAct += ` AND a.voice_name LIKE ? `
  362. videoAct += ` AND a.video_name LIKE ? `
  363. videoMico += ` AND a.video_name LIKE ? `
  364. conditionAskserie += ` AND a.video_name LIKE ? `
  365. audioActPars = append(audioActPars, keywords)
  366. videoActPars = append(videoActPars, keywords)
  367. videoMicoPars = append(videoMicoPars, keywords)
  368. askseriePars = append(askseriePars, keywords)
  369. }
  370. //行业筛选
  371. if chartPermissionIds != "" {
  372. audioAct += ` AND b.chart_permission_id IN (` + chartPermissionIds + `)`
  373. videoAct += ` AND b.chart_permission_id IN (` + chartPermissionIds + `)`
  374. videoMico += ` AND a.chart_permission_id IN (` + chartPermissionIds + `)`
  375. conditionAskserie += ` AND a.chart_permission_id IN (` + chartPermissionIds + `)`
  376. }
  377. //发布状态
  378. audioAct += ` AND b.publish_status = 1 `
  379. videoAct += ` AND b.publish_status = 1 `
  380. videoMico += ` AND a.publish_status = 1 `
  381. conditionAskserie += ` AND a.publish_status = 1 `
  382. total, videoList, e = models.GetMicroRoadShowVideoPageListV12(startSize, pageSize, audioAct, audioActPars, videoAct, videoActPars, videoMico, videoMicoPars, conditionAskserie, askseriePars)
  383. if e != nil {
  384. err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
  385. return
  386. }
  387. respList = videoList
  388. return
  389. }
  390. // GetMicroRoadShowPageListIkWord 添加IK分词联想词 获取微路演列表添加活动视频 更新与8.1版本
  391. func CountMicroRoadShowPageListIkWord(audioId, videoId, activityVideoId int, keywordArr []string, filter string) (total int, err error) {
  392. var e error
  393. var keywords string
  394. if len(keywordArr) > 0 {
  395. keywords = KeyWordArrSqlRegexpAll(keywordArr)
  396. }
  397. //if keywords == "" {
  398. // return
  399. //}
  400. //音频的查询
  401. var audioCond string
  402. var audioPars []interface{}
  403. // 如果筛选条件为指定视频ID或只看视频则不做音频查询
  404. //if videoId > 0 || activityVideoId > 0 || filter == 1 {
  405. // audioCond += ` AND a.activity_voice_id = 0 `
  406. //} else {
  407. // 活动已发布且已结束
  408. audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
  409. if keywords != "" {
  410. audioCond += ` AND (a.voice_name REGEXP ? OR b.label REGEXP ? ) `
  411. audioPars = append(audioPars, keywords, keywords)
  412. }
  413. if audioId > 0 {
  414. audioCond += ` AND a.activity_voice_id = ?`
  415. audioPars = append(audioPars, audioId)
  416. }
  417. //视频的处理
  418. var videoCond string
  419. var videoCondAct string
  420. var videoPars []interface{}
  421. var videoParsAct []interface{}
  422. //if audioId > 0 || filter == 2 {
  423. // videoCond = ""
  424. //} else {
  425. if keywords != "" {
  426. videoCond += ` AND video_name REGEXP ?`
  427. videoPars = append(videoPars, keywords)
  428. videoCondAct += ` AND ( video_name REGEXP ? OR art.label REGEXP ? )`
  429. videoParsAct = append(videoParsAct, keywords, keywords)
  430. }
  431. if videoId > 0 {
  432. videoCond += ` AND video_id = ?`
  433. videoPars = append(videoPars, videoId)
  434. }
  435. if activityVideoId > 0 {
  436. videoCondAct += ` AND video_id = ?`
  437. videoParsAct = append(videoParsAct, activityVideoId)
  438. }
  439. //如果传了路演的或者活动的视频ID只查询一个
  440. if videoId > 0 {
  441. videoCondAct += ` AND video_id = 0 `
  442. audioCond += ` AND a.activity_voice_id = 0 `
  443. }
  444. if activityVideoId > 0 {
  445. videoCond += ` AND video_id = 0 `
  446. audioCond += ` AND a.activity_voice_id = 0 `
  447. }
  448. if audioId > 0 {
  449. videoCondAct += ` AND video_id = 0 `
  450. videoCond += ` AND video_id = 0 `
  451. }
  452. if strings.Contains(filter, "1") && !strings.Contains(filter, "2") {
  453. audioCond += ` AND a.activity_voice_id = 0 `
  454. } else if !strings.Contains(filter, "1") && strings.Contains(filter, "2") {
  455. videoCondAct += ` AND video_id = 0 `
  456. videoCond += ` AND video_id = 0 `
  457. }
  458. if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  459. audioCond += ` AND a.activity_voice_id = 0 `
  460. videoCondAct += ` AND video_id = 0 `
  461. } else if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  462. videoCond += ` AND video_id = 0 `
  463. }
  464. //
  465. //if filter == "1" {
  466. // audioCond += ` AND a.activity_voice_id = 0 `
  467. //} else if filter == "2" {
  468. // videoCondAct += ` AND video_id = 0 `
  469. // videoCond += ` AND video_id = 0 `
  470. //}
  471. videoCond += ` AND publish_status = 1`
  472. //}
  473. total, e = models.CountMicroRoadShowVideoPageList(videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars)
  474. if e != nil {
  475. err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
  476. return
  477. }
  478. return
  479. }
  480. // GetMicroRoadShowPageListIkWord 添加IK分词联想词 获取微路演列表添加活动视频 更新与8.1版本
  481. func GetMicroRoadShowPageListIkWord(startSize, pageSize, audioId, videoId, activityVideoId int, keywordArr []string, filter, keywords string) (respList []*models.MicroRoadShowPageList, err error) {
  482. videoList := make([]*models.MicroRoadShowPageList, 0)
  483. var e error
  484. var keywordsIk string
  485. if len(keywordArr) > 1 {
  486. keywordsIk = KeyWordArrSqlRegexp(keywordArr)
  487. }
  488. if keywords != "" {
  489. keywords = "%" + keywords + "%"
  490. }
  491. //音频的查询
  492. var audioCond string
  493. var audioPars []interface{}
  494. // 如果筛选条件为指定视频ID或只看视频则不做音频查询
  495. //if videoId > 0 || activityVideoId > 0 || filter == 1 {
  496. // audioCond += ` AND a.activity_voice_id = 0 `
  497. //} else {
  498. // 活动已发布且已结束
  499. audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
  500. if keywordsIk != "" {
  501. audioCond += ` AND ( a.voice_name REGEXP ? OR b.label REGEXP ? )`
  502. audioCond += ` AND ( a.voice_name NOT LIKE ? AND b.label NOT LIKE ? )`
  503. audioPars = append(audioPars, keywordsIk, keywordsIk, keywords, keywords)
  504. }
  505. if audioId > 0 {
  506. audioCond += ` AND a.activity_voice_id = ?`
  507. audioPars = append(audioPars, audioId)
  508. }
  509. //视频的处理
  510. var videoCond string
  511. var videoCondAct string
  512. var videoPars []interface{}
  513. var videoParsAct []interface{}
  514. //if audioId > 0 || filter == 2 {
  515. // videoCond = ""
  516. //} else {
  517. if keywordsIk != "" {
  518. videoCond += ` AND video_name REGEXP ?`
  519. videoPars = append(videoPars, keywordsIk)
  520. videoCondAct += ` AND ( v.video_name REGEXP ? OR art.label REGEXP ? )`
  521. videoCondAct += ` AND ( v.video_name NOT LIKE ? AND art.label NOT LIKE ? )`
  522. videoParsAct = append(videoParsAct, keywordsIk, keywordsIk, keywords, keywords)
  523. }
  524. if videoId > 0 {
  525. videoCond += ` AND video_id = ?`
  526. videoPars = append(videoPars, videoId)
  527. }
  528. if activityVideoId > 0 {
  529. videoCondAct += ` AND video_id = ?`
  530. videoParsAct = append(videoParsAct, activityVideoId)
  531. }
  532. //如果传了路演的或者活动的视频ID只查询一个
  533. if videoId > 0 {
  534. videoCondAct += ` AND video_id = 0 `
  535. audioCond += ` AND a.activity_voice_id = 0 `
  536. }
  537. if activityVideoId > 0 {
  538. videoCond += ` AND video_id = 0 `
  539. audioCond += ` AND a.activity_voice_id = 0 `
  540. }
  541. if audioId > 0 {
  542. videoCondAct += ` AND video_id = 0 `
  543. videoCond += ` AND video_id = 0 `
  544. }
  545. if strings.Contains(filter, "1") && !strings.Contains(filter, "2") {
  546. audioCond += ` AND a.activity_voice_id = 0 `
  547. } else if !strings.Contains(filter, "1") && strings.Contains(filter, "2") {
  548. videoCondAct += ` AND video_id = 0 `
  549. videoCond += ` AND video_id = 0 `
  550. }
  551. if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  552. audioCond += ` AND a.activity_voice_id = 0 `
  553. videoCondAct += ` AND video_id = 0 `
  554. } else if strings.Contains(filter, "3") && !strings.Contains(filter, "4") {
  555. videoCond += ` AND video_id = 0 `
  556. }
  557. //if filter == "1" {
  558. // audioCond += ` AND a.activity_voice_id = 0 `
  559. //} else if filter == "2" {
  560. // videoCondAct += ` AND video_id = 0 `
  561. // videoCond += ` AND video_id = 0 `
  562. //}
  563. videoCond += ` AND publish_status = 1`
  564. //}
  565. videoList, e = models.GetMicroRoadShowVideoPageListIkWord(startSize, pageSize, videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars, audioId, videoId, activityVideoId, 0)
  566. if e != nil {
  567. err = errors.New("获取微路演音视频列表失败分词, Err: " + e.Error())
  568. return
  569. }
  570. respList = videoList
  571. return
  572. }
  573. // 用户微路演视频回放操作操作行为,模板消息推送
  574. func MicroRoadshowVideoUserRmind(user *models.WxUserItem, videoId int) (err error) {
  575. defer func() {
  576. if err != nil {
  577. go utils.SendAlarmMsg("用户音视频回放操作操作行为,模板消息推送失败"+err.Error(), 2)
  578. }
  579. }()
  580. countUser, err := models.GetUserRemind(user.UserId)
  581. if err != nil {
  582. return err
  583. }
  584. if countUser == 0 {
  585. return err
  586. }
  587. var first string
  588. var keyword1 string
  589. var keyword2 string
  590. var keyword3 string
  591. var keyword4 string
  592. var remark string
  593. //获取销售手机号
  594. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  595. if err != nil && err.Error() != utils.ErrNoRow() {
  596. return err
  597. }
  598. if sellerItemQy != nil {
  599. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  600. if e != nil {
  601. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  602. return
  603. }
  604. videoInfo, e := models.GetMicroRoadshowVideoByVideoId(videoId)
  605. if e != nil {
  606. err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
  607. return
  608. }
  609. if videoInfo == nil {
  610. return
  611. }
  612. first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放微路演详视频")
  613. keyword1 = videoInfo.VideoName
  614. keyword2 = fmt.Sprint("互动:播放微路演详视频,", user.RealName, "--", user.CompanyName)
  615. remark = "点击查看微路演详情"
  616. openIdArr := make([]string, 0)
  617. for _, v := range openIdList {
  618. openIdArr = append(openIdArr, v.OpenId)
  619. }
  620. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(videoInfo.IndustryId)
  621. sendInfo := new(SendWxTemplate)
  622. sendInfo.First = first
  623. sendInfo.Keyword1 = keyword1
  624. sendInfo.Keyword2 = keyword2
  625. sendInfo.Keyword3 = keyword3
  626. sendInfo.Keyword4 = keyword4
  627. sendInfo.Remark = remark
  628. sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
  629. sendInfo.RedirectUrl = redirectUrl
  630. sendInfo.RedirectTarget = 3
  631. sendInfo.Resource = strconv.Itoa(videoId)
  632. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  633. sendInfo.OpenIdArr = openIdArr
  634. err = PublicSendTemplateMsg(sendInfo)
  635. if err != nil {
  636. return
  637. }
  638. }
  639. return
  640. }
  641. // GetindustryVideoDetailById 通过视频ID获取视频详情
  642. func GetAskserieVideoDetailById(user *models.WxUserItem, askserieVideoId int) (industryVideo *models.MicroVideoSimpleInfo, AuthInfo *models.UserPermissionAuthInfo, err error) {
  643. total, e := models.GetCygxAskserieVideoCountByVideoId(askserieVideoId)
  644. if e != nil {
  645. err = errors.New("获取产业关联的视频失败,GetCygxAskserieVideoCountByVideoId " + e.Error())
  646. return
  647. }
  648. if total == 0 {
  649. err = errors.New("视频不存在,或已取消发布")
  650. return
  651. }
  652. // 用户权限
  653. authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
  654. if e != nil {
  655. err = errors.New("获取用户权限失败,GetUserRaiPermissionInfo " + e.Error())
  656. return
  657. }
  658. videoSimple := new(models.MicroVideoSimpleInfo)
  659. // 权限
  660. var au *models.UserPermissionAuthInfo
  661. video, e := models.GetCygxAskserieVideoDetail(askserieVideoId)
  662. if e != nil {
  663. err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
  664. return
  665. } else {
  666. videoSimple.Id = video.AskserieVideoId
  667. videoSimple.Title = video.VideoName
  668. videoSimple.BackgroundImg = video.BackgroundImg
  669. videoSimple.DetailImgUrl = video.ShareImg
  670. if videoSimple.BackgroundImg == "" {
  671. // 获取默认图配置
  672. _, videoMap, _, _, e := GetMicroRoadShowDefaultImgConfig()
  673. if e != nil {
  674. err = errors.New("获取视频默认配置图失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
  675. return
  676. }
  677. videoSimple.BackgroundImg = videoMap[video.ChartPermissionId]
  678. }
  679. videoSimple.PlaySeconds = video.VideoDuration
  680. videoSimple.ResourceUrl = video.VideoUrl
  681. au = new(models.UserPermissionAuthInfo)
  682. au.SellerName = authInfo.SellerName
  683. au.SellerMobile = authInfo.SellerMobile
  684. au.HasPermission = authInfo.HasPermission
  685. au.OperationMode = authInfo.OperationMode
  686. if au.HasPermission == 1 {
  687. // 非宏观权限进一步判断是否有权限
  688. if video.ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, video.ChartPermissionName) {
  689. au.HasPermission = 2
  690. }
  691. }
  692. // 无权限的弹框提示
  693. if au.HasPermission != 1 {
  694. if au.OperationMode == UserPermissionOperationModeCall {
  695. au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
  696. } else {
  697. au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
  698. }
  699. videoSimple.ResourceUrl = ""
  700. }
  701. }
  702. videoSimple.Type = 4
  703. industryVideo = videoSimple
  704. AuthInfo = au
  705. return
  706. }