package open.orca.rest; import java.beans.XMLEncoder; import java.io.*; import java.sql.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.ejb.Singleton; import javax.sql.DataSource; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import open.dolphin.common.OrcaConnect; import open.dolphin.converter.*; import open.dolphin.infomodel.*; import org.codehaus.jackson.map.ObjectMapper; /** * * @author Kazushi Minagawa. Digital Globe, Inc. */ @Singleton @Path("/orca") public class OrcaResource { private static final String RP_KBN_START = "2"; private static final String SHINRYO_KBN_START = "."; private static final int SHINRYO_KBN_LENGTH = 3; private static final int DEFAULT_BUNDLE_NUMBER = 1; private static final String KBN_RP = "220"; private static final String KBN_RAD = "700"; private static final String KBN_GENERAL = "999"; //masuda^ ORCA 4.6対応など private static final String ORCA_DB_VER45 = "040500-1"; private static final String ORCA_DB_VER46 = "040600-1"; private static final String ORCA_DB_VER47 = "040700-1"; private static int HOSP_NUM; private static String DB_VERSION; private static boolean RP_OUT = true; private static final String QUERY_FACILITYID_BY_1001 ="select kanritbl from tbl_syskanri where kanricd='1001'"; private static final String QUERY_TENSU_BY_SHINKU = "select srycd,name,kananame,tensikibetu,ten,nyugaitekkbn,routekkbn,srysyukbn,hospsrykbn,yukostymd,yukoedymd from tbl_tensu where srysyukbn ~ ? and yukostymd<= ? and yukoedymd>=?"; private static final String QUERY_TENSU_BY_NAME = "select srycd,name,kananame,taniname,tensikibetu,ten,nyugaitekkbn,routekkbn,srysyukbn,hospsrykbn,ykzkbn,yakkakjncd,yukostymd,yukoedymd from tbl_tensu where (name ~ ? or kananame ~ ?) and yukostymd<= ? and yukoedymd>=?"; private static final String QUERY_TENSU_BY_1_NAME = "select srycd,name,kananame,taniname,tensikibetu,ten,nyugaitekkbn,routekkbn,srysyukbn,hospsrykbn,ykzkbn,yakkakjncd,yukostymd,yukoedymd from tbl_tensu where (name = ? or kananame = ?) and yukostymd<= ? and yukoedymd>=?"; private static final String QUERY_TENSU_BY_CODE = "select srycd,name,kananame,taniname,tensikibetu,ten,nyugaitekkbn,routekkbn,srysyukbn,hospsrykbn,ykzkbn,yakkakjncd,yukostymd,yukoedymd from tbl_tensu where srycd ~ ? and yukostymd<= ? and yukoedymd>=?"; private static final String QUERY_TENSU_BY_TEN = "select srycd,name,kananame,taniname,tensikibetu,ten,nyugaitekkbn,routekkbn,srysyukbn,hospsrykbn,ykzkbn,yakkakjncd,yukostymd,yukoedymd from tbl_tensu where ten >= ? and ten <= ? and yukostymd<= ? and yukoedymd>=?"; private static final String QUERY_TENSU_BY_TEN2 = "select srycd,name,kananame,taniname,tensikibetu,ten,nyugaitekkbn,routekkbn,srysyukbn,hospsrykbn,ykzkbn,yakkakjncd,yukostymd,yukoedymd from tbl_tensu where ten = ? and yukostymd<= ? and yukoedymd>=?"; private static final String QUERY_GENERAL_NAME_BY_CODE = "select b.srycd,genericname from tbl_tensu b,tbl_genericname c where b.srycd=? and substring(b.yakkakjncd from 1 for 9)=c.yakkakjncd order by b.yukoedymd desc"; // private static final String QUERY_DICEASE_BY_NAME // = "select byomeicd, byomei, byomeikana, icd10, haisiymd from tbl_byomei where (byomei ~ ? or byomeikana ~?) and haisiymd >= ?"; private static final String QUERY_DICEASE_BY_NAME_46 = "select byomeicd, byomei, byomeikana, icd10_1, haisiymd from tbl_byomei where (byomei ~ ? or byomeikana ~?) and haisiymd >= ?"; private static final String CAMMA = ","; //minagawa^ 2013/08/29 //@Resource(mappedName="java:jboss/datasources/OrcaDS") //private DataSource ds; //minagawa$ private boolean DEBUG; //masuda^ //ORCAのデータベースバージョンとhospNumを取得する @PostConstruct public void setupParams() { DEBUG = Logger.getLogger("open.dolphin").getLevel().equals(java.util.logging.Level.FINE); log("OrcaResource: setupParams"); Connection con1 = null; java.sql.Statement st1 = null; Connection con2 = null; java.sql.Statement st2 = null; HOSP_NUM = 1; try { // custom.properties から JMARI_CODEを読む Properties config = new Properties(); // コンフィグファイルを読み込む StringBuilder sb = new StringBuilder(); sb.append(System.getProperty("jboss.home.dir")); sb.append(File.separator); sb.append("custom.properties"); File f = new File(sb.toString()); FileInputStream fin = new FileInputStream(f); InputStreamReader r = new InputStreamReader(fin, "JISAutoDetect"); config.load(r); r.close(); //minagawa^ Client-ORCA接続の場合 String conn = config.getProperty("claim.conn"); if (conn==null || conn.equals("client")) { return; } //minagawa$ // JMARI code String jmari = config.getProperty("jamri.code"); // デフォルトの院内院外処方 String test = config.getProperty("rp.default.inout"); RP_OUT = (test!=null && test.equals("out")); // 病院番号検索 JMARI<->HospNum sb = new StringBuilder(); sb.append("select hospnum, kanritbl from tbl_syskanri where kanricd='1001' and kanritbl like '%"); sb.append(jmari); sb.append("%'"); String sql = sb.toString(); con1 = getConnection(); st1 = con1.createStatement(); ResultSet rs = st1.executeQuery(sql); if (rs.next()) { HOSP_NUM = rs.getInt(1); } // Version 検索 sql = "select version from tbl_dbkanri where kanricd='ORCADB00'"; con2 = getConnection(); st2 = con2.createStatement(); ResultSet rs2 = st2.executeQuery(sql); //minagawa^ BUG if (rs2.next()) { DB_VERSION = rs2.getString(1); } //minagawa$ log("ORCA 病院番号="+HOSP_NUM); log("ORCA Version="+DB_VERSION); } catch (Exception e) { e.printStackTrace(System.err); } finally { closeConnection(con1); closeStatement(st1); closeConnection(con2); closeStatement(st2); } } //masuda$ @GET @Path("/facilitycode") @Produces(MediaType.TEXT_PLAIN) public String getFacilityCodeBy1001() { //s.oh^ 2013/10/17 ローカルORCA対応 try { // custom.properties から 保健医療機関コードとJMARIコードを読む Properties config = new Properties(); // コンフィグファイルを読み込む StringBuilder sb = new StringBuilder(); sb.append(System.getProperty("jboss.home.dir")); sb.append(File.separator); sb.append("custom.properties"); File f = new File(sb.toString()); FileInputStream fin = new FileInputStream(f); InputStreamReader r = new InputStreamReader(fin, "JISAutoDetect"); config.load(r); r.close(); // JMARI code String jmari = config.getProperty("jamri.code"); String hcfacility = config.getProperty("healthcarefacility.code"); if(jmari != null && jmari.length() == 12 && hcfacility != null && hcfacility.length() == 10) { StringBuilder ret = new StringBuilder(); ret.append(hcfacility); ret.append("JPN"); ret.append(jmari); return ret.toString(); } } catch (FileNotFoundException ex) { Logger.getLogger(OrcaResource.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedEncodingException ex) { Logger.getLogger(OrcaResource.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(OrcaResource.class.getName()).log(Level.SEVERE, null, ex); } //s.oh$ // SQL 文 StringBuilder buf = new StringBuilder(); buf.append(QUERY_FACILITYID_BY_1001); String sql = buf.toString(); Connection con = null; PreparedStatement ps; StringBuilder ret = new StringBuilder(); try { con = getConnection(); ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); if (rs.next()) { String line = rs.getString(1); // 保険医療機関コード 10桁 ret.append(line.substring(0, 10)); // JMARIコード JPN+12桁 (total 15) int index = line.indexOf("JPN"); if (index>0) { ret.append(line.substring(index, index+15)); } } rs.close(); ps.close(); } catch (Exception e) { e.printStackTrace(System.err); processError(e); } finally { closeConnection(con); } return ret.toString(); } @GET @Path("/tensu/shinku/{param}/") @Produces(MediaType.APPLICATION_JSON) public TensuListConverter getTensutensuByShinku(@PathParam("param") String param) { // パラメーターを取得する String[] params = param.split(CAMMA); String shinku = params[0]; String now = params[1]; if (!shinku.startsWith("^")) { shinku = "^" + shinku; } //System.err.println(shinku); // 結果を格納するリスト ArrayList<TensuMaster> list = new ArrayList<TensuMaster>(); // SQL 文 StringBuilder buf = new StringBuilder(); buf.append(QUERY_TENSU_BY_SHINKU); String sql = buf.toString(); Connection con = null; PreparedStatement ps; try { con = getConnection(); ps = con.prepareStatement(sql); ps.setString(1, shinku); ps.setString(2, now); ps.setString(3, now); ResultSet rs = ps.executeQuery(); while (rs.next()) { TensuMaster t = new TensuMaster(); t.setSrycd(rs.getString(1)); t.setName(rs.getString(2)); t.setKananame(rs.getString(3)); t.setTensikibetu(rs.getString(4)); t.setTen(rs.getString(5)); t.setNyugaitekkbn(rs.getString(6)); t.setRoutekkbn(rs.getString(7)); t.setSrysyukbn(rs.getString(8)); t.setHospsrykbn(rs.getString(9)); t.setYukostymd(rs.getString(10)); t.setYukoedymd(rs.getString(11)); list.add(t); } rs.close(); ps.close(); // Wrapper TensuList wrapper = new TensuList(); wrapper.setList(list); // Converter TensuListConverter conv = new TensuListConverter(); conv.setModel(wrapper); // JSON return conv; } catch (Exception e) { processError(e); } finally { closeConnection(con); } return null; } @GET @Path("/tensu/name/{param}/") @Produces(MediaType.APPLICATION_JSON) public TensuListConverter getTensuMasterByName(@PathParam("param") String param) { // パラメーターを取得する String[] params = param.split(CAMMA); String name = params[0]; String now = params[1]; boolean partialMatch = Boolean.parseBoolean(params[2]); // 結果を格納するリスト ArrayList<TensuMaster> list = new ArrayList<TensuMaster>(); // 半角英数字を全角へ変換する name = StringTool.toZenkakuUpperLower(name); // SQL 文 boolean one = name.length()==1 ? true : false; StringBuilder buf = new StringBuilder(); if (one) { buf.append(QUERY_TENSU_BY_1_NAME); } else { buf.append(QUERY_TENSU_BY_NAME); if (!partialMatch) { name = "^" + name; } } String sql = buf.toString(); Connection con = null; PreparedStatement ps; try { con = getConnection(); ps = con.prepareStatement(sql); ps.setString(1, name); ps.setString(2, name); ps.setString(3, now); ps.setString(4, now); ResultSet rs = ps.executeQuery(); while (rs.next()) { TensuMaster t = new TensuMaster(); t.setSrycd(rs.getString(1)); t.setName(rs.getString(2)); t.setKananame(rs.getString(3)); t.setTaniname(rs.getString(4)); t.setTensikibetu(rs.getString(5)); t.setTen(rs.getString(6)); t.setNyugaitekkbn(rs.getString(7)); t.setRoutekkbn(rs.getString(8)); t.setSrysyukbn(rs.getString(9)); t.setHospsrykbn(rs.getString(10)); t.setYkzkbn(rs.getString(11)); t.setYakkakjncd(rs.getString(12)); t.setYukostymd(rs.getString(13)); t.setYukoedymd(rs.getString(14)); list.add(t); } rs.close(); ps.close(); // Wrapper TensuList wrapper = new TensuList(); wrapper.setList(list); // Converter TensuListConverter conv = new TensuListConverter(); conv.setModel(wrapper); // JSON return conv; } catch (Exception e) { processError(e); } finally { closeConnection(con); } return null; } @GET @Path("/tensu/code/{param}/") @Produces(MediaType.APPLICATION_JSON) public TensuListConverter getTensuMasterByCode(@PathParam("param") String param) { // パラメーターを取得する String[] params = param.split(CAMMA); String regExp = params[0]; String now = params[1]; // 結果を格納するリスト ArrayList<TensuMaster> list = new ArrayList<TensuMaster>(); // SQL 文 StringBuilder buf = new StringBuilder(); buf.append(QUERY_TENSU_BY_CODE); String sql = buf.toString(); Connection con = null; PreparedStatement ps; try { con = getConnection(); ps = con.prepareStatement(sql); // 増田内科 コール側で ^ をとる ps.setString(1, "^"+regExp); ps.setString(2, now); ps.setString(3, now); ResultSet rs = ps.executeQuery(); while (rs.next()) { TensuMaster t = new TensuMaster(); t.setSrycd(rs.getString(1)); t.setName(rs.getString(2)); t.setKananame(rs.getString(3)); t.setTaniname(rs.getString(4)); t.setTensikibetu(rs.getString(5)); t.setTen(rs.getString(6)); t.setNyugaitekkbn(rs.getString(7)); t.setRoutekkbn(rs.getString(8)); t.setSrysyukbn(rs.getString(9)); t.setHospsrykbn(rs.getString(10)); t.setYkzkbn(rs.getString(11)); t.setYakkakjncd(rs.getString(12)); t.setYukostymd(rs.getString(13)); t.setYukoedymd(rs.getString(14)); list.add(t); } rs.close(); ps.close(); // Wrapper TensuList wrapper = new TensuList(); wrapper.setList(list); // Converter TensuListConverter conv = new TensuListConverter(); conv.setModel(wrapper); // JSON return conv; } catch (Exception e) { processError(e); } finally { closeConnection(con); } return null; } @GET @Path("/tensu/ten/{param}/") @Produces(MediaType.APPLICATION_JSON) public TensuListConverter getTensuMasterByTen(@PathParam("param") String param) { // パラメーターを取得する String[] params = param.split(CAMMA); String ten = params[0]; String now = params[1]; // 結果を格納するリスト ArrayList<TensuMaster> list = new ArrayList<TensuMaster>(); // SQL 文 int type; StringBuilder buf = new StringBuilder(); if (ten.indexOf("-") > 0) { buf.append(QUERY_TENSU_BY_TEN); type = 1; } else { buf.append(QUERY_TENSU_BY_TEN2); type = 2; } String sql = buf.toString(); Connection con = null; PreparedStatement ps; try { con = getConnection(); ps = con.prepareStatement(sql); if (type==1) { String[] ten_params = ten.split("-"); ps.setFloat(1, Float.parseFloat(ten_params[0])); ps.setFloat(2, Float.parseFloat(ten_params[1])); ps.setString(3, now); ps.setString(4, now); } else { ps.setFloat(1, Float.parseFloat(ten)); ps.setString(2, now); ps.setString(3, now); } //System.err.println(ps); ResultSet rs = ps.executeQuery(); while (rs.next()) { TensuMaster t = new TensuMaster(); t.setSrycd(rs.getString(1)); t.setName(rs.getString(2)); t.setKananame(rs.getString(3)); t.setTaniname(rs.getString(4)); t.setTensikibetu(rs.getString(5)); t.setTen(rs.getString(6)); t.setNyugaitekkbn(rs.getString(7)); t.setRoutekkbn(rs.getString(8)); t.setSrysyukbn(rs.getString(9)); t.setHospsrykbn(rs.getString(10)); t.setYkzkbn(rs.getString(11)); t.setYakkakjncd(rs.getString(12)); t.setYukostymd(rs.getString(13)); t.setYukoedymd(rs.getString(14)); list.add(t); } rs.close(); ps.close(); // Wrapper TensuList wrapper = new TensuList(); wrapper.setList(list); // Converter TensuListConverter conv = new TensuListConverter(); conv.setModel(wrapper); // JSON return conv; } catch (Exception e) { processError(e); } finally { closeConnection(con); } return null; } @GET @Path("/disease/name/{param}/") @Produces(MediaType.APPLICATION_JSON) public DiseaseListConverter getDiseaseByName(@PathParam("param") String param) { // パラメーターを取得する String[] params = param.split(CAMMA); String name = params[0]; String now = params[1]; boolean partialMatch = Boolean.parseBoolean(params[2]); // 結果を格納するリスト ArrayList<DiseaseEntry> list = new ArrayList<DiseaseEntry>(); // 戻り値 String retXml = null; // SQL 文 StringBuilder buf = new StringBuilder(); // //masuda^ Version46 対応 // if (ORCA_DB_VER46.equals(getOrcaDbVersion())) { // buf.append(QUERY_DICEASE_BY_NAME_46); // } else { // buf.append(QUERY_DICEASE_BY_NAME); // } // //masuda$ buf.append(QUERY_DICEASE_BY_NAME_46); String sql = buf.toString(); Connection con = null; PreparedStatement ps; if (!partialMatch) { name = "^"+name; } try { con = getConnection(); ps = con.prepareStatement(sql); ps.setString(1, name); ps.setString(2, name); ps.setString(3, now); ResultSet rs = ps.executeQuery(); while (rs.next()) { DiseaseEntry de = new DiseaseEntry(); de.setCode(rs.getString(1)); // Code de.setName(rs.getString(2)); // Name de.setKana(rs.getString(3)); // Kana de.setIcdTen(rs.getString(4)); // IcdTen de.setDisUseDate(rs.getString(5)); // DisUseDate list.add(de); } rs.close(); ps.close(); // Wrapper DiseaseList wrapper = new DiseaseList(); wrapper.setList(list); // Converter DiseaseListConverter conv = new DiseaseListConverter(); conv.setModel(wrapper); // JSON return conv; } catch (Exception e) { processError(e); } finally { closeConnection(con); } return null; } // masuda^ ORCAのptidを取得する private long getOrcaPtID(String patientId){ long ptid = 0; final String sql = "select ptid from tbl_ptnum where hospnum = ? and ptnum = ?"; Connection con = null; PreparedStatement ps; try { con = getConnection(); ps = con.prepareStatement(sql); ps.setInt(1, HOSP_NUM); ps.setString(2, patientId); ResultSet rs = ps.executeQuery(); if (rs.next()) { ptid = rs.getLong(1); } rs.close(); ps.close(); } catch (Exception e) { e.printStackTrace(System.err); processError(e); closeConnection(con); } finally { closeConnection(con); } return ptid; } @PUT @Path("/interaction") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public DragInteractionListConverter checkInteraction(String json) throws Exception { ObjectMapper mapper = new ObjectMapper(); InteractionCodeList input = mapper.readValue(json, InteractionCodeList.class); // 相互作用モデルのリスト List<DrugInteractionModel> ret = new ArrayList<DrugInteractionModel>(); // JSON のための wrapper list DrugInteractionList iList = new DrugInteractionList(); iList.setList(ret); // Converter DragInteractionListConverter conv = new DragInteractionListConverter(); conv.setModel(iList); if (input.getCodes1() == null || input.getCodes1().isEmpty() || input.getCodes2() == null || input.getCodes2().isEmpty()) { return conv; } // SQL文を作成 StringBuilder sb = new StringBuilder(); sb.append("select drugcd, drugcd2, TI.syojyoucd, syojyou "); sb.append("from tbl_interact TI inner join tbl_sskijyo TS on TI.syojyoucd = TS.syojyoucd "); sb.append("where (drugcd in ("); sb.append(getCodes(input.getCodes1())); sb.append(") and drugcd2 in ("); sb.append(getCodes(input.getCodes2())); sb.append("))"); String sql = sb.toString(); Connection con = null; Statement st = null; try { con = getConnection(); st = con.createStatement(); ResultSet rs = st.executeQuery(sql); while (rs.next()) { ret.add(new DrugInteractionModel(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4))); } rs.close(); closeStatement(st); closeConnection(con); } catch (Exception e) { processError(e); closeStatement(st); closeConnection(con); } return conv; } //masuda$ //-------------------------------------------------------------------------- // 一般名を検索する //-------------------------------------------------------------------------- @GET @Path("/general/{param}") @Produces(MediaType.APPLICATION_JSON) public CodeNamePackConverter getGeneralName(@PathParam("param") String param) throws Exception { Connection con = null; PreparedStatement ps; String gname = null; CodeNamePack ret = null; StringBuilder sb = new StringBuilder(); sb.append(QUERY_GENERAL_NAME_BY_CODE); String sql = sb.toString(); debug(sql); try { con = getConnection(); ps = con.prepareStatement(sql); ps.setString(1, param); ResultSet rs = ps.executeQuery(); if (rs.next()) { ret = new CodeNamePack(param, rs.getString(2)); } rs.close(); ps.close(); CodeNamePackConverter conv = new CodeNamePackConverter(); conv.setModel(ret); return conv; } catch (Exception e) { e.printStackTrace(System.err); processError(e); closeConnection(con); } finally { closeConnection(con); } return null; } //-------------------------------------------------------------------------- // ORCA 入力セット //-------------------------------------------------------------------------- /** * ORCA の入力セットコード(約束処方、診療セット)を返す。 * @return 入力セットコード(OrcaInputCd)の昇順リスト */ @GET @Path("/inputset") @Produces(MediaType.APPLICATION_JSON) public OrcaInputCdListConverter getOrcaInputSet() { Connection con = null; ArrayList<OrcaInputCd> collection; Statement st = null; StringBuilder sb = new StringBuilder(); sb.append("select * from tbl_inputcd where "); if (true) { sb.append("hospnum="); sb.append(HOSP_NUM); sb.append(" and "); } sb.append("inputcd like 'P%' or inputcd like 'S%' order by inputcd"); String sql = sb.toString(); debug(sql); boolean v4 = true; //Project.getOrcaVersion().startsWith("4") ? true : false; try { con = getConnection(); st = con.createStatement(); ResultSet rs = st.executeQuery(sql); collection = new ArrayList<OrcaInputCd>(); while (rs.next()) { debug("got from tbl_inputcd"); OrcaInputCd inputCd = new OrcaInputCd(); if (!v4) { inputCd.setHospId(rs.getString(1)); inputCd.setCdsyu(rs.getString(2)); inputCd.setInputCd(rs.getString(3)); inputCd.setSryKbn(rs.getString(4)); inputCd.setSryCd(rs.getString(5)); inputCd.setDspSeq(rs.getInt(6)); inputCd.setDspName(rs.getString(7)); inputCd.setTermId(rs.getString(8)); inputCd.setOpId(rs.getString(9)); inputCd.setCreYmd(rs.getString(10)); inputCd.setUpYmd(rs.getString(11)); inputCd.setUpHms(rs.getString(12)); String cd = inputCd.getInputCd(); if (cd.length() > 6) { cd = cd.substring(0, 6); inputCd.setInputCd(cd); } } else { inputCd.setCdsyu(rs.getString(1)); inputCd.setInputCd(rs.getString(2)); inputCd.setSryKbn(rs.getString(3)); inputCd.setSryCd(rs.getString(4)); inputCd.setDspSeq(rs.getInt(5)); inputCd.setDspName(rs.getString(6)); inputCd.setTermId(rs.getString(7)); inputCd.setOpId(rs.getString(8)); inputCd.setCreYmd(rs.getString(9)); inputCd.setUpYmd(rs.getString(10)); inputCd.setUpHms(rs.getString(11)); String cd = inputCd.getInputCd(); if (cd.length() > 6) { cd = cd.substring(0, 6); inputCd.setInputCd(cd); } debug("getCdsyu = " + inputCd.getCdsyu()); debug("getInputCd = " + inputCd.getInputCd()); debug("getSryKbn = " + inputCd.getSryKbn()); debug("getSryCd = " + inputCd.getSryCd()); debug("getDspSeq = " + String.valueOf(inputCd.getDspSeq())); debug("getDspName = " + inputCd.getDspName()); debug("getTermId = " + inputCd.getTermId()); debug("getOpId " + inputCd.getOpId()); debug("getCreYmd " + inputCd.getCreYmd()); debug("getUpYmd " + inputCd.getUpYmd()); debug("getUpHms " + inputCd.getUpHms()); ModuleInfoBean info = inputCd.getStampInfo(); debug("getStampName = " + info.getStampName()); debug("getStampRole = " + info.getStampRole()); debug("getEntity = " + info.getEntity()); debug("getStampId = " + info.getStampId()); } collection.add(inputCd); } rs.close(); closeStatement(st); closeConnection(con); // Wrapper OrcaInputCdList wrapper = new OrcaInputCdList(); wrapper.setList(collection); // Converter OrcaInputCdListConverter conv = new OrcaInputCdListConverter(); conv.setModel(wrapper); return conv; } catch (Exception e) { processError(e); closeConnection(con); closeStatement(st); } return null; } /** * 指定された入力セットコードから診療セットを Stamp にして返す。 * @param inputSetInfo 入力セットの StampInfo * @return 入力セットのStampリスト */ @GET @Path("/stamp/{param}") @Produces(MediaType.APPLICATION_JSON) public ModuleListConverter getStamp(@PathParam("param") String param) { String[] params = param.split(CAMMA); String setCd = params[0]; // stampId=setCd; セットコード String stampName = params[1]; debug("OrcaResource: getStamp"); debug("setCd = " + setCd); debug("stampName = " + stampName); int hospnum = -1; if (true) { hospnum = HOSP_NUM; } Connection con = null; PreparedStatement ps1 = null; PreparedStatement ps2 = null; String sql1; String sql2; StringBuilder sb1 = new StringBuilder(); if (true) { //s.oh^ 2014/04/01 ORCAセット有効期限対応 //sb1.append("select inputcd,suryo1,kaisu from tbl_inputset where hospnum=? and setcd=? order by setseq"); sb1.append("select inputcd,suryo1,kaisu,yukostymd,yukoedymd from tbl_inputset where hospnum=? and setcd=? order by setseq"); //s.oh$ sql1 = sb1.toString(); } else { sb1.append("select inputcd,suryo1,kaisu from tbl_inputset where setcd=? order by setseq"); sql1 = sb1.toString(); } // order by yukoedymd desc を追加 ^ StringBuilder sb2 = new StringBuilder(); if (true) { sb2.append("select srysyukbn,name,taniname,ykzkbn from tbl_tensu where hospnum=? and srycd=? order by yukoedymd desc"); sql2 = sb2.toString(); } else { sb2.append("select srysyukbn,name,taniname,ykzkbn from tbl_tensu where srycd=? order by yukoedymd desc"); sql2 = sb2.toString(); } ArrayList<ModuleModel> retSet = new ArrayList<ModuleModel>(); try { // // setCd を検索する // con = getConnection(); ps1 = con.prepareStatement(sql1); if (hospnum > 0) { ps1.setInt(1, hospnum); ps1.setString(2, setCd); } else { ps1.setString(1, setCd); } debug(ps1.toString()); ResultSet rs = ps1.executeQuery(); ArrayList<OrcaInputSet> list = new ArrayList<OrcaInputSet>(); //s.oh^ 2014/04/01 ORCAセット有効期限対応 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String strtoday = sdf.format(new Date()); int today = Integer.parseInt(strtoday); //s.oh$ while (rs.next()) { debug("got from tbl_inputset"); OrcaInputSet inputSet = new OrcaInputSet(); //inputSet.setHospId(rs.getString(1)); //inputSet.setSetCd(rs.getString(2)); // P01001 ... //inputSet.setYukostYmd(rs.getString(3)); //inputSet.setYukoedYmd(rs.getString(4)); //inputSet.setSetSeq(rs.getInt(5)); // 1, 2, ... inputSet.setInputCd(rs.getString(1)); // .210 616130532 ... inputSet.setSuryo1(rs.getFloat(2)); // item の個数 //inputSet.setSuryo2(rs.getFloat(8)); inputSet.setKaisu(rs.getInt(3)); // バンドル数 //inputSet.setComment(rs.getString(10)); //inputSet.setAtai1(rs.getString(11)); //inputSet.setAtai2(rs.getString(12)); //inputSet.setAtai3(rs.getString(13)); //inputSet.setAtai4(rs.getString(14)); //inputSet.setTermId(rs.getString(15)); //inputSet.setOpId(rs.getString(16)); //inputSet.setCreYmd(rs.getString(17)); //inputSet.setUpYmd(rs.getString(18)); //inputSet.setUpHms(rs.getString(19)); debug("getInputCd = " + inputSet.getInputCd()); debug("getSuryo1 = " + String.valueOf(inputSet.getSuryo1())); debug("getKaisu = " + String.valueOf(inputSet.getKaisu())); //s.oh^ 2014/04/01 ORCAセット有効期限対応 //list.add(inputSet); String strst = rs.getString(4); String stred = rs.getString(5); debug("st = " + strst); debug("ed = " + stred); int st = Integer.parseInt(strst); int ed = Integer.parseInt(stred); if(st <= today && today <= ed) { list.add(inputSet); }else{ continue; } //s.oh$ } rs.close(); closeStatement(ps1); ModuleModel stamp; BundleDolphin bundle = null; ps2 = con.prepareStatement(sql2); if (list != null && list.size() > 0) { for (OrcaInputSet inputSet : list) { String inputcd = inputSet.getInputCd(); debug("inputcd = " + inputcd); if (inputcd.startsWith(SHINRYO_KBN_START)) { //--------------------------------------- // //--------------------------------------- stamp = createStamp(stampName, inputcd); if (stamp != null) { bundle = (BundleDolphin) stamp.getModel(); retSet.add(stamp); } debug("created stamp " + inputcd); } else { if (hospnum > 0) { ps2.setInt(1, hospnum); ps2.setString(2, inputcd); } else { ps2.setString(1, inputcd); } debug(ps2.toString()); ResultSet rs2 = ps2.executeQuery(); if (rs2.next()) { debug("got from tbl_tensu"); String code = inputcd; String kbn = rs2.getString(1); String name = rs2.getString(2); String number = String.valueOf(inputSet.getSuryo1()); String unit = rs2.getString(3); ////s.oh^ 2014/06/24 ORCAセットの改善 // String ykz = rs2.getString(4); ////s.oh$ debug("code = " + code); debug("kbn = " + kbn); debug("name = " + name); debug("number = " + number); debug("unit = " + unit); ClaimItem item = new ClaimItem(); item.setCode(code); item.setName(name); item.setNumber(number); item.setClassCodeSystem(ClaimConst.SUBCLASS_CODE_ID); ////s.oh^ 2014/06/24 ORCAセットの改善 // item.setYkzKbn(ykz); ////s.oh$ if (code.startsWith(ClaimConst.SYUGI_CODE_START)) { // // 手技の場合 // debug("item is tech"); item.setClassCode(String.valueOf(ClaimConst.SYUGI)); if (bundle == null) { stamp = createStamp(stampName, kbn); if (stamp != null) { bundle = (BundleDolphin) stamp.getModel(); retSet.add(stamp); } } if (bundle != null) { //s.oh^ 2014/03/31 スタンプ回数対応 if(inputSet.getKaisu() > 0) { bundle.setBundleNumber(String.valueOf(inputSet.getKaisu())); } //s.oh$ bundle.addClaimItem(item); } } else if (code.startsWith(ClaimConst.YAKUZAI_CODE_START)) { // // 薬剤の場合 // debug("item is medicine"); item.setClassCode(String.valueOf(ClaimConst.YAKUZAI)); item.setNumberCode(ClaimConst.YAKUZAI_TOYORYO); item.setNumberCodeSystem(ClaimConst.NUMBER_CODE_ID); item.setUnit(unit); if (bundle == null) { String receiptCode = rs2.getString(4).equals(ClaimConst.YKZ_KBN_NAIYO) ? ClaimConst.RECEIPT_CODE_NAIYO : ClaimConst.RECEIPT_CODE_GAIYO; stamp = createStamp(stampName, receiptCode); if (stamp != null) { bundle = (BundleDolphin) stamp.getModel(); retSet.add(stamp); } } if (bundle != null) { //s.oh^ 2014/03/31 スタンプ回数対応 if(inputSet.getKaisu() > 0) { bundle.setBundleNumber(String.valueOf(inputSet.getKaisu())); } //s.oh$ bundle.addClaimItem(item); } } else if (code.startsWith(ClaimConst.ZAIRYO_CODE_START)) { // // 材料の場合 // debug("item is material"); item.setClassCode(String.valueOf(ClaimConst.ZAIRYO)); item.setNumberCode(ClaimConst.ZAIRYO_KOSU); item.setNumberCodeSystem(ClaimConst.NUMBER_CODE_ID); item.setUnit(unit); if (bundle == null) { stamp = createStamp(stampName, KBN_GENERAL); if (stamp != null) { bundle = (BundleDolphin) stamp.getModel(); retSet.add(stamp); } } if (bundle != null) { //s.oh^ 2014/03/31 スタンプ回数対応 if(inputSet.getKaisu() > 0) { bundle.setBundleNumber(String.valueOf(inputSet.getKaisu())); } //s.oh$ bundle.addClaimItem(item); } } else if (code.startsWith(ClaimConst.ADMIN_CODE_START)) { // // 用法の場合 // debug("item is administration"); if (bundle == null) { stamp = createStamp(stampName, KBN_RP); if (stamp != null) { bundle = (BundleDolphin) stamp.getModel(); retSet.add(stamp); } } if (bundle != null) { if (bundle instanceof BundleMed) { debug("cur bundle is BundleMed"); bundle.setAdmin(name); bundle.setAdminCode(code); bundle.setBundleNumber(String.valueOf(inputSet.getKaisu())); } else { debug("cur bundle is ! BundleMed"); bundle.addClaimItem(item); } } } else if (inputcd.startsWith(ClaimConst.RBUI_CODE_START)) { // // 放射線部位の場合 // debug("item is rad loc."); item.setClassCode(String.valueOf(ClaimConst.SYUGI)); if (bundle == null) { stamp = createStamp(stampName, KBN_RAD); if (stamp != null) { bundle = (BundleDolphin) stamp.getModel(); retSet.add(stamp); } } if (bundle != null) { //s.oh^ 2014/03/31 スタンプ回数対応 if(inputSet.getKaisu() > 0) { bundle.setBundleNumber(String.valueOf(inputSet.getKaisu())); } //s.oh$ bundle.addClaimItem(item); } } else { debug("item is other"); if (bundle==null) { stamp = createStamp(stampName, KBN_GENERAL); if (stamp != null) { bundle = (BundleDolphin) stamp.getModel(); retSet.add(stamp); } } if (bundle != null) { //s.oh^ 2014/03/31 スタンプ回数対応 if(inputSet.getKaisu() > 0) { bundle.setBundleNumber(String.valueOf(inputSet.getKaisu())); } //s.oh$ bundle.addClaimItem(item); } } } } } closeStatement(ps2); } closeConnection(con); for (ModuleModel mm : retSet) { byte[] bytes = getXMLBytes(mm.getModel()); mm.setBeanBytes(bytes); mm.setModel(null); } // Warpper ModuleList mlist = new ModuleList(); mlist.setList(retSet); // Converter ModuleListConverter conv = new ModuleListConverter(); conv.setModel(mlist); return conv; } catch (Exception e) { processError(e); closeConnection(con); closeStatement(ps1); closeStatement(ps2); } return null; } /** * Stampを生成する。 * @param stampName Stamp名 * @param code 診療区分コード * @return Stamp */ private ModuleModel createStamp(String stampName, String code) { ModuleModel stamp = null; if (code != null) { if (code.startsWith(SHINRYO_KBN_START)) { code = code.substring(1); } if (code.length() > SHINRYO_KBN_LENGTH) { code = code.substring(0, SHINRYO_KBN_LENGTH); } stamp = new ModuleModel(); ModuleInfoBean stampInfo = stamp.getModuleInfoBean(); stampInfo.setStampName(stampName); stampInfo.setStampRole(IInfoModel.ROLE_P); // ROLE_ORCA -> EOLE_P //stampInfo.setStampMemo(code); BundleDolphin bundle; if (code.startsWith(RP_KBN_START)) { bundle = new BundleMed(); stamp.setModel(bundle); String inOut = RP_OUT ? ClaimConst.EXT_MEDICINE : ClaimConst.IN_MEDICINE; bundle.setMemo(inOut); } else { bundle = new BundleDolphin(); stamp.setModel(bundle); } bundle.setClassCode(code); bundle.setClassCodeSystem(ClaimConst.CLASS_CODE_ID); //bundle.setClassName(MMLTable.getClaimClassCodeName(code)); bundle.setBundleNumber(String.valueOf(DEFAULT_BUNDLE_NUMBER)); String[] entityOrder = getEntityOrderName(code); if (entityOrder != null) { stampInfo.setEntity(entityOrder[0]); bundle.setOrderName(entityOrder[1]); } } return stamp; } private String[] getEntityOrderName(String receiptCode) { try { int number = Integer.parseInt(receiptCode); if (number >= 110 && number <= 125) { return new String[]{IInfoModel.ENTITY_BASE_CHARGE_ORDER, "診断料"}; } else if (number >= 130 && number <= 150) { return new String[]{IInfoModel.ENTITY_INSTRACTION_CHARGE_ORDER, "指導・在宅"}; } else if (number >= 200 && number <= 299) { return new String[]{IInfoModel.ENTITY_MED_ORDER, "RP"}; } //minagawa^ LSC 1.4 .334問題 2013/06/24 // else if (number >= 300 && number <= 352) { // return new String[]{IInfoModel.ENTITY_INJECTION_ORDER, "注 射"}; // } else if (number >= 300 && number <= 399) { return new String[]{IInfoModel.ENTITY_INJECTION_ORDER, "注 射"}; } //minagawa$ else if (number >= 400 && number <= 499) { return new String[]{IInfoModel.ENTITY_TREATMENT, "処 置"}; } else if (number >= 500 && number <= 599) { return new String[]{IInfoModel.ENTITY_SURGERY_ORDER, "手術"}; } else if (number >= 600 && number <= 699) { return new String[]{IInfoModel.ENTITY_LABO_TEST, "検査"}; } else if (number >= 700 && number <= 799) { return new String[]{IInfoModel.ENTITY_RADIOLOGY_ORDER, "放射線"}; } else if (number >= 800 && number <= 899) { return new String[]{IInfoModel.ENTITY_OTHER_ORDER, "その他"}; } else { return new String[]{IInfoModel.ENTITY_GENERAL_ORDER, "汎 用"}; } } catch (Exception e) { e.printStackTrace(System.err); } return null; } //-------------------------------------------------------------------------- // ORCA 病名インポート //-------------------------------------------------------------------------- /** * ORCA に登録してある病名を検索する。 * @return RegisteredDiagnosisModelのリスト */ @GET @Path("/disease/import/{param}") @Produces(MediaType.APPLICATION_JSON) public RegisteredDiagnosisListConverter getOrcaDisease(@PathParam("param") String param) { String[] params = param.split(CAMMA); String patientId = params[0]; String from = params[1]; String to = params[2]; boolean ascend = Boolean.parseBoolean(params[3]); Connection con = null; ArrayList<RegisteredDiagnosisModel> collection; PreparedStatement pt = null; String sql; String ptid = null; int hospNum = HOSP_NUM; //-1; StringBuilder sb = new StringBuilder(); sb.append("select ptid, ptnum from tbl_ptnum where hospnum=? and ptnum=?"); sql = sb.toString(); debug(sql); try { con = getConnection(); pt = con.prepareStatement(sql); pt.setInt(1, hospNum); pt.setString(2, patientId); ResultSet rs = pt.executeQuery(); if (rs.next()) { ptid = rs.getString(1); } closeConnection(con); closeStatement(pt); } catch (Exception e) { warn(e.getMessage()); processError(e); closeConnection(con); closeStatement(pt); } if (ptid == null) { warn("ptid=null"); return null; } sb = new StringBuilder(); //sb.append("select sryymd,khnbyomeicd,utagaiflg,syubyoflg,tenkikbn,tenkiymd,byomei from tbl_ptbyomei where "); sb.append("select sryymd,khnbyomeicd,utagaiflg,syubyoflg,tenkikbn,tenkiymd,byomei,sryka from tbl_ptbyomei where "); // 診療科追加 if (ascend) { if (hospNum > 0) { sb.append("hospnum=? and ptid=? and sryymd >= ? and sryymd <= ? and dltflg!=? order by sryymd"); } else { sb.append("ptid=? and sryymd >= ? and sryymd <= ? and dltflg!=? order by sryymd"); } } else { if (hospNum > 0) { sb.append("hospnum=? and ptid=? and sryymd >= ? and sryymd <= ? and dltflg!=? order by sryymd desc"); } else { sb.append("ptid=? and sryymd >= ? and sryymd <= ? and dltflg!=? order by sryymd desc"); } } sql = sb.toString(); debug(sql); try { con = getConnection(); pt = con.prepareStatement(sql); if (hospNum > 0) { pt.setInt(1, hospNum); pt.setInt(2, Integer.parseInt(ptid)); // 元町皮膚科 pt.setString(3, from); pt.setString(4, to); pt.setString(5, "1"); } else { pt.setInt(1, Integer.parseInt(ptid)); // 元町皮膚科 pt.setString(2, from); pt.setString(3, to); pt.setString(4, "1"); } ResultSet rs = pt.executeQuery(); collection = new ArrayList<RegisteredDiagnosisModel>(); while (rs.next()) { RegisteredDiagnosisModel ord = new RegisteredDiagnosisModel(); // 疾患開始日 ord.setStartDate(toDolphinDateStr(rs.getString(1))); // 病名コード ord.setDiagnosisCode(rs.getString(2)); // 疑いフラグ storeSuspectedDiagnosis(ord, rs.getString(3)); // 主病名フラグ storeMainDiagnosis(ord, rs.getString(4)); // 転帰 storeOutcome(ord, rs.getString(5)); // 疾患終了日(転帰) ord.setEndDate(toDolphinDateStr(rs.getString(6))); // 疾患名 ord.setDiagnosis(rs.getString(7)); //s.oh^ 2014/03/13 傷病名削除診療科対応 ord.setDepartment(rs.getString(8)); //s.oh$ // 制御のための Status ord.setStatus("ORCA"); collection.add(ord); } rs.close(); closeStatement(pt); closeConnection(con); // Wrapper RegisteredDiagnosisList rdl = new RegisteredDiagnosisList(); rdl.setList(collection); // Converter RegisteredDiagnosisListConverter conv = new RegisteredDiagnosisListConverter(); conv.setModel(rdl); return conv; } catch (Exception e) { warn(e.getMessage()); processError(e); closeConnection(con); closeStatement(pt); } return null; } /** * ORCA に登録してある直近の病名を検索する。 * @return RegisteredDiagnosisModelのリスト */ @GET @Path("/disease/active/{param}") @Produces(MediaType.APPLICATION_JSON) public RegisteredDiagnosisListConverter getActiveOrcaDisease(@PathParam("param") String param) { String[] params = param.split(CAMMA); String patientId = params[0]; boolean asc = Boolean.parseBoolean(params[1]); Connection con = null; ArrayList<RegisteredDiagnosisModel> collection; PreparedStatement pt = null; String sql; String ptid = null; int hospNum = HOSP_NUM; //-1; StringBuilder sb = new StringBuilder(); sb.append("select ptid, ptnum from tbl_ptnum where hospnum=? and ptnum=?"); sql = sb.toString(); debug(sql); try { con = getConnection(); pt = con.prepareStatement(sql); pt.setInt(1, hospNum); pt.setString(2, patientId); ResultSet rs = pt.executeQuery(); if (rs.next()) { ptid = rs.getString(1); } closeConnection(con); closeStatement(pt); } catch (Exception e) { warn(e.getMessage()); processError(e); closeConnection(con); closeStatement(pt); } if (ptid == null) { warn("ptid=null"); return null; } sb = new StringBuilder(); //sb.append("select sryymd,khnbyomeicd,utagaiflg,syubyoflg,tenkikbn,tenkiymd,byomei from tbl_ptbyomei where "); sb.append("select sryymd,khnbyomeicd,utagaiflg,syubyoflg,tenkikbn,tenkiymd,byomei,sryka from tbl_ptbyomei where "); // 診療科追加 if (hospNum > 0) { //s.oh^ 2014/03/18 ORCAから傷病名の取込 //sb.append("hospnum=? and ptid=? and tenkikbn=? and dltflg!=? order by sryymd"); sb.append("hospnum=? and ptid=? and dltflg!=? order by sryymd"); //s.oh$ } else { //s.oh^ 2014/03/18 ORCAから傷病名の取込 //sb.append("ptid=? and tenkikbn=? and dltflg!=? order by sryymd"); sb.append("ptid=? and dltflg!=? order by sryymd"); //s.oh$ } if (!asc) { sb.append(" desc"); } sql = sb.toString(); debug(sql); try { con = getConnection(); pt = con.prepareStatement(sql); if (hospNum > 0) { pt.setInt(1, hospNum); pt.setInt(2, Integer.parseInt(ptid)); // 元町皮膚科 //s.oh^ 2014/03/18 ORCAから傷病名の取込 //pt.setString(3, " "); //pt.setString(4, "1"); pt.setString(3, "1"); //s.oh$ } else { pt.setInt(1, Integer.parseInt(ptid)); // 元町皮膚科 //s.oh^ 2014/03/18 ORCAから傷病名の取込 //pt.setString(2, " "); //pt.setString(3, "1"); pt.setString(2, "1"); //s.oh$ } ResultSet rs = pt.executeQuery(); collection = new ArrayList<RegisteredDiagnosisModel>(); while (rs.next()) { RegisteredDiagnosisModel ord = new RegisteredDiagnosisModel(); // 疾患開始日 ord.setStartDate(toDolphinDateStr(rs.getString(1))); // 病名コード ord.setDiagnosisCode(rs.getString(2)); // 疑いフラグ storeSuspectedDiagnosis(ord, rs.getString(3)); // 主病名フラグ storeMainDiagnosis(ord, rs.getString(4)); // 転帰 storeOutcome(ord, rs.getString(5)); // 疾患終了日(転帰) ord.setEndDate(toDolphinDateStr(rs.getString(6))); // 疾患名 ord.setDiagnosis(rs.getString(7)); //s.oh^ 2014/03/13 傷病名削除診療科対応 ord.setDepartment(rs.getString(8)); //s.oh$ // 制御のための Status ord.setStatus("ORCA"); collection.add(ord); } rs.close(); closeStatement(pt); closeConnection(con); // Wrapper RegisteredDiagnosisList rdl = new RegisteredDiagnosisList(); rdl.setList(collection); // Converter RegisteredDiagnosisListConverter conv = new RegisteredDiagnosisListConverter(); conv.setModel(rdl); return conv; } catch (Exception e) { warn(e.getMessage()); processError(e); closeConnection(con); closeStatement(pt); } return null; } //s.oh^ 2014/03/13 傷病名削除診療科対応 @GET @Path("/deptinfo") @Produces(MediaType.TEXT_PLAIN) public String getDeptInfo() { String ret = ""; try { // custom.properties から 保健医療機関コードとJMARIコードを読む Properties config = new Properties(); // コンフィグファイルを読み込む StringBuilder sb = new StringBuilder(); sb.append(System.getProperty("jboss.home.dir")); sb.append(File.separator); sb.append("custom.properties"); File f = new File(sb.toString()); FileInputStream fin = new FileInputStream(f); InputStreamReader r = new InputStreamReader(fin, "JISAutoDetect"); config.load(r); r.close(); String ip = config.getProperty("orca.orcaapi.ip", config.getProperty("claim.host")); String port = config.getProperty("orca.orcaapi.port", "8000"); String id = config.getProperty("orca.id", "ormaster"); String password = config.getProperty("orca.password", "ormaster123"); if(ip != null) { OrcaConnect orcaApi = new OrcaConnect(ip, port, id, password, null); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); ret = orcaApi.getDepartmentInfo(sf.format(new Date())); log(ret); ret = ret.replaceAll("\\<.*?>", ","); } } catch (FileNotFoundException ex) { Logger.getLogger(OrcaResource.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedEncodingException ex) { Logger.getLogger(OrcaResource.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(OrcaResource.class.getName()).log(Level.SEVERE, null, ex); } return ret; } //s.oh$ // ORCA カテゴリ private void storeSuspectedDiagnosis(RegisteredDiagnosisModel rdm, String test) { if (test!=null) { if (test.equals("1")) { rdm.setCategory("suspectedDiagnosis"); rdm.setCategoryDesc("疑い病名"); rdm.setCategoryCodeSys("MML0015"); } else if (test.equals("2")) { // rdm.setCategory("suspectedDiagnosis"); // rdm.setCategoryDesc("急性"); // rdm.setCategoryCodeSys("MML0012"); } else if (test.equals("3")) { rdm.setCategory("suspectedDiagnosis"); rdm.setCategoryDesc("疑い病名"); rdm.setCategoryCodeSys("MML0015"); } } } private void storeMainDiagnosis(RegisteredDiagnosisModel rdm, String test) { if (test!=null && test.equals("1")) { rdm.setCategory("mainDiagnosis"); rdm.setCategoryDesc("主病名"); rdm.setCategoryCodeSys("MML0012"); } } // ORCA 転帰 private void storeOutcome(RegisteredDiagnosisModel rdm, String data) { if (data != null) { if (data.equals("1")) { rdm.setOutcome("fullyRecovered"); rdm.setOutcomeDesc("全治"); rdm.setOutcomeCodeSys("MML0016"); } else if (data.equals("2")) { rdm.setOutcome("died"); rdm.setOutcomeDesc("死亡"); rdm.setOutcomeCodeSys("MML0016"); } else if (data.equals("3")) { rdm.setOutcome("pause"); rdm.setOutcomeDesc("中止"); rdm.setOutcomeCodeSys("MML0016"); } else if (data.equals("8")) { rdm.setOutcome("transfer"); rdm.setOutcomeDesc("転医"); rdm.setOutcomeCodeSys("MML0016"); } } } private String toDolphinDateStr(String orcaDate) { if (orcaDate==null || orcaDate.equals("")) { return null; } try { SimpleDateFormat sdf = new SimpleDateFormat(); sdf.applyPattern("yyyyMMdd"); Date orca = sdf.parse(orcaDate); sdf.applyPattern("yyyy-MM-dd"); String ret = sdf.format(orca); return ret; } catch (ParseException ex) { } return null; } private byte[] getXMLBytes(Object bean) { ByteArrayOutputStream bo = new ByteArrayOutputStream(); XMLEncoder e = new XMLEncoder(new BufferedOutputStream(bo)); e.writeObject(bean); e.close(); return bo.toByteArray(); } // srycdのListからカンマ区切りの文字列を作る private String getCodes(Collection<String> srycdList){ StringBuilder sb = new StringBuilder(); boolean first = true; for (String srycd : srycdList){ if (!first){ sb.append(","); } else { first = false; } sb.append(addSingleQuote(srycd)); } return sb.toString(); } private String addSingleQuote(String str) { StringBuilder sb = new StringBuilder(); sb.append("'").append(str).append("'"); return sb.toString(); } private Connection getConnection() throws SQLException { //minagawa^ 2013/08/29 //return ds.getConnection(); return ORCAConnection.getInstance().getConnection(); //minagawa$ } private void closeConnection(Connection conn) { if (conn != null) { try { conn.close(); } catch (Exception e) { } } } private void closeStatement(java.sql.Statement st) { if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(System.err); } } } private void processError(Throwable e) { e.printStackTrace(System.err); } private void log(String msg) { Logger.getLogger("open.dolphin").info(msg); } private void warn(String msg) { Logger.getLogger("open.dolphin").warning(msg); } private void debug(String msg) { if (DEBUG) { Logger.getLogger("open.dolphin").fine(msg); } } }