package com.example.survey.service.impl; import com.example.survey.dao.MetaDataDao; import com.example.survey.dao.ProjectDao; import com.example.survey.dao.RespondentDao; import com.example.survey.dao.UserDao; import com.example.survey.dto.project.CreateProjectDTO; import com.example.survey.dto.project.ModifyProjectDTO; import com.example.survey.dto.project.ModifyStateDTO; import com.example.survey.entity.MetaData; import com.example.survey.entity.Project; import com.example.survey.entity.User; import com.example.survey.enumeration.ProjectStateEnum; import com.example.survey.enumeration.ResultEnum; import com.example.survey.exception.MetaDataException; import com.example.survey.exception.ProjectException; import com.example.survey.exception.UserException; import com.example.survey.service.ProjectService; import com.example.survey.vo.ProjectVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; /** * @author Pope */ @Service public class ProjectServiceImpl implements ProjectService { @Autowired ProjectDao projectDao; @Autowired RespondentDao respondentDao; @Autowired MetaDataDao metaDataDao; @Autowired UserDao userDao; @Override public void createProject(CreateProjectDTO createProjectDTO) { if (!userDao.existUser(createProjectDTO.getUserPhone())) { throw new UserException(ResultEnum.NOT_EXIST_USER); } if (!metaDataDao.existMetaData(createProjectDTO.getMetaDataName())) { throw new MetaDataException(ResultEnum.NOT_EXIST_METADATA); } User user = userDao.selectUser(createProjectDTO.getUserPhone()); MetaData metaData = metaDataDao.selectMetaData(createProjectDTO.getMetaDataName()); Project project = new Project(); project.setName(createProjectDTO.getName()); project.setMetaData(metaData); project.setStartTime(createProjectDTO.getStartTime()); project.setEndTime(createProjectDTO.getEndTime()); project.setDetail(createProjectDTO.getDetail()); project.setState(ProjectStateEnum.IN_PROGRESS.getValue()); project.setUser(user); projectDao.saveProject(project); } @Override public List listProjectLimit(String name, int currentPage, int pageSize) { return projectDao.listProjectLimit(name, currentPage * pageSize, pageSize).stream() .map(project -> { ProjectVO projectVO = new ProjectVO(); projectVO.setName(project.getName()); projectVO.setDetail(project.getDetail()); projectVO.setStartTime(project.getStartTime()); projectVO.setEndTime(project.getEndTime()); if (project.getMetaData() != null) { projectVO.setMetaDataName(project.getMetaData().getName()); } projectVO.setState(project.getState()); return projectVO; }).collect(Collectors.toList()); } @Override public long countRespondent(String name) { if (!projectDao.existProject(name)) { throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } return projectDao.selectProject(name).getRespondentCount(); } @Override public long countRespondent(String name, String respondentState) { if (!projectDao.existProject(name)) { throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } Project project = projectDao.selectProject(name); return project.getNotInvestigatedRespondentCount(); } @Override public void modifyProjectState(ModifyStateDTO modifyStateDTO) { if (!projectDao.existProject(modifyStateDTO.getName())) { throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } Project project = projectDao.selectProject(modifyStateDTO.getName()); for (ProjectStateEnum value : ProjectStateEnum.values()) { if (value.getValue().equals(modifyStateDTO.getState())) { project.setState(modifyStateDTO.getState()); projectDao.saveProject(project); return; } } throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT_STATE); } @Override public void modifyProject(ModifyProjectDTO modifyProjectDTO) { if (!userDao.existUser(modifyProjectDTO.getUserPhone())) { throw new UserException(ResultEnum.NOT_EXIST_USER); } if (!projectDao.existProject(modifyProjectDTO.getName())) { throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } User user = userDao.selectUser(modifyProjectDTO.getUserPhone()); Project project = projectDao.selectProject(modifyProjectDTO.getName()); project.setDetail(modifyProjectDTO.getDetail()); project.setStartTime(modifyProjectDTO.getStartTime()); project.setEndTime(modifyProjectDTO.getEndTime()); project.setUser(user); projectDao.saveProject(project); } @Override public long countProject(String name) { return projectDao.countProject(name); } }