diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/public_/PublicOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/public_/PublicOrderController.java index dcb86b1..ab832a5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/public_/PublicOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/public_/PublicOrderController.java @@ -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 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地址 * 考虑代理和负载均衡的情况