1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <?php
- namespace app\jobs\integral;
- use app\services\user\UserAwardIntegralServices;
- use app\services\user\UserServices;
- use crmeb\basic\BaseJobs;
- use crmeb\traits\QueueTrait;
- use think\facade\Log;
- /**
- * 订单消息队列
- * Class OrderJob
- * @package app\jobs
- */
- class IntegralJob extends BaseJobs
- {
- use QueueTrait;
- public function dealOrderIntegral($order)
- {
- /** @var UserAwardIntegralServices $awardIntegralService */
- $awardIntegralService = app()->make(UserAwardIntegralServices::class);
- /** @var UserServices $userService */
- $userService = app()->make(UserServices::class);
- $user = $userService->getUserInfo($order['uid']);
- $integral_price = $awardIntegralService->getPrice($order['id']);
- $total_price = $order['total_price'];
- return $awardIntegralService->transaction(function () use ($awardIntegralService, $userService, $user, $integral_price, $total_price, $order) {
- try {
- //添加静态积分
- $static_integral_ratio = sys_config('static_integral_ratio', 0);
- $give_static_integral = bcdiv(bcmul($total_price, $static_integral_ratio), 100, 2);
- if ($give_static_integral > 0) {
- $rate = sys_config('static_integral_rate', 3);
- $extract_sum = bcmul($total_price, $rate, 2);
- $mark = '购买商品,获得静态积分';
- $awardIntegralService->incIntegral($order['uid'], $integral_price, $give_static_integral, $total_price, 0, $extract_sum, $order['id'], $mark);
- }
- //添加奖池
- $lake_ratio = sys_config('lake_ratio', 0);
- $add_lake = bcdiv(bcmul($total_price, $lake_ratio), 100, 2);
- if ($add_lake > 0) {
- $mark = '用户' . $order['uid'] . '购买商品,添加资金池';
- $awardIntegralService->addLake($add_lake, $order['id'], $mark);
- }
- //TODO 加动态积分
- //推荐奖
- $spread = $userService->getUserInfo($user['spread_uid']);
- if ($spread) {
- if ($awardIntegralService->getPaySum($spread['uid']) >= 1000 || $awardIntegralService->getHourExtractPaySum($spread['uid'], 24) >= 1000) {
- $award_ratio = sys_config('recommend_integral', 0);
- $give_action_integral = bcdiv(bcmul($total_price, $award_ratio), 100, 2);
- if ($give_action_integral > 0) {
- $rate = sys_config('action_integral_rate', 3);
- $extract_sum = bcmul($give_action_integral, $rate, 2);
- $mark = '推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得推荐积分';
- $awardIntegralService->incIntegral($spread['uid'], $integral_price, $give_action_integral, $total_price, 1, $extract_sum, $order['id'], $mark);
- }
- }
- }
- return true;
- } catch (\Throwable $e) {
- Log::error('处理积分奖池失败,失败原因:' . $e->getMessage());
- return false;
- }
- });
- }
- /**
- * 减积分
- * @param int $uid 用户
- * @param float $static 静态积分
- * @param float $action 动态积分
- * @param float $cash 资金池
- * @param int $link_id 关联ID
- * @param string $mark 备注
- */
- public function decIntegral(int $uid, float $static, float $action, float $cash, int $link_id = 0, string $mark = '')
- {
- }
- }
|