فهرست منبع

采集逻辑整合

lingfeng 9 سال پیش
والد
کامیت
6300893f6f
1فایلهای تغییر یافته به همراه0 افزوده شده و 296 حذف شده
  1. 0 296
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDictentryService.java

+ 0 - 296
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDictentryService.java

@ -1,296 +0,0 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.adapter.AdapterDictModel;
import com.yihu.ehr.standard.model.adapter.AdapterDictEntryModel;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeModel;
import com.yihu.ehr.standard.model.adapter.resultModel.AdapterDictEntryResultDetailModel;
import com.yihu.ehr.standard.model.standard.StdDictionaryModel;
import com.yihu.ehr.standard.service.bo.AdapterVersion;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
@Transactional
@Service("AdapterDictEntryService")
public class AdapterDictEntryService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterDictEntryService";
    public AdapterDictEntryService() {
    }
    public void finalize() throws Throwable {
        super.finalize();
    }
    public AdapterDictEntryModel add(String adapterVersion, String dictentry) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDictEntryModel adapterDictEntryModel = objectMapper.readValue(dictentry, AdapterDictEntryModel.class);
            Session session = getCurrentSession();
            String sql = "select max(id) from " + version.getDictEntryTableName();
            Query query = session.createSQLQuery(sql);
            Object object = query.uniqueResult();
            adapterDictEntryModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictEntryModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDictEntryModel.class);
            sql = sqlCreator.insertData(version.getDictEntryTableName(), jsonNode);
            query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDictEntryModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.saveDictEntryFailed);
        }
    }
    public void delete(String adapterVersion, Integer dictentryId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) throw new IllegalArgumentException("无效版本");
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getDictEntryTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", dictentryId);
            query.executeUpdate();
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteDictEntryFailed);
        }
    }
    public AdapterDictEntryModel modify(String adapterVersion, String dictentry) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDictEntryModel adapterDictEntryModel = objectMapper.readValue(dictentry, AdapterDictEntryModel.class);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictEntryModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDictEntryModel.class);
            String sql = sqlCreator.updateDataByTableKey(version.getDictEntryTableName(), jsonNode);
            Query query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDictEntryModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateDictEntryFailed);
        }
    }
    public List getDictEntryList(Class tClass, String adapterVersion, String condition, String order, Integer limit, Integer offset) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        String tableName = version.getDictEntryTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.equalCondition("stdDictId", jsonNode.get("stdDictId").asInt());
                sqlCreator.likeOrCondition("stdEntryCode", "stdEntryValue", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.selectData(tableName);
        Query query = getQuery(sqlCreator, sql);
        if (limit != null) {
            query.setMaxResults(limit);
            if (offset != null) {
                query.setFirstResult(offset * limit);
            }
        }
        List<AdapterDictEntryModel> modelList = query.list();
        List<Integer> idList = new ArrayList<>();
        Map<Integer, StdDictionaryModel> stdDictModelMap = new HashMap<>();
        Integer schemeId = null;
        for (AdapterDictEntryModel model : modelList) {
            if (model.getAdapterDictId() != null) {
                schemeId = model.getSchemeId();
                idList.add(model.getAdapterDictId());
            }
        }
        if (!CollectionUtil.isEmpty(idList)) {
            AdapterSchemeModel scheme = getEntity(AdapterSchemeModel.class, schemeId);
            StandardVersion standardVersion = new StandardVersion(scheme.getAdapterStdVersion());
            tableName = standardVersion.getDictTableName();
            sqlCreator = new SqlCreator(StdDictionaryModel.class);
            sqlCreator.inCondition("id", idList);
            sql = sqlCreator.selectData(tableName);
            query = getQuery(sqlCreator, sql);
            List<StdDictionaryModel> stdDictModelList = query.list();
            for (StdDictionaryModel model : stdDictModelList) {
                stdDictModelMap.put(model.getId(), model);
            }
        }
        List<AdapterDictEntryResultDetailModel> detailModelList = new ArrayList<>();
        for (AdapterDictEntryModel model : modelList) {
            AdapterDictEntryResultDetailModel detailModel = new AdapterDictEntryResultDetailModel();
            detailModel.setId(model.getId());
            detailModel.setSchemeId(model.getSchemeId());
            detailModel.setAdapterDictId(model.getAdapterDictId());
            detailModel.setAdapterEntryId(model.getAdapterEntryId());
            detailModel.setAdapterEntryCode(model.getAdapterEntryCode());
            detailModel.setAdapterEntryValue(model.getAdapterEntryValue());
            detailModel.setStdDictId(model.getStdDictId());
            detailModel.setStdEntryId(model.getStdEntryId());
            detailModel.setStdEntryCode(model.getStdEntryCode());
            detailModel.setStdEntryValue(model.getStdEntryValue());
            if (stdDictModelMap.get(model.getAdapterDictId()) != null) {
                detailModel.setAdapterDictCode(stdDictModelMap.get(model.getAdapterDictId()).getCode());
                detailModel.setAdapterDictName(stdDictModelMap.get(model.getAdapterDictId()).getName());
            }
            detailModelList.add(detailModel);
        }
        return detailModelList;
    }
    public Integer getDictEntryInt(Class tClass, String adapterVersion, String condition) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        String tableName = version.getDictEntryTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.equalCondition("stdDictId", jsonNode.get("stdDictId").asInt());
                sqlCreator.likeOrCondition("stdEntryCode", "stdEntryValue", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String sql = sqlCreator.countData(tableName);
        Query query = getCurrentSession().createSQLQuery(sql);
        for (String key : sqlCreator.getKeyValueMap().keySet()) {
            query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
        }
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public List<AdapterDictEntryResultDetailModel> updateDictEntrys(String adapterVersion, String list) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            List<AdapterDictEntryResultDetailModel> adapterDictEntryList = Arrays.asList(objectMapper.readValue(list, AdapterDictEntryResultDetailModel[].class));
            List<Integer> idList = new ArrayList<>();
            Map<Integer, AdapterDictEntryResultDetailModel> dictEntryResultMap = new HashMap<>();
            Integer maxId = null;
            for (AdapterDictEntryResultDetailModel dictEntryModel : adapterDictEntryList) {
                AdapterDictEntryModel adapterDictEntryModel = new AdapterDictEntryModel();
                adapterDictEntryModel.setId(dictEntryModel.getId());
                adapterDictEntryModel.setSchemeId(dictEntryModel.getSchemeId());
                adapterDictEntryModel.setAdapterDictId(dictEntryModel.getAdapterDictId());
                adapterDictEntryModel.setAdapterEntryId(dictEntryModel.getAdapterEntryId());
                adapterDictEntryModel.setAdapterEntryCode(dictEntryModel.getAdapterEntryCode());
                adapterDictEntryModel.setAdapterEntryValue(dictEntryModel.getAdapterEntryValue());
                adapterDictEntryModel.setStdDictId(dictEntryModel.getStdDictId());
                adapterDictEntryModel.setStdEntryId(dictEntryModel.getStdEntryId());
                adapterDictEntryModel.setStdEntryCode(dictEntryModel.getStdEntryCode());
                adapterDictEntryModel.setStdEntryValue(dictEntryModel.getStdEntryValue());
                idList.add(dictEntryModel.getStdDictId());
                dictEntryResultMap.put(dictEntryModel.getStdDictId(), dictEntryModel);
                SqlCreator sqlCreator = new SqlCreator(AdapterDictEntryModel.class);
                String sql;
                if (dictEntryModel.getId() == null) {
                    if (maxId == null) {
                        sql = "select max(id) from " + version.getDictEntryTableName();
                        Query query = getCurrentSession().createSQLQuery(sql);
                        Object object = query.uniqueResult();
                        maxId = object == null ? 1 : Integer.parseInt(object.toString()) + 1;
                    }
                    adapterDictEntryModel.setId(maxId++);
                    JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictEntryModel));
                    sql = sqlCreator.insertData(version.getDictEntryTableName(), jsonNode);
                } else {
                    JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictEntryModel));
                    sql = sqlCreator.updateDataByTableKey(version.getDictEntryTableName(), jsonNode);
                }
                Query query = getExeuteQuery(sqlCreator, sql);
                query.executeUpdate();
            }
            if (!CollectionUtil.isEmpty(idList)) {
                String tableName = version.getDictTableName();
                SqlCreator sqlCreator = new SqlCreator(AdapterDictModel.class);
                sqlCreator.inCondition("stdDictId", idList);
                String sql = sqlCreator.selectData(tableName);
                Query query = getQuery(sqlCreator, sql);
                List<AdapterDictModel> adapterDictModelList = query.list();
                for (AdapterDictModel model : adapterDictModelList) {
                    AdapterDictEntryResultDetailModel dictentryModel = dictEntryResultMap.get(model.getStdDictId());
                    model.setAdapterDictId(dictentryModel.getAdapterDictId());
                    model.setAdapterDictCode(dictentryModel.getAdapterDictCode());
                    model.setAdapterDictName(dictentryModel.getAdapterDictName());
                    JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(model));
                    sqlCreator = new SqlCreator(AdapterDictModel.class);
                    sql = sqlCreator.updateDataByTableKey(version.getDictTableName(), jsonNode);
                    query = getExeuteQuery(sqlCreator, sql);
                    query.executeUpdate();
                }
            }
            return adapterDictEntryList;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.saveDictEntryFailed);
        }
    }
    public void deleteMultiple(String adapterVersion, Integer dictEntryId, Integer stdDictId, Integer adapterDictId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) {
                throw new ApiException(ErrorCode.InvalidStdVersion);
            }
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getDictEntryTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", dictEntryId);
            query.executeUpdate();
            SqlCreator sqlCreator = new SqlCreator(AdapterDictEntryModel.class);
            sqlCreator.equalCondition("stdDictId", stdDictId);
            sqlCreator.equalCondition("adapterDictId", adapterDictId);
            sql = sqlCreator.countData(version.getDictEntryTableName());
            query = getExeuteQuery(sqlCreator, sql);
            Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
            if (count == 0) {
                sql = "delete from " + version.getDictTableName() + " where std_dict_id = :stdDictId and adapter_dict_id = :adapterDictId";
                query = session.createSQLQuery(sql);
                query.setInteger("stdDictId", stdDictId);
                query.setInteger("adapterDictId", adapterDictId);
                query.executeUpdate();
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteDictEntryFailed);
        }
    }
}