Zzhjobs.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. defined('BASEPATH') or exit('No direct script access allowed');
  3. /**
  4. * 此类是为了解决erp没有队列的问题,为了解决这个问题,先写一下这个类,避免后期写那么多定时任务类 这里只能解决每间隔多少时间执行一会的
  5. */
  6. class Zzhjobs extends Start_Controller
  7. {
  8. private $serect_str = "erphjob";
  9. private $user_agent = 'Xcly250422/Jobh (Erp)';
  10. private $api = "ly202504220727";
  11. private $ip = ['127.0.0.1','47.105.156.18'];
  12. public function __construct()
  13. {
  14. parent::__construct();
  15. $this->load->_model("Model_zzhjobs","zzhjobs");
  16. $this->load->_model("Model_logic_tools",'logic_tools');
  17. }
  18. public function _remap($arg, $arg_array)
  19. {
  20. $ip = $_SERVER['REMOTE_ADDR'];
  21. if(!in_array($ip,$this->ip)){
  22. exit("Unauthorized access");
  23. }
  24. $user_agent = empty($_SERVER['HTTP_USER_AGENT'])?"":$_SERVER['HTTP_USER_AGENT'];
  25. $token = empty($_SERVER['HTTP_X_AUTH_TOKEN'])?"":$_SERVER['HTTP_X_AUTH_TOKEN'];
  26. $time = $this->input->get('time',true);
  27. $api = $this->input->get('api',true);
  28. $this->checkAuth($user_agent,$token,$time,$api);
  29. var_dump("jobs do action ...");
  30. if ($arg == 'jobs') //调出单
  31. {
  32. $this->_jobs();
  33. } else {
  34. $this->_index();
  35. }
  36. }
  37. /**
  38. * 校验是否有权限可以执行
  39. * $user_agent 自定义的请求客户端名称
  40. * $token 自定义的清华客户端的token
  41. * $time 请求的时间
  42. *
  43. */
  44. private function checkAuth($user_agent,$token,$time,$api){
  45. if($api != $this->api){
  46. exit("Access denied due to insufficient permissions");
  47. }
  48. $check_str = date("Ymd")."¥_".$this->serect_str."_¥".$time;
  49. if(empty($user_agent)){
  50. exit('No direct script access allowed');
  51. }
  52. if($user_agent != $this->user_agent){
  53. exit('Illegal request');
  54. }
  55. if(empty($token)){
  56. exit('No access permission');
  57. }
  58. $sercet_str = md5($check_str);
  59. if($sercet_str != $token){
  60. exit("Request permission is illegal");
  61. }
  62. }
  63. private function _index() {}
  64. //一般每一分钟都执行的 每分钟就执行10条
  65. //每五分钟 就执行100条
  66. //其他的就不限制了
  67. private function _jobs() {
  68. $m = (int)date("i");//当前分钟
  69. // 1分钟的队列
  70. $list_1 = $this->zzjobs->find_all('do_interval = 1 and status = 0');
  71. // 5分钟的队列
  72. $list_5 = [];
  73. if($m%5 == 0){
  74. $list_5 = $this->zzjobs->find_all('do_interval = 5 and status = 0');
  75. }
  76. // 10分钟的队列
  77. $list_10 = [];
  78. if($m%10 == 0){
  79. $list_10 = $this->zzjobs->find_all('do_interval = 10 and status = 0');
  80. }
  81. // 30分钟的队列
  82. $list_30 = [];
  83. if($m%30 == 0){
  84. $list_30 = $this->zzjobs->find_all('do_interval = 10 and status = 0');
  85. }
  86. $list = array_merge($list_1,$list_5,$list_10,$list_30);
  87. $do_list_ids = array_column($list,'id');
  88. if(empty($do_list_ids)){
  89. exit("No jobs to do");
  90. }
  91. $this->db->query("update crowd_zzjobs set status = 1 where id in (".implode(",",$do_list_ids).")");
  92. foreach($list as $k=>$v){
  93. $this->tasksAssign($v);
  94. }
  95. }
  96. private function tasksAssign($info){
  97. switch($info['quque']){
  98. case '1m':
  99. $this->zzjobs->save([
  100. 'result'=>$this->logic_tools->ret_json(1,"1m队列已经执行"),
  101. 'last_time'=>time()
  102. ],$info['id']);
  103. break;
  104. case '5m':
  105. $this->zzjobs->save([
  106. 'result'=>$this->logic_tools->ret_json(1,"5m队列已经执行"),
  107. 'last_time'=>time()
  108. ],$info['id']);
  109. break;
  110. case '10m':
  111. $this->zzjobs->save([
  112. 'result'=>$this->logic_tools->ret_json(1,"10m队列已经执行"),
  113. 'last_time'=>time()
  114. ],$info['id']);
  115. break;
  116. case '30m':
  117. $this->zzjobs->save([
  118. 'result'=>$this->logic_tools->ret_json(1,"30m队列已经执行"),
  119. 'last_time'=>time()
  120. ],$info['id']);
  121. break;
  122. default:
  123. $this->zzjobs->save([
  124. 'result'=>$this->logic_tools->ret_json(-1,"没有对应发方法执行任务"),
  125. 'last_time'=>time()
  126. ],$info['id']);
  127. break;
  128. }
  129. }
  130. }