zdm 5 years ago
parent
commit
0e1e16b086

+ 26 - 0
business/base-service/pom.xml

@ -79,5 +79,31 @@
            <artifactId>common-util</artifactId>
        </dependency>
        <!--   poi xml导入导出工具 end -->
        <!-- mq消息 start -->
        <dependency>
            <groupId>com.his.hesb</groupId>
            <artifactId>mqSdk</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
        </dependency>
        <!-- mq消息 end -->
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src</directory>
                <!-- 此配置不可缺,否则读取不到根目录下的配置文件 -->
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

+ 451 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java

@ -0,0 +1,451 @@
package com.yihu.jw.hospital.prescription.service.entrance;
import com.yihu.jw.hospital.prescription.service.entrance.util.MqSdkUtil;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 互联网医院对外服务
 * Created by zdm on 2019/5/20.
 */
@Service
public class EntranceService {
    //门诊余额查询
    private static String BS15017="BS15017";
    //门诊就诊卡列表
    private static String BS15018="BS15018";
    //门诊处方信息(所有处方)
    private static String BS16017="BS16017";
    //患者门诊就诊记录
    private static String BS30025="BS30025";
    //医院药品字典
    private static String MS30001="MS30001";
    //门诊给药方式接口
    private static String BS10110="BS10110";
    //线上挂号接口
    private static String BS10111="BS10111";
    //线上处方接口
    private static String BS10112="BS10112";
    //医生挂号权限查询接口
    private static String BS10114="BS10114";
    //科室字典
    private static String MS02001="MS02001";
    //号别字典接口
    private static String MS02013="MS02013";
    //医院频次字典表
    private static String MS30012="MS30012";
    /**
     * 查询门诊余额
     * @return
     * @throws Exception
     */
    public String qutpatientBalance(String cardNo) throws Exception {
        JSONObject msg=new JSONObject();
        msg.put("endNum","20000");
        msg.put("Msg", new net.sf.json.JSONArray() );
        JSONObject query=new JSONObject();
        query.put("@compy","=");
        query.put("@item","CARD_NO");
        query.put("@splice","and");
        query.put("@value",cardNo);
        msg.put("query",query);
        msg.put("startNum",1);
        List<String> stringList=new ArrayList<>();
        stringList.add(cardNo);
        //获取消息
        String resp = MqSdkUtil.putReqAndGetResp(msg.toString(), BS15017, "1",stringList);
        //解析
        resp= MqSdkUtil.xml2jsonObject(resp);
        return resp;
    }
    /**
     * 门诊就诊卡列表
     * @param SOCIAL_NO 身份证号
     * @param CARD_NO 就诊卡号
     * @return
     * @throws Exception
     */
    public String BS15018(String SOCIAL_NO, String CARD_NO) throws Exception {
        String fid=BS15018;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg/>");
        if(StringUtils.isNotBlank(SOCIAL_NO)){
            sbs.append("<query compy=\"=\" item=\"SOCIAL_NO\" splice=\"and\" value=\"'"+SOCIAL_NO+"'\"/>");
        }
        if(StringUtils.isNotBlank(CARD_NO)){
            sbs.append("<query compy=\"=\" item=\"card_no\" splice=\"and\" value=\"'"+CARD_NO+"'\"/>");
        }
        //查询信息结束
        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     * 门诊处方信息(所有处方)
     * @param REGISTER_SN 流水号
     * @param PAT_NO 病人id
     * @return
     * @throws Exception
     */
    public String BS16017(String REGISTER_SN,String PAT_NO,String ADM_NO) throws Exception {
        String fid=BS16017;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg/>");
        if(StringUtils.isNotBlank(REGISTER_SN)){
            sbs.append("<query compy=\"=\" item=\"REGISTER_SN\" splice=\"and\" value=\"'"+REGISTER_SN+"'\"/>");
        }
        if(StringUtils.isNotBlank(PAT_NO)) {
            sbs.append("<query compy=\"=\" item=\"PAT_NO\" splice=\"and\" value=\"'" + PAT_NO + "'\"/>");
        }
        if(StringUtils.isNotBlank(ADM_NO)) {
            sbs.append("<query compy=\"=\" item=\"ADM_NO\" splice=\"and\" value=\"'" + ADM_NO + "'\"/>");
        }
        //查询信息结束
        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  患者门诊就诊记录
     *  使用时间查询的话,很可能会超时。时间没有索引,所以超时时间需要加长
     * @return
     * @throws Exception
     */
    public String BS30025(String PAT_NO,String ADM_NO,String REGISTER_SN,String PAT_CARDNO,String social_no) throws Exception {
        String fid=BS30025;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><onceFlag>1</onceFlag><startNum>1</startNum><endNum>50000</endNum><Msg/>");
        if(StringUtils.isNotBlank(PAT_NO)){
            sbs.append("<query compy=\"=\" item=\"PAT_NO\" splice=\"and\" value=\"'"+PAT_NO+"'\"/>");
        }
        if(StringUtils.isNotBlank(ADM_NO)){
            sbs.append("<query compy=\"=\" item=\"ADM_NO\" splice=\"and\" value=\"'"+ADM_NO+"'\"/>");
        }
        if(StringUtils.isNotBlank(REGISTER_SN)){
            sbs.append("<query compy=\"=\" item=\"REGISTER_SN\" splice=\"and\" value=\"'"+REGISTER_SN+"'\"/>");
        }
        if(StringUtils.isNotBlank(PAT_CARDNO)){
            sbs.append("<query compy=\"=\" item=\"PAT_CARDNO\" splice=\"and\" value=\"'"+PAT_CARDNO+"'\"/>");
        }
        if(StringUtils.isNotBlank(social_no)){
            sbs.append("<query compy=\"=\" item=\"social_no\" splice=\"and\" value=\"'"+social_no+"'\"/>");
        }
        //查询信息结束
        sbs.append("</MsgInfo></ESBEntry>");
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  医院药品字典(所有字典一次返回)
     * @return
     * @throws Exception
     */
    public String MS30001() throws Exception {
        String fid=MS30001;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>1000</endNum><Msg></Msg><startNum>1</startNum></MsgInfo></ESBEntry>");
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  医院药品字典(所有字典一次返回)
     * @return
     * @throws Exception
     */
    public String MS53001(String charge_code,String py_code,String stock_amount,String visible_flag) throws Exception {
        String fid="MS53001";
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>10</endNum><Msg/>");
        if(StringUtils.isNotBlank(charge_code)){
            sbs.append("<query compy=\"=\" item=\"charge_code\" splice=\"and\" value=\"'"+charge_code+"'\"/>");
        }
        if(StringUtils.isNotBlank(py_code)){
            sbs.append("<query compy=\"=\" item=\"py_code\" splice=\"and\" value=\"'"+py_code+"'\"/>");
        }
        if(StringUtils.isNotBlank(stock_amount)){
            sbs.append("<query compy=\"&gt;=\" item=\"stock_amount\" splice=\"and\" value=\"'"+stock_amount+"'\"/>");
        }
        if(StringUtils.isNotBlank(visible_flag)){
            sbs.append("<query compy=\"=\" item=\"visible_flag\" splice=\"and\" value=\"'"+visible_flag+"'\"/>");
        }
        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
        //<ESBEntry><AccessControl><Fid>MS53001</Fid><UserName>jkzl</UserName><Password>123456</Password></AccessControl>
        // <MessageHeader><Fid>MS53001</Fid><MsgDate>2018-10-09 16:52:39</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>
        // <MsgInfo><endNum>20000</endNum><Msg/>
        // <query compy="=" item="charge_code" splice="and" value="'00659'"/>
        // <startNum>1</startNum></MsgInfo></ESBEntry>
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  门诊给药方式
     * @return
     * @throws Exception
     */
    public String BS10110(String supply_code) throws Exception {
        String fid=BS10110;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg/>");
        if(StringUtils.isNotBlank(supply_code)){
            sbs.append("<query compy=\"=\" item=\"supply_code\" splice=\"and\" value=\"'"+supply_code+"'\"/>");
        }
        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
        //<ESBEntry><AccessControl><Fid>BS10110</Fid><UserName>jkzl</UserName><Password>123456</Password></AccessControl>
        // <MessageHeader><Fid>BS10110</Fid><MsgDate>2018-10-09 16:52:39</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>
        // <MsgInfo><endNum>20000</endNum><Msg/><query compy="=" item="supply_code" splice="and" value="'002'"/><startNum>1</startNum></MsgInfo></ESBEntry>
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  线上挂号
     *  @param card_no 卡号
     *  @param doctor 医生工号
     *  @param dept 科室编码
     *  @param charge_type 号别
     *  @param win_no 分部号
     * @return
     * @throws Exception
     */
    public String BS10111(String card_no,String doctor,String dept,String charge_type,String win_no) throws Exception {
        String fid=BS10111;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg><![CDATA[<?xml version=\"1.0\" encoding=\"utf-8\"?><root>");
        sbs.append("<resquest card_no=\""+card_no+"\" doctor=\""+doctor+"\" dept=\""+dept+"\" charge_type=\""+charge_type+"\"   win_no=\""+win_no+"\" >");
        sbs.append("</resquest></root>]]></Msg><startNum>1</startNum></MsgInfo></ESBEntry>");
        //<ESBEntry><AccessControl><Fid>BS10111</Fid><UserName>jkzl</UserName><Password>123456</Password></AccessControl>
        // <MessageHeader><Fid>BS10111</Fid><MsgDate>2018-10-09 16:52:39</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>
        // <MsgInfo><endNum>20000</endNum><Msg>
        // <![CDATA[<?xml version="1.0" encoding="utf-8"?><root>
        // <resquest card_no="DB8687139" doctor="1142" dept="1030000" charge_type="01"   win_no="6" ></resquest></root>]]></Msg><startNum>1</startNum></MsgInfo></ESBEntry>
        //超时等待时间150s
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  线上处方
     *  @param card_no 卡号
     *  @param doctor 医生工号
     *  @param dept 科室编码
     *  @param charge_code 号别
     *  @param win_no 分部号
     * @return
     * @throws Exception
     */
    public String BS10112(String card_no,String doctor,String dept,String charge_code,String win_no,String charge_flag,String quantity, String serial_no,String group_no,
                          String serial,String icd_code,String diag_two,String diag_three,String diag_four,String diag_five,String dosage,String unit,String usage,String supply_code, String days,String frequency) throws Exception {
        String fid=BS10112;
        //多个request? 诊断2到诊断4
        StringBuffer sbs=new StringBuffer();
        sbs.append("<ESBEntry><AccessControl><Fid>BS10112</Fid><UserName>jkzl</UserName><Password>123456</Password></AccessControl>");
        sbs.append("<MessageHeader><Fid>BS10112</Fid><MsgDate>2018-10-09 16:52:39</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg><![CDATA[<?xml version=\"1.0\" encoding=\"utf-8\"?><root>");
        sbs.append("<resquest card_no=\""+card_no+"\" doctor=\""+doctor+"\" dept=\""+dept+"\" charge_code=\""+charge_code+"\" win_no=\""+win_no+"\" charge_flag=\""+charge_flag+"\" ");
        sbs.append("quantity=\""+quantity+"\"  serial_no=\""+serial_no+"\"  group_no=\""+group_no+"\"   serial=\""+serial+"\"   icd_code=\""+icd_code/*+"\" dosage=\""+dosage+"\" unit=\""+unit+"\" "*/);
        sbs.append(/*"usage=\""+usage+"\" supply_code=\""+supply_code+"\" days=\""+days+"\" frequency=\""+frequency+*/"\" days=\""+days+"\" frequency=\""+frequency+"\"/>");
      /*  多个处方明细,使用多个 request
       sbs.append("<resquest card_no=\"DB8687139\" doctor=\"1142\" dept=\"1030000\" charge_code=\"05504\" win_no=\"6\" charge_flag=\"1\" ");
        sbs.append("quantity=\"1\"  serial_no=\"46674523\"  group_no=\"71\"   serial=\"01\"   icd_code=\"Z00.001\" dosage=\"1\" unit=\"15\" ");
        sbs.append("usage=\"bid\" supply_code=\"001\" days=\"34\" frequency=\"?T×é\"/>");*/
        sbs.append("</root>]]></Msg><startNum>1</startNum></MsgInfo></ESBEntry>");
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  医生挂号权限查询接口
     *  @param doctor_code 医生工号
     *  @param dept 科室编码
     *  @param charge_type 号别
     *  @param win_no 分部号
     * @return
     * @throws Exception
     */
    public String BS10114(String doctor_code,String dept,String charge_type,String win_no) throws Exception {
        String fid=BS10114;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg/>");
        if(StringUtils.isNotBlank(doctor_code)){
            sbs.append("<query compy=\"=\" item=\"doctor_code\" splice=\"and\" value=\"'"+doctor_code+"'\"/>");
        }
        if(StringUtils.isNotBlank(dept)){
            sbs.append("<query compy=\"=\" item=\"dept\" splice=\"and\" value=\"'"+dept+"'\"/>");
        }
        if(StringUtils.isNotBlank(charge_type)){
            sbs.append("<query compy=\"=\" item=\"charge_type\" splice=\"and\" value=\"'"+charge_type+"'\"/>");
        }
        if(StringUtils.isNotBlank(win_no)){
            sbs.append("<query compy=\"=\" item=\"win_no\" splice=\"and\" value=\"'"+win_no+"'\"/>");
        }
        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
        //<ESBEntry><AccessControl><Fid>BS10114</Fid><UserName>jkzl</UserName><Password>123456</Password></AccessControl>
        // <MessageHeader><Fid>BS10114</Fid><MsgDate>2018-10-09 16:52:39</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>
        // <MsgInfo><endNum>20000</endNum><Msg/><query compy="=" item="doctor_code" splice="and" value="'0791'"/> <startNum>1</startNum></MsgInfo></ESBEntry>
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  科室字典
     * @return
     * @throws Exception
     */
    public String MS02001() throws Exception {
        String fid=MS02001;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>1000</endNum><Msg></Msg>");
        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
        //<ESBEntry><AccessControl><Fid>MS02001</Fid><UserName>rjss</UserName><Password>123456</Password></AccessControl>
        // <MessageHeader><Fid>MS02001</Fid><MsgDate>2018-06-20 09:47:14</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>
        // <MsgInfo><endNum>1000</endNum><Msg></Msg><startNum>1</startNum></MsgInfo></ESBEntry>
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  号别字典
     * @return
     * @throws Exception
     */
    public String MS02013() throws Exception {
        String fid=MS02013;
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg/><startNum>1</startNum></MsgInfo></ESBEntry>");
        //<ESBEntry><AccessControl><Fid>MS02001</Fid><UserName>rjss</UserName><Password>123456</Password></AccessControl>
        // <MessageHeader><Fid>MS02001</Fid><MsgDate>2018-06-20 09:47:14</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>
        // <MsgInfo><endNum>20000</endNum><Msg/><startNum>1</startNum></MsgInfo></ESBEntry>
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     *  医院频次字典表
     * @return
     * @throws Exception
     */
    public String MS30012() throws Exception {
        String fid="MS30012";
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>20000</endNum><Msg/><startNum>1</startNum></MsgInfo></ESBEntry>");
        //<ESBEntry><AccessControl><Fid>MS30012</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>
        // <MessageHeader><Fid>MS30012</Fid><MsgDate>2018-06-20 09:47:14</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>
        // <MsgInfo><endNum>1000</endNum><Msg></Msg><startNum>1</startNum></MsgInfo></ESBEntry>
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
    /**
     * 诊断编码
     * @return
     * @throws Exception
     */
    public String MS25001(String py_code) throws Exception {
        String fid="MS25001";
        StringBuffer sbs= new StringBuffer();
        //AccessControl :用户、密码、服务id
        sbs.append("<ESBEntry><AccessControl><Fid>"+fid+"</Fid><UserName>JKZL</UserName><Password>123456</Password></AccessControl>");
        //MessageHeader :固定值 消费方系统编号 S60,提供方系统编号 S01
        sbs.append("<MessageHeader><Fid>"+fid+"</Fid><MsgDate>"+ DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS)+"</MsgDate><SourceSysCode>S60</SourceSysCode><TargetSysCode>S01</TargetSysCode></MessageHeader>");
        //查询信息拼接
        sbs.append("<MsgInfo><endNum>1000</endNum><Msg/>");
        if(StringUtils.isNotBlank(py_code)){
            sbs.append("<query compy=\"=\" item=\"py_code\" splice=\"and\" value=\"'"+py_code+"'\"/>");
        }
        sbs.append("<startNum>1</startNum></MsgInfo></ESBEntry>");
        String resp = MqSdkUtil.putReqAndGetRespByQueryStr(sbs.toString(), fid );
        resp= MqSdkUtil.xml2jsonArrayRootRow(resp);
        return resp;
    }
}

+ 359 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/util/MqSdkUtil.java

@ -0,0 +1,359 @@
package com.yihu.jw.hospital.prescription.service.entrance.util;
import com.ibm.mq.MQQueueManager;
import com.yihu.jw.util.date.DateUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
import org.slf4j.Logger;
import com.ewell.mq.queue.QueueTools;
import com.ibm.mq.MQException;
import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Date;
import java.util.List;
/**
 * Created by zdm on 2019/5/16.
 */
public class MqSdkUtil {
    private static final Logger log = LoggerFactory.getLogger(MqSdkUtil.class);
    //    @Value("${ftp.pwd}")
    private static String gateKeeper="QMGR.S60";
    private QueueTools queueTools;
    private MQQueueManager queueManager;
    /**
     * 通过工具类获取队列管理器实例。connect函数的参数为配置文件中队列管理器配置标签名。该实例如果不调用方法进行断开操作可长期保持连接
     * gateKeeper
     *
     * @return
     */
    public MQQueueManager getMQQueueManager(String gateKeeper) throws Exception {
        QueueTools queueTools = new QueueTools();
        MQQueueManager queueManager = null;
        queueManager = queueTools.connect(gateKeeper);
        return queueManager;
    }
    /**
     * 发送请求消息,保存MsgId
     *
     * @return
     * @throws Exception
     */
    public String putMsg(String reqMsg, String xmlNodeName) throws Exception {
        String msgId = queueTools.putMsg(queueManager, xmlNodeName, reqMsg);
        return msgId;
    }
    /**
     * 根据发送时的MsgId提取请求(使用get-wait短期监听提取方式,可自定义超时时间)
     *
     * @param xmlNodeName
     * @param msgId
     * @return
     * @throws Exception
     */
    public String getResp(String xmlNodeName, String msgId) throws Exception {
        //响应数据
        String respMsg = queueTools.getMsgById(queueManager, xmlNodeName, msgId, 3);
        return respMsg;
    }
    /**
     * 返回的响应数据中会包含此次请求的返回数据量和当前消息在返回消息中的顺序编号,进行判断是否还要继续获取
     * @param reqMsg 请求的数据
     * @param xmlNodeName 获取请求节点
     * @param parsingWay 解析方式:1为单个对象,2为数组
     * @param stringList 需要转的字符串
     */
    public static String putReqAndGetResp(String reqMsg,String xmlNodeName,String parsingWay, List<String> stringList) throws Exception{
        QueueTools queueTools = new QueueTools();
        // 队列管理器实例
        MQQueueManager queueManager = null;
        // 消息Id
        String msgId = null;
        // 响应数据
        String respMsg = null;
        try {
            // 连接MQ,获取队列管理器实例,该实例如果不调用方法进行断开操作可长期保持连接。连接函数会自动读取配置文件标签名为“QMGR.SXX”下的配置信息进行连接。,
            queueManager = queueTools.connect(gateKeeper);
            // 发送请求消息
            msgId = queueTools.putMsg(queueManager, xmlNodeName, json2xml(reqMsg,xmlNodeName,"JKZL","123456","S60","S01",stringList));
            // 获取响应消息
            respMsg = queueTools.getMsgById(queueManager, xmlNodeName, msgId, 3);
//            log.info("respMsg==" + respMsg);
            return respMsg;
        } catch (MQException e) {
            // 2033表示队列中没有消息
            if (e.reasonCode == 2033) {
            } else {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //断开MQ连接
            if (null != queueManager) {
                try {
                    queueManager.disconnect();
                } catch (MQException e) {
                    e.printStackTrace();
                }
            }
        }
        return "";
    }
    /**
     * 返回的响应数据中会包含此次请求的返回数据量和当前消息在返回消息中的顺序编号,进行判断是否还要继续获取
     * 请求值为前端拼接的xml字符串
     * @param reqMsg 请求的数据
     * @param xmlNodeName 获取请求节点
     */
    public static String putReqAndGetRespByQueryStr(String reqMsg,String xmlNodeName) throws Exception{
        QueueTools queueTools = new QueueTools();
        // 队列管理器实例
        MQQueueManager queueManager = null;
        // 消息Id
        String msgId = null;
        // 响应数据
        String respMsg = null;
        try {
            // 连接MQ,获取队列管理器实例,该实例如果不调用方法进行断开操作可长期保持连接。连接函数会自动读取配置文件标签名为“QMGR.SXX”下的配置信息进行连接。,
            queueManager = queueTools.connect(gateKeeper);
            // 发送请求消息
            msgId = queueTools.putMsg(queueManager, xmlNodeName, reqMsg);
            // 获取响应消息
            respMsg = queueTools.getMsgById(queueManager, xmlNodeName, msgId, 150);
            return respMsg;
        } catch (MQException e) {
            // 2033表示队列中没有消息
            if (e.reasonCode == 2033) {
            } else {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //断开MQ连接
            if (null != queueManager) {
                try {
                    queueManager.disconnect();
                } catch (MQException e) {
                    e.printStackTrace();
                }
            }
        }
        return "";
    }
    //=======================================================封装xml=============================================================================================
    /**
     * JSON(数组)字符串<STRONG>转换</STRONG>成XML字符串
     *@param fid 服务id
     * @param passWord
     * @param userName
     * @param sourceSysCode
     * @param targetSysCode
     * @param jsonString
     * @return
     */
    public static String json2xml(String jsonString,String fid,String passWord,String userName,String sourceSysCode,String targetSysCode, List<String> stringList) {
        XMLSerializer xmlSerializer = new XMLSerializer();
        //是否展示类型
        xmlSerializer.setObjectName("ESBEntry");
        xmlSerializer.setTypeHintsEnabled(false);
        xmlSerializer.setSkipNamespaces(true);
        JSONObject jsonObject=new JSONObject();
        JSONObject accessControl=new JSONObject();
        accessControl.put("Fid",fid);
        accessControl.put("Password",passWord);
        accessControl.put("UserName",userName);
        jsonObject.put("AccessControl",accessControl);
        JSONObject messageHeader=new JSONObject();
        messageHeader.put("Fid",fid);
        messageHeader.put("MsgDate", DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD_HH_MM_SS));
        messageHeader.put("SourceSysCode",sourceSysCode);
        messageHeader.put("TargetSysCode",targetSysCode);
        jsonObject.put("MessageHeader",messageHeader);
        jsonObject.put("MsgInfo",JSONSerializer.toJSON(jsonString));
//{"Fid":"BS15017","Password":[],"UserName":[]},"MessageHeader":{"Fid":"BS15017","MsgDate":"2018-11-21 13:20:40","SourceSysCode":"S60","TargetSysCode":"S01"},"MsgInfo":{"endNum":"20000","Msg":[],"query":{"@compy":"=","@item":"CARD_NO","@splice":"and","@value":"D26818411"},"startNum":"1"}}
        String root="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
        String xmlString=xmlSerializer.write(jsonObject);
        try {
            for (String str:stringList){
                xmlString=xmlString.replace(str+"","'"+str+"'");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return xmlString.replace(root,"");
    }
    //=================================================================解析xml=======================================================================
    /**
     * 将xml字符串<STRONG>转换</STRONG>为JSON字符串
     * XML中Msg为数组
     *
     * @param xmlString xml字符串
     * @return JSON<STRONG>对象</STRONG>
     */
    public static String xml2jsonArray(String xmlString) throws Exception {
        XMLSerializer xmlSerializer = new XMLSerializer();
        JSON json = xmlSerializer.read(xmlString);
        Object jsonObject = ((net.sf.json.JSONObject) json).get("MsgInfo");
        if (null != jsonObject) {
            net.sf.json.JSONObject jsonObject1 = (net.sf.json.JSONObject) jsonObject;
            //获取到数组中的CDATA进行再解析
            net.sf.json.JSONArray jsonArray = (net.sf.json.JSONArray) jsonObject1.get("Msg");
            net.sf.json.JSONArray jsonArray1 = new net.sf.json.JSONArray();
            for (Object object : jsonArray) {
                JSON jsonsub = xmlSerializer.read(object.toString());
                jsonArray1.add(((net.sf.json.JSONObject) jsonsub).get("row"));
            }
            //重新封装到json中
            ((net.sf.json.JSONObject) json).element("MsgInfo", jsonArray1);
        }
        return getMsgInfo(json);
    }
    /**
     * 将xml字符串<STRONG>转换</STRONG>为JSON字符串,msg的根节点为row
     * XML中Msg为数组
     *
     * @param xmlString xml字符串
     * @return JSON<STRONG>对象</STRONG>
     */
    public static String xml2jsonArrayRootRow(String xmlString) throws Exception {
        XMLSerializer xmlSerializer = new XMLSerializer();
        JSON json = xmlSerializer.read(xmlString);
        Object retInfo=  ((JSONObject) json).get("RetInfo");
        Object retCode= ((JSONObject) retInfo).get("RetCode");
        if(retCode.equals("1")){
            //成功
            Object jsonObject = ((net.sf.json.JSONObject) json).get("MsgInfo");
            net.sf.json.JSONArray jsonArray1 = new net.sf.json.JSONArray();
            if (null != jsonObject) {
                net.sf.json.JSONObject jsonObject1 = (net.sf.json.JSONObject) jsonObject;
                Object objectMsg=jsonObject1.get("Msg");
                if(objectMsg instanceof String){
                    JSON jsonsub = xmlSerializer.read(jsonObject1.get("Msg").toString());
                    jsonArray1.add(jsonsub);
                    //重新封装到json中
                    ((net.sf.json.JSONObject) json).element("MsgInfo", jsonArray1);
                }else if(objectMsg instanceof JSONArray){
                    //获取到数组中的CDATA进行再解析
                    net.sf.json.JSONArray jsonArray = (net.sf.json.JSONArray) jsonObject1.get("Msg");
                    for (Object object : jsonArray) {
                        JSON jsonsub = xmlSerializer.read(object.toString());
                        jsonArray1.add(jsonsub);
                    }
                    //重新封装到json中
                    ((net.sf.json.JSONObject) json).element("MsgInfo", jsonArray1);
                }
            }
        }else if(retCode.equals("0")){
            //重新封装到json中
            ((net.sf.json.JSONObject) json).element("MsgInfo",   ((JSONObject) retInfo).get("RetCon"));
        }
        return getMsgInfo(json);
    }
 /*   *//**
     * 将xml字符串<STRONG>转换</STRONG>为JSON字符串,msg的根节点为row
     * XML中Msg为数组
     *
     * @param xmlString xml字符串
     * @return JSON<STRONG>对象</STRONG>
     *//*
    public static String xml2jsonArrayByMsg(String xmlString) throws Exception {
        XMLSerializer xmlSerializer = new XMLSerializer();
        JSON json = xmlSerializer.read(xmlString);
        Object retInfo=  ((JSONObject) json).get("RetInfo");
        Object retCode= ((JSONObject) retInfo).get("RetCode");
        if(retCode.equals("1")) {
            //成功
            Object jsonObject = ((net.sf.json.JSONObject) json).get("MsgInfo");
            net.sf.json.JSONArray jsonArray1 = new net.sf.json.JSONArray();
            if (null != jsonObject) {
                net.sf.json.JSONObject jsonObject1 = (net.sf.json.JSONObject) jsonObject;
                Object objectMsg=jsonObject1.get("Msg");
                if(objectMsg instanceof String){
                    JSON jsonsub = xmlSerializer.read(jsonObject1.get("Msg").toString());
                    jsonArray1.add(jsonsub);
                    //重新封装到json中
                    ((net.sf.json.JSONObject) json).element("MsgInfo", jsonArray1);
                }else if(objectMsg instanceof JSONArray){
                    //获取到数组中的CDATA进行再解析
                    net.sf.json.JSONArray jsonArray = (net.sf.json.JSONArray) jsonObject1.get("Msg");
                    for (Object object : jsonArray) {
                        JSON jsonsub = xmlSerializer.read(object.toString());
                        jsonArray1.add(jsonsub);
                    }
                    //重新封装到json中
                    ((net.sf.json.JSONObject) json).element("MsgInfo", jsonArray1);
                }
            }
        }else if(retCode.equals("0")){
            //重新封装到json中
            ((net.sf.json.JSONObject) json).element("MsgInfo",   ((JSONObject) retInfo).get("RetCon"));
        }
        return getMsgInfo(json);
    }*/
    /**
     * 将xml字符串<STRONG>转换</STRONG>为JSON字符串
     * 其中Msg为一个对象
     *
     * @param xmlString xml字符串
     * @return JSON<STRONG>对象</STRONG>
     */
    public static String xml2jsonObject(String xmlString) throws Exception {
        XMLSerializer xmlSerializer = new XMLSerializer();
        JSON json = xmlSerializer.read(xmlString);
        Object jsonObject = ((net.sf.json.JSONObject) json).get("MsgInfo");
        if (null != jsonObject) {
            net.sf.json.JSONObject jsonObject1 = (net.sf.json.JSONObject) jsonObject;
            //获取到数组中的CDATA进行再解析
            JSON jsonsub = xmlSerializer.read((jsonObject1).get("Msg").toString());
            //重新封装到json中
            ((net.sf.json.JSONObject) jsonObject).element("Msg", jsonsub);
        }
        return getMsgInfo(json);
    }
    /**
     * 获取返参的主体信息
     * @param json
     * @return
     * @throws Exception
     */
    public static String getMsgInfo(JSON json)throws Exception{
        JSONObject jsonObjectBak=new JSONObject();
        Object jsonObject= (( net.sf.json.JSONObject) json).get("RetInfo");
        if(null!=jsonObject) {
            net.sf.json.JSONObject jsonObject1 = (net.sf.json.JSONObject) jsonObject;
            jsonObjectBak.element("code", jsonObject1.get("RetCode").toString());
            jsonObjectBak.element("MsgInfo", ((net.sf.json.JSONObject) json).get("MsgInfo").toString());
            return jsonObjectBak.toString();
        }
        return "";
    }
}

+ 49 - 0
business/base-service/src/mqConfig/esbmq-config.xml

@ -0,0 +1,49 @@
<EWELL>
	<MQCONFIG>
		<!-- 队列管理器配置2,需要连接多个队列管理器时启用-->
		<QMGR.S60>
			<HOSTNAME>192.10.33.116</HOSTNAME>
			<PORT>1560</PORT>
			<QUEUEMANAGER>QMGR.S60</QUEUEMANAGER>
			<CHANNEL>C.S60.C</CHANNEL>
			<CCSID>1381</CCSID>
			<CHARSET>1392</CHARSET>
			<FILEPATH>D:\test</FILEPATH>
			<QUEUES>
				<!--<BS10001_0>EwellQ.S60.BS10001.PUT</BS10001_0>
			 	<BS10001_1>EwellQ.S60.BS10001.GET</BS10001_1>
			 	<BS10002_0>EwellQ.S60.BS10002.PUT</BS10002_0>
			 	<BS10002_1>EwellQ.S60.BS10002.GET</BS10002_1>
			 	<BS10002_2>EwellQ.S60.BS10002.XXX</BS10002_2>-->
				<BS15017_0>EwellQ.S60.BS15017.PUT</BS15017_0>
				<BS15017_1>EwellQ.S60.BS15017.GET</BS15017_1>
				<BS15018_0>EwellQ.S60.BS15018.PUT</BS15018_0>
				<BS15018_1>EwellQ.S60.BS15018.GET</BS15018_1>
				<BS16017_0>EwellQ.S60.BS16017.PUT</BS16017_0>
				<BS16017_1>EwellQ.S60.BS16017.GET</BS16017_1>
				<BS30025_0>EwellQ.S60.BS30025.PUT</BS30025_0>
				<BS30025_1>EwellQ.S60.BS30025.GET</BS30025_1>
				<MS30001_0>EwellQ.S60.MS30001.PUT</MS30001_0>
				<MS30001_1>EwellQ.S60.MS30001.GET</MS30001_1>
				<BS10110_0>EwellQ.S60.BS10110.PUT</BS10110_0>
				<BS10110_1>EwellQ.S60.BS10110.GET</BS10110_1>
				<BS10111_0>EwellQ.S60.BS10111.PUT</BS10111_0>
				<BS10111_1>EwellQ.S60.BS10111.GET</BS10111_1>
				<BS10112_0>EwellQ.S60.BS10112.PUT</BS10112_0>
				<BS10112_1>EwellQ.S60.BS10112.GET</BS10112_1>
				<BS10114_0>EwellQ.S60.BS10114.PUT</BS10114_0>
				<BS10114_1>EwellQ.S60.BS10114.GET</BS10114_1>
				<MS02001_0>EwellQ.S60.MS02001.PUT</MS02001_0>
				<MS02001_1>EwellQ.S60.MS02001.GET</MS02001_1>
				<MS02013_0>EwellQ.S60.MS02013.PUT</MS02013_0>
				<MS02013_1>EwellQ.S60.MS02013.GET</MS02013_1>
				<MS30012_0>EwellQ.S60.MS30012.PUT</MS30012_0>
				<MS30012_1>EwellQ.S60.MS30012.GET</MS30012_1>
				<MS53001_0>EwellQ.S60.MS53001.PUT</MS53001_0>
				<MS53001_1>EwellQ.S60.MS53001.GET</MS53001_1>
				<MS25001_0>EwellQ.S60.MS25001.PUT</MS25001_0>
				<MS25001_1>EwellQ.S60.MS25001.GET</MS25001_1>
			</QUEUES>
		</QMGR.S60>
	</MQCONFIG>
</EWELL>