docDownload.go 2.7 KB

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