GiftCardOrderOperation.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. namespace addon\giftcard\model\order;
  3. use addon\giftcard\model\card\VirtualCard;
  4. use addon\giftcard\model\giftcard\CardStat;
  5. use app\model\BaseModel;
  6. use app\model\member\MemberAccount;
  7. use app\model\system\Pay;
  8. use app\model\system\Stat;
  9. class GiftCardOrderOperation extends BaseModel
  10. {
  11. /**
  12. * 只涉及订单业务交互
  13. * @param $params
  14. */
  15. public function orderPay($params)
  16. {
  17. $out_trade_no = $params[ 'out_trade_no' ];
  18. $order_model = new GiftCardOrder();
  19. $order_condition = array (
  20. [ 'out_trade_no', '=', $out_trade_no ]
  21. );
  22. $order_info = $order_model->getOrderInfo($order_condition)[ 'data' ] ?? [];
  23. if (empty($order_info))
  24. return $this->error();
  25. $giftcard_id = $order_info[ 'giftcard_id' ];
  26. $num = $order_info[ 'num' ];//礼品卡套数
  27. $order_goods_model = new GiftCardOrderGoods();
  28. $order_goods_list = $order_goods_model->getOrderGoodsList([ [ 'order_id', '=', $order_info[ 'order_id' ] ] ])[ 'data' ] ?? [];
  29. $total_balance = 0;
  30. foreach ($order_goods_list as $k => $v) {
  31. $total_balance += $v[ 'total_balance' ];
  32. }
  33. //订单支付后生成礼品卡
  34. $virtual_card_model = new VirtualCard();
  35. $order_info[ 'source' ] = 'order';
  36. $order_info[ 'goods_list' ] = $order_goods_list;
  37. $order_info[ 'balance' ] = $total_balance;
  38. $temp_num = 0;
  39. model('giftcard_order')->startTrans();
  40. try {
  41. while ($temp_num < $num) {
  42. $virtual_card_model->addCard($order_info);
  43. $temp_num++;
  44. }
  45. $pay_type = $params[ 'pay_type' ];
  46. //订单相关操作(业务复杂后会拆开步骤)
  47. $pay_type_list = $order_model->getPayType();
  48. $data = array (
  49. 'order_status' => 'complete',
  50. 'pay_status' => 1,
  51. 'pay_time' => time(),
  52. 'pay_type' => $pay_type,
  53. 'pay_type_name' => $pay_type_list[ $pay_type ]
  54. );
  55. model('giftcard_order')->update($data, $order_condition);
  56. //可能是消费奖励
  57. event('GiftCardOrderPay', $order_info);
  58. //业务和支付的融合
  59. $pay_money = new Pay();
  60. $pay_info = $pay_money->getPayInfo($out_trade_no)[ 'data' ] ?? [];
  61. if (!empty($pay_info)) {
  62. $balance = $pay_info[ 'balance' ];
  63. $balance_money = $pay_info[ 'balance_money' ];
  64. $member_account_model = new MemberAccount();
  65. if ($balance > 0) {
  66. $use_res = $member_account_model->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], 'balance', -$balance, 'order', $order_info[ 'order_id' ], '订单消费扣除');
  67. if ($use_res[ 'code' ] != 0) {
  68. model('giftcard_order')->rollback();
  69. return $use_res;
  70. }
  71. }
  72. if ($balance_money > 0) {
  73. $use_res = $member_account_model->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], 'balance_money', -$balance_money, 'order', $order_info[ 'order_id' ], '订单消费扣除');
  74. if ($use_res[ 'code' ] != 0) {
  75. model('giftcard_order')->rollback();
  76. return $use_res;
  77. }
  78. }
  79. }
  80. model('giftcard_order')->commit();
  81. //活动增加销量
  82. ( new CardStat() )->stat([ 'stat_type' => 'sale', 'giftcard_id' => $giftcard_id ]);
  83. $stat_model = new Stat();
  84. $stat_model->switchStat([ 'type' => 'gift_card_order', 'data' => [ 'order_id' => $order_info[ 'order_id' ], 'site_id' => $order_info[ 'site_id' ] ] ]);
  85. return $this->success();
  86. } catch (\Exception $e) {
  87. model('giftcard_order')->rollback();
  88. return $this->error('', $e->getMessage());
  89. }
  90. }
  91. /**
  92. * 删除礼品卡订单(伪删除)
  93. * @param $condition
  94. */
  95. public function delete($condition)
  96. {
  97. model('giftcard_order')->update([ 'is_delete' => 1 ], $condition);
  98. return $this->success();
  99. }
  100. /**
  101. * 订单关闭
  102. * @param $params
  103. * @return array
  104. */
  105. public function close($params)
  106. {
  107. $order_id = $params[ 'order_id' ];
  108. $site_id = $params[ 'site_id' ] ?? 0;
  109. $close_cause = $params[ 'close_cause' ] ?? '';
  110. $condition = array (
  111. [ 'order_id', '=', $order_id ]
  112. );
  113. if ($site_id > 0) {
  114. $condition[] = [ 'site_id', '=', $site_id ];
  115. }
  116. $order_model = new GiftCardOrder();
  117. $info = $order_model->getOrderInfo($condition, 'order_status, out_trade_no, pay_status')[ 'data' ] ?? [];
  118. if ($info[ 'order_status' ] == 'close')
  119. return $this->error([], '订单已关闭');
  120. $data = array (
  121. 'order_status' => 'close',
  122. 'close_time' => time(),
  123. );
  124. if (!empty($close_cause)) {
  125. $data[ 'close_cause' ] = $close_cause;
  126. }
  127. //关闭支付单据(没支付的话)
  128. if ($info[ 'pay_status' ] == 0) {
  129. $pay_model = new Pay();
  130. $pay_result = $pay_model->deletePay($info[ 'out_trade_no' ]);
  131. if ($pay_result[ 'code' ] < 0) {
  132. return $this->error();
  133. }
  134. }
  135. model('giftcard_order')->update($data, $condition);
  136. return $this->success();
  137. }
  138. }