Java tutorial
/* * Copyright (c) 2016 OpenDesign All rights reserved. * * This software is the confidential and proprietary information of OpenDesign. * You shall not disclose such Confidential Information and shall use it * only in accordance with the terms of the license agreement you entered into * with OpenDesign. */ package com.opendesign.service; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import com.opendesign.dao.CommonDAO; import com.opendesign.dao.ProjectDAO; import com.opendesign.dao.UserDAO; import com.opendesign.utils.CmnConst.CheckRule; import com.opendesign.utils.CmnConst.FileUploadDomain; import com.opendesign.utils.CmnConst.RstConst; import com.opendesign.utils.CmnUtil; import com.opendesign.utils.Day; import com.opendesign.utils.ThumbnailManager; import com.opendesign.vo.AlarmVO; import com.opendesign.vo.CategoryVO; import com.opendesign.vo.ItemLikeVO.ItemType; import com.opendesign.vo.ProjectGroupReqVO; import com.opendesign.vo.ProjectGroupReqVO.ProjectGroupReqStatus; import com.opendesign.vo.ProjectGroupVO; import com.opendesign.vo.ProjectMemberVO; import com.opendesign.vo.ProjectSubjectVO; import com.opendesign.vo.ProjectVO; import com.opendesign.vo.ProjectWorkMemberVO; import com.opendesign.vo.ProjectWorkVO; import com.opendesign.vo.ProjectWorkVerVO; import com.opendesign.vo.SearchGroupVO; import com.opendesign.vo.SearchVO; import com.opendesign.vo.UserVO; import com.opendesign.websocket.SocketHandler; /** * * <pre> * ?? ?? ? ? * </pre> * * @author hanchanghao * @since 2016. 9. 21. */ @Service public class ProjectService { /** * */ private static final String VERSION_START = "1.0"; /** * (log4j) ? */ private final Logger LOGGER = LogManager.getLogger(this.getClass()); /** * ? DAO ? */ @Autowired ProjectDAO dao; /** * ? DAO ? */ @Autowired UserDAO userDao; /** * ? */ @Autowired CommonService commonService; /** * DAO ? */ @Autowired CommonDAO commonDao; /** * ? */ @Autowired SocketHandler websocketHandler; /** * ?? ? ? * * @param paramMap * @return */ public List<ProjectVO> selectProjectList(Map<String, Object> paramMap) { List<ProjectVO> projectList = dao.selectProjectList(paramMap); for (ProjectVO vo : projectList) { vo.setCategoryList(dao.selectProjectCategoryList(vo.getSeq())); } return projectList; } /** * ? ? ? * * @param memberSeq * @return */ public List<ProjectVO> selectMyProjectList(int memberSeq) { return dao.selectMyProjectList(memberSeq); } /** * ?? ? ? * * @param paramMap * @return */ public int selectProjectCount(Map<String, Object> paramMap) { return dao.selectProjectCount(paramMap); } /** * ? ? * * @param memberSeq * @return */ public List<ProjectGroupVO> selectMyProjectGroupList(int memberSeq) { return dao.selectMyProjectGroupList(memberSeq); } /** * ?? ? ? * * @param project * @param categorys * @param emails * @return */ @Transactional public int insertProject(ProjectVO project, String[] categorys, String[] emails) { ProjectVO iProject = dao.insertProject(project); int projectSeq = iProject.getSeq(); String registerTime = iProject.getRegisterTime(); dao.insertProjectCategory(projectSeq, categorys, registerTime); dao.insertProjectMember(projectSeq, emails, registerTime); return projectSeq; } /** * ?? ? * * @param project * @param categorys * @param emails * @return */ @Transactional public int updateProject(ProjectVO project, String[] categorys, String[] emails) { int result = dao.updateProject(project); int projectSeq = project.getSeq(); String updateTime = project.getUpdateTime(); dao.insertProjectCategory(projectSeq, categorys, updateTime); dao.insertProjectMember(projectSeq, emails, updateTime); return result; } /** * ?? ? * * @param projectVO * seq * @param loginUser * @return */ @Transactional public Map<String, Object> deleteProject(ProjectVO projectVO, UserVO loginUser) { Map<String, Object> resultMap = new HashMap<String, Object>(); if (loginUser == null || StringUtils.isEmpty(loginUser.getSeq())) { resultMap.put(RstConst.P_NAME, RstConst.V_NEED_LOGIN); return resultMap; } projectVO.setOwnerSeq(Integer.parseInt(loginUser.getSeq())); dao.deleteProject(projectVO); resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * ? * * @param schWord * @return */ public List<ProjectMemberVO> selectFindMemberList(String schWord) { return dao.selectFindMember(schWord); } /** * ? ? ? * * @param memberSeq * @param projectSeq * @return */ public ProjectVO selectMyProject(int memberSeq, int projectSeq) { return dao.selectMyProject(memberSeq, projectSeq); } /** * ?? ? ? * * @param projectSeq * @return */ public ProjectVO selectProjectInfo(Map<String, Object> paramMap) { ProjectVO project = dao.selectProjectInfo(paramMap); if (project != null) { project.setCategoryList(dao.selectProjectCategoryList(project.getSeq())); } // // UserVO userVO = CmnUtil.getLoginUser(request); // === like // if (userVO != null) { // boolean curUserLikedYN = commonService.selectProjectSubjectLiked(userVO.getSeq(), workSeq); // workVO.setCurUserLikedYN(curUserLikedYN); // } return project; } //? . public int projectLiked() { return 0; } /** * ?? ? ? * * @param projectSeq * @return */ public List<CategoryVO> selectProjectCategoryList(int projectSeq) { return dao.selectProjectCategoryList(projectSeq); } /** * ?? ? * * @param projectSeq * @return */ public Object selectProjectMemberList(int projectSeq) { return dao.selectProjectMemberList(projectSeq); } /** * ? ? * * @param subjectVO * @param request * @return */ @Transactional public Map<String, Object> insertProjectSubject(ProjectSubjectVO subjectVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); UserVO user = CmnUtil.getLoginUser(request); subjectVO.setMemberSeq(user.getSeq()); CmnUtil.setCmnDate(subjectVO); dao.insertProjectSubject(subjectVO); resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * ? * * @param subjectVO * @param request * @return */ @Transactional public Map<String, Object> updateProjectSubject(ProjectSubjectVO subjectVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); UserVO user = CmnUtil.getLoginUser(request); subjectVO.setMemberSeq(user.getSeq()); CmnUtil.setCmnDate(subjectVO); dao.updateProjectSubject(subjectVO); resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * ? ? * * @param subjectVO * @param request * @return */ public Map<String, Object> checkDeleteProjectSubject(ProjectSubjectVO subjectVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); UserVO user = CmnUtil.getLoginUser(request); subjectVO.setMemberSeq(user.getSeq()); int cnt = dao.checkDeleteProjectSubject(subjectVO); if (cnt > 0) { // ? . resultMap.put(RstConst.P_NAME, RstConst.V_FAIL); } else { resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); } return resultMap; } /** * ? * * @param subjectVO * @param request * @return */ @Transactional public Map<String, Object> deleteProjectSubject(ProjectSubjectVO subjectVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); dao.deleteProjectSubject(subjectVO); resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * ? ? * * @param workVO * @param request * @return * @throws IOException */ @Transactional public Map<String, Object> insertProjectWork(ProjectWorkVO workVO, MultipartHttpServletRequest request) throws IOException { Map<String, Object> resultMap = new HashMap<String, Object>(); // 00. ?: MultipartFile ckFile = request.getFile("fileUriFile"); if (ckFile != null) { if (ckFile.getSize() > CheckRule.LIMIT_FILE_SIZE) { resultMap.put(RstConst.P_NAME, RstConst.V_FILE_SIZE); resultMap.put("fileName", ckFile.getOriginalFilename()); return resultMap; } } // CmnUtil.handleHtmlEnterRN2BR(workVO, "contents"); //0. // === ?? ? String fileUploadDbPathThumb = CmnUtil.handleFileUpload(request, "fileUriFileThumb", FileUploadDomain.PROJECT_WORK_FILE); workVO.setThumbUri(fileUploadDbPathThumb); /* * ?? ? ?? Thumbnail */ String fileUploadDirThumb = CmnUtil.getFileUploadDir(request, FileUploadDomain.PROJECT_WORK_FILE); String fileNameThumb = File.separator + FilenameUtils.getName(fileUploadDbPathThumb); ThumbnailManager.saveThumbProjectWorkSmall(fileUploadDirThumb + fileNameThumb); // === 1.work // projectSubjectSeq . UserVO user = CmnUtil.getLoginUser(request); workVO.setMemberSeq(user.getSeq()); CmnUtil.setCmnDate(workVO); dao.insertProjectWork(workVO); // === 2.workVer // === ? String fileUploadDbPath = CmnUtil.handleFileUpload(request, "fileUriFile", FileUploadDomain.PROJECT_WORK_FILE); /* * ?? ? ?? Thumbnail * ?? ? ? ? Thumbnail */ String fileUploadDir = CmnUtil.getFileUploadDir(request, FileUploadDomain.PROJECT_WORK_FILE); String fileName = File.separator + FilenameUtils.getName(fileUploadDbPath); if (CmnUtil.isImageFile(fileName)) { ThumbnailManager.saveThumbProjectWorkSmall(fileUploadDir + fileName); ThumbnailManager.saveThumbProjectWorkLarge(fileUploadDir + fileName); } String oriFileName = CmnUtil.handleFileUploadGetOriFileName(request, "fileUriFile"); ProjectWorkVerVO verVO = new ProjectWorkVerVO(); verVO.setProjectWorkSeq(workVO.getSeq()); verVO.setFileUri(fileUploadDbPath); verVO.setFilename(oriFileName); verVO.setVer(VERSION_START); CmnUtil.setCmnDate(verVO); dao.insertProjectWorkVer(verVO); // 2.1 ver workVO.setLastVer(VERSION_START); dao.updateProjectWorkLastVer(workVO); // === 3. workMember // ?: (??? ?). Set<String> allEmails = new HashSet<String>(); allEmails.add(user.getEmail()); if (!CmnUtil.isEmpty(workVO.getWorkMemberEmails())) { for (String item : workVO.getWorkMemberEmails()) { allEmails.add(item); } } List<String> seqs = userDao.selectMemberSeqsFromEmails(allEmails); for (String seq : seqs) { insertWorkMember(workVO.getSeq(), seq); } resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * ? ? * * @param workSeq * @param memberSeq */ private void insertWorkMember(String workSeq, String memberSeq) { ProjectWorkMemberVO wmVO = new ProjectWorkMemberVO(); wmVO.setMemberSeq(memberSeq); wmVO.setProjectWorkSeq(workSeq); CmnUtil.setCmnDate(wmVO); dao.insertProjectWorkMember(wmVO); } /** * <pre> * ? / ?? ? * ?? . * </pre> * * @param workVO * @param request * @return */ public boolean selectIsProjectWorkAuthUser(String workSeq, HttpServletRequest request) { boolean result = false; UserVO userVO = CmnUtil.getLoginUser(request); ProjectWorkVO workVO = dao.selectProjectWork(workSeq); if (userVO != null && workVO != null) { String memberSeq = StringUtils.stripToEmpty(workVO.getMemberSeq()); // ?? if (memberSeq.equals(userVO.getSeq())) { result = true; } } return result; } /** * ? ? * * @param workVO * @param request * @return */ public Map<String, Object> selectProjectWorkDetail(ProjectWorkVO workVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); ProjectWorkVO resultVO = selectProjectWorkWhole(workVO.getSeq()); UserVO userVo = CmnUtil.getLoginUser(request); if (userVo != null) { // === auth ? boolean curUserAuthYN = this.selectIsProjectWorkAuthUser(workVO.getSeq(), request); resultVO.setCurUserAuthYN(curUserAuthYN); // === like boolean curUserLikedYN = commonService.selectItemWorkLiked(userVo.getSeq(), workVO.getSeq(), ItemType.PROJECT_WORK); resultVO.setCurUserLikedYN(curUserLikedYN); } resultMap.put(RstConst.P_NAME, resultVO); return resultMap; } /** * ? : ? ?? * * @param seq * @return */ private ProjectWorkVO selectProjectWorkWhole(String seq) { ProjectWorkVO resultVO = dao.selectProjectWork(seq); List<ProjectWorkVerVO> verList = dao.selectProjectWorkVerList(seq); resultVO.setProjectWorkVerList(verList); List<ProjectWorkMemberVO> memberList = dao.selectProjectWorkMemberList(seq); resultVO.setProjectWorkMemberList(memberList); return resultVO; } /** * ? ? * * @param workVO * @param request * @return */ public Map<String, Object> openUpdateProjectWork(ProjectWorkVO workVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); ProjectWorkVO resultVO = selectProjectWorkWhole(workVO.getSeq()); // CmnUtil.handleHtmlEnterBR2RN(resultVO, "contents"); resultMap.put(RstConst.P_NAME, resultVO); return resultMap; } /** * <pre> * ? * 1. ? 0.1 ? * </pre> * * @param workVO * @param request * @return * @throws IOException */ @Transactional public Map<String, Object> updateProjectWork(ProjectWorkVO workVO, MultipartHttpServletRequest request) throws IOException { Map<String, Object> resultMap = new HashMap<String, Object>(); // 00. ?: MultipartFile ckFile = request.getFile("fileUriFile"); if (ckFile != null) { if (ckFile.getSize() > CheckRule.LIMIT_FILE_SIZE) { resultMap.put(RstConst.P_NAME, RstConst.V_FILE_SIZE); resultMap.put("fileName", ckFile.getOriginalFilename()); return resultMap; } } // CmnUtil.handleHtmlEnterRN2BR(workVO, "contents"); //0. // === ?? ? String fileUploadDbPathThumb = CmnUtil.handleFileUpload(request, "fileUriFileThumb", FileUploadDomain.PROJECT_WORK_FILE); workVO.setThumbUri(fileUploadDbPathThumb); if (!StringUtils.isEmpty(fileUploadDbPathThumb)) { /* * ?? ? ?? Thumbnail */ String fileUploadDirThumb = CmnUtil.getFileUploadDir(request, FileUploadDomain.PROJECT_WORK_FILE); String fileNameThumb = File.separator + FilenameUtils.getName(fileUploadDbPathThumb); ThumbnailManager.saveThumbProjectWorkSmall(fileUploadDirThumb + fileNameThumb); } // === 1.work // projectSubjectSeq . UserVO user = CmnUtil.getLoginUser(request); workVO.setMemberSeq(user.getSeq()); CmnUtil.setCmnDate(workVO); dao.updateProjectWork(workVO); // === 2.workVer: ? 0.1 ? // === ? String fileUploadDbPath = CmnUtil.handleFileUpload(request, "fileUriFile", FileUploadDomain.PROJECT_WORK_FILE); if (!StringUtils.isEmpty(fileUploadDbPath)) { /* * ?? ? ?? Thumbnail * ?? ? ? ? Thumbnail */ String fileUploadDir = CmnUtil.getFileUploadDir(request, FileUploadDomain.PROJECT_WORK_FILE); String fileName = File.separator + FilenameUtils.getName(fileUploadDbPath); if (CmnUtil.isImageFile(fileName)) { ThumbnailManager.saveThumbProjectWorkSmall(fileUploadDir + fileName); ThumbnailManager.saveThumbProjectWorkLarge(fileUploadDir + fileName); } } if (!StringUtils.isEmpty(fileUploadDbPath)) { String oriFileName = CmnUtil.handleFileUploadGetOriFileName(request, "fileUriFile"); // ? String lastVer = dao.selectProjectWorkLastVer(workVO.getSeq()); String nextVer = CmnUtil.getNextVersion(lastVer); // ProjectWorkVerVO verVO = new ProjectWorkVerVO(); verVO.setProjectWorkSeq(workVO.getSeq()); verVO.setFileUri(fileUploadDbPath); verVO.setFilename(oriFileName); verVO.setVer(nextVer); CmnUtil.setCmnDate(verVO); dao.insertProjectWorkVer(verVO); // 2.1 ver workVO.setLastVer(nextVer); dao.updateProjectWorkLastVer(workVO); } // === 3. workMember // ?: (??? ?). Set<String> allEmails = new HashSet<String>(); allEmails.add(user.getEmail()); if (!CmnUtil.isEmpty(workVO.getWorkMemberEmails())) { for (String item : workVO.getWorkMemberEmails()) { allEmails.add(item); } } List<String> seqs = userDao.selectMemberSeqsFromEmails(allEmails); dao.deleteProjectWorkMember(workVO.getSeq()); for (String seq : seqs) { insertWorkMember(workVO.getSeq(), seq); } resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * <pre> * ? ( ) * </pre> * * @param workVO * @param request * @return */ @Transactional public Map<String, Object> deleteProjectWork(ProjectWorkVO workVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); // flag : // === 2.workVer //dao.deleteProjectWorkVer(workVO.getSeq()); // === 3. workMember //dao.deleteProjectWorkMember(workVO.getSeq()); // === 1.work dao.deleteProjectWork(workVO.getSeq()); resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * ? , * * @param projectSeq * @return */ public List<ProjectSubjectVO> selectProjectSubjectWholeList(Map<String, Object> paramMap) { // 1. List<ProjectSubjectVO> subjectList = dao.selectProjectSubjectList(paramMap); // 2. if (!CmnUtil.isEmpty(subjectList)) { for (ProjectSubjectVO subject : subjectList) { Map<String, Object> subParamMap = new HashMap<>(); subParamMap.put("subjectSeq", subject.getSeq()); subParamMap.put("logonUserSeq", paramMap.get("logonUserSeq")); List<ProjectWorkVO> workList = dao.selectProjectWorkList(subParamMap); subject.setProjectWorkList(workList); } } return subjectList; } /** * <pre> * ? ? * 1. ?? (? ? ?)? ? ?. * 2. ? ? . ? ? . * 3. ?? ? * </pre> * * @param workVO: * seq: ? workSeq * @param workVO: * fromVerSeq: ? seq * @param workVO: * toSubjectSeq: ? seq * @param request * @return */ @Transactional public Map<String, Object> shareProjectWork(ProjectWorkVO paramWorkVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); // ? seq String fromWorkSeq = paramWorkVO.getSeq(); // ? seq String fromVerSeq = paramWorkVO.getFromVerSeq(); // ? seq String toSubjectSeq = paramWorkVO.getToSubjectSeq(); // === 0 parameter // ? ProjectWorkVO fromWorkVO = this.selectProjectWorkWhole(fromWorkSeq); // ? : ProjectWorkVerVO fromWorkVerVO = null; for (ProjectWorkVerVO item : fromWorkVO.getProjectWorkVerList()) { if (fromVerSeq.equals(item.getSeq())) { fromWorkVerVO = item; break; } } // === 1.work UserVO user = CmnUtil.getLoginUser(request); ProjectWorkVO workVO = new ProjectWorkVO(); workVO.setTitle(fromWorkVO.getTitle()); workVO.setContents(fromWorkVO.getContents()); workVO.setProjectSubjectSeq(toSubjectSeq); workVO.setMemberSeq(user.getSeq()); workVO.setReferProjectWorkSeq(fromWorkSeq); workVO.setThumbUri(fromWorkVO.getThumbUri()); CmnUtil.setCmnDate(workVO); dao.insertProjectWork(workVO); // === 2.workVer ProjectWorkVerVO verVO = new ProjectWorkVerVO(); verVO.setProjectWorkSeq(workVO.getSeq()); verVO.setFileUri(fromWorkVerVO.getFileUri()); verVO.setFilename(fromWorkVerVO.getFilename()); verVO.setVer(fromWorkVerVO.getVer()); CmnUtil.setCmnDate(verVO); dao.insertProjectWorkVer(verVO); // 2.1 ver workVO.setLastVer(fromWorkVerVO.getVer()); dao.updateProjectWorkLastVer(workVO); // === 3. workMember // ?: (??? ?). insertWorkMember(workVO.getSeq(), user.getSeq()); resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * <pre> * ? ? ?: ? * (? ?? ) * </pre> * * @param workVOselectShareProjectSubjectList * @param request * @return */ public Map<String, Object> selectShareProjectSubjectList(ProjectWorkVO workVO, HttpServletRequest request) { Map<String, Object> resultMap = new HashMap<String, Object>(); List<ProjectSubjectVO> subjectList = dao.selectShareProjectSubjectList(workVO.getSeq()); resultMap.put("subjectList", subjectList); return resultMap; } /** * ? ? ? ?? * * @param memberSeq * @param groupVO * @return */ public List<ProjectVO> selectMyGroupProjectList(int memberSeq, ProjectGroupVO groupVO) { groupVO.setMemberSeq(memberSeq); return dao.selectMyGroupProjectList(groupVO); } /** * ? * * @param memberSeq * @param groupVO * @return */ @Transactional public ProjectGroupVO insertMyGroup(int memberSeq, ProjectGroupVO groupVO) { String currentDate = Day.getYYYYMMddHHmm(); groupVO.setMemberSeq(memberSeq); groupVO.setRegisterTime(currentDate); groupVO.setUpdateTime(currentDate); dao.insertMyGroup(groupVO); return groupVO; } /** * * * @param memberSeq * @param groupVO */ @Transactional public void deleteMyGroup(int memberSeq, ProjectGroupVO groupVO) { groupVO.setMemberSeq(memberSeq); dao.deleteMyGroup(groupVO); dao.deleteProjectGroupRequestByGroupSeq(String.valueOf(groupVO.getSeq())); // // ? // } /** * ? ? * * @param memberSeq * @param projectVO * @return */ public List<ProjectVO> selectMyProjectList(int memberSeq, ProjectVO projectVO) { projectVO.setOwnerSeq(memberSeq); return dao.selectMyProjectList(projectVO); } /** * ? ? ? * * @param memberSeq * @param groupSeq * @param projectSeqs */ @Transactional public void insertGroupProject(String memberSeq, String groupSeq, String[] projectSeqs) { int iMemberSeq = Integer.parseInt(memberSeq); int iGroupSeq = Integer.parseInt(groupSeq); int myGroupCount = dao.selectMyGroupCount(iMemberSeq, iGroupSeq); /* ? ?? ? ? */ if (myGroupCount > 0 && projectSeqs != null && projectSeqs.length > 0) { int index = 0; int[] iProjectSeqs = new int[projectSeqs.length]; for (String aProjectSeq : projectSeqs) { iProjectSeqs[index] = (Integer.parseInt(aProjectSeq)); index++; } dao.insertMyGroupProject(iGroupSeq, iProjectSeqs, Day.getYYYYMMddHHmm()); } } /** * ? ? * * @param memberSeq * @param groupSeq * @param projectSeq */ @Transactional public void deleteGroupProject(String memberSeq, String groupSeq, String projectSeq) { int iMemberSeq = Integer.parseInt(memberSeq); int iGroupSeq = Integer.parseInt(groupSeq); int myGroupCount = dao.selectMyGroupCount(iMemberSeq, iGroupSeq); /* ? ?? ? ? */ if (myGroupCount > 0) { dao.deleteMyGroupProject(iGroupSeq, Integer.parseInt(projectSeq)); dao.deleteProjectGroupRequest(groupSeq, projectSeq); // ? ? } } /** * ? * * @param type: , * @param seq * @return */ public ProjectVO selectProjectByTypeAndSeq(String type, String seq) { return dao.selectProjectByTypeAndSeq(type, seq); } // ================================= ================================= /** * ? ? ? * * @param reqVO * schProjectSeq * @return */ public Map<String, Object> selectProjectGroupRequestInfo(SearchGroupVO reqVO) { Map<String, Object> resultMap = new HashMap<String, Object>(); List<ProjectGroupReqVO> list = dao.selectProjectGroupRequestInfo(reqVO); resultMap.put(RstConst.P_NAME, list); return resultMap; } /** * ? (? ) * * @param reqVO * schGroupName, schProjectSeq * @return */ public Map<String, Object> selectProjectGroupListByName(SearchGroupVO reqVO) { Map<String, Object> resultMap = new HashMap<String, Object>(); List<ProjectGroupReqVO> list = dao.selectProjectGroupListByName(reqVO); resultMap.put(RstConst.P_NAME, list); return resultMap; } /** * ? ? * * @param reqVO * projectSeq,projectGroupSeq * @param loginUserVO * @return */ @Transactional public Map<String, Object> insertProjectGroupRequest(ProjectGroupReqVO reqVO, UserVO loginUserVO) { Map<String, Object> resultMap = new HashMap<String, Object>(); // 0. ? ? if (loginUserVO == null || StringUtils.isEmpty(loginUserVO.getSeq())) { resultMap.put(RstConst.P_NAME, RstConst.V_NEED_LOGIN); return resultMap; } // 1. ? ? int checkGroupContain = dao.checkProjExistInGroup(reqVO); if (checkGroupContain > 0) { resultMap.put(RstConst.P_NAME, RstConst.V_GROUP_CONTAIN); return resultMap; } // 2. ? ? int checkGroupRequested = dao.checkProjAlreadyRequested(reqVO); if (checkGroupRequested > 0) { resultMap.put(RstConst.P_NAME, RstConst.V_GROUP_REQUESTED); return resultMap; } // 3. record: ProjectGroupReqVO existRequest = dao.selectProjectGroupRequestBySeq(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); if (existRequest != null) { dao.deleteProjectGroupRequest(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); } CmnUtil.setCmnDate(reqVO); dao.insertProjectGroupRequest(reqVO); ProjectGroupReqVO groupVO = dao.selectProjectGroupRequestBySeq(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); // ===== ==== notifyAlarmChangedForGroup(reqVO, loginUserVO, AlarmGroup.APPLY); // ===== ]] ==== resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); resultMap.put("groupVO", groupVO); // ? return resultMap; } /** * ? ? ? * * @param reqVO * @param loginUserVO * @return */ @Transactional public Map<String, Object> updateProjectGroupRequestCancel(ProjectGroupReqVO reqVO, UserVO loginUserVO) { Map<String, Object> resultMap = new HashMap<String, Object>(); // 0. ? ? if (loginUserVO == null || StringUtils.isEmpty(loginUserVO.getSeq())) { resultMap.put(RstConst.P_NAME, RstConst.V_NEED_LOGIN); return resultMap; } // 0. ProjectGroupReqVO searchedReq = dao.selectProjectGroupRequestBySeq(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); if (searchedReq == null) { LOGGER.error(">>> NO ProjectGroupReqVO "); resultMap.put(RstConst.P_NAME, RstConst.V_FAIL); return resultMap; } if (ProjectGroupReqStatus.WAITING.equals(searchedReq.getStatus())) { // 1. dao.deleteProjectGroupRequest(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); } else if (ProjectGroupReqStatus.APPROVE.equals(searchedReq.getStatus())) { // 2. dao.deleteProjectGroup(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); dao.deleteProjectGroupRequest(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); } resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * ? ? ? * * @param reqVO * @return */ public Map<String, Object> selectProjectGroupRequestWaitingList(SearchGroupVO reqVO) { Map<String, Object> resultMap = new HashMap<String, Object>(); List<ProjectGroupReqVO> list = dao.selectProjectGroupRequestWaitingList(reqVO); resultMap.put(RstConst.P_NAME, list); return resultMap; } /** * ? ? ? * * @param reqVO * @param loginUserVO * @return */ @Transactional public Map<String, Object> updateProjectGroupRequestApprove(ProjectGroupReqVO reqVO, UserVO loginUserVO) { Map<String, Object> resultMap = new HashMap<String, Object>(); // 0. ? ? if (loginUserVO == null || StringUtils.isEmpty(loginUserVO.getSeq())) { resultMap.put(RstConst.P_NAME, RstConst.V_NEED_LOGIN); return resultMap; } // 0. ProjectGroupReqVO searchedReq = dao.selectProjectGroupRequestBySeq(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); if (searchedReq == null) { LOGGER.error(">>> NO ProjectGroupReqVO "); resultMap.put(RstConst.P_NAME, RstConst.V_FAIL); return resultMap; } if (ProjectGroupReqStatus.WAITING.equals(searchedReq.getStatus())) { // 1. ? dao.updateProjectGroupRequestStatus(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq(), ProjectGroupReqStatus.APPROVE); // ?? t_pgroup_project . dao.deleteProjectGroup(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); dao.insertProjectGroup(reqVO); // ===== ==== notifyAlarmChangedForGroup(reqVO, loginUserVO, AlarmGroup.APPROVE); // ===== ]] ==== } resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * ? ? * * @param reqVO * @param loginUserVO * @return */ @Transactional public Map<String, Object> updateProjectGroupRequestReject(ProjectGroupReqVO reqVO, UserVO loginUserVO) { Map<String, Object> resultMap = new HashMap<String, Object>(); // 0. ? ? if (loginUserVO == null || StringUtils.isEmpty(loginUserVO.getSeq())) { resultMap.put(RstConst.P_NAME, RstConst.V_NEED_LOGIN); return resultMap; } // 0. ProjectGroupReqVO searchedReq = dao.selectProjectGroupRequestBySeq(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq()); if (searchedReq == null) { LOGGER.error(">>> NO ProjectGroupReqVO "); resultMap.put(RstConst.P_NAME, RstConst.V_FAIL); return resultMap; } if (ProjectGroupReqStatus.WAITING.equals(searchedReq.getStatus())) { // 1. dao.updateProjectGroupRequestStatus(reqVO.getProjectGroupSeq(), reqVO.getProjectSeq(), ProjectGroupReqStatus.REJECT); // ===== ==== notifyAlarmChangedForGroup(reqVO, loginUserVO, AlarmGroup.REJECT); // ===== ]] ==== } resultMap.put(RstConst.P_NAME, RstConst.V_SUCESS); return resultMap; } /** * * * <pre> * </pre> * * @author hanchanghao * @since 2016. 10. 20. */ public static enum AlarmGroup { /** */ APPLY, /** ? */ APPROVE, /** */ REJECT; } /** * ? ? ? * * @param itemVO * @param groupVO * @param userVO * @return */ private AlarmVO notifyAlarmChangedForGroup(ProjectGroupReqVO groupVO, UserVO userVO, AlarmGroup alarmGroup) { ProjectGroupReqVO schGroupVO = dao.selectProjectGroupRequestBySeq(groupVO.getProjectGroupSeq(), groupVO.getProjectSeq()); String alarmContents = ""; String memberSeq = ""; if (alarmGroup == AlarmGroup.APPLY) { alarmContents = String.format("? \"%s\"? .", schGroupVO.getProjectGroupName()); memberSeq = schGroupVO.getProjectGroupOwnerSeq(); } else if (alarmGroup == AlarmGroup.APPROVE) { alarmContents = String.format(" \"%s\"? ? ?.", schGroupVO.getProjectGroupName()); memberSeq = schGroupVO.getProjectOwnerSeq(); } else if (alarmGroup == AlarmGroup.REJECT) { alarmContents = String.format(" \"%s\"? ? .", schGroupVO.getProjectGroupName()); memberSeq = schGroupVO.getProjectOwnerSeq(); } // // AlarmVO alarmVO = new AlarmVO(); alarmVO.setMemberSeq(memberSeq); alarmVO.setContents(alarmContents); alarmVO.setActionUri(""); alarmVO.setActorSeq(userVO.getSeq()); CmnUtil.setCmnDate(alarmVO); commonDao.insertAlarm(alarmVO); // ===== ==== websocketHandler.notifyAlarmChanged(alarmVO.getMemberSeq()); // ===== ]] ==== return alarmVO; } /** * ? * * @param searchVO * @param loginUserVO * @return */ public Map<String, Object> selectGroupList(SearchVO searchVO) { Map<String, Object> resultMap = new HashMap<String, Object>(); // int allCount = dao.selectGroupAllCount(searchVO); List<ProjectGroupVO> list = dao.selectGroupPagingList(searchVO); resultMap.put("all_count", allCount); resultMap.put("list", list); return resultMap; } // ================================= ]] ================================= }