Преглед изворни кода

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management into dev

chenweida пре 8 година
родитељ
комит
212b379b3e

+ 1 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthGuidanceService.java

@ -72,6 +72,7 @@ public class PatientHealthGuidanceService extends BaseService {
			JSONObject json = new JSONObject();
			json.put("first", "健康指导提醒");
			json.put("toUser", patient.getCode());
			json.put("id", guidance.getId());
			json.put("date", DateUtil.getStringDate());
			json.put("orgName", doctor.getHosptialName());
			json.put("doctorName", doctor.getName());

+ 133 - 30
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/record/EhrService.java

@ -41,7 +41,7 @@ public class EhrService extends BaseService {
    private List<String> containTables(String profileId)
    {
        List<String>  re = new ArrayList<>();
        String params = "{\"profile_id\":\""+profileId+"\"}";
        String params = "{\"q\":\"profile_id:"+profileId+"\"}";
        String response = HttpClientUtil.get(ehrBaseUrl + "resources/query/sub_data?queryParams="+URLEncoder.encode(params), "UTF-8");
        JSONObject obj = new JSONObject(response);
        if(obj.has("detailModelList") && obj.getInt("totalCount")>0)
@ -303,26 +303,6 @@ public class EhrService extends BaseService {
    }
    /**
     * 检验报告单
     */
    public List<Map<String,String>> laboratory(String idcard) {
        List<Map<String,String>> list = null;
        try {
            String url = ehrUrl + idcard + "/laboratory?demographic_id=" + idcard;
            String response = HttpClientUtil.get(url, "UTF-8");
            Map<String, Object> map = objectMapper.readValue(response, Map.class);
            list = (List<Map<String,String>>)map.get("detailModelList");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 用药记录
     */
@ -338,25 +318,26 @@ public class EhrService extends BaseService {
     */
    public String getHealthData(String strSSID,String strEvent,String strCatalog,String strSerial)
    {
        System.out.print("ssid:"+strSSID+",rowkey:"+strSerial+",catalog:"+strCatalog+"\r\n");
        String re = "";
        try {
            /******************************** 主表数据 ********************************************************/
            if (strCatalog.equals("0101")) {     //门诊基本诊疗信息
                return get0101(strSSID,strSerial);
                re =  get0101(strSSID,strSerial);
            }
            else if (strCatalog.equals("0201")) {   //住院诊疗基本信息
                return get0201(strSSID,strSerial);
                re = get0201(strSSID,strSerial);
            }
            /******************************** 细表数据 ********************************************************/
            else if (strCatalog.equals("0102")) {   //门诊费用明细
                re = get0102(strSSID,strSerial);
            }
            else if (strCatalog.equals("0131")) {   //门诊检查报告单
                return getExamination(strSSID,strSerial,"0131");
                re = getExamination(strSSID,strSerial,"0131");
            }
            else if (strCatalog.equals("0121")) {   //门诊检验报告单
                return get0201(strSSID,strSerial);
                re = getLaboratory(strSSID,strSerial,"0121");
            }
            else if (strCatalog.equals("0141")) {   //门诊用药记录
@ -383,10 +364,11 @@ public class EhrService extends BaseService {
            }
            else if (strCatalog.equals("0221")) {   //住院检验报告
                re = getLaboratory(strSSID,strSerial,"0221");
            }
            else if (strCatalog.equals("0231")) {   //住院检查报告
                return getExamination(strSSID,strSerial,"0131");
                re = getExamination(strSSID,strSerial,"0231");
            }
            else if (strCatalog.equals("0241")) {   //住院用药记录
@ -398,6 +380,7 @@ public class EhrService extends BaseService {
            ex.printStackTrace();
        }
        System.out.print(re);
        return re;
    }
@ -437,9 +420,9 @@ public class EhrService extends BaseService {
                    for (int i = 0; i < array.length(); i++) {
                        JSONObject item = array.getJSONObject(i);
                        diagnosisString += "<item>\n" +
                                "            <icd code=\"诊断icd10(字典STD_ICD)\" codeSystem=\"ICD-10\">疾病诊断名称</icd>\n" +
                                "            <result code=\"" + item.optString("EHR_000110") + "\" codeSystem=\"CV5501.11\">诊疗结果</result>\n" +
                                "            <prop code=\"" + item.optString("EHR_000111") + "\" codeSystem=\"STD_DIAGNOSIS_PROP\">诊断性质</prop>\n" +
                                "            <icd code=\""+item.optString("EHR_000109") +"\" codeSystem=\"ICD-10\">"+item.optString("EHR_000109_VALUE") +"</icd>\n" +
                                "            <result code=\"" + item.optString("EHR_000110") + "\" codeSystem=\"CV5501.11\">"+item.optString("EHR_000110_VALUE")+"</result>\n" +
                                "            <prop code=\"" + item.optString("EHR_000107") + "\" codeSystem=\"STD_DIAGNOSIS_PROP\">"+item.optString("EHR_000107") +"</prop>\n" +
                                "</item>\n";
                    }
                }
@ -847,4 +830,124 @@ public class EhrService extends BaseService {
        return re;
    }
    //门诊费用明细
    public String get0102(String ssid,String profileId)
    {
        //事件主要信息
        JSONObject info = getEventBaseInfo(profileId);
        if(info!=null) {
            //住院症状
            String symptomUrl = ehrUrl + URLEncoder.encode("{demographic_id}")+"/hospitalized/symptom?profile_id=" + profileId;
            String symptomResponse = HttpClientUtil.get(symptomUrl, "UTF-8");
            JSONObject symptomObj = new JSONObject(symptomResponse);
            String symptomString = "";
            if (symptomObj.getBoolean("successFlg") && symptomObj.getInt("totalCount") > 0) {
                JSONArray array = symptomObj.getJSONArray("detailModelList");
                if (array != null && array.length() > 0) {
                    for (int i = 0; i < array.length(); i++) {
                        JSONObject item = array.getJSONObject(i);
                        symptomString += "<item code=\"" + item.optString("EHR_000301") + "\" codeSystem=\"CV5101.27\">" + item.optString("EHR_000302") + "</item>\n";
                    }
                }
            }
            //住院诊断
            String diagnosisUrl = ehrUrl + URLEncoder.encode("{demographic_id}")+"/hospitalized/diagnosis?profile_id=" + profileId;
            String diagnosisResponse = HttpClientUtil.get(diagnosisUrl, "UTF-8");
            JSONObject diagnosisObj = new JSONObject(diagnosisResponse);
            String diagnosisString = "";
            if (diagnosisObj.getBoolean("successFlg") && diagnosisObj.getInt("totalCount") > 0) {
                JSONArray array = diagnosisObj.getJSONArray("detailModelList");
                if (array != null && array.length() > 0) {
                    for (int i = 0; i < array.length(); i++) {
                        JSONObject item = array.getJSONObject(i);
                        diagnosisString +="<item>\n" +
                                "      <icd code=\""+item.optString("EHR_000293")+"\" codeSystem=\"ICD-10\">"+item.optString("EHR_000295")+"</icd>\n" +
                                "</item>\n";
                    }
                }
            }
            String re = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                    "<ClinicalDocument>\n" +
                    "  <version code=\"2.0.0.1\" date=\"2011-06-01\">根据卫生部标准第2次修订</version>\n" +
                    "  <ehr code=\"0201\" codeSystem=\"STD_EHR\">住院诊疗基本信息</ehr>\n" +
                    "  <title>住院诊疗基本信息</title>\n" +
                    "  <org code=\""+info.optString("org_code") +"\" codeSystem=\"STD_HEALTH_ORG\">"+info.optString("org_name") +"</org>\n" +
                    "  <id extension=\"" + profileId + "\" eventno=\"" + info.optString("event_no") + "\"></id>\n" +
                    "  <effectiveTime value=\"" + info.optString("create_date") + "\"/>\n" +
                    "  <recordTarget>\n" +
                    "    <patient>\n" +
                    "      <id extension=\""+ssid+"\"></id>\n" +
                    "      <name>"+info.optString("EHR_000004")+"</name>\n" +
                    "      <sex code=\"" + info.optString("EHR_000019") + "\" codeSystem=\"GB/T2261.1-2003\">" + info.optString("EHR_000019_VALUE") + "</sex>\n" +
                    "      <birthDate>" + info.optString("EHR_000007") + "</birthDate>\n" +
                    "      <marriage code=\"" + info.optString("EHR_000014") + "\" codeSystem=\"GB/T 2261.2-2003\">" + info.optString("EHR_000014_VALUE") + "</marriage>\n" +
                    "    </patient>\n" +
                    "  </recordTarget>\n" +
                    "  <component>\n" +
                    "    <section>\n" +
                    "      <code code=\"common\" codeSystem=\"\" displayName=\"住院诊疗基本信息\"/>\n" +
                    "      <entry>\n" +
                    "        <residence>\n" +
                    "          <serial>"+info.optString("EHR_000234") +"</serial>\n" +
                    "          <code>"+info.optString("EHR_000236")+"</code>\n" +
                    "        </residence>\n" +
                    "        <sec>\n" +
                    "          <type code=\"【保险类别(字典STD_SEC_TYPE)】\" codeSystem=\"STD_SEC_TYPE\">【保险类别名称】</type>\n" +
                    "          <value>"+info.optString("EHR_000232")+"</value>\n" +
                    "        </sec>\n" +
                    "        <in>\n" +
                    "          <time>"+info.optString("EHR_000230")+"</time>\n" +
                    "          <dept code=\""+info.optString("EHR_000228")+"\" codeSystem=\"GB/T 17538-1998\">"+info.optString("EHR_000229")+"</dept>\n" +
                    "          <bed>"+info.optString("EHR_000227")+"</bed>\n" +
                    "        </in>\n" +
                    "        <move>\n" +
                    //EHR转诊业务有问题
                    /*"          <item>\n" +
                    "            <time>转科时间</time>\n" +
                    "            <dept code=\"转科科室代码(字典STD_DEPT)\" codeSystem=\"GB/T 17538-1998\">转科后科室名称</dept>\n" +
                    "            <bed>转科后床号</bed>\n" +
                    "          </item>\n" +*/
                    "        </move>\n" +
                    "        <out>\n" +
                    "          <time>"+info.optString("EHR_000224")+"</time>\n" +
                    "          <dept code=\""+info.optString("EHR_000222")+"\" codeSystem=\"GB/T 17538-1998\">"+info.optString("EHR_000223")+"</dept>\n" +
                    "          <bed>"+info.optString("EHR_000221")+"</bed>\n" +
                    "        </out>\n" +
                    "        <onsetTime>"+info.optString("EHR_000230")+"</onsetTime>\n" +
                    "        <diagnosisDate>"+info.optString("EHR_000230")+"</diagnosisDate>\n" +
                    "        <cause code=\""+info.optString("EHR_000237")+"\" codeSystem=\"CV5401.04\">"+info.optString("EHR_000237_VALUE")+"</cause>\n" +
                    "       <symptom>\n" +
                    symptomString +
                    "        </symptom>\n" +
                    "        <illStatus code=\""+info.optString("EHR_000239")+"\" codeSystem=\"CV5502.18\">"+info.optString("EHR_000239_VALUE")+"</illStatus>\n" +
                    "        <infectiousStatus code=\""+info.optString("EHR_000238")+"\" codeSystem=\"STD_JUDGE\">"+info.optString("EHR_000238_VALUE")+"</infectiousStatus>\n" +
                    "        <inDiagnosis>\n" +
                    diagnosisString+
                    "        </inDiagnosis>\n" +
                    "        <outDiagnosis>\n" +
                    "          <item>\n" +
                    "            <icd code=\""+info.optString("EHR_000158")+"\" codeSystem=\"ICD-10\">"+info.optString("EHR_000159")+"</icd>\n" +
                    "            <result code=\""+info.optString("EHR_000166")+"\" codeSystem=\"CV5501.11\">"+info.optString("EHR_000166_VALUE")+"</result>\n" +
                    "            <prop code=\"【诊断性质代码(字典STD_DIAGNOSIS_PROP)】\" codeSystem=\"STD_DIAGNOSIS_PROP\">【诊断性质名称】</prop>\n" +
                    "          </item>\n" +
                    "        </outDiagnosis>\n" +
                    "        <deathTime>"+info.optString("EHR_000255")+"</deathTime>\n" +
                    "        <causeOfDeath code=\""+info.optString("EHR_000258")+"\" codeSystem=\"ICD-10\">"+info.optString("EHR_000258_VALUE")+"</causeOfDeath>\n" +
                    "      </entry>\n" +
                    "    </section>\n" +
                    "  </component>\n" +
                    "</ClinicalDocument>";
            return re;
        }
        else{
            return "";
        }
    }
}

+ 59 - 10
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsAllService.java

@ -68,6 +68,8 @@ public class StatisticsAllService extends BaseService {
    public long getIndexTotal(String endDate, String area, int level, String index) {
        long total = 0;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        boolean preFlag = false;
        String preDate = endDate;
        if (endDate.compareTo(dateFormat.format(new Date())) >= 0) {
            String val = redisTemplate.opsForValue().get("quota:" + index + ":" + level + ":" + area + ":" + getQuotaTimeStamp());
@ -76,8 +78,16 @@ public class StatisticsAllService extends BaseService {
                if (valJson.has("num")) {
                    total = valJson.getInt("num");
                }
            } else {
                preFlag = true;
                Calendar today = Calendar.getInstance();
                today.add(Calendar.DATE, -1);
                preDate = dateFormat.format(today.getTime());
            }
        } else {
            preFlag = true;
        }
        if (preFlag) {
            // 查询语句
            String sql = " select " +
                    "     ifnull(result,'0') amount" +
@ -101,7 +111,7 @@ public class StatisticsAllService extends BaseService {
                sql += " and qkdoctor_code = ?";
            }
            List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, new Object[]{index, level, endDate, area});
            List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, new Object[]{index, level, preDate, area});
            if (result != null && result.size() > 0) {
                total = (result.get(0).get("amount") != null ? Long.valueOf(result.get(0).get("amount").toString()) : 0L);
@ -122,16 +132,26 @@ public class StatisticsAllService extends BaseService {
    public long getWeiJiaoFei(String endDate, String area, int level) {
        long total = 0;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        boolean preFlag = false;
        String preDate = endDate;
        if (endDate.compareTo(dateFormat.format(new Date())) >= 0) {
            String val = redisTemplate.opsForValue().get("quota:16:" + level + ":"+ area + ":0:" + getQuotaTimeStamp());
            String val = redisTemplate.opsForValue().get("quota:16:" + level + ":" + area + ":0:" + getQuotaTimeStamp());
            if (!StringUtils.isEmpty(val)) {
                JSONObject valJson = new JSONObject(val);
                if (valJson.has("num")) {
                    total = valJson.getInt("num");
                }
            } else {
                preFlag = true;
                Calendar today = Calendar.getInstance();
                today.add(Calendar.DATE, -1);
                preDate = dateFormat.format(today.getTime());
            }
        } else {
            preFlag = true;
        }
        if (preFlag) {
            // 查询语句
            String sql = " select " +
                    "     ifnull(result,'0') amount" +
@ -156,7 +176,7 @@ public class StatisticsAllService extends BaseService {
                sql += " and qkdoctor_code = ?";
            }
            List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, new Object[]{level, endDate, area});
            List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, new Object[]{level, preDate, area});
            if (result != null && result.size() > 0) {
                total = (result.get(0).get("amount") != null ? Long.valueOf(result.get(0).get("amount").toString()) : 0L);
@ -239,13 +259,11 @@ public class StatisticsAllService extends BaseService {
        List<Map<String, Object>> resultList = new ArrayList<>();
        if (date.compareTo(dateFormat.format(new Date())) >= 0) {
            resultList = getTodayLowLevelTotal(date, area, level, index, lowLevel);
            resultList = getTodayLowLevelTotal(area, level, index, sort, lowLevel);
        } else {
            resultList = getTodayBeforeLowLevelTotal(date, area, level, index, sort, lowLevel);
        }
        // 结果为空时,自建结果集
        if (resultList == null || resultList.size() < 1) {
            resultList = getLowLevelMapKey(level, low_level, area);
@ -373,14 +391,13 @@ public class StatisticsAllService extends BaseService {
    /**
     * 获取今天某个区域一级指标的下级统计
     *
     * @param date
     * @param area
     * @param level
     * @param index
     * @param lowLevel
     * @return
     */
    public List<Map<String, Object>> getTodayLowLevelTotal(String date, String area, int level, String index, String lowLevel) {
    public List<Map<String, Object>> getTodayLowLevelTotal(String area, int level, String index, int sort, String lowLevel) throws Exception {
        List<Map<String, Object>> resultList = new ArrayList<>();
        String low_level = String.valueOf(StringUtils.isEmpty(lowLevel) ? (level - 1) : lowLevel);
        String redisData = redisTemplate.opsForValue().get("quota:" + index + ":" + level + ":" + area + ":" + low_level + ":" + getQuotaTimeStamp());
@ -398,6 +415,11 @@ public class StatisticsAllService extends BaseService {
                resultList.add(data);
            }
        } else {
            Calendar today = Calendar.getInstance();
            today.add(Calendar.DATE, -1);
            String preDate = new SimpleDateFormat("yyyy-MM-dd").format(today.getTime());
            resultList = getTodayBeforeLowLevelTotal(preDate, area, level, index, sort, lowLevel);
        }
        if (resultList.size() < 1) {
@ -649,6 +671,11 @@ public class StatisticsAllService extends BaseService {
                resultList.add(data);
            }
        } else {
            Calendar today = Calendar.getInstance();
            today.add(Calendar.DATE, -1);
            String preDate = new SimpleDateFormat("yyyy-MM-dd").format(today.getTime());
            resultList = getTodyBeforeLevelTwototal(preDate, area, level, index);
        }
        if (resultList.size() < 1) {
@ -834,6 +861,8 @@ public class StatisticsAllService extends BaseService {
        String areaField = "";
        SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd");
        List<Map<String, Object>> resultList = new ArrayList<>();
        boolean preFlag = false;
        String preDate = endDate;
        if (endDate.compareTo(datef.format(new Date())) >= 0) {
            String redisData = redisTemplate.opsForValue().get("quota:12:" + level + ":" + area + ":6:" + getQuotaTimeStamp());
@ -851,8 +880,17 @@ public class StatisticsAllService extends BaseService {
                    resultList.add(data);
                }
            } else {
                preFlag = true;
                Calendar today = Calendar.getInstance();
                today.add(Calendar.DATE, -1);
                preDate = datef.format(today.getTime());
            }
        } else {
            preFlag = true;
        }
        if (preFlag) {
            if (level == 4) {
                // 市级别
                areaField = "city";
@ -884,7 +922,7 @@ public class StatisticsAllService extends BaseService {
                    "   and " + areaField + " = ? " +
                    " group by level3_type,level3_type_name";
            resultList = jdbcTemplate.queryForList(sql, new Object[]{level, endDate, area});
            resultList = jdbcTemplate.queryForList(sql, new Object[]{level, preDate, area});
        }
        if (resultList == null || resultList.size() < 1) {
@ -947,6 +985,8 @@ public class StatisticsAllService extends BaseService {
        String areaField = "";
        long total = 0;
        SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd");
        boolean preFlag = false;
        String preDate = endDate;
        if (endDate.compareTo(datef.format(new Date())) >= 0) {
            String code = "6";
@ -956,8 +996,17 @@ public class StatisticsAllService extends BaseService {
                if (valJson.has("num")) {
                    total = valJson.getInt("num");
                }
            } else {
                preFlag = true;
                Calendar today = Calendar.getInstance();
                today.add(Calendar.DATE, -1);
                preDate = datef.format(today.getTime());
            }
        } else {
            preFlag = true;
        }
        if (preFlag) {
            if (level == 4) {
                // 市级别
                areaField = "city";
@ -988,7 +1037,7 @@ public class StatisticsAllService extends BaseService {
            List<Map<String, Object>> result = null;
            result = jdbcTemplate.queryForList(sql, new Object[]{level, endDate, area});
            result = jdbcTemplate.queryForList(sql, new Object[]{level, preDate, area});
            if (result != null && result.size() > 0) {
                total = (result.get(0).get("amount") == null ? 0 : Math.round(Double.valueOf(result.get(0).get("amount").toString())));

+ 2 - 2
patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java

@ -277,7 +277,7 @@ public class PushMsgTask {
                keyword4.setValue(json.getString("content"));
                m.put("keyword4", keyword4);
            } else if (type == 4) {
                temp.setUrl(url + "yszd/html/doctor-guidance.html?openid=" + openid + "&toUser=" + json.getString("toUser"));
                temp.setUrl(url + "yszd/html/guidance-detail.html?openid=" + openid + "&toUser=" + json.getString("toUser") + "&id=" + String.valueOf(json.get("id")));
                temp_id = SystemConf.getInstance().getSystemProperties().getProperty("template_health_notice");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
@ -366,7 +366,7 @@ public class PushMsgTask {
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("first"));
                keyword1.setValue("提醒医生:" + json.getString("doctorName"));
                m.put("first", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");

+ 1 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/account/PatientController.java

@ -794,7 +794,7 @@ public class PatientController extends WeixinBaseController {
            if (status == -1) {
                return error(-1, "成员信息查询失败");
            } else if (status == -2) {
                return error(-1, "家庭成员不存在该人");
                return error(-2, "家庭成员不存在该人");
            } else {
                return write(200, "切换账号成功", "data", result.getJSONObject("data"));
            }

+ 2 - 2
patient-co-wlyy/src/main/resources/system.properties

@ -119,7 +119,7 @@ yihu_guahao_secret=sanshi
#微信模板消息ID
#----------------开发环境-----------------#
#签约邀请
doctor_invitel_template=MQn79bx1ofb6hekhmRIuqLU7KjySJQzaBzrimgqVrzA
doctor_invitel_template=TLWrBtNE2kBJaFCdVzDOOnQC8N2TtRY9ZxEzwZXQcR0
#咨询回复
template_consult_notice=qSOW0DBxO3qEBm4ucG0Ial0jxsOyD7_f2TFK5e-mQEc
#签约成功
@ -203,7 +203,7 @@ guahao_url = http://www.xmsmjk.com/UrpNetService/ReservationNet.asmx
guahao_namespace = http://www.zysoft.com.cn/
#EHR档案服务地址
ehr_used = false
ehr_used = true
ehr_services = http://localhost:9009/api/v1.0/
ehr_services_base = http://localhost:10220/api/v1.0/