修改了记录表结构

This commit is contained in:
刘行 2021-05-06 12:00:10 +08:00
parent 29a94e1a64
commit 3eff075762
11 changed files with 248 additions and 110 deletions

View File

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

View File

@ -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<String> states);
/**
* 查询流调记录列表
*

View File

@ -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<String> 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<Record> listRecord(Project project, Respondent respondent) {

View File

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

View File

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

View File

@ -21,6 +21,8 @@ public class SubmitRecordDTO {
private String msg;
private String metaDataName;
private String projectName;
}

View File

@ -34,12 +34,6 @@ public class Project {
*/
private String detail;
/**
* 元数据
*/
@DBRef
private MetaData metaData;
/**
* 调查对象数量
*/

View File

@ -59,5 +59,8 @@ public class Record {
@DBRef
private Project project;
@DBRef
private MetaData metaData;
}

View File

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

View File

@ -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<Record> recordList = recordDao.listRecord(project, respondent);
if (recordList == null) {
List<String> 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<Operation> oldOpList = record.getOperationList();
List<Operation> 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<Operation> oldOperationList = record.getOperationList();
List<Operation> 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<Operation> oldOpList = record.getOperationList();
List<Operation> 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<String> 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<Operation> oldOperationList = new ArrayList<>();
List<Operation> 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<Operation> 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<Record> 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<Operation> operationList = record.getOperationList();
operationList.add(operation);
record.setOperationList(operationList);
recordDao.saveRecord(record);
});
List<String> 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<Operation> 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<String> 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<String, Object> 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<String> 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);
}

View File

@ -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<String, Object> values = record.getValues();
String templatePath = metaData.getWordTemplate();
for (Map.Entry<String, Object> entry : metaData.getForm().entrySet()) {
}
}
public static void handleText(){
}
public static void handleDate(){
}
public static void handleList(){
}
}