package kr.wisestone.owl.service.impl;
|
|
import com.google.common.collect.Lists;
|
import kr.wisestone.owl.constant.Constants;
|
import kr.wisestone.owl.constant.MsgConstants;
|
import kr.wisestone.owl.domain.Project;
|
import kr.wisestone.owl.domain.WorkflowStatus;
|
import kr.wisestone.owl.domain.enumType.ProjectType;
|
import kr.wisestone.owl.exception.OwlRuntimeException;
|
import kr.wisestone.owl.repository.WorkflowStatusRepository;
|
import kr.wisestone.owl.service.IssueService;
|
import kr.wisestone.owl.service.ProjectService;
|
import kr.wisestone.owl.service.WorkflowStatusService;
|
import kr.wisestone.owl.util.ConvertUtil;
|
import kr.wisestone.owl.vo.IssueVo;
|
import kr.wisestone.owl.vo.UserVo;
|
import kr.wisestone.owl.vo.WorkflowStatusVo;
|
import kr.wisestone.owl.web.condition.IssueCondition;
|
import kr.wisestone.owl.web.condition.WorkflowStatusCondition;
|
//import kr.wisestone.owl.web.form.WorkflowStatusForm;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.StringUtils;
|
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* Created by wisestone on 2018-01-03.
|
*/
|
@Service
|
public class WorkflowStatusServiceImpl extends AbstractServiceImpl<WorkflowStatus, Long, JpaRepository<WorkflowStatus, Long>> implements WorkflowStatusService {
|
|
private static final Logger log = LoggerFactory.getLogger(WorkflowStatusServiceImpl.class);
|
|
@Autowired
|
private WorkflowStatusRepository workflowStatusRepository;
|
|
@Autowired
|
private IssueService taskService;
|
|
@Autowired
|
private ProjectService projectService;
|
|
@Override
|
protected JpaRepository<WorkflowStatus, Long> getRepository() {
|
return this.workflowStatusRepository;
|
}
|
|
@Override
|
@Transactional
|
|
public List<WorkflowStatus> addDefaultWorkflowStatus(Project project, ProjectType projectType) {
|
List<WorkflowStatus> workflowStatuses = Lists.newArrayList();
|
switch(projectType) {
|
case RMS_PROJECT:
|
workflowStatuses.add(new WorkflowStatus(project, "할 일", Boolean.TRUE, Boolean.FALSE, "#047bf8", 0L, 0L));
|
workflowStatuses.add(new WorkflowStatus(project, "진행 중", Boolean.FALSE, Boolean.FALSE, "#e65252", 50L, 1L));
|
workflowStatuses.add(new WorkflowStatus(project, "완료", Boolean.FALSE, Boolean.TRUE, "#5bc0de", 100L, 2L));
|
workflowStatuses.add(new WorkflowStatus(project, "보류", Boolean.FALSE, Boolean.FALSE, "#5eb314", 0L, 3L));
|
workflowStatuses.add(new WorkflowStatus(project, "취소", Boolean.FALSE, Boolean.FALSE, "#b17247", 0L, 4L));
|
break;
|
|
case BTS_PROJECT:
|
workflowStatuses.add(new WorkflowStatus(project, "오픈", Boolean.TRUE, Boolean.FALSE, "#047bf8", 0L, 0L));
|
workflowStatuses.add(new WorkflowStatus(project, "할당", Boolean.FALSE, Boolean.FALSE, "#e65252", 20L, 1L));
|
workflowStatuses.add(new WorkflowStatus(project, "해결", Boolean.FALSE, Boolean.FALSE, "#5bc0de", 50L, 2L));
|
workflowStatuses.add(new WorkflowStatus(project, "확인", Boolean.FALSE, Boolean.FALSE, "#5eb314", 70L, 3L));
|
workflowStatuses.add(new WorkflowStatus(project, "종료", Boolean.FALSE, Boolean.TRUE, "#b17247", 100L, 4L));
|
break;
|
|
case TCM_PROJECT :
|
workflowStatuses.add(new WorkflowStatus(project, "대기", Boolean.TRUE, Boolean.FALSE, "#047bf8", 0L, 0L));
|
workflowStatuses.add(new WorkflowStatus(project, "진행 중", Boolean.FALSE, Boolean.FALSE, "#e65252", 20L, 1L));
|
workflowStatuses.add(new WorkflowStatus(project, "검수", Boolean.FALSE, Boolean.FALSE, "#5bc0de", 50L, 2L));
|
workflowStatuses.add(new WorkflowStatus(project, "완료", Boolean.FALSE, Boolean.TRUE, "#b17247", 100L, 4L));
|
workflowStatuses.add(new WorkflowStatus(project, "취소", Boolean.FALSE, Boolean.FALSE, "#6156c5", 0L, 5L));
|
break;
|
}
|
|
return this.workflowStatusRepository.saveAll(workflowStatuses);
|
}
|
|
|
// 워크플로우 현재 상태 찾기
|
@Override
|
@Transactional(readOnly = true)
|
public List<WorkflowStatusVo> findWorkflowStatus(Map<String, Object> resJsonData,
|
WorkflowStatusCondition condition) {
|
|
List<WorkflowStatus> workflowStatuses = this.workflowStatusRepository.findByProjectId(condition.getProjectId());
|
|
List<WorkflowStatusVo> workflowStatusVos = Lists.newArrayList();
|
|
IssueCondition taskCondition = new IssueCondition();
|
|
for (WorkflowStatus workflowStatus : workflowStatuses) {
|
taskCondition.addStatusId(workflowStatus.getId());
|
}
|
|
Map<String, Object> tasks = this.taskService.findTask(taskCondition);
|
|
for (WorkflowStatus workflowStatus : workflowStatuses) {
|
WorkflowStatusVo workflowStatusVo = ConvertUtil.copyProperties(workflowStatus, WorkflowStatusVo.class);
|
List<IssueVo> taskVos = (List<IssueVo>)tasks.get(workflowStatus.getId().toString());
|
workflowStatusVo.setTaskVos(taskVos);
|
workflowStatusVos.add(workflowStatusVo);
|
}
|
|
resJsonData.put(Constants.RES_KEY_CONTENTS, workflowStatusVos);
|
|
return workflowStatusVos;
|
}
|
|
// @Override
|
// @Transactional
|
// public WorkflowStatus addWorkflowStatus(WorkflowStatusForm workflowStatusForm) {
|
// WorkflowStatus workflowStatus = ConvertUtil.copyProperties(workflowStatusForm, WorkflowStatus.class);
|
// Project project = this.projectService.getProject(workflowStatusForm.getProjectId());
|
//
|
// // 이름 유효성 검사
|
// this.verifyName(project.getId(), null, workflowStatus.getName());
|
// // TODO - 진행률 (대시보드 사용하게 될 때 필요)
|
// workflowStatus.setProgress(0L);
|
// workflowStatus.setProject(project);
|
//
|
// this.workflowStatusRepository.saveAndFlush(workflowStatus);
|
// // 위치 정의
|
// this.positionRegulate(project, workflowStatus);
|
//
|
// return workflowStatus;
|
// }
|
//
|
// // 이름 유효성 검사
|
// private void verifyName(Long projectId, Long id, String name) {
|
// if (StringUtils.isEmpty(name)) {
|
// throw new OwlRuntimeException(
|
// this.messageAccessor.getMessage(MsgConstants.WORKFLOW_STATUS_NOT_NAME));
|
// }
|
//
|
// WorkflowStatus workflowStatus;
|
//
|
// if (id != null) {
|
// workflowStatus = this.workflowStatusRepository.findByIdNotAndNameAndProjectId(id, name, projectId);
|
// }
|
// else {
|
// workflowStatus = this.workflowStatusRepository.findByNameAndProjectId(name, projectId);
|
// }
|
//
|
// if (workflowStatus != null) {
|
// throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.WORKFLOW_STATUS_USED_NAME));
|
// }
|
// }
|
//
|
// // 위치 정의
|
// private void positionRegulate(Project project, WorkflowStatus workflowStatus) {
|
// Long maxPosition = this.workflowStatusRepository.findMaxPosition(project.getId());
|
// maxPosition = maxPosition + 1;
|
// workflowStatus.setPosition(maxPosition);
|
//
|
// this.workflowStatusRepository.saveAndFlush(workflowStatus);
|
// }
|
//
|
// // 워크플로우 상태 상세 조회
|
// @Override
|
// @Transactional
|
// public WorkflowStatusVo detailWorkflowStatus(Map<String, Object> resJsonData, WorkflowStatusForm workflowStatusForm) {
|
// WorkflowStatusVo workflowStatusVo;
|
//
|
// if (workflowStatusForm.getId() != null) {
|
// workflowStatusVo = ConvertUtil.copyProperties(this.workflowStatusRepository.findOne(workflowStatusForm.getId()), WorkflowStatusVo.class);
|
// }
|
// else {
|
// workflowStatusVo = new WorkflowStatusVo();
|
// }
|
//
|
// resJsonData.put(Constants.RES_KEY_CONTENTS, workflowStatusVo);
|
//
|
// return workflowStatusVo;
|
// }
|
//
|
// // 워크플로우 상태 정보를 수정한다.
|
// @Override
|
// @Transactional
|
// public WorkflowStatus modifyWorkflowStatus(WorkflowStatusForm workflowStatusForm) {
|
// WorkflowStatus workflowStatus = this.workflowStatusRepository.findOne(workflowStatusForm.getId());
|
//
|
// // 이름 유효성 체크
|
// this.verifyName(workflowStatus.getProject().getId(), workflowStatusForm.getId(), workflowStatusForm.getName());
|
// // 색상 체크
|
// this.verifyColor(workflowStatusForm.getColor());
|
//
|
// ConvertUtil.copyProperties(workflowStatusForm, workflowStatus, "id");
|
//
|
// return this.workflowStatusRepository.saveAndFlush(workflowStatus);
|
// }
|
//
|
// // 색상 체크
|
// private void verifyColor(String color) {
|
// if (org.apache.commons.lang.StringUtils.isEmpty(color)) {
|
// throw new OwlRuntimeException(
|
// this.messageAccessor.getMessage(MsgConstants.WORKFLOW_STATUS_NOT_COLOR));
|
// }
|
// }
|
}
|