|
@ -0,0 +1,122 @@
|
|
|
package com.yihu.wlyy.figure.label.convert;
|
|
|
|
|
|
import com.yihu.base.es.config.ElastricSearchHelper;
|
|
|
import com.yihu.figure_label.entity.FlLabelDict;
|
|
|
import com.yihu.wlyy.figure.label.model.DataModel;
|
|
|
import com.yihu.wlyy.figure.label.model.SaveModel;
|
|
|
import com.yihu.wlyy.figure.label.util.ConstantUtil;
|
|
|
import com.yihu.wlyy.figure.label.util.MakeIDUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* @author litaohong on 2018/4/9
|
|
|
* @project patient-co-management
|
|
|
* 反馈行为标签 记录用户是否有反馈过,反馈了几次
|
|
|
*/
|
|
|
@Component
|
|
|
public class FeedbackConvert implements Convert {
|
|
|
|
|
|
@Autowired
|
|
|
private ConvertHelper convertHelper;
|
|
|
|
|
|
@Autowired
|
|
|
private ElastricSearchHelper elastricSearchHelper;
|
|
|
|
|
|
private Map<String,String> distinctIdcardMap = new HashMap<>();
|
|
|
|
|
|
@Override
|
|
|
public List<SaveModel> convert(List<DataModel> modelList, List<FlLabelDict> flLabelDictList, String sourceType, String source) {
|
|
|
List<SaveModel> saveModels = new ArrayList<>();
|
|
|
FlLabelDict dict = flLabelDictList.get(0);
|
|
|
Map<String,String> mapES = countESFeedbackByIdcard(modelList);
|
|
|
Map<String,DataModel> modelMap = distinctIdcard(modelList);
|
|
|
for(String idcard : modelMap.keySet()){
|
|
|
SaveModel saveModel = new SaveModel();
|
|
|
saveModel.setId(MakeIDUtil.makeSaveModelID(modelMap.get(idcard),""));
|
|
|
int value = 0;
|
|
|
saveModel.setIdcard(idcard);
|
|
|
saveModel.setLabelType(dict.getParentCode());
|
|
|
saveModel.setLabelCode(dict.getLabelCode());
|
|
|
saveModel.setLabelName(dict.getLabelName());
|
|
|
if(mapES.containsKey(idcard)){
|
|
|
value = Integer.parseInt(mapES.get(idcard));
|
|
|
}
|
|
|
if(distinctIdcardMap.containsKey(idcard)){
|
|
|
value = Integer.parseInt(distinctIdcardMap.get(idcard)) + value;
|
|
|
}
|
|
|
saveModel.setLabelValue(String.valueOf(value));
|
|
|
convertHelper.generateDataSource(modelMap.get(idcard),saveModel,sourceType,source);
|
|
|
if (StringUtils.isEmpty(saveModel.getSource())) {
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
saveModel.setSourceTime(modelMap.get(idcard).getSourceTime());
|
|
|
saveModel.setCreateTime(DateFormatUtils.format(new Date(), ConstantUtil.date_format));
|
|
|
saveModels.add(saveModel);
|
|
|
}
|
|
|
return saveModels;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 累加es中每个用户反馈的次数
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,String> countESFeedbackByIdcard(List<DataModel> modelList){
|
|
|
Map<String, String> result = new HashMap<>();
|
|
|
List<Map<String,Object>> list = new ArrayList<>();
|
|
|
StringBuilder idcardStr = new StringBuilder();
|
|
|
idcardStr.append("(");
|
|
|
for (int i = 0; i < modelList.size(); i++) {
|
|
|
idcardStr.append("'").append(modelList.get(i).getIdcard()).append("'");
|
|
|
if (i != modelList.size() - 1) {
|
|
|
idcardStr.append(",");
|
|
|
}
|
|
|
}
|
|
|
idcardStr.append(")");
|
|
|
//先查找出es中已有的用户的反馈次数
|
|
|
String querySql = "select labelValue from " + ConstantUtil.figure_label_es_index + "/" + ConstantUtil.figure_label_es_type + " where lableType = 'feedback_dict' and idcard in " + idcardStr.toString();
|
|
|
list = elastricSearchHelper.excuceSQL(querySql);
|
|
|
//组装以idcard为key的map
|
|
|
if(!CollectionUtils.isEmpty(list)){
|
|
|
list.forEach(
|
|
|
data -> {
|
|
|
result.put(data.get("idcard").toString(), data.get("lableValue").toString());
|
|
|
}
|
|
|
);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 统计从数据库中查询出来的idcard的反馈记录次数,一个人可能会有多条反馈
|
|
|
* @param modelList
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,DataModel> distinctIdcard(List<DataModel> modelList){
|
|
|
Map<String,DataModel> result = new HashMap<>();
|
|
|
modelList.forEach(
|
|
|
model ->{
|
|
|
if(distinctIdcardMap.containsKey(model.getIdcard())){
|
|
|
int count = Integer.parseInt(distinctIdcardMap.get(model.getIdcard())) + 1;
|
|
|
distinctIdcardMap.put(model.getIdcard(),String.valueOf(count));
|
|
|
}else {
|
|
|
distinctIdcardMap.put(model.getIdcard(),"1");
|
|
|
}
|
|
|
|
|
|
if(result.containsKey(model.getIdcard())){
|
|
|
return;
|
|
|
}else{
|
|
|
result.put(model.getIdcard(),model);
|
|
|
}
|
|
|
}
|
|
|
);
|
|
|
return result;
|
|
|
}
|
|
|
}
|