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 }