voice_broadcast.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_yb/global"
  7. "hongze/hongze_yb/models/response"
  8. admin2 "hongze/hongze_yb/models/tables/admin"
  9. "hongze/hongze_yb/models/tables/company_product"
  10. "hongze/hongze_yb/models/tables/sys_role_admin"
  11. "hongze/hongze_yb/models/tables/voice_broadcast"
  12. "hongze/hongze_yb/models/tables/voice_broadcast_statistics"
  13. "hongze/hongze_yb/models/tables/voice_section"
  14. "hongze/hongze_yb/services/user"
  15. "hongze/hongze_yb/utils"
  16. "time"
  17. )
  18. func GetVoiceBroadcastList(pageindex, pagesize, sectionId, broadcastId int, userInfo user.UserInfo) (list []response.Broadcast, err error) {
  19. if broadcastId == 0 {
  20. if sectionId == 0 {
  21. broadList, e := voice_broadcast.GetBroadcast(pageindex, pagesize)
  22. if e != nil {
  23. e = errors.New("获取语音播报列表失败 Err:" + e.Error())
  24. }
  25. for _, item := range broadList {
  26. var respItem response.Broadcast
  27. respItem = response.Broadcast{
  28. BroadcastId: item.BroadcastId,
  29. BroadcastName: item.BroadcastName,
  30. SectionId: item.SectionId,
  31. SectionName: item.SectionName,
  32. VarietyId: item.VarietyId,
  33. VarietyName: item.VarietyName,
  34. AuthorId: item.AuthorId,
  35. Author: item.Author,
  36. ImgUrl: item.ImgUrl,
  37. VoiceUrl: item.VoiceUrl,
  38. VoicePlaySeconds: item.VoicePlaySeconds,
  39. VoiceSize: item.VoiceSize,
  40. CreateTime: item.CreateTime,
  41. IsAuthor: false,
  42. }
  43. if int(userInfo.UserID) == item.AuthorId {
  44. respItem.IsAuthor = true
  45. }
  46. list = append(list, respItem)
  47. }
  48. err = e
  49. return
  50. }
  51. broadList, e := voice_broadcast.GetBroadcastByCondition(pageindex, pagesize, sectionId)
  52. if e != nil {
  53. e = errors.New("获取语音播报列表失败 Err:" + e.Error())
  54. }
  55. for _, item := range broadList {
  56. var respItem response.Broadcast
  57. respItem = response.Broadcast{
  58. BroadcastId: item.BroadcastId,
  59. BroadcastName: item.BroadcastName,
  60. SectionId: item.SectionId,
  61. SectionName: item.SectionName,
  62. VarietyId: item.VarietyId,
  63. VarietyName: item.VarietyName,
  64. AuthorId: item.AuthorId,
  65. Author: item.Author,
  66. ImgUrl: item.ImgUrl,
  67. VoiceUrl: item.VoiceUrl,
  68. VoicePlaySeconds: item.VoicePlaySeconds,
  69. VoiceSize: item.VoiceSize,
  70. CreateTime: item.CreateTime,
  71. IsAuthor: false,
  72. }
  73. if int(userInfo.UserID) == item.AuthorId {
  74. respItem.IsAuthor = true
  75. }
  76. list = append(list, respItem)
  77. }
  78. err = e
  79. return
  80. } else {
  81. broadList, e := voice_broadcast.GetBroadcastByIdAndPage(pageindex, pagesize, broadcastId)
  82. if e != nil {
  83. e = errors.New("获取语音播报列表失败 Err:" + e.Error())
  84. }
  85. for _, item := range broadList {
  86. var respItem response.Broadcast
  87. respItem = response.Broadcast{
  88. BroadcastId: item.BroadcastId,
  89. BroadcastName: item.BroadcastName,
  90. SectionId: item.SectionId,
  91. SectionName: item.SectionName,
  92. VarietyId: item.VarietyId,
  93. VarietyName: item.VarietyName,
  94. AuthorId: item.AuthorId,
  95. Author: item.Author,
  96. ImgUrl: item.ImgUrl,
  97. VoiceUrl: item.VoiceUrl,
  98. VoicePlaySeconds: item.VoicePlaySeconds,
  99. VoiceSize: item.VoiceSize,
  100. CreateTime: item.CreateTime,
  101. IsAuthor: false,
  102. }
  103. if int(userInfo.UserID) == item.AuthorId {
  104. respItem.IsAuthor = true
  105. }
  106. list = append(list, respItem)
  107. }
  108. err = e
  109. return
  110. }
  111. }
  112. // GetVoiceAdminByUserInfo 判断当前用户是否为语音管理员
  113. func GetVoiceAdminByUserInfo(userInfo user.UserInfo) (ok bool, adminInfo *admin2.Admin, err error) {
  114. mobile := userInfo.Mobile
  115. var email string
  116. if mobile == "" {
  117. // 用户有可能是通过邮箱登录
  118. email = userInfo.Email
  119. if email == "" {
  120. return
  121. }
  122. }
  123. if userInfo.CompanyID != 16 {
  124. return
  125. }
  126. if mobile != "" {
  127. adminInfo, err = admin2.GetAdminByMobile(mobile)
  128. if err != nil {
  129. if err == utils.ErrNoRow {
  130. err = nil
  131. return
  132. }
  133. return
  134. }
  135. } else {
  136. adminInfo, err = admin2.GetAdminByEmail(email)
  137. if err != nil {
  138. if err == utils.ErrNoRow {
  139. err = nil
  140. return
  141. }
  142. return
  143. }
  144. }
  145. if adminInfo.Enabled != 1 {
  146. return
  147. }
  148. _, err = sys_role_admin.GetVoiceAdmin(int(adminInfo.AdminID))
  149. if err != nil && err != utils.ErrNoRow {
  150. return
  151. }
  152. if err == utils.ErrNoRow {
  153. ok = false
  154. return
  155. }
  156. ok = true
  157. return
  158. }
  159. func AddBroadcastRecord(userinfo user.UserInfo, source, broadcastId int) {
  160. var err error
  161. defer func() {
  162. if err != nil {
  163. global.LOG.Critical(fmt.Sprintf("AddBroadcastLog: userId=%d, err:%s", userinfo.UserID, err.Error()))
  164. }
  165. }()
  166. companyProduct, err := company_product.GetByCompany2ProductId(userinfo.CompanyID, 1)
  167. if err != nil {
  168. return
  169. }
  170. broadcast, err := voice_broadcast.GetBroadcastById(broadcastId)
  171. if err != nil {
  172. return
  173. }
  174. voiceBroadcastStatistics := voice_broadcast_statistics.VoiceBroadcastStatistics{
  175. CompanyId: companyProduct.CompanyID,
  176. CompanyName: companyProduct.CompanyName,
  177. UserId: int(userinfo.UserID),
  178. RealName: userinfo.RealName,
  179. Mobile: userinfo.Mobile,
  180. Email: userinfo.Email,
  181. CompanyStatus: companyProduct.Status,
  182. Source: source,
  183. BroadcastId: broadcastId,
  184. BroadcastName: broadcast.BroadcastName,
  185. SectionId: broadcast.SectionId,
  186. SectionName: broadcast.SectionName,
  187. VarietyId: broadcast.VarietyId,
  188. VarietyName: broadcast.VarietyName,
  189. AuthorId: broadcast.AuthorId,
  190. Author: broadcast.Author,
  191. PublishTime: broadcast.CreateTime,
  192. CreateTime: time.Now().Format(utils.FormatDateTime),
  193. }
  194. err = voiceBroadcastStatistics.AddBroadcastStatistics()
  195. if err != nil {
  196. return
  197. }
  198. return
  199. }
  200. // VoiceBroadcastShareImgPars 语音播报分享图参数
  201. type VoiceBroadcastShareImgPars struct {
  202. BackgroundImg string `json:"background_img"`
  203. Title string `json:"title"`
  204. CreateTime string `json:"create_time"`
  205. }
  206. // UpdateVoiceBroadcastImgUrl 更新历史语音播报分享图
  207. func UpdateVoiceBroadcastImgUrl() (err error) {
  208. defer func() {
  209. if err != nil {
  210. fmt.Println(err.Error())
  211. }
  212. }()
  213. // 获取语音播报列表
  214. list, e := voice_broadcast.GetBroadcastList()
  215. if e != nil {
  216. err = errors.New("获取语音播报列表失败")
  217. return
  218. }
  219. // 获取语音播报板块分享图
  220. sectionList, e := voice_section.GetVoiceSection()
  221. if e != nil {
  222. err = errors.New("获取语音播报列表失败")
  223. return
  224. }
  225. sectionMap := make(map[int]string, 0)
  226. sectionNameMap := make(map[int]string, 0)
  227. for _, s := range sectionList {
  228. sectionMap[s.SectionId] = s.ImgUrl
  229. sectionNameMap[s.SectionId] = s.SectionName
  230. }
  231. // 生成语音分享图并更新
  232. listLen := len(list)
  233. fmt.Println("待更新数:", listLen)
  234. updateCols := []string{"ImgUrl"}
  235. for i := 0; i < listLen; i++ {
  236. item := list[i]
  237. fmt.Println("正在更新-Id:", item.BroadcastId)
  238. imgUrl := sectionMap[item.SectionId]
  239. if imgUrl == "" {
  240. fmt.Println("背景图为空-Id:", item.BroadcastId)
  241. continue
  242. }
  243. sectionName := sectionNameMap[item.SectionId]
  244. timeDate := item.CreateTime[0:10]
  245. pars := VoiceBroadcastShareImgPars{
  246. BackgroundImg: imgUrl,
  247. Title: sectionName,
  248. CreateTime: timeDate,
  249. }
  250. parsByte, e := json.Marshal(pars)
  251. if e != nil {
  252. err = errors.New("分享图参数有误")
  253. return
  254. }
  255. shareImg, e := GetDynamicShareImg(VoiceBroadcastShareImgSource, string(parsByte))
  256. //fmt.Println(shareImg)
  257. if e != nil {
  258. err = errors.New("生成分享图失败")
  259. return
  260. }
  261. item.ImgUrl = shareImg
  262. if e = item.Update(updateCols); e != nil {
  263. err = errors.New("更新语音播报失败")
  264. return
  265. }
  266. fmt.Println("更新成功-Id:", item.BroadcastId)
  267. }
  268. return
  269. }