fix(文档拆分): 导入、下载导入模板

This commit is contained in:
yjz
2024-06-28 19:41:29 +08:00
parent 9fd73c235e
commit 64cee85a9c
5 changed files with 392 additions and 78 deletions
@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.annotation.*;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Date;
import java.util.List;
/**
* @author liJiaRao
* @date 2023-11-20 15:46
@@ -162,4 +164,15 @@ public class SysDictItem {
private String pId;
@TableField(exist = false)
private String dictCode;
}
/**
* 层级
*/
@TableField(exist = false)
private String levelPath;
/**
* 层级
*/
@TableField(exist = false)
private List<SysDictItem> childrenList;
}
@@ -66,11 +66,8 @@ import com.jero.modules.tag.enums.TableNameEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull;
@@ -81,6 +78,7 @@ import org.jsoup.select.Elements;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
@@ -94,6 +92,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
@@ -135,6 +134,37 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
private static final String ITEM_NUM = "item_num";
private static final String ITEM_TITLE = "item_title";
private static final String ITEM_CONTENT = "item_content";
private static final String TRANSLATION = "translation";
private static final String IS_SAME_AS_PREV_VERSION = "is_same_as_prev_version";
private static final String CHANGE_DESCRIPTION = "change_description";
private static final String REGULATORY_NOTES = "regulatory_notes";
private static final String KEYWORDS = "keywords";
private static final String KEY_CONTROLLER = "key_controller";
private static final String APPLICABLE_COMPONENTS = "applicable_components";
private static final String RESPONSIBLE_DEPARTMENT = "responsible_department";
private static final String RESPONSIBLE_MODULE = "responsible_module";
private static final String RELATED_DEPARTMENT = "related_department";
private static final String RELATED_MODULE = "related_module";
private static final String APPLICATIONS = "applications";
private static final String POWER_TYPE = "power_type";
private static final String DOMAIN_AREA = "domain_area";
private static final String CONFIGURATION_REQUIREMENTS = "configuration_requirements";
private static final String NEW_CER_IMPLEMENT_DATE = "new_cer_implement_date";
private static final String NEW_PRODUCTION_IMPLEMENTATION = "new_production_implementation";
private static final String REGISTRATION_DATE = "registration_date";
private static final String ENTERPRISE_STANDARD = "enterprise_standard";
private static final String TECHNICAL_SPECIFICATION_DESIGN_GUIDE = "technical_specification_design_guide";
private static final String DRAWING_TEMPLATE = "drawing_template";
private static final String TECHNICAL_AGREEMENT_TEMPLATE = "technical_agreement_template";
private static final String VERIFICATION_REPORT_TEMPLATE_CHECKLIST = "verification_report_template_checklist";
private static final String DVP_TEMPLATE = "dvp_template";
private static final String DFEMA = "dfema";
private static final String KEY_TECHNOLOGY_DECOMPOSITION_TABLE = "key_technology_decomposition_table";
private static final String OTHER_DOCUMENTS_TEMPLATES = "other_documents_templates";
private static final String INVESTIGATION_STAGE = "investigation_stage";
private static final String P3 = "p3";
private static final String P5 = "p5";
private static final String REMARKSS = "remarkss";
private static final String INTERPRETATION_ARTICLES = "interpretation_articles";
private static final String INTERPRETATION_ARTICLES_LIST = "interpretationArticlesList";
private static final String MENU_ID = "menu_id";
@@ -372,6 +402,18 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
List<PartName> partNames = partNameService.queryEcho(applicableComponents);
map.put("applicable_components_dictText", partNames.stream().map(PartName::getName).collect(Collectors.joining(",")));
}
// 涉及系统/部件(关键词)
if (map.containsKey("keywords")){
String applicableComponents = (String) map.get("keywords");
List<PartName> partNames = partNameService.queryEcho(applicableComponents);
map.put("keywords_dictText", partNames.stream().map(PartName::getName).collect(Collectors.joining(",")));
}
// 关键控制器
if (map.containsKey("key_controller")){
String applicableComponents = (String) map.get("key_controller");
List<PartName> partNames = partNameService.queryEcho(applicableComponents);
map.put("key_controller_dictText", partNames.stream().map(PartName::getName).collect(Collectors.joining(",")));
}
// 属性标识翻译
if (map.containsKey("property_tag")){
String propertyTag = (String) map.get("property_tag");
@@ -738,14 +780,76 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
// 第一条数据
Map<String, Object> firstData = listMap.get(0);
listMap.remove(0);
// 合并数据(条文标题、条文内容)
String title = firstData.get(ITEM_TITLE) + " " + mergeData(listMap, ITEM_TITLE);
String content = firstData.get(ITEM_CONTENT) + mergeData(listMap, ITEM_CONTENT);
// 合并数据(条文标题、条文内容、等全部字段
String title = firstData.get(ITEM_TITLE) + " " + mergeData(listMap, ITEM_TITLE, false);
String content = firstData.get(ITEM_CONTENT) + mergeData(listMap, ITEM_CONTENT, false);
listMap.add(0, firstData);
String translation = firstData.get(TRANSLATION) + mergeData(listMap, TRANSLATION, false);
String changeDescription = firstData.get(CHANGE_DESCRIPTION) + mergeData(listMap, CHANGE_DESCRIPTION, false);
String regulatoryNotes = firstData.get(REGULATORY_NOTES) + mergeData(listMap, REGULATORY_NOTES, false);
String keywords = firstData.get(KEYWORDS) + mergeData(listMap, KEYWORDS, true);
String keyController = mergeData2(listMap, KEY_CONTROLLER, true);
String applicableComponents = mergeData2(listMap, APPLICABLE_COMPONENTS, true);
String responsibleDepartment = mergeData2(listMap, RESPONSIBLE_DEPARTMENT, true);
String responsibleModule = mergeData2(listMap, RESPONSIBLE_MODULE, true);
String relatedDepartment = mergeData2(listMap, RELATED_DEPARTMENT, true);
String relatedModule = mergeData2(listMap, RELATED_MODULE, true);
String applications = mergeData2(listMap, APPLICATIONS, true);
String powerType = mergeData2(listMap, POWER_TYPE, true);
String domainArea = mergeData2(listMap, DOMAIN_AREA, true);
String configurationRequirements = mergeData2(listMap, CONFIGURATION_REQUIREMENTS, true);
String newCerImplementDate = mergeData2(listMap, NEW_CER_IMPLEMENT_DATE, true);
String newProductionImplementation = mergeData2(listMap, NEW_PRODUCTION_IMPLEMENTATION, true);
String registrationDate = mergeData2(listMap, REGISTRATION_DATE, true);
String enterpriseStandard = mergeData2(listMap, ENTERPRISE_STANDARD, true);
String technicalSpecificationDesignGuide = mergeData2(listMap, TECHNICAL_SPECIFICATION_DESIGN_GUIDE, true);
String drawingTemplate = firstData.get(DRAWING_TEMPLATE) + mergeData(listMap, DRAWING_TEMPLATE, false);
String technicalAgreementTemplate = firstData.get(TECHNICAL_AGREEMENT_TEMPLATE) + mergeData(listMap, TECHNICAL_AGREEMENT_TEMPLATE, false);
String verificationReportTemplateChecklist = firstData.get(VERIFICATION_REPORT_TEMPLATE_CHECKLIST) + mergeData(listMap, VERIFICATION_REPORT_TEMPLATE_CHECKLIST, false);
String dvpTemplate = firstData.get(DVP_TEMPLATE) + mergeData(listMap, DVP_TEMPLATE, false);
String dfema = firstData.get(DFEMA) + mergeData(listMap, DFEMA, false);
String keyTechnologyDecompositionTable = firstData.get(KEY_TECHNOLOGY_DECOMPOSITION_TABLE) + mergeData(listMap, KEY_TECHNOLOGY_DECOMPOSITION_TABLE, false);
String otherDocumentsTemplates = firstData.get(OTHER_DOCUMENTS_TEMPLATES) + mergeData(listMap, OTHER_DOCUMENTS_TEMPLATES, false);
String investigationStage = firstData.get(INVESTIGATION_STAGE) + mergeData(listMap, INVESTIGATION_STAGE, false);
String p3 = firstData.get(this.P3) + mergeData(listMap, this.P3, false);
String p5 = firstData.get(this.P5) + mergeData(listMap, this.P5, false);
String remarkss = firstData.get(REMARKSS) + mergeData(listMap, REMARKSS, false);
String updateByAndUpdateTime = new UniversalImpl().getUpdateByAndUpdateTime();
String updateSet = updateByAndUpdateTime +
"," + ITEM_TITLE + " = " + "' "+ title + "'" +
"," + ITEM_CONTENT + " = " + "'" + content + "'";
"," + ITEM_CONTENT + " = " + "'" + content + "'" +
"," + TRANSLATION + " = " + "'" + translation + "'" +
"," + CHANGE_DESCRIPTION + " = " + "'" + changeDescription + "'" +
"," + REGULATORY_NOTES + " = " + "'" + regulatoryNotes + "'" +
"," + KEYWORDS + " = " + "'" + keywords + "'" +
"," + KEY_CONTROLLER + " = " + "'" + keyController + "'" +
"," + APPLICABLE_COMPONENTS + " = " + "'" + applicableComponents + "'" +
"," + RESPONSIBLE_DEPARTMENT + " = " + "'" + responsibleDepartment + "'" +
"," + RESPONSIBLE_MODULE + " = " + "'" + responsibleModule + "'" +
"," + RELATED_DEPARTMENT + " = " + "'" + relatedDepartment + "'" +
"," + RELATED_MODULE + " = " + "'" + relatedModule + "'" +
"," + APPLICATIONS + " = " + "'" + applications + "'" +
"," + POWER_TYPE + " = " + "'" + powerType + "'" +
"," + DOMAIN_AREA + " = " + "'" + domainArea + "'" +
"," + CONFIGURATION_REQUIREMENTS + " = " + "'" + configurationRequirements + "'" +
"," + NEW_CER_IMPLEMENT_DATE + " = " + "'" + newCerImplementDate + "'" +
"," + NEW_PRODUCTION_IMPLEMENTATION + " = " + "'" + newProductionImplementation + "'" +
"," + REGISTRATION_DATE + " = " + "'" + registrationDate + "'" +
"," + ENTERPRISE_STANDARD + " = " + "'" + enterpriseStandard + "'" +
"," + TECHNICAL_SPECIFICATION_DESIGN_GUIDE + " = " + "'" + technicalSpecificationDesignGuide + "'" +
"," + DRAWING_TEMPLATE + " = " + "'" + drawingTemplate + "'" +
"," + TECHNICAL_AGREEMENT_TEMPLATE + " = " + "'" + technicalAgreementTemplate + "'" +
"," + VERIFICATION_REPORT_TEMPLATE_CHECKLIST + " = " + "'" + verificationReportTemplateChecklist + "'" +
"," + DVP_TEMPLATE + " = " + "'" + dvpTemplate + "'" +
"," + DFEMA + " = " + "'" + dfema + "'" +
"," + KEY_TECHNOLOGY_DECOMPOSITION_TABLE + " = " + "'" + keyTechnologyDecompositionTable + "'" +
"," + OTHER_DOCUMENTS_TEMPLATES + " = " + "'" + otherDocumentsTemplates + "'" +
"," + INVESTIGATION_STAGE + " = " + "'" + investigationStage + "'" +
"," + P3 + " = " + "'" + p3 + "'" +
"," + P5 + " = " + "'" + p5 + "'" +
"," + REMARKSS + " = " + "'" + remarkss + "'";
String updateCondition = "id = " + "'" + firstData.get(ID) + "'";
listMap.remove(0);
// 修改数据
documentSplitMapper.editDocumentSplitDetail(updateSet, updateCondition);
List<String> otherIds = listMap.stream().map(v -> (String)v.get(ID)).collect(Collectors.toList());
@@ -908,63 +1012,53 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
public void downloadImportTemplate(HttpServletRequest request, HttpServletResponse response) {
// 水平越权
isHorizontalOverstep(request.getParameter("infoId"));
try (Workbook workbook = new XSSFWorkbook()){
String fileName = "拆分导入模版下载.xlsx";
// sheet页
XSSFSheet sheet = (XSSFSheet) workbook.createSheet("拆分导入模版");
// 列宽
sheet.setDefaultColumnWidth(16);
// 创建第一行
Row headerRow = sheet.createRow(0);
// 创建表头信息
String[] titleArr = {"条文号", "条文标题", "条文内容"};
//样式
CellStyle cellStyle = workbook.createCellStyle();
// 水平、垂直居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 文本格式
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("@"));
for (int i = 0; i < titleArr.length; i++) {
// 创建列
Cell cell = headerRow.createCell(i);
cell.setCellValue(titleArr[i]);
cell.setCellStyle(cellStyle);
ClassPathResource resource = new ClassPathResource("excelTemplate/条款导入模板.xlsx");
// 设置HTTP响应头,包括文件大小和内容类型
response.setContentType("application/vnd.ms-excel"); // 根据实际文件类型设置内容类型
response.setHeader("Content-Disposition", "attachment; filename=条款导入模板.xlsx");
String filePath = "";
// 将文件内容写入HTTP响应输出流中
try (InputStream in = resource.getInputStream()) {
// 导出文件
filePath = exportExcelTempPath + File.separator + "条款导入模板";
String excelFilePath = filePath + File.separator + "条款导入模板.xlsx";
writeToLocal(excelFilePath, in);
ZipUtil.toZip(filePath, response.getOutputStream(), response, true);
} catch (IOException e) {
throw new JeroBootException(e);
} finally {
// 删除文件
if (new File(filePath).exists()) {
FileUtils.deleteFolders(filePath);
}
}
}
// 创建第二行
Row headerRowTwo = sheet.createRow(1);
// 填充说明
Cell cell = headerRowTwo.createCell(0);
String explain = "模版说明:\n" +
"1.条文号不能为空\n" +
"2.仅支持zip格式文件夹\n" +
"3.条文内容如果导入表格类型,表格的名称需要与sheet页名称保持一致";
CellStyle cellStyleTwo = workbook.createCellStyle();
cellStyleTwo.setWrapText(true);
cell.setCellStyle(cellStyleTwo);
// 行高
headerRowTwo.setHeight((short) 1500);
cell.setCellValue(new XSSFRichTextString(explain));
// 合并单元格(参数说明:起始行,结束行,起始列,结束列)
CellRangeAddress region = new CellRangeAddress(1, 1, 0, 2);
sheet.addMergedRegion(region);
// excel临时保存到本地并在同级创建文件夹
String replacePath = exportExcelTempPath.replace("exportExcelTemp", "拆分导入模版下载");
generateExcel(workbook, fileName, replacePath);
// 生成zip文件返回文件流
ZipUtil.toZip(replacePath, response.getOutputStream(), response, true);
//删除指定文件夹
FileUtils.deleteFolders(replacePath);
/**
* 将InputStream写入本地文件
*
* @param filePath 写入本地目录
* @param input 输入流
* @throws IOException
*/
public void writeToLocal(String filePath, InputStream input)
throws IOException {
// 导出路径 没有则创建
File saveFile = new File(filePath.substring(0, filePath.lastIndexOf(File.separator)));
if (!saveFile.exists()) {
saveFile.mkdirs();
}
int index;
byte[] bytes = new byte[1024];
try (FileOutputStream downloadFile = new FileOutputStream(filePath)){
while ((index = input.read(bytes)) != -1) {
downloadFile.write(bytes, 0, index);
downloadFile.flush();
}
}catch (Exception e){
throw new JeroBootException("下载文件失败!");
log.error("将InputStream写入本地失败:{}", e.getMessage());
}finally {
input.close();
}
}
@@ -1398,15 +1492,38 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
}
private String mergeData(List<Map<String, Object>> listMap, String key) {
private String mergeData(List<Map<String, Object>> listMap, String key, boolean isDistinct) {
StringBuilder stringBuilder = new StringBuilder();
List<String> list = new ArrayList<>();
for (Map<String, Object> map : listMap) {
if (isDistinct){
// 去重
String valueString = map.get(key).toString();
if (list.contains(valueString)){
continue;
}
list.add(valueString);
}
String content = (String) map.get(key);
stringBuilder.append(content);
}
return stringBuilder.toString();
}
private String mergeData2(List<Map<String, Object>> listMap, String key, boolean isDistinct) {
List<String> list = new ArrayList<>();
for (Map<String, Object> map : listMap) {
String[] split = map.get(key).toString().split(",");
for (String s : split) {
if (isDistinct && list.contains(s)){
continue;
}
list.add(s);
}
}
return String.join(",", list);
}
@Override
public void saveDocumentSplitInfo(SarFileSplitInfoEO sarFileSplitInfoEO) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -4,17 +4,16 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @TableName laws_part_name
*/
@@ -116,4 +115,10 @@ public class PartName implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* 层级
*/
@TableField(exist = false)
private String levelPath;
}
@@ -51,10 +51,10 @@ import com.jero.modules.split.service.ISarFileSplitInfoService;
import com.jero.modules.split.service.ISarFileSplitItemsValEOService;
import com.jero.modules.split.service.ISarFileSplitMenuEOService;
import com.jero.modules.split.util.POIReadExcelToHtml;
import com.jero.modules.system.entity.SysCategory;
import com.jero.modules.system.entity.SysCategoryTreeVO;
import com.jero.modules.system.entity.SysDictItem;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.entity.*;
import com.jero.modules.system.service.ISysDepartService;
import com.jero.modules.system.service.ISysDictItemService;
import com.jero.modules.system.service.ISysDictService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.system.service.impl.SysCategoryServiceImpl;
import com.jero.modules.system.service.impl.SysDictItemServiceImpl;
@@ -146,6 +146,12 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
private PartNameService partNameService;
@Autowired
private ILawsLabelDatabaseService lawsLabelDatabaseService;
@Autowired
private ISysDepartService sysDepartService;
@Autowired
private ISysDictService sysDictService;
@Autowired
private ISysDictItemService sysDictItemService;
@Value(value = "${jero.path.upload}")
@@ -160,6 +166,8 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
public static String DECRYPT_APP_CODE;
public static String DECRYPT_SECRET_KEY;
private static final List<String> SPECIAL_FIELD = Arrays.asList("keywords", "key_controller", "applicable_components");
@Value("${download.enable}")
public void setEnable(boolean enable) {
ENCRYPT_ENABLE = enable;
@@ -1877,7 +1885,7 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
//设置单元格类型
cell.setCellType(CellType.STRING);
String cellValue = cell.getStringCellValue();
if(!cellValue.contains("模版说明")){
if(!cellValue.contains("填写说明")){
if(MessageUtils.getLanguage().getValue().equals(LanguageEnum.CN.getValue())){
throw new JeroBootException("请导入正确模板!");
} else {
@@ -1901,8 +1909,8 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
Map<String, Object> map = null;
//获得所有数据
//从第3行开始获取,第一行是表头,第二行是填写说明
for (int x = 2; x <= totalRowNum; x++) {
//从第4行开始获取,第一行是表头,第二行是填写说明
for (int x = 3; x <= totalRowNum; x++) {
map = new HashMap<String, Object>();
//获得第i行对象
Row row= sheet.getRow(x);
@@ -2031,10 +2039,15 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
treeNameList = categoryList.stream().map(SysCategory::getEnName).collect(Collectors.toList());
itemNameList = dictItemList.stream().map(SysDictItem::getEnName).collect(Collectors.toList());
}
// 树形字典
List<SysDict> sysDictTreeList = sysDictService.list(new LambdaQueryWrapper<SysDict>().eq(SysDict::getAttributeType, "2"));
// 组织结构
List<SysDepart> sysDepartList = sysDepartService.list();
// 适用零部件
List<PartName> partNameList = new ArrayList<>();
//存放数据验证结果信息
List<String> stringMessage = new ArrayList<>();
int i = 2; //记录行号
int i = 3; //记录行号
int num = 0; //记录是第几条数据
//循环验证数据
for (Map<String, Object> dto : datas) {
@@ -2053,6 +2066,7 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
key = key.replace("*", "");
}
String value = (String) entry.getValue();
List<String> valueList = new ArrayList<>();
String field = "";
for (Map<String, Object> map : fieldList) {
String fieldName = (String) map.get("db_field_txt");//中文名称/英文名称
@@ -2060,6 +2074,7 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
String mustInput = (String) map.get("field_must_input");//是否必填
String dbLength = map.get("db_length").toString();//字段长度
String fieldShowType = (String) map.get("field_show_type");//字段类型
String dictField = (String) map.get("dict_field");//字典code
if (key.equals(dbfieldName)) {
field = dbfieldName;
@@ -2508,9 +2523,125 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
}
}
}else if (FieldTypeEnum.GROUP_MANY.getValue().equals(fieldShowType)) {
// 多选组织机构弹框
//判断是否必填
if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) {
if(MessageUtils.getLanguage().getValue().equals(LanguageEnum.CN.getValue())) {
errorMsg += fieldName + "为必填项,不能为空;";
} else {
errorMsg += fieldName + " is mandatory and cannot be empty;";
}
countError++;
}
if (StringUtils.isNotBlank(value)){
for (String v : value.split(",")) {
Optional<SysDepart> first = sysDepartList.stream().filter(o -> v.equals(o.getDepartName())).findFirst();
if (!first.isPresent()) {
if(MessageUtils.getLanguage().getValue().equals(LanguageEnum.CN.getValue())) {
errorMsg += fieldName + "中组织机构" + v + "不存在;";
} else {
errorMsg += fieldName + " " + v + "Not exist;";
}
countError++;
valueList = Collections.emptyList();
break;
}else {
valueList.add(first.get().getId());
}
}
}
}else if (FieldTypeEnum.TREE_BOX.getValue().equals(fieldShowType)) {
// 树型结构(多选)
//判断是否必填
if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) {
if(MessageUtils.getLanguage().getValue().equals(LanguageEnum.CN.getValue())) {
errorMsg += fieldName + "为必填项,不能为空;";
} else {
errorMsg += fieldName + " is mandatory and cannot be empty;";
}
countError++;
}
if (StringUtils.isNotBlank(value) && StringUtils.isNotBlank(dictField)){
Optional<SysDict> firstDict = sysDictTreeList.stream().filter(o -> dictField.equals(o.getDictCode())).findFirst();
if (firstDict.isPresent()){
List<SysDictItem> sysDictItemLists = sysDictItemService.list(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictId, firstDict.get().getId()));
List<SysDictItem> sysDictItemList = getLevelPath(sysDictItemLists);
String[] treePathList = value.split(",");
for (String treePath : treePathList) {
List<SysDictItem> path =
sysDictItemList.stream().filter(o -> treePath.equals(o.getLevelPath()))
.collect(Collectors.toList());
if (!path.isEmpty()){
if (path.size() > 1) {
if(MessageUtils.getLanguage().getValue().equals(LanguageEnum.CN.getValue())) {
errorMsg += fieldName + "" + treePath + "存在多个;";
countError++;
valueList = Collections.emptyList();
} else {
errorMsg += fieldName + " " + treePath + "Exist in multiple;";
}
break;
}
valueList.add(path.get(0).getItemValue());
}else {
if(MessageUtils.getLanguage().getValue().equals(LanguageEnum.CN.getValue())) {
errorMsg += fieldName + "" + treePath + "不存在;";
countError++;
valueList = Collections.emptyList();
} else {
errorMsg += fieldName + " " + treePath + "Not exist;";
}
break;
}
}
}
}
}
// 特殊字段
if (StringUtils.isNotBlank(value) && SPECIAL_FIELD.contains(dbfieldName)){
if (partNameList.isEmpty()){
List<PartName> partNames = partNameService.list(new LambdaQueryWrapper<PartName>().ne(PartName::getCode, "Part"));
partNameList = partNameGetLevelPath(partNames);
}
String[] treePathList = value.split(",");
for (String treePath : treePathList) {
List<PartName> path =
partNameList.stream().filter(o -> treePath.equals(o.getLevelPath()))
.collect(Collectors.toList());
if (!path.isEmpty()){
if (path.size() > 1) {
if(MessageUtils.getLanguage().getValue().equals(LanguageEnum.CN.getValue())) {
errorMsg += fieldName + "" + treePath + "存在多个;";
countError++;
valueList = Collections.emptyList();
} else {
errorMsg += fieldName + " " + treePath + "Exist in multiple;";
}
break;
}
valueList.add(path.get(0).getCode());
}else {
if(MessageUtils.getLanguage().getValue().equals(LanguageEnum.CN.getValue())) {
errorMsg += fieldName + "" + treePath + "不存在;";
countError++;
valueList = Collections.emptyList();
} else {
errorMsg += fieldName + " " + treePath + "Not exist;";
}
break;
}
}
}
}
}
if (!valueList.isEmpty()){
value = String.join(",", valueList);
}
if((dto.get(key)== null && value != null) || (dto.get(key)!= null && !dto.get(key).toString().equals(value))){
dto.put(key, value); // 覆盖原来的值
}
@@ -2536,6 +2667,54 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
return map;
}
private List<PartName> partNameGetLevelPath(List<PartName> partNames) {
List<PartName> list = new ArrayList<>();
// 一级节点
List<PartName> firstLevelList = partNames.stream().filter(o -> o.getParentCode().equals("Part")).collect(Collectors.toList());
queryPartNameChildren(firstLevelList, partNames, "", list);
return list;
}
private void queryPartNameChildren(List<PartName> firstLevelList, List<PartName> partNames, String levelPath, List<PartName> list) {
for (PartName partName : firstLevelList) {
if (StringUtils.isBlank(levelPath)){
partName.setLevelPath(partName.getName());
}else {
partName.setLevelPath(levelPath + "/" + partName.getName());
}
list.add(partName);
List<PartName> children = partNames.stream()
.filter(v -> v.getParentCode().equals(partName.getCode())).collect(Collectors.toList());
if (!children.isEmpty()){
queryPartNameChildren(children, partNames, partName.getLevelPath(), list);
}
}
}
private List<SysDictItem> getLevelPath(List<SysDictItem> sysDictItemLists) {
List<SysDictItem> list = new ArrayList<>();
// 一级节点
List<SysDictItem> firstLevelList = sysDictItemLists.stream().filter(v -> v.getParentId().equals("0")).collect(Collectors.toList());
queryChildren(firstLevelList, sysDictItemLists, "", list);
return list;
}
private void queryChildren(List<SysDictItem> treeList, List<SysDictItem> sysDictItemLists, String levelPath, List<SysDictItem> list) {
for (SysDictItem sysDictItem : treeList) {
if (StringUtils.isBlank(levelPath)){
sysDictItem.setLevelPath(sysDictItem.getItemText());
}else {
sysDictItem.setLevelPath(levelPath + "/" + sysDictItem.getItemText());
}
list.add(sysDictItem);
List<SysDictItem> children = sysDictItemLists.stream()
.filter(v -> v.getParentId().equals(sysDictItem.getId())).collect(Collectors.toList());
if (!children.isEmpty()){
queryChildren(children, sysDictItemLists, sysDictItem.getLevelPath(), list);
}
}
}
private void createItemsInfo(Map<String, Object> sarFileSplitItemsEO, String menuId, String infoId){
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = sysUser.getId();