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