package com.mossle.plm.rs;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import com.mossle.api.user.UserConnector;
import com.mossle.api.user.UserDTO;
import com.mossle.core.auth.CurrentUserHolder;
import com.mossle.core.mapper.BeanMapper;
import com.mossle.core.util.BaseDTO;
import com.mossle.plm.persistence.domain.PlmIssue;
import com.mossle.plm.persistence.domain.PlmSprint;
import com.mossle.plm.persistence.domain.PlmStep;
import com.mossle.plm.persistence.manager.PlmIssueManager;
import com.mossle.plm.persistence.manager.PlmSprintManager;
import com.mossle.plm.persistence.manager.PlmStepManager;
import com.mossle.plm.service.PlmLogService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
@Path("plm")
public class PlmKanbanResource {
private static Logger logger = LoggerFactory
.getLogger(PlmKanbanResource.class);
private PlmIssueManager plmIssueManager;
private PlmSprintManager plmSprintManager;
private PlmStepManager plmStepManager;
private PlmLogService plmLogService;
private UserConnector userConnector;
private CurrentUserHolder currentUserHolder;
private BeanMapper beanMapper = new BeanMapper();
@GET
@Path("kanbanViewIssue")
@Produces(MediaType.APPLICATION_JSON)
public BaseDTO kanbanViewIssue(@QueryParam("issueId") Long issueId) {
PlmIssue plmIssue = plmIssueManager.get(issueId);
Map<String, Object> data = new HashMap<String, Object>();
data.put("id", plmIssue.getId());
data.put("name", plmIssue.getName());
data.put("content", plmIssue.getContent());
data.put("step", plmIssue.getStep());
data.put("assigneeId", plmIssue.getAssigneeId());
UserDTO userDto = userConnector.findById(plmIssue.getAssigneeId());
data.put("assigneeName", userDto.getDisplayName());
BaseDTO baseDto = new BaseDTO();
baseDto.setCode(200);
baseDto.setData(data);
return baseDto;
}
/**
* 创建任务.
*/
@POST
@Path("kanbanCreateIssue")
@Produces(MediaType.APPLICATION_JSON)
public BaseDTO kanbanCreateIssue(@FormParam("name") String name,
@FormParam("content") String content,
@FormParam("sprintId") Long sprintId,
@FormParam("step") String step,
@FormParam("assigneeId") String assigneeId) throws Exception {
String userId = currentUserHolder.getUserId();
PlmIssue plmIssue = new PlmIssue();
plmIssue.setName(name);
plmIssue.setContent(content);
PlmSprint plmSprint = plmSprintManager.get(sprintId);
plmIssue.setPlmSprint(plmSprint);
plmIssue.setPlmProject(plmSprint.getPlmProject());
plmIssue.setStep(step);
plmIssue.setType("story");
plmIssue.setStatus("active");
plmIssue.setAssigneeId(assigneeId);
plmIssue.setCreateTime(new Date());
plmIssue.setReporterId(userId);
plmIssueManager.save(plmIssue);
plmLogService.issueCreated(plmIssue);
BaseDTO baseDto = new BaseDTO();
baseDto.setCode(200);
return baseDto;
}
/**
* 更新任务.
*/
@POST
@Path("kanbanUpdateIssue")
@Produces(MediaType.APPLICATION_JSON)
public BaseDTO kanbanUpdateIssue(@FormParam("id") Long id,
@FormParam("name") String name,
@FormParam("content") String content,
@FormParam("step") String step,
@FormParam("assigneeId") String assigneeId) throws Exception {
PlmIssue plmIssue = plmIssueManager.get(id);
plmIssue.setName(name);
plmIssue.setContent(content);
plmIssue.setStep(step);
plmIssue.setAssigneeId(assigneeId);
plmIssueManager.save(plmIssue);
BaseDTO baseDto = new BaseDTO();
baseDto.setCode(200);
return baseDto;
}
/**
* 修改步骤.
*/
@POST
@Path("kanbanChangeStep")
@Produces(MediaType.APPLICATION_JSON)
public BaseDTO kanbanChangeStep(@FormParam("issueId") Long issueId,
@FormParam("step") String step) throws Exception {
PlmIssue plmIssue = plmIssueManager.get(issueId);
PlmIssue oldIssue = new PlmIssue();
beanMapper.copy(plmIssue, oldIssue);
PlmStep plmStep = plmStepManager.findUnique(
"from PlmStep where plmConfig=? and code=?", plmIssue
.getPlmSprint().getPlmConfig(), step);
plmIssue.setStep(step);
String logType = "update";
if ("complete".equals(plmStep.getAction())) {
// complete
plmIssue.setStatus("complete");
logType = "complete";
} else {
if ("complete".equals(plmIssue.getStatus())) {
// reopen
plmIssue.setStatus("active");
logType = "reopen";
}
}
plmIssueManager.save(plmIssue);
String userId = currentUserHolder.getUserId();
if ("update".equals(logType)) {
plmLogService.issueUpdated(oldIssue, plmIssue, userId);
} else if ("complete".equals(logType)) {
plmLogService.issueCompleted(plmIssue, userId);
} else if ("reopen".equals(logType)) {
plmLogService.issueReopened(plmIssue, userId);
}
BaseDTO baseDto = new BaseDTO();
baseDto.setCode(200);
return baseDto;
}
// ~ ======================================================================
@Resource
public void setPlmIssueManager(PlmIssueManager plmIssueManager) {
this.plmIssueManager = plmIssueManager;
}
@Resource
public void setPlmSprintManager(PlmSprintManager plmSprintManager) {
this.plmSprintManager = plmSprintManager;
}
@Resource
public void setPlmStepManager(PlmStepManager plmStepManager) {
this.plmStepManager = plmStepManager;
}
@Resource
public void setPlmLogService(PlmLogService plmLogService) {
this.plmLogService = plmLogService;
}
@Resource
public void setUserConnector(UserConnector userConnector) {
this.userConnector = userConnector;
}
@Resource
public void setCurrentUserHolder(CurrentUserHolder currentUserHolder) {
this.currentUserHolder = currentUserHolder;
}
}