Files
vexplor/src/com/pms/utility/WBSParsingUtil.java
2025-08-21 09:41:46 +09:00

483 lines
15 KiB
Java

package com.pms.utility;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import com.pms.service.CommonService;
import com.pms.common.utils.CommonUtils;
import com.pms.common.utils.Constants;
public class WBSParsingUtil {
@Autowired
CommonService commonService;
public static void main(String[] args) {
// TODO Auto-generated method stub
Map fileMap = new HashMap();
fileMap.put("FILE_PATH", Constants.FILE_STORAGE);
fileMap.put("SAVED_FILE_NAME", "20180525-WBS.xlsx");
try{
parsingExcelFile(null, null, fileMap);
}catch(Exception e){
e.printStackTrace();
}
//rows의 경우 버그로 인해 파싱 시 row를 실제 값을 상수로 지정해 주어야함
//버그로 인해 마지막 row를 가져오지 못하고 있음
}
/**
* 업로드된 Excel File을 통해 데이터를 Parsing 한다.
* @param request
* @param paramMap
* @return
*/
public static List parsingExcelFile(HttpServletRequest request,Map paramMap,Map fileMap)throws Exception{
String path = CommonUtils.checkNull(fileMap.get("FILE_PATH"));
String fileName = CommonUtils.checkNull(fileMap.get("SAVED_FILE_NAME"));
List resultList = new ArrayList();
FileInputStream fis = new FileInputStream(path+"\\"+fileName);
XSSFWorkbook workBook = new XSSFWorkbook(fis);
XSSFSheet sheet = workBook.getSheetAt(0);
Connection conn = null;
//테스트
// String url = "jdbc:oracle:thin:@211.48.180.237:1521:XE";
//운영
String url = "jdbc:oracle:thin:@211.48.180.15:1521:ILJITECHPDM";
String user = "plm_admin";
String pw = "admin_plm";
conn = getOracleConnection(url, user, pw);
int rows = sheet.getPhysicalNumberOfRows();
executeUpdate(conn, "DELETE PMS_WBS_TASK WHERE IS_TEMPLATE_TASK = 0");
String level1ObjId = "";
String level2ObjId = "";
for(int rowIndex= 2; rowIndex < 164 ; rowIndex++){
XSSFRow row = sheet.getRow(rowIndex);
System.out.println("rowIndex:"+rowIndex);
if(null != row){
HashMap taskMap = new HashMap();
for(int columnIndex = 0 ; columnIndex < 6 ; columnIndex++){
XSSFCell cell = row.getCell(columnIndex);
//데이버 유형별 get date
String cellValue = "";
if(null == cell){
cellValue = "";
}else{
switch(cell.getCellType()){
case XSSFCell.CELL_TYPE_FORMULA:
cellValue = cell.getCellFormula();
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_FORMULA:"+cellValue);
break;
case XSSFCell.CELL_TYPE_NUMERIC:
cellValue = cell.getNumericCellValue()+"";
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_NUMERIC:"+cellValue);
break;
case XSSFCell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue()+"";
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_STRING:"+cellValue);
break;
case XSSFCell.CELL_TYPE_BLANK:
cellValue = cell.getBooleanCellValue()+"";
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_BLANK:"+cellValue);
break;
case XSSFCell.CELL_TYPE_ERROR:
cellValue = cell.getErrorCellValue()+"";
System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_ERROR:"+cellValue);
break;
}
}
//Gate
if(0 == columnIndex){
taskMap.put("GATE", cellValue);
}
//seq
if(1 == columnIndex){
taskMap.put("SEQ", cellValue);
}
//Level
if(2 == columnIndex){
taskMap.put("LEVEL", cellValue);
}
//Task Name
if(3 == columnIndex){
taskMap.put("TASK_NAME", cellValue);
}
if(4 == columnIndex){
String deptCode = "";
//담당부서에 해당하는 영역에 담당부서 명이 작성된 경우
if(!"".equals(CommonUtils.checkNull(cellValue))){
Map sqlParamMap = new HashMap();
sqlParamMap.put("deptName", cellValue.replaceAll("'", ""));
//담당부서로 작성된 부서의 DEPT_CODE를 가져온다.
String selectQuery = getTaskDeptInfo(sqlParamMap);
Map deptInfoMap = new HashMap();
//like 검색을 기준으로 다수의 부서가 나올 수 있어 그중 1번째에 해당하는 부서의 정보를 가져온다.
deptInfoMap = executeQueryReturnMap(conn, selectQuery);
if(null != deptInfoMap){
deptCode = CommonUtils.checkNull(deptInfoMap.get("DEPT_CODE"));
}
}
taskMap.put("TASK_DEPT", deptCode);
}
if(5 == columnIndex){
if("false".equals(cellValue)){
cellValue="";
}
taskMap.put("BASE_DATE", cellValue);
break;
}
}
String gate = CommonUtils.checkNull(taskMap.get("GATE"));
if(gate.contains(".")){
gate = gate.substring(0, gate.indexOf("."));
}
String seq = CommonUtils.checkNull(taskMap.get("SEQ"));
String level = CommonUtils.checkNull(taskMap.get("LEVEL"));
if(level.contains(".")){
level = level.substring(0, level.indexOf("."));
}
String taskName = CommonUtils.checkNull(taskMap.get("TASK_NAME"));
String taskDept = CommonUtils.checkNull(taskMap.get("TASK_DEPT"));
String baseDate = CommonUtils.checkNull(taskMap.get("BASE_DATE"));
if(baseDate.contains(".")){
baseDate = baseDate.substring(0, baseDate.indexOf("."));
}
if("1".equals(level)){
Map wbsTaskSqlMap = new HashMap();
level1ObjId = CommonUtils.createObjId();
wbsTaskSqlMap.put("OBJID", level1ObjId);
wbsTaskSqlMap.put("PARENT_OBJID", "");
wbsTaskSqlMap.put("TASK_NAME", taskName);
wbsTaskSqlMap.put("TASK_TYPE", "");
wbsTaskSqlMap.put("PROJECT_STEP", gate);
wbsTaskSqlMap.put("WBS_CODE", "");
wbsTaskSqlMap.put("SEQ", seq);
wbsTaskSqlMap.put("TASK_DEPT", "");
wbsTaskSqlMap.put("BASE_SCHEDULE", "");
wbsTaskSqlMap.put("STATUS", "create");
String insertQuery = insertWBSTaskInfo(wbsTaskSqlMap);
int cnt = executeUpdate(conn, insertQuery);
System.out.println("level : "+level+", SEQ : "+seq+" Query Result Cnt : "+cnt);
}
if("2".equals(level)){
Map wbsTaskSqlMap = new HashMap();
level2ObjId = CommonUtils.createObjId();
wbsTaskSqlMap.put("OBJID", level2ObjId);
wbsTaskSqlMap.put("PARENT_OBJID", level1ObjId);
wbsTaskSqlMap.put("TASK_NAME", taskName);
wbsTaskSqlMap.put("TASK_TYPE", "");
wbsTaskSqlMap.put("PROJECT_STEP", gate);
wbsTaskSqlMap.put("WBS_CODE", "");
wbsTaskSqlMap.put("SEQ", seq);
wbsTaskSqlMap.put("TASK_DEPT", "");
wbsTaskSqlMap.put("BASE_SCHEDULE", "");
wbsTaskSqlMap.put("STATUS", "create");
String insertQuery = insertWBSTaskInfo(wbsTaskSqlMap);
int cnt = executeUpdate(conn, insertQuery);
System.out.println("level : "+level+", SEQ : "+seq+" Query Result Cnt : "+cnt);
}
if("3".equals(level)){
Map wbsTaskSqlMap = new HashMap();
wbsTaskSqlMap.put("OBJID", CommonUtils.createObjId());
wbsTaskSqlMap.put("PARENT_OBJID", level2ObjId);
wbsTaskSqlMap.put("TASK_NAME", taskName);
wbsTaskSqlMap.put("TASK_TYPE", "task");
wbsTaskSqlMap.put("PROJECT_STEP", gate);
wbsTaskSqlMap.put("WBS_CODE", "");
wbsTaskSqlMap.put("SEQ", seq);
wbsTaskSqlMap.put("TASK_DEPT", taskDept);
wbsTaskSqlMap.put("BASE_SCHEDULE", baseDate);
wbsTaskSqlMap.put("STATUS", "create");
String insertQuery = insertWBSTaskInfo(wbsTaskSqlMap);
int cnt = executeUpdate(conn, insertQuery);
System.out.println("level : "+level+", SEQ : "+seq+" Query Result Cnt : "+cnt);
}
System.out.println("partMap:"+taskMap);
}
}
return resultList;
}
public static Connection getOracleConnection(String url, String user, String pass){
Connection conn = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, pass);
conn.setAutoCommit(true);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
public static int executeUpdate(Connection conn, String query) throws Exception {
Statement stmt = null;
int resultCount = 0;
try{
System.out.println("executeUpdate(query):"+query);
stmt = conn.createStatement();
resultCount = stmt.executeUpdate(query);
}finally{
try{
if(stmt!=null)stmt.close();
}catch(Exception ee){
ee.printStackTrace();
}
}
return resultCount;
}
/**
* 데이터 조회(select only)
* @param conn
* @return
*/
public static ArrayList<HashMap<String, String>> executeQuery(Connection conn, String query){
ArrayList<HashMap<String, String>> resultList = new ArrayList();
Statement stat = null;
ResultSet rs = null;
try{
System.out.println("executeQuery(query):"+query);
stat = conn.createStatement();
rs = stat.executeQuery(query);
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
String[] columnArray = new String[columnCount];
for(int i = 0; i < columnArray.length; i++){
columnArray[i] = metaData.getColumnLabel(i+1);
}
while(rs.next()){
HashMap map = new HashMap();
for(int i = 0 ; i < columnArray.length; i++){
map.put(CommonUtils.checkNull(columnArray[i]), CommonUtils.checkNull(rs.getString(columnArray[i])));
}
System.out.println("executeQuery(map)"+map);
resultList.add(map);
}
System.out.println("executeQuery(resultList.size):"+resultList.size());
return resultList;
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(rs!=null)rs.close();
if(stat!=null)stat.close();
}catch(Exception ee){
ee.printStackTrace();
}
}
return resultList;
}
public static HashMap<String, String> executeQueryReturnMap(Connection conn, String query){
HashMap<String, String> resultMap = new HashMap();
Statement stat = null;
ResultSet rs = null;
try{
System.out.println("executeQueryReturnMap(query):"+query);
stat = conn.createStatement();
rs = stat.executeQuery(query);
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
String[] columnArray = new String[columnCount];
for(int i = 0; i < columnArray.length; i++){
columnArray[i] = metaData.getColumnLabel(i+1);
}
while(rs.next()){
HashMap map = new HashMap();
for(int i = 0 ; i < columnArray.length; i++){
resultMap.put(CommonUtils.checkNull(columnArray[i]), CommonUtils.checkNull(rs.getString(columnArray[i])));
}
}
System.out.println("executeQueryReturnMap(resultMap):"+resultMap);
return resultMap;
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(rs!=null)rs.close();
if(stat!=null)stat.close();
}catch(Exception ee){
ee.printStackTrace();
}
}
return resultMap;
}
/**
* 해당하는 Task 명에 해당하는 정보를 가져온다.
* @param paramMap
* @return
*/
public static String getWBSTaskInfo(Map paramMap){
StringBuffer sb = new StringBuffer();
String taskName = CommonUtils.checkNull(paramMap.get("taskName"));
sb.append("SELECT \n");
sb.append(" OBJID, \n");
sb.append(" TARGET_OBJID, \n");
sb.append(" PARENT_OBJID, \n");
sb.append(" TASK_NAME, \n");
sb.append(" TASK_TYPE, \n");
sb.append(" PROJ_STEP, \n");
sb.append(" WBS_CODE, \n");
sb.append(" SEQ, \n");
sb.append(" TASK_START_PLAN_DATE, \n");
sb.append(" TASK_END_PLAN_DATE, \n");
sb.append(" IS_TEMPLATE_TASK, \n");
sb.append(" TASK_END_DATE, \n");
sb.append(" TASK_DEPT, \n");
sb.append(" BASE_SCHEDULE, \n");
sb.append(" REGDATE, \n");
sb.append(" STATUS, \n");
sb.append(" WRITER \n");
sb.append("FROM PMS_WBS_TASK \n");
sb.append("WHERE IS_TEMPLATE_TASK = '0' \n");
if(!"".equals(taskName)){
sb.append("AND TASK_NAME = '"+taskName+"'\n");
}
return sb.toString();
}
/**
* 작성된 부서명에 해당하는 부서의 dept_id를 가져온다.
* @param paramMap
* @return
*/
public static String getTaskDeptInfo(Map paramMap){
StringBuffer sb = new StringBuffer();
String deptName = CommonUtils.checkNull(paramMap.get("deptName"));
sb.append("SELECT * FROM(\n");
sb.append(" SELECT\n");
sb.append(" ROWNUM RNUM,\n");
sb.append(" DEPT_CODE,\n");
sb.append(" DEPT_NAME\n");
sb.append(" FROM DEPT_INFO\n");
if(!"".equals(deptName)){
sb.append(" WHERE DEPT_NAME = '"+deptName+"' \n");
sb.append(" AND LOCATION = 'G001'");
}
sb.append(" )WHERE RNUM = '1'\n");
return sb.toString();
}
/**
* WBS Task를 입력한다.
* @param paramMap
* @return
*/
public static String insertWBSTaskInfo(Map paramMap){
StringBuffer sb = new StringBuffer();
sb.append("INSERT INTO \n");
sb.append(" PMS_WBS_TASK ( \n");
sb.append(" OBJID, \n");
sb.append(" PARENT_OBJID, \n");
sb.append(" TASK_NAME, \n");
sb.append(" TASK_TYPE, \n");
sb.append(" PROJ_STEP, \n");
sb.append(" WBS_CODE, \n");
sb.append(" SEQ, \n");
sb.append(" IS_TEMPLATE_TASK, \n");
sb.append(" TASK_DEPT, \n");
sb.append(" BASE_SCHEDULE, \n");
sb.append(" REGDATE, \n");
sb.append(" STATUS \n");
sb.append(" ) \n");
sb.append("VALUES \n");
sb.append(" ( \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("OBJID"))+"', \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("PARENT_OBJID"))+"', \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("TASK_NAME"))+"', \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("TASK_TYPE"))+"', \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("PROJECT_STEP"))+"', \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("WBS_CODE"))+"', \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("SEQ"))+"', \n");
sb.append(" '"+CommonUtils.checkNull(0)+"', \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("TASK_DEPT"))+"', \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("BASE_SCHEDULE"))+"', \n");
sb.append(" SYSDATE, \n");
sb.append(" '"+CommonUtils.checkNull(paramMap.get("STATUS"))+"' \n");
sb.append(" ) \n");
return sb.toString();
}
}