From f13b30b4b7e5e7251fec524ee9b475c288dd7243 Mon Sep 17 00:00:00 2001 From: chuyan <1047381936@qq.com> Date: Sun, 15 Mar 2020 19:59:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=B4=BB=E5=8A=A8controller?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A5=E5=8F=8A=E6=B5=8B=E8=AF=95=E3=80=82?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=A0=A1=E9=AA=8C=E5=99=A8=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E3=80=82activity=E7=B3=BB=E7=BB=9Fbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/activity/CurrentUserGetter.java | 26 +++ .../activity/NullValueAttributes.java | 12 ++ .../ase/controller/ActivityController.java | 82 ---------- .../activity/ActivityCreatorController.java | 148 ++++++++++++++++++ .../activity/ActivityViewerController.java | 1 - .../ase/exception/UserNotFoundException.java | 7 +- .../ase/model/activity/Activity.java | 5 +- .../ase/model/activity/UserActivity.java | 2 +- .../activity/UserActivityRepository.java | 14 ++ .../ase/validator/ActivityValidator.java | 17 ++ .../ase/validator/WebFormValidator.java | 2 +- 11 files changed, 228 insertions(+), 88 deletions(-) create mode 100644 src/main/java/com/codesdream/ase/component/activity/CurrentUserGetter.java create mode 100644 src/main/java/com/codesdream/ase/component/activity/NullValueAttributes.java delete mode 100644 src/main/java/com/codesdream/ase/controller/ActivityController.java create mode 100644 src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java create mode 100644 src/main/java/com/codesdream/ase/repository/activity/UserActivityRepository.java create mode 100644 src/main/java/com/codesdream/ase/validator/ActivityValidator.java diff --git a/src/main/java/com/codesdream/ase/component/activity/CurrentUserGetter.java b/src/main/java/com/codesdream/ase/component/activity/CurrentUserGetter.java new file mode 100644 index 0000000..cfebcbc --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/activity/CurrentUserGetter.java @@ -0,0 +1,26 @@ +package com.codesdream.ase.component.activity; + +import com.codesdream.ase.component.ASESpringUtil; +import com.codesdream.ase.model.permission.User; +import com.codesdream.ase.repository.permission.UserRepository; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.security.Principal; +import java.util.Optional; + +//获取当前用户的用户名 +@Component +public class CurrentUserGetter { + private Optional user; + public Optional getCurrentUser(HttpServletRequest request){ + + Principal principal = request.getUserPrincipal(); + String username = principal.getName(); + ASESpringUtil aseSpringUtil = new ASESpringUtil(); + UserRepository userRepository = aseSpringUtil.getBean(UserRepository.class); + this.user = userRepository.findByUsername(username); + return this.user; + } + +} diff --git a/src/main/java/com/codesdream/ase/component/activity/NullValueAttributes.java b/src/main/java/com/codesdream/ase/component/activity/NullValueAttributes.java new file mode 100644 index 0000000..dcd93ea --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/activity/NullValueAttributes.java @@ -0,0 +1,12 @@ +package com.codesdream.ase.component.activity; + +import lombok.Data; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Data +@Component +public class NullValueAttributes { + private List nullValueAttributes; +} diff --git a/src/main/java/com/codesdream/ase/controller/ActivityController.java b/src/main/java/com/codesdream/ase/controller/ActivityController.java deleted file mode 100644 index cc214a0..0000000 --- a/src/main/java/com/codesdream/ase/controller/ActivityController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.codesdream.ase.controller; - -import com.alibaba.fastjson.JSONObject; -import com.codesdream.ase.component.ASESpringUtil; -import com.codesdream.ase.component.activity.NullValueAttributes; -import com.codesdream.ase.component.datamanager.JSONParameter; -import com.codesdream.ase.configure.ActivityFormConfigure; -import com.codesdream.ase.exception.InvalidFormFormatException; -import com.codesdream.ase.exception.LackOfActivityInformation; -import com.codesdream.ase.model.activity.Activity; -import com.codesdream.ase.service.ActivityService; -import com.codesdream.ase.validator.NullValueValidator; -import com.codesdream.ase.validator.WebFormValidator; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.validation.constraints.Null; -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -@Controller -public class ActivityController { - - @Resource - ActivityService activityService; - - @Resource - JSONParameter jsonParameter; - - - - @RequestMapping(value = "/activity_creator") - String activityCreatorView(Model model){return "activity_creator";} - - @PostMapping(value = "/activity_creator") - String activityCreator(Model model, HttpServletRequest request) throws InvalidFormFormatException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { - - Map parameterMap = request.getParameterMap(); - ASESpringUtil aseSpringUtil = new ASESpringUtil(); - ActivityFormConfigure activityFormConfigure = aseSpringUtil.getBean(ActivityFormConfigure.class); - WebFormValidator webFormValidator = aseSpringUtil.getBean(WebFormValidator.class); - if(!webFormValidator.check(activityFormConfigure.getStdActivityForm(), parameterMap)) { - throw new InvalidFormFormatException("Invalid activity form."); - } - // 需要检查JSON是否合法 - Optional jsonObject = jsonParameter.getJSONByRequest(request); - if(!jsonObject.isPresent()) return "error"; - Activity activity = jsonObject.get().toJavaObject(Activity.class); - - NullValueValidator nullValueValidator = aseSpringUtil.getBean(NullValueValidator.class); - List nullValues = nullValueValidator.checkNullValues(activity); - NullValueAttributes nullValueAttributes = aseSpringUtil.getBean(NullValueAttributes.class); - for (String str : nullValues){ - if(str.equals("title")){ - nullValueAttributes.getNullValueAttributes().add("title"); - } - else if(str.equals("creator")){ - nullValueAttributes.getNullValueAttributes().add("creator"); - } - else if(str.equals("type")){ - nullValueAttributes.getNullValueAttributes().add("type"); - } - else if(str.equals("planPeriod")){ - nullValueAttributes.getNullValueAttributes().add("planPeriod"); - } - else if(str.equals("chiefManager")){ - nullValueAttributes.getNullValueAttributes().add("chiefManager"); - } - } - - return "act_created"; - } -} - - diff --git a/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java b/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java new file mode 100644 index 0000000..25f1d4b --- /dev/null +++ b/src/main/java/com/codesdream/ase/controller/activity/ActivityCreatorController.java @@ -0,0 +1,148 @@ +package com.codesdream.ase.controller.activity; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.codesdream.ase.component.ASESpringUtil; +import com.codesdream.ase.component.activity.NullValueAttributes; +import com.codesdream.ase.component.datamanager.JSONParameter; +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.UserNotFoundException; +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.validator.ActivityValidator; +import com.codesdream.ase.validator.NullValueValidator; +import com.codesdream.ase.validator.WebFormValidator; +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 +public class ActivityCreatorController { + + @Resource + ActivityService activityService; + + @Resource + JSONParameter jsonParameter; + + @Resource + ASESpringUtil aseSpringUtil; + + @Resource + ActivityFormConfigure activityFormConfigure; + + @Resource + WebFormValidator webFormValidator; + + @Resource + NullValueValidator nullValueValidator; + + @Resource + NullValueAttributes nullValueAttributes; + + @Resource + ActivityValidator activityValidator; + + @Resource + UserRepository userRepository; + + @Resource + UserActivityRepository userActivityRepository; + + private final String url = "/forget/activity"; + + @RequestMapping(value = url + "/activity_creator") + String activityCreatorView(Model model){return "activity_creator";} + + + @PostMapping(value = url + "/activity_creator") + @ResponseBody + String activityCreator(@RequestBody JSONObject jsonParam, Model model, HttpServletRequest request) throws InvalidFormFormatException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { + + JSONObject error = new JSONObject(); + + Map parameterMap = request.getParameterMap(); + aseSpringUtil = new ASESpringUtil(); + //WebFormValidator webFormValidator = aseSpringUtil.getBean(WebFormValidator.class); + if(!webFormValidator.check(activityFormConfigure.getStdActivityForm(), parameterMap)) { + error.put("error", "Invalid form format"); + return error.toJSONString(); + } + // 需要检查JSON是否合法 + Optional jsonObject = jsonParameter.getJSONByRequest(request); + if(!jsonObject.isPresent()){ + error.put("error", "Invalid type."); + return error.toJSONString(); + } + Activity activity = jsonObject.get().toJavaObject(Activity.class); + + //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"); + } + else if(str.equals("creator")){ + nullValueAttributes.getNullValueAttributes().add("creator"); + } + else if(str.equals("type")){ + nullValueAttributes.getNullValueAttributes().add("type"); + } + else if(str.equals("planPeriod")){ + nullValueAttributes.getNullValueAttributes().add("planPeriod"); + } + else if(str.equals("chiefManager")){ + nullValueAttributes.getNullValueAttributes().add("chiefManager"); + } + } + //如果为空,存下此活动并跳转至成功创建页面 + if(nullValueAttributes.getNullValueAttributes().isEmpty()){ + + //ActivityValidator activityValidator = aseSpringUtil.getBean(ActivityValidator.class); + String[] errorParameters = activityValidator.check(parameterMap); + if(errorParameters != null){ + JSONObject invalidParameters = new JSONObject(); + invalidParameters.put("invalid_parameters", errorParameters); + return invalidParameters.toJSONString(); + + } + else{ + //UserRepository userRepository = aseSpringUtil.getBean(UserRepository.class); + //activityService = aseSpringUtil.getBean(ActivityService.class); + activity = activityService.createActivity(activity); + String username = parameterMap.get("creator")[0]; + Optional user = userRepository.findByUsername(username); + //UserActivityRepository userActivityRepository = aseSpringUtil.getBean(UserActivityRepository.class); + UserActivity userActivity = userActivityRepository.findByUser(user.get()); + userActivity.getCreatedActivities().add(activity); + userActivityRepository.save(userActivity); + } + } + //否则返回一个JSON对象给前端,此处应该是JSP页面,动态标红 + else{ + JSONObject nullParameters = new JSONObject(); + nullParameters.put("null_values",nullValueAttributes.getNullValueAttributes()); + return nullParameters.toJSONString(); + } + return url + "/act_created"; + } +} + + diff --git a/src/main/java/com/codesdream/ase/controller/activity/ActivityViewerController.java b/src/main/java/com/codesdream/ase/controller/activity/ActivityViewerController.java index 91a112d..e6df04e 100644 --- a/src/main/java/com/codesdream/ase/controller/activity/ActivityViewerController.java +++ b/src/main/java/com/codesdream/ase/controller/activity/ActivityViewerController.java @@ -13,7 +13,6 @@ import org.springframework.web.bind.annotation.RequestMethod; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.security.Principal; -import java.util.List; @Controller public class ActivityViewerController { diff --git a/src/main/java/com/codesdream/ase/exception/UserNotFoundException.java b/src/main/java/com/codesdream/ase/exception/UserNotFoundException.java index f0d38e3..c721ae9 100644 --- a/src/main/java/com/codesdream/ase/exception/UserNotFoundException.java +++ b/src/main/java/com/codesdream/ase/exception/UserNotFoundException.java @@ -8,10 +8,15 @@ import lombok.EqualsAndHashCode; public class UserNotFoundException extends RuntimeException { Integer id; String username; - + String message; public UserNotFoundException(Integer id, String username){ super(); this.id = id; this.username = username; } + + public UserNotFoundException(String message){ + super(); + this.message = message; + } } 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 6359756..4da4f56 100644 --- a/src/main/java/com/codesdream/ase/model/activity/Activity.java +++ b/src/main/java/com/codesdream/ase/model/activity/Activity.java @@ -129,6 +129,7 @@ public class Activity { //计划开始时间 @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(nullable = false) private Period planPeriod; //实际开始时间 @@ -154,11 +155,11 @@ public class Activity { private Set assistManagers; //是否开始 - @Column//(name = "is_on", nullable = false) + @Column(name = "is_on", nullable = false) boolean isOn; //是否结束 - @Column//(name = "is_off", nullable = false) + @Column(name = "is_off", nullable = false) boolean isOff; //考勤安排 diff --git a/src/main/java/com/codesdream/ase/model/activity/UserActivity.java b/src/main/java/com/codesdream/ase/model/activity/UserActivity.java index b1acab7..01add89 100644 --- a/src/main/java/com/codesdream/ase/model/activity/UserActivity.java +++ b/src/main/java/com/codesdream/ase/model/activity/UserActivity.java @@ -18,7 +18,7 @@ public class UserActivity { //关联的用户 @OneToOne(cascade = {CascadeType.MERGE, CascadeType.DETACH, CascadeType.PERSIST}, fetch = FetchType.LAZY, mappedBy = "userActivity") - @JoinColumn(nullable = false) + @JoinColumn(nullable = false, unique = true) private User user; //主要负责的活动 diff --git a/src/main/java/com/codesdream/ase/repository/activity/UserActivityRepository.java b/src/main/java/com/codesdream/ase/repository/activity/UserActivityRepository.java new file mode 100644 index 0000000..80ff99c --- /dev/null +++ b/src/main/java/com/codesdream/ase/repository/activity/UserActivityRepository.java @@ -0,0 +1,14 @@ +package com.codesdream.ase.repository.activity; + +import com.codesdream.ase.model.activity.UserActivity; +import com.codesdream.ase.model.permission.User; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface UserActivityRepository extends CrudRepository { + + UserActivity findByUser(User user); +} diff --git a/src/main/java/com/codesdream/ase/validator/ActivityValidator.java b/src/main/java/com/codesdream/ase/validator/ActivityValidator.java new file mode 100644 index 0000000..2d8b4bf --- /dev/null +++ b/src/main/java/com/codesdream/ase/validator/ActivityValidator.java @@ -0,0 +1,17 @@ +package com.codesdream.ase.validator; + +import com.codesdream.ase.model.activity.Activity; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +//检查当前活动各属性值是否合法(存在) +@Component +public class ActivityValidator { + + public String[] check(Map parameterMap){ + return null; + } +} diff --git a/src/main/java/com/codesdream/ase/validator/WebFormValidator.java b/src/main/java/com/codesdream/ase/validator/WebFormValidator.java index e710ce3..6ffaac0 100644 --- a/src/main/java/com/codesdream/ase/validator/WebFormValidator.java +++ b/src/main/java/com/codesdream/ase/validator/WebFormValidator.java @@ -11,7 +11,7 @@ public class WebFormValidator { public boolean check(Collection stdForm, Map webFormMap){ Collection webForm = webFormMap.keySet(); - if(stdForm.containsAll(webForm)){ + if(webForm.containsAll(stdForm)){ return true; } return false;