feat: validate consumer scenario optimization analysis
parent
3db2ab087f
commit
3c23050e2c
@ -0,0 +1,45 @@
|
|||||||
|
package com.sztzjy.linkCommerce.entity.dto;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ConsumerScenarioStepFourValidationRequest {
|
||||||
|
private List<JourneyOptimizationRow> rows;
|
||||||
|
|
||||||
|
public List<JourneyOptimizationRow> getRows() {
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRows(List<JourneyOptimizationRow> rows) {
|
||||||
|
this.rows = rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class JourneyOptimizationRow {
|
||||||
|
private String stageId;
|
||||||
|
private String painPoint;
|
||||||
|
private String optimizationSuggestion;
|
||||||
|
|
||||||
|
public String getStageId() {
|
||||||
|
return stageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStageId(String stageId) {
|
||||||
|
this.stageId = stageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPainPoint() {
|
||||||
|
return painPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPainPoint(String painPoint) {
|
||||||
|
this.painPoint = painPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOptimizationSuggestion() {
|
||||||
|
return optimizationSuggestion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOptimizationSuggestion(String optimizationSuggestion) {
|
||||||
|
this.optimizationSuggestion = optimizationSuggestion;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
package com.sztzjy.linkCommerce.entity.dto;
|
||||||
|
|
||||||
|
public class ConsumerScenarioStepFourValidationResult {
|
||||||
|
private boolean valid;
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public boolean isValid() {
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValid(boolean valid) {
|
||||||
|
this.valid = valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
package com.sztzjy.linkCommerce.service;
|
||||||
|
|
||||||
|
import com.sztzjy.linkCommerce.config.security.JwtUser;
|
||||||
|
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepFourValidationRequest;
|
||||||
|
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepFourValidationResult;
|
||||||
|
|
||||||
|
public interface ConsumerScenarioStepFourService {
|
||||||
|
ConsumerScenarioStepFourValidationResult validate(ConsumerScenarioStepFourValidationRequest request, JwtUser user);
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
package com.sztzjy.linkCommerce.service.impl;
|
||||||
|
|
||||||
|
import com.sztzjy.linkCommerce.config.exception.handler.ServiceException;
|
||||||
|
import com.sztzjy.linkCommerce.config.security.JwtUser;
|
||||||
|
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepFourValidationRequest;
|
||||||
|
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepFourValidationResult;
|
||||||
|
import com.sztzjy.linkCommerce.service.ConsumerScenarioStepFourService;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class ConsumerScenarioStepFourServiceImpl implements ConsumerScenarioStepFourService {
|
||||||
|
private static final List<String> STAGE_IDS = Arrays.asList(
|
||||||
|
"problem-awareness", "information-search", "evaluation-decision", "purchase-conversion", "post-purchase"
|
||||||
|
);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConsumerScenarioStepFourValidationResult validate(ConsumerScenarioStepFourValidationRequest request, JwtUser user) {
|
||||||
|
requireStudent(user);
|
||||||
|
List<ConsumerScenarioStepFourValidationRequest.JourneyOptimizationRow> rows = request == null ? null : request.getRows();
|
||||||
|
if (rows == null || rows.size() != STAGE_IDS.size() || rows.stream().anyMatch(row -> row == null)
|
||||||
|
|| rows.stream().map(ConsumerScenarioStepFourValidationRequest.JourneyOptimizationRow::getStageId).distinct().count() != STAGE_IDS.size()
|
||||||
|
|| rows.stream().anyMatch(row -> !STAGE_IDS.contains(row.getStageId()))) {
|
||||||
|
throw badRequest("请完整填写五个购买旅程阶段的优化分析");
|
||||||
|
}
|
||||||
|
if (rows.stream().anyMatch(row -> StringUtils.isBlank(row.getPainPoint()) || StringUtils.isBlank(row.getOptimizationSuggestion()))) {
|
||||||
|
throw badRequest("请完整填写五个阶段的痛点和优化建议");
|
||||||
|
}
|
||||||
|
ConsumerScenarioStepFourValidationResult result = new ConsumerScenarioStepFourValidationResult();
|
||||||
|
result.setValid(true);
|
||||||
|
result.setMessage("五个阶段的优化分析填写完整。");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void requireStudent(JwtUser user) {
|
||||||
|
if (user == null || StringUtils.isBlank(user.getUserId())) {
|
||||||
|
throw new ServiceException(HttpStatus.UNAUTHORIZED, "请先登录后再提交");
|
||||||
|
}
|
||||||
|
if (user.getRoleId() != 4) {
|
||||||
|
throw new ServiceException(HttpStatus.FORBIDDEN, "仅学生可以提交实训答案");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ServiceException badRequest(String message) {
|
||||||
|
return new ServiceException(HttpStatus.BAD_REQUEST, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
package com.sztzjy.linkCommerce.service.impl;
|
||||||
|
|
||||||
|
import com.sztzjy.linkCommerce.config.exception.handler.ServiceException;
|
||||||
|
import com.sztzjy.linkCommerce.config.security.JwtUser;
|
||||||
|
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepFourValidationRequest;
|
||||||
|
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepFourValidationResult;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
class ConsumerScenarioStepFourServiceImplTest {
|
||||||
|
private final ConsumerScenarioStepFourServiceImpl service = new ConsumerScenarioStepFourServiceImpl();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void acceptsCompleteJourneyOptimizations() {
|
||||||
|
ConsumerScenarioStepFourValidationResult result = service.validate(request(), student());
|
||||||
|
|
||||||
|
assertTrue(result.isValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void rejectsIncompleteOptimization() {
|
||||||
|
ConsumerScenarioStepFourValidationRequest request = request();
|
||||||
|
request.getRows().get(1).setOptimizationSuggestion(" ");
|
||||||
|
|
||||||
|
assertThrows(ServiceException.class, () -> service.validate(request, student()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void rejectsNonStudent() {
|
||||||
|
JwtUser teacher = student();
|
||||||
|
teacher.setRoleId(3);
|
||||||
|
|
||||||
|
assertThrows(ServiceException.class, () -> service.validate(request(), teacher));
|
||||||
|
}
|
||||||
|
|
||||||
|
private ConsumerScenarioStepFourValidationRequest request() {
|
||||||
|
ConsumerScenarioStepFourValidationRequest request = new ConsumerScenarioStepFourValidationRequest();
|
||||||
|
request.setRows(Arrays.asList(
|
||||||
|
row("problem-awareness"),
|
||||||
|
row("information-search"),
|
||||||
|
row("evaluation-decision"),
|
||||||
|
row("purchase-conversion"),
|
||||||
|
row("post-purchase")
|
||||||
|
));
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ConsumerScenarioStepFourValidationRequest.JourneyOptimizationRow row(String stageId) {
|
||||||
|
ConsumerScenarioStepFourValidationRequest.JourneyOptimizationRow row = new ConsumerScenarioStepFourValidationRequest.JourneyOptimizationRow();
|
||||||
|
row.setStageId(stageId);
|
||||||
|
row.setPainPoint("信息不够清晰");
|
||||||
|
row.setOptimizationSuggestion("提供清晰指引和服务支持");
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JwtUser student() {
|
||||||
|
JwtUser user = new JwtUser();
|
||||||
|
user.setUserId("stu-1");
|
||||||
|
user.setRoleId(4);
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue