fix:修复创建活动失败

This commit is contained in:
zhonghua 2026-04-03 13:49:19 +08:00
parent f223e9bd41
commit 78cd956ab5
2 changed files with 52 additions and 24 deletions

View File

@ -37,27 +37,55 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, BizContest> i
private final ContestRegistrationMapper contestRegistrationMapper;
private final ContestWorkMapper contestWorkMapper;
private static final DateTimeFormatter DT_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
// 支持两种日期格式ISO 格式 (T 分隔) 和空格分隔格式
private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
private static final DateTimeFormatter SPACE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/**
* 解析日期时间字符串兼容 ISO 格式和空格分隔格式
*/
private LocalDateTime parseDateTime(String dateTime) {
if (!StringUtils.hasText(dateTime)) {
return null;
}
// 尝试 ISO 格式 (yyyy-MM-ddTHH:mm:ss)
try {
return LocalDateTime.parse(dateTime, ISO_FORMATTER);
} catch (Exception e) {
// 尝试空格分隔格式 (yyyy-MM-dd HH:mm:ss)
try {
return LocalDateTime.parse(dateTime, SPACE_FORMATTER);
} catch (Exception ex) {
log.warn("日期格式解析失败:{}", dateTime, ex);
return null;
}
}
}
@Override
public BizContest createContest(CreateContestDto dto, Long creatorId) {
log.info("开始创建赛事,名称:{}", dto.getContestName());
BizContest entity = new BizContest();
mapDtoToEntity(dto, entity);
try {
BizContest entity = new BizContest();
mapDtoToEntity(dto, entity);
// 默认状态
entity.setContestState("unpublished");
entity.setStatus("ongoing");
entity.setResultState("unpublished");
if (!StringUtils.hasText(entity.getSubmitRule())) {
entity.setSubmitRule("once");
// 默认状态
entity.setContestState("unpublished");
entity.setStatus("ongoing");
entity.setResultState("unpublished");
if (!StringUtils.hasText(entity.getSubmitRule())) {
entity.setSubmitRule("once");
}
entity.setCreator(creatorId != null ? creatorId.intValue() : null);
save(entity);
log.info("赛事创建成功ID{}, 名称:{}", entity.getId(), entity.getContestName());
return entity;
} catch (Exception e) {
log.error("创建赛事失败,名称:{}", dto.getContestName(), e);
throw new BusinessException(ErrorCode.INTERNAL_ERROR, "创建赛事失败:" + e.getMessage());
}
entity.setCreator(creatorId != null ? creatorId.intValue() : null);
save(entity);
log.info("赛事创建成功ID{}", entity.getId());
return entity;
}
@Override
@ -323,10 +351,10 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, BizContest> i
entity.setAgeMax(dto.getAgeMax());
}
if (StringUtils.hasText(dto.getStartTime())) {
entity.setStartTime(LocalDateTime.parse(dto.getStartTime(), DT_FORMATTER));
entity.setStartTime(parseDateTime(dto.getStartTime()));
}
if (StringUtils.hasText(dto.getEndTime())) {
entity.setEndTime(LocalDateTime.parse(dto.getEndTime(), DT_FORMATTER));
entity.setEndTime(parseDateTime(dto.getEndTime()));
}
if (StringUtils.hasText(dto.getAddress())) {
entity.setAddress(dto.getAddress());
@ -362,10 +390,10 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, BizContest> i
entity.setSponsors(dto.getSponsors());
}
if (StringUtils.hasText(dto.getRegisterStartTime())) {
entity.setRegisterStartTime(LocalDateTime.parse(dto.getRegisterStartTime(), DT_FORMATTER));
entity.setRegisterStartTime(parseDateTime(dto.getRegisterStartTime()));
}
if (StringUtils.hasText(dto.getRegisterEndTime())) {
entity.setRegisterEndTime(LocalDateTime.parse(dto.getRegisterEndTime(), DT_FORMATTER));
entity.setRegisterEndTime(parseDateTime(dto.getRegisterEndTime()));
}
if (StringUtils.hasText(dto.getRegisterState())) {
entity.setRegisterState(dto.getRegisterState());
@ -389,10 +417,10 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, BizContest> i
entity.setSubmitRule(dto.getSubmitRule());
}
if (StringUtils.hasText(dto.getSubmitStartTime())) {
entity.setSubmitStartTime(LocalDateTime.parse(dto.getSubmitStartTime(), DT_FORMATTER));
entity.setSubmitStartTime(parseDateTime(dto.getSubmitStartTime()));
}
if (StringUtils.hasText(dto.getSubmitEndTime())) {
entity.setSubmitEndTime(LocalDateTime.parse(dto.getSubmitEndTime(), DT_FORMATTER));
entity.setSubmitEndTime(parseDateTime(dto.getSubmitEndTime()));
}
if (StringUtils.hasText(dto.getWorkType())) {
entity.setWorkType(dto.getWorkType());
@ -404,13 +432,13 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, BizContest> i
entity.setReviewRuleId(dto.getReviewRuleId());
}
if (StringUtils.hasText(dto.getReviewStartTime())) {
entity.setReviewStartTime(LocalDateTime.parse(dto.getReviewStartTime(), DT_FORMATTER));
entity.setReviewStartTime(parseDateTime(dto.getReviewStartTime()));
}
if (StringUtils.hasText(dto.getReviewEndTime())) {
entity.setReviewEndTime(LocalDateTime.parse(dto.getReviewEndTime(), DT_FORMATTER));
entity.setReviewEndTime(parseDateTime(dto.getReviewEndTime()));
}
if (StringUtils.hasText(dto.getResultPublishTime())) {
entity.setResultPublishTime(LocalDateTime.parse(dto.getResultPublishTime(), DT_FORMATTER));
entity.setResultPublishTime(parseDateTime(dto.getResultPublishTime()));
}
}

View File

@ -431,7 +431,7 @@ const handleSubmit = async () => {
}
message.success("创建成功")
}
router.push(`/${tenantCode}/contests`)
router.push(`/${tenantCode}/contests/list`)
} catch (e: any) {
if (e?.errorFields) return
message.error(e?.response?.data?.message || (isEdit.value ? "保存失败" : "创建失败"))