SiteService.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace console\services;
  3. use common\models\backend\BackendNotice;
  4. use console\models\Mall;
  5. use Yii;
  6. use yii\base\BaseObject;
  7. /**
  8. * 站点
  9. *
  10. * Class SiteService
  11. * @package console\services
  12. */
  13. class SiteService extends BaseObject
  14. {
  15. /**
  16. * 站点到期检测
  17. *
  18. * @return boolean
  19. */
  20. public function expirationDetection()
  21. {
  22. $list = Mall::getTimeLimitMall();
  23. // 提醒时间
  24. $reminder_times = [
  25. ['=', 30],
  26. ['=', 15],
  27. ['<', 7],
  28. ];
  29. $time = strtotime(date('Y-m-d'));
  30. foreach ($reminder_times as $reminder_time) {
  31. list($exp, $limit) = $reminder_time;
  32. // 获取符合的商城
  33. $site_list = array_filter($list, function ($item) use ($exp, $limit, $time) {
  34. $expired_at = $item['expired_at'];
  35. return $this->expDay($exp, $this->getLeftDay($expired_at, $time), $limit);
  36. });
  37. $site_list && $this->sendMessage($site_list, $exp, $limit);
  38. }
  39. }
  40. /**
  41. * 计算
  42. *
  43. * @param string $exp
  44. * @param integer $day 当前剩余天数
  45. * @param integer $limit 提醒天数
  46. * @return boolean
  47. */
  48. private function expDay(string $exp, int $day, int $limit)
  49. {
  50. switch ($exp) {
  51. case '>':
  52. return $day > $limit;
  53. break;
  54. case '<':
  55. return $day < $limit;
  56. break;
  57. default:
  58. return $day == $limit;
  59. break;
  60. }
  61. return false;
  62. }
  63. /**
  64. * 发送信息
  65. *
  66. * @param array $list
  67. * @param string $exp
  68. * @param integer $day
  69. * @return boolean
  70. */
  71. protected function sendMessage(array $list, string $exp, int $day)
  72. {
  73. $time = strtotime(date('Y-m-d'));
  74. $phone = Yii::$app->services->setting->platform->get('system.contact_tel');
  75. foreach ($list as $site) {
  76. $title = '站点到期提醒';
  77. $msg = sprintf(
  78. '您的站点剩余时间还剩下%s天,为了不影响您的使用,请及时联系客服人员进行续费。(或联系客服电话:%s)',
  79. // date('Y-m-d', $site['expired_at']),
  80. $this->getLeftDay($site['expired_at'], $time),
  81. $phone
  82. );
  83. BackendNotice::addMallNotice($site['id'], $title, $msg, BackendNotice::ARREARS);
  84. }
  85. }
  86. /**
  87. * 计算剩余天数
  88. *
  89. * @param integer $expired_at
  90. * @param integer $time
  91. * @return int
  92. */
  93. protected function getLeftDay(int $expired_at, int $time)
  94. {
  95. return ceil(bcdiv(bcsub($expired_at, $time), 86400, 2));
  96. }
  97. }