TaskManager.php.problems_sync_percent.sql 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `PROBLEMS__SYNC_PERCENT`()
  2. BEGIN
  3. INSERT IGNORE INTO _SYNC_TASK_PERCENT (`ID_TASK`) SELECT `ID` FROM PROBLEMS;
  4. UPDATE `_SYNC_TASK_PERCENT` p, `PROBLEMS` t
  5. SET p.`A_PROBLEM_COMPLETE_PERCENT` = REPLACE(t.`A_PROBLEM_COMPLETE_PERCENT`, "%", "")
  6. , p.`L_APPOITMENT_PERIOD` = t.`L_APPOITMENT_PERIOD`
  7. WHERE p.`ID_TASK` = t.`ID`
  8. ;
  9. UPDATE `_SYNC_TASK_PERCENT` t
  10. LEFT JOIN `PROBLEMS` p ON t.`ID_TASK` = p.`ID`
  11. SET t.A_SYNCHRONIZED = 0
  12. WHERE t.`A_LAST_SYNC` < p.`A_RECORD_CREATE_DATE` OR t.`A_LAST_SYNC` < p.`A_RECORD_UPDATE_DATE`
  13. ;
  14. SELECT @c:=COUNT(*) FROM `_SYNC_TASK_PERCENT` WHERE `A_SYNCHRONIZED` = 0;
  15. SET @i = 0;
  16. WHILE @i < @c DO
  17. PREPARE stmt FROM "SELECT `ID_TASK` into @parent_id FROM `_SYNC_TASK_PERCENT` WHERE `A_SYNCHRONIZED` = 0 LIMIT ?,1";
  18. EXECUTE stmt USING @i;
  19. DEALLOCATE PREPARE stmt;
  20. select @parent_id;
  21. WHILE @parent_id <> 0 DO
  22. SELECT @parent_id := `PARENT_ID` FROM `PROBLEMS` WHERE `ID` = @parent_id;
  23. UPDATE `_SYNC_TASK_PERCENT` SET `A_SYNCHRONIZED` = 0 WHERE `ID_TASK` = @parent_id;
  24. END WHILE;
  25. SET @i = @i +1;
  26. END WHILE;
  27. UPDATE `_SYNC_TASK_PERCENT` SET SYNC_SORT_PRIO = 0;
  28. SELECT @c:=COUNT(*) FROM `_SYNC_TASK_PERCENT` p1
  29. LEFT JOIN `PROBLEMS` t1 ON p1.`ID_TASK` = t1.`PARENT_ID`
  30. WHERE p1.`A_SYNCHRONIZED` = 0 AND t1.`ID` IS NULL
  31. ;
  32. SET @i = 0;
  33. WHILE @i < @c DO
  34. SET @sort_prio = 1000;
  35. SELECT @i;
  36. PREPARE stmt FROM "SELECT p1.`ID_TASK` into @parent_id FROM `_SYNC_TASK_PERCENT` p1
  37. LEFT JOIN `PROBLEMS` t1 ON p1.`ID_TASK` = t1.`PARENT_ID`
  38. WHERE p1.`A_SYNCHRONIZED` = 0 AND t1.`ID` IS NULL LIMIT ?, 1"
  39. ;
  40. EXECUTE stmt USING @i;
  41. DEALLOCATE PREPARE stmt;
  42. select @parent_id;
  43. UPDATE `_SYNC_TASK_PERCENT` SET `SYNC_SORT_PRIO` = @sort_prio WHERE `ID_TASK` = @parent_id;
  44. WHILE @parent_id <> 0 DO
  45. SET @sort_prio = @sort_prio - 1;
  46. SELECT @parent_id := `PARENT_ID` FROM `PROBLEMS` WHERE `ID` = @parent_id;
  47. UPDATE `_SYNC_TASK_PERCENT` SET `SYNC_SORT_PRIO` = @sort_prio WHERE `ID_TASK` = @parent_id;
  48. END WHILE;
  49. SET @i = @i + 1;
  50. END WHILE;
  51. SELECT @c:=COUNT(*) FROM `_SYNC_TASK_PERCENT` WHERE `A_SYNCHRONIZED` = 0;
  52. SET @i = 0;
  53. WHILE @i < @c DO
  54. SELECT `ID_TASK` into @id FROM `_SYNC_TASK_PERCENT` WHERE `A_SYNCHRONIZED` = 0 ORDER BY `SYNC_SORT_PRIO` DESC LIMIT 0,1;
  55. SET @i = @i + 1;
  56. SELECT @childs:=COUNT(*) FROM `_SYNC_TASK_PERCENT` p1
  57. LEFT JOIN `PROBLEMS` t1 ON p1.`ID_TASK` = t1.`PARENT_ID`
  58. WHERE p1.`A_SYNCHRONIZED` = 0 AND t1.`PARENT_ID` = @id
  59. ;
  60. IF @childs = 0 THEN
  61. UPDATE `_SYNC_TASK_PERCENT` SET A_SYNCHRONIZED = 1, A_LAST_SYNC = NOW(), `CHILDS_COUNT` = @childs WHERE `ID_TASK` = @id;
  62. ELSE
  63. SELECT @avg:=AVG(p2.`A_PROBLEM_COMPLETE_PERCENT`), @amount:=SUM(p2.`L_APPOITMENT_PERIOD`) FROM `_SYNC_TASK_PERCENT` p1
  64. LEFT JOIN `PROBLEMS` t1 ON p1.`ID_TASK` = t1.`PARENT_ID`
  65. LEFT JOIN `_SYNC_TASK_PERCENT` p2 ON p2.`ID_TASK` = t1.`ID`
  66. WHERE p1.`A_SYNCHRONIZED` = 0 AND t1.`PARENT_ID` = @id
  67. ;
  68. SET @avg = ROUND(@avg);
  69. UPDATE `_SYNC_TASK_PERCENT` SET A_SYNCHRONIZED = 1, A_PROBLEM_COMPLETE_PERCENT = @avg,L_APPOITMENT_PERIOD = @amount, A_LAST_SYNC = NOW(), `CHILDS_COUNT` = @childs WHERE `ID_TASK` = @id;
  70. SET @avg = ROUND(@avg/10)*10;
  71. UPDATE `PROBLEMS` SET `A_PROBLEM_COMPLETE_PERCENT` = CONCAT(@avg, "%"),L_APPOITMENT_PERIOD = @amount, A_RECORD_UPDATE_DATE = NOW() WHERE `ID` = @id;
  72. END IF;
  73. SELECT "TEST";
  74. SELECT @childsdone:=COUNT(*) FROM `_SYNC_TASK_PERCENT` p
  75. LEFT JOIN `PROBLEMS` t ON t.`ID` = p.`ID_TASK`
  76. WHERE p.`A_PROBLEM_COMPLETE_PERCENT` = 100 AND t.`PARENT_ID` = @id
  77. ;
  78. UPDATE `_SYNC_TASK_PERCENT` SET `CHILDS_DONE_COUNT` = @childsdone WHERE `ID_TASK` = @id;
  79. END WHILE;
  80. END