OWL ITS + 탐지시스템(인터넷 진흥원)
jhjang
2021-11-25 305de5dd5a88baf49b9939fe3233f207f3f7acf8
- 이슈 유형에 호스팅/업체/isp 설정 기능 추가
2개 파일 추가됨
15개 파일 변경됨
497 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/UseCompany.java 44 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/IssueType.java 31 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java 34 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/HostingFieldVo.java 34 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/IspFieldVo.java 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/UseCompanyVo.java 44 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/HostingFieldController.java 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java 47 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/migration/V1_11__Alter_Table.sql 4 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js 44 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/HostingField/hostingField.service.js 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/utils/autoComplete.controller.js 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issueType/issueTypeAdd.html 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issueType/issueTypeModify.html 27 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/UseCompany.java
New file
@@ -0,0 +1,44 @@
package kr.wisestone.owl.constant;
import com.google.common.collect.Lists;
import kr.wisestone.owl.vo.HostingFieldVo;
import kr.wisestone.owl.vo.UseCompanyVo;
import java.util.List;
public class UseCompany {
    public static final int USE_COMPANY_HOSTING = 4;  // 100
    public static final int USE_COMPANY_ISP = 2;      // 010
    public static final int USE_COMPANY_COMPANY = 1;  // 001
    public static String[] Names = {"업체", "ISP", "호스팅"};
    public static int[] useCompanies = {USE_COMPANY_COMPANY, USE_COMPANY_ISP, USE_COMPANY_HOSTING};
    // 권한 체크후 HostingFieldVo 가져오기
    public static UseCompanyVo checkUseCompany(int userPermission, int typePermission)
    {
        if (((userPermission & typePermission) != 0)) {
            Long Id = 0L;
            if (typePermission != USE_COMPANY_COMPANY) {
                Id = typePermission / 2L;
            }
            return UseCompanyVo.Create(Id, Names[Id.intValue()]);
        }
        return  null;
    }
    // 업체/ISP/호스팅 전체 목록 가져오기
    public static List<UseCompanyVo> getCompanyList() {
        List<UseCompanyVo> useCompanyVos = Lists.newArrayList();
        Long index = 0L;
        for (String name : UseCompany.Names) {
            useCompanyVos.add(UseCompanyVo.Create(index, name));
            index++;
        }
        return useCompanyVos;
    }
}
src/main/java/kr/wisestone/owl/domain/IssueType.java
@@ -1,5 +1,7 @@
package kr.wisestone.owl.domain;
import org.hibernate.annotations.DynamicInsert;
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
@@ -9,6 +11,7 @@
 * Created by wisestone on 2018-03-07.
 */
@Entity
@DynamicInsert
public class IssueType extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
@@ -18,9 +21,7 @@
    private String name;
    private String description;
    private String color;
    private String companyYn = "N";
    private String ispYn = "N";
    private String hostingYn = "N";
    private Long useCompany;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "workspace_id")
@@ -124,27 +125,11 @@
        this.project = project;
    }
    public String getCompanyYn() {
        return companyYn;
    public Long getUseCompany() {
        return useCompany;
    }
    public void setCompanyYn(String companyYn) {
        this.companyYn = companyYn;
    }
    public String getIspYn() {
        return ispYn;
    }
    public void setIspYn(String ispYn) {
        this.ispYn = ispYn;
    }
    public String getHostingYn() {
        return hostingYn;
    }
    public void setHostingYn(String hostingYn) {
        this.hostingYn = hostingYn;
    public void setUseCompany(Long useCompany) {
        this.useCompany = useCompany;
    }
}
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -3,7 +3,9 @@
import com.google.common.collect.Lists;
import kr.wisestone.owl.common.ExcelConditionCheck;
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.constant.MngPermission;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.constant.UseCompany;
import kr.wisestone.owl.domain.*;
import kr.wisestone.owl.domain.enumType.ProjectType;
import kr.wisestone.owl.exception.OwlRuntimeException;
@@ -123,18 +125,8 @@
        Project project = this.projectService.getProject(issueTypeForm.getProjectId());
        issueType.setProject(project);
        String Yes = "Y";
        String No = "N";
        issueType.setUseCompany(issueTypeForm.getUseCompany());
        if(!issueTypeForm.getCompanyYn().equals(No)){
            issueType.setCompanyYn(Yes);
        }
        if(!issueTypeForm.getHostingYn().equals(No)){
            issueType.setHostingYn(Yes);
        }
        if(!issueTypeForm.getIspYn().equals(No)){
            issueType.setIspYn(Yes);
        }
        return this.issueTypeRepository.saveAndFlush(issueType);
    }
@@ -276,6 +268,18 @@
            if (project != null) {
                issueTypeVo.setProjectVo(ConvertUtil.copyProperties(issueType.getProject(), ProjectVo.class));
            }
            Integer use = issueType.getUseCompany() != null ? issueType.getUseCompany().intValue() : 0;
            List<UseCompanyVo> useCompanyVos = Lists.newArrayList();
            for (Integer useCompany : UseCompany.useCompanies) {
                UseCompanyVo useCompanyVo = UseCompany.checkUseCompany(use, useCompany);
                if (useCompanyVo != null) {
                    useCompanyVos.add(useCompanyVo);
                }
            }
            issueTypeVo.setUseCompanyVos(useCompanyVos);
            /*CompanyField companyField = issueType.getCompanyField();
            if(companyField != null){
@@ -317,6 +321,8 @@
        Project project = this.projectService.getProject(issueTypeForm.getProjectId());
        issueType.setProject(project);
        issueType.setUseCompany(issueTypeForm.getUseCompany());
        /*if(issueTypeForm.getCompanyId() != null){
            CompanyField companyField = this.companyFieldService.getCompany(issueTypeForm.getCompanyId());
            issueType.setCompanyField(companyField);
@@ -329,9 +335,9 @@
            HostingField hostingField = this.hostingFieldService.getHosting(issueTypeForm.getHostingId());
            issueType.setHostingField(hostingField);
        }*/
        issueType.setCompanyYn(issueTypeForm.getCompanyYn());
        issueType.setIspYn(issueTypeForm.getIspYn());
        issueType.setHostingYn(issueTypeForm.getHostingYn());
//        issueType.setCompanyYn(issueTypeForm.getCompanyYn());
//        issueType.setIspYn(issueTypeForm.getIspYn());
//        issueType.setHostingYn(issueTypeForm.getHostingYn());
        this.issueTypeRepository.saveAndFlush(issueType);
src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java
@@ -1,9 +1,7 @@
package kr.wisestone.owl.vo;
public class CompanyFieldVo extends BaseVo{
public class CompanyFieldVo extends UseCompanyVo{
    private Long id;
    private String name;
    private String manager;
    private String tel;
    private String email;
@@ -11,30 +9,12 @@
    public CompanyFieldVo() {}
    public CompanyFieldVo(Long id, String name, String manager, String tel, String email, String memo) {
    public CompanyFieldVo(String manager, String tel, String email, String memo) {
        this.id = id;
        this.name = name;
        this.manager = manager;
        this.tel = tel;
        this.email = email;
        this.memo = memo;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getManager() {
src/main/java/kr/wisestone/owl/vo/HostingFieldVo.java
@@ -1,34 +1,22 @@
package kr.wisestone.owl.vo;
public class HostingFieldVo extends BaseVo{
public class HostingFieldVo extends UseCompanyVo {
    private Long id;
    private String code;
    private String name;
    private String manager;
    private String tel;
    private String email;
    private String memo;
    private String byName;
    public HostingFieldVo() {}
    public HostingFieldVo(Long id, String code, String name, String manager, String tel, String email, String memo) {
        this.id = id;
    public HostingFieldVo(String code, String manager, String tel, String email, String memo) {
        this.code = code;
        this.name = name;
        this.manager = manager;
        this.tel = tel;
        this.email = email;
        this.memo = memo;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCode() {
@@ -37,14 +25,6 @@
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getManager() {
@@ -78,4 +58,12 @@
    public void setMemo(String memo) {
        this.memo = memo;
    }
    public String getByName() {
        return byName;
    }
    public void setByName(String byName) {
        this.byName = byName;
    }
}
src/main/java/kr/wisestone/owl/vo/IspFieldVo.java
@@ -1,10 +1,8 @@
package kr.wisestone.owl.vo;
public class IspFieldVo extends BaseVo{
public class IspFieldVo extends UseCompanyVo{
    private Long id;
    private String code;
    private String name;
    private String manager;
    private String tel;
    private String email;
@@ -12,23 +10,13 @@
    public IspFieldVo() {}
    public IspFieldVo(Long id, String code, String name, String manager, String tel, String email, String memo) {
    public IspFieldVo(String code, String manager, String tel, String email, String memo) {
        this.id = id;
        this.code = code;
        this.name = name;
        this.manager = manager;
        this.tel = tel;
        this.email = email;
        this.memo = memo;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCode() {
@@ -37,14 +25,6 @@
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getManager() {
src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java
@@ -1,6 +1,9 @@
package kr.wisestone.owl.vo;
import com.google.common.collect.Lists;
import kr.wisestone.owl.domain.Project;
import java.util.List;
/**
 * Created by wisestone on 2018-05-29.
@@ -12,9 +15,9 @@
    private String color;
    private WorkflowVo workflowVo;
    private ProjectVo projectVo;
    private CompanyFieldVo companyFieldVo;
    private IspFieldVo ispFieldVo;
    private HostingFieldVo hostingFieldVo;
    private List<UseCompanyVo> useCompanyVos = Lists.newArrayList();
    private Boolean modifyPermissionCheck = Boolean.TRUE;   //  이슈 유형은 모든 사람들이 수정, 삭제할 수 있어서 기본 값이 True
    public IssueTypeVo(){}
@@ -75,27 +78,11 @@
        this.projectVo = projectVo;
    }
    public CompanyFieldVo getCompanyFieldVo() {
        return companyFieldVo;
    public List<UseCompanyVo> getUseCompanyVos() {
        return useCompanyVos;
    }
    public void setCompanyFieldVo(CompanyFieldVo companyFieldVo) {
        this.companyFieldVo = companyFieldVo;
    }
    public IspFieldVo getIspFieldVo() {
        return ispFieldVo;
    }
    public void setIspFieldVo(IspFieldVo ispFieldVo) {
        this.ispFieldVo = ispFieldVo;
    }
    public HostingFieldVo getHostingFieldVo() {
        return hostingFieldVo;
    }
    public void setHostingFieldVo(HostingFieldVo hostingFieldVo) {
        this.hostingFieldVo = hostingFieldVo;
    public void setUseCompanyVos(List<UseCompanyVo> useCompanyVos) {
        this.useCompanyVos = useCompanyVos;
    }
}
src/main/java/kr/wisestone/owl/vo/UseCompanyVo.java
New file
@@ -0,0 +1,44 @@
package kr.wisestone.owl.vo;
public class UseCompanyVo extends BaseVo {
    private Long id;
    private String name;
    private String byName;
    public UseCompanyVo() {
    }
    public static UseCompanyVo Create(Long id, String name) {
        UseCompanyVo useCompanyVo = new UseCompanyVo();
        useCompanyVo.setName(name);
        useCompanyVo.setId(id);
        useCompanyVo.setByName(name);
        return useCompanyVo;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getByName() {
        return byName;
    }
    public void setByName(String byName) {
        this.byName = byName;
    }
}
src/main/java/kr/wisestone/owl/web/controller/HostingFieldController.java
@@ -1,7 +1,11 @@
package kr.wisestone.owl.web.controller;
import com.google.common.collect.Lists;
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.constant.UseCompany;
import kr.wisestone.owl.service.HostingFieldService;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.vo.HostingFieldVo;
import kr.wisestone.owl.web.condition.HostingFieldCondition;
import kr.wisestone.owl.web.form.HostingFieldForm;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,6 +21,7 @@
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@@ -86,6 +91,17 @@
        return this.setSuccessMessage(resJsonData);
    }
    // 업체/ISP/호스팅 목록 가져오기
    @RequestMapping(value = "/company/getCompanyList", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> getCompanyList(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        resJsonData.put(Constants.REQ_KEY_CONTENT, UseCompany.getCompanyList());
        return this.setSuccessMessage(resJsonData);
    }
    // 업체 엑셀 다운로드
    @RequestMapping(value = "/hostingField/downloadExcel", method = RequestMethod.POST)
src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java
@@ -1,8 +1,13 @@
package kr.wisestone.owl.web.form;
import com.google.common.collect.Lists;
import kr.wisestone.owl.constant.UseCompany;
import kr.wisestone.owl.domain.HostingField;
import kr.wisestone.owl.domain.IssueType;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.util.MapUtil;
import kr.wisestone.owl.web.condition.HostingFieldCondition;
import kr.wisestone.owl.web.controller.HostingFieldController;
import java.util.List;
import java.util.Map;
@@ -17,10 +22,8 @@
    private String color;
    private Long workflowId;
    private Long projectId;
    private String companyYn;
    private String ispYn;
    private String hostingYn;
    private List<Long> removeIds = Lists.newArrayList();
    private Long useCompany;
    public IssueTypeForm(){}
@@ -29,6 +32,20 @@
        if (MapUtil.getLongs(params, "removeIds") != null) {
            form.setRemoveIds(MapUtil.getLongs(params, "removeIds"));
        }
        if (MapUtil.getLongs(params, "companyIds") != null) {
//            form.setRemoveIds(MapUtil.getLongs(params, "companyIds"));
            List<Long> longs = MapUtil.getLongs(params, "companyIds");
            form.useCompany = 0L;
            for (Long id : longs) {
                if (id == UseCompany.USE_COMPANY_COMPANY - 1) {
                    form.useCompany += 1;
                } else {
                    form.useCompany += id * 2;
                }
            }
        }
        return form;
@@ -94,27 +111,11 @@
        this.projectId = projectId;
    }
    public String getCompanyYn() {
        return companyYn;
    public Long getUseCompany() {
        return useCompany;
    }
    public void setCompanyYn(String companyYn) {
        this.companyYn = companyYn;
    }
    public String getIspYn() {
        return ispYn;
    }
    public void setIspYn(String ispYn) {
        this.ispYn = ispYn;
    }
    public String getHostingYn() {
        return hostingYn;
    }
    public void setHostingYn(String hostingYn) {
        this.hostingYn = hostingYn;
    public void setUseCompany(Long useCompany) {
        this.useCompany = useCompany;
    }
}
src/main/resources/migration/V1_11__Alter_Table.sql
@@ -208,6 +208,4 @@
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- issue_type 테이블 업체,ISP,호스팅 컬럼 추가
ALTER TABLE `issue_type` ADD COLUMN  `company_yn` VARCHAR(1) NOT NULL DEFAULT 'N';
ALTER TABLE `issue_type` ADD COLUMN  `isp_yn` VARCHAR(1) NOT NULL DEFAULT 'N';
ALTER TABLE `issue_type` ADD COLUMN  `hosting_yn` VARCHAR(1) NOT NULL DEFAULT 'N';
ALTER TABLE `issue_type` ADD COLUMN  `use_company` BIGINT(11) NOT NULL DEFAULT '0';
src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js
@@ -16,6 +16,7 @@
                    getProjectListCallBack : getProjectListCallBack, // 프로젝트 auto complete callback function
                    cancel : cancel,    //  팝업 창 닫기
                    formSubmit : formSubmit,    //  폼 전송
                    removeUseCompany : removeUseCompany, // 업체/ISP/호스팅 삭제
                    formCheck : formCheck   //  폼 체크
                };
@@ -26,13 +27,9 @@
                        projects : [],      // 프로젝트
                        description : "",  //  설명
                        color : "#febd35", //  색상
                        companyFields : [], // 업체정보
                        ispFields : [], // ISP 정보
                        hostingFields : [] // 호스팅정보
                        companies : [] // 업체/isp/호스팅 선택 배열
                    },
                    companyName : "",
                    ispId : "",
                    hostingId : "",
                    projectName : "",
                    workflowName : "",
                    autoCompletePage : {
@@ -124,6 +121,12 @@
                    return false;
                }
                //  업체/ISP/호스팅 삭제
                function removeUseCompany(index) {
                    $scope.vm.form.companies.splice(index, 1);
                }
                function formSubmit() {
                    $rootScope.spinner = true;
@@ -146,33 +149,16 @@
                            return projectId;
                        })(),
                        companyId : (function () {
                            var companyId = "";
                        companyIds :  (function () {
                            var companyIds = [];
                            if ($scope.vm.form.companyFields.length > 0) {
                                companyId = $scope.vm.form.companyFields[0].id;
                            }
                            $scope.vm.form.companies.forEach(function (company) {
                                companyIds.push(company.id);
                            });
                            return companyId;
                        }),
                        ispId : (function () {
                            var ispId = "";
                            return companyIds;
                        })(),
                            if ($scope.vm.form.ispFields.length > 0) {
                                ispId = $scope.vm.form.ispFields[0].id;
                            }
                            return ispId;
                        }),
                        hostingId : (function () {
                            var hostingId = "";
                            if ($scope.vm.form.hostingFields.length > 0) {
                                hostingId = $scope.vm.form.hostingFields[0].id;
                            }
                            return hostingId;
                        }),
                        name : $rootScope.preventXss($scope.vm.form.name),
                        description : $rootScope.preventXss($scope.vm.form.description),
                        color : $scope.vm.form.color
src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js
@@ -17,6 +17,7 @@
                    cancel : cancel,    //  팝업 창 닫기
                    formSubmit : formSubmit,    //  폼 전송
                    formCheck : formCheck,  //  폼 체크
                    removeUseCompany : removeUseCompany, // 업체/isp/호스팅 삭제
                    detail : detail //  상세 정보
                };
@@ -31,8 +32,10 @@
                        workflows : [],    //  워크플로우
                        projects : [],      // 프로젝트
                        description : "",  //  설명
                        color : "" //  색상
                        color : "", //  색상
                        companies : [] // 업체/isp/호스팅 선택 배열
                    },
                    companyName : "",
                    workflowName : "",
                    projectName : "",
                    autoCompletePage : {
@@ -98,6 +101,7 @@
                angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
                function formCheck(formInvalid) {
                    if (formInvalid) {
                        return true;
@@ -137,6 +141,15 @@
                            return projectId;
                        })(),
                        companyIds :  (function () {
                            var companyIds = [];
                            $scope.vm.form.companies.forEach(function (company) {
                                companyIds.push(company.id);
                            });
                            return companyIds;
                        })(),
                        name : $rootScope.preventXss($scope.vm.form.name),
                        description : $rootScope.preventXss($scope.vm.form.description),
                        color : $scope.vm.form.color
@@ -175,6 +188,12 @@
                    $(document).unbind("keydown");  //  단축키 이벤트 제거
                }
                //  업체/ISP/호스팅 삭제
                function removeUseCompany(index) {
                    $scope.vm.form.companies.splice(index, 1);
                }
                function detail() {
                    $scope.vm.form.workflows = [];
@@ -192,6 +211,8 @@
                                    $scope.vm.form.projects.push(result.data.data.projectVo);
                                    $scope.vm.projectName = result.data.data.projectVo.name;
                                }
                                $scope.vm.form.companies = result.data.data.useCompanyVos;
                                $scope.vm.form.color = result.data.data.color;
                            }
                        }
src/main/webapp/scripts/components/HostingField/hostingField.service.js
@@ -37,8 +37,14 @@
                    $log.debug("HostingField 삭제 결과 : ", response);
                    return response;
                });
            },
            // 업체/ISP/호스팅 조회
            getCompanyList : function (conditions) {
                return $http.post("company/getCompanyList", conditions).then(function (response) {
                    $log.debug("업체/isp/호스팅 목록 조회 결과 : ", response);
                    return response;
                });
            }
        }
    }
src/main/webapp/scripts/components/utils/autoComplete.controller.js
@@ -35,6 +35,7 @@
                $scope.fn.getIssueDepartmentList = getIssueDepartmentList;    //  담당자 -> 담당부서 목록 정보를 조회한다.
                $scope.fn.getIssueIspFieldList = getIssueIspFieldList;    //  ISP 목록 정보를 조회한다.
                $scope.fn.getIssueHostingFieldList = getIssueHostingFieldList;    //  호스팅 목록 정보를 조회한다.
                $scope.fn.getCompanyList = getCompanyList;          // 업체/isp/호스팅 목록 조회
                function getUserList(query, excludeList, page, callBack) {
                    var conditions = {
@@ -316,8 +317,6 @@
                    var deferred = $q.defer();
                    IspField.find($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
@@ -368,6 +367,39 @@
                    return deferred.promise;
                }
                function getCompanyList(query, excludeList, page, callBack) {
                    var conditions = {
                        hostingName : query,
                        excludeIds : (function () {
                            var excludeIds = [];
                            angular.forEach(excludeList, function (exclude) {
                                excludeIds.push(exclude.id);
                            });
                            return excludeIds;
                        })()
                    };
                    var deferred = $q.defer();
                    HostingField.getCompanyList($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if ($rootScope.isDefined(callBack)) {
                                callBack(result);
                            }
                            deferred.resolve(result.data.content);
                        }
                        else {
                            SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패"
                        }
                    });
                    return deferred.promise;
                }
            }
        ]);
    }
src/main/webapp/views/issueType/issueTypeAdd.html
@@ -58,15 +58,23 @@
                                        type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
            </div>
            <div class="form-group mgb5">
                <label class="issue-label"> <span translate="issue.companyInfo">업체/ISP/호스팅 정보</span> </label>
                <js-autocomplete-multi data-input-name="departments"
                                       selected-model="vm.form.companies"
                                       search="vm.companyName"
                                       source="fn.getCompanyList(vm.companyName, vm.form.companies)"
                                       input-disabled="false"
                                       translation-texts="{ count : 'common.userNum', empty : 'common.emptyUser' }"
                                       extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : false, maxlength : 100, autoResize : true }"></js-autocomplete-multi>
            <div class="form-group">
                <label><span
                        translate="issue.companyInfo">업체/ISP/호스팅 정보</span></label>
                <ng-dropdown-multiselect class="multiSelect cursor"
                                         data-input-name="issueStatusTypes"
                                         selected-model="vm.search.issueStatusTypes"
                                         extra-settings="{ stringTypeOption : true }"
                                         options="vm.options.emailTemplates"></ng-dropdown-multiselect>
                <div class="select3-selection__choicediv mt-10">
                                <span class="select3-selection__choice" ng-repeat="company in vm.form.companies">
                                    <span>{{company.byName}}</span> <!--사용자가 속해 있는 부서 이름 출력-->
                                    <span class="select3-selection__choice__remove" ng-click="fn.removeUseCompany($index)">×</span>
                                </span>
                </div>
            </div>
            <div class="form-group">
src/main/webapp/views/issueType/issueTypeModify.html
@@ -63,17 +63,28 @@
            </div>
            <div class="form-group">
                <label><span
                        translate="issue.companyInfo">업체/ISP/호스팅 정보</span></label>
                <ng-dropdown-multiselect class="multiSelect cursor"
                                         data-input-name="issueStatusTypes"
                                         selected-model="vm.search.issueStatusTypes"
                                         extra-settings="{ stringTypeOption : true }"
                                         options="vm.options.emailTemplates"></ng-dropdown-multiselect>
            <div class="form-group mgb5">
                <label class="issue-label"> <span translate="issue.companyInfo">업체/ISP/호스팅 정보</span> </label>
                <js-autocomplete-multi data-input-name="departments"
                                       selected-model="vm.form.companies"
                                       search="vm.companyName"
                                       source="fn.getCompanyList(vm.companyName, vm.form.companies)"
                                       input-disabled="false"
                                       translation-texts="{ count : 'common.userNum', empty : 'common.emptyUser' }"
                                       extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : false, maxlength : 100, autoResize : true }"></js-autocomplete-multi>
                <div class="select3-selection__choicediv mt-10">
                                <span class="select3-selection__choice" ng-repeat="company in vm.form.companies">
                                    <span>{{company.byName}}</span> <!--사용자가 속해 있는 부서 이름 출력-->
                                    <span class="select3-selection__choice__remove" ng-click="fn.removeUseCompany($index)">×</span>
                                </span>
                </div>
            </div>
            <div class="form-group">
                <label for="issueTypeModifyForm2"><span translate="common.color">색상</span> <code class="highlighter-rouge">*</code></label>
                <div class="input-group">