From ce1e3979bd4da4648466631b7eb8b92d655f4128 Mon Sep 17 00:00:00 2001 From: Vindicator645 <45960487+Vindicator645@users.noreply.github.com> Date: Sat, 21 Mar 2020 13:57:38 +0800 Subject: [PATCH 1/7] jason --- .../java/com/codesdream/ase/controller/LeavesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/codesdream/ase/controller/LeavesController.java b/src/main/java/com/codesdream/ase/controller/LeavesController.java index 6b19fc6..a7e8e1f 100644 --- a/src/main/java/com/codesdream/ase/controller/LeavesController.java +++ b/src/main/java/com/codesdream/ase/controller/LeavesController.java @@ -3,7 +3,7 @@ package com.codesdream.ase.controller; import com.alibaba.fastjson.JSONObject; import com.codesdream.ase.component.datamanager.JSONParameter; import com.codesdream.ase.component.json.request.UserLeaveRequest; -import com.codesdream.ase.component.json.respond.FailedSONRespond; +//import com.codesdream.ase.component.json.respond.FailedSONRespond; import com.codesdream.ase.component.json.respond.JSONBaseRespondObject; import com.codesdream.ase.component.permission.ASEUsernameEncoder; import com.codesdream.ase.service.LeavesService; From 1004f133677a95b5611da94b9323c440baf8ba49 Mon Sep 17 00:00:00 2001 From: Vindicator645 <45960487+Vindicator645@users.noreply.github.com> Date: Sat, 28 Mar 2020 14:05:19 +0800 Subject: [PATCH 2/7] Leaving --- .../component/json/request/UserLeaveAuth.java | 16 ++++++ .../json/request/UserLeaveRequest.java | 12 +++- .../ase/controller/LeavesController.java | 57 ++++++++++++++++--- .../codesdream/ase/model/leaves/Leave.java | 7 ++- .../ase/service/ILeavesService.java | 4 +- .../codesdream/ase/service/LeavesService.java | 13 ++++- 6 files changed, 92 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/codesdream/ase/component/json/request/UserLeaveAuth.java diff --git a/src/main/java/com/codesdream/ase/component/json/request/UserLeaveAuth.java b/src/main/java/com/codesdream/ase/component/json/request/UserLeaveAuth.java new file mode 100644 index 0000000..92452c6 --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/json/request/UserLeaveAuth.java @@ -0,0 +1,16 @@ +package com.codesdream.ase.component.json.request; + +import lombok.Data; + +@Data +public class UserLeaveAuth { + /* + 备注 + */ + private int id; + private String Comment; + /* + 审核结果 + */ + private String newStat; +} diff --git a/src/main/java/com/codesdream/ase/component/json/request/UserLeaveRequest.java b/src/main/java/com/codesdream/ase/component/json/request/UserLeaveRequest.java index 485c0ce..df05547 100644 --- a/src/main/java/com/codesdream/ase/component/json/request/UserLeaveRequest.java +++ b/src/main/java/com/codesdream/ase/component/json/request/UserLeaveRequest.java @@ -1,7 +1,15 @@ package com.codesdream.ase.component.json.request; +import lombok.Data; + +import java.util.Date; +@Data public class UserLeaveRequest { - - + private String UserId;//用户名 + private String Type;//请假类型 + private String Reason;//请假原因 + private String Addon;//附件 + private Date Starttime;//开始时间 + private Date EndTime;//结束时间 } diff --git a/src/main/java/com/codesdream/ase/controller/LeavesController.java b/src/main/java/com/codesdream/ase/controller/LeavesController.java index a415cf2..b4b3a65 100644 --- a/src/main/java/com/codesdream/ase/controller/LeavesController.java +++ b/src/main/java/com/codesdream/ase/controller/LeavesController.java @@ -2,8 +2,14 @@ package com.codesdream.ase.controller; import com.alibaba.fastjson.JSONObject; import com.codesdream.ase.component.datamanager.JSONParameter; +import com.codesdream.ase.component.datamanager.QuickJSONRespond; +import com.codesdream.ase.component.json.request.UserLeaveAuth; import com.codesdream.ase.component.json.request.UserLeaveRequest; +import com.codesdream.ase.component.json.request.UserLoginChecker; +import com.codesdream.ase.component.json.respond.JSONBaseRespondObject; +import com.codesdream.ase.component.json.respond.JSONStandardFailedRespond; import com.codesdream.ase.component.permission.ASEUsernameEncoder; +import com.codesdream.ase.model.leaves.Leave; import com.codesdream.ase.service.LeavesService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; @@ -14,6 +20,8 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.Calendar; +import java.util.Date; import java.util.Optional; @@ -27,34 +35,67 @@ public class LeavesController { @Resource private JSONParameter jsonParameter; + @Resource + private QuickJSONRespond quickJSONRespond; + @Resource private LeavesService leavesService; @Resource private ASEUsernameEncoder usernameEncoder; - @RequestMapping(value = "/leave") + @RequestMapping(value = "/") String printLeave(Model model) { return "Leave"; } //提交请假申请 - @RequestMapping(value = "/leave/check", method = RequestMethod.POST) + @RequestMapping(value = "/Leave/check", method = RequestMethod.POST) @ResponseBody - String requestLeave(HttpServletRequest request){ + String leaveRequest(HttpServletRequest request){ // 检查是否为JSON Optional json = jsonParameter.getJSONByRequest(request); - // if(!json.isPresent()) return jsonParameter.getJSONString(new FailedSONRespond()); + if(!json.isPresent()) return jsonParameter.getJSONString(new JSONStandardFailedRespond()); + UserLeaveRequest userLeaveRequest=json.get().toJavaObject(UserLeaveRequest.class); + Leave newleave=new Leave(); + newleave.setUserFrom(userLeaveRequest.getUserId()); + newleave.setType(userLeaveRequest.getType()); + newleave.setReasonToLeave(userLeaveRequest.getReason()); + //newleave.set + newleave.setStartTime(userLeaveRequest.getStarttime()); + newleave.setEndTime(userLeaveRequest.getEndTime()); + Calendar calendar =Calendar.getInstance(); + Date time = calendar.getTime(); + newleave.setApplyTime(time); + leavesService.save(newleave); + //eturn quickJSONRespond.getRespond200(null, respond); - UserLeaveRequest LeaveChecker = json.get().toJavaObject(UserLeaveRequest.class); + return quickJSONRespond.getRespond200("申请已提交"); // 检查类型 - return jsonParameter.getJSONString(request); } - //列出某辅导员待审核名单 + String getLeaveAuth(HttpServletRequest request){ + + // 检查是否为JSON + Optional json = jsonParameter.getJSONByRequest(request); + if(!json.isPresent()) return jsonParameter.getJSONString(new JSONStandardFailedRespond()); + UserLeaveAuth userLeaveAuth=json.get().toJavaObject(UserLeaveAuth.class); + Optional leave =leavesService.findLeaveById(userLeaveAuth.getId()); + if(!leave.isPresent()){ + return quickJSONRespond.getRespond500("No such entry"); + } + Leave newLeave=leave.get(); + newLeave.setComment(userLeaveAuth.getComment()); + newLeave.setAuthentication(userLeaveAuth.getNewStat()); + return quickJSONRespond.getRespond200("Authentication status updated"); + } + String getLeavelist(HttpServletRequest request){ + Optional json = jsonParameter.getJSONByRequest(request); + if(!json.isPresent()) return jsonParameter.getJSONString(new JSONStandardFailedRespond()); + + } - //列出某人 } diff --git a/src/main/java/com/codesdream/ase/model/leaves/Leave.java b/src/main/java/com/codesdream/ase/model/leaves/Leave.java index e5ef606..5f65fc7 100644 --- a/src/main/java/com/codesdream/ase/model/leaves/Leave.java +++ b/src/main/java/com/codesdream/ase/model/leaves/Leave.java @@ -9,12 +9,13 @@ import javax.persistence.*; @Entity @Table(name = "leaves") public class Leave { + //请假的编号 @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; //发出人 - @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private User userFrom; + @Column + private String userFrom; //审批人容器 @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY) private Set userTo; @@ -28,7 +29,7 @@ public class Leave { private String type; //批准状态 @Column(nullable = false) - private String authentication; + private String authentication="Pending"; //审核备注 @Column diff --git a/src/main/java/com/codesdream/ase/service/ILeavesService.java b/src/main/java/com/codesdream/ase/service/ILeavesService.java index 0d7b994..4f64f43 100644 --- a/src/main/java/com/codesdream/ase/service/ILeavesService.java +++ b/src/main/java/com/codesdream/ase/service/ILeavesService.java @@ -4,6 +4,7 @@ import com.codesdream.ase.model.leaves.Leave; import java.util.Optional; +import java.util.OptionalInt; public interface ILeavesService { //通过标题查找活动 @@ -12,6 +13,8 @@ public interface ILeavesService { //通过创建人姓名查找活动 Optional findLeaveByCreator(String creatorName); + OptionalfindLeaveById(int id); + //活动 Leave save(Leave leave); @@ -21,7 +24,6 @@ public interface ILeavesService { //请假信息更新 Leave update(Leave Leave); - //创建请假条目 Leave createLeave(Leave Leave); diff --git a/src/main/java/com/codesdream/ase/service/LeavesService.java b/src/main/java/com/codesdream/ase/service/LeavesService.java index a9c475d..0e58d35 100644 --- a/src/main/java/com/codesdream/ase/service/LeavesService.java +++ b/src/main/java/com/codesdream/ase/service/LeavesService.java @@ -8,7 +8,7 @@ import javax.annotation.Resource; import java.util.Optional; @Service -public class LeavesService implements ILeavesService { +public class LeavesService implements ILeavesService { @Resource private LeaveRepository leaveRepository; @@ -25,10 +25,16 @@ public class LeavesService implements ILeavesService { } @Override - public Leave save(Leave leave) { + public Leave save( Leave leave) { return leaveRepository.save(leave); } + @Override + public Optional findLeaveById(int id) { + return leaveRepository.findById(id); + } + + @Override public void delete(Leave leave) { @@ -45,7 +51,8 @@ public class LeavesService implements ILeavesService { return leaveRepository.save(leave); } - /*@Override + +/*@Override public Leave findActivitiesInTheCharge(User user) { }*/ From 0ede1972fd1be3153175663449e4c37350a6cba1 Mon Sep 17 00:00:00 2001 From: Vindicator645 <45960487+Vindicator645@users.noreply.github.com> Date: Sun, 29 Mar 2020 15:51:37 +0800 Subject: [PATCH 3/7] Leaving --- .../UserSGettudentLeaveListRequest.java | 8 ++++++ .../ase/controller/LeavesController.java | 25 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/codesdream/ase/component/json/request/UserSGettudentLeaveListRequest.java diff --git a/src/main/java/com/codesdream/ase/component/json/request/UserSGettudentLeaveListRequest.java b/src/main/java/com/codesdream/ase/component/json/request/UserSGettudentLeaveListRequest.java new file mode 100644 index 0000000..b97c771 --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/json/request/UserSGettudentLeaveListRequest.java @@ -0,0 +1,8 @@ +package com.codesdream.ase.component.json.request; + +import lombok.Data; + +@Data +public class UserSGettudentLeaveListRequest { + private int studentId; +} diff --git a/src/main/java/com/codesdream/ase/controller/LeavesController.java b/src/main/java/com/codesdream/ase/controller/LeavesController.java index b4b3a65..b4e1d84 100644 --- a/src/main/java/com/codesdream/ase/controller/LeavesController.java +++ b/src/main/java/com/codesdream/ase/controller/LeavesController.java @@ -1,14 +1,18 @@ package com.codesdream.ase.controller; import com.alibaba.fastjson.JSONObject; +import com.codesdream.ase.component.api.QuickJSONRespond; +import com.codesdream.ase.component.auth.ASEUsernameEncoder; import com.codesdream.ase.component.datamanager.JSONParameter; -import com.codesdream.ase.component.datamanager.QuickJSONRespond; + import com.codesdream.ase.component.json.request.UserLeaveAuth; import com.codesdream.ase.component.json.request.UserLeaveRequest; import com.codesdream.ase.component.json.request.UserLoginChecker; +import com.codesdream.ase.component.json.request.UserSGettudentLeaveListRequest; import com.codesdream.ase.component.json.respond.JSONBaseRespondObject; import com.codesdream.ase.component.json.respond.JSONStandardFailedRespond; -import com.codesdream.ase.component.permission.ASEUsernameEncoder; +import com.codesdream.ase.exception.InvalidFormFormatException; +import com.codesdream.ase.exception.notfound.NotFoundException; import com.codesdream.ase.model.leaves.Leave; import com.codesdream.ase.service.LeavesService; import lombok.extern.slf4j.Slf4j; @@ -17,6 +21,7 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.client.HttpClientErrorException; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -76,6 +81,8 @@ public class LeavesController { // 检查类型 } + @RequestMapping(value = "/Leave/auth", method = RequestMethod.POST) + @ResponseBody String getLeaveAuth(HttpServletRequest request){ // 检查是否为JSON @@ -91,9 +98,19 @@ public class LeavesController { newLeave.setAuthentication(userLeaveAuth.getNewStat()); return quickJSONRespond.getRespond200("Authentication status updated"); } - String getLeavelist(HttpServletRequest request){ + + @RequestMapping(value = "/Leave/getStuLeaveList", method = RequestMethod.POST) + @ResponseBody + Leave getStuLeavelist(HttpServletRequest request) throws InvalidFormFormatException { Optional json = jsonParameter.getJSONByRequest(request); - if(!json.isPresent()) return jsonParameter.getJSONString(new JSONStandardFailedRespond()); + if(!json.isPresent()) throw new InvalidFormFormatException("json request not recognized"); + UserSGettudentLeaveListRequest userSGettudentLeaveListRequest=json.get().toJavaObject(UserSGettudentLeaveListRequest.class); + if(leavesService.findLeaveById(userSGettudentLeaveListRequest.getStudentId()).isPresent()){ + Leave leave =leavesService.findLeaveById(userSGettudentLeaveListRequest.getStudentId()).get(); + return leave; + }else{ + throw new NotFoundException("Student Does not exist"); + } } From 565e9ea8359aa1470a7b30bf33e3ee3766ba37b1 Mon Sep 17 00:00:00 2001 From: Saturneric Date: Sun, 29 Mar 2020 17:40:26 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=AD=90=E7=B3=BB=E7=BB=9F=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3;=E7=BB=A7=E7=BB=AD=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=AE=A1=E7=90=86=E5=AD=90=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?;=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=B9=E4=BA=8E=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=95=B0=E6=8D=AE=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E7=9A=84=E7=9B=B8=E5=85=B3=E6=94=AF=E6=8C=81=EF=BC=88JSON=20Pa?= =?UTF-8?q?tch=EF=BC=89;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 ++ .../component/activity/ActivityConverter.java | 5 +- .../datamanager/DataExcelGenerator.java | 2 +- .../datamanager/DataExcelReader.java | 5 +- .../ase/component/datamanager/DataTable.java | 4 +- .../datamanager/JsonPathParameter.java | 23 ++++++ .../component/json/model/JsonablePCCList.java | 22 +++++ ...TagUserList.java => JsonableUserList.java} | 4 +- .../ase/controller/ASEControllerAdvice.java | 15 +++- .../ase/controller/PermissionController.java | 80 +++++++++++++++---- .../activity/ActivityCreatorController.java | 4 +- .../ase/exception/DataIOException.java | 9 --- .../DataIllegalTableFormatException.java | 9 --- .../BaseInformationIllegalException.java | 4 +- .../badrequest/IllegalException.java | 10 +++ .../UserInformationIllegalException.java | 4 +- .../innerservererror/DataIOException.java | 9 +++ .../DataIllegalTableFormatException.java | 9 +++ .../DataInvalidFormatException.java | 4 +- .../innerservererror/FormatException.java | 10 +++ .../HandlingErrorsException.java | 13 +++ .../InvalidFormFormatException.java | 4 +- .../innerservererror/RuntimeIOException.java | 10 +++ .../ase/service/BaseInformationService.java | 2 +- .../ase/service/IPermissionService.java | 4 + .../ase/service/PermissionService.java | 16 ++++ .../codesdream/ase/service/UserService.java | 2 +- .../ase/validator/JSONFormValidator.java | 2 - .../ase/test/JSONFormValidatorTest.java | 5 +- 29 files changed, 232 insertions(+), 64 deletions(-) create mode 100644 src/main/java/com/codesdream/ase/component/datamanager/JsonPathParameter.java create mode 100644 src/main/java/com/codesdream/ase/component/json/model/JsonablePCCList.java rename src/main/java/com/codesdream/ase/component/json/model/{JsonableTagUserList.java => JsonableUserList.java} (87%) delete mode 100644 src/main/java/com/codesdream/ase/exception/DataIOException.java delete mode 100644 src/main/java/com/codesdream/ase/exception/DataIllegalTableFormatException.java rename src/main/java/com/codesdream/ase/exception/{ => badrequest}/BaseInformationIllegalException.java (73%) create mode 100644 src/main/java/com/codesdream/ase/exception/badrequest/IllegalException.java rename src/main/java/com/codesdream/ase/exception/{ => badrequest}/UserInformationIllegalException.java (68%) create mode 100644 src/main/java/com/codesdream/ase/exception/innerservererror/DataIOException.java create mode 100644 src/main/java/com/codesdream/ase/exception/innerservererror/DataIllegalTableFormatException.java rename src/main/java/com/codesdream/ase/exception/{ => innerservererror}/DataInvalidFormatException.java (71%) create mode 100644 src/main/java/com/codesdream/ase/exception/innerservererror/FormatException.java create mode 100644 src/main/java/com/codesdream/ase/exception/innerservererror/HandlingErrorsException.java rename src/main/java/com/codesdream/ase/exception/{ => innerservererror}/InvalidFormFormatException.java (75%) create mode 100644 src/main/java/com/codesdream/ase/exception/innerservererror/RuntimeIOException.java diff --git a/pom.xml b/pom.xml index 900747a..c36beed 100644 --- a/pom.xml +++ b/pom.xml @@ -177,6 +177,12 @@ 2.9.2 + + com.github.java-json-tools + json-patch + 1.12 + + diff --git a/src/main/java/com/codesdream/ase/component/activity/ActivityConverter.java b/src/main/java/com/codesdream/ase/component/activity/ActivityConverter.java index 67c90b9..4ae1b7f 100644 --- a/src/main/java/com/codesdream/ase/component/activity/ActivityConverter.java +++ b/src/main/java/com/codesdream/ase/component/activity/ActivityConverter.java @@ -1,21 +1,18 @@ package com.codesdream.ase.component.activity; import com.alibaba.fastjson.JSONObject; -import com.codesdream.ase.exception.DataInvalidFormatException; +import com.codesdream.ase.exception.innerservererror.DataInvalidFormatException; import com.codesdream.ase.model.activity.Activity; import com.codesdream.ase.model.activity.Attendance; import com.codesdream.ase.model.activity.Period; import com.codesdream.ase.model.permission.User; -import com.codesdream.ase.repository.activity.ActivityRepository; import com.codesdream.ase.service.ActivityService; import com.codesdream.ase.service.AttendanceService; import com.codesdream.ase.service.PeriodService; import com.codesdream.ase.service.UserService; -import javafx.util.converter.LocalDateTimeStringConverter; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; diff --git a/src/main/java/com/codesdream/ase/component/datamanager/DataExcelGenerator.java b/src/main/java/com/codesdream/ase/component/datamanager/DataExcelGenerator.java index 83c1948..c11d01b 100644 --- a/src/main/java/com/codesdream/ase/component/datamanager/DataExcelGenerator.java +++ b/src/main/java/com/codesdream/ase/component/datamanager/DataExcelGenerator.java @@ -1,7 +1,7 @@ package com.codesdream.ase.component.datamanager; import com.codesdream.ase.exception.notfound.DataFileNotFoundException; -import com.codesdream.ase.exception.DataIOException; +import com.codesdream.ase.exception.innerservererror.DataIOException; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; diff --git a/src/main/java/com/codesdream/ase/component/datamanager/DataExcelReader.java b/src/main/java/com/codesdream/ase/component/datamanager/DataExcelReader.java index f5471f2..794f8c3 100644 --- a/src/main/java/com/codesdream/ase/component/datamanager/DataExcelReader.java +++ b/src/main/java/com/codesdream/ase/component/datamanager/DataExcelReader.java @@ -2,6 +2,9 @@ package com.codesdream.ase.component.datamanager; import com.codesdream.ase.exception.*; +import com.codesdream.ase.exception.innerservererror.DataIOException; +import com.codesdream.ase.exception.innerservererror.DataIllegalTableFormatException; +import com.codesdream.ase.exception.innerservererror.DataInvalidFormatException; import com.codesdream.ase.exception.notfound.DataFileNotFoundException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.*; @@ -48,7 +51,7 @@ public class DataExcelReader implements DataReader { Row titleRow = sheet.getRow(0); colNumber = titleRow.getLastCellNum(); // 表头项目个数不可为0 - if(colNumber == 0) throw new DataIllegalTableFormatException(); + if(colNumber == 0) throw new DataIllegalTableFormatException(); Collection title = new ArrayList<>(); for(int cellIdx = 0; cellIdx < colNumber; cellIdx++){ title.add(readCell(titleRow.getCell(cellIdx))); diff --git a/src/main/java/com/codesdream/ase/component/datamanager/DataTable.java b/src/main/java/com/codesdream/ase/component/datamanager/DataTable.java index cf1217c..97d04f5 100644 --- a/src/main/java/com/codesdream/ase/component/datamanager/DataTable.java +++ b/src/main/java/com/codesdream/ase/component/datamanager/DataTable.java @@ -1,11 +1,9 @@ package com.codesdream.ase.component.datamanager; -import com.codesdream.ase.exception.DataIllegalTableFormatException; +import com.codesdream.ase.exception.innerservererror.DataIllegalTableFormatException; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import javax.persistence.Table; -import javax.swing.text.html.Option; import java.util.*; // 描述一张数据表 diff --git a/src/main/java/com/codesdream/ase/component/datamanager/JsonPathParameter.java b/src/main/java/com/codesdream/ase/component/datamanager/JsonPathParameter.java new file mode 100644 index 0000000..64b719b --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/datamanager/JsonPathParameter.java @@ -0,0 +1,23 @@ +package com.codesdream.ase.component.datamanager; + +import com.codesdream.ase.exception.innerservererror.HandlingErrorsException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.fge.jsonpatch.JsonPatch; +import com.github.fge.jsonpatch.JsonPatchException; +import org.springframework.stereotype.Controller; + +@Controller +public class JsonPathParameter { + public T parsePathToObject(JsonPatch patch, T object){ + try { + ObjectMapper mapper = new ObjectMapper(); + JsonNode patched = patch.apply(mapper.convertValue(object, JsonNode.class)); + return (T) mapper.treeToValue(patched, object.getClass()); + } catch (JsonPatchException | JsonProcessingException e) { + throw new HandlingErrorsException(e.getMessage()); + } + + } +} diff --git a/src/main/java/com/codesdream/ase/component/json/model/JsonablePCCList.java b/src/main/java/com/codesdream/ase/component/json/model/JsonablePCCList.java new file mode 100644 index 0000000..870743e --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/json/model/JsonablePCCList.java @@ -0,0 +1,22 @@ +package com.codesdream.ase.component.json.model; + +import com.codesdream.ase.model.permission.PermissionContainersCollection; +import com.codesdream.ase.model.permission.Tag; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@ApiModel("权限容器集合列表") +public class JsonablePCCList { + List pccIdList; + + public JsonablePCCList(Tag tag){ + for(PermissionContainersCollection pcc : tag.getPermissionContainersCollections()){ + pccIdList.add(pcc.getId()); + } + } +} diff --git a/src/main/java/com/codesdream/ase/component/json/model/JsonableTagUserList.java b/src/main/java/com/codesdream/ase/component/json/model/JsonableUserList.java similarity index 87% rename from src/main/java/com/codesdream/ase/component/json/model/JsonableTagUserList.java rename to src/main/java/com/codesdream/ase/component/json/model/JsonableUserList.java index 523c61e..e91c3cb 100644 --- a/src/main/java/com/codesdream/ase/component/json/model/JsonableTagUserList.java +++ b/src/main/java/com/codesdream/ase/component/json/model/JsonableUserList.java @@ -12,13 +12,13 @@ import java.util.List; @Data @NoArgsConstructor @ApiModel("标签所属用户集合") -public class JsonableTagUserList { +public class JsonableUserList { @ApiModelProperty(name = "用户列表") private List users; - public JsonableTagUserList(Tag tag){ + public JsonableUserList(Tag tag){ for(User user : tag.getUsers()){ users.add(user.getId()); } diff --git a/src/main/java/com/codesdream/ase/controller/ASEControllerAdvice.java b/src/main/java/com/codesdream/ase/controller/ASEControllerAdvice.java index bdddf30..281ced4 100644 --- a/src/main/java/com/codesdream/ase/controller/ASEControllerAdvice.java +++ b/src/main/java/com/codesdream/ase/controller/ASEControllerAdvice.java @@ -3,7 +3,11 @@ package com.codesdream.ase.controller; import com.codesdream.ase.component.api.QuickJSONRespond; import com.codesdream.ase.component.json.respond.ErrorInfoJSONRespond; import com.codesdream.ase.exception.badrequest.AlreadyExistException; +import com.codesdream.ase.exception.badrequest.IllegalException; import com.codesdream.ase.exception.conflict.RelatedObjectsExistException; +import com.codesdream.ase.exception.innerservererror.FormatException; +import com.codesdream.ase.exception.innerservererror.HandlingErrorsException; +import com.codesdream.ase.exception.innerservererror.RuntimeIOException; import com.codesdream.ase.exception.notfound.NotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -21,7 +25,8 @@ public class ASEControllerAdvice { @ExceptionHandler(value = { NullPointerException.class, - AlreadyExistException.class + AlreadyExistException.class, + IllegalException.class }) public ResponseEntity handleBadRequest(Exception ex) { return getResponse(HttpStatus.BAD_REQUEST, ex); @@ -43,6 +48,14 @@ public class ASEControllerAdvice { return getResponse(HttpStatus.CONFLICT, ex); } + @ExceptionHandler(value = { + HandlingErrorsException.class, + FormatException.class, + RuntimeIOException.class}) + public ResponseEntity handleInnerServerError(Exception ex){ + return getResponse(HttpStatus.INTERNAL_SERVER_ERROR, ex); + } + private ResponseEntity getResponse(HttpStatus status, Exception ex){ return ResponseEntity.status(status).body(getJSON(status, ex)); diff --git a/src/main/java/com/codesdream/ase/controller/PermissionController.java b/src/main/java/com/codesdream/ase/controller/PermissionController.java index 766d619..400bbfa 100644 --- a/src/main/java/com/codesdream/ase/controller/PermissionController.java +++ b/src/main/java/com/codesdream/ase/controller/PermissionController.java @@ -1,30 +1,31 @@ package com.codesdream.ase.controller; -import com.alibaba.fastjson.JSONObject; -import com.codesdream.ase.component.datamanager.JSONParameter; -import com.codesdream.ase.component.api.QuickJSONRespond; +import com.codesdream.ase.component.datamanager.JsonPathParameter; +import com.codesdream.ase.component.json.model.JsonablePCCList; import com.codesdream.ase.component.json.model.JsonableTag; -import com.codesdream.ase.component.json.model.JsonableTagUserList; +import com.codesdream.ase.component.json.model.JsonableUserList; import com.codesdream.ase.component.json.model.JsonableUser; -import com.codesdream.ase.component.json.respond.PermissionJSONRespond; import com.codesdream.ase.exception.badrequest.AlreadyExistException; import com.codesdream.ase.exception.conflict.RelatedObjectsExistException; import com.codesdream.ase.exception.notfound.NotFoundException; -import com.codesdream.ase.exception.notfound.TagNotFoundException; +import com.codesdream.ase.model.permission.PermissionContainersCollection; import com.codesdream.ase.model.permission.Tag; import com.codesdream.ase.model.permission.User; import com.codesdream.ase.service.IUserService; import com.codesdream.ase.service.PermissionService; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.fge.jsonpatch.JsonPatch; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; +import springfox.documentation.spring.web.json.Json; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -41,6 +42,9 @@ public class PermissionController { @Resource private IUserService userService; + @Resource + private JsonPathParameter pathParameter; + // 根据名字创建新的标签 @PostMapping("tag") @ResponseStatus(HttpStatus.CREATED) @@ -99,31 +103,51 @@ public class PermissionController { permissionService.delete(tag.get()); } + // 根据名字搜索标签的简要信息 + @PatchMapping(path = "tag", consumes = "application/json-patch+json") + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation("修改标签属性") + @ApiImplicitParam(name = "name", value = "标签名") + public JsonableTag updateTag(@RequestParam(value = "name") String name, @RequestBody JsonPatch patch){ + Optional tag = permissionService.findTag(name); + if(!tag.isPresent()) throw new NotFoundException(name); + + JsonableTag jsonableTag = new JsonableTag(tag.get()); + jsonableTag = pathParameter.parsePathToObject(patch, jsonableTag); + + tag.get().setName(jsonableTag.getName()); + tag.get().setDescription(jsonableTag.getDescription()); + + return new JsonableTag(permissionService.save(tag.get())); + + } + + @GetMapping("tag/users") @ResponseStatus(HttpStatus.OK) @ApiOperation("搜索单个标签所属用户集合信息") - public JsonableTagUserList getUserTag(@RequestParam(value = "name") String name){ + public JsonableUserList getUserTag(@RequestParam(value = "name") String name){ Optional tag = permissionService.findTag(name); if(!tag.isPresent()) throw new NotFoundException(name); - return new JsonableTagUserList(tag.get()); + return new JsonableUserList(tag.get()); } @PutMapping("tag/users") @ApiOperation("更新索单个标签所属用户集合信息") - public JsonableTagUserList setUserTag(@RequestParam String name, @RequestBody JsonableTagUserList userList){ + public JsonableUserList setUserTag(@RequestParam String name, @RequestBody JsonableUserList userList){ Optional tag = permissionService.findTag(name); if(!tag.isPresent()) throw new NotFoundException(name); Set userSet = new HashSet<>(userList.getUsers()); tag.get().setUsers(userService.findUsersById(userSet)); - return new JsonableTagUserList(permissionService.save(tag.get())); + return new JsonableUserList(permissionService.save(tag.get())); } @PostMapping("tag/users") @ApiOperation("更新单个标签所属用户集合中添加一个或多个用户") - public JsonableTagUserList addUserTag(@RequestParam String name, @RequestBody JsonableTagUserList userList){ + public JsonableUserList addUserTag(@RequestParam String name, @RequestBody JsonableUserList userList){ Optional tag = permissionService.findTag(name); if(!tag.isPresent()) throw new NotFoundException(name); Set newUserSet = userService.findUsersById(new HashSet<>(userList.getUsers())); @@ -133,13 +157,14 @@ public class PermissionController { userSet.addAll(newUserSet); tag.get().setUsers(userSet); - return new JsonableTagUserList(permissionService.save(tag.get())); + return new JsonableUserList(permissionService.save(tag.get())); } @DeleteMapping("tag/users") + @ResponseStatus(HttpStatus.OK) @ApiOperation("从单个标签所属用户集合中删除一个或多个用户") @ApiImplicitParam(name = "name", value = "标签名") - public JsonableTagUserList deleteUserTag(@RequestParam String name, @RequestBody JsonableTagUserList userList){ + public JsonableUserList deleteUserTag(@RequestParam String name, @RequestBody JsonableUserList userList){ Optional tag = permissionService.findTag(name); if(!tag.isPresent()) throw new NotFoundException(name); Set userSet = tag.get().getUsers(); @@ -148,7 +173,7 @@ public class PermissionController { userSet.removeAll(deleteUserSet); tag.get().setUsers(userSet); - return new JsonableTagUserList(permissionService.save(tag.get())); + return new JsonableUserList(permissionService.save(tag.get())); } @GetMapping("tags/users") @@ -167,6 +192,31 @@ public class PermissionController { return jsonableUsers; } + @GetMapping("tag/pcc") + @ResponseStatus(HttpStatus.OK) + @ApiOperation("获取标签所含权限容器集合列表") + public JsonablePCCList getPCCTag(@RequestParam(value = "name") String name){ + Optional tagOptional = permissionService.findTag(name); + if(!tagOptional.isPresent()) throw new NotFoundException(name); + + return new JsonablePCCList(tagOptional.get()); + } + + @PostMapping("tag/pcc") + @ResponseStatus(HttpStatus.CREATED) + @ApiOperation("在指定标签的权限列表中添加一个或多个权限容器") + public JsonablePCCList addPCCTag(@RequestParam(value = "name") String name, JsonablePCCList jsonablePCCList){ + Optional tagOptional = permissionService.findTag(name); + if(!tagOptional.isPresent()) throw new NotFoundException(name); + + Set pccs = tagOptional.get().getPermissionContainersCollections(); + pccs.addAll(permissionService.findPCCs(new HashSet(jsonablePCCList.getPccIdList()))); + + tagOptional.get().setPermissionContainersCollections(pccs); + + return new JsonablePCCList(permissionService.save(tagOptional.get())); + } + } diff --git a/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java b/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java index ad6e384..64b2d2b 100644 --- a/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java +++ b/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java @@ -7,7 +7,7 @@ import com.codesdream.ase.component.activity.NullValueAttributes; import com.codesdream.ase.component.datamanager.JSONParameter; import com.codesdream.ase.component.json.respond.JSONStandardFailedRespond; import com.codesdream.ase.configure.ActivityFormConfigure; -import com.codesdream.ase.exception.InvalidFormFormatException; +import com.codesdream.ase.exception.innerservererror.InvalidFormFormatException; import com.codesdream.ase.model.activity.Activity; import com.codesdream.ase.model.activity.UserActivity; import com.codesdream.ase.model.permission.User; @@ -20,7 +20,6 @@ import com.codesdream.ase.validator.JSONFormValidator; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -28,7 +27,6 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.InvocationTargetException; import java.util.List; -import java.util.Map; import java.util.Optional; @Controller diff --git a/src/main/java/com/codesdream/ase/exception/DataIOException.java b/src/main/java/com/codesdream/ase/exception/DataIOException.java deleted file mode 100644 index f220cac..0000000 --- a/src/main/java/com/codesdream/ase/exception/DataIOException.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.codesdream.ase.exception; - -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DataIOException extends RuntimeException { -} diff --git a/src/main/java/com/codesdream/ase/exception/DataIllegalTableFormatException.java b/src/main/java/com/codesdream/ase/exception/DataIllegalTableFormatException.java deleted file mode 100644 index 5c01b8c..0000000 --- a/src/main/java/com/codesdream/ase/exception/DataIllegalTableFormatException.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.codesdream.ase.exception; - -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DataIllegalTableFormatException extends RuntimeException { -} diff --git a/src/main/java/com/codesdream/ase/exception/BaseInformationIllegalException.java b/src/main/java/com/codesdream/ase/exception/badrequest/BaseInformationIllegalException.java similarity index 73% rename from src/main/java/com/codesdream/ase/exception/BaseInformationIllegalException.java rename to src/main/java/com/codesdream/ase/exception/badrequest/BaseInformationIllegalException.java index 34b485b..1cd9768 100644 --- a/src/main/java/com/codesdream/ase/exception/BaseInformationIllegalException.java +++ b/src/main/java/com/codesdream/ase/exception/badrequest/BaseInformationIllegalException.java @@ -1,11 +1,11 @@ -package com.codesdream.ase.exception; +package com.codesdream.ase.exception.badrequest; import lombok.Data; import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data -public class BaseInformationIllegalException extends RuntimeException { +public class BaseInformationIllegalException extends IllegalException { String type; String value; diff --git a/src/main/java/com/codesdream/ase/exception/badrequest/IllegalException.java b/src/main/java/com/codesdream/ase/exception/badrequest/IllegalException.java new file mode 100644 index 0000000..c62f81a --- /dev/null +++ b/src/main/java/com/codesdream/ase/exception/badrequest/IllegalException.java @@ -0,0 +1,10 @@ +package com.codesdream.ase.exception.badrequest; + +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class IllegalException extends RuntimeException { + public IllegalException(String msg){ + super(msg); + } +} diff --git a/src/main/java/com/codesdream/ase/exception/UserInformationIllegalException.java b/src/main/java/com/codesdream/ase/exception/badrequest/UserInformationIllegalException.java similarity index 68% rename from src/main/java/com/codesdream/ase/exception/UserInformationIllegalException.java rename to src/main/java/com/codesdream/ase/exception/badrequest/UserInformationIllegalException.java index ce1331e..1107c14 100644 --- a/src/main/java/com/codesdream/ase/exception/UserInformationIllegalException.java +++ b/src/main/java/com/codesdream/ase/exception/badrequest/UserInformationIllegalException.java @@ -1,11 +1,11 @@ -package com.codesdream.ase.exception; +package com.codesdream.ase.exception.badrequest; import lombok.Data; import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data -public class UserInformationIllegalException extends RuntimeException { +public class UserInformationIllegalException extends IllegalException { String username; diff --git a/src/main/java/com/codesdream/ase/exception/innerservererror/DataIOException.java b/src/main/java/com/codesdream/ase/exception/innerservererror/DataIOException.java new file mode 100644 index 0000000..7c3615e --- /dev/null +++ b/src/main/java/com/codesdream/ase/exception/innerservererror/DataIOException.java @@ -0,0 +1,9 @@ +package com.codesdream.ase.exception.innerservererror; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DataIOException extends RuntimeIOException { +} diff --git a/src/main/java/com/codesdream/ase/exception/innerservererror/DataIllegalTableFormatException.java b/src/main/java/com/codesdream/ase/exception/innerservererror/DataIllegalTableFormatException.java new file mode 100644 index 0000000..d68b2d8 --- /dev/null +++ b/src/main/java/com/codesdream/ase/exception/innerservererror/DataIllegalTableFormatException.java @@ -0,0 +1,9 @@ +package com.codesdream.ase.exception.innerservererror; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DataIllegalTableFormatException extends FormatException { +} diff --git a/src/main/java/com/codesdream/ase/exception/DataInvalidFormatException.java b/src/main/java/com/codesdream/ase/exception/innerservererror/DataInvalidFormatException.java similarity index 71% rename from src/main/java/com/codesdream/ase/exception/DataInvalidFormatException.java rename to src/main/java/com/codesdream/ase/exception/innerservererror/DataInvalidFormatException.java index b5d4de5..99f6dd9 100644 --- a/src/main/java/com/codesdream/ase/exception/DataInvalidFormatException.java +++ b/src/main/java/com/codesdream/ase/exception/innerservererror/DataInvalidFormatException.java @@ -1,11 +1,11 @@ -package com.codesdream.ase.exception; +package com.codesdream.ase.exception.innerservererror; import lombok.Data; import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data -public class DataInvalidFormatException extends RuntimeException { +public class DataInvalidFormatException extends FormatException { String information; public DataInvalidFormatException(Exception e){ diff --git a/src/main/java/com/codesdream/ase/exception/innerservererror/FormatException.java b/src/main/java/com/codesdream/ase/exception/innerservererror/FormatException.java new file mode 100644 index 0000000..dd6a734 --- /dev/null +++ b/src/main/java/com/codesdream/ase/exception/innerservererror/FormatException.java @@ -0,0 +1,10 @@ +package com.codesdream.ase.exception.innerservererror; + +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class FormatException extends RuntimeException { + public FormatException(String msg){ + super(msg); + } +} diff --git a/src/main/java/com/codesdream/ase/exception/innerservererror/HandlingErrorsException.java b/src/main/java/com/codesdream/ase/exception/innerservererror/HandlingErrorsException.java new file mode 100644 index 0000000..e87c712 --- /dev/null +++ b/src/main/java/com/codesdream/ase/exception/innerservererror/HandlingErrorsException.java @@ -0,0 +1,13 @@ +package com.codesdream.ase.exception.innerservererror; + +import lombok.Data; +import lombok.NoArgsConstructor; + +// 处理错误对应的异常类 +@Data +@NoArgsConstructor +public class HandlingErrorsException extends RuntimeException { + public HandlingErrorsException(String msg){ + super(msg); + } +} diff --git a/src/main/java/com/codesdream/ase/exception/InvalidFormFormatException.java b/src/main/java/com/codesdream/ase/exception/innerservererror/InvalidFormFormatException.java similarity index 75% rename from src/main/java/com/codesdream/ase/exception/InvalidFormFormatException.java rename to src/main/java/com/codesdream/ase/exception/innerservererror/InvalidFormFormatException.java index be25439..fc49abb 100644 --- a/src/main/java/com/codesdream/ase/exception/InvalidFormFormatException.java +++ b/src/main/java/com/codesdream/ase/exception/innerservererror/InvalidFormFormatException.java @@ -1,4 +1,4 @@ -package com.codesdream.ase.exception; +package com.codesdream.ase.exception.innerservererror; import lombok.Data; import lombok.EqualsAndHashCode; @@ -7,7 +7,7 @@ import javax.persistence.criteria.CriteriaBuilder; @EqualsAndHashCode(callSuper = true) @Data -public class InvalidFormFormatException extends Throwable { +public class InvalidFormFormatException extends FormatException { private String message = "Invalid form format"; diff --git a/src/main/java/com/codesdream/ase/exception/innerservererror/RuntimeIOException.java b/src/main/java/com/codesdream/ase/exception/innerservererror/RuntimeIOException.java new file mode 100644 index 0000000..df0c511 --- /dev/null +++ b/src/main/java/com/codesdream/ase/exception/innerservererror/RuntimeIOException.java @@ -0,0 +1,10 @@ +package com.codesdream.ase.exception.innerservererror; + +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class RuntimeIOException extends RuntimeException { + public RuntimeIOException(String msg){ + super(msg); + } +} diff --git a/src/main/java/com/codesdream/ase/service/BaseInformationService.java b/src/main/java/com/codesdream/ase/service/BaseInformationService.java index ec287a5..b659029 100644 --- a/src/main/java/com/codesdream/ase/service/BaseInformationService.java +++ b/src/main/java/com/codesdream/ase/service/BaseInformationService.java @@ -2,7 +2,7 @@ package com.codesdream.ase.service; import com.codesdream.ase.component.datamanager.DataTable; import com.codesdream.ase.exception.badrequest.BaseInformationAlreadyExistException; -import com.codesdream.ase.exception.BaseInformationIllegalException; +import com.codesdream.ase.exception.badrequest.BaseInformationIllegalException; import com.codesdream.ase.exception.notfound.BaseInformationNotFoundException; import com.codesdream.ase.model.information.*; import com.codesdream.ase.repository.information.*; diff --git a/src/main/java/com/codesdream/ase/service/IPermissionService.java b/src/main/java/com/codesdream/ase/service/IPermissionService.java index ca8ec6e..fb875ab 100644 --- a/src/main/java/com/codesdream/ase/service/IPermissionService.java +++ b/src/main/java/com/codesdream/ase/service/IPermissionService.java @@ -44,6 +44,10 @@ public interface IPermissionService { // 标签下所有的获得权限容器集合列表 Collection getPCCs(Tag tag); + Set findPCCs(Set pccs); + + Optional findPCC(Integer id); + // 获得范围性权限容器下的所有标签列表 Collection getTagsFromSPC( ScopePermissionContainer spc); diff --git a/src/main/java/com/codesdream/ase/service/PermissionService.java b/src/main/java/com/codesdream/ase/service/PermissionService.java index 918c7f2..6ddea4f 100644 --- a/src/main/java/com/codesdream/ase/service/PermissionService.java +++ b/src/main/java/com/codesdream/ase/service/PermissionService.java @@ -110,6 +110,22 @@ public class PermissionService implements IPermissionService { return new ArrayList<>(tag.getPermissionContainersCollections()); } + @Override + public Set findPCCs(Set pccs) { + Set set = new HashSet<>(); + for(Integer id : pccs){ + Optional pcc = findPCC(id); + if(!pcc.isPresent()) throw new NotFoundException(String.format("PCCId: %d",id)); + set.add(pcc.get()); + } + return set; + } + + @Override + public Optional findPCC(Integer id) { + return pccRepository.findById(id); + } + @Override public Collection getTagsFromSPC(ScopePermissionContainer spc) { return new ArrayList<>(spc.getTags()); diff --git a/src/main/java/com/codesdream/ase/service/UserService.java b/src/main/java/com/codesdream/ase/service/UserService.java index f4710e4..da9333b 100644 --- a/src/main/java/com/codesdream/ase/service/UserService.java +++ b/src/main/java/com/codesdream/ase/service/UserService.java @@ -3,7 +3,7 @@ package com.codesdream.ase.service; import com.codesdream.ase.component.auth.ASEPasswordEncoder; import com.codesdream.ase.component.auth.ASEUsernameEncoder; import com.codesdream.ase.component.permission.UserRolesListGenerator; -import com.codesdream.ase.exception.UserInformationIllegalException; +import com.codesdream.ase.exception.badrequest.UserInformationIllegalException; import com.codesdream.ase.exception.notfound.UserNotFoundException; import com.codesdream.ase.exception.badrequest.UsernameAlreadyExistException; import com.codesdream.ase.model.information.BaseStudentInfo; diff --git a/src/main/java/com/codesdream/ase/validator/JSONFormValidator.java b/src/main/java/com/codesdream/ase/validator/JSONFormValidator.java index 79a3c83..a54272c 100644 --- a/src/main/java/com/codesdream/ase/validator/JSONFormValidator.java +++ b/src/main/java/com/codesdream/ase/validator/JSONFormValidator.java @@ -1,8 +1,6 @@ package com.codesdream.ase.validator; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.codesdream.ase.exception.DataIllegalTableFormatException; import org.springframework.stereotype.Component; import java.util.*; diff --git a/src/test/java/com/codesdream/ase/test/JSONFormValidatorTest.java b/src/test/java/com/codesdream/ase/test/JSONFormValidatorTest.java index 11ef842..779f270 100644 --- a/src/test/java/com/codesdream/ase/test/JSONFormValidatorTest.java +++ b/src/test/java/com/codesdream/ase/test/JSONFormValidatorTest.java @@ -2,13 +2,10 @@ package com.codesdream.ase.test; import com.alibaba.fastjson.JSONObject; import com.codesdream.ase.component.ASESpringUtil; -import com.codesdream.ase.component.json.respond.JSONBaseRespondObject; import com.codesdream.ase.configure.ActivityFormConfigure; -import com.codesdream.ase.exception.InvalidFormFormatException; +import com.codesdream.ase.exception.innerservererror.InvalidFormFormatException; import com.codesdream.ase.validator.JSONFormValidator; -import com.fasterxml.jackson.databind.util.JSONPObject; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; From 20a33c3b9ac3e44f9ae5156d0c8a5351c78590b0 Mon Sep 17 00:00:00 2001 From: Saturneric Date: Sun, 29 Mar 2020 17:43:32 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/codesdream/ase/controller/LeavesController.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/codesdream/ase/controller/LeavesController.java b/src/main/java/com/codesdream/ase/controller/LeavesController.java index b4e1d84..ae85621 100644 --- a/src/main/java/com/codesdream/ase/controller/LeavesController.java +++ b/src/main/java/com/codesdream/ase/controller/LeavesController.java @@ -7,11 +7,9 @@ import com.codesdream.ase.component.datamanager.JSONParameter; import com.codesdream.ase.component.json.request.UserLeaveAuth; import com.codesdream.ase.component.json.request.UserLeaveRequest; -import com.codesdream.ase.component.json.request.UserLoginChecker; import com.codesdream.ase.component.json.request.UserSGettudentLeaveListRequest; -import com.codesdream.ase.component.json.respond.JSONBaseRespondObject; import com.codesdream.ase.component.json.respond.JSONStandardFailedRespond; -import com.codesdream.ase.exception.InvalidFormFormatException; +import com.codesdream.ase.exception.innerservererror.InvalidFormFormatException; import com.codesdream.ase.exception.notfound.NotFoundException; import com.codesdream.ase.model.leaves.Leave; import com.codesdream.ase.service.LeavesService; @@ -21,7 +19,6 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.client.HttpClientErrorException; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -49,10 +46,10 @@ public class LeavesController { @Resource private ASEUsernameEncoder usernameEncoder; - @RequestMapping(value = "/") +/* @RequestMapping(value = "/") String printLeave(Model model) { return "Leave"; - } + }*/ //提交请假申请 @RequestMapping(value = "/Leave/check", method = RequestMethod.POST) From b9ddb73f3fb49f71f2fabe4821c0c7a97514c8bb Mon Sep 17 00:00:00 2001 From: yourtree <56780191+yourtree@users.noreply.github.com> Date: Sun, 29 Mar 2020 18:25:02 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=9F=BA=E6=9C=AC=E5=AE=8C=E5=96=84=EF=BC=9B=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=B8=80=E4=BA=9B=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=84=E7=90=86=E5=B7=A5=E5=85=B7FileUtils=EF=BC=8C?= =?UTF-8?q?=E5=AD=98=E6=94=BE=E4=BA=8Ecomponent/activity/=E4=B8=8B?= =?UTF-8?q?=EF=BC=9B=E4=B8=BAActivityCreatorController=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86API=E8=B0=83=E7=94=A8=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/activity/ActivityConverter.java | 47 ++-- .../ase/component/activity/FileUtils.java | 129 ++++++++++ .../ase/component/activity/QrCodeUtils.java | 227 ++++++++++++++++++ .../ActivityAttendanceController.java | 11 + .../activity/ActivityCreatorController.java | 45 ++-- .../controller/activity/QRCodeController.java | 36 +++ .../ase/model/activity/Activity.java | 2 - .../ase/model/activity/Attendance.java | 4 - .../codesdream/ase/model/activity/Period.java | 4 + 9 files changed, 456 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/codesdream/ase/component/activity/FileUtils.java create mode 100644 src/main/java/com/codesdream/ase/component/activity/QrCodeUtils.java create mode 100644 src/main/java/com/codesdream/ase/controller/activity/ActivityAttendanceController.java create mode 100644 src/main/java/com/codesdream/ase/controller/activity/QRCodeController.java diff --git a/src/main/java/com/codesdream/ase/component/activity/ActivityConverter.java b/src/main/java/com/codesdream/ase/component/activity/ActivityConverter.java index 67c90b9..9706a9a 100644 --- a/src/main/java/com/codesdream/ase/component/activity/ActivityConverter.java +++ b/src/main/java/com/codesdream/ase/component/activity/ActivityConverter.java @@ -15,7 +15,6 @@ import javafx.util.converter.LocalDateTimeStringConverter; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -24,9 +23,6 @@ import java.util.*; @Component public class ActivityConverter { - @Resource - ActivityService activityService; - @Resource UserService userService; @@ -43,14 +39,14 @@ public class ActivityConverter { Activity activity = new Activity(); JSONObject jsonObject = json.get(); - String username = (String) jsonObject.get("creator"); - Optional creator = userService.findUserByUsername(username); + int userId = (int) jsonObject.get("creator"); + Optional creator = userService.findUserById(userId); activity.setCreator(creator.get()); - List participateGroupFromJson = (List) jsonObject.get("participate-group"); + List participateGroupFromJson = (List) jsonObject.get("participate-group"); Set participateGroup = new HashSet<>(); - for (String name : participateGroupFromJson) { - Optional user = userService.findUserByUsername(name); + for (int id : participateGroupFromJson) { + Optional user = userService.findUserById(id); participateGroup.add(user.get()); } activity.setParticipateGroup(participateGroup); @@ -58,14 +54,14 @@ public class ActivityConverter { String title = (String) jsonObject.get("title"); activity.setTitle(title); - String chiefManagerName = (String) jsonObject.get("chief-manager"); - Optional chiefManager = userService.findUserByUsername(chiefManagerName); + int chiefManagerId = (int) jsonObject.get("chief-manager"); + Optional chiefManager = userService.findUserById(chiefManagerId); activity.setChiefManager(chiefManager.get()); - List assistManagerFromJSON = (List) jsonObject.get("assist-manager"); + List assistManagersFromJSON = (List) jsonObject.get("assist-managers"); Set assistManager = new HashSet<>(); - for (String name : assistManagerFromJSON) { - Optional user = userService.findUserByUsername(name); + for (int id : assistManagersFromJSON) { + Optional user = userService.findUserById(id); assistManager.add(user.get()); } activity.setAssistManagers(assistManager); @@ -88,26 +84,31 @@ public class ActivityConverter { String description = (String) jsonObject.get("description"); activity.setDescription(description); - List signGroupFromJSON = (List) jsonObject.get("sign-group"); + List signGroupFromJSON = (List) jsonObject.get("sign-group"); Set signGroup = new HashSet<>(); - for (String name : signGroupFromJSON) { - Optional user = userService.findUserByUsername(name); + for (int id : signGroupFromJSON) { + Optional user = userService.findUserById(id); signGroup.add(user.get()); } activity.setSignGroup(signGroup); - List informGroupFromJSON = (List) jsonObject.get("inform-group"); + List informGroupFromJSON = (List) jsonObject.get("inform-group"); + if (informGroupFromJSON == null) { + participateGroupFromJson.removeAll(signGroupFromJSON); + participateGroupFromJson.addAll(signGroupFromJSON); + informGroupFromJSON = participateGroupFromJson; + } Set informGroup = new HashSet<>(); - for (String name : informGroupFromJSON) { - Optional user = userService.findUserByUsername(name); + for (int id : informGroupFromJSON) { + Optional user = userService.findUserById(id); informGroup.add(user.get()); } activity.setInformGroup(informGroup); - List visibleGroupFromJSON = (List) jsonObject.get("visible-group"); + List visibleGroupFromJSON = (List) jsonObject.get("visible-group"); Set visibleGroup = new HashSet<>(); - for (String name : visibleGroupFromJSON) { - Optional user = userService.findUserByUsername(name); + for (int id : visibleGroupFromJSON) { + Optional user = userService.findUserById(id); visibleGroup.add(user.get()); } activity.setVisibleGroup(informGroup); diff --git a/src/main/java/com/codesdream/ase/component/activity/FileUtils.java b/src/main/java/com/codesdream/ase/component/activity/FileUtils.java new file mode 100644 index 0000000..656d3d2 --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/activity/FileUtils.java @@ -0,0 +1,129 @@ +package com.codesdream.ase.component.activity; + +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.imageio.ImageIO; +import javax.imageio.stream.ImageOutputStream; +import java.awt.image.BufferedImage; +import java.io.*; + +@Component +public class FileUtils { + /** + * 得到图片字节流 数组大小 + */ + public static byte[] readStream(InputStream inStream) throws Exception { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len = -1; + while ((len = inStream.read(buffer)) != -1) { + outStream.write(buffer, 0, len); + } + outStream.close(); + inStream.close(); + return outStream.toByteArray(); + } + + /** + * 将文件转换成Byte数组 + * + * @param file + * @return + */ + public static byte[] getBytesByFile(File file) { + try { + FileInputStream fis = new FileInputStream(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(1000); + byte[] b = new byte[1000]; + int n; + while ((n = fis.read(b)) != -1) { + bos.write(b, 0, n); + } + fis.close(); + byte[] data = bos.toByteArray(); + bos.close(); + return data; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * MultipartFile转File + * + * @param param + * @return + */ + public static File transfer(MultipartFile param) { + if (!param.isEmpty()) { + File file = null; + try { + InputStream in = param.getInputStream(); + file = new File(param.getOriginalFilename()); + OutputStream out = new FileOutputStream(file); + int bytesRead = 0; + byte[] buffer = new byte[8192]; + while ((bytesRead = in.read(buffer, 0, 8192)) != -1) { + out.write(buffer, 0, bytesRead); + } + in.close(); + out.close(); + return file; + } catch (Exception e) { + e.printStackTrace(); + return file; + } + } + return null; + } + + /** + * 获取指定文件的输入流 + * + * @param logoPath 文件的路径 + * @return + */ + public static InputStream getResourceAsStream(String logoPath) { + return FileUtils.class.getResourceAsStream(logoPath); + } + + /** + * 将InputStream写入到File中 + * + * @param ins + * @param file + * @throws IOException + */ + public void inputStreamToFile(InputStream ins, File file) throws IOException { + OutputStream os = new FileOutputStream(file); + int bytesRead = 0; + byte[] buffer = new byte[8192]; + while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.close(); + ins.close(); + } + + /** + * 将图片转化成输入流 + * + * @param image 图片 + * @return inputStream 图片转化之后的输入流 + */ + public static InputStream getImageStream(BufferedImage image) { + InputStream inputStream = null; + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + ImageOutputStream imageOutputStream; + try { + imageOutputStream = ImageIO.createImageOutputStream(byteArrayOutputStream); + ImageIO.write(image, "jpg", imageOutputStream); + inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); + } catch (IOException e) { + e.printStackTrace(); + } + return inputStream; + } +} diff --git a/src/main/java/com/codesdream/ase/component/activity/QrCodeUtils.java b/src/main/java/com/codesdream/ase/component/activity/QrCodeUtils.java new file mode 100644 index 0000000..4389f67 --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/activity/QrCodeUtils.java @@ -0,0 +1,227 @@ +package com.codesdream.ase.component.activity; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; +import jdk.internal.util.xml.impl.Input; +import org.springframework.stereotype.Component; + +import javax.imageio.ImageIO; +import javax.imageio.stream.ImageOutputStream; +import java.awt.*; +import java.awt.geom.RoundRectangle2D; +import java.awt.image.BufferedImage; +import java.io.*; +import java.util.Hashtable; +import java.util.Random; + +/** + * 二维码生成工具类 + */ +@Component +public class QrCodeUtils { + private static final String CHARSET = "utf-8"; + public static final String FORMAT = "JPG"; + // 二维码尺寸 + private static final int QRCODE_SIZE = 300; + // LOGO宽度 + private static final int LOGO_WIDTH = 60; + // LOGO高度 + private static final int LOGO_HEIGHT = 60; + + /** + * 生成二维码 + * + * @param content 二维码内容 + * @param logoPath logo地址 + * @param needCompress 是否压缩logo + * @return 图片 + * @throws Exception + */ + public static BufferedImage createImage(String content, String logoPath, boolean needCompress) throws Exception { + Hashtable hints = new Hashtable<>(); + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + hints.put(EncodeHintType.CHARACTER_SET, CHARSET); + hints.put(EncodeHintType.MARGIN, 1); + BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, + hints); + int width = bitMatrix.getWidth(); + int height = bitMatrix.getHeight(); + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); + } + } + if (logoPath == null || "".equals(logoPath)) { + return image; + } + // 插入图片 + QrCodeUtils.insertImage(image, logoPath, needCompress); + return image; + } + + /** + * 插入LOGO + * + * @param source 二维码图片 + * @param logoPath LOGO图片地址 + * @param needCompress 是否压缩 + * @throws IOException + */ + private static void insertImage(BufferedImage source, String logoPath, boolean needCompress) throws IOException { + InputStream inputStream = null; + try { + inputStream = FileUtils.getResourceAsStream(logoPath); + Image src = ImageIO.read(inputStream); + int width = src.getWidth(null); + int height = src.getHeight(null); + if (needCompress) { // 压缩LOGO + if (width > LOGO_WIDTH) { + width = LOGO_WIDTH; + } + if (height > LOGO_HEIGHT) { + height = LOGO_HEIGHT; + } + Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH); + BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + Graphics g = tag.getGraphics(); + g.drawImage(image, 0, 0, null); // 绘制缩小后的图 + g.dispose(); + src = image; + } + // 插入LOGO + Graphics2D graph = source.createGraphics(); + int x = (QRCODE_SIZE - width) / 2; + int y = (QRCODE_SIZE - height) / 2; + graph.drawImage(src, x, y, width, height, null); + Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6); + graph.setStroke(new BasicStroke(3f)); + graph.draw(shape); + graph.dispose(); + } catch (IOException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } finally { + if (inputStream != null) { + inputStream.close(); + } + } + } + + /** + * 生成二维码(内嵌LOGO) + * 二维码文件名随机,文件名可能会有重复 + * + * @param content 内容 + * @param logoPath LOGO地址 + * @param destPath 存放目录 + * @param needCompress 是否压缩LOGO + * @throws Exception + */ + public static String encode(String content, String logoPath, String destPath, boolean needCompress) throws Exception { + BufferedImage image = QrCodeUtils.createImage(content, logoPath, needCompress); + mkdirs(destPath); + String fileName = new Random().nextInt(99999999) + "." + FORMAT.toLowerCase(); + ImageIO.write(image, FORMAT, new File(destPath + "/" + fileName)); + return fileName; + } + + /** + * 生成二维码(内嵌LOGO) + * 调用者指定二维码文件名 + * + * @param content 内容 + * @param logoPath LOGO地址 + * @param destPath 存放目录 + * @param fileName 二维码文件名 + * @param needCompress 是否压缩LOGO + * @throws Exception + */ + public static String encode(String content, String logoPath, String destPath, String fileName, boolean needCompress) throws Exception { + BufferedImage image = QrCodeUtils.createImage(content, logoPath, needCompress); + mkdirs(destPath); + fileName = fileName.substring(0, fileName.indexOf(".") > 0 ? fileName.indexOf(".") : fileName.length()) + + "." + FORMAT.toLowerCase(); + ImageIO.write(image, FORMAT, new File(destPath + "/" + fileName)); + return fileName; + } + + /** + * 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir. + * (mkdir如果父目录不存在则会抛出异常) + * + * @param destPath 存放目录 + */ + public static void mkdirs(String destPath) { + File file = new File(destPath); + if (!file.exists() && !file.isDirectory()) { + file.mkdirs(); + } + } + + /** + * 生成二维码(内嵌LOGO) + * + * @param content 内容 + * @param logoPath LOGO地址 + * @param destPath 存储地址 + * @throws Exception + */ + public static String encode(String content, String logoPath, String destPath) throws Exception { + return QrCodeUtils.encode(content, logoPath, destPath, false); + } + + /** + * 生成二维码 + * + * @param content 内容 + * @param destPath 存储地址 + * @param needCompress 是否压缩LOGO + * @throws Exception + */ + public static String encode(String content, String destPath, boolean needCompress) throws Exception { + return QrCodeUtils.encode(content, null, destPath, needCompress); + } + + /** + * 生成二维码 + * + * @param content 内容 + * @param destPath 存储地址 + * @throws Exception + */ + public static String encode(String content, String destPath) throws Exception { + return QrCodeUtils.encode(content, null, destPath, false); + } + + /** + * 生成二维码(内嵌LOGO) + * + * @param content 内容 + * @param logoPath LOGO地址 + * @param output 输出流 + * @param needCompress 是否压缩LOGO + * @throws Exception + */ + public static void encode(String content, String logoPath, OutputStream output, boolean needCompress) + throws Exception { + BufferedImage image = QrCodeUtils.createImage(content, logoPath, needCompress); + ImageIO.write(image, FORMAT, output); + } + + /** + * 生成二维码 + * + * @param content 内容 + * @param output 输出流 + * @throws Exception + */ + public static void encode(String content, OutputStream output) throws Exception { + QrCodeUtils.encode(content, null, output, false); + } + + +} diff --git a/src/main/java/com/codesdream/ase/controller/activity/ActivityAttendanceController.java b/src/main/java/com/codesdream/ase/controller/activity/ActivityAttendanceController.java new file mode 100644 index 0000000..29d8d83 --- /dev/null +++ b/src/main/java/com/codesdream/ase/controller/activity/ActivityAttendanceController.java @@ -0,0 +1,11 @@ +package com.codesdream.ase.controller.activity; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +import javax.annotation.Resource; + +@Controller +public class ActivityAttendanceController { + +} diff --git a/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java b/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java index ad6e384..41ff673 100644 --- a/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java +++ b/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java @@ -12,23 +12,22 @@ import com.codesdream.ase.model.activity.Activity; import com.codesdream.ase.model.activity.UserActivity; import com.codesdream.ase.model.permission.User; import com.codesdream.ase.repository.activity.UserActivityRepository; -import com.codesdream.ase.repository.permission.UserRepository; import com.codesdream.ase.service.ActivityService; +import com.codesdream.ase.service.UserService; import com.codesdream.ase.validator.ActivityValidator; import com.codesdream.ase.validator.NullValueValidator; import com.codesdream.ase.validator.JSONFormValidator; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.InvocationTargetException; import java.util.List; -import java.util.Map; import java.util.Optional; @Controller @@ -59,7 +58,7 @@ public class ActivityCreatorController { ActivityValidator activityValidator; @Resource - UserRepository userRepository; + UserService userService; @Resource UserActivityRepository userActivityRepository; @@ -69,12 +68,25 @@ public class ActivityCreatorController { private final String url = "/forget/activity"; - @RequestMapping(value = url + "/activity_creator") - String activityCreatorView(Model model){return "activity_creator";} - @PostMapping(value = url + "/activity_creator") @ResponseBody + @ApiOperation(value = "创建活动", notes = "所有有关用户的数据传递均使用id,类型为int") + @ApiImplicitParams({ + @ApiImplicitParam(name = "title", value = "活动标题", required = true), + @ApiImplicitParam(name = "type", value = "活动类型", required = true), + @ApiImplicitParam(name = "start-time", value = "活动开始时间,格式为yyyy-MM-dd HH:mm:ss", required = true), + @ApiImplicitParam(name = "end-time", value = "活动结束时间,格式为yyyy-MM-dd HH:mm:ss", required = true), + @ApiImplicitParam(name = "chief-manager", value = "主要负责人", required = true), + @ApiImplicitParam(name = "assist-managers", value = "次要负责人"), + @ApiImplicitParam(name = "description", value = "活动描述"), + @ApiImplicitParam(name = "cycle", value = "活动周期,格式为阿拉伯数字数字+单位,0表示无周期"), + @ApiImplicitParam(name = "participate-group", value = "预定参与人员"), + @ApiImplicitParam(name = "sign-group", value = "可参与人员"), + @ApiImplicitParam(name = "inform-group", value = "通知人群,若为空,则默认为预定参与人员和可报名人员的并集"), + @ApiImplicitParam(name = "visible-group", value = "活动可见人群,若为空,则默认为负责人、活动创建者预定参和可报名人员以及通知人员的并集"), + @ApiImplicitParam(name = "remind-time", defaultValue = "30m", value = "活动提醒时间,格式为数字+单位,可接受的单位从大到小有:w,d,h,m,s"), + }) String activityCreator(HttpServletRequest request) throws InvalidFormFormatException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { JSONObject error = new JSONObject(); @@ -82,19 +94,16 @@ public class ActivityCreatorController { Optional json = jsonParameter.getJSONByRequest(request); if (!json.isPresent()) return jsonParameter.getJSONString(new JSONStandardFailedRespond()); - //WebFormValidator webFormValidator = aseSpringUtil.getBean(WebFormValidator.class); List formatCheckResult = jsonFormValidator.check(activityFormConfigure.getStdActivityForm(), json.get()); + if (!formatCheckResult.isEmpty()) { error.put("error", formatCheckResult); return error.toJSONString(); } // 需要检查JSON是否合法 - Activity activity = activityConverter.convertToActivity(json); - - //NullValueValidator nullValueValidator = aseSpringUtil.getBean(NullValueValidator.class); List nullValues = nullValueValidator.checkNullValues(activity); - //= aseSpringUtil.getBean(NullValueAttributes.class); + for (String str : nullValues){ if(str.equals("title")){ nullValueAttributes.getNullValueAttributes().add("title"); @@ -113,9 +122,8 @@ public class ActivityCreatorController { } } //如果为空,存下此活动并跳转至成功创建页面 - if(nullValueAttributes.getNullValueAttributes().isEmpty()){ + if (!nullValueAttributes.getNullValueAttributes().isEmpty()) { - //ActivityValidator activityValidator = aseSpringUtil.getBean(ActivityValidator.class); String[] errorParameters = activityValidator.check(json); if(errorParameters != null){ JSONObject invalidParameters = new JSONObject(); @@ -124,12 +132,9 @@ public class ActivityCreatorController { } else{ - //UserRepository userRepository = aseSpringUtil.getBean(UserRepository.class); - //activityService = aseSpringUtil.getBean(ActivityService.class); activity = activityService.createActivity(activity); String username = json.get().get("creator").toString(); - Optional user = userRepository.findByUsername(username); - //UserActivityRepository userActivityRepository = aseSpringUtil.getBean(UserActivityRepository.class); + Optional user = userService.findUserByUsername(username); UserActivity userActivity = userActivityRepository.findByUser(user.get()); userActivity.getCreatedActivities().add(activity); userActivityRepository.save(userActivity); diff --git a/src/main/java/com/codesdream/ase/controller/activity/QRCodeController.java b/src/main/java/com/codesdream/ase/controller/activity/QRCodeController.java new file mode 100644 index 0000000..3c5d7d0 --- /dev/null +++ b/src/main/java/com/codesdream/ase/controller/activity/QRCodeController.java @@ -0,0 +1,36 @@ +package com.codesdream.ase.controller.activity; + +import com.codesdream.ase.component.activity.QrCodeUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; + +@Controller +public class QRCodeController { + + /** + * 二维码 + * + * @param request + * @param response + */ + @GetMapping("/qrcode") + public void qrCode(HttpServletRequest request, HttpServletResponse response) { + StringBuffer url = request.getRequestURL(); + // 域名 + String tempContextUrl = url.delete(url.length() - request.getRequestURI().length(), url.length()).append("/").toString(); + + // 再加上请求链接 + String requestUrl = tempContextUrl + "/index"; + try { + OutputStream os = response.getOutputStream(); + QrCodeUtils.encode(requestUrl, "", os, true); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/codesdream/ase/model/activity/Activity.java b/src/main/java/com/codesdream/ase/model/activity/Activity.java index 4da4f56..a99a6e6 100644 --- a/src/main/java/com/codesdream/ase/model/activity/Activity.java +++ b/src/main/java/com/codesdream/ase/model/activity/Activity.java @@ -2,8 +2,6 @@ package com.codesdream.ase.model.activity; import com.codesdream.ase.model.permission.User; import lombok.Data; -import lombok.EqualsAndHashCode; -import org.springframework.security.core.parameters.P; import javax.persistence.*; import java.time.LocalDateTime; diff --git a/src/main/java/com/codesdream/ase/model/activity/Attendance.java b/src/main/java/com/codesdream/ase/model/activity/Attendance.java index e37c93d..d72852c 100644 --- a/src/main/java/com/codesdream/ase/model/activity/Attendance.java +++ b/src/main/java/com/codesdream/ase/model/activity/Attendance.java @@ -15,10 +15,6 @@ public class Attendance { @GeneratedValue(strategy = GenerationType.AUTO) private int id; - //二维码url - @Column(name = "qr_code")//, nullable = false, unique = true) - private String QRCode; - //是否在线 @Column(name = "is_online")//, nullable = false) private boolean isOnline; diff --git a/src/main/java/com/codesdream/ase/model/activity/Period.java b/src/main/java/com/codesdream/ase/model/activity/Period.java index 3e39829..c0ec4d7 100644 --- a/src/main/java/com/codesdream/ase/model/activity/Period.java +++ b/src/main/java/com/codesdream/ase/model/activity/Period.java @@ -1,5 +1,7 @@ package com.codesdream.ase.model.activity; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -18,10 +20,12 @@ public class Period { private int id; //开始时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Column(name = "start_time")//, nullable = false) private LocalDateTime startTime = LocalDateTime.of(2020,2,18,16,36); //结束时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Column(name = "end_time")//, nullable = false) private LocalDateTime endTime = LocalDateTime.of(2020,2,18,16,37); From 751dface4ea876ab65ddc80ec28d34adaa87027b Mon Sep 17 00:00:00 2001 From: chuyan <1047381936@qq.com> Date: Sun, 29 Mar 2020 18:28:55 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ase/controller/activity/ActivityCreatorController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java b/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java index 41ff673..35b4743 100644 --- a/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java +++ b/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java @@ -7,7 +7,7 @@ import com.codesdream.ase.component.activity.NullValueAttributes; import com.codesdream.ase.component.datamanager.JSONParameter; import com.codesdream.ase.component.json.respond.JSONStandardFailedRespond; import com.codesdream.ase.configure.ActivityFormConfigure; -import com.codesdream.ase.exception.InvalidFormFormatException; +import com.codesdream.ase.exception.innerservererror.InvalidFormFormatException; import com.codesdream.ase.model.activity.Activity; import com.codesdream.ase.model.activity.UserActivity; import com.codesdream.ase.model.permission.User;