diff --git a/.gitignore b/.gitignore
index 18c6fa9..e479a49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,7 @@ gen
# Log file
*.log
+/log
# BlueJ files
*.ctxt
diff --git a/log/survey-INFO-2021-03-04_1.log.gz b/log/survey-INFO-2021-03-04_1.log.gz
deleted file mode 100644
index 039aa5c..0000000
Binary files a/log/survey-INFO-2021-03-04_1.log.gz and /dev/null differ
diff --git a/log/survey-INFO-2021-03-12_1.log.gz b/log/survey-INFO-2021-03-12_1.log.gz
deleted file mode 100644
index e53339b..0000000
Binary files a/log/survey-INFO-2021-03-12_1.log.gz and /dev/null differ
diff --git a/log/survey-INFO-2021-03-18_1.log.gz b/log/survey-INFO-2021-03-18_1.log.gz
deleted file mode 100644
index 8ee4fde..0000000
Binary files a/log/survey-INFO-2021-03-18_1.log.gz and /dev/null differ
diff --git a/pom.xml b/pom.xml
index 2161c95..1c911f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,19 +60,18 @@
org.apache.poi
poi
- 3.17
+ 4.1.2
-
+
org.apache.poi
poi-ooxml
- 3.17
+ 4.1.2
-
- org.apache.poi
- ooxml-schemas
- 1.1
+ com.deepoove
+ poi-tl
+ 1.9.1
org.springframework.boot
diff --git a/src/main/java/com/example/survey/config/AuthFilterConfig.java b/src/main/java/com/example/survey/config/AuthFilterConfig.java
index 09c8df8..4898573 100644
--- a/src/main/java/com/example/survey/config/AuthFilterConfig.java
+++ b/src/main/java/com/example/survey/config/AuthFilterConfig.java
@@ -5,6 +5,7 @@ import com.example.survey.enumeration.ResultEnum;
import com.example.survey.util.TokenUtil;
import com.example.survey.vo.ResultVO;
import lombok.extern.log4j.Log4j2;
+import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
@@ -19,16 +20,16 @@ import java.util.Set;
* 权限过滤器
*/
@Log4j2
-//@Configuration
+@Configuration
public class AuthFilterConfig implements Filter {
+
+
/**
* 不需要token就能访问的路由
*/
private static final Set URIS = new HashSet() {{
add("/user/login");
- add("/user/signup");
-
}};
@Override
diff --git a/src/main/java/com/example/survey/controller/MetaDataController.java b/src/main/java/com/example/survey/controller/MetaDataController.java
index 97f26a0..1bf3973 100644
--- a/src/main/java/com/example/survey/controller/MetaDataController.java
+++ b/src/main/java/com/example/survey/controller/MetaDataController.java
@@ -6,9 +6,9 @@ import com.example.survey.dto.metaData.ModifyMetaDataDTO;
import com.example.survey.enumeration.ResultEnum;
import com.example.survey.service.MetaDataService;
import com.example.survey.vo.ResultVO;
-import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
import java.util.Map;
@@ -25,7 +25,7 @@ public class MetaDataController {
@PostMapping("/metaData")
public ResultVO createMetaData(@RequestBody CreateMetaDataDTO createMetaDataDTO){
- metaDataService.addMetaData(createMetaDataDTO);
+ metaDataService.createMetaData(createMetaDataDTO);
return new ResultVO(ResultEnum.SUCCESS);
}
@@ -70,4 +70,11 @@ public class MetaDataController {
return new ResultVO(ResultEnum.SUCCESS);
}
+ @PostMapping("/wordTemplate")
+ public ResultVO bindWordTemplate(@RequestParam("template")MultipartFile template,
+ @RequestParam("name")String name){
+ metaDataService.bindWordTemplate(template,name);
+ return new ResultVO(ResultEnum.SUCCESS);
+ }
+
}
diff --git a/src/main/java/com/example/survey/controller/ProjectController.java b/src/main/java/com/example/survey/controller/ProjectController.java
index 1157285..f4fa843 100644
--- a/src/main/java/com/example/survey/controller/ProjectController.java
+++ b/src/main/java/com/example/survey/controller/ProjectController.java
@@ -34,13 +34,14 @@ public class ProjectController {
@GetMapping("/projectList")
public ResultVO getProject(@RequestParam(value = "name",required = false) String name,
+ @RequestParam(value = "state", required = false)String state,
@RequestParam(value = "currentPage") int currentPage,
@RequestParam(value = "pageSize", defaultValue = "30") int pageSize) {
Map resultMap = new HashMap<>(16,0.75F);
- resultMap.put("totalCount", projectService.countProject(name));
+ resultMap.put("totalCount", projectService.countProject(name,state));
resultMap.put("currentPage", currentPage);
resultMap.put("pageSize", pageSize);
- resultMap.put("data", projectService.listProjectLimit(name, currentPage, pageSize));
+ resultMap.put("data", projectService.listProjectLimit(name,state, currentPage, pageSize));
ResultVO resultVO = new ResultVO(ResultEnum.SUCCESS);
resultVO.setData(resultMap);
return resultVO;
diff --git a/src/main/java/com/example/survey/controller/RecordController.java b/src/main/java/com/example/survey/controller/RecordController.java
index 59a1d7d..14190bf 100644
--- a/src/main/java/com/example/survey/controller/RecordController.java
+++ b/src/main/java/com/example/survey/controller/RecordController.java
@@ -1,5 +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;
@@ -9,7 +10,9 @@ import com.example.survey.vo.ResultVO;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
@@ -46,17 +49,17 @@ public class RecordController {
}
@GetMapping("/recordValues")
- public ResultVO getRecordValue(@RequestParam("projectName")String projectName,
- @RequestParam("idNumber")String idNumber,
- @RequestParam(value = "version",required = false) String version){
+ public ResultVO getRecordValue(@RequestParam("projectName") String projectName,
+ @RequestParam("idNumber") String idNumber,
+ @RequestParam(value = "version", required = false) String version) {
ResultVO resultVO = new ResultVO(ResultEnum.SUCCESS);
- resultVO.setData(recordService.getRecordValues(projectName,idNumber,version));
+ resultVO.setData(recordService.getRecordValues(projectName, idNumber, version));
return resultVO;
}
@GetMapping("/underReviewRecordCount")
public ResultVO countUnderReviewRecord(@RequestParam(value = "userPhone") String userPhone,
- @RequestParam(value = "projectName")String projectName) {
+ @RequestParam(value = "projectName") String projectName) {
ResultVO resultVo = new ResultVO(ResultEnum.SUCCESS);
resultVo.setData(recordService.countRecord(userPhone, projectName));
return resultVo;
@@ -81,5 +84,27 @@ public class RecordController {
return new ResultVO(ResultEnum.SUCCESS);
}
+ @DeleteMapping("/record")
+ public ResultVO deleteRecord(@RequestBody DeleteRecordDTO deleteRecordDTO){
+ recordService.deleteRecord(deleteRecordDTO);
+ return new ResultVO(ResultEnum.SUCCESS);
+ }
+
+ @PostMapping("/file")
+ public ResultVO uploadFile(@RequestParam("file") MultipartFile file) {
+ ResultVO resultVO = new ResultVO(ResultEnum.SUCCESS);
+ resultVO.setData(recordService.uploadFile(file));
+ return resultVO;
+ }
+
+ @GetMapping("/record2word")
+ public void record2word(@RequestParam("idNumber")String idNumber,
+ @RequestParam("projectName")String projectName,
+ HttpServletResponse response){
+ recordService.record2word(idNumber,projectName,response);
+ }
+
+
+
}
diff --git a/src/main/java/com/example/survey/dao/ProjectDao.java b/src/main/java/com/example/survey/dao/ProjectDao.java
index b6f0ad4..6665299 100644
--- a/src/main/java/com/example/survey/dao/ProjectDao.java
+++ b/src/main/java/com/example/survey/dao/ProjectDao.java
@@ -37,17 +37,19 @@ public interface ProjectDao {
* 根绝筛选条件分页查询项目
*
* @param name 项目名
+ * @param state 状态
* @param offset 偏移量
* @param pageSize 页大小
* @return 项目列表
*/
- List listProjectLimit(String name, int offset, int pageSize);
+ List listProjectLimit(String name,String state, int offset, int pageSize);
/**
* 根据项目名查询数量
*
* @param name 项目名
+ * @param state 状态
* @return 数量
*/
- long countProject(String name);
+ long countProject(String name,String state);
}
diff --git a/src/main/java/com/example/survey/dao/RecordDao.java b/src/main/java/com/example/survey/dao/RecordDao.java
index 43f2e88..87269cf 100644
--- a/src/main/java/com/example/survey/dao/RecordDao.java
+++ b/src/main/java/com/example/survey/dao/RecordDao.java
@@ -75,4 +75,13 @@ public interface RecordDao {
* @return 流调记录
*/
Record selectRecord(Respondent respondent, Project project, String version);
+
+ /**
+ * 查询流调记录列表
+ *
+ * @param project 项目
+ * @param respondent 调查对象
+ * @return 流调记录列表
+ */
+ List listRecord(Project project, Respondent respondent);
}
diff --git a/src/main/java/com/example/survey/dao/RespondentDao.java b/src/main/java/com/example/survey/dao/RespondentDao.java
index f73e904..4700861 100644
--- a/src/main/java/com/example/survey/dao/RespondentDao.java
+++ b/src/main/java/com/example/survey/dao/RespondentDao.java
@@ -28,7 +28,7 @@ public interface RespondentDao {
* @param province 省份
* @param city 城市
* @param county 区县
- * @param project 项目
+ * @param project 项目
* @param offset 偏移量
* @param pageSize 大小
* @return 待调查对象列表
@@ -39,18 +39,20 @@ public interface RespondentDao {
* 判断是否存在对应id的调查对象
*
* @param idNumber 身份证号
+ * @param project 项目
* @return 是否存在该调查对象
*/
- boolean existRespondent(String idNumber);
+ boolean existRespondent(String idNumber, Project project);
/**
* 判断是否存在符合条件的调查对象
*
* @param idNumber 身份证号
+ * @param project 项目
* @param state 调查对象状态
* @return 是否存在该调查对象
*/
- boolean existRespondent(String idNumber, String state);
+ boolean existRespondent(String idNumber, Project project, String state);
/**
* 根绝筛选条件获取调查对象数量
@@ -73,10 +75,10 @@ public interface RespondentDao {
* 根据身份证号查询调查对象
*
* @param idNumber 身份证号
- * @param project 项目
+ * @param project 项目
* @return 调查对象
*/
- Respondent selectRespondent(String idNumber,Project project);
+ Respondent selectRespondent(String idNumber, Project project);
/**
* 删除调查对象
diff --git a/src/main/java/com/example/survey/dao/impl/ProjectDaoImpl.java b/src/main/java/com/example/survey/dao/impl/ProjectDaoImpl.java
index b9de9b9..340b103 100644
--- a/src/main/java/com/example/survey/dao/impl/ProjectDaoImpl.java
+++ b/src/main/java/com/example/survey/dao/impl/ProjectDaoImpl.java
@@ -45,22 +45,28 @@ public class ProjectDaoImpl implements ProjectDao {
}
@Override
- public List listProjectLimit(String name, int offset, int pageSize) {
+ public List listProjectLimit(String name,String state, int offset, int pageSize) {
Criteria criteria = new Criteria();
if (name != null) {
criteria.and("name").regex(name);
}
+ if(state!=null){
+ criteria.and("state").is(state);
+ }
Query query = new Query(criteria).skip(offset).limit(pageSize);
return mongoTemplate.find(query, Project.class);
}
@Override
- public long countProject(String name) {
+ public long countProject(String name,String state) {
Criteria criteria = new Criteria();
if (name != null) {
criteria.and("name").regex(name);
}
+ if(state!=null){
+ criteria.and("state").is(state);
+ }
Query query = new Query(criteria);
return mongoTemplate.count(query, Project.class);
}
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 46c18fb..f0ad880 100644
--- a/src/main/java/com/example/survey/dao/impl/RecordDaoImpl.java
+++ b/src/main/java/com/example/survey/dao/impl/RecordDaoImpl.java
@@ -30,7 +30,8 @@ public class RecordDaoImpl implements RecordDao {
public boolean existRecord(Respondent respondent, Project project, String state) {
Criteria criteria = new Criteria()
.and("respondent.$id").is(respondent.getId())
- .elemMatch(Criteria.where("project.$id").is(project.getId()).and("state").is(state));
+ .and("project.$id").is(project.getId())
+ .and("state").is(state);
Query query = new Query(criteria);
return mongoTemplate.exists(query, Record.class);
}
@@ -121,4 +122,12 @@ public class RecordDaoImpl implements RecordDao {
Query query = new Query(criteria);
return mongoTemplate.findOne(query, Record.class);
}
+
+ @Override
+ public List listRecord(Project project, Respondent respondent) {
+
+ Query query = new Query(Criteria.where("project.$id").is(project.getId())
+ .and("respondent.$id").is(respondent.getId()));
+ return mongoTemplate.find(query,Record.class);
+ }
}
diff --git a/src/main/java/com/example/survey/dao/impl/RespondentDaoImpl.java b/src/main/java/com/example/survey/dao/impl/RespondentDaoImpl.java
index ef6e2f9..ac31b68 100644
--- a/src/main/java/com/example/survey/dao/impl/RespondentDaoImpl.java
+++ b/src/main/java/com/example/survey/dao/impl/RespondentDaoImpl.java
@@ -57,18 +57,15 @@ public class RespondentDaoImpl implements RespondentDao {
if (county != null) {
criteria.and("administrativeArea.county").is(county);
}
-
- Criteria elementMatch = new Criteria();
if (project != null) {
- elementMatch.and("project.$id").is(project.getId());
+ criteria.and("project.$id").is(project.getId());
}
if (user != null) {
- elementMatch.and("user.$id").is(user.getId());
+ criteria.and("user.$id").is(user.getId());
}
if (state != null) {
- elementMatch.and("state").is(state);
+ criteria.and("state").is(state);
}
- criteria.and("projectPartSet").elemMatch(elementMatch);
Query query = new Query(criteria).skip(offset).limit(pageSize);
return mongoTemplate.find(query, Respondent.class);
@@ -78,6 +75,16 @@ public class RespondentDaoImpl implements RespondentDao {
public long countRespondent(User user, String state, String idNumber, String name, String phone, String province, String city, String county, Project project) {
Criteria criteria = new Criteria();
+ if (idNumber != null) {
+ criteria.and("idNumber").is(idNumber);
+ }
+ if (name != null) {
+ criteria.and("name").regex(name);
+ }
+ if (phone != null) {
+ criteria.and("phone").is(phone);
+ }
+
if (province != null) {
criteria.and("administrativeArea.province").is(province);
}
@@ -87,32 +94,36 @@ public class RespondentDaoImpl implements RespondentDao {
if (county != null) {
criteria.and("administrativeArea.county").is(county);
}
-
- Criteria elementMatch = new Criteria();
if (project != null) {
- elementMatch.and("project.$id").is(project.getId());
+ criteria.and("project.$id").is(project.getId());
}
if (user != null) {
- elementMatch.and("user.$id").is(user.getId());
+ criteria.and("user.$id").is(user.getId());
}
if (state != null) {
- elementMatch.and("state").is(state);
+ criteria.and("state").is(state);
}
- criteria.and("projectPartSet").elemMatch(elementMatch);
+
Query query = new Query(criteria);
return mongoTemplate.count(query, Respondent.class);
}
@Override
- public boolean existRespondent(String idNumber) {
- Query query = new Query(Criteria.where("idNumber").is(idNumber));
+ public boolean existRespondent(String idNumber, Project project) {
+ Criteria criteria = Criteria.where("idNumber").is(idNumber);
+ if (project != null) {
+ criteria.and("project.$id").is(project.getId());
+ }
+ Query query = new Query(criteria);
+
return mongoTemplate.exists(query, Respondent.class);
}
@Override
- public boolean existRespondent(String idNumber, String state) {
+ public boolean existRespondent(String idNumber, Project project, String state) {
Query query = new Query(
Criteria.where("idNumber").is(idNumber)
+ .and("project.$id").is(project.getId())
.and("state").is(state));
return mongoTemplate.exists(query, Respondent.class);
}
@@ -132,8 +143,8 @@ public class RespondentDaoImpl implements RespondentDao {
@Override
public long countRespondent(Project project, String state) {
- Criteria elementMatch = Criteria.where("project.$id").is(project.getId()).and("state").is(state);
- Query query = new Query(Criteria.where("projectPartSet").elemMatch(elementMatch));
+ Criteria criteria = Criteria.where("project.$id").is(project.getId()).and("state").is(state);
+ Query query = new Query(criteria);
return mongoTemplate.count(query, Respondent.class);
}
diff --git a/src/main/java/com/example/survey/dto/metaData/CreateMetaDataDTO.java b/src/main/java/com/example/survey/dto/metaData/CreateMetaDataDTO.java
index 85be0a3..1109702 100644
--- a/src/main/java/com/example/survey/dto/metaData/CreateMetaDataDTO.java
+++ b/src/main/java/com/example/survey/dto/metaData/CreateMetaDataDTO.java
@@ -15,4 +15,5 @@ public class CreateMetaDataDTO {
private Map form;
private List fieldToNameList;
private Map config;
+ private String wordTemplate;
}
diff --git a/src/main/java/com/example/survey/dto/record/DeleteRecordDTO.java b/src/main/java/com/example/survey/dto/record/DeleteRecordDTO.java
new file mode 100644
index 0000000..b637f5b
--- /dev/null
+++ b/src/main/java/com/example/survey/dto/record/DeleteRecordDTO.java
@@ -0,0 +1,17 @@
+package com.example.survey.dto.record;
+
+import lombok.Data;
+
+/**
+ * @author Pope
+ */
+@Data
+public class DeleteRecordDTO {
+ private String idNumber;
+
+ private String userPhone;
+
+ private String msg;
+
+ private String projectName;
+}
diff --git a/src/main/java/com/example/survey/entity/Respondent.java b/src/main/java/com/example/survey/entity/Respondent.java
index 49dac78..1ac2d70 100644
--- a/src/main/java/com/example/survey/entity/Respondent.java
+++ b/src/main/java/com/example/survey/entity/Respondent.java
@@ -5,6 +5,8 @@ import com.example.survey.entity.inner.ProjectPart;
import lombok.*;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.index.CompoundIndex;
+import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
@@ -17,6 +19,9 @@ import java.util.Set;
*/
@Data
@Document(collection = "respondent")
+@CompoundIndexes({
+ @CompoundIndex(name = "unique",def = "{idNumber : 1, project : 1}",unique = true)
+})
public class Respondent {
/**
@@ -28,7 +33,6 @@ public class Respondent {
/**
* 身份证号
*/
- @Indexed(unique = true)
private String idNumber;
/**
@@ -59,11 +63,13 @@ public class Respondent {
/**
* 分配的人员
*/
+ @DBRef
private User user;
/**
* 项目
*/
+ @DBRef
private Project project;
/**
diff --git a/src/main/java/com/example/survey/enumeration/AuthEnum.java b/src/main/java/com/example/survey/enumeration/AuthEnum.java
index b236145..3f6903f 100644
--- a/src/main/java/com/example/survey/enumeration/AuthEnum.java
+++ b/src/main/java/com/example/survey/enumeration/AuthEnum.java
@@ -15,141 +15,170 @@ public enum AuthEnum {
* 管理员权限,可以访问所有接口
*/
ADMIN("管理员", new HashSet() {{
- add("/investigator/investigator : POST");
- add("/investigationRecord/underReviewRecord : GET");
- add("/investigationRecord/underReviewRecordCount : GET");
- add("/investigationRecord/investigationRecord : POST");
- add("/investigationRecord/investigationRecord : PUT");
- add("/investigationRecord/underReviewRecord : PUT");
- add("/investigationRecord/record2word : GET");
+ add("/project/projectList : GET");
+ add("/project/respondentCount : GET");
+ add("/project/projectState : PUT");
+ add("/project/project : PUT");
+ add("/project/project : POST");
+
add("/respondent/respondent : POST");
- add("/respondent/respondent : GET");
- add("/user/userRole : PUT");
- add("/user/user : GET");
- add("/user/user : DELETE");
+ add("/respondent/respondent : PUT");
+ add("/respondent/user : PUT");
+ add("/respondent/respondent : DELETE");
+ add("/respondent/respondentList : GET");
+
+ add("/record/record : POST");
+ add("/record/recordList : GET");
+ add("/record/recordValues : GET");
+ add("/record/record : PUT");
+ add("/record/record : DELETE");
+ add("/record/underReviewRecord : PUT");
+ add("/record/file : POST");
+
+ add("/user/userList : GET");
add("/user/user : POST");
- add("/role/role : POST");
- add("/role/role : GET");
- add("/role/role : DELETE");
- add("/role/role : PUT");
- add("/role/authList : GET");
+ add("/user/user : DELETE");
add("/user/userInfo : PUT");
+ add("/user/userRole : PUT");
+ add("/user/pwd : PUT");
+
+ add("/role/roleList : GET");
+ add("/role/role : PUT");
+ add("/role/role : DELETE");
+ add("/role/role : POST");
+ add("/role/authorityList : GET");
+
+ add("/metaData/metaData : GET");
+ add("/metaData/metaData : DELETE");
+ add("/metaData/metaDataList : GET");
+ add("/metaData/nameList : GET");
+ add("/metaData/metaData : PUT");
+ add("/metaData/metaData : POST");
+ add("/metaData/wordTemplate : POST");
+ }}),
+
+ /**
+ * 项目
+ */
+ QUERY_PROJECT("查询项目的权限", new HashSet() {{
+ add("/project/projectList : GET");
+ add("/project/respondentCount : GET");
+ }}),
+ MODIFY_PROJECT("修改项目的权限", new HashSet() {{
+ add("/project/projectState : PUT");
+ add("/project/project : PUT");
+
+ }}),
+ CREATE_PROJECT("创建项目的权限", new HashSet() {{
+ add("/project/project : POST");
+ }}),
+
+ /**
+ * 调查对象
+ */
+ CREATE_RESPONDENT("添加调查对象的权限", new HashSet() {{
+ add("/respondent/respondent : POST");
+ }}),
+ MODIFY_RESPONDENT("修改调查对象的权限", new HashSet() {{
+ add("/respondent/respondent : PUT");
+ add("/respondent/user : PUT");
+ }}),
+ DELETE_RESPONDENT("删除调查对象的权限", new HashSet() {{
+ add("/respondent/respondent : DELETE");
+ }}),
+ QUERY_RESPONDENT("查询调查对象的权限", new HashSet() {{
+ add("/respondent/respondentList : GET");
+ }}),
+
+ /**
+ * 流调记录
+ */
+ CREATE_RECORD("添加流调记录的权限", new HashSet() {{
+ add("/record/record : POST");
+ }}),
+ QUERY_RECORD("查询流调记录的权限", new HashSet() {{
+ add("/record/recordList : GET");
+ }}),
+ VIEW_RECORD_DETAILS("查看流调记录详情的权限", new HashSet() {{
+ add("/record/recordValues : GET");
+ }}),
+ MODIFY_RECORD("修改流调记录的权限", new HashSet() {{
+ add("/record/record : PUT");
+ }}),
+ DELETE_RECORD("删除流调记录的权限", new HashSet() {{
+ add("/record/record : DELETE");
+ }}),
+ EXAMINE_RECORD("审核流调记录的权限", new HashSet() {{
+ add("/record/underReviewRecord : PUT");
+ }}),
+ UPLOAD_RECORD_FILE("上传流调记录相关文件的权限", new HashSet() {{
+ add("/record/file : POST");
+ }}),
+
+ /**
+ * 用户
+ */
+ QUERY_USER("查询用户的权限", new HashSet() {{
+ add("/user/userList : GET");
+ }}),
+ CREATE_USER("添加用户的权限", new HashSet() {{
+ add("/user/user : POST");
+ }}),
+ DELETE_USER("删除用户的权限", new HashSet() {{
+ add("/user/user : DELETE");
+ }}),
+ MODIFY_USER("修改用户的权限", new HashSet() {{
+ add("/user/userInfo : PUT");
+ add("/user/userRole : PUT");
add("/user/pwd : PUT");
}}),
/**
- * 查询调查记录的权限
+ * 角色
*/
- RETRIEVE_RECORD("查询调查记录的权限", new HashSet() {{
- add("/investigationRecord/underReviewRecord : GET");
- add("/investigationRecord/underReviewRecordCount : GET");
+ QUERY_ROLE("查询角色的权限", new HashSet() {{
+ add("/role/roleList : GET");
}}),
-
- /**
- * 提交记录的权限
- */
- CREATE_RECORD("提交调查记录权限", new HashSet() {{
- add("/investigationRecord/investigationRecord : POST");
+ MODIFY_ROLE("修改角色的权限", new HashSet() {{
+ add("/role/role : PUT");
}}),
-
- /**
- * 修改调查记录信息的权限
- */
- UPDATE_RECORD("修改调查记录权限", new HashSet() {{
- add("/investigationRecord/investigationRecord : PUT");
- }}),
-
- /**
- * 审核调查记录权限
- */
- REVIEW_RECORD("审核调查记录权限", new HashSet() {{
- add("/investigationRecord/underReviewRecord : PUT");
- }}),
-
- /**
- * 删除调查记录权限
- */
- DELETE_RECORD("删除调查记录权限", new HashSet() {{
-
- }}),
-
- /**
- * 分析调查记录的权限
- */
- ANALYSE_RECORD("分析调查记录权限", new HashSet() {{
-
- }}),
-
- /**
- * 可以增删改流调人员信息
- */
- CUD_INVESTIGATOR("增删改流调人员信息的权限", new HashSet() {{
-
- }}),
-
- /**
- * 查询流调人员信息
- */
- RETRIEVE_INVESTIGATOR("查询流调人员信息的权限", new HashSet() {{
-
- }}),
-
- /**
- * 增删改调查对象信息的权限
- */
- CUD_RESPONDENT("增删改调查对象信息的权限", new HashSet() {{
- add("/respondent/respondent : POST");
- }}),
-
- /**
- * 查询调查对象信息的权限
- */
- RETRIEVE_RESPONDENT("查询调查对象信息的权限", new HashSet() {{
- add("/respondent/respondent : GET");
- }}),
-
- /**
- * 查看用户的权限
- */
- RETRIEVE_USER("查看用户的权限", new HashSet() {{
- add("/user/user : GET");
- }}),
-
- /**
- * 删除用户的权限
- */
- DELETE_USER("删除用户的权限", new HashSet() {{
- add("/user/user : DELETE");
- }}),
-
- /**
- * 查看角色的权限
- */
- RETRIEVE_ROLE("查看角色的权限", new HashSet() {{
- add("/role/role : GET");
- }}),
-
- /**
- * 删除角色的权限
- */
DELETE_ROLE("删除角色的权限", new HashSet() {{
add("/role/role : DELETE");
}}),
-
- /**
- * 修改角色的权限
- */
- UPDATE_ROLE("修改角色的权限", new HashSet() {{
- add("/role/role : PUT");
+ CREATE_ROLE("增加角色的权限", new HashSet() {{
+ add("/role/role : POST");
+ }}),
+ QUERY_AUTHORITY_LIST("查询权限列表的权限", new HashSet() {{
+ add("/role/authorityList : GET");
}}),
/**
- * 查看权限列表
+ * 元数据
*/
- LIST_AUTHORITY("查看权限列表的权限", new HashSet() {{
- add("/role/authList : GET");
- }});
+ QUERY_METADATA("查询元数据的权限", new HashSet() {{
+ add("/metadata/metadata : GET");
+ add("/metadata/metadataList : GET");
+ add("/metadata/nameList : GET");
+ }}),
+ MODIFY_METADATA("修改元数据的权限", new HashSet() {{
+ add("/metadata/metadata : PUT");
+ }}),
+ DELETE_METADATA("删除元数据的权限", new HashSet() {{
+ }}),
+ CREATE_METADATA("添加元数据的权限", new HashSet() {{
+ add("/metadata/metadata : POST");
+ }}),
+ BIND_TEMPLATE("上传元数据对应模板的权限", new HashSet() {{
+ add("/metaData/wordTemplate : POST");
+ }}),
+
+ /**
+ * 审计
+ */
+ QUERY_AUDIT("查询审计记录", new HashSet() {{
+
+ }});
private String name;
private Set routes;
diff --git a/src/main/java/com/example/survey/enumeration/RecordStateEnum.java b/src/main/java/com/example/survey/enumeration/RecordStateEnum.java
index 77cb815..7018e52 100644
--- a/src/main/java/com/example/survey/enumeration/RecordStateEnum.java
+++ b/src/main/java/com/example/survey/enumeration/RecordStateEnum.java
@@ -18,10 +18,6 @@ public enum RecordStateEnum {
* 未通过状态
*/
NOT_PASS("未通过"),
- /**
- * 已删除状态
- */
- DELETED("已删除"),
/**
* 已归档状态
*/
diff --git a/src/main/java/com/example/survey/service/MetaDataService.java b/src/main/java/com/example/survey/service/MetaDataService.java
index 4bd57f3..0a855dc 100644
--- a/src/main/java/com/example/survey/service/MetaDataService.java
+++ b/src/main/java/com/example/survey/service/MetaDataService.java
@@ -5,6 +5,7 @@ import com.example.survey.dto.metaData.DeleteMetaDataDTO;
import com.example.survey.dto.metaData.ModifyMetaDataDTO;
import com.example.survey.entity.MetaData;
import com.example.survey.vo.MetaDataVO;
+import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -17,7 +18,7 @@ public interface MetaDataService {
*
* @param createMetaDataDTO 元数据信息
*/
- void addMetaData(CreateMetaDataDTO createMetaDataDTO);
+ void createMetaData(CreateMetaDataDTO createMetaDataDTO);
/**
* 根据筛选条件模糊查询元数据
@@ -61,4 +62,12 @@ public interface MetaDataService {
* @param deleteMetaDataDTO 删除信息
*/
void deleteMetaData(DeleteMetaDataDTO deleteMetaDataDTO);
+
+ /**
+ * 给元数据绑定模板文件
+ *
+ * @param template 模板文件
+ * @param name 元数据名
+ */
+ void bindWordTemplate(MultipartFile template, String name);
}
diff --git a/src/main/java/com/example/survey/service/ProjectService.java b/src/main/java/com/example/survey/service/ProjectService.java
index 4a654c4..d3484df 100644
--- a/src/main/java/com/example/survey/service/ProjectService.java
+++ b/src/main/java/com/example/survey/service/ProjectService.java
@@ -25,11 +25,12 @@ public interface ProjectService {
* 根据筛选条件分页查询项目
*
* @param name 项目名
+ * @param state 状态
* @param currentPage 当前页数
* @param pageSize 页大小
* @return 项目vo
*/
- List listProjectLimit(String name, int currentPage, int pageSize);
+ List listProjectLimit(String name, String state, int currentPage, int pageSize);
/**
* 根据项目名查询调查对象数量
@@ -65,8 +66,9 @@ public interface ProjectService {
/**
* 根据项目吗查询数量
*
- * @param name 项目名
+ * @param name 项目名
+ * @param state 项目状态
* @return 数量
*/
- long countProject(String name);
+ long countProject(String name, String state);
}
diff --git a/src/main/java/com/example/survey/service/RecordService.java b/src/main/java/com/example/survey/service/RecordService.java
index b78d14e..3b3b1ef 100644
--- a/src/main/java/com/example/survey/service/RecordService.java
+++ b/src/main/java/com/example/survey/service/RecordService.java
@@ -1,10 +1,13 @@
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.vo.RecordVO;
+import org.springframework.web.multipart.MultipartFile;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -81,4 +84,28 @@ public interface RecordService {
* @return 流调记录的values
*/
Map getRecordValues(String projectName, String idNumber, String version);
+
+ /**
+ * 上传文件
+ *
+ * @param file 文件
+ * @return 文件的可访问路径
+ */
+ String uploadFile(MultipartFile file);
+
+ /**
+ * 删除记录
+ *
+ * @param deleteRecordDTO 删除信息
+ */
+ void deleteRecord(DeleteRecordDTO deleteRecordDTO);
+
+ /**
+ * 项目导出为word文档
+ *
+ * @param idNumber 身份证号
+ * @param projectName 项目名
+ * @param response 响应
+ */
+ void record2word(String idNumber, String projectName, HttpServletResponse response);
}
diff --git a/src/main/java/com/example/survey/service/impl/MetaDataServiceImpl.java b/src/main/java/com/example/survey/service/impl/MetaDataServiceImpl.java
index 898495d..a269280 100644
--- a/src/main/java/com/example/survey/service/impl/MetaDataServiceImpl.java
+++ b/src/main/java/com/example/survey/service/impl/MetaDataServiceImpl.java
@@ -10,10 +10,14 @@ import com.example.survey.exception.MetaDataException;
import com.example.survey.service.MetaDataService;
import com.example.survey.vo.MetaDataVO;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.*;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import java.util.stream.Collectors;
/**
@@ -25,8 +29,14 @@ public class MetaDataServiceImpl implements MetaDataService {
@Autowired
MetaDataDao metaDataDao;
+ @Value("${file.path}")
+ private String path;
+
+ @Value("${file.url}")
+ private String url;
+
@Override
- public void addMetaData(CreateMetaDataDTO createMetaDataDTO) {
+ public void createMetaData(CreateMetaDataDTO createMetaDataDTO) {
if (metaDataDao.existMetaData(createMetaDataDTO.getName())) {
throw new MetaDataException(ResultEnum.ALREADY_EXIST_METADATA);
}
@@ -35,6 +45,7 @@ public class MetaDataServiceImpl implements MetaDataService {
metaData.setForm(createMetaDataDTO.getForm());
metaData.setFieldToNameList(createMetaDataDTO.getFieldToNameList());
metaData.setConfig(createMetaDataDTO.getConfig());
+ metaData.setWordTemplate(createMetaDataDTO.getWordTemplate());
metaDataDao.saveMetaData(metaData);
}
@@ -81,7 +92,7 @@ public class MetaDataServiceImpl implements MetaDataService {
@Override
public MetaData getMetaData(String name) {
if (!metaDataDao.existMetaData(name)) {
- throw new MetaDataException(ResultEnum.ALREADY_EXIST_METADATA);
+ throw new MetaDataException(ResultEnum.NOT_EXIST_METADATA);
}
return metaDataDao.selectMetaData(name);
}
@@ -93,4 +104,46 @@ public class MetaDataServiceImpl implements MetaDataService {
}
metaDataDao.deleteMetaData(deleteMetaDataDTO.getName());
}
+
+ @Override
+ public void bindWordTemplate(MultipartFile template, String name) {
+ if (!metaDataDao.existMetaData(name)) {
+ throw new MetaDataException(ResultEnum.ALREADY_EXIST_METADATA);
+ }
+ MetaData metaData = metaDataDao.selectMetaData(name);
+
+ String filename = template.getOriginalFilename();
+ String suffix = filename.substring(filename.lastIndexOf('.'));
+ String newName = UUID.randomUUID().toString() + suffix;
+ File newFile = new File(path + newName);
+
+ OutputStream os = null;
+ InputStream is = null;
+
+ try {
+ os = new FileOutputStream(newFile);
+ is = template.getInputStream();
+
+ byte[] buffer = new byte[1024];
+ int len;
+ while ((len = is.read(buffer)) != -1) {
+ os.write(buffer, 0, len);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (os != null) {
+ os.close();
+ }
+ if (is != null) {
+ is.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ metaData.setWordTemplate(path + newName);
+ metaDataDao.saveMetaData(metaData);
+ }
}
diff --git a/src/main/java/com/example/survey/service/impl/ProjectServiceImpl.java b/src/main/java/com/example/survey/service/impl/ProjectServiceImpl.java
index 9d7ea97..2d66da1 100644
--- a/src/main/java/com/example/survey/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/com/example/survey/service/impl/ProjectServiceImpl.java
@@ -63,14 +63,15 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
- public List listProjectLimit(String name, int currentPage, int pageSize) {
- return projectDao.listProjectLimit(name, currentPage * pageSize, pageSize).stream()
+ public List listProjectLimit(String name, String state, int currentPage, int pageSize) {
+ return projectDao.listProjectLimit(name, state, 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());
+ projectVO.setUsername(project.getUser().getUsername());
if (project.getMetaData() != null) {
projectVO.setMetaDataName(project.getMetaData().getName());
}
@@ -131,8 +132,8 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
- public long countProject(String name) {
- return projectDao.countProject(name);
+ public long countProject(String name, String state) {
+ return projectDao.countProject(name, state);
}
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 0d175b0..21c6770 100644
--- a/src/main/java/com/example/survey/service/impl/RecordServiceImpl.java
+++ b/src/main/java/com/example/survey/service/impl/RecordServiceImpl.java
@@ -4,6 +4,7 @@ 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;
@@ -15,17 +16,19 @@ import com.example.survey.entity.inner.Operation;
import com.example.survey.enumeration.RecordStateEnum;
import com.example.survey.enumeration.RespondentStateEnum;
import com.example.survey.enumeration.ResultEnum;
-import com.example.survey.exception.ProjectException;
-import com.example.survey.exception.RecordException;
-import com.example.survey.exception.RespondentException;
-import com.example.survey.exception.UserException;
+import com.example.survey.exception.*;
import com.example.survey.service.RecordService;
+import com.example.survey.util.WordUtil;
import com.example.survey.vo.RecordVO;
import com.example.survey.vo.inner.OperationInfo;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -52,6 +55,12 @@ public class RecordServiceImpl implements RecordService {
@Autowired
private ProjectDao projectDao;
+ @Value("${file.path}")
+ private String path;
+
+ @Value("${file.url}")
+ private String url;
+
@Override
public long countRecord(String userPhone, String projectName) {
if (userPhone != null && !userDao.existUser(userPhone)) {
@@ -67,19 +76,20 @@ public class RecordServiceImpl implements RecordService {
@Override
public void reviewRecord(ReviewRecordDTO reviewRecordDTO) {
- if (!respondentDao.existRespondent(reviewRecordDTO.getIdNumber(), RespondentStateEnum.NOT_INVESTIGATED.getValue())) {
- throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
- }
if (!userDao.existUser(reviewRecordDTO.getReviewerPhone())) {
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());
- Respondent respondent = respondentDao.selectRespondent(reviewRecordDTO.getIdNumber(), project);
- User user = userDao.selectUser(reviewRecordDTO.getReviewerPhone());
+ 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);
@@ -98,61 +108,61 @@ public class RecordServiceImpl implements RecordService {
@Override
public void modifyRecord(ModifyRecordDTO modifyRecordDTO) {
- if (!respondentDao.existRespondent(modifyRecordDTO.getIdNumber(), RespondentStateEnum.NOT_INVESTIGATED.getValue())) {
- throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
- }
if (!userDao.existUser(modifyRecordDTO.getUserPhone())) {
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);
- User user = userDao.selectUser(modifyRecordDTO.getUserPhone());
-
-
- if (!recordDao.existRecord(respondent, project, RecordStateEnum.UNDER_REVIEW.getValue())) {
+ List recordList = recordDao.listRecord(project, respondent);
+ if (recordList == null) {
throw new RecordException(ResultEnum.NOT_EXIST_RECORD);
}
- Record record = recordDao.getRecord(respondent, project, RecordStateEnum.REVIEWED.getValue());
+ 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.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);
+ //生成新的流调记录
+ 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);
+ });
}
@Override
public void createRecord(SubmitRecordDTO submitRecordDTO) {
- if (!respondentDao.existRespondent(submitRecordDTO.getIdNumber())) {
- throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
- }
if (!userDao.existUser(submitRecordDTO.getUserPhone())) {
throw new UserException(ResultEnum.NOT_EXIST_USER);
}
+ User user = userDao.selectUser(submitRecordDTO.getUserPhone());
if (!projectDao.existProject(submitRecordDTO.getProjectName())) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
Project project = projectDao.selectProject(submitRecordDTO.getProjectName());
+ if (!respondentDao.existRespondent(submitRecordDTO.getIdNumber(), project)) {
+ throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
+ }
Respondent respondent = respondentDao.selectRespondent(submitRecordDTO.getIdNumber(), project);
- User user = userDao.selectUser(submitRecordDTO.getUserPhone());
-
//设置调查对象为已调查
respondent.setState(RespondentStateEnum.INVESTIGATED.getValue());
respondentDao.saveRespondent(respondent);
@@ -198,37 +208,42 @@ public class RecordServiceImpl implements RecordService {
@Override
public long countRecord(String idNumber, String userPhone, String projectName, String state, String version, String questionnaireNumber) {
- if (idNumber != null && !respondentDao.existRespondent(idNumber)) {
- throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
- }
- 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);
}
Project project = projectDao.selectProject(projectName);
- Respondent respondent = respondentDao.selectRespondent(idNumber, project);
+
+ if (userPhone != null && !userDao.existUser(userPhone)) {
+ throw new UserException(ResultEnum.NOT_EXIST_USER);
+ }
User user = userDao.selectUser(userPhone);
+ if (idNumber != null && !respondentDao.existRespondent(idNumber, project)) {
+ throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
+ }
+
+ Respondent respondent = respondentDao.selectRespondent(idNumber, project);
+
return recordDao.countRecord(respondent, user, project, state, version, questionnaireNumber);
}
@Override
public List listRecordLimit(String idNumber, String userPhone, String projectName, String state, String version, String questionnaireNumber, int currentPage, int pageSize) {
- if (idNumber != null && !respondentDao.existRespondent(idNumber)) {
- throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
- }
if (userPhone != null && !userDao.existUser(userPhone)) {
throw new UserException(ResultEnum.NOT_EXIST_USER);
}
+ User user = userDao.selectUser(userPhone);
+
if (projectName != null && !projectDao.existProject(projectName)) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
Project project = projectDao.selectProject(projectName);
+
+ if (idNumber != null && !respondentDao.existRespondent(idNumber, project)) {
+ throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
+ }
Respondent respondent = respondentDao.selectRespondent(idNumber, project);
- User user = userDao.selectUser(userPhone);
List recordList = recordDao.listRecordLimit(respondent, user, project, state, version, questionnaireNumber, currentPage * pageSize, pageSize);
@@ -258,10 +273,10 @@ public class RecordServiceImpl implements RecordService {
if (!projectDao.existProject(projectName)) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
- if (!respondentDao.existRespondent(idNumber)) {
+ Project project = projectDao.selectProject(projectName);
+ if (!respondentDao.existRespondent(idNumber, project)) {
throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
}
- Project project = projectDao.selectProject(projectName);
Respondent respondent = respondentDao.selectRespondent(idNumber, project);
Record record = recordDao.selectRecord(respondent, project, version);
if (record == null) {
@@ -270,5 +285,90 @@ public class RecordServiceImpl implements RecordService {
return record.getValues();
}
+ @Override
+ public String uploadFile(MultipartFile file) {
+ String name = file.getOriginalFilename();
+ assert name != null;
+ String suffix = name.substring(name.lastIndexOf('.'));
+ String newName = UUID.randomUUID().toString() + suffix;
+ File newFile = new File(path + newName);
+
+ OutputStream os = null;
+ InputStream is = null;
+
+ try {
+ os = new FileOutputStream(newFile);
+ is = file.getInputStream();
+
+ byte[] buffer = new byte[1024];
+ int len;
+ while ((len = is.read(buffer)) != -1) {
+ os.write(buffer, 0, len);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (os != null) {
+ os.close();
+ }
+ if (is != null) {
+ is.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return url + newName;
+ }
+
+ @Override
+ public void deleteRecord(DeleteRecordDTO deleteRecordDTO) {
+ if (!userDao.existUser(deleteRecordDTO.getUserPhone())) {
+ throw new UserException(ResultEnum.NOT_EXIST_USER);
+ }
+ User user = userDao.selectUser(deleteRecordDTO.getUserPhone());
+ if (!projectDao.existProject(deleteRecordDTO.getProjectName())) {
+ throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
+ }
+ Project project = projectDao.selectProject(deleteRecordDTO.getProjectName());
+ if (!respondentDao.existRespondent(deleteRecordDTO.getIdNumber(), project)) {
+ throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
+ }
+ 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);
+ });
+ }
+
+ @Override
+ public void record2word(String idNumber, String projectName, HttpServletResponse response) {
+ if (!projectDao.existProject(projectName)) {
+ 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);
+ }
+ if (!respondentDao.existRespondent(idNumber, 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);
+ }
+ Map values = record.getValues();
+ WordUtil.export2word(response, values, "E:\\wordTemplate.docx");
+ }
+
}
diff --git a/src/main/java/com/example/survey/service/impl/RespondentServiceImpl.java b/src/main/java/com/example/survey/service/impl/RespondentServiceImpl.java
index cbb5d40..433563a 100644
--- a/src/main/java/com/example/survey/service/impl/RespondentServiceImpl.java
+++ b/src/main/java/com/example/survey/service/impl/RespondentServiceImpl.java
@@ -20,9 +20,7 @@ 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.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -127,10 +125,10 @@ public class RespondentServiceImpl implements RespondentService {
if (!projectDao.existProject(modifyRespondentDTO.getProjectName())) {
throw new ProjectException(ResultEnum.NOT_EXIST_PROJECT);
}
- if (!respondentDao.existRespondent(modifyRespondentDTO.getIdNumber())) {
+ Project project = projectDao.selectProject(modifyRespondentDTO.getProjectName());
+ if (!respondentDao.existRespondent(modifyRespondentDTO.getIdNumber(), project)) {
throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
}
- Project project = projectDao.selectProject(modifyRespondentDTO.getProjectName());
Respondent respondent = respondentDao.selectRespondent(modifyRespondentDTO.getIdNumber(), project);
respondent.setPhone(modifyRespondentDTO.getPhone());
respondent.setName(modifyRespondentDTO.getName());
@@ -143,31 +141,32 @@ public class RespondentServiceImpl implements RespondentService {
@Override
public void modifyUser(ModifyRespondentUserDTO modifyRespondentUserDTO) {
- if (!respondentDao.existRespondent(modifyRespondentUserDTO.getIdNumber())) {
- throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
- }
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);
- User user = userDao.selectUser(modifyRespondentUserDTO.getUserPhone());
+
respondent.setUser(user);
respondentDao.saveRespondent(respondent);
}
@Override
public void deleteRespondent(DeleteRespondentDTO deleteRespondentDTO) {
- if (!respondentDao.existRespondent(deleteRespondentDTO.getIdNumber())) {
- throw new RespondentException(ResultEnum.NOT_EXIST_RESPONDENT);
- }
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);
diff --git a/src/main/java/com/example/survey/util/WordUtil.java b/src/main/java/com/example/survey/util/WordUtil.java
new file mode 100644
index 0000000..6e14f8f
--- /dev/null
+++ b/src/main/java/com/example/survey/util/WordUtil.java
@@ -0,0 +1,57 @@
+package com.example.survey.util;
+
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
+
+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;
+
+/**
+ * @author Pope
+ */
+public class WordUtil {
+ public static void export2word(HttpServletResponse response, Map values, String templatePath) {
+
+ response.addHeader("Content-Disposition", "attachment;filename=" + UUID.randomUUID().toString() + ".docx");
+
+ ConfigureBuilder configureBuilder = Configure.builder();
+ HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
+ for (String key : values.keySet()) {
+ Object value = values.get(key);
+ if (value instanceof List) {
+ List