|
@@ -18,6 +18,7 @@ use app\models\system\SystemGroupLevel;
|
|
|
use app\models\system\SystemStore;
|
|
|
use app\models\system\SystemStoreStaff;
|
|
|
use app\models\system\SystemStoreStock;
|
|
|
+use app\models\user\Gacha;
|
|
|
use app\models\user\User;
|
|
|
use app\models\user\UserBill;
|
|
|
use app\models\user\WechatUser;
|
|
@@ -394,4 +395,110 @@ class PublicController
|
|
|
}
|
|
|
|
|
|
|
|
|
+ public function gacha_set(Request $request)
|
|
|
+ {
|
|
|
+ $pay_way = sys_config('pay_way', 1, true);
|
|
|
+ $pay_num = sys_config('pay_num', 1, true);
|
|
|
+ $award = sys_data('gacha_set');
|
|
|
+ $sum_ratio = 0;
|
|
|
+ foreach ($award as $k => $v) {
|
|
|
+ $sum_ratio = $sum_ratio + $v['award_ratio'];
|
|
|
+ unset($award[$k]['limit_time']);
|
|
|
+ }
|
|
|
+ return app('json')->success('ok', compact('pay_way', 'pay_num', 'award', 'sum_ratio'));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function gacha(Request $request)
|
|
|
+ {
|
|
|
+ $pay_way = sys_config('pay_way', 1, true);
|
|
|
+ $pay_num = sys_config('pay_num', 1, true);
|
|
|
+ if ($pay_way == 1) {
|
|
|
+ $pay_way = 'integral';
|
|
|
+ } else if ($pay_way == 2) {
|
|
|
+ $pay_way = 'now_money';
|
|
|
+ } else {
|
|
|
+ return app('json')->fail('抽奖尚未开启');
|
|
|
+ }
|
|
|
+
|
|
|
+ $user = User::get($request->uid());
|
|
|
+ $award = sys_data('gacha_set');
|
|
|
+ $sum_ratio = 0;
|
|
|
+ $times = Gacha::where('uid', $user['uid'])->count();
|
|
|
+ $real_award = [];
|
|
|
+ foreach ($award as $v) {
|
|
|
+ if ($times >= $v['limit_time']) {
|
|
|
+ $sum_ratio = $sum_ratio + $v['award_ratio'];
|
|
|
+ $real_award[] = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($sum_ratio < 1) {
|
|
|
+ return app('json')->fail('抽奖尚未开启');
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($user[$pay_way] < $pay_num) return app('json')->fail('余额不足');
|
|
|
+ User::beginTrans();
|
|
|
+ try {
|
|
|
+ $res = User::bcDec($user['uid'], $pay_way, $pay_num, 'uid');
|
|
|
+ $bill_res = UserBill::expend('抽奖支付', $user['uid'], $pay_way, 'gacha_pay', $pay_num, 0, bcsub($user[$pay_way], $pay_num, 2), '参与抽奖支付');
|
|
|
+ if (!($res && $bill_res)) return app('json')->fail('支付失败');
|
|
|
+ $award_gacha = rand(1, $sum_ratio);
|
|
|
+ foreach ($real_award as $v) {
|
|
|
+ if ($award_gacha <= $v['award_ratio']) {
|
|
|
+ $gacha = $v;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ $award_gacha -= $v['award_ratio'];
|
|
|
+ }
|
|
|
+ $gacha_res = Gacha::create([
|
|
|
+ 'award' => $gacha['awatd'],
|
|
|
+ 'uid' => $user['uid'],
|
|
|
+ 'award_type' => $gacha['award_type'],
|
|
|
+ 'add_time' => time(),
|
|
|
+ 'limit_time' => time() + ($gacha['award_time'] * 24 * 3600),
|
|
|
+ 'unicode' => Gacha::createCode($user['uid'])
|
|
|
+ ]);
|
|
|
+ UserBill::where('id', $bill_res['id'])->update(['link_id' => $gacha_res['id']]);
|
|
|
+ User::commitTrans();
|
|
|
+ return app('json')->success('ok', $gacha_res);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ User::rollbackTrans();
|
|
|
+ return app('json')->fail($e->getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function gacha_log(Request $request)
|
|
|
+ {
|
|
|
+ $page = $request->get('page', 1);
|
|
|
+ $limit = $request->get('limit', 10);
|
|
|
+ $status = $request->get('status', '');
|
|
|
+ $where['uid'] = $request->uid();
|
|
|
+ if ($status != '') {
|
|
|
+ $where['status'] = $status;
|
|
|
+ }
|
|
|
+ $list = Gacha::where($where)->page($page, $limit)->select();
|
|
|
+ $count = Gacha::where($where)->count();
|
|
|
+ return app('json')->success('ok', compact('list', 'count'));
|
|
|
+ }
|
|
|
+
|
|
|
+ public function get_award($id, Request $request)
|
|
|
+ {
|
|
|
+ $info = Gacha::get($id);
|
|
|
+ if ($info['uid'] != $request->uid()) return app('json')->fail('奖励不存在');
|
|
|
+ if ($info['status'] != 0) return app('json')->fail('奖品已兑换');
|
|
|
+ if ($info['limit_time'] < time()) return app('json')->fail('奖品兑换期已过');
|
|
|
+ if ($info['award_type'] == 2) return app('json')->fail('实物奖品请往线下兑换点兑奖');
|
|
|
+ User::beginTrans();
|
|
|
+ try {
|
|
|
+ User::bcInc($request->uid(), 'integral', $info['award'], 'uid');
|
|
|
+ UserBill::expend('抽奖奖品', $request->uid(), 'integral', 'gacha_get', $info['award'], $info['id'], User::where('uid', $request->uid())->value('integral'), '抽奖奖品兑换');
|
|
|
+ Gacha::where('id', $id)->update(['status' => 1]);
|
|
|
+ User::commitTrans();
|
|
|
+ return app('json')->success('兑换成功');
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ User::rollbackTrans();
|
|
|
+ return app('json')->fail($e->getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|