vr_order.logic.php 7.6 KB

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