解析数据删除接口
This commit is contained in:
parent
440fc917a4
commit
31b21cb887
|
|
@ -1,4 +1,5 @@
|
||||||
/ecology-develop.iml
|
/ecology-develop.iml
|
||||||
|
/E9-bmj.iml
|
||||||
/out/
|
/out/
|
||||||
/.idea/
|
/.idea/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.engine.secret.entity.unpack;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author:dxfeng
|
||||||
|
* @createTime: 2025/04/30
|
||||||
|
* @version: 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CheckFields {
|
||||||
|
private String name;
|
||||||
|
private String fields;
|
||||||
|
private String formFields;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.engine.secret.entity.unpack;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author:dxfeng
|
||||||
|
* @createTime: 2025/04/30
|
||||||
|
* @version: 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class UnpackParam {
|
||||||
|
private String docId;
|
||||||
|
private String requestId;
|
||||||
|
private boolean isCorrection;
|
||||||
|
private List<CheckFields> checkFields;
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.engine.secret.service;
|
package com.engine.secret.service;
|
||||||
|
|
||||||
|
import com.engine.secret.entity.unpack.UnpackParam;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import net.lingala.zip4j.ZipFile;
|
import net.lingala.zip4j.ZipFile;
|
||||||
import net.lingala.zip4j.model.FileHeader;
|
import net.lingala.zip4j.model.FileHeader;
|
||||||
|
|
@ -16,13 +17,13 @@ public interface UnpackZipService {
|
||||||
/**
|
/**
|
||||||
* 材料收件
|
* 材料收件
|
||||||
*
|
*
|
||||||
* @param requestId
|
* @param unpackParam
|
||||||
* @param rootNode
|
* @param rootNode
|
||||||
* @param imageFileMap
|
* @param imageFileMap
|
||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
Map<String, Object> registerAcceptance(ZipFile zipFile, String requestId, JsonNode rootNode, Map<String, FileHeader> imageFileMap) throws Exception;
|
Map<String, Object> registerAcceptance(ZipFile zipFile, UnpackParam unpackParam, JsonNode rootNode, Map<String, FileHeader> imageFileMap) throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 材料补正
|
* 材料补正
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import com.engine.secret.exception.CustomizeRunTimeException;
|
||||||
import com.engine.secret.service.UnpackZipService;
|
import com.engine.secret.service.UnpackZipService;
|
||||||
import com.engine.secret.util.ConfigUtil;
|
import com.engine.secret.util.ConfigUtil;
|
||||||
import com.engine.secret.util.FieldConvertUtil;
|
import com.engine.secret.util.FieldConvertUtil;
|
||||||
|
import com.engine.secret.util.FlowUtil;
|
||||||
import com.engine.secret.util.ModeUtil;
|
import com.engine.secret.util.ModeUtil;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.wbi.util.Util;
|
import com.wbi.util.Util;
|
||||||
|
|
@ -19,6 +20,7 @@ import org.apache.commons.lang.StringUtils;
|
||||||
import weaver.conn.RecordSet;
|
import weaver.conn.RecordSet;
|
||||||
import weaver.formmode.IgnoreCaseHashMap;
|
import weaver.formmode.IgnoreCaseHashMap;
|
||||||
import weaver.general.BaseBean;
|
import weaver.general.BaseBean;
|
||||||
|
import weaver.systeminfo.SystemEnv;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -56,13 +58,13 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
|
||||||
private final BaseBean baseBean = new BaseBean();
|
private final BaseBean baseBean = new BaseBean();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> registerAcceptance(ZipFile zipFile, String requestId, JsonNode rootNode, Map<String, FileHeader> imageFileMap) {
|
public Map<String, Object> registerAcceptance(ZipFile zipFile, UnpackParam unpackParam, JsonNode rootNode, Map<String, FileHeader> imageFileMap) {
|
||||||
try {
|
try {
|
||||||
initializeResources(zipFile, requestId, imageFileMap);
|
initializeResources(zipFile, unpackParam.getRequestId(), imageFileMap);
|
||||||
insertDataAndFiles(rootNode);
|
insertDataAndFiles(rootNode, unpackParam);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
baseBean.writeLog(e);
|
baseBean.writeLog(e);
|
||||||
throw new CustomizeRunTimeException(e);
|
throw new CustomizeRunTimeException(e.getMessage());
|
||||||
}
|
}
|
||||||
returnMap.put("data", insertTableMap);
|
returnMap.put("data", insertTableMap);
|
||||||
return returnMap;
|
return returnMap;
|
||||||
|
|
@ -359,11 +361,12 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
|
||||||
* @param rootNode
|
* @param rootNode
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
private void insertDataAndFiles(JsonNode rootNode) throws Exception {
|
private void insertDataAndFiles(JsonNode rootNode, UnpackParam unpackParam) throws Exception {
|
||||||
initializeUploadCatalogue();
|
initializeUploadCatalogue();
|
||||||
List<DataConfig> dataConfigList = getDataConfig(SOURCE_TYPE);
|
List<DataConfig> dataConfigList = getDataConfig(SOURCE_TYPE);
|
||||||
baseBean.writeLog("dataConfigList==" + JSON.toJSONString(dataConfigList));
|
baseBean.writeLog("dataConfigList==" + JSON.toJSONString(dataConfigList));
|
||||||
|
|
||||||
|
checkDatas(dataConfigList, rootNode, unpackParam);
|
||||||
initializeResourceMaps(rootNode);
|
initializeResourceMaps(rootNode);
|
||||||
|
|
||||||
if (CollectionUtils.isNotEmpty(dataConfigList)) {
|
if (CollectionUtils.isNotEmpty(dataConfigList)) {
|
||||||
|
|
@ -371,6 +374,70 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验数据是否一致
|
||||||
|
*
|
||||||
|
* @param dataConfigList
|
||||||
|
* @param rootNode
|
||||||
|
* @param unpackParam
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private void checkDatas(List<DataConfig> dataConfigList, JsonNode rootNode, UnpackParam unpackParam) throws Exception {
|
||||||
|
// 字段校验
|
||||||
|
List<CheckFields> checkFields = unpackParam.getCheckFields();
|
||||||
|
String requestId = unpackParam.getRequestId();
|
||||||
|
Map<String, DataConfig> dataConfigMap = dataConfigList.stream().collect(Collectors.toMap(DataConfig::getMainTableName, item -> item, (k1, k2) -> k1));
|
||||||
|
for (CheckFields checkField : checkFields) {
|
||||||
|
DataConfig dataConfig = dataConfigMap.get(checkField.getName());
|
||||||
|
|
||||||
|
|
||||||
|
String fields = checkField.getFields();
|
||||||
|
String formFields = checkField.getFormFields();
|
||||||
|
if (StringUtils.isNotBlank(fields) && StringUtils.isNotBlank(formFields)) {
|
||||||
|
String[] fieldArray = fields.split(",");
|
||||||
|
String[] formFieldsArray = formFields.split(",");
|
||||||
|
if (fieldArray.length != formFieldsArray.length) {
|
||||||
|
throw new CustomizeRunTimeException("表单校验参数格式错误");
|
||||||
|
}
|
||||||
|
List<Formfield> formFieldList = ModeUtil.getFieldList(dataConfig.getMainTableName());
|
||||||
|
Map<String, Formfield> mainTableFieldMap = formFieldList.stream()
|
||||||
|
.filter(item -> item.getViewtype() == 0)
|
||||||
|
.collect(Collectors.toMap(Formfield::getFieldname,
|
||||||
|
item -> item, (k1, k2) -> k1));
|
||||||
|
|
||||||
|
String tableNameByRequestId = FlowUtil.getTableNameByRequestId(requestId);
|
||||||
|
RecordSet rs = new RecordSet();
|
||||||
|
rs.executeQuery("select * from " + tableNameByRequestId + " where requestId = ?", requestId);
|
||||||
|
|
||||||
|
IgnoreCaseHashMap<String, Object> flowDataMap = ModeUtil.getSingleRecordMap(rs);
|
||||||
|
|
||||||
|
// 根据根结点,获取配置
|
||||||
|
String rootPath = dataConfig.getRootPath();
|
||||||
|
JsonNode checkNode;
|
||||||
|
if (StringUtils.isBlank(rootPath)) {
|
||||||
|
checkNode = rootNode;
|
||||||
|
} else {
|
||||||
|
checkNode = rootNode.get(rootPath);
|
||||||
|
}
|
||||||
|
if (null == checkNode) {
|
||||||
|
throw new CustomizeRunTimeException("未获取到根结点数据[" + rootPath + "]");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<DataConfigDetail> detailList = dataConfig.getDetailList();
|
||||||
|
Map<String, DataConfigDetail> configDetailMap = detailList.stream().collect(Collectors.toMap(DataConfigDetail::getFieldName, item -> item, (k1, k2) -> k1));
|
||||||
|
for (int i = 0; i < fieldArray.length; i++) {
|
||||||
|
String field = fieldArray[i];
|
||||||
|
String formField = formFieldsArray[i];
|
||||||
|
boolean check = processFieldForCheck(checkNode, configDetailMap.get(field), mainTableFieldMap, Util.null2String(flowDataMap.get(formField)));
|
||||||
|
if (!check) {
|
||||||
|
Formfield formfield = mainTableFieldMap.get(field);
|
||||||
|
throw new CustomizeRunTimeException("[" + SystemEnv.getHtmlLabelName(formfield.getFieldlabel(), user.getLanguage()) + "]字段校验不通过,表单填写内容与解析包对应内容不一致");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析配置表
|
* 解析配置表
|
||||||
*
|
*
|
||||||
|
|
@ -709,6 +776,35 @@ public class OfflineZipUnpackServiceImpl extends Service implements UnpackZipSer
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建待校验数据的字段集合
|
||||||
|
*
|
||||||
|
* @param jsonNode
|
||||||
|
* @param fieldDetail
|
||||||
|
* @param fieldMap
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private boolean processFieldForCheck(JsonNode jsonNode, DataConfigDetail fieldDetail, Map<String, Formfield> fieldMap,String flowData) throws Exception {
|
||||||
|
String fieldName = fieldDetail.getFieldName();
|
||||||
|
JsonNode atNode = jsonNode.at(fieldDetail.getPath());
|
||||||
|
|
||||||
|
if (atNode != null) {
|
||||||
|
String value = atNode.asText();
|
||||||
|
if (StringUtils.isNotBlank(fieldDetail.getCondition()) && !value.equals(fieldDetail.getCondition())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Formfield formfield = fieldMap.get(fieldName.toLowerCase());
|
||||||
|
if (formfield == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return flowData.equals(Util.null2String(getFieldValue(fieldDetail, value, formfield)));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 字段值转换,转换为数据库中对应的实际值
|
* 字段值转换,转换为数据库中对应的实际值
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
package com.engine.secret.service.impl;
|
package com.engine.secret.service.impl;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.TypeReference;
|
||||||
import com.engine.common.util.ServiceUtil;
|
import com.engine.common.util.ServiceUtil;
|
||||||
import com.engine.core.impl.Service;
|
import com.engine.core.impl.Service;
|
||||||
|
import com.engine.secret.entity.unpack.CheckFields;
|
||||||
|
import com.engine.secret.entity.unpack.UnpackParam;
|
||||||
import com.engine.secret.exception.CustomizeRunTimeException;
|
import com.engine.secret.exception.CustomizeRunTimeException;
|
||||||
import com.engine.secret.service.QualificationApplicationService;
|
import com.engine.secret.service.QualificationApplicationService;
|
||||||
import com.engine.secret.util.ConfigUtil;
|
import com.engine.secret.util.ConfigUtil;
|
||||||
|
|
@ -25,6 +28,7 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
@ -54,6 +58,7 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
|
||||||
String docId = Util.null2String(param.get("docId"));
|
String docId = Util.null2String(param.get("docId"));
|
||||||
String requestId = Util.null2String(param.get("requestId"));
|
String requestId = Util.null2String(param.get("requestId"));
|
||||||
String isCorrection = Util.null2String(param.get("isCorrection"));
|
String isCorrection = Util.null2String(param.get("isCorrection"));
|
||||||
|
String checkFields = Util.null2String(param.get("checkFields"));
|
||||||
if (StringUtils.isBlank(docId)) {
|
if (StringUtils.isBlank(docId)) {
|
||||||
throw new CustomizeRunTimeException("文件获取失败,请确认文件是否上传");
|
throw new CustomizeRunTimeException("文件获取失败,请确认文件是否上传");
|
||||||
}
|
}
|
||||||
|
|
@ -64,6 +69,18 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
|
||||||
}
|
}
|
||||||
|
|
||||||
baseBean.writeLog("requestId==" + requestId);
|
baseBean.writeLog("requestId==" + requestId);
|
||||||
|
List<CheckFields> checkFieldsList = new ArrayList<>();
|
||||||
|
if (StringUtils.isNotBlank(checkFields)) {
|
||||||
|
checkFieldsList = JSON.parseObject(checkFields, new TypeReference<List<CheckFields>>() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
UnpackParam unpackParam = UnpackParam.builder()
|
||||||
|
.docId(docId)
|
||||||
|
.requestId(requestId)
|
||||||
|
.isCorrection(Boolean.parseBoolean(isCorrection))
|
||||||
|
.checkFields(checkFieldsList)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
|
||||||
// docId 转为换imageFileId
|
// docId 转为换imageFileId
|
||||||
DocImageManager imgManger = new DocImageManager();
|
DocImageManager imgManger = new DocImageManager();
|
||||||
|
|
@ -96,7 +113,7 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
|
||||||
|
|
||||||
//解压文件,处理压缩包
|
//解压文件,处理压缩包
|
||||||
baseBean.writeLog("开始解压文件,处理压缩包");
|
baseBean.writeLog("开始解压文件,处理压缩包");
|
||||||
returnMap = unzipWithPassword(tempZipFile, Paths.get("output"), unzipPwd, requestId, isCorrection);
|
returnMap = unzipWithPassword(tempZipFile, Paths.get("output"), unzipPwd, unpackParam);
|
||||||
baseBean.writeLog("压缩包处理完成");
|
baseBean.writeLog("压缩包处理完成");
|
||||||
return returnMap;
|
return returnMap;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
@ -117,7 +134,7 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
|
||||||
* @param outputDir
|
* @param outputDir
|
||||||
* @param password
|
* @param password
|
||||||
*/
|
*/
|
||||||
private Map<String, Object> unzipWithPassword(Path zipFilePath, Path outputDir, String password, String requestId, String isCorrection) {
|
private Map<String, Object> unzipWithPassword(Path zipFilePath, Path outputDir, String password, UnpackParam unpackParam) {
|
||||||
try {
|
try {
|
||||||
ZipFile zipFile = new ZipFile(zipFilePath.toFile());
|
ZipFile zipFile = new ZipFile(zipFilePath.toFile());
|
||||||
if (zipFile.isEncrypted()) {
|
if (zipFile.isEncrypted()) {
|
||||||
|
|
@ -141,7 +158,7 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
|
||||||
String fileName = (lastSlashIndex != -1)
|
String fileName = (lastSlashIndex != -1)
|
||||||
? fullPath.substring(lastSlashIndex + 1)
|
? fullPath.substring(lastSlashIndex + 1)
|
||||||
: fullPath;
|
: fullPath;
|
||||||
fileHeaderMap.put(fileName,header);
|
fileHeaderMap.put(fileName, header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -152,7 +169,7 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
|
||||||
|
|
||||||
// 获取数据文件,用于后续数据解析
|
// 获取数据文件,用于后续数据解析
|
||||||
String jsonFileName = "(database)data.json";
|
String jsonFileName = "(database)data.json";
|
||||||
if ("true".equals(isCorrection)) {
|
if (unpackParam.isCorrection()) {
|
||||||
jsonFileName = "(extra)data.json";
|
jsonFileName = "(extra)data.json";
|
||||||
}
|
}
|
||||||
FileHeader fileHeader = fileHeaderMap.get(jsonFileName);
|
FileHeader fileHeader = fileHeaderMap.get(jsonFileName);
|
||||||
|
|
@ -162,10 +179,10 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
|
||||||
// 离线端方式
|
// 离线端方式
|
||||||
JsonNode rootNode = parseJsonContent(dataJsonImageId);
|
JsonNode rootNode = parseJsonContent(dataJsonImageId);
|
||||||
OfflineZipUnpackServiceImpl offlineZipUnpackService = ServiceUtil.getService(OfflineZipUnpackServiceImpl.class, user);
|
OfflineZipUnpackServiceImpl offlineZipUnpackService = ServiceUtil.getService(OfflineZipUnpackServiceImpl.class, user);
|
||||||
if ("true".equals(isCorrection)) {
|
if (unpackParam.isCorrection()) {
|
||||||
return offlineZipUnpackService.reviewResubmittedMaterials(zipFile, requestId, rootNode, fileHeaderMap);
|
return offlineZipUnpackService.reviewResubmittedMaterials(zipFile, unpackParam.getRequestId(), rootNode, fileHeaderMap);
|
||||||
}
|
}
|
||||||
return offlineZipUnpackService.registerAcceptance(zipFile, requestId, rootNode, fileHeaderMap);
|
return offlineZipUnpackService.registerAcceptance(zipFile, unpackParam, rootNode, fileHeaderMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 兼容其他方式
|
// TODO 兼容其他方式
|
||||||
|
|
@ -177,7 +194,7 @@ public class QualificationApplicationServiceImpl extends Service implements Qual
|
||||||
throw new CustomizeRunTimeException("数据包解压失败,密码错误");
|
throw new CustomizeRunTimeException("数据包解压失败,密码错误");
|
||||||
} else {
|
} else {
|
||||||
baseBean.writeLog(e);
|
baseBean.writeLog(e);
|
||||||
throw new CustomizeRunTimeException(e);
|
throw new CustomizeRunTimeException(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue