IntegralJob.php 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace app\jobs\integral;
  3. use app\services\user\UserAwardIntegralServices;
  4. use app\services\user\UserServices;
  5. use crmeb\basic\BaseJobs;
  6. use crmeb\traits\QueueTrait;
  7. use think\facade\Log;
  8. /**
  9. * 订单消息队列
  10. * Class OrderJob
  11. * @package app\jobs
  12. */
  13. class IntegralJob extends BaseJobs
  14. {
  15. use QueueTrait;
  16. public function dealOrderIntegral($order)
  17. {
  18. /** @var UserAwardIntegralServices $awardIntegralService */
  19. $awardIntegralService = app()->make(UserAwardIntegralServices::class);
  20. /** @var UserServices $userService */
  21. $userService = app()->make(UserServices::class);
  22. $user = $userService->getUserInfo($order['uid']);
  23. $integral_price = $awardIntegralService->getPrice($order['id']);
  24. $total_price = $order['total_price'];
  25. return $awardIntegralService->transaction(function () use ($awardIntegralService, $userService, $user, $integral_price, $total_price, $order) {
  26. try {
  27. //添加静态积分
  28. $static_integral_ratio = sys_config('static_integral_ratio', 0);
  29. $give_static_integral = bcdiv(bcmul($total_price, $static_integral_ratio), 100, 2);
  30. if ($give_static_integral > 0) {
  31. $rate = sys_config('static_integral_rate', 3);
  32. $extract_sum = bcmul($total_price, $rate, 2);
  33. $mark = '购买商品,获得静态积分';
  34. $awardIntegralService->incIntegral($order['uid'], $integral_price, $give_static_integral, $total_price, 0, $extract_sum, $order['id'], $mark);
  35. }
  36. //添加奖池
  37. $lake_ratio = sys_config('lake_ratio', 0);
  38. $add_lake = bcdiv(bcmul($total_price, $lake_ratio), 100, 2);
  39. if ($add_lake > 0) {
  40. $mark = '用户' . $order['uid'] . '购买商品,添加资金池';
  41. $awardIntegralService->addLake($add_lake, $order['id'], $mark);
  42. }
  43. //TODO 加动态积分
  44. //推荐奖
  45. $spread = $userService->getUserInfo($user['spread_uid']);
  46. if ($spread) {
  47. if ($awardIntegralService->getPaySum($spread['uid']) >= 1000 || $awardIntegralService->getHourExtractPaySum($spread['uid'], 24) >= 1000) {
  48. $award_ratio = sys_config('recommend_integral', 0);
  49. $give_action_integral = bcdiv(bcmul($total_price, $award_ratio), 100, 2);
  50. if ($give_action_integral > 0) {
  51. $rate = sys_config('action_integral_rate', 3);
  52. $extract_sum = bcmul($give_action_integral, $rate, 2);
  53. $mark = '推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得推荐积分';
  54. $awardIntegralService->incIntegral($spread['uid'], $integral_price, $give_action_integral, $total_price, 1, $extract_sum, $order['id'], $mark);
  55. }
  56. }
  57. }
  58. return true;
  59. } catch (\Throwable $e) {
  60. Log::error('处理积分奖池失败,失败原因:' . $e->getMessage());
  61. return false;
  62. }
  63. });
  64. }
  65. /**
  66. * 减积分
  67. * @param int $uid 用户
  68. * @param float $static 静态积分
  69. * @param float $action 动态积分
  70. * @param float $cash 资金池
  71. * @param int $link_id 关联ID
  72. * @param string $mark 备注
  73. */
  74. public function decIntegral(int $uid, float $static, float $action, float $cash, int $link_id = 0, string $mark = '')
  75. {
  76. }
  77. }