소스 검색

标签字典改造,转换器改成自适应,无特别业务要求,无需新增转换器

LiTaohong 7 년 전
부모
커밋
c2136d6c01
15개의 변경된 파일206개의 추가작업 그리고 49개의 파일을 삭제
  1. 9 0
      common/common-entity/src/main/java/com/yihu/figure_label/entity/FlLabelDict.java
  2. 9 0
      common/common-entity/src/main/java/com/yihu/figure_label/entity/FlLabelDictJob.java
  3. 0 0
      patient-co/patient-co-figure-label/patient-co-figure-label.iml___jb_tmp___
  4. 7 0
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/AgeConvert.java
  5. 91 0
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/BasicDictItemHelper.java
  6. 6 0
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/BirthConvert.java
  7. 38 6
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/ConvertHelper.java
  8. 6 1
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/SexConvert.java
  9. 1 1
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/SignDoctorConvert.java
  10. 1 1
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/SignTeamConvert.java
  11. 2 1
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/extract/ESExtracter.java
  12. 7 1
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/extract/MysqlExtracter.java
  13. 1 1
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/job/Es2EsJob.java
  14. 15 28
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/model/DataModel.java
  15. 13 9
      patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/model/SaveModel.java

+ 9 - 0
common/common-entity/src/main/java/com/yihu/figure_label/entity/FlLabelDict.java

@ -17,6 +17,15 @@ public class FlLabelDict extends IdEntity {
    private String parentCode;
    private String labelName;
    private String labelCode;
    private String dictCode;
    public String getDictCode() {
        return dictCode;
    }
    public void setDictCode(String dictCode) {
        this.dictCode = dictCode;
    }
    public String getParentCode() {
        return parentCode;

+ 9 - 0
common/common-entity/src/main/java/com/yihu/figure_label/entity/FlLabelDictJob.java

@ -18,6 +18,15 @@ public class FlLabelDictJob extends IdEntity {
    private String labelType;
    private String sql;
    private String convertClazz;
    private Long categoryId;
    public Long getCategoryId() {
        return categoryId;
    }
    public void setCategoryId(Long categoryId) {
        this.categoryId = categoryId;
    }
    public Long getJobId() {
        return jobId;

+ 0 - 0
patient-co/patient-co-figure-label/patient-co-figure-label.iml___jb_tmp___


+ 7 - 0
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/AgeConvert.java

@ -44,12 +44,19 @@ public class AgeConvert implements Convert {
                    saveModel.setLabelType(one.getParentCode());
                    saveModel.setLabelCode(labelCode);
                    saveModel.setLabelName(map.get(labelCode));
                    //源数据来源时间
                    if(null != model.getSourceTime()){
                        saveModel.setSourceTime(model.getSourceTime());
                    }
                    saveModel.setCreateTime(DateFormatUtils.format(new Date(), ConstantUtil.date_format));
                    convertHelper.generateDataSource(model,saveModel,sourceType,source);
                    //如果fl_job_config表配置的id和数据来源不一致,则不保存数据
                    if(StringUtils.isEmpty(saveModel.getSource())){
                        return;
                    }
                    saveModels.add(saveModel);
                }

+ 91 - 0
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/BasicDictItemHelper.java

@ -0,0 +1,91 @@
package com.yihu.wlyy.figure.label.convert;
import com.yihu.figure_label.entity.FlLabelDict;
import io.swagger.annotations.Scope;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author litaohong on 2018/4/27
 * @project patient-co-management
 * 一些基础字典信息载入内存
 */
@Component
public class BasicDictItemHelper {
    public  Map<String,String> dictCategoryMap = new HashMap<>();
    public  Map<String,List<FlLabelDict>> labelDictMap = new HashMap<>();
    @Autowired
    JdbcTemplate jdbcTemplate;
    @PostConstruct
    public void init(){
        loadCategoryMap();
        loadLabelDictMap();
    }
    /**
     * 加载标签分类表
     * @return
     */
    public Map<String,String> loadCategoryMap(){
        if(!CollectionUtils.isEmpty(dictCategoryMap)){
            return dictCategoryMap;
        }
        String sql = "select * from fl_label_dict_category";
        List<Map<String, Object>> dictCategoryList = jdbcTemplate.queryForList(sql);
        dictCategoryList.forEach(
                one -> {
                    dictCategoryMap.put(String.valueOf(one.get("id")),String.valueOf(one.get("dict_code")));
                }
        );
        return dictCategoryMap;
    }
    /**
     * 加载标签字典表
     * @return
     */
    public Map<String,List<FlLabelDict>> loadLabelDictMap(){
        if(!CollectionUtils.isEmpty(labelDictMap)){
            return labelDictMap;
        }
        String sql = "select * from fl_label_dict";
        List<FlLabelDict> labelDictList = jdbcTemplate.query(sql,new BeanPropertyRowMapper(FlLabelDict.class));
        labelDictList.forEach(
                one -> {
                    List list = new ArrayList();
                    if(labelDictMap.containsKey(one.getDictCode())){
                        labelDictMap.get(one.getDictCode()).add(one);
                        return;
                    }
                    list.add(one);
                    labelDictMap.put(one.getDictCode(), list);
                }
        );
        return labelDictMap;
    }
//    public Map<String,FlLabelDict> getOneDictMap(String dictCode){
//        Map<String,FlLabelDict> map = new HashMap<>();
//        if(this.labelDictMap.get(dictCode).size() > 1){
//            List<FlLabelDict> list = this.labelDictMap.get(dictCode);
//            list.forEach(
//                    one -> {
//                        map.put()
//                    }
//            );
//        }
//    }
}

+ 6 - 0
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/BirthConvert.java

@ -44,6 +44,12 @@ public class BirthConvert implements Convert {
                    saveModel.setLabelType(flLabelDict.getParentCode());
                    saveModel.setLabelName(flLabelDict.getLabelName());
                    saveModel.setLabelValue(birth);
                    //源数据来源时间
                    if(null != model.getSourceTime()){
                        saveModel.setSourceTime(model.getSourceTime());
                    }
                    saveModel.setCreateTime(DateFormatUtils.format(new Date(), ConstantUtil.date_format));
                    convertHelper.generateDataSource(model,saveModel,sourceType,source);

+ 38 - 6
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/ConvertHelper.java

@ -35,6 +35,9 @@ public class ConvertHelper {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BasicDictItemHelper basicDictItemHelper;
    /**
     * 进行具体标签生成转换
     * @return
@ -48,7 +51,7 @@ public class ConvertHelper {
        }
        //转换器为空表示不需要转换
        if (flLabelDictJob == null || StringUtils.isEmpty(flLabelDictJob.getConvertClazz())) {
            return generateSaveModleWithOutConvert(dataModels,sourceType,source);
            return generateSaveModleWithOutConvert(dataModels,flLabelDictJob.getCategoryId(),sourceType,source);
        }
        List<FlLabelDict> flLabelDictList = jdbcTemplate.query(flLabelDictJob.getSql(), new BeanPropertyRowMapper(FlLabelDict.class));
        //如果配置的字典为空
@ -61,7 +64,7 @@ public class ConvertHelper {
            Method method = obj.getClass().getMethod("convert", List.class, List.class,String.class,String.class);
            saveModels = (List<SaveModel>) method.invoke(obj, dataModels, 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 +74,55 @@ 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());
            }
            saveModels.add(saveModel);
        }
        return saveModels;

+ 6 - 1
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/SexConvert.java

@ -40,9 +40,14 @@ public class SexConvert implements Convert{
                    saveModel.setLabelType(one.getParentCode());
                    String sex = IdCardUtil.getSexForIdcard(model.getIdcard());
                    saveModel.setLabelCode(sex);
                    saveModel.setLabelName(map.get(sex));
                    //源数据来源时间
                    if(null != model.getSourceTime()){
                        saveModel.setSourceTime(model.getSourceTime());
                    }
                    saveModel.setCreateTime(DateFormatUtils.format(new Date(), ConstantUtil.date_format));
                    convertHelper.generateDataSource(model,saveModel,sourceType,source);

+ 1 - 1
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/SignDoctorConvert.java

@ -32,7 +32,7 @@ public class SignDoctorConvert implements Convert {
            saveModel.setIdcard(dataModel.getIdcard());
            saveModel.setLabelType(dict.getParentCode());
            saveModel.setLabelCode(dataModel.getLabelCode());
            saveModel.setLabelName(dataModel.getLabelName());
            saveModel.setLabelName(dict.getLabelName());
            saveModel.setLabelValue(dataModel.getLabelValue());
            convertHelper.generateDataSource(dataModel,saveModel,sourceType,source);
            if (StringUtils.isEmpty(saveModel.getSource())) {

+ 1 - 1
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/convert/SignTeamConvert.java

@ -34,7 +34,7 @@ public class SignTeamConvert implements Convert {
            saveModel.setIdcard(dataModel.getIdcard());
            saveModel.setLabelType(dict.getParentCode());
            saveModel.setLabelCode(dataModel.getLabelCode());
            saveModel.setLabelName(dataModel.getLabelName());
            saveModel.setLabelName(dict.getLabelName());
            saveModel.setLabelValue(dataModel.getLabelValue());
            convertHelper.generateDataSource(dataModel,saveModel,sourceType,source);
            if (StringUtils.isEmpty(saveModel.getSource())) {

+ 2 - 1
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/extract/ESExtracter.java

@ -24,7 +24,8 @@ public class ESExtracter implements Extracter{
    @Autowired
    private ElasticsearchUtil elasticsearchUtil;
    public List<DataModel> extractDataByJobConfigsql(String sql){
    @Override
    public List<DataModel> extractDataByJobConfigsql(String sql,String datasource){
        List<DataModel> saveModels = new ArrayList<>();
        List<Map<String,Object>> list = elasticsearchUtil.excuteDataModel(sql);
        for(Map<String,Object> tempMap:list){

+ 7 - 1
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/extract/MysqlExtracter.java

@ -51,7 +51,13 @@ public class MysqlExtracter implements Extracter {
            jdbcTemplate = templateMap.get("wlyy");
            return  getDataByThread(sql,jdbcTemplate);
        }
        jdbcTemplate = templateMap.get(datasource);
        String [] arr = datasource.split("-");
        if(null == arr || arr.length <= 1){
            logger.error("invalid datasource format,check in fl_job_config: "+ datasource);
            return null;
        }
        jdbcTemplate = templateMap.get(arr[1]);
        if(null == jdbcTemplate){
            logger.error("datasource not exist,check in fl_job_config: "+ datasource);
            return null;

+ 1 - 1
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/job/Es2EsJob.java

@ -132,7 +132,7 @@ public class Es2EsJob implements Job {
     * 提取数据,按数据库中配置的增量条件提取
     */
    public void extract(){
        this.dataModelList = esExtracter.extractDataByJobConfigsql(this.finalSql);
        this.dataModelList = esExtracter.extractDataByJobConfigsql(this.finalSql,"");
    }
    /**

+ 15 - 28
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/model/DataModel.java

@ -8,11 +8,11 @@ public class DataModel {
    /**
     * 这些id用作记录数据来源,当有多个表时,记录多个表的id,并依据fl_job_config里的sourceTyep,source来区别
     */
    private int id;
    private int id1;
    private int id2;
    private int id3;
    private int id4;
    private Integer id;
    private Integer id1;
    private Integer id2;
    private Integer id3;
    private Integer id4;
    /**
     * 有些表的id为uuid,是string类型,所以为了兼容所有的,此种类型id命名为idstr,进行数据抽取时需多注意
@ -58,48 +58,43 @@ public class DataModel {
     */
    private String sourceTime;
    /**
     * 标签状态,eg:预约挂号-预约成功,预约失败
     */
    private String status;
    public int getId() {
    public Integer getId() {
        return id;
    }
    public void setId(int id) {
    public void setId(Integer id) {
        this.id = id;
    }
    public int getId1() {
    public Integer getId1() {
        return id1;
    }
    public void setId1(int id1) {
    public void setId1(Integer id1) {
        this.id1 = id1;
    }
    public int getId2() {
    public Integer getId2() {
        return id2;
    }
    public void setId2(int id2) {
    public void setId2(Integer id2) {
        this.id2 = id2;
    }
    public int getId3() {
    public Integer getId3() {
        return id3;
    }
    public void setId3(int id3) {
    public void setId3(Integer id3) {
        this.id3 = id3;
    }
    public int getId4() {
    public Integer getId4() {
        return id4;
    }
    public void setId4(int id4) {
    public void setId4(Integer id4) {
        this.id4 = id4;
    }
@ -191,14 +186,6 @@ public class DataModel {
        this.sourceTime = sourceTime;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getLabelValue() {
        return labelValue;
    }

+ 13 - 9
patient-co/patient-co-figure-label/src/main/java/com/yihu/wlyy/figure/label/model/SaveModel.java

@ -19,6 +19,11 @@ public class SaveModel implements Serializable{
     * 身份证
     */
    private String idcard;
    /**
     * 标签字典码
     */
    private String dictCode;
    /**
     * 标签类型
     */
@ -46,7 +51,6 @@ public class SaveModel implements Serializable{
    /**
     * 当前标签是否激活
     */
//    private boolean isCurrentActive;
    /**
     * 标签生成来源
@ -71,7 +75,6 @@ public class SaveModel implements Serializable{
        return labelType;
    }
    public String getId() {
        return id;
    }
@ -80,6 +83,14 @@ public class SaveModel implements Serializable{
        this.id = id;
    }
    public String getDictCode() {
        return dictCode;
    }
    public void setDictCode(String dictCode) {
        this.dictCode = dictCode;
    }
    public void setLabelType(String labelType) {
        this.labelType = labelType;
    }
@ -116,13 +127,6 @@ public class SaveModel implements Serializable{
        this.createTime = createTime;
    }
//    public boolean isCurrentActive() {
//        return isCurrentActive;
//    }
//    public void setCurrentActive(boolean currentActive) {
//        isCurrentActive = currentActive;
//    }
    public String getSource() {
        return source;
    }