소스 검색

wip:购买会员及文档

wangshan 1 년 전
부모
커밋
5aab4d4823

+ 6 - 2
rpc/partnerlib/crontab/service/docinInfo.go

@@ -38,10 +38,14 @@ func InsertDocinInfos(b []byte) (err error, lastId int64, expectTotal, actualTot
 					price             = int(v.Price * entity.Multiple)                   //价格转换
 					docTags, docClass = partner.SwitchDocClass(v.PcatName, v.CatName, 1) //标签和分类
 					fileType          = GetDocFileType(v.FilePostfix)
+					uploadDate        = date.NowFormat(date.Date_Full_Layout)
 				)
 				if partner.CheckDocs(id, md5Id) {
 					continue
 				}
+				if v.CreatedDate != "" {
+					uploadDate = fmt.Sprintf("%s 00:00:00", strings.Split(v.CreatedDate, " ")[0])
+				}
 				lastId = v.ProductId
 				//tidb 分类
 				docsStatistics = append(docsStatistics, sm.DocStatistics{
@@ -63,7 +67,7 @@ func InsertDocinInfos(b []byte) (err error, lastId int64, expectTotal, actualTot
 					DocPageSize:     v.PageCount,
 					DocTags:         strings.Join(docTags, ","),
 					DocClass:        docClass,
-					UploadDate:      date.NowFormat(date.Date_Full_Layout),
+					UploadDate:      uploadDate,
 					IsDelete:        0,
 					OssDocId:        "",
 					Md5:             md5Id, //
@@ -91,7 +95,7 @@ func InsertDocinInfos(b []byte) (err error, lastId int64, expectTotal, actualTot
 					"downTimes":    v.DownloadCount,
 					"previewImgId": common.InterfaceToStr(v.ProductId),
 					"price":        price,
-					"uploadDate":   date.NowFormat(date.Date_Full_Layout),
+					"uploadDate":   uploadDate,
 					"viewTimes":    v.VisitCount,
 					"source":       2, //豆丁
 					"productType":  v.Ifcharge + entity.Charge,

+ 9 - 8
rpc/partnerlib/crontab/service/service.go

@@ -14,6 +14,7 @@ import (
 	"fmt"
 	"github.com/gogf/gf/v2/util/gconv"
 	"log"
+	"net/url"
 	"sync"
 	"time"
 )
@@ -28,9 +29,9 @@ func SyncDocinInfo(cron config.Cron) {
 	log.Println("sync Docin info task start :", date.NowFormat(date.Date_Full_Layout))
 	var (
 		startId = cron.StartId
-		h       = service.NewHH(I.Docin.Name, I.Docin.Host, I.Docin.DocList.Name, I.Docin.DocList.Pathname, I.Docin.DocList.Method, map[string]interface{}{
-			"startId": startId,
-			"count":   Cron.NewDocsList.Count,
+		h       = service.NewHH(I.Docin.Name, I.Docin.Host, I.Docin.DocList.Name, I.Docin.DocList.Pathname, I.Docin.DocList.Method, url.Values{
+			"startId": []string{common.InterfaceToStr(startId)},
+			"count":   []string{common.InterfaceToStr(Cron.NewDocsList.Count)},
 		})
 		b, err, _ = h.HttpFunc()
 		lastId    = startId
@@ -104,11 +105,11 @@ func UpdateDocinInfo(cron config.Cron) {
 		go warn.SendMsgByWXURL(fmt.Sprintf("timetask 保存 docin 文档失败--参数异常:startId:%d --startDate:%s --endDate:%s--count:%d", startId, startDate, endDate, count))
 		return
 	}
-	h := service.NewHH(I.Docin.Name, I.Docin.Host, I.Docin.UpdateList.Name, I.Docin.UpdateList.Pathname, I.Docin.UpdateList.Method, map[string]interface{}{
-		"startId":   startId,
-		"count":     count,
-		"startDate": startDate,
-		"endDate":   endDate,
+	h := service.NewHH(I.Docin.Name, I.Docin.Host, I.Docin.UpdateList.Name, I.Docin.UpdateList.Pathname, I.Docin.UpdateList.Method, url.Values{
+		"startId":   []string{common.InterfaceToStr(startId)},
+		"count":     []string{common.InterfaceToStr(count)},
+		"startDate": []string{startDate},
+		"endDate":   []string{endDate},
 	})
 	b, err, _ := h.HttpFunc()
 	lastId := startId

+ 1 - 1
rpc/partnerlib/etc/crontab.yaml

@@ -1,4 +1,4 @@
-IsRun: true
+IsRun: false
 NewDocsList:
   Name: syncDocs
   First: true

+ 1 - 1
rpc/partnerlib/etc/interface.yaml

@@ -3,7 +3,7 @@ Docin:
   Host: https://t.docin.com
   AppId: QHXKW0Z4JPM0GZXK
   AppSecret: tYLwu4fk7BQsS8WgP2g3o1BZv5Mxm2Ta
-  TestAccount: 20240101001
+  TestAccount: 2024010101
   DocList:
     Name: 文档列表接口
     Pathname: /api/jianyu/getProducts.do

+ 5 - 3
rpc/partnerlib/service/docDownload.go

@@ -8,9 +8,11 @@ import (
 	"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/jyfs/rpc/filesystem"
 	"encoding/json"
 	"fmt"
+	"net/url"
 	"strings"
 )
 
@@ -26,9 +28,9 @@ func DocDownload(in *partnerlib.UserDownloadRequest) (res *partnerlib.UDRes, err
 		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, map[string]interface{}{
-		"productId": id,
-		"userId":    in.PositionId,
+	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")

+ 10 - 17
rpc/partnerlib/service/service.go

@@ -22,20 +22,20 @@ type HH struct {
 	Host     string
 	Pathname string
 	Method   string
-	Params   map[string]interface{}
+	Params   *url.Values
 	Name     string
 	ApiName  string
 }
 
 // new
-func NewHH(name, host, apiName, pathname, method string, params map[string]interface{}) *HH {
+func NewHH(name, host, apiName, pathname, method string, params url.Values) *HH {
 	return &HH{
 		Name:     name,
 		Host:     host,
 		ApiName:  apiName,
 		Pathname: pathname,
 		Method:   method,
-		Params:   params,
+		Params:   &params,
 	}
 }
 
@@ -43,7 +43,7 @@ func NewHH(name, host, apiName, pathname, method string, params map[string]inter
 func (h *HH) HttpFunc() (body []byte, err error, isJson bool) {
 	entity.DocsLock.Lock()
 	defer entity.DocsLock.Unlock()
-	if h.Params == nil || len(h.Params) == 0 {
+	if h.Params == nil || h.Params.Encode() == "" {
 		err = fmt.Errorf("参数异常")
 		return
 	}
@@ -53,29 +53,22 @@ func (h *HH) HttpFunc() (body []byte, err error, isJson bool) {
 	)
 	switch h.Method {
 	case "POST":
-		var bb *bytes.Buffer
 		href = fmt.Sprintf("%s%s", h.Host, h.Pathname)
-		b, _err := json.Marshal(h.Params)
-		if _err == nil {
-			bb = bytes.NewBuffer(b)
-		}
 		// 创建 请求并添加查询参数
-		req, err = http.NewRequest(h.Method, href, bb)
+		req, err = http.NewRequest(h.Method, href, strings.NewReader(h.Params.Encode()))
+		// 添加请求头
+		req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
 	case "GET":
-		params := url.Values{}
-		for k, v := range h.Params {
-			params.Add(k, common.InterfaceToStr(v))
-		}
-		href = fmt.Sprintf("%s%s?%s", h.Host, h.Pathname, params.Encode())
+		href = fmt.Sprintf("%s%s?%s", h.Host, h.Pathname, h.Params.Encode())
 		// 创建 请求并添加查询参数
 		req, err = http.NewRequest(h.Method, href, nil)
+		// 添加请求头
+		req.Header.Add("Content-Type", "application/json")
 	}
 	if err != nil {
 		err = fmt.Errorf("error creating GET request:%v", err)
 		return
 	}
-	// 添加请求头
-	req.Header.Add("Content-Type", "application/json")
 	//时间
 	req.Header.Add("Date", h.GetDate())
 	//Content-Md5

+ 22 - 18
rpc/partnerlib/service/userBuy.go

@@ -12,6 +12,7 @@ import (
 	"app.yhyue.com/moapp/jybase/date"
 	"encoding/json"
 	"fmt"
+	"net/url"
 	"strings"
 	"time"
 )
@@ -97,15 +98,15 @@ func UBHandle(in *partnerlib.UserBuyVipRequest) (res *partnerlib.UBVRes, err err
 		price   = float64(docInfo.Price) / 10
 		userId  = common.If(IC.I.Docin.TestAccount > 0, IC.I.Docin.TestAccount, in.PositionId).(int64) //测试账号
 		docType = in.Type
-		params  = map[string]interface{}{
-			"userId":    userId,
-			"orderTime": date.NowFormat(entity.DateFullLayout),
-			"type":      docType,
+		params  = &url.Values{
+			"userId":    []string{common.InterfaceToStr(userId)},
+			"orderTime": []string{date.NowFormat(entity.DateFullLayout)},
+			"type":      []string{common.InterfaceToStr(docType)},
 		}
 		now      = time.Now()
 		cacheKey = fmt.Sprintf("docin_user_member_%d_%d", now.Day(), in.PositionId)
 		nextStep bool
-		resFunc  = func(params map[string]interface{}, duo *model.DocinUserOrder) (msg string, err error) {
+		resFunc  = func(params url.Values, duo *model.DocinUserOrder) (msg string, err error) {
 			h := NewHH(IC.I.Docin.Name, IC.I.Docin.Host, IC.I.Docin.BuyRecord.Name, IC.I.Docin.BuyRecord.Pathname, IC.I.Docin.BuyRecord.Method, params)
 			b, err, _ = h.HttpFunc()
 			go h.SaveDocinLogger(b, err, "req")
@@ -118,7 +119,7 @@ func UBHandle(in *partnerlib.UserBuyVipRequest) (res *partnerlib.UBVRes, err err
 					if bRes.Code == 0 {
 						//更新文档购买记录
 						if err = partner.InsertBuyDocOrder(duo); err != nil {
-							warn.SendMsgByWXURL(fmt.Sprintf("%s文档名称: %s,文档id:%s,购买订单编号:%s,请求信息:%v,异常信息:%s", entity.PartnerName, docInfo.DocName, docInfo.Id, params["orderNo"], in, err.Error()))
+							warn.SendMsgByWXURL(fmt.Sprintf("%s文档名称: %s,文档id:%s,购买订单编号:%s,请求信息:%v,异常信息:%s", entity.PartnerName, docInfo.DocName, docInfo.Id, params.Encode(), in, err.Error()))
 						}
 						msg = bRes.Msg
 						return
@@ -127,18 +128,18 @@ func UBHandle(in *partnerlib.UserBuyVipRequest) (res *partnerlib.UBVRes, err err
 				}
 			}
 			err = fmt.Errorf("接口请求异常")
-			warn.SendMsgByWXURL(fmt.Sprintf("%s文档名称: %s,文档id:%s,购买会员编号:%s,请求信息:%v,异常信息:%s", entity.PartnerName, docInfo.DocName, docInfo.Id, params["orderNo"], in, err.Error()))
+			warn.SendMsgByWXURL(fmt.Sprintf("%s文档名称: %s,文档id:%s,购买会员编号:%s,请求信息:%v,异常信息:%s", entity.PartnerName, docInfo.DocName, docInfo.Id, params.Encode(), in, err.Error()))
 			return
 		}
 	)
 	switch in.Type {
 	case 1: //1 币买文档
-		params["price"] = price
-		params["productId"] = in.DocId
+		params.Set("price", common.InterfaceToStr(price))
+		params.Set("productId", in.DocId)
 		nextStep = true
 	case 2: //2 券买文档
-		params["priceVip"] = docInfo.PriceVip
-		params["productId"] = in.DocId
+		params.Set("price", common.InterfaceToStr(docInfo.PriceVip))
+		params.Set("productId", in.DocId)
 		nextStep = true
 	case 0: //0:开通豆丁会员并购买文档
 		//缓存获取 豆丁会员信息
@@ -188,13 +189,13 @@ func UBHandle(in *partnerlib.UserBuyVipRequest) (res *partnerlib.UBVRes, err err
 					CreateDate:   date.NowFormat(date.Date_Full_Layout),
 					UpdateDate:   date.NowFormat(date.Date_Full_Layout),
 				}
-				params["type"] = docType
-				params["orderNo"] = orderCode
-				if msg, err := resFunc(params, duo); err == nil {
+				params.Set("type", common.InterfaceToStr(docType))
+				params.Set("orderNo", orderCode)
+				if msg, err := resFunc(*params, duo); err == nil {
 					res.Msg = msg
 					nextStep = true
 				} else {
-					warn.SendMsgByWXURL(fmt.Sprintf("%s文档名称: %s,文档id:%s,购买会员编号:%s,请求信息:%v", entity.PartnerName, docInfo.DocName, docInfo.Id, params["orderNo"], in))
+					warn.SendMsgByWXURL(fmt.Sprintf("%s文档名称: %s,文档id:%s,购买会员编号:%s,请求信息:%v", entity.PartnerName, docInfo.DocName, docInfo.Id, params.Encode(), in))
 				}
 			}
 		} else {
@@ -214,6 +215,8 @@ func UBHandle(in *partnerlib.UserBuyVipRequest) (res *partnerlib.UBVRes, err err
 				Phone:        in.Phone,
 				DocId:        docInfo.Id,
 				OrderCode:    orderCode,
+				StartDate:    date.NowFormat(date.Date_Full_Layout),
+				EndDate:      date.NowFormat(date.Date_Full_Layout),
 				Price:        docInfo.Price,
 				PriceVip:     docInfo.PriceVip,
 				PurchaseType: int(docType),  //购买类型:1 币买文档,2 券买文档,3 月大会员,4 季大会员,5 年大会员
@@ -221,9 +224,10 @@ func UBHandle(in *partnerlib.UserBuyVipRequest) (res *partnerlib.UBVRes, err err
 				CreateDate:   date.NowFormat(date.Date_Full_Layout),
 				UpdateDate:   date.NowFormat(date.Date_Full_Layout),
 			}
-			params["orderNo"] = orderCode
-			params["productId"] = id
-			if msg, err := resFunc(params, duo); err == nil {
+			params.Set("type", "1")
+			params.Set("orderNo", orderCode)
+			params.Set("productId", id)
+			if msg, err := resFunc(*params, duo); err == nil {
 				res.OrderNo = orderCode
 				res.Msg = msg
 				return res, nil

+ 2 - 0
services/partner/docsBuyOrder.go

@@ -13,6 +13,7 @@ import (
 // 保存和合作商订单相关的信息
 func InsertBuyDocOrder(orderInfo *model.DocinUserOrder) (err error) {
 	err = jyDocRpcUtil.GetJyDocsDB().Table(entity.DocUserOrderTab).Create(orderInfo).Error
+	log.Println("err:", err)
 	return
 }
 
@@ -25,6 +26,7 @@ func GetDocOrderInfo(positionId int64, mgoUserId string, state int) (orderInfo *
 		Find(&orderInfos).Error
 	if err == nil && len(orderInfos) > 0 {
 		orderInfo = orderInfos[0]
+		return
 	}
 	return &model.DocinUserOrder{}, err
 }