修改流程属性Word导入接口为批量导入

This commit is contained in:
anhc 2022-07-06 15:27:49 +08:00
parent 673e9c89bf
commit 2261f14fe9
4 changed files with 203 additions and 173 deletions

View File

@ -26,9 +26,17 @@ public class DataMigrationController {
return new DataMigrationWeb(uc).dataMigrate(wsId,groupValue,fileValue,fileName);
}
/**
* 流程属性批量导入
* @param uc
* @param wsId
* @param groupValue
* @param fileValue
* @return
*/
@Mapping("com.actionsoft.apps.coe.pal.datamigration_process_attribute_import")
public String processAttributeImport(UserContext uc, String wsId,String groupValue,String fileValue,String fileName){
return new DataMigrationWeb(uc).processAttributeImport(wsId,groupValue,fileValue,fileName);
public String processAttributeImport(UserContext uc, String wsId,String groupValue,String fileValue){
return new DataMigrationWeb(uc).processAttributeImport(wsId,groupValue,fileValue);
}
@Mapping("com.actionsoft.apps.coe.pal.datamigration_IT_attribute_import")

View File

@ -126,185 +126,26 @@ public class DataMigrationWeb extends ActionWeb {
* @param fileName
* @return
*/
public String processAttributeImport(String wsId, String groupValue, String fileValue, String fileName) {
public String processAttributeImport(String wsId, String groupValue, String fileValue) {
ResponseObject ro = ResponseObject.newOkResponse();
//构建DCContext 获取上传文件
DCContext fileDcContext = this.getFileDcContext(groupValue, fileValue, fileName);
DCContext fileDcContext = this.getFileDcContext(groupValue, fileValue);
if (null == fileDcContext) {
return ResponseObject.newErrResponse("文件参数异常").toString();
}
//解析Word文档
WordUtil wordUtil = new WordUtil();
boolean analysisFlag = wordUtil.analysisWordTable(fileDcContext.getFilePath());
// boolean analysisFlag = wordUtil.analysisWordTable("/Users/actionsoft/Documents/IdeaWorkSpace/demo/src/main/resources/伊利集团流程制度类文件发布流程vf.doc");
if (!analysisFlag) {
return ResponseObject.newErrResponse("文件解析异常").toString();
}
//获取解析后的文件名称同名策略匹配pal寻找对应文件
String repositoryName = wordUtil.getFileName();
PALRepositoryModel importModel = this.getRepositoryByName(wsId, repositoryName);
if (null == importModel) {
return ResponseObject.newErrResponse("匹配pal文件异常找不到同名文件").toString();
}
Map<String, WordField<Object>> fileFieldMap = wordUtil.getFileFieldMap();
//获取导入文件对应的关联文件属性list
PALRepositoryPropertyDao propDao = new PALRepositoryPropertyDao();
DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao();
List<PALRepositoryPropertyModel> importPropertyList = propDao.getPropertysByPlid(importModel.getId(), "");
for (PALRepositoryPropertyModel importProperty : importPropertyList) {
WordField<Object> wordField = fileFieldMap.get(importProperty.getPropertyName());
//旧版本的映射字段支持
if (null == wordField && wordUtil.getIsOldVersion()) {
Map<String, String> oldWordMapping = wordUtil.getOldWordMapping();
for (String s : oldWordMapping.keySet()) {
if (s.equals(importProperty.getPropertyName())) {
String s1 = oldWordMapping.get(s);
wordField = fileFieldMap.get(s1);
}
}
// wordField = fileFieldMap.get(oldWordMapping.get(importProperty.getPropertyName()));
}
if (null == wordField) {
continue;
}
//使用缓存获取具体建模属性
PALRepositoryAttributeModel repositoryAttrModel = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(wsId, importModel.getMethodId(), importProperty.getPropertyId());
if (null == repositoryAttrModel) {
continue;
}
if ("table".equals(repositoryAttrModel.getType())) {
//将解析的列表数据转化为数据存储json
JSONObject object = new JSONObject();
object.put("name", importProperty.getPropertyName());
JSONArray array = new JSONArray();
List<List<String>> tableFields = (List<List<String>>) wordField.getData();
if (!tableFields.isEmpty()) {
for (List<String> value : tableFields) {
if (!value.isEmpty() && value.size() > 1) {
JSONObject obj = new JSONObject();
obj.put("id", UUIDGener.getUUID());
obj.put("name", value.get(0));
obj.put("desc", value.get(1));
array.add(obj);
}
}
}
if (array.size() > 0) {
//特殊处理表头
PALMethodAttributeModel attributeModel = null;
List<PALMethodAttributeModel> attributes = PALMethodCache.getPALMethodModelById(importModel.getMethodId()).getAttributes();
for (PALMethodAttributeModel attribute : attributes) {
if (attribute.getType().equals(importProperty.getPropertyId())){
attributeModel = attribute;
}
}
if (null == attributeModel || StringUtils.isEmpty(attributeModel.getRef())){
array.getJSONObject(0).put("id", "table_head");
}else{
JSONObject attrRef = JSON.parseObject(attributeModel.getRef());
array.getJSONObject(0).put("id", "table_head");
array.getJSONObject(0).put("id", attrRef.get("firstColumn"));
array.getJSONObject(0).put("id", attrRef.get("secondColumn"));
}
}
object.put("table", array);
//更新数据库值
importProperty.setPropertyValue(object.toJSONString());
propDao.update(importProperty);
} else if ("awsorg".equals(repositoryAttrModel.getType())) {
//aws组织架构解析多组结构解析
String orgName = (String) wordField.getData();
List<AwsOrgInfo> awsOrgInfos = this.getOrgByName(orgName);
if (!awsOrgInfos.isEmpty()) {
//先更新property数据 [{"name":"部门3","id":"fdea04c8-502f-4367-82b7-a5ebe0ce5f67","type":"department"}]
importProperty.setPropertyValue(JSON.toJSONString(awsOrgInfos));
propDao.update(importProperty);
//先删除property关联关系然后新增关系
relationDao.deleteByAttrId(importModel.getId(), "", importProperty.getPropertyId());
for (AwsOrgInfo awsOrgInfo : awsOrgInfos) {
DesignerShapeRelationModel model = new DesignerShapeRelationModel();
model.setFileId(importModel.getId());
model.setShapeId("");
model.setShapeText("");
model.setAttrId(importProperty.getPropertyId());
model.setRelationFileId("00000000-0000-0000-0000-000000000000");
model.setRelationShapeId("00000000-0000-0000-0000-000000000000");
model.setRelationShapeText(JSON.toJSONString(awsOrgInfo));
relationDao.insert(model);
}
}
} else if ("relation".equals(repositoryAttrModel.getType())) {
//关联文件
List<PALRepositoryModel> fileList = new ArrayList<>();
List<String> relations = (List<String>) wordField.getData();
for (String relation : relations) {
PALRepositoryModel repository = this.getRepositoryByName(wsId, this.trimFileName(relation));
if (repository != null) {
fileList.add(repository);
}
}
//更新property数据
String relationFileIds = "";
for (PALRepositoryModel model : fileList) {
relationFileIds += model.getId() + ",";
}
if (relationFileIds.length() > 1) {
relationFileIds = relationFileIds.substring(0, relationFileIds.length() - 1);
}
JSONObject propertyJson = JSON.parseObject(importProperty.getPropertyValue());
propertyJson.put("relationFileId", relationFileIds);
importProperty.setPropertyValue(propertyJson.toJSONString());
propDao.update(importProperty);
//先删除property关联关系然后新增关系
if (!fileList.isEmpty()) {
relationDao.deleteByAttrId(importModel.getId(), "", importProperty.getPropertyId());
for (PALRepositoryModel repositoryModel : fileList) {
DesignerShapeRelationModel relationModel = new DesignerShapeRelationModel();
relationModel.setFileId(importModel.getId());
relationModel.setShapeId("");
relationModel.setShapeText("");
relationModel.setAttrId(importProperty.getPropertyId());
relationModel.setRelationFileId(repositoryModel.getVersionId());
relationModel.setRelationShapeId("");
relationModel.setRelationShapeText(repositoryModel.getName());
relationDao.insert(relationModel);
}
}
} else if ("select".equals(repositoryAttrModel.getType()) || "select_m".equals(repositoryAttrModel.getType())) {
} else if ("boolean".equals(repositoryAttrModel.getType())) {
} else if ("DateTimePicker".equals(repositoryAttrModel.getType())) {
String time = (String) wordField.getData();
try {
Date formatTime = new SimpleDateFormat("yyyy年MM月dd日").parse(time);
time = UtilDate.datetimeFormat(formatTime);
} catch (ParseException e) {
e.printStackTrace();
}
//更新数据库值
importProperty.setPropertyValue(time);
propDao.update(importProperty);
} else {
if (wordField.getData() instanceof String) {
//直接获取Word解析字符内容
String value = (String) wordField.getData();
//更新数据库值
importProperty.setPropertyValue(value);
propDao.update(importProperty);
//批量解析文档
File dirFile = new File(fileDcContext.getPath());
File[] fileArr = dirFile.listFiles();
new Thread(new Runnable() {
@Override
public void run() {
for (File file : fileArr) {
new DataMigrationWeb().analysisWord(wsId, file.getPath());
}
}
}
}).start();
return ro.toString();
}
@ -534,6 +375,187 @@ public class DataMigrationWeb extends ActionWeb {
return index == null ? 0 : index;
}
private ResponseObject analysisWord(String wsId,String filePath){
//解析Word文档
WordUtil wordUtil = new WordUtil();
boolean analysisFlag = wordUtil.analysisWordTable(filePath);
if (!analysisFlag) {
return ResponseObject.newErrResponse("文件解析异常");
}
//获取解析后的文件名称同名策略匹配pal寻找对应文件
String repositoryName = wordUtil.getFileName();
PALRepositoryModel importModel = this.getRepositoryByName(wsId, repositoryName);
if (null == importModel) {
return ResponseObject.newErrResponse("匹配pal文件异常找不到同名文件");
}
Map<String, WordField<Object>> fileFieldMap = wordUtil.getFileFieldMap();
//获取导入文件对应的关联文件属性list
PALRepositoryPropertyDao propDao = new PALRepositoryPropertyDao();
DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao();
List<PALRepositoryPropertyModel> importPropertyList = propDao.getPropertysByPlid(importModel.getId(), "");
for (PALRepositoryPropertyModel importProperty : importPropertyList) {
WordField<Object> wordField = fileFieldMap.get(importProperty.getPropertyName());
//旧版本的映射字段支持
if (null == wordField && wordUtil.getIsOldVersion()) {
Map<String, String> oldWordMapping = wordUtil.getOldWordMapping();
for (String s : oldWordMapping.keySet()) {
if (s.equals(importProperty.getPropertyName())) {
String s1 = oldWordMapping.get(s);
wordField = fileFieldMap.get(s1);
}
}
}
if (null == wordField) {
continue;
}
//使用缓存获取具体建模属性
PALRepositoryAttributeModel repositoryAttrModel = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(wsId, importModel.getMethodId(), importProperty.getPropertyId());
if (null == repositoryAttrModel) {
continue;
}
if ("table".equals(repositoryAttrModel.getType())) {
//将解析的列表数据转化为数据存储json
JSONObject object = new JSONObject();
object.put("name", importProperty.getPropertyName());
JSONArray array = new JSONArray();
List<List<String>> tableFields = (List<List<String>>) wordField.getData();
if (!tableFields.isEmpty()) {
for (List<String> value : tableFields) {
if (!value.isEmpty() && value.size() > 1) {
JSONObject obj = new JSONObject();
obj.put("id", UUIDGener.getUUID());
obj.put("name", value.get(0));
obj.put("desc", value.get(1));
array.add(obj);
}
}
}
if (array.size() > 0) {
//特殊处理表头
PALMethodAttributeModel attributeModel = null;
List<PALMethodAttributeModel> attributes = PALMethodCache.getPALMethodModelById(importModel.getMethodId()).getAttributes();
for (PALMethodAttributeModel attribute : attributes) {
if (attribute.getType().equals(importProperty.getPropertyId())){
attributeModel = attribute;
}
}
if (null == attributeModel || StringUtils.isEmpty(attributeModel.getRef())){
array.getJSONObject(0).put("id", "table_head");
}else{
JSONObject attrRef = JSON.parseObject(attributeModel.getRef());
array.getJSONObject(0).put("id", "table_head");
array.getJSONObject(0).put("id", attrRef.get("firstColumn"));
array.getJSONObject(0).put("id", attrRef.get("secondColumn"));
}
}
object.put("table", array);
//更新数据库值
importProperty.setPropertyValue(object.toJSONString());
propDao.update(importProperty);
} else if ("awsorg".equals(repositoryAttrModel.getType())) {
//aws组织架构解析多组结构解析
String orgName = (String) wordField.getData();
List<AwsOrgInfo> awsOrgInfos = this.getOrgByName(orgName);
if (!awsOrgInfos.isEmpty()) {
//先更新property数据 [{"name":"部门3","id":"fdea04c8-502f-4367-82b7-a5ebe0ce5f67","type":"department"}]
importProperty.setPropertyValue(JSON.toJSONString(awsOrgInfos));
propDao.update(importProperty);
//先删除property关联关系然后新增关系
relationDao.deleteByAttrId(importModel.getId(), "", importProperty.getPropertyId());
for (AwsOrgInfo awsOrgInfo : awsOrgInfos) {
DesignerShapeRelationModel model = new DesignerShapeRelationModel();
model.setFileId(importModel.getId());
model.setShapeId("");
model.setShapeText("");
model.setAttrId(importProperty.getPropertyId());
model.setRelationFileId("00000000-0000-0000-0000-000000000000");
model.setRelationShapeId("00000000-0000-0000-0000-000000000000");
model.setRelationShapeText(JSON.toJSONString(awsOrgInfo));
relationDao.insert(model);
}
}
} else if ("relation".equals(repositoryAttrModel.getType())) {
//关联文件
List<PALRepositoryModel> fileList = new ArrayList<>();
List<String> relations = (List<String>) wordField.getData();
for (String relation : relations) {
PALRepositoryModel repository = this.getRepositoryByName(wsId, this.trimFileName(relation));
if (repository != null) {
fileList.add(repository);
}
}
//更新property数据
String relationFileIds = "";
for (PALRepositoryModel model : fileList) {
relationFileIds += model.getId() + ",";
}
if (relationFileIds.length() > 1) {
relationFileIds = relationFileIds.substring(0, relationFileIds.length() - 1);
}
JSONObject propertyJson = JSON.parseObject(importProperty.getPropertyValue());
propertyJson.put("relationFileId", relationFileIds);
importProperty.setPropertyValue(propertyJson.toJSONString());
propDao.update(importProperty);
//先删除property关联关系然后新增关系
if (!fileList.isEmpty()) {
relationDao.deleteByAttrId(importModel.getId(), "", importProperty.getPropertyId());
for (PALRepositoryModel repositoryModel : fileList) {
DesignerShapeRelationModel relationModel = new DesignerShapeRelationModel();
relationModel.setFileId(importModel.getId());
relationModel.setShapeId("");
relationModel.setShapeText("");
relationModel.setAttrId(importProperty.getPropertyId());
relationModel.setRelationFileId(repositoryModel.getVersionId());
relationModel.setRelationShapeId("");
relationModel.setRelationShapeText(repositoryModel.getName());
relationDao.insert(relationModel);
}
}
} else if ("select".equals(repositoryAttrModel.getType()) || "select_m".equals(repositoryAttrModel.getType())) {
} else if ("boolean".equals(repositoryAttrModel.getType())) {
} else if ("DateTimePicker".equals(repositoryAttrModel.getType())) {
String time = (String) wordField.getData();
try {
Date formatTime = new SimpleDateFormat("yyyy年MM月dd日").parse(time);
time = UtilDate.datetimeFormat(formatTime);
} catch (ParseException e) {
e.printStackTrace();
}
//更新数据库值
importProperty.setPropertyValue(time);
propDao.update(importProperty);
} else {
if (wordField.getData() instanceof String) {
//直接获取Word解析字符内容
String value = (String) wordField.getData();
//更新数据库值
importProperty.setPropertyValue(value);
propDao.update(importProperty);
}
}
}
return ResponseObject.newOkResponse("导入成功");
}
private DCContext getFileDcContext(String groupValue, String fileValue) {
DCContext context = null;
DCPluginProfile dcProfile = DCProfileManager.getDCProfile(Constant.APP_ID, Constant.UPFILE);
if (null != dcProfile) {
context = new DCContext(super.getContext(), dcProfile, Constant.APP_ID, groupValue, fileValue);
}
return context;
}
private DCContext getFileDcContext(String groupValue, String fileValue, String fileName) {
DCContext context = null;

View File

@ -10,7 +10,7 @@
<param name="wsId"/>
<param name="groupValue"/>
<param name="fileValue"/>
<param name="fileName"/>
<!-- <param name="fileName"/>-->
</cmd-bean>
<cmd-bean name="com.actionsoft.apps.coe.pal.datamigration_IT_attribute_import">
<param name="wsId"/>