Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

杨树贤 / ic_server_welfare

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Settings
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Find file
Normal viewHistoryPermalink
Switch branch/tag
  • ic_server_welfare
  • app
  • Http
  • Controllers
  • UserExchangesController.php
UserExchangesController.php 6.93 KB
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
1 2 3 4 5 6 7
<?php


namespace App\Http\Controllers;


use App\Http\Filters\UserExchangeFilter;
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
8
use App\Models\ExchangeSetting;
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
9
use App\Models\UserExchange;
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
10 11 12
use App\Models\UserIntegral;
use Common\Model\RedisModel;
use Hhxsv5\LaravelS\Swoole\Task\Task;
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
13 14 15 16
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

杨树贤's avatar
添加控制器的代码注释和处理upodate结果判断
d852b681
 
杨树贤 committed 5 years ago
17 18 19 20 21
/**
 * 用户红包兑换管理
 * Class UserExchangesController
 * @package App\Http\Controllers
 */
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
22 23
class UserExchangesController extends Controller
{
杨树贤's avatar
添加控制器的代码注释和处理upodate结果判断
d852b681
 
杨树贤 committed 5 years ago
24 25 26 27
    /**
     * @param Request $request
     * @return array
     */
杨树贤's avatar
修改服务请求为POST
60771229
 
杨树贤 committed 5 years ago
28
    public function show(Request $request)
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
29
    {
杨树贤's avatar
修改服务请求为POST
60771229
 
杨树贤 committed 5 years ago
30
        $id = $request->id;
杨树贤's avatar
审核通过后需要对剩余金额进行更新以及批量审核
34ff923f
 
杨树贤 committed 5 years ago
31
        $userExchange = UserExchange::with('exchange_setting')->where('id', $id)->first()->toArray();
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
32 33 34 35

        return $this->Export(0, 'ok', ['data' => $userExchange]);
    }

杨树贤's avatar
添加控制器的代码注释和处理upodate结果判断
d852b681
 
杨树贤 committed 5 years ago
36 37 38
    /**
     * 用户兑换红包列表
     * @param Request $request
杨树贤's avatar
将数据库操作挪到model里面,同时删除多余的业务
48660cee
 
杨树贤 committed 5 years ago
39
     * @param UserExchange $userExchange
杨树贤's avatar
添加控制器的代码注释和处理upodate结果判断
d852b681
 
杨树贤 committed 5 years ago
40 41 42
     * @param UserExchangeFilter $filter
     * @return array
     */
杨树贤's avatar
将数据库操作挪到model里面,同时删除多余的业务
48660cee
 
杨树贤 committed 5 years ago
43
    public function index(Request $request, UserExchange $userExchange, UserExchangeFilter $filter)
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
44
    {
杨树贤's avatar
修复使用$request->all()的问题
01a0b3ba
 
杨树贤 committed 5 years ago
45 46
        $page = $request->has('page') ? $request->page : self::DEFAULT_PAGE;
        $pageSize = $request->has('page_size') ? $request->page_size : self::DEFAULT_PAGE_SIZE;
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
47

杨树贤's avatar
将数据库操作挪到model里面,同时删除多余的业务
48660cee
 
杨树贤 committed 5 years ago
48
        $res = $userExchange->getUserExchangeList($page, $pageSize, $filter);
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
49

杨树贤's avatar
将数据库操作挪到model里面,同时删除多余的业务
48660cee
 
杨树贤 committed 5 years ago
50
        return $this->Export(0, 'ok', $res);
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
51 52 53
    }


杨树贤's avatar
审核通过后需要对剩余金额进行更新以及批量审核
34ff923f
 
杨树贤 committed 5 years ago
54 55 56 57 58 59 60 61 62
    /**
     * 审核用户的兑换
     * @param Request $request
     * @param UserExchange $userExchange
     * @return array
     */
    public function audit(Request $request, UserExchange $userExchange)
    {
        $data = [
杨树贤's avatar
修改请求获取fangshi“
17900568
 
杨树贤 committed 5 years ago
63
            'audit_reason' => $request->get('audit_reason'),
杨树贤's avatar
审核通过后需要对剩余金额进行更新以及批量审核
34ff923f
 
杨树贤 committed 5 years ago
64 65
            'audit_time'   => time(),
            'update_time'  => time(),
杨树贤's avatar
修改请求获取fangshi“
17900568
 
杨树贤 committed 5 years ago
66 67 68 69
            'audit_id'     => $request->get('audit_id'),
            'user_id'      => $request->get('user_id'),
            'audit_email'  => $request->get('audit_email'),
            'status'       => $request->get('status'),
杨树贤's avatar
审核通过后需要对剩余金额进行更新以及批量审核
34ff923f
 
杨树贤 committed 5 years ago
70 71 72 73 74
        ];
        $res = $userExchange->auditUserExchange($request->id, $request->exchange_amount, $data);
        if ($res) {
            return $this->Export(0, 'ok');
        } else {
杨树贤's avatar
修改错误码,整理错误码
5ee03948
 
杨树贤 committed 5 years ago
75
            return $this->Export(16, '审核用户兑换失败');
杨树贤's avatar
审核通过后需要对剩余金额进行更新以及批量审核
34ff923f
 
杨树贤 committed 5 years ago
76
        }
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
77 78
    }

杨树贤's avatar
添加控制器的代码注释和处理upodate结果判断
d852b681
 
杨树贤 committed 5 years ago
79 80 81
    /**
     * 批量审核
     * @param Request $request
杨树贤's avatar
将数据库操作挪到model里面,同时删除多余的业务
48660cee
 
杨树贤 committed 5 years ago
82
     * @param UserExchange $userExchange
杨树贤's avatar
添加控制器的代码注释和处理upodate结果判断
d852b681
 
杨树贤 committed 5 years ago
83 84
     * @return array
     */
杨树贤's avatar
审核通过后需要对剩余金额进行更新以及批量审核
34ff923f
 
杨树贤 committed 5 years ago
85
    public function batchAuditReject(Request $request, UserExchange $userExchange)
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
86 87 88 89 90 91
    {
        $ids = $request->ids;
        if (!is_array($ids)) {
            return Log::Info('批量修改参数不是数组');
        }

杨树贤's avatar
审核通过后需要对剩余金额进行更新以及批量审核
34ff923f
 
杨树贤 committed 5 years ago
92 93 94 95 96 97 98 99
        $data = [
            'status'       => (int)$request->status,
            'audit_reason' => $request->audit_reason,
            'audit_id'     => $request->audit_id,
            'audit_email'  => $request->audit_email,
            'update_time'  => time(),
        ];
        $res = $userExchange->batchAuditRejectUserExchange($ids, $data);
杨树贤's avatar
添加控制器的代码注释和处理upodate结果判断
d852b681
 
杨树贤 committed 5 years ago
100 101 102
        if ($res) {
            return $this->Export(0, 'ok');
        } else {
杨树贤's avatar
修改错误码,整理错误码
5ee03948
 
杨树贤 committed 5 years ago
103
            return $this->Export(17, '审核批量拒绝兑换失败');
杨树贤's avatar
添加控制器的代码注释和处理upodate结果判断
d852b681
 
杨树贤 committed 5 years ago
104
        }
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
105
    }
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
106

叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
107
    //用于抢兑换名额
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
108 109 110
    public function create(Request $request)
    {
        $Field = ['user_id', 'exchange_id'];
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
111 112 113 114 115 116
        $collert = $request->only($Field);

        $Redis = new RedisModel();

        //先判断客户今天是否抢到名额
        $time = date('Ymd');
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
117 118
        $Pre = 'ic_exchanges_quota_' . $time;
        $Record = $Redis->hget($Pre, $collert['user_id']);
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
119

杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
120 121 122
        if ($Record) {
            return $this->Export(ErrorCode(100, 1), '今天已经兑换过来,请明天再来吧');
        }
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
123

叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
124
        //获取用户红包
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
125
        $UserInfo = $Redis->hget('ic_user', $collert['user_id']);
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
126

杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
127 128 129 130
        $UserInfo = json_decode($UserInfo, true);
        if (empty($UserInfo['integral'])) {
            return $this->Export(ErrorCode(102, 1), '红包余额不足');
        }
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
131 132

        //获取红包配置
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
133
        $ic_exchange_settings = json_decode($Redis->hget('ic_exchange_settings', $collert['exchange_id']), true);
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
134 135

        //判断红包提现设置是否可用
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
136 137 138
        if (!$ic_exchange_settings || $ic_exchange_settings['status'] != 1) {
            return $this->Export(ErrorCode(103, 1), '当前提现不可用');
        }
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
139 140

        //判断用余额
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
141 142 143
        if ($ic_exchange_settings['amount'] > $UserInfo['integral']) {
            return $this->Export(ErrorCode(102, 1), '红包余额不足');
        }
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
144

叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
145
        //消费名额
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
146 147 148 149 150
        $Cahce = $Redis->rpop('ic_exchange_settings_' . $collert['exchange_id']);
        if (!$Cahce) {
            return $this->Export(ErrorCode(101, 1), '名额被抢光了');
        }
        $Cahce = json_decode($Cahce, true);
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
151 152

        //记录当前消费的名额,自动过期
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
153 154
        $Redis->hset($Pre, $collert['user_id'], $collert['exchange_id']);
        $Redis->expire($Pre, 60 * 60 * 24);
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
155

杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
156
        try {
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
157 158 159 160
            DB::beginTransaction();

            //扣减用户金额
            $UserIntrgralModel = new UserIntegral();
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
161
            $result = $UserIntrgralModel->Deduction($collert['user_id'], $ic_exchange_settings['amount']);
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
162

杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
163 164 165
            if (!$result) {
                ErrorLog(ErrorCode(1, 9), '扣减用户红包失败,用户ID:' . $collert['user_id']);
                throw new \Exception('扣减用户红包失败,用户ID:' . $collert['user_id']);
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
166 167 168 169 170
            }

            //添加红包记录
            $UserExchangeModel = new UserExchange();
            $data = [
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
171 172
                'user_id'     => $collert['user_id'],
                'type'        => $ic_exchange_settings['type'],
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
173
                'exchange_id' => $ic_exchange_settings['id'],
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
174
                'amount'      => $ic_exchange_settings['amount'],
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
175 176 177
            ];

            $result = $UserExchangeModel->addRecord($data);
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
178 179 180
            if (!$result) {
                $Errinfo = '红包提现记录添加失败' . $collert['user_id'];
                ErrorLog(ErrorCode(1, 9), $Errinfo);
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
181 182 183 184 185 186 187
                throw new \Exception($Errinfo);
            }

            //提前提交事务
            DB::commit();

            //扣减缓存里面的红包金额
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
188
            $UserInfo['integral'] = $UserInfo['integral'] - $ic_exchange_settings['amount'];
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
189
            $Redis->hset('ic_user', $UserInfo['user_id'], json_encode($UserInfo));
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
190 191

            //金额小于20元时,推送一个异步任务(用来提现或者充值),延时10秒,防止主从同步不及时
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
192 193
            if ($data['amount'] < 20) {
                $Task = new ExchangesTask($data, $ic_exchange_settings);
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
194 195
                $Task->delay(10);
                $result = Task::deliver($Task);
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
196 197 198
                if (!$result) {
                    ErrorLog(ErrorCode(1, 9), '提现任务推送失败,提现ID:' . $data['id']);
                }
叶明星's avatar
更新代码
63b85851
 
叶明星 committed 5 years ago
199 200
            }

杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
201
            return $this->Export(0, 'ok', ['data' => $data['id']]);
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
202

杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
203
        } catch (\Exception $e) {
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
204 205
            DB::rollBack();
            SendErrMsg($e);
杨树贤's avatar
修复逻辑上的问题
197aed22
 
杨树贤 committed 5 years ago
206 207

            return $this->Export(ErrorCode(100, 5), '提现失败');
叶明星's avatar
话费充值
234783a4
 
叶明星 committed 5 years ago
208 209
        }
    }
杨树贤's avatar
完成用户兑换的相关服务
0f81938f
 
杨树贤 committed 5 years ago
210
}