CashTradeController.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. <?php
  2. namespace app\api\controller\trade;
  3. use app\models\trade\CashTradeOrder;
  4. use app\models\trade\CashTradeOrderPayment;
  5. use app\models\user\User;
  6. use app\models\user\UserBanks;
  7. use app\models\user\UserMoney;
  8. use app\Request;
  9. use crmeb\basic\BaseModel;
  10. use crmeb\repositories\OrderRepository;
  11. use crmeb\services\AliPayService;
  12. use crmeb\services\CacheService;
  13. use crmeb\services\UtilService;
  14. use think\db\exception\DataNotFoundException;
  15. use think\db\exception\DbException;
  16. use think\db\exception\ModelNotFoundException;
  17. class CashTradeController
  18. {
  19. public function merged($type)
  20. {
  21. // $key = 'mx0J52sOMse4D3bE3c';
  22. // $sec = 'ea508c4381c84527ae892fc5cbdd674d';
  23. $type = strtolower($type);
  24. // $type = 'eth';
  25. $url = "https://api.huobi.de.com/market/detail/merged?symbol={$type}usdt";
  26. // var_dump($url);
  27. $res = do_request($url, [], null, false, true);
  28. return json_decode($res, true);
  29. }
  30. /**
  31. * @param Request $request
  32. * @return mixed
  33. * @throws DataNotFoundException
  34. * @throws DbException
  35. * @throws ModelNotFoundException
  36. */
  37. public function can_trade_money(Request $request)
  38. {
  39. $list = sys_data('money_type');
  40. $new = [];
  41. foreach ($list as $v) {
  42. if (explode('_', $v['code'])[0] == "USDT") {
  43. if ($v['price'] <= 0) {
  44. //计算前一天成交的平均价格
  45. $v['price'] = CashTradeOrder::averagePrice($v['code']);
  46. }
  47. $usdt_price = $v['price'];
  48. }
  49. if ($v['is_trade']) {
  50. // if ($v['price'] <= 0) {
  51. // //计算前一天成交的平均价格
  52. // $v['price'] = CashTradeOrder::averagePrice($v['code']);
  53. // }
  54. if ($request->uid())
  55. $v['wallet'] = UserMoney::initialUserMoney($request->uid(), $v['code']);
  56. unset($v['cash_commission_ratio']);
  57. unset($v['cash_commission_type']);
  58. unset($v['can_cash']);
  59. unset($v['can_trade']);
  60. unset($v['is_trade']);
  61. $new[] = $v;
  62. }
  63. }
  64. foreach ($new as $k => $v) {
  65. $new[$k]['usdt'] = (isset($usdt_price) && $usdt_price > 0) ? bcdiv($new[$k]['price'], $usdt_price, 8) : 0;
  66. }
  67. return app('json')->success('ok', $new);
  68. }
  69. public function all_money_redis()
  70. {
  71. $list = sys_data('money_type');
  72. $new = [];
  73. foreach ($list as $v) {
  74. if (explode('_', $v['code'])[0] == "USDT") {
  75. if ($v['price'] <= 0) {
  76. //计算前一天成交的平均价格
  77. $v['price'] = CashTradeOrder::averagePrice($v['code']);
  78. }
  79. $usdt_price = $v['price'];
  80. }
  81. $new[] = $v;
  82. }
  83. foreach ($new as $k => $v) {
  84. if (!(explode('_', $v['code'])[0] == "USDT")) {
  85. $res = $this->merged($v['huobi_code']);
  86. if ($res['status'] == 'error') {
  87. $new[$k]['usdt'] = 0;
  88. $new[$k]['price'] = 0;
  89. $new[$k]['up'] = 0;
  90. } else {
  91. $new[$k]['usdt'] = $res['tick']['close'];
  92. $new[$k]['price'] = bcmul($usdt_price, $new[$k]['usdt'], 2);
  93. $new[$k]['up'] = bcdiv(bcsub($res['tick']['close'], $res['tick']['open'], 8), $res['tick']['open'], 4);
  94. }
  95. } else {
  96. $new[$k]['usdt'] = 1;
  97. $new[$k]['up'] = 0;
  98. }
  99. }
  100. CacheService::redisHandler()->set('all_money', $new);
  101. }
  102. // public function all_money(Request $request)
  103. // {
  104. // $list = sys_data('money_type');
  105. // $new = [];
  106. // foreach ($list as $v) {
  107. // if (explode('_', $v['code'])[0] == "USDT") {
  108. // if ($v['price'] <= 0) {
  109. // //计算前一天成交的平均价格
  110. // $v['price'] = CashTradeOrder::averagePrice($v['code']);
  111. // }
  112. // $usdt_price = $v['price'];
  113. // }
  114. // if ($request->uid())
  115. // $v['wallet'] = UserMoney::initialUserMoney($request->uid(), $v['code']);
  116. // unset($v['cash_commission_ratio']);
  117. // unset($v['cash_commission_type']);
  118. // unset($v['can_cash']);
  119. // unset($v['can_trade']);
  120. // unset($v['is_trade']);
  121. // $new[] = $v;
  122. // }
  123. // foreach ($new as $k => $v) {
  124. // if (!(explode('_', $v['code'])[0] == "USDT")) {
  125. // $res = json_decode($this->merged($v['huobi_code']), true);
  126. // $new[$k]['usdt'] = $res['tick']['close'];
  127. // $new[$k]['price'] = bcmul($usdt_price, $new[$k]['usdt'], 2);
  128. // $new[$k]['up'] = bcdiv(bcsub($res['tick']['close'], $res['tick']['open'], 8), $res['tick']['open'], 4);
  129. // //$new[$k]['merged'] = $res;
  130. // } else {
  131. // $new[$k]['usdt'] = 1;
  132. // $new[$k]['up'] = 0;
  133. // //$new[$k]['merged'] = $res;
  134. // }
  135. //// if ($request->uid()) {
  136. //// $new[$k]['user'] = UserMoney::initialUserMoney($request->uid(), $v['code']);
  137. //// }
  138. // }
  139. // return app('json')->success('ok', $new);
  140. // }
  141. public function all_money(Request $request)
  142. {
  143. $info = CacheService::redisHandler()->get('all_money');
  144. if (!$info) {
  145. $this->all_money_redis();
  146. $info = CacheService::redisHandler()->get('all_money');
  147. }
  148. foreach ($info as &$v) {
  149. if ($request->uid())
  150. $v['wallet'] = UserMoney::initialUserMoney($request->uid(), $v['code']);
  151. }
  152. return app('json')->success('ok', $info);
  153. }
  154. public function can_cash_money(Request $request)
  155. {
  156. $list = sys_data('money_type');
  157. $new = [];
  158. foreach ($list as $v) {
  159. if (explode('_', $v['code'])[0] == "USDT") {
  160. if ($v['price'] <= 0) {
  161. //计算前一天成交的平均价格
  162. $v['price'] = CashTradeOrder::averagePrice($v['code']);
  163. }
  164. $usdt_price = $v['price'];
  165. }
  166. if ($v['can_cash']) {
  167. // if ($v['price'] <= 0) {
  168. // //计算前一天成交的平均价格
  169. // $v['price'] = CashTradeOrder::averagePrice($v['code']);
  170. // }
  171. if ($request->uid())
  172. $v['wallet'] = UserMoney::initialUserMoney($request->uid(), $v['code']);
  173. unset($v['cash_commission_ratio']);
  174. unset($v['cash_commission_type']);
  175. unset($v['can_cash']);
  176. unset($v['can_trade']);
  177. unset($v['is_trade']);
  178. $new[] = $v;
  179. }
  180. }
  181. foreach ($new as $k => $v) {
  182. $new[$k]['usdt'] = (isset($usdt_price) && $usdt_price > 0) ? bcdiv($new[$k]['price'], $usdt_price, 8) : 0;
  183. }
  184. return app('json')->success('ok', $new);
  185. }
  186. /**
  187. * @param Request $request
  188. * @return mixed
  189. */
  190. public function sale_list(Request $request)
  191. {
  192. $where = UtilService::getMore([
  193. ['money_type', ''],
  194. ['uid', 0],
  195. ['page', 1],
  196. ['limit', 10],
  197. ['status', 1],
  198. ], $request);
  199. $where['trade_type'] = 1;
  200. return app('json')->success('ok', CashTradeOrder::getList($where));
  201. }
  202. /**
  203. * @param Request $request
  204. * @return mixed
  205. */
  206. public function buy_list(Request $request)
  207. {
  208. $where = UtilService::getMore([
  209. ['money_type', ''],
  210. ['uid', 0],
  211. ['page', 1],
  212. ['limit', 10],
  213. ['status', 1],
  214. ], $request);
  215. $where['trade_type'] = 2;
  216. return app('json')->success('ok', CashTradeOrder::getList($where));
  217. }
  218. /**
  219. * 挂起
  220. * @param Request $request
  221. * @return mixed
  222. * @throws DataNotFoundException
  223. * @throws DbException
  224. * @throws ModelNotFoundException
  225. */
  226. public function hang(Request $request)
  227. {
  228. $user = $request->user();
  229. $uid = $user['uid'];
  230. list($money_type, $money_num, $price, $trade_type, $trade_way, $from, $hang_time, , $captcha, $bank_id) = UtilService::postMore([
  231. ['money_type', 'USDT', '', '', ['not_empty_check', function ($item) {
  232. $moneys = sys_data('money_type');
  233. $new_money = [];
  234. foreach ($moneys as $v) {
  235. if ($v['is_trade'] == 1) {
  236. $new_money[] = $v['code'];
  237. }
  238. }
  239. return in_array($item, $new_money);
  240. }], ['请选择交易的币种', '请选择支持交易的币种']],
  241. ['money_num', 0],
  242. ['price', 0],
  243. ['trade_type', 0, '', '', ['not_empty_check', function ($item) {
  244. return in_array($item, [1, 2]);
  245. }], '请选择挂买或挂卖'],
  246. ['trade_way', 'weixin'],
  247. ['from', 'weixin'],
  248. ['hang_time', 0, '', '', ['not_empty_check', function ($item) {
  249. return $item > 0 && $item < 1000;
  250. }], '请输入正确的挂出时常'],
  251. ['trade_psw', '', '', '', ['not_empty_check', function ($item) use ($user) {
  252. return md5(md5($item)) == $user['trade_pwd'];
  253. }], ['请输入交易密码', '交易密码错误']],
  254. ['captcha', ''],
  255. ['bank_id', '']
  256. ], $request, true);
  257. if ($money_num <= 0) {
  258. return app('json')->fail('请输入币数');
  259. }
  260. if ($price <= 0) {
  261. $money = sys_data('money_type');
  262. foreach ($money as $v) {
  263. if ($v['code'] == $money_type) {
  264. $price = $v['price'] ?: CashTradeOrder::averagePrice($v['code']);
  265. }
  266. }
  267. }
  268. $sum = bcmul($money_num, $price, 2);
  269. if ($sum >= 10000) {
  270. $verifyCode = CacheService::get('code_' . $user['account']);
  271. if (!$verifyCode)
  272. return app('json')->fail('请先获取验证码');
  273. $verifyCode = substr($verifyCode, 0, 6);
  274. if ($verifyCode != $captcha)
  275. return app('json')->fail('验证码错误');
  276. }
  277. switch ($trade_type) {
  278. case 1:
  279. $res = CashTradeOrder::hangSale($uid, $money_type, $money_num, $price, $hang_time, $bank_id);
  280. break;
  281. case 2:
  282. $res = CashTradeOrder::hangBuy2($uid, $money_type, $money_num, $price, $hang_time);//改方式
  283. // $res = CashTradeOrder::hangBuy($uid, $money_type, $money_num, $price, $hang_time);
  284. // if ($res) {
  285. // $orderId = $res['order_id'];
  286. // switch ($trade_way) {
  287. // case "weixin":
  288. // $orderInfo = CashTradeOrderPayment::where('order_id', $orderId)->find();
  289. // if (!$orderInfo || !isset($orderInfo['paid'])) return app('json')->fail('支付订单不存在!');
  290. // $orderInfo = $orderInfo->toArray();
  291. // if ($orderInfo['paid']) return app('json')->fail('支付已支付!');
  292. // //支付金额为0
  293. // if (bcsub((float)$orderInfo['pay_money'], 0, 2) <= 0) {
  294. // //创建订单jspay支付
  295. // $payPriceStatus = CashTradeOrderPayment::jsPayPrice($orderId, $uid);
  296. // if ($payPriceStatus)//0元支付成功
  297. // return app('json')->status('success', '微信支付成功');
  298. // else
  299. // return app('json')->status('pay_error', CashTradeOrderPayment::getErrorInfo());
  300. // } else {
  301. // try {
  302. // if ($from == 'routine') {
  303. // $jsConfig = OrderRepository::tradeJsPay($orderId); //创建订单jspay
  304. // } else if ($from == 'weixinh5') {
  305. // $jsConfig = OrderRepository::tradeH5Pay($orderId);
  306. // } else {
  307. // $jsConfig = OrderRepository::tradeWxPay($orderId);
  308. // }
  309. // } catch (\Exception $e) {
  310. // return app('json')->status('pay_error', $e->getMessage());
  311. // }
  312. // $res['jsConfig'] = $jsConfig;
  313. // if ($from == 'weixinh5') {
  314. // return app('json')->status('wechat_h5_pay', '订单创建成功', $res);
  315. // } else {
  316. // return app('json')->status('wechat_pay', '订单创建成功', $res);
  317. // }
  318. // }
  319. // case 'yue':
  320. // if (CashTradeOrderPayment::yuePay($orderId, $request->uid()))
  321. // return app('json')->status('success', '余额支付成功');
  322. // else {
  323. // $errorinfo = CashTradeOrderPayment::getErrorInfo();
  324. // if (is_array($errorinfo))
  325. // return app('json')->status($errorinfo['status'], $errorinfo['msg']);
  326. // else
  327. // return app('json')->status('pay_error', $errorinfo);
  328. // }
  329. // case 'ali':
  330. // try {
  331. // $jsConfig = AliPayService::createTrade($orderId); //创建订单jspay
  332. // } catch (\Exception $e) {
  333. // return app('json')->status('pay_error', $e->getMessage());
  334. // }
  335. // $res['jsConfig'] = $jsConfig;
  336. // return app('json')->status('ali_pay', '订单创建成功', $res);
  337. // default:
  338. // return app('json')->fail('支付方式错误');
  339. // }
  340. // } else return app('json')->fail(CashTradeOrder::getErrorInfo('订单生成失败!'));
  341. break;
  342. default:
  343. $res = false;
  344. break;
  345. }
  346. if ($res) {
  347. return app('json')->success('挂出成功');
  348. } else {
  349. return app('json')->fail('挂出失败:' . CashTradeOrder::getErrorInfo('挂出错误'));
  350. }
  351. }
  352. public function fast_sale(Request $request)
  353. {
  354. $user = $request->user();
  355. $uid = $user['uid'];
  356. list($money_type, $money_num, , $captcha, $bank_id) = UtilService::postMore([
  357. ['money_type', 'USDT', '', '', ['not_empty_check', function ($item) {
  358. $moneys = sys_data('money_type');
  359. $new_money = [];
  360. foreach ($moneys as $v) {
  361. if ($v['is_trade'] == 1) {
  362. $new_money[] = $v['code'];
  363. }
  364. }
  365. return in_array($item, $new_money);
  366. }], ['请选择交易的币种', '请选择支持交易的币种']],
  367. ['money_num', 0],
  368. ['trade_psw', '', '', '', ['not_empty_check', function ($item) use ($user) {
  369. return md5(md5($item)) == $user['trade_pwd'];
  370. }], ['请输入交易密码', '交易密码错误']],
  371. ['captcha', ''],
  372. ['bank_id', '', '', '', ['not_empty_check'], ['请选择收款方式']]
  373. ], $request, true);
  374. if ($money_num <= 0) {
  375. return app('json')->fail('请输入币数');
  376. }
  377. // var_dump($bank_id);
  378. $price = 0;
  379. $money = sys_data('money_type');
  380. foreach ($money as $v) {
  381. if ($v['code'] == $money_type) {
  382. $price = $v['price'] ?: CashTradeOrder::averagePrice($v['code']);
  383. }
  384. }
  385. $sum = bcmul($money_num, $price, 2);
  386. if ($sum >= 10000) {
  387. $verifyCode = CacheService::get('code_' . $user['account']);
  388. if (!$verifyCode)
  389. return app('json')->fail('请先获取验证码');
  390. $verifyCode = substr($verifyCode, 0, 6);
  391. if ($verifyCode != $captcha)
  392. return app('json')->fail('验证码错误');
  393. }
  394. $res = CashTradeOrder::fastSale($uid, $money_type, $money_num, $price, $bank_id);
  395. if ($res) {
  396. return app('json')->success('卖出成功,请等待商家处理');
  397. } else {
  398. return app('json')->fail('卖出失败:' . CashTradeOrder::getErrorInfo('挂出错误'));
  399. }
  400. }
  401. public function trade(Request $request)
  402. {
  403. $user = $request->user();
  404. $uid = $user['uid'];
  405. list($id, $trade_way, $from, , $captcha, $bank_id) = UtilService::postMore([
  406. ['id', 'USDT', '', '', ['not_empty_check'], ['请选择要进行的交易']],
  407. ['trade_way', 'weixin'],
  408. ['from', 'weixin'],
  409. ['trade_psw', '', '', '', ['not_empty_check', function ($item) use ($user) {
  410. return md5(md5($item)) == $user['trade_pwd'];
  411. }], ['请输入交易密码', '交易密码错误']],
  412. ['captcha', ''],
  413. ['bank_id', '']
  414. ], $request, true);
  415. $order = CashTradeOrder::setStatus(1)->where('id', $id)->find();
  416. if ($order['uid'] == $uid) {
  417. return app('json')->fail('不可交易自己发起的订单');
  418. }
  419. // var_dump(CashTradeOrder::getLastSql());
  420. if (!$order) {
  421. return app('json')->fail('订单不存在或已结束挂出');
  422. }
  423. $sum = bcmul($order['money_num'], $order['price'], 2);
  424. if ($sum >= 10000) {
  425. $verifyCode = CacheService::get('code_' . $user['account']);
  426. if (!$verifyCode)
  427. return app('json')->fail('请先获取验证码');
  428. $verifyCode = substr($verifyCode, 0, 6);
  429. if ($verifyCode != $captcha)
  430. return app('json')->fail('验证码错误');
  431. }
  432. switch ($order['trade_type']) {
  433. case 2:
  434. $res = CashTradeOrder::sale($uid, $id, $bank_id);
  435. break;
  436. case 1:
  437. $res = CashTradeOrder::buy2($uid, $id);
  438. // if ($res) {
  439. // $orderId = $res['order_id'];
  440. // switch ($trade_way) {
  441. // case "weixin":
  442. // $orderInfo = CashTradeOrderPayment::where('order_id', $orderId)->find();
  443. // if (!$orderInfo || !isset($orderInfo['paid'])) return app('json')->fail('支付订单不存在!');
  444. // $orderInfo = $orderInfo->toArray();
  445. // if ($orderInfo['paid']) return app('json')->fail('支付已支付!');
  446. // //支付金额为0
  447. // if (bcsub((float)$orderInfo['pay_money'], 0, 2) <= 0) {
  448. // //创建订单jspay支付
  449. // $payPriceStatus = CashTradeOrderPayment::jsPayPrice($orderId, $uid);
  450. // if ($payPriceStatus)//0元支付成功
  451. // return app('json')->status('success', '微信支付成功');
  452. // else
  453. // return app('json')->status('pay_error', CashTradeOrderPayment::getErrorInfo());
  454. // } else {
  455. // try {
  456. // if ($from == 'routine') {
  457. // $jsConfig = OrderRepository::tradeJsPay($orderId); //创建订单jspay
  458. // } else if ($from == 'weixinh5') {
  459. // $jsConfig = OrderRepository::tradeH5Pay($orderId);
  460. // } else {
  461. // $jsConfig = OrderRepository::tradeWxPay($orderId);
  462. // }
  463. // } catch (\Exception $e) {
  464. // return app('json')->status('pay_error', $e->getMessage());
  465. // }
  466. // $res['jsConfig'] = $jsConfig;
  467. // if ($from == 'weixinh5') {
  468. // return app('json')->status('wechat_h5_pay', '订单创建成功', $res);
  469. // } else {
  470. // return app('json')->status('wechat_pay', '订单创建成功', $res);
  471. // }
  472. // }
  473. // case 'yue':
  474. // if (CashTradeOrderPayment::yuePay($orderId, $request->uid()))
  475. // return app('json')->status('success', '余额支付成功');
  476. // else {
  477. // $errorinfo = CashTradeOrderPayment::getErrorInfo();
  478. // if (is_array($errorinfo))
  479. // return app('json')->status($errorinfo['status'], $errorinfo['msg']);
  480. // else
  481. // return app('json')->status('pay_error', $errorinfo);
  482. // }
  483. // case 'ali':
  484. // try {
  485. // $jsConfig = AliPayService::createTrade($orderId); //创建订单jspay
  486. // } catch (\Exception $e) {
  487. // return app('json')->status('pay_error', $e->getMessage());
  488. // }
  489. // $res['jsConfig'] = $jsConfig;
  490. // return app('json')->status('ali_pay', '订单创建成功', $res);
  491. // default:
  492. // return app('json')->fail('支付方式错误');
  493. // }
  494. // } else return app('json')->fail(CashTradeOrder::getErrorInfo('订单生成失败!'));
  495. break;
  496. default:
  497. $res = false;
  498. break;
  499. }
  500. if ($res) {
  501. $info = CashTradeOrder::get($id);
  502. $info['user'] = User::getUserInfo($info['uid']);
  503. if ($info['bank_info'])
  504. $info['bank'] = json_decode($info['bank_info'], true);
  505. return app('json')->success('交易开始进行,' . $order['trade_type'] == 1 ? '请通过用户的转账方式交易并上传交易凭证' : '请等待买家转账并上传凭证', ['data' => $info]);
  506. } else {
  507. return app('json')->fail('交易失败:' . CashTradeOrder::getErrorInfo('挂出错误'));
  508. }
  509. }
  510. public function myOrder(Request $request)
  511. {
  512. $where = UtilService::getMore([
  513. ['money_type', ''],
  514. ['page', 1],
  515. ['limit', 10],
  516. ['status', ''],
  517. ['trade_type', '']
  518. ], $request);
  519. // $where['trade_type'] = 2;
  520. $where['uid'] = $request->uid();
  521. return app('json')->success('ok', CashTradeOrder::getList($where));
  522. }
  523. public function uploadProof($id, Request $request)
  524. {
  525. $order = CashTradeOrder::get($id);
  526. $proof = $request->post('proof', '');
  527. if (!not_empty_check($proof)) return app('json')->fail('请上传凭证');
  528. if ($order['close_time'] && $order['close_time'] < time()) return app('json')->fail('订单已关闭');
  529. switch ($order['trade_type']) {
  530. case 1:
  531. if ($order['trade_uid'] != $request->uid()) return app('json')->fail('订单交易方错误');
  532. if ($order['status'] != -1) return app('json')->fail('订单状态错误');
  533. break;
  534. case 2:
  535. if ($order['uid'] != $request->uid()) return app('json')->fail('订单交易方错误');
  536. if ($order['status'] != 0) return app('json')->fail('订单状态错误');
  537. break;
  538. default:
  539. break;
  540. }
  541. $res = CashTradeOrder::where('id', $id)->update(['proof' => $proof, 'status' => 3]);
  542. if ($res) {
  543. return app('json')->success('上传成功');
  544. } else {
  545. return app('json')->fail('上传失败');
  546. }
  547. }
  548. public function cancel($id, Request $request)
  549. {
  550. $order = CashTradeOrder::get($id);
  551. if ($order['close_time'] && $order['close_time'] < time()) return app('json')->fail('订单已关闭');
  552. if ($order['status'] > 0) return app('json')->fail('订单不可撤销');
  553. if ($order['uid'] != $request->uid() && $order['trade_uid'] != $request->uid()) return app('json')->fail('订单错误');
  554. BaseModel::beginTrans();
  555. $res = true;
  556. switch ($order['trade_type']) {
  557. case 1:
  558. //退回币
  559. $res = $res && UserMoney::incomeMoney($order['uid'], $order['money_type'], $order['money_num'], 'hang_sale_cancel', '挂卖取消', '挂卖取消,退回钱包');
  560. $res = $res && CashTradeOrder::where('id', $order['id'])->update(['status' => 2]);
  561. break;
  562. case 2:
  563. //
  564. if ($order['trade_uid'] && $request->uid() == $order['trade_uid']) {
  565. $res = $res && UserMoney::incomeMoney($order['trade_uid'], $order['money_type'], $order['money_num'], 'hang_buy_cancel', '挂买取消', '挂买取消,退回钱包');
  566. $res = $res && CashTradeOrder::where('id', $order['id'])->update(['status' => 0, 'trade_uid' => '']);
  567. } else {
  568. if ($order['trade_uid']) {
  569. $res = $res && UserMoney::incomeMoney($order['trade_uid'], $order['money_type'], $order['money_num'], 'hang_buy_cancel', '挂买取消', '挂买取消,退回钱包');
  570. }
  571. $res = $res && CashTradeOrder::where('id', $order['id'])->update(['status' => 2]);
  572. }
  573. break;
  574. default:
  575. break;
  576. }
  577. BaseModel::checkTrans($res);
  578. if ($res) {
  579. return app('json')->success('取消成功');
  580. } else {
  581. return app('json')->fail('取消失败');
  582. }
  583. }
  584. public function check($id, $ok, Request $request)
  585. {
  586. $order = CashTradeOrder::where('id', $id)->where('status', 3)->find();
  587. if (!$order) return app('json')->fail('订单异常');
  588. if (!in_array($ok, ['y', 'n'])) return app('json')->fail('参数错误');
  589. $res = true;
  590. BaseModel::beginTrans();
  591. if ($ok == 'y') {
  592. switch ($order['trade_type']) {
  593. case 1:
  594. if ($order['uid'] != $request->uid()) return app('json')->fail('订单审核方错误');
  595. $res = $res && UserMoney::incomeMoney($order['trade_uid'], $order['money_type'], $order['money_num'], 'buy_success', '购币成功', '购币成功,出售方ID' . $order['uid']);
  596. break;
  597. case 2:
  598. if ($order['trade_uid'] != $request->uid()) return app('json')->fail('订单审核方错误');
  599. $res = $res && UserMoney::incomeMoney($order['uid'], $order['money_type'], $order['money_num'], 'buy_success', '购币成功', '购币成功,出售方ID' . $order['trade_uid']);
  600. break;
  601. default:
  602. break;
  603. }
  604. $res = $res && CashTradeOrder::where('id', $id)->update(['status' => 1, 'trade_time' => time()])
  605. && CashTradeOrder::brokerage($id);
  606. BaseModel::checkTrans($res);
  607. if ($res) {
  608. return app('json')->success('审核成功');
  609. } else {
  610. return app('json')->fail('审核失败');
  611. }
  612. } else {
  613. return app('json')->fail('请联系后台审核');
  614. }
  615. }
  616. }