feat: validate consumer scenario journey map upload

main
chenyuan 3 weeks ago
parent c0e7fc82b0
commit 3db2ab087f

@ -41,6 +41,8 @@ import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepOneValidationReque
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepOneValidationResult;
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepTwoValidationRequest;
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepTwoValidationResult;
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepThreeValidationRequest;
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepThreeValidationResult;
import com.sztzjy.linkCommerce.service.NewProductSurveyStepOneService;
import com.sztzjy.linkCommerce.service.MarketOpportunitySelectionStepOneService;
import com.sztzjy.linkCommerce.service.MarketOpportunitySelectionStepTwoService;
@ -59,6 +61,7 @@ import com.sztzjy.linkCommerce.service.ConsumerBehaviorStepThreeService;
import com.sztzjy.linkCommerce.service.ConsumerBehaviorStepFourService;
import com.sztzjy.linkCommerce.service.ConsumerScenarioStepOneService;
import com.sztzjy.linkCommerce.service.ConsumerScenarioStepTwoService;
import com.sztzjy.linkCommerce.service.ConsumerScenarioStepThreeService;
import com.sztzjy.linkCommerce.service.StudentTrainingAnswerService;
import com.sztzjy.linkCommerce.util.ResultEntity;
import io.swagger.annotations.Api;
@ -129,6 +132,9 @@ public class StudentTrainingAnswerController {
@Autowired
private ConsumerScenarioStepTwoService consumerScenarioStepTwoService;
@Autowired
private ConsumerScenarioStepThreeService consumerScenarioStepThreeService;
@GetMapping("/{taskKey}")
@ApiOperation("查询当前学生指定实训任务答案")
public ResultEntity<StudentTrainingAnswer> detail(@PathVariable String taskKey,
@ -355,6 +361,17 @@ public class StudentTrainingAnswerController {
}
}
@PostMapping("/consumer-scenario/step-3/validate")
@ApiOperation("消费场景解构第三步校验")
public ResultEntity<ConsumerScenarioStepThreeValidationResult> validateConsumerScenarioStepThree(
@RequestBody ConsumerScenarioStepThreeValidationRequest answer, HttpServletRequest request) {
try {
return new ResultEntity<>(HttpStatus.OK, "校验完成", consumerScenarioStepThreeService.validate(answer, TokenProvider.getJWTUser(request)));
} catch (ServiceException e) {
return new ResultEntity<>(e.getCode(), e.getMessage());
}
}
@PostMapping(value = "/consumer-behavior/step-3/word-preview", consumes = "multipart/form-data")
@ApiOperation("消费者需求与行为第三步Word预览")
public ResultEntity<ConsumerBehaviorWordPreviewResult> previewConsumerBehaviorStepThreeWord(

@ -0,0 +1,13 @@
package com.sztzjy.linkCommerce.entity.dto;
public class ConsumerScenarioStepThreeValidationRequest {
private String journeyMapUrl;
public String getJourneyMapUrl() {
return journeyMapUrl;
}
public void setJourneyMapUrl(String journeyMapUrl) {
this.journeyMapUrl = journeyMapUrl;
}
}

@ -0,0 +1,22 @@
package com.sztzjy.linkCommerce.entity.dto;
public class ConsumerScenarioStepThreeValidationResult {
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.ConsumerScenarioStepThreeValidationRequest;
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepThreeValidationResult;
public interface ConsumerScenarioStepThreeService {
ConsumerScenarioStepThreeValidationResult validate(ConsumerScenarioStepThreeValidationRequest request, JwtUser user);
}

@ -0,0 +1,34 @@
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.ConsumerScenarioStepThreeValidationRequest;
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepThreeValidationResult;
import com.sztzjy.linkCommerce.service.ConsumerScenarioStepThreeService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
@Service
public class ConsumerScenarioStepThreeServiceImpl implements ConsumerScenarioStepThreeService {
@Override
public ConsumerScenarioStepThreeValidationResult validate(ConsumerScenarioStepThreeValidationRequest request, JwtUser user) {
requireStudent(user);
if (request == null || StringUtils.isBlank(request.getJourneyMapUrl())) {
throw new ServiceException(HttpStatus.BAD_REQUEST, "请上传用户购买旅程图");
}
ConsumerScenarioStepThreeValidationResult result = new ConsumerScenarioStepThreeValidationResult();
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, "仅学生可以提交实训答案");
}
}
}

@ -0,0 +1,46 @@
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.ConsumerScenarioStepThreeValidationRequest;
import com.sztzjy.linkCommerce.entity.dto.ConsumerScenarioStepThreeValidationResult;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
class ConsumerScenarioStepThreeServiceImplTest {
private final ConsumerScenarioStepThreeServiceImpl service = new ConsumerScenarioStepThreeServiceImpl();
@Test
void acceptsUploadedJourneyMap() {
ConsumerScenarioStepThreeValidationRequest request = new ConsumerScenarioStepThreeValidationRequest();
request.setJourneyMapUrl("/profile/upload/journey-map.png");
ConsumerScenarioStepThreeValidationResult result = service.validate(request, student());
assertTrue(result.isValid());
}
@Test
void rejectsMissingJourneyMap() {
assertThrows(ServiceException.class, () -> service.validate(new ConsumerScenarioStepThreeValidationRequest(), student()));
}
@Test
void rejectsNonStudent() {
ConsumerScenarioStepThreeValidationRequest request = new ConsumerScenarioStepThreeValidationRequest();
request.setJourneyMapUrl("/profile/upload/journey-map.png");
JwtUser teacher = student();
teacher.setRoleId(3);
assertThrows(ServiceException.class, () -> service.validate(request, teacher));
}
private JwtUser student() {
JwtUser user = new JwtUser();
user.setUserId("stu-1");
user.setRoleId(4);
return user;
}
}
Loading…
Cancel
Save