123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- package logic
- import (
- "context"
- "fmt"
- "io/ioutil"
- "net/http"
- "net/url"
- "strings"
- "app.yhyue.com/moapp/jybase/common"
- fpb "bp.jydev.jianyu360.cn/BaseService/fileCenter/rpc/pb"
- cm "bp.jydev.jianyu360.cn/CRM/application/api/common"
- "bp.jydev.jianyu360.cn/CRM/application/api/internal/svc"
- "bp.jydev.jianyu360.cn/CRM/application/api/internal/types"
- "bp.jydev.jianyu360.cn/CRM/application/service"
- "github.com/zeromicro/go-zero/core/logx"
- )
- type FileUploadLogic struct {
- logx.Logger
- ctx context.Context
- svcCtx *svc.ServiceContext
- r *http.Request
- }
- func NewFileUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *FileUploadLogic {
- return &FileUploadLogic{
- Logger: logx.WithContext(ctx),
- ctx: ctx,
- svcCtx: svcCtx,
- r: r,
- }
- }
- func (l *FileUploadLogic) FileUpload(req *types.FileUploadReq) (resp *types.Reply, err error) {
- fileTypeMap := map[int64]string{
- 1: "文件类型",
- 2: "产品介绍",
- 3: "项目方案",
- 4: "立项报告",
- 5: "报价文件",
- 6: "招标文件",
- 7: "投标文件",
- 8: "中标通知书",
- 9: "合同",
- 10: "发票",
- 11: "其他文件",
- }
- resp = &types.Reply{}
- file, header, _ := l.r.FormFile("file")
- status := 1
- defer file.Close()
- bt, _ := ioutil.ReadAll(file)
- up, err := cm.FileCenterRpc.Upload(l.ctx, &fpb.UploadReq{
- File: bt,
- OssBucketName: cm.C.OssBucketName,
- OssUrl: cm.C.OssUrl,
- Name: header.Filename,
- NeedEncryption: false,
- })
- formUrl := l.r.Form.Get("url")
- u, err := url.Parse(formUrl)
- if err != nil {
- fmt.Println("Failed to parse URL:", err)
- return
- }
- queryValues, _ := url.ParseQuery(u.RawQuery)
- fileName := queryValues.Get("fileId")
- index := strings.Index(fileName, "-")
- // 截取 "-" 后边的内容
- fileName = fileName[index+1:]
- if up == nil || up.Url == "" {
- resp.Error_code = -1
- resp.Error_msg = "上传失败"
- resp.Data = map[string]interface{}{"status": -1}
- return
- }
- key := up.Key
- size := fmt.Sprintf("%.4f", common.Float64All(header.Size)/1024)
- for {
- if strings.HasSuffix(size, "0") {
- size = strings.TrimRight(size, "0")
- continue
- }
- if strings.HasSuffix(size, ".") {
- size = strings.TrimRight(size, ".")
- break
- }
- break
- }
- fileSize := size + "KB"
- var data map[string]interface{}
- fileTypeTmp := strings.Split(fileName, ".")
- var ftype string
- if len(fileTypeTmp) > 0 && len(fileTypeTmp) == 2 {
- ftype = strings.Split(fileName, ".")[1]
- }
- fl := &service.File{
- Name: fileName, //附件名称
- Suffix: ftype, //文件后缀
- FileType: fileTypeMap[req.FileType], //文件类型,产品介绍、项目方案、立项报告、报价文件、招标文件、投标文件、中标通知书、合同、发票、其他文件
- Size: fileSize, //文件大小
- Oss: up.Url, //oss地址
- BusinessId: req.BusinessId, //业务id
- Types: req.Types, //类型;1:跟进记录-线下 2:跟进记录-线上 3:跟进记录-备忘 4:销售机会-项目文档 5:客户-客户档案
- }
- if !fl.Add() {
- status = -1
- }
- data = map[string]interface{}{
- "filename": header.Filename,
- "ftype": ftype,
- "fid": key,
- "size": fileSize,
- "ossurl": cm.C.OssUrl,
- "url": up.Url,
- "status": status,
- }
- resp.Data = data
- return
- }
|