From 9f6d07b4eb72dfce7fb52ad35dffdf18096ca135 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 23 九月 2026 13:38:05 +0800
Subject: [PATCH] 增加新功能

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TFleetServiceImpl.java |  126 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 126 insertions(+), 0 deletions(-)

diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TFleetServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TFleetServiceImpl.java
index cd79643..2f11a67 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TFleetServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TFleetServiceImpl.java
@@ -1,10 +1,28 @@
 package com.ruoyi.other.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.other.api.domain.TFleet;
+import com.ruoyi.other.api.domain.TGroupCompany;
+import com.ruoyi.other.api.dto.FleetExcelDTO;
+import com.ruoyi.other.api.dto.FleetQueryDTO;
 import com.ruoyi.other.mapper.TFleetMapper;
 import com.ruoyi.other.service.TFleetService;
+import com.ruoyi.other.service.TGroupCompanyService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -17,4 +35,112 @@
 @Service
 public class TFleetServiceImpl extends ServiceImpl<TFleetMapper, TFleet> implements TFleetService {
 
+    private static final int ENABLED = 1;
+    private static final int DISABLED = 0;
+
+    @Resource
+    private TGroupCompanyService groupCompanyService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String importFleets(List<FleetExcelDTO> items) {
+        if (items == null || items.isEmpty()) {
+            throw new ServiceException("导入数据不能为空");
+        }
+        Set<String> fleetNames = new HashSet<>();
+        Set<String> companyNames = new HashSet<>();
+        int row = 1;
+        for (FleetExcelDTO item : items) {
+            row++;
+            if (item == null || !StringUtils.hasText(item.getFleetName())) {
+                throw new ServiceException("第" + row + "行车队名称不能为空");
+            }
+            String fleetName = item.getFleetName().trim();
+            if (fleetName.length() > 128) {
+                throw new ServiceException("第" + row + "行车队名称不能超过128个字符");
+            }
+            if (!StringUtils.hasText(item.getCompanyName())) {
+                throw new ServiceException("第" + row + "行所属公司不能为空");
+            }
+            parseStatus(item.getStatus(), row);
+            if (!fleetNames.add(fleetName) || lambdaQuery().eq(TFleet::getFleetName, fleetName).count() > 0) {
+                throw new ServiceException("第" + row + "行车队名称已存在或重复");
+            }
+            companyNames.add(item.getCompanyName().trim());
+        }
+        // 批量查询公司名称 -> ID
+        Map<String, Integer> companyMap = groupCompanyService.lambdaQuery()
+                .in(TGroupCompany::getName, companyNames)
+                .list()
+                .stream()
+                .collect(Collectors.toMap(TGroupCompany::getName, TGroupCompany::getId, (a, b) -> a));
+        row = 1;
+        for (FleetExcelDTO item : items) {
+            row++;
+            String companyName = item.getCompanyName().trim();
+            if (!companyMap.containsKey(companyName)) {
+                throw new ServiceException("第" + row + "行所属公司不存在:" + companyName);
+            }
+        }
+        LocalDateTime now = LocalDateTime.now();
+        for (FleetExcelDTO item : items) {
+            TFleet fleet = new TFleet();
+            fleet.setCompanyId(companyMap.get(item.getCompanyName().trim()));
+            fleet.setFleetName(item.getFleetName().trim());
+            fleet.setContactName(trim(item.getContactName()));
+            fleet.setContactPhone(trim(item.getContactPhone()));
+            fleet.setRemark(trim(item.getRemark()));
+            fleet.setStatus(parseStatus(item.getStatus(), 0));
+            fleet.setDelFlag(false);
+            fleet.setCreateTime(now);
+            save(fleet);
+        }
+        return "成功导入" + items.size() + "条车队数据";
+    }
+
+    @Override
+    public List<FleetExcelDTO> selectExportList(FleetQueryDTO query) {
+        FleetQueryDTO safe = query == null ? new FleetQueryDTO() : query;
+        List<TFleet> fleets = lambdaQuery()
+                .like(StringUtils.hasText(safe.getFleetName()), TFleet::getFleetName, safe.getFleetName())
+                .eq(safe.getCompanyId() != null, TFleet::getCompanyId, safe.getCompanyId())
+                .eq(safe.getStatus() != null, TFleet::getStatus, safe.getStatus())
+                .orderByDesc(TFleet::getId)
+                .list();
+        if (fleets == null || fleets.isEmpty()) {
+            return new ArrayList<>();
+        }
+        Set<Integer> companyIds = fleets.stream()
+                .map(TFleet::getCompanyId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+        Map<Integer, String> nameMap = companyIds.isEmpty() ? Collections.emptyMap()
+                : groupCompanyService.listByIds(companyIds).stream()
+                        .collect(Collectors.toMap(TGroupCompany::getId, TGroupCompany::getName, (a, b) -> a));
+        return fleets.stream().map(item -> {
+            FleetExcelDTO dto = new FleetExcelDTO();
+            dto.setFleetName(item.getFleetName());
+            dto.setCompanyName(nameMap.get(item.getCompanyId()));
+            dto.setContactName(item.getContactName());
+            dto.setContactPhone(item.getContactPhone());
+            dto.setStatus(item.getStatus() == null ? null : String.valueOf(item.getStatus()));
+            dto.setRemark(item.getRemark());
+            return dto;
+        }).collect(Collectors.toList());
+    }
+
+    private String trim(String value) {
+        return value == null ? null : value.trim();
+    }
+
+    private Integer parseStatus(String value, int row) {
+        if (!StringUtils.hasText(value) || "1".equals(value.trim()) || "启用".equals(value.trim())) {
+            return ENABLED;
+        }
+        if ("0".equals(value.trim()) || "停用".equals(value.trim())) {
+            return DISABLED;
+        }
+        throw new ServiceException((row > 0 ? "第" + row + "行" : "") + "启用状态错误");
+    }
+
 }

--
Gitblit v1.7.1