package servers import ( . "app.yhyue.com/moapp/jybase/api" "app.yhyue.com/moapp/jybase/common" "app.yhyue.com/moapp/jybase/go-xweb/xweb" "encoding/json" "errors" "fmt" "jy-docs/config" "jy-docs/public" "jy-docs/rpc" "log" "time" ) type UserDoc struct { *xweb.Action userList xweb.Mapper `xweb:"/user/list"` //用户列表 collectAdd xweb.Mapper `xweb:"/user/collect/add"` //收藏文库 collectRemove xweb.Mapper `xweb:"/user/collect/remove"` //取消收藏 docBuy xweb.Mapper `xweb:"/user/buy"` //文库购买 info xweb.Mapper `xweb:"/user/info"` //文库会员信息 } // 用户文库列表 func (userDoc *UserDoc) UserList() { userId := common.ObjToString(userDoc.GetSession("userId")) rData, errMsg := func() (interface{}, error) { pageNumReq, _ := userDoc.GetInt("num") pageSizeReq, _ := userDoc.GetInt("size") sign, _ := userDoc.GetInt("sign") // 0兑换的 1收藏的 2回收站的 pageNum, pageSize, _ := public.PageNumParse(pageNumReq, pageSizeReq, -1) if sign < 0 || sign > 2 { return nil, fmt.Errorf("请求参数异常") } collectList, total, err := rpc.GetUserDocs(userId, pageNum, pageSize, sign) if err != nil { return nil, err } return map[string]interface{}{ "total": total, "list": collectList, }, nil }() if errMsg != nil { log.Printf("%s UserDoc collectList err:%s\n", userId, errMsg.Error()) } userDoc.ServeJson(NewResult(rData, errMsg)) } func (userDoc *UserDoc) CollectAdd() { userId := common.ObjToString(userDoc.GetSession("userId")) rData, errMsg := func() (interface{}, error) { docId := userDoc.GetString("docId") if docId == "" { return nil, fmt.Errorf("参数异常") } err := rpc.SetUserCollect(userId, docId) if err != nil { return nil, err } return "success", nil }() if errMsg != nil { log.Printf("%s UserDoc collectAdd err:%s\n", userId, errMsg.Error()) } userDoc.ServeJson(NewResult(rData, errMsg)) } func (userDoc *UserDoc) CollectRemove() { userId := common.ObjToString(userDoc.GetSession("userId")) rData, errMsg := func() (interface{}, error) { docId := userDoc.GetString("docId") if docId == "" { return nil, fmt.Errorf("参数异常") } err := rpc.DelUserCollect(userId, docId) if err != nil { return nil, err } return "success", nil }() if errMsg != nil { log.Printf("%s UserDoc collectRemove err:%s\n", userId, errMsg.Error()) } userDoc.ServeJson(NewResult(rData, errMsg)) } func (userDoc *UserDoc) DocBuy() { userId := common.ObjToString(userDoc.GetSession("userId")) rData, errMsg := func() (interface{}, error) { docId := userDoc.GetString("docId") phone := userDoc.GetString("phone") if docId == "" { return nil, fmt.Errorf("参数异常") } var userPoint, docPoint int64 = 0, 0 var err error //查询用户剩余积分 userPoint, err = rpc.GetUserPointValue(userId) if err != nil { return nil, err } //查询文档所需积分 docInfo, isBuy, _, err := rpc.GetDocDetail(userId, docId) if err != nil { return nil, err } if isBuy { return nil, fmt.Errorf("已兑换,请勿重复操作") } docPoint = docInfo.Price //积分够调扣积分 if userPoint < docPoint { return nil, fmt.Errorf("剩余积分不足") } bytes, err := json.Marshal(map[string]interface{}{ "name": docInfo.DocName, "summary": docInfo.DocSummary, "img": docInfo.PreviewImgId, "fType": docInfo.DocFileType, }) if err != nil { return nil, fmt.Errorf("文库异常") } serialNumber, err := rpc.SpendUserPoint(userId, docInfo.DocId, string(bytes), docPoint) if err != nil { return nil, err } //转存文库 err = rpc.PayDoc(userId, docId) if err != nil { return nil, err } //手机号采集 go func() { if phone != "" { public.MQFW.Save("user_msg", map[string]interface{}{ "s_userId": userId, "s_phone": phone, "i_phoneCheck": -1, //未验证 "i_time": time.Now().Unix(), "s_source": "jydoc", }) } rpc.DocStatistics(userId, docId, rpc.Down) }() return map[string]interface{}{ "code": serialNumber, "balance": userPoint - docPoint, "payTime": time.Now().Unix(), "payWay": "剑鱼币", }, nil }() if errMsg != nil { log.Printf("%s UserDoc docBuy err:%s\n", userId, errMsg.Error()) } userDoc.ServeJson(NewResult(rData, errMsg)) } // Info 剑鱼文库会员信息 func (userDoc *UserDoc) Info() { userId := common.ObjToString(userDoc.GetSession("userId")) rData, errMsg := func() (interface{}, error) { if userId == "" { return map[string]interface{}{ "docMemberStatus": false, "startTime": 0, "endTime": 0, "free_download": public.FreeDownloadNoSL, }, nil } mData := public.Compatible.Select(userId, `{"i_doc_status":1,"l_doc_endtime":1,"l_doc_starttime":1,"i_doc_free_download":1}`) if mData != nil && len(*mData) > 0 { free_download := common.IntAll((*mData)["i_doc_free_download"]) if (*mData)["i_doc_free_download"] == 0 { // 没有使用过一次免费下载机会 // 查留资 count := public.MQFW.Count("saleLeads", map[string]interface{}{"userid": userId, "source": map[string]interface{}{"$in": config.JyDocsAppConfig.DocMember.Source}}) if count > 0 { free_download = public.Free_download_HasFreeTimes } else { free_download = public.FreeDownloadNoSL } } vipStatus := common.IntAll((*mData)["i_doc_status"]) return map[string]interface{}{ "docMemberStatus": vipStatus > 0, "startTime": (*mData)["l_doc_starttime"], "endTime": (*mData)["l_doc_endtime"], "free_download": free_download, }, nil } return nil, errors.New("获取文库会员状态失败") }() if errMsg != nil { log.Printf("%s UserDoc Info err:%s\n", userId, errMsg.Error()) } userDoc.ServeJson(NewResult(rData, errMsg)) }