Upgrade.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. namespace App\Modes;
  3. use Carbon\Carbon;
  4. use Illuminate\Database\Eloquent\Model;
  5. /**
  6. * App\Modes\Upgrade
  7. *
  8. * @property int $id
  9. * @property int|null $uid 会员ID
  10. * @property int $order_id 订单id
  11. * @property int $user_level 等级(user_level.id)
  12. * @property int $apply_level 申请等级(user_level.id)
  13. * @property float $money 费用
  14. * @property int $status 状态 1-未支付 2-待审核 3-完成 4-支付失败 5-审核拒绝 9-失效
  15. * @property string|null $remark 备注
  16. * @property \Illuminate\Support\Carbon $created_at
  17. * @property \Illuminate\Support\Carbon $updated_at
  18. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade newModelQuery()
  19. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade newQuery()
  20. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade query()
  21. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereApplyLevel($value)
  22. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereCreatedAt($value)
  23. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereId($value)
  24. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereMoney($value)
  25. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereOrderId($value)
  26. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereRemark($value)
  27. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereStatus($value)
  28. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereUid($value)
  29. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereUpdatedAt($value)
  30. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereUserLevel($value)
  31. * @mixin \Eloquent
  32. * @property int $province 申请代理省份(area.id)
  33. * @property int $city 申请代理市(area.id)
  34. * @property int $district 申请代理区(area.id)
  35. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereCity($value)
  36. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereDistrict($value)
  37. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereProvince($value)
  38. * @property int $upgrade_way 升级方式 1-交费 2-月任务量达标 3-年任务量达标 4-推荐量达标
  39. * @property-read \App\Modes\User $User
  40. * @method static \Illuminate\Database\Eloquent\Builder|\App\Modes\Upgrade whereUpgradeWay($value)
  41. */
  42. class Upgrade extends Model
  43. {
  44. protected $table = 'upgrade';
  45. /**
  46. * 获取代理费
  47. * @author lyh
  48. * @date 2019/3/25
  49. * @param int $applyLevel 申请等级
  50. * @param int int $id 当前用户
  51. * @description
  52. * 该处算法:
  53. * 第一优先为高级别代理费-用户当前级别代理费(即便用户为非交费升级)
  54. */
  55. public static function getCost($applyLevel, User $user)
  56. {
  57. // 获取高级别代理费
  58. $applyConfig = Proxy::getConfig($user->id, $user->province, $user->city, $user->district, $applyLevel);
  59. // 获取当前级别代理费
  60. $currentConfig = Proxy::getConfig($user->id, $user->province, $user->city, $user->district);
  61. return round($applyConfig->upgrade_money - $currentConfig->upgrade_money, 2);
  62. }
  63. /**
  64. * 支付确认升级处理
  65. * @author lyh
  66. * @date 2019/3/25
  67. * @param $out_trade_no
  68. * @description
  69. * 支付确认之后审核
  70. */
  71. public static function updateByPay($out_trade_no)
  72. {
  73. $order = Order::whereOrderNo($out_trade_no)->first();
  74. $upgrade = Upgrade::whereOrderId($order->id)->first();
  75. $updateRes = Upgrade::whereOrderId($order->id)->update(['status' => 2]);
  76. if (empty($updateRes)) {
  77. ErrorLog::saveMsg("订单[{$order->id}]确认支付保存失败");
  78. }
  79. $userUpData = ['level' => $upgrade->apply_level];
  80. // if ($upgrade->apply_level == 6 || $upgrade->apply_level == 7) {
  81. // User::whereId($order->uid)->update($userUpData);
  82. // }
  83. }
  84. /**
  85. * 判断是否达到升级条件
  86. * @author lyh
  87. * @date 2019/3/25
  88. * @param int $id
  89. * @description
  90. * 业务累积/任务-万
  91. *B 一月0.4/,2/年
  92. *C 一月1/年5
  93. *D 一月2/年10
  94. *E 一月10/年50
  95. *F 一月30/年100
  96. *G 一月50/年200
  97. *业务累积:统计自身以及两层下级(直推+间一+间二)的合计代理费业绩以及广告业务业绩总额达到升级额度。
  98. */
  99. public static function condition(int $id)
  100. {
  101. $resData = [];
  102. $user = User::find($id);
  103. $is = true;
  104. // 查看是否达到 B 级要求
  105. if ($user->level < 2) {
  106. $resData[] = [
  107. 'level' => 2,
  108. 'required' => $is = self::requierdLevel(2, $id) ? true : false
  109. ];
  110. }
  111. // 查看是否达到 C 级要求 并且已经满足下一级的升级要求
  112. if ($user->level < 3 && $is == true) {
  113. $resData[] = [
  114. 'level' => 3,
  115. 'required' => $is = self::requierdLevel(3, $id) ? true : false
  116. ];
  117. }
  118. // 查看是否达到 D 级要求
  119. if ($user->level < 4 && $is == true) {
  120. $resData[] = [
  121. 'level' => 4,
  122. 'required' => $is = self::requierdLevel(4, $id) ? true : false
  123. ];
  124. }
  125. // 查看是否达到 E 级要求
  126. if ($user->level < 5 && $is == true) {
  127. $resData[] = [
  128. 'level' => 5,
  129. 'required' => $is = self::requierdLevel(5, $id) ? true : false
  130. ];
  131. }
  132. // 查看是否达到 F 级要求
  133. if ($user->level < 6 && $is == true) {
  134. $resData[] = [
  135. 'level' => 6,
  136. 'required' => $is = self::requierdLevel(6, $id) ? true : false
  137. ];
  138. }
  139. // 查看是否达到 G 级要求
  140. if ($user->level < 7 && $is == true) {
  141. $resData[] = [
  142. 'level' => 7,
  143. 'required' => $is = self::requierdLevel(7, $id) ? true : false
  144. ];
  145. }
  146. return $resData;
  147. }
  148. /**
  149. * 查询是否升级达到要求
  150. * @author lyh
  151. * @date 2019/3/25
  152. * @param int $level 申请等级
  153. * @description
  154. * 业务累积/任务-万
  155. *B 一月0.4/,2/年
  156. *C 一月1/年5
  157. *D 一月2/年10
  158. *E 一月10/年50
  159. *F 一月30/年100
  160. *G 一月50/年200
  161. *业务累积:升级任务量:直推投放广告交费+自己投放广告交费+自己所交代理费+自己点币充值费
  162. */
  163. public static function requierdLevel(int $level, $uid)
  164. {
  165. $config = Proxy::getConfig($uid, null, null, null, $level);
  166. if (empty($config)) {
  167. return false;
  168. }
  169. // 自身以及两层下级id
  170. $ids = User::getAllInvite($uid);
  171. // 判断月业务累计是否达到要求
  172. //获取本月开始时间和结束时间
  173. $monthStart = Carbon::now()->firstOfMonth();
  174. $monthEnd = Carbon::now()->subMonth(-1)->firstOfMonth();
  175. $monthData = User::get_business_goal($uid,$monthStart,$monthEnd);
  176. // if ($monthData > $config->upgrade_business_month && $config->upgrade_business_month > 0 ) {
  177. // return 2;
  178. // }
  179. if ($monthData > $config->upgrade_business_month ) {
  180. return 2;
  181. }
  182. // 判断年业务累计是否达到要求
  183. $yearStart = Carbon::now()->firstOfYear();
  184. $yearEnd = Carbon::now()->subYear(-1)->firstOfYear();
  185. $yearData = User::get_business_goal($uid,$yearStart,$yearEnd);
  186. // if ($yearData > $config->upgrade_business_year && $config->upgrade_business_year > 0) {
  187. // return 3;
  188. // }
  189. if ($yearData > $config->upgrade_business_year) {
  190. return 3;
  191. }
  192. //靠推荐量升级
  193. $user = User::find($uid);
  194. $inviteNum = User::whereInvitor($uid)->count('id');
  195. if (!empty(intval($config->upgrade_invite)) && $inviteNum >= $config->upgrade_invite) {
  196. return 4;
  197. }
  198. return false;
  199. }
  200. /**
  201. * h
  202. * @author lyh
  203. * @date 2019/4/3
  204. * @param $where
  205. * @param $field
  206. * @param $userField
  207. * @description
  208. */
  209. public static function getList($where, $field = [], $userField = [])
  210. {
  211. $userField = array_merge(['id', 'mobile', 'nick_name', 'real_name'], $userField);
  212. $field = array_merge(['id', 'uid', 'order_id', 'money', 'status', 'created_at'], $field);
  213. $upgrade = Upgrade::where($where);
  214. if (\Auth::user()->is_super == 3) {
  215. $upgrade = $upgrade->whereIn('uid', getIds());
  216. }
  217. $upgrade = $upgrade->select($field)
  218. ->with(['User' => function ($query) use ($userField) {
  219. $query->select($userField);
  220. }])
  221. ->paginate(perPage());
  222. return $upgrade;
  223. }
  224. public function User()
  225. {
  226. return $this->hasOne('App\Modes\User', 'id', 'uid');
  227. }
  228. /**
  229. *添加升级记录
  230. *@author wsl
  231. * @date 2019-09-10
  232. * @type 1-区域代理升级
  233. * @remark 描述
  234. * @uid 用户id
  235. */
  236. public static function addUpgradeLog($type,$remark,$uid){
  237. $data=[
  238. 'type' =>$type,
  239. 'remark' =>$remark,
  240. 'uid' =>$uid
  241. ];
  242. $r=\DB::table('upgrade_log')->insert($data);
  243. return $r;
  244. }
  245. }