UserChargeService.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. /**
  3. * 获取用户的充值模板
  4. */
  5. namespace App\Modules\User\Services;
  6. use App\Consts\ErrorConst;
  7. use App\Libs\Utils;
  8. use App\Modules\SendOrder\Models\QappSendOrder;
  9. use App\Modules\User\Models\User;
  10. use App\Modules\Trade\Models\Order as TradeOrder;
  11. use App\Modules\User\Models\QappChannelAccount;
  12. use App\Modules\Product\Models\QappChargeTemplate;
  13. use App\Modules\Product\Models\Product;
  14. use App\Modules\Subscribe\Services\OrderService;
  15. class UserChargeService
  16. {
  17. /**
  18. * 派单id是使用阅读记录里的;
  19. * @param [type] $uid [description]
  20. * @param [type] $send_order_id [description]
  21. * @return [type] [description]
  22. */
  23. public static function getTemplate($uid,$send_order_id,$distribution_channel_id){
  24. //获取模板id
  25. $template_id = self::selectTemplate($uid,$send_order_id);
  26. if($template_id == 0){
  27. //official
  28. $ids = env('OFFICIAL_TEMPLATE_IDS');
  29. $idarr = explode(',',$ids);
  30. $products = Product::whereIn('id',$idarr)->where('is_enabled',1)->orderBy('sequence','asc')->get();
  31. }else{
  32. $template_info = QappChargeTemplate::where('id',$template_id)->first();
  33. if (getProp($template_info,'is_official') == 1) {
  34. //属于官方模板 直接根据id 从 product表里查找
  35. $idarr = explode(',',getProp($template_info,'product_ids'));
  36. $products = Product::whereIn('id',$idarr)->where('is_enabled',1)->orderBy('sequence','asc')->get();
  37. }else{
  38. $products = Product::where('qapp_charge_template_id',$template_id)->where('is_enabled',1)->orderBy('sequence','asc')->get();
  39. }
  40. }
  41. $is_first_recharge = OrderService::judgeUserFirstRecharge($uid);
  42. $data = [];
  43. foreach ($products as $key => $v) {
  44. $text = '';
  45. if ($v->type == 'NEW_USER' && $is_first_recharge) {
  46. if (
  47. env('NO_NEW_USER_CHARGE') &&
  48. in_array(
  49. $distribution_channel_id,
  50. explode(',', env('NO_NEW_USER_CHARGE'))
  51. )
  52. ) {
  53. continue;
  54. }
  55. $temp = [
  56. 'price' => (float)$v->price . '元',
  57. 'is_year_order' => 0,
  58. 'is_month_order' => 0,
  59. 'text' => sprintf('%s+%s书币', $v->price * 100, $v->given),
  60. 'today_special' => $v->is_default,
  61. 'first_charge' => true,
  62. 'save_text' => round($v->given / 100, 1) . '元',
  63. 'product_id' => $v->id,
  64. ];
  65. $data[] = $temp;
  66. } elseif ($v->type == 'YEAR_ORDER') {
  67. $save_text = '年费vip会员';
  68. $text = '全年免费看';
  69. $temp = [
  70. 'price' => (int)$v->price . '元',
  71. 'is_year_order' => 1,
  72. 'is_month_order' => 0,
  73. 'text' => $text,
  74. 'today_special' => $v->is_default,
  75. 'first_charge' => false,
  76. 'save_text' => $save_text,
  77. 'product_id' => $v->id,
  78. ];
  79. $data[] = $temp;
  80. } else {
  81. if ($v->type == 'NEW_USER') {
  82. continue;
  83. }
  84. $save_text = '';
  85. if ($v->given) {
  86. $save_text = round($v->given / 100, 1) . '元';
  87. $text = sprintf('%s+%s书币', $v->price * 100, $v->given);
  88. } else {
  89. $text = sprintf('%s书币', $v->price * 100);
  90. }
  91. $temp = [
  92. 'price' => (float)$v->price . '元',
  93. 'is_year_order' => 0,
  94. 'is_month_order' => 0,
  95. 'text' => $text,
  96. 'today_special' => $v->is_default,
  97. 'first_charge' => false,
  98. 'save_text' => $save_text,
  99. 'product_id' => $v->id,
  100. ];
  101. $data[] = $temp;
  102. }
  103. }
  104. return $data;
  105. }
  106. /**
  107. * 判断选择用哪个模板id
  108. * @param [type] $uid [description]
  109. * @param [type] $send_order_id [description]
  110. * @return [type] [description]
  111. */
  112. public static function selectTemplate($uid,$send_order_id){
  113. $default_template_id = 0;
  114. if (!$send_order_id) {
  115. return $default_template_id;
  116. }
  117. $user_order_num = TradeOrder::where('uid', $uid)->where('status', 'PAID')->orderBy('id')->count();
  118. $qappSendOrder = QappSendOrder::getSendOrderById($send_order_id);
  119. $first_charge_template_id = getProp($qappSendOrder, 'first_charge_template_id');
  120. $second_charge_template_id = getProp($qappSendOrder, 'second_charge_template_id');
  121. //找该派单的建立者设置的默认模板
  122. $account = getProp($qappSendOrder, 'account');
  123. $account_info = QappChannelAccount::getByAccount($account);
  124. if ($user_order_num == 0) {
  125. //若该派单设置了模板
  126. if($first_charge_template_id) return $first_charge_template_id;
  127. //找该派单的建立者设置的默认模板
  128. $account_info = QappChannelAccount::getByAccount($account);
  129. $template_id = QappChargeTemplate::where('qapp_channel_account_id',getProp($account_info, 'id'))
  130. ->where('type','first_charge')
  131. ->where('is_default',1)
  132. ->value('id');
  133. if ($template_id) {
  134. return $template_id;
  135. }
  136. //如果设置了非首冲,则返回非首冲
  137. if($second_charge_template_id) return $second_charge_template_id;
  138. if(!$template_id){
  139. //无默认首冲模板,找非首冲默认模板
  140. $template_id = QappChargeTemplate::where('qapp_channel_account_id',getProp($account_info, 'id'))
  141. ->where('type','second_charge')
  142. ->where('is_default',1)
  143. ->value('id');
  144. }
  145. return $template_id > 0 ? $template_id : $default_template_id;
  146. }
  147. if ($user_order_num > 0) {
  148. //不是首单
  149. if($second_charge_template_id) return $second_charge_template_id;
  150. //无派单非首冲模板,找非首冲默认模板
  151. $template_id = QappChargeTemplate::where('qapp_channel_account_id',getProp($account_info, 'id'))
  152. ->where('type','second_charge')
  153. ->where('is_default',1)
  154. ->value('id');
  155. return $template_id > 0 ? $template_id : $default_template_id;
  156. }
  157. }
  158. }