From 4f0c2f04a5b8eae5d588d55a4ab68bceb88cdb7c Mon Sep 17 00:00:00 2001 From: wxz Date: Wed, 6 Sep 2023 10:21:51 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E6=BB=A1=E6=84=8F=E5=BA=A6?= =?UTF-8?q?=E9=97=AE=E5=8D=B7=E6=8F=90=E4=BA=A4=E8=A7=82=E5=AF=9F=E8=80=85?= =?UTF-8?q?=EF=BC=8C=E5=A4=84=E7=90=86=E9=97=AE=E5=8D=B7=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E7=94=A8=E4=BA=8E=E5=A4=84=E7=90=86=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=8F=90=E4=BA=A4=E4=B9=8B=E5=90=8E=EF=BC=8C=E6=BB=A1?= =?UTF-8?q?=E6=84=8F=E5=BA=A6=E7=9B=B8=E5=85=B3=E7=9A=84=E9=80=BB=E8=BE=91?= =?UTF-8?q?=202.=E5=A2=9E=E5=8A=A0/tduck-api/user/project/result/createAno?= =?UTF-8?q?nymously=E6=8E=A5=E5=8F=A3=E6=94=BE=E8=A1=8C=EF=BC=8C=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E8=AF=A5=E6=8E=A5=E5=8F=A3=E5=8C=BF=E5=90=8D=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractQuestionnaireSubmitProcessor.java | 25 +++++++++++ ...stionnaireSubmitSatisfactionProcessor.java | 19 +++++++++ .../UserProjectResultController.java | 41 +++++++++++++++++++ .../interceptor/AuthorizationInterceptor.java | 1 + .../handler/AutoFillMetaInfoHandler.java | 18 +++++--- .../entity/UserProjectSettingEntity.java | 4 ++ .../impl/UserProjectResultServiceImpl.java | 2 + 7 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 tduck-api/src/main/java/com/tduck/cloud/api/handler/AbstractQuestionnaireSubmitProcessor.java create mode 100644 tduck-api/src/main/java/com/tduck/cloud/api/handler/QuestionnaireSubmitSatisfactionProcessor.java diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/handler/AbstractQuestionnaireSubmitProcessor.java b/tduck-api/src/main/java/com/tduck/cloud/api/handler/AbstractQuestionnaireSubmitProcessor.java new file mode 100644 index 0000000..6643bc3 --- /dev/null +++ b/tduck-api/src/main/java/com/tduck/cloud/api/handler/AbstractQuestionnaireSubmitProcessor.java @@ -0,0 +1,25 @@ +package com.tduck.cloud.api.handler; + +import com.tduck.cloud.project.entity.UserProjectResultEntity; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Description 处理器 + * @Author wxz + * @Date 2023/9/6 10:17 + */ +public abstract class AbstractQuestionnaireSubmitProcessor { + + /** + * @description: 处理方法,子类实现 + * @param result: + * @param userId: + * @param request: + * @return + * @author: WangXianZhang + * @date: 2023/9/6 10:18 + */ + public abstract void process(UserProjectResultEntity result, String userId, HttpServletRequest request); + +} diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/handler/QuestionnaireSubmitSatisfactionProcessor.java b/tduck-api/src/main/java/com/tduck/cloud/api/handler/QuestionnaireSubmitSatisfactionProcessor.java new file mode 100644 index 0000000..6343be9 --- /dev/null +++ b/tduck-api/src/main/java/com/tduck/cloud/api/handler/QuestionnaireSubmitSatisfactionProcessor.java @@ -0,0 +1,19 @@ +package com.tduck.cloud.api.handler; + +import com.tduck.cloud.project.entity.UserProjectResultEntity; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Description 满意度-问卷提交处理器 + * @Author wxz + * @Date 2023/9/6 10:19 + */ +@Component +public class QuestionnaireSubmitSatisfactionProcessor extends AbstractQuestionnaireSubmitProcessor{ + @Override + public void process(UserProjectResultEntity result, String userId, HttpServletRequest request) { + System.out.println(result); + } +} diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java index 297fd2e..0cb2239 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java @@ -10,6 +10,7 @@ import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com.tduck.cloud.api.annotation.Login; import com.tduck.cloud.api.annotation.NoRepeatSubmit; +import com.tduck.cloud.api.handler.AbstractQuestionnaireSubmitProcessor; import com.tduck.cloud.api.util.HttpUtils; import com.tduck.cloud.common.constant.CommonConstants; import com.tduck.cloud.common.email.MailService; @@ -30,6 +31,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -57,6 +59,9 @@ public class UserProjectResultController { private final WxMpUserMsgService userMsgService; private final RedisUtils redisUtils; + @Resource + private List resultSubmitProcessors; + /*** * 查看项目 * 记录查看的IP 统计查看用户数 @@ -105,6 +110,42 @@ public class UserProjectResultController { return Result.success(); } + /** + * @description: 允许匿名(非用户)填写 + * @param entity: + * @param userId: + * @param request: + * @return + * @author: WangXianZhang + * @date: 2023/9/6 09:01 + */ + @NoRepeatSubmit + @PostMapping("/createAnonymously") + public Result createProjectResultAnonymously(@RequestBody UserProjectResultEntity entity, @RequestAttribute(required = false) String userId, HttpServletRequest request) { + + ValidatorUtils.validateEntity(entity); + + entity.setUserId(userId == null ? "" : userId); + entity.setSubmitRequestIp(HttpUtils.getIpAddr(request)); + Result userProjectSettingStatus = userProjectSettingService.getUserProjectSettingStatus(entity.getProjectKey(), entity.getSubmitRequestIp(), entity.getWxOpenId()); + if (StrUtil.isNotBlank(userProjectSettingStatus.getMsg())) { + return Result.failed(userProjectSettingStatus.getMsg()); + } + projectResultService.saveProjectResult(entity); + ThreadUtil.execAsync(() -> { + UserProjectSettingEntity settingEntity = userProjectSettingStatus.isDataNull() ? null : userProjectSettingStatus.getData(); + this.sendWriteResultNotify(settingEntity, entity); + }); + + // 调用观察者 + resultSubmitProcessors.stream().forEach(p -> { + p.process(entity, userId, request); + }); + + return Result.success(); + + } + /** * 填写结果excel导出 * diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/interceptor/AuthorizationInterceptor.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/interceptor/AuthorizationInterceptor.java index 0a7b541..0acc88b 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/interceptor/AuthorizationInterceptor.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/interceptor/AuthorizationInterceptor.java @@ -35,6 +35,7 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { skipUrlList.add("/tduck-api/captcha/check"); skipUrlList.add("/tduck-api/register/phone/code"); skipUrlList.add("/tduck-api/login/**"); + skipUrlList.add("/tduck-api/user/project/result/createAnonymously"); } public AuthorizationInterceptor(JwtUtils jwtUtils) { diff --git a/tduck-common/src/main/java/com/tduck/cloud/common/mybatis/handler/AutoFillMetaInfoHandler.java b/tduck-common/src/main/java/com/tduck/cloud/common/mybatis/handler/AutoFillMetaInfoHandler.java index b48b396..5e401dd 100644 --- a/tduck-common/src/main/java/com/tduck/cloud/common/mybatis/handler/AutoFillMetaInfoHandler.java +++ b/tduck-common/src/main/java/com/tduck/cloud/common/mybatis/handler/AutoFillMetaInfoHandler.java @@ -46,7 +46,8 @@ public class AutoFillMetaInfoHandler implements MetaObjectHandler { // 看entity是否手动设置了,设置了就用设置的 return customerId; } - return LoginUserUtil.get().getCustomerId(); + + return LoginUserUtil.get() == null ? "" : LoginUserUtil.get().getCustomerId(); } public Object getUserIdByFieldValue(MetaObject metaObject) { @@ -56,7 +57,7 @@ public class AutoFillMetaInfoHandler implements MetaObjectHandler { // 看entity是否手动设置了,设置了就用设置的 return userId; } - return LoginUserUtil.get().getUserId(); + return LoginUserUtil.get() == null ? "" : LoginUserUtil.get().getUserId(); } public Object getCreatedByFieldValue(MetaObject metaObject) { @@ -66,8 +67,11 @@ public class AutoFillMetaInfoHandler implements MetaObjectHandler { value = metaObject.getValue(FieldConstant.CREATED_BY_HUMP); } if (value == null) { - - value = Optional.ofNullable(LoginUserUtil.get().getUserId()).orElse("APP_USER"); + if (LoginUserUtil.get() == null) { + value = "APP_USER"; + } else { + value = LoginUserUtil.get().getUserId(); + } } return value; @@ -87,7 +91,11 @@ public class AutoFillMetaInfoHandler implements MetaObjectHandler { } if(null == value) { - value = Optional.ofNullable(LoginUserUtil.get().getUserId()).orElse("APP_USER"); + if (LoginUserUtil.get() == null) { + value = "APP_USER"; + } else { + value = LoginUserUtil.get().getUserId(); + } } } diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectSettingEntity.java b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectSettingEntity.java index 6a16165..feb4efe 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectSettingEntity.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectSettingEntity.java @@ -127,5 +127,9 @@ public class UserProjectSettingEntity extends BaseEntity