diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java index 929ba54..a925f97 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java @@ -29,7 +29,7 @@ public class RechargeActivityCenterServiceImpl implements RechargeActivityCenter @Autowired private RechargeActivityCenterMapper rechargeActivityCenterMapper; - private static final String ACTIVITY_NAME_REGEX = "^[\\u4e00-\\u9fa5a-zA-Z0-9,。!?、;:\"'()《》【】——~,.:;!'()\\[\\]-_&+=]{1,100}$"; + private static final String ACTIVITY_NAME_REGEX = "^[\\u4e00-\\u9fa5a-zA-Z0-9,。!?、;:\"'‘’“”()《》【】——~,.:;!()\\[\\]-_&+=]{1,100}$"; private static final Pattern ACTIVITY_NAME_PATTERN = Pattern.compile(ACTIVITY_NAME_REGEX); // 根据ID查询活动 @Override @@ -43,35 +43,51 @@ public class RechargeActivityCenterServiceImpl implements RechargeActivityCenter // 新增活动 @Override public void addActivity(RechargeActivity activity) { + String activityName = activity.getActivityName(); - if (activity.getActivityName().length() > 100) { + // 1. 长度校验 + if (activityName.length() > 100) { throw new IllegalArgumentException("活动名称不能超过100个字符"); } + + // 2. 名称重复校验 RechargeActivity activityByName = rechargeActivityCenterMapper.queryActivityByName(activity); if (activityByName != null) { throw new IllegalArgumentException("活动名称已存在"); } - // 3. 字符格式校验 - if (!ACTIVITY_NAME_PATTERN.matcher(activity.getActivityName()).matches()) { - throw new IllegalArgumentException("活动名称仅允许包含汉字、英文字母、数字及常见标点符号(中英文标点:,。!?、;:\"'()《》【】——~,.:;!'()[]-_&+=)"); + + // 3. 字符格式校验(提取非法字符) + if (!ACTIVITY_NAME_PATTERN.matcher(activityName).matches()) { + // 反向匹配,提取所有不符合规则的字符 + StringBuilder illegalChars = new StringBuilder(); + for (char c : activityName.toCharArray()) { + if (!ACTIVITY_NAME_PATTERN.matcher(String.valueOf(c)).matches()) { + // 去重,避免重复输出同一非法字符 + if (illegalChars.indexOf(String.valueOf(c)) == -1) { + illegalChars.append(c).append("、"); + } + } + } + // 去除最后一个顿号,拼接提示信息 + String illegalStr = illegalChars.deleteCharAt(illegalChars.length() - 1).toString(); + throw new IllegalArgumentException( + String.format("活动名称包含非法字符:%s,仅允许包含汉字、英文字母、数字及常见标点符号(中英文标点:,。!?、;:\"'‘’“”()《》【】——~,.:;!()[]-_&+=)", illegalStr) + ); } + + // 4. 时间范围判断,设置对应状态 Date startTime = activity.getStartTime(); Date endTime = activity.getEndTime(); + Date now = new Date(); // 当前系统本地时间 - //获取当前系统时间(本地时间,与活动时间时区保持一致) - Date now = new Date(); - - //时间范围判断,设置对应状态 if (now.before(startTime)) { - // 当前时间 < 开始时间 → 未开始(状态0) - activity.setStatus("0"); + activity.setStatus("0"); // 未开始 } else if (now.after(endTime)) { - // 当前时间 > 结束时间 → 已结束(状态2) - activity.setStatus("2"); + activity.setStatus("2"); // 已结束 } else { - // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1) - activity.setStatus("1"); + activity.setStatus("1"); // 进行中 } + rechargeActivityCenterMapper.addActivity(activity); }