LAPTOP-KB9HII50\70708 2 年 前
コミット
fa4b79db5c

+ 1 - 1
common/common-request-mapping/src/main/java/com/yihu/jw/rm/svrBasic/ApiVersion.java

@ -10,5 +10,5 @@ package com.yihu.jw.rm.svrBasic;
 * @created 2015.11.05 11:29
 */
public class ApiVersion {
    public static final String Version1_0 = "/api/v1.0";      // v1.0 版本
    public static final String Version1_0 = "/";      // v1.0 版本
}

+ 2 - 1
common/commons-ehr-constants/src/main/java/com/yihu/ehr/constants/ApiVersion.java

@ -10,5 +10,6 @@ package com.yihu.ehr.constants;
 * @created 2015.11.05 11:29
 */
public class ApiVersion {
    public static final String Version1_0 = "/api/v1.0";      // v1.0 版本
//    public static final String Version1_0 = "/api/v1.0";      // v1.0 版本
    public static final String Version1_0 = "/";      // v1.0 版本
}

+ 82 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/config/ActiveMQConfig.java

@ -0,0 +1,82 @@
package com.yihu.jw.basic.config;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.config.SimpleJmsListenerContainerFactory;
import org.springframework.jms.connection.CachingConnectionFactory;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.ConnectionFactory;
/**
 * Created by chenweida on 2017/9/9.
 * 生产者配置
 */
@EnableJms
@Configuration
public class ActiveMQConfig {
    @Value("${activemq.username}")
    private String username;
    @Value("${activemq.password}")
    private String password;
    @Value("${activemq.url}")
    private String url;
    @Bean
    public ActiveMQConnectionFactory activeMQConnectionFactory() {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(username, password, url);
        //设置异步发送
        activeMQConnectionFactory.setUseAsyncSend(true);
        return activeMQConnectionFactory;
    }
    /**
     * 缓存session链接
     */
    @Bean
    @Primary
    public CachingConnectionFactory CachingConnectionFactory() {
        CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
        //目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory
        cachingConnectionFactory.setTargetConnectionFactory(activeMQConnectionFactory());
        //Session缓存数量,这里属性也可以直接在这里配置
        cachingConnectionFactory.setSessionCacheSize(100);
        return cachingConnectionFactory;
    }
    @Bean
    public JmsTemplate jmsTemplate() {
        JmsTemplate jmsTemplate = new JmsTemplate();
        jmsTemplate.setConnectionFactory( CachingConnectionFactory());
        return jmsTemplate;
    }
    @Bean
    public JmsMessagingTemplate jmsMessageTemplate(){
        return new JmsMessagingTemplate(CachingConnectionFactory());
    }
    // 在Queue模式中,对消息的监听需要对containerFactory进行配置
    @Bean("queueListener")
    public JmsListenerContainerFactory<?> queueJmsListenerContainerFactory(ConnectionFactory connectionFactory){
        SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(false);
        return factory;
    }
    //在Topic模式中,对消息的监听需要对containerFactory进行配置
    @Bean("topicListener")
    public JmsListenerContainerFactory<?> topicJmsListenerContainerFactory(ConnectionFactory connectionFactory){
        SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(true);
        return factory;
    }
}

+ 54 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/config/AsyncConfig.java

@ -0,0 +1,54 @@
package com.yihu.jw.basic.config;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
/**
 * Created by chenweida on 2016.10.18.
 * 启用多綫程
 */
@Configuration
@EnableAsync
public class AsyncConfig {
    /**
     * 如果池中的实际线程数小于corePoolSize,无论是否其中有空闲的线程,都会给新的任务产生新的线程
     */
    private int corePoolSize = 5;
    /**
     * 如果池中的线程数=maximumPoolSize,则有空闲线程使用空闲线程,否则新任务放入queueCapacity.
     * 设定 比 系统native thread个数要大的话,会优先抛出Java.lang.OutOfMemoryError: unable to create new native thread
     */
    private int maxPoolSize = 10;
    /**
     * 缓冲队列大小
     */
    private int queueCapacity = 100;
    /**
     * 线程池维护线程所允许的空闲时间  秒
     */
    private int keepAliveSeconds = 300;
    @Bean
    public Executor wlyyExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setKeepAliveSeconds(keepAliveSeconds);
        /** Reject策略预定义有四种:
         (1)ThreadPoolExecutor.AbortPolicy策略,是默认的策略,处理程序遭到拒绝将抛出运行时 RejectedExecutionException。
         (2)ThreadPoolExecutor.CallerRunsPolicy策略 ,调用者的线程会执行该任务,如果执行器已关闭,则丢弃.
         (3)ThreadPoolExecutor.DiscardPolicy策略,不能执行的任务将被丢弃.
         (4)ThreadPoolExecutor.DiscardOldestPolicy策略,如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程).
         */
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}

+ 72 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/redis/controler/ActiveMQEndpoint.java

@ -0,0 +1,72 @@
package com.yihu.jw.basic.redis.controler;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by yeshijie on 2022/9/15.
 */
@RestController
@Api( tags = {"ActiveMQ--消息队列接口"})
public class ActiveMQEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;
    @PostMapping("/queue/test")
    public String sendQueue(String str,String queue) {
        this.sendMessage(queue, str);
        return "success";
    }
    @PostMapping("/topic/test")
    public String sendTopic(String str,String topic) {
        jmsMessagingTemplate.convertAndSend(new ActiveMQTopic(topic), str);
        return "success";
    }
    // 发送消息,destination是发送到的队列,message是待发送的消息
    private void sendMessage(String queue, final String message){
        jmsMessagingTemplate.convertAndSend(queue, message);
    }
    //queue模式的消费者
    @JmsListener(destination="queue1", containerFactory="queueListener")
    public void readActiveQueue1(String message) {
        System.out.println("queue1接受到:" + message);
    }
    //queue模式的消费者
    @JmsListener(destination="queue2", containerFactory="queueListener")
    public void readActiveQueue2(String message) {
        System.out.println("queue2接受到:" + message);
    }
    //queue模式的消费者
    @JmsListener(destination="topic1", containerFactory="queueListener")
    public void readActiveQueue3(String message) {
        System.out.println("queue3接受到:" + message);
    }
    //topic模式的消费者
    @JmsListener(destination="topic1", containerFactory="topicListener")
    public void readActiveTopic1(String message) {
        System.out.println("topic1接受到:" + message);
    }
    //topic模式的消费者
    @JmsListener(destination="topic2", containerFactory="topicListener")
    public void readActiveTopic2(String message) {
        System.out.println("topic2接受到:" + message);
    }
}

+ 7 - 33
svr/svr-basic/src/main/java/com/yihu/jw/basic/standard/service/document/CDADataSetRelationshipManager.java

@ -35,6 +35,7 @@ import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@ -62,8 +63,6 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
    /**
     * 根据关系ID删除关联关系
     *
     * @param ids
     */
    public boolean deleteRelationshipById(String version, String[] ids) {
        delete(BaseCDADataSetRelationship.class,ids, StandardVersion.CDADatasetTable, version);
@ -72,9 +71,6 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
    /**
     * 同时删除多个时 CDA ID用逗号隔开
     *
     * @param versionCode
     * @param ids
     */
    public boolean deleteDocument(String[] ids,String dataType,String versionCode) throws IOException {
        deleteRelationshipByCdaIds(versionCode,ids);
@ -84,9 +80,6 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
    /**
     * 根据CDAID删除CDA数据集关联关系
     *
     * @param version
     * @param cdaIds
     */
    public void deleteRelationshipByCdaIds(String version, String[] cdaIds) throws IOException {
        List<BaseCDADataSetRelationship> ls = cdaDocumentService.searchPageData(BaseCDADataSetRelationship.class,StandardVersion.CDADatasetTable,version,"cdaId=" + String.join(",", cdaIds),null,null,null);
@ -99,7 +92,6 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
            } else {
                ids += "," + cdaDataSetRelationship.getId();
            }
            //ids += cdaDataSetRelationship.getId();
        }
        deleteByField("id",ids.split(","),StandardVersion.CDADatasetTable,version);
@ -107,13 +99,6 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
    /**
     * 根据CDAID获取关联关系
     *
     * @param entityClass
     * @param filters
     * @param sorts
     * @param size
     * @param page
     * @return
     */
    public List getCDADataSetRelationships(Class entityClass,String version, String filters, String sorts, Integer size, Integer page) {
@ -269,10 +254,7 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
        cdaDocument.setSchema(filePath);
        cdaDocument.setVersionCode(versionCode);
        Result result = cdaDocumentService.modify(versionCode, cdaDocument);
        if(result.isSuccessFlg()){
            return true;
        }
        return false;
        return result.isSuccessFlg();
    }
    public CDADocument saveCdaInfo(String cdaDocumentJsonData) throws Exception {
@ -329,20 +311,12 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
                " 1 = 1 " +
                "AND scdsr.cda_id = '" + cdaId + "' " +
                "AND scdsr.dataset_id = sds.id";
        RowMapper rowMapper = (RowMapper) BeanPropertyRowMapper.newInstance(MCdaDataSet.class);
        return this.jdbcTemplate.query(sql, rowMapper);
        return this.jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(MCdaDataSet.class));
    }
    /**
     * 根据CDA Id 和 版本编码 生成CDA文档
     * @param cdaId
     * @param versionCode
     * @return
     * @throws TransformerException
     * @throws ParserConfigurationException
     * @throws FileNotFoundException
     * @throws UnsupportedEncodingException
     */
    public boolean createCDASchemaFile(String cdaId, String versionCode) throws Exception {
        List<CDADataSetRelationship> relationshipsList = getCDADataSetRelationshipByCDAId(CDADataSetRelationship.class,versionCode,cdaId);
@ -377,11 +351,11 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
            //获取数据元
            List<StdMetaDataModel> metaDatas = metaDataService.searchVersionData(StdMetaDataModel.class,StandardVersion.MetaDataTable,versionCode,"dataSetId="+dataSet.getId());
            for (int j = 0; j < metaDatas.size(); j++) {
            for (StdMetaDataModel metaData : metaDatas) {
                Element rowEle = doc.createElement("xs:element");
                rowEle.setAttribute("code", metaDatas.get(j).getCode());
                rowEle.setAttribute("code", metaData.getCode());
                String strColumnType = StringUtils.isEmpty(metaDatas.get(j).getColumnType()) ? "VARCHAR" : metaDatas.get(j).getColumnType();
                String strColumnType = StringUtils.isEmpty(metaData.getColumnType()) ? "VARCHAR" : metaData.getColumnType();
                rowEle.setAttribute("type", "xs:" + strColumnType);
                rowSet.appendChild(rowEle);
@ -400,7 +374,7 @@ public class CDADataSetRelationshipManager extends SQLGeneralDAO {
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");//设置文档的换行与缩进
        OutputStreamWriter pw = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
        OutputStreamWriter pw = new OutputStreamWriter(new FileOutputStream(fileName), StandardCharsets.UTF_8);
        StreamResult result = new StreamResult(pw);
        transformer.transform(source, result);
    }