feat(工单管理): 添加同一天同一车辆维保类型工单限制功能:生成工单这个接口 全部类型的都限制 每辆车每种类型每天只有一次。

- 添加countSameDayMaintenanceOrder方法检查同一天同一车辆的相同维保类型工单数量
- 修改selectBizMaintenanceOrderTD方法支持日期范围查询
- 在PDAAddMaintenanceOrder接口中添加重复提交校验和工单限制校验
- 使用Java生成日期范围避免数据库兼容性问题
master
zch 1 month ago
parent 6ecf106a20
commit 16a9178708

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

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

@ -63,7 +63,9 @@ public interface IBizMaintenanceOrderService
List<BizMaintenanceOrder> selectBizMaintenanceOrderListTwo(BizMaintenanceOrder bizMaintenanceOrder);
BizMaintenanceOrder selectBizMaintenanceOrderTD();
BizMaintenanceOrder selectBizMaintenanceOrderTD(BizMaintenanceOrder bizMaintenanceOrder);
BizMaintenanceOrder selectBizMaintenanceOrderByOrderIdBefore(BizMaintenanceOrder bizMaintenanceOrder);
int countSameDayMaintenanceOrder(BizMaintenanceOrder bizMaintenanceOrder);
}

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

@ -114,13 +114,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where order_id = #{orderId}
</select>
<select id="selectBizMaintenanceOrderTD" resultMap="BizMaintenanceOrderResult">
<select id="selectBizMaintenanceOrderTD" parameterType="BizMaintenanceOrder" resultMap="BizMaintenanceOrderResult">
SELECT
MAX(order_no) as order_no
FROM
biz_maintenance_order
WHERE
DATE(create_time) = CURDATE();
create_time &gt;= #{params.beginTime}
AND create_time &lt; #{params.endTime}
</select>
<select id="countSameDayMaintenanceOrder" parameterType="BizMaintenanceOrder" resultType="int">
SELECT
COUNT(1)
FROM
biz_maintenance_order
WHERE
plate_number = #{plateNumber}
AND type_code = #{typeCode}
AND create_time &gt;= #{params.beginTime}
AND create_time &lt; #{params.endTime}
</select>
<select id="selectBizMaintenanceOrderByOrderIdBefore"
resultMap="BizMaintenanceOrderResult" parameterType="BizMaintenanceOrder">

Loading…
Cancel
Save