Ticketorder.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace app\common\logic;
  3. use think\facade\Db;
  4. class Ticketorder
  5. {
  6. /**
  7. * 支付订单
  8. * @param array $order_info
  9. * @param string $role 操作角色 buyer、seller、admin、system 分别代表买家、商家、管理员、系统
  10. * @param string $post
  11. * @return array
  12. */
  13. public function changeOrderStatePay($order_info, $role, $post)
  14. {
  15. try {
  16. $TicketOrder = model('TicketOrder');
  17. Db::startTrans();
  18. $predeposit_model = model('predeposit');
  19. //下单,支付被冻结的充值卡
  20. $rcb_amount = floatval($order_info['rcb_amount']);
  21. if ($rcb_amount > 0) {
  22. $data_pd = [];
  23. $data_pd['member_id'] = $order_info['buyer_id'];
  24. $data_pd['member_name'] = $order_info['buyer_name'];
  25. $data_pd['amount'] = $rcb_amount;
  26. $data_pd['order_sn'] = $order_info['order_sn'];
  27. $predeposit_model->changeRcb('order_comb_pay', $data_pd);
  28. }
  29. //下单,支付被冻结的预存款
  30. $pd_amount = floatval($order_info['pd_amount']);
  31. if ($pd_amount > 0) {
  32. $data_pd = [];
  33. $data_pd['member_id'] = $order_info['buyer_id'];
  34. $data_pd['member_name'] = $order_info['buyer_name'];
  35. $data_pd['amount'] = $pd_amount;
  36. $data_pd['order_sn'] = $order_info['order_sn'];
  37. $predeposit_model->changePd('order_comb_pay', $data_pd);
  38. }
  39. //更新订单状态
  40. $update_order = [];
  41. $update_order['order_state'] = ORDER_STATE_PAY;
  42. $update_order['payment_time'] = isset($post['payment_time']) ? strtotime($post['payment_time']) : TIMESTAMP;
  43. $update_order['payment_code'] = $post['payment_code'];
  44. $update_order['trade_no'] = $post['trade_no'];
  45. $update = $TicketOrder->edit($update_order, ['id' => $order_info['id']]);
  46. if (!$update) {
  47. throw new \think\Exception(lang('ds_common_save_fail'), 10006);
  48. }
  49. Db::commit();
  50. return ds_callback(true, '更新成功');
  51. } catch (Exception $e) {
  52. Db::rollback();
  53. return ds_callback(false, $e->getMessage());
  54. }
  55. }
  56. /**
  57. * 积分支付
  58. */
  59. public function pointPay($order_info, $input, $buyer_info)
  60. {
  61. $point_ratio = config('app.point_ratio');
  62. $point_amount = floatval($buyer_info['point'] / $point_ratio);
  63. if ($point_amount <= 0)
  64. return $order_info;
  65. $order_model = model('TicketOrder');
  66. $predeposit_model = model('predeposit');
  67. $order_amount = round($order_info['order_amount'] - $order_info['rcb_amount'] - $order_info['pd_amount'], 2);
  68. $data_point = [];
  69. $data_point['member_id'] = $buyer_info['member_id'];
  70. $data_point['union_id'] = $buyer_info['member_wxunionid'];
  71. $data_point['member_name'] = $buyer_info['member_name'];
  72. $data_point['amount'] = $order_amount;
  73. $data_point['order_sn'] = $order_info['order_sn'];
  74. if ($point_amount >= $order_amount) {
  75. //积分立即支付,订单支付完成
  76. $predeposit_model->changePoint('order_pay', $data_point);
  77. // 订单状态 置为已支付
  78. $data_order = [];
  79. $order_info['order_state'] = $data_order['order_state'] = 40;
  80. $data_order['payment_time'] = TIMESTAMP;
  81. $data_order['finished_time'] = TIMESTAMP;
  82. $data_order['payment_code'] = 'predeposit';
  83. $order_info['point_amount'] = $data_order['point_amount'] = round($order_info['point_amount'] + ($order_amount * $point_ratio), 2);
  84. $result = $order_model->edit($data_order, ['id' => $order_info['id']]);
  85. if (!$result) {
  86. throw new \think\Exception('订单更新失败', 10006);
  87. }
  88. } else {
  89. //暂冻结预存款,后面还需要 API彻底完成支付
  90. $data_point['amount'] = $point_amount;
  91. $predeposit_model->changeRcb('order_freeze', $data_point);
  92. //预存款支付金额保存到订单
  93. $data_order = [];
  94. $order_info['point_amount'] = $data_order['point_amount'] = $order_info['point_amount'] + $point_amount * $point_ratio;
  95. $result = $order_model->editorder($data_order, ['id' => $order_info['id']]);
  96. if (!$result) {
  97. throw new \think\Exception('订单更新失败', 10006);
  98. }
  99. }
  100. return $order_info;
  101. }
  102. }