vr_order.logic.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. /**
  3. * 虚拟订单行为
  4. *
  5. */
  6. defined('InShopNC') or exit('Access Invalid!');
  7. require_once(BASE_HELPER_PATH . '/vrorder_helper.php');
  8. class vr_orderLogic
  9. {
  10. /**
  11. * 取消订单
  12. * @param array $order_info
  13. * @param string $role 操作角色 buyer、seller、admin、system 分别代表买家、商家、管理员、系统
  14. * @param string $msg 操作备注
  15. * @param boolean $if_queue 是否使用队列
  16. * @return array
  17. */
  18. public function changeOrderStateCancel($order_info, $role, $msg, $if_queue = true)
  19. {
  20. try {
  21. $model_vr_order = Model('vr_order');
  22. $trans = new trans_wapper($model_vr_order, __METHOD__);
  23. //库存、销量变更
  24. if ($if_queue) {
  25. QueueClient::push('cancelOrderUpdateStorage', [$order_info['goods_id'] => $order_info['goods_num']]);
  26. } else {
  27. Logic('queue')->cancelOrderUpdateStorage([$order_info['goods_id'] => $order_info['goods_num']]);
  28. }
  29. $model_pd = Model('predeposit');
  30. //解冻充值卡
  31. $pd_amount = floatval($order_info['rcb_amount']);
  32. if ($pd_amount > 0) {
  33. $data_pd = [];
  34. $data_pd['member_id'] = $order_info['buyer_id'];
  35. $data_pd['member_name'] = $order_info['buyer_name'];
  36. $data_pd['amount'] = $pd_amount;
  37. $data_pd['order_sn'] = $order_info['order_sn'];
  38. $model_pd->changeRcb('order_cancel', $data_pd);
  39. }
  40. //解冻预存款
  41. $pd_amount = floatval($order_info['pd_amount']);
  42. if ($pd_amount > 0) {
  43. $data_pd = [];
  44. $data_pd['member_id'] = $order_info['buyer_id'];
  45. $data_pd['member_name'] = $order_info['buyer_name'];
  46. $data_pd['amount'] = $pd_amount;
  47. $data_pd['order_sn'] = $order_info['order_sn'];
  48. $model_pd->changePd('order_cancel', $data_pd);
  49. }
  50. //更新订单信息
  51. $update_order = [
  52. 'order_state' => ORDER_STATE_CANCEL,
  53. 'pd_amount' => 0,
  54. 'close_time' => time(),
  55. 'close_reason' => $msg
  56. ];
  57. $update = $model_vr_order->editOrder($update_order, ['order_id' => $order_info['order_id']]);
  58. if (!$update) {
  59. throw new Exception('保存失败');
  60. } else {
  61. QueueClient::push('OnVrOrderCancel', ['order_sn' => $order_info['order_sn']]);
  62. }
  63. $trans->commit();
  64. return callback(true, '更新成功');
  65. } catch (Exception $e) {
  66. $trans->rollback();
  67. return callback(false, $e->getMessage());
  68. }
  69. }
  70. /**
  71. * 支付订单
  72. * @param array $order_info
  73. * @param string $role 操作角色 buyer、seller、admin、system 分别代表买家、商家、管理员、系统
  74. * @param string $post
  75. * @return array
  76. */
  77. public function changeOrderStatePay($order_info, $role, $post)
  78. {
  79. try {
  80. $model_vr_order = Model('vr_order');
  81. $trans = new trans_wapper($model_vr_order, __METHOD__);
  82. $model_pd = Model('predeposit');
  83. //下单,支付被冻结的充值卡
  84. $rcb_amount = floatval($order_info['rcb_amount']);
  85. if ($rcb_amount > 0) {
  86. $data_pd = [];
  87. $data_pd['member_id'] = $order_info['buyer_id'];
  88. $data_pd['member_name'] = $order_info['buyer_name'];
  89. $data_pd['amount'] = $rcb_amount;
  90. $data_pd['order_sn'] = $order_info['order_sn'];
  91. $model_pd->changeRcb('order_comb_pay', $data_pd);
  92. }
  93. //下单,支付被冻结的预存款
  94. $pd_amount = floatval($order_info['pd_amount']);
  95. if ($pd_amount > 0) {
  96. $data_pd = [];
  97. $data_pd['member_id'] = $order_info['buyer_id'];
  98. $data_pd['member_name'] = $order_info['buyer_name'];
  99. $data_pd['amount'] = $pd_amount;
  100. $data_pd['order_sn'] = $order_info['order_sn'];
  101. $model_pd->changePd('order_comb_pay', $data_pd);
  102. }
  103. //更新订单状态
  104. $update_order = [];
  105. $update_order['order_state'] = ORDER_STATE_PAY;
  106. $update_order['payment_time'] = $post['payment_time'] ? strtotime($post['payment_time']) : time();
  107. $update_order['payment_code'] = $post['payment_code'];
  108. $update_order['trade_no'] = $post['trade_no'];
  109. $update = $model_vr_order->editOrder($update_order, ['order_id' => $order_info['order_id']]);
  110. if (!$update) {
  111. throw new Exception(L('nc_common_save_fail'));
  112. }
  113. //发放兑换码
  114. $insert = $model_vr_order->addOrderCode($order_info);
  115. if (!$insert) {
  116. throw new Exception('兑换码发送失败');
  117. }
  118. // 支付成功发送买家消息
  119. $param = [];
  120. $param['code'] = 'order_payment_success';
  121. $param['member_id'] = $order_info['buyer_id'];
  122. $param['param'] = [
  123. 'order_sn' => $order_info['order_sn'],
  124. 'order_url' => urlShop('member_vr_order', 'show_order', ['order_id' => $order_info['order_id']])
  125. ];
  126. QueueClient::push('sendMemberMsg', $param);
  127. // 支付成功发送店铺消息
  128. $param = [];
  129. $param['code'] = 'new_order';
  130. $param['store_id'] = $order_info['store_id'];
  131. $param['param'] = ['order_sn' => $order_info['order_sn']];
  132. QueueClient::push('sendStoreMsg', $param);
  133. $trans->commit();
  134. return callback(true, '更新成功');
  135. } catch (Exception $e) {
  136. $trans->rollback();
  137. return callback(false, $e->getMessage());
  138. }
  139. }
  140. public function changeOrderStateSend($order_id)
  141. {
  142. $model_vr_order = Model('vr_order');
  143. $condition = [];
  144. $condition['vr_state'] = 0;
  145. $condition['refund_lock'] = ['in', [0, 1]];
  146. $condition['order_id'] = $order_id;
  147. $condition['vr_indate'] = ['gt', time()];
  148. $order_code_info = $model_vr_order->getOrderCodeInfo($condition, '*', true);
  149. if (!empty($order_code_info)) {
  150. $update = $model_vr_order->editOrder(['order_state' => ORDER_STATE_SEND], ['order_id' => $order_id]);
  151. if (!$update) {
  152. callback(false, '更新失败');
  153. }
  154. }
  155. return callback(true, '更新成功');
  156. }
  157. /**
  158. * 完成订单
  159. * @param int $order_id
  160. * @return array
  161. */
  162. public function changeOrderStateSuccess($order_id)
  163. {
  164. $model_vr_order = Model('vr_order');
  165. $condition = [];
  166. $condition['vr_state'] = 0;
  167. $condition['refund_lock'] = ['in', [0, 1]];
  168. $condition['order_id'] = $order_id;
  169. $condition['vr_indate'] = ['gt', time()];
  170. $order_code_info = $model_vr_order->getOrderCodeInfo($condition, '*', true);
  171. if (!empty($order_code_info)) {
  172. $update = $model_vr_order->editOrder(['order_state' => ORDER_STATE_SUCCESS, 'finnshed_time' => time()], ['order_id' => $order_id]);
  173. if (!$update) {
  174. callback(false, '更新失败');
  175. }
  176. }
  177. $order_info = $model_vr_order->getOrderInfo(['order_id' => $order_id]);
  178. QueueClient::push('OnVrOrderComplete',['order_sn' => $order_info['order_sn']]);
  179. //添加会员积分
  180. if (C('points_isuse') == 1) {
  181. Model('points')->savePointsLog('order',
  182. ['pl_memberid' => $order_info['buyer_id'],
  183. 'pl_membername' => $order_info['buyer_name'],
  184. 'orderprice' => $order_info['order_amount'],
  185. 'order_sn' => $order_info['order_sn'],
  186. 'order_id' => $order_info['order_id']], true);
  187. }
  188. //添加会员经验值
  189. Model('exppoints')->saveExppointsLog('order',
  190. ['exp_memberid' => $order_info['buyer_id'],
  191. 'exp_membername' => $order_info['buyer_name'],
  192. 'orderprice' => $order_info['order_amount'],
  193. 'order_sn' => $order_info['order_sn'],
  194. 'order_id' => $order_info['order_id']]);
  195. return callback(true, '更新成功');
  196. }
  197. }