Survey/src/main/java/com/example/survey/service/impl/RespondentServiceImpl.java
Pope 9c75d90d65 2021-4-19
修复了一些bug
2021-04-19 22:11:26 +08:00

176 lines
8.1 KiB
Java

package com.example.survey.service.impl;
import com.example.survey.dao.ProjectDao;
import com.example.survey.dao.RespondentDao;
import com.example.survey.dao.UserDao;
import com.example.survey.dto.respondent.CreateRespondentDTO;
import com.example.survey.dto.respondent.DeleteRespondentDTO;
import com.example.survey.dto.respondent.ModifyRespondentDTO;
import com.example.survey.dto.respondent.ModifyRespondentUserDTO;
import com.example.survey.entity.Project;
import com.example.survey.entity.Respondent;
import com.example.survey.entity.User;
import com.example.survey.enumeration.RespondentStateEnum;
import com.example.survey.enumeration.ResultEnum;
import com.example.survey.exception.ProjectException;
import com.example.survey.exception.RespondentException;
import com.example.survey.exception.UserException;
import com.example.survey.service.RespondentService;
import com.example.survey.vo.RespondentVO;
import com.example.survey.vo.inner.UserInfo;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Pope
*/
@Log4j2
@Service
public class RespondentServiceImpl implements RespondentService {
@Autowired
private RespondentDao respondentDao;
@Autowired
private ProjectDao projectDao;
@Autowired
private UserDao userDao;
@Override
public void createRespondent(CreateRespondentDTO createRespondentDTO) {
if (!projectDao.existProject(createRespondentDTO.getProjectName())) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
if (!userDao.existUser(createRespondentDTO.getUserPhone())) {
throw new UserException(ResultEnum.NOT_EXIST_USER);
}
Project project = projectDao.selectProject(createRespondentDTO.getProjectName());
User user = userDao.selectUser(createRespondentDTO.getPhone());
Respondent respondent = new Respondent();
respondent.setIdNumber(createRespondentDTO.getIdNumber());
respondent.setPhone(createRespondentDTO.getPhone());
respondent.setName(createRespondentDTO.getName());
respondent.setGender(createRespondentDTO.getGender());
respondent.setMsg(createRespondentDTO.getMsg());
respondent.setAdministrativeArea(createRespondentDTO.getAdministrativeArea());
respondent.setProject(project);
respondent.setUser(user);
respondent.setState(RespondentStateEnum.NOT_INVESTIGATED.getValue());
respondentDao.saveRespondent(respondent);
project.setRespondentCount(project.getRespondentCount() + 1);
project.setNotInvestigatedRespondentCount(project.getNotInvestigatedRespondentCount() + 1);
projectDao.saveProject(project);
}
@Override
public List<RespondentVO> listRespondentLimit(String userPhone, String state, String idNumber, String name, String phone, String province, String city, String county, String projectName, int currentPage, int pageSize) {
if (userPhone != null && !userDao.existUser(userPhone)) {
throw new UserException(ResultEnum.NOT_EXIST_USER);
}
if (projectName != null && !projectDao.existProject(projectName)) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
User tmpUser = userDao.selectUser(userPhone);
Project tmpProject = projectDao.selectProject(projectName);
List<Respondent> respondentList = respondentDao.listRespondentLimit(tmpUser, state, idNumber, name, phone, province, city, county, tmpProject, currentPage * pageSize, pageSize);
if (respondentList == null) {
return new ArrayList<>();
}
return respondentList.stream().map(respondent -> {
RespondentVO respondentVO = new RespondentVO();
respondentVO.setIdNumber(respondent.getIdNumber());
respondentVO.setPhone(respondent.getPhone());
respondentVO.setName(respondent.getName());
respondentVO.setMsg(respondent.getMsg());
respondentVO.setGender(respondent.getGender());
respondentVO.setAdministrativeArea(respondent.getAdministrativeArea());
respondentVO.setProjectName(respondent.getProject().getName());
respondentVO.setState(respondent.getState());
User user = respondent.getUser();
if (user != null) {
UserInfo userInfo = new UserInfo();
userInfo.setIdNumber(user.getIdNumber());
userInfo.setUsername(user.getUsername());
userInfo.setPhone(user.getPhone());
respondentVO.setUserInfo(userInfo);
}
return respondentVO;
}).collect(Collectors.toList());
}
@Override
public long countRespondent(String userPhone, String state, String idNumber, String name, String phone, String province, String city, String county, String projectName) {
if (userPhone != null && !userDao.existUser(userPhone)) {
throw new UserException(ResultEnum.NOT_EXIST_USER);
}
if (projectName != null && !projectDao.existProject(projectName)) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
User user = userDao.selectUser(userPhone);
Project project = projectDao.selectProject(projectName);
return respondentDao.countRespondent(user, state, idNumber, name, phone, province, city, county, project);
}
@Override
public void modifyRespondent(ModifyRespondentDTO modifyRespondentDTO) {
if (!projectDao.existProject(modifyRespondentDTO.getProjectName())) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
Project project = projectDao.selectProject(modifyRespondentDTO.getProjectName());
if (!respondentDao.existRespondent(modifyRespondentDTO.getIdNumber(), project)) {
throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
}
Respondent respondent = respondentDao.selectRespondent(modifyRespondentDTO.getIdNumber(), project);
respondent.setPhone(modifyRespondentDTO.getPhone());
respondent.setName(modifyRespondentDTO.getName());
respondent.setMsg(modifyRespondentDTO.getMsg());
respondent.setGender(modifyRespondentDTO.getGender());
respondent.setAdministrativeArea(modifyRespondentDTO.getAdministrativeArea());
respondentDao.saveRespondent(respondent);
}
@Override
public void modifyUser(ModifyRespondentUserDTO modifyRespondentUserDTO) {
if (!userDao.existUser(modifyRespondentUserDTO.getUserPhone())) {
throw new UserException(ResultEnum.NOT_EXIST_USER);
}
User user = userDao.selectUser(modifyRespondentUserDTO.getUserPhone());
if (!projectDao.existProject(modifyRespondentUserDTO.getProjectName())) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
Project project = projectDao.selectProject(modifyRespondentUserDTO.getProjectName());
if (!respondentDao.existRespondent(modifyRespondentUserDTO.getIdNumber(), project)) {
throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
}
Respondent respondent = respondentDao.selectRespondent(modifyRespondentUserDTO.getIdNumber(), project);
respondent.setUser(user);
respondentDao.saveRespondent(respondent);
}
@Override
public void deleteRespondent(DeleteRespondentDTO deleteRespondentDTO) {
if (!projectDao.existProject(deleteRespondentDTO.getProjectName())) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
Project project = projectDao.selectProject(deleteRespondentDTO.getProjectName());
if (!respondentDao.existRespondent(deleteRespondentDTO.getIdNumber(), project)) {
throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
}
Respondent respondent = respondentDao.selectRespondent(deleteRespondentDTO.getIdNumber(), project);
respondent.setState(RespondentStateEnum.FILED.getValue());
respondentDao.saveRespondent(respondent);
}
}