|
@@ -8,9 +8,12 @@ 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/jybase/date"
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
type BRes struct {
|
|
@@ -19,63 +22,216 @@ type BRes struct {
|
|
|
OrderNo string
|
|
|
}
|
|
|
|
|
|
+//
|
|
|
+//func UBHandle(in *partnerlib.UserBuyVipRequest) (res *partnerlib.UBVRes, err error) {
|
|
|
+// res = new(partnerlib.UBVRes)
|
|
|
+// var (
|
|
|
+// b []byte
|
|
|
+// docInfo = partner.DocsFindOne(in.DocId)
|
|
|
+// userId = in.PositionId
|
|
|
+// id = strings.ReplaceAll(in.DocId, fmt.Sprintf("%s-", entity.PartnerName), "")
|
|
|
+// )
|
|
|
+// //测试账号
|
|
|
+// if IC.I.Docin.TestAccount > 0 {
|
|
|
+// userId = IC.I.Docin.TestAccount
|
|
|
+// }
|
|
|
+// if docInfo.Id != "" {
|
|
|
+// orderCode := util.GetOrderCode()
|
|
|
+// 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, map[string]interface{}{
|
|
|
+// "orderNo": orderCode,
|
|
|
+// "productId": id,
|
|
|
+// "userId": userId,
|
|
|
+// "price": docInfo.Price,
|
|
|
+// "priceVip": docInfo.PriceVip,
|
|
|
+// "type": in.Type,
|
|
|
+// "orderTime": date.NowFormat(entity.DateFullLayout),
|
|
|
+// })
|
|
|
+// b, err, _ = h.HttpFunc()
|
|
|
+// go h.SaveDocinLogger(b, err, "req")
|
|
|
+// if err == nil {
|
|
|
+// //豆丁同步数据到mongo
|
|
|
+// go h.SaveDocinLogger(b, err, "res")
|
|
|
+// bRes := &BRes{}
|
|
|
+// if err = json.Unmarshal(b, &bRes); err == nil {
|
|
|
+// if bRes.Code == 0 {
|
|
|
+// //更新文档购买记录
|
|
|
+// if err = partner.InsertBuyDocOrder(&model.DocinUserOrder{
|
|
|
+// PositionId: in.PositionId,
|
|
|
+// MgoUserId: in.MgoUserId,
|
|
|
+// Phone: in.Phone,
|
|
|
+// DocId: docInfo.Id,
|
|
|
+// OrderCode: orderCode,
|
|
|
+// Price: docInfo.Price,
|
|
|
+// PriceVip: docInfo.PriceVip,
|
|
|
+// PurchaseType: int(in.Type), //购买类型:1 币买文档,2 券买文档,3 月大会员,4 季大会员,5 年大会员
|
|
|
+// State: 1, //合作商:1:豆丁
|
|
|
+// CreateDate: date.NowFormat(date.Date_Full_Layout),
|
|
|
+// }); err == nil {
|
|
|
+// warn.SendMsgByWXURL(fmt.Sprintf("%s文档名称: %s,文档id:%s,购买订单编号:%s,请求信息:%v", entity.PartnerName, docInfo.DocName, docInfo.Id, orderCode, in))
|
|
|
+// }
|
|
|
+// res.OrderNo = bRes.OrderNo
|
|
|
+// res.Msg = bRes.Msg
|
|
|
+// res.Code = bRes.Code
|
|
|
+// return
|
|
|
+// }
|
|
|
+// err = fmt.Errorf(entity.Res[res.Msg])
|
|
|
+// }
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// err = fmt.Errorf("参数异常")
|
|
|
+// }
|
|
|
+// res.Msg = err.Error()
|
|
|
+// res.Code = -1
|
|
|
+// return
|
|
|
+//}
|
|
|
+
|
|
|
+// 开通会员 + 购买精品文档
|
|
|
func UBHandle(in *partnerlib.UserBuyVipRequest) (res *partnerlib.UBVRes, err error) {
|
|
|
+ //in.Type 0:开通豆丁会员并购买文档,1 币买文档,2 券买文档,3 月大会员,4 季大会员,5 年大会员
|
|
|
+ //in.Type ==0 判断文档是否是精品,如果文档是精品需要购买文档
|
|
|
res = new(partnerlib.UBVRes)
|
|
|
var (
|
|
|
b []byte
|
|
|
docInfo = partner.DocsFindOne(in.DocId)
|
|
|
- userId = in.PositionId
|
|
|
- )
|
|
|
- //测试账号
|
|
|
- if IC.I.Docin.TestAccount > 0 {
|
|
|
- userId = IC.I.Docin.TestAccount
|
|
|
- }
|
|
|
- if docInfo.Id != "" {
|
|
|
- orderCode := util.GetOrderCode()
|
|
|
- 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, map[string]interface{}{
|
|
|
- "orderNo": orderCode,
|
|
|
- "productId": in.DocId,
|
|
|
+ id = strings.ReplaceAll(in.DocId, fmt.Sprintf("%s-", entity.PartnerName), "")
|
|
|
+ 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,
|
|
|
- "price": docInfo.Price,
|
|
|
- "priceVip": docInfo.PriceVip,
|
|
|
- "type": in.Type,
|
|
|
"orderTime": date.NowFormat(entity.DateFullLayout),
|
|
|
- })
|
|
|
- b, err, _ = h.HttpFunc()
|
|
|
- go h.SaveDocinLogger(b, err, "req")
|
|
|
- if err == nil {
|
|
|
- //豆丁同步数据到mongo
|
|
|
- go h.SaveDocinLogger(b, err, "res")
|
|
|
- bRes := &BRes{}
|
|
|
- if err = json.Unmarshal(b, &bRes); err == nil {
|
|
|
- if bRes.Code == 0 {
|
|
|
- //更新文档购买记录
|
|
|
- if err = partner.InsertBuyDocOrder(&model.DocinUserOrder{
|
|
|
- PositionId: in.PositionId,
|
|
|
- MgoUserId: in.MgoUserId,
|
|
|
- Phone: in.Phone,
|
|
|
- DocId: docInfo.Id,
|
|
|
- OrderCode: orderCode,
|
|
|
- Price: docInfo.Price,
|
|
|
- PriceVip: docInfo.PriceVip,
|
|
|
- PurchaseType: int(in.Type), //购买类型:1 币买文档,2 券买文档,3 月大会员,4 季大会员,5 年大会员
|
|
|
- State: 1, //合作商:1:豆丁
|
|
|
- CreateTime: date.NowFormat(date.Date_Full_Layout),
|
|
|
- }); err == nil {
|
|
|
- warn.SendMsgByWXURL(fmt.Sprintf("%s文档名称: %s,文档id:%s,购买订单编号:%s,请求信息:%v", entity.PartnerName, docInfo.DocName, docInfo.Id, orderCode, in))
|
|
|
+ "type": 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) {
|
|
|
+ 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")
|
|
|
+ if err == nil && len(b) > 0 {
|
|
|
+ //豆丁同步数据到mongo
|
|
|
+ go h.SaveDocinLogger(b, err, "res")
|
|
|
+ bRes := &BRes{}
|
|
|
+ err = json.Unmarshal(b, &bRes)
|
|
|
+ if err == nil {
|
|
|
+ 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()))
|
|
|
+ }
|
|
|
+ msg = bRes.Msg
|
|
|
+ return
|
|
|
}
|
|
|
- res.OrderNo = bRes.OrderNo
|
|
|
- res.Msg = bRes.Msg
|
|
|
- res.Code = bRes.Code
|
|
|
- return
|
|
|
+ err = fmt.Errorf(entity.Res[res.Msg])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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()))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ )
|
|
|
+ switch in.Type {
|
|
|
+ case 1: //1 币买文档
|
|
|
+ params["price"] = price
|
|
|
+ params["productId"] = in.DocId
|
|
|
+ nextStep = true
|
|
|
+ case 2: //2 券买文档
|
|
|
+ params["priceVip"] = docInfo.PriceVip
|
|
|
+ params["productId"] = in.DocId
|
|
|
+ nextStep = true
|
|
|
+ case 0: //0:开通豆丁会员并购买文档
|
|
|
+ //缓存获取 豆丁会员信息
|
|
|
+ if dStr := partner.GetUserOrderInfo(entity.RedisCode, cacheKey); dStr == "" {
|
|
|
+ //查库豆丁会员信息
|
|
|
+ doi, err := partner.GetDocOrderInfo(in.PositionId, in.MgoUserId, 2)
|
|
|
+ if err != nil { //查询异常
|
|
|
+ res.Code = -1
|
|
|
+ res.Msg = err.Error()
|
|
|
+ return res, err
|
|
|
+ }
|
|
|
+ switch doi.State { //会员状态:-1:不可用;1:正常
|
|
|
+ case 1: //不用再购买会员 并更新缓存
|
|
|
+ docType = int64(doi.PurchaseType) //3 月大会员,4 季大会员,5 年大会员
|
|
|
+ nextStep = true
|
|
|
+ default: //查看剑鱼订单,如果剑鱼订单有购买文库会员记录,购买信息保存到doc_user_order表 并更新缓存
|
|
|
+ jyDoi := partner.GetJYDocsOrderInfo(in.PositionId, in.MgoUserId)
|
|
|
+ if jyDoi.OrderCode == "" {
|
|
|
+ res.Code = -1
|
|
|
+ res.Msg = fmt.Sprintf("当前用户未购买文库会员")
|
|
|
+ return res, fmt.Errorf(res.Msg)
|
|
|
+ }
|
|
|
+ var orderCode = util.GetOrderCode()
|
|
|
+ //文库会员周期单位 同超级订阅单位:cycleunit(1:年 2:月 3:天 4:季)
|
|
|
+ switch jyDoi.CycleUnit {
|
|
|
+ case 1:
|
|
|
+ docType = 5
|
|
|
+ case 2:
|
|
|
+ docType = 3
|
|
|
+ case 4:
|
|
|
+ docType = 4
|
|
|
+ }
|
|
|
+ //购买信息保存到doc_user_order表
|
|
|
+ duo := &model.DocinUserOrder{
|
|
|
+ PositionId: in.PositionId,
|
|
|
+ MgoUserId: in.MgoUserId,
|
|
|
+ Phone: in.Phone,
|
|
|
+ DocId: docInfo.Id,
|
|
|
+ JyOrderCode: jyDoi.OrderCode,
|
|
|
+ OrderCode: orderCode,
|
|
|
+ StartDate: jyDoi.StartDate,
|
|
|
+ EndDate: jyDoi.EndDate,
|
|
|
+ Price: docInfo.Price,
|
|
|
+ PriceVip: docInfo.PriceVip,
|
|
|
+ PurchaseType: int(docType), //购买类型:1 币买文档,2 券买文档,3 月大会员,4 季大会员,5 年大会员
|
|
|
+ State: int(in.State), //合作商:1:豆丁
|
|
|
+ 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 {
|
|
|
+ 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))
|
|
|
}
|
|
|
- err = fmt.Errorf(entity.Res[res.Msg])
|
|
|
+ }
|
|
|
+ //更新用户会员信息缓存
|
|
|
+ partner.SetUserOrderInfo(entity.RedisCode, cacheKey, 24*60*60)
|
|
|
+ } else {
|
|
|
+ nextStep = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if nextStep {
|
|
|
+ //是否需要购买文档--精品
|
|
|
+ if docInfo.ProductType == 2 {
|
|
|
+ var orderCode = util.GetOrderCode()
|
|
|
+ //购买信息保存到doc_user_order表
|
|
|
+ duo := &model.DocinUserOrder{
|
|
|
+ PositionId: in.PositionId,
|
|
|
+ MgoUserId: in.MgoUserId,
|
|
|
+ Phone: in.Phone,
|
|
|
+ DocId: docInfo.Id,
|
|
|
+ OrderCode: orderCode,
|
|
|
+ Price: docInfo.Price,
|
|
|
+ PriceVip: docInfo.PriceVip,
|
|
|
+ PurchaseType: int(docType), //购买类型:1 币买文档,2 券买文档,3 月大会员,4 季大会员,5 年大会员
|
|
|
+ State: int(in.State), //合作商:1:豆丁
|
|
|
+ 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 {
|
|
|
+ res.OrderNo = orderCode
|
|
|
+ res.Msg = msg
|
|
|
+ return res, nil
|
|
|
}
|
|
|
}
|
|
|
- } else {
|
|
|
- err = fmt.Errorf("参数异常")
|
|
|
+ return
|
|
|
}
|
|
|
- res.Msg = err.Error()
|
|
|
+ res.Msg = fmt.Sprintf("参数异常")
|
|
|
res.Code = -1
|
|
|
return
|
|
|
}
|