docDownload.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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/jybase/redis"
  12. "app.yhyue.com/moapp/jyfs/rpc/filesystem"
  13. "encoding/json"
  14. "fmt"
  15. "net/url"
  16. "strings"
  17. "time"
  18. )
  19. type DRes struct {
  20. Msg string
  21. Code int64
  22. }
  23. func DocDownload(in *partnerlib.UserDownloadRequest) (res *partnerlib.UDRes, err error) {
  24. res = new(partnerlib.UDRes)
  25. var (
  26. b []byte
  27. isJson bool
  28. id = strings.ReplaceAll(in.DocId, fmt.Sprintf("%s-", entity.PartnerName), "")
  29. )
  30. 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{
  31. "productId": []string{id},
  32. "userId": []string{common.InterfaceToStr(in.PositionId)},
  33. })
  34. b, err, isJson = h.HttpFunc()
  35. go h.SaveDocinLogger(b, err, "req")
  36. if err == nil {
  37. //豆丁同步数据到mongo
  38. go h.SaveDocinLogger(b, err, "res")
  39. if isJson {
  40. if err = json.Unmarshal(b, &res); err == nil {
  41. res.Msg = entity.Res[res.Msg]
  42. return
  43. }
  44. } else {
  45. //获取文件信息
  46. docInfo := partner.DocsFindOne(in.DocId)
  47. if docInfo.DocName != "" {
  48. //查看oss服务器是否已存在此文档
  49. if res.OssDocId = docInfo.OssDocId; res.OssDocId != "" {
  50. return
  51. }
  52. fileId := util.GetHashKey(b)
  53. ossId := fmt.Sprintf("%s.%s", fileId, docInfo.DocFileSuffix)
  54. go func(_ossId, _fileId string, _docInfo *model.Docin) {
  55. //并发ing
  56. entity.FileUploadChanel <- true
  57. defer func() {
  58. <-entity.FileUploadChanel
  59. }()
  60. fileUploadCache := fmt.Sprintf("file_upload_ing_%s", _ossId)
  61. redis.Put(entity.RedisCode, fileUploadCache, _ossId, 2*60*60)
  62. defer func() {
  63. redis.Del(entity.RedisCode, fileUploadCache)
  64. }()
  65. //获取附件后上传oss
  66. fileRes := FileUpload(&filesystem.SaveFileReq{
  67. Domain: IC.C.OssInfo.BucketName,
  68. FileId: _ossId,
  69. Meta: map[string]string{
  70. "docName": _docInfo.DocName,
  71. "docSuffix": _docInfo.DocFileSuffix,
  72. "docSize": fmt.Sprintf("%d", _docInfo.DocFileSize),
  73. },
  74. RawFileContent: b,
  75. })
  76. if fileRes.OssDocId == "" {
  77. err = fmt.Errorf("文档上传失败")
  78. warn.SendMsgByWXURL(fmt.Sprintf("文档id:%s,文档名称:%s,上传到oss异常:%s", _docInfo.Id, _docInfo.DocName, err.Error()))
  79. }
  80. }(ossId, fileId, docInfo)
  81. //更新doc
  82. if errUpdate := partner.DocsUpdate(0, model.Doc{
  83. Id: in.DocId,
  84. OssDocId: ossId,
  85. OssPdfId: ossId,
  86. OssTxtId: fileId,
  87. UpdateDate: time.Now(),
  88. }); errUpdate != nil {
  89. warn.SendMsgByWXURL(fmt.Sprintf("文档id:%s,文档名称:%s 上传 tidb doc 异常:%s", docInfo.Id, docInfo.DocName, err.Error()))
  90. }
  91. res.OssDocId = ossId
  92. return
  93. } else {
  94. err = fmt.Errorf("获取文档信息异常")
  95. }
  96. }
  97. }
  98. res.Msg = err.Error()
  99. res.Code = -1
  100. return
  101. }