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