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 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<AbstractQuestionnaireSubmitProcessor> 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<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导出
*

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/register/phone/code");
skipUrlList.add("/tduck-api/login/**");
skipUrlList.add("/tduck-api/user/project/result/createAnonymously");
}
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是否手动设置了,设置了就用设置的
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();
}
}
}

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 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 org.springframework.boot.system.ApplicationHome;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.FileInputStream;
@ -69,6 +70,7 @@ public class UserProjectResultServiceImpl extends ServiceImpl<UserProjectResultM
@Override
@Transactional(rollbackFor = Exception.class)
public void saveProjectResult(UserProjectResultEntity entity) {
String projectKey = entity.getProjectKey();
entity.setSerialNumber(redisUtils.incr(StrUtil.format(PROJECT_RESULT_NUMBER, projectKey), CommonConstants.ConstantNumber.ONE));

Loading…
Cancel
Save