feat: scc流程不分发导入
This commit is contained in:
+4
@@ -74,9 +74,13 @@ public class ProcessStandardComplianceCheckConstants {
|
||||
public static final String AUTO_TASK_2 = "autoTask_2";
|
||||
public static final String AUTO_TASK_3 = "autoTask_3";
|
||||
|
||||
// 符合
|
||||
public static final String CONFORM_TO = "1";
|
||||
// 不符合
|
||||
public static final String DISCREPANCY = "2";
|
||||
// 不涉及
|
||||
public static final String NOT_INVOLVE = "3";
|
||||
// 待验证
|
||||
public static final String TO_BE_VERIFIED = "4";
|
||||
|
||||
}
|
||||
|
||||
+2
-1
@@ -35,6 +35,7 @@ import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
@@ -198,7 +199,7 @@ public class ProcessStandardComplianceCheckController extends JeroController<Pro
|
||||
@AutoLog(value = "法规符合性排查流程-导入")
|
||||
@ApiOperation(value="法规符合性排查流程-导入", notes="法规符合性排查流程-导入")
|
||||
@PostMapping("/importExcelWithData")
|
||||
public Result<?> importExcelWithData(@RequestParam("file") @ApiParam("文件") MultipartFile file) {
|
||||
public Result<?> importExcelWithData(@RequestParam("file") @ApiParam("文件") MultipartFile file) throws IOException {
|
||||
Map<String, Object> resultMap = sccService.importExcelWithData(file);
|
||||
Object flag = resultMap.get("flag");
|
||||
if (flag == YesOrNoEnum.YES.getValue()) {
|
||||
|
||||
+1
-2
@@ -159,8 +159,7 @@ public class ProcessStandardComplianceCheckDetail implements Serializable {
|
||||
* 整改周期
|
||||
*/
|
||||
@ApiModelProperty(value = "整改周期")
|
||||
@Dict(dicCode = "correction_period")
|
||||
@Excel(name = "整改方案", width = 15, orderNum = "11", dicCode = "correction_period")
|
||||
@Excel(name = "整改周期", width = 15, orderNum = "11")
|
||||
private String correctionPeriod;
|
||||
|
||||
/**
|
||||
|
||||
+3
-2
@@ -77,8 +77,7 @@ public class WithoutDistributeExcelTemplate {
|
||||
* 整改周期
|
||||
*/
|
||||
@ApiModelProperty(value = "整改周期")
|
||||
@Dict(dicCode = "correction_period")
|
||||
@Excel(name = "整改方案", width = 15, orderNum = "9", dicCode = "correction_period")
|
||||
@Excel(name = "整改方案", width = 15, orderNum = "9")
|
||||
private String correctionPeriod;
|
||||
|
||||
/**
|
||||
@@ -124,6 +123,8 @@ public class WithoutDistributeExcelTemplate {
|
||||
@Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name")
|
||||
private String material;
|
||||
|
||||
private String sort;
|
||||
|
||||
public List<String> obtainFileIds() {
|
||||
return material != null ? Arrays.asList(material.split(",")) : Collections.emptyList();
|
||||
}
|
||||
|
||||
+2
-1
@@ -9,6 +9,7 @@ import org.activiti.engine.delegate.DelegateTask;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -34,5 +35,5 @@ public interface IProcessStandardComplianceCheckService extends IService<Process
|
||||
void exportXls(String taskId, HttpServletResponse response);
|
||||
void exportXlsWithoutDistribute(String taskId, HttpServletResponse response);
|
||||
|
||||
Map<String, Object> importExcelWithData(MultipartFile file);
|
||||
Map<String, Object> importExcelWithData(MultipartFile file) throws IOException;
|
||||
}
|
||||
|
||||
+179
-2
@@ -5,10 +5,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.api.CommonAPI;
|
||||
import com.jero.common.api.vo.ResultCommon;
|
||||
import com.jero.common.constant.enums.YesOrNoEnum;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.system.vo.LoginUser;
|
||||
import com.jero.common.system.vo.SysDictItemCore;
|
||||
import com.jero.common.util.FileUtils;
|
||||
import com.jero.common.util.MessageUtils;
|
||||
import com.jero.common.util.MinioUtil;
|
||||
import com.jero.common.util.ZipUtil;
|
||||
import com.jero.modules.activiti.common.ActivitiCommon;
|
||||
@@ -33,6 +37,7 @@ import com.jero.modules.activiti.process.standardComplianceCheck.service.IProces
|
||||
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
|
||||
import com.jero.modules.activiti.service.ProcessNodeLinkService;
|
||||
import com.jero.modules.activiti.util.ExcelUtils;
|
||||
import com.jero.modules.laws.common.service.impl.LawsCommonServiceImpl;
|
||||
import com.jero.modules.laws.documenttool.entity.LawsDocumentSplit;
|
||||
import com.jero.modules.laws.documenttool.mapper.DocumentSplitMapper;
|
||||
import com.jero.modules.laws.documenttool.service.IDocumentSplitService;
|
||||
@@ -40,11 +45,13 @@ import com.jero.modules.laws.enterprise.util.BeanCopyUtils;
|
||||
import com.jero.modules.laws.utils.ExcelExportUtilPro;
|
||||
import com.jero.modules.oss.entity.OSSFile;
|
||||
import com.jero.modules.oss.service.IOSSFileService;
|
||||
import com.jero.modules.split.common.FileUnZip;
|
||||
import com.jero.modules.split.entity.SarFileSplitInfoEO;
|
||||
import com.jero.modules.split.service.ISarFileSplitInfoService;
|
||||
import com.jero.modules.sys.utils.UserUtils;
|
||||
import com.jero.modules.system.entity.SysDepart;
|
||||
import com.jero.modules.system.service.ISysDepartService;
|
||||
import lombok.Cleanup;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
import org.activiti.engine.TaskService;
|
||||
@@ -68,6 +75,8 @@ import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -109,6 +118,10 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
private DocumentSplitMapper documentSplitMapper;
|
||||
@Resource
|
||||
private ExcelExportUtilPro excelExportUtilPro;
|
||||
@Resource
|
||||
private CommonAPI commonAPI;
|
||||
@Resource
|
||||
private ExcelUtils excelUtils;
|
||||
|
||||
@Value("${jero.path.exportExcelTempPath}")
|
||||
private String exportExcelTempPath;
|
||||
@@ -474,7 +487,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
}
|
||||
}
|
||||
|
||||
// @Override
|
||||
@Override
|
||||
public void exportXlsWithoutDistribute(String taskId, HttpServletResponse response) {
|
||||
ProcessInfoVO<ProcessSccVO> handleData = this.getHandleData(taskId);
|
||||
ProcessSccVO businessInfoDTO = handleData.getBusinessInfoDTO();
|
||||
@@ -520,14 +533,178 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> importExcelWithData(MultipartFile file) {
|
||||
public Map<String, Object> importExcelWithData(MultipartFile file) throws IOException {
|
||||
List<SysDictItemCore> listDict = commonAPI.getDictItemAll();
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
List<String> errorMsgs = new ArrayList<>();
|
||||
// 判断上传的是不是压缩包
|
||||
if (!Objects.requireNonNull(file.getOriginalFilename()).toLowerCase().endsWith(".zip")) {
|
||||
throw new JeroBootException(MessageUtils.getMessage(ResultCommon.PLEASE_UPLOAD_ZIP));
|
||||
}
|
||||
|
||||
Path path = Files.createTempDirectory("temp");
|
||||
File saveDirectory = new File(path.toUri());
|
||||
if (!saveDirectory.isDirectory()) {
|
||||
boolean mkdir = saveDirectory.mkdir();
|
||||
}
|
||||
org.apache.commons.io.FileUtils.copyInputStreamToFile(file.getInputStream(),
|
||||
new File(path + File.separator + file.getOriginalFilename()));
|
||||
// 解压缩
|
||||
FileUnZip.unZipFiles(path + File.separator + file.getOriginalFilename(), String.valueOf(path));
|
||||
|
||||
List<File> fileList = new ArrayList<>();
|
||||
for (File file1 : Objects.requireNonNull(saveDirectory.listFiles())) {
|
||||
if (file1.getName().contains(".xls") || file1.getName().contains(".xlsx")) {
|
||||
fileList.add(file1);
|
||||
}
|
||||
}
|
||||
if (fileList.isEmpty()) {
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
throw new JeroBootException(MessageUtils.getMessage(ResultCommon.IMPORT_TEMPLATE_ERROR));
|
||||
} else if (fileList.size() > 1) {
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
throw new JeroBootException(MessageUtils.getMessage(ResultCommon.IMPORT_TEMPLATE_ERROR));
|
||||
}
|
||||
List<File> excelfilelist = FileUnZip.readImpExcelFile(saveDirectory.getPath());
|
||||
System.gc();
|
||||
if (excelfilelist.size() != 1) {
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
throw new JeroBootException(MessageUtils.getMessage(ResultCommon.IMPORT_TEMPLATE_ERROR));
|
||||
}
|
||||
// 数据内容格式校验
|
||||
Map<String, File> fileMap = new HashMap<>();
|
||||
// 遍历saveDirectory下的所有文件
|
||||
LawsCommonServiceImpl.populateFileMap(saveDirectory, saveDirectory, fileMap);
|
||||
|
||||
// 获取Excel的header
|
||||
List<String> headers;
|
||||
try {
|
||||
headers = ExcelUtils.getHeaderFromExcel(file.getInputStream(), 0);
|
||||
} catch (Exception e) {
|
||||
errorMsgs.add("模板错误,请按照系统模板导入!");
|
||||
resultMap.put("msg", errorMsgs);
|
||||
resultMap.put("flag", YesOrNoEnum.NO.getValue());
|
||||
log.error(e.getMessage(), e);
|
||||
return resultMap; // 返回错误信息
|
||||
}
|
||||
|
||||
// 使用静态方法验证header
|
||||
boolean isMatched = headers.equals(ExcelUtils.getSortedHeadersFromClass(WithoutDistributeExcelTemplate.class));
|
||||
if (!isMatched) {
|
||||
errorMsgs.add("模板错误,请按照系统模板导入!");
|
||||
resultMap.put("msg", errorMsgs);
|
||||
resultMap.put("flag", YesOrNoEnum.NO.getValue());
|
||||
return resultMap; // 返回错误信息
|
||||
}
|
||||
|
||||
ImportParams params = new ImportParams();
|
||||
params.setTitleRows(0);
|
||||
params.setHeadRows(1);
|
||||
params.setNeedSave(true);
|
||||
|
||||
try {
|
||||
@Cleanup
|
||||
InputStream inputStream = Files.newInputStream(excelfilelist.get(0).toPath());
|
||||
List<WithoutDistributeExcelTemplate> list = ExcelImportUtil
|
||||
.importExcel(inputStream, WithoutDistributeExcelTemplate.class, params);
|
||||
list.remove(0);
|
||||
list.remove(0);
|
||||
if (list.isEmpty()) {
|
||||
errorMsgs.add("文件暂无数据,请检查后重试。");
|
||||
resultMap.put("msg", errorMsgs);
|
||||
resultMap.put("flag", YesOrNoEnum.NO.getValue());
|
||||
return resultMap; // 返回错误信息
|
||||
}
|
||||
// 批量检查数据是否有效
|
||||
errorMsgs = this.validationList(list, listDict, fileMap);
|
||||
if (!errorMsgs.isEmpty()) {
|
||||
resultMap.put("msg", errorMsgs);
|
||||
resultMap.put("flag", YesOrNoEnum.NO.getValue());
|
||||
} else {
|
||||
resultMap.put("flag", YesOrNoEnum.YES.getValue());
|
||||
// 转换为字典值
|
||||
this.transToDictValue(list, listDict, fileMap);
|
||||
// 清洗
|
||||
this.cleanData(list);
|
||||
resultMap.put("dataList", list);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
errorMsgs.add("文件导入异常:" + e.getMessage());
|
||||
resultMap.put("msg", errorMsgs);
|
||||
resultMap.put("flag", YesOrNoEnum.NO.getValue());
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
private void cleanData(List<WithoutDistributeExcelTemplate> list) {
|
||||
list.forEach(item -> {
|
||||
String result = item.getResult();
|
||||
if (StrUtil.isBlank(result)) {
|
||||
item.setUnsatisfiedRequire(null);
|
||||
item.setCorrectionSolution(null);
|
||||
item.setCorrectionCost(null);
|
||||
item.setCommonality(null);
|
||||
item.setCommonalityCost(null);
|
||||
item.setRemark(null);
|
||||
item.setMaterial(null);
|
||||
}
|
||||
switch (result) {
|
||||
case CONFORM_TO:
|
||||
case NOT_INVOLVE:
|
||||
item.setUnsatisfiedRequire(null);
|
||||
item.setCorrectionSolution(null);
|
||||
item.setCorrectionCost(null);
|
||||
item.setCommonality(null);
|
||||
item.setCommonalityCost(null);
|
||||
break;
|
||||
case DISCREPANCY:
|
||||
case TO_BE_VERIFIED:
|
||||
item.setRemark(null);
|
||||
item.setMaterial(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void transToDictValue(List<WithoutDistributeExcelTemplate> list, List<SysDictItemCore> listDict, Map<String, File> fileMap) {
|
||||
list.forEach(item -> {
|
||||
item.setResult(excelUtils.translateDictValue("evaluation_result", item.getResult(), listDict));
|
||||
item.setMaterial(excelUtils.uploadFile(item.getMaterial(), fileMap));
|
||||
});
|
||||
}
|
||||
|
||||
private List<String> validationList(List<WithoutDistributeExcelTemplate> list, List<SysDictItemCore> listDict, Map<String, File> fileMap) {
|
||||
List<String> errorMsgs = new ArrayList<>();
|
||||
int i = 4;
|
||||
Iterator<WithoutDistributeExcelTemplate> iterator = list.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
WithoutDistributeExcelTemplate data = iterator.next();
|
||||
if (ExcelUtils.isEmptyRow(data)) {
|
||||
iterator.remove();
|
||||
if (list.isEmpty()) {
|
||||
errorMsgs.add("文件暂无数据,请检查后重试。");
|
||||
}
|
||||
continue;
|
||||
}
|
||||
String result = data.getResult();
|
||||
String material = data.getMaterial();
|
||||
|
||||
StringBuilder errMsgHeader = new StringBuilder();
|
||||
StringBuilder errMsg = new StringBuilder();
|
||||
data.setSort(String.valueOf(i++));
|
||||
errMsgHeader.append("第").append(data.getSort()).append("行");
|
||||
|
||||
// 检查所有数据字典校验的字段
|
||||
errMsg.append(excelUtils.validResult(result, listDict));
|
||||
errMsg.append(excelUtils.validMaterial(material, fileMap));
|
||||
// 如果数据有问题,则将提示信息添加到 errorMsgs 中
|
||||
if (errMsg.length() > 0) {
|
||||
errorMsgs.add(errMsgHeader.append(errMsg).toString());
|
||||
}
|
||||
}
|
||||
return errorMsgs;
|
||||
}
|
||||
|
||||
private List<ProcessStandardComplianceCheckDetail> getSplitDataByStandard(ProcessStandardComplianceCheck scc) {
|
||||
String standardId = scc.getStandardId();
|
||||
String fileType = scc.getSplitFileSource();
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.*;
|
||||
@@ -531,4 +532,28 @@ public class ExcelUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public String validResult(String value, List<SysDictItemCore> listDict) {
|
||||
if (StrUtil.isBlank(value)) {
|
||||
return "";
|
||||
}
|
||||
// 检查排查结果
|
||||
if (!excelUtils.validDict("evaluation_result", value, null, null, true, listDict)) {
|
||||
return "'评估结果'无效。";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String validMaterial(String value, Map<String, File> fileMap) {
|
||||
if (StrUtil.isBlank(value)) {
|
||||
return "";
|
||||
}
|
||||
if (!importUtil.fileValid(value, fileMap)) {
|
||||
return "'佐证材料'无效。";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String uploadFile(String material, Map<String, File> fileMap) {
|
||||
return importUtil.convertFileIds(material, fileMap);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1763,7 +1763,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
|
||||
return lawsTreeNodeService.list(queryWrapper);
|
||||
}
|
||||
|
||||
private static void populateFileMap(File rootDir, File currentDir, Map<String, File> fileMap) {
|
||||
public static void populateFileMap(File rootDir, File currentDir, Map<String, File> fileMap) {
|
||||
File[] files = currentDir.listFiles(); // 列出所有文件和子目录
|
||||
if (files != null) {
|
||||
for (File file : files) {
|
||||
|
||||
@@ -668,7 +668,7 @@ public class ImportUtil {
|
||||
return cellValue.matches("^[0-9]{4}$");
|
||||
}
|
||||
|
||||
private String convertFileIds(String cellValue, Map<String, File> fileMap) {
|
||||
public String convertFileIds(String cellValue, Map<String, File> fileMap) {
|
||||
String[] pathList = cellValue.split(",");
|
||||
StringBuilder fileIds = new StringBuilder();
|
||||
for (String path : pathList) {
|
||||
@@ -806,7 +806,7 @@ public class ImportUtil {
|
||||
}
|
||||
|
||||
// 文件校验
|
||||
private boolean fileValid(String cellValue, Map<String, File> fileMap) {
|
||||
public boolean fileValid(String cellValue, Map<String, File> fileMap) {
|
||||
String[] pathList = cellValue.split(",");
|
||||
for (String path : pathList) {
|
||||
// 校验是否真的有这个文件
|
||||
|
||||
Reference in New Issue
Block a user