Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
| | |
| | | |
| | | Issue addRelIssue(User user, IssueForm issueForm, List<MultipartFile> multipartFiles); |
| | | |
| | | Issue addApiIssue(IssueApiForm issueApiForm); |
| | | List<Issue> addApiIssue(IssueApiForm issueApiForm) throws CloneNotSupportedException; |
| | | |
| | | List<Issue> modifyIssue(IssueApiForm issueApiForm, List<MultipartFile> files); |
| | | |
| | | List<IssueVo> findIssue(IssueApiForm issueApiform); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | // 프로젝트 입력 |
| | | Project project = issueType.getProject(); |
| | | if (project == null){ |
| | |
| | | customFieldApiOverlapForm.setUserId(user.getId()); |
| | | customFieldApiOverlapForm.setIssueTypeId(issueForm.getIssueTypeId()); |
| | | |
| | | List<IssueVo> issueVos = this.findIssue(issueApiForm, user.getId()); |
| | | // 상위일감에 사용할 중복값 설정 |
| | | List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(user.getId(), issueApiForm.getIssueTypeId()); |
| | | for(int i=0; i < customFieldApiOverlaps.size() ; i++ ){ |
| | | CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i); |
| | | issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId()); |
| | | } |
| | | |
| | | List<IssueVo> issueVos = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); |
| | | int size = issueVos.size(); |
| | | if (size == 1) { |
| | | issueForm.setParentIssueId(issueVos.get(0).getId()); |
| | |
| | | // API 를 통해 이슈 추가. |
| | | @Override |
| | | @Transactional |
| | | public Issue addApiIssue(IssueApiForm issueApiForm) { |
| | | public List<Issue> addApiIssue(IssueApiForm issueApiForm) throws CloneNotSupportedException { |
| | | User user = convertToUser(issueApiForm.getToken()); |
| | | IssueForm issueForm = this.convertToIssueForm(issueApiForm, user); |
| | | |
| | | return addIssue(user, issueForm, issueApiForm.getMultipartFiles()); |
| | | List<Issue> issues = Lists.newArrayList(); |
| | | if (issueForm.getParentIssueId() != null) { |
| | | issues.add(addIssue(user, issueForm, issueApiForm.getMultipartFiles())); |
| | | } else { |
| | | // 상위 이슈 추가 |
| | | IssueForm parentIssueForm = issueForm.clone(); |
| | | parentIssueForm.setUseIssueCustomFields(issueApiForm.getUseIssueCustomFieldIds()); |
| | | Issue issue = addIssue(user, parentIssueForm, null); |
| | | issues.add(issue); |
| | | // 하위 이슈 추가 |
| | | issueForm.setParentIssueId(issue.getId()); |
| | | issues.add(addIssue(user, issueForm, issueApiForm.getMultipartFiles())); |
| | | } |
| | | |
| | | return issues; |
| | | } |
| | | |
| | | |
| | | |
| | | // 중복된 상위 이슈 검색 |
| | | private List<IssueVo> findIssue(IssueApiForm issueApiForm, Long userId) { |
| | | |
| | | List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(userId, issueApiForm.getIssueTypeId()); |
| | | private List<IssueVo> findIssue(IssueApiForm issueApiForm, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) { |
| | | |
| | | List<IssueVo> resultIssueVos = new ArrayList<>(); |
| | | if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) { |
| | |
| | | import org.springframework.web.multipart.MultipartHttpServletRequest; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Controller |
| | |
| | | @RequestMapping(value = "api/issue", method = RequestMethod.POST) |
| | | public |
| | | @ResponseBody |
| | | Map<String, Object> addIssue(MultipartHttpServletRequest request) throws OwlRuntimeException { |
| | | Map<String, Object> addIssue(MultipartHttpServletRequest request) throws OwlRuntimeException, CloneNotSupportedException { |
| | | Map<String, Object> resJsonData = new HashMap<>(); |
| | | |
| | | IssueApiForm issueForm = IssueApiForm.make(ConvertUtil.convertJsonToMap(request.getParameter(Constants.REQ_KEY_CONTENT)), request.getFiles("file")); |
| | |
| | | throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ERROR)); |
| | | } |
| | | if (issueForm.getApiType() == IssueApiForm.ApiType.add) { |
| | | Issue issue = this.issueService.addApiIssue(issueForm); |
| | | List<Issue> issues = this.issueService.addApiIssue(issueForm); |
| | | // 버전 생성 |
| | | this.issueService.addIssueVersion(issue.getId()); |
| | | for (Issue issue : issues) { |
| | | this.issueService.addIssueVersion(issue.getId()); |
| | | } |
| | | } else { |
| | | this.issueService.modifyIssue(issueForm, request.getFiles("file")); |
| | | } |
| | |
| | | public void setCustomFieldIds(List<Long> customFieldIds) { |
| | | this.customFieldIds = customFieldIds; |
| | | } |
| | | |
| | | public void addCustomFieldId(Long customFieldId) { |
| | | if (this.customFieldIds != null) { |
| | | this.customFieldIds.add(customFieldId); |
| | | } |
| | | } |
| | | } |
| | |
| | | package kr.wisestone.owl.web.form; |
| | | |
| | | import com.google.common.collect.Lists; |
| | | import kr.wisestone.owl.constant.MsgConstants; |
| | | import kr.wisestone.owl.domain.IssueCustomFieldValue; |
| | | import kr.wisestone.owl.exception.OwlRuntimeException; |
| | | import kr.wisestone.owl.util.ConvertUtil; |
| | | import kr.wisestone.owl.util.MapUtil; |
| | | import kr.wisestone.owl.vo.CustomFieldVo; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.util.*; |
| | |
| | | private List<DepartmentForm> departments = Lists.newArrayList(); |
| | | private List<IssueCustomFieldValueForm> issueCustomFieldValues = Lists.newArrayList(); |
| | | private List<Map<String, Object>> CustomFieldValues = Lists.newArrayList(); |
| | | // private List<Map<String, Object>> files = Lists.newArrayList(); |
| | | private List<MultipartFile> multipartFiles = Lists.newArrayList(); |
| | | private List<Long> useIssueCustomFieldIds = Lists.newArrayList(); // 사위일감용 사용자필드값 |
| | | |
| | | public IssueApiForm() { |
| | | } |
| | |
| | | this.apiType = apiType; |
| | | } |
| | | |
| | | // public List<Map<String, Object>> getFiles() { |
| | | // return files; |
| | | // } |
| | | // |
| | | // public void setFiles(List<Map<String, Object>> files) { |
| | | // this.files = files; |
| | | // } |
| | | |
| | | public List<MultipartFile> getMultipartFiles() { |
| | | return multipartFiles; |
| | | } |
| | |
| | | public void setIssueStatusId(Long issueStatusId) { |
| | | this.issueStatusId = issueStatusId; |
| | | } |
| | | |
| | | public List<Long> getUseIssueCustomFieldIds() { |
| | | return useIssueCustomFieldIds; |
| | | } |
| | | |
| | | public void setUseIssueCustomFieldIds(List<Long> useIssueCustomFieldIds) { |
| | | this.useIssueCustomFieldIds = useIssueCustomFieldIds; |
| | | } |
| | | |
| | | public void addUseIssueCustomFieldId(Long customFieldId) { |
| | | if (this.useIssueCustomFieldIds != null) { |
| | | this.useIssueCustomFieldIds.add(customFieldId); |
| | | } |
| | | } |
| | | } |
| | |
| | | package kr.wisestone.owl.web.form; |
| | | |
| | | import com.google.common.collect.Lists; |
| | | import kr.wisestone.owl.domain.enumType.IssueModifyType; |
| | | import kr.wisestone.owl.util.ConvertUtil; |
| | | import kr.wisestone.owl.util.DateUtil; |
| | | import kr.wisestone.owl.util.MapUtil; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * Created by wisestone on 2018-01-03. |
| | | */ |
| | | public class IssueForm { |
| | | public class IssueForm implements Cloneable { |
| | | |
| | | |
| | | private Long id; |
| | |
| | | private String isApi; |
| | | |
| | | public IssueForm() { |
| | | } |
| | | |
| | | @Override |
| | | public IssueForm clone() throws CloneNotSupportedException { |
| | | return (IssueForm) super.clone(); |
| | | } |
| | | |
| | | public static IssueForm make(Map<String, Object> params) { |
| | |
| | | return form; |
| | | } |
| | | |
| | | // 중복값으로 사용하는 사용자정의필드만 다시 설정 |
| | | public void setUseIssueCustomFields(List<Long> useIssueCustomFields) { |
| | | List<Map<String, Object>> results = Lists.newArrayList(); |
| | | |
| | | for (Map<String, Object> customValue : this.getIssueCustomFields()) { |
| | | for (Long customFieldId : useIssueCustomFields) { |
| | | // Map<String, Object> customFieldVo = (Map<String, Object>)MapUtil.getObject(customValue, "customFieldVo"); |
| | | if (customFieldId.equals(MapUtil.getLong(customValue, "customFieldId"))) { |
| | | results.add(customValue); |
| | | } |
| | | } |
| | | } |
| | | |
| | | this.setIssueCustomFields(results); |
| | | } |
| | | |
| | | public Long getId() { |
| | | return id; |
| | | } |
| | |
| | | source="fn.getProjectList(vm.projectName, vm.form.projects, vm.autoCompletePage.project.page, fn.getProjectListCallBack)" |
| | | page="vm.autoCompletePage.project.page" |
| | | total-page="vm.autoCompletePage.project.totalPage" |
| | | input-disabled="false" |
| | | translation-texts="{ empty : 'common.emptyProject' }" |
| | | extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', |
| | | type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> |