resourceCenter.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package rpc
  2. import (
  3. . "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
  4. "bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/pb"
  5. "bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/resource"
  6. "fmt"
  7. "github.com/gogf/gf/v2/os/gcfg"
  8. "github.com/gogf/gf/v2/os/gctx"
  9. "github.com/zeromicro/go-zero/core/discov"
  10. "github.com/zeromicro/go-zero/zrpc"
  11. "strings"
  12. )
  13. var ResourceCenterRpc resource.Resource
  14. func initResourceCenterRpc() {
  15. ResourceCenterRpc = resource.NewResource(zrpc.MustNewClient(zrpc.RpcClientConf{
  16. Etcd: discov.EtcdConf{
  17. Key: gcfg.Instance().MustGet(gctx.New(), "etcd.baseserver.resourceCenter.key", nil).String(),
  18. Hosts: gcfg.Instance().MustGet(gctx.New(), "etcd.baseserver.resourceCenter.address", nil).Strings(),
  19. },
  20. }))
  21. }
  22. // CheckResourcePower 校验账户是否有对应权益
  23. // eid 企业id
  24. // uId 新用户id;非mongodb中user表id
  25. // funcCode 业务代码
  26. // reqFuncCode 通用结构&&需要校验权限则先判断此接口是否有此functionCode的方法
  27. // appid 平台标识
  28. func CheckResourcePower(eId, uId int64, funcCodeRule, reqFuncCode, Appid string) (UseCount, SurplusCount int64, err error) {
  29. funcCode := funcCodeRule
  30. funcCodeArr := strings.Split(funcCodeRule, ",")
  31. if reqFuncCode != "" || len(funcCodeArr) > 1 {
  32. var checkPass bool
  33. for _, tFunc := range funcCodeArr {
  34. if reqFuncCode == tFunc {
  35. checkPass = true
  36. break
  37. }
  38. }
  39. if !checkPass {
  40. err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_POWERCODE_ERR, fmt.Sprintf("账户 eId:%d,uId:%d 无效funccode:%s req:%s权限", eId, uId, funcCodeRule, reqFuncCode))
  41. return
  42. }
  43. funcCode = reqFuncCode
  44. }
  45. res, err := ResourceCenterRpc.CheckPower(gctx.New(), &pb.CheckPowerReq{
  46. Appid: Appid,
  47. FunctionCode: funcCode,
  48. EntId: eId,
  49. UserId: uId,
  50. })
  51. if err != nil {
  52. err = NewErrorWithCode(GATEWAY_RPC_RESOURCECENTER_ERR, err.Error())
  53. return
  54. }
  55. //0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权
  56. switch res.Status {
  57. case 0:
  58. err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("账户 eId:%d,uId:%d 无业务%s权限", eId, uId, funcCode))
  59. return
  60. case -1:
  61. err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_EXPIRED, fmt.Sprintf("账户 eId:%d,uId:%d 业务%s权限已过期", eId, uId, funcCode))
  62. return
  63. case -2:
  64. err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTENOUGH, fmt.Sprintf("账户 eId:%d,uId:%d 业务%s权限余额不足", eId, uId, funcCode))
  65. return
  66. case -3:
  67. err = NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTHAS, fmt.Sprintf("账户 eId:%d,uId:%d 业务%s权限无授权", eId, uId, funcCode))
  68. return
  69. }
  70. return res.UseCount, res.SurplusCount, nil
  71. }
  72. // ResourcePowerDeduct 资源中心消费
  73. // eid 企业id
  74. // uId 新用户id;非mongodb中user表id
  75. // funcCode 业务代码
  76. // deductNum 扣除数量
  77. // ids 扣除详情id;例如数据导出信息id等数据
  78. func ResourcePowerDeduct(eId, uId int64, funcCode, appId string, deductNum int64, ids []string) error {
  79. res, err := ResourceCenterRpc.Deduction(gctx.New(), &pb.DeductionReq{
  80. Appid: appId,
  81. EntId: eId,
  82. UserId: uId,
  83. FunctionCode: funcCode,
  84. Count: deductNum,
  85. Ids: ids,
  86. })
  87. if err != nil {
  88. return NewErrorWithCode(GATEWAY_RPC_RESOURCECENTER_ERR, err.Error())
  89. }
  90. //0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权
  91. switch res.Status {
  92. case 0:
  93. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("账户 eId:%d,uId:%d 扣除业务%s权限失败", eId, uId, funcCode))
  94. case -1:
  95. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_EXPIRED, fmt.Sprintf("账户 eId:%d,uId:%d 扣除业务%s权限失败,权限已过期", eId, uId, funcCode))
  96. case -2:
  97. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTENOUGH, fmt.Sprintf("账户 eId:%d,uId:%d 扣除业务%s权限失败,余额不足", eId, uId, funcCode))
  98. case -3:
  99. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTHAS, fmt.Sprintf("账户 eId:%d,uId:%d 扣除业务%s权限失败", eId, uId, funcCode))
  100. }
  101. return nil
  102. }
  103. // ResourcePowerRecharge 资源中心充值
  104. // eid 企业id
  105. // uId 新用户id;非mongodb中user表id
  106. // funcCode 业务代码
  107. // deductNum 扣除数量
  108. // ids 扣除详情id;例如数据导出信息id等数据
  109. func ResourcePowerRecharge(eId, uId int64, funcCode, appId string, deductNum int64, ids []string) error {
  110. res, err := ResourceCenterRpc.Recharge(gctx.New(), &pb.RechargeReq{
  111. Appid: appId,
  112. EntId: eId,
  113. UserId: uId,
  114. FunctionCode: funcCode,
  115. Count: deductNum,
  116. Ids: ids,
  117. })
  118. if err != nil {
  119. return NewErrorWithCode(GATEWAY_RPC_RESOURCECENTER_ERR, err.Error())
  120. }
  121. switch res.Status {
  122. case 0:
  123. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("账户 eId:%d,uId:%d 充值业务%s权限失败", eId, uId, funcCode))
  124. case -1:
  125. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_EXPIRED, fmt.Sprintf("账户 eId:%d,uId:%d 充值业务%s权限失败,权限已过期", eId, uId, funcCode))
  126. case -2:
  127. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTENOUGH, fmt.Sprintf("账户 eId:%d,uId:%d 充值业务%s权限失败,余额不足", eId, uId, funcCode))
  128. case -3:
  129. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTHAS, fmt.Sprintf("账户 eId:%d,uId:%d 充值业务%s权限失败", eId, uId, funcCode))
  130. case -4: //超出可拥有最大限额
  131. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_RECHARGE_FULL, fmt.Sprintf("账户 eId:%d,uId:%d 充值业务%s权限失败", eId, uId, funcCode))
  132. }
  133. return nil
  134. }