package com.pms.service; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.sql.Clob; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.session.SqlSession; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.FormulaEvaluator; 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.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 org.springframework.stereotype.Service; import com.pms.common.JsonUtil; import com.pms.common.Message; import com.pms.common.SqlMapConfig; import com.pms.common.bean.PersonBean; import com.pms.common.service.BaseService; import com.pms.common.utils.CommonUtils; import com.pms.common.utils.Constants; import com.pms.common.utils.MailUtil; @Service public class PartMngService extends BaseService { CommonService commonService = null; @Autowired ProjectService projectService; @Autowired ProductionMngService productionMngService; @Autowired public void setCommonService(CommonService commonService){ this.commonService = commonService; } public Map setPartMngCommonCD(Map paramMap){ paramMap.put("PRODUCT_GROUP_CODE", Constants.PRODUCT_GROUP_CODE); paramMap.put("MATERIAL_CODE", Constants.MATERIAL_CODE); paramMap.put("SPEC_NO_CODE", Constants.SPEC_NO_CODE); paramMap.put("DESIGN_APPLY_POINT_CODE", Constants.DESIGN_APPLY_POINT_CODE); return paramMap; } /** * PART 조회및 배포 * @param paramMap * @return */ public List partMngTempList(HttpServletRequest request,Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); setPartMngCommonCD(paramMap); String countPerPage = CommonUtils.checkNull(request.getParameter("countPerPage"), Constants.ADMIN_COUNT_PER_PAGE+""); paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage)); Map pageMap = (HashMap)sqlSession.selectOne("partMng.partMngTempListCnt", paramMap); pageMap = (HashMap)CommonUtils.setPagingInfo(request, pageMap); paramMap.put("PAGE_END", CommonUtils.checkNull(pageMap.get("PAGE_END"))); paramMap.put("PAGE_START", CommonUtils.checkNull(pageMap.get("PAGE_START"))); resultList = (ArrayList)sqlSession.selectList("partMng.partMngTempList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } /** * PART 조회및 배포 * @param paramMap * @return */ public List getPartMngList(HttpServletRequest request,Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); String countPerPage = CommonUtils.checkNull(request.getParameter("countPerPage"), Constants.ADMIN_COUNT_PER_PAGE+""); paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage)); Map pageMap = (HashMap)sqlSession.selectOne("partMng.partMngListCnt", paramMap); String isPagingYN = CommonUtils.checkNull(paramMap.get("isPagingYN"), ""); if(!"N".equals(isPagingYN)) { pageMap = (HashMap)CommonUtils.setPagingInfo(request, pageMap); paramMap.put("PAGE_END", CommonUtils.checkNull(pageMap.get("PAGE_END"))); paramMap.put("PAGE_START", CommonUtils.checkNull(pageMap.get("PAGE_START"))); } resultList = (ArrayList)sqlSession.selectList("partMng.partMngList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } /** * 부서정보 조회 * @param paramMap * @return */ public List searchDeptList(Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = sqlSession.selectList("projectConcept.searchDeptList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 수주활동 제품별 협조부서 등록 * @param paramMap * @param checkedDeptList */ public int saveProjectConceptProductDeptInfo(Map paramMap, List checkedDeptList){ int resultCnt = 0; SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); if(checkedDeptList != null){ for(String deptCode : checkedDeptList){ String objId = CommonUtils.createObjId(); //set parameter paramMap.put("deptCode", deptCode); paramMap.put("objId", objId); resultCnt += (int)sqlSession.update("projectConcept.mergeProjectConceptProductDeptInfo", paramMap); } } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultCnt; } /** * 수주활동 제품별 협조부서 목록 조회 * @param paramMap * @return */ public List getProjectConceptProductDeptList(Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = sqlSession.selectList("projectConcept.getProjectConceptProductDeptList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 주주현황 담당자 분기별 실적 * @param paramMap * @return */ public ArrayList makeGoalList(Map paramMap){ ArrayList resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = (ArrayList)sqlSession.selectList("projectConcept.getmakeGoalList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 수주활동 제품 정보 저장 * @param paramMap * @return */ public Map saveProjectConceptProductInfo(HttpServletRequest request, Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); HttpSession session = request.getSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); Map info = person.getLoginInfo(); System.out.println("paramMap : "+paramMap); //접속자 String userId = CommonUtils.checkNull(info.get("userId")); paramMap.put("userId", userId); int cnt = sqlSession.update("projectConcept.mergeProjectConceptProductInfo", paramMap); //수주활동 제품별 협조부서별 자료회신요청일 수정. Iterator it = paramMap.keySet().iterator(); while(it.hasNext()){ String key = (String)it.next(); if(key.startsWith("replyReqDate")){ if(key.contains("_")){ String deptCode = key.substring(key.indexOf("_")+1); String replyReqDate = CommonUtils.checkNull(paramMap.get(key)); Map deptInfoParamMap = new HashMap(); deptInfoParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("objId"))); deptInfoParamMap.put("deptCode", deptCode); deptInfoParamMap.put("replyReqDate", replyReqDate); System.out.println("deptInfoParamMap : "+deptInfoParamMap); sqlSession.update("projectConcept.updateProjectConceptProductDeptReplyReqDate", deptInfoParamMap); } } } if(cnt > 0){ resultMap.put("result", true); resultMap.put("msg", Message.SAVE_SUCCESS); } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); resultMap.put("result", false); resultMap.put("msg", Message.SAVE_FAILED); e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * 수주활동별 입찰품목 목록 조회(수주활동 상세팝업 內) * @param paramMap * @return */ public List getProjectConceptProductList_forProjectConcept(Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = sqlSession.selectList("projectConcept.getProjectConceptProductList_forProjectConcept", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 수주활동 정보 저장 * @param request * @param paramMap * @return */ public Map saveProjectConceptInfo(HttpServletRequest request, Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN); paramMap.put("userId", person.getUserId()); System.out.println("paramMap : "+paramMap); int cnt = sqlSession.update("projectConcept.mergeProjectConceptInfo", paramMap); //기존에 등록된 milestone 정보 삭제 sqlSession.delete("projectConcept.deleteProjectConceptMilestoneInfo", paramMap); //수주활동 Milestone별 날짜 저장 Iterator it = paramMap.keySet().iterator(); while(it.hasNext()){ String key = (String)it.next(); if(key.startsWith("milestoneDate")){ if(key.contains("_")){ String milestoneObjId = key.substring(key.indexOf("_")+1); String milestoneDate = CommonUtils.checkNull(paramMap.get(key)); Map milestoneParamMap = new HashMap(); milestoneParamMap.put("objId", CommonUtils.createObjId()); milestoneParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("objId"))); milestoneParamMap.put("oemObjId", CommonUtils.checkNull(paramMap.get("oemObjId"))); milestoneParamMap.put("milestoneObjId", milestoneObjId); milestoneParamMap.put("milestoneDate", milestoneDate); System.out.println("milestoneParamMap : "+milestoneParamMap); //milestone 정보 저장 sqlSession.update("projectConcept.mergeProjectConceptMilestoneInfo", milestoneParamMap); } } } if(cnt > 0){ resultMap.put("result", true); resultMap.put("msg", Message.SAVE_SUCCESS); } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); resultMap.put("result", false); resultMap.put("msg", Message.SAVE_FAILED); e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** 영업활동등록 * @param request * @param paramMap * @return */ public Map savePartMngTempInfo(HttpServletRequest request, Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; Map resultList = null; Map sqlMap = new HashMap(); Map specMap = new HashMap(); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); //PART TEMP 수정 int cnt = sqlSession.update("partMng.updatePartTempInfo", paramMap); if(cnt > 0){ resultMap.put("result", true); resultMap.put("msg", Message.SAVE_SUCCESS); } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); resultMap.put("result", false); resultMap.put("msg", Message.SAVE_FAILED); e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** PART복제 * @param request * @param paramMap * @return */ public Map savePartCopyInfo(HttpServletRequest request, Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; Map resultList = null; Map sqlMap = new HashMap(); Map specMap = new HashMap(); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); //PART COPY int cnt = sqlSession.insert("partMng.insertPartCopy", paramMap); //도면 복제 cnt = sqlSession.insert("partMng.insertPartCopyFile", paramMap); if(cnt > 0){ resultMap.put("result", true); resultMap.put("msg", Message.SAVE_SUCCESS); } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); resultMap.put("result", false); resultMap.put("msg", Message.SAVE_FAILED); e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } public List overlapPartMng(HttpServletRequest request,Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); //part 중복확인 resultList = sqlSession.selectList("partMng.overlapPartMng", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 설계변경 PART조회 저장 * @param request * @param paramMap * @return */ public Map savePartMngChangeList(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN); paramMap.put("WRITER", person.getUserId()); System.out.println("paramMap : "+paramMap); String OBJID = CommonUtils.checkNull(request.getParameter("OBJID"), CommonUtils.createObjId()); String OBJID_PRODUCT = CommonUtils.checkNull(request.getParameter("OBJID_PRODUCT")); paramMap.put("OBJID", OBJID); List> dataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("dataListJson"))); //if(!"".equals(authGroupObjid) && 0 < tagetMemberList.length){ html table version if(CommonUtils.isNotEmpty(dataList)){ for (Map data : dataList) { //System.out.println(data); //String targetMemberId = CommonUtils.checkNull(data.get("USER_ID")); //data.putAll(paramMap); //data.put("STATUS", "REGIST"); //data.put("OBJID_PARENT", OBJID); //data.put("PRODUCT", OBJID_PRODUCT); //설변파트 신규 등록 //QTY 수량 update(QTY_TEMP) //X bom 상태 변경(설계변경중) data.put("ACTION_TYPE", "changeDesign"); this.savePartMng(request, data); //for (Map projectMap : projectList) { //System.out.println(projectMap); /* String PROJECT_NO = (String)projectMap.get("PROJECT_NO"); data.put("PROJECT_NO", PROJECT_NO); data.put("OBJID", CommonUtils.checkNull(data.get("OBJID_"+PROJECT_NO), CommonUtils.createObjId())); data.put("VALUE", data.get("VALUE_"+PROJECT_NO)); System.out.println(data); */ //} } } resultMap.put("result", true); resultMap.put("msg", Message.SAVE_SUCCESS); sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); resultMap.put("result", false); resultMap.put("msg", Message.SAVE_FAILED); e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } public Map savePartMng(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); HttpSession session = request.getSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); String personId = CommonUtils.checkNull(person.getUserId()); paramMap.put("WRITER",personId); System.out.println("paramMap :: " + paramMap); String ACTION_TYPE = CommonUtils.checkNull(paramMap.get("ACTION_TYPE")); String REVISION = CommonUtils.checkNull(paramMap.get("REVISION")); if("changeDesign".equals(ACTION_TYPE)){ //설계변경 외건은 전부 라스트 0으로 변경 //sqlSession.update("partMng.updateislast", paramMap); if(REVISION.equals("RE")){ paramMap.put("REVISION", "A"); }else{ paramMap.put("REVISION", CommonUtils.getNextRevision(REVISION)); } paramMap.put("STATUS", "changing"); //create/changing/release paramMap.put("EO_DATE", ""); paramMap.put("EO_NO", ""); //part 저장 int cnt = sqlSession.update("partMng.mergePartMngchangeDesign", paramMap); //sqlSession.update("partMng.mergePartMngHistory", paramMap); //231211 히스토리는 파트확정에서 if(cnt > 0){ //QTY 수량 update(QTY_TEMP) paramMap.put("QTY_TEMP", paramMap.get("Q_QTY")); paramMap.put("STATUS", "beforeEdit"); sqlSession.update("partMng.structureQtySave", paramMap); //사용되는 BOM 설계변경중으로 //sqlSession.update("partMng.changeStatusBomReportByPartNo", paramMap); //231211 히스토리는 파트확정에서 } resultMap.put("result", true); resultMap.put("msg", Message.SAVE_SUCCESS); }else{ // Map tempMap = sqlSession.selectOne("partMng.getPART_NOCnt", paramMap); // if(tempMap != null && !tempMap.isEmpty()){ // int cnt = Integer.parseInt(CommonUtils.checkNull(tempMap.get("cnt"), "0")); // System.out.println("cnt : "+cnt); // if(cnt == 0 || "Edit".equals(ACTION_TYPE)){ //part 저장 sqlSession.update("partMng.mergePartMng", paramMap); //sqlSession.update("partMng.mergePartMngHistory", paramMap); resultMap.put("result", true); resultMap.put("msg", Message.SAVE_SUCCESS); // }else{ // resultMap.put("result", "DUPLICATE"); // resultMap.put("msg", Message.DUPLICATE_PART_NO); // // } // } } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); resultMap.put("result", false); resultMap.put("msg", Message.SAVE_FAILED); e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * PART 상세 조회 * @param paramMap * @return */ public Map getPartMngInfo(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); setPartMngCommonCD(paramMap); resultMap = sqlSession.selectOne("partMng.partMngInfo", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * PART Detail 수정 저장 * @param request * @param paramMap * @return */ public int updatePartDetail(HttpServletRequest request, Map paramMap){ int result = 0; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); try{ // 품목 정보 업데이트 (품명, 재료, 열처리경도, 열처리방법, 표면처리, 공급업체, 범주이름, 비고) result = sqlSession.update("partMng.updatePartDetail", paramMap); if(result > 0){ sqlSession.commit(); }else{ sqlSession.rollback(); } }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); }finally{ sqlSession.close(); } return result; } /** * 파트 배포 * @param request * @param paramMap * @return */ public Map partMngDeploy(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); try{ //String partMngList[] = request.getParameterValues("OBJID"); //if(null != partMngList && 0 < partMngList.length){ List> dataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("dataListJson"))); //if(!"".equals(authGroupObjid) && 0 < tagetMemberList.length){ html table version if(CommonUtils.isNotEmpty(dataList)){ HttpSession session = request.getSession(); sqlSession = SqlMapConfig.getInstance().getSqlSession(false); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); String userId = person.getUserId(); //접속자 //for(int i=0;i data : dataList) { System.out.println("data:"+data); //String objId = CommonUtils.checkNull(partMngList[i]); //String objId = CommonUtils.checkNull(data.get("OBJID")); HashMap sqlParamMap = new HashMap(); //sqlParamMap.put("OBJID", objId); sqlParamMap.putAll(data); //동일 Part No를 가진 Part의 is_last를 0으로 변경한다. sqlSession.update("partMng.partMngIsLastInit",sqlParamMap); //확정 후 이력 저장 sqlParamMap.put("WRITER", userId); //확정대상 Part의 is_last를 1로 변경한다. sqlSession.update("partMng.partMngDeploy",sqlParamMap); sqlParamMap.put("PARENT_PART_OBJID", ""); sqlParamMap.put("PARENT_PART_NO", ""); sqlParamMap.put("PARENT_QTY_CHILD_OBJID", ""); sqlParamMap.put("BOM_REPORT_OBJID", CommonUtils.checkNull(data.get("BOM_REPORT_OBJID"))); sqlParamMap.put("CHANGE_OPTION", CommonUtils.checkNull(data.get("CHANGE_OPTION"))); sqlParamMap.put("CHANGE_TYPE", CommonUtils.checkNull(data.get("CHANGE_TYPE"))); //sqlParamMap.put("HISTORY_STATUS", "deploy"); sqlParamMap.put("HIS_STATUS", "DEPLOY"); //System.out.println(sqlParamMap); String REVISION = CommonUtils.checkNull(data.get("REVISION")); if("RE".equals(REVISION)) { //파트 신규등록 배포건 sqlParamMap.put("CHANGE_TYPE", "0001602"); //신규파트생성 //sqlParamMap.put("CHANGE_OPTION", "0001626"); //파트추가 } sqlSession.update("partMng.insertPartMngHistory",sqlParamMap); //배포되기전 히스토리 먼저 저장(올바른 상태값 위해) // sqlSession.update("partMng.mergePartMngHistory", sqlParamMap); //231211 히스토리는 파트확정에서 //QTY 상태 변경 sqlParamMap.put("STATUS", "editing"); sqlSession.update("partMng.structureQtySave", sqlParamMap); //사용되는 BOM 설계변경중으로 sqlSession.update("partMng.changeStatusBomReportByPartObjid", sqlParamMap); //구매품표준 사용된 part가 1개일 경우만 업데이트 List> resultList = new ArrayList(); for(int i=1;i<6;i++){ //sqlParamMap.clear(); // 이전 루프의 파라미터를 지웁니다. String codeKey = "CODE" + i; String codeValue = CommonUtils.checkNull(data.get(codeKey)); System.out.println("codeValue:"+codeValue); if (codeValue != null && !codeValue.isEmpty()) { sqlParamMap.put("CODE_ID", codeValue); resultList = sqlSession.selectList("procurStandMgmt.sameStdCodeList", sqlParamMap); if(resultList.size() == 1){ //Map uniqueResult = resultList.get(0); //CODE_NAME을 설정하는 부분 String codeName; switch (i) { case 1: codeName = CommonUtils.checkNull(data.get("MAJOR_CATEGORY")); break; case 2: codeName = CommonUtils.checkNull(data.get("SUB_CATEGORY")); break; case 3: codeName = CommonUtils.checkNull(data.get("MAKER")); break; case 4: codeName = CommonUtils.checkNull(data.get("PART_NAME")); break; case 5: codeName = CommonUtils.checkNull(data.get("SPEC")); break; default: codeName = ""; } sqlParamMap.put("CODE_NAME", codeName); System.out.println("codeValue:"+codeValue+"codeName:"+codeName); sqlSession.update("procurStandMgmt.updateCodeName", sqlParamMap); } } } } sqlSession.commit(); resultMap.put("result", true); resultMap.put("msg", Message.SAVE_SUCCESS); } }catch(Exception e){ resultMap.put("result", false); resultMap.put("msg", Message.SAVE_FAILED); sqlSession.rollback(); throw e; }finally{ sqlSession.close(); } return resultMap; } /** * 파트 삭제 * @param request * @param paramMap * @return */ public Map partMngDelete(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); try{ //String partMngList[] = request.getParameterValues("OBJID"); //if(null != partMngList && 0 < partMngList.length){ List> dataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("dataListJson"))); //if(!"".equals(authGroupObjid) && 0 < tagetMemberList.length){ html table version if(CommonUtils.isNotEmpty(dataList)){ HttpSession session = request.getSession(); sqlSession = SqlMapConfig.getInstance().getSqlSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); String userId = person.getUserId(); //for(int i=0;i data : dataList) { System.out.println("data:"+data); //String objId = CommonUtils.checkNull(partMngList[i]); HashMap sqlParamMap = new HashMap(); //sqlParamMap.put("OBJID", objId); sqlParamMap.put("WRITER", userId); sqlParamMap.put("HISTORY_STATUS", "delete"); //sqlSession.update("partMng.insertPartMngHistory",sqlParamMap); //sqlSession.delete("partMng.partMngDelete",sqlParamMap); sqlSession.delete("partMng.partMngDelete2",data); // /설계변경중인 파트 삭제시 구조정보 상태 원복 if(CommonUtils.isNotBlank(data.get("CHILD_OBJID"))){ sqlSession.update("partMng.rollbackBomPartQtyStatus",data); } } /*}*/ sqlSession.commit(); resultMap.put("result", true); resultMap.put("msg", Message.DELETE_SUCCESS); }else { resultMap.put("result", false); resultMap.put("msg", Message.DELETE_FAILED); } /*}*/ }catch(Exception e){ resultMap.put("result", false); resultMap.put("msg", Message.DELETE_FAILED); sqlSession.rollback(); throw e; }finally{ sqlSession.close(); } return resultMap; } /** * 선택된 구조등록을 삭제한다. * @param request * @param paramMap * @return */ public Map deleteStructure(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); try{ String checkArr[] = (CommonUtils.checkNull(paramMap.get("checkArr"))).split(","); if(0 == checkArr.length){ checkArr[0] = CommonUtils.checkNull(paramMap.get("checkArr")); } if(null != checkArr && 0 < checkArr.length){ Map sqlParamMap = new HashMap(); sqlParamMap.put("checkArr",checkArr); //연결된 PART삭제 sqlSession.delete("partMng.deleteBomQtyPart",sqlParamMap); sqlSession.delete("partMng.deleteBomReport",sqlParamMap); sqlSession.delete("partMng.deleteBomQty",sqlParamMap); sqlSession.commit(); resultMap.put("result", true); resultMap.put("msg", Message.DELETE_SUCCESS); } }catch(Exception e){ resultMap.put("result", false); resultMap.put("msg", Message.DELETE_FAILED); sqlSession.rollback(); throw e; }finally{ sqlSession.close(); } return resultMap; } /** * 선택된 구조등록을 배포한다. * @param request * @param paramMap * @return */ public Map deployStructure(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); Map bomMap = new HashMap(); List> resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); try{ //String checkArr = CommonUtils.checkNull(paramMap.get("OBJID")); //240326 list건 적용(동시봄) String checkArr[] = (CommonUtils.checkNull(paramMap.get("OBJID"))).split(","); /*String checkArr[] = (CommonUtils.checkNull(paramMap.get("checkArr"))).split(","); if(0 == checkArr.length){ checkArr[0] = CommonUtils.checkNull(paramMap.get("checkArr")); }*/ for (String objid : checkArr) { Map sqlParamMap = new HashMap(); sqlParamMap.put("checkArr", objid); bomMap = sqlSession.selectOne("partMng.getBOMStandardStructureList", sqlParamMap); System.out.println("bomMap::"+bomMap); String REVISION = CommonUtils.checkNull(bomMap.get("revision")); System.out.println("REVISION::"+REVISION); if(REVISION.equals("")){ sqlParamMap.put("REVISION", "RE"); }else if(REVISION.equals("RE")){ sqlParamMap.put("REVISION", "1"); }else{ sqlParamMap.put("REVISION", Integer.toString(Integer.parseInt(REVISION)+1)); } //접속자 HttpSession session = request.getSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); String userId = person.getUserId(); sqlParamMap.put("WRITER", userId); //구조 배포 sqlSession.update("partMng.deployBomReport",sqlParamMap); //PART 배포 sqlSession.update("partMng.deployPartInfo",sqlParamMap); //설계변경 외건은 전부 라스트 0으로 변경 sqlSession.update("partMng.updateislastByBomPartQty", paramMap); //여기를 할때 파트확정이 되어 있어야 한다.(241220) sqlSession.update("partMng.deployBomPartQty",sqlParamMap); //231208추가 //sqlSession.update("partMng.deployBomPartQtyDelete",sqlParamMap); //231208추가(설변 삭제건 물리삭제) //EO 정보 업데이트 sqlSession.update("partMng.deployPartEoDate",sqlParamMap); sqlSession.update("partMng.deployPartHisStatus",sqlParamMap); //240520 추가 String contract_objid = CommonUtils.checkNull(bomMap.get("contract_objid")); sqlParamMap.put("CONTRACT_OBJID", contract_objid); //contract_objid 정보 업데이트 231227 기존 로직 주석처리 //sqlParamMap.put("CHANGE_TYPE", "0001602"); //신규파트생성 //sqlSession.update("partMng.deployPartContractObjid",sqlParamMap); } sqlSession.commit(); resultMap.put("result", true); resultMap.put("msg", Message.DISTRIBUTE_SUCCESS); }catch(Exception e){ resultMap.put("result", false); resultMap.put("msg", Message.DISTRIBUTE_FAILED); sqlSession.rollback(); throw e; }finally{ sqlSession.close(); } return resultMap; } /** * BOM 배포사유 저장. * @param paramMap * @return */ public boolean saveChangeDesignInfo(Map paramMap){ boolean result = false; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ int cnt = sqlSession.update("partMng.saveChangeDesignInfo", paramMap); if(cnt > 0) result = true; }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return result; } /** * 구조 정보 조회 * @param paramMap * @return */ public Map getStructureInfo(Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ resultMap = sqlSession.selectOne("partMng.getStructureInfo", paramMap); if(resultMap == null) resultMap = new HashMap(); // 대문자로 변환 resultMap = CommonUtils.toUpperCaseMapKey(resultMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * 구조 상태 업데이트 * @param request * @param paramMap * @return */ public boolean updateStructureStatus(HttpServletRequest request, Map paramMap){ boolean result = false; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); //접속자 HttpSession session = request.getSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); String userId = person.getUserId(); paramMap.put("EDITER", userId); try{ // BOM 상태 업데이트 int cnt = sqlSession.update("partMng.updateStructureStatus", paramMap); // 상태가 Y로 변경되면 연결된 파트들을 확정(release) String status = CommonUtils.checkNull(paramMap.get("status")); if("Y".equals(status)){ String objId = CommonUtils.checkNull(paramMap.get("objId")); Map deployParam = new HashMap(); deployParam.put("checkArr", objId); // BOM에 연결된 파트들의 상태를 create -> release로 변경 sqlSession.update("partMng.deployPartInfo", deployParam); } sqlSession.commit(); if(cnt > 0) result = true; }catch(Exception e){ sqlSession.rollback(); e.printStackTrace(); }finally{ sqlSession.close(); } return result; } /** * 구조등록메뉴의 목록 조회 * @param paramMap * @return */ public List getBOMStandardStructureList(HttpServletRequest request, Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ //String countPerPage = CommonUtils.checkNull(request.getParameter("countPerPage"), Constants.ADMIN_COUNT_PER_PAGE+""); //paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage)); // Map pageMap = (HashMap)sqlSession.selectOne("partMng.getBOMStandardStructureListCnt", paramMap); // pageMap = (HashMap)CommonUtils.setPagingInfo(request, pageMap); // paramMap.put("PAGE_END", CommonUtils.checkNull(pageMap.get("PAGE_END"))); // paramMap.put("PAGE_START", CommonUtils.checkNull(pageMap.get("PAGE_START"))); resultList = sqlSession.selectList("partMng.getBOMStandardStructureList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } /** * BOM 리비전 조회 * @param paramMap * @return */ public Map getBOMStructureRev(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ resultMap = (HashMap)sqlSession.selectOne("partMng.getBOMStructureRev", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultMap); } /** * BOM 구조 기본정보 조회 * @param paramMap * @return */ public Map getBOMStructureStandardInfo(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ String objId = CommonUtils.checkNull(paramMap.get("objId"),(String) paramMap.get("OBJID")); System.out.println("objId ---------->"+objId); System.out.println("objId ---------->"+objId); System.out.println("paramMap ---------->"+paramMap); if("".equals(objId)){ objId = createBomStructureStandardInfo(request,paramMap); paramMap.put("OBJID",objId); }else{ paramMap.put("OBJID",objId); } resultMap = (HashMap)sqlSession.selectOne("partMng.getBOMStructureStandardInfoByObjId", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultMap); } /** * BOM 구조 기본정보를 등록 후, 생성한 Object id를 반환한다. * @param paramMap * @return */ public String createBomStructureStandardInfo(HttpServletRequest request,Map paramMap){ String result = ""; SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); HttpSession session = request.getSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); //접속자 String userId = person.getUserId(); result = CommonUtils.createObjId(); paramMap.put("OBJID", result); paramMap.put("WRITER", userId); sqlSession.insert("partMng.createBOMReportStructureStandardInfo", paramMap); sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); }finally{ sqlSession.close(); } return result; } /** * 구조등록 좌측 BOM트리목록을 받아온다. * @param standardBOMInfo * @return */ public List getBOMPartTreeList(Map standardBOMInfo){ List> resultList = new ArrayList(); List> FinalList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ System.out.println("standardBOMInfo : "+standardBOMInfo); Map sqlParamMap = new HashMap(); sqlParamMap.put("bomReportObjId", CommonUtils.checkNull(standardBOMInfo.get("OBJID"))); //sqlParamMap.put("search_type", "working"); //bom조회 working조건 231208 // actionType과 search_type 둘 다 체크 (우선순위: search_type > actionType) String searchType = CommonUtils.checkNull(standardBOMInfo.get("search_type")); if(searchType.isEmpty()) { searchType = CommonUtils.checkNull(standardBOMInfo.get("actionType")); } sqlParamMap.put("search_type", searchType); resultList = sqlSession.selectList("partMng.getBOMTreeList", sqlParamMap); int maxLevel = 0; if(null != resultList && 0 < resultList.size()){ for(int i=0;i rightCheckedArr){ boolean result = false; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ paramMap.put("rightCheckedArr", rightCheckedArr); System.out.println("paramMap : "+paramMap); Map map = sqlSession.selectOne("partMng.getSameTopPartNoCnt", paramMap); if(map != null && !map.isEmpty()){ int cnt = Integer.parseInt(CommonUtils.checkNull(map.get("CNT"), "0")); System.out.println("cnt : "+cnt); if(cnt > 0) result = true; } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return result; } /** * BOM 구조 개별삭제(하위정보 포함) * @param paramMap * @return */ public boolean deletePartRelateInfo(Map paramMap){ boolean result = false; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ System.out.println("deletePartRelateInfo.paramMap >> "+paramMap); sqlSession.delete("partMng.deletePartRelateInfo", paramMap); sqlSession.insert("partMng.changeStatusBomReport", paramMap); result = true; }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return result; } /** * BOM 구조 개별삭제(하위정보 포함) * @param paramMap * @return */ public boolean deleteStatusPartRelateInfo(HttpServletRequest request, Map paramMap){ boolean result = false; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); try{ System.out.println("deleteStatusPartRelateInfo.paramMap >> "+paramMap); HttpSession session = request.getSession(); sqlSession = SqlMapConfig.getInstance().getSqlSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); Map info = person.getLoginInfo(); String userId = CommonUtils.checkNull(info.get("userId")); Map sqlParamMap = new HashMap(); //sqlParamMap.putAll(paramMap); sqlParamMap.put("WRITER", userId); sqlParamMap.put("BOM_REPORT_OBJID", CommonUtils.checkNull(paramMap.get("OBJID"))); sqlParamMap.put("OBJID", CommonUtils.checkNull(paramMap.get("OBJID"))); sqlParamMap.put("leftObjId", CommonUtils.checkNull(paramMap.get("leftObjId"))); //sqlParamMap.put("PARENT_OBJID", CommonUtils.checkNull(paramMap.get("leftObjId"))); sqlParamMap.put("CHILD_OBJID", paramMap.get("leftObjId")); //sqlParamMap.put("OBJID_LEFT", CommonUtils.checkNull(paramMap.get("partObjId"))); sqlParamMap.put("CHANGE_TYPE", CommonUtils.checkNull(paramMap.get("CHANGE_TYPE"))); sqlParamMap.put("CHANGE_OPTION", CommonUtils.checkNull(paramMap.get("CHANGE_OPTION"))); sqlParamMap.put("PARENT_PART_OBJID", ""); sqlParamMap.put("PARENT_PART_NO", ""); sqlParamMap.put("PARENT_QTY_CHILD_OBJID", ""); sqlParamMap.put("HIS_STATUS", "DEL"); sqlSession.update("partMng.insertPartMngHistoryWhenDelPartRelation", sqlParamMap); //231211 히스토리 저장(파트 삭제) //sqlParamMap.put("OBJID", paramMap.get("partObjId")); //sqlParamMap.put("PARENT_PART_OBJID", CommonUtils.checkNull(paramMap.get("leftParentObjId"))); //sqlParamMap.put("PARENT_PART_NO", CommonUtils.checkNull(paramMap.get("leftParentPartNo"))); //sqlParamMap.put("PARENT_QTY_CHILD_OBJID", CommonUtils.checkNull(paramMap.get("leftParentObjId"))); //sqlSession.update("partMng.insertPartMngHistory", sqlParamMap); //231211 히스토리 저장(파트 삭제) sqlSession.delete("partMng.deletePartRelateInfoHis", paramMap);//231211 히스토리 삭제(파트추가된 것) sqlSession.update("partMng.deleteStatusPartRelateInfo", paramMap);//구조정보 삭제(논리) sqlSession.insert("partMng.changeStatusBomReport", paramMap); sqlSession.commit(); result = true; }catch(Exception e){ sqlSession.rollback(); e.printStackTrace(); }finally{ sqlSession.close(); } return result; } /** * BOM구조 연결. * @param paramMap * @param partList * @return */ public boolean relatePartInfo(HttpServletRequest request, Map paramMap, List partList){ boolean result = false; List> resultList = new ArrayList(); Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ HttpSession session = request.getSession(); sqlSession = SqlMapConfig.getInstance().getSqlSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); Map info = person.getLoginInfo(); String userId = CommonUtils.checkNull(info.get("userId")); Map sqlParamMap = new HashMap(); sqlParamMap.put("BOM_REPORT_OBJID", CommonUtils.checkNull(paramMap.get("BOM_REPORT_OBJID"))); sqlParamMap.put("PARENT_OBJID", CommonUtils.checkNull(paramMap.get("leftObjId"))); sqlParamMap.put("PARENT_PART_OBJID", CommonUtils.checkNull(paramMap.get("leftObjId"))); sqlParamMap.put("PARENT_PART_NO", CommonUtils.checkNull(paramMap.get("leftPartNoQty"))); sqlParamMap.put("PARENT_QTY_CHILD_OBJID", CommonUtils.checkNull(paramMap.get("leftPartChildObjId"))); sqlParamMap.put("QTY", 1); sqlParamMap.put("QTY_TEMP", 1); sqlParamMap.put("STATUS", "adding"); sqlParamMap.put("WRITER", userId); //sqlParamMap.put("bomReportObjId", CommonUtils.checkNull(paramMap.get("OBJID"))); //sqlParamMap.put("OBJID", CommonUtils.checkNull(paramMap.get("OBJID"))); //sqlParamMap.put("LEVEL", 2); //resultList = sqlSession.selectList("partMng.getBOMTreeList", sqlParamMap); //resultList = CommonUtils.toUpperCaseMapKey(resultList); //resultMap = (HashMap)sqlSession.selectOne("partMng.getBOMStructureStandardInfoByObjId", sqlParamMap); //System.out.println("resultList ::"+resultList); //System.out.println("partList ::"+partList); //System.out.println("resultMap ::"+resultMap); for(String partObjId : partList){ sqlParamMap.put("OBJID", CommonUtils.createObjId()); sqlParamMap.put("CHILD_OBJID", CommonUtils.createObjId()); sqlParamMap.put("PART_NO", partObjId); //sqlParamMap.put("PART_OBJID", partObjId); sqlSession.insert("partMng.relatePartInfo", sqlParamMap); sqlParamMap.put("OBJID", CommonUtils.checkNull(partObjId)); //sqlParamMap.put("CHILD_OBJID", ""); sqlParamMap.put("OBJID_LEFT", CommonUtils.checkNull(paramMap.get("partObjId"))); sqlParamMap.put("CHANGE_TYPE", CommonUtils.checkNull(paramMap.get("CHANGE_TYPE"))); sqlParamMap.put("HIS_STATUS", "ADD"); sqlParamMap.put("CHANGE_OPTION", CommonUtils.checkNull(paramMap.get("CHANGE_OPTION"))); sqlSession.update("partMng.insertPartMngHistory",sqlParamMap); //231211 히스토리 저장(파트 추가) } sqlSession.insert("partMng.changeStatusBomReport", sqlParamMap); /*if(null != resultList && 0 < resultList.size()){ for(int i=0;i 0){ sqlSession.insert("partMng.changeStatusBomReport", paramMap); //구조 먼저 연결(파트추가)한 히스토리에 수량 변경 sqlSession.update("partMng.structureQtySaveHis", paramMap); //sqlSession.update("partMng.insertPartMngHistory",paramMap); result = true; sqlSession.commit(); } }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); }finally{ sqlSession.close(); } return result; } /** * BOM에 연결 할 파트 목록을 가져온다. * 이미 연결된 파트는 제외한다. * @param paramMap * @return */ public List getToConnectPartMngList(HttpServletRequest request,Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); setPartMngCommonCD(paramMap); resultList = (ArrayList)sqlSession.selectList("partMng.getToConnectPartMngList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } /** * PART 목록 총 개수 조회 (페이징용) */ public int getToConnectPartMngListCount(HttpServletRequest request, Map paramMap){ int totalCount = 0; SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); setPartMngCommonCD(paramMap); totalCount = (Integer)sqlSession.selectOne("partMng.getToConnectPartMngListCount", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return totalCount; } /** * 정전개 조회 * @param paramMap * @return */ public List getStructureAscendingMultiList(HttpServletRequest request,Map paramMap, List> ListVC){ List> spareList = new ArrayList(); List> spareListVCqty = new ArrayList(); List> resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ spareList = sqlSession.selectList("partMng.selectStructureAscendingMultiList", paramMap); spareListVCqty = sqlSession.selectList("partMng.selectStructureAscendingMultiListVCqty", paramMap); spareList = CommonUtils.toUpperCaseMapKey(spareList); spareListVCqty = CommonUtils.toUpperCaseMapKey(spareListVCqty); int maxLevel = 0; if(null != spareList && 0 < spareList.size()){ for(int i=0;i> resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ resultList = sqlSession.selectList("partMng.selectStructureAscendingMultiListVC", paramMap); resultList = CommonUtils.toUpperCaseMapKey(resultList); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } /** * 정전개 조회 * @param paramMap * @return */ public List getStructureAscendingList(HttpServletRequest request,Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ System.out.println("paramMap :: " + paramMap); resultList = sqlSession.selectList("partMng.selectStructureAscendingList", paramMap); resultList = CommonUtils.toUpperCaseMapKey(resultList); // 쿼리에서 이미 MAX_LEVEL을 제공하므로 추가 처리 불필요 // LEV_X 컬럼도 JSP에서 동적으로 처리하므로 생략 }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 역전개 조회 * @param paramMap * @return */ public List getStructureDescendingList(HttpServletRequest request,Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ if(paramMap != null && !paramMap.isEmpty()){ String partNo = CommonUtils.checkNull(paramMap.get("search_partNo")); String partName = CommonUtils.checkNull(paramMap.get("search_partName")); if(!"".equals(partNo) || !"".equals(partName)){ setPartMngCommonCD(paramMap); resultList = sqlSession.selectList("partMng.selectStructureDescendingList", paramMap); resultList = CommonUtils.toUpperCaseMapKey(resultList); // 쿼리에서 이미 MAX_LEVEL을 제공하므로 추가 처리 불필요 System.out.println("resultList:"+resultList); } } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** 영업활동삭제 * @param request * @param paramMap * @return */ public Map delOrderMgmt(HttpServletRequest request, Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; Map sqlMap = new HashMap(); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); String Key = (String) paramMap.get("delKey"); String [] delKey = Key.split(","); sqlMap.put("delObjKeyarr", delKey); int cnt = sqlSession.delete("projectConcept.deleteOrdermgmt", sqlMap); if(cnt > 0){ resultMap.put("result", true); resultMap.put("msg", Message.DELETE_SUCCESS); } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); resultMap.put("result", false); resultMap.put("msg", Message.DELETE_FAILED); e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * 수주활동 상세 조회 * @param paramMap * @return */ public Map getProjectConceptInfo(Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultMap = sqlSession.selectOne("orderMgmt.getOrderMgmtInfo", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** *영업정보 엑셀저장 * @param request * @param paramMap * @throws Exception */ public void UploadOrderMgmt(HttpServletRequest request,Map paramMap) throws Exception{ SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); try{ ArrayList fileList = commonService.getFileList(paramMap); if(null != fileList && 1 == fileList.size()){ HashMap fileMap = (HashMap)fileList.get(0); String path = CommonUtils.checkNull(fileMap.get("FILE_PATH")); String fileName = CommonUtils.checkNull(fileMap.get("SAVED_FILE_NAME")); FileInputStream fis = new FileInputStream(path+"\\"+fileName); XSSFWorkbook workBook = new XSSFWorkbook(fis); XSSFSheet sheet = workBook.getSheetAt(0); HashMap partMap = new HashMap(); int rows = sheet.getPhysicalNumberOfRows(); System.out.println("*****************************" +rows); System.out.println("*****************************" +rows); System.out.println("*****************************" +rows); System.out.println("*****************************" +rows); for(int rowIndex= 1 ; rowIndex < rows ; rowIndex++){ String column ="false"; XSSFRow row = sheet.getRow(rowIndex); if(null != row && rowIndex <= 15){ for(int columnIndex = 0 ; columnIndex < 47 ; 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()+""; //cellValue = String.format("%.2f", Double.parseDouble(cellValue)); cellValue = String.format("%.0f", Double.parseDouble(cellValue)); System.out.println("cellValue1:"+cellValue); 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; } } if("false".equals(cellValue)){ cellValue = ""; } //obj생성 String ObjId = CommonUtils.createObjId(); //수주번호 if(0 == columnIndex){ if("".equals(cellValue)){ column ="false"; }else{ column ="true"; partMap.put("obtain_no", cellValue); } } //OBJID partMap.put("ObjId", ObjId); //프로젝트 넘버 if(1 == columnIndex){ partMap.put("project_no", cellValue); } //구분코드 if(2 == columnIndex){ partMap.put("region_high_cd",cellValue); } //국가코드 if(4 == columnIndex){ partMap.put("region_mid_cd",cellValue); } //지역코드 if(6 == columnIndex){ partMap.put("region_low_cd",cellValue); } //거래처코드 if(8 == columnIndex){ partMap.put("customer_cd",cellValue); } //사업자 등록번호 if(10 == columnIndex){ partMap.put("bus_lic_num",cellValue); } //담당자 if(11 == columnIndex){ partMap.put("customer_person",cellValue); } //연락처 if(12 == columnIndex){ partMap.put("customer_phone",cellValue); } //e-mail if(13 == columnIndex){ partMap.put("customer_email",cellValue); } //부서(학과) if(14 == columnIndex){ partMap.put("customer_div",cellValue); } //주소 if(15 == columnIndex){ partMap.put("customer_addr",cellValue); } //계약유형 if(16 == columnIndex){ partMap.put("c_type_cd",cellValue); } //계약기관 if(18 == columnIndex){ partMap.put("c_agency_cd",cellValue); } //계약구분 if(20 == columnIndex){ partMap.put("c_class_cd",cellValue); } //계약구분 if(22 == columnIndex){ partMap.put("spec_cd",cellValue); } //수주명 if(24 == columnIndex){ partMap.put("order_title",cellValue); } //담당자ID if(25 == columnIndex){ partMap.put("writer",cellValue); } //접수일 if(26 == columnIndex){ partMap.put("regdate",cellValue); } //진행상황 if(27 == columnIndex){ partMap.put("status_cd",cellValue); } //계약결과 if(29 == columnIndex){ partMap.put("result_cd",cellValue); } //이탈원인 if(31 == columnIndex){ partMap.put("reason",cellValue); } //비고 if(32 == columnIndex){ partMap.put("content",cellValue); } //매출일자(매출예정) if(33 == columnIndex){ partMap.put("sales_p_date",cellValue); } /* //소계(매출예정) if(34 == columnIndex){ partMap.put("sub_p_sum",cellValue); } */ //제품(매출예정) if(34 == columnIndex){ partMap.put("dev_p_product",cellValue); } //상품(매출예정) if(35 == columnIndex){ partMap.put("sale_p_product",cellValue); } //출고예정일 if(36 == columnIndex){ partMap.put("sch_date",cellValue); } /* //소계(제조원가) if(38 == columnIndex){ partMap.put("sub_ps_sum",cellValue); }*/ //제품(제조원가) if(37 == columnIndex){ partMap.put("dev_ps_product",cellValue); } //상품(제조원가) if(38 == columnIndex){ partMap.put("sale_ps_product",cellValue); } //매출일(매출실적) if(39 == columnIndex){ partMap.put("sales_r_date",cellValue); } /*//소계(매출실적) if(42 == columnIndex){ partMap.put("sub_r_sum",cellValue); }*/ //제품(매출실적) if(40 == columnIndex){ partMap.put("dev_r_product",cellValue); } //상품(매출실적) if(41 == columnIndex){ partMap.put("sale_r_product",cellValue); } //수금일 if(42 == columnIndex){ partMap.put("recv_date",cellValue); } //달성율 if(43 == columnIndex){ partMap.put("achievement_rate",cellValue); } } } System.out.println("***********************"+column); System.out.println("***********************"+column); System.out.println("***********************"+column); if("true".equals(column)){ sqlSession.insert("projectConcept.orderExcelupload", partMap); } } } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); throw e; }finally{ sqlSession.close(); } } /** * 수주활동 main 조회 * @param paramMap * @return */ public List obtainmainStatusList(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = (ArrayList)sqlSession.selectList("projectConcept.obtainmainStatusList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 계약현황 main 조회 * @param paramMap * @return */ public List orderCntList(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = (ArrayList)sqlSession.selectList("projectConcept.orderCntList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 프로젝트 목록을 가져온다. * @param request * @param paramMap * @return */ public List getGoalList(HttpServletRequest request, Map paramMap){ SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); List resultList = new ArrayList(); try{ resultList = (ArrayList)sqlSession.selectList("projectConcept.getmainchartList",paramMap); }catch(Exception e){ throw e; }finally{ sqlSession.close(); } return resultList; } /** * 목표등록 조회 * @param paramMap * @return */ public List getgoalMgmtList(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ HttpSession session = request.getSession(); sqlSession = SqlMapConfig.getInstance().getSqlSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); Map info = person.getLoginInfo(); //접속자 String userId = CommonUtils.checkNull(info.get("userId")); paramMap.put("writer", userId); resultList = (ArrayList)sqlSession.selectList("projectConcept.getgoalMgmtList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 목표등록 조회 * @param paramMap * @return */ public List getgoalMgmtTeamList(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ HttpSession session = request.getSession(); sqlSession = SqlMapConfig.getInstance().getSqlSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); Map info = person.getLoginInfo(); //접속자 String userId = CommonUtils.checkNull(info.get("userId")); paramMap.put("writer", userId); resultList = (ArrayList)sqlSession.selectList("projectConcept.getgoalMgmtTeamList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** 목표등록 삭제 * @param request * @param paramMap * @return */ public Map delgoalEnroll(HttpServletRequest request, Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; Map sqlMap = new HashMap(); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); String Key = (String) paramMap.get("delKey"); String [] delKey = Key.split(","); sqlMap.put("delObjKeyarr", delKey); int cnt = sqlSession.delete("projectConcept.delgoalEnroll", sqlMap); if(cnt > 0){ resultMap.put("result", true); resultMap.put("msg", Message.DELETE_SUCCESS); } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); resultMap.put("result", false); resultMap.put("msg", Message.DELETE_FAILED); e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * 목표등록 합계 * @param paramMap * @return */ public List getgoalMgmtAverage(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ HttpSession session = request.getSession(); sqlSession = SqlMapConfig.getInstance().getSqlSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); Map info = person.getLoginInfo(); //접속자 String userId = CommonUtils.checkNull(info.get("userId")); paramMap.put("writer", userId); resultList = (ArrayList)sqlSession.selectList("projectConcept.getgoalMgmtAverage", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 목표등록 합계 * @param paramMap * @return */ public List getgoalMgmtTeamAverage(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ HttpSession session = request.getSession(); sqlSession = SqlMapConfig.getInstance().getSqlSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); Map info = person.getLoginInfo(); resultList = (ArrayList)sqlSession.selectList("projectConcept.getgoalMgmtTeamAverage", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 영업현황 조회 * @param paramMap * @return */ /** * 수주관리 목록조회 * @param paramMap * @return */ public List getOrderMgntSubList(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = (ArrayList)sqlSession.selectList("projectConcept.getorderMgmtSubList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 수주활동의 Milestone 목록 조회 * @param paramMap * @return */ public List getProjectConceptMilestoneList(Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); if("edit".equals(CommonUtils.checkNull(paramMap.get("mode")))){ resultList = sqlSession.selectList("projectConcept.getProjectConceptMilestoneList", paramMap); }else{ resultList = sqlSession.selectList("projectConcept.getProjectConceptMilestoneList2", paramMap); } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 수주활동 제품별 정보 조회 * @param paramMap * @return */ public Map getProjectConceptProductInfo(Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultMap = sqlSession.selectOne("projectConcept.getProjectConceptProductInfo", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * 수주활동 제품별 수주결과 수정 * @param paramMap */ public void updateProjectConceptProdBiddingResult(Map paramMap){ SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); sqlSession.update("projectConcept.updateProjectConceptProdBiddingResult", paramMap); //입찰결과 등록시 해당 값 완료로 변경 String biddingResult = CommonUtils.checkNull(paramMap.get("biddingResult")); if(!"".equals(biddingResult)) paramMap.put("changeStatus", "complete"); else paramMap.put("changeStatus", "create"); sqlSession.update("projectConcept.updateProjectConceptStatusComplete", paramMap); sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); e.printStackTrace(); }finally{ sqlSession.close(); } } /** * 수주활동 메일 발송. * 지정된 인원에게 메일을 발송한다. * @param request * @param paramMap */ public void sendMailProjectConceptInfo(HttpServletRequest request, Map paramMap){ SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); String[] receivers = request.getParameterValues("chk"); System.out.println("paramMap : "+paramMap); System.out.println("receivers.length : "+receivers.length); PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN); Map userInfo = person.getLoginInfo(); //1. project concept의 입찰제품 정보 조회 Map info = sqlSession.selectOne("projectConcept.getProjectConceptInfo", paramMap); //2. 해당 내용을 담은 htmlBody 생성 // String bodyContents = MailUtil.getHTMLContents("", info); //mail body contents 구성 Map mailParamMap = new HashMap(); //제품정보조회 Map productInfo = sqlSession.selectOne("mail.getProjectConceptProductInfo", paramMap); mailParamMap.putAll(productInfo); //제품별 협조부서 목록조회 List productRelDeptList = sqlSession.selectList("mail.getProjectConceptProductRelDeptList", paramMap); String subject = "["+CommonUtils.checkNull(productInfo.get("CAR_CODE"))+" ("+CommonUtils.checkNull(productInfo.get("CAR_NAME"))+")] "+Message.MAIL_SUBJECT_PROJECT_CONCEPT_REQ_FILE; mailParamMap.put("SUBJECT", subject); String deptList = ""; deptList += ""; deptList += ""; deptList += ""; deptList += ""; deptList += ""; for(Map map : productRelDeptList){ String deptCode = CommonUtils.checkNull(map.get("DEPT_CODE")); String deptName = CommonUtils.checkNull(map.get("DEPT_NAME")); String replyReqDate = CommonUtils.checkNull(map.get("REPLY_REQ_DATE")); deptList += ""; deptList += ""; deptList += ""; deptList += ""; } deptList += "
"+deptName+""+replyReqDate+"
"; mailParamMap.put("DEPT_LIST", deptList); String bodyContents = MailUtil.getHTMLContents("projectConceptMailTemplate", mailParamMap); //3. 메일 발송 대상 조회 for(String receiver : receivers){ if(receiver.contains(":")){ String[] receiverSplit = receiver.split(":"); String receiverId = CommonUtils.checkNull(receiverSplit[0]); String receiverEmail = CommonUtils.checkNull(receiverSplit[1]); //4. 메일 발송 MailUtil.sendMail(CommonUtils.checkNull(productInfo.get("WRITER")), CommonUtils.checkNull(productInfo.get("WRITER_EMAIL")), receiverId, receiverEmail, null, subject, bodyContents, Constants.MAIL_TYPE_PROJECT_CONCEPT); } } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } } /** * 수주활동 QNA 메일 발송. * 지정된 인원에게 메일을 발송한다. * @param request * @param paramMap */ public void sendMailProjectConceptQNAInfo(HttpServletRequest request, Map paramMap){ SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); String[] receivers = request.getParameterValues("chk"); System.out.println("paramMap : "+paramMap); System.out.println("receivers.length : "+receivers.length); PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN); Map userInfo = person.getLoginInfo(); //1. project concept QNA 정보조회 Map info = sqlSession.selectOne("mail.getProjectConceptQNAInfo", paramMap); //2. 해당 내용을 담은 htmlBody 생성 // String bodyContents = MailUtil.getHTMLContents("", info); //mail body contents 구성 Map mailParamMap = new HashMap(); String subject = "["+CommonUtils.checkNull(info.get("CAR_CODE"))+" ("+CommonUtils.checkNull(info.get("CAR_NAME"))+")] "+Message.MAIL_SUBJECT_PROJECT_CONCEPT_QNA; mailParamMap.put("SUBJECT", subject); mailParamMap.putAll(info); String bodyContents = MailUtil.getHTMLContents("projectConceptQNAMailTemplate", mailParamMap); //3. 메일 발송 대상 조회 for(String receiver : receivers){ if(receiver.contains(":")){ String[] receiverSplit = receiver.split(":"); String receiverId = CommonUtils.checkNull(receiverSplit[0]); String receiverEmail = CommonUtils.checkNull(receiverSplit[1]); //4. 메일 발송 MailUtil.sendMail(CommonUtils.checkNull(info.get("WRITER")), CommonUtils.checkNull(info.get("WRITER_EMAIL")), receiverId, receiverEmail, null, subject, bodyContents, Constants.MAIL_TYPE_PROJECT_CONCEPT); } } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } } /** * 수주활동 제품별 확정. * 모든 제품이 확정되었을경우 수주활동을 종료시킨다. * @param request * @param paramMap */ public void completeProjectConceptProductInfo(HttpServletRequest request, Map paramMap){ SqlSession sqlSession = null; try{ System.out.println("paramMap : "+paramMap); sqlSession = SqlMapConfig.getInstance().getSqlSession(false); //입찰품목 상태 complete으로 변경 sqlSession.update("projectConcept.completeProjectConceptProductInfo", paramMap); //입찰품목의 상태가 create인 CNT 조회 Map cntMap = sqlSession.selectOne("projectConcept.getProjectConceptProductCreateCnt", paramMap); System.out.println("cntMap : "+cntMap); int cnt = Integer.parseInt(CommonUtils.checkNull(cntMap.get("CNT"), "0")); System.out.println("cnt : "+cnt); if(cnt == 0){ //수주활동 상태 complete으로 변경. sqlSession.update("projectConcept.completeProjectConceptInfo", paramMap); } sqlSession.commit(); }catch(Exception e){ sqlSession.rollback(); e.printStackTrace(); }finally{ sqlSession.close(); } } /** * 수주활동 중복 등록체크 (false : 중복있음, true : 중복없음) * @param paramMap * @return */ public Map getProjectConceptDuplicateCnt(Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); Map map = sqlSession.selectOne("projectConcept.getProjectConceptDuplicateCnt", paramMap); if(map != null){ int cnt = Integer.parseInt(CommonUtils.checkNull(map.get("CNT"), "0")); if(cnt > 0){ resultMap.put("result", false); }else{ resultMap.put("result", true); } } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /*jmpark end*/ /*************************************************************************************************************************/ /*************************************************************************************************************************/ /*edhwang start*/ /*edhwang end*/ /*************************************************************************************************************************/ /*************************************************************************************************************************/ /*dhchoi start*/ /** * 수주활동 저장 * @param paramMap */ public void saveQnAProjectConcept(Map paramMap){ SqlSession sqlSession =null; sqlSession = SqlMapConfig.getInstance().getSqlSession(); System.out.println(paramMap); sqlSession.update("projectConcept.saveQnaProjectConceptInfo", paramMap); } /** * QnaListPage 목록 * @param paramMap * @return */ public List qnaListPage(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); String countPerPage = CommonUtils.checkNull(request.getParameter("countPerPage"), Constants.ADMIN_COUNT_PER_PAGE+""); paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage)); Map pageMap = (HashMap)sqlSession.selectOne("projectConcept.getQnaListCnt", paramMap); pageMap = (HashMap)CommonUtils.setPagingInfo(request, pageMap); paramMap.put("PAGE_END", CommonUtils.checkNull(pageMap.get("PAGE_END"))); paramMap.put("PAGE_START", CommonUtils.checkNull(pageMap.get("PAGE_START"))); resultList = (ArrayList)sqlSession.selectList("projectConcept.getQnaListPage", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * Qna 수정페이지 * @param paramMap * @return */ public Map getQnADetailInfo(Map paramMap){ HashMap resultMap = new HashMap(); SqlSession sqlSession = null; System.out.println("getQnADetailInfo"+paramMap); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultMap = (HashMap)sqlSession.selectOne("projectConcept.getQnaInfo", paramMap); if(null != resultMap){ resultMap.put("CONTENTS", CommonUtils.getClobToString((Clob)resultMap.get("CONTENTS"))); } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * BomExcelList 목록 * @param paramMap * @return */ public List BomExcelList(HttpServletRequest request,Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = (ArrayList)sqlSession.selectList("partMng.getPartBomTempList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } public String getCellValue(Row row, int columnIndex, DataFormatter formatter, AtomicInteger emptyColCnt){ Cell cell = row.getCell(columnIndex); //데이버 유형별 get date String cellValue = ""; //System.out.println("columnSeq:"+columnSeq + " " + "columnIndex:"+columnIndex); if(null == cell){ cellValue = ""; }else{ switch(cell.getCellType()){ case Cell.CELL_TYPE_FORMULA: cellValue = cell.getCellFormula(); break; case Cell.CELL_TYPE_NUMERIC: cellValue = formatter.formatCellValue(cell); break; case Cell.CELL_TYPE_STRING: cellValue = cell.getStringCellValue()+""; break; case Cell.CELL_TYPE_BLANK: cellValue = cell.getBooleanCellValue()+""; break; case Cell.CELL_TYPE_ERROR: cellValue = cell.getErrorCellValue()+""; break; } } // System.out.println("========================================================="); // System.out.println("columnIndex:"+columnIndex); // System.out.println("cellValue:"+cellValue); cellValue = CommonUtils.checkNull(cellValue); cellValue = cellValue.trim(); if("false".equals(cellValue)){ cellValue = ""; } if(StringUtils.isBlank(cellValue)) emptyColCnt.incrementAndGet(); //emptyColCnt++; return cellValue; } public void setErrMapByExcel(String resultColumn, ArrayList resultList, Map partMap, boolean addList, String msg, String cellValue){ String note = CommonUtils.checkNull((String)partMap.get(resultColumn)); partMap.put(resultColumn, CommonUtils.isNotBlank(note)? (note+", \n"+msg) : msg); //\n
if(addList) { //resultList.add(partMap); } } //파트 엑셀업로드 파싱 public ArrayList partParsingExcelFile(HttpServletRequest request,Map paramMap)throws Exception{ ArrayList resultList = new ArrayList(); ArrayList fileList = commonService.getFileList(paramMap); //ArrayList fileList = commonService.getFileListDecrypt(paramMap, true); //파수 drm 복호화 //프로젝트에 해당하는 사양 목록을 가져온다. //List specRegionList = (ArrayList)setSpecRegionLRColumn(request, paramMap); //System.out.println("specRegionList:"+specRegionList); // int specRegionSize = specRegionList != null ? specRegionList.size() : 0; // int specRegionIdx = 0; // int totalCellSize = 38; //+specRegionSize // int totalCellSize = specRegionSize+42; // System.out.println("totalCellSize:"+totalCellSize); boolean logging = false; // true/false String resultColumn = "NOTE"; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); if(null != fileList && 1 == fileList.size() ){//&& 0 < specRegionList.size() 240118 사양조건 제거 HashMap fileMap = (HashMap)fileList.get(0); String path = CommonUtils.checkNull(fileMap.get("FILE_PATH")); String fileName = CommonUtils.checkNull(fileMap.get("SAVED_FILE_NAME")); FileInputStream fis = new FileInputStream(path+"\\"+fileName); //XSSFWorkbook workBook = new XSSFWorkbook(fis); //FormulaEvaluator formulaEval = workBook.getCreationHelper().createFormulaEvaluator(); //XSSFSheet sheet = workBook.getSheetAt(0); Workbook workBook = null; if (fileName.endsWith(".xls") || fileName.endsWith(".XLS")) { workBook = new HSSFWorkbook(fis); } else if (fileName.endsWith(".xlsx") || fileName.endsWith(".XLSX")) { workBook = new XSSFWorkbook(fis); } Sheet sheet = workBook.getSheetAt(0); // 데이터 포멧터 DataFormatter formatter = new DataFormatter(); int rows = sheet.getPhysicalNumberOfRows(); System.out.println("rows:"+rows); int emptyRowCnt = 0; //int emptyColCnt = 0; //Integer emptyColCnt = 0; AtomicInteger emptyColCnt = new AtomicInteger(0); Map partNoUniqueMap = new HashMap(); //Map partNoMap = new HashMap(); for(int rowIndex=2 ; rowIndex < rows ; rowIndex++){ //XSSFRow row = sheet.getRow(rowIndex); Row row = sheet.getRow(rowIndex); if(null != row){ int columnIndex = 0; //emptyColCnt = 0; emptyColCnt.set(0); Map partMap = new HashMap(); // partMap.put("OEM_OBJID",OEM_OBJID ); // partMap.put("CAR_OBJID",CAR_OBJID ); // partMap.put("PRODUCT_GROUP_OBJID",PRODUCT_GROUP_OBJID ); // partMap.put("PRODUCT_OBJID",PRODUCT_OBJID ); /* for(int columnIndex = 0 ; columnIndex < totalCellSize ; columnIndex++){ //columnSeq++; XSSFCell cell = row.getCell(columnIndex++); //데이버 유형별 get date String cellValue = ""; //System.out.println("columnSeq:"+columnSeq + " " + "columnIndex:"+columnIndex); if(null == cell){ cellValue = ""; }else{ switch(cell.getCellType()){ case XSSFCell.CELL_TYPE_FORMULA: cellValue = cell.getCellFormula(); break; case XSSFCell.CELL_TYPE_NUMERIC: cellValue = formatter.formatCellValue(cell); break; case XSSFCell.CELL_TYPE_STRING: cellValue = cell.getStringCellValue()+""; break; case XSSFCell.CELL_TYPE_BLANK: cellValue = cell.getBooleanCellValue()+""; break; case XSSFCell.CELL_TYPE_ERROR: cellValue = cell.getErrorCellValue()+""; break; } } System.out.println("========================================================="); System.out.println("columnIndex:"+columnIndex); System.out.println("cellValue:"+cellValue); cellValue = cellValue.trim(); if("false".equals(cellValue)){ cellValue = ""; } */ Map sqlParamMap = new HashMap(); Map sqlResultMap = new HashMap(); //품번중복검사 String cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); partMap.put("PART_NO", cellValue); // if(StringUtils.isBlank(cellValue)) emptyColCnt++; // if(0 == columnIndex){ //partMap.put("OBJID", CommonUtils.createObjId()); if(StringUtils.isBlank(cellValue)){ setErrMapByExcel(resultColumn, resultList, partMap, true, "필수입력 - 품번 "+cellValue, cellValue); }else { sqlParamMap.put("PART_NO", cellValue); //240122 PART_NO 조건 수정 //sqlResultMap = getLastPartMngInfo22(request, sqlParamMap); List> partList = sqlSession.selectList("partMng.overlapPartMng2", sqlParamMap); //String PART_OBJID = ""; if(null != partList && !partList.isEmpty()){ sqlResultMap = partList.get(0); if(null != sqlResultMap){ // PART_OBJID = CommonUtils.checkNull(sqlResultMap.get("OBJID")); setErrMapByExcel(resultColumn, resultList, partMap, true, "품번중복", cellValue); }else{ //PART_OBJID = CommonUtils.createObjId(); if(partNoUniqueMap.containsKey(cellValue)) { //partMap.put("NOTE", "모품번이 존재하지 않는 파트입니다."); setErrMapByExcel(resultColumn, resultList, partMap, true, "품번중복", cellValue); }else { partNoUniqueMap.put("PART_NO", cellValue); } } }else { if(partNoUniqueMap.containsKey(cellValue)) { //partMap.put("NOTE", "모품번이 존재하지 않는 파트입니다."); setErrMapByExcel(resultColumn, resultList, partMap, true, "품번중복", cellValue); }else { partNoUniqueMap.put("PART_NO", cellValue); } } } // } //품명 cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); // if(StringUtils.isBlank(cellValue)) emptyColCnt++; partMap.put("PART_NAME", cellValue); if(CommonUtils.isBlank(cellValue)){ //partMap.put("NOTE", "자품번 필수 입력"); setErrMapByExcel(resultColumn, resultList, partMap, true, "필수입력 - 품명", cellValue); //continue; }else{ } //수량(QTY) // cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); // partMap.put("QTY", "1"); //재료 partMap.put("MATERIAL", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //열처리경도 partMap.put("HEAT_TREATMENT_HARDNESS", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //열처리방법 partMap.put("HEAT_TREATMENT_METHOD", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //표면처리 partMap.put("SURFACE_TREATMENT", getCellValue(row, columnIndex++, formatter, emptyColCnt)); // if(StringUtils.isBlank(getCellValue(row, columnIndex, formatter, emptyColCnt))) emptyColCnt++; //사양(규격) // partMap.put("SPEC", getCellValue(row, columnIndex++, formatter, emptyColCnt)); // if(StringUtils.isBlank(getCellValue(row, columnIndex, formatter, emptyColCnt))) emptyColCnt++; //후처리 // partMap.put("POST_PROCESSING", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //MAKER // partMap.put("MAKER", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //공급업체 - MAKER 컬럼에 텍스트로 저장 (2025-10-29) cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); partMap.put("MAKER", cellValue); // 공급업체명을 MAKER에 저장 /* 이전 공급업체 코드 조회 방식 (주석처리) partMap.put("SUP_CODE", columnIndex); if(!CommonUtils.isBlank(cellValue)){ sqlParamMap.clear(); sqlResultMap.clear(); sqlParamMap.put("SUPPLY_NAME", cellValue); Map supply = sqlSession.selectOne("partMng.supplyInfo", sqlParamMap); if(null!=supply && !StringUtils.isBlank((String)supply.get("objid"))){ //&& !CommonUtils.isEmptyMap(partType) partMap.put("SUP_CODE", supply.get("objid")); sqlResultMap.put("SUP_CODE",supply.get("objid")); }else { setErrMapByExcel(resultColumn, resultList, partMap, true, "공급업체 확인:"+cellValue, cellValue); } } */ //PART구분(부품유형) cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); // if(StringUtils.isBlank(cellValue)) emptyColCnt++; partMap.put("PART_TYPE", columnIndex); if(!CommonUtils.isBlank(cellValue)){ sqlParamMap.clear(); sqlResultMap.clear(); sqlParamMap.put("CODE_NAME", cellValue); Map partType = sqlSession.selectOne("partMng.parttypeInfo", sqlParamMap); if(null!=partType && !StringUtils.isBlank((String)partType.get("code_id"))){ //&& !CommonUtils.isEmptyMap(partType) partMap.put("PART_TYPE", partType.get("code_id")); sqlResultMap.put("PART_TYPE",partType.get("code_id")); }else { setErrMapByExcel(resultColumn, resultList, partMap, true, "범주 이름 확인:"+cellValue, cellValue); } } //비고(REMARK) partMap.put("REMARK", getCellValue(row, columnIndex++, formatter, emptyColCnt)); if(logging) logger.info("partMap:"+partMap); if(emptyColCnt.intValue() < 8) { //모두 공백 아니면 담기 resultList.add(partMap); }else { emptyRowCnt++; } if(emptyRowCnt > 3) //3줄이상 빈줄이면 중지 break; //}//end of for columns } }//end of for rows } //System.out.println("resultList:"+resultList); if(logging) { for (Object object : resultList) { logger.info("resultList object:"+object); } } return resultList; } //파트등록(엑셀업로드) public void savePartByExcel(HttpServletRequest request,Map paramMap) throws Exception{ SqlSession sqlSession = null; Map sqlMap = new HashMap(); try{ List> gridDataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("jqGrid"))); sqlSession = SqlMapConfig.getInstance().getSqlSession(false); String objid = CommonUtils.checkNull(paramMap.get("importPopObjid")); /* String masterObjid = objid; String unitCode = CommonUtils.checkNull(paramMap.get("UNIT_CODE")); String contracObjid = CommonUtils.checkNull(paramMap.get("CONTRACT_OBJID")); sqlMap.put("OBJID", contracObjid); Map projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", sqlMap); String projectNo = (String)projectInfo.get("project_no"); String masterProjectNo = projectNo; sqlMap.put("unitCode", unitCode); Map unitInfoMap = (HashMap)sqlSession.selectOne("common.getUnitCodeList", sqlMap); String unitName = CommonUtils.checkNull(unitInfoMap.get("name")).replaceAll("\u00A0+", " "); String UNIT_NAME = CommonUtils.checkNull(unitInfoMap.get("name")); byte[] utf8Bytes = unitName.getBytes("UTF-8"); String utf8unitName = new String(utf8Bytes, "UTF-8"); String filepath = Constants.FILE_STORAGE+"\\PART_DATA\\"; String filepathFull = filepath+projectNo+File.separator+unitName+File.separator; */ sqlMap.clear(); // sqlMap.put("CUSTOMER_OBJID", CommonUtils.checkNull((String)paramMap.get("CUSTOMER_OBJID"))); // sqlMap.put("CONTRACT_OBJID", CommonUtils.checkNull((String)paramMap.get("CONTRACT_OBJID"))); // sqlMap.put("UNIT_CODE", CommonUtils.checkNull((String)paramMap.get("UNIT_CODE"))); System.out.println("sqlMap ---->"+sqlMap); //sqlSession.insert("partMng.createBOMReportStructureStandardInfo", sqlMap); Map sqlParamMap = new HashMap(); Map insertMap = new HashMap(); Map resultMap = new HashMap(); Map partobjMap = new HashMap(); for(int i=0; i"+ fileMap); System.out.println(filepathFull+CommonUtils.checkNull((String)insertMap.get("PART_NO")+".dwg")); //처부파일 가져오기 File file = new File(filepathFull+CommonUtils.checkNull((String)insertMap.get("PART_NO")+".dwg")); System.out.println("file --->"+ file.getName()); System.out.println("checkBeforeFile(file)" +checkBeforeFile(file)); if(checkBeforeFile(file)){ //첨부저장이 존재 할때만 DWG 저장 sqlSession.insert("partMng.insertpartfileInfo", fileMap); } //pdf file = new File(filepath+projectNo+File.separator+unitName+File.separator+CommonUtils.checkNull((String)insertMap.get("PART_NO")+".pdf")); if(checkBeforeFile(file)){ fileMap.isEmpty(); //첨부저장이 존재 할때만 PDF 저장 fileMap.put("OBJID", CommonUtils.createObjId()); fileMap.put("TARGET_OBJID", part_objid); fileMap.put("SAVED_FILE_NAME", CommonUtils.checkNull((String)insertMap.get("PART_NO")+".pdf")); fileMap.put("REAL_FILE_NAME",CommonUtils.checkNull((String)insertMap.get("PART_NO")+".pdf")); fileMap.put("DOC_TYPE" ,"2D_PDF_CAD"); fileMap.put("DOC_TYPE_NAME","2D(PDF) CAD 첨부파일"); fileMap.put("FILE_SIZE","167941"); fileMap.put("FILE_EXT","PDF"); //첨부저장이 존재 할때만 DWG 저장 sqlSession.insert("part.insertpartfileInfo", fileMap); } */ } System.out.println(" insertMap--->"+insertMap); }//end of gridDataList sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); throw e; }finally{ sqlSession.close(); } } /** * CSV 파일의 인코딩을 자동으로 감지합니다. * UTF-8 → CP949 → EUC-KR 순서로 시도 */ private String detectFileEncoding(File file) { // 시도할 인코딩 목록 (Windows Excel CSV 기본 인코딩 우선) String[] encodings = {"CP949", "UTF-8", "EUC-KR", "MS949"}; for (String encoding : encodings) { try (FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis, encoding); BufferedReader br = new BufferedReader(isr)) { // 처음 몇 줄을 읽어서 깨진 문자 여부 확인 String line; int lineCount = 0; boolean hasBrokenChar = false; while ((line = br.readLine()) != null && lineCount < 10) { // 깨진 문자 검사 (� 또는 replacement character) if (line.contains("\uFFFD") || line.contains("?")) { hasBrokenChar = true; break; } lineCount++; } // 깨진 문자가 없으면 이 인코딩이 올바른 것으로 판단 if (!hasBrokenChar && lineCount > 0) { System.out.println("CSV 인코딩 감지 성공: " + encoding); return encoding; } } catch (Exception e) { // 이 인코딩으로 읽기 실패 시 다음 인코딩 시도 continue; } } // 모든 시도 실패 시 기본값 UTF-8 반환 System.out.println("CSV 인코딩 감지 실패, 기본값 UTF-8 사용"); return "UTF-8"; } /** * CSV 파일 파싱 (엑셀과 동일한 형식으로 반환) * 첫 번째 열이 "수준"인 경우 계층 구조를 자동으로 파악 */ private ArrayList parsingCsvFile(String path, String fileName, SqlSession sqlSession) throws Exception { ArrayList resultList = new ArrayList(); BufferedReader br = null; try { File csvFile = new File(path + "\\" + fileName); // 인코딩 자동 감지: UTF-8 → CP949 → EUC-KR 순서로 시도 String detectedEncoding = detectFileEncoding(csvFile); System.out.println("CSV 파일 인코딩 감지: " + detectedEncoding); FileInputStream fis = new FileInputStream(csvFile); InputStreamReader isr = new InputStreamReader(fis, detectedEncoding); br = new BufferedReader(isr); // UTF-8 BOM 제거 (EF BB BF) - UTF-8인 경우에만 if ("UTF-8".equals(detectedEncoding)) { br.mark(1); if (br.read() != 0xFEFF) { br.reset(); // BOM이 아니면 처음으로 되돌림 } } String line; int rowIndex = 0; // 모든 자품번 수집 및 수준별 품번 매핑 Set allPartNumbers = new HashSet<>(); List allRows = new ArrayList<>(); Map levelToPartNoMap = new HashMap<>(); // 수준 -> 품번 매핑 Map depthToPartNoMap = new HashMap<>(); // 깊이 -> 품번 매핑 (숫자만 있는 경우) while ((line = br.readLine()) != null) { String[] values = line.split(","); allRows.add(values); // 헤더가 아닌 경우 품번 수집 if (rowIndex > 0 && values.length > 1) { String level = values[0].trim(); // 수준 String partNo = values[1].trim(); // 품번 // CSV 큰따옴표 제거 if (level.startsWith("\"") && level.endsWith("\"") && level.length() > 1) { level = level.substring(1, level.length() - 1); } if (partNo.startsWith("\"") && partNo.endsWith("\"") && partNo.length() > 1) { partNo = partNo.substring(1, partNo.length() - 1); } if (!StringUtils.isBlank(partNo)) { allPartNumbers.add(partNo); if (!StringUtils.isBlank(level)) { levelToPartNoMap.put(level, partNo); // 숫자만 있는 경우를 위한 깊이 매핑 try { int depth = Integer.parseInt(level); depthToPartNoMap.put(depth, partNo); } catch (NumberFormatException e) { // 숫자가 아니면 무시 (1.1, 1.4.1 같은 형식) } } } } rowIndex++; } // 데이터 파싱 rowIndex = 0; Map currentDepthPartNoMap = new HashMap<>(); // 현재 처리 중인 각 깊이별 최신 품번 for (String[] values : allRows) { if (rowIndex == 0) { // 헤더 건너뛰기 rowIndex++; continue; } if (values.length < 11) { // 최소 11개 컬럼 필요 (수준 포함) rowIndex++; continue; } Map partMap = new HashMap(); AtomicInteger emptyColCnt = new AtomicInteger(0); String noteMsg = ""; int colIndex = 0; // 각 컬럼 파싱 (CSV: 수준, 품번, 품명, 수량, ...) String level = getCsvValue(values, colIndex++, emptyColCnt); // 0: 수준 String partNo = getCsvValue(values, colIndex++, emptyColCnt); // 1: 품번 String partName = getCsvValue(values, colIndex++, emptyColCnt); // 2: 품명 String qty = getCsvValue(values, colIndex++, emptyColCnt); // 3: 수량 String itemQty = getCsvValue(values, colIndex++, emptyColCnt); // 4: 항목수량 String material = getCsvValue(values, colIndex++, emptyColCnt); // 5: 재료 String heatTreatmentHardness = getCsvValue(values, colIndex++, emptyColCnt); // 6: 열처리경도 String heatTreatmentMethod = getCsvValue(values, colIndex++, emptyColCnt); // 7: 열처리방법 String surfaceTreatment = getCsvValue(values, colIndex++, emptyColCnt); // 8: 표면처리 String supplier = getCsvValue(values, colIndex++, emptyColCnt); // 9: 공급업체 String partType = getCsvValue(values, colIndex++, emptyColCnt); // 10: 범주이름 // 수준으로부터 부모 품번 찾기 String parentPartNo = ""; if (!StringUtils.isBlank(level)) { // 숫자만 있는 경우 (1, 2, 3, 4 등) try { int currentDepth = Integer.parseInt(level); // 현재 깊이의 품번 저장 (다음 행에서 참조할 수 있도록) if (!StringUtils.isBlank(partNo)) { currentDepthPartNoMap.put(currentDepth, partNo); } // 부모 찾기: 바로 이전 깊이의 최신 품번 if (currentDepth > 1) { int parentDepth = currentDepth - 1; if (currentDepthPartNoMap.containsKey(parentDepth)) { parentPartNo = currentDepthPartNoMap.get(parentDepth); } } } catch (NumberFormatException e) { // 숫자가 아닌 경우 (1.1, 1.4.1 등) - 기존 로직 사용 String parentLevel = getParentLevel(level); if (!StringUtils.isBlank(parentLevel) && levelToPartNoMap.containsKey(parentLevel)) { parentPartNo = levelToPartNoMap.get(parentLevel); } } } // 유효성 검증 if(!StringUtils.isBlank(parentPartNo) && rowIndex > 2) { if(!allPartNumbers.contains(parentPartNo)) { noteMsg += "모품번 미존재:" + parentPartNo + ";"; } } // PART_TYPE 코드 조회 String partTypeCode = ""; if(!StringUtils.isBlank(partType) && rowIndex > 2) { Map sqlParamMap = new HashMap(); sqlParamMap.put("CODE_NAME", partType); String partNoForCheck = CommonUtils.checkNull(partNo); sqlParamMap.put("partNo", partNoForCheck); Map partTypeMap = sqlSession.selectOne("partMng.parttypeInfo", sqlParamMap); if(null != partTypeMap && !StringUtils.isBlank((String)partTypeMap.get("code_id"))){ partTypeCode = (String)partTypeMap.get("code_id"); } else { noteMsg += "부품유형 확인:" + partType + ";"; } } else if(!StringUtils.isBlank(partType) && rowIndex <= 2) { Map sqlParamMap = new HashMap(); sqlParamMap.put("CODE_NAME", partType); Map partTypeMap = sqlSession.selectOne("partMng.parttypeInfo", sqlParamMap); if(null != partTypeMap && !StringUtils.isBlank((String)partTypeMap.get("code_id"))){ partTypeCode = (String)partTypeMap.get("code_id"); } } // 공급업체 - MAKER 컬럼에 텍스트로 저장 (2025-10-29) String makerValue = supplier; // 공급업체명을 그대로 사용 /* 이전 공급업체 코드 조회 방식 (주석처리) String supplyCode = ""; if(!StringUtils.isBlank(supplier)) { Map sqlParamMap = new HashMap(); sqlParamMap.put("SUPPLY_NAME", supplier); Map supplyMap = sqlSession.selectOne("partMng.getSupplyCodeByName", sqlParamMap); if(null != supplyMap && supplyMap.get("objid") != null){ // OBJID는 BIGINT 타입이므로 String으로 변환 supplyCode = String.valueOf(supplyMap.get("objid")); } else { noteMsg += "공급업체 확인:" + supplier + ";"; } } */ // Map에 데이터 저장 partMap.put("LEVEL", level); // 수준 값 (화면 표시용) partMap.put("PARENT_PART_NO", parentPartNo); // 실제 부모 품번 (저장용) partMap.put("PART_NO", partNo); partMap.put("PART_NAME", partName); partMap.put("QTY", qty); partMap.put("ITEM_QTY", itemQty); partMap.put("MATERIAL", material); partMap.put("HEAT_TREATMENT_HARDNESS", heatTreatmentHardness); partMap.put("HEAT_TREATMENT_METHOD", heatTreatmentMethod); partMap.put("SURFACE_TREATMENT", surfaceTreatment); partMap.put("MAKER", makerValue); // MAKER에 저장 partMap.put("PART_TYPE", partTypeCode); partMap.put("NOTE", noteMsg); if(!StringUtils.isBlank(noteMsg) || emptyColCnt.intValue() < 9) { resultList.add(partMap); } rowIndex++; } } catch (Exception e) { e.printStackTrace(); throw e; } finally { if (br != null) { try { br.close(); } catch (Exception e) { e.printStackTrace(); } } } return resultList; } /** * CSV 값 추출 헬퍼 메서드 */ private String getCsvValue(String[] values, int index, AtomicInteger emptyColCnt) { if (index >= values.length) { emptyColCnt.incrementAndGet(); return ""; } String value = values[index].trim(); // CSV 큰따옴표 제거 if (value.startsWith("\"") && value.endsWith("\"") && value.length() > 1) { value = value.substring(1, value.length() - 1); } if (StringUtils.isBlank(value)) { emptyColCnt.incrementAndGet(); } return value; } /** * 수준으로부터 부모 수준 찾기 * 예: "1.4.1" -> "1.4", "1.8" -> "1", "1" -> "" */ private String getParentLevel(String level) { if (StringUtils.isBlank(level)) { return ""; } // 마지막 점(.)의 위치 찾기 int lastDotIndex = level.lastIndexOf('.'); if (lastDotIndex > 0) { // 마지막 점 이전까지가 부모 수준 return level.substring(0, lastDotIndex); } // 점이 없으면 최상위 레벨이므로 부모 없음 return ""; } /** * BOM 복사를 위한 데이터 조회 (엑셀 파싱 형식과 동일하게 반환) */ public ArrayList getBomDataForCopy(HttpServletRequest request, Map paramMap) throws Exception{ ArrayList resultList = new ArrayList(); SqlSession sqlSession = null; try { sqlSession = SqlMapConfig.getInstance().getSqlSession(false); String bomReportObjid = CommonUtils.checkNull((String)paramMap.get("BOM_REPORT_OBJID")); if(StringUtils.isBlank(bomReportObjid)){ return resultList; } // BOM 구조 데이터 조회 (BOM_PART_QTY 테이블에서 직접 조회) Map sqlParam = new HashMap(); sqlParam.put("BOM_REPORT_OBJID", bomReportObjid); System.out.println("BOM_REPORT_OBJID: " + bomReportObjid); List bomPartList = sqlSession.selectList("partMng.getBomPartListForCopy", sqlParam); System.out.println("bomPartList size: " + bomPartList.size()); // 엑셀 파싱 형식으로 변환 for(Map bomData : bomPartList){ // PostgreSQL 소문자 결과를 대문자로 변환 bomData = CommonUtils.toUpperCaseMapKey(bomData); Map partMap = new HashMap(); // 모품번 조회 (PARENT_PART_NO가 OBJID이므로 실제 품번을 조회) String parentPartNo = ""; if(!StringUtils.isBlank((String)bomData.get("PARENT_PART_NO"))){ Map parentParam = new HashMap(); parentParam.put("OBJID", bomData.get("PARENT_PART_NO")); Map parentPart = (Map)sqlSession.selectOne("partMng.getPartInfoByObjid", parentParam); if(parentPart != null){ // PostgreSQL 소문자 결과를 대문자로 변환 parentPart = CommonUtils.toUpperCaseMapKey(parentPart); parentPartNo = CommonUtils.checkNull(parentPart.get("PART_NO")); } } partMap.put("PARENT_PART_NO", parentPartNo); partMap.put("PART_NO", CommonUtils.checkNull(bomData.get("PART_NO"))); partMap.put("PART_NAME", CommonUtils.checkNull(bomData.get("PART_NAME"))); partMap.put("QTY", CommonUtils.checkNull(bomData.get("QTY"))); partMap.put("ITEM_QTY", CommonUtils.checkNull(bomData.get("ITEM_QTY"))); partMap.put("MATERIAL", CommonUtils.checkNull(bomData.get("MATERIAL"))); partMap.put("HEAT_TREATMENT_HARDNESS", CommonUtils.checkNull(bomData.get("HEAT_TREATMENT_HARDNESS"))); partMap.put("HEAT_TREATMENT_METHOD", CommonUtils.checkNull(bomData.get("HEAT_TREATMENT_METHOD"))); partMap.put("SURFACE_TREATMENT", CommonUtils.checkNull(bomData.get("SURFACE_TREATMENT"))); partMap.put("SUPPLIER", CommonUtils.checkNull(bomData.get("SUPPLIER"))); partMap.put("PART_TYPE", CommonUtils.checkNull(bomData.get("PART_TYPE"))); partMap.put("NOTE", ""); // 복사 시 NOTE는 빈 값 resultList.add(partMap); } } catch(Exception e){ e.printStackTrace(); throw e; } finally { if(sqlSession != null){ sqlSession.close(); } } return resultList; } /** * 업로드된 Excel File을 통해 데이터를 Parsing 한다.(구조(bom)등록) * @param request * @param paramMap * @return */ public ArrayList parsingExcelFile(HttpServletRequest request,Map paramMap)throws Exception{ System.out.println("paramMap::"+paramMap); ArrayList resultList = new ArrayList(); ArrayList fileList = commonService.getFileList(paramMap); boolean logging = false; String resultColumn = "NOTE"; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); // 통합 템플릿으로 변경하면서 프로젝트 번호 검증은 선택사항으로 변경 String projectNo = ""; /* Map projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", paramMap); if(projectInfo != null) { projectNo = (String)projectInfo.get("project_no"); System.out.println("projectNo:"+projectNo); } */ if(null != fileList && 1 == fileList.size()){ HashMap fileMap = (HashMap)fileList.get(0); String path = CommonUtils.checkNull(fileMap.get("FILE_PATH")); String fileName = CommonUtils.checkNull(fileMap.get("SAVED_FILE_NAME")); // CSV 파일인 경우 (수준 기반 계층 구조) if (fileName.endsWith(".csv") || fileName.endsWith(".CSV")) { resultList = parsingCsvFile(path, fileName, sqlSession); // CSV 파일임을 표시 for(int i = 0; i < resultList.size(); i++) { Map partMap = (Map)resultList.get(i); partMap.put("IS_CSV", "Y"); } sqlSession.close(); return resultList; } // Excel 파일인 경우 FileInputStream fis = new FileInputStream(path+"\\"+fileName); Workbook workBook = null; if (fileName.endsWith(".xls") || fileName.endsWith(".XLS")) { workBook = new HSSFWorkbook(fis); } else if (fileName.endsWith(".xlsx") || fileName.endsWith(".XLSX")) { workBook = new XSSFWorkbook(fis); } Sheet sheet = workBook.getSheetAt(0); DataFormatter formatter = new DataFormatter(); int rows = sheet.getPhysicalNumberOfRows(); System.out.println("rows:"+rows); // 모든 자품번 수집 (첫 번째 열 '상태'는 건너뜀) Set allPartNumbers = new HashSet<>(); for (int rowIndex = 1; rowIndex < rows; rowIndex++) { // 2번째 행(index 1)부터 시작 (헤더 1줄 건너뜀) Row row = sheet.getRow(rowIndex); if (row != null) { String partNo = getCellValue(row, 2, formatter, new AtomicInteger(0)).trim(); // 품번 컬럼 (2번째 열) if (!StringUtils.isBlank(partNo)) { allPartNumbers.add(partNo); } } } int emptyRowCnt = 0; AtomicInteger emptyColCnt = new AtomicInteger(0); Map partNoUniqueMap = new HashMap(); for(int rowIndex= 1 ; rowIndex < rows ; rowIndex++){ // 2번째 행(index 1)부터 시작 (헤더 1줄 건너뜀) Row row = sheet.getRow(rowIndex); if(null != row){ emptyColCnt.set(0); Map partMap = new HashMap(); int columnIndex = 1; // 첫 번째 열(상태)은 건너뛰고 1부터 시작 // 통합 엑셀 컬럼 매핑 (첫 번째 열 '상태'는 건너뜀) // 1: 모품번(PARENT_PART_NO), 2: 품번(PART_NO), 3: 품명(PART_NAME) // 4: 수량(QTY), 5: 항목수량(ITEM_QTY), 6: 재료(MATERIAL) // 7: 열처리경도(HEAT_TREATMENT_HARDNESS), 8: 열처리방법(HEAT_TREATMENT_METHOD), 9: 표면처리(SURFACE_TREATMENT) // 10: 공급업체(SUPPLIER), 11: 범주이름(PART_TYPE) String parentPartNo = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 모품번 String partNo = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 품번 String partName = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 품명 String qty = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 수량 String itemQty = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 항목수량 String material = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 재료 String heatHardness = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 열처리경도 String heatMethod = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 열처리방법 String surfaceTreatment = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 표면처리 String supplier = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 공급업체 String partType = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 범주이름 // 빈 행 체크 if(StringUtils.isBlank(partNo) && StringUtils.isBlank(partName)){ emptyRowCnt++; if(emptyRowCnt > 3) break; continue; } emptyRowCnt = 0; // 유효성 검사 String noteMsg = ""; // 모품번 체크 if(StringUtils.isBlank(parentPartNo) && rowIndex > 1) { // 첫 번째 데이터 행(rowIndex = 1)은 체크하지 않음 noteMsg += "필수입력 - 모품번;"; } else if(!StringUtils.isBlank(parentPartNo) && !allPartNumbers.contains(parentPartNo.trim())) { noteMsg += "모품번이 자품번 목록에 없습니다: " + parentPartNo + ";"; } // 품번 체크 if (StringUtils.isBlank(partNo)) { noteMsg += "필수입력 - 품번;"; } else { if (partNoUniqueMap.containsKey(partNo)) { noteMsg += "품번 중복: " + partNo + ";"; } // 프로젝트번호 검증은 선택사항으로 변경 (필요시 주석 해제) /* if (rowIndex == 1 && !StringUtils.isBlank(projectNo) && !partNo.trim().equals(projectNo)) { noteMsg += "1레벨 품번에 프로젝트번호가 없습니다: " + partNo + ";"; } */ partNoUniqueMap.put(partNo, ""); } // 품명 체크 if(StringUtils.isBlank(partName)){ noteMsg += "필수입력 - 품명;"; } // 수량 체크 if (StringUtils.isBlank(qty)) { noteMsg += "필수입력 - 수량;"; } else { try { double qtyValue = Double.parseDouble(qty); if (qtyValue <= 0) { noteMsg += "수량은 0보다 커야 합니다: " + qty + ";"; } } catch (NumberFormatException e) { noteMsg += "수량은 숫자여야 합니다: " + qty + ";"; } } // PART_TYPE 코드 조회 String partTypeCode = ""; if(!StringUtils.isBlank(partType) && rowIndex > 2) { // 첫 번째, 두 번째 데이터 행(rowIndex 1,2)은 체크하지 않음 Map sqlParamMap = new HashMap(); sqlParamMap.put("CODE_NAME", partType); String partNoForCheck = CommonUtils.checkNull(partNo); sqlParamMap.put("partNo", partNoForCheck); Map partTypeMap = sqlSession.selectOne("partMng.parttypeInfo", sqlParamMap); if(null != partTypeMap && !StringUtils.isBlank((String)partTypeMap.get("code_id"))){ partTypeCode = (String)partTypeMap.get("code_id"); // 구매품표준인 경우 존재 여부 체크 if(partType.equals("구매품표준")){ List> partList = sqlSession.selectList("partMng.existPartNoCheck", sqlParamMap); if(null == partList || partList.isEmpty()){ noteMsg += "품번에 해당하는 구매품표준이 없습니다:" + partNoForCheck + ";"; } } } else { noteMsg += "부품유형 확인:" + partType + ";"; } } else if(!StringUtils.isBlank(partType) && rowIndex <= 2) { // 초기 행에서는 코드만 조회 Map sqlParamMap = new HashMap(); sqlParamMap.put("CODE_NAME", partType); Map partTypeMap = sqlSession.selectOne("partMng.parttypeInfo", sqlParamMap); if(null != partTypeMap && !StringUtils.isBlank((String)partTypeMap.get("code_id"))){ partTypeCode = (String)partTypeMap.get("code_id"); } } // 공급업체 - MAKER 컬럼에 텍스트로 저장 (2025-10-29) String makerValue = supplier; // 공급업체명을 그대로 사용 /* 이전 공급업체 코드 조회 방식 (주석처리) String supplyCode = ""; if(!StringUtils.isBlank(supplier)) { Map sqlParamMap = new HashMap(); sqlParamMap.put("SUPPLY_NAME", supplier); Map supplyMap = sqlSession.selectOne("partMng.getSupplyCodeByName", sqlParamMap); if(null != supplyMap && supplyMap.get("objid") != null){ // OBJID는 BIGINT 타입이므로 String으로 변환 supplyCode = String.valueOf(supplyMap.get("objid")); } else { noteMsg += "공급업체 확인:" + supplier + ";"; } } */ // Map에 데이터 저장 partMap.put("PARENT_PART_NO", parentPartNo); partMap.put("PART_NO", partNo); partMap.put("PART_NAME", partName); partMap.put("QTY", qty); partMap.put("ITEM_QTY", itemQty); partMap.put("MATERIAL", material); partMap.put("HEAT_TREATMENT_HARDNESS", heatHardness); partMap.put("HEAT_TREATMENT_METHOD", heatMethod); partMap.put("SURFACE_TREATMENT", surfaceTreatment); partMap.put("MAKER", makerValue); // MAKER에 저장 partMap.put("PART_TYPE", partTypeCode); partMap.put("NOTE", noteMsg); if(logging) logger.info("partMap:"+partMap); if(emptyColCnt.intValue() < 9) { // 모두 공백 아니면 담기 resultList.add(partMap); } } } } try{ sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } if(logging) { for (Object object : resultList) { logger.info("resultList object:"+object); } } return resultList; } /** * 스핀들용 엑셀 파싱 (기존 로직) */ public ArrayList parsingSpindleExcelFile(HttpServletRequest request,Map paramMap)throws Exception{ System.out.println("paramMap::"+paramMap); ArrayList resultList = new ArrayList(); ArrayList fileList = commonService.getFileList(paramMap); boolean logging = false; // true/false String resultColumn = "NOTE"; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); Map projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", paramMap); String projectNo = (String)projectInfo.get("project_no"); System.out.println("projectNo:"+projectNo); if(null != fileList && 1 == fileList.size()){ HashMap fileMap = (HashMap)fileList.get(0); String path = CommonUtils.checkNull(fileMap.get("FILE_PATH")); String fileName = CommonUtils.checkNull(fileMap.get("SAVED_FILE_NAME")); //boolean isLoggingBoolean = false; FileInputStream fis = new FileInputStream(path+"\\"+fileName); //XSSFWorkbook workBook = new XSSFWorkbook(fis); //FormulaEvaluator formulaEval = workBook.getCreationHelper().createFormulaEvaluator(); //XSSFSheet sheet = workBook.getSheetAt(0); Workbook workBook = null; if (fileName.endsWith(".xls") || fileName.endsWith(".XLS")) { workBook = new HSSFWorkbook(fis); } else if (fileName.endsWith(".xlsx") || fileName.endsWith(".XLSX")) { workBook = new XSSFWorkbook(fis); } Sheet sheet = workBook.getSheetAt(0); // 데이터 포멧터 DataFormatter formatter = new DataFormatter(); int rows = sheet.getPhysicalNumberOfRows(); System.out.println("rows:"+rows); // 모든 자품번 수집 Set allPartNumbers = new HashSet<>(); for (int rowIndex = 2; rowIndex < rows; rowIndex++) { Row row = sheet.getRow(rowIndex); if (row != null) { String partNo = getCellValue(row, 1, formatter, new AtomicInteger(0)).trim(); if (!StringUtils.isBlank(partNo)) { allPartNumbers.add(partNo); } } } int emptyRowCnt = 0; AtomicInteger emptyColCnt = new AtomicInteger(0); Map partNoUniqueMap = new HashMap(); for(int rowIndex= 2 ; rowIndex < rows ; rowIndex++){ //XSSFRow row = sheet.getRow(rowIndex); Row row = sheet.getRow(rowIndex); if(null != row){ int columnIndex = 0; emptyColCnt.set(0); Map partMap = new HashMap(); /* for(int columnIndex = 0 ; columnIndex < 11 ; columnIndex++){ XSSFCell cell = row.getCell(columnIndex); //데이버 유형별 get date String cellValue = ""; if(null == cell){ cellValue = ""; }else{ switch(cell.getCellType()){ case XSSFCell.CELL_TYPE_FORMULA: CellValue evaluate = formulaEval.evaluate(cell); if(7 == columnIndex){ if(isLoggingBoolean) System.out.println("****************************"); cellValue = Integer.toString((int)cell.getNumericCellValue()); if(isLoggingBoolean) System.out.println("cellValue1:"+cellValue); }else{ cellValue = evaluate.formatAsString(); if(!"#N/A".equals(cellValue)){ cellValue = cell.getStringCellValue(); } } if(isLoggingBoolean) System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_FORMULA_____:"+cellValue); break; case XSSFCell.CELL_TYPE_NUMERIC: cellValue = formatter.formatCellValue(cell); if(7 == columnIndex){ cellValue = cell.getNumericCellValue()+""; //cellValue = String.format("%.2f", Double.parseDouble(cellValue)); if(isLoggingBoolean) System.out.println("cellValue1:"+cellValue); }else{ cellValue = cell.getNumericCellValue()+""; if(isLoggingBoolean) System.out.println("cellValue2:"+cellValue); } if(isLoggingBoolean) System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_NUMERIC:"+cellValue); break; case XSSFCell.CELL_TYPE_STRING: cellValue = cell.getStringCellValue()+""; if(isLoggingBoolean) System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_STRING:"+cellValue); break; case XSSFCell.CELL_TYPE_BLANK: cellValue = cell.getBooleanCellValue()+""; if(isLoggingBoolean) System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_BLANK:"+cellValue); break; case XSSFCell.CELL_TYPE_ERROR: cellValue = cell.getErrorCellValue()+""; if(isLoggingBoolean) System.out.println(columnIndex+":"+"XSSFCell.CELL_TYPE_ERROR:"+cellValue); break; } } if("false".equals(cellValue)){ cellValue = ""; } */ //모품번 String cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); // if(0 == columnIndex){ // if(!"".equals(cellValue)){ Map sqlParamMap = new HashMap(); Map sqlResultMap = new HashMap(); partMap.put("PARENT_PART_NO", cellValue.trim()); if(StringUtils.isBlank(cellValue) && rowIndex > 2) { // 첫 번째 데이터 행(rowIndex = 2)은 체크하지 않음 setErrMapByExcel(resultColumn, resultList, partMap, true, "필수입력 - 모품번 "+cellValue, cellValue); }else if(!StringUtils.isBlank(cellValue) && !allPartNumbers.contains(cellValue.trim())) { setErrMapByExcel(resultColumn, resultList, partMap, true, "모품번이 자품번 목록에 없습니다: " + cellValue, cellValue); } // } //sqlMap.put("PARENT_PART_NO", cellValue.trim()); // } //자품번 // if(1 == columnIndex){ /*if("".equals(cellValue)){ break; }*/ cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); partMap.put("PART_NO", cellValue.trim()); //partNoUniqueMap.put(cellValue,""); //sqlMap.put("PART_NO", cellValue.trim()); if (StringUtils.isBlank(cellValue)) { setErrMapByExcel(resultColumn, resultList, partMap, true, "필수입력 - 자품번 " + cellValue, cellValue); } else { if (partNoUniqueMap.containsKey(cellValue)) { setErrMapByExcel(resultColumn, resultList, partMap, true, "품번중복 " + cellValue, cellValue); } // 첫 번째 데이터 행(rowIndex == 2)에 대해 추가 검증 if (rowIndex == 2 && !cellValue.trim().equals(projectNo)) { setErrMapByExcel(resultColumn, resultList, partMap, true, "1레벨 자품번에 프로젝트번호가 없습니다: " + cellValue, cellValue); } // 모든 유효한 자품번에 대해 중복 체크를 위해 맵에 추가 partNoUniqueMap.put(cellValue, ""); } //System.out.println("partNoUniqueMap:"+partNoUniqueMap); // } //품명 // if(2 == columnIndex){ cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); partMap.put("PART_NAME", cellValue.trim()); //sqlMap.put("PART_NAME", cellValue.trim()); if(CommonUtils.isBlank(cellValue)){ setErrMapByExcel(resultColumn, resultList, partMap, true, "필수입력 - 품명", cellValue); }else{ } //System.out.println("cellValue123::"+cellValue); // } //수량 // if(3 == columnIndex){ String qtyCellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); if (CommonUtils.isBlank(qtyCellValue)) { setErrMapByExcel(resultColumn, resultList, partMap, true, "필수입력 - 수량", qtyCellValue); } else { try { double qtyValue = Double.parseDouble(qtyCellValue); if (qtyValue <= 0) { setErrMapByExcel(resultColumn, resultList, partMap, true, "수량은 0보다 커야 합니다: " + qtyCellValue, qtyCellValue); } else { partMap.put("QTY", qtyCellValue); } } catch (NumberFormatException e) { setErrMapByExcel(resultColumn, resultList, partMap, true, "수량은 숫자여야 합니다: " + qtyCellValue, qtyCellValue); } } // partMap.put("QTY", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //partMap.put("QTY", cellValue.trim()); //sqlMap.put("QTY", cellValue.trim()); // } //재질 // if(4 == columnIndex){ partMap.put("MATERIAL", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //partMap.put("MATERIAL", cellValue.trim()); //sqlMap.put("MATERIAL", cellValue.trim()); // } //규격 // if(5 == columnIndex){ partMap.put("SPEC", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //partMap.put("SPEC", cellValue.trim()); //sqlMap.put("SPEC", cellValue.trim()); // } //후처리 // if(6 == columnIndex){ partMap.put("POST_PROCESSING", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //partMap.put("POST_PROCESSING", cellValue.trim()); //sqlMap.put("POST_PROCESSING", cellValue.trim()); // } //MAKER // if(7 == columnIndex){ partMap.put("MAKER", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //partMap.put("MAKER", cellValue.trim()); //sqlMap.put("MAKER", cellValue.trim()); // } //부품유형 // if(8 == columnIndex){ /* if(cellValue.trim().equals("구매품")){ partMap.put("PART_TYPE", "0000063"); sqlMap.put("PART_TYPE", "0000063"); }else if(cellValue.trim().equals("제작품")){ partMap.put("PART_TYPE", "0000064"); sqlMap.put("PART_TYPE","0000064"); }else if(cellValue.trim().equals("사급품")){ partMap.put("PART_TYPE", "0000065"); sqlMap.put("PART_TYPE","0000065"); }else if(cellValue.trim().equals("표준품")){ partMap.put("PART_TYPE", "0000085"); sqlMap.put("PART_TYPE","0000085"); }*/ cellValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); partMap.put("PART_TYPE", columnIndex); //sqlMap.put("PART_TYPE",""); if(rowIndex > 3) { // 첫 번째, 두 번째 데이터 행은 체크하지 않음 if(CommonUtils.isBlank(cellValue)) { setErrMapByExcel(resultColumn, resultList, partMap, true, "필수입력 - 부품유형", cellValue); } else { sqlParamMap.clear(); sqlResultMap.clear(); sqlParamMap.put("CODE_NAME", cellValue); String partNo = CommonUtils.checkNull(partMap.get("PART_NO")); sqlParamMap.put("partNo", partNo); Map partType = sqlSession.selectOne("partMng.parttypeInfo", sqlParamMap); if(null!=partType && !StringUtils.isBlank((String)partType.get("code_id"))){ partMap.put("PART_TYPE", partType.get("code_id")); sqlResultMap.put("PART_TYPE",partType.get("code_id")); if(cellValue.equals("구매품표준")){ List> partList = sqlSession.selectList("partMng.existPartNoCheck", sqlParamMap); if(null == partList || partList.isEmpty()){ setErrMapByExcel(resultColumn, resultList, partMap, true, "품번에 해당하는 구매품표준이 없습니다:"+partNo, cellValue); }else{ } } } else { setErrMapByExcel(resultColumn, resultList, partMap, true, "부품유형 확인:"+cellValue, cellValue); } } } else { if(!CommonUtils.isBlank(cellValue)){ sqlParamMap.clear(); sqlResultMap.clear(); sqlParamMap.put("CODE_NAME", cellValue); Map partType = sqlSession.selectOne("partMng.parttypeInfo", sqlParamMap); if(null!=partType && !StringUtils.isBlank((String)partType.get("code_id"))){ partMap.put("PART_TYPE", partType.get("code_id")); sqlResultMap.put("PART_TYPE",partType.get("code_id")); } } } //Map parttype = null; //if(!"".equals(CommonUtils.nullToEmpty(cellValue.trim()))){ // paramMap.put("CODE_NAME", cellValue.trim()); // parttype = sqlSession.selectOne("partMng.parttypeInfo", paramMap); // if(null!=parttype){ // partMap.put("PART_TYPE", parttype.get("code_id")); //sqlMap.put("PART_TYPE",parttype.get("code_id")); // } //} // } //REMARK // if(9 == columnIndex){ partMap.put("REMARK", getCellValue(row, columnIndex++, formatter, emptyColCnt)); //sqlMap.put("REMARK", cellValue.trim()); //resultList.add(partMap); //if(isLoggingBoolean) // System.out.println("partMap:"+partMap); //break; // } //비고 /*partMap.put("QTY", cellValue.trim()); sqlMap.put("QTY", cellValue.trim()); sqlMap.put("BOM_REPORT_OBJID", CommonUtils.checkNull((String)paramMap.get("targetObjId"))); sqlMap.put("OBJID", CommonUtils.createObjId()); sqlMap.put("CHILD_OBJID", CommonUtils.createObjId()); String PART_NO = CommonUtils.checkNull((String)sqlMap.get("PART_NO")); String PARENT_PART_NO = CommonUtils.checkNull((String)sqlMap.get("PARENT_PART_NO"));*/ //sqlSession.insert("partMng.relatePartTempInfo", sqlMap); if(logging) logger.info("partMap:"+partMap); if(emptyColCnt.intValue() < 8) { //모두 공백 아니면 담기 resultList.add(partMap); }else { emptyRowCnt++; } if(emptyRowCnt > 3) //3줄이상 빈줄이면 중지 break; /*}*/ } } } try{ sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } if(logging) { for (Object object : resultList) { logger.info("resultList object:"+object); } } return resultList; } /** * 장비용 엑셀 파싱 (새로운 로직) * Level=수준, Name=번호=PART_NO, Specification Title=항목 설명=PART_NAME * Qty=수량=QTY, Material=재료=MATERIAL * Hardness=열처리경도, 열처리방법(장비만), Heat Surface treatment=표면처리 * Production Make Buy Code=범주 이름=PART_TYPE */ public ArrayList parsingEquipmentExcelFile(HttpServletRequest request,Map paramMap)throws Exception{ System.out.println("장비용 엑셀 파싱 시작"); ArrayList resultList = new ArrayList(); ArrayList fileList = commonService.getFileList(paramMap); boolean logging = false; String resultColumn = "NOTE"; SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); Map projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", paramMap); String projectNo = (String)projectInfo.get("project_no"); System.out.println("projectNo:"+projectNo); if(null != fileList && 1 == fileList.size()){ HashMap fileMap = (HashMap)fileList.get(0); String path = CommonUtils.checkNull(fileMap.get("FILE_PATH")); String fileName = CommonUtils.checkNull(fileMap.get("SAVED_FILE_NAME")); FileInputStream fis = new FileInputStream(path+"\\"+fileName); Workbook workBook = null; if (fileName.endsWith(".xls") || fileName.endsWith(".XLS")) { workBook = new HSSFWorkbook(fis); } else if (fileName.endsWith(".xlsx") || fileName.endsWith(".XLSX")) { workBook = new XSSFWorkbook(fis); } Sheet sheet = workBook.getSheetAt(0); DataFormatter formatter = new DataFormatter(); int rows = sheet.getPhysicalNumberOfRows(); System.out.println("rows:"+rows); // 모든 자품번 수집 Set allPartNumbers = new HashSet<>(); for (int rowIndex = 2; rowIndex < rows; rowIndex++) { Row row = sheet.getRow(rowIndex); if (row != null) { String partNo = getCellValue(row, 1, formatter, new AtomicInteger(0)).trim(); // 번호 컬럼 if (!StringUtils.isBlank(partNo)) { allPartNumbers.add(partNo); } } } int emptyRowCnt = 0; AtomicInteger emptyColCnt = new AtomicInteger(0); Map partNoUniqueMap = new HashMap(); for(int rowIndex= 2 ; rowIndex < rows ; rowIndex++){ Row row = sheet.getRow(rowIndex); if(null != row){ emptyColCnt.set(0); Map partMap = new HashMap(); // 장비 엑셀 컬럼 매핑 // 0: 수준(Level), 1: 번호(Name/PART_NO), 2: 항목 설명(Specification Title/PART_NAME) // 3: 수량(Qty), 4: 항목 수량, 5: 재료(Material) // 6: 열처리경도(Hardness), 7: 열처리방법, 8: 표면처리(Heat Surface treatment) // 9: 공급업체(Maker), 10: 범주 이름(Production Make Buy Code/PART_TYPE) String level = getCellValue(row, 0, formatter, emptyColCnt).trim(); // 수준 String partNo = getCellValue(row, 1, formatter, emptyColCnt).trim(); // 번호 String partName = getCellValue(row, 2, formatter, emptyColCnt).trim(); // 항목 설명 String qty = getCellValue(row, 3, formatter, emptyColCnt).trim(); // 수량 String itemQty = getCellValue(row, 4, formatter, emptyColCnt).trim(); // 항목 수량 String material = getCellValue(row, 5, formatter, emptyColCnt).trim(); // 재료 String hardness = getCellValue(row, 6, formatter, emptyColCnt).trim(); // 열처리경도 String heatMethod = getCellValue(row, 7, formatter, emptyColCnt).trim(); // 열처리방법 String surfaceTreatment = getCellValue(row, 8, formatter, emptyColCnt).trim(); // 표면처리 String supplier = getCellValue(row, 9, formatter, emptyColCnt).trim(); // 공급업체 String partType = getCellValue(row, 10, formatter, emptyColCnt).trim(); // 범주 이름 // 빈 행 체크 if(StringUtils.isBlank(partNo) && StringUtils.isBlank(partName)){ emptyRowCnt++; if(emptyRowCnt > 3) break; continue; } emptyRowCnt = 0; // 모품번 찾기 String parentPartNo = ""; if(!StringUtils.isBlank(level) && !level.equals("1")){ // 상위 레벨 찾기 for(int i = rowIndex - 1; i >= 2; i--){ Row prevRow = sheet.getRow(i); if(prevRow != null){ String prevLevel = getCellValue(prevRow, 0, formatter, new AtomicInteger(0)).trim(); String prevPartNo = getCellValue(prevRow, 1, formatter, new AtomicInteger(0)).trim(); if(!StringUtils.isBlank(prevLevel)){ double currentLevelNum = parseLevel(level); double prevLevelNum = parseLevel(prevLevel); if(prevLevelNum < currentLevelNum){ parentPartNo = prevPartNo; break; } } } } } // 유효성 검사 String noteMsg = ""; // 프로젝트번호 체크 (1레벨만) if("1".equals(level) && !partNo.contains(projectNo)){ noteMsg += "1레벨 품번에 프로젝트번호 없음;"; } // 중복 체크 if(partNoUniqueMap.containsKey(partNo)){ noteMsg += "품번 중복;"; }else{ partNoUniqueMap.put(partNo, partNo); } // 모품번 존재 여부 체크 if(!StringUtils.isBlank(parentPartNo) && !allPartNumbers.contains(parentPartNo)){ noteMsg += "모품번 없음;"; } // PART_TYPE 코드 조회 String partTypeCode = ""; String partTypeTitle = partType; // 원본 텍스트 저장 if(!StringUtils.isBlank(partType)){ Map sqlParamMap = new HashMap(); sqlParamMap.put("code_name", partType); Map partTypeMap = sqlSession.selectOne("partMng.parttypeInfo", sqlParamMap); if(null != partTypeMap && !StringUtils.isBlank((String)partTypeMap.get("code_id"))){ partTypeCode = (String)partTypeMap.get("code_id"); } } // Map에 데이터 저장 partMap.put("PARENT_PART_NO", parentPartNo); partMap.put("PART_NO", partNo); partMap.put("PART_NAME", partName); partMap.put("QTY", qty); partMap.put("MATERIAL", material); partMap.put("SPEC", hardness + (StringUtils.isBlank(heatMethod) ? "" : " / " + heatMethod)); // 열처리경도 + 열처리방법 partMap.put("POST_PROCESSING", surfaceTreatment); // 표면처리 partMap.put("MAKER", supplier); // 공급업체 partMap.put("PART_TYPE", partTypeCode); // 범주 코드 partMap.put("PART_TYPE_TITLE", partTypeTitle); // 범주 이름 (화면 표시용) partMap.put("REMARK", ""); // 비고 partMap.put("NOTE", noteMsg); if(logging) System.out.println("partMap:"+partMap); if(emptyColCnt.intValue() < 8) { resultList.add(partMap); } } } } try{ sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } if(logging) { for (Object object : resultList) { System.out.println("resultList object:"+object); } } return resultList; } /** * Level 문자열을 숫자로 파싱 (1, 1.1, 1.2.3 등) */ private double parseLevel(String level){ if(StringUtils.isBlank(level)) return 0; String[] parts = level.split("\\."); double result = 0; for(int i = 0; i < parts.length; i++){ try{ result += Double.parseDouble(parts[i]) / Math.pow(100, i); }catch(Exception e){ // 파싱 실패시 0 반환 } } return result; } /** * 품번 중복 체크 (PART_BOM_REPORT 테이블) * @param request * @param paramMap * @return 중복 개수 */ public int checkDuplicatePartNo(HttpServletRequest request, Map paramMap){ int count = 0; SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); count = sqlSession.selectOne("partMng.checkDuplicatePartNo", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ if(sqlSession != null){ sqlSession.close(); } } return count; } //bom 구조등록(엑셀업로드) public void savePartBomMaster(HttpServletRequest request,Map paramMap) throws Exception{ SqlSession sqlSession = null; Map sqlMap = new HashMap(); try{ List> gridDataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("jqGrid"))); sqlSession = SqlMapConfig.getInstance().getSqlSession(false); // 기존 BOM이 있으면 해당 BOM을 수정, 없으면 새로 생성 String objid = CommonUtils.checkNull(paramMap.get("importPopObjid")); String bomobjid = CommonUtils.checkNull(paramMap.get("BOM_REPORT_OBJID")); if(!"".equals(bomobjid)){ // 기존 BOM 수정: 기존 파트 데이터 삭제 objid = bomobjid; Map deleteParam = new HashMap(); deleteParam.put("BOM_REPORT_OBJID", objid); sqlSession.delete("partMng.deleteBomPartQtyByBomObjid", deleteParam); // BOM 상태 초기화 Map resetParam = new HashMap(); resetParam.put("OBJID", objid); sqlSession.update("partMng.resetBomReportStatus", resetParam); } String masterObjid = objid; // BOM부터 만들고 프로젝트에 연결하도록 변경 - 프로젝트 유닛 정보 조회 주석처리 /* String unitCode = CommonUtils.checkNull(paramMap.get("UNIT_CODE")); String contracObjid = CommonUtils.checkNull(paramMap.get("CONTRACT_OBJID")); sqlMap.put("OBJID", contracObjid); Map projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", sqlMap); String projectNo = (String)projectInfo.get("project_no"); String masterProjectNo = projectNo; sqlMap.put("unitCode", unitCode); Map unitInfoMap = (HashMap)sqlSession.selectOne("common.getUnitCodeList", sqlMap); String unitName = CommonUtils.checkNull(unitInfoMap.get("name")).replaceAll("\u00A0+", " "); String UNIT_NAME = CommonUtils.checkNull(unitInfoMap.get("name")); byte[] utf8Bytes = unitName.getBytes("UTF-8"); String utf8unitName = new String(utf8Bytes, "UTF-8"); String filepath = Constants.FILE_STORAGE+"\\PART_DATA\\"; String filepathFull = filepath+projectNo+File.separator+unitName+File.separator; */ // BOM부터 만들고 프로젝트에 연결하도록 변경 - 멀티 프로젝트 처리 주석처리 /* boolean isMaster = true; boolean isMulti = false; for(int j=1; j<11; j++){ String APPLICATION_PROJECT_NO = CommonUtils.nullToEmpty((String)paramMap.get("APPLICATION_PROJECT_NO"+j)); //프로젝트 objid if(!CommonUtils.isBlank(APPLICATION_PROJECT_NO)) { isMulti = true; break; } } */ //BOM REPORT OBJID sqlMap.clear(); sqlMap.put("OBJID", objid); sqlMap.put("MULTI_YN", "N"); // 멀티 프로젝트 기능 비활성화 sqlMap.put("MULTI_MASTER_YN", "N"); //sqlMap.put("MULTI_MASTER_OBJID", masterObjid); sqlMap.put("CUSTOMER_OBJID", CommonUtils.checkNull((String)paramMap.get("CUSTOMER_OBJID"))); sqlMap.put("CONTRACT_OBJID", CommonUtils.checkNull((String)paramMap.get("CONTRACT_OBJID"))); sqlMap.put("UNIT_CODE", CommonUtils.checkNull((String)paramMap.get("UNIT_CODE"))); sqlMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID"))); // 제품구분, 품번, 품명, 버전 추가 sqlMap.put("PRODUCT_CD", CommonUtils.checkNull((String)paramMap.get("product_cd"))); sqlMap.put("PART_NO", CommonUtils.checkNull((String)paramMap.get("bom_part_no"))); sqlMap.put("PART_NAME", CommonUtils.checkNull((String)paramMap.get("bom_part_name"))); sqlMap.put("REVISION", CommonUtils.checkNull((String)paramMap.get("version"))); //bom report 저장 System.out.println("sqlMap ---->"+sqlMap); sqlSession.insert("partMng.createBOMReportStructureStandardInfo", sqlMap); // 그리드 데이터가 비어있으면 BOM 헤더만 생성하고 종료 if(gridDataList == null || gridDataList.isEmpty()) { System.out.println("=== 빈 E-BOM 생성 완료 (품번: " + sqlMap.get("PART_NO") + ", 품명: " + sqlMap.get("PART_NAME") + ") ==="); sqlSession.commit(); return; } // BOM 데이터 저장 (프로젝트 연결 없이) /* String newPartNo1Surffix = ""; String masterPartNo1 = ""; String UNIT_CODE2 = ""; Map sqlParamMap = new HashMap(); for(int j=0; j<11; j++){ //24032x? - 0은 master 동시건 String APPLICATION_OBJID = CommonUtils.nullToEmpty((String)paramMap.get("APPLICATION_OBJID"+j)); String APPLICATION_PROJECT_NO = CommonUtils.nullToEmpty((String)paramMap.get("APPLICATION_PROJECT_NO"+j)); //프로젝트 objid if(j == 0) { APPLICATION_PROJECT_NO = CommonUtils.checkNull(paramMap.get("CONTRACT_OBJID")); }else { isMaster = false; } if(!CommonUtils.isBlank(APPLICATION_PROJECT_NO)) { //bom master insert if(!isMaster) { sqlMap.clear(); sqlMap.put("OBJID", APPLICATION_PROJECT_NO); projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", sqlMap); projectNo = (String)projectInfo.get("project_no"); //프로젝트 no sqlParamMap.clear(); sqlParamMap.put("project_objid", APPLICATION_PROJECT_NO); sqlParamMap.put("unitName", UNIT_NAME); unitInfoMap = (HashMap)sqlSession.selectOne("common.getUnitCodeList", sqlParamMap); if(unitInfoMap == null || CommonUtils.isEmptyMap(unitInfoMap)) { throw new Exception(projectNo+"프로젝트에 "+UNIT_NAME + " UNIT이 존재하지 않습니다."); } unitName = CommonUtils.checkNull(unitInfoMap.get("name")).replaceAll("\u00A0+", " "); UNIT_CODE2 = CommonUtils.checkNull((String)unitInfoMap.get("code")); utf8Bytes = unitName.getBytes("UTF-8"); utf8unitName = new String(utf8Bytes, "UTF-8"); filepath = Constants.FILE_STORAGE+"\\PART_DATA\\"; filepathFull = filepath+projectNo+File.separator+unitName+File.separator; //BOM REPORT OBJID objid = CommonUtils.createObjId(); //키 새로 생성 sqlMap.clear(); sqlMap.put("OBJID", objid); sqlMap.put("MULTI_YN", "Y"); sqlMap.put("MULTI_MASTER_YN", "N"); sqlMap.put("MULTI_MASTER_OBJID", masterObjid); sqlMap.put("CUSTOMER_OBJID", CommonUtils.checkNull((String)paramMap.get("CUSTOMER_OBJID"))); sqlMap.put("CONTRACT_OBJID", APPLICATION_PROJECT_NO); sqlMap.put("UNIT_CODE", UNIT_CODE2); sqlMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID"))); //bom report 저장 System.out.println("sqlMap ---->"+sqlMap); sqlSession.insert("partMng.createBOMReportStructureStandardInfo", sqlMap); //엑셀 등록 //sqlSession.insert("partMng.relateexcelPartInfo", sqlMap); } */ Map insertMap = new HashMap(); Map resultMap = new HashMap(); Map partobjMap = new HashMap(); //bom qty/part insert (프로젝트 연결 없이 직접 저장) for(int i=0; i"+ fileMap); System.out.println(filepathFull+CommonUtils.checkNull((String)insertMap.get("PART_NO")+".dwg")); //처부파일 가져오기 File file = new File(filepathFull+CommonUtils.checkNull((String)insertMap.get("PART_NO")+".dwg")); System.out.println("file --->"+ file.getName()); System.out.println("checkBeforeFile(file)" +checkBeforeFile(file)); if(checkBeforeFile(file)){ //첨부저장이 존재 할때만 DWG 저장 sqlSession.insert("partMng.insertpartfileInfo", fileMap); } //pdf file = new File(filepath+projectNo+File.separator+unitName+File.separator+CommonUtils.checkNull((String)insertMap.get("PART_NO")+".pdf")); if(checkBeforeFile(file)){ fileMap.isEmpty(); //첨부저장이 존재 할때만 PDF 저장 fileMap.put("OBJID", CommonUtils.createObjId()); fileMap.put("TARGET_OBJID", part_no); fileMap.put("SAVED_FILE_NAME", CommonUtils.checkNull((String)insertMap.get("PART_NO")+".pdf")); fileMap.put("REAL_FILE_NAME",CommonUtils.checkNull((String)insertMap.get("PART_NO")+".pdf")); fileMap.put("DOC_TYPE" ,"2D_PDF_CAD"); fileMap.put("DOC_TYPE_NAME","2D(PDF) CAD 첨부파일"); fileMap.put("FILE_SIZE","167941"); fileMap.put("FILE_EXT","PDF"); //첨부저장이 존재 할때만 DWG 저장 sqlSession.insert("part.insertpartfileInfo", fileMap); } */ } String parent_part_no = ""; partobjMap.put("PART_NO", CommonUtils.checkNull((String)insertMap.get("PARENT_PART_NO"))); resultMap = (HashMap)sqlSession.selectOne("partMng.getPartObjid", partobjMap); if(null!=resultMap){ parent_part_no = CommonUtils.checkNull((String)resultMap.get("part_objid")); } String parent_objid =""; partobjMap.put("PART_NO", CommonUtils.checkNull((String)insertMap.get("PARENT_PART_NO"))); partobjMap.put("BOM_REPORT_OBJID", objid); // selectList로 변경 (중복 품번 대응) List resultList = sqlSession.selectList("partMng.getBomPartQtyObjid", partobjMap); if(resultList != null && resultList.size() > 0){ resultMap = (HashMap)resultList.get(0); // 첫 번째 결과 사용 parent_objid = CommonUtils.checkNull((String)resultMap.get("child_objid")); } insertMap.put("PARENT_OBJID", parent_objid); insertMap.put("CHILD_OBJID", CommonUtils.createObjId()); //part objId insertMap.put("PARENT_PART_NO", parent_part_no); insertMap.put("PART_NO", part_no); System.out.println(" insertMap--->"+insertMap); //BOM저장 // 기존 BOM 수정 시 deploy 상태는 설정하지 않음 (초기화된 상태 유지) sqlSession.insert("partMng.relatePartInfo", insertMap); }//end of gridDataList sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); throw e; }finally{ sqlSession.close(); } } static boolean checkBeforeFile(File file){ //파일이 존재하고 if(file.exists()){ //그 파일이 파일이고, 읽을 수 있다면 true를 리턴한다. if(file.isFile() && file.canRead()){ return true; } } return false; } /*dhchoi end*/ /*************************************************************************************************************************/ public Map setChangeDesignPartInfo(HttpServletRequest request, Map paramMap, Map targetPartInfoMap){ Map resultMap = new HashMap(); SqlSession sqlSession = null; //Map targetPartInfoMap = new HashMap(); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); //설변대상의 정보를 가져온다. setPartMngCommonCD(paramMap); // targetPartInfoMap = sqlSession.selectOne("partMng.partMngInfo", paramMap); // targetPartInfoMap = CommonUtils.toUpperCaseMapKey(targetPartInfoMap); if(null != targetPartInfoMap){ String beforePartObjId = CommonUtils.checkNull(targetPartInfoMap.get("OBJID")); String newPartObjId = CommonUtils.createObjId(); //resultMap = targetPartInfoMap; targetPartInfoMap.put("OBJID",newPartObjId); targetPartInfoMap.put("OBJID_ORG",beforePartObjId); targetPartInfoMap.put("STATUS","create"); targetPartInfoMap.put("IS_LAST","0"); List connectFileList = new ArrayList(); Map fileSqlMap = new HashMap(); fileSqlMap.put("targetObjId", beforePartObjId); connectFileList = sqlSession.selectList("common.getFileList", fileSqlMap); if(null != connectFileList && 0 < connectFileList.size()){ connectFileList = CommonUtils.toUpperCaseMapKey(connectFileList); for(int i=0;i resultMap = new HashMap(); SqlSession sqlSession = null; Map targetPartInfoMap = new HashMap(); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); //설변대상의 정보를 가져온다. setPartMngCommonCD(paramMap); targetPartInfoMap = sqlSession.selectOne("partMng.partMngInfo", paramMap); targetPartInfoMap = CommonUtils.toUpperCaseMapKey(targetPartInfoMap); if(null != targetPartInfoMap){ String beforePartObjId = CommonUtils.checkNull(targetPartInfoMap.get("OBJID")); String newPartObjId = CommonUtils.createObjId(); resultMap = targetPartInfoMap; resultMap.put("OBJID",newPartObjId); resultMap.put("STATUS","create"); resultMap.put("IS_LAST","0"); List connectFileList = new ArrayList(); Map fileSqlMap = new HashMap(); fileSqlMap.put("targetObjId", beforePartObjId); connectFileList = sqlSession.selectList("common.getFileList", fileSqlMap); if(null != connectFileList && 0 < connectFileList.size()){ connectFileList = CommonUtils.toUpperCaseMapKey(connectFileList); for(int i=0;i " +paramMap); sqlSession = SqlMapConfig.getInstance().getSqlSession(false); List> BomPartList = sqlSession.selectList("partMng.getSourceBomPartList", paramMap); String TARGET_REV = CommonUtils.checkNull(paramMap.get("TARGET_REV")); String BOM_REPORT_OBJID =""; if(!"".equals(TARGET_REV)){ //기존데이터 모두 삭제 sqlSession.delete("partMng.deleteBomPart", paramMap); BOM_REPORT_OBJID = TARGET_REV; }else{ //product_code Map info = new HashMap(); Map newMap = new HashMap(); newMap.put("product_code", CommonUtils.checkNull(paramMap.get("TARGET_PRODUCT_MGMT_OBJID"))); info = getBOMStructureRev(request,newMap); System.out.println("info ------> " +info); //Map PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN); BOM_REPORT_OBJID = CommonUtils.createObjId(); newMap.put("OBJID", BOM_REPORT_OBJID); newMap.put("TARGET_REV", info.get("REV")); newMap.put("TARGET_SPEC_NAME", CommonUtils.checkNull(paramMap.get("TARGET_SPEC_NAME"))); newMap.put("WRITER", person.getUserId()); //part_bom_report 저장 sqlSession.insert("partMng.insertPartBomReport", newMap); } for(int i=0; i 0) result = true; }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return result; } /** * PART 배포 목록 * @param paramMap * @return */ public List partMngDeployList(HttpServletRequest request,Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); // String countPerPage = CommonUtils.checkNull(request.getParameter("countPerPage"), Constants.ADMIN_COUNT_PER_PAGE+""); // paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage)); // // Map pageMap = (HashMap)sqlSession.selectOne("partMng.partMngListCnt", paramMap); // // // pageMap = (HashMap)CommonUtils.setPagingInfo(request, pageMap); // // paramMap.put("PAGE_END", CommonUtils.checkNull(pageMap.get("PAGE_END"))); // paramMap.put("PAGE_START", CommonUtils.checkNull(pageMap.get("PAGE_START"))); resultList = (ArrayList)sqlSession.selectList("partMng.partMngDeployList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } public ArrayList getPartLinkedBomContractList(Map paramMap){ ArrayList resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); resultList = CommonUtils.keyChangeUpperArrayList((ArrayList)sqlSession.selectList("partMng.partLinkedBomContractList", paramMap)); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * BOM 계약정보조회 * @param paramMap * @return */ public Map getBOMContractinfo(HttpServletRequest request,Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ resultMap = (HashMap)sqlSession.selectOne("partMng.getBOMContractinfo", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultMap); } public List existPartNoCheck(HttpServletRequest request,Map paramMap){ List> resultList = new ArrayList(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); //part 중복확인 resultList = sqlSession.selectList("partMng.existPartNoCheck", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * BOM 구조 Part 변경 * @param paramMap * @param partList * @return */ public boolean changeRelatePartInfo(HttpServletRequest request, Map paramMap){ boolean result = false; //System.out.println("paramMap:"+paramMap); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); HttpSession session = request.getSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); Map info = person.getLoginInfo(); String userId = CommonUtils.checkNull(info.get("userId")); try{ Map sqlParamMap = new HashMap(); sqlParamMap.put("BOM_REPORT_OBJID", CommonUtils.checkNull(paramMap.get("BOM_REPORT_OBJID"))); sqlParamMap.put("B_OBJID", CommonUtils.checkNull(paramMap.get("OBJID"))); sqlParamMap.put("RIGHT_OBJID", CommonUtils.checkNull(paramMap.get("rightObjId"))); sqlSession.update("partMng.changeRelatePartInfo", sqlParamMap); System.out.println("sqlParamMap1::"+sqlParamMap); sqlParamMap.put("OBJID", CommonUtils.checkNull(paramMap.get("leftPartObjid"))); sqlParamMap.put("PARENT_PART_OBJID", CommonUtils.checkNull(paramMap.get("leftObjId"))); sqlParamMap.put("PARENT_PART_NO", CommonUtils.checkNull(paramMap.get("leftPartNoQty"))); sqlParamMap.put("PARENT_QTY_CHILD_OBJID", CommonUtils.checkNull(paramMap.get("leftPartChildObjId"))); sqlParamMap.put("CHILD_OBJID", CommonUtils.createObjId()); sqlParamMap.put("CHANGE_TYPE", CommonUtils.checkNull(paramMap.get("CHANGE_TYPE"))); sqlParamMap.put("HIS_STATUS", "CHANGE"); sqlParamMap.put("CHANGE_OPTION", CommonUtils.checkNull(paramMap.get("CHANGE_OPTION"))); sqlParamMap.put("CHG_PART_OBJID", CommonUtils.checkNull(paramMap.get("rightObjId"))); sqlParamMap.put("CHG_PART_NO", CommonUtils.checkNull(paramMap.get("rightPartNo"))); sqlParamMap.put("CHG_PART_REV", CommonUtils.checkNull(paramMap.get("rightPartRev"))); sqlParamMap.put("STATUS", "adding"); sqlParamMap.put("WRITER", userId); System.out.println("sqlParamMap2::"+sqlParamMap); sqlSession.update("partMng.insertPartMngHistory",sqlParamMap); sqlSession.insert("partMng.changeStatusBomReport", sqlParamMap); result = true; sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); }finally{ sqlSession.close(); } return result; } /** * 도면 파일 정보 DB 저장 * @param fileMap 파일 정보 */ public void insertDrawingFile(Map fileMap) { SqlSession sqlSession = null; try { sqlSession = SqlMapConfig.getInstance().getSqlSession(false); sqlSession.insert("partMng.insertpartfileInfo", fileMap); sqlSession.commit(); } catch(Exception e) { e.printStackTrace(); if(sqlSession != null) { sqlSession.rollback(); } throw e; } finally { if(sqlSession != null) { sqlSession.close(); } } } }