OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-12-24 b72f7719cb2427912b1fba6f3abb117ffd49de49
Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
18개 파일 변경됨
273 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MsgConstants.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueCompanyService.java 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueHistoryService.java 6 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueHostingService.java 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueIspService.java 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java 30 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java 27 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java 34 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java 31 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 42 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/issue-template.xml 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/userWorkspace-template.xml 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties 5 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js 31 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js 19 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -232,9 +232,11 @@
    public static final String COMPANYFIELD_USED_URL = "COMPANYFIELD_USED_URL";   // URL이 이미 사용되고 있습니다.
    public static final String HOSTING_NOT_EXIST = "HOSTING_NOT_EXIST";   // 호스팅이 존재하지 않습니다.
    public static final String HOSTING_CODE_NOT_ENTER = "HOSTING_CODE_NOT_ENTER";   // 호스팅의 코드는 필수 입력 값입니다.
    public static final String HOSTING_REMOVE_NOT_SELECT = "HOSTING_REMOVE_NOT_SELECT";   // 삭제할 호스팅이 선택되지 않았습니다.
    public static final String ISP_NOT_EXIST = "ISP_NOT_EXIST";   // ISP가 존재하지 않습니다.
    public static final String ISP_CODE_NOT_ENTER = "ISP_CODE_NOT_ENTER";   // ISP의 코드는 필수 입력 값입니다.
    public static final String ISP_REMOVE_NOT_SELECT = "ISP_REMOVE_NOT_SELECT";   // 삭제할 ISP가 선택되지 않았습니다.
    public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT";   // 선택한 부서 중 프로젝트에 참여하고 있지 않은 부서가 있습니다.
src/main/java/kr/wisestone/owl/service/IssueCompanyService.java
@@ -3,13 +3,14 @@
import kr.wisestone.owl.domain.Issue;
import kr.wisestone.owl.domain.IssueCompany;
import kr.wisestone.owl.web.condition.IssueCondition;
import kr.wisestone.owl.web.form.IssueForm;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Map;
public interface IssueCompanyService extends AbstractService<IssueCompany, Long, JpaRepository<IssueCompany, Long>>{
    void modifyIssueCompanyField(Issue issue, List<Map<String, Object>> issueCompanyField);
    void modifyIssueCompanyField(Issue issue, IssueForm issueForm);
    List<Map<String, Object>> findInIssueIds(IssueCondition issueCondition);
}
src/main/java/kr/wisestone/owl/service/IssueHistoryService.java
@@ -63,11 +63,11 @@
    void detectSendIssueMail(IssueHistoryType type, IssueForm issueForm, StringBuilder description);
    void detectSendIssueMail(IssueHistoryType type, List<String> sendMails, StringBuilder description);
    void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, IssueCompany issueCompany, StringBuilder description);
    void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyField companyField, IssueCompany issueCompany, StringBuilder description);
    void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IssueIsp issueIsp, StringBuilder description);
    void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspField ispField, IssueIsp issueIsp, StringBuilder description);
    void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, IssueHosting issueHosting, StringBuilder description);
    void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingField hostingField, IssueHosting issueHosting, StringBuilder description);
    void recodeRemoveCustomFieldOptionValue(CustomField customField, String oldValue, String newValue, StringBuilder description);
src/main/java/kr/wisestone/owl/service/IssueHostingService.java
@@ -3,13 +3,14 @@
import kr.wisestone.owl.domain.Issue;
import kr.wisestone.owl.domain.IssueHosting;
import kr.wisestone.owl.web.condition.IssueCondition;
import kr.wisestone.owl.web.form.IssueForm;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Map;
public interface IssueHostingService extends AbstractService<IssueHosting, Long, JpaRepository<IssueHosting, Long>>{
    void modifyIssueHostingField(Issue issue, List<Map<String, Object>> issueHostingField);
    void modifyIssueHostingField(Issue issue, IssueForm issueForm);
    List<Map<String, Object>> findInIssueIds(IssueCondition issueCondition);
}
src/main/java/kr/wisestone/owl/service/IssueIspService.java
@@ -3,13 +3,14 @@
import kr.wisestone.owl.domain.Issue;
import kr.wisestone.owl.domain.IssueIsp;
import kr.wisestone.owl.web.condition.IssueCondition;
import kr.wisestone.owl.web.form.IssueForm;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Map;
public interface IssueIspService extends AbstractService<IssueIsp, Long, JpaRepository<IssueIsp, Long>>{
    void modifyIssueIspField(Issue issue, List<Map<String, Object>> issueIspField);
    void modifyIssueIspField(Issue issue, IssueForm issueForm);
    List<Map<String, Object>> findInIssueIds(IssueCondition issueCondition);
}
src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java
@@ -58,9 +58,13 @@
    // Hosting 추가
    @Override
    public HostingField add(HostingFieldForm HostingFieldForm) {
        HostingField HostingField = ConvertUtil.copyProperties(HostingFieldForm, HostingField.class);
        hostingFieldRepository.saveAndFlush(HostingField);
        return HostingField;
        HostingField hostingField = ConvertUtil.copyProperties(HostingFieldForm, HostingField.class);
        if (hostingField.getCode() != null && !hostingField.getCode().equals("")) {
            hostingFieldRepository.saveAndFlush(hostingField);
        } else {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.HOSTING_CODE_NOT_ENTER));
        }
        return hostingField;
    }
    // Hosting 목록을 가져온다.
src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java
@@ -58,9 +58,13 @@
    // Isp 추가
    @Override
    public IspField add(IspFieldForm IspFieldForm) {
        IspField IspField = ConvertUtil.copyProperties(IspFieldForm, IspField.class);
        ispFieldRepository.saveAndFlush(IspField);
        return IspField;
        IspField ispField = ConvertUtil.copyProperties(IspFieldForm, IspField.class);
        if (ispField.getCode() != null && !ispField.getCode().equals("")) {
            ispFieldRepository.saveAndFlush(ispField);
        } else {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.ISP_CODE_NOT_ENTER));
        }
        return ispField;
    }
    // Isp 목록을 가져온다.
src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java
@@ -8,6 +8,8 @@
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.util.MapUtil;
import kr.wisestone.owl.web.condition.IssueCondition;
import kr.wisestone.owl.web.form.CompanyFieldForm;
import kr.wisestone.owl.web.form.IssueForm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,8 +44,9 @@
    //  이슈에서 사용되는 업체 값을 업데이트한다.
    @Override
    @Transactional
    public void modifyIssueCompanyField(Issue issue, List<Map<String, Object>> issueCompanyFields) {
    public void modifyIssueCompanyField(Issue issue, IssueForm issueForm) {
        if (issue != null) {
            List<Map<String, Object>> issueCompanyFields = issueForm.getIssueCompanyFields();
            if (issueCompanyFields != null && issueCompanyFields.size() > 0) {
                Map<String, Object> param = issueCompanyFields.get(0);
@@ -56,7 +59,7 @@
                        issueCompany = issueCompanies.iterator().next();
                        // 변경 이력
                        StringBuilder sb = new StringBuilder();
                        issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, param, issueCompany, sb);
                        issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, param, null, issueCompany, sb);
                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                        issueCompany.setCompanyField(companyField);
@@ -74,13 +77,34 @@
                        }
                        // 추가 이력
                        StringBuilder sb = new StringBuilder();
                        issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, param, issueCompany, sb);
                        issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, param, null, issueCompany, sb);
                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                    }
                    this.issueCompanyRepository.saveAndFlush(issueCompany);
                } else {
                    this.issueCompanyRepository.deleteById(MapUtil.getLong(param, "id"));
                }
            } else if(issueForm.getCompanyName() != null && !issueForm.getCompanyName().equals("")) { //업체정보 직접 추가
                CompanyFieldForm companyFieldForm = new CompanyFieldForm();
                companyFieldForm.setName(issueForm.getCompanyName());
                companyFieldForm.setEmail(issueForm.getCompanyEmail());
                companyFieldForm.setUrl(issueForm.getCompanyUrl());
                companyFieldForm.setManager(issueForm.getCompanyManager());
                companyFieldForm.setTel(issueForm.getCompanyTel());
                companyFieldForm.setMemo(issueForm.getCompanyMemo());
                CompanyField companyField = this.companyFieldService.addCompany(companyFieldForm);
                IssueCompany issueCompany = ConvertUtil.copyProperties(companyFieldForm, IssueCompany.class);
                issueCompany.setIssue(issue);
                if (companyField != null) {
                    issueCompany.setCompanyField(companyField);
                }
                // 추가 이력
                StringBuilder sb = new StringBuilder();
                issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, null, companyField, issueCompany, sb);
                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                this.issueCompanyRepository.saveAndFlush(issueCompany);
            }
        }
    }
src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
@@ -554,8 +554,13 @@
    // 업체 정보 변경 정보를 기록한다.
    @Override
    public void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, IssueCompany issueCompany, StringBuilder description) {
        Long id = MapUtil.getLong(param, "companyId");
    public void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyField companyField, IssueCompany issueCompany, StringBuilder description) {
        Long id = 0L;
        if (param != null) {
            id = MapUtil.getLong(param, "companyId");
        }else if(companyField != null) {
            id = companyField.getId();
        }
        Long companyFieldId = issueCompany.getCompanyField().getId();
        if (type == IssueHistoryType.ADD) { //추가 할 경우
@@ -590,8 +595,13 @@
    // ISP 정보 변경 정보를 기록한다.
    @Override
    public void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IssueIsp issueIsp, StringBuilder description) {
        Long id = MapUtil.getLong(param, "companyId");
    public void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspField ispField, IssueIsp issueIsp, StringBuilder description) {
        Long id = 0L;
        if (param != null) {
            id = MapUtil.getLong(param, "companyId");
        } else if(ispField != null) {
            id = ispField.getId();
        }
        Long ispFieldId = issueIsp.getIspField().getId();
        if (type == IssueHistoryType.ADD) {
@@ -626,8 +636,13 @@
    // 호스팅 정보 변경 정보를 기록한다.
    @Override
    public void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, IssueHosting issueHosting, StringBuilder description) {
        Long id = MapUtil.getLong(param, "companyId");
    public void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingField hostingField, IssueHosting issueHosting, StringBuilder description) {
        Long id = 0L;
        if (param != null) {
            id = MapUtil.getLong(param, "companyId");
        }else if(hostingField != null) {
            id = hostingField.getId();
        }
        Long hostingFieldId = issueHosting.getHostingField().getId();
        if (type == IssueHistoryType.ADD) {
src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
@@ -10,6 +10,8 @@
import kr.wisestone.owl.util.MapUtil;
import kr.wisestone.owl.vo.IssueHostingVo;
import kr.wisestone.owl.web.condition.IssueCondition;
import kr.wisestone.owl.web.form.HostingFieldForm;
import kr.wisestone.owl.web.form.IssueForm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -44,10 +46,11 @@
    //  이슈에서 사용되는 업체 값을 업데이트한다.
    @Override
    @Transactional
    public void modifyIssueHostingField(Issue issue, List<Map<String, Object>> issueIspFields) {
    public void modifyIssueHostingField(Issue issue, IssueForm issueForm) {
        if (issue != null) {
            if (issueIspFields != null && issueIspFields.size() > 0) {
                Map<String, Object> param = issueIspFields.get(0);
            List<Map<String, Object>> issueHostingFields = issueForm.getIssueHostingFields();
            if (issueHostingFields != null && issueHostingFields.size() > 0) {
                Map<String, Object> param = issueHostingFields.get(0);
                if (param != null && param.get("hostingId") != null  && param.get("hostingId") != "") {
                    HostingField hostingField = this.hostingFieldService.getHosting(MapUtil.getLong(param, "hostingId"));
@@ -59,7 +62,7 @@
                        issueHosting = issueHostings.iterator().next();
                        // 변경 이력
                        StringBuilder sb = new StringBuilder();
                        issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, param, issueHosting, sb);
                        issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, param, null, issueHosting, sb);
                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                        issueHosting.setHostingField(hostingField);
@@ -78,13 +81,34 @@
                        }
                        // 추가 이력
                        StringBuilder sb = new StringBuilder();
                        issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, issueHosting, sb);
                        issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, null, issueHosting, sb);
                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                    }
                    this.issueHostingRepository.saveAndFlush(issueHosting);
                }else {
                    this.issueHostingRepository.deleteById(MapUtil.getLong(param, "id"));
                }
            } else if(issueForm.getHostingName() != null && !issueForm.getHostingName().equals("")) {
                HostingFieldForm hostingFieldForm = new HostingFieldForm();
                hostingFieldForm.setName(issueForm.getHostingName());
                hostingFieldForm.setCode(issueForm.getHostingCode());
                hostingFieldForm.setEmail(issueForm.getHostingEmail());
                hostingFieldForm.setUrl(issueForm.getHostingUrl());
                hostingFieldForm.setManager(issueForm.getHostingManager());
                hostingFieldForm.setTel(issueForm.getHostingTel());
                hostingFieldForm.setMemo(issueForm.getHostingMemo());
                HostingField hostingField = this.hostingFieldService.add(hostingFieldForm);
                IssueHosting issueHosting = ConvertUtil.copyProperties(hostingFieldForm, IssueHosting.class);
                issueHosting.setIssue(issue);
                if (hostingField != null) {
                    issueHosting.setHostingField(hostingField);
                }
                // 추가 이력
                StringBuilder sb = new StringBuilder();
                issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, null, hostingField, issueHosting, sb);
                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                this.issueHostingRepository.saveAndFlush(issueHosting);
            }
        }
    }
src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
@@ -8,6 +8,8 @@
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.util.MapUtil;
import kr.wisestone.owl.web.condition.IssueCondition;
import kr.wisestone.owl.web.form.IspFieldForm;
import kr.wisestone.owl.web.form.IssueForm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,8 +44,9 @@
    //  이슈에서 사용되는 업체 값을 업데이트한다.
    @Override
    @Transactional
    public void modifyIssueIspField(Issue issue, List<Map<String, Object>> issueIspFields) {
    public void modifyIssueIspField(Issue issue, IssueForm issueForm) {
        if (issue != null) {
            List<Map<String, Object>> issueIspFields = issueForm.getIssueIspFields();
            if (issueIspFields != null && issueIspFields.size() > 0) {
                Map<String, Object> param = issueIspFields.get(0);
@@ -52,12 +55,11 @@
                    Set<IssueIsp> issueIsps = issue.getIssueIspFields();
                    IssueIsp issueIsp = new IssueIsp();
                    if (issueIsps != null && issueIsps.size() > 0) {//수정 할 경우
                        issueIsp = issueIsps.iterator().next();
                        // 변경 이력
                        StringBuilder sb = new StringBuilder();
                        issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, issueIsp, sb);
                        issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, null, issueIsp, sb);
                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                        issueIsp.setIspField(ispField);
@@ -76,13 +78,34 @@
                        }
                        // 추가 이력
                        StringBuilder sb = new StringBuilder();
                        issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, issueIsp, sb);
                        issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, null, issueIsp, sb);
                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                    }
                    this.issueIspRepository.saveAndFlush(issueIsp);
                }else {
                    this.issueIspRepository.deleteById(MapUtil.getLong(param, "id"));
                }
            } else if(issueForm.getIspName() != null && !issueForm.getIspName().equals("")) {
                IspFieldForm ispFieldForm = new IspFieldForm();
                ispFieldForm.setName(issueForm.getIspName());
                ispFieldForm.setCode(issueForm.getIspCode());
                ispFieldForm.setEmail(issueForm.getIspEmail());
                ispFieldForm.setUrl(issueForm.getIspUrl());
                ispFieldForm.setManager(issueForm.getIspManager());
                ispFieldForm.setTel(issueForm.getIspTel());
                ispFieldForm.setMemo(issueForm.getIspMemo());
                IspField ispField = this.ispFieldService.add(ispFieldForm);
                IssueIsp issueIsp = ConvertUtil.copyProperties(ispFieldForm, IssueIsp.class);
                issueIsp.setIssue(issue);
                if (ispField != null) {
                    issueIsp.setIspField(ispField);
                }
                // 추가 이력
                StringBuilder sb = new StringBuilder();
                issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, null, ispField, issueIsp, sb);
                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                this.issueIspRepository.saveAndFlush(issueIsp);
            }
        }
    }
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -493,11 +493,11 @@
        //  담당부서 지정
        this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
        //  업체 정보 저장
        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
        //  ISP 정보 저장
        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
        this.issueIspService.modifyIssueIspField(issue, issueForm);
        //  HOSTING 정보 저장
        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
        //  첨부 파일 저장
@@ -587,11 +587,11 @@
        //  담당부서 지정
        this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
        //  업체 정보 저장
        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
        //  ISP 정보 저장
        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
        this.issueIspService.modifyIssueIspField(issue, issueForm);
        //  HOSTING 정보 저장
        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
        //  첨부 파일 저장
        //  multipartFile 을 file Map List 객체로 변경한다.
@@ -664,11 +664,11 @@
        //  담당부서 지정
        this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
        //  업체 정보 저장
        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
        //  ISP 정보 저장
        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
        this.issueIspService.modifyIssueIspField(issue, issueForm);
        //  HOSTING 정보 저장
        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
        //  첨부 파일 저장
        //  multipartFile 을 file Map List 객체로 변경한다.
@@ -1756,6 +1756,9 @@
        String comma = ",";
        if (issueCustomFieldValueForms.size() > 0) {
            IssueCustomFieldValueFormComparator comp = new IssueCustomFieldValueFormComparator();
            Collections.sort(issueCustomFieldValueForms, comp);
            String concatUseValue = "";
            for (int i = 0; i < issueCustomFieldValueForms.size(); i++) {
                IssueCustomFieldValueForm issueCustomFieldValueForm = issueCustomFieldValueForms.get(i);
@@ -1802,6 +1805,7 @@
            List<Issue> issues = Lists.newArrayList();
            for (Issue issueVo : issue) {
                issueForm.setId(issueVo.getId());
                issueForm.setTitle(issueVo.getTitle());
                // 자동 종료 상태 설정이 되어 있지 않으면 오류발생
                Issue modifyIssue = this.modifyIssueForApi(user, issueForm, files);
@@ -1993,11 +1997,11 @@
        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(userVo, ElasticSearchConstants.ISSUE_MODIFY));
        //  업체 정보 저장
        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
        //  ISP 정보 저장
        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
        this.issueIspService.modifyIssueIspField(issue, issueForm);
        //  HOSTING 정보 저장
        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
        return issue;
    }
@@ -3226,15 +3230,21 @@
                    break;*/
                case 6:
                    //  담당부서를 IssueForm 에 저장한다.
                    this.setIssueFormDepartment(cell, departmentMaps, issueForm, project);
                    if (cell != null) {
                        this.setIssueFormDepartment(cell, departmentMaps, issueForm, project);
                    }
                    break;
                case 7:
                    //  시작일을 IssueForm 에 저장한다.
                    this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
                    if (cell != null) {
                        this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
                    }
                    break;
                case 8:
                    //  종료일을 IssueForm 에 저장한다.
                    this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
                    if (cell != null) {
                        this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
                    }
                    break;
                default:
                    //  9번 부터는 사용자 정의 필드. 사용자 정의 필드 정보를 IssueForm 에 저장한다.
@@ -3438,7 +3448,7 @@
        }
    }
    //  사용자 정의 필드 정보를 IssueForm 에 저장한다.
    //  사용자 정의 필드 정보를 IssueForm 에 저장한다.-
    private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) {
        if (cell != null) {
            String cellValue = CommonUtil.convertExcelStringToCell(cell);
src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
@@ -16,6 +16,7 @@
    private Long levelId;
    private Long departmentId;
    private Long userId;
    private String managerYn;
    private List<DepartmentVo> departmentVos = Lists.newArrayList();
@@ -92,4 +93,12 @@
    public void setUserId(Long userId) {
        this.userId = userId;
    }
    public String getManagerYn() {
        return managerYn;
    }
    public void setManagerYn(String managerYn) {
        this.managerYn = managerYn;
    }
}
src/main/resources/mybatis/query-template/issue-template.xml
@@ -1096,14 +1096,13 @@
            issue.id as id,
            issue.title as title,
            customFieldValue.customFieldType AS customFieldType,
            GROUP_CONCAT(customFieldValue.useValue) AS concatUseValue
            GROUP_CONCAT(customFieldValue.useValue ORDER BY customFieldValue.customFieldId ASC) AS concatUseValue
        FROM issue issue FORCE INDEX(reverseIndex)
        INNER JOIN issue_status as issStatus ON issue.issue_status_id = issStatus.id
            LEFT OUTER JOIN (
            SELECT cf.id AS customFieldId, cf.custom_field_type AS customFieldType, issue_custom.use_value AS useValue, issue_custom.issue_id AS issueId
            FROM issue_custom_field_value issue_custom
            INNER JOIN custom_field cf ON cf.id = issue_custom.custom_field_id
            ORDER BY issue_custom.id ASC) customFieldValue ON customFieldValue.issueId = issue.id
            INNER JOIN custom_field cf ON cf.id = issue_custom.custom_field_id) customFieldValue ON customFieldValue.issueId = issue.id
        WHERE issStatus.issue_status_type != 'CLOSE'
          AND issue.issue_type_id = #{issueTypeId}
        GROUP BY issue.id
src/main/resources/mybatis/query-template/userWorkspace-template.xml
@@ -10,6 +10,7 @@
        u.name as userName,
        u.account as account,
        u.level_id as levelId,
        uw.manager_yn as managerYn,
        CASE WHEN uw.use_yn = 'Y' THEN 'true' ELSE 'false' END as useYn
        FROM
        user_workspace uw
@@ -17,7 +18,6 @@
        INNER JOIN workspace w on uw.workspace_id = w.id
        WHERE 1=1
        AND w.id = #{workspaceId}
        AND uw.manager_yn = 'N'
        <if test="name != '' and name != null">
            AND u.name like CONCAT('%',#{name},'%')
        </if>
@@ -58,7 +58,6 @@
        INNER JOIN workspace w on uw.workspace_id = w.id
        WHERE 1=1
        AND w.id = #{workspaceId}
        AND uw.manager_yn = 'N'
        <if test="name != '' and name != null">
            AND u.name like CONCAT('%',#{name},'%')
        </if>
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -210,4 +210,7 @@
COMPANY_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uC5C5\uCCB4\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
COMPANYFIELD_NOT_EXIST = \uC5C5\uCCB4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
COMPANYFIELD_NOT_URL = URL\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
COMPANYFIELD_USED_URL = URL\uC774 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
COMPANYFIELD_USED_URL = URL\uC774 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
HOSTING_CODE_NOT_ENTER = \uD638\uC2A4\uD305\uC758 \uCF54\uB4DC\uB294 \uD544\uC218 \uC785\uB825 \uAC12\uC785\uB2C8\uB2E4.
ISP_CODE_NOT_ENTER = ISP\uC758 \uCF54\uB4DC\uB294 \uD544\uC218 \uC785\uB825 \uAC12\uC785\uB2C8\uB2E4.
src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
@@ -151,17 +151,18 @@
                                        case "USE_DEPARTMENT_LIST" :
                                            makeTag += "<ul class='ul-not-comma'>";
                                            if(scope.data.departmentVos != null && scope.data.departmentVos.length == 0){ //속해있는 부서가 없을 경우
                                                makeTag += "<div style='cursor: pointer; color: #0066ff' ng-click='event.modifyUserDepartments(data.id, data.userId)'>부서를 선택해 주세요.</div>";
                                            }else{
                                                makeTag += "<div style='cursor: pointer; color: #0066ff' ng-click='event.modifyUserDepartments(data.id, data.userId)'>";
                                                angular.forEach(scope.data.departmentVos, function (departments) {
                                                    makeTag += "<li>" + departments.departmentName + "</li>";
                                                });
                                                makeTag += "</div>";
                                            if (scope.data.managerYn !== 'Y'){
                                                if(scope.data.departmentVos != null && scope.data.departmentVos.length == 0){ //속해있는 부서가 없을 경우
                                                    makeTag += "<div style='cursor: pointer; color: #0066ff' ng-click='event.modifyUserDepartments(data.id, data.userId)'>부서를 선택해 주세요.</div>";
                                                }else{
                                                    makeTag += "<div style='cursor: pointer; color: #0066ff' ng-click='event.modifyUserDepartments(data.id, data.userId)'>";
                                                    angular.forEach(scope.data.departmentVos, function (departments) {
                                                        makeTag += "<li>" + departments.departmentName + "</li>";
                                                    });
                                                    makeTag += "</div>";
                                                }
                                                makeTag += "</ul>";
                                            }
                                            makeTag += "</ul>";
                                            break;
                                        case "WORKFLOW_DEPARTMENT_LIST" :
@@ -623,11 +624,17 @@
                                        case "LEVEL_OPTION" :
                                            //makeTag += "<select class='form-control input-sm'  ng-model='data.levels[0].id' ng-options='levelName.id as levelName.levelName for levelName in data.levels' ></select>";
                                            makeTag +="<select class='form-control input-sm' ng-model='data.levelId' ng-change='event.modifyUserWorkspace(data)'><option ng-repeat='level in data.levels' ng-value='level.fieldKey'>{{::level.fieldValue}}</option></select>";
                                            if (scope.data.managerYn === 'Y'){
                                                makeTag +="<span>최고관리자</span>";
                                            } else {
                                                makeTag +="<select class='form-control input-sm' ng-model='data.levelId' ng-change='event.modifyUserWorkspace(data)'><option ng-repeat='level in data.levels' ng-value='level.fieldKey'>{{::level.fieldValue}}</option></select>";
                                            }
                                            break;
                                        case "WORKSPACE_USE_YN" :
                                            makeTag += "<label class='switch'><input type='checkbox' ng-model='data.useYn' ng-click='event.modifyUserWorkspace(data)'><span class='slider round'></span></label>";
                                            if (scope.data.managerYn !== 'Y'){
                                                makeTag += "<label class='switch'><input type='checkbox' ng-model='data.useYn' ng-click='event.modifyUserWorkspace(data)'><span class='slider round'></span></label>";
                                            }
                                            break;
                                        case "COMPANYFIELD_MODIFY" :
src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
@@ -27,7 +27,7 @@
                    account : "",   //  이메일
                    statuses : [],   //  상태 - Y, N
                    levels  :   [], //  등급
                    departments: []  //  부서
                    departments: [],  //  부서
                };
                $scope.vm.options = {
@@ -45,6 +45,7 @@
                    selectedPageRowCount : String(10)
                };
                $scope.vm.managerYn = false;
                $scope.vm.levels = [];
                $scope.vm.departments = [];
                $scope.vm.tableConfigs = [];
@@ -176,23 +177,13 @@
                            var idx = 0;
                            angular.forEach($scope.vm.responseData.data, function (data) {
                                // data.levelId = $scope.vm.levels[idx].fieldKey;
                                //data.department = $scope.vm.departments[idx];
                                if (data.managerYn === "Y") {
                                    $scope.vm.managerYn = true;
                                }
                                data.levels = [];
                                data.departments = [];
                                data.levels = $scope.vm.levels.slice();
                                data.departments = $scope.vm.departments.slice();
                                /*if(result.data.data[idx].departmentId == null){
                                    data.departments = $scope.vm.departments.slice();
                                    data.departments.unshift({
                                        fieldKey : 'd',
                                        fieldValue : '부서를 선택 하세요.'
                                    });
                                    result.data.data[idx].departmentId = 'd';
                                } else{
                                    data.departments = $scope.vm.departments.slice();
                                }*/
                                idx++;
                            });
                        }