FAICS/src/main/java/kcg/faics/tg/web/WeakPlaceController.java

419 lines
13 KiB
Java

package kcg.faics.tg.web;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import kcg.faics.cmmn.file.FileResponser;
import kcg.faics.cmmn.service.CodeService;
import kcg.faics.cmmn.vo.CodeVO;
import kcg.faics.sec.LoginUserVO;
import kcg.faics.sec.UserUtil;
import kcg.faics.tg.service.WeakPlaceService;
import kcg.faics.tg.vo.WeakPlaceSearchVO;
import kcg.faics.tg.vo.WeakPlaceVO;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.FileCopyUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springmodules.validation.commons.DefaultBeanValidator;
import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
/**
* 외사취약지 컨트롤러.
*
* @author kimnomin
*
*/
@Controller
@RequestMapping("/target/weakplace")
public class WeakPlaceController {
/**
* properties값을 가져오는 인터페이스.
**/
@Resource(name = "propertiesService")
private EgovPropertyService propertiesService;
/**
* message.properties의 값을 가져오는 인터페이스.
*/
@Autowired
private MessageSource messageSource;
/**
* 코드관련 정보 인터페이스.
*/
@Resource(name = "codeService")
private CodeService codeService;
/**
* Validator - 유효성 검사.
**/
@Resource(name = "beanValidator")
private DefaultBeanValidator beanValidator;
/**
* 외사취약지 비지니스 로직 클래스.
*/
@Resource(name = "weakPlaceService")
private WeakPlaceService weakPlaceService;
/**
* 외사취약지 조회 화면을 반환한다.
*
* @param vo
* 검색할 외사취약지 VO
* @param model
* Model 객체
* @return 외사취약지 조회 화면
* @throws Exception
* 기본 예외 처리
*/
@RequestMapping(value = "/view.do")
public String view(final WeakPlaceVO vo, final ModelMap model)
throws Exception {
LoginUserVO loginUserVO = UserUtil.getMemberInfo();
model.addAttribute("loginUserVO", loginUserVO);
WeakPlaceVO weakPlaceVO = weakPlaceService.select(vo);
model.addAttribute("weakPlaceVO", weakPlaceVO);
String filename1Ext = "";
String filename1 = weakPlaceVO.getFilename1();
if (!StringUtils.isBlank(filename1)) {
filename1Ext = FilenameUtils.getExtension(filename1).toLowerCase();
}
model.addAttribute("filename1Ext", filename1Ext);
return "/target/weakPlaceView.tiles";
}
/**
* 외사취약지 목록 화면을 반환한다.
*
* @param searchVO
* 검색정보 VO
* @param model
* Model 객체
* @return 외사취약지 목록화면
* @throws Exception
* 기본 예외 처리
*/
@RequestMapping(value = "/list.do")
public String list(@ModelAttribute("searchVO") final WeakPlaceSearchVO searchVO,
final ModelMap model) throws Exception {
LoginUserVO loginUserVO = UserUtil.getMemberInfo();
model.addAttribute("loginUserVO", loginUserVO);
List<CodeVO> placeList = codeService.getPlace1List(CodeService.POLICE_STATION_LIST);
model.addAttribute("placeList", placeList);
List<HashMap<String, Object>> statsPerPlace = weakPlaceService.selectStatsPerPlace();
model.addAttribute("statsPerPlace", statsPerPlace);
List<WeakPlaceVO> weakPlaceList = weakPlaceService.selectList(searchVO);
model.addAttribute("weakPlaceList", weakPlaceList);
Date today = new Date();
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy. MM. dd.");
String todayStr = simpleDate.format(today);
model.addAttribute("today", todayStr);
return "/target/weakPlaceList.tiles";
}
/**
* 외사취약지 입력화면을 반환한다.
*
* @param model
* Model 객체
* @param weakPlaceVO
* 입력할 외사취약지 VO
* @return 외사취약지 입력화면
* @throws Exception
* 기본예외처리
*/
@RequestMapping(value = "/add.do")
public String add(final Model model, final WeakPlaceVO weakPlaceVO) throws Exception {
LoginUserVO loginUserVO = UserUtil.getMemberInfo();
WeakPlaceVO vo;
if (weakPlaceVO == null) {
vo = new WeakPlaceVO();
} else {
vo = weakPlaceVO;
}
vo.setWriter(loginUserVO.getUserid());
vo.setPlace1(loginUserVO.getPlace1());
vo.setPlace1str(loginUserVO.getPlace1Str());
List<CodeVO> placeList = codeService.getPlace1List(CodeService.POLICE_STATION_LIST);
int tempWpNo = 0;
String tempPlace1Code = "";
HashMap<String, Integer> wpNoMap = new HashMap<String, Integer>();
for (int i = 0; i < CodeService.POLICE_STATION_LIST.length; i++) {
tempWpNo = 0;
tempPlace1Code = CodeService.POLICE_STATION_LIST[i];
tempWpNo = weakPlaceService.selectMaxWpNo(tempPlace1Code);
wpNoMap.put(tempPlace1Code, ++tempWpNo);
// 중앙부처 사용자는 placeList의 첫번째 기관의 wpno 값을 기본으로 한다.
if ("PS00".equalsIgnoreCase(vo.getPlace1())
&& tempPlace1Code.equalsIgnoreCase(placeList.get(0).getCode2())) {
vo.setWpNo(tempWpNo);
} else if (tempPlace1Code.equalsIgnoreCase(vo.getPlace1())) {
vo.setWpNo(tempWpNo);
}
}
model.addAttribute("wpNoMap", wpNoMap);
model.addAttribute("placeList", placeList);
model.addAttribute("weakPlaceVO", vo);
model.addAttribute("loginUserVO", "loginUserVO");
model.addAttribute("registerFlag", "create");
return "/target/weakPlaceAdd.tiles";
}
/**
* 외사취약지 정보를 입력한다.
*
* @param multiRequest
* mutipartform 객체
* @param weakPlaceVO
* 외사취약지 VO
* @param bindingResult
* 유효성 검사결과 객체
* @param model
* 모델 객체
* @param status
* SessionStatus 객체
* @return 외사취약지 조회 화면
* @throws Exception
* 기본 예외 처리
*/
@RequestMapping(value = "/add.do", method = RequestMethod.POST)
public String add(final MultipartHttpServletRequest multiRequest,
@Valid @ModelAttribute("weakPlaceVO") final WeakPlaceVO weakPlaceVO,
final BindingResult bindingResult, final Model model,
final SessionStatus status) throws Exception {
// 사용자 인증 검사
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated) {
// 유효성 검사
beanValidator.validate(weakPlaceVO, bindingResult);
if (bindingResult.hasErrors()) {
model.addAttribute("weakPlaceVO", weakPlaceVO);
model.addAttribute("registerFlag", "create");
return "target/weakPlaceAdd.tiles";
}
// 파일 저장 및 데이터 입력
final Map<String, MultipartFile> fileMap = multiRequest.getFileMap();
HashMap<String, Object> map = weakPlaceService.insert(weakPlaceVO, fileMap);
status.setComplete();
if ((Integer) map.get("result") == 1) {
return String.format("redirect:/target/weakplace/view.do?place1=%s&wpNo=%s", map.get("place1"), map.get("wpNo"));
}
}
return "error/bizError";
}
/**
* 외사취약지 수정화면을 반환한다.
*
* @param model
* Model 객체
* @param weakPlaceVO
* 외사취약지 VO
* @return 외사취약지 수정화면
* @throws Exception
* 기본예외처리
*/
@RequestMapping(value = "/update.do", method = RequestMethod.GET)
public String update(final Model model, final WeakPlaceVO weakPlaceVO) throws Exception {
LoginUserVO loginUserVO = UserUtil.getMemberInfo();
// 관리자만 수정 가능
if (loginUserVO.getAuthAdmin() == 1) {
WeakPlaceVO vo = weakPlaceService.select(weakPlaceVO);
model.addAttribute("weakPlaceVO", vo);
model.addAttribute("loginUserVO", loginUserVO);
model.addAttribute("registerFlag", "modify");
return "/target/weakPlaceAdd.tiles";
}
return "redirect:/target/weakplace/view.do?place1="
+ weakPlaceVO.getPlace1() + "&wpNo=" + weakPlaceVO.getWpNo();
}
/**
* 외사취약지 정보를 수정한다.
*
* @param multiRequest
* mutipartform 객체
* @param weakPlaceVO
* 외사취약지 VO
* @param bindingResult
* 유효성 검사결과 객체
* @param model
* 모델 객체
* @param status
* SessionStatus 객체
* @return 외사취약지 조회 화면
* @throws Exception
* 기본 예외 처리
*/
@RequestMapping(value = "/update.do", method = RequestMethod.POST)
public String update(final MultipartHttpServletRequest multiRequest,
@Valid @ModelAttribute("weakPlaceVO") final WeakPlaceVO weakPlaceVO,
final BindingResult bindingResult, final Model model,
final SessionStatus status) throws Exception {
LoginUserVO loginUserVO = UserUtil.getMemberInfo();
// 관리자만 수정 가능
if (loginUserVO.getAuthAdmin() == 1) {
// 유효성 검사
beanValidator.validate(weakPlaceVO, bindingResult);
if (bindingResult.hasErrors()) {
model.addAttribute("weakPlaceVO", weakPlaceVO);
model.addAttribute("registerFlag", "modify");
return "target/weakPlaceAdd.tiles";
}
String[] deleteFiles = multiRequest.getParameterValues("deleteFile");
final Map<String, MultipartFile> fileMap = multiRequest.getFileMap();
HashMap<String, Object> map = weakPlaceService.update(weakPlaceVO, fileMap, deleteFiles);
status.setComplete();
if ((Integer) map.get("result") > 0) {
return "redirect:/target/weakplace/view.do?place1="
+ weakPlaceVO.getPlace1() + "&wpNo="
+ weakPlaceVO.getWpNo();
}
}
return "redirect:/target/weakplace/view.do?place1="
+ weakPlaceVO.getPlace1() + "&wpNo=" + weakPlaceVO.getWpNo();
}
/**
* 외사취약지 정보를 삭제한다.
*
* @param weakPlaceVO
* 외사취약지 VO
* @param model
* Model 객체
* @param status
* SessionStatus 객체
* @return 외사취약지 목록 화면
* @throws Exception
* 기본 예외 처리
*/
@RequestMapping(value = "/delete.do", method = RequestMethod.POST)
public String delete(final WeakPlaceVO weakPlaceVO, final Model model,
final SessionStatus status) throws Exception {
LoginUserVO loginUserVO = UserUtil.getMemberInfo();
// 관리자만 삭제 가능
if (loginUserVO.getAuthAdmin() == 1) {
WeakPlaceVO vo = weakPlaceService.select(weakPlaceVO);
if (vo != null) {
HashMap<String, Object> map = weakPlaceService.delete(weakPlaceVO);
if ((Integer) map.get("result") > 0) {
return "redirect:/target/weakplace/list.do";
}
}
}
return "redirect:/susa/incident/view.do?place1="
+ weakPlaceVO.getPlace1() + "&wpNo=" + weakPlaceVO.getWpNo();
}
/**
* 파일을 반환한다.
*
* @param weakPlaceVO
* 외사취약지 VO
* @param seq
* 파일 인덱스
* @param request
* HttpServletRequest 객체
* @param response
* HttpServletResponse 객체
* @throws Exception
* 기본 예외 처리
*/
@RequestMapping(value = "/download.do")
public void fileResponse(final WeakPlaceVO weakPlaceVO, final int seq,
final HttpServletRequest request, final HttpServletResponse response) throws Exception {
WeakPlaceVO vo = weakPlaceService.select(weakPlaceVO);
String filename = "";
if (seq == 1) {
filename = vo.getFilename1();
} else if (seq == 2) {
filename = vo.getFilename2();
}
if (StringUtils.isNotBlank(filename)) {
String fileFullPath = propertiesService.getString("Target.wp.fileStorePath") + filename;
File file = new File(fileFullPath);
if (file.exists()) {
FileResponser.setResponse(file, filename, request, response);
BufferedInputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(file));
FileCopyUtils.copy(in, response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else {
response.setStatus(HttpStatus.NOT_FOUND.value());
throw new Exception();
}
}
}
}