123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- package service
- import (
- "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/date"
- "encoding/json"
- "fmt"
- "log"
- "net/url"
- "strings"
- "time"
- )
- type BRes struct {
- Msg string
- Code int64
- 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)
- 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 = &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 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")
- 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.Encode(), in, err.Error()))
- }
- msg = bRes.Msg
- 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.Encode(), in, err.Error()))
- return
- }
- )
- switch in.Type {
- case 1: //1 币买文档
- log.Println("币买文档价格:", price, in.DocId, common.InterfaceToStr(price))
- params.Set("price", common.InterfaceToStr(price))
- params.Set("productId", in.DocId)
- nextStep = true
- case 2: //2 券买文档
- params.Set("price", common.InterfaceToStr(docInfo.PriceVip))
- params.Set("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 == nil || 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.Filter.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.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.Encode(), in))
- }
- }
- } else {
- nextStep = true
- }
- }
- if nextStep {
- //更新用户会员信息缓存
- partner.SetUserOrderInfo(entity.RedisCode, cacheKey, 24*60*60)
- //是否需要购买文档--精品
- 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,
- 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 年大会员
- State: int(in.State), //合作商:1:豆丁
- CreateDate: date.NowFormat(date.Date_Full_Layout),
- UpdateDate: date.NowFormat(date.Date_Full_Layout),
- }
- 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
- }
- }
- return
- }
- res.Msg = fmt.Sprintf("参数异常")
- res.Code = -1
- return
- }
|