docDownload.go 3.8 KB

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