public.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. package controller
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "hongze/hongze_yb/controller/response"
  6. "hongze/hongze_yb/global"
  7. "hongze/hongze_yb/logic"
  8. "hongze/hongze_yb/models/request"
  9. respond "hongze/hongze_yb/models/response"
  10. "hongze/hongze_yb/models/tables/yb_suncode_pars"
  11. "hongze/hongze_yb/services"
  12. "hongze/hongze_yb/services/alarm_msg"
  13. "hongze/hongze_yb/utils"
  14. "io/ioutil"
  15. "os"
  16. "path"
  17. "time"
  18. )
  19. // GetApplyVarietyList
  20. // @Tags 公共模块
  21. // @Summary 获取所有可以申请的品种权限列表
  22. // @Description 获取所有可以申请的品种权限列表
  23. // @Security ApiKeyAuth
  24. // @securityDefinitions.basic BasicAuth
  25. // @Param Authorization header string true "微信登录后获取到的token"
  26. // @Accept json
  27. // @Product json
  28. // @Success 200 {object} []logic.ApplyVariety "获取成功"
  29. // @failure 400 {string} string "获取失败"
  30. // @Router /public/get_apply_variety_list [get]
  31. func GetApplyVarietyList(c *gin.Context) {
  32. list := logic.GetApplyVarietyList()
  33. response.OkData("获取成功", list, c)
  34. }
  35. // Upload
  36. // @Tags 公共模块
  37. // @Summary 文件上传
  38. // @Description 文件上传
  39. // @Security ApiKeyAuth
  40. // @securityDefinitions.basic BasicAuth
  41. // @Param Authorization header string true "微信登录后获取到的token"
  42. // @Param file formData file false "操作描述"
  43. // @Accept multipart/form-data
  44. // @Product json
  45. // @Success 200 {object} string "上传成功"
  46. // @failure 400 {string} string "上传失败,存储目录创建失败"
  47. // @Router /public/upload [post]
  48. func Upload(c *gin.Context) {
  49. // 单文件
  50. file, err := c.FormFile("file")
  51. fmt.Println("file", file)
  52. if err != nil {
  53. response.FailData("获取资源失败", "获取资源失败,Err:"+err.Error(), c)
  54. return
  55. }
  56. ext := path.Ext(file.Filename)
  57. dateDir := time.Now().Format("20060102")
  58. uploadDir := global.CONFIG.Serve.StaticDir + "hongze/" + dateDir
  59. err = os.MkdirAll(uploadDir, 0766)
  60. if err != nil {
  61. response.FailData("存储目录创建失败", "存储目录创建失败,Err:"+err.Error(), c)
  62. return
  63. }
  64. randStr := utils.GetRandStringNoSpecialChar(28)
  65. fileName := randStr + ext
  66. fpath := uploadDir + "/" + fileName
  67. // 上传文件至指定目录
  68. err = c.SaveUploadedFile(file, fpath)
  69. if err != nil {
  70. response.FailData("文件上传失败", "文件上传失败,Err:"+err.Error(), c)
  71. return
  72. }
  73. defer func() {
  74. os.Remove(fpath)
  75. }()
  76. //上传到阿里云
  77. resourceUrl, err := services.UploadAliyun(fileName, fpath)
  78. if err != nil {
  79. response.FailData("文件上传失败", "文件上传失败,Err:"+err.Error(), c)
  80. return
  81. }
  82. response.OkData("文件上传成功", resourceUrl, c)
  83. }
  84. // GetSharePoster
  85. // @Tags 公共模块
  86. // @Summary 获取分享海报
  87. // @Description 获取分享海报
  88. // @Security ApiKeyAuth
  89. // @securityDefinitions.basic BasicAuth
  90. // @Param request body services.SharePosterReq true "type json string"
  91. // @Accept application/json
  92. // @Success 200 {object} string "获取成功"
  93. // @failure 400 {string} string "获取失败"
  94. // @Router /public/get_share_poster [post]
  95. func GetSharePoster(c *gin.Context) {
  96. // 是否为备用小程序
  97. copyYb := c.Request.Header.Get("CopyYb")
  98. var req services.SharePosterReq
  99. if c.ShouldBind(&req) != nil {
  100. response.Fail("参数异常", c)
  101. return
  102. }
  103. if req.Source == "" {
  104. response.Fail("来源有误", c)
  105. return
  106. }
  107. imgUrl, err := services.CreatePosterFromSourceV2(req.CodePage, req.CodeScene, req.Source, req.Version, req.Pars, copyYb)
  108. if err != nil {
  109. response.FailData("获取分享海报失败", "获取分享海报失败, Err: "+err.Error(), c)
  110. return
  111. }
  112. response.OkData("获取成功", imgUrl, c)
  113. }
  114. // GetSuncodeScene 获取小程序太阳码scene值
  115. // @Tags 公共模块
  116. // @Summary 获取小程序太阳码scene值
  117. // @Description 获取小程序太阳码scene值
  118. // @Security ApiKeyAuth
  119. // @Param Authorization header string true "Bearer 31a165baebe6dec616b1f8f3207b4273"
  120. // @Param scene_key query string true "scene_key值"
  121. // @Success 200 {string} string "获取成功"
  122. // @failure 400 {string} string "获取失败"
  123. // @Router /public/get_suncode_scene [get]
  124. func GetSuncodeScene(c *gin.Context) {
  125. reqKey := c.DefaultQuery("scene_key", "")
  126. if reqKey == "" {
  127. response.Fail("参数有误", c)
  128. }
  129. pars, err := yb_suncode_pars.GetSceneByKey(reqKey)
  130. if err != nil && err != utils.ErrNoRow {
  131. response.FailMsg("获取失败", "GetSuncodeScene获取失败, Err: "+err.Error(), c)
  132. return
  133. }
  134. scene := ""
  135. if pars != nil {
  136. scene = pars.Scene
  137. }
  138. response.OkData("获取成功", scene, c)
  139. }
  140. // GetVarietyTagTree 标签树
  141. // @Tags 公共模块
  142. // @Summary 标签树
  143. // @Description 标签树
  144. // @Security ApiKeyAuth
  145. // @Param Authorization header string true "Bearer 31a165baebe6dec616b1f8f3207b4273"
  146. // @Param scene_key query string true "scene_key值"
  147. // @Success 200 {string} string "获取成功"
  148. // @failure 400 {string} string "获取失败"
  149. // @Router /public/get_variety_tag_tree [get]
  150. func GetVarietyTagTree(c *gin.Context) {
  151. list, err := services.GetTagTree()
  152. if err != nil {
  153. response.FailMsg("获取标签树失败", "获取标签树失败, Err: "+err.Error(), c)
  154. return
  155. }
  156. response.OkData("获取成功", list, c)
  157. }
  158. // WechatWarning 小程序前端预警提示
  159. // @Tags 公共模块
  160. // @Description 小程序前端预警提示
  161. // @Param content query string true "预警信息"
  162. // @Success 200 {string} string "操作成功"
  163. // @failure 400 {string} string "操作失败"
  164. // @Router /public/wechat_warning [post]
  165. func WechatWarning(c *gin.Context) {
  166. var req request.WechatWarningReq
  167. if err := c.Bind(&req); err != nil {
  168. response.Fail("参数有误", c)
  169. return
  170. }
  171. if req.Content != "" {
  172. tips := fmt.Sprintf("研报小程序前端报错预警-ErrMsg: %s", req.Content)
  173. global.LOG.Warning(tips)
  174. go alarm_msg.SendAlarmMsg(tips, 2)
  175. }
  176. response.Ok("操作成功", c)
  177. }
  178. // UploadAudio 上传音频文件
  179. // @Tags 公共模块
  180. // @Description 上传音频文件
  181. // @Param file query string true "音频文件"
  182. // @Success 200 {string} string "上传成功"
  183. // @failure 400 {string} string "上传失败"
  184. // @Router /public/upload_audio [post]
  185. func UploadAudio(c *gin.Context) {
  186. file, err := c.FormFile("file")
  187. if err != nil {
  188. response.FailMsg("获取资源失败", "获取资源失败, Err:"+err.Error(), c)
  189. return
  190. }
  191. ext := path.Ext(file.Filename)
  192. if ext != ".mp3" {
  193. response.Fail("暂仅支持mp3格式", c)
  194. return
  195. }
  196. dateDir := time.Now().Format("20060102")
  197. localDir := global.CONFIG.Serve.StaticDir + "hongze/" + dateDir
  198. if err := os.MkdirAll(localDir, 0766); err != nil {
  199. response.FailMsg("存储目录创建失败", "UploadAudio 存储目录创建失败, Err:"+err.Error(), c)
  200. return
  201. }
  202. randStr := utils.GetRandStringNoSpecialChar(28)
  203. filtName := randStr + ext
  204. fpath := localDir + "/" + filtName
  205. defer func() {
  206. _ = os.Remove(fpath)
  207. }()
  208. // 生成文件至指定目录
  209. if err := c.SaveUploadedFile(file, fpath); err != nil {
  210. response.FailMsg("文件生成失败", "UploadAudio 文件生成失败, Err:"+err.Error(), c)
  211. return
  212. }
  213. // 获取音频文件时长
  214. fByte, err := ioutil.ReadFile(fpath)
  215. if err != nil {
  216. response.FailMsg("读取本地文件失败", "UploadAudio 读取本地文件失败", c)
  217. return
  218. }
  219. if len(fByte) <= 0 {
  220. response.FailMsg("文件大小有误", "UploadAudio 文件大小有误", c)
  221. return
  222. }
  223. seconds, err := services.GetMP3PlayDuration(fByte)
  224. if err != nil {
  225. response.FailMsg("读取文件时长失败", "UploadAudio 读取文件时长失败", c)
  226. return
  227. }
  228. // 音频大小MB
  229. fi, err := os.Stat(fpath)
  230. if err != nil {
  231. response.FailMsg("读取文件大小失败", "UploadAudio 读取文件大小失败", c)
  232. return
  233. }
  234. mb := utils.Bit2MB(fi.Size(), 2)
  235. // 上传文件至阿里云
  236. ossDir := "yb_wx/audio/"
  237. resourceUrl, err := services.UploadAliyunToDir(filtName, fpath, ossDir)
  238. if err != nil {
  239. response.FailMsg("文件上传失败", "UploadAudio 文件上传失败, Err:"+err.Error(), c)
  240. return
  241. }
  242. resp := &respond.CommunityQuestionAudioUpload{
  243. AudioURL: resourceUrl,
  244. AudioPlaySeconds: fmt.Sprint(seconds),
  245. AudioSize: fmt.Sprint(mb),
  246. }
  247. response.OkData("上传成功", resp, c)
  248. }