RegulationController.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Withdraw_rule;
  5. use Illuminate\Support\Facades\DB;
  6. use Illuminate\Http\Request as Req;
  7. use Request;
  8. /**
  9. *
  10. */
  11. class RegulationController extends Controller
  12. {
  13. // private $token='so5j3C150405826059a61b94de9df';
  14. /**
  15. * @return 加款扣款1
  16. */
  17. function index()
  18. {
  19. $request = array();
  20. $request['account_name'] = Request::has ('account_name') ? Request::get ('account_name') : '';
  21. $dt = \App\Lib\DataTable\DataTable::init ();
  22. $dt->setDataSource ('/admin/money/getUser');
  23. $dt->setLang ('money');
  24. $dt->addColsFields ('id', array('sort' => false,'width' => 300));
  25. $dt->addColsFields ('account_name', array('sort' => false,'templet' => '#userRegulation', 'width' => 340));
  26. $dt->addColsFields ('cash', array('sort' => false,'width' => 320));
  27. // $dt->addColsFields('add_money');
  28. // $dt->addColsFields ('add_money', array('sort' => false, 'templet' => '#add_money'));
  29. // $dt->addColsFields ('cut_money', array('sort' => false, 'templet' => '#cut_money'));
  30. // $dt->addColsFields('takeoff_money');
  31. // $dt->setToolBar(array('add','cut'));
  32. return view ('admin.Regulation/index', $dt->render ($request));
  33. }
  34. function add()
  35. {
  36. echo 123;
  37. }
  38. //查看充值
  39. function Edit(Req $req)
  40. {
  41. $id = $req->id;
  42. $identity = isset($req->identity)?$req->identity:'';
  43. $type = $req->type;
  44. if ((empty($id) || $id < 1) && empty($identity)) {
  45. echo '请选择加扣款用户';
  46. abort (404);
  47. }
  48. $keyv = empty($id)?2:1;
  49. $id = empty($id)?$identity:$id;
  50. $account_db = new \App\Models\Account(); //用户
  51. $rate = $req->rate ?? 1;
  52. if (!$req->isMethod ('post')) {
  53. $data = $account_db->getUserDetails ($id, $keyv, 'account_detailed', 'identity', 'account_identity');
  54. $data = $data['data'][0];
  55. return view ('admin.Regulation/edit', ['data' => $data, 'type' => $type]);
  56. } else {
  57. $money = $req->money;
  58. $remark = $req->remark;
  59. $bate = $req->peize_bate;
  60. $order_id = $req->order_id;
  61. if (!is_numeric ($money) || $money < 0) {
  62. return responseToJson (-3010025022);//提交金额必须为大于0的数字
  63. }
  64. if (!is_numeric ($bate) || $money < 0) {
  65. return responseToJson (-3010025122);//奖励百分比金额必须为大于0的数字
  66. }
  67. //验证可操作金额限额
  68. $limitroot = new \App\Models\System_user();
  69. $limitmoney = $limitroot->checkActMoney ($money);
  70. if ($limitmoney < 0) {
  71. return responseToJson ($limitmoney);
  72. }
  73. DB::beginTransaction ();
  74. $prize_money = $money * $bate / 100;//奖励金额
  75. $admin_name = session ('adminInfo.admin_name') ? session ('adminInfo.admin_name') : '来自接口';
  76. //获取用户信息
  77. $account_data = $account_db->getUserDetails ($id, $keyv, 'account_detailed', 'identity', 'account_identity');
  78. $account_data = current ($account_data['data']);
  79. //检测提交数据
  80. $res_data = $this->CheckaddMoney ($account_data['identity'], $money);
  81. if ($res_data < 0) {
  82. DB::rollback ();
  83. return responseToJson ($res_data);
  84. }
  85. $data = array(
  86. 'account_name' => $account_data['account_name'],
  87. 'account_identity' => $account_data['identity'],
  88. 'money' => $money,
  89. 'reason' => $remark,
  90. 'sysetem_user' => $admin_name,
  91. );
  92. if ($type == 1) {
  93. //充值处理
  94. //资金统计记录
  95. $cdata = $data;
  96. $cdata['pass_time'] = date ('Y-m-d', time ());
  97. $res = \App\Models\Money_count::AddCountinfo ($cdata, 'save');
  98. if ($res < 0) {
  99. DB::rollback ();
  100. return responseToJson ($res);
  101. }
  102. //加钱
  103. $money_cash = $account_data['cash'] + $money;
  104. $data['money_cash'] = $money_cash;
  105. $data['rate'] = $rate;
  106. $trade_type = 11;
  107. /***********活动加款**************/
  108. $reason = str_replace ('用于活动', '!@#$', $data['reason']);
  109. if (strstr ($reason, '!@#$')) {
  110. $trade_type = 12;
  111. $prize_money = '';
  112. //添加流水倍率数据
  113. $res_data = Withdraw_rule::updateRule ($account_data['identity'], $money, $rate);
  114. if ($res_data < 0) {
  115. DB::rollback ();
  116. return responseToJson ($res_data);
  117. }
  118. }
  119. $order_id = $this->addMoney ($data, $type, $trade_type, $order_id, '', '', $rate);//加钱
  120. if ($order_id < 0) {
  121. DB::rollback ();
  122. return responseToJson ($order_id);
  123. }
  124. //赠送金额
  125. if (!empty($prize_money)) {
  126. $data['money'] = $prize_money;//重置金额
  127. $trade_type = 13;
  128. /***********活动加款**************/
  129. $reason = str_replace ('用于活动', '!@#$', $data['reason']);
  130. if (strstr ($reason, '!@#$')) {
  131. $trade_type = 12;
  132. }
  133. $data['money_cash'] = $data['money_cash'] + $prize_money;
  134. $res = $this->addMoney ($data, $type, $trade_type, '', $prize_money, $order_id, $rate);//充值赠送
  135. if ($res < 0) {
  136. DB::rollback ();
  137. return responseToJson ($res);
  138. }
  139. }
  140. $prize_money = empty($prize_money) ? 0 : $prize_money;
  141. $log = array(
  142. session ('adminInfo.admin_name'),
  143. $data['account_name'],
  144. $money,
  145. $prize_money,
  146. $data['reason'],
  147. $order_id,
  148. $rate,
  149. );
  150. OperationLog (session ('adminInfo.admin_id'), 'add_money', $log);
  151. } else {
  152. $order_id = OrderID();
  153. $money_cash = $account_data['cash'] - $money;
  154. $data['money_cash'] = $money_cash;
  155. $res = $this->cutMoney ($data, $type, $order_id);
  156. if ($res < 0) {
  157. DB::rollback ();
  158. return responseToJson ($res);
  159. }
  160. /*if(!empty($prize_money)){
  161. $data['money']=$prize_money;//重置金额
  162. $res=$this->cutMoney($data,$type,$order_id);
  163. if($res<0){
  164. return responseToJson($res);
  165. }
  166. }*/
  167. $log = array(
  168. session ('adminInfo.admin_name'),
  169. $data['account_name'],
  170. $data['money'],
  171. $data['reason'],
  172. $res,
  173. );
  174. OperationLog (session ('adminInfo.admin_id'), 'cut_money', $log);
  175. }
  176. $session_data = array(
  177. 'time' => date ('Y-m-d H::s'),
  178. 'money' => $data['money'],
  179. 'user_id' => $data['account_identity'],
  180. 'user_name' => $data['account_name'],
  181. );
  182. event (new \App\Events\MoneyRecharge($session_data));
  183. DB::commit ();
  184. return responseToJson (1);
  185. }
  186. }
  187. /**
  188. * 加钱函数
  189. * @param array $data
  190. * @param int $type
  191. * @param int $trade_type
  192. * @param string $order_id
  193. * @param string $prize_money
  194. * @param string $parent_order_id
  195. * @param int $rate
  196. * @return int|string
  197. */
  198. private function addMoney(array $data, $type, $trade_type, $order_id = '', $prize_money = '', $parent_order_id = '', $rate)
  199. {
  200. $accountDB = new \App\Models\Account_detailed(); //用户详情
  201. $order_id = $this->rechargeLog ($data, $order_id, $prize_money, $parent_order_id, $rate);//充值记录
  202. if ($order_id < 0) {
  203. return $order_id;
  204. }
  205. $detail=$data;
  206. $detail['rate']=$rate;
  207. $res = $this->dataLog ($detail, $order_id, $type, $trade_type);
  208. if ($res < 0) {
  209. return $res;
  210. }
  211. $res2 = $accountDB->addMoney ($data['account_identity'], $data['money']);
  212. if ($res2 < 0) {
  213. return $res2;
  214. }
  215. $db = new \App\Models\Manager;
  216. $dbs = new \App\Models\Account();
  217. $names = $dbs->getinfo ($data['account_identity'], 2);
  218. $db->updateMessage ('admin', $names['account'], '加款提示', '加款成功,加款金额:' . $data['money'], 2);
  219. return $order_id;
  220. }
  221. /**
  222. * 扣钱函数
  223. * @param array $data 扣款详情数组
  224. * @param int $type 操作类型,此处为2
  225. * @param string $order_id 扣款订单号
  226. * @return int|string 处理结果,成功返回扣款订单号,失败返回错误号
  227. */
  228. private function cutMoney(array $data, int $type, string $order_id)
  229. {
  230. $accountDB = new \App\Models\Account_detailed(); //用户详情
  231. $trade_type = 9;
  232. $reason = str_replace ('用于活动', '!@#$', $data['reason']);
  233. if (strstr ($reason, '!@#$')) {
  234. $trade_type = 12; //活动扣款
  235. }
  236. $res = $this->dataLog ($data, $order_id, $type, $trade_type);//扣款
  237. if ($res < 0) {
  238. return $res;
  239. }
  240. $res2 = $accountDB->costMoney ($data['account_identity'], $data['money']);
  241. if ($res2 < 0) {
  242. return $res2;
  243. }
  244. return $order_id;
  245. }
  246. /**
  247. * 充值记录
  248. * @param array $data 充值记录数据
  249. * @param string $order_id 充值订单ID
  250. * @param float $prize_money 充值金额
  251. * @param string $parent_order_id 父订单ID
  252. * @param int $rate 流水倍数要求
  253. * @return int|string 充值成功返回充值订单号
  254. */
  255. private function rechargeLog(array $data, $order_id = '', $prize_money = 0.00, $parent_order_id = '', $rate)
  256. {
  257. $recharge = new \App\Models\Money_recharge(); //充值
  258. $re_data = $data;
  259. if (strstr ($data['reason'], '用于活动')) {
  260. $re_data['recharge_type'] = '活动充值';
  261. if (!empty($parent_order_id)) {
  262. $re_data['reason'] = $parent_order_id;
  263. }
  264. } else {
  265. $re_data['recharge_type'] = '后台充值';
  266. }
  267. if (!empty($prize_money)) {
  268. $re_data['recharge_type'] .= '赠送';
  269. }
  270. $re_data['status'] = 1;
  271. $re_data['apply_time'] = date ('Y-m-d H:i:s', time ());
  272. $re_data['complete_time'] = date ('Y-m-d H:i:s', time ());
  273. $re_data['rate'] = $rate;
  274. if (empty($order_id)) {
  275. $re_data['order_id'] = OrderID ();
  276. } else {
  277. $re_data['order_id'] = $order_id;
  278. }
  279. $order_id = $recharge->addMoney ($re_data);
  280. return $order_id;
  281. }
  282. /**
  283. * 添加充值/扣款详情记录函数
  284. * @param array $data 详情数据数组
  285. * @param mixed $order_id 充值/扣款订单号
  286. * @param int $type 订单类别[1=>'充值',2=>'扣款'];
  287. * @param int $trade_type 交易类型
  288. * @return int|string 成功返回当前详单号,失败返回错误号
  289. */
  290. private function dataLog(array $data, $order_id, $type, $trade_type)
  291. {
  292. if (empty($order_id)) {
  293. $order_id = OrderID ();
  294. }
  295. $rate = 1;
  296. $money_db = new \App\Models\Money_details;//资金详情表
  297. if (isset($data['rate'])) {
  298. $rate = $data['rate'];
  299. unset($data['rate']);
  300. }
  301. $deal_data = $data;
  302. $deal_data['money_type'] = $type;
  303. $deal_data['money_time'] = date ('Y-m-d H:i:s', time ());
  304. $deal_data['trade_id'] = $order_id;
  305. $deal_data['trade_type'] = $trade_type;
  306. $admin_name = session ('adminInfo.admin_name');
  307. $admin_name = isset($admin_name) ? $admin_name : '来自接口' . GETIP ();
  308. $deal_data['sysetem_user'] = $admin_name;
  309. if ($trade_type == 11) {
  310. $deal_data['trade_desc'] = sprintf (trans ('trade.admin_add_momey'), $admin_name, $data['account_name'], $data['money'], $order_id, $rate);
  311. } else if ($trade_type == '13') {
  312. $deal_data['trade_desc'] = sprintf (trans ('trade.admin_prize_money'), $admin_name, $data['account_name'], $data['money'], $order_id, $rate);
  313. } else if ($trade_type == '9') {
  314. $deal_data['trade_desc'] = sprintf (trans ('trade.admin_cut_momey'), $admin_name, $data['account_name'], $data['money'], $order_id, $rate);
  315. } else if ($trade_type == '14') {
  316. $deal_data['trade_desc'] = sprintf (trans ('trade.admin_rimit_money'), $admin_name, $data['account_name'], $data['money'], $order_id, $rate);
  317. } else if ($trade_type == '12') {
  318. $deal_data['trade_desc'] = sprintf (trans ('trade.admin_active_money'), $admin_name, $data['account_name'], $data['money'], $order_id, $rate);
  319. }
  320. $deal_data['status'] = 1;
  321. $res = $money_db->insertData ($deal_data);
  322. if ($res < 0) {
  323. return $res;
  324. }
  325. return $order_id;
  326. }
  327. /**
  328. * 对外充值或者扣款接口
  329. * @param Req $req
  330. * @return mixed
  331. */
  332. public function AddOrCutMoney(Req $req)
  333. {
  334. $user_name = $req->name;
  335. $type = intval ($req->type) ? $req->type : '';
  336. $money = $req->money;
  337. $remark = $req->remark;
  338. $bate = floatval ($req->peize_bate) ? $req->peize_bate : 0;
  339. $order_id = $req->order_id;
  340. $time = $req->time;
  341. $sign = $req->sign;
  342. $rate = $req->rate ?? 1;
  343. $parent_order_id = $req->parent_order_id ?? '';
  344. if (empty($user_name) || empty($money) || empty($type)) {
  345. return responseToJson (-3010229022);//必要项不能为空
  346. }
  347. if (!is_numeric ($money) || $money < 0) {
  348. return responseToJson (-3010025022);//提交金额必须为大于0的数字
  349. }
  350. if (!is_numeric ($bate) || $bate < 0) {
  351. return responseToJson (-3010025122);//奖励百分比金额必须为大于0的数字
  352. }
  353. //时间检验
  354. if ($time < (time () - 10)) {
  355. return responseToJson (-3020035023);//请求超时
  356. }
  357. //token校验
  358. $setInfo_db = new \App\Models\Setinfo;
  359. $token = $setInfo_db->getInfo (19);
  360. $token = $token['infocontent'];
  361. //校验数据
  362. $ver_data = array(
  363. 'name' => $user_name,
  364. 'type' => $type,
  365. 'money' => $money,
  366. 'peize_bate' => $bate,
  367. 'order_id' => $order_id,
  368. 'time' => $time,
  369. );
  370. krsort ($ver_data);
  371. $right_sign = md5 (http_build_query ($ver_data) . '&token=' . $token);
  372. if ($right_sign != $sign) {
  373. return responseToJson (-3020035024);//
  374. }
  375. //赠送金额
  376. $prize_money = ($money * $bate) / 100;
  377. $prize_money = round ($prize_money, 2);
  378. //获取用户信息
  379. $account_db = new \App\Models\Account(); //用户表
  380. $account_data = $account_db->getUserDetails ($user_name, 3, 'account_detailed', 'identity', 'account_identity');
  381. if ($account_data < 0) {
  382. return responseToJson ($account_data);
  383. }
  384. $account_data = current ($account_data['data']);
  385. if (!$account_data) {
  386. return responseToJson (-30203000202);
  387. }
  388. $data = array(
  389. 'account_name' => $account_data['account_name'],
  390. 'account_identity' => $account_data['identity'],
  391. 'money' => $money,
  392. 'reason' => $remark,
  393. 'sysetem_user' => '接口',
  394. );
  395. if ($type == 1) {
  396. //加钱
  397. $money_cash = $account_data['cash'] + $money;
  398. $data['money_cash'] = $money_cash;
  399. $trade_type = 11;
  400. if (strstr ($data['reason'], '用于活动')) {
  401. $trade_type = 12;
  402. $prize_money = '';
  403. }
  404. $order_id = $this->addMoney ($data, $type, $trade_type, $order_id, 0, '', $rate);//加钱
  405. if ($order_id < 0) {
  406. return responseToJson ($order_id);
  407. }
  408. if (!empty($prize_money) && $prize_money > 1) {
  409. $data['money'] = $prize_money;//重置金额
  410. $trade_type = 13;
  411. if (strstr ($data['reason'], '用于活动')) {
  412. $trade_type = 12;
  413. }
  414. $res = $this->addMoney ($data, $type, $trade_type, '', $prize_money, $parent_order_id, $rate);//赠送
  415. if ($res < 0) {
  416. return responseToJson ($res);
  417. }
  418. }
  419. $prize_money = empty($prize_money) ? 0 : $prize_money;
  420. $log = array(
  421. '来自接口IP' . GETIP (),
  422. $data['account_name'],
  423. $money,
  424. $prize_money,
  425. $data['reason'],
  426. $order_id,
  427. );
  428. OperationLog (0, 'add_money', $log);
  429. } else {
  430. $money_cash = $account_data['cash'] - $money;
  431. $data['money_cash'] = $money_cash;
  432. $res = $this->cutMoney ($data, $type, $order_id);
  433. $log = array(
  434. '来自接口' . GETIP (),
  435. $data['account_name'],
  436. $data['money'],
  437. $data['reason'],
  438. $res,
  439. );
  440. OperationLog (0, 'cut_money', $log);
  441. }
  442. $session_data = array(
  443. 'time' => date ('Y-m-d H::s'),
  444. 'money' => $data['money'],
  445. 'user_id' => $data['account_identity'],
  446. 'user_name' => $data['account_name'],
  447. );
  448. event (new \App\Events\MoneyRecharge($session_data));
  449. return responseToJson (1);
  450. }
  451. function rechergeMoney($data, $type, $trade_type, $order_id = '', $prize_money = '', $rate = 1)
  452. {
  453. //加钱
  454. $accountDB = new \App\Models\Account_detailed(); //用户详情
  455. //充值记录
  456. $order_id = $this->rechargeLog ($data, $order_id, $prize_money, '', $rate);
  457. if ($order_id < 0) {
  458. return $order_id;
  459. }
  460. if (!empty($prize_money)) {
  461. $prize_data = $data;
  462. $prize_data['money'] = $prize_money;//重置金额
  463. $order_id2 = $this->rechargeLog ($prize_data, $order_id, $prize_money, '', $rate);
  464. if ($order_id2 < 0) {
  465. return $order_id2;
  466. }
  467. }
  468. //详情记录
  469. $res = $this->dataLog ($data, $order_id, $type, $trade_type);
  470. if ($res < 0) {
  471. return $res;
  472. }
  473. if (!empty($prize_money)) {
  474. $res2 = $this->dataLog ($prize_data, $order_id, $type, $trade_type);
  475. if ($res2 < 0) {
  476. return $res2;
  477. }
  478. }
  479. //加钱
  480. $res3 = $accountDB->addMoney ($data['account_identity'], $data['money']);
  481. if ($res3 < 0) {
  482. return $res3;
  483. }
  484. return $order_id;
  485. }
  486. function CheckaddMoney($account_id, $money)
  487. {
  488. $money_db = new \App\Models\Money_recharge;
  489. $time = date ('Y-m-d H:i:s', time () - 10);
  490. return $money_db->checkAdd ($account_id, $money, $time);
  491. }
  492. }