diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java index 1065cf1..611a999 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java @@ -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 detail(@PathVariable String taskKey, @@ -355,6 +361,17 @@ public class StudentTrainingAnswerController { } } + @PostMapping("/consumer-scenario/step-3/validate") + @ApiOperation("消费场景解构第三步校验") + public ResultEntity 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 previewConsumerBehaviorStepThreeWord( diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/ConsumerScenarioStepThreeValidationRequest.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/ConsumerScenarioStepThreeValidationRequest.java new file mode 100644 index 0000000..9d78cc2 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/ConsumerScenarioStepThreeValidationRequest.java @@ -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; + } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/ConsumerScenarioStepThreeValidationResult.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/ConsumerScenarioStepThreeValidationResult.java new file mode 100644 index 0000000..1e259ab --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/ConsumerScenarioStepThreeValidationResult.java @@ -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; + } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/ConsumerScenarioStepThreeService.java b/src/main/java/com/sztzjy/linkCommerce/service/ConsumerScenarioStepThreeService.java new file mode 100644 index 0000000..4f3c09b --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/ConsumerScenarioStepThreeService.java @@ -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); +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/ConsumerScenarioStepThreeServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/ConsumerScenarioStepThreeServiceImpl.java new file mode 100644 index 0000000..9fe8e14 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/ConsumerScenarioStepThreeServiceImpl.java @@ -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, "仅学生可以提交实训答案"); + } + } +} diff --git a/src/test/java/com/sztzjy/linkCommerce/service/impl/ConsumerScenarioStepThreeServiceImplTest.java b/src/test/java/com/sztzjy/linkCommerce/service/impl/ConsumerScenarioStepThreeServiceImplTest.java new file mode 100644 index 0000000..2f05164 --- /dev/null +++ b/src/test/java/com/sztzjy/linkCommerce/service/impl/ConsumerScenarioStepThreeServiceImplTest.java @@ -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; + } +}