#id重复bug

This commit is contained in:
2026-05-15 17:32:14 +08:00
parent 8ed9048bc1
commit b813a3d409

View File

@@ -243,7 +243,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<IotWorkOrderMapper, IOTWor
@Override
public int insertWorkOrder(IOTWorkOrder workOrder) {
workOrder.setOrderNo(generateOrderNo());
workOrder.setOrderNo(generateUniqueOrderNo());
workOrder.setTenantId(SecurityUtils.getLoginUser().getOrgId());
workOrder.setOrgId(SecurityUtils.getLoginUser().getOrgId());
workOrder.setCreateTime(LocalDateTime.now());
@@ -435,7 +435,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<IotWorkOrderMapper, IOTWor
}
IOTWorkOrder workOrder = new IOTWorkOrder();
workOrder.setOrderNo(generateOrderNo());
workOrder.setOrderNo(generateUniqueOrderNo());
workOrder.setOrderTitle(alarm.getAlarmTitle());
workOrder.setSourceType(7);
workOrder.setOrderType(2);
@@ -467,10 +467,31 @@ public class WorkOrderServiceImpl extends ServiceImpl<IotWorkOrderMapper, IOTWor
}
}
private String generateOrderNo() {
String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
long count = baseMapper.selectCount(new LambdaQueryWrapper<IOTWorkOrder>()
.likeRight(IOTWorkOrder::getOrderNo, "WO" + dateStr));
return "WO" + dateStr + String.format("%04d", count + 1);
}
private synchronized String generateUniqueOrderNo() {
int maxRetries = 10;
for (int i = 0; i < maxRetries; i++) {
String orderNo = generateOrderNo();
Long count = baseMapper.selectCount(new LambdaQueryWrapper<IOTWorkOrder>()
.eq(IOTWorkOrder::getOrderNo, orderNo));
if (count == 0) {
return orderNo;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new ServiceException("生成工单号失败");
}
}
throw new ServiceException("生成工单号失败,请稍后重试");
}
}