micro_roadshow.go 32 KB

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