Cron.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 山西牛酷信息科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com.cn
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace app\model\system;
  13. use app\model\BaseModel;
  14. /**
  15. * 计划任务管理
  16. * @author Administrator
  17. *
  18. */
  19. class Cron extends BaseModel
  20. {
  21. /**
  22. * 添加计划任务
  23. * @param unknown $type 任务类型 1.固定任务 2.循环任务
  24. * @param unknown $period 执行周期
  25. * @param unknown $name 任务名称
  26. * @param unknown $event 执行事件
  27. * @param unknown $execute_time 待执行时间
  28. * @param unknown $relate_id 关联id
  29. * @param unknown $period_type 周期类型
  30. */
  31. public function addCron($type = 1, $period = 0, $name, $event, $execute_time, $relate_id,$period_type = 0)
  32. {
  33. $data = [
  34. 'type' => $type,
  35. 'period' => $period,
  36. 'period_type' => $period_type,
  37. 'name' => $name,
  38. 'event' => $event,
  39. 'execute_time' => $execute_time,
  40. 'relate_id' => $relate_id,
  41. 'create_time' => time()
  42. ];
  43. $res = model("cron")->add($data);
  44. return $this->success($res);
  45. }
  46. /**
  47. * 删除计划任务
  48. * @param unknown $condition
  49. */
  50. public function deleteCron($condition)
  51. {
  52. $res = model("cron")->delete($condition);
  53. return $this->success($res);
  54. }
  55. /**
  56. * 执行任务
  57. */
  58. public function execute()
  59. {
  60. $list = model("cron")->getList([['execute_time', '<=', time()]]);
  61. if(!empty($list))
  62. {
  63. foreach ($list as $k => $v)
  64. {
  65. try{
  66. $res = event($v['event'], ['relate_id' => $v['relate_id']] );
  67. }catch (\Exception $e)
  68. {
  69. $res = $this->error($e->getMessage());
  70. }
  71. //调试开启
  72. /* $data_log = [
  73. 'name' => $v['name'],
  74. 'event' => $v['event'],
  75. 'execute_time' => time(),
  76. 'relate_id' => $v['relate_id'],
  77. 'message' => json_encode($res)
  78. ];
  79. model("cron_log")->add($data_log); */
  80. //循环任务
  81. if($v['type'] == 2)
  82. {
  83. $period = $v['period'] == 0 ? 1 : $v['period'];
  84. switch ($v['period_type'])
  85. {
  86. case 0://分
  87. $execute_time = $v['execute_time'] + $period*60;
  88. break;
  89. case 1://天
  90. $execute_time = strtotime("+".$period."day",$v['execute_time']);
  91. break;
  92. case 2://周
  93. $execute_time = strtotime("+".$period."week",$v['execute_time']);
  94. break;
  95. case 3://月
  96. $execute_time = strtotime("+".$period."month",$v['execute_time']);
  97. break;
  98. }
  99. model("cron")->update(['execute_time' => $execute_time], [['id', '=', $v['id']]]);
  100. }else{
  101. model("cron")->delete([['id', '=', $v['id']]]);
  102. }
  103. }
  104. }
  105. }
  106. }