syntax = "proto3";

option go_package="./pb";

message Empower {
  int64 ent_user_id = 1; //企业用户id
}

message PowerReq {
  string appid = 1;
  string goods_code = 2; 	     //商品代码
  int64 goods_spec_id = 3;       //商品规格id
  int64 ent_id = 4;              //企业id
  int64 account_id = 5;          //个人/企业员工账户id
  int64 buy_num = 6;     	     //购买的数量或者购买的份数
  int64 type = 7;        	     //操作类型 1：开通权益 -1：取消权益
  string start_time = 8;         //权益开始时间 格式：2006-01-02 15:04:05
  string end_time = 9;           //权益到期时间 格式：2006-01-02 15:04:05
  int64 ent_account_id = 10;     //企业账户id
}

message CheckPowerReq {
  string appid = 1;
  string function_code = 2; //功能代码
  int64 account_id = 3;     //账户id
  int64 ent_account_id = 4; //企业账户id
  int64 ent_id = 5;         //企业id
  int64 ent_user_id = 6;    //企业用户id 
}

message DeductionReq {
  string appid = 1;
  string function_code = 2; //功能代码
  int64 account_id = 3;     //账户id
  int64 ent_account_id = 4; //企业账户id
  int64 count = 5;          //扣除数量
  repeated string ids = 6;  //id列表
}

message RechargeReq {
  string appid = 1;
  string function_code = 2; //功能代码
  int64 account_id = 3;     //账户id
  int64 ent_account_id = 4; //企业账户id
  int64 count = 5;          //充值数量
  repeated string ids = 6;  //id列表
}

message EmpowerReq {
  string appid = 1;
  string function_code = 2;       //功能代码
  int64 ent_id = 3;               //企业id
  repeated int64 ent_user_id = 4; //企业用户id
}

message AllEmpowerReq {
  string appid = 1;
  repeated string function_module = 2;      //功能分类
  int64 ent_id = 3;               			//企业id
  repeated int64 ent_user_id = 4; 			//企业用户id
}

message CrReEmpowerReq {
  string appid = 1;
  repeated string function_module = 2;      //功能分类
  repeated string function_code = 3;        //功能代码
  int64 ent_id = 4;               			//企业id
  repeated int64 ent_user_id = 5; 			//企业用户id
}

message EmpowerListReq {
  string appid = 1;
  string function_code = 2; //功能代码
  int64 ent_id = 3;         //企业id
  int64 page_num = 4;       //开始页码，小于1的话，返回所有数据，不进行分页
  int64 page_size = 5;      //每页大小
}

message EmpowerListResp {
  int64 count = 1;            //总条数，只有第一页的时候才返回, 如果企业下所有人都有权限返回-1
  repeated Empower list = 2;  //列表，如果企业下所有人都有权限，返回空数组
}

message Resp {
  int64 status = 1;         //0：失败 1：成功 -1：不在有效期内 -2：数量不足 -3：没有授权 -4：超额
  int64 use_count = 2;      //使用数量
  int64 surplus_count = 3;  //剩余数量
  string start_time = 4;    //权益开始时间
  string end_time = 5;      //权益到期时间
}

message HaspowersReq {
  string appid = 1;
  int64 account_id = 2;     //账户id
  int64 ent_account_id = 3; //企业账户id
  int64 ent_id = 4;         //企业id
  int64 ent_user_id = 5;    //企业用户id 
}

message HaspowersResp {
  repeated string powers = 1; //所有权益
}

message WaitEmpowerDetailReq {
  string appid = 1;
  string function_code = 2; //功能代码
  int64 ent_id = 3;         //企业id
}

message WaitEmpowerDetailBySpecIdReq {
  string appid = 1;
  int64 spec_id = 2; //功能代码
  int64 ent_id = 3;         //企业id
}

message WaitEmpowerDetailsResp {
  repeated WaitEmpowerDetailResp waitEmpowerDetails = 1;
}

message WaitEmpowerDetailResp {
  int64 id = 1;               //id
  string start_time = 2;      //开始时间
  string end_time = 3;        //结束时间
  int64 empower_count = 4;    //授权数量
  int64 use_count = 5;        //使用数量
  string limit_strategy = 6;  //频率限制
}

service Resource {
  //开通或者取消用户/企业权益
  rpc PowerHandle(PowerReq) returns(Resp);
  //检查用户/企业权益
  rpc CheckPower(CheckPowerReq) returns(Resp);
  //资源扣减
  rpc Deduction(DeductionReq) returns(Resp);
  //资源充值
  rpc Recharge(RechargeReq) returns(Resp);
  //先把有权限的人清空，再把权益授权给新的人
  rpc ReEmpower(EmpowerReq) returns(Resp);
  //先根据功能分类把人的权益清空，再给人授权新的权益
  rpc CrReEmpower(CrReEmpowerReq) returns(Resp);
  //授权
  rpc Empower(EmpowerReq) returns(Resp);
  //根据功能代码取消授权
  rpc CancelEmpower(EmpowerReq) returns(Resp);
  //根据功能分类取消授权
  rpc CancelAllEmpower(AllEmpowerReq) returns(Resp);
  //授权列表
  rpc EmpowerList(EmpowerListReq) returns(EmpowerListResp);
  //所有的权益
  rpc Haspowers(HaspowersReq) returns(HaspowersResp);
  //根据功能代码获取待授权详情
  rpc WaitEmpowerDetail(WaitEmpowerDetailReq) returns(WaitEmpowerDetailResp);
  //根据商品规格获取待授权详情
  rpc WaitEmpowerDetailBySpecId(WaitEmpowerDetailBySpecIdReq) returns(WaitEmpowerDetailsResp);
}