docDownload.go 2.5 KB

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