|
|
|
@ -30,12 +30,26 @@ import com.engine.organization.util.db.MapperProxyFactory;
|
|
|
|
|
import com.engine.organization.util.detach.DetachUtil;
|
|
|
|
|
import com.engine.organization.util.page.PageUtil;
|
|
|
|
|
import com.engine.organization.util.tree.SearchTreeUtil;
|
|
|
|
|
import com.engine.organization.util.word.CustomXWPFDocument;
|
|
|
|
|
import com.engine.organization.util.word.WordUtil;
|
|
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
|
|
import org.apache.poi.xwpf.usermodel.Document;
|
|
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
|
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
|
|
|
|
|
import org.apache.xmlbeans.XmlOptions;
|
|
|
|
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
|
|
|
|
|
import weaver.general.GCONST;
|
|
|
|
|
import weaver.general.StringUtil;
|
|
|
|
|
import weaver.general.Util;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import java.io.*;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.zip.ZipEntry;
|
|
|
|
|
import java.util.zip.ZipOutputStream;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author:dxfeng
|
|
|
|
@ -99,6 +113,112 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu
|
|
|
|
|
resultMap.put("selfStatement", "");
|
|
|
|
|
|
|
|
|
|
// 简历相关表格,待拓展
|
|
|
|
|
resultMap.put("tables", getPersonnelResumeTable(uId));
|
|
|
|
|
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> hasRight() {
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
resultMap.put("hasRight", true);
|
|
|
|
|
ArrayList<MenuBtn> topMenuList = new ArrayList<>();
|
|
|
|
|
ArrayList<MenuBtn> rightMenuList = new ArrayList<>();
|
|
|
|
|
// 新增
|
|
|
|
|
topMenuList.add(MenuBtn.builder().isBatch("0").isTop("1").menuFun("screening").menuIcon("icon-coms-man").menuName("人员筛选").type("BTN_Screening").build());
|
|
|
|
|
topMenuList.add(MenuBtn.builder().isBatch("0").isTop("1").menuFun("currentExport").menuIcon("icon-coms-export").menuName("导出当前").type("BTN_CurrentExport").build());
|
|
|
|
|
topMenuList.add(MenuBtn.builder().isBatch("0").isTop("1").menuFun("MergeExport").menuIcon("icon-coms02-coms2-Batch-export").menuName("全部导出(合并)").type("BTN_MergeExport").build());
|
|
|
|
|
topMenuList.add(MenuBtn.builder().isBatch("0").isTop("1").menuFun("AllExport").menuIcon("icon-coms02-coms2-export").menuName("全部导出").type("BTN_AllExport").build());
|
|
|
|
|
|
|
|
|
|
resultMap.put("topMenu", topMenuList);
|
|
|
|
|
// 新增
|
|
|
|
|
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("screening").menuIcon("icon-coms-man").menuName("人员筛选").type("BTN_Screening").build());
|
|
|
|
|
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("currentExport").menuIcon("icon-coms-export").menuName("导出当前").type("BTN_CurrentExport").build());
|
|
|
|
|
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("MergeExport").menuIcon("icon-coms02-coms2-Batch-export").menuName("全部导出(合并)").type("BTN_MergeExport").build());
|
|
|
|
|
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("AllExport").menuIcon("icon-coms02-coms2-export").menuName("全部导出").type("BTN_AllExport").build());
|
|
|
|
|
|
|
|
|
|
resultMap.put("rightMenu", rightMenuList);
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String downloadPerResume(Integer type, HttpServletResponse response) throws Exception {
|
|
|
|
|
|
|
|
|
|
//首先定义一个XWPFDocument 集合 这个对象可以进行word 解析 合并 还有下载都离不开这个对象
|
|
|
|
|
List<CustomXWPFDocument> xwpfDocuments = new ArrayList<>();
|
|
|
|
|
//模板地址
|
|
|
|
|
String outPutPath = GCONST.getRootPath() + "hrm" + File.separator + "import" + File.separator + "template" + File.separator;
|
|
|
|
|
String filePath = outPutPath + "PerResume.docx";
|
|
|
|
|
//创建压缩包位置
|
|
|
|
|
File fileZip = new File(outPutPath + "wordZip");
|
|
|
|
|
if (!fileZip.exists()) {
|
|
|
|
|
fileZip.mkdirs();
|
|
|
|
|
}
|
|
|
|
|
// 处理赋值的数据
|
|
|
|
|
List<Map<String, Object>> dataMapList = getAllResumeList();
|
|
|
|
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
|
|
|
|
|
String filesPath = outPutPath + "wordZip" + File.separator + "全部简历";
|
|
|
|
|
String fileAllWordPath = outPutPath + "wordZip";
|
|
|
|
|
String wordName = "全体人员简历(合并)";
|
|
|
|
|
File files = new File(filesPath);
|
|
|
|
|
if (!files.exists()) {
|
|
|
|
|
files.mkdirs();
|
|
|
|
|
} else {
|
|
|
|
|
delFolder(files.getPath());
|
|
|
|
|
files.mkdirs();
|
|
|
|
|
}
|
|
|
|
|
//处理所有数据
|
|
|
|
|
for (int count = 0; count < dataMapList.size(); count++) {
|
|
|
|
|
//处理单人数据
|
|
|
|
|
Map<String, Object> paramMap = new HashMap<>();
|
|
|
|
|
paramMap = dataMapList.get(count);
|
|
|
|
|
WordUtil wordUtil = new WordUtil();
|
|
|
|
|
//返回一个新的xwpfDocument对象
|
|
|
|
|
File file = new File(filePath);
|
|
|
|
|
CustomXWPFDocument doc = null;
|
|
|
|
|
InputStream is = new FileInputStream(file);
|
|
|
|
|
|
|
|
|
|
doc = new CustomXWPFDocument(is);
|
|
|
|
|
wordUtil.replaceInPara(doc, paramMap);
|
|
|
|
|
wordUtil.replaceInTable(doc, paramMap);
|
|
|
|
|
xwpfDocuments.add(doc);
|
|
|
|
|
is.close();
|
|
|
|
|
|
|
|
|
|
String fileName = paramMap.get("${lastName}") + ".docx";
|
|
|
|
|
System.out.println(fileName);
|
|
|
|
|
FileOutputStream os = null;
|
|
|
|
|
os = new FileOutputStream(filesPath + File.separator + new File(fileName));
|
|
|
|
|
doc.write(os);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (xwpfDocuments.size() > 0) {
|
|
|
|
|
//这样第一步将所有word内容替换之后生成多个 xwpfDocument
|
|
|
|
|
//现在将多个xwpfDocument 进行合并 追加 生成word文件
|
|
|
|
|
CustomXWPFDocument xwpfDocument = xwpfDocuments.get(0);
|
|
|
|
|
for (int i = 0; i < xwpfDocuments.size(); i++) {
|
|
|
|
|
//每次的追加为了避免样式和格式混乱 加上分页符
|
|
|
|
|
//当是只有一条数据的时候 直接输出
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
xwpfDocument = xwpfDocuments.get(0);
|
|
|
|
|
xwpfDocument.write(new FileOutputStream(fileAllWordPath + File.separator + new File(wordName + ".docx")));
|
|
|
|
|
continue;
|
|
|
|
|
} else {
|
|
|
|
|
//当存在多条时候
|
|
|
|
|
xwpfDocument = mergeWord(xwpfDocument, xwpfDocuments.get(i));
|
|
|
|
|
xwpfDocument.write(new FileOutputStream(fileAllWordPath + File.separator + new File(wordName + ".docx")));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
String resPath = fileAllWordPath + File.separator + new File(wordName + ".docx");
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
compressFileToZip(filesPath);
|
|
|
|
|
resPath = filesPath + ".zip";
|
|
|
|
|
}
|
|
|
|
|
return resPath;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 简历相关表格,待拓展
|
|
|
|
|
public List<PersonnelResumeTable> getPersonnelResumeTable(Integer uId){
|
|
|
|
|
List<PersonnelResumeTable> tables = new ArrayList<>();
|
|
|
|
|
List<PersonnelResumeColumn> insurancesTitles = new ArrayList<>();
|
|
|
|
|
List<PersonnelResumeColumn> familyInfoTitles = new ArrayList<>();
|
|
|
|
@ -142,34 +262,221 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu
|
|
|
|
|
objects.add(familyInfoDatas);
|
|
|
|
|
}
|
|
|
|
|
tables.add(PersonnelResumeTable.builder().title("三、家庭成员信息(包括父母、配偶、子女)").columns(familyInfoTitles).datas(objects).build());
|
|
|
|
|
return tables;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<Map<String, Object>> getAllResumeList() {
|
|
|
|
|
List<PersonnelResumePO> personnelResumeList = getHrmResourceMapper().getPersonnelResumeList();
|
|
|
|
|
OrganizationAssert.notNull(personnelResumeList, "未找到对应人员");
|
|
|
|
|
List<Map<String, Object>> dataMapList = new ArrayList<>();
|
|
|
|
|
for (PersonnelResumePO personnelResumePO : personnelResumeList) {
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
resultMap.put("${lastName}", Util.null2String(personnelResumePO.getLastName()));
|
|
|
|
|
resultMap.put("${sex}", Util.null2String(personnelResumePO.getSex()));
|
|
|
|
|
resultMap.put("${birthday}", Util.null2String(personnelResumePO.getBirthday()));
|
|
|
|
|
resultMap.put("${@image}", Util.null2String(personnelResumePO.getImageId()));
|
|
|
|
|
resultMap.put("${native}", Util.null2String(personnelResumePO.getNativePlace()));
|
|
|
|
|
resultMap.put("${politics}", Util.null2String(personnelResumePO.getPolitics()));
|
|
|
|
|
resultMap.put("${department}", Util.null2String(personnelResumePO.getDepartment()));
|
|
|
|
|
resultMap.put("${marriage}", Util.null2String(personnelResumePO.getMarriage()));
|
|
|
|
|
resultMap.put("${jobtitle}", Util.null2String(personnelResumePO.getJobTitle()));
|
|
|
|
|
resultMap.put("${companystartdate}", Util.null2String(personnelResumePO.getCompanyStartDate()));
|
|
|
|
|
resultMap.put("${workstartdate}", Util.null2String(personnelResumePO.getWorkStartDate()));
|
|
|
|
|
resultMap.put("${idCard}", Util.null2String(personnelResumePO.getIdCard()));
|
|
|
|
|
resultMap.put("${address}", Util.null2String(personnelResumePO.getAddress()));
|
|
|
|
|
resultMap.put("${telephone}", Util.null2String(personnelResumePO.getTelephone()));
|
|
|
|
|
resultMap.put("${email}", Util.null2String(personnelResumePO.getEmail()));
|
|
|
|
|
resultMap.put("${selfStatement}", "");
|
|
|
|
|
List<PersonnelResumeTable> tables = getPersonnelResumeTable(personnelResumePO.getId());
|
|
|
|
|
for (int t = 0; t < tables.size(); t++) {
|
|
|
|
|
PersonnelResumeTable personnelResumeTable = tables.get(t);
|
|
|
|
|
int length = personnelResumeTable.getColumns().size();
|
|
|
|
|
if (personnelResumeTable.getDatas().size() > 0) {
|
|
|
|
|
List<List<PersonnelResumeColumn>> datas = personnelResumeTable.getDatas();
|
|
|
|
|
if (datas.size() > 0) {
|
|
|
|
|
List<PersonnelResumeColumn> dataList = datas.get(0);
|
|
|
|
|
for (int i = 0; i < length; i++) {
|
|
|
|
|
resultMap.put("${col" + t + i + "}", Util.null2String(dataList.get(i).getValue()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
dataMapList.add(resultMap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resultMap.put("tables", tables);
|
|
|
|
|
return dataMapList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return resultMap;
|
|
|
|
|
//两个对象进行追加
|
|
|
|
|
public CustomXWPFDocument mergeWord(CustomXWPFDocument document, CustomXWPFDocument doucDocument2) throws Exception {
|
|
|
|
|
CustomXWPFDocument src1Document = document;
|
|
|
|
|
XWPFParagraph p = src1Document.createParagraph();
|
|
|
|
|
//设置分页符
|
|
|
|
|
p.setPageBreak(true);
|
|
|
|
|
CTBody src1Body = src1Document.getDocument().getBody();
|
|
|
|
|
CustomXWPFDocument src2Document = doucDocument2;
|
|
|
|
|
CTBody src2Body = src2Document.getDocument().getBody();
|
|
|
|
|
XWPFParagraph p2 = src2Document.createParagraph();
|
|
|
|
|
|
|
|
|
|
//处理合并后文档图片冲突
|
|
|
|
|
List<XWPFPictureData> allPictures = src2Document.getAllPictures();
|
|
|
|
|
Map<String, String> map = new HashMap();
|
|
|
|
|
for (XWPFPictureData picture : allPictures) {
|
|
|
|
|
String before = src2Document.getRelationId(picture);
|
|
|
|
|
//将原文档中的图片加入到目标文档中
|
|
|
|
|
String after = src1Document.addPictureData(picture.getData(), Document.PICTURE_TYPE_JPEG);
|
|
|
|
|
map.put(before, after);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XmlOptions optionsOuter = new XmlOptions();
|
|
|
|
|
optionsOuter.setSaveOuter();
|
|
|
|
|
String appendString = src2Body.xmlText(optionsOuter);
|
|
|
|
|
String srcString = src1Body.xmlText();
|
|
|
|
|
String prefix = srcString.substring(0, srcString.indexOf(">") + 1);
|
|
|
|
|
String mainPart = srcString.substring(srcString.indexOf(">") + 1, srcString.lastIndexOf("<"));
|
|
|
|
|
String sufix = srcString.substring(srcString.lastIndexOf("<"));
|
|
|
|
|
String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
|
|
|
|
|
if (map != null && !map.isEmpty()) {
|
|
|
|
|
ListIterator<Map.Entry<String, String>> i = new ArrayList<>(map.entrySet()).listIterator(map.size());
|
|
|
|
|
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
|
|
|
|
|
while (i.hasPrevious()) {
|
|
|
|
|
Map.Entry<String, String> entry = i.previous();
|
|
|
|
|
linkedHashMap.put(entry.getKey(), entry.getValue());
|
|
|
|
|
}
|
|
|
|
|
Iterator it1 = linkedHashMap.entrySet().iterator();
|
|
|
|
|
while (it1.hasNext()) {
|
|
|
|
|
Map.Entry<String, String> entry = (Map.Entry<String, String>) it1.next();
|
|
|
|
|
addPart = addPart.replace("<a:blip r:embed=\"" + entry.getKey(), "<a:blip r:embed=\"" + entry.getValue());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + sufix);
|
|
|
|
|
src1Body.set(makeBody);
|
|
|
|
|
return src1Document;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> hasRight() {
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
resultMap.put("hasRight", true);
|
|
|
|
|
ArrayList<MenuBtn> topMenuList = new ArrayList<>();
|
|
|
|
|
ArrayList<MenuBtn> rightMenuList = new ArrayList<>();
|
|
|
|
|
// 新增
|
|
|
|
|
topMenuList.add(MenuBtn.builder().isBatch("0").isTop("1").menuFun("screening").menuIcon("icon-coms-man").menuName("人员筛选").type("BTN_Screening").build());
|
|
|
|
|
topMenuList.add(MenuBtn.builder().isBatch("0").isTop("1").menuFun("currentExport").menuIcon("icon-coms-export").menuName("导出当前").type("BTN_CurrentExport").build());
|
|
|
|
|
topMenuList.add(MenuBtn.builder().isBatch("0").isTop("1").menuFun("mergeExport").menuIcon("icon-coms02-coms2-Batch-export").menuName("全部导出(合并)").type("BTN_MergeExport").build());
|
|
|
|
|
topMenuList.add(MenuBtn.builder().isBatch("0").isTop("1").menuFun("allExport").menuIcon("icon-coms02-coms2-export").menuName("全部导出").type("BTN_AllExport").build());
|
|
|
|
|
/**
|
|
|
|
|
* @Title: compressAllFileZip
|
|
|
|
|
* @Description: 传递文件路径压缩文件,传递文件夹路径压缩文件夹,注:空的文件夹不会出现在压缩包内
|
|
|
|
|
* @param @param compresspath 需要压缩的文件夹的目录
|
|
|
|
|
* @return void 返回类型
|
|
|
|
|
* @throws
|
|
|
|
|
*/
|
|
|
|
|
public static boolean compressFileToZip(String compresspath) {
|
|
|
|
|
boolean bool = false;
|
|
|
|
|
try {
|
|
|
|
|
ZipOutputStream zipOutput = null;
|
|
|
|
|
File file = new File(compresspath);
|
|
|
|
|
if (file.isDirectory()) {
|
|
|
|
|
zipOutput = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(compresspath + ".zip")));
|
|
|
|
|
compressZip(zipOutput, file, "");
|
|
|
|
|
} else {
|
|
|
|
|
zipOutput = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(compresspath.substring(0, compresspath.lastIndexOf(".")) + ".zip")));
|
|
|
|
|
}
|
|
|
|
|
zipOutput.closeEntry();
|
|
|
|
|
zipOutput.close();
|
|
|
|
|
bool = true;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return bool;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resultMap.put("topMenu", topMenuList);
|
|
|
|
|
// 新增
|
|
|
|
|
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("screening").menuIcon("icon-coms-man").menuName("人员筛选").type("BTN_Screening").build());
|
|
|
|
|
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("currentExport").menuIcon("icon-coms-export").menuName("导出当前").type("BTN_CurrentExport").build());
|
|
|
|
|
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("mergeExport").menuIcon("icon-coms02-coms2-Batch-export").menuName("全部导出(合并)").type("BTN_MergeExport").build());
|
|
|
|
|
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("allExport").menuIcon("icon-coms02-coms2-export").menuName("全部导出").type("BTN_AllExport").build());
|
|
|
|
|
/**
|
|
|
|
|
* @Title: compressZip
|
|
|
|
|
* @Description: 子文件夹中可能还有文件夹,进行递归
|
|
|
|
|
* @param @param zipOutput
|
|
|
|
|
* @param @param file
|
|
|
|
|
* @param @param suffixpath
|
|
|
|
|
* @param @throws IOException
|
|
|
|
|
* @return void 返回类型
|
|
|
|
|
* @throws
|
|
|
|
|
*/
|
|
|
|
|
private static void compressZip(ZipOutputStream zipOutput, File file, String suffixpath) {
|
|
|
|
|
File[] listFiles = file.listFiles();// 列出所有的文件
|
|
|
|
|
for (File fi : listFiles) {
|
|
|
|
|
if (fi.isDirectory()) {
|
|
|
|
|
if (suffixpath.equals("")) {
|
|
|
|
|
compressZip(zipOutput, fi, fi.getName());
|
|
|
|
|
} else {
|
|
|
|
|
compressZip(zipOutput, fi, suffixpath + File.separator + fi.getName());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
zip(zipOutput, fi, suffixpath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resultMap.put("rightMenu", rightMenuList);
|
|
|
|
|
return resultMap;
|
|
|
|
|
public static void zip(ZipOutputStream zipOutput, File file, String suffixpath) {
|
|
|
|
|
try {
|
|
|
|
|
ZipEntry zEntry = null;
|
|
|
|
|
if (suffixpath.equals("")) {
|
|
|
|
|
zEntry = new ZipEntry(file.getName());
|
|
|
|
|
} else {
|
|
|
|
|
zEntry = new ZipEntry(suffixpath + File.separator + file.getName());
|
|
|
|
|
}
|
|
|
|
|
zipOutput.putNextEntry(zEntry);
|
|
|
|
|
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
|
|
|
|
|
byte[] buffer = new byte[1024];
|
|
|
|
|
int read = 0;
|
|
|
|
|
while ((read = bis.read(buffer)) != -1) {
|
|
|
|
|
zipOutput.write(buffer, 0, read);
|
|
|
|
|
}
|
|
|
|
|
bis.close();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/***
|
|
|
|
|
* 删除文件夹
|
|
|
|
|
*
|
|
|
|
|
* @param folderPath 文件夹完整绝对路径
|
|
|
|
|
*/
|
|
|
|
|
public static void delFolder(String folderPath) {
|
|
|
|
|
try {
|
|
|
|
|
delAllFile(folderPath); // 删除完里面所有内容
|
|
|
|
|
String filePath = folderPath;
|
|
|
|
|
filePath = filePath.toString();
|
|
|
|
|
java.io.File myFilePath = new java.io.File(filePath);
|
|
|
|
|
myFilePath.delete(); // 删除空文件夹
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/***
|
|
|
|
|
* 删除指定文件夹下所有文件
|
|
|
|
|
*
|
|
|
|
|
* @param path 文件夹完整绝对路径
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static boolean delAllFile(String path) {
|
|
|
|
|
boolean flag = false;
|
|
|
|
|
File file = new File(path);
|
|
|
|
|
if (!file.exists()) {
|
|
|
|
|
return flag;
|
|
|
|
|
}
|
|
|
|
|
if (!file.isDirectory()) {
|
|
|
|
|
return flag;
|
|
|
|
|
}
|
|
|
|
|
String[] tempList = file.list();
|
|
|
|
|
File temp = null;
|
|
|
|
|
for (int i = 0; i < tempList.length; i++) {
|
|
|
|
|
if (path.endsWith(File.separator)) {
|
|
|
|
|
temp = new File(path + tempList[i]);
|
|
|
|
|
} else {
|
|
|
|
|
temp = new File(path + File.separator + tempList[i]);
|
|
|
|
|
}
|
|
|
|
|
if (temp.isFile()) {
|
|
|
|
|
temp.delete();
|
|
|
|
|
}
|
|
|
|
|
if (temp.isDirectory()) {
|
|
|
|
|
delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
|
|
|
|
|
delFolder(path + "/" + tempList[i]);// 再删除空文件夹
|
|
|
|
|
flag = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return flag;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -298,7 +605,6 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(departmentsByIds)) {
|
|
|
|
|
departmentsByIds.removeIf(item -> item.getCanceled() != null && item.getCanceled() != 0);
|
|
|
|
|
filterDeparts.addAll(departmentsByIds);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -395,6 +701,7 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu
|
|
|
|
|
return SearchTreeUtil.builderTreeMode(DepartmentBO.buildSetToSearchTree(builderDeparts), jobTrees);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 添加查询元素的父级元素
|
|
|
|
|
*
|
|
|
|
|