wechatimt.go 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. package wechatimg
  2. import (
  3. "errors"
  4. "fmt"
  5. "io"
  6. "os"
  7. "strconv"
  8. "time"
  9. "wechat-conf/controllers"
  10. "wechat-conf/models/model"
  11. "wechat-conf/service/sysuser"
  12. "wechat-conf/service/wechatimg"
  13. "wechat-conf/utils"
  14. "github.com/astaxie/beego"
  15. )
  16. // WechatImgController 信息
  17. type WechatImgController struct {
  18. dao *wechatimg.WechatImgServ
  19. sdao *sysuser.SysuserServ
  20. controllers.BaseController
  21. }
  22. // Constructor 初始化 Controller
  23. // @Title Constructor
  24. // @Description 初始化 Controller, 系统自动调用
  25. func (c *WechatImgController) Constructor() {
  26. c.dao = wechatimg.NewWechatImgServ(c.Context)
  27. c.sdao = sysuser.NewSysuserServ(c.Context)
  28. }
  29. func (c *WechatImgController) GetWechatImgCount() {
  30. user := c.Context.Get("user").(*model.SysUser)
  31. appid, err := c.sdao.GetAppIdByOrgId(user.OrgId)
  32. if err != nil {
  33. c.ResponseError(err)
  34. }
  35. wxclient, err := utils.Component.GetWxClient(appid)
  36. if err != nil {
  37. utils.LogError("获取微信信息失败: " + err.Error())
  38. c.ResponseError(err)
  39. }
  40. count, err := wxclient.GetMaterialCount()
  41. if err != nil {
  42. utils.LogError("获取微信详情失败: " + err.Error())
  43. c.ResponseError(err)
  44. }
  45. matype := c.GetString(":type")
  46. c.ResponseJSON(count[matype+"_count"])
  47. }
  48. // func (c *WechatImgController) GetWechatImgList() {
  49. // user := c.Context.Get("user").(*model.SysUser)
  50. // appid, err := c.sdao.GetAppIdByOrgId(user.OrgId)
  51. // if err != nil {
  52. // c.ResponseError(err)
  53. // }
  54. // // appid := c.GetString(":appid")
  55. // wxclient, err := utils.Component.GetWxClient(appid)
  56. // if err != nil {
  57. // utils.LogError("获取微信信息失败: " + err.Error())
  58. // c.ResponseError(err)
  59. // }
  60. // // total, err := c.dao.GetWechatImgCount()
  61. // // if err != nil {
  62. // // utils.LogError("获取微信信息失败: " + err.Error())
  63. // // c.ResponseError(err)
  64. // // }
  65. // var data = map[string]string{}
  66. // data["offset"] = "0"
  67. // data["type"] = c.GetString(":type")
  68. // data["count"] = "10"
  69. // wechatImgs, err := wxclient.GetMaterialList(data)
  70. // if err != nil {
  71. // utils.LogError("获取微信详情失败: " + err.Error())
  72. // c.ResponseError(err)
  73. // }
  74. // c.ResponseJSON(wechatImgs)
  75. // }
  76. func (c *WechatImgController) GetWechatImgList() {
  77. user := c.Context.Get("user").(*model.SysUser)
  78. page, _ := c.GetInt("page")
  79. pageSize, _ := c.GetInt("pagesize")
  80. list, err := c.dao.GetWechatImgList(user.OrgId, page, pageSize)
  81. if err != nil {
  82. c.ResponseError(err)
  83. }
  84. c.ResponseJSON(list)
  85. }
  86. func (c *WechatImgController) SyncWechatImg() {
  87. user := c.Context.Get("user").(*model.SysUser)
  88. appId, err := c.sdao.GetAppIdByOrgId(user.OrgId)
  89. if err != nil {
  90. c.ResponseError(err)
  91. }
  92. // appId := c.GetString(":appid")
  93. client, err := utils.Component.GetWxClient(appId)
  94. if err != nil {
  95. c.ResponseError(err)
  96. }
  97. count, err := client.GetMaterialCount()
  98. if err != nil {
  99. c.ResponseError(err)
  100. }
  101. imgcount := count["image_count"].(float64)
  102. page := int(imgcount)/20 + 1
  103. for i := 0; i < page; i++ {
  104. var data = map[string]string{}
  105. offset := i * 20
  106. data["offset"] = strconv.Itoa(offset)
  107. data["type"] = "image"
  108. data["count"] = strconv.Itoa(20)
  109. wechatImg, err := client.GetMaterialList(data)
  110. if err != nil {
  111. c.ResponseError(err)
  112. }
  113. if wechatImg == nil {
  114. break
  115. }
  116. err = c.dao.SyncWechatImg(wechatImg, user.OrgId)
  117. if err != nil {
  118. c.ResponseError(err)
  119. }
  120. }
  121. c.ResponseJSON("同步成功")
  122. }
  123. func (c *WechatImgController) AddNewImg() {
  124. file, head, err := c.Ctx.Request.FormFile("media")
  125. if err != nil {
  126. beego.Error(err)
  127. c.ResponseError(err)
  128. }
  129. defer file.Close()
  130. imgurl := "./upload/" + head.Filename
  131. //创建文件
  132. fW, err := os.Create(imgurl)
  133. if err != nil {
  134. fmt.Println("文件创建失败")
  135. return
  136. }
  137. defer fW.Close()
  138. _, err = io.Copy(fW, file)
  139. if err != nil {
  140. fmt.Println("文件保存失败")
  141. return
  142. }
  143. url, err := c.FileUploadForMatrial()
  144. if err != nil {
  145. c.ResponseError(err)
  146. }
  147. user := c.Context.Get("user").(*model.SysUser)
  148. appId, err := c.sdao.GetAppIdByOrgId(user.OrgId)
  149. if err != nil {
  150. c.ResponseError(err)
  151. }
  152. client, err := utils.Component.GetWxClient(appId)
  153. if err != nil {
  154. c.ResponseError(err)
  155. }
  156. id, err := UploaImage(client.GetToken(), imgurl)
  157. var img = model.TaWechatImg{
  158. MediaId: id,
  159. Url: beego.AppConfig.String("host") + head.Filename,
  160. Name: head.Filename,
  161. UpdateTime: time.Now(),
  162. OrgId: user.OrgId,
  163. }
  164. err = c.dao.AddWechatImg(img)
  165. if err != nil {
  166. c.ResponseError(err)
  167. }
  168. c.ResponseJSON(map[string]interface{}{
  169. "media_id": img.MediaId,
  170. "url": url,
  171. })
  172. }
  173. func (c *WechatImgController) DeleteImg() {
  174. user := c.Context.Get("user").(*model.SysUser)
  175. appId, err := c.sdao.GetAppIdByOrgId(user.OrgId)
  176. if err != nil {
  177. c.ResponseError(err)
  178. }
  179. // appId := c.GetString(":appid")
  180. client, err := utils.Component.GetWxClient(appId)
  181. if err != nil {
  182. c.ResponseError(err)
  183. }
  184. mediaId := c.GetString(":mediaId")
  185. err = c.dao.DeleteImg(mediaId)
  186. if err != nil {
  187. c.ResponseError(err)
  188. }
  189. _, err = client.DelMaterial(mediaId)
  190. if err != nil {
  191. c.ResponseError(err)
  192. }
  193. c.ResponseJSON("删除成功")
  194. }
  195. func (c *BaseController) FileUploadForMatrial() (string, error) {
  196. file, err := c.uploadFileToOSS("media")
  197. if err != nil {
  198. return nil, err
  199. }
  200. return file, nil
  201. }
  202. func (c *BaseController) uploadFileToOSS(field string) (string, error) {
  203. aliConf, ok := c.Configer[AliYunConf]
  204. if !ok {
  205. return "", errors.New("没有找到阿里云相关配置")
  206. }
  207. endpoint := aliConf.String("oss::Endpoint")
  208. accessKeyID := aliConf.String("oss::AccessKeyId")
  209. accessKeySecret := aliConf.String("oss::AccessKeySecret")
  210. bucket := aliConf.String("oss::Bucket")
  211. aliCli, err := utils.GetOssClient(endpoint, accessKeyID, accessKeySecret)
  212. if err != nil {
  213. return "", err
  214. }
  215. fNameExtra := strconv.FormatInt(time.Now().Unix(), 10)
  216. fileURL, err := utils.UploadFileToBucket(aliCli, c.Ctx.Request, bucket, field, fNameExtra)
  217. if err != nil {
  218. return "", err
  219. }
  220. return fileURL, nil
  221. }