StoreOrderService.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. namespace addons\Store\common\services;
  3. use addons\Store\common\enums\StoreEnum;
  4. use addons\Store\common\models\Store;
  5. use addons\Store\common\models\StoreCashierOrder;
  6. use addons\Store\common\models\StoreOrder;
  7. use addons\Store\common\models\StoreOrderMarketing;
  8. use common\models\user\User;
  9. use common\enums\OrderStatusEnum;
  10. use common\enums\StatusEnum;
  11. use common\models\common\PaymentTradeOrder;
  12. use Yii;
  13. use Exception;
  14. class StoreOrderService extends BaseService
  15. {
  16. public function paySuccessOrderInfo($params)
  17. {
  18. $trade_id = $params['trade_id'] ?? '';
  19. $data = [
  20. 'original_goods_price' => '',
  21. 'shipping_money' => '',
  22. 'member_price' => '',
  23. 'score' => ['num' => '', 'money' => ''],
  24. 'pay_money' => '',
  25. 'give_score' => '',
  26. 'store_name' => '',
  27. 'logo_img' => '',
  28. 'is_show_wechat_video_number' => 0,
  29. 'wechat_video_number_id' => '',
  30. 'store_style' => 1,
  31. 'store_id' => 0,
  32. 'order_type' => '',
  33. 'share_title' => '',
  34. 'share_desc' => '',
  35. 'share_pic' => '',
  36. 'remaining_seconds'=>0
  37. ];
  38. $payment_trade_order_list = PaymentTradeOrder::lists(['where' => [
  39. ['trade_id' => $trade_id],
  40. ['order_type'=>['order','cashier_order']]
  41. ]
  42. ]);
  43. if (empty($payment_trade_order_list)) {
  44. return $data;
  45. }
  46. $order_no_arr = array_column($payment_trade_order_list, 'order_no');
  47. $original_goods_price = $shipping_money = $pay_money = $store_id = 0;
  48. $pre = $payment_trade_order_list[0]['order_no'][0];
  49. switch ($pre) {
  50. case 's':
  51. $detail_ids = [];
  52. $store_order_list = StoreOrder::lists([
  53. 'where' => [
  54. ['order_no' => $order_no_arr],
  55. ['user_id' => $params['user_id']]
  56. ],
  57. 'with' => ['detail']
  58. ]);
  59. $mall_id = 0;
  60. foreach ($store_order_list as $item) {
  61. $original_goods_price += $item['original_goods_price'];
  62. $shipping_money += $item['shipping_money'];
  63. $pay_money += $item['pay_money'];
  64. $store_id = $item['store_id'];
  65. $mall_id = $item['mall_id'];
  66. $detail_ids = array_merge($detail_ids, array_column($item['detail'], 'id'));
  67. }
  68. $store_order_marketing_list = StoreOrderMarketing::lists(['where' => [['order_detail_id' => $detail_ids]]]);
  69. $data['member_price'] = array_sum(array_column($store_order_marketing_list, 'member_price_deduct'));
  70. $score_num = $score_money = $give_score = 0;
  71. foreach ($store_order_marketing_list as $value) {
  72. $score_num += $value['deduct_score'];
  73. $give_score += $value['give_score'];
  74. $deduct_currency = json_decode($value['deduct_currency'], true);
  75. if (isset($deduct_currency['score'])) {
  76. $score_money += $deduct_currency['score']['money'];
  77. }
  78. }
  79. $data['score'] = [
  80. 'num' => !empty($score_num) ? bcadd($score_num, 0, 2) : '',
  81. 'money' => !empty($score_money) ? bcadd($score_money, 0, 2) : '',
  82. ];
  83. $data['give_score'] = !empty($give_score) ? bcadd($give_score, 0, 2) : '';
  84. $data['order_type'] = 'order';
  85. if($payment_trade_order_list[0]['is_pay']==OrderStatusEnum::NOT_PAY){
  86. $order_auto_handle_time = \Yii::$app->services->setting->mall->get($mall_id, 'order.payment_expire_time');
  87. if(empty($order_auto_handle_time)){
  88. $order_auto_handle_time = 10;
  89. }
  90. $data['remaining_seconds'] = $order_auto_handle_time*60;
  91. }
  92. break;
  93. case 'C':
  94. $member_price = $score_num = $score_money = $give_score = 0;
  95. $store_cashier_order_list = StoreCashierOrder::lists([
  96. 'where' => [
  97. ['order_no' => $order_no_arr],
  98. ['user_id' => $params['user_id']]
  99. ],
  100. ]);
  101. foreach ($store_cashier_order_list as $item) {
  102. $store_id = $item['store_id'];
  103. $original_goods_price += $item['money'];
  104. $pay_money += $item['pay_money'];
  105. $extra = json_decode($item['extra'], true);
  106. $member_price += $extra['member_deduct_money'] ?? 0;
  107. $score_num += $extra['deduct_num_score'] ?? 0;
  108. $score_money += $extra['discount_money'] ?? 0;
  109. $give_score += $extra['give_score'] ?? 0;
  110. }
  111. $data['member_price'] = bcadd($member_price, 0, 2);
  112. $data['score'] = [
  113. 'num' => bcadd($score_num, 0, 2),
  114. 'money' => bcadd($score_money, 0, 2)
  115. ];
  116. $data['give_score'] = bcadd($give_score, 0, 2);
  117. $data['order_type'] = 'cashier_order';
  118. break;
  119. }
  120. $store = Store::findOne(['id' => $store_id]);
  121. if (!empty($store)) {
  122. $data['store_name'] = $store['store_name'];
  123. $data['logo_img'] = $store['logo_img'];
  124. $data['is_show_wechat_video_number'] = $store['is_show_wechat_video_number'];
  125. $data['wechat_video_number_id'] = $store['wechat_video_number_id'];
  126. $data['share_title'] = $store['share_title'];
  127. $data['share_desc'] = $store['share_desc'];
  128. $data['share_pic'] = $store['share_pic'];
  129. }
  130. $data['original_goods_price'] = bcadd($original_goods_price, 0, 2);
  131. $data['shipping_money'] = bcadd($shipping_money, 0, 2);
  132. $data['pay_money'] = bcadd($pay_money, 0, 2);
  133. $data['store_id'] = $store_id;
  134. $decoration = \Yii::$app->services->setting->addons->get($this->mall_id, StoreEnum::ADDONS_NAME, 'decoration');
  135. if(!empty($decoration['custom_store_style'])){
  136. $data['store_style'] = $store['show_style']??1;
  137. }else{
  138. $data['store_style'] = $decoration['default_store_style']??1;
  139. }
  140. return $data;
  141. }
  142. public function getCashierLog($params)
  143. {
  144. try {
  145. $where = [
  146. ['mall_id' => $this->mall_id],
  147. ['store_id' => $this->store_id],
  148. ['pay_status' => 1],
  149. ['status' => StatusEnum::ENABLED],
  150. ];
  151. if (!empty($params['keyword'])) {
  152. $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [
  153. 'or',
  154. ['like', 'username', $params['keyword']],
  155. ['like', 'nickname', $params['keyword']],
  156. ['like', 'mobile', $params['keyword']],
  157. ['like', 'id', $params['keyword']],
  158. ]], 'select' => 'id']);
  159. $user_ids = array_column($user_list, 'id');
  160. $where[] = ['in', 'user_id', $user_ids];
  161. }
  162. if (!empty($params['order_no'])) $where[] = ['like', 'order_no', $params['order_no']];
  163. if (!empty($params['start_time'])) $where[] = ['>=', 'pay_time', strtotime($params['start_time'])];
  164. if (!empty($params['end_time'])) $where[] = ['<=', 'pay_time', strtotime($params['end_time'] . ' 23:59:59')];
  165. $cash_params = [
  166. 'where' => $where,
  167. 'order' => 'id desc',
  168. 'with' => ['user'],
  169. 'page' => $params['page'],
  170. 'limit' => $params['limit'],
  171. ];
  172. $list = StoreCashierOrder::listPage($cash_params);
  173. if (!empty($list['list'])) {
  174. foreach ($list['list'] as &$item) {
  175. $item['pay_time'] = date('Y-m-d H:i:s', $item['pay_time']);
  176. }
  177. }
  178. return $list;
  179. } catch (\Exception $e) {
  180. throw new Exception($e->getMessage());
  181. }
  182. }
  183. }