gaoluyang
3 天以前 abd339106ed3a6465293edccd33e5f87bd43bdde
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingDetailedServiceImpl.java
@@ -2,7 +2,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -47,17 +47,24 @@
            PersonTrainingDetailed personTrainingDetailed = new PersonTrainingDetailed();
            BeanUtils.copyProperties(i, personTrainingDetailed);
            // 匹配讲师
            User user = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                    .eq(User::getName, i.getTrainingLecturerName()));
            if (ObjectUtils.isEmpty(user)) {
                throw new ErrorException("未找到该讲师:" + i.getTrainingLecturerName());
            // 匹配讲师:系统内唯一匹配的存用户ID;外聘/非系统讲师按姓名文本保存
            if (StringUtils.isBlank(i.getTrainingLecturerName())) {
                throw new ErrorException("培训讲师不能为空");
            }
            personTrainingDetailed.setTrainingLecturerId(user.getId());
            String lecturerName = i.getTrainingLecturerName().trim();
            List<User> lecturers = userMapper.selectList(Wrappers.<User>lambdaQuery()
                    .eq(User::getName, lecturerName));
            if (lecturers.size() == 1) {
                personTrainingDetailed.setTrainingLecturerId(lecturers.get(0).getId());
                personTrainingDetailed.setTrainingLecturerName(null);
            } else {
                personTrainingDetailed.setTrainingLecturerId(null);
                personTrainingDetailed.setTrainingLecturerName(lecturerName);
            }
            personTrainingDetailed.setPlanId(planId);
            personTrainingDetailed.setState(3);
            personTrainingDetailed.setTrainingDate(i.getTrainingDate());
            personTrainingDetailed.setTrainingDate(normalizeTrainingDate(i.getTrainingDate()));
            personTrainingDetailedList.add(personTrainingDetailed);
@@ -68,6 +75,32 @@
        }
    }
    /**
     * 培训时间统一成 yyyy-MM-dd。
     * Excel 里被自动识别成日期的单元格读出来是 2026/3/15,手工录入的是 2026-03-15,
     * 这里统一转换,避免导出时格式不一致。
     */
    private String normalizeTrainingDate(String value) {
        if (value == null || value.isBlank()) {
            return value;
        }
        String text = value.trim().split("\\s+")[0]
                .replace('年', '-').replace('月', '-').replace("日", "")
                .replace('/', '-').replace('.', '-');
        String[] parts = text.split("-");
        if (parts.length == 3) {
            try {
                int year = Integer.parseInt(parts[0].trim());
                int month = Integer.parseInt(parts[1].trim());
                int day = Integer.parseInt(parts[2].trim());
                return String.format("%04d-%02d-%02d", year, month, day);
            } catch (NumberFormatException ignored) {
                // 不是可识别的日期格式,原样保存
            }
        }
        return value.trim();
    }
    @Override
    public void deleteAnnualPlanDetailTable(String ids) {
        String[] split = ids.split(",");