Achievement.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. /**
  3. * Created by CRMEB.
  4. * Copyright (c) 2017~2019 http://www.crmeb.com All rights reserved.
  5. * Author: liaofei <136327134@qq.com>
  6. * Date: 2019/3/27 21:44
  7. */
  8. namespace app\models\user;
  9. use crmeb\traits\ModelTrait;
  10. use crmeb\basic\BaseModel;
  11. /**
  12. * TODO 用户消费新增金额明细 model
  13. * Class UserBill
  14. * @package app\models\user
  15. */
  16. class Achievement extends BaseModel
  17. {
  18. /**
  19. * 数据表主键
  20. * @var string
  21. */
  22. protected $pk = 'id';
  23. /**
  24. * 模型名称
  25. * @var string
  26. */
  27. protected $name = 'achievement';
  28. use ModelTrait;
  29. public static function lastMonthAchievement($uid)
  30. {
  31. $achievement = self::where('uid', $uid)
  32. ->where('from_uid', '<>', $uid)
  33. ->whereTime('add_time', 'last month')
  34. ->sum('achievement');
  35. return $achievement;
  36. }
  37. public static function achievement($uid)
  38. {
  39. $achievement = self::where('uid', $uid)
  40. ->where('from_uid', '<>', $uid)
  41. ->sum('achievement');
  42. return $achievement;
  43. }
  44. public static function recommendeAchievement($uid)
  45. {
  46. $uids = User::where('spread_uid', $uid)->column('uid');
  47. $achievement = self::where('uid', 'in', $uids)
  48. ->where('from_uid = uid')
  49. ->sum('achievement');
  50. return $achievement;
  51. }
  52. public static function setLastMonthAchievementUse()
  53. {
  54. return self::whereTime('add_time', 'last month')
  55. ->where('month', 0)
  56. ->update(['month' => 1]);
  57. }
  58. public static function monthAward()
  59. {
  60. $users = User::select();
  61. $get = [];
  62. $award = sys_data('month_award');
  63. array_multisort(array_column($award, 'achievement'), SORT_ASC, $award);
  64. $res = true;
  65. foreach ($users as $v) {
  66. $achievement = self::lastMonthAchievement($v['uid']);
  67. $sum_award = 0;
  68. $sum_integral = 0;
  69. foreach ($award as $k => $vv) {
  70. if ($vv['achievement'] <= $achievement) {
  71. //如果业绩大于已发放业绩并且业绩大于等于发放下限(10000)
  72. if (isset($award[$k + 1])) {
  73. //下一级的发放下限/业绩~本级发放下限业绩
  74. $send = $award[$k + 1]['achievement'] > $achievement ? ($award[$k + 1]['achievement'] - $vv['achievement']) : ($achievement - $vv['achievement']);
  75. } else {
  76. $send = $achievement - $vv['achievement'];
  77. }
  78. $sum_award = bcadd($sum_award, bcmul($send, bcdiv($vv['ratio'], 100, 2), 2), 2);
  79. $sum_integral = bcadd($sum_integral, bcmul($send, bcdiv($vv['integral_ratio'], 100, 2), 2), 2);
  80. }
  81. }
  82. if ($sum_award > 0) {
  83. $real_send = bcmul($sum_award, 0.5, 2);
  84. $sum_integral = bcadd($sum_integral, bcsub($sum_award, $real_send, 2), 2);
  85. $res = $res && User::where('uid', $v['uid'])->inc('brokerage_price', $real_send)->update();
  86. $res = $res && UserBill::income('月度业绩分红', $v['uid'], 'now_money', 'brokerage', $real_send, 0, User::where('uid', $v['uid'])->value('brokerage_price'), '月业绩' . $achievement . '分红获得佣金' . $real_send);
  87. }
  88. if ($sum_integral > 0) {
  89. $res = $res && User::where('uid', $v['uid'])->inc('integral', $sum_integral)->update();
  90. $res = $res && UserBill::income('月度业绩分红(消费券)', $v['uid'], 'integral', 'brokerage_month_integral', $sum_integral, 0, User::where('uid', $v['uid'])->value('integral'), '月业绩' . $achievement . '分红获得消费券' . $sum_integral);
  91. }
  92. }
  93. return $res && self::setLastMonthAchievementUse();
  94. }
  95. }