|
@ -23,6 +23,7 @@ import java.lang.reflect.Method;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* @author lith on 2018.03.14
|
|
@ -35,20 +36,32 @@ public class ConvertHelper {
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
@Autowired
|
|
|
private BasicDictItemHelper basicDictItemHelper;
|
|
|
|
|
|
/**
|
|
|
* 进行具体标签生成转换
|
|
|
* @param dataModels
|
|
|
* @param hbaseDatas
|
|
|
* @param flLabelDictJob
|
|
|
* @param sourceType
|
|
|
* @param source
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List<SaveModel> convert(List<DataModel> dataModels, FlLabelDictJob flLabelDictJob,String sourceType,String source) throws Exception {
|
|
|
public List<SaveModel> convert(List<DataModel> dataModels, List<Map<String,Object>> hbaseDatas,FlLabelDictJob flLabelDictJob, String sourceType, String source) throws Exception {
|
|
|
List<SaveModel> saveModels = new ArrayList<>();
|
|
|
//如果源数据为空
|
|
|
if(CollectionUtils.isEmpty(dataModels)){
|
|
|
if(CollectionUtils.isEmpty(dataModels) && CollectionUtils.isEmpty(hbaseDatas)){
|
|
|
return saveModels;
|
|
|
}
|
|
|
//标签job未配置
|
|
|
if(null == flLabelDictJob){
|
|
|
return saveModels;
|
|
|
}
|
|
|
//转换器为空表示不需要转换
|
|
|
if (flLabelDictJob == null || StringUtils.isEmpty(flLabelDictJob.getConvertClazz())) {
|
|
|
return generateSaveModleWithOutConvert(dataModels,sourceType,source);
|
|
|
if (StringUtils.isEmpty(flLabelDictJob.getConvertClazz())) {
|
|
|
return generateSaveModleWithOutConvert(dataModels,flLabelDictJob.getCategoryId(),sourceType,source);
|
|
|
}
|
|
|
List<FlLabelDict> flLabelDictList = jdbcTemplate.query(flLabelDictJob.getSql(), new BeanPropertyRowMapper(FlLabelDict.class));
|
|
|
//如果配置的字典为空
|
|
@ -58,10 +71,10 @@ public class ConvertHelper {
|
|
|
try {
|
|
|
Class clazz = Class.forName(flLabelDictJob.getConvertClazz());
|
|
|
Object obj = ApplicationContextHolderUtil.getContext().getBean(clazz);
|
|
|
Method method = obj.getClass().getMethod("convert", List.class, List.class,String.class,String.class);
|
|
|
saveModels = (List<SaveModel>) method.invoke(obj, dataModels, flLabelDictList,sourceType,source);
|
|
|
Method method = obj.getClass().getMethod("convert", List.class, List.class,List.class,String.class,String.class);
|
|
|
saveModels = (List<SaveModel>) method.invoke(obj, dataModels, hbaseDatas,flLabelDictList,sourceType,source);
|
|
|
} catch (Exception e) {
|
|
|
// logger.error("customized class or convert(List<DataModel> modelList,List<FlLabelDict> flLabelDictList,String sourceType,String source) method not found:" + flLabelDictJob.getConvertClazz());
|
|
|
logger.error("customized class or convert() method not found:" + flLabelDictJob.getConvertClazz());
|
|
|
e.printStackTrace();
|
|
|
return saveModels;
|
|
|
}
|
|
@ -71,26 +84,56 @@ public class ConvertHelper {
|
|
|
/**
|
|
|
* 无需转换器直接转换,此种情况为源数据已经分类好标签
|
|
|
* @param dataModels
|
|
|
* @param categoryId
|
|
|
* @param sourceType
|
|
|
* @param source
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> generateSaveModleWithOutConvert(List<DataModel> dataModels,String sourceType,String source){
|
|
|
public List<SaveModel> generateSaveModleWithOutConvert(List<DataModel> dataModels,Long categoryId,String sourceType,String source){
|
|
|
String dictCode = basicDictItemHelper.dictCategoryMap.get(String.valueOf(categoryId));
|
|
|
List<SaveModel> saveModels = new ArrayList<>();
|
|
|
//lambda无法跳出循环
|
|
|
for(DataModel dataModel:dataModels){
|
|
|
SaveModel saveModel = new SaveModel();
|
|
|
saveModel.setIdcard(dataModel.getIdcard());
|
|
|
saveModel.setId(MakeIDUtil.makeSaveModelID(dataModel,""));
|
|
|
saveModel.setLabelType(dataModel.getParentCode());
|
|
|
saveModel.setLabelCode(dataModel.getLabelCode());
|
|
|
saveModel.setLabelName(dataModel.getLabelName());
|
|
|
saveModel.setDictCode(dictCode);
|
|
|
//找不到该类别
|
|
|
if (null == basicDictItemHelper.labelDictMap.get(dictCode)) {
|
|
|
logger.error("label dictCode not exist :【" + dictCode + "】");
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
//只有一种类别
|
|
|
if(basicDictItemHelper.labelDictMap.get(dictCode).size() == 1){
|
|
|
List<FlLabelDict> flLabelDictList = basicDictItemHelper.labelDictMap.get(dictCode);
|
|
|
saveModel.setLabelType(flLabelDictList.get(0).getParentCode());
|
|
|
saveModel.setLabelCode(flLabelDictList.get(0).getLabelCode());
|
|
|
saveModel.setLabelName(flLabelDictList.get(0).getLabelName());
|
|
|
if(!StringUtils.isEmpty(dataModel.getLabelValue())){
|
|
|
if(StringUtils.endsWithIgnoreCase("height_dict",dictCode)){
|
|
|
saveModel.setLabelValue(dataModel.getLabelValue()+"cm");
|
|
|
}
|
|
|
else if(StringUtils.endsWithIgnoreCase("weight_dict",dictCode)){
|
|
|
saveModel.setLabelValue(dataModel.getLabelValue()+"kg");
|
|
|
}else{
|
|
|
saveModel.setLabelValue(dataModel.getLabelValue());
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
|
//当有多种类别,sql里构造好需要格式,例如不同code对应不同的label_name
|
|
|
saveModel.setLabelType(dataModel.getParentCode());
|
|
|
saveModel.setLabelCode(dataModel.getLabelCode());
|
|
|
saveModel.setLabelName(dataModel.getLabelName());
|
|
|
}
|
|
|
saveModel.setCreateTime(DateFormatUtils.format(new Date(), ConstantUtil.date_format));
|
|
|
this.generateDataSource(dataModel,saveModel,sourceType,source);
|
|
|
//如果fl_job_config表配置的id和数据来源不一致,则不保存数据,原子性,全部不保存,不然部分存了部分没存不好剔除数据
|
|
|
if(StringUtils.isEmpty(saveModel.getSource())){
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
if(StringUtils.isEmpty(dataModel.getSourceTime())){
|
|
|
saveModel.setSourceTime(dataModel.getSourceTime());
|
|
|
}
|
|
|
saveModel.setId(MakeIDUtil.makeSaveModelID(saveModel));
|
|
|
saveModels.add(saveModel);
|
|
|
}
|
|
|
return saveModels;
|
|
@ -105,7 +148,7 @@ public class ConvertHelper {
|
|
|
* @return
|
|
|
*/
|
|
|
public void generateDataSource(DataModel dataModel,SaveModel saveModel,String sourceType,String sources) {
|
|
|
if(!StringUtils.endsWithIgnoreCase(SourceTypeEnum.MYSQL.toString(),sourceType) && !StringUtils.endsWithIgnoreCase(SourceTypeEnum.ELASTICSEARCH.toString(),sourceType) ){
|
|
|
if(!StringUtils.endsWithIgnoreCase(SourceTypeEnum.MYSQL.toString(),sourceType) && !StringUtils.endsWithIgnoreCase(SourceTypeEnum.ELASTICSEARCH.toString(),sourceType) && !StringUtils.endsWithIgnoreCase(SourceTypeEnum.HBASE.toString(),sourceType)){
|
|
|
return;
|
|
|
}
|
|
|
StringBuilder ids = new StringBuilder();
|