diff --git a/src/main/java/com/example/survey/controller/RecordController.java b/src/main/java/com/example/survey/controller/RecordController.java index 14190bf..6c2a263 100644 --- a/src/main/java/com/example/survey/controller/RecordController.java +++ b/src/main/java/com/example/survey/controller/RecordController.java @@ -1,9 +1,6 @@ package com.example.survey.controller; -import com.example.survey.dto.record.DeleteRecordDTO; -import com.example.survey.dto.record.ModifyRecordDTO; -import com.example.survey.dto.record.ReviewRecordDTO; -import com.example.survey.dto.record.SubmitRecordDTO; +import com.example.survey.dto.record.*; import com.example.survey.enumeration.ResultEnum; import com.example.survey.service.RecordService; import com.example.survey.vo.ResultVO; @@ -104,6 +101,17 @@ public class RecordController { recordService.record2word(idNumber,projectName,response); } + @PutMapping("/project") + public ResultVO modifyProject(@RequestBody ModifyProjectDTO modifyProjectDTO){ + recordService.modifyProject(modifyProjectDTO); + return new ResultVO(ResultEnum.SUCCESS); + } + + @PutMapping("/metaData") + public ResultVO modifyMetaData(@RequestBody ModifyMetaDataDTO modifyMetaDataDTO){ + recordService.modifyMetaData(modifyMetaDataDTO); + return new ResultVO(ResultEnum.SUCCESS); + } diff --git a/src/main/java/com/example/survey/dao/RecordDao.java b/src/main/java/com/example/survey/dao/RecordDao.java index 87269cf..cf67bba 100644 --- a/src/main/java/com/example/survey/dao/RecordDao.java +++ b/src/main/java/com/example/survey/dao/RecordDao.java @@ -76,6 +76,16 @@ public interface RecordDao { */ Record selectRecord(Respondent respondent, Project project, String version); + /** + * 根据筛选条件查询流调记录 + * + * @param respondent 调查对象 + * @param project 项目 + * @param states 记录状态 + * @return 流调记录 + */ + Record selectRecord(Respondent respondent, Project project, List states); + /** * 查询流调记录列表 * diff --git a/src/main/java/com/example/survey/dao/impl/RecordDaoImpl.java b/src/main/java/com/example/survey/dao/impl/RecordDaoImpl.java index f0ad880..9e7f703 100644 --- a/src/main/java/com/example/survey/dao/impl/RecordDaoImpl.java +++ b/src/main/java/com/example/survey/dao/impl/RecordDaoImpl.java @@ -112,7 +112,6 @@ public class RecordDaoImpl implements RecordDao { @Override public Record selectRecord(Respondent respondent, Project project, String version) { - Criteria criteria = Criteria .where("respondent.$id").is(respondent.getId()) .and("project.$id").is(project.getId()); @@ -123,6 +122,16 @@ public class RecordDaoImpl implements RecordDao { return mongoTemplate.findOne(query, Record.class); } + @Override + public Record selectRecord(Respondent respondent, Project project, List states) { + Criteria criteria = new Criteria() + .and("respondent.$id").is(respondent.getId()) + .and("project.$id").is(project.getId()) + .and("state").in(states); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, Record.class); + } + @Override public List listRecord(Project project, Respondent respondent) { diff --git a/src/main/java/com/example/survey/dto/record/ModifyMetaDataDTO.java b/src/main/java/com/example/survey/dto/record/ModifyMetaDataDTO.java new file mode 100644 index 0000000..9fafa4a --- /dev/null +++ b/src/main/java/com/example/survey/dto/record/ModifyMetaDataDTO.java @@ -0,0 +1,16 @@ +package com.example.survey.dto.record; + +import com.example.survey.entity.inner.AdministrativeArea; +import lombok.Data; + +/** + * @author Pope + */ +@Data +public class ModifyMetaDataDTO { + private String idNumber; + + private String projectName; + + private String metaDataName; +} diff --git a/src/main/java/com/example/survey/dto/record/ModifyProjectDTO.java b/src/main/java/com/example/survey/dto/record/ModifyProjectDTO.java new file mode 100644 index 0000000..fe309ee --- /dev/null +++ b/src/main/java/com/example/survey/dto/record/ModifyProjectDTO.java @@ -0,0 +1,19 @@ +package com.example.survey.dto.record; + +import com.example.survey.entity.inner.AdministrativeArea; +import lombok.Data; + +/** + * @author Pope + */ +@Data +public class ModifyProjectDTO { + private String idNumber; + private String phone; + private String name; + private String msg; + private String gender; + private AdministrativeArea administrativeArea; + private String projectName; + private String newProjectName; +} diff --git a/src/main/java/com/example/survey/dto/record/SubmitRecordDTO.java b/src/main/java/com/example/survey/dto/record/SubmitRecordDTO.java index ca2ef3d..cfa60a2 100644 --- a/src/main/java/com/example/survey/dto/record/SubmitRecordDTO.java +++ b/src/main/java/com/example/survey/dto/record/SubmitRecordDTO.java @@ -21,6 +21,8 @@ public class SubmitRecordDTO { private String msg; + private String metaDataName; + private String projectName; } diff --git a/src/main/java/com/example/survey/entity/Project.java b/src/main/java/com/example/survey/entity/Project.java index d185246..ac3db1b 100644 --- a/src/main/java/com/example/survey/entity/Project.java +++ b/src/main/java/com/example/survey/entity/Project.java @@ -34,12 +34,6 @@ public class Project { */ private String detail; - /** - * 元数据 - */ - @DBRef - private MetaData metaData; - /** * 调查对象数量 */ diff --git a/src/main/java/com/example/survey/entity/Record.java b/src/main/java/com/example/survey/entity/Record.java index 0613ec7..52cb9ff 100644 --- a/src/main/java/com/example/survey/entity/Record.java +++ b/src/main/java/com/example/survey/entity/Record.java @@ -59,5 +59,8 @@ public class Record { @DBRef private Project project; + @DBRef + private MetaData metaData; + } diff --git a/src/main/java/com/example/survey/service/RecordService.java b/src/main/java/com/example/survey/service/RecordService.java index 3b3b1ef..a1f8b2f 100644 --- a/src/main/java/com/example/survey/service/RecordService.java +++ b/src/main/java/com/example/survey/service/RecordService.java @@ -1,9 +1,6 @@ package com.example.survey.service; -import com.example.survey.dto.record.DeleteRecordDTO; -import com.example.survey.dto.record.ModifyRecordDTO; -import com.example.survey.dto.record.ReviewRecordDTO; -import com.example.survey.dto.record.SubmitRecordDTO; +import com.example.survey.dto.record.*; import com.example.survey.vo.RecordVO; import org.springframework.web.multipart.MultipartFile; @@ -108,4 +105,18 @@ public interface RecordService { * @param response 响应 */ void record2word(String idNumber, String projectName, HttpServletResponse response); + + /** + * 修改流调记录对应项目 + * + * @param modifyProjectDTO 修改信息 + */ + void modifyProject(ModifyProjectDTO modifyProjectDTO); + + /** + * 修改流调记录所绑定元数据 + * + * @param modifyMetaDataDTO 修改信息 + */ + void modifyMetaData(ModifyMetaDataDTO modifyMetaDataDTO); } diff --git a/src/main/java/com/example/survey/service/impl/RecordServiceImpl.java b/src/main/java/com/example/survey/service/impl/RecordServiceImpl.java index 21c6770..162ea25 100644 --- a/src/main/java/com/example/survey/service/impl/RecordServiceImpl.java +++ b/src/main/java/com/example/survey/service/impl/RecordServiceImpl.java @@ -1,17 +1,8 @@ package com.example.survey.service.impl; -import com.example.survey.dao.ProjectDao; -import com.example.survey.dao.RecordDao; -import com.example.survey.dao.RespondentDao; -import com.example.survey.dao.UserDao; -import com.example.survey.dto.record.DeleteRecordDTO; -import com.example.survey.dto.record.ModifyRecordDTO; -import com.example.survey.dto.record.ReviewRecordDTO; -import com.example.survey.dto.record.SubmitRecordDTO; -import com.example.survey.entity.Project; -import com.example.survey.entity.Record; -import com.example.survey.entity.Respondent; -import com.example.survey.entity.User; +import com.example.survey.dao.*; +import com.example.survey.dto.record.*; +import com.example.survey.entity.*; import com.example.survey.entity.inner.Operation; import com.example.survey.enumeration.RecordStateEnum; import com.example.survey.enumeration.RespondentStateEnum; @@ -55,6 +46,9 @@ public class RecordServiceImpl implements RecordService { @Autowired private ProjectDao projectDao; + @Autowired + private MetaDataDao metaDataDao; + @Value("${file.path}") private String path; @@ -80,22 +74,20 @@ public class RecordServiceImpl implements RecordService { throw new UserException(ResultEnum.NOT_EXIST_USER); } User user = userDao.selectUser(reviewRecordDTO.getReviewerPhone()); - if (!projectDao.existProject(reviewRecordDTO.getProjectName())) { throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } Project project = projectDao.selectProject(reviewRecordDTO.getProjectName()); - if (!respondentDao.existRespondent(reviewRecordDTO.getIdNumber(), project, RespondentStateEnum.INVESTIGATED.getValue())) { throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT); } Respondent respondent = respondentDao.selectRespondent(reviewRecordDTO.getIdNumber(), project); - if (!recordDao.existRecord(respondent, project, RecordStateEnum.UNDER_REVIEW.getValue())) { throw new RecordException(ResultEnum.NOT_EXIST_RECORD); } Record record = recordDao.getRecord(respondent, project, RecordStateEnum.UNDER_REVIEW.getValue()); + record.setState(reviewRecordDTO.getPass() ? RecordStateEnum.REVIEWED.getValue() : RecordStateEnum.NOT_PASS.getValue()); record.setVersion(UUID.randomUUID().toString()); Operation reviewOp = Operation.reviewOp(user, reviewRecordDTO.getMsg(), record.getVersion(), reviewRecordDTO.getPass()); @@ -112,41 +104,44 @@ public class RecordServiceImpl implements RecordService { throw new UserException(ResultEnum.NOT_EXIST_USER); } User user = userDao.selectUser(modifyRecordDTO.getUserPhone()); - if (!projectDao.existProject(modifyRecordDTO.getProjectName())) { throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } Project project = projectDao.selectProject(modifyRecordDTO.getProjectName()); - if (!respondentDao.existRespondent(modifyRecordDTO.getIdNumber(), project, RespondentStateEnum.INVESTIGATED.getValue())) { throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT); } Respondent respondent = respondentDao.selectRespondent(modifyRecordDTO.getIdNumber(), project); - List recordList = recordDao.listRecord(project, respondent); - if (recordList == null) { + + List stateList = new ArrayList<>(); + stateList.add(RecordStateEnum.UNDER_REVIEW.getValue()); + stateList.add(RecordStateEnum.REVIEWED.getValue()); + Record record = recordDao.selectRecord(respondent, project, stateList); + if (record == null) { throw new RecordException(ResultEnum.NOT_EXIST_RECORD); } - recordList.forEach(record -> { - //将原来的设为已归档 添加覆盖操作 - record.setState(RecordStateEnum.FILED.getValue()); - Operation coverOp = Operation.coverOp(user, record.getVersion()); - List oldOpList = record.getOperationList(); - List newOpList = record.getOperationList(); - oldOpList.add(coverOp); - record.setOperationList(oldOpList); - record.setVersion(UUID.randomUUID().toString()); - recordDao.saveRecord(record); - //生成新的流调记录 - record.setId(null); - record.setValues(modifyRecordDTO.getValues()); - record.setState(RecordStateEnum.UNDER_REVIEW.getValue()); - Operation modifyOp = Operation.modifyOp(user, modifyRecordDTO.getMsg(), record.getVersion()); - newOpList.add(modifyOp); - record.setOperationList(newOpList); - record.setVersion(UUID.randomUUID().toString()); - recordDao.saveRecord(record); - }); + String newVersion = UUID.randomUUID().toString(); + List oldOperationList = record.getOperationList(); + List newOperationList = record.getOperationList(); + + Operation coverOp = Operation.coverOp(user, newVersion); + oldOperationList.add(coverOp); + + Operation modifyOp = Operation.modifyOp(user, modifyRecordDTO.getMsg(), newVersion); + newOperationList.add(modifyOp); + + record.setOperationList(oldOperationList); + record.setState(RecordStateEnum.FILED.getValue()); + recordDao.saveRecord(record); + + record.setId(null); + record.setValues(modifyRecordDTO.getValues()); + record.setOperationList(newOperationList); + record.setState(RecordStateEnum.UNDER_REVIEW.getValue()); + + recordDao.saveRecord(record); + } @Override @@ -159,6 +154,10 @@ public class RecordServiceImpl implements RecordService { throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } Project project = projectDao.selectProject(submitRecordDTO.getProjectName()); + if (!metaDataDao.existMetaData(submitRecordDTO.getMetaDataName())) { + throw new MetaDataException(ResultEnum.NOT_EXIST_METADATA); + } + MetaData metaData = metaDataDao.selectMetaData(submitRecordDTO.getMetaDataName()); if (!respondentDao.existRespondent(submitRecordDTO.getIdNumber(), project)) { throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT); } @@ -167,42 +166,36 @@ public class RecordServiceImpl implements RecordService { respondent.setState(RespondentStateEnum.INVESTIGATED.getValue()); respondentDao.saveRespondent(respondent); - Record record = recordDao.getRecord(respondent, project, RecordStateEnum.UNDER_REVIEW.getValue()); - if (record == null) { - record = recordDao.getRecord(respondent, project, RecordStateEnum.REVIEWED.getValue()); - } - if (record != null) { - //存在旧纪录,覆盖 - List oldOpList = record.getOperationList(); - List newOpList = record.getOperationList(); - record.setState(RecordStateEnum.FILED.getValue()); - Operation coverOp = Operation.coverOp(user, record.getVersion()); - oldOpList.add(coverOp); - record.setOperationList(oldOpList); - record.setVersion(UUID.randomUUID().toString()); - recordDao.saveRecord(record); + List stateList = new ArrayList<>(); + stateList.add(RecordStateEnum.UNDER_REVIEW.getValue()); + stateList.add(RecordStateEnum.REVIEWED.getValue()); + Record record = recordDao.selectRecord(respondent, project, stateList); - //插入新记录 - record.setId(null); - record.setValues(submitRecordDTO.getValues()); - record.setState(RecordStateEnum.UNDER_REVIEW.getValue()); - Operation submitOp = Operation.submitOp(user, submitRecordDTO.getMsg(), record.getVersion()); - newOpList.add(submitOp); - record.setOperationList(newOpList); - record.setVersion(UUID.randomUUID().toString()); + String newVersion = UUID.randomUUID().toString(); + List oldOperationList = new ArrayList<>(); + List newOperationList = new ArrayList<>(); + + if (record != null) { + oldOperationList = record.getOperationList(); + newOperationList = record.getOperationList(); + Operation coverOp = Operation.coverOp(user, newVersion); + oldOperationList.add(coverOp); + record.setOperationList(oldOperationList); + record.setState(RecordStateEnum.FILED.getValue()); + recordDao.saveRecord(record); } else { record = new Record(); - record.setRespondent(respondent); - record.setUser(user); - record.setValues(submitRecordDTO.getValues()); - record.setState(RecordStateEnum.UNDER_REVIEW.getValue()); - record.setVersion(UUID.randomUUID().toString()); - List opList = new ArrayList<>(); - Operation submitOp = Operation.submitOp(user, submitRecordDTO.getMsg(), record.getVersion()); - opList.add(submitOp); - record.setOperationList(opList); - record.setProject(project); } + + record.setProject(project); + record.setUser(user); + record.setValues(submitRecordDTO.getValues()); + Operation submitOp = Operation.submitOp(user, submitRecordDTO.getMsg(), newVersion); + newOperationList.add(submitOp); + record.setOperationList(newOperationList); + record.setState(RecordStateEnum.UNDER_REVIEW.getValue()); + record.setMetaData(metaData); + record.setVersion(newVersion); recordDao.saveRecord(record); } @@ -337,37 +330,86 @@ public class RecordServiceImpl implements RecordService { } Respondent respondent = respondentDao.selectRespondent(deleteRecordDTO.getIdNumber(), project); - List recordList = recordDao.listRecord(project, respondent); - recordList.forEach(record -> { - String version = UUID.randomUUID().toString(); - record.setVersion(version); - Operation operation = Operation.deleteOp(user, deleteRecordDTO.getMsg(), version); - List operationList = record.getOperationList(); - operationList.add(operation); - record.setOperationList(operationList); - recordDao.saveRecord(record); - }); + List stateList = new ArrayList<>(); + stateList.add(RecordStateEnum.UNDER_REVIEW.getValue()); + stateList.add(RecordStateEnum.REVIEWED.getValue()); + stateList.add(RecordStateEnum.NOT_PASS.getValue()); + Record record = recordDao.selectRecord(respondent, project, stateList); + if (record == null) { + throw new RecordException(ResultEnum.NOT_EXIST_RECORD); + } + List operationList = record.getOperationList(); + Operation deleteOp = Operation.deleteOp(user, deleteRecordDTO.getMsg(), record.getVersion()); + operationList.add(deleteOp); + record.setOperationList(operationList); + record.setState(RecordStateEnum.FILED.getValue()); + recordDao.saveRecord(record); } @Override public void record2word(String idNumber, String projectName, HttpServletResponse response) { - if (!projectDao.existProject(projectName)) { + //TODO 导出为word + } + + @Override + public void modifyProject(ModifyProjectDTO modifyProjectDTO) { + if (!projectDao.existProject(modifyProjectDTO.getProjectName())) { throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } - Project project = projectDao.selectProject(projectName); - if (project.getMetaData() == null || project.getMetaData().getWordTemplate() == null) { - throw new MetaDataException(ResultEnum.NOT_EXIST_METADATA); + Project project = projectDao.selectProject(modifyProjectDTO.getProjectName()); + if(!projectDao.existProject(modifyProjectDTO.getNewProjectName())){ + throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); } - if (!respondentDao.existRespondent(idNumber, project)) { + Project newProject = projectDao.selectProject(modifyProjectDTO.getNewProjectName()); + if (!respondentDao.existRespondent(modifyProjectDTO.getIdNumber(), project)) { throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT); } - Respondent respondent = respondentDao.selectRespondent(idNumber, project); - Record record = recordDao.getRecord(respondent, project, RecordStateEnum.REVIEWED.getValue()); - if (record == null) { - throw new RecordException(ResultEnum.NOT_EXIST_RECORD); + Respondent respondent = respondentDao.selectRespondent(modifyProjectDTO.getIdNumber(), project); + + List states = new ArrayList<>(); + states.add(RecordStateEnum.REVIEWED.getValue()); + states.add(RecordStateEnum.UNDER_REVIEW.getValue()); + Record record = recordDao.selectRecord(respondent, project, states); + + //如果新项目已经存在调查对象则覆盖 + respondent.setId(null); + respondent.setPhone(modifyProjectDTO.getPhone()); + respondent.setName(modifyProjectDTO.getName()); + respondent.setMsg(modifyProjectDTO.getMsg()); + respondent.setGender(modifyProjectDTO.getGender()); + respondent.setAdministrativeArea(modifyProjectDTO.getAdministrativeArea()); + respondent.setProject(newProject); + if(respondentDao.existRespondent(modifyProjectDTO.getIdNumber(),newProject)){ + respondent.setId(respondentDao.selectRespondent(modifyProjectDTO.getIdNumber(), project).getId()); } - Map values = record.getValues(); - WordUtil.export2word(response, values, "E:\\wordTemplate.docx"); + respondentDao.saveRespondent(respondent); + + record.setRespondent(respondent); + record.setProject(project); + recordDao.saveRecord(record); + } + + @Override + public void modifyMetaData(ModifyMetaDataDTO modifyMetaDataDTO) { + if (!projectDao.existProject(modifyMetaDataDTO.getProjectName())) { + throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT); + } + Project project = projectDao.selectProject(modifyMetaDataDTO.getProjectName()); + if (!metaDataDao.existMetaData(modifyMetaDataDTO.getMetaDataName())) { + throw new MetaDataException(ResultEnum.NOT_EXIST_METADATA); + } + MetaData metaData = metaDataDao.selectMetaData(modifyMetaDataDTO.getMetaDataName()); + if (!respondentDao.existRespondent(modifyMetaDataDTO.getIdNumber(), project)) { + throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT); + } + Respondent respondent = respondentDao.selectRespondent(modifyMetaDataDTO.getIdNumber(), project); + + List states = new ArrayList<>(); + states.add(RecordStateEnum.REVIEWED.getValue()); + states.add(RecordStateEnum.UNDER_REVIEW.getValue()); + Record record = recordDao.selectRecord(respondent, project, states); + record.setMetaData(metaData); + recordDao.saveRecord(record); } diff --git a/src/main/java/com/example/survey/util/WordUtil.java b/src/main/java/com/example/survey/util/WordUtil.java index 6e14f8f..85fddbc 100644 --- a/src/main/java/com/example/survey/util/WordUtil.java +++ b/src/main/java/com/example/survey/util/WordUtil.java @@ -4,13 +4,13 @@ import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.config.ConfigureBuilder; import com.deepoove.poi.policy.HackLoopTableRenderPolicy; +import com.example.survey.entity.MetaData; +import com.example.survey.entity.Record; import javax.servlet.http.HttpServletResponse; import java.io.BufferedOutputStream; import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; /** * @author Pope @@ -54,4 +54,28 @@ public class WordUtil { } } } + + public static void export2Word(HttpServletResponse response, MetaData metaData, Record record){ + Map values = record.getValues(); + String templatePath = metaData.getWordTemplate(); + for (Map.Entry entry : metaData.getForm().entrySet()) { + + } + + + } + + public static void handleText(){ + + } + + public static void handleDate(){ + + } + + public static void handleList(){ + + } + + }