package com.yuanchu.mom.service.impl;
import cn.hutool.core.lang.UUID;
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.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.yuanchu.mom.dto.DepartmentDto;
import com.yuanchu.mom.dto.PersonBasicInfoDto;
import com.yuanchu.mom.dto.UserPageDto;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.service.PersonBasicInfoService;
import com.yuanchu.mom.utils.QueryWrappers;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.xwpf.usermodel.*;
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 javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
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("${wordUrl}")
private String wordUrl;
@Resource
private UserMapper userMapper;
@Resource
private AnnexMapper annexMapper;
@Resource
private PersonTrackRecordMapper personTrackRecordMapper;
@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.setDepartment(personBasicInfoDto.getDepartment());
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