package com.pms.controller; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.session.SqlSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.oreilly.servlet.MultipartRequest; import com.pms.common.FileRenameClass; import com.pms.common.JsonUtil; import com.pms.common.SqlMapConfig; import com.pms.common.bean.PersonBean; import com.pms.common.utils.CommonUtils; import com.pms.common.utils.Constants; import com.pms.service.CommonService; import com.pms.service.PartMgmtService; import com.pms.service.PartMngService; import com.pms.service.ProductMgmtService; import com.pms.service.ProjectConceptService; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; @Controller public class PartMngController { ProjectConceptService service = null; @Autowired PartMngService partMngService; @Autowired PartMgmtService partMgmtService; @Autowired ProductMgmtService productMgmtService; @Autowired CommonService commonService; @Autowired public void setProjectConceptService(ProjectConceptService service){ this.service = service; } /** * PART 등록 목록 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngTempList.do") public String partMngTempList(HttpServletRequest request, @RequestParam Map paramMap){ String page ="/partMng/partMngTempList"; Map code_map = new HashMap(); List list = new ArrayList(); String islast = CommonUtils.checkNull(paramMap.get("IS_LAST")); if("".equals(islast)){ paramMap.put("IS_LAST","0"); } paramMap.put("STATUS","create"); try { //list = CommonUtils.keyChangeUpperList(partMngService.partMngTempList(request,paramMap)); list = partMngService.partMngTempList(request,paramMap); code_map.put("WRITER", commonService.bizMakeOptionList("", (String)paramMap.get("WRITER"), "common.getUserselect")); //구매 PM code_map.put("product_code",commonService.bizMakeOptionList("", (String)paramMap.get("product_code"),"common.getProductCodeselect")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("code_map",code_map); request.setAttribute("LIST", list); return page; } /** * PART 등록 - PART 등록 목록 페이징 * @param request * @param paramMap * @return */ @ResponseBody @RequestMapping("/partMng/partMngTempGridList.do") public Map getPartMngTempGridListPaging(HttpServletRequest request, @RequestParam Map paramMap){ String islast = CommonUtils.checkNull(paramMap.get("IS_LAST")); if("".equals(islast)){ paramMap.put("IS_LAST","0"); } String status_arr [] = {"create","changing"}; //release paramMap.put("STATUS_ARR", status_arr); // paramMap.put("STATUS","create"); commonService.selectListPagingNew("partMng.partMngTempGridList", request, paramMap); return paramMap; } /** * PART 배포 목록 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngList.do") public String partMngList(HttpServletRequest request, @RequestParam Map paramMap){ String page ="/partMng/partMngList"; Map code_map = new HashMap(); List list = new ArrayList(); String searchRevision = CommonUtils.checkNull(paramMap.get("SEARCH_REVISION_RELEASE")); String actionType = CommonUtils.checkNull(paramMap.get("actionType")); String search = CommonUtils.checkNull(paramMap.get("search")); try { if("0".equals(searchRevision)){ paramMap.put("IS_LAST",""); }else if("1".equals(searchRevision)){ paramMap.put("IS_LAST",searchRevision); } code_map.put("product_code",commonService.bizMakeOptionList("", (String)paramMap.get("product_code"),"common.getProductCodeselect")); //고객사 code_map.put("customer_cd",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("customer_cd")),"common.getmatersupplyselect")); if("Y".equals(search)){ //list = CommonUtils.keyChangeUpperList(partMngService.getPartMngList(request,paramMap)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("code_map",code_map); request.setAttribute("LIST", list); if("excel".equals(actionType)){ page ="/partMng/partMngListExcel"; } return page; } /** * PART 배포 목록 - PART 배포 목록 페이징 * @param request * @param paramMap * @return */ @ResponseBody @RequestMapping("/partMng/partMngGridList.do") public Map getPartMngGridListPaging(HttpServletRequest request, @RequestParam Map paramMap){ String searchRevision = CommonUtils.checkNull(paramMap.get("SEARCH_REVISION_RELEASE")); String actionType = CommonUtils.checkNull(paramMap.get("actionType")); String search = CommonUtils.checkNull(paramMap.get("search")); if("0".equals(searchRevision)){ paramMap.put("IS_LAST",""); }else if("1".equals(searchRevision)){ paramMap.put("IS_LAST",searchRevision); } if("Y".equals(search)){ commonService.selectListPagingNew("partMng.partMngGridList", request, paramMap); } return paramMap; } /** * 설계변경 PART 목록 페이징 * @param request * @param paramMap * @return */ @ResponseBody @RequestMapping("/partMng/partMngChangeGridListPaging.do") public Map partMngChangeGridListPaging(HttpServletRequest request, @RequestParam Map paramMap){ /* String searchRevision = CommonUtils.checkNull(paramMap.get("SEARCH_REVISION_RELEASE")); String actionType = CommonUtils.checkNull(paramMap.get("actionType")); String search = CommonUtils.checkNull(paramMap.get("search")); if("0".equals(searchRevision)){ paramMap.put("IS_LAST",""); }else if("1".equals(searchRevision)){ paramMap.put("IS_LAST",searchRevision); } */ ArrayList resultList = commonService.selectListPagingNew("partMng.partMngChangeGridList", request, paramMap); //설변용 part정보 신규 생성 List resultList2 = new ArrayList(); if(CommonUtils.isNotEmpty(resultList) && !resultList.isEmpty()) { int idx = 0; String newPartObjId = ""; String beforePartObjId = ""; for (Map map : resultList) { if(idx == 0) { //맨 위파트만(대표) partMngService.setChangeDesignPartInfo(request, paramMap, map); newPartObjId = CommonUtils.checkNull(map.get("OBJID")); beforePartObjId = CommonUtils.checkNull(map.get("OBJID_ORG")); //CommonUtils.createObjId(); }else { //나머지는 대표 NEW OBJID로 교체 map.put("OBJID", newPartObjId); map.put("OBJID_ORG", beforePartObjId); } //break; //맨 위파트만(대표) idx++; resultList2.add(map); } } paramMap.remove("RESULTLIST"); paramMap.put("RESULTLIST", resultList2); return paramMap; } /** * 설계변경 PART 목록 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngChangeList.do") public String partMngChangeList(HttpServletRequest request, @RequestParam Map paramMap){ String page ="/partMng/partMngChangeList"; Map code_map = new HashMap(); List list = new ArrayList(); String searchRevision = CommonUtils.checkNull(paramMap.get("SEARCH_REVISION_RELEASE")); String actionType = CommonUtils.checkNull(paramMap.get("actionType")); String search = CommonUtils.checkNull(paramMap.get("search")); try { /* if("0".equals(searchRevision)){ paramMap.put("IS_LAST",""); }else if("1".equals(searchRevision)){ paramMap.put("IS_LAST",searchRevision); } */ code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)paramMap.get("CHANGE_OPTION"),"common.getCodeselect")); code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)paramMap.get("CHANGE_TYPE"),"common.getCodeselect")); code_map.put("product_code",commonService.bizMakeOptionList("", (String)paramMap.get("product_code"),"common.getProductCodeselect")); if("Y".equals(search)){ //list = CommonUtils.keyChangeUpperList(partMngService.getPartMngList(request,paramMap)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("code_map",code_map); request.setAttribute("LIST", list); if("excel".equals(actionType)){ page ="/partMng/partMngChangeListExcel"; } return page; } /** * PART 조회 팝업 호출 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngListPopUp.do") public String partMngListPopUp(HttpServletRequest request, @RequestParam Map paramMap){ Map code_map = new HashMap(); List list = new ArrayList(); String search = CommonUtils.checkNull(paramMap.get("search")); String searchRevision = CommonUtils.checkNull(paramMap.get("SEARCH_REVISION_RELEASE")); try { if("0".equals(searchRevision)){ paramMap.put("IS_LAST",""); }else if("1".equals(searchRevision)){ paramMap.put("IS_LAST",searchRevision); } // paramMap.put("isPagingYN","N"); //no paging code_map.put("product_code",commonService.bizMakeOptionList("", (String)paramMap.get("product_code"),"common.getProductCodeselect")); if("Y".equals(search)){ // list = CommonUtils.keyChangeUpperList(partMngService.getPartMngList(request,paramMap)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("code_map",code_map); // request.setAttribute("LIST", list); return "/partMng/partMngListPopUp"; } /** * 발주관리_발주관리 목록 페이징 * @param request * @param paramMap * @return */ @ResponseBody @RequestMapping("/partMng/partMngListPaging.do") public Map partMngListPaging(HttpServletRequest request, @RequestParam Map paramMap){ //List list = commonService.selectListPaging("purchaseOrder.deliveryMngList_new", request, paramMap); commonService.selectListPagingNew("partMng.partMngList", request, paramMap); return paramMap; } /** * PART Form PopUp * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngFormPopUp.do") public String partMngUpdateFormPopup(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); Map code_map = new HashMap(); //String [] arrCHANGE_OPTION = null; //String CHANGE_OPTION =""; String objId = CommonUtils.checkNull(paramMap.get("OBJID")); String actionType = CommonUtils.checkNull(paramMap.get("ACTION_TYPE")); try{ paramMap.put("objId",objId); if("changeDesign".equals(actionType)){ resultMap = CommonUtils.keyChangeUpperMap(partMngService.setChangeDesignPartInfo(request, paramMap)); //CHANGE_OPTION = CommonUtils.nvl((String)resultMap.get("CHANGE_OPTION"),""); //if(!"".equals(CHANGE_OPTION)){ // arrCHANGE_OPTION = CHANGE_OPTION.split(","); //} //설변항목 코드 //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)resultMap.get("CHANGE_OPTION"),"common.getCodeselect")); code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)resultMap.get("CHANGE_TYPE"),"common.getCodeselect")); code_map.put("PARENT_PART_NO",commonService.bizMakeOptionList("", (String)resultMap.get("PARENT_PART_NO"),"common.getPartNoselect")); String REVISION = CommonUtils.checkNull(resultMap.get("REVISION")); if(REVISION.equals("RE")){ resultMap.put("REVISION", "A"); }else{ resultMap.put("REVISION", CommonUtils.getNextRevision(REVISION)); } }else{ if(!"".equals(objId)){ resultMap = CommonUtils.keyChangeUpperMap(partMngService.getPartMngInfo(request,paramMap)); //CHANGE_OPTION = CommonUtils.nvl((String)resultMap.get("CHANGE_OPTION"),""); //if(!"".equals(CHANGE_OPTION)){ // arrCHANGE_OPTION = CHANGE_OPTION.split(","); //} //설변항목 코드 //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)resultMap.get("CHANGE_OPTION"),"common.getCodeselect")); code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)resultMap.get("CHANGE_TYPE"),"common.getCodeselect")); code_map.put("PARENT_PART_NO",commonService.bizMakeOptionList("", (String)resultMap.get("PARENT_PART_NO"),"common.getPartNoselect")); //고객사 code_map.put("SUPPLY_CODE",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)resultMap.get("SUPPLY_CODE")),"common.getmatersupplyselect")); //code_map.put("SUPPLY_CODE",commonService.bizMakeOptionList("", (String)resultMap.get("SUPPLY_CODE"),"common.getmatersupplyselect")); }else{ objId = CommonUtils.createObjId(); //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)resultMap.get("CHANGE_OPTION"),"common.getCodeselect")); code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)resultMap.get("CHANGE_TYPE"),"common.getCodeselect")); code_map.put("PARENT_PART_NO",commonService.bizMakeOptionList("", (String)resultMap.get("PARENT_PART_NO"),"common.getPartNoselect")); code_map.put("SUPPLY_CODE",commonService.bizMakeOptionList("", "","common.getmatersupplyselect")); resultMap.put("OBJID", objId); resultMap.put("STATUS", "create"); } } }catch(Exception e){ e.printStackTrace(); } request.setAttribute("code_map", code_map); request.setAttribute("resultMap", resultMap); return "/partMng/partMngFormPopUp"; } /** * PART Detail PopUp * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngDetailPopUp.do") public String partMngDetailPopUp(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); Map code_map = new HashMap(); String [] arrCHANGE_OPTION = null; String CHANGE_OPTION =""; String objId = CommonUtils.checkNull(paramMap.get("OBJID")); try{ if(!"".equals(objId)){ resultMap = CommonUtils.keyChangeUpperMap(partMngService.getPartMngInfo(request,paramMap)); /* CHANGE_OPTION = CommonUtils.nvl((String)resultMap.get("CHANGE_OPTION"),""); if(!"".equals(CHANGE_OPTION)){ arrCHANGE_OPTION = CHANGE_OPTION.split(","); }*/ //설변항목 코드 //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)resultMap.get("CHANGE_OPTION"),"common.getCodeselect")); code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)resultMap.get("CHANGE_TYPE"),"common.getCodeselect")); code_map.put("PARENT_PART_NO",commonService.bizMakeOptionList("", (String)resultMap.get("PARENT_PART_NO"),"common.getPartNoselect")); code_map.put("SUPPLY_CODE",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)resultMap.get("SUPPLY_CODE")),"common.getmatersupplyselect")); //code_map.put("SUPPLY_CODE",commonService.bizMakeOptionList("", (String)resultMap.get("SUPPLY_CODE"),"common.getmatersupplyselect")); }else{ objId = CommonUtils.createObjId(); //설변항목 코드 //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("PARENT_PART_NO",commonService.bizMakeOptionList("", (String)resultMap.get("PARENT_PART_NO"),"common.getPartNoselect")); //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)resultMap.get("CHANGE_OPTION"),"common.getCodeselect")); code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)resultMap.get("CHANGE_TYPE"),"common.getCodeselect")); resultMap.put("OBJID", objId); } }catch(Exception e){ e.printStackTrace(); } request.setAttribute("code_map", code_map); request.setAttribute("resultMap", resultMap); return "/partMng/partMngDetailPopUp"; } /** * PART Detail 수정 저장 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/updatePartDetail.do") @ResponseBody public Map updatePartDetail(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); try{ // 품목 정보 업데이트 int result = partMngService.updatePartDetail(request, paramMap); if(result > 0){ resultMap.put("result", "success"); resultMap.put("message", "저장되었습니다."); }else{ resultMap.put("result", "fail"); resultMap.put("message", "저장에 실패했습니다."); } }catch(Exception e){ e.printStackTrace(); resultMap.put("result", "error"); resultMap.put("message", "저장 중 오류가 발생했습니다."); } return resultMap; } /** * PART Detail PopUp * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngHisDetailPopUp.do") public String partMngHisDetailPopUp(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); Map code_map = new HashMap(); String [] arrCHANGE_OPTION = null; String CHANGE_OPTION =""; String objId = CommonUtils.checkNull(paramMap.get("OBJID")); try{ if(!"".equals(objId)){ resultMap = CommonUtils.keyChangeUpperMap(partMngService.getPartMngInfo(request,paramMap)); /* CHANGE_OPTION = CommonUtils.nvl((String)resultMap.get("CHANGE_OPTION"),""); if(!"".equals(CHANGE_OPTION)){ arrCHANGE_OPTION = CHANGE_OPTION.split(","); }*/ //설변항목 코드 //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)resultMap.get("CHANGE_OPTION"),"common.getCodeselect")); code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)resultMap.get("CHANGE_TYPE"),"common.getCodeselect")); code_map.put("PARENT_PART_NO",commonService.bizMakeOptionList("", (String)resultMap.get("PARENT_PART_NO"),"common.getPartNoselect")); }else{ objId = CommonUtils.createObjId(); //설변항목 코드 //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("PARENT_PART_NO",commonService.bizMakeOptionList("", (String)resultMap.get("PARENT_PART_NO"),"common.getPartNoselect")); //code_map.put("CHANGE_OPTION",commonService.bizMakeCheckBoxMultiList("0000318","CHANGE_OPTION",arrCHANGE_OPTION,"common.getCodeselect")); code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)resultMap.get("CHANGE_OPTION"),"common.getCodeselect")); code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)resultMap.get("CHANGE_TYPE"),"common.getCodeselect")); resultMap.put("OBJID", objId); } }catch(Exception e){ e.printStackTrace(); } request.setAttribute("code_map", code_map); request.setAttribute("resultMap", resultMap); return "/partMng/partMngHisDetailPopUp"; } /** * Part 중복체크 */ @RequestMapping("/partMng/overlapPartMng.do") public String overlapPartMngCheck(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ List list = partMngService.overlapPartMng(request, paramMap); request.setAttribute("RESULT", CommonUtils.getJsonArray(list)); return "/ajax/ajaxResult"; } /** * Part 저장 */ @RequestMapping("/partMng/savePartMng.do") public String savePartMng(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); resultMap = partMngService.savePartMng(request, paramMap); request.setAttribute("RESULT", CommonUtils.getJsonMap(resultMap)); return "/ajax/ajaxResult"; } /** * Part 저장(설계변경 PART조회) */ @RequestMapping("/partMng/savePartMngChangeList.do") @ResponseBody public Map savePartMngChangeList(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); resultMap = partMngService.savePartMngChangeList(request, paramMap); request.setAttribute("RESULT", CommonUtils.getJsonMap(resultMap)); return resultMap; } /** * Part 배포 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngDeploy.do") public String partMngDeploy(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = partMngService.partMngDeploy(request, paramMap); request.setAttribute("RESULT", CommonUtils.getJsonMap(resultMap)); return "/ajax/ajaxResult"; } /** * Part 삭제 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngDelete.do") public String partMngDelete(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = partMngService.partMngDelete(request, paramMap); request.setAttribute("RESULT", CommonUtils.getJsonMap(resultMap)); return "/ajax/ajaxResult"; } /** * 파트조회(ajax) * @param request * @param paramMap * @return */ /** * PART 목록 조회 (전체 데이터 조회 - 재귀 CTE 제거로 성능 개선) * @param request * @param paramMap * @return JSON 형태의 전체 데이터 */ @RequestMapping("/partMng/getPartMngList_ajax.do") @ResponseBody public Map getPartList_ajax(HttpServletRequest request, @RequestParam Map paramMap){ paramMap.put("status", "complete"); paramMap.put("IS_LAST","1"); System.out.println("getPartList_ajax paramMap : "+paramMap); // 전체 데이터 조회 (페이징 제거, 재귀 CTE 제거로 속도 대폭 향상) List list = partMngService.getToConnectPartMngList(request, paramMap); // 응답 데이터 구성 Map response = new HashMap<>(); response.put("data", list); System.out.println("데이터 조회 완료 - " + list.size() + "건"); return response; } /** * Excel을 이용한 Part 등록 팝업을 호출한다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/openPartExcelImportPopUp.do") public String openPartExcelImportPopUp(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ SqlSession sqlSession = null; Map code_map = new HashMap(); //Map bomContractInfo = new HashMap(); //Map bomInfo = new HashMap(); Map sqlParam = new HashMap(); //List resultList = null; //List multiMasterList = new ArrayList(); //List regiestSameContractUnitNameBomList = new ArrayList(); String objid=""; try{ objid = CommonUtils.createObjId(); /* code_map.put("customer_cd",commonService.bizMakeOptionList("", (String)paramMap.get("customer_cd"),"common.getsupplyselect")); code_map.put("project_name",commonService.bizMakeOptionList("", (String)paramMap.get("project_name"),"common.getProjectNameList")); code_map.put("unit_code",commonService.bizMakeOptionList((String)paramMap.get("unit_code"), (String)paramMap.get("unit_code"),"common.getBomCodeList")); sqlSession = SqlMapConfig.getInstance().getSqlSession(); Map sqlMap = new HashMap(); String unitCode = CommonUtils.checkNull(paramMap.get("unit_code")); 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")); sqlParam.put("customer_cd", CommonUtils.checkNull(paramMap.get("customer_cd"))); //sqlParam.put("project_name", CommonUtils.checkNull(paramMap.get("project_name"))); sqlParam.put("unit_name_eq", UNIT_NAME); regiestSameContractUnitNameBomList = partMngService.getBOMStandardStructureList(request, sqlParam); */ //paramMap.put("product_code",(String)paramMap.get("product_code")); //info = partMngService.getBOMStructureRev(request,paramMap); //bomContractInfo = partMngService.getBOMContractinfo(request,paramMap); Map param = new HashMap(); param.put("parentCodeId", "0000062"); code_map.put("part_type", commonService.getJqGridSelectBoxJsonData("common.getCodeList2", param, "선택")); code_map.put("sup_code", commonService.getJqGridSelectBoxJsonData("common.getmatersupplyselect", param, "선택")); /* //unit param.put("parentCodeId", "0000059"); code_map.put("unit_cd", commonService.getJqGridSelectBoxJsonData("common.getCodeList2", param, "선택")); code_map.put("sup_code", commonService.getJqGridSelectBoxJsonData("common.getmatersupplyselect", param, "선택")); // bomInfo = partMngService.getBOMStructureStandardInfo(request, paramMap); // if(bomInfo == null) bomInfo = new HashMap(); // String BOM_REPORT_OBJID = CommonUtils.checkNull(paramMap.get("BOM_REPORT_OBJID"), (String)bomInfo.get("OBJID")); //if("".equals(BOM_REPORT_OBJID)){ //} //if(!"".equals(BOM_REPORT_OBJID)){ if(bomInfo != null && StringUtils.isNotBlank(BOM_REPORT_OBJID)) { //resultList = partMngService.getStructureAscendingList(request,paramMap); sqlParam.put("OBJID", BOM_REPORT_OBJID); resultList = partMngService.getBOMPartTreeList(sqlParam); //partMngService.getBOMStructureStandardInfo(request, paramMap); }else { //신규등록일 때만 보이게 } multiMasterList = commonService.selectList("purchaseOrder.selectPurchaseOrderMasterList", request, paramMap); //동시발주용 정보 request.setAttribute("multiMasterList", multiMasterList); request.setAttribute("regiestSameContractUnitNameBomList", regiestSameContractUnitNameBomList); //동일 계약에 동일유닛네임으로 저장된 bom list */ request.setAttribute("code_map",code_map); request.setAttribute("objid",objid); //request.setAttribute("bomInfo",bomInfo); //request.setAttribute("resultList",resultList); //request.setAttribute("info",bomContractInfo); //request.setAttribute("CUSTOMER_OBJID",(String)paramMap.get("customer_cd")); //request.setAttribute("CONTRACT_OBJID",(String)paramMap.get("project_name")); //request.setAttribute("UNIT_CODE",(String)paramMap.get("unit_code")); }catch(Exception e){ e.printStackTrace(); }finally { //sqlSession.close(); } return "/partMng/openPartExcelImportPopUp"; } /** * 업로드된 Excel File을 통해서 데이터를 Parsing하여 목록으로 return. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partParsingExcelFile.do") @ResponseBody public ArrayList partParsingExcelFile(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); ArrayList parsingPartList = new ArrayList(); try{ parsingPartList = (ArrayList)partMngService.partParsingExcelFile(request, paramMap); }catch(Exception e){ e.printStackTrace(); } //resultMap.put("RESULT", CommonUtils.getJsonArray(parsingPartList)); //parsingPartList = CommonUtils.getJsonArray(parsingPartList); //request.setAttribute("RESULT", CommonUtils.getJsonArray(parsingPartList)); //return "/ajax/ajaxResult"; return parsingPartList; } /** * 파트 저장(엑셀업로드) */ @RequestMapping("/partMng/partUploadSave.do") @ResponseBody public Map partUploadSave(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); //String result = ""; try{ PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); paramMap.put("CONNECTUSERID", CommonUtils.checkNull(person.getUserId())); partMngService.savePartByExcel(request, paramMap); CommonUtils.setReqResult(request, "", "S", null, resultMap); //result = "SUCCESS"; }catch(Exception e){ e.printStackTrace(); //result = "FAIL"; CommonUtils.setReqResult(request, "", "F", e, resultMap); } //return result; return resultMap; } /** * 구조등록 목록 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/searchStructureList.do") public String getStructureList(HttpServletRequest request, @RequestParam Map paramMap){ Map code_map = new HashMap(); List list = new ArrayList(); try { list = partMngService.getBOMStandardStructureList(request, paramMap); //code_map.put("product_code",commonService.bizMakeOptionList("", (String)paramMap.get("product_code"),"common.getProductCodeselect")); //제품구분 code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)paramMap.get("product")),"common.getCodeselect")); //공장 //고객사 code_map.put("customer_cd",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("customer_cd")),"common.getsupplyselect")); //프로젝트명 code_map.put("project_name",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("project_name")),"common.getCusProjectNoList")); //프로젝트명 code_map.put("unit_code",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("unit_code")),"common.getUnitCodeList")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("code_map", code_map); request.setAttribute("LIST", list); return "/partMng/structureList"; } /** * 구조등록 - 구조등록 목록 페이징 * @param request * @param paramMap * @return */ @ResponseBody @RequestMapping("/partMng/searchStructureGridList.do") public Map getBOMStandardStructureGridList(HttpServletRequest request, @RequestParam Map paramMap){ commonService.selectListPagingNew("partMng.getBOMStandardStructureGridList", request, paramMap); return paramMap; } /** * 구조등록 (기본정보 선택 팝업) * @param request * @param paramMap * @return */ @RequestMapping("/partMng/setStructureStandardFormPopup.do") public String structureStandardFormPopup(HttpServletRequest request, @RequestParam Map paramMap){ String product_code = CommonUtils.checkNull((String)paramMap.get("param_product_code")); //String product_mgmt_spec = CommonUtils.checkNull((String)paramMap.get("param_product_mgmt_spec")); //String upg_no = CommonUtils.checkNull((String)paramMap.get("param_upg_no")); paramMap.put("product_code",product_code); Map info = partMngService.getBOMStructureRev(request,paramMap); request.setAttribute("info", info); request.setAttribute("product_code", product_code); //request.setAttribute("product_mgmt_spec", product_mgmt_spec); //request.setAttribute("upg_no", upg_no); return "/partMng/structureStandardFormPopup"; } /** * BOM COPY (기본정보 선택 팝업) * @param request * @param paramMap * @return */ @RequestMapping("/partMng/setBomCopyFormPopup.do") public String setBomCopyFormPopup(HttpServletRequest request, @RequestParam Map paramMap){ String product_code = CommonUtils.checkNull((String)paramMap.get("param_product_code")); //String product_mgmt_spec = CommonUtils.checkNull((String)paramMap.get("param_product_mgmt_spec")); //String upg_no = CommonUtils.checkNull((String)paramMap.get("param_upg_no")); Map code_map = new HashMap(); try{ //projectNo code_map.put("rev",commonService.bizMakeOptionList(product_code,"","common.getRevNoselect")); code_map.put("product_code",commonService.bizMakeOptionList(product_code,"","common.getProductNoselect")); request.setAttribute("code_map",code_map); request.setAttribute("product_code", product_code); }catch(Exception e){ e.printStackTrace(); } return "/partMng/structureBomCopyFormPopup"; } /** * bom copy 저장 */ @RequestMapping("/partMng/saveBomCopy.do") @ResponseBody public String saveBomCopySave(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ String result = ""; try{ PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); paramMap.put("CONNECTUSERID", CommonUtils.checkNull(person.getUserId())); partMngService.saveBomCopySave(request, paramMap); result = "SUCCESS"; }catch(Exception e){ e.printStackTrace(); result = "FAIL"; } return result; } /** * BOM 상세정보 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/setStructurePopupMainFS.do") public String setStructurePopupMainFS(HttpServletRequest request, @RequestParam Map paramMap){ PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN); paramMap.put("writer", person.getUserId()); Map info = partMngService.getBOMStructureStandardInfo(request,paramMap); request.setAttribute("info", info); return "/partMng/structurePopupHeaderFs"; } @RequestMapping("/partMng/structureHeaderPopup.do") public String structureHeaderPopup(HttpServletRequest request, @RequestParam Map paramMap){ Map code_map = new HashMap(); try { // 제품구분 (PART_TYPE) code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)paramMap.get("product")),"common.getCodeselect")); } catch (Exception e) { e.printStackTrace(); } request.setAttribute("code_map", code_map); return "/partMng/structurePopupTop"; } @RequestMapping("/partMng/structureBottomPopupFS.do") public String structureBottomPopupFS(HttpServletRequest request, @RequestParam Map paramMap){ return "/partMng/structurePopupFs"; } /** * 구조등록 하단 프레임 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/structureBtnAreaPopup.do") public String structureBtnAreaPopup(HttpServletRequest request, @RequestParam Map paramMap){ return "/partMng/structureBtnAreaPopup"; } /** * 구조등록 좌측 프레임 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/structurePopupLeft.do") public String structurePopupLeft(HttpServletRequest request, @RequestParam Map paramMap){ int MAX_LEVEL = 0; Map info = new HashMap(); List bomTreeList = null; String actionType = CommonUtils.checkNull(paramMap.get("actionType")); ArrayList list = new ArrayList(); try{ info = partMngService.getBOMStructureStandardInfo(request,paramMap); info.put("actionType", actionType); //241206 added bomTreeList = partMngService.getBOMPartTreeList(info); if(null != bomTreeList && 0 < bomTreeList.size()){ HashMap LEVLMap = (HashMap)bomTreeList.get(0); MAX_LEVEL = (Integer)LEVLMap.get("MAX_LEVEL"); } }catch(Exception e){ e.printStackTrace(); } request.setAttribute("MAXLEV", MAX_LEVEL); request.setAttribute("info", info); request.setAttribute("tree", bomTreeList); return "/partMng/structurePopupLeft"+("excel".equals(actionType) ? "Excel" : ""); } /** * 구조등록 좌측 프레임 JSON 데이터 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/getStructureTreeJson.do") @ResponseBody public List getStructureTreeJson(HttpServletRequest request, @RequestParam Map paramMap){ List bomTreeList = null; try{ Map info = partMngService.getBOMStructureStandardInfo(request,paramMap); // search_type 파라미터를 info에 복사 (adding 상태 조회를 위해) if(paramMap.containsKey("search_type")) { info.put("search_type", paramMap.get("search_type")); } bomTreeList = partMngService.getBOMPartTreeList(info); }catch(Exception e){ e.printStackTrace(); } return bomTreeList != null ? bomTreeList : new ArrayList(); } @RequestMapping("/partMng/structurePopupCenter.do") public String structurePopupCenter(HttpServletRequest request, @RequestParam Map paramMap){ Map code_map = new HashMap(); Map info = new HashMap();; try { info = partMngService.getBOMStructureStandardInfo(request,paramMap); //설변사유 code_map.put("CHANGE_OPTION",commonService.bizMakeOptionList("0000318", (String)paramMap.get("change_option"),"common.getCodeselect")); //설변구분 code_map.put("CHANGE_TYPE",commonService.bizMakeOptionList("0001054", (String)paramMap.get("change_type"),"common.getCodeselect")); //담당자 //code_map.put("writer_id", commonService.bizMakeOptionList("", (String)paramMap.get("writer_id"),"common.getUserselect")); //PART구분 //code_map.put("part_type",commonService.bizMakeOptionList(Constants.PART_TYPE_CODE, (String)paramMap.get("part_type"),"common.getCodeselect")); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } request.setAttribute("info", info); request.setAttribute("code_map",code_map); return "/partMng/structurePopupCenter"; } /** * 구조등록 우측 프레임 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/structurePopupRight.do") public String structurePopupRight(HttpServletRequest request, @RequestParam Map paramMap){ Map info = new HashMap(); try{ paramMap.put("SEARCH_OBJID", paramMap.get("objId")); List list = partMngService.getBOMStandardStructureList(request, paramMap); if(list != null && list.size()>0){ info = (Map)list.get(0); } }catch(Exception e){ e.printStackTrace(); } request.setAttribute("info", info); return "/partMng/structurePopupRight"; } /** * 최상위레벨에 같은 Part No가 있는지 체크. * @param request * @param paramMap * @param rightCheckedArr * @return */ @RequestMapping("/partMng/checkSameTopPartNo.do") public String checkSameTopPartNo(HttpServletRequest request, @RequestParam Map paramMap, @RequestParam(value = "rightCheckedArr[]") List rightCheckedArr){ boolean result = partMngService.hasSameTopPartNo(paramMap, rightCheckedArr); request.setAttribute("RESULT", CommonUtils.getJsonString("result", new Boolean(result).toString())); return "/ajax/ajaxResult"; } /** * 우측의 Part를 선택후, 하위정보를 포함해 삭제한다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/deletePartRelateInfo.do") public String deletePartRelateInfo(HttpServletRequest request, @RequestParam Map paramMap){ boolean result = partMngService.deletePartRelateInfo(paramMap); //if(result) partService.deleteDummyBOMData(paramMap); request.setAttribute("RESULT", CommonUtils.getJsonString("result", new Boolean(result).toString())); return "/ajax/ajaxResult"; } /** * 우측의 Part를 선택후, 하위정보를 포함해 삭제한다.(231211 new version) * @param request * @param paramMap * @return */ @RequestMapping("/partMng/deleteStatusPartRelateInfo.do") public String deleteStatusPartRelateInfo(HttpServletRequest request, @RequestParam Map paramMap){ boolean result = partMngService.deleteStatusPartRelateInfo(request, paramMap); //if(result) partService.deleteDummyBOMData(paramMap); request.setAttribute("RESULT", CommonUtils.getJsonString("result", new Boolean(result).toString())); return "/ajax/ajaxResult"; } /** * 우측의 Part를 선택후, 좌측에 선택한 Part에 연결한다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/relatePartInfo.do") public String relatePartInfo(HttpServletRequest request, @RequestParam Map paramMap, @RequestParam(value = "rightCheckedArr[]") List rightCheckedArr){ Map info = partMngService.getBOMStructureStandardInfo(request,paramMap); paramMap.put("regionObjId", CommonUtils.checkNull(info.get("REGION_OBJID"))); boolean result = partMngService.relatePartInfo(request, paramMap, rightCheckedArr); //if(result) partService.deleteDummyBOMData(paramMap); request.setAttribute("RESULT", CommonUtils.getJsonString("result", new Boolean(result).toString())); return "/ajax/ajaxResult"; } /** * 구조등록 수량 변경 저장 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/structureQtySave.do") public String structureQtySave(HttpServletRequest request, @RequestParam Map paramMap){ boolean result = partMngService.structureQtySave(request, paramMap); request.setAttribute("RESULT", CommonUtils.getJsonString("result", new Boolean(result).toString())); return "/ajax/ajaxResult"; } /** * 정전개 목록 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/structureAscendingList.do") public String structureAscendingList(HttpServletRequest request, @RequestParam Map paramMap){ Map code_map = new HashMap(); List resultList = null; String search = CommonUtils.checkNull(paramMap.get("search")); try{ //code_map.put("product_code",commonService.bizMakeOptionList("", (String)paramMap.get("search_product_mgmt_objId"),"common.getProductCodeselect")); //고객사 code_map.put("customer_cd",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("customer_cd")),"common.getsupplyselect")); //프로젝트 code_map.put("project_name",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("project_name")),"common.getCusProjectNoList")); //유닛명 code_map.put("unit_code",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("unit_code")),"common.getUnitCodeList")); if("Y".equals(search)){ String searchType = CommonUtils.checkNull(paramMap.get("searchType"), "ascending"); if("descending".equals(searchType)){ // 역전개 조회 resultList = partMngService.getStructureDescendingList(request,paramMap); }else{ // 정전개 조회 (기본값) resultList = partMngService.getStructureAscendingList(request,paramMap); } } }catch(Exception e){ e.printStackTrace(); } request.setAttribute("code_map",code_map); request.setAttribute("List",resultList); return "/partMng/structureAscendingList"; } /** * 정전개 - 정전개 목록 페이징 * @param request * @param paramMap * @return */ @ResponseBody @RequestMapping("/partMng/selectStructureAscendingGridList.do") public Map getSelectStructureAscendingGridListPaging(HttpServletRequest request, @RequestParam Map paramMap){ commonService.selectListPagingNew("partMng.selectStructureAscendingList", request, paramMap); return paramMap; } @RequestMapping("/partMng/structureAscendingExcelList.do") public String structureAscendingExcelList(HttpServletRequest request, @RequestParam Map paramMap){ return "/partMng/structureAscendingListExcel"; } /** * 정전개 멀티 목록 * @param request * @param paramMap * @return */ @RequestMapping(" /partMng/structureAscendingMultiList.do") public String structureAscendingMultiList(HttpServletRequest request, @RequestParam Map paramMap){ return "/partMng/structureAscendingMultiList"; } /** * 정전개 목록을 가져온다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/getStructureAscendingMultiList.do") public String getStructureAscendingMultiList(HttpServletRequest request, @RequestParam Map paramMap){ List listVC = partMngService.getStructureAscendingMultiListVC(request,paramMap); List resultList = partMngService.getStructureAscendingMultiList(request,paramMap,listVC); String data = "["; ArrayList dataArr = CommonUtils.getJsonArray(resultList); for(int i=0; i0){ data += ","; } data += dataArr.get(i); } data +="]"; String data_vc = "["; ArrayList dataVcArr = CommonUtils.getJsonArray(listVC); for(int i=0; i0){ data_vc += ","; } data_vc += dataVcArr.get(i); } data_vc +="]"; request.setAttribute("RESULT", "{\"DATA\":"+data+", \"DATA_VC\":"+data_vc+"}"); return "/ajax/ajaxResult"; } /** * 정전개 목록을 가져온다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/getStructureAscendingMultiListExcel.do") public String getStructureAscendingMultiListExcel(HttpServletRequest request, @RequestParam Map paramMap){ System.out.println("request :: " + request); System.out.println("paramMap :: " + paramMap); List listVC = partMngService.getStructureAscendingMultiListVC(request,paramMap); List resultList = partMngService.getStructureAscendingMultiList(request,paramMap,listVC); System.out.println("resultList :: " + resultList); System.out.println("listVC :: " + listVC); System.out.println("request :: " + request); System.out.println("paramMap :: " + paramMap); String data = "["; ArrayList dataArr = CommonUtils.getJsonArray(resultList); for(int i=0; i0){ data += ","; } data += dataArr.get(i); } data +="]"; String data_vc = "["; ArrayList dataVcArr = CommonUtils.getJsonArray(listVC); for(int i=0; i0){ data_vc += ","; } data_vc += dataVcArr.get(i); } data_vc +="]"; System.out.println("data ::" + data ); System.out.println("data_vc :: " + data_vc ); request.setAttribute("RESULT", "{\"DATA\":"+data+", \"DATA_VC\":"+data_vc+"}"); request.setAttribute("resultList", resultList); request.setAttribute("listVC", listVC); request.setAttribute("paramMap", paramMap); return "/partMng/getStructureAscendingMultiListExcel"; } /** * 정전개 목록을 가져온다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/getStructureAscendingList.do") public String getStructureAscendingList(HttpServletRequest request, @RequestParam Map paramMap){ String actionType = CommonUtils.checkNull(paramMap.get("actionType")); List resultList = partMngService.getStructureAscendingList(request,paramMap); request.setAttribute("RESULT", CommonUtils.getJsonArray(resultList)); return "/ajax/ajaxResult"; } /** * 정전개 목록을 가져온다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/getStructureAscendingListExcel.do") public String getStructureAscendingListExcel(HttpServletRequest request, @RequestParam Map paramMap){ String actionType = CommonUtils.checkNull(paramMap.get("actionType")); List resultList = partMngService.getStructureAscendingList(request,paramMap); System.out.println("paramMap ::: "+ paramMap); request.setAttribute("paramMap", paramMap); request.setAttribute("resultList", resultList); return "/partMng/getstructureAscendingListExcel"; } /** * 역전개 목록 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/structureDescendingList.do") public String structureDescendingList(HttpServletRequest request, @RequestParam Map paramMap){ return "/partMng/structureDescendingList"; } /** * 정전개 목록을 가져온다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/getStructureDescendingList.do") public String getStructureDescendingList(HttpServletRequest request, @RequestParam Map paramMap){ String actionType = CommonUtils.checkNull(paramMap.get("actionType")); List resultList = partMngService.getStructureDescendingList(request,paramMap); request.setAttribute("RESULT", CommonUtils.getJsonArray(resultList)); return "/ajax/ajaxResult"; } /** * 선택된 구조등록을 삭제한다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/deleteStructure.do") public String deleteStructure(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = partMngService.deleteStructure(request,paramMap); request.setAttribute("RESULT", CommonUtils.getJsonMap(resultMap)); return "/ajax/ajaxResult"; } /** * 선택된 구조등록을 배포한다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/deployStructure.do") public String deployStructure(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = partMngService.deployStructure(request,paramMap); request.setAttribute("RESULT", CommonUtils.getJsonMap(resultMap)); return "/ajax/ajaxResult"; } /** * BOM 배포사유 입력 popup * @param request * @param paramMap * @return */ @RequestMapping("/partMng/changeDesignNotePopUp.do") public String changeDesignNotePopUp(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); try{ /*resultMap = service.getFundMgmtInfo(request,paramMap); request.setAttribute("resultMap", resultMap);*/ }catch(Exception e){ e.printStackTrace(); } return "/partMng/changeDesignNotePopUp"; } /** * BOM 배포사유 저장 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/saveChangeDesignInfo.do") public String saveChangeDesignInfo(HttpServletRequest request, @RequestParam Map paramMap){ boolean result = partMngService.saveChangeDesignInfo(paramMap); Map resultMap = partMngService.deployStructure(request,paramMap); request.setAttribute("RESULTMAP", CommonUtils.getJsonMap(resultMap)); request.setAttribute("RESULT", CommonUtils.getJsonString("result", new Boolean(result).toString())); return "/ajax/ajaxResult"; } /** * 상태변경 팝업 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/structureStatusChangePopup.do") public String structureStatusChangePopup(HttpServletRequest request, @RequestParam Map paramMap){ Map code_map = new HashMap(); Map structureInfo = new HashMap(); try{ // 구조 정보 조회 structureInfo = partMngService.getStructureInfo(paramMap); // 제품구분 코드 목록 (structureList와 동일하게) code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.checkNull(structureInfo.get("PRODUCT_CD")), "common.getCodeselect")); request.setAttribute("STRUCTURE_INFO", structureInfo); request.setAttribute("code_map", code_map); }catch(Exception e){ e.printStackTrace(); } return "/partMng/structureStatusChangePopup"; } /** * 상태변경 저장 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/updateStructureStatus.do") public String updateStructureStatus(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap<>(); try{ boolean result = partMngService.updateStructureStatus(request, paramMap); if(result){ resultMap.put("result", "success"); resultMap.put("msg", "저장되었습니다."); }else{ resultMap.put("result", "fail"); resultMap.put("msg", "저장에 실패했습니다."); } }catch(Exception e){ e.printStackTrace(); resultMap.put("result", "error"); resultMap.put("msg", "오류가 발생했습니다."); } request.setAttribute("RESULT", CommonUtils.getJsonMap(resultMap)); return "/ajax/ajaxResult"; } /** * 제품 사양 리스트 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/getPartBomList수정전.do") public String getProductMgntUpgList수정전(HttpServletRequest request, @RequestParam Map paramMap){ List list = null; List productUpgNoList = new ArrayList(); List productList = null; List upgCodeList = new ArrayList(); List upgNoList = null; Map code_map = new HashMap(); try{ //list = productMgmtService.getProductMgntUpgList(request,paramMap); //리스트 상단 사양 표시 productList = productMgmtService.getProductUpgCodeList(request,paramMap); //matrix 만들기 위해 코드 리스트 가져오기 if(!"".equals(CommonUtils.nullToEmpty((String)paramMap.get("product_code")))){ upgCodeList = productMgmtService.getProductUpgcommcodeList(request,paramMap); } //난중에 지울것 //productUpgNoList = productMgmtService.getUpgMatrixList(request,paramMap); if(upgCodeList.size() > 0 ){ for(int i=0;i"+temp_map); //TempList.add(temp_map); productUpgNoList.add(temp_map); } } /*int upgSize = 0; if(!"".equals((String)paramMap.get("product_code"))){ productUpgNoList = productMgmtService.getUpgMatrixList(request,paramMap); if(productUpgNoList.size() > 0){ upgSize = productUpgNoList.size() / productList.size(); System.out.println("upgSize -->"+upgSize); for(int i=0;i paramMap){ Map resultMap = new HashMap(); ArrayList parsingPartList = new ArrayList(); try{ parsingPartList = (ArrayList)partMngService.parsingExcelFile(request, paramMap); }catch(Exception e){ e.printStackTrace(); } //resultMap.put("RESULT", CommonUtils.getJsonArray(parsingPartList)); //parsingPartList = CommonUtils.getJsonArray(parsingPartList); //request.setAttribute("RESULT", CommonUtils.getJsonArray(parsingPartList)); //return "/ajax/ajaxResult"; return parsingPartList; } /** * BOM 복사를 위한 데이터 조회 (엑셀 파싱 형식과 동일하게 반환) */ @RequestMapping("/partMng/getBomDataForCopy.do") @ResponseBody public ArrayList getBomDataForCopy(HttpServletRequest request, @RequestParam Map paramMap){ ArrayList bomDataList = new ArrayList(); try{ bomDataList = (ArrayList)partMngService.getBomDataForCopy(request, paramMap); }catch(Exception e){ e.printStackTrace(); } return bomDataList; } /** * BOM 파트&구조 저장 */ @RequestMapping("/partMng/partBomApplySave.do") @ResponseBody public Map partBomApplySave(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); //String result = ""; try{ PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); paramMap.put("CONNECTUSERID", CommonUtils.checkNull(person.getUserId())); partMngService.savePartBomMaster(request, paramMap); CommonUtils.setReqResult(request, "", "S", null, resultMap); //result = "SUCCESS"; }catch(Exception e){ e.printStackTrace(); //result = "FAIL"; CommonUtils.setReqResult(request, "", "F", e, resultMap); } //return result; return resultMap; } /** * 품번 중복 체크 (PART_BOM_REPORT 테이블) * @param request * @param paramMap * @return */ @RequestMapping("/partMng/checkDuplicatePartNo.do") @ResponseBody public Map checkDuplicatePartNo(HttpServletRequest request, @RequestParam Map paramMap){ Map resultMap = new HashMap(); try{ String partNo = CommonUtils.checkNull(paramMap.get("partNo")); String bomReportObjid = CommonUtils.checkNull(paramMap.get("bomReportObjid")); if(!"".equals(partNo)){ paramMap.put("partNo", partNo.trim()); paramMap.put("bomReportObjid", bomReportObjid); // DB에서 중복 체크 int count = partMngService.checkDuplicatePartNo(request, paramMap); resultMap.put("isDuplicate", count > 0); }else{ resultMap.put("isDuplicate", false); } resultMap.put("result", "success"); }catch(Exception e){ e.printStackTrace(); resultMap.put("result", "error"); resultMap.put("message", "품번 중복 체크 중 오류가 발생했습니다."); resultMap.put("isDuplicate", false); } return resultMap; } /** * 구조등록 순번 변경 저장 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/structureSeqSave.do") public String structureSeqSave(HttpServletRequest request, @RequestParam Map paramMap){ boolean result = partMngService.structureSeqSave(paramMap); request.setAttribute("RESULT", CommonUtils.getJsonString("result", new Boolean(result).toString())); return "/ajax/ajaxResult"; } /** * PART 배포 목록 * @param request * @param paramMap * @return */ @RequestMapping("/partMng/partMngDeployList.do") public String partMngDeployList(HttpServletRequest request, @RequestParam Map paramMap){ String page ="/partMng/partMngDeployList"; Map code_map = new HashMap(); List list = new ArrayList(); String searchRevision = CommonUtils.checkNull(paramMap.get("SEARCH_REVISION_RELEASE")); String actionType = CommonUtils.checkNull(paramMap.get("actionType")); String search = CommonUtils.checkNull(paramMap.get("search")); try { code_map.put("product_code",commonService.bizMakeOptionList("", (String)paramMap.get("product_code"),"common.getProductCodeselect")); if("Y".equals(search)){ list = CommonUtils.keyChangeUpperList(partMngService.partMngDeployList(request,paramMap)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("code_map",code_map); request.setAttribute("LIST", list); return page; } @ResponseBody @RequestMapping("/partMng/getPartLinkedBomContractList.do") public Map getPartLinkedBomContractList(HttpServletRequest request, @RequestParam Map paramMap){ Map result_map = new HashMap(); try { result_map.put("RESULT", partMngService.getPartLinkedBomContractList(paramMap)); } catch (Exception e) { e.printStackTrace(); } return result_map; } @RequestMapping("/partMng/partMngHisList.do") public String partMngHisList(HttpServletRequest request, @RequestParam Map paramMap){ Map code_map = new HashMap(); List list = new ArrayList(); try { //당사프로젝트번호 project_no code_map.put("contract_objid",commonService.bizMakeOptionList("", (String)paramMap.get("contract_objid"),"common.getProjectNameList")); //설변사유 code_map.put("change_option",commonService.bizMakeOptionList("0000318", (String)paramMap.get("change_option"),"common.getCodeselect")); //설변구분 code_map.put("change_type",commonService.bizMakeOptionList("0001054", (String)paramMap.get("change_type"),"common.getCodeselect")); //담당자 code_map.put("writer_id", commonService.bizMakeOptionList("", (String)paramMap.get("writer_id"),"common.getUserselect")); //PART구분 code_map.put("part_type",commonService.bizMakeOptionList(Constants.PART_TYPE_CODE, (String)paramMap.get("part_type"),"common.getCodeselect")); //paramMap.put("STATUS_NQ", "create"); //paramMap.put("SEARCH_TYPE", "CHANGE_LIST"); list = commonService.selectListPaging("partMng.partMngHistList", request, paramMap); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } request.setAttribute("code_map",code_map); request.setAttribute("LIST", JsonUtil.ListToJson(list)); return "/partMng/partMngHisList"; } /** * 설계변경리스트 - 설계변경리스트 페이징 * @param request * @param paramMap * @return */ @ResponseBody @RequestMapping("/partMng/partMngHisGridList.do") public Map getPartMngHisGridListPaging(HttpServletRequest request, @RequestParam Map paramMap){ commonService.selectListPagingNew("partMng.partMngHistList", request, paramMap); return paramMap; } @RequestMapping("/partMng/deleteBomByAdmin.do") @ResponseBody public String deleteBomByAdmin(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ String result = ""; SqlSession sqlSession = null; Map sqlMap = new HashMap(); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); if(person != null) paramMap.put("CONNECTUSERID", CommonUtils.checkNull(person.getUserId())); String pObjid = (String)paramMap.get("objId"); String pCheckArr = (String)paramMap.get("checkArr"); String checkArr[] = (CommonUtils.checkNull(pCheckArr, pObjid)).split(","); if(null == checkArr || 0 == checkArr.length){ checkArr[0] = CommonUtils.checkNull(paramMap.get("checkArr")); } if(null != checkArr && 0 < checkArr.length){ //Map sqlParamMap = new HashMap(); //sqlParamMap.put("checkArr",checkArr); // for (String objid : checkArr) { // paramMap.put("OBJID", objid); // paramMap.put("SEARCH_BOM_OBJID", objid); // if(StringUtils.isBlank(objid)) { // System.out.println("objid is null"); // //return ""; // }else { if(checkArr.length == 1) { //sqlMap.put("OBJID", checkArr[0]); }else { } sqlMap.put("checkArr", checkArr); // Map info = partMngService.getBOMStructureStandardInfo(request,sqlMap); // System.out.println(info); // if(info != null && !info.isEmpty()) { //백업 sqlSession.insert("partMng.bak_insertDelPartBom", sqlMap); sqlSession.insert("partMng.bak_insertDelPartMng", sqlMap); sqlSession.insert("partMng.bak_insertDelPartQty", sqlMap); //삭제 sqlSession.delete("partMng.deletePartBom", sqlMap); sqlSession.delete("partMng.deletePartMng", sqlMap); sqlSession.delete("partMng.deletePartQty", sqlMap); // } // } // } } sqlSession.commit(); result = "SUCCESS"; }catch(Exception e){ e.printStackTrace(); result = "FAIL"; sqlSession.rollback(); }finally { //sqlSession.close(); } return result; } /** * BOM objid기준으로 대상 파트에 도면파일 붙이기 * ※ 도면 있는거는 중복으로 붙으니 주의 */ //@RequestMapping(value="/partMng/partFileAttach.do", method=RequestMethod.POST) @RequestMapping("/partMng/partFileAttach.do") @ResponseBody public String partFileAttach(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ String result = ""; SqlSession sqlSession = null; Map sqlMap = new HashMap(); try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(false); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); if(person != null) paramMap.put("CONNECTUSERID", CommonUtils.checkNull(person.getUserId())); String objid = (String)paramMap.get("objId"); paramMap.put("OBJID", objid); paramMap.put("SEARCH_BOM_OBJID", objid); String qtyObjId = (String)paramMap.get("qtyObjId"); if(StringUtils.isBlank(objid)) { System.out.println("objid is null"); return ""; } Map info = partMngService.getBOMStructureStandardInfo(request,paramMap); System.out.println(info); /* 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 unitCode = CommonUtils.checkNull(paramMap.get("UNIT_CODE")); sqlMap.put("unitCode", unitCode); Map unitInfoMap = (HashMap)sqlSession.selectOne("common.getUnitCodeList", sqlMap); String unitName = CommonUtils.checkNull(unitInfoMap.get("name")).replaceAll("\u00A0+", " "); */ String projectNo = CommonUtils.checkNull(info.get("PROJECT_NO2")); String unitName = CommonUtils.checkNull(info.get("UNIT_NAME")).replaceAll("\u00A0+", " "); 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; System.out.println("filepathFull:"+filepathFull); ArrayList list = commonService.selectList("partMng.partMngListByBom", request, paramMap); //List list = partMngService.getPartMngList(request, paramMap); for (Map resultMap : list) { System.out.println(resultMap); //if(1==1) continue; String part_objid = ""; String part_no = ""; if(null!=resultMap){ part_objid = CommonUtils.checkNull((String)resultMap.get("OBJID")); part_no = CommonUtils.checkNull((String)resultMap.get("PART_NO")); //sqlMap.put("objId", part_objid); //Map selFileMap = commonService.getFileInfo(sqlMap); //기등록 파일 조회(있으면 pass) sqlMap.put("targetObjId", part_objid); sqlMap.put("fileSizeNot0", "fileSizeNot0"); //fileSize > 0 List selFileList = commonService.getFileList(sqlMap); if(selFileList != null && !selFileList.isEmpty()) { System.out.println("File already exists!!!"); continue; } Map fileMap = new HashMap(); fileMap.put("FILE_PATH",filepathFull); fileMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID"), "plmAdmin")); //dwg fileMap.put("OBJID", CommonUtils.createObjId()); fileMap.put("TARGET_OBJID", part_objid); fileMap.put("SAVED_FILE_NAME", part_no+".dwg"); fileMap.put("REAL_FILE_NAME",part_no+".dwg"); fileMap.put("DOC_TYPE" ,"2D_DRAWING_CAD"); fileMap.put("DOC_TYPE_NAME","2D(Drawing) CAD 첨부파일"); fileMap.put("FILE_SIZE","167941"); fileMap.put("FILE_EXT","DWG"); System.out.println("fileMap --->"+ fileMap); System.out.println(filepathFull+part_no+".dwg"); File file = new File(filepathFull+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(filepathFull+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", part_no+".pdf"); fileMap.put("REAL_FILE_NAME",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); } }else{ } } sqlSession.commit(); result = "SUCCESS"; }catch(Exception e){ e.printStackTrace(); result = "FAIL"; } return result; } static boolean checkBeforeFile(File file){ //파일이 존재하고 if(file.exists()){ //그 파일이 파일이고, 읽을 수 있다면 true를 리턴한다. if(file.isFile() && file.canRead()){ return true; } } return false; } /** * 자재코드 존재확인 */ @RequestMapping("/partMng/existPartNoCheck.do") public String existPartNoCheck(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){ List list = partMngService.existPartNoCheck(request, paramMap); request.setAttribute("RESULT", CommonUtils.getJsonArray(list)); return "/ajax/ajaxResult"; } /** * 우측의 Part를 선택후, 좌측에 선택한 Part로 변경한다. * @param request * @param paramMap * @return */ @RequestMapping("/partMng/changeRelatePartInfo.do") public String changeRelatePartInfo(HttpServletRequest request, @RequestParam Map paramMap){ boolean result = partMngService.changeRelatePartInfo(request, paramMap); request.setAttribute("RESULT", CommonUtils.getJsonString("result", new Boolean(result).toString())); return "/ajax/ajaxResult"; } /** * 도면 파일 일괄 업로드 * 파일명에 품번이 포함된 경우 자동 매칭하여 업로드 * - stp 파일 -> 3D CAD 컬럼 * - dwg 파일 -> 2D Drawing CAD 컬럼 * - pdf 파일 -> 2D PDF CAD 컬럼 * * @param request * @param session * @param bomObjId BOM OBJID * @return */ @RequestMapping(value="/partMng/uploadDrawingFiles.do", method=RequestMethod.POST) @ResponseBody public Map uploadDrawingFiles( HttpServletRequest request, HttpSession session) { Map resultMap = new HashMap<>(); MultipartRequest multi = null; FileRenameClass frc = null; try { PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); String userId = person != null ? person.getUserId() : "plmAdmin"; // MultipartRequest로 파일 업로드 처리 String storagePath = Constants.FILE_STORAGE; int maxSize = 1024*1024*1024*9; // 9GB File storage = new File(storagePath); if(!storage.exists()) storage.mkdirs(); frc = new FileRenameClass(); multi = new MultipartRequest(request, storagePath, maxSize, "UTF-8", frc); java.util.List fileList = frc.getFileList(); // MultipartRequest에서 bomObjId 파라미터 가져오기 String bomObjId = multi.getParameter("bomObjId"); if(bomObjId == null || bomObjId.isEmpty()) { resultMap.put("result", "fail"); resultMap.put("message", "BOM ID가 전달되지 않았습니다."); return resultMap; } // BOM 정보 조회 Map bomParam = new HashMap<>(); bomParam.put("objId", bomObjId); Map bomInfo = partMngService.getBOMStructureStandardInfo(request, bomParam); if(bomInfo == null) { resultMap.put("result", "fail"); resultMap.put("message", "BOM 정보를 찾을 수 없습니다."); return resultMap; } // 해당 BOM의 모든 파트 정보 조회 bomParam.put("SEARCH_BOM_OBJID", bomObjId); ArrayList partList = commonService.selectList("partMng.partMngListByBom", request, bomParam); if(partList == null || partList.isEmpty()) { resultMap.put("result", "fail"); resultMap.put("message", "BOM에 등록된 파트가 없습니다."); return resultMap; } // 품번 기준 파트 맵 생성 Map partNoMap = new HashMap<>(); for(Map part : partList) { String partNo = CommonUtils.checkNull((String)part.get("PART_NO")); if(!partNo.isEmpty()) { partNoMap.put(partNo, part); } } int successCount = 0; int failCount = 0; int notFoundCount = 0; // 업로드된 파일 처리 if(fileList != null && !fileList.isEmpty()) { for(Object fileObj : fileList) { Map fileInfo = (Map)fileObj; String originalFileName = CommonUtils.checkNull((String)fileInfo.get("realFileName")); String savedFileName = CommonUtils.checkNull((String)fileInfo.get("savedFileName")); String fileExt = CommonUtils.checkNull((String)fileInfo.get("fileExt")); long fileSize = Long.parseLong(CommonUtils.checkNull(fileInfo.get("fileSize"), "0")); // 파일 크기가 0이면 실제 저장된 파일에서 다시 확인 // if(fileSize == 0) { // try { // File savedFile = new File(storagePath + File.separator + savedFileName); // if(savedFile.exists()) { // fileSize = savedFile.length(); // System.out.println("파일 크기 재확인: " + fileSize + " bytes"); // } // } catch(Exception e) { // System.out.println("파일 크기 재확인 실패: " + e.getMessage()); // } // } // 확장자 대문자 변환 (이미 점 없이 저장됨) fileExt = fileExt.toUpperCase(); System.out.println("========== 파일 업로드 처리 =========="); System.out.println("원본 파일명: " + originalFileName); System.out.println("저장 파일명: " + savedFileName); System.out.println("확장자: " + fileExt); System.out.println("파일 크기: " + fileSize + " bytes"); System.out.println("==================================="); // 파일 확장자에 따른 문서 타입 결정 String docType = ""; String docTypeName = ""; if("STP".equals(fileExt) || "STEP".equals(fileExt)) { docType = "3D_CAD"; docTypeName = "3D CAD 첨부파일"; } else if("DWG".equals(fileExt) || "DXF".equals(fileExt)){ docType = "2D_DRAWING_CAD"; docTypeName = "2D(Drawing) CAD 첨부파일"; } else if("PDF".equals(fileExt)) { docType = "2D_PDF_CAD"; docTypeName = "2D(PDF) CAD 첨부파일"; } else { // 지원하지 않는 확장자는 스킵 System.out.println("지원하지 않는 확장자: " + fileExt + ", 파일명: " + originalFileName); continue; } // 품번 추출 (맨 마지막 확장자만 제거 후 하이픈 기준 추출) String extractedPartNo = extractPartNoFromFileName(originalFileName); // 품번과 정확히 일치하는 경우만 매칭 String matchedPartNo = null; System.out.println("품번 매칭 시작 - 추출된 품번: " + extractedPartNo); if(extractedPartNo != null && !extractedPartNo.isEmpty()) { // 정확한 매칭 (추출된 품번과 DB 품번이 정확히 일치) if(partNoMap.containsKey(extractedPartNo)) { matchedPartNo = extractedPartNo; System.out.println(" ✓ 품번 정확 매칭 성공: " + matchedPartNo); } } if(matchedPartNo == null) { System.out.println(" ✗ 품번 매칭 실패 - 파일명: " + originalFileName + ", 추출된 품번: " + extractedPartNo); notFoundCount++; continue; } // 해당 파트에 파일 정보 저장 Map partInfo = partNoMap.get(matchedPartNo); String partObjId = CommonUtils.checkNull((String)partInfo.get("OBJID")); Map fileMap = new HashMap<>(); fileMap.put("OBJID", CommonUtils.createObjId()); fileMap.put("TARGET_OBJID", partObjId); fileMap.put("SAVED_FILE_NAME", savedFileName); fileMap.put("REAL_FILE_NAME", originalFileName); fileMap.put("DOC_TYPE", docType); fileMap.put("DOC_TYPE_NAME", docTypeName); fileMap.put("FILE_SIZE", String.valueOf(fileSize)); fileMap.put("FILE_EXT", fileExt); fileMap.put("FILE_PATH", storagePath); fileMap.put("WRITER", userId); try { // 파일 정보 DB 저장 partMngService.insertDrawingFile(fileMap); successCount++; } catch(Exception e) { e.printStackTrace(); failCount++; } } } resultMap.put("result", "success"); resultMap.put("successCount", successCount); resultMap.put("failCount", failCount); resultMap.put("notFoundCount", notFoundCount); resultMap.put("message", "업로드가 완료되었습니다."); } catch(Exception e) { e.printStackTrace(); resultMap.put("result", "error"); resultMap.put("message", "업로드 중 오류가 발생했습니다: " + e.getMessage()); } finally { if(frc != null) { frc.clear(); } } return resultMap; } /** * PART 목록 화면에서 도면 파일 일괄 업로드 * BOM 정보 없이 전체 파트를 대상으로 파일명 매칭 * * @param request * @param session * @return */ @RequestMapping(value="/partMng/uploadDrawingFilesForPartList.do", method=RequestMethod.POST) @ResponseBody public Map uploadDrawingFilesForPartList( HttpServletRequest request, HttpSession session) { Map resultMap = new HashMap<>(); MultipartRequest multi = null; FileRenameClass frc = null; try { PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); String userId = person != null ? person.getUserId() : "plmAdmin"; // MultipartRequest로 파일 업로드 처리 String storagePath = Constants.FILE_STORAGE; int maxSize = 1024*1024*1024*9; // 9GB File storage = new File(storagePath); if(!storage.exists()) storage.mkdirs(); frc = new FileRenameClass(); multi = new MultipartRequest(request, storagePath, maxSize, "UTF-8", frc); java.util.List fileList = frc.getFileList(); // 화면에서 전달된 품번 목록 가져오기 String partNoListJson = multi.getParameter("partNoList"); if(partNoListJson == null || partNoListJson.isEmpty()) { resultMap.put("result", "fail"); resultMap.put("message", "품번 목록이 전달되지 않았습니다."); return resultMap; } // JSON 파싱 (Gson 사용) Gson gson = new Gson(); Type listType = new TypeToken>(){}.getType(); java.util.List partNoList = gson.fromJson(partNoListJson, listType); if(partNoList.isEmpty()) { resultMap.put("result", "fail"); resultMap.put("message", "페이지에 표시된 파트가 없습니다."); return resultMap; } System.out.println("========== 화면에서 전달된 품번 목록 =========="); System.out.println("품번 개수: " + partNoList.size()); System.out.println("품번 목록: " + partNoList); System.out.println("=========================================="); // 전달된 품번 목록에 해당하는 파트만 조회 Map partParam = new HashMap<>(); partParam.put("IS_LAST", "1"); partParam.put("PART_NO_LIST", partNoList); ArrayList partList = commonService.selectList("partMng.partMngListByPartNos", request, partParam); if(partList == null || partList.isEmpty()) { resultMap.put("result", "fail"); resultMap.put("message", "조회된 파트가 없습니다."); return resultMap; } // 품번 기준 파트 맵 생성 (화면에 표시된 파트만) Map partNoMap = new HashMap<>(); for(Map part : partList) { String partNo = CommonUtils.checkNull((String)part.get("PART_NO")); if(!partNo.isEmpty()) { partNoMap.put(partNo, part); } } System.out.println("매칭 가능한 품번 개수: " + partNoMap.size()); int successCount = 0; int failCount = 0; int notFoundCount = 0; // 업로드된 파일 처리 if(fileList != null && !fileList.isEmpty()) { for(Object fileObj : fileList) { Map fileInfo = (Map)fileObj; String originalFileName = CommonUtils.checkNull((String)fileInfo.get("realFileName")); String savedFileName = CommonUtils.checkNull((String)fileInfo.get("savedFileName")); String fileExt = CommonUtils.checkNull((String)fileInfo.get("fileExt")); long fileSize = Long.parseLong(CommonUtils.checkNull(fileInfo.get("fileSize"), "0")); // 파일 크기가 0이면 실제 저장된 파일에서 다시 확인 // if(fileSize == 0) { // try { // File savedFile = new File(storagePath + File.separator + savedFileName); // if(savedFile.exists()) { // fileSize = savedFile.length(); // System.out.println("파일 크기 재확인: " + fileSize + " bytes"); // } // } catch(Exception e) { // System.out.println("파일 크기 재확인 실패: " + e.getMessage()); // } // } // 확장자 대문자 변환 fileExt = fileExt.toUpperCase(); System.out.println("========== 파트 목록 파일 업로드 처리 =========="); System.out.println("원본 파일명: " + originalFileName); System.out.println("저장 파일명: " + savedFileName); System.out.println("확장자: " + fileExt); System.out.println("파일 크기: " + fileSize + " bytes"); System.out.println("=========================================="); // 파일 확장자에 따른 문서 타입 결정 String docType = ""; String docTypeName = ""; if("STP".equals(fileExt) || "STEP".equals(fileExt)) { docType = "3D_CAD"; docTypeName = "3D CAD 첨부파일"; } else if("DWG".equals(fileExt) || "DXF".equals(fileExt)) { docType = "2D_DRAWING_CAD"; docTypeName = "2D(Drawing) CAD 첨부파일"; } else if("PDF".equals(fileExt)) { docType = "2D_PDF_CAD"; docTypeName = "2D(PDF) CAD 첨부파일"; } else { // 지원하지 않는 확장자는 스킵 System.out.println("지원하지 않는 확장자: " + fileExt + ", 파일명: " + originalFileName); continue; } // 품번 추출 (맨 마지막 확장자만 제거 후 하이픈 기준 추출) String extractedPartNo = extractPartNoFromFileName(originalFileName); // 품번과 정확히 일치하는 경우만 매칭 String matchedPartNo = null; System.out.println("품번 매칭 시작 - 추출된 품번: " + extractedPartNo); if(extractedPartNo != null && !extractedPartNo.isEmpty()) { // 정확한 매칭 (추출된 품번과 DB 품번이 정확히 일치) if(partNoMap.containsKey(extractedPartNo)) { matchedPartNo = extractedPartNo; System.out.println(" ✓ 품번 정확 매칭 성공: " + matchedPartNo); } } if(matchedPartNo == null) { System.out.println(" ✗ 품번 매칭 실패 - 파일명: " + originalFileName + ", 추출된 품번: " + extractedPartNo); notFoundCount++; continue; } // 해당 파트에 파일 정보 저장 Map partInfo = partNoMap.get(matchedPartNo); String partObjId = CommonUtils.checkNull((String)partInfo.get("OBJID")); Map fileMap = new HashMap<>(); fileMap.put("OBJID", CommonUtils.createObjId()); fileMap.put("TARGET_OBJID", partObjId); fileMap.put("SAVED_FILE_NAME", savedFileName); fileMap.put("REAL_FILE_NAME", originalFileName); fileMap.put("DOC_TYPE", docType); fileMap.put("DOC_TYPE_NAME", docTypeName); fileMap.put("FILE_SIZE", String.valueOf(fileSize)); fileMap.put("FILE_EXT", fileExt); fileMap.put("FILE_PATH", storagePath); fileMap.put("WRITER", userId); try { // 파일 정보 DB 저장 partMngService.insertDrawingFile(fileMap); successCount++; } catch(Exception e) { e.printStackTrace(); failCount++; } } } resultMap.put("result", "success"); resultMap.put("successCount", successCount); resultMap.put("failCount", failCount); resultMap.put("notFoundCount", notFoundCount); resultMap.put("message", "업로드가 완료되었습니다."); } catch(Exception e) { e.printStackTrace(); resultMap.put("result", "error"); resultMap.put("message", "업로드 중 오류가 발생했습니다: " + e.getMessage()); } finally { if(frc != null) { frc.clear(); } } return resultMap; } /** * 파일명에서 품번을 추출하는 헬퍼 메서드 * * 품번 추출 규칙: * 1. 모든 확장자 제거 (.idw.pdf → .idw도 제거) * 2. 확장자 제거 후 첫 번째 하이픈(-) 위치 찾기 * 3. 하이픈 앞 자릿수에 따라 품번 길이 결정 * - 5자리: 하이픈 포함 10자리 추출 (예: 20002-0043) * - 7자리: 하이픈 포함 16자리 추출 (예: 2000200-004300-01) * * @param fileName 원본 파일명 (예: "20002-0043.idw.pdf") * @return 추출된 품번 (예: "20002-0043") 또는 null */ private String extractPartNoFromFileName(String fileName) { if(fileName == null || fileName.isEmpty()) { return null; } try { // 1단계: 모든 확장자 제거 (이중/삼중 확장자 대응) // 알려진 CAD 확장자 목록 String[] cadExtensions = {".idw", ".dwg", ".dxf", ".stp", ".step", ".pdf", ".chg"}; String fileNameWithoutExt = fileName; // 반복적으로 확장자 제거 (예: file.idw.pdf → file.idw → file) boolean extensionRemoved = true; while(extensionRemoved) { extensionRemoved = false; // 마지막 점 찾기 int lastDotIndex = fileNameWithoutExt.lastIndexOf('.'); if(lastDotIndex > 0) { String currentExt = fileNameWithoutExt.substring(lastDotIndex).toLowerCase(); // 알려진 CAD 확장자인 경우 제거 for(String ext : cadExtensions) { if(currentExt.equals(ext)) { fileNameWithoutExt = fileNameWithoutExt.substring(0, lastDotIndex); extensionRemoved = true; System.out.println("[품번 추출] 확장자 제거: " + currentExt + " → " + fileNameWithoutExt); break; } } } } System.out.println("[품번 추출] 1단계 완료 - 모든 확장자 제거: " + fileNameWithoutExt); // 2단계: 첫 번째 하이픈 위치 찾기 int firstHyphenIndex = fileNameWithoutExt.indexOf('-'); if(firstHyphenIndex == -1) { System.out.println("[품번 추출] 하이픈이 없음 - 추출 실패"); return null; } // 3단계: 하이픈 앞 자릿수 확인 String beforeHyphen = fileNameWithoutExt.substring(0, firstHyphenIndex); int beforeHyphenLength = beforeHyphen.length(); System.out.println("[품번 추출] 2단계 - 하이픈 앞 문자열: " + beforeHyphen + " (길이: " + beforeHyphenLength + ")"); // 4단계: 자릿수에 따라 품번 추출 String extractedPartNo = null; if(beforeHyphenLength == 5) { // 스핀들 설계팀: 5자리 -> 하이픈 1개 (5-4 = 10자리) // 예: 20002-0043 int targetLength = 10; if(fileNameWithoutExt.length() >= targetLength) { extractedPartNo = fileNameWithoutExt.substring(0, targetLength); System.out.println("[품번 추출] 3단계 - 5자리 패턴 (10자리 추출): " + extractedPartNo); } else { System.out.println("[품번 추출] 5자리 패턴이지만 총 길이가 10자리 미만 - 추출 실패"); } } else if(beforeHyphenLength == 7) { // 장비 개발팀: 7자리 -> 하이픈이 1개 또는 2개 // 하이픈 1개: 7-9 = 17자리 (예: 2000200-004300-0) // 하이픈 2개: 7-6-2 = 18자리 (예: 2000200-004300-02) // 두 번째 하이픈이 있는지 확인 int secondHyphenIndex = fileNameWithoutExt.indexOf('-', firstHyphenIndex + 1); if(secondHyphenIndex != -1) { // 하이픈이 2개인 경우: 7-6-2 패턴 = 18자리 // 예: 2000200-004300-02 extractedPartNo = fileNameWithoutExt; System.out.println("[품번 추출] 3단계 - 7자리 패턴 (하이픈 2개, 전체 품번): " + extractedPartNo); } else { // 하이픈이 1개인 경우: 7-9 패턴 = 17자리 // 예: 2000200-004300-0 (16자리만 추출) int targetLength = 16; if(fileNameWithoutExt.length() >= targetLength) { extractedPartNo = fileNameWithoutExt.substring(0, targetLength); System.out.println("[품번 추출] 3단계 - 7자리 패턴 (하이픈 1개, 16자리 추출): " + extractedPartNo); } else { System.out.println("[품번 추출] 7자리 패턴이지만 총 길이가 16자리 미만 - 추출 실패"); } } } else { System.out.println("[품번 추출] 하이픈 앞이 5자리 또는 7자리가 아님 - 추출 실패"); } return extractedPartNo; } catch(Exception e) { System.out.println("[품번 추출] 예외 발생: " + e.getMessage()); e.printStackTrace(); return null; } } }