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;
|
|
/**
|
* <p>
|
* 培训计划详情 服务实现类
|
* </p>
|
*
|
* @author
|
* @since 2024-10-11 01:46:27
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
@AllArgsConstructor
|
public class PersonTrainingDetailedServiceImpl extends ServiceImpl<PersonTrainingDetailedMapper, PersonTrainingDetailed> implements PersonTrainingDetailedService {
|
|
|
private UserMapper userMapper;
|
|
@Override
|
public void importExcel(List<PersonTrainingDetailedUpload> list, Integer planId) {
|
List<PersonTrainingDetailed> 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<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(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<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page, String trainingLecturerName, String courseCode, String trainingDate, Integer id, Integer userId) {
|
return baseMapper.queryTheAnnualPlanDetailsTable(page, trainingLecturerName, courseCode, trainingDate, id, userId, null);
|
}
|
}
|