package com.ruoyi.personnel.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.numgen.NumberGenerator; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.personnel.dto.PersonTrainingDetailedDto; import com.ruoyi.personnel.excel.PersonTrainingDetailedUpload; import com.ruoyi.personnel.mapper.PersonTrainingDetailedMapper; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import com.ruoyi.personnel.service.PersonTrainingDetailedService; import com.ruoyi.system.mapper.UserMapper; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** *

* 培训计划详情 服务实现类 *

* * @author * @since 2024-10-11 01:46:27 */ @Service @Transactional(rollbackFor = Exception.class) @AllArgsConstructor public class PersonTrainingDetailedServiceImpl extends ServiceImpl implements PersonTrainingDetailedService { private UserMapper userMapper; @Override public void importExcel(List list, Integer planId) { List personTrainingDetailedList = new ArrayList<>(); list.forEach(i -> { PersonTrainingDetailed personTrainingDetailed = new PersonTrainingDetailed(); BeanUtils.copyProperties(i, personTrainingDetailed); // 匹配讲师:系统内唯一匹配的存用户ID;外聘/非系统讲师按姓名文本保存 if (StringUtils.isBlank(i.getTrainingLecturerName())) { throw new ErrorException("培训讲师不能为空"); } String lecturerName = i.getTrainingLecturerName().trim(); List lecturers = userMapper.selectList(Wrappers.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(normalizeTrainingDate(i.getTrainingDate())); personTrainingDetailedList.add(personTrainingDetailed); }); // 批量新增 if (CollectionUtils.isNotEmpty(personTrainingDetailedList)) { baseMapper.insertBatchSomeColumn(personTrainingDetailedList); } } /** * 培训时间统一成 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(","); if (split.length > 0) { for (String s : split) { baseMapper.deleteById(s); } } } @Override public IPage queryTheAnnualPlanDetailsTable(Page page, String trainingLecturerName, String courseCode, String trainingDate, Integer id, Integer userId) { return baseMapper.queryTheAnnualPlanDetailsTable(page, trainingLecturerName, courseCode, trainingDate, id, userId, null); } }