Kaynağa Gözat

인력현황 메니저 리스트 개발

databank102 4 yıl önce
ebeveyn
işleme
ac556f3520

+ 286 - 5
src/main/java/com/lemon/lifecenter/controller/StaffManagerController.java

@@ -1,11 +1,35 @@
 package com.lemon.lifecenter.controller;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.GeneralSecurityException;
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.poifs.crypt.EncryptionInfo;
+import org.apache.poi.poifs.crypt.EncryptionMode;
+import org.apache.poi.poifs.crypt.Encryptor;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,13 +42,16 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.lemon.lifecenter.common.LifeCenterConfigVO;
 import com.lemon.lifecenter.common.LifeCenterController;
+import com.lemon.lifecenter.common.LifeCenterFileDownload;
 import com.lemon.lifecenter.common.LifeCenterFunction;
 import com.lemon.lifecenter.common.LifeCenterPaging;
 import com.lemon.lifecenter.common.LifeCenterSessionController;
-import com.lemon.lifecenter.dto.ApiManagerDTO;
 import com.lemon.lifecenter.dto.CenterInfoDTO;
+import com.lemon.lifecenter.dto.FileDownloadDTO;
+import com.lemon.lifecenter.dto.LocationDTO;
 import com.lemon.lifecenter.dto.StaffManagerDTO;
 import com.lemon.lifecenter.service.CenterService;
+import com.lemon.lifecenter.service.FileDownloadService;
 import com.lemon.lifecenter.service.StaffManagerService;
 
 @Controller
@@ -41,9 +68,11 @@ public class StaffManagerController extends LifeCenterController {
     @Autowired
     private LifeCenterConfigVO config;
     
-    @Autowired
     private LifeCenterPaging paging;
     
+    @Autowired
+    private FileDownloadService fileDownloadService;
+    
     @RequestMapping("/info")
     public ModelAndView staffManagerInfo(
             @ModelAttribute("dto") StaffManagerDTO dto,
@@ -87,11 +116,9 @@ public class StaffManagerController extends LifeCenterController {
           StaffManagerDTO ndto = new StaffManagerDTO();
           if (total > 0) {
               ndto = service.selectStaffManagerInfo(dto);
-              ndto.setStatus("U");
           } else {
               ndto.setCenterCode(Integer.valueOf(sesCenterCode));
               ndto.setGubun(inputgubun);
-              ndto.setStatus("I");
           }
           
           ModelAndView mv = setMV("staff/manager/edit");
@@ -126,6 +153,9 @@ public class StaffManagerController extends LifeCenterController {
               //검색용으로 저장
               dto.setLocationCode(cdto.getLocationCode());
               dto.setCenterName(sesCenterName);
+              dto.setCooperativeCode(cdto.getCooperativeCode());
+              dto.setCooperativeName(cdto.getCooperativeName());
+              
               service.insertStaffManager(dto);
           }
           
@@ -144,6 +174,8 @@ public class StaffManagerController extends LifeCenterController {
               
               HttpServletRequest request,HttpServletResponse response) {
           
+          List<LocationDTO> locationCodeList = centerService.selectLocation();
+          
           dto.setLimit( ( Integer.valueOf( page ) - 1 ) * config.pageDataSize );
           dto.setLimitMax( config.pageDataSize );
           dto.setGubun(inputgubun);
@@ -158,10 +190,13 @@ public class StaffManagerController extends LifeCenterController {
           paging = LifeCenterPaging.getInstance();
           paging.paging(config, total, page, param);
               
-          ModelAndView mv = setMV("api/list");
+          ModelAndView mv = setMV("staff/manager/list");
           
           mv.addObject("total", total);
+          
           mv.addObject("list", list);
+          mv.addObject("locationList", locationCodeList);
+          
           mv.addObject("gubun", inputgubun);
           mv.addObject("locationCode", inputlocationCode);
           mv.addObject("centerName", inputCenterName);
@@ -173,4 +208,250 @@ public class StaffManagerController extends LifeCenterController {
           return mv;
       }
       
+      @RequestMapping( value="/excel", method=RequestMethod.POST )
+      public void staffManagerExcelList(
+              @RequestParam(value="downMemo", required=false, defaultValue="") String downMemo,
+              HttpServletRequest request,HttpServletResponse response ) {
+          String userId = LifeCenterSessionController.getSession(request, "sesId");
+
+          //excel 다운로드 로그 남기기
+          FileDownloadDTO fileDTO = new FileDownloadDTO();
+          fileDTO.setId( userId );
+          fileDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+          fileDTO.setUrl( request.getRequestURI().toString() );
+          fileDTO.setMemo( downMemo );
+          fileDTO.setEtc( "" );
+          fileDownloadService.insertExcelDownloadLog( fileDTO );
+          
+          CenterInfoDTO dto = new CenterInfoDTO();
+          int total = centerService.selectCenterCount(dto);
+          List<CenterInfoDTO> result = new ArrayList<CenterInfoDTO>();
+          if (total > 0) {
+              dto.setLimit(0);
+              dto.setLimitMax(total);
+              result = centerService.selectCenterList(dto);
+              
+              for( CenterInfoDTO temp : result ) {
+                  result.get( result.indexOf( temp ) ).setStaffPhoneNumber( LifeCenterFunction.phone( temp.getStaffPhoneNumber() ) );
+              }
+          }
+          
+          getstaffManagerListExcel(request, response, result);
+      }
+      
+      private void getstaffManagerListExcel(HttpServletRequest request, HttpServletResponse response, List<CenterInfoDTO> data ) {
+          String password = LifeCenterSessionController.getSession(request, "sesPhoneNumber");
+          password = password.toLowerCase();
+          if (!password.equals("null") && !password.equals( "" )) {
+              password = password.replace("-", "");
+              password = password.substring(3).trim();
+          } else {
+              password = "";
+          }
+          
+          Workbook workbook = new XSSFWorkbook();
+          Sheet sheet1 = workbook.createSheet("firstSheet");
+          DecimalFormat df = new DecimalFormat("#,###");
+          
+          //1.셀 스타일 및 폰트 설정
+          CellStyle styleOfBoardFillFontBlackBold16 = workbook.createCellStyle();
+          //정렬
+          styleOfBoardFillFontBlackBold16.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
+          styleOfBoardFillFontBlackBold16.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
+          //배경색
+          styleOfBoardFillFontBlackBold16.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
+          styleOfBoardFillFontBlackBold16.setFillPattern(CellStyle.SOLID_FOREGROUND);
+          //테두리 선 (우,좌,위,아래)
+          styleOfBoardFillFontBlackBold16.setBorderRight(HSSFCellStyle.BORDER_THIN);
+          styleOfBoardFillFontBlackBold16.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+          styleOfBoardFillFontBlackBold16.setBorderTop(HSSFCellStyle.BORDER_THIN);
+          styleOfBoardFillFontBlackBold16.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+          //폰트 설정
+          Font fontOfGothicBlackBold16 = workbook.createFont();
+//          fontOfGothicBlackBold16.setFontName("나눔고딕"); //글씨체
+          fontOfGothicBlackBold16.setFontHeight((short)(10*20)); //사이즈
+          fontOfGothicBlackBold16.setBoldweight(Font.BOLDWEIGHT_BOLD); //볼드 (굵게)
+          styleOfBoardFillFontBlackBold16.setFont(fontOfGothicBlackBold16);
+          
+          int i = 1;
+          Row row = sheet1.createRow(0);
+          Cell cell1 = row.createCell(0);
+          Cell cell2 = row.createCell(1);
+          Cell cell3 = row.createCell(2);
+          Cell cell4 = row.createCell(3);
+          Cell cell5 = row.createCell(4);
+          Cell cell6 = row.createCell(5);
+          Cell cell7 = row.createCell(6);
+          Cell cell8 = row.createCell(7);
+          Cell cell9 = row.createCell(8);
+          Cell cell10 = row.createCell(9);
+          Cell cell11 = row.createCell(10);
+          Cell cell12 = row.createCell(11);
+          Cell cell13 = row.createCell(12);
+          Cell cell14 = row.createCell(13);
+          
+          cell1.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell2.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell3.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell4.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell5.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell6.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell7.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell8.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell9.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell10.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell11.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell12.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell13.setCellStyle(styleOfBoardFillFontBlackBold16);
+          cell14.setCellStyle(styleOfBoardFillFontBlackBold16);
+          
+          sheet1.setColumnWidth( 0, 10000); //생활치료센터명
+          sheet1.setColumnWidth( 1, 5000); //지역
+          sheet1.setColumnWidth( 2, 5000); //소관
+          sheet1.setColumnWidth( 3, 8000); //협력병원
+          sheet1.setColumnWidth( 4, 6000); //담당자 이름
+          sheet1.setColumnWidth( 5, 4000); //담당자 아이디
+          sheet1.setColumnWidth( 6, 4000); //담당자 전화번호
+          sheet1.setColumnWidth( 7, 4000); //전화번호
+          sheet1.setColumnWidth( 8, 2500); //의료진수
+          sheet1.setColumnWidth( 9, 2500); //환자 총 수용인원
+          sheet1.setColumnWidth( 10, 2500); //입소자수
+          sheet1.setColumnWidth( 11, 2500); //퇴소자수
+          sheet1.setColumnWidth( 12, 2500); //지정병원이송
+          sheet1.setColumnWidth( 13, 2500); //기타
+          
+          cell1.setCellValue("생활치료센터명");
+          cell2.setCellValue("지역");
+          cell3.setCellValue("소관");
+          cell4.setCellValue("협력병원");
+          cell5.setCellValue("담당자 이름");
+          cell6.setCellValue("담당자 아이디");
+          cell7.setCellValue("담당자 전화번호");
+          cell8.setCellValue("전화번호");
+          cell9.setCellValue("의료진수");
+          cell10.setCellValue("환자 총 수용인원");
+          cell11.setCellValue("입소자수");
+          cell12.setCellValue("퇴소자수");
+          cell13.setCellValue("지정병원이송");
+          cell14.setCellValue("기타");
+          
+          for (CenterInfoDTO dto : data) {
+              row = sheet1.createRow(i);
+              cell1 = row.createCell(0);
+              cell2 = row.createCell(1);
+              cell3 = row.createCell(2);
+              cell4 = row.createCell(3);
+              cell5 = row.createCell(4);
+              cell6 = row.createCell(5);
+              cell7 = row.createCell(6);
+              cell8 = row.createCell(7);
+              cell9 = row.createCell(8);
+              cell10 = row.createCell(9);
+              cell11 = row.createCell(10);
+              cell12 = row.createCell(11);
+              cell13 = row.createCell(12);
+              cell14 = row.createCell(13);
+              
+              String centerName = dto.getCenterName();
+              String locationName = dto.getLocationName();
+              String jurisdictionName = dto.getJurisdictionName();
+              String cooperativeName = dto.getCooperativeName();
+              String staffName = dto.getStaffName();
+              String staffId = dto.getStaffId();
+              String staffPhoneNumber = dto.getStaffPhoneNumber();
+              String centerNumber = dto.getCenterNumber();
+              int medicalTotal = dto.getTotalStaff();
+              int patientTotal = dto.getTotalCapacity();
+              int patientTotalH = dto.getTotalPatientH();
+              int patientTotalD = dto.getTotalPatientD();
+              int patientTotalT = dto.getTotalPatientT();
+              int patientTotalE = dto.getTotalPatientE();
+              
+              cell1.setCellValue(centerName);
+              cell2.setCellValue(locationName);
+              cell3.setCellValue(jurisdictionName);
+              cell4.setCellValue(cooperativeName);
+              cell5.setCellValue(staffName);
+              cell6.setCellValue(staffId);
+              cell7.setCellValue(staffPhoneNumber);
+              cell8.setCellValue(centerNumber);
+              cell9.setCellValue(medicalTotal);
+              cell10.setCellValue(patientTotal);
+              cell11.setCellValue(patientTotalH);
+              cell12.setCellValue(patientTotalD);
+              cell13.setCellValue(patientTotalT);
+              cell14.setCellValue(patientTotalE);
+              
+              i++;
+          }
+          
+          row = sheet1.createRow(i);
+          cell1 = row.createCell(2);
+          cell2 = row.createCell(3);
+          cell3 = row.createCell(4);
+          cell4 = row.createCell(5);
+          cell5 = row.createCell(6);
+          cell6 = row.createCell(7);
+          cell7 = row.createCell(8);
+          cell8 = row.createCell(9);
+          cell9 = row.createCell(10);
+          cell10 = row.createCell(11);
+          cell11 = row.createCell(12);
+          cell12 = row.createCell(13);
+          cell13 = row.createCell(14);
+          cell14 = row.createCell(15);
+          
+          try {
+//            File file = new File(".");
+//            String rootPath = file.getAbsolutePath();
+//            System.out.println("현재 프로젝트의 경로 : "+rootPath );
+            
+            // JBOSS에서 구동시 /home1/jboss/jboss-eap-7.3/domain/test/excel-temp 경로에 저장이됨
+            String tempPath = "../excel-temp/testExcel.xlsx";
+            String downName = LifeCenterFunction.getNow() + " 현황리스트.xlsx";
+            File xlsFile = new File(tempPath);
+//            FileOutputStream fileOut = new FileOutputStream(tempPath);
+//            workbook.write(fileOut);
+//            fileOut.close();
+            
+            ByteArrayOutputStream fileOut = new ByteArrayOutputStream();
+            FileOutputStream fos = new FileOutputStream(tempPath);
+            workbook.write(fileOut);
+            
+            InputStream filein = new ByteArrayInputStream(fileOut.toByteArray());
+            OPCPackage opc = OPCPackage.open(filein);
+
+            POIFSFileSystem fileSystem = new POIFSFileSystem();
+
+            EncryptionInfo encryptionInfo = new EncryptionInfo(EncryptionMode.agile);
+            Encryptor encryptor = encryptionInfo.getEncryptor();
+            encryptor.confirmPassword(password);
+
+            opc.save(encryptor.getDataStream(fileSystem));
+            opc.flush();
+            
+            fileSystem.writeFilesystem(fos);
+            
+            fileOut.close();
+            opc.close();
+            
+            filein.close();
+            fileSystem.close();
+            
+            LifeCenterFileDownload.download(request, response, tempPath, downName);
+
+            xlsFile.delete();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (InvalidFormatException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+      } catch (GeneralSecurityException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+      }
+      }
+      
 }

+ 30 - 7
src/main/java/com/lemon/lifecenter/dto/StaffManagerDTO.java

@@ -29,7 +29,11 @@ public class StaffManagerDTO {
     private String updateById = "";
     private String locationCode = "";
     private String centerName = "";
-    private String Status = "";
+    
+    private String cooperativeCode = "";
+    private String cooperativeName = "";
+    private String locationName = "";
+    private int staffTotal = 0;
     
     private int limit = 0;
     private int limitMax = 0;
@@ -168,12 +172,6 @@ public class StaffManagerDTO {
         this.locationCode = locationCode;
     }
 
-    public String getStatus() {
-        return Status;
-    }
-    public void setStatus(String status) {
-        Status = status;
-    }
     public String getCenterName() {
         return centerName;
     }
@@ -192,6 +190,31 @@ public class StaffManagerDTO {
     public void setLimitMax(int limitMax) {
         this.limitMax = limitMax;
     }
+    public String getCooperativeCode() {
+        return cooperativeCode;
+    }
+    public void setCooperativeCode(String cooperativeCode) {
+        this.cooperativeCode = cooperativeCode;
+    }
+    public String getCooperativeName() {
+        return cooperativeName;
+    }
+    public void setCooperativeName(String cooperativeName) {
+        this.cooperativeName = cooperativeName;
+    }
+    public String getLocationName() {
+        return locationName;
+    }
+    public void setLocationName(String locationName) {
+        this.locationName = locationName;
+    }
+    public int getStaffTotal() {
+        return staffTotal;
+    }
+    public void setStaffTotal(int staffTotal) {
+        this.staffTotal = staffTotal;
+    }
+    
     
     
 }

+ 31 - 19
src/main/resources/mybatis/mapper/staff/staffManager.xml

@@ -144,30 +144,41 @@
         <![CDATA[
             SELECT
                 CENTER_CODE                                             AS centerCode,
-                GUBUN                                                   AS gubun,
-                STAFF1                                                  AS staff1, --의사
-                STAFF2                                                  AS staff2, --간호사
-                STAFF3                                                  AS staff3, --간호조무사
-                STAFF4                                                  AS staff4, --임상병리사
-                STAFF5                                                  AS staff5, --방사선사
-                STAFF6                                                  AS staff6, --행정인력
-                STAFF7                                                  AS staff7, --공보의
-                STAFF8                                                  AS staff8, --군의관
-                STAFF9                                                  AS staff9, --간호사관생도
-                STAFF10                                                 AS staff10, --민간모집의사
-                STAFF11                                                 AS staff11, --민간모집간호사
-                STAFF12                                                 AS staff12, --민간모집간호조무사
-                STAFF13                                                 AS staff13, --민간모집임상병리사
-                STAFF14                                                 AS staff14, --민간모집방사선사
-                STAFF15                                                 AS staff15, --민간모집기타인력
+                GUBUN                                                   AS gubun,       --M:의료,     G:행정
+                SUM(STAFF1 )                                            AS staff1,      --의사,       복지부
+                SUM(STAFF2 )                                            AS staff2,      --간호사,      지자체
+                SUM(STAFF3 )                                            AS staff3,      --간호조무사,   환경부
+                SUM(STAFF4 )                                            AS staff4,      --임상병리사,   소방청
+                SUM(STAFF5 )                                            AS staff5,      --방사선사,     기타
+                SUM(STAFF6 )                                            AS staff6,      --행정인력,     국방부
+                SUM(STAFF7 )                                            AS staff7,      --공보의,      경찰청
+                SUM(STAFF8 )                                            AS staff8,      --군의관,      소방청
+                SUM(STAFF9 )                                            AS staff9,      --간호사관생도,  방역
+                SUM(STAFF10)                                            AS staff10,     --민간모집의사,  청소
+                SUM(STAFF11)                                            AS staff11,     --민간모집간호사, 기타
+                SUM(STAFF12)                                            AS staff12,     --민간모집간호조무사
+                SUM(STAFF13)                                            AS staff13,     --민간모집임상병리사
+                SUM(STAFF14)                                            AS staff14,     --민간모집방사선사
+                SUM(STAFF15)                                            AS staff15,     --민간모집기타인력
                 CREATE_DATE                                             AS createDate,
                 UPDATE_DATE                                             AS updateDate,
                 CREATE_BY_ID                                            AS createById,
                 UPDATE_BY_ID                                            AS updateById,
                 LOCATION_CODE                                           AS locationCode,
-                CENTER_NAME                                             AS centerName
+                DECODE(CENTER_CODE, NULL , TO_CHAR(SUM(1)), CENTER_NAME)                                             AS centerName,
+                DECODE(CENTER_CODE, NULL , TO_CHAR(SUM(1)), (SELECT CH.COOPERATIVE_NAME 
+                                                                FROM COOPERATIVE_HOSPITAL CH
+                                                                WHERE SM.COOPERATIVE_CODE = CH.COOPERATIVE_CODE
+                                                            )
+                )                                                       AS cooperativeName,
+                (SELECT LI.LOCATION_NAME
+                      FROM LOCATION_INFO LI
+                     WHERE SM.LOCATION_CODE = LI.LOCATION_CODE)         AS locationName,
+                SUM(STAFF1 + STAFF2 + STAFF3 + STAFF4 + STAFF5 +
+                 STAFF6 + STAFF7 + STAFF8 + STAFF9 + STAFF10 +
+                 STAFF11 + STAFF12 + STAFF13 + STAFF14 + STAFF15)       AS staffTotal
             FROM
-                STAFF_MANAGER
+                STAFF_MANAGER SM
             WHERE 1 = 1
             AND GUBUN = #{gubun}
         ]]>
@@ -183,7 +194,8 @@
             ]]>
         </if>
         <![CDATA[
-            ORDER BY IDX DESC
+            GROUP BY CENTER_CODE WITH ROLLUP HAVING 1 = 1
+            ORDER BY NVL(CENTER_CODE, 99999) DESC
             LIMIT #{limit}, #{limitMax}
         ]]>
     </select>

+ 0 - 1
src/main/webapp/WEB-INF/jsp/staff/manager/edit.jsp

@@ -94,7 +94,6 @@ $( function(){
         <div class="main">
             <jsp:include page="${data._INCLUDE}/top.jsp"></jsp:include>
             <form id="editForm" action="./staffupdate" method="post">
-            <input type="hidden" name="status" value="<c:out value="${list.status}" />">
             <input type="hidden" name="gubun" value="<c:out value="${list.gubun}" />">
             <main class="content">
                 <div class="container-fluid p-0">

+ 26 - 26
src/main/webapp/WEB-INF/jsp/staff/manager/info.jsp

@@ -87,20 +87,20 @@
                                                 <c:choose>     
                                                     <c:when test="${list.gubun eq 'M'}">
                                                     <td>인원</td>
-                                                    <td><c:out value="${list.staff1}" /></td>
-                                                    <td><c:out value="${list.staff2}" /></td>
-                                                    <td><c:out value="${list.staff3}" /></td>
-                                                    <td><c:out value="${list.staff4}" /></td>
-                                                    <td><c:out value="${list.staff5}" /></td>
-                                                    <td><c:out value="${list.staff6}" /></td>
+                                                    <td><fmt:formatNumber value="${list.staff1}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff2}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff3}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff4}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff5}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff6}" pattern="#,###"/></td>
                                                     </c:when>
                                                     <c:when test="${list.gubun eq 'G'}">
                                                     <td>인원</td>
-                                                    <td><c:out value="${list.staff1}" /></td>
-                                                    <td><c:out value="${list.staff2}" /></td>
-                                                    <td><c:out value="${list.staff3}" /></td>
-                                                    <td><c:out value="${list.staff4}" /></td>
-                                                    <td><c:out value="${list.staff5}" /></td>
+                                                    <td><fmt:formatNumber value="${list.staff1}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff2}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff3}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff4}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff5}" pattern="#,###"/></td>
                                                     </c:when>
                                                 </c:choose>    
                                                 </tr>
@@ -147,15 +147,15 @@
                                                 <c:choose>     
                                                     <c:when test="${list.gubun eq 'M'}">
                                                     <td>인원</td>
-                                                    <td><c:out value="${list.staff7}" /></td>
-                                                    <td><c:out value="${list.staff8}" /></td>
-                                                    <td><c:out value="${list.staff9}" /></td>
+                                                    <td><fmt:formatNumber value="${list.staff7}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff8}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff9}" pattern="#,###"/></td>
                                                     </c:when>
                                                     <c:when test="${list.gubun eq 'G'}">
                                                     <td>인원</td>
-                                                    <td><c:out value="${list.staff6}" /></td>
-                                                    <td><c:out value="${list.staff7}" /></td>
-                                                    <td><c:out value="${list.staff8}" /></td>
+                                                    <td><fmt:formatNumber value="${list.staff6}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff7}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff8}" pattern="#,###"/></td>
                                                     </c:when>
                                                 </c:choose>
                                                 </tr>
@@ -218,18 +218,18 @@
                                                 <c:choose>     
                                                     <c:when test="${list.gubun eq 'M'}">
                                                     <td>인원</td>
-                                                     <td><c:out value="${list.staff10}" /></td>
-                                                    <td><c:out value="${list.staff11}" /></td>
-                                                    <td><c:out value="${list.staff12}" /></td>
-                                                    <td><c:out value="${list.staff13}" /></td>
-                                                    <td><c:out value="${list.staff14}" /></td>
-                                                    <td><c:out value="${list.staff15}" /></td>
+                                                    <td><fmt:formatNumber value="${list.staff10}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff11}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff12}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff13}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff14}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff15}" pattern="#,###"/></td>
                                                     </c:when>
                                                     <c:when test="${list.gubun eq 'G'}">
                                                     <td>인원</td>
-                                                     <td><c:out value="${list.staff9}" /></td>
-                                                    <td><c:out value="${list.staff10}" /></td>
-                                                    <td><c:out value="${list.staff11}" /></td>
+                                                    <td><fmt:formatNumber value="${list.staff9}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff10}" pattern="#,###"/></td>
+                                                    <td><fmt:formatNumber value="${list.staff11}" pattern="#,###"/></td>
                                                     </c:when>
                                                 </c:choose>    
                                                 </tr>

+ 321 - 0
src/main/webapp/WEB-INF/jsp/staff/manager/list.jsp

@@ -0,0 +1,321 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<jsp:include page="${data._INCLUDE}/header.jsp"></jsp:include>
+<script>
+function getExcel(){
+    if( $.trim( $( "#downMemo" ).val() ) == "" ){
+        alertBox({ txt : "사유를 입력해주세요" });
+        $( ".modal-header>.modal-title h3" ).remove();
+        return false;
+    }
+    var newForm = $( "#searchForm" ).clone();
+    
+    newForm.attr( "id", "excelForm" );
+    newForm.attr( "method", "post" );
+    newForm.attr( "action", "./excel" );
+    newForm.attr( "target", "_blank" );
+    newForm.hide();
+    
+    $( document.body ).append( newForm );
+    newForm.submit();
+    $( "button.close" ).click();
+    $( "#downMemo" ).val( "" );
+    $( "#excelForm" ).remove();
+    
+}
+</script>
+</head>
+<body>
+    <div class="modal fade" id="excelDownMemo" tabindex="-1" role="dialog" aria-hidden="true" data-memoid="">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">생활치료센터 <c:if test="${gubun eq 'M'}">의료</c:if><c:if test="${gubun eq 'G'}">행정</c:if>인력 현황 리스트 Excel 다운로드</h5>
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
+                            aria-hidden="true">&times;</span> </button>
+                </div>
+                <div class="modal-body m-3">
+                    <table class="table mobile-table">
+                        <colgroup>
+                            <col style="width: 20%">
+                            <col style="width: 80%">
+                        </colgroup>
+                        <tr>
+                            <th><span class="fix">*</span>다운로드 사유</th>
+                            <td>
+                                <div class="form-row">
+                                    <textarea id="downMemo" name="downMemo" class="form-control" cols="" rows="6" placeholder="" maxlength="200"></textarea>
+                                </div>
+                            </td>
+                        </tr>
+                    </table>
+                </div>
+                <div class="addMemoTools modal-footer">
+                    <button type="button" class="btn btn-outline-primary" data-dismiss="modal">취소</button>
+                    <button type="button" class="btn btn-primary" onclick="getExcel();">제출 후 다운로드</button>
+                </div>
+            </div>
+        </div>
+    </div>
+    
+    <div class="wrapper">
+        <jsp:include page="${data._INCLUDE}/sidebar.jsp"></jsp:include>
+
+        <div class="main">
+            <jsp:include page="${data._INCLUDE}/top.jsp"></jsp:include>
+
+            <main class="content">
+                <div class="container-fluid p-0">
+                    <div class="row">
+                        <div class="col-12 col-lg-6">
+                            <h1 class="h3 mb-3">생활치료센터  <c:if test="${gubun eq 'M'}">의료</c:if><c:if test="${gubun eq 'G'}">행정</c:if>인력 현황</h1>
+                        </div>
+                        <div class="col-12 col-lg-6  text-right">
+                            <nav aria-label="breadcrumb">
+                                <ol class="breadcrumb">
+                                    <li class="breadcrumb-item"><a href="javscript:;">Home</a></li>
+                                    <li class="breadcrumb-item"><c:if test="${gubun eq 'M'}">의료</c:if><c:if test="${gubun eq 'G'}">행정</c:if>인력 현황</li>
+                                </ol>
+                            </nav>
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-12">
+                            <div class="card">
+                                <form action="?" method="get">
+                                    <input type="hidden" name="gubun" value="<c:out value="${gubun}" />">
+                                    <div class="card-body">
+                                        <table class="table mobile-table">
+                                            <colgroup>
+                                                <col style="width:10%">
+                                                <col style="width:20%">
+                                                <col style="width:10%">
+                                                <col style="width:50%">
+                                                <col style="width:10%">
+                                            </colgroup>
+                                            <tr>
+                                                <th>지역</th>
+                                                <td>
+                                                    <select class="custom-select form-control" name="locationCode">
+                                                        <option value="">전체</option>
+                                                        <c:forEach var="i" items="${locationList}">
+                                                            <option value="${i.locationCode}" <c:if test="${i.locationCode eq locationCode}"> selected="selected"</c:if>><c:out value="${i.locationName}"/></option>
+                                                            
+                                                        </c:forEach>
+                                                    </select>
+                                                </td>
+                                                <th>생활치료센터명</th>
+                                                <td>
+                                                    <input type="text" class="form-control" name="centerName" value="${centerName}" placeholder="검색어를 입력하세요.">
+                                                </td>
+                                                <td>
+                                                    <button class="btn btn-primary">검색</button>
+                                                </td>
+                                            </tr>
+                                        </table>
+                                    </div>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-12">
+                            <div class="card">
+                                <div class="card-body">
+                                    <div class="row mb-3">
+                                        <div class="col-6">전체 :
+                                            <fmt:formatNumber value="${total}" pattern="#,###" />
+                                        </div>
+                                        <div class="col-6 text-right">
+                                            <button class="btn btn-success" data-toggle="modal" data-target="#excelDownMemo">Excel 다운로드</button>
+                                        </div>
+                                    </div>
+                                    <div class="table-responsive">
+                                        <table class="table table-striped text-center">
+                                            <colgroup>
+                                            <c:choose>     
+                                                <c:when test="${gubun eq 'M'}">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 8%; ">
+                                                <col style=" width: 5%; ">
+                                                <col style=" width: 8%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                </c:when>
+                                            </c:choose>
+                                            <c:choose>     
+                                                <c:when test="${gubun eq 'G'}">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 8%; ">
+                                                <col style=" width: 5%; ">
+                                                <col style=" width: 8%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                <col style=" width: 4%; ">
+                                                </c:when>
+                                            </c:choose>
+                                            </colgroup>
+                                            <thead>
+                                                <tr>
+                                                <c:choose>     
+                                                    <c:when test="${gubun eq 'M'}">
+                                                    <th rowspan="2">번호</th>
+                                                    <th rowspan="2">생활치료센터명</th>
+                                                    <th rowspan="2">지역</th>
+                                                    <th rowspan="2">협력병원명</th>
+                                                    <th rowspan="2">인력총계<br>(단위:명)</th>
+                                                    <th colspan="6">협력병원 인력 현황 (단위 :명)</th>
+                                                    <th colspan="3">공공 인력 현황(단위 :명)</th>
+                                                    <th colspan="6">민간 인력 현황(단위 :명)</th>
+                                                    </c:when>
+                                                </c:choose>
+                                                <c:choose>     
+                                                    <c:when test="${gubun eq 'G'}">
+                                                    <th rowspan="2">번호</th>
+                                                    <th rowspan="2">생활치료센터명</th>
+                                                    <th rowspan="2">지역</th>
+                                                    <th rowspan="2">협력병원명</th>
+                                                    <th rowspan="2">인력총계<br>(단위:명)</th>
+                                                    <th colspan="5">행정 인력 현황 (단위 :명)</th>
+                                                    <th colspan="3">서비스 인력 현황(단위 :명)</th>
+                                                    <th colspan="3">사설업체 인력 현황(단위 :명)</th>
+                                                    </c:when>
+                                                </c:choose>
+                                                </tr>
+                                                <tr>
+                                                <c:choose>     
+                                                    <c:when test="${gubun eq 'M'}">
+                                                    <th>의사</th>
+                                                    <th>간호사</th>
+                                                    <th>간호조무사</th>
+                                                    <th>임상병리사</th>
+                                                    <th>방사선사</th>
+                                                    <th>행정인력</th>
+                                                    <th>공보의</th>
+                                                    <th>군의관</th>
+                                                    <th>간호사관생도</th>
+                                                    <th>민간모집의사</th>
+                                                    <th>민간모집간호사</th>
+                                                    <th>민간모집간호조무사</th>
+                                                    <th>민간모집방사선사</th>
+                                                    <th>민간모집임상병리사</th>
+                                                    <th>민간모집기타인력</th>
+                                                    </c:when>
+                                                </c:choose>
+                                                <c:choose>     
+                                                    <c:when test="${gubun eq 'G'}">
+                                                    <th>복지부</th>
+                                                    <th>지자체</th>
+                                                    <th>환경부</th>
+                                                    <th>소방청</th>
+                                                    <th>기타</th>
+                                                    <th>국방부</th>
+                                                    <th>경찰청</th>
+                                                    <th>기타</th>
+                                                    <th>방역</th>
+                                                    <th>청소</th>
+                                                    <th>기타</th>
+                                                    </c:when>
+                                                </c:choose>
+                                                </tr>
+                                            </thead>
+                                            
+                                            <tbody>
+                                                <c:choose>
+                                                    <c:when test="${total > 0}">
+                                                        <c:forEach var="l" items="${list}" varStatus="lStatus">
+                                                        
+                                                            <c:set var="pageNum" value="${ lStatus.index + ( (page - 1) * pageSize ) }" />
+                                                            <tr>
+                                                                <td><c:choose><c:when test="${pageNum == 0}">총계</c:when><c:otherwise>${pageNum}</c:otherwise></c:choose></td>
+                                                                <td class="text-left">
+                                                                    <c:out value="${l.centerName}" />
+                                                                </td>
+                                                                <td><c:out value="${l.locationName}" /></td>
+                                                                <td><c:out value="${l.cooperativeName}" /></td>
+                                                                <td><c:out value="${l.staffTotal}" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff1}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff2}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff3}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff4}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff5}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff6}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff7}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff8}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff9}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff10}" pattern="#,###" /></td>
+                                                                <td><fmt:formatNumber value="${l.staff11}" pattern="#,###" /></td>  
+                                                                <c:if test="${gubun eq 'M'}"> 
+                                                                    <td><fmt:formatNumber value="${l.staff12}" pattern="#,###" /></td>
+                                                                    <td><fmt:formatNumber value="${l.staff13}" pattern="#,###" /></td>
+                                                                    <td><fmt:formatNumber value="${l.staff14}" pattern="#,###" /></td>
+                                                                    <td><fmt:formatNumber value="${l.staff15}" pattern="#,###" /></td>
+                                                                </c:if>  
+                                                            </tr>
+                                                        </c:forEach>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <tr>
+                                                            <td colspan="20">등록된 게시글이 없습니다.</td>
+                                                        </tr>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </tbody>
+                                        </table>
+                                    </div>
+                                    <div class="row mt-5">
+                                        <div class="col-12 col-lg-6 mb-2">
+                                        </div>
+                                        <div class="col-12 col-lg-6 mb-2">
+                                            <jsp:include page="${data._INCLUDE}/paging.jsp" flush="true">
+                                                <jsp:param name="firstPageNo" value="${paging.firstPageNo}" />
+                                                <jsp:param name="prevPageNo"  value="${paging.prevPageNo}" />
+                                                <jsp:param name="startPageNo" value="${paging.startPageNo}" />
+                                                <jsp:param name="pageNo"      value="${paging.pageNo}" />
+                                                <jsp:param name="endPageNo"   value="${paging.endPageNo}" />
+                                                <jsp:param name="nextPageNo"  value="${paging.nextPageNo}" />
+                                                <jsp:param name="finalPageNo" value="${paging.finalPageNo}" />
+                                                <jsp:param name="preFix"      value="${paging.preFix}" />
+                                                <jsp:param name="url"         value="${paging.url}" />
+                                                <jsp:param name="total"       value="${paging.totalCount}" />
+                                            </jsp:include>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </main>
+
+            <jsp:include page="${data._INCLUDE}/footer.jsp"></jsp:include>
+        </div>
+    </div>
+</body>
+</html>