483 lines
15 KiB
Java
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();
|
|
}
|
|
|
|
}
|