FlowService.php 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. <?php
  2. /**
  3. * 首页服务类
  4. * @copyright 引擎力
  5. * @author lc
  6. * @since 2021-06-23
  7. */
  8. namespace App\Http\Services;
  9. use App\Http\Models\ProjectFlowMemo;
  10. use App\Http\Models\ProjectFlowMemoRelation;
  11. use App\Http\Models\User;
  12. class FlowService
  13. {
  14. public function getFlowListByUserId($type, $siteId)
  15. {
  16. $user = auth()->user();
  17. $projectFlowMemo = ProjectFlowMemo::query();
  18. $projectFlowMemo1 = ProjectFlowMemo::query();
  19. if ($type == 1) {
  20. $userList = ProjectFlowMemoRelation::query()->where('user_id', $user->id)->pluck('memo_id');
  21. $projectFlowMemo->whereIn('id', $userList);
  22. $projectFlowMemo1->whereIn('id', $userList);
  23. }
  24. $flowList = $projectFlowMemo
  25. ->where('site_id', $siteId)
  26. ->with(['projectFlowMemoRelation'])
  27. ->orderBy('id', 'asc')->get();
  28. //各阶段角色负责人
  29. $this->getRoleUser($flowList, User::query()->pluck('nickname', 'id'));
  30. //总
  31. $count = ProjectFlowMemo::query()->where('site_id', $siteId)->count() ?? 0;
  32. //未完成的
  33. $toBeCompletedCount = ProjectFlowMemo::query()->where('site_id', $siteId)->where('status', 0)->count() ?? 0;
  34. //最后的上线时间
  35. if (!empty($flowList->toArray())) {
  36. $nodeDate = $flowList[count($flowList) - 1]['node_date'];
  37. //延期的时间
  38. if (date('Y-m-d') > $nodeDate) {
  39. $diff = strtotime(date('Y-m-d')) - strtotime($nodeDate);
  40. $newNodeDate = date('Y-m-d', (strtotime($nodeDate) + $diff));
  41. }
  42. }
  43. //按阶段分类
  44. $title = $projectFlowMemo1
  45. ->where('site_id', $siteId)
  46. ->groupBy('rank', 'level')
  47. ->orderBy('level', 'asc')
  48. ->pluck('rank', 'level')->toArray() ?? [];
  49. $flowList = $flowList->groupBy('level')->toArray();
  50. //统计阶段状态
  51. $ids = $this->addUp($flowList);
  52. //标题、阶段、是否完成
  53. foreach ($title as $key => $value) {
  54. $title[$key] = $value . ':' . $key . ':' . $ids[$key] ?? '';
  55. }
  56. //合并两个数组
  57. $list = array_combine($title, $flowList);
  58. //每个小阶段的起始和结束时间
  59. [$taskLastDateStart, $taskLastDateEnd] = $this->getStageDate($list);
  60. //这周一周日、下周一下周末
  61. [$monday, $sunday, $nextMonday, $nextSunday] = $this->getThisMonDayAndNextMonday();
  62. $thisWeekTaskList = $this->getWeekTaskList($siteId, $monday, $sunday, 'this');
  63. $nextWeekTaskList = $this->getWeekTaskList($siteId, $nextMonday, $nextSunday, 'next');
  64. return [$list, $count, $toBeCompletedCount, $nodeDate ?? '', $user, $taskLastDateStart, $taskLastDateEnd, $newNodeDate ?? '', $thisWeekTaskList, $nextWeekTaskList];
  65. }
  66. public function getWeekTaskList($siteId, $monday, $sunday, $type = 'this')
  67. {
  68. $task = ProjectFlowMemo::query()->with(['projectFlowMemoRelation'])
  69. ->select('id', 'title', 'rank', 'memo', 'node_date','overdue_memo','planning_week','planning_next_week')
  70. ->where('status', 0)
  71. ->where('site_id', $siteId);
  72. if ($type == 'this') {
  73. $taskList = $task->where('node_date', '<', $sunday)->get();
  74. } else {
  75. $taskList = $task->whereBetween('node_date', [$monday, $sunday])->get();
  76. }
  77. foreach ($taskList as $value) {
  78. $user = [];
  79. foreach ($value->projectFlowMemoRelation as $item) {
  80. $user[] = $item->user_id;
  81. }
  82. $value->user = $user;
  83. }
  84. foreach ($taskList as $item) {
  85. $item->userNames = implode(',', User::query()->whereIn('id', $item->user)->pluck('nickname')->toArray());
  86. }
  87. return $taskList;
  88. }
  89. public function addUp($flowList)
  90. {
  91. //统计完成和没完成的阶段
  92. $ids = [];
  93. foreach ($flowList as $key => $value) {
  94. $count1 = count($value);
  95. $num = 0;
  96. foreach ($value as $kk => $vv) {
  97. if (!empty($vv['status'])) {
  98. $num++;
  99. }
  100. }
  101. if ($num < $count1) {
  102. $ids[$key] = '进行中';
  103. }
  104. if ($num == $count1) {
  105. $ids[$key] = '完成';
  106. }
  107. if ($num == 0) {
  108. $ids[$key] = '未完成';
  109. }
  110. }
  111. return $ids;
  112. }
  113. public function getRoleUser(&$flowList, $userList)
  114. {
  115. //各阶段角色负责人
  116. foreach ($flowList as $item) {
  117. $roles = array_flip(explode(',', $item->roles));
  118. foreach ($roles as $key => $role) {
  119. $roles[$key] = [];
  120. foreach ($item->projectFlowMemoRelation as $value) {
  121. if ($key == $value->roles_id && $item->id == $value->memo_id) {
  122. $value->nickname = $userList[$value->user_id] ?? '';
  123. $roles[$key] = $value;
  124. }
  125. }
  126. }
  127. $item->roles = $roles;
  128. }
  129. }
  130. public function getStageDate($list)
  131. {
  132. $taskLastDateStart = [];
  133. $taskLastDateEnd = [];
  134. //每个小阶段的起始和结束时间
  135. foreach ($list as $key => $value) {
  136. $lastDate = [];
  137. foreach ($value as $kk => $vv) {
  138. $lastDate[] = strtotime($vv['node_date']);
  139. }
  140. if (!empty($lastDate)) {
  141. $string = explode(':', $key);
  142. $taskLastDateStart[$string[1]] = date('Y-m-d', min($lastDate));
  143. $taskLastDateEnd[$string[1]] = date('Y-m-d', max($lastDate));
  144. }
  145. }
  146. return [$taskLastDateStart, $taskLastDateEnd];
  147. }
  148. public function getThisMonDayAndNextMonday()
  149. {
  150. //当周一周日、下周一、周日
  151. $week = date("w");
  152. $monday = date("Y-m-d", strtotime("- " . ($week - 1) . " day "));
  153. $sunday = date("Y-m-d", strtotime(7 - $week . " day "));
  154. $nextMonday = date("Y-m-d", strtotime("+1 week", strtotime("-" . ($week - 1) . "day")));
  155. $nextSunday = date("Y-m-d", strtotime("+1 week", strtotime(7 - $week . "day")));
  156. return [$monday, $sunday, $nextMonday, $nextSunday];
  157. }
  158. /**
  159. * 汇总项目流程里面的各阶段逾期时间
  160. * @param $siteList
  161. * @return mixed
  162. */
  163. public function getFlowListBySiteId($siteList)
  164. {
  165. foreach ($siteList as $key => $item) {
  166. $siteList[$key]['cn_title'] = $item['cn_title'];//$this->substrFormat($item['cn_title'], 7);
  167. $siteList[$key]['rank'] = $item['process_progress']['rank'] ?? 0;
  168. $siteList[$key]['memo'] = $item['process_progress']['memo'] ?? '';
  169. if (empty($item['project_flow_memo'])) {
  170. $siteList[$key]['lv1'] = 0;
  171. $siteList[$key]['lv2'] = 0;
  172. $siteList[$key]['lv3'] = 0;
  173. $siteList[$key]['lv4'] = 0;
  174. $siteList[$key]['lv5'] = 0;
  175. $siteList[$key]['lv6'] = 0;
  176. $siteList[$key]['lv7'] = 0;
  177. $siteList[$key]['lv8'] = 0;
  178. $siteList[$key]['lv9'] = 0;
  179. $siteList[$key]['lv10'] = 0;
  180. $siteList[$key]['lv11'] = 0;
  181. $siteList[$key]['lv12'] = 0;
  182. $siteList[$key]['lv13'] = 0;
  183. $siteList[$key]['lv14'] = 0;
  184. } else {
  185. $siteList[$key]['lv1'] = 1;
  186. $siteList[$key]['lv2'] = 1;
  187. $siteList[$key]['lv3'] = 1;
  188. $siteList[$key]['lv4'] = 1;
  189. $siteList[$key]['lv5'] = 1;
  190. $siteList[$key]['lv6'] = 1;
  191. $siteList[$key]['lv7'] = 1;
  192. $siteList[$key]['lv8'] = 1;
  193. $siteList[$key]['lv9'] = 1;
  194. $siteList[$key]['lv10'] = 1;
  195. $siteList[$key]['lv11'] = 1;
  196. $siteList[$key]['lv12'] = 1;
  197. $siteList[$key]['lv13'] = 1;
  198. $siteList[$key]['lv14'] = 1;
  199. $lv1count = 0;
  200. $lv1complete = 0;
  201. $lv1OverdueTime = [];
  202. $lv1CompleteDate = [];
  203. $lv1CompleteOverdueTime = [];
  204. $lv1CompleteOverdueTime2 = [];
  205. $lv2count = 0;
  206. $lv2complete = 0;
  207. $lv2OverdueTime = [];
  208. $lv2CompleteDate = [];
  209. $lv2CompleteOverdueTime = [];
  210. $lv2CompleteOverdueTime2 = [];
  211. $lv3count = 0;
  212. $lv3complete = 0;
  213. $lv3OverdueTime = [];
  214. $lv3CompleteDate = [];
  215. $lv3CompleteOverdueTime = [];
  216. $lv3CompleteOverdueTime2 = [];
  217. $lv4count = 0;
  218. $lv4complete = 0;
  219. $lv4OverdueTime = [];
  220. $lv4CompleteDate = [];
  221. $lv4CompleteOverdueTime = [];
  222. $lv4CompleteOverdueTime2 = [];
  223. $lv5count = 0;
  224. $lv5complete = 0;
  225. $lv5OverdueTime = [];
  226. $lv5CompleteDate = [];
  227. $lv5CompleteOverdueTime = [];
  228. $lv5CompleteOverdueTime2 = [];
  229. $lv6count = 0;
  230. $lv6complete = 0;
  231. $lv6OverdueTime = [];
  232. $lv6CompleteDate = [];
  233. $lv6CompleteOverdueTime = [];
  234. $lv6CompleteOverdueTime2 = [];
  235. $lv7count = 0;
  236. $lv7complete = 0;
  237. $lv7OverdueTime = [];
  238. $lv7CompleteDate = [];
  239. $lv7CompleteOverdueTime = [];
  240. $lv7CompleteOverdueTime2 = [];
  241. $lv8count = 0;
  242. $lv8complete = 0;
  243. $lv8OverdueTime = [];
  244. $lv8CompleteDate = [];
  245. $lv8CompleteOverdueTime = [];
  246. $lv8CompleteOverdueTime2 = [];
  247. $lv9count = 0;
  248. $lv9complete = 0;
  249. $lv9OverdueTime = [];
  250. $lv9CompleteDate = [];
  251. $lv9CompleteOverdueTime = [];
  252. $lv9CompleteOverdueTime2 = [];
  253. $lv10count = 0;
  254. $lv10complete = 0;
  255. $lv10OverdueTime = [];
  256. $lv10CompleteDate = [];
  257. $lv10CompleteOverdueTime = [];
  258. $lv10CompleteOverdueTime2 = [];
  259. $lv11count = 0;
  260. $lv11complete = 0;
  261. $lv11OverdueTime = [];
  262. $lv11CompleteDate = [];
  263. $lv11CompleteOverdueTime = [];
  264. $lv11CompleteOverdueTime2 = [];
  265. $lv12count = 0;
  266. $lv12complete = 0;
  267. $lv12OverdueTime = [];
  268. $lv12CompleteDate = [];
  269. $lv12CompleteOverdueTime = [];
  270. $lv12CompleteOverdueTime2 = [];
  271. $lv13count = 0;
  272. $lv13complete = 0;
  273. $lv13OverdueTime = [];
  274. $lv13CompleteDate = [];
  275. $lv13CompleteOverdueTime = [];
  276. $lv13CompleteOverdueTime2 = [];
  277. $lv14count = 0;
  278. $lv14complete = 0;
  279. $lv14OverdueTime = [];
  280. $lv14CompleteDate = [];
  281. $lv14CompleteOverdueTime = [];
  282. $lv14CompleteOverdueTime2 = [];
  283. foreach ($item['project_flow_memo'] as $value) {
  284. if ($value['level'] == 1) {
  285. if (!empty($value['status'])) {
  286. $lv1complete++;
  287. $lv1CompleteDate[] = $value['status'];
  288. $lv1CompleteOverdueTime[] = strtotime($value['node_date']);
  289. $lv1CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  290. } else {
  291. $lv1OverdueTime[] = strtotime($value['node_date']);
  292. }
  293. $lv1count++;
  294. }
  295. if ($value['level'] == 2) {
  296. if (!empty($value['status'])) {
  297. $lv2complete++;
  298. $lv2CompleteDate[] = $value['status'];
  299. $lv2CompleteOverdueTime[] = strtotime($value['node_date']);
  300. $lv2CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  301. } else {
  302. $lv2OverdueTime[] = strtotime($value['node_date']);
  303. }
  304. $lv2count++;
  305. }
  306. if ($value['level'] == 3) {
  307. if (!empty($value['status'])) {
  308. $lv3complete++;
  309. $lv3CompleteDate[] = $value['status'];
  310. $lv3CompleteOverdueTime[] = strtotime($value['node_date']);
  311. $lv3CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  312. } else {
  313. $lv3OverdueTime[] = strtotime($value['node_date']);
  314. }
  315. $lv3count++;
  316. }
  317. if ($value['level'] == 4) {
  318. if (!empty($value['status'])) {
  319. $lv4complete++;
  320. $lv4CompleteDate[] = $value['status'];
  321. $lv4CompleteOverdueTime[] = strtotime($value['node_date']);
  322. $lv4CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  323. } else {
  324. $lv4OverdueTime[] = strtotime($value['node_date']);
  325. }
  326. $lv4count++;
  327. }
  328. if ($value['level'] == 5) {
  329. if (!empty($value['status'])) {
  330. $lv5complete++;
  331. $lv5CompleteDate[] = $value['status'];
  332. $lv5CompleteOverdueTime[] = strtotime($value['node_date']);
  333. $lv5CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  334. } else {
  335. $lv5OverdueTime[] = strtotime($value['node_date']);
  336. }
  337. $lv5count++;
  338. }
  339. if ($value['level'] == 6) {
  340. if (!empty($value['status'])) {
  341. $lv6complete++;
  342. $lv6CompleteDate[] = $value['status'];
  343. $lv6CompleteOverdueTime[] = strtotime($value['node_date']);
  344. $lv6CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  345. } else {
  346. $lv6OverdueTime[] = strtotime($value['node_date']);
  347. }
  348. $lv6count++;
  349. }
  350. if ($value['level'] == 7) {
  351. if (!empty($value['status'])) {
  352. $lv7complete++;
  353. $lv7CompleteDate[] = $value['status'];
  354. $lv7CompleteOverdueTime[] = strtotime($value['node_date']);
  355. $lv7CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  356. } else {
  357. $lv7OverdueTime[] = strtotime($value['node_date']);
  358. }
  359. $lv7count++;
  360. }
  361. if ($value['level'] == 8) {
  362. if (!empty($value['status'])) {
  363. $lv8complete++;
  364. $lv8CompleteDate[] = $value['status'];
  365. $lv8CompleteOverdueTime[] = strtotime($value['node_date']);
  366. $lv8CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  367. } else {
  368. $lv8OverdueTime[] = strtotime($value['node_date']);
  369. }
  370. $lv8count++;
  371. }
  372. if ($value['level'] == 9) {
  373. if (!empty($value['status'])) {
  374. $lv9complete++;
  375. $lv9CompleteDate[] = $value['status'];
  376. $lv9CompleteOverdueTime[] = strtotime($value['node_date']);
  377. $lv9CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  378. } else {
  379. $lv9OverdueTime[] = strtotime($value['node_date']);
  380. }
  381. $lv9count++;
  382. }
  383. if ($value['level'] == 10) {
  384. if (!empty($value['status'])) {
  385. $lv10complete++;
  386. $lv10CompleteDate[] = $value['status'];
  387. $lv10CompleteOverdueTime[] = strtotime($value['node_date']);
  388. $lv10CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  389. } else {
  390. $lv10OverdueTime[] = strtotime($value['node_date']);
  391. }
  392. $lv10count++;
  393. }
  394. if ($value['level'] == 11) {
  395. if (!empty($value['status'])) {
  396. $lv11complete++;
  397. $lv11CompleteDate[] = $value['status'];
  398. $lv11CompleteOverdueTime[] = strtotime($value['node_date']);
  399. $lv11CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  400. } else {
  401. $lv11OverdueTime[] = strtotime($value['node_date']);
  402. }
  403. $lv11count++;
  404. }
  405. if ($value['level'] == 12) {
  406. if (!empty($value['status'])) {
  407. $lv12complete++;
  408. $lv12CompleteDate[] = $value['status'];
  409. $lv12CompleteOverdueTime[] = strtotime($value['node_date']);
  410. $lv12CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  411. } else {
  412. $lv12OverdueTime[] = strtotime($value['node_date']);
  413. }
  414. $lv12count++;
  415. }
  416. if ($value['level'] == 13) {
  417. if (!empty($value['status'])) {
  418. $lv13complete++;
  419. $lv13CompleteDate[] = $value['status'];
  420. $lv13CompleteOverdueTime[] = strtotime($value['node_date']);
  421. $lv13CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  422. } else {
  423. $lv13OverdueTime[] = strtotime($value['node_date']);
  424. }
  425. $lv13count++;
  426. }
  427. if ($value['level'] == 14) {
  428. if (!empty($value['status'])) {
  429. $lv14complete++;
  430. $lv14CompleteDate[] = $value['status'];
  431. $lv14CompleteOverdueTime[] = strtotime($value['node_date']);
  432. $lv14CompleteOverdueTime2[strtotime($value['node_date'])] = strtotime(substr($value['status'], 0, 10));
  433. } else {
  434. $lv14OverdueTime[] = strtotime($value['node_date']);
  435. }
  436. $lv14count++;
  437. }
  438. if (!empty($value['level']) && $value['level'] == 1 && empty($value['status'])) {
  439. $siteList[$key]['lv1'] = 0;
  440. }
  441. if (!empty($value['level']) && $value['level'] == 2 && empty($value['status'])) {
  442. $siteList[$key]['lv2'] = 0;
  443. }
  444. if (!empty($value['level']) && $value['level'] == 3 && empty($value['status'])) {
  445. $siteList[$key]['lv3'] = 0;
  446. }
  447. if (!empty($value['level']) && $value['level'] == 4 && empty($value['status'])) {
  448. $siteList[$key]['lv4'] = 0;
  449. }
  450. if (!empty($value['level']) && $value['level'] == 5 && empty($value['status'])) {
  451. $siteList[$key]['lv5'] = 0;
  452. }
  453. if (!empty($value['level']) && $value['level'] == 6 && empty($value['status'])) {
  454. $siteList[$key]['lv6'] = 0;
  455. }
  456. if (!empty($value['level']) && $value['level'] == 7 && empty($value['status'])) {
  457. $siteList[$key]['lv7'] = 0;
  458. }
  459. if (!empty($value['level']) && $value['level'] == 8 && empty($value['status'])) {
  460. $siteList[$key]['lv8'] = 0;
  461. }
  462. if (!empty($value['level']) && $value['level'] == 9 && empty($value['status'])) {
  463. $siteList[$key]['lv9'] = 0;
  464. }
  465. if (!empty($value['level']) && $value['level'] == 10 && empty($value['status'])) {
  466. $siteList[$key]['lv10'] = 0;
  467. }
  468. if (!empty($value['level']) && $value['level'] == 11 && empty($value['status'])) {
  469. $siteList[$key]['lv11'] = 0;
  470. }
  471. if (!empty($value['level']) && $value['level'] == 12 && empty($value['status'])) {
  472. $siteList[$key]['lv12'] = 0;
  473. }
  474. if (!empty($value['level']) && $value['level'] == 13 && empty($value['status'])) {
  475. $siteList[$key]['lv13'] = 0;
  476. }
  477. if (!empty($value['level']) && $value['level'] == 14 && empty($value['status'])) {
  478. $siteList[$key]['lv14'] = 0;
  479. }
  480. }
  481. }
  482. $siteList[$key]['lv1count'] = $lv1count ?? 0;
  483. $siteList[$key]['lv1complete'] = $lv1complete ?? 0;
  484. if (!empty($lv1CompleteDate)) {
  485. $siteList[$key]['lv1completeDate'] = substr(max($lv1CompleteDate), 0, 10);
  486. }
  487. if (!empty($lv1OverdueTime)) {
  488. if (strtotime(date('Y-m-d 00:00:00')) > max($lv1OverdueTime)) {
  489. $siteList[$key]['lv1OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv1OverdueTime)) / 3600 / 24;;
  490. }
  491. }
  492. if (!empty($lv1CompleteOverdueTime) && !empty($lv1CompleteOverdueTime2)) {
  493. //完成时间小于节点时间
  494. if ($lv1CompleteOverdueTime2[max($lv1CompleteOverdueTime)] > max($lv1CompleteOverdueTime)) {
  495. $siteList[$key]['lv1CompleteOverdueTime'] = ($lv1CompleteOverdueTime2[max($lv1CompleteOverdueTime)] - max($lv1CompleteOverdueTime)) / 3600 / 24;
  496. }
  497. }
  498. $siteList[$key]['lv2count'] = $lv2count ?? 0;
  499. $siteList[$key]['lv2complete'] = $lv2complete ?? 0;
  500. if (!empty($lv2CompleteDate)) {
  501. $siteList[$key]['lv2completeDate'] = substr(max($lv2CompleteDate), 0, 10);
  502. }
  503. if (!empty($lv2OverdueTime)) {
  504. if (strtotime(date('Y-m-d 00:00:00')) > max($lv2OverdueTime)) {
  505. $siteList[$key]['lv2OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv2OverdueTime)) / 3600 / 24;;
  506. }
  507. }
  508. if (!empty($lv2CompleteOverdueTime) && !empty($lv2CompleteOverdueTime2)) {
  509. //完成时间小于节点时间
  510. if ($lv2CompleteOverdueTime2[max($lv2CompleteOverdueTime)] > max($lv2CompleteOverdueTime)) {
  511. $siteList[$key]['lv2CompleteOverdueTime'] = ($lv2CompleteOverdueTime2[max($lv2CompleteOverdueTime)] - max($lv2CompleteOverdueTime)) / 3600 / 24;
  512. }
  513. }
  514. $siteList[$key]['lv3count'] = $lv3count ?? 0;
  515. $siteList[$key]['lv3complete'] = $lv3complete ?? 0;
  516. if (!empty($lv3CompleteDate)) {
  517. $siteList[$key]['lv3completeDate'] = substr(max($lv3CompleteDate), 0, 10);
  518. }
  519. if (!empty($lv3OverdueTime)) {
  520. if (strtotime(date('Y-m-d 00:00:00')) > max($lv3OverdueTime)) {
  521. $siteList[$key]['lv3OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv3OverdueTime)) / 3600 / 24;;
  522. }
  523. }
  524. if (!empty($lv3CompleteOverdueTime) && !empty($lv3CompleteOverdueTime2)) {
  525. //完成时间小于节点时间
  526. if ($lv3CompleteOverdueTime2[max($lv3CompleteOverdueTime)] > max($lv3CompleteOverdueTime)) {
  527. $siteList[$key]['lv3CompleteOverdueTime'] = ($lv3CompleteOverdueTime2[max($lv3CompleteOverdueTime)] - max($lv3CompleteOverdueTime)) / 3600 / 24;
  528. }
  529. }
  530. $siteList[$key]['lv4count'] = $lv4count ?? 0;
  531. $siteList[$key]['lv4complete'] = $lv4complete ?? 0;
  532. if (!empty($lv4CompleteDate)) {
  533. $siteList[$key]['lv4completeDate'] = substr(max($lv4CompleteDate), 0, 10);
  534. }
  535. if (!empty($lv4OverdueTime)) {
  536. if (strtotime(date('Y-m-d 00:00:00')) > max($lv4OverdueTime)) {
  537. $siteList[$key]['lv4OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv4OverdueTime)) / 3600 / 24;;
  538. }
  539. }
  540. if (!empty($lv4CompleteOverdueTime) && !empty($lv4CompleteOverdueTime2)) {
  541. //完成时间小于节点时间
  542. if ($lv4CompleteOverdueTime2[max($lv4CompleteOverdueTime)] > max($lv4CompleteOverdueTime)) {
  543. $siteList[$key]['lv4CompleteOverdueTime'] = ($lv4CompleteOverdueTime2[max($lv4CompleteOverdueTime)] - max($lv4CompleteOverdueTime)) / 3600 / 24;
  544. }
  545. }
  546. $siteList[$key]['lv5count'] = $lv5count ?? 0;
  547. $siteList[$key]['lv5complete'] = $lv5complete ?? 0;
  548. if (!empty($lv5CompleteDate)) {
  549. $siteList[$key]['lv5completeDate'] = substr(max($lv5CompleteDate), 0, 10);
  550. }
  551. if (!empty($lv5OverdueTime)) {
  552. if (strtotime(date('Y-m-d 00:00:00')) > max($lv5OverdueTime)) {
  553. $siteList[$key]['lv5OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv5OverdueTime)) / 3600 / 24;;
  554. }
  555. }
  556. if (!empty($lv5CompleteOverdueTime) && !empty($lv5CompleteOverdueTime2)) {
  557. //完成时间小于节点时间
  558. if ($lv5CompleteOverdueTime2[max($lv5CompleteOverdueTime)] > max($lv5CompleteOverdueTime)) {
  559. $siteList[$key]['lv5CompleteOverdueTime'] = ($lv5CompleteOverdueTime2[max($lv5CompleteOverdueTime)] - max($lv5CompleteOverdueTime)) / 3600 / 24;
  560. }
  561. }
  562. $siteList[$key]['lv6count'] = $lv6count ?? 0;
  563. $siteList[$key]['lv6complete'] = $lv6complete ?? 0;
  564. if (!empty($lv6CompleteDate)) {
  565. $siteList[$key]['lv6completeDate'] = substr(max($lv6CompleteDate), 0, 10);
  566. }
  567. if (!empty($lv6OverdueTime)) {
  568. if (strtotime(date('Y-m-d 00:00:00')) > max($lv6OverdueTime)) {
  569. $siteList[$key]['lv6OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv6OverdueTime)) / 3600 / 24;;
  570. }
  571. }
  572. if (!empty($lv6CompleteOverdueTime) && !empty($lv6CompleteOverdueTime2)) {
  573. //完成时间小于节点时间
  574. if ($lv6CompleteOverdueTime2[max($lv6CompleteOverdueTime)] > max($lv6CompleteOverdueTime)) {
  575. $siteList[$key]['lv6CompleteOverdueTime'] = ($lv6CompleteOverdueTime2[max($lv6CompleteOverdueTime)] - max($lv6CompleteOverdueTime)) / 3600 / 24;
  576. }
  577. }
  578. $siteList[$key]['lv7count'] = $lv7count ?? 0;
  579. $siteList[$key]['lv7complete'] = $lv7complete ?? 0;
  580. if (!empty($lv7CompleteDate)) {
  581. $siteList[$key]['lv7completeDate'] = substr(max($lv7CompleteDate), 0, 10);
  582. }
  583. if (!empty($lv7OverdueTime)) {
  584. if (strtotime(date('Y-m-d 00:00:00')) > max($lv7OverdueTime)) {
  585. $siteList[$key]['lv7OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv7OverdueTime)) / 3600 / 24;;
  586. }
  587. }
  588. if (!empty($lv7CompleteOverdueTime) && !empty($lv7CompleteOverdueTime2)) {
  589. //完成时间小于节点时间
  590. if ($lv7CompleteOverdueTime2[max($lv7CompleteOverdueTime)] > max($lv7CompleteOverdueTime)) {
  591. $siteList[$key]['lv7CompleteOverdueTime'] = ($lv7CompleteOverdueTime2[max($lv7CompleteOverdueTime)] - max($lv7CompleteOverdueTime)) / 3600 / 24;
  592. }
  593. }
  594. $siteList[$key]['lv8count'] = $lv8count ?? 0;
  595. $siteList[$key]['lv8complete'] = $lv8complete ?? 0;
  596. if (!empty($lv8CompleteDate)) {
  597. $siteList[$key]['lv8completeDate'] = substr(max($lv8CompleteDate), 0, 10);
  598. }
  599. if (!empty($lv8OverdueTime)) {
  600. if (strtotime(date('Y-m-d 00:00:00')) > max($lv8OverdueTime)) {
  601. $siteList[$key]['lv8OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv8OverdueTime)) / 3600 / 24;;
  602. }
  603. }
  604. if (!empty($lv8CompleteOverdueTime) && !empty($lv8CompleteOverdueTime2)) {
  605. //完成时间小于节点时间
  606. if ($lv8CompleteOverdueTime2[max($lv8CompleteOverdueTime)] > max($lv8CompleteOverdueTime)) {
  607. $siteList[$key]['lv8CompleteOverdueTime'] = ($lv8CompleteOverdueTime2[max($lv8CompleteOverdueTime)] - max($lv8CompleteOverdueTime)) / 3600 / 24;
  608. }
  609. }
  610. $siteList[$key]['lv9count'] = $lv9count ?? 0;
  611. $siteList[$key]['lv9complete'] = $lv9complete ?? 0;
  612. if (!empty($lv9CompleteDate)) {
  613. $siteList[$key]['lv9completeDate'] = substr(max($lv9CompleteDate), 0, 10);
  614. }
  615. if (!empty($lv9OverdueTime)) {
  616. if (strtotime(date('Y-m-d 00:00:00')) > max($lv9OverdueTime)) {
  617. $siteList[$key]['lv9OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv9OverdueTime)) / 3600 / 24;;
  618. }
  619. }
  620. if (!empty($lv9CompleteOverdueTime) && !empty($lv9CompleteOverdueTime2)) {
  621. //完成时间小于节点时间
  622. if ($lv9CompleteOverdueTime2[max($lv9CompleteOverdueTime)] > max($lv9CompleteOverdueTime)) {
  623. $siteList[$key]['lv9CompleteOverdueTime'] = ($lv9CompleteOverdueTime2[max($lv9CompleteOverdueTime)] - max($lv9CompleteOverdueTime)) / 3600 / 24;
  624. }
  625. }
  626. $siteList[$key]['lv10count'] = $lv10count ?? 0;
  627. $siteList[$key]['lv10complete'] = $lv10complete ?? 0;
  628. if (!empty($lv10CompleteDate)) {
  629. $siteList[$key]['lv10completeDate'] = substr(max($lv10CompleteDate), 0, 10);
  630. }
  631. if (!empty($lv10OverdueTime)) {
  632. if (strtotime(date('Y-m-d 00:00:00')) > max($lv10OverdueTime)) {
  633. $siteList[$key]['lv10OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv10OverdueTime)) / 3600 / 24;;
  634. }
  635. }
  636. if (!empty($lv10CompleteOverdueTime) && !empty($lv10CompleteOverdueTime2)) {
  637. //完成时间小于节点时间
  638. if ($lv10CompleteOverdueTime2[max($lv10CompleteOverdueTime)] > max($lv10CompleteOverdueTime)) {
  639. $siteList[$key]['lv10CompleteOverdueTime'] = ($lv10CompleteOverdueTime2[max($lv10CompleteOverdueTime)] - max($lv10CompleteOverdueTime)) / 3600 / 24;
  640. }
  641. }
  642. $siteList[$key]['lv11count'] = $lv11count ?? 0;
  643. $siteList[$key]['lv11complete'] = $lv11complete ?? 0;
  644. if (!empty($lv11CompleteDate)) {
  645. $siteList[$key]['lv11completeDate'] = substr(max($lv11CompleteDate), 0, 10);
  646. }
  647. if (!empty($lv11OverdueTime)) {
  648. if (strtotime(date('Y-m-d 00:00:00')) > max($lv11OverdueTime)) {
  649. $siteList[$key]['lv11OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv11OverdueTime)) / 3600 / 24;;
  650. }
  651. }
  652. if (!empty($lv11CompleteOverdueTime) && !empty($lv11CompleteOverdueTime2)) {
  653. //完成时间小于节点时间
  654. if ($lv11CompleteOverdueTime2[max($lv11CompleteOverdueTime)] > max($lv11CompleteOverdueTime)) {
  655. $siteList[$key]['lv11CompleteOverdueTime'] = ($lv11CompleteOverdueTime2[max($lv11CompleteOverdueTime)] - max($lv11CompleteOverdueTime)) / 3600 / 24;
  656. }
  657. }
  658. $siteList[$key]['lv12count'] = $lv12count ?? 0;
  659. $siteList[$key]['lv12complete'] = $lv12complete ?? 0;
  660. if (!empty($lv12CompleteDate)) {
  661. $siteList[$key]['lv12completeDate'] = substr(max($lv12CompleteDate), 0, 10);
  662. }
  663. if (!empty($lv12OverdueTime)) {
  664. if (strtotime(date('Y-m-d 00:00:00')) > max($lv12OverdueTime)) {
  665. $siteList[$key]['lv12OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv12OverdueTime)) / 3600 / 24;;
  666. }
  667. }
  668. if (!empty($lv12CompleteOverdueTime) && !empty($lv12CompleteOverdueTime2)) {
  669. //完成时间小于节点时间
  670. if ($lv12CompleteOverdueTime2[max($lv12CompleteOverdueTime)] > max($lv12CompleteOverdueTime)) {
  671. $siteList[$key]['lv12CompleteOverdueTime'] = ($lv12CompleteOverdueTime2[max($lv12CompleteOverdueTime)] - max($lv12CompleteOverdueTime)) / 3600 / 24;
  672. }
  673. }
  674. $siteList[$key]['lv13count'] = $lv13count ?? 0;
  675. $siteList[$key]['lv13complete'] = $lv13complete ?? 0;
  676. if (!empty($lv13CompleteDate)) {
  677. $siteList[$key]['lv13completeDate'] = substr(max($lv13CompleteDate), 0, 10);
  678. }
  679. if (!empty($lv13OverdueTime)) {
  680. if (strtotime(date('Y-m-d 00:00:00')) > max($lv13OverdueTime)) {
  681. $siteList[$key]['lv13OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv13OverdueTime)) / 3600 / 24;;
  682. }
  683. }
  684. if (!empty($lv13CompleteOverdueTime) && !empty($lv13CompleteOverdueTime2)) {
  685. //完成时间小于节点时间
  686. if ($lv13CompleteOverdueTime2[max($lv13CompleteOverdueTime)] > max($lv13CompleteOverdueTime)) {
  687. $siteList[$key]['lv13CompleteOverdueTime'] = ($lv13CompleteOverdueTime2[max($lv13CompleteOverdueTime)] - max($lv13CompleteOverdueTime)) / 3600 / 24;
  688. }
  689. }
  690. $siteList[$key]['lv14count'] = $lv14count ?? 0;
  691. $siteList[$key]['lv14complete'] = $lv14complete ?? 0;
  692. if (!empty($lv14CompleteDate)) {
  693. $siteList[$key]['lv14completeDate'] = substr(max($lv14CompleteDate), 0, 10);
  694. }
  695. if (!empty($lv14OverdueTime)) {
  696. if (strtotime(date('Y-m-d 00:00:00')) > max($lv14OverdueTime)) {
  697. $siteList[$key]['lv14OverdueTime'] = (strtotime(date('Y-m-d 00:00:00')) - max($lv14OverdueTime)) / 3600 / 24;;
  698. }
  699. }
  700. if (!empty($lv14CompleteOverdueTime) && !empty($lv14CompleteOverdueTime2)) {
  701. //完成时间小于节点时间
  702. if ($lv14CompleteOverdueTime2[max($lv14CompleteOverdueTime)] > max($lv14CompleteOverdueTime)) {
  703. $siteList[$key]['lv14CompleteOverdueTime'] = ($lv14CompleteOverdueTime2[max($lv14CompleteOverdueTime)] - max($lv14CompleteOverdueTime)) / 3600 / 24;
  704. }
  705. }
  706. }
  707. return $siteList;
  708. }
  709. }