|
@@ -1,6 +1,9 @@
|
|
|
package com.persagy.fm.translate.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import com.persagy.fm.common.helper.SpringHelper;
|
|
|
+import com.persagy.fm.common.response.CommonResult;
|
|
|
+import com.persagy.fm.common.response.PageList;
|
|
|
import com.persagy.fm.translate.extension.ITransWrapperBuilder;
|
|
|
import com.persagy.fm.translate.helper.TranslatorHelper;
|
|
|
import com.persagy.fm.translate.model.ITransWrapper;
|
|
@@ -8,7 +11,6 @@ import com.persagy.fm.translate.model.TransMeta;
|
|
|
import com.persagy.fm.translate.service.ITranslateBatchHandle;
|
|
|
import com.persagy.fm.translate.service.ITranslateHandle;
|
|
|
import com.persagy.fm.translate.service.ITranslateService;
|
|
|
-import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.domain.PageImpl;
|
|
@@ -16,10 +18,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashSet;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@@ -34,39 +33,19 @@ public class TranslateServiceImpl implements ITranslateService {
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
@Override
|
|
|
- public Object translate(Object origions, List<TransMeta> metas) {
|
|
|
- if (origions == null || metas == null || metas.size() == 0) {
|
|
|
- return origions;
|
|
|
+ public Object translate(Object origins, List<TransMeta> metas) {
|
|
|
+ if (origins == null || metas == null || metas.size() == 0) {
|
|
|
+ return origins;
|
|
|
}
|
|
|
- Object orignObj = origions;
|
|
|
- List<Object> objs = null;
|
|
|
- boolean islist = false;
|
|
|
- //对分页和列表进行处理获取单个对象,并设置是否为列表标志
|
|
|
- if (origions instanceof Page) {
|
|
|
- try {
|
|
|
- Field field = PageImpl.class.getSuperclass().getDeclaredField("content");
|
|
|
- field.setAccessible(true);
|
|
|
- objs = (List<Object>) field.get(origions);
|
|
|
- } catch (NoSuchFieldException | IllegalAccessException e) {
|
|
|
- objs = null;
|
|
|
- }
|
|
|
- if (CollectionUtils.isEmpty(objs)) {
|
|
|
- return origions;
|
|
|
- }
|
|
|
- orignObj = objs.get(0);
|
|
|
- islist = true;
|
|
|
- } else if (origions instanceof List) {
|
|
|
- objs = (List<Object>) origions;
|
|
|
- if (objs.size() == 0) {
|
|
|
- return origions;
|
|
|
- }
|
|
|
- orignObj = objs.get(0);
|
|
|
- islist = true;
|
|
|
+ Object originObj = fetchTransObj(origins);
|
|
|
+ if(originObj == null) {
|
|
|
+ return origins;
|
|
|
}
|
|
|
//按翻译元数据生成翻译处理器
|
|
|
List<ITranslateHandle> handles = new ArrayList<>();
|
|
|
HashSet<String> properties = new HashSet<>();
|
|
|
- ITransWrapperBuilder builder = TranslatorHelper.createTransWrapperBuilder(orignObj.getClass());
|
|
|
+ Class clazz = (originObj instanceof List) ? ((List<Object>) originObj).get(0).getClass() : originObj.getClass();
|
|
|
+ ITransWrapperBuilder builder = TranslatorHelper.createTransWrapperBuilder(clazz);
|
|
|
for (TransMeta meta : metas) {
|
|
|
ITranslateHandle handle = createHandle(meta);
|
|
|
handles.add(handle);
|
|
@@ -89,14 +68,45 @@ public class TranslateServiceImpl implements ITranslateService {
|
|
|
}
|
|
|
}
|
|
|
builder.setExtendProps(properties);
|
|
|
- if (islist) {
|
|
|
-
|
|
|
- transMultiRows(objs, handles, builder);
|
|
|
- return origions;
|
|
|
+ if (originObj instanceof List) {
|
|
|
+ transMultiRows((List<Object>) originObj, handles, builder);
|
|
|
+ return origins;
|
|
|
} else {
|
|
|
//单条数据翻译
|
|
|
- return transSingleRow(orignObj, handles, builder);
|
|
|
+ originObj = transSingleRow(originObj, handles, builder);
|
|
|
+ if(origins instanceof CommonResult) {
|
|
|
+ ((CommonResult) origins).setContent(originObj);
|
|
|
+ }
|
|
|
+ return origins;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 转换为实际待翻译对象
|
|
|
+ * @param origins 原结果
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Object fetchTransObj(Object origins){
|
|
|
+ Object obj = null;
|
|
|
+ //对分页和列表进行处理获取单个对象,并设置是否为列表标志
|
|
|
+ if (origins instanceof Page) {
|
|
|
+ try {
|
|
|
+ Field field = PageImpl.class.getSuperclass().getDeclaredField("content");
|
|
|
+ field.setAccessible(true);
|
|
|
+ obj = (List<Object>) field.get(origins);
|
|
|
+ } catch (NoSuchFieldException | IllegalAccessException e) {
|
|
|
+ obj = null;
|
|
|
+ }
|
|
|
+ } else if (origins instanceof CommonResult) {
|
|
|
+ obj = ((CommonResult) origins).getContent();
|
|
|
+ if(obj instanceof PageList) {
|
|
|
+ obj = ((PageList) obj).getRecords();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(obj == null) {
|
|
|
+ return null;
|
|
|
}
|
|
|
+ return obj;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -155,6 +165,9 @@ public class TranslateServiceImpl implements ITranslateService {
|
|
|
if (parameter == null) {
|
|
|
continue;
|
|
|
}
|
|
|
+ if(parameter instanceof Collection) {
|
|
|
+ parameter = CollUtil.join(((Collection)parameter), ",");
|
|
|
+ }
|
|
|
parameters.add(parameter.toString());
|
|
|
}
|
|
|
} else {
|
|
@@ -164,6 +177,9 @@ public class TranslateServiceImpl implements ITranslateService {
|
|
|
if (parameter == null) {
|
|
|
continue;
|
|
|
}
|
|
|
+ if(parameter instanceof Collection) {
|
|
|
+ parameter = CollUtil.join(((Collection)parameter), ",");
|
|
|
+ }
|
|
|
parameters.add(parameter.toString());
|
|
|
}
|
|
|
}
|
|
@@ -238,7 +254,6 @@ public class TranslateServiceImpl implements ITranslateService {
|
|
|
|
|
|
/**
|
|
|
* 根据元数据生成处理器
|
|
|
- *
|
|
|
* @param meta 元数据
|
|
|
* @return 处理器
|
|
|
*/
|