Index: arms/html/analysisScope/content-container.html =================================================================== diff -u -re05d7c791ca041a40ef7c540f9d55fb70eb73bb2 -rf53218e3b68e19c2d17937b91a3f130ca5f8345b --- arms/html/analysisScope/content-container.html (.../content-container.html) (revision e05d7c791ca041a40ef7c540f9d55fb70eb73bb2) +++ arms/html/analysisScope/content-container.html (.../content-container.html) (revision f53218e3b68e19c2d17937b91a3f130ca5f8345b) @@ -493,7 +493,7 @@ 제품서비스에 몇개의 버전이 있는지, 버전 하위로 몇개의 요구사항이 있는지 -
+
@@ -545,15 +545,13 @@
-
-
-
- - 버전별로 요구사항 이슈의 업데이트 분포 - -
-
-
+
+
+ + 버전별로 요구사항 이슈의 업데이트 분포 + +
+
@@ -611,14 +609,14 @@ 요구사항이 다른 버전으로 옮겨간 이력이 있는지 분포 -
+
-
+

-
+

0) { console.log("display 재설정."); } @@ -461,8 +482,8 @@ } function statisticsMonitor(pdservice_id, pdservice_version_id) { - console.log("선택된 서비스 ===> " + pdservice_id); - console.log("선택된 버전 리스트 ===> " + pdservice_version_id); + console.log("[ analysisScope :: statisticsMonitor ] :: pdservice_id => " + pdservice_id); + console.log("[ analysisScope :: statisticsMonitor ] :: pdservice_version_id => " + pdservice_version_id); //1. 좌상 게이지 차트 및 타임라인 //2. Time ( 작업일정 ) - 버전 개수 삽입 @@ -887,4 +908,113 @@ } window.addEventListener('resize', myChart.resize); +} + + + +///////////////////////////////////////////////////////////////////////////////////// +// StackBarOnPolar chart - 제품(서비스)의 몇개의 버전 및, 버전 하위로 몇개의 요구사항이 있는지 +///////////////////////////////////////////////////////////////////////////////////// +function getReqAndSubtaskPerVersion(pdService_id, pdServiceVersionLinks, versionTag) { + $.ajax({ + url: "/auth-user/api/arms/analysis/scope/getReqAndSubtaskPerVersion/" + pdService_id, + type: "GET", + data: { + "서비스아이디": pdService_id, + "메인그룹필드": 'pdServiceVersion', + "하위그룹필드들": 'isReq', + "컨텐츠보기여부": true, + "pdServiceVersionLinks": pdServiceVersionLinks + }, + contentType: "application/json;charset=UTF-8", + dataType: "json", + progress: true, + statusCode: { + 200: function (result) { + console.log("[ analysisScope :: getReqAndSubtaskPerVersion ] :: result"); + console.log(result); + console.log(versionListData); + + + let legend_arr = ["요구사항", "연결이슈"]; + let verDataArr = []; + + // 집계 데이터 바탕 + if (result["전체합계"] !== 0) { + let 버전별집계 = result["검색결과"]["group_by_pdServiceVersion"]; + for (let i=0; i<버전별집계.length; i++) { + let mandatoryDataList = { + versionId: "", title: "", + req: "", subtask: "" + }; + mandatoryDataList.versionId = 버전별집계[i]["필드명"]; + let isReqArr = 버전별집계[i]["하위검색결과"]["group_by_isReq"]; + isReqArr.forEach((target) => { + if(target["필드명"] === "true") { + mandatoryDataList.req = target["개수"] + } else {mandatoryDataList.subtask = target["개수"]} + }); + verDataArr.push(mandatoryDataList); + } + } + + //1.선택한 제품서비스의 버전과, ES 조회결과 가져온 버전의 갯수가 다른지 확인 + //2.없는 버전의 경우, versionId만 넣어주고 나머지는 자료구조만 세팅. + let versionIdSet = new Set(); + versionTag.forEach((e) => versionIdSet.add(e)); + verDataArr.forEach((e) => { + if (versionIdSet.has((e.versionId))) { + versionIdSet.delete((e.versionId)); + } + }); + for ( let value of versionIdSet) { + verDataArr.push( {versionId: value, title: "", req: 0, subtask: 0 }) + } + + // 만든 버전데이터배열에 버전의 title 매핑. + for (let i=0; i { + if(e.versionId == versionListData[i]["c_id"]) { + e.title = versionListData[i].versionTitle; + } + }); + } + + let verNameArr=[], reqArr =[], linkedIssueSubtaskArr=[]; + verDataArr.forEach(e => {verNameArr.push(e.title); reqArr.push(e.req); linkedIssueSubtaskArr.push(e.subtask)}); + let colorArr = dashboardColor.productToMan; + let seriesReq = { + type: 'bar', + data: reqArr, + itemStyle: { + color: colorArr[0] + }, + coordinateSystem: 'polar', + name: "요구사항", + stack: 'a', + emphasis: { + focus: 'series' + } + } + let seriesSubtask = { + type: 'bar', + data: linkedIssueSubtaskArr, + itemStyle: { + color: colorArr[1] + }, + coordinateSystem: 'polar', + name: "연결이슈", + stack: 'a', + emphasis: { + focus: 'series' + } + } + + let seriesArr = []; + seriesArr.push(seriesReq,seriesSubtask); + + drawBarOnPolarAtScope("reqAndSubtaskPerVersion_polar_bar", verNameArr, legend_arr, seriesArr); + } + } + }); } \ No newline at end of file Index: arms/js/dashboard/chart/barChartOnPolar.js =================================================================== diff -u -re7bdb32fdb2dcca401a12ef444bc80983d8fdf0e -rf53218e3b68e19c2d17937b91a3f130ca5f8345b --- arms/js/dashboard/chart/barChartOnPolar.js (.../barChartOnPolar.js) (revision e7bdb32fdb2dcca401a12ef444bc80983d8fdf0e) +++ arms/js/dashboard/chart/barChartOnPolar.js (.../barChartOnPolar.js) (revision f53218e3b68e19c2d17937b91a3f130ca5f8345b) @@ -140,7 +140,14 @@ var option = { angleAxis: { type: 'category', - data: categories + data: categories, + axisLabel: { + textStyle: { + color: 'white', + fontWeight: "", + fontSize: "11" + } + }, }, radiusAxis: {}, polar: { center: ["50%", "60%"], radius: "60%"}, @@ -156,4 +163,47 @@ myChart.setOption(option,true); return myChart; +} + +function drawBarOnPolarAtScope(target, categories, legends, seriesArr) { + var chartDom = document.getElementById(target); + var myChart = echarts.init(chartDom); + + var option = { + angleAxis: { + type: 'category', + data: categories, + axisLabel: { + textStyle: { + color: 'white', + fontWeight: "", + fontSize: "11" + } + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + radiusAxis: {}, + polar: { center: ["50%", "50%"], radius: "70%"}, + series: seriesArr, + legend: { + show: true, + data: legends, // [ A, B , C , D, ...] + textStyle: { + color: 'white', // 이름의 텍스트 색상 설정 + fontStyle: 'normal', // 이름의 텍스트 스타일 설정 (예: italic, normal) + fontWeight: '', // 이름의 텍스트 굵기 설정 (예: bold, normal) + fontSize: 11 // 이름의 텍스트 크기 설정 + } + } + }; + myChart.setOption(option,true); + + window.addEventListener('resize', function () { + myChart.resize(); + }); } \ No newline at end of file