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.FeatureConversionStepOneValidationRequest; import com.sztzjy.linkCommerce.entity.dto.FeatureConversionStepOneValidationResult; import com.sztzjy.linkCommerce.service.FeatureConversionStepOneService; import org.apache.commons.lang3.StringUtils; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import java.util.List; @Service public class FeatureConversionStepOneServiceImpl implements FeatureConversionStepOneService { private static final int MIN_ROWS = 8; private static final int MAX_ROWS = 12; @Override public FeatureConversionStepOneValidationResult validate(FeatureConversionStepOneValidationRequest request, JwtUser user) { requireStudent(user); List rows = request == null ? null : request.getRows(); if (rows == null || rows.size() < MIN_ROWS || rows.size() > MAX_ROWS || rows.stream().anyMatch(row -> row == null)) { throw badRequest("请填写 8 至 12 行需求转化信息"); } if (rows.stream().anyMatch(row -> StringUtils.isBlank(row.getVoice()) || StringUtils.isBlank(row.getInsight()) || StringUtils.isBlank(row.getDefinition()) || StringUtils.isBlank(row.getDescription()) || StringUtils.isBlank(row.getAcceptance()))) { throw badRequest("请完整填写每行的用户原声、场景洞察、功能定义、功能描述和验收标准"); } FeatureConversionStepOneValidationResult result = new FeatureConversionStepOneValidationResult(); 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); } }