surplus.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package service
  2. import (
  3. "errors"
  4. "time"
  5. . "app.yhyue.com/moapp/jybase/date"
  6. . "bp.jydev.jianyu360.cn/BaseService/resourceCenter/public/entity"
  7. )
  8. /*
  9. * 获取资源剩余情况
  10. * @param appid
  11. * @param function_code 功能代码
  12. * @param user_id 用户id
  13. * @param ent_id 企业id
  14. * @return 状态 0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权
  15. * @return 总数
  16. * @return 剩余数
  17. * @return 错误信息
  18. */
  19. func Surplus(appid, function_code string, user_id, ent_id, ent_user_id int64) (int64, int64, int64, error) {
  20. function := Base_function.FindByCode(appid, function_code)
  21. if function == nil {
  22. return 0, 0, 0, errors.New("功能原始表中没有找到该功能")
  23. }
  24. myPowers := Base_power.FindMyPower(appid, function_code, user_id, ent_id)
  25. if myPowers == nil || len(*myPowers) == 0 {
  26. return -1, 0, 0, errors.New("不在有效期内")
  27. }
  28. if function.Power_rule == 1 { //只对周期进行校验
  29. return 1, 0, 0, nil
  30. }
  31. if function.Power_rule == 2 { //周期+数量校验
  32. use_count, surplus_count := int64(0), int64(0)
  33. for _, v := range *myPowers {
  34. if v.Power_type == 2 && !Base_ent_empower.HasEmpower(appid, function_code, ent_id, ent_user_id) {
  35. return -3, 0, 0, errors.New("没有对该用户进行授权")
  36. }
  37. use_count += v.Use_count
  38. surplus_count += v.Surplus_count
  39. }
  40. if surplus_count > 0 {
  41. return 1, use_count, surplus_count, nil
  42. } else {
  43. return -2, use_count, surplus_count, nil
  44. }
  45. } else if function.Power_rule == 3 { //周期+频率+数量校验
  46. for _, v := range *myPowers {
  47. if v.Power_type == 2 && !Base_ent_empower.HasEmpower(appid, function_code, ent_id, ent_user_id) {
  48. return -3, 0, 0, errors.New("没有对该用户进行授权")
  49. }
  50. use, err := Base_resource_use.FindLastOne(appid, function_code, user_id, ent_id, v.Power_type)
  51. if err != nil {
  52. return 0, 0, 0, errors.New("查询资源使用记录失败")
  53. } else if use == nil {
  54. return 1, v.Strategy_count, v.Strategy_count, nil
  55. }
  56. create_time, err := time.ParseInLocation(Date_Full_Layout, use.Create_time, time.Local)
  57. if err != nil {
  58. return 0, 0, 0, errors.New("资源充值/消耗表创建时间错误," + err.Error())
  59. }
  60. now := time.Now()
  61. if (*myPowers)[0].Limit_strategy == "1d" {
  62. if create_time.Year() == now.Year() && create_time.Month() == now.Month() && create_time.Day() == now.Day() {
  63. if use.Surplus_count > 0 {
  64. return 1, v.Strategy_count, use.Surplus_count, nil
  65. } else {
  66. return -2, v.Strategy_count, use.Surplus_count, nil
  67. }
  68. } else {
  69. return 1, v.Strategy_count, v.Strategy_count, nil
  70. }
  71. } else if (*myPowers)[0].Limit_strategy == "1m" {
  72. if create_time.Year() == now.Year() && create_time.Month() == now.Month() {
  73. if use.Surplus_count > 0 {
  74. return 1, v.Strategy_count, use.Surplus_count, nil
  75. } else {
  76. return -2, v.Strategy_count, use.Surplus_count, nil
  77. }
  78. } else {
  79. return 1, v.Strategy_count, v.Strategy_count, nil
  80. }
  81. } else {
  82. return 0, 0, 0, errors.New("limit_strategy格式错误")
  83. }
  84. }
  85. }
  86. return 0, 0, 0, nil
  87. }