FAICS/src/main/java/kcg/faics/member/service/impl/MemberServiceImpl.java

662 lines
20 KiB
Java

/**
* AdminServiceImpl.java
* @author 임새미
* @since 2016. 10. 28.
*
* 수정일 수정자 수정내용
* ------------- -------- ---------------------------
* 2016. 10. 28. 임새미 최초생성
*
*/
package kcg.faics.member.service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import kcg.faics.cmmn.egov.file.EgovFileMngUtil;
import kcg.faics.cmmn.file.FileUploadUtil;
import kcg.faics.cmmn.service.impl.CodeMapper;
import kcg.faics.member.UserType;
import kcg.faics.member.service.MemberService;
import kcg.faics.member.vo.ExMemberVO;
import kcg.faics.member.vo.MemberSearchVO;
import kcg.faics.member.vo.MemberVO;
import kcg.faics.sec.service.impl.SecurityMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.authentication.encoding.ShaPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
/**
* 사용자 정보 비지니스로직.
*
* AdminServiceImpl.java
* @author 임새미
* @since 2016. 10. 28.
*
* 수정일 수정자 수정내용
* ------------- -------- ---------------------------
* 2016. 10. 28. 임새미 최초생성
*
*/
/**
* @author kimnomin
*
*/
@Service("memberService")
public class MemberServiceImpl implements MemberService {
/**
* 사용자 Mapper 객체.
*/
@Resource(name = "memberMapper")
private MemberMapper memberMapper;
/**
* 시큐리티 Mapper 객체.
*/
@Resource(name = "securityMapper")
private SecurityMapper securityMapper;
/**
* 코드관련 Mapper 객체.
*/
@Resource(name = "codeMapper")
private CodeMapper codeMapper;
/**
* 파일 업로드 유틸리티.
*/
@Resource(name = "fileUploadUtil")
private FileUploadUtil fileUploadUtil;
/**
* 전자정부 표준프레임워크 파일관리 유틸리티.
*/
@Resource(name = "EgovFileMngUtil")
private EgovFileMngUtil fileMngUtil;
/*@Resource(name = "passwordEncoder")
private PasswordEncoder pwEncoder;*/
/**
* 비밀번호 인코더.
*/
@Resource(name = "passwordEncoder")
private ShaPasswordEncoder pwEncoder;
/**
* 사용자 사진 저장 경로.
*/
private static final String USER_IMG_SAVE_PATH = "Member.imgStorePath";
/**
* 사용자 서명 저장 경로.
*/
private static final String USER_SIGN_SAVE_PATH = "Member.signStorePath";
@Override
public HashMap<String, Object> delete(final MemberVO dataVO, final String userType)
throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
int result = 0;
if (UserType.FA.equals(userType)) {
result = memberMapper.deleteFaMemeber(dataVO);
} else if (UserType.CM.equals(userType)) {
result = memberMapper.deleteCmmnMember(dataVO);
}
resultMap.put("result", result);
return resultMap;
}
/**
* 선택한 사용자의 정보를 반환한다.
*
* @param dataVO userid
* @return 선택한 사용자 정보 반환
* @throws Exception 기본 예외 처리
*/
@Override
public MemberVO select(final MemberVO dataVO) throws Exception {
MemberVO result = memberMapper.getMember(dataVO);
if (result != null) {
result.setDutiesStr(codeMapper.getDutiesNameByCode(result.getDuties()));
result.setPlace1Str(codeMapper.getPlace1NameByCode(result.getPlace1(), false));
result.setPlace2Str(codeMapper.getPlace2NameByCode(result.getPlace1(), result.getPlace2()));
result.setPlace3Str(codeMapper.getPlace3NameByCode(result.getPlace3()));
result.setPositionStr(codeMapper.getPositionNameByCode(result.getPosition()));
result.setScholarshipStr(codeMapper.getScholarshipNameByCode(result.getScholarship()));
result.setJobtypeStr(codeMapper.getJobtypeNameByCode(result.getJobtype()));
}
return result;
}
@Override
public List<MemberVO> selectListAll(final MemberSearchVO searchVO) throws Exception {
if (UserType.FA.equals(searchVO.getUsertype())) {
return this.getFaListAll(searchVO);
} else {
return memberMapper.getCmmnListAll(searchVO);
}
}
/**
* 사용자 목록 화면을 반환한다.
*
* @param searchVO 검색, 페이지 정보 객체
* @return 사용자 리스트
* @throws Exception 기본 예외 처리
*/
@Override
public List<MemberVO> selectList(final MemberSearchVO searchVO) throws Exception {
List<MemberVO> list = null;
if (UserType.FA.equals(searchVO.getUsertype())) {
list = memberMapper.getFaMemberList(searchVO);
} else {
list = memberMapper.getCmmnMemberList(searchVO);
}
return list;
}
/**
* 검색 키워드에 따른 총 사용자 목록을 조회한다.
*
* @param searchVO 검색, 페이지 정보 객체
* @return 사용자 수
* @exception Exception 기본 예외 처리
*/
@Override
public int selectListCnt(final MemberSearchVO searchVO) throws Exception {
return memberMapper.selectListCnt(searchVO);
}
/**
* 전체 사용자 수 를 가져온다.
*
* @return 사용자 수
* @throws Exception 기본 예외 처리
*/
@Override
public int selectTotalCnt(final MemberSearchVO searchVO) throws Exception {
return memberMapper.selectTotalCnt(searchVO);
}
/**
* 외사 경찰을 추가한다.
*
* @param dataVO 사용자 정보 객체
* @param fileMap 업로드 파일정보
* @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0
* @exception Exception 기본 예외 처리
*/
@Override
@Transactional
public HashMap<String, Object> insert(final MemberVO dataVO, final Map<String, MultipartFile> fileMap) throws Exception {
if (fileMap != null && fileMap.get("img").getSize() > 0) {
String userimg = fileUploadUtil.uploadWithExt(fileMap.get("img"), USER_IMG_SAVE_PATH);
dataVO.setUserimg(userimg);
}
if (fileMap != null && fileMap.get("sign").getSize() > 0) {
String usersign = fileUploadUtil.uploadWithExt(fileMap.get("sign"), USER_SIGN_SAVE_PATH);
dataVO.setUsersign(usersign);
}
dataVO.setExcareer(dataVO.getExcareer_y() + "-" + dataVO.getExcareer_m());
dataVO.setExcareer1(dataVO.getExcareer1_y() + "-" + dataVO.getExcareer1_m());
dataVO.setExcareer2(dataVO.getExcareer2_y() + "-" + dataVO.getExcareer2_m());
dataVO.setExcareer3(dataVO.getExcareer3_y() + "-" + dataVO.getExcareer3_m());
// 보안솔루션 (CubeOne으로 처리)
//dataVO.setPasswd(pwEncoder.encodePassword(dataVO.getPasswd(), null));
HashMap<String, Object> result = new HashMap<String, Object>();
upsertCareerStat(dataVO, true);
result.put("result", memberMapper.insertFaMember(dataVO));
result.put("userid", dataVO.getUserid());
return result;
}
/**
* 사용자 정보를 업데이트 한다.
*
* @param dataVO 사용자정보 VO
* @param fileMap MultipartFile형태의 파일정보
* @param deleteFiles 삭제할 파일리스트
* @return HashMap/ seq : 게시물 번호 , result : 성공 - 1, 실패 - 0
*/
@Override
public HashMap<String, Object> update(final MemberVO dataVO, final Map<String, MultipartFile> fileMap, final String[] deleteFiles) throws Exception {
// userimg 삭제
if (dataVO.getUserimg() != null && dataVO.getUserimg().equals("")) {
fileMngUtil.deleteFile(dataVO.getUserimg(), USER_IMG_SAVE_PATH);
dataVO.setUserimg(null);
}
// usersign 삭제
if (dataVO.getUsersign() != null && dataVO.getUsersign().equals("")) {
fileMngUtil.deleteFile(dataVO.getUsersign(), USER_SIGN_SAVE_PATH);
dataVO.setUsersign(null);
}
if (fileMap != null && fileMap.get("img").getSize() > 0) {
String userimg = fileUploadUtil.uploadWithExt(fileMap.get("img"), USER_IMG_SAVE_PATH);
dataVO.setUserimg(userimg);
}
if (fileMap != null && fileMap.get("sign").getSize() > 0) {
String usersign = fileUploadUtil.uploadWithExt(fileMap.get("sign"), USER_SIGN_SAVE_PATH);
dataVO.setUsersign(usersign);
}
dataVO.setExcareer(dataVO.getExcareer_y() + "-" + dataVO.getExcareer_m());
dataVO.setExcareer1(dataVO.getExcareer1_y() + "-" + dataVO.getExcareer1_m());
dataVO.setExcareer2(dataVO.getExcareer2_y() + "-" + dataVO.getExcareer2_m());
dataVO.setExcareer3(dataVO.getExcareer3_y() + "-" + dataVO.getExcareer3_m());
if(dataVO.getPasswd() != null && !dataVO.getPasswd().equals("")) {
// 보안솔루션 (CubeOne으로 처리)
//dataVO.setPasswd(pwEncoder.encodePassword(dataVO.getPasswd(), null));
}
HashMap<String, Object> result = new HashMap<String, Object>();
upsertCareerStat(dataVO, false);
if (UserType.FA.equalsIgnoreCase(dataVO.getUsertype())) {
result.put("result", memberMapper.updateFaMember(dataVO));
} else {
result.put("result", memberMapper.updateCmmnMember(dataVO));
}
result.put("userid", dataVO.getUserid());
return result;
}
@Override
public HashMap<String, Object> updateFaMember(final MemberVO dataVO, final Map<String, MultipartFile> fileMap, final String[] deleteFiles)
throws Exception {
// userimg 삭제
if (dataVO.getUserimg() != null && dataVO.getUserimg().equals("")) {
fileMngUtil.deleteFile(dataVO.getUserimg(), USER_IMG_SAVE_PATH);
dataVO.setUserimg(null);
}
// usersign 삭제
if (dataVO.getUsersign() != null && dataVO.getUsersign().equals("")) {
fileMngUtil.deleteFile(dataVO.getUsersign(), USER_SIGN_SAVE_PATH);
dataVO.setUsersign(null);
}
if (fileMap != null && fileMap.get("img").getSize() > 0) {
String userimg = fileUploadUtil.uploadWithExt(fileMap.get("img"), USER_IMG_SAVE_PATH);
dataVO.setUserimg(userimg);
}
if (fileMap != null && fileMap.get("sign").getSize() > 0) {
String usersign = fileUploadUtil.uploadWithExt(fileMap.get("sign"), USER_SIGN_SAVE_PATH);
dataVO.setUsersign(usersign);
}
dataVO.setExcareer(dataVO.getExcareer_y() + "-" + dataVO.getExcareer_m());
dataVO.setExcareer1(dataVO.getExcareer1_y() + "-" + dataVO.getExcareer1_m());
dataVO.setExcareer2(dataVO.getExcareer2_y() + "-" + dataVO.getExcareer2_m());
dataVO.setExcareer3(dataVO.getExcareer3_y() + "-" + dataVO.getExcareer3_m());
if(dataVO.getPasswd() != null && !dataVO.getPasswd().equals("")) {
// 보안솔루션 (CubeOne으로 처리)
//dataVO.setPasswd(pwEncoder.encodePassword(dataVO.getPasswd(), null));
}
HashMap<String, Object> resultMap = new HashMap<String, Object>();
upsertCareerStat(dataVO, false);
int result = memberMapper.updateFaMember(dataVO);
resultMap.put("result", result);
// 외사경찰 수정에 성공하고, 외사경찰이 일반경찰로 변경되었다면
// 과거외사경찰 테이블에 입력 후 외사경찰 테이블에서 삭제한다.
if (result == 1 && UserType.CM.equals(dataVO.getUsertype())) {
resultMap = moveFaMemberToExMember(dataVO);
}
resultMap.put("result", result);
resultMap.put("userid", dataVO.getUserid());
return resultMap;
}
/**
* 일반경찰을 등록한다. (기존에 등록된 일반경찰이면 삭제한 후 입력한다.)
*
* @param dataVO
* 사용자 정보 VO
* @return 1-성공, 0-실패
* @throws Exception
* 기본 예외 처리
*/
public int insertCmmnMember(final MemberVO dataVO) throws Exception {
delete(dataVO, UserType.CM);
return memberMapper.insertCmmnMember(dataVO);
}
@Override
public int updateCmmnMemberInfo(final MemberVO dataVO) throws Exception {
return memberMapper.updateCmmnMemberInfo(dataVO);
}
@Override
public HashMap<String, Object> delete(final MemberVO dataVO) throws Exception {
return delete(dataVO, UserType.FA);
}
/**
* 사용자 비밀번호를 업데이트한다.
*
* @param dataVO 사용자 정보 VO
* @return HashMap / match : 현재 비밀번호 일치 여부, result : 성공 - 1, 실패 - 0
* @throws Exception 기본 예외 처리
*/
@Override
public HashMap<String, Object> updatePassword(final MemberVO dataVO) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
int result = 0;
MemberVO memberVO = memberMapper.getMember(dataVO);
// 다르면 실패처리
if (!pwEncoder.isPasswordValid(memberVO.getPasswd().toLowerCase(), dataVO.getPasswd(), null)) {
resultMap.put("match", false);
} else {
// 같으면 변겅처리
dataVO.setPasswd(dataVO.getNpasswd());
//// 보안솔루션 (CubeOne으로 처리)
//dataVO.setPasswd(pwEncoder.encodePassword(dataVO.getNpasswd(), null));
result = memberMapper.updatePassword(dataVO);
resultMap.put("match", true);
}
resultMap.put("result", result);
return resultMap;
}
/**
* 경력 정보를 업데이트 한다.
*
* @param dataVO 사용자정보 VO
* @param isInsert 추가할지 삭제할지 여부
* @return HashMap/ result : 성공 - 1, 실패 - 0
* @throws Exception 기본 예외 처리
*/
private int upsertCareerStat(final MemberVO dataVO, final boolean isInsert) throws Exception {
int result = 0;
if (isInsert) {
result = memberMapper.insertCareerStat(dataVO);
} else {
result = memberMapper.updateCareerStat(dataVO);
}
return result;
}
/**
* 비밀번호를 초기화한다.
*
* @param dataVO 사용자 정보 VO
* @return HashMap / result : 성공 - 1, 실패 - 0
* @throws Exception 기본 예외 처리
*/
@Override
@Transactional
public HashMap<String, Object> initPassword(final MemberVO dataVO, final String[] users) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
int result = 0;
for (int i = 0; i < users.length; i++) {
dataVO.setUserid(users[i]);
result = memberMapper.updatePassword(dataVO);
if (result == 0) {
throw new Exception();
}
}
resultMap.put("result", result);
return resultMap;
}
/**
* 외사경찰의 정원 및 현황을 가져온다.
*
* @return 현황리스트
* @throws Exception 기본 예외 처리
*/
@Override
public List<HashMap<String, Object>> getCapacityManagement() throws Exception {
return memberMapper.getCapacityManagement();
}
/**
* 외사경력 현황을 가져온다.
*
* @return 외사경력 현황리스트
* @throws Exception 기본 예외 처리
*/
@Override
public List<HashMap<String, Object>> getCareerStatus() throws Exception {
return memberMapper.getCareerStatus();
}
/**
* 과거외사경찰 목록을 가져온다.
*
* @param memberSearchVO 검색, 페이지 정보 객체
* @return 과거외사경찰 리스트
* @throws Exception 기본 예외 처리
*/
@Override
public List<HashMap<String, Object>> exmemberList(final MemberSearchVO memberSearchVO) throws Exception {
return memberMapper.exmemberList(memberSearchVO);
}
@Override
public List<ExMemberVO> exmemberVoList(final MemberSearchVO memberSearchVO)
throws Exception {
return memberMapper.exmemberVoList(memberSearchVO);
}
/**
* 검색 키워드에 따른 총 과거외사경찰 목록을 조회한다.
*
* @param searchVO 검색, 페이지 정보 객체
* @return 사용자 수
* @exception Exception 기본 예외 처리
*/
@Override
public int selectExmemberListCnt(final MemberSearchVO searchVO) throws Exception {
return memberMapper.selectExmemberListCnt(searchVO);
}
/**
* 전체 과거외사경찰 사용자 수 를 가져온다.
*
* @return 사용자 수
* @throws Exception 기본 예외 처리
*/
@Override
public int selectExmemberTotalCnt(final MemberSearchVO searchVO) throws Exception {
return memberMapper.selectExmemberTotalCnt(searchVO);
}
@Override
public List<MemberVO> getFaListAll(final MemberSearchVO searchVO) throws Exception {
if (StringUtils.isBlank(searchVO.getUsertype()) || StringUtils.isBlank(searchVO.getUserid())) {
return memberMapper.getFaListAll(searchVO);
} else {
return memberMapper.getSearchMember(searchVO);
}
}
@Override
public HashMap<String, Object> failLogin(final MemberVO dataVO) throws Exception {
MemberVO vo = select(dataVO);
vo.setPasswd("");
vo.incChkcnt();
return update(vo, null, null);
}
@Override
public HashMap<String, Object> initChkcnt(final MemberVO dataVO) throws Exception {
MemberVO vo = select(dataVO);
vo.setPasswd("");
vo.setChkcnt(0);
return update(vo, null, null);
}
@Override
public ExMemberVO selectExMember(final ExMemberVO searchVO) throws Exception {
return memberMapper.selectExMemeber(searchVO);
}
/**
* 외사경찰을 과거외사경찰로 이동한다.
*
* @param dataVO
* 외사경찰 VO
* @return Map("result") = 1 : 성공, 0 : 실패
* @throws Exception
* 기본 예외 처리
*/
@Transactional
private HashMap<String, Object> moveFaMemberToExMember(final MemberVO dataVO) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
dataVO.setUsertype(UserType.FA);
MemberVO memberVO = select(dataVO);
memberVO.setHashedPasswd(true);
resultMap = insertExMember(memberVO);
if ((Integer) resultMap.get("result") == 1) {
resultMap.put("result", 0);
resultMap = delete(dataVO);
}
//20210224 최형석
//만약 패스워드 입력안했으면..기존에 사용됬던 패스워드를 가져온다.
if(dataVO.getPasswd().equals("") || dataVO.getPasswd() == null) {
dataVO.setPasswd(memberVO.getPasswd());
}
int tmpResult = insertCmmnMember(dataVO);
Object res = resultMap.get("result");
if (res == null || (Integer) res != 1) {
throw new Exception();
}
return resultMap;
}
/**
* 과거외사경찰을 외사경찰로 이동한다.
*
* @param dataVO
* 과거외사경찰 VO
* @return Map("result") = 1 : 성공, 0 : 실패
* @throws Exception
* 기본 예외 처리
*/
@Transactional
private HashMap<String, Object> moveExMemberToFaMember(final ExMemberVO dataVO) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
ExMemberVO updatedVO = selectExMember(dataVO);
updatedVO.setHashedPasswd(true);
resultMap = insert(updatedVO, null);
if ((Integer) resultMap.get("result") == 1) {
resultMap.put("result", 0);
resultMap = deleteExMember(updatedVO);
}
Object res = resultMap.get("result");
if (res == null || (Integer) res < 1) {
throw new Exception();
}
return resultMap;
}
/**
* 과거외사경찰 정보를 입력한다.
*
* @param dataVO
* 과거외사경찰 VO
* @return Map("result") = 1 : 성공, 0 : 실패
* @throws Exception
* 기본 예외 처리
*/
private HashMap<String, Object> insertExMember(final ExMemberVO dataVO) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
int result = memberMapper.insertExMemeber(dataVO);
resultMap.put("result", result);
return resultMap;
}
/**
* 과거외사경찰 정보를 입력한다.
*
* @param dataVO
* 외사경찰 VO
* @return Map("result") = 1 : 성공, 0 : 실패
* @throws Exception
* 기본 예외 처리
*/
private HashMap<String, Object> insertExMember(final MemberVO dataVO) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
int result = memberMapper.insertExMemeber(dataVO);
resultMap.put("result", result);
return resultMap;
}
@Override
public HashMap<String, Object> updateExMember(final ExMemberVO dataVO)
throws Exception {
String savedImgName = "";
if (dataVO.getImg() != null && dataVO.getImg().getSize() > 0) {
savedImgName = fileUploadUtil.uploadWithExt(dataVO.getImg(), USER_IMG_SAVE_PATH);
dataVO.setUserimg(savedImgName);
}
HashMap<String, Object> resultMap = new HashMap<String, Object>();
int result = memberMapper.updateExMember(dataVO);
resultMap.put("result", result);
// 과거외사경찰 수정에 성공하고, 과거외사경찰(현재는 일반경찰)이 외사경찰로 변경되었다면
// 외사경찰 테이블에 입력 후 과거외사경찰 테이블에서 삭제한다.
if (result >= 1 && UserType.FA.equals(dataVO.getUsertype())) {
resultMap = moveExMemberToFaMember(dataVO);
}
resultMap.put("result", result);
return resultMap;
}
@Override
public HashMap<String, Object> deleteExMember(final ExMemberVO dataVO)
throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("result", memberMapper.deleteExMemeber(dataVO));
return resultMap;
}
public int deleteFaMemberList(MemberVO user) throws Exception{
return memberMapper.deleteFaMemberList(user);
}
public int deleteCmmnMemberList(MemberVO user) throws Exception{
return memberMapper.deleteCmmnMemberList(user);
}
}