//package com.ruoyi.personnel.service.impl; // //import com.alibaba.excel.EasyExcel; //import com.alibaba.excel.ExcelWriter; //import com.alibaba.excel.write.metadata.WriteSheet; //import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; //import com.alibaba.fastjson2.JSON; //import com.alibaba.fastjson2.JSONObject; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.baomidou.mybatisplus.core.metadata.IPage; //import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; //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.DepartmentDto; //import com.ruoyi.common.core.domain.entity.DepartmentLims; //import com.ruoyi.common.core.domain.entity.User; //import com.ruoyi.common.utils.QueryWrappers; //import com.ruoyi.framework.exception.ErrorException; //import com.ruoyi.personnel.dto.PersonBasicInfoDto; //import com.ruoyi.personnel.dto.UserPageDto; //import com.ruoyi.personnel.mapper.AnnexMapper; //import com.ruoyi.personnel.mapper.PersonBasicInfoFileMapper; //import com.ruoyi.personnel.mapper.PersonBasicInfoMapper; //import com.ruoyi.personnel.mapper.PersonBasicInfoWorkMapper; //import com.ruoyi.personnel.pojo.Annex; //import com.ruoyi.personnel.pojo.PersonBasicInfo; //import com.ruoyi.personnel.pojo.PersonBasicInfoFile; //import com.ruoyi.personnel.pojo.PersonBasicInfoWork; //import com.ruoyi.personnel.service.PersonBasicInfoService; //import com.ruoyi.system.mapper.DepartmentLimsMapper; //import com.ruoyi.system.mapper.UserMapper; //import org.apache.poi.xwpf.usermodel.XWPFTable; //import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; //import org.springframework.beans.BeanUtils; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Value; //import org.springframework.stereotype.Service; //import org.springframework.transaction.annotation.Transactional; //import org.springframework.web.multipart.MultipartFile; // //import javax.annotation.Resource; //import javax.servlet.http.HttpServletResponse; //import java.io.File; //import java.io.IOException; //import java.io.InputStream; //import java.io.OutputStream; //import java.net.URLEncoder; //import java.time.LocalDateTime; //import java.time.format.DateTimeFormatter; //import java.util.*; //import java.util.stream.Collectors; // ///** // *

// * 服务实现类 // *

// * // * @author 江苏鵷雏网络科技有限公司 // * @since 2024-08-30 09:19:57 // */ // //@Service //@Transactional(rollbackFor = Exception.class) //public class PersonBasicInfoServiceImpl extends ServiceImpl implements PersonBasicInfoService { // // @Autowired // private DepartmentLimsMapper departmentMapper; // @Value("${file.path}") // private String imgUrl; // @Value("${wordUrl}") // private String wordUrl; // @Resource // private UserMapper userMapper; // @Resource // private AnnexMapper annexMapper; // @Resource // private PersonBasicInfoFileMapper personBasicInfoFileMapper; // @Resource // private PersonBasicInfoWorkMapper personBasicInfoWorkMapper; // // @Override // public List selectCNSAPersonTree() { // List departments = departmentMapper.selectDepartment(); // List limsUser = baseMapper.selectLimsUser(); // departments.addAll(limsUser); // //获取父节点 // return departments.stream().filter(m -> m.getFatherId() == null).peek( // (m) -> m.setChildren(getChildren(m, departments)) // ).collect(Collectors.toList()); // } // // @Override // public Map getCNASPersonnelInfo(Integer userId) { // Map map = new HashMap<>(); // Map> childrenMap = new HashMap<>(); // List deptS = departmentMapper.selectList(null); // for (DepartmentLims dept : deptS) { // if(!Objects.isNull(dept.getFatherId())) { // if(!childrenMap.containsKey(dept.getFatherId())) { // childrenMap.put(dept.getFatherId(),new ArrayList<>()); // } // childrenMap.get(dept.getFatherId()).add(dept); // } // } // // 父节点 // List deptF = new ArrayList<>(); // for (DepartmentLims dept : deptS) { // if(Objects.isNull(dept.getFatherId())) { // deptF.add(buildTree(dept,childrenMap)); // } // } // map.put("department",deptF); // map.put("PersonBasicInfoDto",baseMapper.getCNASPersonnelInfo(userId)); // map.put("annexList",annexMapper.selectList(new LambdaQueryWrapper().eq(Annex::getUserId,userId))); // return map; // } // // private DepartmentLims buildTree(DepartmentLims departmentLims, Map> childrenMap) { // if(childrenMap.containsKey(departmentLims.getId())) { // departmentLims.setChildren(childrenMap.get(departmentLims.getId())); // for (DepartmentLims departmentLims1 : departmentLims.getChildren()) { // buildTree(departmentLims1,childrenMap); // } // } // return departmentLims; // } // // @Override // public void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto) { // User user = new User(); // user.setId(personBasicInfoDto.getUserId()); // user.setAccount(personBasicInfoDto.getAccount()); // user.setName(personBasicInfoDto.getName()); // user.setNameEn(personBasicInfoDto.getNameEn()); // user.setAge(personBasicInfoDto.getAge()); // user.setPhone(personBasicInfoDto.getPhone()); // user.setEmail(personBasicInfoDto.getEmail()); // user.setSignatureUrl(personBasicInfoDto.getSignatureUrl()); // user.setPictureUrl(personBasicInfoDto.getPictureUrl()); // user.setDepartLimsId(personBasicInfoDto.getDepartLimsId()); // userMapper.updateById(user); // PersonBasicInfo personBasicInfo = JSONObject.parseObject(JSON.toJSONString(personBasicInfoDto), PersonBasicInfo.class); // PersonBasicInfo one = baseMapper.selectOne(new LambdaQueryWrapper() // .eq(PersonBasicInfo::getUserId, personBasicInfoDto.getUserId())); // if(Objects.isNull(one)) { // baseMapper.insert(personBasicInfo); // }else { // baseMapper.updateById(personBasicInfo); // } // } // // @Override // public IPage> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId) { // return baseMapper.selectPersonBasecInfoAndUser(page, name, departmentId); // } // // @Override // public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception { // ArrayList data = new ArrayList<>(); // List list = userMapper.selectUserDtoPageList(new Page(-1, -1), QueryWrappers.queryWrappers(userPageDto)).getRecords(); // for (User user : list) { // PersonBasicInfoDto personBasicInfoDto = new PersonBasicInfoDto(); // PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId())); // if (ObjectUtils.isNotEmpty(personBasicInfo)) { // BeanUtils.copyProperties(personBasicInfo, personBasicInfoDto); // } // personBasicInfoDto.setName(user.getName()); // personBasicInfoDto.setAccount(user.getAccount()); // personBasicInfoDto.setPhone(ObjectUtils.isNotEmpty(user.getPhone()) ? user.getPhone() : " "); // data.add(personBasicInfoDto); // } // response.setContentType("application/vnd.ms-excel"); // response.setCharacterEncoding("UTF-8"); // String fileName = URLEncoder.encode("人员基本信息列表导出", "UTF-8"); // response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); // try { // // 新建ExcelWriter // ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); // WriteSheet mainSheet = EasyExcel.writerSheet(0, "人员基本信息导出").head(PersonBasicInfoDto.class).build(); // excelWriter.write(data, mainSheet); // // 关闭流 // excelWriter.finish(); // } catch (IOException e) { // throw new RuntimeException("导出失败"); // } // } // // @Override // public String exportPersonBasicInfoById(Integer id, HttpServletResponse response) { // Map userMap = baseMapper.selectexportPersonBasic(id); // User user = userMapper.selectById(id); // PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId())); // if (ObjectUtils.isEmpty(personBasicInfo)){ // throw new ErrorException("该用户的基本信息没有录入,暂无法导出"); // } // // 证件 // List annexList = annexMapper.selectList(Wrappers.lambdaQuery() // .eq(Annex::getUserId, id)); // // 工作经历 // List personBasicInfoWorks = personBasicInfoWorkMapper.selectList(Wrappers.lambdaQuery() // .eq(PersonBasicInfoWork::getUserId, id)); // // List workList = personBasicInfoWorks.stream().map(basicInfoWork -> { // PersonBasicInfoWorkDto personBasicInfoWorkDto = new PersonBasicInfoWorkDto(); // personBasicInfoWorkDto.setWorkExperience(basicInfoWork.getWorkExperience()); // personBasicInfoWorkDto.setFill("主要工作经历\nMain work experience∑1"); // return personBasicInfoWorkDto; // }).collect(Collectors.toList()); // // // 检查列表长度并填充空对象 // while (annexList.size() < 10) { // annexList.add(new Annex()); // } // // // 检查列表长度并填充空对象 // while (workList.size() < 4) { // workList.add(new PersonBasicInfoWorkDto()); // } // // // 获取路径 // InputStream inputStream = this.getClass().getResourceAsStream("/static/person-basic-info.docx"); // Configure configure = Configure.builder() // .bind("annexList", new HackLoopTableRenderPolicy()) // .bind("workList", new HackLoopTableRenderPolicy()) // .build(); // XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( // new HashMap() {{ // put("user", userMap); // put("annexList", annexList); // put("workList", workList); // }}); // // try { // response.setContentType("application/msword"); // String fileName = URLEncoder.encode( // userMap.get("name") + "人员档案", "UTF-8"); // response.setHeader("Content-disposition", // "attachment;filename=" + fileName + ".docx"); // OutputStream os = response.getOutputStream(); // template.write(os); // os.flush(); // os.close(); // } catch (Exception e) { // e.printStackTrace(); // throw new RuntimeException("导出失败"); // } // // return null; // } // // /** // * 人员培训基本信息附件新增 // * @param userId // * @param file // * @return // */ // @Override // public boolean uploadBasicInfoFile(Integer userId, MultipartFile file) { // if (userId == null) { // throw new ErrorException("缺少人员id"); // } // // String urlString; // String pathName; // String path; // String filename = file.getOriginalFilename(); // String contentType = file.getContentType(); // PersonBasicInfoFile personBasicInfoFile = new PersonBasicInfoFile(); // personBasicInfoFile.setUserId(userId); // personBasicInfoFile.setFileName(filename); // if (contentType != null && contentType.startsWith("image/")) { // // 是图片 // path = imgUrl; // personBasicInfoFile.setType(1); // } else { // // 是文件 // path = wordUrl; // personBasicInfoFile.setType(2); // } // try { // File realpath = new File(path); // if (!realpath.exists()) { // realpath.mkdirs(); // } // pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename(); // urlString = realpath + "/" + pathName; // file.transferTo(new File(urlString)); // personBasicInfoFile.setFileUrl(pathName); // personBasicInfoFileMapper.insert(personBasicInfoFile); // return true; // } catch (Exception e) { // e.printStackTrace(); // System.err.println("附件上传错误"); // return false; // } // } // // /** // * 递归查询子节点 // * @param root 根节点 // * @param all 所有节点 // * @return 根节点信息 // */ // private List getChildren(DepartmentDto root, List all) { // if (ObjectUtils.isNotEmpty(root.getId())) { // return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek( // (m) -> m.setChildren(getChildren(m, all)) // ).collect(Collectors.toList()); // } else { // return Collections.emptyList(); // } // } // // // 水平合并单元格 // private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) { // for (int i = fromCol; i <= toCol; i++) { // if (i == fromCol) { // table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); // } else { // table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); // } // } // } // // // 垂直合并单元格 // private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { // for (int i = fromRow; i <= toRow; i++) { // if (i == fromRow) { // table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); // } else { // table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); // } // } // } //}