From a8a8d35b27df67e169c8b1aab45edec1c1b25eae Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 목, 02 12월 2021 21:48:04 +0900 Subject: [PATCH] - 이메일 실시간 발송 - 이슈 리스트에서 하위일감 개수 표시 - 이슈 리스트에서 하위 이슈는 안보이게 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 41 ++++++++- src/main/java/kr/wisestone/owl/vo/IssueVo.java | 9 ++ src/main/webapp/WEB-INF/i18n/mail_ko_KR.properties | 1 src/main/resources/mails/issueSendEmail.html | 8 + src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java | 12 +++ src/main/webapp/scripts/app/user/userModify.controller.js | 1 src/main/resources/mails/issueAddEmail.html | 8 + src/main/java/kr/wisestone/owl/scheduler/Scheduler.java | 4 src/main/resources/mybatis/query-template/issue-template.xml | 1 src/main/webapp/views/user/userModify.html | 3 src/main/resources/mails/issueRemoveEmail.html | 8 + src/main/resources/mails/issueSendEmailTemplate1.html | 8 + src/main/java/kr/wisestone/owl/service/ProjectRoleService.java | 4 src/main/resources/mails/issueSendEmailTemplate3.html | 8 + src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js | 14 ++- src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java | 81 ++++++++++++++++---- src/main/java/kr/wisestone/owl/repository/UserDepartmentRepository.java | 2 src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java | 10 +- src/main/webapp/scripts/app/issue/issueList.controller.js | 7 + src/main/resources/mails/issueSendEmailTemplate2.html | 8 + src/main/webapp/i18n/ko/global.json | 1 21 files changed, 195 insertions(+), 44 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/repository/UserDepartmentRepository.java b/src/main/java/kr/wisestone/owl/repository/UserDepartmentRepository.java index 58d22c3..77828bf 100644 --- a/src/main/java/kr/wisestone/owl/repository/UserDepartmentRepository.java +++ b/src/main/java/kr/wisestone/owl/repository/UserDepartmentRepository.java @@ -11,6 +11,8 @@ public interface UserDepartmentRepository extends JpaRepository<UserDepartment, Long> { List<UserDepartment> findByUserId(Long userId); + List<UserDepartment> findByDepartmentId(Long departmentId); + @Transactional void removeByUserId(@Param("userId") Long userId); } diff --git a/src/main/java/kr/wisestone/owl/scheduler/Scheduler.java b/src/main/java/kr/wisestone/owl/scheduler/Scheduler.java index e855cfc..c4e0163 100644 --- a/src/main/java/kr/wisestone/owl/scheduler/Scheduler.java +++ b/src/main/java/kr/wisestone/owl/scheduler/Scheduler.java @@ -89,8 +89,8 @@ this.systemEmailService.reservationSendEmail(); } - // �씠硫붿씪 �떎�떆媛� 諛쒖넚 - 10珥덈쭏�떎 �떎�뻾 - @Scheduled(fixedDelay = 10000) + // �씠硫붿씪 �떎�떆媛� 諛쒖넚 - 1遺꾨쭏�떎 �떎�뻾 + @Scheduled(cron = "0 * * * * *") public void realTimeEmailSystem() { // �떎�떆媛� �씠硫붿씪 諛쒖넚 this.systemEmailService.realTimeSendEmail(); diff --git a/src/main/java/kr/wisestone/owl/service/ProjectRoleService.java b/src/main/java/kr/wisestone/owl/service/ProjectRoleService.java index c7d13d0..11f5c03 100644 --- a/src/main/java/kr/wisestone/owl/service/ProjectRoleService.java +++ b/src/main/java/kr/wisestone/owl/service/ProjectRoleService.java @@ -10,8 +10,8 @@ public interface ProjectRoleService extends AbstractService<ProjectRole, Long, JpaRepository<ProjectRole, Long>>{ - //void addDefaultProjectRole(Project project, List<User> managers, List<User> users); - void addDefaultProjectRole(Project project, List<User> managers, List<Department> departments); + void addDefaultProjectRoleUser(Project project, List<User> managers, List<User> users); + void addDefaultProjectRoleDepartment(Project project, List<User> managers, List<Department> departments); ProjectRole findByProjectIdAndRoleType(Long projectId, String roleType); } diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java index 934520a..75a9cfb 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -373,7 +373,6 @@ projectRoleUserMap.put("statuses", Lists.newArrayList("02")); // 愿�由ъ옄 議고쉶 // 愿�由ъ옄 �젙蹂� �뀑�똿 List<Map<String, Object>> projectRoleUsers = this.projectRoleUserService.findProjectRoleUser(projectRoleUserMap); - if (projectRoleUsers != null && !projectRoleUsers.isEmpty()) { for (Map<String, Object> projectRoleUser : projectRoleUsers) { UserVo userVo = ConvertUtil.convertMapToClass(projectRoleUser, UserVo.class); @@ -407,7 +406,7 @@ departsBuilder.append(issueDepartment.getDepartment().getDepartmentName()); departsBuilder.append("\n"); } - issueMap.put("departsBuilder", departsBuilder.toString()); + issueMap.put("departments", departsBuilder.toString()); // 湲곌컙 if (!StringUtils.isEmpty(issue.getStartDate())) { @@ -558,6 +557,8 @@ // Map �뿉 �엳�뒗 �뜲�씠�꽣瑜� IssueVo �뜲�씠�꽣濡� 蹂��솚�븳�떎. this.setMapToIssueVo(results, issueVos, issueCondition); + this.setCountDownIssues(results, issueVos); + resJsonData.put(Constants.RES_KEY_CONTENTS, issueVos); resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(), totalPage, totalCount)); @@ -565,6 +566,27 @@ // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_FIND)); return issueVos; + } + + private void setCountDownIssues(List<Map<String, Object>> results, List<IssueVo> issueVos) { + for (Map<String, Object> result : results){ + List<Issue> downIssues = this.issueRepository.findByParentIssueId((Long) result.get("id")); //�븯�쐞�씠�뒋 媛��졇�삤湲� + if(downIssues != null && downIssues.size() > 0){ //�긽�쐞�씠�뒋 媛�吏�怨� �엳�뒗 �븷�뱾�씠 �엳�쑝硫� + for(Issue downIssue : downIssues){ + Long parentIssueId = downIssue.getParentIssue().getId(); + int downIssueCount = 1; + Issue parentIssue = this.getIssue(parentIssueId); + IssueVo parentIssueVo = ConvertUtil.copyProperties(parentIssue, IssueVo.class); + parentIssueVo.setDownIssueCount(downIssueCount); + + for(IssueVo issueVo : issueVos){ + if(issueVo.getId().equals(parentIssueVo.getId())){ + issueVo.setDownIssueCount(parentIssueVo.getDownIssueCount()); + } + } + } + } + } } // �씠�뒋 紐⑸줉�쓣 議고쉶�븳�떎(李⑦듃�슜 - �뿰愿��씪媛먰룷�븿) @@ -669,6 +691,17 @@ private void setMapToIssueVo(List<Map<String, Object>> results, List<IssueVo> issueVos, IssueCondition issueCondition) { for (Map<String, Object> result : results) { IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class); + /*Issue downIssue = this.getIssue((Long) result.get("id")); + if(downIssue.getParentIssue() != null){ //�긽�쐞 �씠�뒋媛� �엳�쑝硫� + Long parentIssueId = downIssue.getParentIssue().getId(); + + int downIssueCount = 1; + Issue parentIssue = this.getIssue(parentIssueId); + IssueVo parentIssueVo = ConvertUtil.copyProperties(parentIssue, IssueVo.class); + parentIssueVo.setDownIssueCount(downIssueCount); + + issueVos.add(parentIssueVo); + }*/ issueVos.add(issueVo); issueCondition.addIssueIds(String.valueOf(issueVo.getId())); } @@ -1897,15 +1930,11 @@ result.put("customField_" + issueCustomFieldValueVo.getCustomFieldVo().getId().toString(), useValue + ", " + issueCustomFieldValueVo.getUseValue()); } } - - //�뾽泥�, ISP, �샇�뒪�똿 異붽� - results.add(result); } catch (Exception e) { log.error("�뿊�� �떎�슫濡쒕뱶 �삤瑜� 諛쒖깮"); } } - return results; } diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java index c36dc52..e62af13 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java @@ -37,23 +37,23 @@ } // 湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븳�떎. - /*@Override + @Override @Transactional - public void addDefaultProjectRole(Project project, List<User> managers, List<User> users) { + public void addDefaultProjectRoleUser(Project project, List<User> managers, List<User> users) { ProjectRole projectRole = this.addProjectRole(project, "湲곕낯 �봽濡쒖젥�듃 �뿭�븷", ProjectRole.TYPE_DEFAULT, Permission.ROLE_TYPE_PROJECT_JOIN); ProjectRole managerProjectRole = this.addProjectRole(project, "�봽濡쒖젥�듃 愿�由ъ옄 �뿭�븷", ProjectRole.TYPE_MANAGER, Permission.ROLE_TYPE_PROJECT_MANAGER); // �봽濡쒖젥�듃 愿�由ъ옄 ���옣 this.projectRoleAssociatedUser(managers, managerProjectRole); // �봽濡쒖젥�듃 �씪諛� �궗�슜�옄 ���옣 - //this.projectRoleAssociatedUser(users, projectRole); + this.projectRoleAssociatedUser(users, projectRole); this.projectRoleRepository.flush(); - }*/ + } // �봽濡쒖젥�듃 �뿭�븷 �깮�꽦(愿�由ъ옄, �떞�떦遺��꽌) @Override @Transactional - public void addDefaultProjectRole(Project project, List<User> managers, List<Department> departments) { + public void addDefaultProjectRoleDepartment(Project project, List<User> managers, List<Department> departments) { ProjectRole projectRole = this.addProjectRole(project, "湲곕낯 �봽濡쒖젥�듃 �뿭�븷", ProjectRole.TYPE_DEFAULT, Permission.ROLE_TYPE_PROJECT_JOIN); ProjectRole managerProjectRole = this.addProjectRole(project, "�봽濡쒖젥�듃 愿�由ъ옄 �뿭�븷", ProjectRole.TYPE_MANAGER, Permission.ROLE_TYPE_PROJECT_MANAGER); // �봽濡쒖젥�듃 愿�由ъ옄 ���옣 diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java index c57ce01..255db28 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java @@ -48,6 +48,9 @@ private DepartmentService departmentService; @Autowired + private UserDepartmentService userDepartmentService; + + @Autowired private ProjectRoleService projectRoleService; @Autowired @@ -117,7 +120,7 @@ project.setDefaultYn(true); this.projectRepository.saveAndFlush(project); // �봽濡쒖젥�듃 湲곕낯 �뿭�븷怨� 愿�由ъ옄 �뿭�븷�쓣 �깮�꽦�븳�떎. 愿�由ъ옄�뒗 �깮�꽦�븳 �궗�슜�옄 - this.projectRoleService.addDefaultProjectRole(project, Lists.newArrayList(user), Lists.newArrayList()); + this.projectRoleService.addDefaultProjectRoleUser(project, Lists.newArrayList(user), Lists.newArrayList()); // 媛� �봽濡쒖젥�듃�쓽 �씠�뒋 踰덊샇瑜� �옄�룞�쑝濡� �깮�꽦�븳�떎. this.issueNumberGeneratorService.generateIssueNumber(project); @@ -183,16 +186,8 @@ sendEmails.add(user.getAccount()); } - List<Department> departments = Lists.newArrayList(); - // 遺��꽌 �벑濡� - for (Long departmentId : projectForm.getDepartmentIds()) { - Department department = this.departmentService.getDepartment(departmentId); - departments.add(department); - } - // 湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �궗�슜�옄瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎. - //this.projectRoleService.addDefaultProjectRole(project, managers, users); - this.projectRoleService.addDefaultProjectRole(project, managers, departments); + this.projectRoleService.addDefaultProjectRoleUser(project, managers, users); // �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎. Map<String, Object> projectMap = new HashMap<>(); @@ -220,15 +215,22 @@ } List<Department> departments = Lists.newArrayList(); + List<String> sendEmails = Lists.newArrayList(); // 硫붿씪 ���긽�옄 // 遺��꽌 �벑濡� for (Long departmentId : projectForm.getDepartmentIds()) { Department department = this.departmentService.getDepartment(departmentId); + /*List<UserDepartment> userDepartments = this.userDepartmentService.getUserDepartments(departmentId); + if(userDepartments != null){ + for (UserDepartment userDepartment : userDepartments){ + User user = this.userService.getUser(userDepartment.getUserId()); + sendEmails.add(user.getAccount()); + } + }*/ departments.add(department); } - // 湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �궗�슜�옄瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎. - //this.projectRoleService.addDefaultProjectRole(project, managers, users); - this.projectRoleService.addDefaultProjectRole(project, managers, departments); + // 湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �떞�떦遺��꽌瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎. + this.projectRoleService.addDefaultProjectRoleDepartment(project, managers, departments); // �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎. Map<String, Object> projectMap = new HashMap<>(); @@ -243,6 +245,8 @@ stringBuilder.append(")"); projectMap.put("projectManagerName", stringBuilder.toString()); + // �봽濡쒖젥�듃 �떞�떦遺��꽌 硫붿씪 諛쒖넚 �삁�빟 + this.systemEmailService.reservationEmail(sendEmails.toArray(new String[sendEmails.size()]), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap); } @@ -555,7 +559,9 @@ this.checkExcludeDepartmentAndRemoveIssueDepartment(project, existDepartmentIds, changeDepartmentIds); // 愿�由ъ옄/�씪諛� �궗�슜�옄 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎. - this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project); + //this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project); + // 愿�由ъ옄/�떞�떦遺��꽌 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎. + this.notificationProjectRoleDepartment(changeProjectManagerNotifications, changeProjectDepartmentNotifications, project); return project; } @@ -728,7 +734,7 @@ } - // 愿�由ъ옄瑜� 蹂�寃쏀븳�떎. + // �떞�떦遺��꽌瑜� 蹂�寃쏀븳�떎. private Map<String, Object> modifyProjectDepartments(Project project, ProjectForm projectForm) { ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT); List<Department> oldDepartment = Lists.newArrayList(); @@ -747,9 +753,9 @@ department.addProjectRole(projectRole); } - // �젣�쇅 ���긽�옄 李얘린, oldManager �뿉�뒗 �엳�뒗�뜲 newManager �뿉 �뾾�쑝硫� �젣�쇅 ���긽 + // �젣�쇅 ���긽�옄 李얘린, oldDepartment �뿉�뒗 �엳�뒗�뜲 newDepartment �뿉 �뾾�쑝硫� �젣�쇅 ���긽 List<String> excludeDepartments = this.systemEmailService.notificationDepartmentChange(oldDepartment, newDepartment); - // 李몄뿬 ���긽�옄 李얘린, newManager �뿉�뒗 �엳�뒗�뜲 oldManager �뿉 �뾾�쑝硫� 珥덈�諛쏆� ���긽 + // 李몄뿬 ���긽�옄 李얘린, newDepartment �뿉�뒗 �엳�뒗�뜲 oldDepartment �뿉 �뾾�쑝硫� 珥덈�諛쏆� ���긽 List<String> includeDepartments = this.systemEmailService.notificationDepartmentChange(newDepartment, oldDepartment); results.put("excludeDepartments", excludeDepartments); @@ -826,6 +832,47 @@ this.sendEmailProjectRoleChange(this.checkDuplicationEmails(projectUserIncludeUsers, excludeManagerAndIncludeUser, excludeUserAndIncludeManager), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap); } + // �봽濡쒖젥�듃 李몄뿬, �젣�쇅 �넻吏� �젙蹂� 泥댄겕 + private void notificationProjectRoleDepartment(Map<String, Object> changeProjectManagerNotifications, Map<String, Object> changeProjectDepartmentNotifications, Project project) { + List<String> projectManagerExcludeUsers = (List<String>) changeProjectManagerNotifications.get("excludeUsers"); // 愿�由ъ옄 �젣�쇅 �궗�슜�옄 + List<String> projectManagerIncludeUsers = (List<String>) changeProjectManagerNotifications.get("includeUsers"); // 愿�由ъ옄 李몄뿬 �궗�슜�옄 + List<String> projectDepartmentExcludeDepartments = (List<String>) changeProjectDepartmentNotifications.get("excludeDepartments"); // �젣�쇅�맂 �떞�떦 遺��꽌 + List<String> projectDepartmentIncludeDepartments = (List<String>) changeProjectDepartmentNotifications.get("includeDepartments"); // 李몄뿬�맂 �떞�떦 遺��꽌 + Map<String, Object> projectMap = new HashMap<>(); + projectMap.put("workspaceName", project.getWorkspace().getName()); + projectMap.put("projectName", project.getName()); + projectMap.put("registerDate", DateUtil.convertDateToStr(new Date())); + + Map<String, Object> projectRoleManagerMap = new HashMap<>(); + projectRoleManagerMap.put("id", project.getId()); + projectRoleManagerMap.put("statuses", Lists.newArrayList("02")); // 愿�由ъ옄 議고쉶 + + // 愿�由ъ옄 �젙蹂� �뀑�똿 + List<Map<String, Object>> projectRoleManagers = this.projectRoleUserService.findProjectRoleUser(projectRoleManagerMap); + + if (projectRoleManagers != null && !projectRoleManagers.isEmpty()) { + for (Map<String, Object> projectRoleManager : projectRoleManagers) { + UserVo userVo = ConvertUtil.convertMapToClass(projectRoleManager, UserVo.class); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(userVo.getName()); + stringBuilder.append("("); + stringBuilder.append(CommonUtil.decryptAES128(userVo.getAccount())); + stringBuilder.append(")"); + + projectMap.put("projectManagerName", stringBuilder.toString()); + } + } + + // 愿�由ъ옄 �젣�쇅 硫붿씪 + this.sendEmailProjectRoleChange(projectManagerExcludeUsers, EmailType.PROJECT_MANAGER_EXCLUDE, projectMap); + // 愿�由ъ감 李몄뿬 硫붿씪 + this.sendEmailProjectRoleChange(projectManagerIncludeUsers, EmailType.PROJECT_MANAGER_INCLUDE, projectMap); + // �떞�떦 遺��꽌 �젣�쇅 硫붿씪 + this.sendEmailProjectRoleChange(projectDepartmentExcludeDepartments, EmailType.PROJECT_DEFAULT_EXCLUDE, projectMap); + // �떞�떦 遺��꽌 李몄뿬 硫붿씪 + this.sendEmailProjectRoleChange(projectDepartmentIncludeDepartments, EmailType.PROJECT_DEFAULT_INCLUDE, projectMap); + } + // 以묐났�쑝濡� �굹媛��뒗 硫붿씪�씠 �엳�뒗吏� 泥댄겕�븳�떎. private List<String> checkDuplicationEmails(List<String> checkEmails, List<String> excludeManagerAndIncludeUser, List<String> excludeUserAndIncludeManager) { List<String> sendProjectManagerExcludeUserEmails = Lists.newArrayList(); diff --git a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java index 7e6ecaa..2e4602d 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java @@ -13,10 +13,12 @@ import kr.wisestone.owl.domain.Department; import kr.wisestone.owl.domain.SystemEmail; import kr.wisestone.owl.domain.User; +import kr.wisestone.owl.domain.UserDepartment; import kr.wisestone.owl.domain.enumType.EmailType; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.repository.SystemEmailRepository; import kr.wisestone.owl.service.SystemEmailService; +import kr.wisestone.owl.service.UserDepartmentService; import kr.wisestone.owl.service.UserService; import kr.wisestone.owl.util.*; import org.apache.commons.io.FilenameUtils; @@ -61,6 +63,9 @@ @Autowired private SpringTemplateEngine springTemplateEngine; + + @Autowired + private UserDepartmentService userDepartmentService; @Override protected JpaRepository<SystemEmail, Long> getRepository() { @@ -332,6 +337,13 @@ } if (excludeCheck) { + /*List<UserDepartment> userDepartments = this.userDepartmentService.getUserDepartments(department.getId()); + if(userDepartments != null){ + for (UserDepartment userDepartment : userDepartments){ + User user = this.userService.getUser(userDepartment.getUserId()); + results.add(user.getAccount()); + } + }*/ results.add(department.getDepartmentName()); } } diff --git a/src/main/java/kr/wisestone/owl/vo/IssueVo.java b/src/main/java/kr/wisestone/owl/vo/IssueVo.java index 9fc1672..7d84a23 100644 --- a/src/main/java/kr/wisestone/owl/vo/IssueVo.java +++ b/src/main/java/kr/wisestone/owl/vo/IssueVo.java @@ -52,6 +52,7 @@ private String modifyByName; // 蹂�寃쎌옄 �젙蹂� - �씠�뒋 蹂�寃� �젙蹂� �긽�꽭 �솗�씤�뿉�꽌 �궗�슜 private WorkflowStatusVo workflowStatusVo; private IssueVo parentIssueVo; + private int downIssueCount; private List<IssueCompanyVo> issueCompanyVos; private List<IssueIspVo> issueIspVos; @@ -436,4 +437,12 @@ public void setUsePartnerVos(List<UsePartnerVo> usePartnerVos) { this.usePartnerVos = usePartnerVos; } + + public int getDownIssueCount() { + return downIssueCount; + } + + public void setDownIssueCount(int downIssueCount) { + this.downIssueCount = downIssueCount; + } } diff --git a/src/main/resources/mails/issueAddEmail.html b/src/main/resources/mails/issueAddEmail.html index 74ddd1c..6ccd810 100644 --- a/src/main/resources/mails/issueAddEmail.html +++ b/src/main/resources/mails/issueAddEmail.html @@ -59,11 +59,17 @@ </td> </tr> <tr> - <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <!--<td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> <span th:utext="${#messages.msg('issue.add.assignee')}">�떞�떦�옄</span> </div> <div style="font-weight:bold;" th:utext="${assignees}"></div> + </td>--> + <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> + <span th:utext="${#messages.msg('issue.add.department')}">�떞�떦遺��꽌</span> + </div> + <div style="font-weight:bold;" th:utext="${departments}"></div> </td> <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> diff --git a/src/main/resources/mails/issueRemoveEmail.html b/src/main/resources/mails/issueRemoveEmail.html index 81db692..70e2234 100644 --- a/src/main/resources/mails/issueRemoveEmail.html +++ b/src/main/resources/mails/issueRemoveEmail.html @@ -59,11 +59,17 @@ </td> </tr> <tr> - <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <!--<td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> <span th:utext="${#messages.msg('issue.add.assignee')}">�떞�떦�옄</span> </div> <div style="font-weight:bold;" th:utext="${assignees}"></div> + </td>--> + <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> + <span th:utext="${#messages.msg('issue.add.department')}">�떞�떦遺��꽌</span> + </div> + <div style="font-weight:bold;" th:utext="${departments}"></div> </td> <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> diff --git a/src/main/resources/mails/issueSendEmail.html b/src/main/resources/mails/issueSendEmail.html index c799117..92bf1d7 100644 --- a/src/main/resources/mails/issueSendEmail.html +++ b/src/main/resources/mails/issueSendEmail.html @@ -59,11 +59,17 @@ </td> </tr> <tr> - <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <!--<td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> <span th:utext="${#messages.msg('issue.add.assignee')}">�떞�떦�옄</span> </div> <div style="font-weight:bold;" th:utext="${assignees}"></div> + </td>--> + <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> + <span th:utext="${#messages.msg('issue.add.department')}">�떞�떦遺��꽌</span> + </div> + <div style="font-weight:bold;" th:utext="${departments}"></div> </td> <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> diff --git a/src/main/resources/mails/issueSendEmailTemplate1.html b/src/main/resources/mails/issueSendEmailTemplate1.html index 92598a7..8dc3421 100644 --- a/src/main/resources/mails/issueSendEmailTemplate1.html +++ b/src/main/resources/mails/issueSendEmailTemplate1.html @@ -59,11 +59,17 @@ </td> </tr> <tr> - <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <!--<td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> <span th:utext="${#messages.msg('issue.add.assignee')}">�떞�떦�옄</span> </div> <div style="font-weight:bold;" th:utext="${assignees}"></div> + </td>--> + <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> + <span th:utext="${#messages.msg('issue.add.department')}">�떞�떦遺��꽌</span> + </div> + <div style="font-weight:bold;" th:utext="${departments}"></div> </td> <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> diff --git a/src/main/resources/mails/issueSendEmailTemplate2.html b/src/main/resources/mails/issueSendEmailTemplate2.html index a9dee1b..47edfd2 100644 --- a/src/main/resources/mails/issueSendEmailTemplate2.html +++ b/src/main/resources/mails/issueSendEmailTemplate2.html @@ -59,11 +59,17 @@ </td> </tr> <tr> - <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <!--<td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> <span th:utext="${#messages.msg('issue.add.assignee')}">�떞�떦�옄</span> </div> <div style="font-weight:bold;" th:utext="${assignees}"></div> + </td>--> + <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> + <span th:utext="${#messages.msg('issue.add.department')}">�떞�떦遺��꽌</span> + </div> + <div style="font-weight:bold;" th:utext="${departments}"></div> </td> <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> diff --git a/src/main/resources/mails/issueSendEmailTemplate3.html b/src/main/resources/mails/issueSendEmailTemplate3.html index 631dba1..d7a1088 100644 --- a/src/main/resources/mails/issueSendEmailTemplate3.html +++ b/src/main/resources/mails/issueSendEmailTemplate3.html @@ -59,11 +59,17 @@ </td> </tr> <tr> - <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <!--<td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> <span th:utext="${#messages.msg('issue.add.assignee')}">�떞�떦�옄</span> </div> <div style="font-weight:bold;" th:utext="${assignees}"></div> + </td>--> + <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%"> + <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> + <span th:utext="${#messages.msg('issue.add.department')}">�떞�떦遺��꽌</span> + </div> + <div style="font-weight:bold;" th:utext="${departments}"></div> </td> <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;"> <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;"> diff --git a/src/main/resources/mybatis/query-template/issue-template.xml b/src/main/resources/mybatis/query-template/issue-template.xml index fb6f2c4..88e0bfe 100644 --- a/src/main/resources/mybatis/query-template/issue-template.xml +++ b/src/main/resources/mybatis/query-template/issue-template.xml @@ -191,6 +191,7 @@ </foreach> </when> </choose> + AND issue.parent_issue_id IS NULL AND issue.reverse_index <![CDATA[ < ]]> 0 AND workspace.id = #{workspaceId} GROUP BY issue.id diff --git a/src/main/webapp/WEB-INF/i18n/mail_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/mail_ko_KR.properties index 3238d0f..1bc6700 100644 --- a/src/main/webapp/WEB-INF/i18n/mail_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/mail_ko_KR.properties @@ -130,6 +130,7 @@ issue.add.issueType=\uC774\uC288 \uC720\uD615 issue.add.issueStatus=\uC774\uC288 \uC0C1\uD0DC issue.add.assignee=\uB2F4\uB2F9\uC790 +issue.add.department=\uB2F4\uB2F9\uBD80\uC11C issue.add.schedule=\uC77C\uC815 issue.add.priority=\uC911\uC694\uB3C4 issue.add.severity=\uC6B0\uC120 \uC21C\uC704 diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index 994f964..6d14c69 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -711,6 +711,7 @@ "changeDate": "蹂�寃쎌씪", "lastChangeDate": "理쒓렐 蹂�寃쎌씪", "registrationDate": "�벑濡앹씪", + "countDownIssue": "�븯�쐞 �씠�뒋", "noDate": "湲곌컙 �뾾�쓬", "fullView": "�쟾泥대낫湲�", "comments": "�뙎湲�", diff --git a/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js index 1de28b2..5fc480c 100644 --- a/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js +++ b/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js @@ -47,22 +47,28 @@ position : 4, display : true }, { + name : $filter("translate")("common.countDownIssue"), // �븯�쐞�씠�뒋 移댁슫�듃 + key : "COUNT_DOWN_ISSUE", + width : "width-100-p", + position : 5, + display : false + }, { name : $filter("translate")("common.register"), // �벑濡앹옄 key : "REGISTER", width : "width-100-p", - position : 5, + position : 6, display : false }, { name : $filter("translate")("common.period"), // 湲곌컙 key : "PERIOD", width : "width-140-p", - position : 6, + position : 7, display : false }, { name : $filter("translate")("common.lastChangeDate"), // 理쒓렐 蹂�寃쎌씪 key : "MODIFY_DATE", width : "width-100-p", - position : 7, + position : 8, display : false }, { }] @@ -131,7 +137,7 @@ } var content = { - delValue : $scope.vm.issueTableConfigs.splice(7,1), + delValue : $scope.vm.issueTableConfigs.splice(8,1), issueTableConfigs : JSON.stringify($scope.vm.issueTableConfigs), issueTypeId : $rootScope.getCurrentIssueTypeId() }; diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js index e9fbec7..52e00e9 100644 --- a/src/main/webapp/scripts/app/issue/issueList.controller.js +++ b/src/main/webapp/scripts/app/issue/issueList.controller.js @@ -284,6 +284,13 @@ .setDAlign("text-center") .setDName("modifyDate")); break; + case "COUNT_DOWN_ISSUE" : // �븯�쐞 �씠�뒋 媛쒖닔 + $scope.vm.tableConfigs.push($tableProvider.config() + .setHName("common.countDownIssue") + .setHWidth("bold " + issueTableConfig.width) + .setDAlign("text-center") + .setDName("downIssueCount")); + break; } // �궗�슜�옄 �젙�쓽 �븘�뱶 而щ읆 diff --git a/src/main/webapp/scripts/app/user/userModify.controller.js b/src/main/webapp/scripts/app/user/userModify.controller.js index 8f71f34..b4c7dc5 100644 --- a/src/main/webapp/scripts/app/user/userModify.controller.js +++ b/src/main/webapp/scripts/app/user/userModify.controller.js @@ -85,7 +85,6 @@ $scope.vm.form.account = result.data.data.account; $scope.vm.form.phone = result.data.data.phone; if(result.data.data.reservationNotifyTime === "realTime"){ - $scope.vm.form.reservationNotifyTime = ""; $scope.vm.form.realtimeNotify = true; }else{ $scope.vm.form.reservationNotifyTime = result.data.data.reservationNotifyTime; diff --git a/src/main/webapp/views/user/userModify.html b/src/main/webapp/views/user/userModify.html index d2649d3..a1003ab 100644 --- a/src/main/webapp/views/user/userModify.html +++ b/src/main/webapp/views/user/userModify.html @@ -32,7 +32,7 @@ </div> </div> - <div class="row"> + <div ng-show="" class="row"> <div class="col-sm-6"> <div class="form-group"> <label for="userModifyForm3"><span translate="users.setEmailNotificationTime">�씠硫붿씪 �븣由� �떆媛� �꽕�젙</span> <code class="highlighter-rouge">*</code></label> @@ -47,6 +47,7 @@ option="Y" ng-disabled="vm.form.realtimeNotify" ng-required="!vm.form.realtimeNotify" + placeholder="�씠硫붿씪 �븣由� �떆媛꾩쓣 �꽕�젙�빐二쇱꽭�슂." ng-model="vm.form.reservationNotifyTime"> </div> </div> -- Gitblit v1.8.0