package com.dbnt.faisp.fpiMgt; import com.dbnt.faisp.authMgt.service.AuthMgtService; import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanApprv; import com.dbnt.faisp.fpiMgt.monthPlan.service.MonthPlanService; import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanBoard; import com.dbnt.faisp.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequiredArgsConstructor @RequestMapping("/fpiMgt") public class FpiMgtController { // 외사경찰견문관리 private final MonthPlanService monthPlanService; private final AuthMgtService authMgtService; @GetMapping("/monthPlanPage") public ModelAndView monthPlanPage(@AuthenticationPrincipal UserInfo loginUser, PlanBoard planBoard){ ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairPlan/monthPlan"); Map params = new HashMap<>(); params.put("userSeq", loginUser.getUserSeq()); params.put("menuUrl", "/fpiMgt/monthPlanPage"); //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(params).get(0).getAccessAuth(); switch (accessAuth){ case "ACC001": // 조회 case "ACC002": // 작성 // 자신이 작성한 문서만 열람가능 planBoard.setWrtUserSeq(loginUser.getUserSeq()); break; case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 planBoard.setOrganCdList(loginUser.getOrganCdList()); mav.addObject("mgtOrganList", loginUser.getOrganCdList()); break; } //결재권한 확인 String apprvAuth = authMgtService.selectApprovalConfigList(params).get(0).getApprovalAuth(); mav.addObject("accessAuth", accessAuth); mav.addObject("apprvAuth", apprvAuth); planBoard.setQueryInfo(); mav.addObject("planList", monthPlanService.selectPlanBoardList(planBoard)); planBoard.setContentCnt(monthPlanService.selectPlanBoardListCnt(planBoard)); planBoard.setPaginationInfo(); mav.addObject("searchParams", planBoard); return mav; } @GetMapping("/planEditModal") public ModelAndView planEditModal(@AuthenticationPrincipal UserInfo loginUser, PlanBoard planBoard){ ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairPlan/planEditModal"); if(planBoard.getPlanKey()!=null){ planBoard = monthPlanService.selectPlanBoard(planBoard.getPlanKey()); }else{ planBoard.setWrtOrgan(loginUser.getOgCd()); planBoard.setWrtUserSeq(loginUser.getUserSeq()); planBoard.setWrtUserNm(loginUser.getUserNm()); planBoard.setWrtDt(LocalDateTime.now()); } mav.addObject("plan", planBoard); return mav; } @GetMapping("/planViewModal") public ModelAndView planViewModal(PlanBoard planBoard){ ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairPlan/planViewModal"); planBoard = monthPlanService.selectPlanBoard(planBoard.getPlanKey()); mav.addObject("plan", planBoard); return mav; } @PostMapping("/savePlan") public Integer savePlan(PlanBoard planBoard, @RequestParam(value = "planInfos", required = false) List planInfos, @RequestParam(value = "detailPlanInfos", required = false)List detailPlanInfos, MultipartHttpServletRequest request, @RequestParam(value = "fileSeq", required = false) List deleteFileSeq){ planBoard.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); return monthPlanService.savePlanBoard(planBoard, planInfos, detailPlanInfos, deleteFileSeq); } @GetMapping("/apprvStayPage") public ModelAndView apprvStayPage(@AuthenticationPrincipal UserInfo loginUser, PlanBoard planBoard){ ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairPlan/stayPlan"); Map params = new HashMap<>(); params.put("userSeq", loginUser.getUserSeq()); params.put("menuUrl", "/fpiMgt/monthPlanPage"); //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(params).get(0).getAccessAuth(); switch (accessAuth){ case "ACC001": // 조회 case "ACC002": // 작성 // 자신의 관서 내에서 작성한 문서만 열람가능 planBoard.setWrtOrgan(loginUser.getOgCd()); break; case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 planBoard.setOrganCdList(loginUser.getOrganCdList()); mav.addObject("mgtOrganList", loginUser.getOrganCdList()); break; } //결재권한 확인 String apprvAuth = authMgtService.selectApprovalConfigList(params).get(0).getApprovalAuth(); if(apprvAuth==null) { planBoard.setWrtUserSeq(loginUser.getUserSeq()); }else{ mav.addObject("userNm", loginUser.getUserNm()); switch (apprvAuth){ case "APC004": // 계장대행 case "APC003": // 계장 // 결재대기 문서 조회 planBoard.setPlanState("DST002"); break; case "APC002": // 부장대행 case "APC001": // 부장 // 계장승인 문서 조회 planBoard.setPlanState("DST004"); break; } } mav.addObject("accessAuth", accessAuth); mav.addObject("apprvAuth", apprvAuth); planBoard.setQueryInfo(); mav.addObject("planList", monthPlanService.selectPlanBoardList(planBoard)); planBoard.setContentCnt(monthPlanService.selectPlanBoardListCnt(planBoard)); planBoard.setPaginationInfo(); mav.addObject("searchParams", planBoard); return mav; } @PostMapping("/planStateChange") public Integer planStateChange(@AuthenticationPrincipal UserInfo loginUser, PlanApprv apprv){ apprv.setUserSeq(loginUser.getUserSeq()); apprv.setUserNm(loginUser.getUserNm()); apprv.setSaveDt(LocalDateTime.now()); return monthPlanService.planStateChange(apprv); } @GetMapping("/apprvCommitPage") public ModelAndView apprvCommitPage(@AuthenticationPrincipal UserInfo loginUser, PlanBoard planBoard){ ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairPlan/commitPlan"); Map params = new HashMap<>(); params.put("userSeq", loginUser.getUserSeq()); params.put("menuUrl", "/fpiMgt/monthPlanPage"); //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(params).get(0).getAccessAuth(); switch (accessAuth){ case "ACC001": // 조회 case "ACC002": // 작성 // 자신의 관서 내에서 작성한 문서만 열람가능 planBoard.setWrtOrgan(loginUser.getOgCd()); break; case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 planBoard.setOrganCdList(loginUser.getOrganCdList()); mav.addObject("mgtOrganList", loginUser.getOrganCdList()); break; } //결재권한 확인 String apprvAuth = authMgtService.selectApprovalConfigList(params).get(0).getApprovalAuth(); if(apprvAuth==null) { planBoard.setWrtUserSeq(loginUser.getUserSeq()); planBoard.setUserType("normal"); }else{ switch (apprvAuth) { case "APC004": // 계장대행 case "APC003": // 계장 // 계장반려, 계장승인 문서 조회 planBoard.setUserType("section"); break; case "APC002": // 부장대행 case "APC001": // 부장 // 부장반려, 부장승인 문서 조회 planBoard.setUserType("head"); break; } } mav.addObject("accessAuth", accessAuth); mav.addObject("apprvAuth", apprvAuth); planBoard.setQueryInfo(); mav.addObject("planList", monthPlanService.selectPlanBoardList(planBoard)); planBoard.setContentCnt(monthPlanService.selectPlanBoardListCnt(planBoard)); planBoard.setPaginationInfo(); mav.addObject("searchParams", planBoard); return mav; } }