From feac42f5c24583d956e42c3a16e15f3d63992ea5 Mon Sep 17 00:00:00 2001 From: TaehunPark Date: Fri, 21 Oct 2022 16:26:02 +0900 Subject: [PATCH] =?UTF-8?q?feat:=EA=B2=AC=EB=AC=B8=ED=86=B5=EA=B3=84=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=EC=A0=80=EC=9E=A5(=EC=9E=91=EC=97=85?= =?UTF-8?q?=EC=A4=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../faisp/fpiMgt/affair/AffairController.java | 66 +++++ .../fpiMgt/affair/mapper/AffairMapper.java | 20 ++ .../fpiMgt/affair/model/TypeStatistics.java | 48 ++++ .../fpiMgt/affair/service/AffairService.java | 36 +++ .../resources/mybatisMapper/AffairMapper.xml | 237 ++++++++++++++++++ .../igActivities/fpiMgt/affair/statistics.js | 52 ++++ .../fpiMgt/affair/affairStatistics.html | 161 ++++++++++++ 7 files changed, 620 insertions(+) create mode 100644 src/main/java/com/dbnt/faisp/fpiMgt/affair/model/TypeStatistics.java create mode 100644 src/main/resources/static/js/igActivities/fpiMgt/affair/statistics.js create mode 100644 src/main/resources/templates/igActivities/fpiMgt/affair/affairStatistics.html diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affair/AffairController.java b/src/main/java/com/dbnt/faisp/fpiMgt/affair/AffairController.java index c6833ec7..e0c04f76 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/affair/AffairController.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affair/AffairController.java @@ -4,6 +4,7 @@ import com.dbnt.faisp.authMgt.service.AuthMgtService; import com.dbnt.faisp.codeMgt.service.CodeMgtService; import com.dbnt.faisp.fpiMgt.affair.model.AffairBoard; import com.dbnt.faisp.fpiMgt.affair.model.AffairRating; +import com.dbnt.faisp.fpiMgt.affair.model.TypeStatistics; import com.dbnt.faisp.fpiMgt.affair.service.AffairService; import com.dbnt.faisp.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; @@ -16,6 +17,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -228,4 +230,68 @@ public class AffairController { // 첩보수집활동 > 외사경찰 견문관 public Integer affairStateChange(@AuthenticationPrincipal UserInfo loginUser, @RequestBody List ratingList){ return affairService.affairStateChange(loginUser, ratingList); } + + @GetMapping("/statistics") + public ModelAndView statistics(@AuthenticationPrincipal UserInfo loginUser, TypeStatistics typeStatistics){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affair/affairStatistics"); + List type1 = affairService.selectType1List(typeStatistics); + List type2 = affairService.selectType2List(typeStatistics); + List type3 = affairService.selectType3List(typeStatistics); + List type4 = affairService.selectType4List(typeStatistics); + List type1List = affairService.selecType1ListCnt(typeStatistics); + List type2List = affairService.selecType2ListCnt(typeStatistics); + List type3List = affairService.selecType3ListCnt(typeStatistics); + List type4List = affairService.selecType4ListCnt(typeStatistics); + List totalList = affairService.selectStatusTotal(typeStatistics); + TypeStatistics total = new TypeStatistics(); + total.setItemValue("누계"); + total.setWrtOrgan("total"); + total.setCnt(0); + for(TypeStatistics stat: totalList) { + total.setCnt(total.getCnt()+stat.getCnt()); + } + totalList.add(total); + mav.addObject("totalList", totalList); + type1List = addTotalRow(type1, type1List); + type2List = addTotalRow(type2, type2List); + type3List = addTotalRow(type3, type3List); + type4List = addTotalRow(type4, type4List); + mav.addObject("type1", type1); + mav.addObject("type2", type2); + mav.addObject("type3", type3); + mav.addObject("type4", type4); + mav.addObject("type1List", type1List); + mav.addObject("type2List", type2List); + mav.addObject("type3List", type3List); + mav.addObject("type4List", type4List); + mav.addObject("searchParams", typeStatistics); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/translator/info").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + return mav; + } + + private List addTotalRow(List type, List typeList){ + Map totalMap = new HashMap<>(); + for(TypeStatistics t: type) { + totalMap.put(t.getAffairType(), 0); + } + for(TypeStatistics t: typeList) { + totalMap.put(t.getAffairType(), totalMap.get(t.getAffairType())+t.getCnt()); + } + Iterator keys = totalMap.keySet().iterator(); + while(keys.hasNext()) { + String affairType = keys.next(); + Integer cnt = totalMap.get(affairType); + TypeStatistics total = new TypeStatistics(); + total.setWrtOrgan("total"); + total.setAffairType(affairType); + total.setCnt(cnt); + typeList.add(total); + } + + return typeList; + } + } diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affair/mapper/AffairMapper.java b/src/main/java/com/dbnt/faisp/fpiMgt/affair/mapper/AffairMapper.java index b104f259..a77d7417 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/affair/mapper/AffairMapper.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affair/mapper/AffairMapper.java @@ -1,6 +1,8 @@ package com.dbnt.faisp.fpiMgt.affair.mapper; import com.dbnt.faisp.fpiMgt.affair.model.AffairBoard; +import com.dbnt.faisp.fpiMgt.affair.model.TypeStatistics; + import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -13,4 +15,22 @@ public interface AffairMapper { Integer selectAffairBoardCnt(AffairBoard affair); String selectHashTags(Integer affairKey); + + List selectType1List(TypeStatistics typeStatistics); + + List selectType2List(TypeStatistics typeStatistics); + + List selectType3List(TypeStatistics typeStatistics); + + List selectType4List(TypeStatistics typeStatistics); + + List selectStatusTotal(TypeStatistics typeStatistics); + + List selecType1ListCnt(TypeStatistics typeStatistics); + + List selecType2ListCnt(TypeStatistics typeStatistics); + + List selecType3ListCnt(TypeStatistics typeStatistics); + + List selecType4ListCnt(TypeStatistics typeStatistics); } diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affair/model/TypeStatistics.java b/src/main/java/com/dbnt/faisp/fpiMgt/affair/model/TypeStatistics.java new file mode 100644 index 00000000..05f470a5 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affair/model/TypeStatistics.java @@ -0,0 +1,48 @@ +package com.dbnt.faisp.fpiMgt.affair.model; + +import com.dbnt.faisp.config.BaseModel; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +import javax.persistence.*; + + +@Getter +@Setter +@NoArgsConstructor +public class TypeStatistics extends BaseModel { + @Transient + private String wrtOrgan; + @Transient + private String itemValue; + @Transient + private String affairType; + @Transient + private Integer cnt; + @Transient + private List category1; + @Transient + private List category2; + @Transient + private List category3; + @Transient + private List category4; + @Transient + private List organList; +@Override +public String toString() { + return "TypeStatistics [wrtOrgan=" + wrtOrgan + ", itemValue=" + itemValue + ", affairType=" + affairType + ", cnt=" + + cnt + ", category1=" + category1 + "]"; +} +} + + + + + + + diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affair/service/AffairService.java b/src/main/java/com/dbnt/faisp/fpiMgt/affair/service/AffairService.java index b2065648..f9a095bf 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/affair/service/AffairService.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affair/service/AffairService.java @@ -156,4 +156,40 @@ public class AffairService extends BaseService { // 견문보고 public FileInfo selectAffairFile(Integer parentKey, Integer fileSeq) { return affairFileRepository.findById(new AffairFile.AffairFileId(parentKey, fileSeq)).orElse(null); } + + public List selectType1List(TypeStatistics typeStatistics) { + return affairMapper.selectType1List(typeStatistics); + } + + public List selectType2List(TypeStatistics typeStatistics) { + return affairMapper.selectType2List(typeStatistics); + } + + public List selectType3List(TypeStatistics typeStatistics) { + return affairMapper.selectType3List(typeStatistics); + } + + public List selectType4List(TypeStatistics typeStatistics) { + return affairMapper.selectType4List(typeStatistics); + } + + public List selectStatusTotal(TypeStatistics typeStatistics) { + return affairMapper.selectStatusTotal(typeStatistics); + } + + public List selecType1ListCnt(TypeStatistics typeStatistics) { + return affairMapper.selecType1ListCnt(typeStatistics); + } + + public List selecType2ListCnt(TypeStatistics typeStatistics) { + return affairMapper.selecType2ListCnt(typeStatistics); + } + + public List selecType3ListCnt(TypeStatistics typeStatistics) { + return affairMapper.selecType3ListCnt(typeStatistics); + } + + public List selecType4ListCnt(TypeStatistics typeStatistics) { + return affairMapper.selecType4ListCnt(typeStatistics); + } } diff --git a/src/main/resources/mybatisMapper/AffairMapper.xml b/src/main/resources/mybatisMapper/AffairMapper.xml index 62e1dbac..874c1271 100644 --- a/src/main/resources/mybatisMapper/AffairMapper.xml +++ b/src/main/resources/mybatisMapper/AffairMapper.xml @@ -117,4 +117,241 @@ where a.affair_key = #{affairKey} group by a.affair_key) aa + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/igActivities/fpiMgt/affair/statistics.js b/src/main/resources/static/js/igActivities/fpiMgt/affair/statistics.js new file mode 100644 index 00000000..be5b3576 --- /dev/null +++ b/src/main/resources/static/js/igActivities/fpiMgt/affair/statistics.js @@ -0,0 +1,52 @@ + +$(document).on('click', '#downExcel', function (){ + exportExcel(); +}) + +function exportExcel(){ + // step 1. workbook 생성 + var wb = XLSX.utils.book_new(); + + // step 2. 시트 만들기 + var newWorksheet = excelHandler.getWorksheet(); + + // step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다. + XLSX.utils.book_append_sheet(wb, newWorksheet, excelHandler.getSheetName()); + + // step 4. 엑셀 파일 만들기 + var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'}); + + // step 5. 엑셀 파일 내보내기 + saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName()); +} + +var excelHandler = { + getExcelFileName : function(){ + return '견문통계'+'_'+getToday()+'.xlsx'; //파일명 + }, + getSheetName : function(){ + return 'Table Test Sheet'; //시트명 + }, + getExcelData : function(){ + return document.getElementById('tableData'); //TABLE id + }, + getWorksheet : function(){ + return XLSX.utils.table_to_sheet(this.getExcelData()); + } +} + +function s2ab(s) { + var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer + var view = new Uint8Array(buf); //create uint8array as viewer + for (var i=0; i + + + + +
+
+

견문통계

+ + +
+
+
+
+ +
+
+
+
+
+
+ + +
+
+
+
    + +
  • + + + +
  • +
    +
+ +
+
+
+
    +
  • + + + +
  • +
+
+
+
    +
  • + + + +
  • +
+
+
+
    +
  • + + + +
  • +
+
+
+
    +
  • + + + +
  • +
+
+
+
+ +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분누계분류1분류2분류3분류4
+
+
+
+
+
+
+
+
+
+
+
+ \ No newline at end of file