Browse Source

1.增加满意度问卷提交观察者,处理问卷提交后,用于处理文件提交之后,满意度相关的逻辑

2.增加/tduck-api/user/project/result/createAnonymously接口放行,允许该接口匿名提交
dev
wxz 2 years ago
parent
commit
4f0c2f04a5
  1. 25
      tduck-api/src/main/java/com/tduck/cloud/api/handler/AbstractQuestionnaireSubmitProcessor.java
  2. 19
      tduck-api/src/main/java/com/tduck/cloud/api/handler/QuestionnaireSubmitSatisfactionProcessor.java
  3. 41
      tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java
  4. 1
      tduck-api/src/main/java/com/tduck/cloud/api/web/interceptor/AuthorizationInterceptor.java
  5. 18
      tduck-common/src/main/java/com/tduck/cloud/common/mybatis/handler/AutoFillMetaInfoHandler.java
  6. 4
      tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectSettingEntity.java
  7. 2
      tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java

25
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);
}

19
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);
}
}

41
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 cn.hutool.poi.excel.ExcelWriter;
import com.tduck.cloud.api.annotation.Login; import com.tduck.cloud.api.annotation.Login;
import com.tduck.cloud.api.annotation.NoRepeatSubmit; 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.api.util.HttpUtils;
import com.tduck.cloud.common.constant.CommonConstants; import com.tduck.cloud.common.constant.CommonConstants;
import com.tduck.cloud.common.email.MailService; import com.tduck.cloud.common.email.MailService;
@ -30,6 +31,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -57,6 +59,9 @@ public class UserProjectResultController {
private final WxMpUserMsgService userMsgService; private final WxMpUserMsgService userMsgService;
private final RedisUtils redisUtils; private final RedisUtils redisUtils;
@Resource
private List<AbstractQuestionnaireSubmitProcessor> resultSubmitProcessors;
/*** /***
* 查看项目 * 查看项目
* 记录查看的IP 统计查看用户数 * 记录查看的IP 统计查看用户数
@ -105,6 +110,42 @@ public class UserProjectResultController {
return Result.success(); 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<UserProjectSettingEntity> 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导出 * 填写结果excel导出
* *

1
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/captcha/check");
skipUrlList.add("/tduck-api/register/phone/code"); skipUrlList.add("/tduck-api/register/phone/code");
skipUrlList.add("/tduck-api/login/**"); skipUrlList.add("/tduck-api/login/**");
skipUrlList.add("/tduck-api/user/project/result/createAnonymously");
} }
public AuthorizationInterceptor(JwtUtils jwtUtils) { public AuthorizationInterceptor(JwtUtils jwtUtils) {

18
tduck-common/src/main/java/com/tduck/cloud/common/mybatis/handler/AutoFillMetaInfoHandler.java

@ -46,7 +46,8 @@ public class AutoFillMetaInfoHandler implements MetaObjectHandler {
// 看entity是否手动设置了,设置了就用设置的 // 看entity是否手动设置了,设置了就用设置的
return customerId; return customerId;
} }
return LoginUserUtil.get().getCustomerId();
return LoginUserUtil.get() == null ? "" : LoginUserUtil.get().getCustomerId();
} }
public Object getUserIdByFieldValue(MetaObject metaObject) { public Object getUserIdByFieldValue(MetaObject metaObject) {
@ -56,7 +57,7 @@ public class AutoFillMetaInfoHandler implements MetaObjectHandler {
// 看entity是否手动设置了,设置了就用设置的 // 看entity是否手动设置了,设置了就用设置的
return userId; return userId;
} }
return LoginUserUtil.get().getUserId(); return LoginUserUtil.get() == null ? "" : LoginUserUtil.get().getUserId();
} }
public Object getCreatedByFieldValue(MetaObject metaObject) { public Object getCreatedByFieldValue(MetaObject metaObject) {
@ -66,8 +67,11 @@ public class AutoFillMetaInfoHandler implements MetaObjectHandler {
value = metaObject.getValue(FieldConstant.CREATED_BY_HUMP); value = metaObject.getValue(FieldConstant.CREATED_BY_HUMP);
} }
if (value == null) { if (value == null) {
if (LoginUserUtil.get() == null) {
value = Optional.ofNullable(LoginUserUtil.get().getUserId()).orElse("APP_USER"); value = "APP_USER";
} else {
value = LoginUserUtil.get().getUserId();
}
} }
return value; return value;
@ -87,7 +91,11 @@ public class AutoFillMetaInfoHandler implements MetaObjectHandler {
} }
if(null == value) { if(null == value) {
value = Optional.ofNullable(LoginUserUtil.get().getUserId()).orElse("APP_USER"); if (LoginUserUtil.get() == null) {
value = "APP_USER";
} else {
value = LoginUserUtil.get().getUserId();
}
} }
} }

4
tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectSettingEntity.java

@ -127,5 +127,9 @@ public class UserProjectSettingEntity extends BaseEntity<UserProjectSettingEntit
*/ */
private String shareDesc; private String shareDesc;
/**
* 是否允许匿名
*/
private Integer anonymous;
} }

2
tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java

@ -36,6 +36,7 @@ import com.tduck.cloud.storage.util.StorageUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.boot.system.ApplicationHome; import org.springframework.boot.system.ApplicationHome;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@ -69,6 +70,7 @@ public class UserProjectResultServiceImpl extends ServiceImpl<UserProjectResultM
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void saveProjectResult(UserProjectResultEntity entity) { public void saveProjectResult(UserProjectResultEntity entity) {
String projectKey = entity.getProjectKey(); String projectKey = entity.getProjectKey();
entity.setSerialNumber(redisUtils.incr(StrUtil.format(PROJECT_RESULT_NUMBER, projectKey), CommonConstants.ConstantNumber.ONE)); entity.setSerialNumber(redisUtils.incr(StrUtil.format(PROJECT_RESULT_NUMBER, projectKey), CommonConstants.ConstantNumber.ONE));

Loading…
Cancel
Save