| | |
| | | |
| | | 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; |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 培训时间统一成 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(","); |