SendStatsEmailService.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: z_yang
  5. * Date: 2018/03/09
  6. * Time: 20:18
  7. */
  8. namespace App\Modules\Statistic\Services;
  9. use DB;
  10. use PHPMailer\PHPMailer\PHPMailer;
  11. class SendStatsEmailService
  12. {
  13. /**
  14. * 获取外部派单作品数据
  15. * @param $start_date
  16. * @param $to_date
  17. * @return mixed
  18. */
  19. public static function getOrderStats($start_date, $to_date)
  20. {
  21. $to_query = ['tmp.register_uv_rate>=0.85', 'tmp.register_uv_rate<=0.3'];
  22. //$to_query2 = ['s.register_user_num/s.uv>=0.85','s.register_user_num/s.uv>0.3 and s.register_user_num/s.uv<0.85','s.register_user_num/s.uv<=0.3'];
  23. $finnal = [[], [], []];
  24. foreach ($to_query as $key => $value) {
  25. $sql = "select t.*,book_categories.pid,book_configs.recommend_index,books.category_id from (SELECT tmp.bid,tmp.book_name,sum(tmp.uv) UV,
  26. sum(tmp.register_user_num) register_user_sum,
  27. sum(tmp.recharge_amount) recharge_sum,
  28. sum(tmp.force_user_num) force_user_sum,
  29. sum(tmp.pay_user_num) pay_user_num,
  30. count(tmp.bid) send_orders_num
  31. FROM (
  32. select s.bid,s.book_name,s.uv,s.register_user_num,s.recharge_amount,s.force_user_num,s.pay_user_num,s.register_user_num/s.uv as register_uv_rate
  33. from send_orders_stats as s where s.send_time between '" . $start_date . "' and '" . $to_date . "'
  34. ) tmp
  35. WHERE $value GROUP BY tmp.bid) as t,books,book_categories,book_configs where books.id = t.bid and book_configs.bid=t.bid and book_categories.id = books.category_id";
  36. $res = DB::select($sql);
  37. foreach ($res as $item) {
  38. $temp = array(
  39. 'bid' => $item->bid,
  40. 'book_name' => $item->book_name,
  41. 'UV' => $item->UV,
  42. 'register_user_sum' => $item->register_user_sum,
  43. 'pay_user_num' => $item->pay_user_num,
  44. 'recharge_sum' => $item->recharge_sum,
  45. 'force_user_sum' => $item->force_user_sum,
  46. 'pid' => $item->pid,
  47. 'send_orders_num' => $item->send_orders_num
  48. );
  49. $finnal[$key][] = $temp;
  50. }
  51. }
  52. return $finnal;
  53. }
  54. /**
  55. * 获取外部派单作品数据
  56. * @param $start_date
  57. * @param $to_date
  58. * @return mixed
  59. */
  60. public static function getOrderStatsNew()
  61. {
  62. $to_query = ['tmp.register_uv_rate>=0.85', 'tmp.register_uv_rate<=0.3'];
  63. //$to_query2 = ['s.register_user_num/s.uv>=0.85','s.register_user_num/s.uv>0.3 and s.register_user_num/s.uv<0.85','s.register_user_num/s.uv<=0.3'];
  64. $finnal = [[], []];
  65. foreach ($to_query as $key => $value) {
  66. $level = $key + 1;
  67. $res = DB::select("select * from (select t.*,book_categories.pid,book_configs.recommend_index,books.category_id from (SELECT tmp.bid,tmp.book_name,tmp.charge_type,tmp.is_on_shelf,sum(tmp.uv) UV,
  68. sum(tmp.register_user_num) register_user_sum,
  69. sum(tmp.recharge_amount) recharge_sum,
  70. sum(tmp.force_user_num) force_user_sum,
  71. sum(tmp.pay_user_num) pay_user_num,
  72. SUM(tmp.uv_one_day) AS uv_one_day_sum,
  73. SUM(tmp.uv_three_day) AS uv_three_day_sum,
  74. SUM(tmp.recharge_amount_in_one_day)-SUM(tmp.one_day_year_recharge) AS recharge_amount_in_one_day,
  75. SUM(tmp.recharge_amount_in_three_days)-SUM(tmp.three_day_year_recharge) AS recharge_amount_in_three_days
  76. FROM (
  77. select s.bid,s.book_name,book_configs.charge_type,book_configs.is_on_shelf,s.uv,s.register_user_num,s.recharge_amount,send_order_extra_stats.uv_one_day,send_order_extra_stats.uv_three_day,
  78. IFNULL((SELECT sum(price) FROM orders WHERE orders.send_order_id=s.send_order_id AND orders.`status`='PAID' AND orders.order_type='YEAR' AND orders.created_at > s.send_time AND UNIX_TIMESTAMP(orders.created_at)<=(UNIX_TIMESTAMP(s.send_time)+84600)),0) AS one_day_year_recharge,
  79. IFNULL((SELECT sum(price) FROM orders WHERE orders.send_order_id=s.send_order_id AND orders.`status`='PAID' AND orders.order_type='YEAR' AND orders.created_at > s.send_time AND UNIX_TIMESTAMP(orders.created_at)<=(UNIX_TIMESTAMP(s.send_time)+259200)),0) AS three_day_year_recharge,
  80. s.recharge_amount_in_one_day,s.recharge_amount_in_three_days,s.year_paid_num,
  81. s.force_user_num,s.pay_user_num,s.register_user_num/s.uv as register_uv_rate,s.force_user_num/s.register_user_num as force_sub_rate
  82. from send_orders_stats as s JOIN send_order_extra_stats ON send_order_extra_stats.send_order_id=s.send_order_id
  83. join book_configs on book_configs.bid=s.bid where book_configs.is_on_shelf in (1,2) and s.send_time between '" . date('Y-m-d', strtotime('-34 day')) . "' and '" . date('Y-m-d 23:59:59', strtotime('-4 day')) . "' and s.uv >= 100
  84. ) tmp
  85. WHERE $value and tmp.force_sub_rate <= 0.65 GROUP BY tmp.bid) as t,books,book_categories,book_configs where books.id = t.bid and book_configs.bid=t.bid and book_categories.id = books.category_id and book_categories.pid=2) tmp2 where tmp2.uv_one_day_sum >=1000
  86. ");
  87. //$res = DB::select($sql);
  88. foreach ($res as $item) {
  89. $one_day_recharge_uv_rate = $item->uv_one_day_sum > 0 ? round($item->recharge_amount_in_one_day / $item->uv_one_day_sum, 2) : 0;
  90. $three_days_recharge_uv_rate = $item->uv_three_day_sum > 0 ? round($item->recharge_amount_in_three_days / $item->uv_three_day_sum, 2) : 0;
  91. $three_days_recharge_one_day_uv = $item->uv_one_day_sum > 0 ? round($item->recharge_amount_in_three_days / $item->uv_one_day_sum, 2) : 0;
  92. if (($level == 1 && (($item->charge_type == 'BOOK' && $one_day_recharge_uv_rate >= 1) || ($item->charge_type == 'CHAPTER' && $one_day_recharge_uv_rate >= 0.8)))
  93. ||
  94. //($level==2 && (($item->charge_type=='BOOK' && $one_day_recharge_uv_rate>=0.85)||($item->charge_type=='CHAPTER' && $three_days_recharge_uv_rate>=1)))
  95. ($level == 2 && (($item->charge_type == 'BOOK' && $one_day_recharge_uv_rate >= 0.85) || ($item->charge_type == 'CHAPTER' && $three_days_recharge_one_day_uv >= 1.15)))
  96. ) {
  97. $temp = array(
  98. 'bid' => $item->bid,
  99. 'book_name' => $item->book_name,
  100. 'UV' => $item->UV,
  101. 'register_user_sum' => $item->register_user_sum,
  102. 'pay_user_num' => $item->pay_user_num,
  103. 'recharge_sum' => $item->recharge_sum,
  104. 'force_user_sum' => $item->force_user_sum,
  105. 'pid' => $item->pid,
  106. 'charge_type' => $item->charge_type,
  107. 'recharge_amount_in_one_day' => $item->recharge_amount_in_one_day,
  108. 'recharge_amount_in_three_days' => $item->recharge_amount_in_three_days,
  109. 'uv_one_day_sum' => $item->uv_one_day_sum,
  110. 'uv_three_day_sum' => $item->uv_three_day_sum,
  111. 'is_on_shelf' => $item->is_on_shelf
  112. );
  113. $finnal[$key][] = $temp;
  114. }
  115. }
  116. }
  117. return $finnal;
  118. }
  119. public static function SendHtmlEmailWithAcce(array $to_email, array $param, $accessory = '')
  120. {
  121. $mail = new PHPMailer(true);// Passing `true` enables exceptions
  122. $mail->CharSet = 'UTF-8';//'UTF-8';
  123. try {
  124. //Server settings
  125. $mail->SMTPDebug = 2; // Enable verbose debug output
  126. $mail->isSMTP(); // Set mailer to use SMTP
  127. $mail->Host = 'smtp.126.com'; //$mail->Host = 'smtp.126.com'; Specify main and backup SMTP servers
  128. $mail->SMTPAuth = true; // Enable SMTP authentication
  129. $mail->Username = 'wphelper@126.com'; //$mail->Username = 'tushengxiang@126.com'; // SMTP username
  130. $mail->Password = 'ylwtsmt123'; // SMTP password
  131. $mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
  132. $mail->Port = 587; // TCP port to connect to
  133. //Recipients
  134. $mail->setFrom('wphelper@126.com', 'System');
  135. $mail->addAddress($to_email[0]['address'], $to_email[0]['name']);
  136. array_shift($to_email);
  137. foreach ($to_email as $item) {
  138. $mail->addCC($item['address'], $item['name']); // Add a recipient
  139. }
  140. //Attachments
  141. if ($accessory) $mail->addAttachment($accessory);// Add attachments
  142. $mail->isHTML(true); // Set email format to HTML
  143. $mail->Subject = $param['subject'];
  144. $mail->Body = $param['body'];
  145. $mail->send();
  146. //echo 'Message has been sent';
  147. } catch (\Exception $e) {
  148. echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
  149. }
  150. }
  151. public static function SendMultyHtmlEmailWithAcce(array $to_email, array $param, array $accessorys = [])
  152. {
  153. $mail = new PHPMailer(true);// Passing `true` enables exceptions
  154. $mail->CharSet = 'UTF-8';//'UTF-8';
  155. try {
  156. //Server settings
  157. $mail->SMTPDebug = 2; // Enable verbose debug output
  158. $mail->isSMTP(); // Set mailer to use SMTP
  159. $mail->Host = 'smtp.126.com'; //$mail->Host = 'smtp.126.com'; Specify main and backup SMTP servers
  160. $mail->SMTPAuth = true; // Enable SMTP authentication
  161. $mail->Username = 'wphelper@126.com'; //$mail->Username = 'tushengxiang@126.com'; // SMTP username
  162. $mail->Password = 'ylwtsmt123'; // SMTP password
  163. $mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
  164. $mail->Port = 587; // TCP port to connect to
  165. //Recipients
  166. $mail->setFrom('wphelper@126.com', 'system');
  167. $mail->addAddress($to_email[0]['address'], $to_email[0]['name']);
  168. array_shift($to_email);
  169. foreach ($to_email as $item) {
  170. $mail->addCC($item['address'], $item['name']); // Add a recipient
  171. }
  172. //Attachments
  173. if ($accessorys) {
  174. foreach ($accessorys as $accessory) {
  175. $mail->addAttachment($accessory);
  176. }
  177. }
  178. $mail->isHTML(true); // Set email format to HTML
  179. $mail->Subject = $param['subject'];
  180. $mail->Body = $param['body'];
  181. $mail->send();
  182. //echo 'Message has been sent';
  183. } catch (\Exception $e) {
  184. echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
  185. }
  186. }
  187. }