From 16a91787081871046a3acd98036376ee5a0920f1 Mon Sep 17 00:00:00 2001 From: zch Date: Fri, 8 May 2026 11:17:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=B7=A5=E5=8D=95=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=90=8C=E4=B8=80=E5=A4=A9=E5=90=8C=E4=B8=80?= =?UTF-8?q?=E8=BD=A6=E8=BE=86=E7=BB=B4=E4=BF=9D=E7=B1=BB=E5=9E=8B=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E9=99=90=E5=88=B6=E5=8A=9F=E8=83=BD=EF=BC=9A=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=B7=A5=E5=8D=95=E8=BF=99=E4=B8=AA=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20=E5=85=A8=E9=83=A8=E7=B1=BB=E5=9E=8B=E7=9A=84=E9=83=BD?= =?UTF-8?q?=E9=99=90=E5=88=B6=20=E6=AF=8F=E8=BE=86=E8=BD=A6=E6=AF=8F?= =?UTF-8?q?=E7=A7=8D=E7=B1=BB=E5=9E=8B=E6=AF=8F=E5=A4=A9=E5=8F=AA=E6=9C=89?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加countSameDayMaintenanceOrder方法检查同一天同一车辆的相同维保类型工单数量 - 修改selectBizMaintenanceOrderTD方法支持日期范围查询 - 在PDAAddMaintenanceOrder接口中添加重复提交校验和工单限制校验 - 使用Java生成日期范围避免数据库兼容性问题 --- .../tyre/BizMaintenanceOrderController.java | 32 +++++++++++++++++-- .../mapper/BizMaintenanceOrderMapper.java | 4 ++- .../service/IBizMaintenanceOrderService.java | 4 ++- .../impl/BizMaintenanceOrderServiceImpl.java | 15 +++++++-- .../mapper/tyre/BizMaintenanceOrderMapper.xml | 16 ++++++++-- 5 files changed, 61 insertions(+), 10 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BizMaintenanceOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BizMaintenanceOrderController.java index ea6a662e..0e0975c7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BizMaintenanceOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BizMaintenanceOrderController.java @@ -2,12 +2,14 @@ package com.ruoyi.web.controller.tyre; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.*; @@ -22,6 +24,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -188,7 +191,21 @@ public class BizMaintenanceOrderController extends BaseController { */ @PostMapping("/PDAAddMaintenanceOrder") @ResponseBody - public AjaxResult PDAAddMaintenanceOrder(@RequestBody BizMaintenanceOrder bizMaintenanceOrder) { + @RepeatSubmit + @Transactional(rollbackFor = Exception.class) + public synchronized AjaxResult PDAAddMaintenanceOrder(@RequestBody BizMaintenanceOrder bizMaintenanceOrder) { + if (bizMaintenanceOrder == null) { + return error("参数不能为空"); + } + if (StringUtils.isEmpty(bizMaintenanceOrder.getPlateNumber())) { + return error("车牌号不能为空"); + } + if (StringUtils.isEmpty(bizMaintenanceOrder.getTypeCode())) { + return error("维保类型不能为空"); + } + if (bizMaintenanceOrderService.countSameDayMaintenanceOrder(bizMaintenanceOrder) > 0) { + return error("同一车辆同一维保类型当天只能生成一次工单"); + } String orderNo = orderNoCreate(); bizMaintenanceOrder.setOrderNo(orderNo); return toAjax(bizMaintenanceOrderService.insertBizMaintenanceOrder(bizMaintenanceOrder)); @@ -290,10 +307,12 @@ public class BizMaintenanceOrderController extends BaseController { private String orderNoCreate() { // 查询当天的工单号(返回的是当天最新的一条记录) - BizMaintenanceOrder bizMaintenanceOrder = bizMaintenanceOrderService.selectBizMaintenanceOrderTD(); + BizMaintenanceOrder query = new BizMaintenanceOrder(); + fillTodayRange(query); + BizMaintenanceOrder bizMaintenanceOrder = bizMaintenanceOrderService.selectBizMaintenanceOrderTD(query); String orderNo; - String today = new java.text.SimpleDateFormat("yyyyMMdd").format(new java.util.Date()); + String today = DateUtils.dateTime(); if (bizMaintenanceOrder == null) { // 当天没有工单,从001开始 @@ -312,4 +331,11 @@ public class BizMaintenanceOrderController extends BaseController { } return orderNo; } + + private void fillTodayRange(BizMaintenanceOrder bizMaintenanceOrder) { + LocalDate today = LocalDate.now(); + // 使用 Java 计算当天半开区间,避免在 Mapper 中写 MySQL/SQL Server 不兼容的日期函数。 + bizMaintenanceOrder.getParams().put("beginTime", DateUtils.toDate(today)); + bizMaintenanceOrder.getParams().put("endTime", DateUtils.toDate(today.plusDays(1))); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BizMaintenanceOrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BizMaintenanceOrderMapper.java index c55921e0..8d6891d2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BizMaintenanceOrderMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BizMaintenanceOrderMapper.java @@ -62,7 +62,9 @@ public interface BizMaintenanceOrderMapper */ public int deleteBizMaintenanceOrderByOrderIds(String[] orderIds); - BizMaintenanceOrder selectBizMaintenanceOrderTD(); + BizMaintenanceOrder selectBizMaintenanceOrderTD(BizMaintenanceOrder bizMaintenanceOrder); BizMaintenanceOrder selectBizMaintenanceOrderByOrderIdBefore(BizMaintenanceOrder bizMaintenanceOrder); + + int countSameDayMaintenanceOrder(BizMaintenanceOrder bizMaintenanceOrder); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBizMaintenanceOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBizMaintenanceOrderService.java index 952cc018..b59bf32d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBizMaintenanceOrderService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBizMaintenanceOrderService.java @@ -63,7 +63,9 @@ public interface IBizMaintenanceOrderService List selectBizMaintenanceOrderListTwo(BizMaintenanceOrder bizMaintenanceOrder); - BizMaintenanceOrder selectBizMaintenanceOrderTD(); + BizMaintenanceOrder selectBizMaintenanceOrderTD(BizMaintenanceOrder bizMaintenanceOrder); BizMaintenanceOrder selectBizMaintenanceOrderByOrderIdBefore(BizMaintenanceOrder bizMaintenanceOrder); + + int countSameDayMaintenanceOrder(BizMaintenanceOrder bizMaintenanceOrder); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BizMaintenanceOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BizMaintenanceOrderServiceImpl.java index 22cb056b..9560c784 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BizMaintenanceOrderServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BizMaintenanceOrderServiceImpl.java @@ -1,10 +1,10 @@ package com.ruoyi.system.service.impl; +import java.time.LocalDate; import java.util.List; import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.utils.DateUtils; -import com.ruoyi.common.utils.ShiroUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.system.mapper.BizMaintenanceOrderMapper; @@ -112,12 +112,21 @@ public class BizMaintenanceOrderServiceImpl implements IBizMaintenanceOrderServi } @Override - public BizMaintenanceOrder selectBizMaintenanceOrderTD() { - return bizMaintenanceOrderMapper.selectBizMaintenanceOrderTD(); + public BizMaintenanceOrder selectBizMaintenanceOrderTD(BizMaintenanceOrder bizMaintenanceOrder) { + return bizMaintenanceOrderMapper.selectBizMaintenanceOrderTD(bizMaintenanceOrder); } @Override public BizMaintenanceOrder selectBizMaintenanceOrderByOrderIdBefore(BizMaintenanceOrder bizMaintenanceOrder) { return bizMaintenanceOrderMapper.selectBizMaintenanceOrderByOrderIdBefore(bizMaintenanceOrder); } + + @Override + public int countSameDayMaintenanceOrder(BizMaintenanceOrder bizMaintenanceOrder) { + LocalDate today = LocalDate.now(); + // PDA 新增工单按“生成当天”限次,日期边界由 Java 生成,Mapper 只做范围比较以兼容 MySQL/SQL Server。 + bizMaintenanceOrder.getParams().put("beginTime", DateUtils.toDate(today)); + bizMaintenanceOrder.getParams().put("endTime", DateUtils.toDate(today.plusDays(1))); + return bizMaintenanceOrderMapper.countSameDayMaintenanceOrder(bizMaintenanceOrder); + } } diff --git a/ruoyi-system/src/main/resources/mapper/tyre/BizMaintenanceOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/tyre/BizMaintenanceOrderMapper.xml index 02782331..94bfd23d 100644 --- a/ruoyi-system/src/main/resources/mapper/tyre/BizMaintenanceOrderMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/tyre/BizMaintenanceOrderMapper.xml @@ -114,13 +114,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where order_id = #{orderId} - SELECT MAX(order_no) as order_no FROM biz_maintenance_order WHERE - DATE(create_time) = CURDATE(); + create_time >= #{params.beginTime} + AND create_time < #{params.endTime} + +