123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- package rpc
- import (
- "fmt"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/gtrace"
- "strings"
- . "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
- "bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/pb"
- "bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/resource"
- "github.com/gogf/gf/v2/os/gcfg"
- "github.com/gogf/gf/v2/os/gctx"
- "github.com/zeromicro/go-zero/core/discov"
- "github.com/zeromicro/go-zero/zrpc"
- )
- var ResourceCenterRpc resource.Resource
- func initResourceCenterRpc() {
- ResourceCenterRpc = resource.NewResource(zrpc.MustNewClient(zrpc.RpcClientConf{
- Etcd: discov.EtcdConf{
- Key: gcfg.Instance().MustGet(gctx.New(), "etcd.baseserver.resourceCenter.key", nil).String(),
- Hosts: gcfg.Instance().MustGet(gctx.New(), "etcd.baseserver.resourceCenter.address", nil).Strings(),
- },
- }))
- }
- // CheckResourcePower 校验账户是否有对应权益
- // accountId 账户id
- // entAccountId 企业账户id
- // entId 企业id
- // entUserId 企业员工id
- // funcCode 业务代码
- // reqFuncCode 通用结构&&需要校验权限则先判断此接口是否有此functionCode的方法
- // appid 平台标识
- func CheckResourcePower(ctx gctx.Ctx, accountId, entAccountId, entId, entUserId int64, funcCodeRule, reqFuncCode, Appid string) (UseCount, SurplusCount int64, err error) {
- ctx, span := gtrace.NewSpan(ctx, "CheckResourcePower")
- defer span.End()
- funcCode := funcCodeRule
- funcCodeArr := strings.Split(funcCodeRule, ",")
- if reqFuncCode != "" || len(funcCodeArr) > 1 {
- var checkPass bool
- for _, tFunc := range funcCodeArr {
- if reqFuncCode == tFunc {
- checkPass = true
- break
- }
- }
- if !checkPass {
- err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_POWERCODE_ERR, fmt.Sprintf("账户 accountId:%d entAccountId:%d entId:%d entUserId:%d 无效funccode:%s req:%s权限", accountId, entAccountId, entId, entUserId, funcCodeRule, reqFuncCode))
- return
- }
- funcCode = reqFuncCode
- }
- res, err := ResourceCenterRpc.CheckPower(ctx, &pb.CheckPowerReq{
- Appid: Appid,
- FunctionCode: funcCode,
- AccountId: accountId,
- EntAccountId: entAccountId,
- EntId: entId,
- EntUserId: entUserId,
- })
- if err != nil {
- err = NewErrorWithCode(GATEWAY_RPC_RESOURCECENTER_ERR, err.Error())
- return
- }
- //0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权
- switch res.Status {
- case 0:
- err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("账户 accountId:%d entAccountId:%d entId:%d entUserId:%d 无业务%s权限", accountId, entAccountId, entId, entUserId, funcCode))
- return
- case -1:
- err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_EXPIRED, fmt.Sprintf("账户 accountId:%d entAccountId:%d entId:%d entUserId:%d 业务%s权限已过期", accountId, entAccountId, entId, entUserId, funcCode))
- return
- case -2:
- err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTENOUGH, fmt.Sprintf("账户 accountId:%d entAccountId:%d entId:%d entUserId:%d 业务%s权限余额不足", accountId, entAccountId, entId, entUserId, funcCode))
- return
- case -3:
- err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTHAS, fmt.Sprintf("账户 accountId:%d entAccountId:%d entId:%d entUserId:%d 业务%s权限无授权", accountId, entAccountId, entId, entUserId, funcCode))
- return
- }
- return res.UseCount, res.SurplusCount, nil
- }
- // ResourcePowerDeduct 资源中心消费
- // accountId 账户id
- // entAccountId 企业账户id
- // funcCode 业务代码
- // deductNum 扣除数量
- // ids 扣除详情id;例如数据导出信息id等数据
- func ResourcePowerDeduct(ctx g.Ctx, accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
- ctx, span := gtrace.NewSpan(ctx, "ResourcePowerDeduct")
- defer span.End()
- res, err := ResourceCenterRpc.Deduction(ctx, &pb.DeductionReq{
- Appid: appId,
- AccountId: accountId,
- EntAccountId: entAccountId,
- FunctionCode: funcCode,
- Count: deductNum,
- Ids: ids,
- })
- if err != nil {
- return NewErrorWithCode(GATEWAY_RPC_RESOURCECENTER_ERR, err.Error())
- }
- //0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权
- switch res.Status {
- case 0:
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("账户 accountId:%d entAccountId:%d 扣除业务%s权限失败", accountId, entAccountId, funcCode))
- case -1:
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_EXPIRED, fmt.Sprintf("账户 accountId:%d entAccountId:%d 扣除业务%s权限失败,权限已过期", accountId, entAccountId, funcCode))
- case -2:
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTENOUGH, fmt.Sprintf("账户 accountId:%d entAccountId:%d 扣除业务%s权限失败,余额不足", accountId, entAccountId, funcCode))
- case -3:
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTHAS, fmt.Sprintf("账户 accountId:%d entAccountId:%d 扣除业务%s权限失败", accountId, entAccountId, funcCode))
- }
- return nil
- }
- // ResourcePowerRecharge 资源中心充值
- // accountId 账户id
- // entAccountId 企业账户id
- // funcCode 业务代码
- // deductNum 扣除数量
- // ids 扣除详情id;例如数据导出信息id等数据
- func ResourcePowerRecharge(ctx g.Ctx, accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
- ctx, span := gtrace.NewSpan(ctx, "ResourcePowerRecharge")
- defer span.End()
- res, err := ResourceCenterRpc.Recharge(ctx, &pb.RechargeReq{
- Appid: appId,
- AccountId: accountId,
- EntAccountId: entAccountId,
- FunctionCode: funcCode,
- Count: deductNum,
- Ids: ids,
- })
- if err != nil {
- return NewErrorWithCode(GATEWAY_RPC_RESOURCECENTER_ERR, err.Error())
- }
- switch res.Status {
- case 0:
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("账户 accountId:%d entAccountId:%d 充值业务%s权限失败", accountId, entAccountId, funcCode))
- case -1:
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_EXPIRED, fmt.Sprintf("账户 accountId:%d entAccountId:%d 充值业务%s权限失败,权限已过期", accountId, entAccountId, funcCode))
- case -2:
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTENOUGH, fmt.Sprintf("账户 accountId:%d entAccountId:%d 充值业务%s权限失败,余额不足", accountId, entAccountId, funcCode))
- case -3:
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTHAS, fmt.Sprintf("账户 accountId:%d entAccountId:%d 充值业务%s权限失败", accountId, entAccountId, funcCode))
- case -4: //超出可拥有最大限额
- return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_RECHARGE_FULL, fmt.Sprintf("账户 accountId:%d entAccountId:%d 充值业务%s权限失败", accountId, entAccountId, funcCode))
- }
- return nil
- }
|