This commit is contained in:
2025-10-22 15:22:06 +08:00
parent 636e30a4cd
commit c358ab2fd3

View File

@@ -11,8 +11,12 @@ import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 公开订单提交控制器
@@ -88,6 +92,25 @@ public class PublicOrderController extends BaseController {
return AjaxResult.error("只允许提交订单信息,指令必须以'单:'开头");
}
// 日期验证:只允许提交今天的订单
String orderDate = extractOrderDate(trimmedCmd);
if (orderDate == null) {
log.warn("日期验证失败: 无法解析订单日期");
log.info("公开订单提交 - 结束(拒绝)");
log.info("======================================");
return AjaxResult.error("订单格式错误,无法识别订单日期");
}
String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
if (!orderDate.equals(today)) {
log.warn("日期验证失败: 订单日期[{}]不是今天[{}]", orderDate, today);
log.info("公开订单提交 - 结束(拒绝)");
log.info("======================================");
return AjaxResult.error("只允许提交今天的订单,订单日期必须是: " + today);
}
log.info("日期验证通过: 订单日期[{}]", orderDate);
// 执行指令
List<String> result;
try {
@@ -129,6 +152,43 @@ public class PublicOrderController extends BaseController {
}
}
/**
* 从订单内容中提取日期
* 订单格式示例:
* 单:
* 2025-01-21 001
* 备注:...
*
* @param orderContent 订单内容
* @return 日期字符串格式yyyy-MM-dd如果无法解析则返回null
*/
private String extractOrderDate(String orderContent) {
try {
// 匹配格式YYYY-MM-DD在"单:"之后的行)
Pattern pattern = Pattern.compile("单[:].*(\\d{4}-\\d{2}-\\d{2})");
Matcher matcher = pattern.matcher(orderContent.replaceAll("\\s+", " "));
if (matcher.find()) {
return matcher.group(1);
}
// 尝试另一种格式:换行后直接是日期
String[] lines = orderContent.split("\\r?\\n");
if (lines.length >= 2) {
String secondLine = lines[1].trim();
Pattern datePattern = Pattern.compile("^(\\d{4}-\\d{2}-\\d{2})");
Matcher dateMatcher = datePattern.matcher(secondLine);
if (dateMatcher.find()) {
return dateMatcher.group(1);
}
}
return null;
} catch (Exception e) {
log.error("解析订单日期时发生异常: {}", e.getMessage());
return null;
}
}
/**
* 获取客户端真实IP地址
* 考虑代理和负载均衡的情况