123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package service
- import (
- "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/conversion"
- "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/entity"
- IC "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/init"
- "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/type/partnerlib"
- "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/util"
- "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/warn"
- "app.yhyue.com/moapp/jy_docs/services/model"
- "app.yhyue.com/moapp/jy_docs/services/partner"
- "app.yhyue.com/moapp/jybase/common"
- "app.yhyue.com/moapp/jybase/redis"
- "app.yhyue.com/moapp/jyfs/rpc/filesystem"
- "encoding/json"
- "fmt"
- "net/url"
- "strings"
- "time"
- )
- type DRes struct {
- Msg string
- Code int64
- }
- func DocDownload(in *partnerlib.UserDownloadRequest) (res *partnerlib.UDRes, err error) {
- res = new(partnerlib.UDRes)
- var (
- b []byte
- isJson bool
- id = strings.ReplaceAll(in.DocId, fmt.Sprintf("%s-", entity.PartnerName), "")
- )
- 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{
- "productId": []string{id},
- "userId": []string{common.InterfaceToStr(in.PositionId)},
- })
- b, err, isJson = h.HttpFunc()
- go h.SaveDocinLogger(b, err, "req")
- if err == nil {
- //豆丁同步数据到mongo
- go h.SaveDocinLogger(b, err, "res")
- if isJson {
- if err = json.Unmarshal(b, &res); err == nil {
- res.Msg = entity.Res[res.Msg]
- return
- }
- } else {
- //获取文件信息
- docInfo := partner.DocsFindOne(in.DocId)
- if docInfo.DocName != "" {
- //查看oss服务器是否已存在此文档
- if res.OssDocId = docInfo.OssDocId; res.OssDocId != "" {
- return
- }
- fileId := util.GetHashKey(b)
- ossId := fmt.Sprintf("%s.%s", fileId, docInfo.DocFileSuffix)
- fileUploadCache := fmt.Sprintf("file_upload_ing_%s", ossId)
- redis.Put(entity.RedisCode, fileUploadCache, ossId, 60*60)
- go func(_ossId, _fileId, fileUploadCache string, _docInfo *model.Docin) {
- //并发ing
- entity.FileUploadChanel <- true
- defer func() {
- <-entity.FileUploadChanel
- }()
- defer func() {
- redis.Del(entity.RedisCode, fileUploadCache)
- }()
- //获取附件后上传oss
- fileRes := util.FileUpload(&filesystem.SaveFileReq{
- Domain: IC.C.OssInfo.BucketName,
- FileId: _ossId,
- Meta: map[string]string{
- "docName": _docInfo.DocName,
- "docSuffix": _docInfo.DocFileSuffix,
- "docSize": fmt.Sprintf("%d", _docInfo.DocFileSize),
- },
- RawFileContent: b,
- Charset: util.GetFileChardet(b),
- })
- if fileRes.OssDocId == "" {
- err = fmt.Errorf("文档上传失败")
- warn.SendMsgByWXURL(fmt.Sprintf("文档id:%s,文档名称:%s,上传到oss异常:%s", _docInfo.Id, _docInfo.DocName, err.Error()))
- } else if IC.C.Conversion.Switch && IC.C.Conversion.DocFormat[_docInfo.DocFileSuffix] {
- //转换pdf
- conversion.NewConversion(_docInfo.Id, _docInfo.DocName, _fileId, _docInfo.DocFileSuffix, b, _docInfo.DocFileSize).ToConversion()
- }
- }(ossId, fileId, fileUploadCache, docInfo)
- //更新doc
- if errUpdate := partner.DocsUpdate(0, model.Doc{
- Id: in.DocId,
- OssDocId: ossId,
- OssPdfId: ossId,
- OssTxtId: fileId,
- UpdateDate: time.Now(),
- }); errUpdate != nil {
- warn.SendMsgByWXURL(fmt.Sprintf("文档id:%s,文档名称:%s 上传 tidb doc 异常:%s", docInfo.Id, docInfo.DocName, err.Error()))
- }
- res.OssDocId = ossId
- return
- } else {
- err = fmt.Errorf("获取文档信息异常")
- }
- }
- }
- res.Msg = err.Error()
- res.Code = -1
- return
- }
|