CashTradeController.php 29 KB

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