|
|
|
@ -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); |
|
|
|
} |
|
|
|
|
|
|
|
|