Autotask.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace addons\equipment\controller;
  3. use app\admin\model\equipment\Equipment;
  4. use app\admin\model\equipment\Plan;
  5. use app\admin\model\equipment\PlanTask;
  6. use app\admin\model\equipment\Record;
  7. use think\Db;
  8. use think\Exception;
  9. /**
  10. * 定时任务
  11. */
  12. class Autotask extends \think\addons\Controller
  13. {
  14. protected $noNeedLogin = ["*"];
  15. protected $layout = '';
  16. public function _initialize()
  17. {
  18. parent::_initialize();
  19. if (!$this->request->isCli()) {
  20. $this->error('只允许在终端进行操作!');
  21. }
  22. }
  23. /**
  24. * 定时任务清理逾期计划任务
  25. */
  26. public function index()
  27. {
  28. $planTaskModel = new PlanTask();
  29. $taskList = $planTaskModel->where('status', 'pending')->whereTime('duetime', '<=', time())->column('id, plan_id, equipment_id');
  30. if (empty($taskList)) {
  31. echo "none";
  32. return;
  33. }
  34. // 过滤已报废或已删除设备
  35. $equipmentIds = array_unique(array_column($taskList, 'equipment_id'));
  36. $delIds = Equipment::onlyTrashed()->whereIn('id', $equipmentIds)->column('id');
  37. $scrappedIds = Equipment::where(['work_status' => 'scrapped'])->whereIn('id', $equipmentIds)->column('id');
  38. $filterIds = array_merge($delIds, $scrappedIds);
  39. $planIds = array_unique(array_column($taskList, 'plan_id'));
  40. $planList = Plan::where('id', 'in', $planIds)->column('id, type');
  41. if (empty($planList)) {
  42. echo "none";
  43. return;
  44. }
  45. $records = [];
  46. $delPlanIds = [];
  47. $dueTaskIds = [];
  48. $time = time();
  49. $nameArr = ['inspection' => '巡检', 'maintenance' => '保养'];
  50. foreach ($taskList as $taskId => $item) {
  51. $equipmentId = $item['equipment_id'];
  52. if (in_array($equipmentId, $filterIds)) {
  53. continue;
  54. }
  55. $planId = $item['plan_id'];
  56. if (!isset($planList[$planId])) {
  57. $delPlanIds[] = $planId;
  58. continue;
  59. }
  60. $dueTaskIds[] = $taskId;
  61. $type = $planList[$planId];
  62. $records[] = [
  63. 'equipment_id' => $equipmentId,
  64. 'relate_id' => $taskId,
  65. 'type' => $type,
  66. 'name' => $nameArr[$type] . '结果:已逾期',
  67. 'content' => '[]',
  68. 'createtime' => $time,
  69. 'updatetime' => $time
  70. ];
  71. }
  72. Db::startTrans();
  73. try {
  74. $recordModel = new Record();
  75. $recordResult = $recordModel->insertAll($records);
  76. if (!$recordResult) {
  77. throw new Exception($recordModel->getError());
  78. }
  79. $result = $planTaskModel->whereIn('id', $dueTaskIds)->update(['status' => 'overdue', 'updatetime' => $time]);
  80. if (!$result) {
  81. throw new Exception($planTaskModel->getError());
  82. }
  83. if (!empty($filterIds)) {
  84. $delResult = $planTaskModel->whereIn('equipment_id', $filterIds)->where('status', 'pending')->update(['updatetime' => $time, 'deletetime' => $time]);
  85. if (!$delResult) {
  86. throw new Exception($planTaskModel->getError());
  87. }
  88. }
  89. if (!empty($delPlanIds)) {
  90. $delResult = $planTaskModel->whereIn('plan_id', array_unique($delPlanIds))->where('status', 'pending')->update(['updatetime' => $time, 'deletetime' => $time]);
  91. if (!$delResult) {
  92. throw new Exception($planTaskModel->getError());
  93. }
  94. }
  95. Db::commit();
  96. echo "done";
  97. } catch (Exception $exception) {
  98. Db::rollback();
  99. echo $exception->getMessage();
  100. }
  101. return;
  102. }
  103. }