resourceCenter.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. // CheekResourcePower 校验账户是否有对应权益
  23. // eid 企业id
  24. // uId 新用户id;非mongodb中user表id
  25. // funcCode 业务代码
  26. // reqFuncCode 通用结构&&需要校验权限则先判断此接口是否有此functionCode的方法
  27. // appid 平台标识
  28. func CheekResourcePower(eId, uId int64, funcCodeRule, reqFuncCode, Appid string) 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. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_POWERCODE_ERR, fmt.Sprintf("账户 eId:%d,uId:%d 无效funccode:%s req:%s权限", eId, uId, funcCodeRule, reqFuncCode))
  41. }
  42. funcCode = reqFuncCode
  43. }
  44. res, err := ResourceCenterRpc.CheckPower(gctx.New(), &pb.CheckPowerReq{
  45. Appid: Appid,
  46. FunctionCode: funcCode,
  47. EntId: eId,
  48. UserId: uId,
  49. })
  50. if err != nil {
  51. return NewErrorWithCode(GATEWAY_RPC_RESOURCECENTER_ERR, err.Error())
  52. }
  53. //0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权
  54. switch res.Status {
  55. case 0:
  56. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("账户 eId:%d,uId:%d 无业务%s权限", eId, uId, funcCode))
  57. case -1:
  58. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_EXPIRED, fmt.Sprintf("账户 eId:%d,uId:%d 业务%s权限已过期", eId, uId, funcCode))
  59. case -2:
  60. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTENOUGH, fmt.Sprintf("账户 eId:%d,uId:%d 业务%s权限余额不足", eId, uId, funcCode))
  61. case -3:
  62. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTHAS, fmt.Sprintf("账户 eId:%d,uId:%d 业务%s权限无授权", eId, uId, funcCode))
  63. }
  64. return nil
  65. }
  66. // ResourcePowerDeduct 资源中心消费
  67. // eid 企业id
  68. // uId 新用户id;非mongodb中user表id
  69. // funcCode 业务代码
  70. // deductNum 扣除数量
  71. // ids 扣除详情id;例如数据导出信息id等数据
  72. func ResourcePowerDeduct(eId, uId int64, funcCode, appId string, deductNum int64, ids []string) error {
  73. res, err := ResourceCenterRpc.Deduction(gctx.New(), &pb.DeductionReq{
  74. Appid: appId,
  75. EntId: eId,
  76. UserId: uId,
  77. FunctionCode: funcCode,
  78. Count: deductNum,
  79. Ids: ids,
  80. })
  81. if err != nil {
  82. return NewErrorWithCode(GATEWAY_RPC_RESOURCECENTER_ERR, err.Error())
  83. }
  84. //0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权
  85. switch res.Status {
  86. case 0:
  87. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("账户 eId:%d,uId:%d 扣除业务%s权限失败", eId, uId, funcCode))
  88. case -1:
  89. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_EXPIRED, fmt.Sprintf("账户 eId:%d,uId:%d 扣除业务%s权限失败,权限已过期", eId, uId, funcCode))
  90. case -2:
  91. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTENOUGH, fmt.Sprintf("账户 eId:%d,uId:%d 扣除业务%s权限失败,余额不足", eId, uId, funcCode))
  92. case -3:
  93. return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_NOTHAS, fmt.Sprintf("账户 eId:%d,uId:%d 扣除业务%s权限失败", eId, uId, funcCode))
  94. }
  95. return nil
  96. }