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 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 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); } }