Browse Source

Merge branch 'master' of http://192.168.1.220:10080/esb/esb

# Conflicts:
#	Hos-Framework-dependencies/pom.xml
#	hos-broker/src/test/java/com/yihu/hos/HosBrokerApplicationTests.java
Airhead 8 years ago
parent
commit
98e0dd1692
40 changed files with 1598 additions and 192 deletions
  1. 480 0
      Hos-Framework/src/main/java/com/yihu/ehr/framework/common/dao/SQLGeneralDAO.java
  2. 80 0
      Hos-Framework/src/main/java/com/yihu/ehr/framework/common/dao/XSQLGeneralDAO.java
  3. 184 0
      Hos-Framework/src/main/java/com/yihu/ehr/framework/util/ObjectVersion.java
  4. 80 0
      Hos-Framework/src/main/java/com/yihu/ehr/framework/util/controller/BaseController.java
  5. 91 0
      Hos-Framework/src/main/java/com/yihu/ehr/framework/util/operator/ClassFileUtil.java
  6. 7 41
      hos-admin/pom.xml
  7. 4 2
      hos-admin/src/main/java/com/yihu/hos/HosAdminApplication.java
  8. 4 4
      hos-admin/src/main/java/com/yihu/hos/crawler/format/DataSetTransformer.java
  9. 5 5
      hos-admin/src/main/java/com/yihu/hos/crawler/service/CrawlerService.java
  10. 14 14
      hos-admin/src/main/java/com/yihu/hos/crawler/service/DataCollectDispatcher.java
  11. 10 10
      hos-admin/src/main/java/com/yihu/hos/crawler/service/EsbHttp.java
  12. 3 3
      hos-admin/src/main/java/com/yihu/hos/datacollect/service/DatacollectService.java
  13. 1 1
      hos-admin/src/main/java/com/yihu/hos/services/ServiceFlowEventService.java
  14. 2 2
      hos-admin/src/main/java/com/yihu/hos/standard/controller/StandardController.java
  15. 19 19
      hos-admin/src/main/java/com/yihu/hos/standard/service/adapter/AdapterDatasetService.java
  16. 2 2
      hos-admin/src/main/java/com/yihu/hos/standard/service/adapter/AdapterMetadataService.java
  17. 3 3
      hos-admin/src/main/java/com/yihu/hos/standard/service/adapter/AdapterSchemeService.java
  18. 19 19
      hos-admin/src/main/java/com/yihu/hos/standard/service/adapter/AdapterSchemeVersionService.java
  19. 6 6
      hos-admin/src/main/java/com/yihu/hos/standard/service/bo/AdapterVersion.java
  20. 8 8
      hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StandardService.java
  21. 8 8
      hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StandardVersionService.java
  22. 3 3
      hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdCDACatalogService.java
  23. 9 9
      hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdDatasetService.java
  24. 2 2
      hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdDictEntryService.java
  25. 2 2
      hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdDictService.java
  26. 8 8
      hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdMetadataService.java
  27. 4 4
      hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdPublisherService.java
  28. 2 2
      hos-admin/src/test/java/com/yihu/hos/HosAdminApplicationTests.java
  29. 4 4
      hos-admin/src/test/java/com/yihu/hos/services/ServiceFlowEventServiceTest.java
  30. 5 5
      hos-broker/pom.xml
  31. 13 2
      hos-broker/src/main/java/com/yihu/hos/HosBrokerApplication.java
  32. 97 0
      hos-broker/src/main/java/com/yihu/hos/controllers/ESBCamelController.java
  33. 23 0
      hos-broker/src/main/java/com/yihu/hos/dao/BrokerDao.java
  34. 173 0
      hos-broker/src/main/java/com/yihu/hos/listener/ApplicationStartListener.java
  35. 16 0
      hos-broker/src/main/java/com/yihu/hos/model/CamelContextQueue.java
  36. 18 0
      hos-broker/src/main/java/com/yihu/hos/model/SystemPathMapping.java
  37. 165 0
      hos-broker/src/main/java/com/yihu/hos/services/ESBCamelService.java
  38. 15 3
      hos-broker/src/main/resources/application.properties
  39. 8 0
      hos-broker/src/test/java/com/yihu/hos/ESBCamelServiceTest.java
  40. 1 1
      hos-broker/src/test/java/com/yihu/hos/HosBrokerApplicationTests.java

+ 480 - 0
Hos-Framework/src/main/java/com/yihu/ehr/framework/common/dao/SQLGeneralDAO.java

@ -0,0 +1,480 @@
package com.yihu.ehr.framework.common.dao;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.yihu.ehr.framework.model.DataGridResult;
import com.yihu.ehr.framework.util.log.Logger;
import com.yihu.ehr.framework.util.log.LoggerFactory;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.NumberUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.jdbc.Work;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import java.io.IOException;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/8/8.
 */
@Transactional
@Repository("sqlGeneralDAO")
public class SQLGeneralDAO implements XSQLGeneralDAO {
    static private final Logger logger = LoggerFactory.getLogger(SQLGeneralDAO.class);
    @Resource(
            name = "jdbcTemplate"
    )
    protected JdbcTemplate jdbcTemplate;
    @Resource(
            name = "hibernateTemplate"
    )
    protected HibernateTemplate hibernateTemplate;
    public SQLGeneralDAO() {
    }
    public JdbcTemplate getJdbcTemplate() {
        return this.jdbcTemplate;
    }
    public HibernateTemplate getHibernateTemplate() {
        return this.hibernateTemplate;
    }
    public DataGridResult getDataGridResult(String hql, Integer page, Integer rows) {
        DataGridResult dataGridResult = new DataGridResult();
        Query query = this.hibernateTemplate.getSessionFactory().getCurrentSession().createQuery(hql);
        if(page != null && rows != null) {
            dataGridResult.setPageSize(rows.intValue());
            dataGridResult.setCurrPage(page.intValue());
            dataGridResult.setTotalCount(query.list().size());
            query.setMaxResults(rows.intValue());
            query.setFirstResult((page.intValue() - 1) * rows.intValue());
            dataGridResult.setDetailModelList(query.list());
        } else {
            List list = query.list();
            dataGridResult.setDetailModelList(list);
            dataGridResult.setTotalCount(list.size());
        }
        return dataGridResult;
    }
    public void beginTransaction() throws Exception {
        this.hibernateTemplate.getSessionFactory().getCurrentSession().getTransaction().begin();
    }
    public void commitTransaction() throws Exception {
        this.hibernateTemplate.getSessionFactory().getCurrentSession().getTransaction().commit();
    }
    public void saveEntity(Object entity) throws Exception {
        if(entity != null) {
            this.hibernateTemplate.save(entity);
        }
    }
    public void updateEntity(Object entity) throws Exception {
        if(entity != null) {
            this.hibernateTemplate.update(entity);
        }
    }
    public void saveOrUpdateEntity(Object entity) throws Exception {
        if(entity != null) {
            this.hibernateTemplate.saveOrUpdate(entity);
        }
    }
    public void mergeEntity(Object entity) throws Exception {
        if(entity != null) {
            this.hibernateTemplate.merge(entity);
        }
    }
    public void deleteEntity(Object entity) throws Exception {
        if(entity != null) {
            this.hibernateTemplate.delete(entity);
        }
    }
    public <T> void deleteEntity(Class<T> cls, Serializable id) throws Exception {
        Object obj = this.hibernateTemplate.load(cls, id);
        this.hibernateTemplate.delete(obj);
    }
    public <T> T getEntity(Class<T> cls, Serializable id) throws Exception {
        return this.hibernateTemplate.get(cls, id);
    }
    public List<Map<String, Object>> queryListBySql(String sql) throws Exception {
        List result = this.jdbcTemplate.queryForList(sql);
        return result;
    }
    public List<Map<String, Object>> queryListBySql(String sql, List params) throws Exception {
        List result = this.jdbcTemplate.queryForList(sql, params.toArray());
        return result;
    }
    public <T> List<T> queryListBySql(String sql, Class obj) throws Exception {
         RowMapper<T> rowMapper = BeanPropertyRowMapper.newInstance(obj);
        List result = this.jdbcTemplate.query(sql, rowMapper);
        return result;
    }
    public <T> List<T> queryListBySql(String sql, List params, Class obj) throws Exception {
         RowMapper<T> rowMapper = BeanPropertyRowMapper.newInstance(obj);
        List result = this.jdbcTemplate.query(sql, params.toArray(), rowMapper);
        return result;
    }
    public <T> T queryObjBySql(String sql, List params, Class obj) throws Exception {
         RowMapper<T> rowMapper = BeanPropertyRowMapper.newInstance(obj);
        T result = this.jdbcTemplate.queryForObject(sql, params.toArray(), rowMapper);
        return result;
    }
    public <T> T queryObjBySql(String sql, Class obj) throws Exception {
        RowMapper<T> rowMapper = BeanPropertyRowMapper.newInstance(obj);
        T result = this.jdbcTemplate.queryForObject(sql, rowMapper);
        return result;
    }
    public <T> T scalarBySql(String sql, Class cls) throws Exception {
        T result = (T) this.jdbcTemplate.queryForObject(sql, cls);
        return result;
    }
    public void execute(String sql) throws Exception {
        this.jdbcTemplate.execute(sql);
    }
    public <T> List getEntityList(Class<T> cls, String hql) {
        Query query = this.getCurrentSession().createQuery(hql);
        return query.list();
    }
    public <T> List getEntityList(Class<T> cls, String condition, String order, Integer limit, Integer offset) throws IOException {
        Session session = this.getCurrentSession();
        Criteria criteria = session.createCriteria(cls);
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode;
        Iterator fieldNames;
        String fieldName;
        if(!StringUtil.isEmpty(condition)) {
            jsonNode = objectMapper.readTree(condition);
            fieldNames = jsonNode.fieldNames();
            while(fieldNames.hasNext()) {
                fieldName = (String)fieldNames.next();
                if(jsonNode.get(fieldName).isInt()) {
                    criteria.add(Restrictions.eq(fieldName, Integer.valueOf(jsonNode.get(fieldName).asInt())));
                } else {
                    criteria.add(Restrictions.eq(fieldName, jsonNode.get(fieldName).asText()));
                }
            }
        }
        if(!StringUtil.isEmpty(order)) {
            jsonNode = objectMapper.readTree(order);
            fieldNames = jsonNode.fieldNames();
            while(fieldNames.hasNext()) {
                fieldName = (String)fieldNames.next();
                String value = jsonNode.get(fieldName).asText().toUpperCase();
                if(value.equals("ASC")) {
                    criteria.addOrder(Order.asc(fieldName));
                } else if(value.equals("DESC")) {
                    criteria.addOrder(Order.desc(fieldName));
                }
            }
        }
        if(limit != null) {
            criteria.setMaxResults(limit.intValue());
            if(offset != null) {
                criteria.setFirstResult((offset.intValue() - 1) * limit.intValue());
            }
        }
        return criteria.list();
    }
    public <T> List getEntityListByParentId(Class<T> cls, String parentFiledName, Integer patentId, String condition, String order, Integer limit, Integer offset) throws IOException {
        Session session = this.getCurrentSession();
        Criteria criteria = session.createCriteria(cls);
        criteria.add(Restrictions.eq(parentFiledName, patentId));
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode;
        Iterator fieldNames;
        String fieldName;
        if(!StringUtil.isEmpty(condition)) {
            jsonNode = objectMapper.readTree(condition);
            fieldNames = jsonNode.fieldNames();
            while(fieldNames.hasNext()) {
                fieldName = (String)fieldNames.next();
                if(jsonNode.get(fieldName).isInt()) {
                    criteria.add(Restrictions.eq(fieldName, Integer.valueOf(jsonNode.get(fieldName).asInt())));
                } else {
                    criteria.add(Restrictions.eq(fieldName, jsonNode.get(fieldName).asText()));
                }
            }
        }
        if(!StringUtil.isEmpty(order)) {
            jsonNode = objectMapper.readTree(order);
            fieldNames = jsonNode.fieldNames();
            while(fieldNames.hasNext()) {
                fieldName = (String)fieldNames.next();
                String value = jsonNode.get(fieldName).asText().toUpperCase();
                if(value.equals("ASC")) {
                    criteria.addOrder(Order.asc(fieldName));
                } else if(value.equals("DESC")) {
                    criteria.addOrder(Order.desc(fieldName));
                }
            }
        }
        if(limit != null) {
            criteria.setMaxResults(limit.intValue());
            if(offset != null) {
                criteria.setFirstResult((offset.intValue() - 1) * limit.intValue());
            }
        }
        return criteria.list();
    }
    public List getList(Class tClass, String tableName, String condition, String order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            JsonNode sql;
            Iterator query;
            String fieldName;
            String value;
            if(!StringUtil.isEmpty(condition)) {
                sql = objectMapper.readTree(condition);
                query = sql.fieldNames();
                while(query.hasNext()) {
                    fieldName = (String)query.next();
                    value = sql.get(fieldName).asText();
                    if(sql.get(fieldName).getNodeType().equals(JsonNodeType.NUMBER)) {
                        sqlCreator.equalCondition(fieldName, Integer.valueOf(Integer.parseInt(value)));
                    } else {
                        sqlCreator.equalCondition(fieldName, value);
                    }
                }
            }
            if(!StringUtil.isEmpty(order)) {
                sql = objectMapper.readTree(order);
                query = sql.fieldNames();
                while(query.hasNext()) {
                    fieldName = (String)query.next();
                    value = sql.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
        } catch (Exception var13) {
            var13.printStackTrace();
        }
        String sql1 = sqlCreator.selectData(tableName);
        Query query1 = this.getQuery(sqlCreator, sql1);
        if(limit != null) {
            query1.setMaxResults(limit.intValue());
            if(offset != null) {
                query1.setFirstResult(offset.intValue() * limit.intValue());
            }
        }
        return query1.list();
    }
    public List getListByIdList(Class tClass, String tableName, String fieldName, List<Integer> idList) {
        SqlCreator sqlCreator = new SqlCreator(tClass);
        try {
            sqlCreator.inCondition(fieldName, idList);
        } catch (Exception var8) {
            var8.printStackTrace();
            return null;
        }
        String sql = sqlCreator.selectData(tableName);
        Query query = this.getQuery(sqlCreator, sql);
        return query.list();
    }
    public Integer getDataSetInt(Class tClass, String tableName, String condition) {
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            if(!StringUtil.isEmpty(condition)) {
                JsonNode sql = objectMapper.readTree(condition);
                Iterator query = sql.fieldNames();
                while(query.hasNext()) {
                    String count = (String)query.next();
                    String value = sql.get(count).asText();
                    if(NumberUtil.isInteger(value)) {
                        sqlCreator.equalCondition(count, Integer.valueOf(Integer.parseInt(value)));
                    } else {
                        sqlCreator.equalCondition(count, value);
                    }
                }
            }
        } catch (Exception var10) {
            var10.printStackTrace();
        }
        String sql1 = sqlCreator.countData(tableName);
        Query query1 = this.getQuery(sqlCreator, sql1);
        Integer count1 = Integer.valueOf(Integer.parseInt(StringUtil.toString(query1.list().get(0))));
        return count1;
    }
    public Object get(Class tClass, String tableName, Integer id) {
        SqlCreator sqlCreator = new SqlCreator(tClass);
        sqlCreator.equalCondition("id", id);
        String sql = sqlCreator.selectData(tableName);
        Query query = this.getQuery(sqlCreator, sql);
        return query.uniqueResult();
    }
    public Query getQuery(SqlCreator sqlCreator, String sql) {
        SQLQuery query = this.getCurrentSession().createSQLQuery(sql);
        Iterator var4 = sqlCreator.getKeyValueMap().keySet().iterator();
        while(var4.hasNext()) {
            String key = (String)var4.next();
            Object value = sqlCreator.getKeyValueMap().get(key);
            if(value instanceof Collection) {
                query.setParameterList(key, (Collection)value);
            } else {
                query.setParameter(key, value);
            }
        }
        query.setResultTransformer(sqlCreator.getTransformer());
        return query;
    }
    public void insertBatch(final List<String> insertSqlList) {
        Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();
        session.doWork(new Work() {
            public void execute(Connection connection) throws SQLException {
                if(!CollectionUtil.isEmpty(insertSqlList)) {
                    Statement stmt = connection.createStatement();
                    connection.setAutoCommit(false);
                    Iterator ex = insertSqlList.iterator();
                    while(ex.hasNext()) {
                        String sql = (String)ex.next();
                        stmt.addBatch(sql);
                    }
                    try {
                        stmt.executeBatch();
                    } catch (Exception var5) {
                        logger.error("insertBatch-ERROR: ", var5);
                    }
                    stmt.close();
                }
            }
        });
    }
    public Session openSession() {
        return this.getHibernateTemplate().getSessionFactory().openSession();
    }
    public Session getCurrentSession() {
        return this.getHibernateTemplate().getSessionFactory().getCurrentSession();
    }
    public Integer getMaxId(String tableName) {
        String sql = "select max(id) from " + tableName;
        SQLQuery query = this.getCurrentSession().createSQLQuery(sql);
        Object object = query.uniqueResult();
        Integer maxId = Integer.valueOf(object == null?1:Integer.parseInt(object.toString()) + 1);
        return maxId;
    }
    public Query getExeuteQuery(SqlCreator sqlCreator, String sql) {
        SQLQuery query = this.getCurrentSession().createSQLQuery(sql);
        Iterator var4 = sqlCreator.getKeyValueMap().keySet().iterator();
        while(var4.hasNext()) {
            String key = (String)var4.next();
            Object value = sqlCreator.getKeyValueMap().get(key);
            if(value instanceof Collection) {
                query.setParameterList(key, (Collection)value);
            } else {
                query.setParameter(key, value);
            }
        }
        return query;
    }
    protected void doClose(Session session, Statement stmt, ResultSet rs) {
        if(rs != null) {
            try {
                rs.close();
                rs = null;
            } catch (Exception var6) {
                rs = null;
                logger.error("close-ResultSet ", var6);
                var6.printStackTrace();
            }
        }
        if(stmt != null) {
            try {
                stmt.close();
                stmt = null;
            } catch (Exception var5) {
                stmt = null;
                logger.error("close-ResultSet ", var5);
                var5.printStackTrace();
            }
        }
    }
}

+ 80 - 0
Hos-Framework/src/main/java/com/yihu/ehr/framework/common/dao/XSQLGeneralDAO.java

@ -0,0 +1,80 @@
package com.yihu.ehr.framework.common.dao;
import com.yihu.ehr.framework.model.DataGridResult;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import org.hibernate.Query;
import org.hibernate.Session;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/8/8.
 */
public interface XSQLGeneralDAO {
    void beginTransaction() throws Exception;
    void commitTransaction() throws Exception;
    void saveEntity(Object var1) throws Exception;
    void updateEntity(Object var1) throws Exception;
    void mergeEntity(Object var1) throws Exception;
    void deleteEntity(Object var1) throws Exception;
    <T> void deleteEntity(Class<T> var1, Serializable var2) throws Exception;
    void saveOrUpdateEntity(Object var1) throws Exception;
    <T> T getEntity(Class<T> var1, Serializable var2) throws Exception;
    DataGridResult getDataGridResult(String var1, Integer var2, Integer var3) throws Exception;
    List<Map<String, Object>> queryListBySql(String var1) throws Exception;
    List<Map<String, Object>> queryListBySql(String var1, List var2) throws Exception;
    <T> List<T> queryListBySql(String var1, Class var2) throws Exception;
    <T> List<T> queryListBySql(String var1, List var2, Class var3) throws Exception;
    <T> T queryObjBySql(String var1, List var2, Class var3) throws Exception;
    <T> T queryObjBySql(String var1, Class var2) throws Exception;
    <T> T scalarBySql(String var1, Class var2) throws Exception;
    void execute(String var1) throws Exception;
    <T> List getEntityList(Class<T> var1, String var2);
    <T> List getEntityList(Class<T> var1, String var2, String var3, Integer var4, Integer var5) throws IOException;
    <T> List getEntityListByParentId(Class<T> var1, String var2, Integer var3, String var4, String var5, Integer var6, Integer var7) throws IOException;
    <T> List getList(Class<T> var1, String var2, String var3, String var4, Integer var5, Integer var6);
    <T> Integer getDataSetInt(Class<T> var1, String var2, String var3);
    <T> Object get(Class<T> var1, String var2, Integer var3);
    Session getCurrentSession();
    Session openSession();
    Query getQuery(SqlCreator var1, String var2);
    Query getExeuteQuery(SqlCreator var1, String var2);
    Integer getMaxId(String var1);
    void insertBatch(List<String> var1);
    List getListByIdList(Class var1, String var2, String var3, List<Integer> var4);
}

+ 184 - 0
Hos-Framework/src/main/java/com/yihu/ehr/framework/util/ObjectVersion.java

@ -0,0 +1,184 @@
package com.yihu.ehr.framework.util;
import java.io.Serializable;
import java.security.SecureRandom;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/8/8.
 */
public final class ObjectVersion implements Comparable<ObjectVersion>, Serializable {
    private static final long serialVersionUID = 789056789654456072L;
    private static final int BYTE_ARRAY_LENGTH = 6;
    private static final AtomicInteger NEXT_COUNTER = new AtomicInteger((new SecureRandom()).nextInt());
    private static final char[] HEX_CHARS = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    private final int timestamp;
    private final short counter;
    public static boolean isValid(String hexString) {
        if(hexString == null) {
            throw new IllegalArgumentException();
        } else {
            int len = hexString.length();
            if(len != 12) {
                return false;
            } else {
                for(int i = 0; i < len; ++i) {
                    char c = hexString.charAt(i);
                    if((c < 48 || c > 57) && (c < 97 || c > 102) && (c < 65 || c > 70)) {
                        return false;
                    }
                }
                return true;
            }
        }
    }
    public static int getCurrentCounter() {
        return NEXT_COUNTER.get();
    }
    public ObjectVersion() {
        this(new Date());
    }
    public ObjectVersion(Date date) {
        this(dateToTimestampSeconds(date), (short)NEXT_COUNTER.getAndIncrement());
    }
    public ObjectVersion(Date date, short counter) {
        this(dateToTimestampSeconds(date), counter);
    }
    public ObjectVersion(int timestamp, short counter) {
        this.timestamp = timestamp;
        this.counter = counter;
    }
    public ObjectVersion(String hexString) {
        this(parseHexString(hexString));
    }
    public ObjectVersion(byte[] bytes) {
        if(bytes == null) {
            throw new IllegalArgumentException();
        } else if(bytes.length != 6) {
            throw new IllegalArgumentException("need 6 bytes");
        } else {
            this.timestamp = makeInt(bytes[0], bytes[1], bytes[2], bytes[3]);
            this.counter = (short)makeInt((byte)0, (byte)0, bytes[4], bytes[5]);
        }
    }
    public byte[] toByteArray() {
        byte[] bytes = new byte[]{int3(this.timestamp), int2(this.timestamp), int1(this.timestamp), int0(this.timestamp), int1(this.counter), int0(this.counter)};
        return bytes;
    }
    public Date getDate() {
        return new Date((long)this.timestamp * 1000L);
    }
    public int getTimestamp() {
        return this.timestamp;
    }
    public short getCounter() {
        return this.counter;
    }
    public String toHexString() {
        char[] chars = new char[12];
        int i = 0;
        byte[] var3 = this.toByteArray();
        int var4 = var3.length;
        for(int var5 = 0; var5 < var4; ++var5) {
            byte b = var3[var5];
            chars[i++] = HEX_CHARS[b >> 4 & 15];
            chars[i++] = HEX_CHARS[b & 15];
        }
        return new String(chars);
    }
    public boolean equals(Object o) {
        if(this == o) {
            return true;
        } else if(o != null && this.getClass() == o.getClass()) {
            ObjectVersion objectId = (ObjectVersion)o;
            return this.counter != objectId.counter?false:this.timestamp == objectId.timestamp;
        } else {
            return false;
        }
    }
    public int hashCode() {
        int result = this.timestamp;
        result = 31 * result + this.counter;
        return result;
    }
    public int compareTo(ObjectVersion other) {
        if(other == null) {
            throw new NullPointerException();
        } else {
            byte[] byteArray = this.toByteArray();
            byte[] otherByteArray = other.toByteArray();
            for(int i = 0; i < 6; ++i) {
                if(byteArray[i] != otherByteArray[i]) {
                    return (byteArray[i] & 255) < (otherByteArray[i] & 255)?-1:1;
                }
            }
            return 0;
        }
    }
    public String toString() {
        return this.toHexString();
    }
    private static byte[] parseHexString(String s) {
        if(!isValid(s)) {
            throw new IllegalArgumentException("invalid hexadecimal representation of an ObjectId: [" + s + "]");
        } else {
            byte[] b = new byte[6];
            for(int i = 0; i < b.length; ++i) {
                b[i] = (byte)Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16);
            }
            return b;
        }
    }
    private static int dateToTimestampSeconds(Date time) {
        return (int)(time.getTime() / 1000L);
    }
    private static int makeInt(byte b3, byte b2, byte b1, byte b0) {
        return b3 << 24 | (b2 & 255) << 16 | (b1 & 255) << 8 | b0 & 255;
    }
    private static byte int3(int x) {
        return (byte)(x >> 24);
    }
    private static byte int2(int x) {
        return (byte)(x >> 16);
    }
    private static byte int1(int x) {
        return (byte)(x >> 8);
    }
    private static byte int0(int x) {
        return (byte)x;
    }
}

+ 80 - 0
Hos-Framework/src/main/java/com/yihu/ehr/framework/util/controller/BaseController.java

@ -0,0 +1,80 @@
package com.yihu.ehr.framework.util.controller;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.util.log.Logger;
import com.yihu.ehr.framework.util.log.LoggerFactory;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/8/8.
 */
public class BaseController extends AbstractController {
    static private final Logger logger = LoggerFactory.getLogger(BaseController.class);
    public BaseController() {
    }
    protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        return null;
    }
    public DetailModelResult getResult(List detaiModelList, int totalCount, int currPage, int rows) {
        DetailModelResult result = new DetailModelResult();
        result.setSuccessFlg(true);
        result.setDetailModelList(detaiModelList);
        result.setTotalCount(totalCount);
        result.setCurrPage(currPage);
        result.setPageSize(rows);
        if(result.getTotalCount() % result.getPageSize() > 0) {
            result.setTotalPage(result.getTotalCount() / result.getPageSize() + 1);
        } else {
            result.setTotalPage(result.getTotalCount() / result.getPageSize());
        }
        return result;
    }
    public String encodeStr(String str) {
        try {
            return str == null?null:new String(str.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException var3) {
            logger.error(var3.getMessage());
            return null;
        }
    }
    public List jsonArrayToList(String jsonArray, Class tClass) {
        JSONArray newJsonArray = JSONArray.fromObject(jsonArray);
        List collection = JSONArray.toList(newJsonArray);
        ArrayList list = new ArrayList();
        if(!CollectionUtil.isEmpty(collection)) {
            Iterator it = collection.iterator();
            while(it.hasNext()) {
                JSONObject jsonObj = JSONObject.fromObject(it.next());
                Object model = JSONObject.toBean(jsonObj, tClass);
                list.add(model);
            }
        }
        return list;
    }
    public Object jsonToObject(String json, Class tClass) {
        Object model = JSONObject.toBean(JSONObject.fromObject(json), tClass);
        return model;
    }
}

+ 91 - 0
Hos-Framework/src/main/java/com/yihu/ehr/framework/util/operator/ClassFileUtil.java

@ -0,0 +1,91 @@
package com.yihu.ehr.framework.util.operator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.URL;
public class ClassFileUtil {
    /**
     * 工具类不允许进行实例化
     */
    private ClassFileUtil() {
    }
    private static Logger logger = LogManager.getLogger();
    /**
     * 通过这个工具方法,可以进行class文件的创建
     * @param systemRootURL 本次进行系统创建的system业务系统存储class文件的根目录
     * @param packageName class文件的包信息
     * @param className class文件的类名信息
     * @param path class文件的路径
     */
    public static void createClassfile(URL systemRootURL , String packageName, String className, String path) {
        // 开始输出文件内容
        try {
            FileInputStream in = new FileInputStream(new File(path));
            String classPath = systemRootURL.getPath() + "/" + packageName + "/" + className;
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                return;
            } else {
                file.createNewFile();
            }
            FileOutputStream out = new FileOutputStream(classPath);
            int n = 0;// 每次读取的字节长度
            byte[] bb = new byte[1024];// 存储每次读取的内容
            while ((n = in.read(bb)) != -1) {
                out.write(bb, 0, n);// 将读取的内容,写入到输出流当中
            }
            out.close();
            in.close();
        } catch (Exception e) {
            logger.error(e.getMessage() , e);
            return;
        }
    }
    public static void updateClassfile(URL systemRootURL , String packageName, String className, String path) {
        // 开始输出文件内容
        try {
            FileInputStream in = new FileInputStream(new File(path));
            String classPath = systemRootURL.getPath() + "/" + packageName + "/" + className;
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                file.delete();
            } else {
                file.createNewFile();
            }
            FileOutputStream out = new FileOutputStream(classPath);
            int n = 0;// 每次读取的字节长度
            byte[] bb = new byte[1024];// 存储每次读取的内容
            while ((n = in.read(bb)) != -1) {
                out.write(bb, 0, n);// 将读取的内容,写入到输出流当中
            }
            out.close();
            in.close();
        } catch (Exception e) {
            logger.error(e.getMessage() , e);
            return;
        }
    }
    public static void deleteClassfile(URL systemRootURL , String packageName, String className) {
        // 开始输出文件内容
        try {
            String classPath = systemRootURL.getPath() + "/" + packageName + "/" + className;
            File file = new File(classPath);
            if (file.isFile() && file.exists()) {
                file.delete();
            }
        } catch (Exception e) {
            logger.error(e.getMessage() , e);
            return;
        }
    }
}

+ 7 - 41
hos-admin/pom.xml

@ -63,16 +63,7 @@
			<artifactId>Hos-Framework</artifactId>
			<version>1.0.7</version>
		</dependency>
		<!--<dependency>-->
		<!--<groupId>com.yihu.ehr</groupId>-->
		<!--<artifactId>EHR</artifactId>-->
		<!--<version>0.99</version>-->
		<!--</dependency>-->
		<dependency>
			<groupId>com.yihu.core</groupId>
			<artifactId>ehr-redishelper</artifactId>
			<version>1.0.0</version>
		</dependency>
		<dependency>
			<groupId>com.yihu.core</groupId>
@ -85,11 +76,7 @@
			<artifactId>ojdbc6</artifactId>
			<version>11.2.0.3.0</version>
		</dependency>
		<dependency>
			<groupId>commons-dbutils</groupId>
			<artifactId>commons-dbutils</artifactId>
			<version>1.6</version>
		</dependency>
		<!--=============oracle驱动 end =============-->
		<!--jxl导出工具-->
@ -104,33 +91,12 @@
			<version>1.1.9</version>
		</dependency>
		<!-- =============WEBSERVICE调用====================-->
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>3.0.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>3.0.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-bindings-soap</artifactId>
			<version>3.0.0</version>
		</dependency>
		<!-- 使用intellij作为集成开发环境 -->
		<!--<dependency>-->
			<!--<groupId>javax.servlet.jsp</groupId>-->
			<!--<artifactId>jsp-api</artifactId>-->
			<!--<version>2.2.1-b03</version>-->
			<!--<groupId>org.apache.tomcat.embed</groupId>-->
			<!--<artifactId>tomcat-embed-jasper</artifactId>-->
			<!--<scope>compile</scope>-->
		<!--</dependency>-->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
@ -139,7 +105,7 @@
		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-all</artifactId>
			<version>5.13.0</version>
			<version>5.13.4</version>
		</dependency>
	</dependencies>

+ 4 - 2
hos-admin/src/main/java/com/yihu/hos/HosAdminApplication.java

@ -11,8 +11,10 @@ import javax.jms.Queue;
@SpringBootApplication
@EnableJms
public class HosAdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(HosAdminApplication.class, args);
    public static void main(String[] args) throws Exception {
        SpringApplication application = new SpringApplication(HosAdminApplication.class);
        application.run(args);
    }
    @Bean

+ 4 - 4
hos-admin/src/main/java/com/yihu/hos/crawler/format/DataSetTransformer.java

@ -3,15 +3,15 @@ package com.yihu.hos.crawler.format;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.ehr.dbhelper.jdbc.DBHelper;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.hos.crawler.model.adapter.AdapterDataSet;
import com.yihu.hos.crawler.model.adapter.AdapterDict;
import com.yihu.hos.crawler.model.adapter.AdapterMetaData;
import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.crawler.model.transform.DictDataType;
import com.yihu.hos.crawler.model.transform.TransformType;
import com.yihu.ehr.dbhelper.jdbc.DBHelper;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.util.operator.StringUtil;
import java.util.Iterator;
import java.util.Map;
@ -142,7 +142,7 @@ public class DataSetTransformer implements IDataTransformer{
            ehrData = adapterDict.getAdapterCodeToCodeMap().get(esbData);
        }
        if (StringUtil.isEmpty(ehrData)) {
            return Constants.EMPTY;
            return SqlConstants.EMPTY;
        }
        return ehrData;
    }

+ 5 - 5
hos-admin/src/main/java/com/yihu/hos/crawler/service/CrawlerService.java

@ -2,6 +2,10 @@ package com.yihu.hos.crawler.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.model.ActionResult;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.hos.crawler.dao.CrawlerDatasetDao;
import com.yihu.hos.crawler.dao.CrawlerFlowDao;
import com.yihu.hos.crawler.dao.CrawlerFlowHeadDao;
@ -10,10 +14,6 @@ import com.yihu.hos.crawler.model.flow.CrawlerFlowHeadModel;
import com.yihu.hos.crawler.model.flow.CrawlerFlowModel;
import com.yihu.hos.crawler.model.flow.resultModel.*;
import com.yihu.hos.datacollect.model.DtoJobDataset;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.model.ActionResult;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.hos.standard.model.adapter.AdapterDatasetModel;
import com.yihu.hos.standard.model.adapter.AdapterMetadataModel;
import com.yihu.hos.standard.model.adapter.AdapterSchemeVersionModel;
@ -278,7 +278,7 @@ public class CrawlerService {
            e.printStackTrace();
            return "删除失败";
        }
        return Constants.EMPTY;
        return SqlConstants.EMPTY;
    }
    /**

+ 14 - 14
hos-admin/src/main/java/com/yihu/hos/crawler/service/DataCollectDispatcher.java

@ -4,6 +4,10 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.util.file.FileUtil;
import com.yihu.ehr.framework.util.operator.DateUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.hos.crawler.format.DataSetTransformer;
import com.yihu.hos.crawler.model.adapter.AdapterDataSet;
import com.yihu.hos.crawler.model.adapter.AdapterMetaData;
@ -12,10 +16,6 @@ import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.crawler.model.patient.PatientIdentity;
import com.yihu.hos.crawler.model.transform.EhrCondition;
import com.yihu.hos.crawler.model.transform.LogicValues;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.util.file.FileUtil;
import com.yihu.ehr.framework.util.operator.DateUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.hos.standard.model.adapter.AdapterMetadataModel;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
@ -117,10 +117,10 @@ public class DataCollectDispatcher {
                    while (array.hasNext()) {
                        JsonNode node = array.next();
                        Patient patient = new Patient();
                        String patientId = node.path(propertyMap.get(Constants.PATIENT_ID)).asText();
                        String eventNo = node.path(propertyMap.get(Constants.EVENT_NO)).asText();
                        String refTime = node.path(propertyMap.get(Constants.EVENT_TIME)).asText();
                        String orgCode = node.path(Constants.ORG_CODE.toUpperCase()).asText();
                        String patientId = node.path(propertyMap.get(SqlConstants.PATIENT_ID)).asText();
                        String eventNo = node.path(propertyMap.get(SqlConstants.EVENT_NO)).asText();
                        String refTime = node.path(propertyMap.get(SqlConstants.EVENT_TIME)).asText();
                        String orgCode = node.path(SqlConstants.ORG_CODE.toUpperCase()).asText();
                        patient.setPatientId(patientId);
                        patient.setEventNo(eventNo);
                        patient.setReferenceTime(refTime);
@ -142,7 +142,7 @@ public class DataCollectDispatcher {
        if (adapterDataSet.isHavePatientID()) {
            AdapterMetaData adapterMetaData = adapterDataSet.getAdapterMetaDataMap().get(PatientIdentity.getPatientIDCode());
            propertyMap.put(Constants.PATIENT_ID, adapterMetaData.getAdapterMetadataModel().getStdMetadataCode().toUpperCase());
            propertyMap.put(SqlConstants.PATIENT_ID, adapterMetaData.getAdapterMetadataModel().getStdMetadataCode().toUpperCase());
        } else {
            logger.error("", new Exception("采集病人列表数据集必须有patient_id."));
@ -151,7 +151,7 @@ public class DataCollectDispatcher {
        if (adapterDataSet.isHaveEventNo()) {
            AdapterMetaData adapterMetaData = adapterDataSet.getAdapterMetaDataMap().get(patientIdentity.getEventNoCode());
            propertyMap.put(Constants.EVENT_NO,  adapterMetaData.getAdapterMetadataModel().getStdMetadataCode().toUpperCase());
            propertyMap.put(SqlConstants.EVENT_NO,  adapterMetaData.getAdapterMetadataModel().getStdMetadataCode().toUpperCase());
        } else {
            logger.error("采集病人列表数据集必须有event_no.");
            return null;
@ -163,7 +163,7 @@ public class DataCollectDispatcher {
            return null;
        }
        propertyMap.put(Constants.EVENT_TIME, adapterRefMetaData.getAdapterMetadataModel().getStdMetadataCode().toUpperCase());
        propertyMap.put(SqlConstants.EVENT_TIME, adapterRefMetaData.getAdapterMetadataModel().getStdMetadataCode().toUpperCase());
        return propertyMap;
    }
@ -202,10 +202,10 @@ public class DataCollectDispatcher {
                }
                return jsonObject.toString();
            } else {
                return Constants.EMPTY;
                return SqlConstants.EMPTY;
            }
        } catch (Exception e) {
            return Constants.EMPTY;
            return SqlConstants.EMPTY;
        }
    }
@ -370,7 +370,7 @@ public class DataCollectDispatcher {
        try {
            Map<String, Object> map = mapper.readValue(responToken, Map.class);
            String code = (String) map.get("code");
            if (Constants.OK.equals(code)) {
            if (SqlConstants.OK.equals(code)) {
                tokenMap = (Map<String, Object>) map.get("result");
            }
        } catch (IOException e) {

+ 10 - 10
hos-admin/src/main/java/com/yihu/hos/crawler/service/EsbHttp.java

@ -3,16 +3,16 @@ package com.yihu.hos.crawler.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.hos.crawler.model.adapter.AdapterDataSet;
import com.yihu.hos.crawler.model.config.SysConfig;
import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.crawler.model.transform.EhrCondition;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.util.encrypt.MD5;
import com.yihu.ehr.framework.util.httpclient.HttpClientUtil;
import com.yihu.ehr.framework.util.httpclient.HttpHelper;
import com.yihu.ehr.framework.util.httpclient.HttpResponse;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.hos.crawler.model.adapter.AdapterDataSet;
import com.yihu.hos.crawler.model.config.SysConfig;
import com.yihu.hos.crawler.model.patient.Patient;
import com.yihu.hos.crawler.model.transform.EhrCondition;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
@ -156,25 +156,25 @@ public class EsbHttp {
            HttpResponse response = HttpClientUtil.postForm(HttpHelper.httpGateway, formParams);
            if (response == null || response.getStatusCode() != 200) {
                logger.info("获取病人数据错误,请求HTTP错误,请检查配置或HTTP是否可用.");
                return Constants.EMPTY;
                return SqlConstants.EMPTY;
            }
            ObjectMapper mapper = new ObjectMapper();
            JsonNode responseNode = mapper.readValue(response.getBody(), JsonNode.class);
            String code = responseNode.path("responseCode").asText();
            if (StringUtil.isEmpty(code) || !code.equals("10000")) {
                logger.info("获取病人数据错误,请求HTTP错误,请检查集成平台网关是否可用.");
                return Constants.EMPTY;
                return SqlConstants.EMPTY;
            }
            String rootStr = responseNode.path("responseResult").asText();
            if (Constants.EMPTY.equals(rootStr)) {
            if (SqlConstants.EMPTY.equals(rootStr)) {
                logger.info("获取病人数据错误,集成平台获取病人数据失败.");
                return Constants.EMPTY;
                return SqlConstants.EMPTY;
            }
            return rootStr;
        } catch (Exception e) {
            logger.error("获取病人数据失败.", e);
            return Constants.EMPTY;
            return SqlConstants.EMPTY;
        }
    }
        /**

+ 3 - 3
hos-admin/src/main/java/com/yihu/hos/datacollect/service/DatacollectService.java

@ -10,8 +10,8 @@ import com.yihu.ehr.dbhelper.common.sqlparser.ParserSql;
import com.yihu.ehr.dbhelper.common.sqlparser.ParserSqlserver;
import com.yihu.ehr.dbhelper.jdbc.DBHelper;
import com.yihu.ehr.dbhelper.mongodb.MongodbHelper;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.DateConvert;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.model.ActionResult;
import com.yihu.ehr.framework.util.log.Logger;
import com.yihu.ehr.framework.util.log.LoggerFactory;
@ -521,8 +521,8 @@ public class DatacollectService implements IDatacollectService {
     * @return
     */
    private String intoMongodb(List<JSONObject> list, String schemeVersion, String stdDatasetCode, JSONArray colList) {
        String patientIdCode = Constants.PATIENT_ID.toUpperCase();
        String eventNoCode = Constants.EVENT_NO.toUpperCase();
        String patientIdCode = SqlConstants.PATIENT_ID.toUpperCase();
        String eventNoCode = SqlConstants.EVENT_NO.toUpperCase();
        PatientIdentity patientIdentity = SysConfig.getInstance().getPatientIdentity(stdDatasetCode);
        if (patientIdentity != null) {
            patientIdCode = patientIdentity.getPatientIDCode();

+ 1 - 1
hos-admin/src/main/java/com/yihu/hos/services/ServiceFlowEventService.java

@ -70,7 +70,7 @@ public class ServiceFlowEventService {
        objectNode.put("path", path);
        try {
            String msg = objectMapper.writeValueAsString(objectNode);
            this.jmsMessagingTemplate.convertAndSend(this.queue, msg);
//            this.jmsMessagingTemplate.convertAndSend(this.queue, msg);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

+ 2 - 2
hos-admin/src/main/java/com/yihu/hos/standard/controller/StandardController.java

@ -1,6 +1,6 @@
package com.yihu.hos.standard.controller;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.model.DictionaryResult;
import com.yihu.ehr.framework.model.Result;
@ -45,7 +45,7 @@ public class StandardController extends BaseController {
    @RequestMapping("/getSysParamList")
    @ApiOperation(value = "获取集成标准系统参数", response = StandardParamResultModel.class, notes = "获取集成标准系统参数")
    public StandardParamResultModel getSysParamList() {
        StandardParamResultModel standardParamResultModel = standardService.getStandardParam(Constants.STANDARD);
        StandardParamResultModel standardParamResultModel = standardService.getStandardParam(SqlConstants.STANDARD);
        return standardParamResultModel;
    }

+ 19 - 19
hos-admin/src/main/java/com/yihu/hos/standard/service/adapter/AdapterDatasetService.java

@ -4,8 +4,8 @@ package com.yihu.hos.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.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.constrant.TreeView;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DetailModelResult;
@ -225,9 +225,9 @@ public class AdapterDatasetService extends SQLGeneralDAO {
        //获取所有标准数据集
        StandardVersion sVersion = new StandardVersion(stdVersion);
        List<StdDataSetModel> dataSetList = getList(StdDataSetModel.class, sVersion.getDataSetTableName(), "", "", null, null);
        String idListStr = Constants.EMPTY;
        String idListStr = SqlConstants.EMPTY;
        for (StdDataSetModel dataSet : dataSetList) {
            idListStr += dataSet.getId() + Constants.COMMA;
            idListStr += dataSet.getId() + SqlConstants.COMMA;
        }
        Map<Integer, List<StdMetaDataModel>> stdDataSetModelMap = new HashMap<>();
        if (!StringUtil.isEmpty(idListStr)) {
@ -409,10 +409,10 @@ public class AdapterDatasetService extends SQLGeneralDAO {
            insertSqlList.add(delData(aVersion.getDictTableName(), "id", delDicList));
            insertSqlList.add(delData(aVersion.getDictEntryTableName(), "std_dict_id", delDicList));
        }
/*        insertSqlList.add(Constants.DELETE + Constants.FROM + aVersion.getDataSetTableName());
        insertSqlList.add(Constants.DELETE + Constants.FROM + aVersion.getMetaDataTableName());
        insertSqlList.add(Constants.DELETE + Constants.FROM + aVersion.getDictTableName());
        insertSqlList.add(Constants.DELETE + Constants.FROM + aVersion.getDictEntryTableName());*/
/*        insertSqlList.add(SqlConstants.DELETE + SqlConstants.FROM + aVersion.getDataSetTableName());
        insertSqlList.add(SqlConstants.DELETE + SqlConstants.FROM + aVersion.getMetaDataTableName());
        insertSqlList.add(SqlConstants.DELETE + SqlConstants.FROM + aVersion.getDictTableName());
        insertSqlList.add(SqlConstants.DELETE + SqlConstants.FROM + aVersion.getDictEntryTableName());*/
        List<Integer> addDataSetList = datasetMap.get("add");
        if (addDataSetList.size() > 0) {
@ -456,14 +456,14 @@ public class AdapterDatasetService extends SQLGeneralDAO {
    private String delData(String adapterTableName, String item, List<Integer> idList) {
        StringBuffer sql = new StringBuffer();
        String idStr = Constants.EMPTY;
        String idStr = SqlConstants.EMPTY;
        for (Integer id : idList) {
            idStr += id + Constants.COMMA;
            idStr += id + SqlConstants.COMMA;
        }
        if (!StringUtil.isEmpty(idStr)) {
            idStr = Constants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) + Constants.RIGHT_BRACKET;
            idStr = SqlConstants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) + SqlConstants.RIGHT_BRACKET;
        }
        sql.append(Constants.DELETE + Constants.FROM).append(adapterTableName).append(Constants.WHERE).append(item).append(Constants.IN).append(idStr);
        sql.append(SqlConstants.DELETE + SqlConstants.FROM).append(adapterTableName).append(SqlConstants.WHERE).append(item).append(SqlConstants.IN).append(idStr);
        return sql.toString();
    }
@ -513,23 +513,23 @@ public class AdapterDatasetService extends SQLGeneralDAO {
    private String insertData(String adapterTableName, String stdTableName, String[] item1, String[] item2, Integer schemeId, String item, List<Integer> idList) {
        StringBuffer sql = new StringBuffer();
        String idStr = Constants.EMPTY;
        String idStr = SqlConstants.EMPTY;
        for (Integer id : idList) {
            idStr += id + Constants.COMMA;
            idStr += id + SqlConstants.COMMA;
        }
        if (!StringUtil.isEmpty(idStr)) {
            idStr = Constants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) + Constants.RIGHT_BRACKET;
            idStr = SqlConstants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) + SqlConstants.RIGHT_BRACKET;
        }
        sql.append(Constants.INSERT_INTO + adapterTableName + Constants.LEFT_BRACKET);
        sql.append(SqlConstants.INSERT_INTO + adapterTableName + SqlConstants.LEFT_BRACKET);
        for (String it : item1) {
            sql.append(it + Constants.COMMA);
            sql.append(it + SqlConstants.COMMA);
        }
        sql.append("scheme_id" + Constants.RIGHT_BRACKET + Constants.LEFT_BRACKET + Constants.SELECT);
        sql.append("scheme_id" + SqlConstants.RIGHT_BRACKET + SqlConstants.LEFT_BRACKET + SqlConstants.SELECT);
        for (String it : item2) {
            sql.append(it + Constants.COMMA);
            sql.append(it + SqlConstants.COMMA);
        }
        sql.append(schemeId + Constants.FROM + stdTableName + Constants.WHERE + item + Constants.IN + idStr + Constants.RIGHT_BRACKET);
        sql.append(schemeId + SqlConstants.FROM + stdTableName + SqlConstants.WHERE + item + SqlConstants.IN + idStr + SqlConstants.RIGHT_BRACKET);
        return sql.toString();
    }

+ 2 - 2
hos-admin/src/main/java/com/yihu/hos/standard/service/adapter/AdapterMetadataService.java

@ -4,8 +4,8 @@ package com.yihu.hos.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.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.model.Result;
@ -422,7 +422,7 @@ public class AdapterMetadataService extends SQLGeneralDAO {
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String column = jsonNode.get("column").asText();
                sql.append(" WHERE std_dataset_id = " + stdDatasetId + Constants.AND);
                sql.append(" WHERE std_dataset_id = " + stdDatasetId + SqlConstants.AND);
                sql.append(column).append(" IS NOT NULL");
            }
            Query query = getCurrentSession().createSQLQuery(sql.toString());

+ 3 - 3
hos-admin/src/main/java/com/yihu/hos/standard/service/adapter/AdapterSchemeService.java

@ -3,7 +3,7 @@ package com.yihu.hos.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.Constants;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.model.Result;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
@ -145,7 +145,7 @@ public class AdapterSchemeService extends SQLGeneralDAO {
    public DetailModelResult getSchemeList(String condition) {
        try {
            String name = Constants.EMPTY;
            String name = SqlConstants.EMPTY;
            if (!StringUtil.isEmpty(condition)) {
                ObjectMapper objectMapper = new ObjectMapper();
                try {
@ -182,7 +182,7 @@ public class AdapterSchemeService extends SQLGeneralDAO {
                stdIdList.add(null);
            }
            if (CollectionUtil.isEmpty(versionList)) {
                versionList.add(Constants.EMPTY);
                versionList.add(SqlConstants.EMPTY);
            }
            String adapterVersionHql = "FROM AdapterSchemeVersionModel WHERE schemeId IN :schemeIdList";

+ 19 - 19
hos-admin/src/main/java/com/yihu/hos/standard/service/adapter/AdapterSchemeVersionService.java

@ -2,8 +2,8 @@ package com.yihu.hos.standard.service.adapter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.*;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
@ -236,7 +236,7 @@ public class AdapterSchemeVersionService extends SQLGeneralDAO {
        List<String> deleteSqlList = new ArrayList<>();
        for (int i = 0; i < tables.length; ++i) {
            String table = tables[i];
            deleteSqlList.add(Constants.DROP_TABLE + table);
            deleteSqlList.add(SqlConstants.DROP_TABLE + table);
        }
        insertBatch(deleteSqlList);
    }
@ -258,10 +258,10 @@ public class AdapterSchemeVersionService extends SQLGeneralDAO {
            String baseTable = baseTables[i];
            String newTable = newTables[i];
            Query query = session.createSQLQuery(Constants.CREATE_TABLE + newTable + Constants.LIKE + baseTable);
            Query query = session.createSQLQuery(SqlConstants.CREATE_TABLE + newTable + SqlConstants.LIKE + baseTable);
            query.executeUpdate();
            query = session.createSQLQuery(Constants.INSERT_INTO + newTable + Constants.SELECT + "*" + Constants.FROM + baseTable);
            query = session.createSQLQuery(SqlConstants.INSERT_INTO + newTable + SqlConstants.SELECT + "*" + SqlConstants.FROM + baseTable);
            query.executeUpdate();
        }
    }
@ -360,7 +360,7 @@ public class AdapterSchemeVersionService extends SQLGeneralDAO {
        adapterTableList.add(adapterVersion.DictEntryTablePrefix);
        adapterTableList.add(adapterVersion.DatasetRelationTablePrefix);
        for (String table : adapterTableList){
            String sql = Constants.CREATE_TABLE + table + Constants.UNDERLINE + adapterVersion.getVersion() + Constants.LIKE + table;
            String sql = SqlConstants.CREATE_TABLE + table + SqlConstants.UNDERLINE + adapterVersion.getVersion() + SqlConstants.LIKE + table;
            sqlList.add(sql);
        }
        return sqlList;
@ -368,29 +368,29 @@ public class AdapterSchemeVersionService extends SQLGeneralDAO {
    private String insertData(String adapterTableName, String stdTableName, String[] item1, String[] item2, Integer schemeId, String item, List<Integer> idList) {
        StringBuffer sql = new StringBuffer();
        String idStr = Constants.EMPTY;
        String idStr = SqlConstants.EMPTY;
        if (!CollectionUtil.isEmpty(idList)) {
            for (Integer id : idList) {
                idStr += id + Constants.COMMA;
                idStr += id + SqlConstants.COMMA;
            }
            if (!StringUtil.isEmpty(idStr)) {
                idStr = Constants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) +  Constants.RIGHT_BRACKET;
                idStr = SqlConstants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) +  SqlConstants.RIGHT_BRACKET;
            }
        }
        sql.append(Constants.INSERT_INTO + adapterTableName + Constants.LEFT_BRACKET);
        sql.append(SqlConstants.INSERT_INTO + adapterTableName + SqlConstants.LEFT_BRACKET);
        for (String it : item1) {
            sql.append(it + Constants.COMMA);
            sql.append(it + SqlConstants.COMMA);
        }
        sql.append("scheme_id" + Constants.RIGHT_BRACKET + Constants.LEFT_BRACKET + Constants.SELECT );
        sql.append("scheme_id" + SqlConstants.RIGHT_BRACKET + SqlConstants.LEFT_BRACKET + SqlConstants.SELECT );
        for (String it : item2) {
            sql.append(it + Constants.COMMA);
            sql.append(it + SqlConstants.COMMA);
        }
        sql.append(schemeId + Constants.FROM + stdTableName);
        sql.append(schemeId + SqlConstants.FROM + stdTableName);
        if (!StringUtil.isEmpty(item)) {
            sql.append(Constants.WHERE + item +Constants.IN + idStr);
            sql.append(SqlConstants.WHERE + item +SqlConstants.IN + idStr);
        }
        sql.append(Constants.RIGHT_BRACKET);
        sql.append(SqlConstants.RIGHT_BRACKET);
        return sql.toString();
    }
@ -400,11 +400,11 @@ public class AdapterSchemeVersionService extends SQLGeneralDAO {
            if (CollectionUtil.isEmpty(adapterSchemeModelList)) {
                return null;
            }
            String schemeIdListStr = Constants.EMPTY;
            String schemeIdListStr = SqlConstants.EMPTY;
            for (AdapterSchemeModel adapterSchemeModel : adapterSchemeModelList) {
                schemeIdListStr = schemeIdListStr + adapterSchemeModel.getId() + Constants.COMMA;
                schemeIdListStr = schemeIdListStr + adapterSchemeModel.getId() + SqlConstants.COMMA;
            }
            schemeIdListStr = Constants.LEFT_BRACKET + schemeIdListStr.substring(0, schemeIdListStr.length() - 1) + Constants.RIGHT_BRACKET;
            schemeIdListStr = SqlConstants.LEFT_BRACKET + schemeIdListStr.substring(0, schemeIdListStr.length() - 1) + SqlConstants.RIGHT_BRACKET;
            String adapterSchemeVersionHql = "SELECT ID AS id,VERSION AS version,SCHEME_ID AS schemeId,NAME AS name FROM ADAPTER_SCHEME_VERSION WHERE PUBLISH_TIME=(select max(PUBLISH_TIME) from ADAPTER_SCHEME_VERSION WHERE SCHEME_ID in "+schemeIdListStr+")";
            Query adapterSchemeVersionQuery = getCurrentSession().createSQLQuery(adapterSchemeVersionHql);
            Object[] object = (Object[]) adapterSchemeVersionQuery.uniqueResult();
@ -424,7 +424,7 @@ public class AdapterSchemeVersionService extends SQLGeneralDAO {
    }
    public List<AdapterSchemeModel> getEhrAdapterSchemeList() {
        String paramSql = "select s.param_value from system_param s where s.param_key = '"+Constants.STANDARD_EHR+"'";
        String paramSql = "select s.param_value from system_param s where s.param_key = '"+SqlConstants.STANDARD_EHR+"'";
        Query paramQuery = getCurrentSession().createSQLQuery(paramSql);
        String code = (String) paramQuery.uniqueResult();
        if (StringUtil.isEmpty(code)) {

+ 6 - 6
hos-admin/src/main/java/com/yihu/hos/standard/service/bo/AdapterVersion.java

@ -1,6 +1,6 @@
package com.yihu.hos.standard.service.bo;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.util.ObjectVersion;
public class AdapterVersion {
@ -24,23 +24,23 @@ public class AdapterVersion {
    }
    public String getDataSetTableName() {
        return DataSetTablePrefix + Constants.UNDERLINE + version;
        return DataSetTablePrefix + SqlConstants.UNDERLINE + version;
    }
    public String getMetaDataTableName() {
        return MetaDataTablePrefix + Constants.UNDERLINE + version;
        return MetaDataTablePrefix + SqlConstants.UNDERLINE + version;
    }
    public String getDictTableName() {
        return DictTablePrefix + Constants.UNDERLINE + version;
        return DictTablePrefix + SqlConstants.UNDERLINE + version;
    }
    public String getDictEntryTableName() {
        return DictEntryTablePrefix + Constants.UNDERLINE + version;
        return DictEntryTablePrefix + SqlConstants.UNDERLINE + version;
    }
    public String getDatasetRelationTableName() {
        return DatasetRelationTablePrefix + Constants.UNDERLINE + version;
        return DatasetRelationTablePrefix + SqlConstants.UNDERLINE + version;
    }
    public String getVersion() {

+ 8 - 8
hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StandardService.java

@ -3,8 +3,8 @@ package com.yihu.hos.standard.service.standard;
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.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.model.DictItem;
@ -216,7 +216,7 @@ public class StandardService extends SQLGeneralDAO {
        SystemParam systemParam = (SystemParam) criteria.uniqueResult();
        Criteria criteria1 = getCurrentSession().createCriteria(SystemParam.class);
        criteria1.add(Restrictions.eq("paramKey", Constants.STANDARD_ORG));
        criteria1.add(Restrictions.eq("paramKey", SqlConstants.STANDARD_ORG));
        SystemParam systemParam1 = (SystemParam) criteria1.uniqueResult();
        if (systemParam != null) {
@ -327,7 +327,7 @@ public class StandardService extends SQLGeneralDAO {
    }
    public List<StandardResultDetailModel> getStandardList(String condition) {
        String name = Constants.EMPTY;
        String name = SqlConstants.EMPTY;
        Integer type = null;
        if (!StringUtil.isEmpty(condition)) {
            ObjectMapper objectMapper = new ObjectMapper();
@ -343,8 +343,8 @@ public class StandardService extends SQLGeneralDAO {
                e.printStackTrace();
            }
        }
        StandardParamResultModel standardParam = getStandardParam(Constants.STANDARD);
        StandardParamResultModel standardParam1= getStandardParam(Constants.STANDARD_ORG);
        StandardParamResultModel standardParam = getStandardParam(SqlConstants.STANDARD);
        StandardParamResultModel standardParam1= getStandardParam(SqlConstants.STANDARD_ORG);
        String code = standardParam.getCode();
        String orgCode = standardParam1.getCode();
        List<SystemOrganization> publisherModelList = new ArrayList<>();
@ -421,7 +421,7 @@ public class StandardService extends SQLGeneralDAO {
        for (String key : query.keySet()) {
            if (key.equals("type")) {
                Integer type = (Integer) query.get(key);
                String code = getStandardParam(Constants.STANDARD).getCode();
                String code = getStandardParam(SqlConstants.STANDARD).getCode();
                if (type == 0) {
                    criteria.add(Restrictions.eq("code", code));
                } else if (type == 1) {
@ -439,9 +439,9 @@ public class StandardService extends SQLGeneralDAO {
        }
        if (order != null) {
            for (String key : order.keySet()) {
                if (order.get(key).equals(Constants.ASC)) {
                if (order.get(key).equals(SqlConstants.ASC)) {
                    criteria.addOrder(Order.asc(key));
                } else if (order.get(key).equals(Constants.DESC)) {
                } else if (order.get(key).equals(SqlConstants.DESC)) {
                    criteria.addOrder(Order.desc(key));
                }
            }

+ 8 - 8
hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StandardVersionService.java

@ -2,8 +2,8 @@ package com.yihu.hos.standard.service.standard;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DictItem;
import com.yihu.ehr.framework.model.DictionaryResult;
@ -229,7 +229,7 @@ public class StandardVersionService extends SQLGeneralDAO {
    public StandardVersionModel getLastestVersion(Integer standardId) {
        Map<String, Object> query = new HashMap<>();
        Map<String, String> order = new HashMap<>();
        order.put("publisher", Constants.DESC);
        order.put("publisher", SqlConstants.DESC);
        List<StandardVersionModel> list = getList(standardId, query, order, 1, 0);
        if (list != null && list.size() != 0) {
@ -320,9 +320,9 @@ public class StandardVersionService extends SQLGeneralDAO {
        }
        if (order != null) {
            for (String key : order.keySet()) {
                if (order.get(key).equals(Constants.ASC)) {
                if (order.get(key).equals(SqlConstants.ASC)) {
                    criteria.addOrder(Order.asc(key));
                } else if (order.get(key).equals(Constants.DESC)) {
                } else if (order.get(key).equals(SqlConstants.DESC)) {
                    criteria.addOrder(Order.desc(key));
                }
            }
@ -340,7 +340,7 @@ public class StandardVersionService extends SQLGeneralDAO {
        List<String> deleteSql = new ArrayList<>();
        for (int i = 0; i < tables.length; ++i) {
            String table = tables[i];
            deleteSql.add(Constants.DROP_TABLE + table);
            deleteSql.add(SqlConstants.DROP_TABLE + table);
        }
        insertBatch(deleteSql);
    }
@ -379,18 +379,18 @@ public class StandardVersionService extends SQLGeneralDAO {
        for (int i = 0; i < baseTables.length; ++i) {
            String baseTable = baseTables[i];
            String newTable = newTables[i];
            createSql.add(Constants.CREATE_TABLE + newTable + Constants.LIKE + baseTable);
            createSql.add(SqlConstants.CREATE_TABLE + newTable + SqlConstants.LIKE + baseTable);
        }
        for (int i = 0; i < baseTables.length; ++i) {
            String baseTable = baseTables[i];
            String newTable = newTables[i];
            insertSql.add(Constants.INSERT_INTO + newTable + Constants.SELECT + Constants.ASTERISK + Constants.FROM + baseTable);
            insertSql.add(SqlConstants.INSERT_INTO + newTable + SqlConstants.SELECT + SqlConstants.ASTERISK + SqlConstants.FROM + baseTable);
        }
        for (int i = 0; i < baseTables.length; ++i) {
            String newTable = newTables[i];
            updateSql.add(Constants.UPDATE + newTable + Constants.SET + " STD_ID = " + standardId);
            updateSql.add(SqlConstants.UPDATE + newTable + SqlConstants.SET + " STD_ID = " + standardId);
        }
        insertBatch(createSql);
        insertBatch(insertSql);

+ 3 - 3
hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdCDACatalogService.java

@ -3,8 +3,8 @@ package com.yihu.hos.standard.service.standard;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.hos.standard.model.standard.StandardModel;
@ -122,9 +122,9 @@ public class StdCDACatalogService extends SQLGeneralDAO {
        }
        if (order != null) {
            for (String key : order.keySet()) {
                if (order.get(key).equals(Constants.ASC)) {
                if (order.get(key).equals(SqlConstants.ASC)) {
                    criteria.addOrder(Order.asc(key));
                } else if (order.get(key).equals(Constants.DESC)) {
                } else if (order.get(key).equals(SqlConstants.DESC)) {
                    criteria.addOrder(Order.desc(key));
                }
            }

+ 9 - 9
hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdDatasetService.java

@ -3,8 +3,8 @@ package com.yihu.hos.standard.service.standard;
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.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.model.Result;
@ -331,7 +331,7 @@ public class StdDatasetService extends SQLGeneralDAO {
            List<Select2> detailModelList = new ArrayList<>();
            for (StdDataSetModel stdDataSetModel : datasetList) {
                Select2 select2 = new Select2();
                select2.setId(stdDataSetModel.getId() + Constants.COMMA + stdDataSetModel.getCode());
                select2.setId(stdDataSetModel.getId() + SqlConstants.COMMA + stdDataSetModel.getCode());
                select2.setText(stdDataSetModel.getName());
                detailModelList.add(select2);
            }
@ -347,7 +347,7 @@ public class StdDatasetService extends SQLGeneralDAO {
    public List getAllVersionDatasetList() {
        // 导入的数据集列表应该只取集成标准已发布各版本的并集去重 @modify by yingjie chen
        Criteria criteria = getCurrentSession().createCriteria(StandardModel.class);
        StandardParamResultModel standardParam = standardService.getStandardParam(Constants.STANDARD);
        StandardParamResultModel standardParam = standardService.getStandardParam(SqlConstants.STANDARD);
        String code = standardParam.getCode();
        criteria.add(Restrictions.eq("code", code));
        List<StandardModel> standardModelList = criteria.list();
@ -361,16 +361,16 @@ public class StdDatasetService extends SQLGeneralDAO {
                query.setParameterList("idList", idList);
                versionModelList = query.list();
            }
            String sql = Constants.EMPTY;
            String sql = SqlConstants.EMPTY;
            BeanTransformer transformer = new BeanTransformer(StdDataSetModel.class);
            for (StandardVersionModel versionModel : versionModelList) {
                SqlCreator sqlCreator = new SqlCreator(StdDataSetModel.class);
                StandardVersion version = new StandardVersion(versionModel.getVersion());
                sql = sql + sqlCreator.selectData(version.getDataSetTableName()) + Constants.UNION;
                sql = sql + sqlCreator.selectData(version.getDataSetTableName()) + SqlConstants.UNION;
            }
            if (!StringUtil.isEmpty(sql)) {
                sql = sql.substring(0, sql.length() - Constants.UNION.length());
                sql = sql.substring(0, sql.length() - SqlConstants.UNION.length());
                SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
                sqlQuery.setResultTransformer(transformer);
                List<StdDataSetModel> modelList = sqlQuery.list();
@ -562,16 +562,16 @@ public class StdDatasetService extends SQLGeneralDAO {
            String hql = "FROM StandardVersionModel WHERE publishTime is not null order by publishTime";
            Query query = getCurrentSession().createQuery(hql);
            List<StandardVersionModel> versionModelList = query.list();
            String sql = Constants.EMPTY;
            String sql = SqlConstants.EMPTY;
            BeanTransformer transformer = new BeanTransformer(StdDataSetModel.class);
            for (StandardVersionModel versionModel : versionModelList) {
                SqlCreator sqlCreator = new SqlCreator(StdDataSetModel.class);
                StandardVersion version = new StandardVersion(versionModel.getVersion());
                sql = sql + sqlCreator.selectData(version.getDataSetTableName())  + Constants.UNION;
                sql = sql + sqlCreator.selectData(version.getDataSetTableName())  + SqlConstants.UNION;
            }
            if (!StringUtil.isEmpty(sql)) {
                sql = sql.substring(0, sql.length() - Constants.UNION.length());
                sql = sql.substring(0, sql.length() - SqlConstants.UNION.length());
                SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
                sqlQuery.setResultTransformer(transformer);
                List<StdDataSetModel> modelList = sqlQuery.list();

+ 2 - 2
hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdDictEntryService.java

@ -3,8 +3,8 @@ package com.yihu.hos.standard.service.standard;
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.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.model.Result;
@ -307,7 +307,7 @@ public class StdDictEntryService extends SQLGeneralDAO {
            List<Select2> detailModelList = new ArrayList<>();
            for (StdDictionaryEntryModel dictEntry : dictEntryModelList) {
                Select2 select2 = new Select2();
                select2.setId(dictEntry.getId() + Constants.COMMA + dictEntry.getCode());
                select2.setId(dictEntry.getId() + SqlConstants.COMMA + dictEntry.getCode());
                select2.setText(dictEntry.getValue());
                detailModelList.add(select2);
            }

+ 2 - 2
hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdDictService.java

@ -4,8 +4,8 @@ package com.yihu.hos.standard.service.standard;
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.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.model.DictItem;
@ -390,7 +390,7 @@ public class StdDictService extends SQLGeneralDAO {
            List<Select2> detailModelList = new ArrayList<>();
            for (StdDictionaryModel dictModel : dictList) {
                Select2 select2 = new Select2();
                select2.setId(dictModel.getId() + Constants.COMMA + dictModel.getCode());
                select2.setId(dictModel.getId() + SqlConstants.COMMA + dictModel.getCode());
                select2.setText(dictModel.getName());
                detailModelList.add(select2);
            }

+ 8 - 8
hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdMetadataService.java

@ -3,8 +3,8 @@ package com.yihu.hos.standard.service.standard;
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.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DetailModelResult;
import com.yihu.ehr.framework.model.Result;
@ -311,9 +311,9 @@ public class StdMetadataService extends SQLGeneralDAO {
            for (StdMetaDataModel metaDataModel : metadataList) {
                Select2 select2 = new Select2();
                if (metaDataModel.getDictId() != null) {
                    select2.setId(metaDataModel.getId() + Constants.COMMA + metaDataModel.getCode() + Constants.COMMA + metaDataModel.getDictId());
                    select2.setId(metaDataModel.getId() + SqlConstants.COMMA + metaDataModel.getCode() + SqlConstants.COMMA + metaDataModel.getDictId());
                } else {
                    select2.setId(metaDataModel.getId() + Constants.COMMA + metaDataModel.getCode());
                    select2.setId(metaDataModel.getId() + SqlConstants.COMMA + metaDataModel.getCode());
                }
                select2.setText(metaDataModel.getName());
                detailModelList.add(select2);
@ -333,14 +333,14 @@ public class StdMetadataService extends SQLGeneralDAO {
            Map<String,List<StdDataSetModel>> version2DataSetMap = new HashMap<>();
            String sql;
            ObjectMapper objectMapper = new ObjectMapper();
            String code = Constants.EMPTY;
            String code = SqlConstants.EMPTY;
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                code = jsonNode.get("code").asText();
            }
            Criteria criteria = getCurrentSession().createCriteria(StandardModel.class);
            StandardParamResultModel standardParam = standardService.getStandardParam(Constants.STANDARD);
            StandardParamResultModel standardParam = standardService.getStandardParam(SqlConstants.STANDARD);
            String VersionCode = standardParam.getCode();
            criteria.add(Restrictions.eq("code", VersionCode));
            List<StandardModel> standardModelList = criteria.list();
@ -369,7 +369,7 @@ public class StdMetadataService extends SQLGeneralDAO {
            }
            if (!version2DataSetMap.isEmpty()) {
                sql = Constants.EMPTY;
                sql = SqlConstants.EMPTY;
                Integer count = 1;
                Map<Integer, String> datasetIdMap = new HashMap<>();
@ -381,14 +381,14 @@ public class StdMetadataService extends SQLGeneralDAO {
                    List<StdDataSetModel> dataList = (List<StdDataSetModel>) entry.getValue();
                    datasetIdMap.put(count++, StringUtil.toString(dataList.get(0).getId()));
                    sqlMetadataCreator.equalConditionQue("datasetId", dataList.get(0).getId());
                    sql = sql + sqlMetadataCreator.selectData(version.getMetaDataTableName()) + Constants.UNION;
                    sql = sql + sqlMetadataCreator.selectData(version.getMetaDataTableName()) + SqlConstants.UNION;
                }
                BeanTransformer metadataTransformer = new BeanTransformer(StdMetaDataModel.class);
                List<StdMetaDataModel> distinctModelList = new ArrayList<>();
                if (!StringUtil.isEmpty(sql)) {
                    sql = sql.substring(0, sql.length() - Constants.UNION.length());
                    sql = sql.substring(0, sql.length() - SqlConstants.UNION.length());
                    SQLQuery sqlQuery;
                    sqlQuery = getCurrentSession().createSQLQuery(sql);
                    sqlQuery.setResultTransformer(metadataTransformer);

+ 4 - 4
hos-admin/src/main/java/com/yihu/hos/standard/service/standard/StdPublisherService.java

@ -1,8 +1,8 @@
package com.yihu.hos.standard.service.standard;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.SqlConstants;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.model.DictItem;
import com.yihu.ehr.framework.model.DictionaryResult;
@ -79,9 +79,9 @@ public class StdPublisherService extends SQLGeneralDAO {
        }
        if (order != null) {
            for (String key : order.keySet()) {
                if (order.get(key).equals(Constants.ASC)) {
                if (order.get(key).equals(SqlConstants.ASC)) {
                    criteria.addOrder(Order.asc(key));
                } else if (order.get(key).equals(Constants.DESC)) {
                } else if (order.get(key).equals(SqlConstants.DESC)) {
                    criteria.addOrder(Order.desc(key));
                }
            }
@ -110,7 +110,7 @@ public class StdPublisherService extends SQLGeneralDAO {
    public Result getStandardPublisher() {
        try {
            String paramSql = "select s.param_value from system_param s where s.param_key = '"+ Constants.STANDARD_ORG+"'";
            String paramSql = "select s.param_value from system_param s where s.param_key = '"+ SqlConstants.STANDARD_ORG+"'";
            Query paramQuery = getCurrentSession().createSQLQuery(paramSql);
            String publisherCode = (String) paramQuery.uniqueResult();
            Criteria criteria = getCurrentSession().createCriteria(SystemOrganization.class);

+ 2 - 2
hos-admin/src/test/java/com/yihu/hos/HosAdminApplicationTests.java

@ -2,12 +2,12 @@ package com.yihu.hos;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@SpringApplicationConfiguration(classes = HosAdminApplication.class)
@WebAppConfiguration
public class HosAdminApplicationTests {
	@Test

+ 4 - 4
hos-admin/src/test/java/com/yihu/hos/services/ServiceFlowEventServiceTest.java

@ -4,14 +4,14 @@ import com.yihu.hos.HosAdminApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
 * @created Airhead 2016/8/4.
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HosAdminApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = HosAdminApplication.class)
public class ServiceFlowEventServiceTest {
    @Autowired
    ServiceFlowEventService serviceFlowEventService;

+ 5 - 5
hos-broker/pom.xml

@ -67,11 +67,11 @@
			<!--<artifactId>camel-test</artifactId>-->
			<!--<scope>test</scope>-->
		<!--</dependency>-->
		<!--<dependency>-->
			<!--<groupId>com.yihu.hos.resource</groupId>-->
			<!--<artifactId>Hos-Framework</artifactId>-->
			<!--<version>1.0.7</version>-->
		<!--</dependency>-->
		<dependency>
			<groupId>com.yihu.hos.resource</groupId>
			<artifactId>Hos-Framework</artifactId>
			<version>1.0.7</version>
		</dependency>
	</dependencies>

+ 13 - 2
hos-broker/src/main/java/com/yihu/hos/HosBrokerApplication.java

@ -1,12 +1,23 @@
package com.yihu.hos;
import com.yihu.hos.listener.ApplicationStartListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
@SpringBootApplication
public class HosBrokerApplication{
public class HosBrokerApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(HosBrokerApplication.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(HosBrokerApplication.class, args);
        SpringApplication app = new SpringApplication(HosBrokerApplication.class);
        app.run(args);
        app.addListeners(new ApplicationStartListener());
    }
}

+ 97 - 0
hos-broker/src/main/java/com/yihu/hos/controllers/ESBCamelController.java

@ -0,0 +1,97 @@
package com.yihu.hos.controllers;
import com.yihu.ehr.framework.model.Result;
import com.yihu.hos.services.ESBCamelService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
/**
 * Created by lingfeng on 2016/8/4.
 */
@Controller
@RequestMapping("/esb")
public class ESBCamelController {
    @Resource(name= ESBCamelService.BEAN_ID)
    ESBCamelService esbCamelService;
    @RequestMapping(value = "/processor", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "新增Processor处理器", produces = "application/json", notes = "当外界组件通知一个新的processor处理器被定义时,该事件被触发")
    public Result onProcessorAdded(
            @ApiParam(name = "serviceFlow", value = "服务名称", required = true)
            @RequestParam(value = "serviceFlow") String serviceFlow,
            @ApiParam(name = "packageName", value = "包名", required = true)
            @RequestParam(value = "packageName") String packageName,
            @ApiParam(name = "className", value = "类名", required = true)
            @RequestParam(value = "className") String className,
            @ApiParam(name = "path", value = "class文件路径", required = true)
            @RequestParam(value = "path") String path) {
        return Result.success("成功!");
//        return esbCamelService.onProcessorAdded(serviceFlow, packageName, className, path);
    }
    @RequestMapping(value = "/processor", produces = "application/json;charset=UTF-8", method = RequestMethod.PUT)
    @ResponseBody
    @ApiOperation(value = "修改Processor处理器", produces = "application/json", notes = "当外界组件通知一个已有的processor处理器data部分发生变化时,该事件被触发")
    public Result onProcessorDataChanged(
            @ApiParam(name = "serviceFlow", value = "服务名称", required = true)
            @RequestParam(value = "serviceFlow") String serviceFlow,
            @ApiParam(name = "packageName", value = "包名", required = true)
            @RequestParam(value = "packageName") String packageName,
            @ApiParam(name = "className", value = "类名", required = true)
            @RequestParam(value = "className") String className,
            @ApiParam(name = "path", value = "class文件路径", required = true)
            @RequestParam(value = "path") String path) {
        return esbCamelService.onProcessorDataChanged(serviceFlow, packageName, className, path);
    }
    @RequestMapping(value = "/route", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "新增Route路由", produces = "application/json", notes = "当外界组件通知一个新的RouteDefine路由被定义时,该事件被触发")
    public Result onRouteDefineAdded(
            @ApiParam(name = "serviceFlow", value = "服务名称", required = true)
            @RequestParam(value = "serviceFlow") String serviceFlow,
            @ApiParam(name = "packageName", value = "包名", required = true)
            @RequestParam(value = "packageName") String packageName,
            @ApiParam(name = "className", value = "类名", required = true)
            @RequestParam(value = "className") String className,
            @ApiParam(name = "path", value = "class文件路径", required = true)
            @RequestParam(value = "path") String path) {
        return esbCamelService.onRouteDefineAdded(serviceFlow, packageName, className, path);
    }
    @RequestMapping(value = "/route", produces = "application/json;charset=UTF-8", method = RequestMethod.PUT)
    @ResponseBody
    @ApiOperation(value = "修改Route路由", produces = "application/json", notes = "当外界组件通知一个已有的RouteDefine路由定义被改变时,主要就是路由定义内容被改变时,该事件被触发")
    public Result onRouteDefineChanged(
            @ApiParam(name = "serviceFlow", value = "服务名称", required = true)
            @RequestParam(value = "serviceFlow") String serviceFlow,
            @ApiParam(name = "packageName", value = "包名", required = true)
            @RequestParam(value = "packageName") String packageName,
            @ApiParam(name = "className", value = "类名", required = true)
            @RequestParam(value = "className") String className,
            @ApiParam(name = "path", value = "class文件路径", required = true)
            @RequestParam(value = "path") String path) {
        return esbCamelService.onRouteDefineChanged(serviceFlow, packageName, className, path);
    }
    @RequestMapping(value = "/route", produces = "application/json;charset=UTF-8", method = RequestMethod.DELETE)
    @ResponseBody
    @ApiOperation(value = "删除Route路由", produces = "application/json", notes = "当外界组件通知一个已有的RouteDefine路由定义被删除时,该事件被触发")
    public Result onRouteDefineDelete(
            @ApiParam(name = "serviceFlow", value = "服务名称", required = true)
            @RequestParam(value = "serviceFlow") String serviceFlow,
            @ApiParam(name = "packageName", value = "包名", required = true)
            @RequestParam(value = "packageName") String packageName,
            @ApiParam(name = "className", value = "类名", required = true)
            @RequestParam(value = "className") String className) {
        return esbCamelService.onRouteDefineDelete(serviceFlow, packageName, className);
    }
}

+ 23 - 0
hos-broker/src/main/java/com/yihu/hos/dao/BrokerDao.java

@ -0,0 +1,23 @@
package com.yihu.hos.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository("BrokerDao")
public class BrokerDao {
    public static final String BEAN_ID = "BrokerDao";
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public List<Map<String, Object>> getSystemServiceFlowList() throws Exception {
        return jdbcTemplate.queryForList("select * from system_service_flow");
    }
    public List<Map<String, Object>> getSystemServiceFlowClassList() throws Exception {
        return jdbcTemplate.queryForList("select * from system_service_flow_class");
    }
}

+ 173 - 0
hos-broker/src/main/java/com/yihu/hos/listener/ApplicationStartListener.java

@ -0,0 +1,173 @@
package com.yihu.hos.listener;
import com.yihu.ehr.framework.util.operator.ClassFileUtil;
import com.yihu.hos.dao.BrokerDao;
import com.yihu.hos.model.CamelContextQueue;
import com.yihu.hos.model.SystemPathMapping;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.SynchronousQueue;
/**
 * 项目启动执行
 * add by hzp at 2016-01-25
 */
@Repository("ApplicationStartListener")
public class ApplicationStartListener implements ApplicationListener {
    public static final String BEAN_ID = "ApplicationStartListener";
    @Resource(name = BrokerDao.BEAN_ID)
    BrokerDao brokerDao;
    private static Logger logger = LogManager.getLogger();
    /**
     * 这是一个固定的存储class文件的根路径
     * 正式系统中,这个值可来自于系统的配置文件
     */
    private static final String CLASSROOTPATH = "D:/testCamelRoot";
    private void camelRouteStart() throws Exception {
         /*
         * 启动顺序为:
         *
         * 1、首先使用Apache Curator组件进行zookeeper服务端连接,
         *
         * 2、通过Apache Curator组件查询目前已有的业务系统ID信息,
         * 以便依据这些业务系统ID,建立本地ClassLoader的根路径(当然,有就不需要创建了)
         * 并且注册Apache Curator封装层的监听。
         *
         * 3、检查第2步得到的业务系统下,已经存在的processor处理器定义和已有的route定义
         * 以便生成class信息。
         *
         * 4、启动Apache Camel服务,将第三步那些route定义进行动态加载
         *
         * 5、经过以上步骤,整个启动过程完成了。现在主线程需要一直等待从SynchronousQueue队列发来的动态加载请求了。
         * */
        // 1、===============
        // 连接到zookeeper
//        CuratorFramework zkClient = CuratorFrameworkFactory.newClient("192.168.61.140:2181", 30000, 30000, new RetryNTimes(50, 3000));
//        zkClient.start();
//        BootStartup.LOGGER.info("完成zookeeper服务端的连接工作!");
        // 2、===============
        // 取得已存在的系统
//        List<String> systemNames = zkClient.getChildren().forPath("/");
        List<Map<String, Object>> systemServiceFlowList = brokerDao.getSystemServiceFlowList();
        List<Map<String, Object>> systemServiceFlowClassList = brokerDao.getSystemServiceFlowClassList();
        Map<String, List<Map<String, Object>>> systemServiceFlowClassGroupMap = new HashMap<>();
        for (Map<String, Object> systemServiceFlowClassMap : systemServiceFlowClassList) {
            Integer flowId = (Integer) systemServiceFlowClassMap.get("flow_id");
            if (systemServiceFlowClassGroupMap.containsKey(flowId)) {
                List<Map<String, Object>> classList = systemServiceFlowClassGroupMap.get(flowId);
                classList.add(systemServiceFlowClassMap);
                String type = (String) systemServiceFlowClassMap.get("type");
                systemServiceFlowClassGroupMap.put(type + flowId.toString()  , classList);
            } else {
                List<Map<String, Object>> classList = new ArrayList<>();
                classList.add(systemServiceFlowClassMap);
                String type = (String) systemServiceFlowClassMap.get("type");
                systemServiceFlowClassGroupMap.put(type + flowId.toString()  , classList);
            }
        }
        List<File> systemClassRootPaths = new ArrayList<>();
        List<RouteBuilder> alreadyRouteBuilders = new ArrayList<>();
        for (Map<String, Object> systemNameMap : systemServiceFlowList) {
            Integer flowId = (Integer) systemNameMap.get("id");
            String code = (String) systemNameMap.get("code");
            // 这是system业务系统在本地存储class的根目录
            File systemClassRootPath = new File(CLASSROOTPATH + "/" + code);
            if (!systemClassRootPath.exists()) {
                systemClassRootPath.mkdirs();
            }
            Map<String, URL> systemRootPathMapping = SystemPathMapping.getSystemRootPathMapping();
            // 记录到工具类中,以便其它线程需要时进行取用
            systemRootPathMapping.put(code, systemClassRootPath.toURI().toURL());
            if (!systemClassRootPaths.contains(systemClassRootPath)) {
                systemClassRootPaths.add(systemClassRootPath);
            }
            List<Map<String, Object>> processesClassList = systemServiceFlowClassGroupMap.get("processor" + flowId);
            List<Map<String, Object>> routesClassList = systemServiceFlowClassGroupMap.get("route" + flowId);
            // 创建processor文件
            for (Map<String, Object> processesClass : processesClassList) {
                String className = (String) processesClass.get("name");
                String packageName = (String) processesClass.get("package");
                String classPath = (String) processesClass.get("path");
                // 创建文件
                ClassFileUtil.createClassfile(systemClassRootPath.toURI().toURL(), packageName, className, classPath);
            }
            // 创建route文件
            for (Map<String, Object> routesClass : routesClassList) {
                String className = (String) routesClass.get("name");
                String packageName = (String) routesClass.get("package");
                String classPath = (String) routesClass.get("path");
                // 创建文件
                ClassFileUtil.createClassfile(systemClassRootPath.toURI().toURL(), packageName, className, classPath);
                RouteBuilder routeBuilder = (RouteBuilder)Class.forName(packageName + "." + className).newInstance();
                alreadyRouteBuilders.add(routeBuilder);
            }
        }
        // 4、=============
        // 首先启动Apache Camel服务
        CamelContext camelContext = new DefaultCamelContext();
        camelContext.start();
        logger.info("Apache Camel Context 启动完成......");
        // 加载和设置ClassLoader
        List<URL> URLs = new ArrayList<>();
        for (File systemClassRootPath : systemClassRootPaths) {
            URLs.add(systemClassRootPath.toURI().toURL());
        }
        ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
        ClassLoader camelESBClassLoader = new URLClassLoader(URLs.toArray(new URL[]{}) , currentClassLoader);
        Thread.currentThread().setContextClassLoader(camelESBClassLoader);
        camelContext.setApplicationContextClassLoader(camelESBClassLoader);
        // 然后就可以进行RouteBuilder的加载
        for (RouteBuilder routeBuilder : alreadyRouteBuilders) {
            try {
                camelContext.addRoutes(routeBuilder);
            } catch(Exception e) {
                logger.warn(e.getMessage() , e);
            }
        }
        // 5、=============
        // 开始监控CamelContext动态操作队列
        SynchronousQueue<String> camelContextOperateQueue = CamelContextQueue.getCamelCamelContextQueue();
        String mustLoadedClassName = null;
        // 如果没有收到其它线程的加载请求,主线程将停止在这里
        while((mustLoadedClassName = camelContextOperateQueue.take()) != null) {
            Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>)camelESBClassLoader.loadClass(mustLoadedClassName);
            if(routeBuilderClass != null) {
                RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                camelContext.addRoutes(routeBuilder);
            }
        }
    }
    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        try {
            camelRouteStart();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 16 - 0
hos-broker/src/main/java/com/yihu/hos/model/CamelContextQueue.java

@ -0,0 +1,16 @@
package com.yihu.hos.model;
import java.util.concurrent.SynchronousQueue;
/**
 * Created by lingfeng on 2016/8/4.
 */
public class CamelContextQueue {
    private static SynchronousQueue<String> camelContextOperateQueue;
    public static SynchronousQueue<String> getCamelCamelContextQueue() {
        if (camelContextOperateQueue == null) {
            camelContextOperateQueue = new SynchronousQueue<>(true);
        }
        return camelContextOperateQueue;
    }
}

+ 18 - 0
hos-broker/src/main/java/com/yihu/hos/model/SystemPathMapping.java

@ -0,0 +1,18 @@
package com.yihu.hos.model;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by lingfeng on 2016/8/4.
 */
public class SystemPathMapping {
    private static Map<String, URL> systemRootPathMapping ;
    public static Map<String, URL> getSystemRootPathMapping() {
        if (systemRootPathMapping == null) {
            systemRootPathMapping = new HashMap<>();
        }
        return systemRootPathMapping;
    }
}

+ 165 - 0
hos-broker/src/main/java/com/yihu/hos/services/ESBCamelService.java

@ -0,0 +1,165 @@
package com.yihu.hos.services;
import com.yihu.ehr.framework.model.Result;
import com.yihu.ehr.framework.util.operator.ClassFileUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.hos.model.CamelContextQueue;
import com.yihu.hos.model.SystemPathMapping;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
import java.net.URL;
import java.util.Map;
import java.util.concurrent.SynchronousQueue;
/**
 * Created by lingfeng on 2016/8/4.
 */
@Service("ESBCamelService")
public class ESBCamelService {
    public static final String BEAN_ID = "ESBCamelService";
    private static Logger logger = LogManager.getLogger();
    /**
     * 当外界组件通知一个新的processor处理器被定义时,该事件被触发。
     * @param serviceFlow 本次processor处理器变化,所涉及的业务系统唯一标识。
     * @param packageName processor处理器定义涉及的class包名
     * @param className processor处理器定义涉及的class类名
     * @param path processor处理器定义涉及的class对应路径
     */
    public Result onProcessorAdded(String serviceFlow, String packageName, String className, String path) {
 /*
         * 当一个处理器进行添加时,要做以下处理
         * 1、首先根据serviceFlow的信息,在ESB-Broker Server的映射容器中寻
         * 找个业务系统定义的各种Server Class 文件在ESB-Broker Server节点本地存储的根路径
         * 2、然后按照packageName、className、contents的信息将这个class文件写入到正确的位置
         *
         * 注意:由于此时只是完成了class了文件的写入,所以这个class文件还没有被classloader进行初始化。
         * 另外由于,CamelContext并没有提供单独进行processor处理器加载的功能,而是随着routes实例的加载而加载
         * 而这个工作将在onRouteDefineChanged事件中完成,所以在完成processor-class文件的写入后,就不需要再做其它事情了。
         * */
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        }
        this.createClassfile(serviceFlow, packageName, className, path);
        return Result.success("新增处理器成功!");
    }
    /**
     * 当外界组件通知一个已有的processor处理器data部分发生变化时,该事件被触发。
     */
    public Result onProcessorDataChanged(String serviceFlow , String packageName , String className , String path) {
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        }
        this.updateClassfile(serviceFlow, packageName, className, path);
        return Result.success("修改处理器成功!");
    }
    /**
     * 当外界组件通知一个新的RouteDefine路由被定义时,该事件被触发
     */
    public Result onRouteDefineAdded(String serviceFlow , String packageName , String className , String path) {
/*
         * 当一个新的路由定义事件发生时,要做以下几件事情:
         *
         * 1、根据serviceFlow的信息,在ESB-Broker Server的映射容器中寻
         * 找个业务系统定义的各种Server Class 文件在ESB-Broker Server节点本地存储的根路径
         * 2、然后按照packageName、className、contents的信息将这个class文件写入到正确的位置
         * 3、不能在本线程操作Apache Camel,只能通过一个同步队列通知Apache Camel主线程
         * */
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        }
        // 第1、2两步处理过程,都是在这里完成
        this.createClassfile(serviceFlow, packageName, className, path);
        // 3、===============加载到CamelContext中
        SynchronousQueue<String> camelContextOperateQueue = CamelContextQueue.getCamelCamelContextQueue();
        try {
            camelContextOperateQueue.put(packageName + "." + className);
        } catch (InterruptedException e) {
            logger.error(e.getMessage() , e);
        }
        return Result.success("新增路由成功!");
    }
    /**
     * 当外界组件通知一个已有的RouteDefine路由定义被改变时,主要就是路由定义内容被改变时,该事件被触发。
     */
    public Result onRouteDefineChanged(String serviceFlow, String packageName, String className, String path) {
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className) || StringUtil.isEmpty(path)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        }
        this.updateClassfile(serviceFlow, packageName, className, path);
        return Result.success("修改路由成功!");
    }
    /**
     * 当外界组件通知一个已有的RouteDefine路由定义被删除时,该事件被触发。
     */
    public Result onRouteDefineDelete(String serviceFlow, String packageName, String className) {
        if(StringUtil.isEmpty(serviceFlow) || StringUtil.isEmpty(packageName)
                || StringUtil.isEmpty(className)) {
            logger.error("必要的入参数据不正确,请检查!");
            return Result.error("必要的入参数据不正确,请检查!");
        }
        this.deleteClassfile(serviceFlow, packageName, className);
        return Result.success("删除路由成功!");
    }
    private void createClassfile(String serviceFlow, String packageName, String className, String path) {
        // 1、============
        Map<String, URL> systemPathMapping = SystemPathMapping.getSystemRootPathMapping();
        URL systemRootURL = systemPathMapping.get(serviceFlow);
        if(systemRootURL == null) {
            return;
        }
        // 2、============开始写入class文件
        ClassFileUtil.createClassfile(systemRootURL, packageName, className, path);
        // 完成
        logger.info("===================" + packageName + "." + className + ".class 生成过程结束");
    }
    private void updateClassfile(String serviceFlow, String packageName, String className, String path) {
        // 1、============
        Map<String, URL> systemPathMapping = SystemPathMapping.getSystemRootPathMapping();
        URL systemRootURL = systemPathMapping.get(serviceFlow);
        if(systemRootURL == null) {
            return;
        }
        // 2、============开始写入class文件
        ClassFileUtil.updateClassfile(systemRootURL, packageName, className, path);
        // 完成
        logger.info("===================" + packageName + "." + className + ".class 修改过程结束");
    }
    private void deleteClassfile(String serviceFlow, String packageName, String className) {
        // 1、============
        Map<String, URL> systemPathMapping = SystemPathMapping.getSystemRootPathMapping();
        URL systemRootURL = systemPathMapping.get(serviceFlow);
        if(systemRootURL == null) {
            return;
        }
        // 2、============开始写入class文件
        ClassFileUtil.deleteClassfile(systemRootURL, packageName, className);
        // 完成
        logger.info("===================" + packageName + "." + className + ".class 删除过程结束");
    }
}

+ 15 - 3
hos-broker/src/main/resources/application.properties

@ -1,7 +1,19 @@
server.port=0
hos.arbiter=http://127.0.0.1:10135
server.port=8099
hos.arbiter=http://192.168.131.38:10135
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.220:3306/hos2_resource??useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
spring.datasource.username=hos2
spring.datasource.password=hos2
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1
spring.datasource.test-while-idle=true
spring.datasource.max-active=30
spring.datasource.default-auto-commit=true
spring.datasource.max-idle=30
spring.datasource.min-idle=10
spring.datasource.initial-size=10
security.basic.enabled=false
# the name of Camel
camel.springboot.name = HosBrokerServer

+ 8 - 0
hos-broker/src/test/java/com/yihu/hos/ESBCamelServiceTest.java

@ -0,0 +1,8 @@
package com.yihu.hos;
/**
 * Created by lingfeng on 2016/8/5.
 */
public class ESBCamelServiceTest {
}

+ 1 - 1
hos-broker/src/test/java/com/yihu/hos/HosBrokerApplicationTests.java

@ -2,7 +2,7 @@ package com.yihu.hos;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;