package com.ruoyi.project.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.UserRolesType; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.bean.BeanValidators; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.project.bo.*; import com.ruoyi.project.domain.ProjectStaff; import com.ruoyi.project.domain.ProjectStaffRecord; import com.ruoyi.project.domain.ProjectTask; import com.ruoyi.project.mapper.ProjectStaffMapper; import com.ruoyi.project.mapper.ProjectStaffRecordMapper; import com.ruoyi.project.mapper.ProjectTaskMapper; import com.ruoyi.project.service.ProjectTaskService; import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.service.ISysDeptService; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Validator; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.ZipOutputStream; import static java.lang.Thread.sleep; @Service public class ProjectTaskServiceImpl implements ProjectTaskService { private static final Logger log = LoggerFactory.getLogger(ProjectTaskServiceImpl.class); @Resource private ProjectTaskMapper projectTaskMapper; @Resource private ProjectStaffMapper projectStaffMapper; @Resource private ISysDeptService deptService; @Resource private Validator validator; @Resource private SysUserMapper userMapper; @Resource private ProjectStaffRecordMapper projectStaffRecordMapper; @Resource private SysDeptMapper sysDeptMapper; @Resource private TianheService tianheService; @Resource private SysUserRoleMapper sysUserRoleMapper; @Value("${ruoyi.profile}") private String profile=null; @Override public AjaxResult addProjectTask(ProjectTask projectTask) { userMapper.updateUserProjectSum(projectTask.getAid(),0); projectTask.setCreateAid(SecurityUtils.getUserId()); int i = projectTaskMapper.insertSelective(projectTask); if (StringUtils.isNotBlank(projectTask.getStaffObject())){ String[] split = projectTask.getStaffObject().split(","); projectStaffMapper.updatePidByList(projectTask.getId(),split); projectTaskMapper.updateStaffName(projectTask.getId()); } return AjaxResult.success(i); } @Override public AjaxResult deleteProject(ProjectTask in) { int i = projectTaskMapper.deleteByPrimaryKey(in.getId()); userMapper.updateUserProjectSum(in.getAid(),0); if (i>0){ projectStaffMapper.deleteBypid(in.getId()); return AjaxResult.success(); } return AjaxResult.error("项目编号不存在"); } @Override public AjaxResult details(Long id) { ProjectTask projectTask = projectTaskMapper.selectByPrimaryKey(id); ProjectTaskOut out= new ProjectTaskOut(); if (projectTask!=null){ BeanUtils.copyBeanProp(out, projectTask); List projectStaffs = projectStaffMapper.selectByPid(id); if (!projectStaffs.isEmpty())out.setList(projectStaffs); return AjaxResult.success(out); } return AjaxResult.error("项目不存在"); } @Override public List list(ProjectListInput in) { pushRoleType(in); if (!SecurityUtils.isSuperAdmin()){ in.setUid(SecurityUtils.getUserId()); Long companyId = deptService.selectCompanyByDeptId(); if (companyId!=null)in.setCompanyId(companyId); } if (in.getMyCreate()!=null&&in.getMyCreate()==1){ in.setCreateAid(SecurityUtils.getUserId()); } if (in.getEndTime()!=null)in.setEndTime(in.getEndTime()+" 23:59:59"); PageUtils.startPage(); return projectTaskMapper.selectList(in); } private void pushRoleType(ProjectListInput in) { if (in.getRoleType()==null){ if (SecurityUtils.hashRoles(UserRolesType.CEO.getCode())){ in.setRoleType(1); }else if (SecurityUtils.hashRoles(UserRolesType.ADMIN.getCode())){ in.setRoleType(3); }else if (SecurityUtils.hashRoles(UserRolesType.MANAGE.getCode())){ in.setRoleType(2); }else { in.setRoleType(0); } } } @Override public String importProject(List list, boolean updateSupport, String operName) { if (StringUtils.isNull(list) || list.size() == 0) { throw new ServiceException("导入用户数据不能为空!"); } int successNum = 0; int failureNum = 0; StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); Long company = deptService.selectCompanyByDeptId(); List pids = new ArrayList(); for (ProjectTaskListOut p : list) { try { if (p.getProjectYear()==null||p.getProjectYear()==""){ throw new ServiceException("项目年份不能为空"); }else if (p.getCreateYear()==null||p.getCreateYear()==""){ throw new ServiceException("创建年份不能为空"); } // 验证是否存在这个用户 ProjectTask projectTask = projectTaskMapper.selectByProjectNumber(p.getProjectNumber(),company); if (StringUtils.isNull(projectTask)){ BeanValidators.validateWithException(validator, p); if (checkProjectNumber(p)){ throw new ServiceException(String.format("项目编号[%s]已存在", p.getProjectNumber())); } if(StringUtils.isNotBlank(p.getAdminName())) { SysUser sysUser = userMapper.selectByNikeName(p.getAdminName(),company); if (sysUser == null) { throw new ServiceException(String.format("负责人[%s]不存在", p.getAdminName())); } p.setAid(sysUser.getUserId()); p.setAdminName(sysUser.getNickName()); } p.setProjectStatus(0); projectTaskMapper.insertSelective(p); pushProjectStaffName(p, company); successNum++; successMsg.append("
" + successNum + "、项目: " + p.getName() + " 导入成功"); }else if (updateSupport){ BeanValidators.validateWithException(validator, p); p.setId(projectTask.getId()); if(StringUtils.isNotBlank(p.getStaffName())) { addStaffAndDelete( p); } if (p.getAdminName()!=null&&!projectTask.getAdminName().equals(p.getAdminName())){ SysUser sysUser = userMapper.selectByNikeName(p.getAdminName(),company); if (sysUser == null) { throw new ServiceException(String.format("负责人[%s]不存在", p.getAdminName())); } List projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(p.getId(), projectTask.getAid()); if (projectStaffRecords.size()>0){ throw new ServiceException(String.format("负责人[%s]存在打卡,不允许切换.", projectTask.getAdminName())); } p.setAid(sysUser.getUserId()); p.setAdminName(sysUser.getNickName()); } projectTaskMapper.updateByPrimaryKeySelective(p); if (!pids.contains(p.getId())){ pids.add(p.getId()); } successNum++; successMsg.append("
" + successNum + "、项目: " + projectTask.getName() + " 更新成功"); } else { failureNum++; failureMsg.append("
" + failureNum + "、项目: " + projectTask.getName() + " 已存在"); } } catch (Exception e) { failureNum++; String msg = "
" + failureNum + "、项目: " + p.getName() + " 导入失败:"; failureMsg.append(msg + e.getMessage()); log.error(msg, e); } } if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new ServiceException(failureMsg.toString()); } else { successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); } if (!pids.isEmpty()){ for (Long pid : pids) { projectStaffRecordMapper.updateSumDurationProject(pid); projectStaffRecordMapper.updateSumDurationStaff(pid); } } return successMsg.toString(); } private void pushProjectStaffName(ProjectTaskListOut p, Long company) { if(StringUtils.isNotBlank(p.getStaffName())) { String[] split = StringUtils.splitString(p.getStaffName()); for (String s : split) { ProjectStaff newPs = new ProjectStaff(); SysUser sysUser = userMapper.selectByNikeName(s, company); if (sysUser == null) { throw new ServiceException("[" + s + "]不存在"); } newPs.setAid(sysUser.getUserId()); newPs.setName(sysUser.getNickName()); newPs.setPid(p.getId()); projectStaffMapper.insertSelective(newPs); } } projectTaskMapper.updateStaffName(p.getId()); } @Override public AjaxResult updateProjectTask(ProjectTask in) { ProjectTask use = projectTaskMapper.selectByPrimaryKey(in.getId()); if (!in.getAid().equals(use.getAid())){ List projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(in.getId(), use.getAid()); if (projectStaffRecords.size()>0){ throw new ServiceException(String.format("负责人[%s]存在打卡,不允许切换.", use.getAdminName())); } } return AjaxResult.success(projectTaskMapper.updateByPrimaryKeySelective(in)); } @Override public AjaxResult selectProjectImg(Long pid) { return AjaxResult.success(projectTaskMapper.selectProjectImg(pid)); } @Override public boolean checkProjectNumber(ProjectTask projectTask) { Long companyId = deptService.selectCompanyByDeptId(); ProjectTask projectTask1 = projectTaskMapper.selectByProjectNumber(projectTask.getProjectNumber(),companyId); if (projectTask.getId()==null){ if (projectTask1!=null){ return true; } }else { if (projectTask1!=null&&!projectTask.getId().equals(projectTask1.getId())){ return true; } } return false; } private void addStaffAndDelete( ProjectTaskListOut p) { String[] split = p.getStaffName().split(","); List projectStaffs = projectStaffMapper.selectByPid(p.getId()); deleteStaff( split, projectStaffs); addStaff( p, split, projectStaffs); //再从新获取统计名字 projectTaskMapper.updateStaffName(p.getId()); } private void deleteStaff( String[] split, List projectStaffs) { //预设需要删除,如果找到相同名字的就无需删除 for (ProjectStaff ps : projectStaffs) { boolean flag = true; for (String s : split) { s=s.trim(); if (ps.getName().equals(s)) { flag = false; } } if (flag) { int sum = projectStaffRecordMapper.selectById(ps.getId()); if (sum > 0) { throw new ServiceException("[" + ps.getName() + "]存在打卡不能删除"); } projectStaffMapper.deleteByPrimaryKey(ps.getId()); } } } private void addStaff( ProjectTaskListOut p, String[] split, List projectStaffs) { Long company = deptService.selectCompanyByDeptId(); for (String s : split) { s=s.trim(); boolean flag = true; for (ProjectStaff ps : projectStaffs) { if (ps.getName().equals(s)) { flag = false; } } if (flag) { ProjectStaff newPs = new ProjectStaff(); SysUser sysUser = userMapper.selectByNikeName(s,company); if (sysUser == null) { throw new ServiceException("[" + s + "]不存在"); } newPs.setAid(sysUser.getUserId()); newPs.setName(sysUser.getNickName()); newPs.setPid(p.getId()); projectStaffMapper.insertSelective(newPs); } } } @Override public void saveProjectTaskTianhe(String ids) { String[] split = ids.split(","); try { for (String id : split) { saveProjectText(Long.valueOf(id)); Thread.sleep(1000); } } catch (InterruptedException e) { throw new RuntimeException("上链异常,请稍后再试"); } } @Override public void saveProjectStaffRecordTianhe(String ids) { String[] split = ids.split(","); try { for (String id : split) { saveRecordsText(Long.valueOf(id)); Thread.sleep(1000); } } catch (InterruptedException e) { throw new RuntimeException("上链异常,请稍后再试"); } } @Override public void saveText(String content) { String address = getAddress(); String operateId ="text_"+DateUtils.dateTimeNow(); //文字导入 String s = tianheService.seveText(address, content, operateId); JSONObject res = JSONObject.parseObject(s); Integer code = (Integer) res.get("code"); String tianheCloudUrl=null; if (code== HttpStatus.OK.value()){ try { sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } String certificate = tianheService.getCertificate(address, operateId); JSONObject certificateData = JSONObject.parseObject(certificate); Integer code2= (Integer) certificateData.get("code"); if (code2==HttpStatus.OK.value()){ log.debug(certificateData.toJSONString()); tianheCloudUrl=certificateData.getString("data"); }else { String msg = certificateData.getString("msg"); log.error(msg); throw new RuntimeException(msg); } }else { String msg = res.getString("msg"); log.error(msg); throw new RuntimeException(msg); } } public void saveRecordsText(Long id) throws InterruptedException { ProjectStaffRecord projectStaffRecord = projectStaffRecordMapper.selectByPrimaryKey(Long.valueOf(id)); Map map=new HashMap<>(); map.put("projectStaffRecord",projectStaffRecord); map.put("date", DateUtils.getTime()); saveTianhe(map,null,null,projectStaffRecord); } public void saveProjectText(Long id) throws InterruptedException { ProjectTask projectTask = projectTaskMapper.selectByPrimaryKey(id); List projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(id, null); Map map=new HashMap<>(); map.put("projectTask",projectTask); map.put("projectStaffRecords",projectStaffRecords); map.put("date", DateUtils.getTime()); saveTianhe(map,projectTask,projectStaffRecords,null); } private void saveTianhe(Map map, ProjectTask projectTask, List projectStaffRecords, ProjectStaffRecord projectStaffRecord) throws InterruptedException { String json = JSONObject.toJSONString(map); String address = getAddress(); String operateId =null; if (projectTask!=null){ operateId = "yfdk_"+DateUtils.dateTimeNow(); }else { operateId = "yfdk_records_"+DateUtils.dateTimeNow(); } String docx = createDocx(json, operateId); File file = new File(docx); String s = tianheService.seveFile(address,operateId,file); //文字导入 // String s = tianheService.seveText(address, json, operateId); JSONObject res = JSONObject.parseObject(s); Integer code = (Integer) res.get("code"); String tianheCloudUrl=null; if (code== HttpStatus.OK.value()){ sleep(1000); String certificate = tianheService.getCertificate(address, operateId); JSONObject certificateData = JSONObject.parseObject(certificate); Integer code2= (Integer) certificateData.get("code"); if (code2==HttpStatus.OK.value()){ log.debug(certificateData.toJSONString()); tianheCloudUrl=certificateData.getString("data"); if (projectTask!=null){ if (StringUtils.isNotEmpty(tianheCloudUrl)){ ProjectTask newPT=new ProjectTask(); newPT.setTianheUrl(tianheCloudUrl); newPT.setId(projectTask.getId()); projectTaskMapper.updateByPrimaryKeySelective(newPT); } pushProjectStaffRecord(projectStaffRecords); } if (projectStaffRecord!=null){ ProjectStaffRecord newPSR=new ProjectStaffRecord(); newPSR.setTianheUrl(tianheCloudUrl); newPSR.setId(projectStaffRecord.getId()); projectStaffRecordMapper.updateByPrimaryKeySelective(newPSR); } FileUtils.deleteFile(docx); }else { String msg = certificateData.getString("msg"); log.error(msg); throw new RuntimeException(msg); } }else { String msg = res.getString("msg"); log.error(msg); throw new RuntimeException(msg); } } private String createDocx(String json, String operateId) { String url=profile+"/"+ operateId +".docx"; XWPFDocument document = new XWPFDocument(); XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); run.setText(json); try { // 保存文档到指定路径 FileOutputStream out = new FileOutputStream(url); document.write(out); out.close(); System.out.println("Word文档已成功创建!"); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭文档对象 try { document.close(); } catch (IOException e) { throw new RuntimeException(e); } } return url; } /** * 处理日志跟随项目上链 */ private void pushProjectStaffRecord(List projectStaffRecords) { int count=50; int i=0; List newList=new ArrayList<>(); for (ProjectStaffRecord projectStaffRecord : projectStaffRecords) { i++; newList.add(projectStaffRecord); if (newList.size()==count||i==projectStaffRecords.size()){ projectStaffRecordMapper.updateTianheType(newList); newList.clear(); } } } private String getAddress() { String address = null; SysUser user = SecurityUtils.getLoginUser().getUser(); SysUser sysUser = userMapper.selectUserById(user.getUserId()); if (sysUser.getTianheId()==null){ try { String userId=user.getUserId().toString(); String s = tianheService.addUser( userId, "123456"); JSONObject jsonObject = JSONObject.parseObject(s); JSONObject data = (JSONObject) jsonObject.get("data"); JSONObject pubKey = (JSONObject) data.get("pubKey"); address= (String) pubKey.get("address"); }catch (Exception e ){ log.error("天河账号创建失败!"); throw new RuntimeException("天河账号创建失败"); } if (address!=null){ user.setTianheId(address); userMapper.updateUser(user); } }else { address=sysUser.getTianheId(); } if (address==null){ throw new ServiceException("天河账号不存在,请稍后再试"); } return address; } @Override public Object getCompanyData(String usci) { //获取部门信息 SysDept sysDept = new SysDept(); SysDept sysDept2 = sysDeptMapper.selectByusci(usci); sysDept.setAncestors(sysDept2.getDeptId().toString()); List sysDepts = sysDeptMapper.selectDeptList(sysDept); sysDepts.stream().forEach(System.out::println); //获取部门下的用户信息 List sysUsers = new ArrayList<>(); List projectTasks=new ArrayList<>(); sysDepts.stream().forEach(sysDept1 -> { sysUsers.addAll(userMapper.selectByDeptId(sysDept1.getDeptId())); }); sysUsers.stream().forEach(sysUser -> { projectTasks.addAll(projectTaskMapper.selectByUserId(sysUser.getUserId())); }); Map map=new HashMap(); map.put("projectTasks",projectTasks); map.put("sysUsers",sysUsers); map.put("sysDepts",sysDepts); return map; } @Override public Object pushCompanyData(pushCompanyDataBo in) { //导入部门 if (!in.getListDep().isEmpty()){ pushAddDep(in.getListDep()); } //导入用户 if (!in.getListUser().isEmpty()){ pushAddUser(in.getListUser()); } //导入用户项目 if (!in.getListUserProject().isEmpty()){ pushAddUserProject(in.getListUserProject()); } return 1; } @Override public Object pushRdData(pushRdDataBo in) { SysDept sysDept = sysDeptMapper.selectByusci(in.getUsci()); Map map=new HashMap(); if (!in.getRdList().isEmpty()){ List rdList = in.getRdList(); rdList.stream().forEach(e -> { ProjectStaffRecord p = new ProjectStaffRecord(); if (e.getProjectNumber() != null){ ProjectTask projectTask =getCompanyProject(map,e.getProjectNumber(), sysDept.getDeptId()); p.setPid(projectTask.getId()); SysUser sysUser=getCompanyUser(map,e.getAdminKyId()); p.setAid(sysUser.getUserId()); p.setName(sysUser.getNickName()); p.setProjectStatus(0); p.setProcessStatus(2); p.setRecordTime(DateUtils.parseDate(e.getRecordTime())); p.setDuration(e.getDuration()); p.setCheckStatus(0); p.setInitDuration(e.getDuration()); projectStaffRecordMapper.insertSelective(p); } }); } return null; } private SysUser getCompanyUser(Map map, String adminKyId) { if (map.keySet().contains(adminKyId)){ return (SysUser) map.get(adminKyId); }else{ SysUser sysUser = userMapper.selectByKyId(adminKyId); map.put(sysUser.getKyId(),sysUser); return sysUser; } } private ProjectTask getCompanyProject(Map map, String projectNumber, Long deptId) { if (map.keySet().contains(projectNumber)){ return (ProjectTask) map.get(projectNumber); }else{ ProjectTask projectTask = projectTaskMapper.selectByProjectNumber(projectNumber, deptId); map.put(projectTask.getProjectNumber(),projectTask); return projectTask; } } private void pushAddUserProject(List listUserProject) { listUserProject.stream().forEach(e -> { ProjectTask projectTask = new ProjectTask(); projectTask.setName(e.getProjectName()); projectTask.setProjectNumber(e.getProjectNumber()); projectTask.setProjectStatus(0); if (e.getAid()!=null){ SysUser sysUser = userMapper.selectByKyId(e.getAid()); if (sysUser!=null){ projectTask.setAdminName(sysUser.getNickName()); projectTask.setAid(sysUser.getUserId()); } } projectTask.setStartTime(DateUtils.parseDate(e.getStartTime())); projectTask.setEndTime(DateUtils.parseDate(e.getEndTime())); projectTask.setProjectYear(e.getProjectYear()); projectTask.setCreateYear(e.getCreateYear()); projectTask.setCrossYear(0); projectTask.setDuration(0d); projectTask.setCreateTime(new Date()); projectTaskMapper.insert(projectTask); if (e.getStaffIds()!=null){ String[] split = e.getStaffIds().split(","); StringJoiner joiner = new StringJoiner(","); Stream stream = Arrays.stream(split); stream.forEach(e1 -> { SysUser sysUser = userMapper.selectByKyId(e1); if (sysUser!=null){ joiner.add(sysUser.getNickName()); ProjectStaff projectStaff = new ProjectStaff(); projectStaff.setPid(projectTask.getId()); projectStaff.setAid(sysUser.getUserId()); projectStaff.setName(joiner.toString()); projectStaffMapper.insert(projectStaff); } }); projectTask.setStaffName(joiner.toString()); } projectTaskMapper.updateByPrimaryKey(projectTask); }); } private void pushAddUser(List listUser) { //获取未获取到上级的数据 List notSuperList = new ArrayList<>(); List allUserList = new ArrayList<>(); listUser.stream().forEach(e -> { SysUser sysUser = new SysUser(); sysUser.setUserName(e.getUserName()); sysUser.setNickName(e.getNickName()); sysUser.setKyId(e.getKyId()); sysUser.setKySuperId(e.getKySuperId()); sysUser.setPassword(SecurityUtils.encryptPassword("123456")); sysUser.setStatus("0"); sysUser.setDelFlag("0"); if (e.getKyDeptId()!=null){ SysDept sysDept = sysDeptMapper.selectByKyId(e.getKyDeptId()); sysUser.setDeptId(sysDept.getDeptId()); } SysUser sysUser1 = userMapper.selectByKyId(e.getKySuperId()); if (sysUser1==null){ userMapper.insertUser(sysUser); notSuperList.add(sysUser); }else { sysUser.setSuperiorId(sysUser1.getUserId()); userMapper.insertUser(sysUser); } allUserList.add(sysUser); }); if (!notSuperList.isEmpty()){ notSuperList.stream().forEach(e -> { SysUser sysUser1 = userMapper.selectByKyId(e.getKySuperId()); if (sysUser1!=null){ e.setSuperiorId(sysUser1.getUserId()); } userMapper.updateUser(e); }); } //设置人员角色 List roleList = new ArrayList<>(); for (SysUser sysUser : allUserList) { SysUserRole sysUserRole = new SysUserRole(); sysUserRole.setUserId(sysUser.getUserId()); sysUserRole.setRoleId(2l); roleList.add(sysUserRole); } //每50个执行一次批量新增 int maxSize = 50; if (roleList.size() > maxSize){ for (int i = 0; i < listUser.size(); i += maxSize) { int end = Math.min(i + maxSize, listUser.size()); List list = roleList.subList(i, end); sysUserRoleMapper.batchUserRole(list); } }else { sysUserRoleMapper.batchUserRole(roleList); } } private void pushAddDep(List listDep) { //假设只设置2级 1级为公司 List sp1 = listDep.stream().filter(e -> StringUtils.isNotEmpty(e.getUsci())).collect(Collectors.toList()); //先新增公司 pushDataDep pushDataDep = sp1.get(0); SysDept sysDept1 = sysDeptMapper.selectByusci(pushDataDep.getUsci()); if (sysDept1!=null) throw new ServiceException("公司已存在"); SysDept sysDept=addCompany(pushDataDep); pushDep(listDep, pushDataDep.getKyId(),sysDept); } private void pushDep(List listDep, String kyId, SysDept pushDataDep) { List sp2 = listDep.stream().filter(e -> Objects.equals(e.getKySuperId(),kyId)).collect(Collectors.toList()); if (sp2.isEmpty()) { return; } SysDept sysDept1 = sysDeptMapper.selectByKyId(kyId); for (pushDataDep e : sp2) { SysDept sysDept = new SysDept(); sysDept.setDeptName(e.getDeptName()); sysDept.setKyId(e.getKyId()); sysDept.setCompanyName(pushDataDep.getDeptName()); sysDept.setCompanyId(pushDataDep.getDeptId()); sysDept.setParentId(sysDept1.getDeptId()); sysDept.setAncestors(sysDept1.getAncestors()+","+sysDept1.getDeptId()); sysDeptMapper.insertDept(sysDept); pushDep(listDep, e.getKyId(),pushDataDep); } } private SysDept addCompany(pushDataDep pushDataDep) { SysDept sysDept = new SysDept(); sysDept.setUsci(pushDataDep.getUsci()); sysDept.setDeptName(pushDataDep.getDeptName()); sysDept.setKyId(pushDataDep.getKyId()); sysDept.setParentId(100l); sysDept.setAncestors("0,100"); sysDeptMapper.insertDept(sysDept); return sysDept; } }