docDownload.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package service
  2. import (
  3. "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/entity"
  4. IC "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/init"
  5. "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/type/partnerlib"
  6. "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/util"
  7. "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/warn"
  8. "app.yhyue.com/moapp/jy_docs/services/model"
  9. "app.yhyue.com/moapp/jy_docs/services/partner"
  10. "app.yhyue.com/moapp/jybase/common"
  11. "app.yhyue.com/moapp/jyfs/rpc/filesystem"
  12. "encoding/json"
  13. "fmt"
  14. "net/url"
  15. "strings"
  16. )
  17. type DRes struct {
  18. Msg string
  19. Code int64
  20. }
  21. func DocDownload(in *partnerlib.UserDownloadRequest) (res *partnerlib.UDRes, err error) {
  22. res = new(partnerlib.UDRes)
  23. var (
  24. b []byte
  25. isJson bool
  26. id = strings.ReplaceAll(in.DocId, fmt.Sprintf("%s-", entity.PartnerName), "")
  27. )
  28. h := NewHH(IC.I.Docin.Name, IC.I.Docin.Host, IC.I.Docin.DocDownload.Name, IC.I.Docin.DocDownload.Pathname, IC.I.Docin.DocDownload.Method, url.Values{
  29. "productId": []string{id},
  30. "userId": []string{common.InterfaceToStr(in.PositionId)},
  31. })
  32. b, err, isJson = h.HttpFunc()
  33. go h.SaveDocinLogger(b, err, "req")
  34. if err == nil {
  35. //豆丁同步数据到mongo
  36. go h.SaveDocinLogger(b, err, "res")
  37. if isJson {
  38. if err = json.Unmarshal(b, &res); err == nil {
  39. res.Msg = entity.Res[res.Msg]
  40. return
  41. }
  42. } else {
  43. //获取文件信息
  44. docInfo := partner.DocsFindOne(in.DocId)
  45. if docInfo.DocName != "" {
  46. //查看oss服务器是否已存在此文档
  47. if res.OssDocId = docInfo.OssDocId; res.OssDocId != "" {
  48. return
  49. }
  50. fileId := util.GetHashKey(b)
  51. //获取附件后上传oss
  52. fileRes := FileUpload(&filesystem.SaveFileReq{
  53. Domain: IC.C.OssInfo.BucketName,
  54. FileId: fmt.Sprintf("%s.%s", fileId, docInfo.DocFileSuffix),
  55. Meta: map[string]string{
  56. "docName": docInfo.DocName,
  57. "docSuffix": docInfo.DocFileSuffix,
  58. "docSize": fmt.Sprintf("%d", docInfo.DocFileSize),
  59. },
  60. RawFileContent: b,
  61. })
  62. if fileRes.OssDocId != "" {
  63. res.OssDocId = fileId
  64. //更新doc
  65. if errUpdate := partner.DocsUpdate(0, model.Doc{Id: in.DocId, OssDocId: res.OssDocId}); errUpdate != nil {
  66. warn.SendMsgByWXURL(fmt.Sprintf("文档id:%s,文档名称:%s 上传tidb doc 异常:%s", docInfo.Id, docInfo.DocName, err.Error()))
  67. }
  68. return
  69. } else {
  70. err = fmt.Errorf("文档上传失败")
  71. warn.SendMsgByWXURL(fmt.Sprintf("文档id:%s,文档名称:%s,上传到oss异常:%s", docInfo.Id, docInfo.DocName, err.Error()))
  72. }
  73. } else {
  74. err = fmt.Errorf("获取文档信息异常")
  75. }
  76. }
  77. }
  78. res.Msg = err.Error()
  79. res.Code = -1
  80. return
  81. }