vr_order.logic.php 9.6 KB

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