efficiency.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  1. 'use strict';
  2. app.controller('reportefficiencyCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "moment", "SweetAlert", "Restangular", "api_hkreport", "api_bpm_data", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, moment, SweetAlert, Restangular, api_hkreport, api_bpm_data) {
  3. var ROWS = "ROWS";
  4. var COLUMNS = "COLUMNS";
  5. $scope.treeshow = true;
  6. $scope.searchstate = "";
  7. $scope.headers = "请选择事件树形列表!";
  8. var workspace = {};
  9. $scope.parameters = {};
  10. $scope.starttimes = {};
  11. $scope.endtimes = {};
  12. $scope.category = {};
  13. $scope.reportName = "报表";
  14. $scope.allheight = 100;
  15. $scope.isMaskground = false;
  16. $scope.group = [];
  17. //表格
  18. $scope.rRows = [];
  19. $scope.quikly = [{ name: '自定义', value: 0 }, { name: '近7天', value: 1 }, { name: '近30天', value: 2 }, { name: '近90天', value: 3 }, { name: '近半年', value: 4 }, { name: '近一年', value: 5 }];
  20. // var starttime, endtime
  21. // $scope.starttimes = moment().startOf('month').format('YYYYMMDD');
  22. // $scope.endtimes = moment().format('YYYYMMDD');
  23. function startdata() {
  24. $scope.searchkeys = { 'group': {}, 'quikly': { name: '近7天', value: 1 } };
  25. $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
  26. $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
  27. $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
  28. $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
  29. }
  30. startdata();
  31. $scope.changeForm = function(paramDateFrom) {
  32. $scope.searchkeys.quikly = { name: '自定义', value: 0 };
  33. $scope.starttimes = moment(paramDateFrom).format('YYYYMMDD');
  34. }
  35. $scope.changeTo = function(paramDateTo) {
  36. $scope.searchkeys.quikly = { name: '自定义', value: 0 };
  37. $scope.endtimes = moment(paramDateTo).format('YYYYMMDD');
  38. }
  39. $scope.open = function($event) {
  40. $event.preventDefault();
  41. $event.stopPropagation();
  42. $scope.opened = !$scope.opened;
  43. };
  44. $scope.endOpen = function($event) {
  45. $event.preventDefault();
  46. $event.stopPropagation();
  47. $scope.startOpened = false;
  48. $scope.endOpened = !$scope.endOpened;
  49. };
  50. $scope.startOpen = function($event) {
  51. $event.preventDefault();
  52. $event.stopPropagation();
  53. $scope.endOpened = false;
  54. $scope.startOpened = !$scope.startOpened;
  55. };
  56. //处理组
  57. // api_user_data.fetchDataList('group', { "idx": 0, "sum": 1000, "group": { "selectType": "nouser" } }).then(function(data) {
  58. // if (data.status == 200) {
  59. // $scope.group = data.list;
  60. // }
  61. // })
  62. function ConvertDateParameter(parameters) {
  63. var result = undefined;
  64. if (angular.isArray(parameters)) {
  65. //
  66. } else {
  67. result = {};
  68. for (var k in parameters) {
  69. if (k.indexOf("Date") > 0) {
  70. if (angular.isDate(parameters[k])) {
  71. result[k] = moment(parameters[k]).format("YYYY-MM-DD");
  72. } else if (angular.isString(parameters[k])) {
  73. result[k] = parameters[k];
  74. }
  75. }
  76. }
  77. }
  78. return result;
  79. }
  80. $scope.restData = function() {
  81. $scope.try_async_load();
  82. startdata();
  83. $scope.mdxquery();
  84. }
  85. $scope.mdxquery = function(key) {
  86. var changedate = ConvertDateParameter($scope.parameters)
  87. var fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") }
  88. if (key && key.category && key.category.id) {
  89. fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD"), "categoryId": key.category.id }
  90. } else {
  91. fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") }
  92. }
  93. getdata(fildata);
  94. getdatatwo(fildata);
  95. getdatathree(fildata);
  96. // getdatatop3(fildata);
  97. // getdatatop5(fildata);
  98. // getdataareaplace(fildata);
  99. // getlistdata(fildata);
  100. // getlistdata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
  101. // getpiedata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
  102. // getpiedata({ "end": $scope.parameters.paramDateFrom, "start": $scope.parameters.paramDateTo })
  103. }
  104. $scope.onChangetime = function(key) {
  105. if (key.value == 1) {
  106. $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYY-MM-DD');
  107. $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
  108. $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYY-MM-DD").format("YYYY-MM-DD");
  109. $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYY-MM-DD").format("YYYY-MM-DD");
  110. } else if (key.value == 2) {
  111. $scope.starttimes = moment(new Date().getTime() - 86400000 * 30).format('YYYY-MM-DD');
  112. $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
  113. $scope.parameters.paramDateFrom = $scope.starttimes;
  114. $scope.parameters.paramDateTo = $scope.endtimes;
  115. } else if (key.value == 3) {
  116. $scope.starttimes = moment(new Date().getTime() - 86400000 * 90).format('YYYY-MM-DD');
  117. $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
  118. $scope.parameters.paramDateFrom = $scope.starttimes;
  119. $scope.parameters.paramDateTo = $scope.endtimes;
  120. } else if (key.value == 4) {
  121. $scope.searchstate = "month";
  122. $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 6)).format('YYYY-MM-DD');
  123. $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
  124. $scope.parameters.paramDateFrom = $scope.starttimes;
  125. $scope.parameters.paramDateTo = $scope.endtimes;
  126. } else if (key.value == 5) {
  127. $scope.searchstate = "month";
  128. $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 12)).format('YYYY-MM-DD');
  129. $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
  130. $scope.parameters.paramDateFrom = $scope.starttimes;
  131. $scope.parameters.paramDateTo = $scope.endtimes;
  132. }
  133. // $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
  134. // $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
  135. // $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
  136. // $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
  137. // $scope.mdxquery();
  138. }
  139. // $scope.onChangegroup = function(key) {
  140. // }
  141. $scope.execute = function() {
  142. api_report.list($scope.token).then(function(response) {
  143. $scope.select_treedata = $scope.my_data = response;
  144. });
  145. }
  146. $scope.searchOptions = function() {
  147. if (angular.isDefined(workspace.query)) {
  148. var queryParameters = workspace.query.parameters;
  149. for (var parm in queryParameters) {
  150. if (parm == 'Week') {
  151. } else {
  152. }
  153. }
  154. }
  155. }
  156. //树形图
  157. // $scope.inspecttype = {};
  158. $scope.my_tree = {};
  159. $scope.try_async_load = function() {
  160. $scope.my_data = [];
  161. $scope.doing_async = true;
  162. api_bpm_data.fetchDataList('incidentcategory', { "idx": 0, "sum": 1000 }).then(function(response) {
  163. if (response.status == 200) {
  164. var data = response.list;
  165. var objects = [];
  166. for (var i = 0; i < data.length; i++) {
  167. var object = {};
  168. object.id = data[i].id;
  169. object.parent = data[i].parent;
  170. // if (data[i].parent && data[i].parent.id != 0) {
  171. // object.parent = data[i].parent.id;
  172. // }
  173. object.label = data[i].category;
  174. objects.push(object);
  175. }
  176. $scope.my_data = convertParentToChildList(objects);
  177. $scope.select_treedata = angular.copy($scope.my_data);
  178. if ($scope.my_data.length > 0) {
  179. $scope.doing_async = false;
  180. }
  181. } else {
  182. SweetAlert.swal({
  183. title: "系统错误!",
  184. text: "请刷新重试!",
  185. type: "error"
  186. });
  187. }
  188. });
  189. };
  190. $scope.my_data = [];
  191. function convertListToTree(data, treeMap) {
  192. var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup
  193. var root = null; //Initially set our loop to null
  194. var parentNode = null;
  195. //loop over data
  196. for (var i = 0; i < data.length; i++) {
  197. var datum = data[i];
  198. //each node will have children, so let's give it a "children" poperty
  199. datum.children = [];
  200. //add an entry for this node to the map so that any future children can
  201. //lookup the parent
  202. idToNodeMap[datum.id] = datum;
  203. //Does this node have a parent?
  204. if (typeof datum.parent === "undefined" || datum.parent == null) {
  205. //Doesn't look like it, so this node is the root of the tree
  206. root = datum;
  207. treeMap[datum.id] = root;
  208. } else {
  209. //This node has a parent, so let's look it up using the id
  210. parentNode = idToNodeMap[datum.parent.id];
  211. //We don't need this property, so let's delete it.
  212. delete datum.parent;
  213. //Let's add the current node as a child of the parent node.
  214. parentNode.children.push(datum);
  215. }
  216. }
  217. return root;
  218. console.log(root)
  219. }
  220. function convertParentToChildList(data) {
  221. var treeMap = {};
  222. var list = [];
  223. convertListToTree(data, treeMap);
  224. angular.forEach(treeMap, function(item) {
  225. list.push(item);
  226. });
  227. return list;
  228. }
  229. $scope.try_async_load();
  230. // $scope.select_treedata = [];
  231. $scope.propTypeOptions = [];
  232. $scope.deselectItem = function(item) {
  233. console.log(item)
  234. console.log($scope)
  235. }
  236. // 故障现象
  237. $scope.onFilterCallback = function(item) {
  238. if (item.children && item.children.length != 0) {
  239. $scope.searchkeys.category = item;
  240. } else if (item.item && item.item.id) {
  241. $scope.searchkeys.category = {};
  242. }
  243. }
  244. //折线图
  245. var axilist = [];
  246. var serieslist = [];
  247. // var headerlist = [];
  248. $scope.responsehead = [];
  249. $scope.responselist = [];
  250. var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
  251. var domlleff = document.getElementById("liuliangeff");
  252. var myChartlleff = echarts.init(domlleff);
  253. myChartlleff.showLoading({  
  254. text: '数据加载中...',
  255. color: '#c23531',
  256. textColor: '#fff',
  257. maskColor: 'rgba(255,255,255,0)',
  258. zlevel: 0
  259. });
  260. var optionlleff = null;
  261. optionlleff = {
  262. color: ['#D53A35'],
  263. tooltip: {
  264. trigger: 'axis',
  265. //formatter: "{b} <br> 合格率: {c}%"
  266. },
  267. grid: {
  268. top: '10%',
  269. bottom: '15%',
  270. left: '3%',
  271. right: '8%',
  272. containLabel: true
  273. },
  274. xAxis: {
  275. type: 'category',
  276. name: '',
  277. boundaryGap: false,
  278. axisLine: {
  279. show: false,
  280. lineStyle: {
  281. color: '#525252'
  282. }
  283. },
  284. axisTick: {
  285. show: false
  286. },
  287. axisLabel: {
  288. color: '#525252'
  289. },
  290. data: axilist
  291. },
  292. yAxis: {
  293. type: 'value',
  294. name: '',
  295. minInterval: 1,
  296. axisLine: {
  297. show: false,
  298. },
  299. axisTick: {
  300. show: false
  301. },
  302. axisLabel: {
  303. color: '#525252'
  304. },
  305. splitLine: {
  306. lineStyle: {
  307. type: 'dotted',
  308. color: '#F3F3F3' //F3F3F3
  309. }
  310. }
  311. },
  312. "legend": {
  313. "data": ['事件解决时长'],
  314. },
  315. series: {
  316. // name: '事件解决时长',
  317. type: 'line',
  318. symbol: 'none',
  319. itemStyle: {
  320. normal: {
  321. color: '#4facef'
  322. }
  323. },
  324. lineStyle: {
  325. normal: {
  326. width: 2
  327. }
  328. },
  329. data: serieslist
  330. }
  331. };
  332. function getdata(time) {
  333. api_hkreport.incidentreport(time, 'incident_ops_efficiency_response').then(function(data) {
  334. $scope.responsehead = data.averagelist;
  335. $scope.responselist = data.list;
  336. axilist = [];
  337. angular.forEach(data.graphlist, function(item, index) {
  338. axilist.push(item.accdate);
  339. serieslist.push(item.responsetime);
  340. })
  341. optionlleff.xAxis.data = axilist;
  342. myChartlleff.setOption(optionlleff, true);
  343. myChartlleff.hideLoading();
  344. })
  345. }
  346. getdata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
  347. //第二个图
  348. //折线图
  349. var axilisttwo = [];
  350. var serieslisttwo = [];
  351. // var headerlist = [];
  352. $scope.responsetwohead = [];
  353. $scope.responsetwolist = [];
  354. var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
  355. var domtwoll = document.getElementById("liuliangtwo");
  356. var myCharttwoll = echarts.init(domtwoll);
  357. myCharttwoll.showLoading({  
  358. text: '数据加载中...',
  359. color: '#c23531',
  360. textColor: '#fff',
  361. maskColor: 'rgba(255,255,255,0)',
  362. zlevel: 0
  363. });
  364. var optiontwoll = null;
  365. optiontwoll = {
  366. color: ['#D53A35'],
  367. tooltip: {
  368. trigger: 'axis',
  369. //formatter: "{b} <br> 合格率: {c}%"
  370. },
  371. grid: {
  372. top: '10%',
  373. bottom: '15%',
  374. left: '3%',
  375. right: '8%',
  376. containLabel: true
  377. },
  378. xAxis: {
  379. type: 'category',
  380. name: '',
  381. boundaryGap: false,
  382. axisLine: {
  383. show: false,
  384. lineStyle: {
  385. color: '#525252'
  386. }
  387. },
  388. axisTick: {
  389. show: false
  390. },
  391. axisLabel: {
  392. color: '#525252'
  393. },
  394. data: axilisttwo
  395. },
  396. yAxis: {
  397. type: 'value',
  398. name: '',
  399. minInterval: 1,
  400. axisLine: {
  401. show: false,
  402. },
  403. axisTick: {
  404. show: false
  405. },
  406. axisLabel: {
  407. color: '#525252'
  408. },
  409. splitLine: {
  410. lineStyle: {
  411. type: 'dotted',
  412. color: '#F3F3F3' //F3F3F3
  413. }
  414. }
  415. },
  416. "legend": {
  417. "data": ['事件解决时长'],
  418. },
  419. series: {
  420. // name: '事件解决时长',
  421. type: 'line',
  422. symbol: 'none',
  423. itemStyle: {
  424. normal: {
  425. color: '#4facef'
  426. }
  427. },
  428. lineStyle: {
  429. normal: {
  430. width: 2
  431. }
  432. },
  433. data: serieslisttwo
  434. }
  435. };
  436. function getdatatwo(time) {
  437. api_hkreport.incidentreport(time, 'incident_ops_efficiency_solve').then(function(data) {
  438. $scope.responsetwohead = data.averagelist;
  439. $scope.responsetwolist = data.list;
  440. axilisttwo = [];
  441. angular.forEach(data.graphlist, function(item, index) {
  442. axilisttwo.push(item.accdate);
  443. serieslisttwo.push(item.responsetime);
  444. })
  445. optiontwoll.xAxis.data = axilisttwo;
  446. myCharttwoll.setOption(optiontwoll, true);
  447. myCharttwoll.hideLoading();
  448. })
  449. }
  450. getdatatwo({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
  451. //第二个图,逾期事件
  452. //折线图
  453. var axilistthree = [];
  454. var serieslistthree = [];
  455. // var headerlist = [];
  456. $scope.responsethreehead = [];
  457. $scope.responsethreelist = [];
  458. var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
  459. var domthreell = document.getElementById("liuliangthree");
  460. var myChartthreell = echarts.init(domthreell);
  461. myChartthreell.showLoading({  
  462. text: '数据加载中...',
  463. color: '#c23531',
  464. textColor: '#fff',
  465. maskColor: 'rgba(255,255,255,0)',
  466. zlevel: 0
  467. });
  468. var optionthreell = null;
  469. optionthreell = {
  470. color: ['#D53A35'],
  471. tooltip: {
  472. trigger: 'axis',
  473. //formatter: "{b} <br> 合格率: {c}%"
  474. },
  475. grid: {
  476. top: '10%',
  477. bottom: '15%',
  478. left: '3%',
  479. right: '8%',
  480. containLabel: true
  481. },
  482. xAxis: {
  483. type: 'category',
  484. name: '',
  485. boundaryGap: false,
  486. axisLine: {
  487. show: false,
  488. lineStyle: {
  489. color: '#525252'
  490. }
  491. },
  492. axisTick: {
  493. show: false
  494. },
  495. axisLabel: {
  496. color: '#525252'
  497. },
  498. data: axilisttwo
  499. },
  500. yAxis: {
  501. type: 'value',
  502. name: '',
  503. minInterval: 1,
  504. axisLine: {
  505. show: false,
  506. },
  507. axisTick: {
  508. show: false
  509. },
  510. axisLabel: {
  511. color: '#525252'
  512. },
  513. splitLine: {
  514. lineStyle: {
  515. type: 'dotted',
  516. color: '#F3F3F3' //F3F3F3
  517. }
  518. }
  519. },
  520. "legend": {
  521. "data": ['事件解决时长'],
  522. },
  523. series: {
  524. // name: '事件解决时长',
  525. type: 'line',
  526. symbol: 'none',
  527. itemStyle: {
  528. normal: {
  529. color: '#4facef'
  530. }
  531. },
  532. lineStyle: {
  533. normal: {
  534. width: 2
  535. }
  536. },
  537. data: serieslisttwo
  538. }
  539. };
  540. function getdatathree(time) {
  541. api_hkreport.incidentreport(time, 'incident_ops_efficiency_overdue').then(function(data) {
  542. $scope.responsethreehead = data.averagelist;
  543. $scope.responsethreelist = data.list;
  544. axilistthree = [];
  545. angular.forEach(data.graphlist, function(item, index) {
  546. axilistthree.push(item.accdate);
  547. serieslisttwo.push(item.responsetime);
  548. })
  549. optionthreell.xAxis.data = axilistthree;
  550. myChartthreell.setOption(optionthreell, true);
  551. myChartthreell.hideLoading();
  552. })
  553. }
  554. getdatathree({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
  555. }]);