package com.ynxbd.common.dao.his; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.bean.Dept; import com.ynxbd.common.bean.Doctor; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.helper.common.*; import com.ynxbd.common.helper.his.HisEnum; import com.ynxbd.common.helper.his.HisHelper; import com.ynxbd.common.result.JsonResult; import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * His挂号调用 * * @Author wsq * @Date 2020/10/30 11:59 * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. */ @Slf4j public class HisRegisterDao { /** * [预约挂号]获取医生列表 * * @param deptCode 科室代码 * @return 医生列表 */ public List getRegReserveDoctorList(String deptCode, String regDate) { log.info("[预约挂号]查询HIS医生列表"); List resultList = new ArrayList<>(); if (regDate == null) { log.info("[预约挂号]获取医生列表失败 regDate 为空"); return resultList; } Map params = new HashMap<>(); params.put("DeptCode", deptCode); params.put("DoctCode", ""); params.put("ReservationDate", regDate); params.put("AllowResevationFlag", "1"); JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Reservation_Doct, params); if (!jsonResult.success()) { return resultList; } List doctorList = new ArrayList<>(); String deptName = jsonResult.getDataMapString("DeptName"); JSONArray jsonArray = jsonResult.getJsonArray("Doctor"); Doctor doctorItem; JSONObject node; Register regItem; BigDecimal regFee, clinicFee; for (int i = 0; i < jsonArray.size(); i++) { node = jsonArray.getJSONObject(i); doctorItem = new Doctor(); doctorItem.setDeptCode(deptCode); doctorItem.setDeptName(deptName); doctorItem.setDoctCode(node.getString("DoctCode")); doctorItem.setDoctName(node.getString("DoctName")); doctorItem.setTitle(node.getString("Title")); // doctorItem.setTitleCode(node.getString("TitleCode")); // doctorItem.setIsExpert(node.getInteger("IsExpertRegistion")); // 是否是专家 doctorItem.setDescription(node.getString("Spec")); // 特长 // 号源 regItem = new Register(); regItem.setClinicCode(node.getString("ClinicCode")); // regItem.setClinicName(node.getString("ClinicName")); // regItem.setTid(node.getString("TID")); // regItem.setTName(node.getString("TID")); // regItem.setSourceCount(node.getInteger("TotalCount")); // 总号源数量 regItem.setRemainCount(node.getInteger("RemainCount")); // 剩余号源数 regItem.setAllowReg(node.getInteger("AllowRegist")); // regItem.setRegDate(node.getString("ReservationDate")); regItem.setAddress(node.getString("Address")); // 金额 regFee = node.getBigDecimal("RegFee"); clinicFee = node.getBigDecimal("ClinicFee"); if (regFee == null) { regFee = BigDecimal.ZERO; } if (clinicFee == null) { clinicFee = BigDecimal.ZERO; } regItem.setRegFee(regFee); regItem.setClinicFee(clinicFee); regItem.setPayMoney(regFee.add(clinicFee)); doctorItem.setRegister(regItem); doctorList.add(doctorItem); } String appId = WeChatConfig.APP_ID; if ("wx14ea983bce19d64c".equals(appId)) { // 富民晚班不能预约 Register register; for (Doctor doctor : doctorList) { register = doctor.getRegister(); if (register != null) { String tid = register.getTid(); if (tid != null && !tid.trim().contains("晚班")) { resultList.add(doctor); } } } } else { resultList = doctorList; } return resultList; } /** * [现场挂号]获取现场挂号医生列表 * * @param deptCode 科室代码 * @param timeInterval 挂号时段显示 * @return 医生列表 */ public List getRegTodayDoctorList(String deptCode, String timeInterval) { log.info("[现场挂号]查询HIS医生列表 deptCode={}", deptCode); Map params = new HashMap<>(); params.put("DeptCode", deptCode); params.put("DoctCode", ""); params.put("AllowRegistFlag", "1"); // 只返回有号源的医生 JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Doct, params); List resultList = new ArrayList<>(); if (!jsonResult.success()) { return resultList; } List doctorList = new ArrayList<>(); String deptName = jsonResult.getDataMapString("DeptName"); JSONArray jsonArray = jsonResult.getJsonArray("Doctor"); Doctor doctorItem; JSONObject node; Register regItem; BigDecimal regFee, clinicFee; String today = DateHelper.getCurDate(); for (int i = 0; i < jsonArray.size(); i++) { node = jsonArray.getJSONObject(i); doctorItem = new Doctor(); doctorItem.setDeptCode(deptCode); doctorItem.setDeptName(deptName); doctorItem.setDoctCode(node.getString("DoctCode")); doctorItem.setDoctName(node.getString("DoctName")); doctorItem.setTitle(node.getString("Title")); // doctorItem.setTitleCode(node.getString("TitleCode")); // doctorItem.setIsExpert(node.getInteger("IsExpertRegistion")); // 是否是专家 doctorItem.setDescription(node.getString("Spec")); // 特长 // 号源 regItem = new Register(); regItem.setClinicCode(node.getString("ClinicCode")); // regItem.setClinicName(node.getString("ClinicName")); // regItem.setTid(node.getString("TID")); // 时段id regItem.setTName(node.getString("TID")); // 时段名 regItem.setSourceCount(node.getInteger("TotalCount")); // 总号源数量 regItem.setRemainCount(node.getInteger("RemainCount")); // 剩余号源数 regItem.setAllowReg(node.getInteger("AllowReservation")); // regItem.setAddress(node.getString("Address")); regItem.setRegDate(today); // 今天 // 金额 regFee = node.getBigDecimal("RegFee"); clinicFee = node.getBigDecimal("ClinicFee"); if (regFee == null) { regFee = BigDecimal.ZERO; } if (clinicFee == null) { clinicFee = BigDecimal.ZERO; } regItem.setRegFee(regFee); regItem.setClinicFee(clinicFee); regItem.setPayMoney(regFee.add(clinicFee)); doctorItem.setRegister(regItem); doctorList.add(doctorItem); } // 丽江古城区 "08:00:00", "11:59:00" | "12:00:00", "13:54:00" | "13:55:00", "17:30:00" // 芒市 "08:00:00", "11:45:00" | "11:46:00", "14:31:00" | "14:30:00", "17:30:00" // 蒙自市 07:40:00", "11:30:00 | "11:31:00", "13:44:00" | "13:45:00", "17:30:00" String defaultTimeInterval = "{\"am\":{\"begTime\":\"08:00\",\"endTime\":\"12:00\"},\"pm\":{\"begTime\":\"14:00\",\"endTime\":\"17:30\"},\"noon\":{\"begTime\":\"12:01\",\"endTime\":\"13:59\"}}"; if (ObjectUtils.isEmpty(timeInterval)) { timeInterval = defaultTimeInterval; } JSONObject jsonObj = JsonHelper.parseObject(timeInterval); if (jsonObj == null) { jsonObj = JsonHelper.parseObject(defaultTimeInterval); } JSONObject am = jsonObj.getJSONObject("am"); // 早上 JSONObject pm = jsonObj.getJSONObject("pm"); // 下午 JSONObject noon = jsonObj.getJSONObject("noon"); // 中午 JSONObject night = jsonObj.getJSONObject("night"); // 晚上 // 早上 if (am == null) { am = JsonHelper.parseObject("{ begTime: '08:00', endTime: '12:00' }"); } String amBegTime = DateHelper.timeToHms(am.getString("begTime"), "08:00:00"); String amEndTime = DateHelper.timeToHms(am.getString("endTime"), "12:00:00"); // 下午 if (pm == null) { pm = JsonHelper.parseObject("{ begTime: '14:01', endTime: '17:00' }"); } String pmBegTime = DateHelper.timeToHms(pm.getString("begTime"), "14:01:00"); String pmEndTime = DateHelper.timeToHms(pm.getString("endTime"), "17:30:00"); // 中午 if (noon == null) { noon = JsonHelper.parseObject("{ begTime: '12:01', endTime: '14:00' }"); } String noonBegTime = DateHelper.timeToHms(noon.getString("begTime"), "12:01:00"); String noonEndTime = DateHelper.timeToHms(noon.getString("endTime"), "14:00:00"); String nightBegTime = null; String nightEndTime = null; // 中午 if (night != null) { nightBegTime = DateHelper.timeToHms(night.getString("begTime"), null); nightEndTime = DateHelper.timeToHms(night.getString("endTime"), null); } log.info("[挂号]时段参数 早上:{}-{}, 下午:{}-{}, 中午:{}-{}", amBegTime, amEndTime, pmBegTime, pmEndTime, noonBegTime, noonEndTime); int key; if (DateHelper.inTimeRangeH_m_s(amBegTime, amEndTime)) { // 上午 key = 1; } else if (DateHelper.inTimeRangeH_m_s(noonBegTime, noonEndTime)) { // 中午 key = 2; } else if (DateHelper.inTimeRangeH_m_s(pmBegTime, pmEndTime)) { // 下午 key = 3; } else { key = 4; } // 晚班 boolean isNight = night != null && nightBegTime != null && nightEndTime != null && DateHelper.inTimeRangeH_m_s(nightBegTime, nightEndTime); log.info("【现场挂号】时段{{}}", key); Register register; for (Doctor doctor : doctorList) { register = doctor.getRegister(); if (register == null) { continue; } String tid = register.getTid(); tid = tid == null ? "" : tid.trim(); if (tid.contains("全天")) { resultList.add(doctor); } else if (key == 1 && (tid.contains("上午") || tid.contains("上午及下午") || (isNight && (tid.contains("晚班") || tid.contains("晚上"))))) { resultList.add(doctor); } else if (key == 2 && tid.contains("中午") || (isNight && (tid.contains("晚班") || tid.contains("晚上")))) { resultList.add(doctor); } else if (key == 3 && (tid.contains("下午") || tid.contains("上午及下午") || (isNight && (tid.contains("晚班") || tid.contains("晚上"))))) { resultList.add(doctor); } else if (key == 4 && (tid.contains("晚班") || tid.contains("晚上"))) { if (night == null || nightBegTime == null || nightEndTime == null) { resultList.add(doctor); } else { if (DateHelper.inTimeRangeH_m_s(nightBegTime, nightEndTime)) { resultList.add(doctor); } } } } return resultList; } /** * [预约挂号]获取科室列表 * * @return 预约科室列表 */ public List getRegResDeptList() { log.info("[预约挂号]查询HIS科室列表"); List resultList = new ArrayList<>(); Map params = new HashMap<>(); params.put("DeptCode", ""); // 空为所有 params.put("ReservationDate", ""); // 空为近7天 JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Reservation_Dept, params); if (!jsonResult.success()) { return resultList; } List deptList = new ArrayList<>(); JSONArray jsonArray = jsonResult.getJsonArray("Dept"); RegisterDao registerDao = new RegisterDao(); List wxDeptList = registerDao.selectDeptList(); String subDeptJson; List subDeptList; String subDeptName, subDeptCode; JSONObject subDeptItem; Dept subDept; Dept dept; JSONObject nodeItem; String address, deptCode, deptName, hospitalAreaName; JSONObject subDeptData; JSONArray dataItems; for (int i = 0; i < jsonArray.size(); i++) { nodeItem = jsonArray.getJSONObject(i); deptCode = nodeItem.getString("Code"); deptName = nodeItem.getString("Name"); address = nodeItem.getString("Address"); hospitalAreaName = nodeItem.getString("HospitalAreaName"); // 科室过滤 dept = registerDao.deptFilter(wxDeptList, deptCode, deptName, address, hospitalAreaName); if (dept != null) { subDeptJson = nodeItem.getString("Code_YZKStr"); if (!ObjectUtils.isEmpty(subDeptJson)) { subDeptData = JsonHelper.parseObject(subDeptJson); dataItems = subDeptData.getJSONArray("Data"); subDeptList = new ArrayList<>(); for (int j = 0; j < dataItems.size(); j++) { subDeptItem = dataItems.getJSONObject(j); subDeptName = subDeptItem.getString("Name"); subDeptCode = subDeptItem.getString("Code"); subDept = new Dept(); subDept.setDeptName(subDeptName); subDept.setDeptCode(subDeptCode); subDeptList.add(subDept); } dept.setChildren(subDeptList); } deptList.add(dept); } } return deptList; } /** * [现场挂号]获取科室列表 * * @param hasSourcesFlag 有号源标识 { 1:仅返回有号源科室; 0:有无号源科室都返回(默认值)} * @return 科室列表 */ public List getRegTodayDeptList(String hasSourcesFlag) { if (ObjectUtils.isEmpty(hasSourcesFlag)) { hasSourcesFlag = "1"; } if (!"0".equals(hasSourcesFlag) && !"1".equals(hasSourcesFlag)) { hasSourcesFlag = "1"; } log.info("[现场挂号]查询HIS科室列表"); List resultList = new ArrayList<>(); Map params = new HashMap<>(); params.put("DeptCode", ""); // 空为所有 params.put("HasSourcesFlag", hasSourcesFlag); // 1:仅返回有号源科室; 0:有无号源科室都返回(默认值) JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Dept, params); if (!jsonResult.success()) { return resultList; } List deptList = new ArrayList<>(); JSONArray jsonArray = jsonResult.getJsonArray("Dept"); RegisterDao registerDao = new RegisterDao(); List wxDeptList = registerDao.selectDeptList(); String subDeptJson; List subDeptList; String subDeptName, subDeptCode; JSONObject subDeptItem; Dept subDept; Dept dept; JSONObject nodeItem; String address, deptCode, deptName, hospitalAreaName; for (int i = 0; i < jsonArray.size(); i++) { nodeItem = jsonArray.getJSONObject(i); deptCode = nodeItem.getString("Code"); deptName = nodeItem.getString("Name"); address = nodeItem.getString("Address"); hospitalAreaName = nodeItem.getString("HospitalAreaName"); // 科室过滤 dept = registerDao.deptFilter(wxDeptList, deptCode, deptName, address, hospitalAreaName); if (dept != null) { subDeptJson = nodeItem.getString("Code_YZKStr"); if (!ObjectUtils.isEmpty(subDeptJson)) { JSONObject subDeptData = JsonHelper.parseObject(subDeptJson); JSONArray dataItems = subDeptData.getJSONArray("Data"); subDeptList = new ArrayList<>(); for (int j = 0; j < dataItems.size(); j++) { subDeptItem = dataItems.getJSONObject(j); subDeptName = subDeptItem.getString("Name"); subDeptCode = subDeptItem.getString("Code"); subDept = new Dept(); subDept.setDeptName(subDeptName); subDept.setDeptCode(subDeptCode); subDeptList.add(subDept); } dept.setChildren(subDeptList); } deptList.add(dept); } } String appId = WeChatConfig.APP_ID; if ("wx99b45c38093d17f9".equals(appId)) { // 武定县人民医院挂号时间段定为7:30-11:30 if (DateHelper.inTimeRangeH_m_s("07:30:00", "11:30:00") || DateHelper.inTimeRangeH_m_s("13:30:00", "17:00:00")) { // 在时间段内 resultList = new ArrayList<>(deptList); } } else { resultList = new ArrayList<>(deptList); } return resultList; } /** * [现场挂号]根据患者id获取挂号记录 * * @param patientId 患者id * @return 挂号记录 */ public List getRegSiteHistory(String patientId, String regDate) { List resultList = new ArrayList<>(); Map params = new HashMap<>(); params.put("PatientID", patientId); params.put("MZNum", null); params.put("RegistDate", regDate); JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Regist, params); if (!JsonResult.success()) { return resultList; } JSONArray jsonArray = JsonResult.getJsonArray("Reg"); Register reg; BigDecimal payMoney; JSONObject node; for (int i = 0; i < jsonArray.size(); i++) { node = jsonArray.getJSONObject(i); reg = new Register(); reg.setDeptCode(node.getString("DeptCode")); // reg.setDeptName(node.getString("DeptName")); // reg.setDoctCode(node.getString("DoctCode")); // reg.setDoctName(node.getString("DoctName")); // reg.setAddress(node.getString("Address")); // reg.setTreatNum(node.getString("MZNum")); // 门诊号 reg.setClinicCode(node.getString("ClinicCode")); // reg.setClinicName(node.getString("ClinicName")); // reg.setOrderFromOwner(node.getString("OrderFromOwner")); // // 日期 reg.setRegDate(node.getString("RegistDate")); reg.setBegTime(node.getString("BegTime")); reg.setEndTime(node.getString("EndTime")); // 是否取号 reg.setIsTake(node.getInteger("IsTake")); // 是否就诊 reg.setIsTreat(node.getInteger("IsTreat")); // HIS reg.setHisTransNo(node.getString("HISTransNo")); // // 金额 payMoney = node.getBigDecimal("RegistMoney"); reg.setPayMoney(payMoney == null ? BigDecimal.ZERO : payMoney); // resultList.add(reg); } return resultList; } /** * [预约挂号]根据患者id查询预约记录 * * @param patientId 患者id * @param regDate 挂号日期 * @return 预约记录 */ public List getRegReserveHistory(String patientId, String regDate) { List resultList = new ArrayList<>(); Map params = new HashMap<>(); params.put("PatientID", patientId); params.put("ReservationDate", regDate); params.put("ReservationTransNo", ""); params.put("AfterTodayFlag", "0"); JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Reservation, params); if (!JsonResult.success()) { return resultList; } JSONArray jsonArray = JsonResult.getJsonArray("Reservation"); Register reg; JSONObject node; BigDecimal regFee, clinicFee; String doctorCode, doctorName; for (int i = 0; i < jsonArray.size(); i++) { node = jsonArray.getJSONObject(i); reg = new Register(); reg.setDeptCode(node.getString("DeptCode")); reg.setDeptName(node.getString("DeptName")); doctorCode = node.getString("DoctCode"); doctorName = node.getString("DoctName"); if (ObjectUtils.isEmpty(doctorCode)) { doctorCode = node.getString("TitleCode"); } if (ObjectUtils.isEmpty(doctorName)) { doctorName = node.getString("Title"); } reg.setDoctCode(doctorCode); reg.setDoctName(doctorName); reg.setAddress(node.getString("Address")); reg.setClinicCode(node.getString("ClinicCode")); // reg.setClinicName(node.getString("ClinicName")); // reg.setOrderFromOwner(node.getString("OrderFromOwner")); // // 时段 reg.setTid(node.getString("TID")); reg.setTName(node.getString("TID")); // 是否取号 reg.setIsTake(node.getInteger("IsTake")); // 是否就诊 reg.setIsTreat(node.getInteger("IsTreat")); reg.setRegDate(node.getString("ReservationDate")); // 日期 reg.setHisTransNo(node.getString("HISTransNo")); // HIS流水号 reg.setTradeNo(node.getString("ReservationTransNo")); // HIS交易流水号 reg.setHospitalArea(node.getString("HospitalAreaName")); // HIS交易流水号 reg.setBegTime(node.getString("BegTime")); reg.setEndTime(node.getString("EndTime")); // 金额 regFee = node.getBigDecimal("RegFee"); if (regFee == null) { regFee = BigDecimal.ZERO; } clinicFee = node.getBigDecimal("ClinicFee"); if (clinicFee == null) { clinicFee = BigDecimal.ZERO; } reg.setRegFee(regFee); reg.setClinicFee(clinicFee); reg.setPayMoney(regFee.add(clinicFee)); resultList.add(reg); } return resultList; } /** * 取消预约 * * @param patientId 患者ID * @param tradeNo HIS交易流水号 * @return WsResult响应码 */ public JsonResult cancelReserve(String patientId, String tradeNo) { Map params = new HashMap<>(); params.put("PatientID", patientId); params.put("ReservationTransNo", tradeNo); params.put("RecallTransNo", "R" + tradeNo); return HisHelper.getJsonResult(HisEnum.AP_Recall_Reservation, params); } /** * 查询患者是否挂过号 * * @param patientId 患者ID * @param regDate 挂号时间 * @return boolean */ public List hasRegSite(String patientId, String regDate) { return getRegSiteHistory(patientId, regDate); } /** * 查询患者是否预约过 * * @param patientId 患者ID * @param regDate 挂号时间 * @return boolean */ public List hasRegReserve(String patientId, String regDate) { return getRegReserveHistory(patientId, regDate); } // 分时段--------------------------------------------------------------------------- /** * [分时段挂号]查询科室 * * @param begDate 开始时间 * @param endDate 结束时间 * @return 科室列表 */ public List getTimeDeptList(String begDate, String endDate) { List deptList = new ArrayList<>(); Map params = new HashMap<>(); params.put("DeptCode", "");// 空为所有 params.put("RegistBegDate", begDate); params.put("RegistEndDate", endDate); params.put("CanRegistFlag", "1"); // 1:返回有号源的科室 JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Dept_New, params); if (!JsonResult.success()) { log.info("[科室-分时段]{}", JsonResult.getMessage()); return deptList; } JSONArray jsonArray = JsonResult.getJsonArray("Dept"); Dept dept; JSONObject nodeItem; String address, deptCode, deptName, hospitalAreaName; RegisterDao registerDao = new RegisterDao(); List wxDeptList = registerDao.selectDeptList(); String subDeptJson; List subDeptList; String subDeptName, subDeptCode; JSONObject subDeptItem; Dept subDept; for (int i = 0; i < jsonArray.size(); i++) { nodeItem = jsonArray.getJSONObject(i); deptCode = nodeItem.getString("Code"); deptName = nodeItem.getString("Name"); address = nodeItem.getString("Address"); hospitalAreaName = nodeItem.getString("HospitalAreaName"); // 科室过滤 dept = registerDao.deptFilter(wxDeptList, deptCode, deptName, address, hospitalAreaName); if (dept != null) { // 亚专科 subDeptJson = nodeItem.getString("Code_YZKStr"); if (!ObjectUtils.isEmpty(subDeptJson)) { JSONObject subDeptData = JsonHelper.parseObject(subDeptJson); JSONArray dataItems = subDeptData.getJSONArray("Data"); subDeptList = new ArrayList<>(); for (int j = 0; j < dataItems.size(); j++) { subDeptItem = dataItems.getJSONObject(j); subDeptName = subDeptItem.getString("Name"); subDeptCode = subDeptItem.getString("Code"); subDept = new Dept(); subDept.setDeptName(subDeptName); subDept.setDeptCode(subDeptCode); subDeptList.add(subDept); } dept.setChildren(subDeptList); } deptList.add(dept); } } return deptList; } /** * 分时段医生查询 * * @param deptCode 科室编码 * @param subDeptCode 亚专科编码 * @param begDate 开始日期 * @param endDate 结束日期 * @return list */ public List getTimeDoctorList(String deptCode, String subDeptCode, String begDate, String endDate) { Map params = new HashMap<>(); params.put("DeptCode", deptCode); params.put("DoctCode", null); // 空为所有 params.put("RegistBegDate", begDate); params.put("RegistEndDate", endDate); params.put("CanRegistFlag", "0"); // { 0:返回所有医生; 1:仅返回有号源的医师 } if (!ObjectUtils.isEmpty(subDeptCode)) { params.put("DeptCode_YZKCode", subDeptCode); // 亚专科code } JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Doct_New, params); List resultList = new ArrayList<>(); if (!JsonResult.success()) { log.info("[医生-分时段查询]{}", JsonResult.getMessage()); return resultList; } JSONArray deptJsonList = JsonResult.getJsonArray("Dept"); JSONObject deptJson, doctorJson; String deptName; Doctor doctorItem; JSONArray doctorJsonList; for (int i = 0; i < deptJsonList.size(); i++) { deptJson = deptJsonList.getJSONObject(i); deptName = ParamHelper.spaceFormat(deptJson.getString("DeptName")); doctorJsonList = deptJson.getJSONArray("Doct"); for (int k = 0; k < doctorJsonList.size(); k++) { doctorJson = doctorJsonList.getJSONObject(k); doctorItem = new Doctor(); doctorItem.setDeptCode(deptCode); doctorItem.setDeptName(deptName); doctorItem.setDoctCode(ParamHelper.spaceFormat(doctorJson.getString("DoctCode"))); doctorItem.setDoctName(ParamHelper.spaceFormat(doctorJson.getString("DoctName"))); // doctorItem.setTitle(ParamHelper.spaceFormat(doctorJson.getString("Title"))); // 职称 doctorItem.setTitleCode(ParamHelper.spaceFormat(doctorJson.getString("TitleCode"))); // doctorItem.setDescription(ParamHelper.spaceFormat(doctorJson.getString("Spec"))); // 描述 // doctorItem.setSurplusSources(doctorJson.getInteger("SurplusSources")); // 描述 resultList.add(doctorItem); } } return resultList; } /** * [分时段]根据科室code和医生code查询医生号源 * * @param deptCode 科室code * @param doctCode 医生code * @param subDeptCode 亚专科code(可为空,为空查询大科室) * @param begDate 开始日期(yyyy-MM-dd HH:mm:ss) * @param endDate 结束日期(yyyy-MM-dd) * @return 号源集合 */ public List> getTimeSource(String deptCode, String subDeptCode, String doctCode, String begDate, String endDate) { if (DateHelper.isToday(begDate)) { begDate = begDate + " " + DateHelper.getCurTime(); } Map params = new HashMap<>(); params.put("DeptCode", deptCode); params.put("DoctCode", doctCode); params.put("RegistBegDate", begDate); params.put("RegistEndDate", endDate); params.put("CanRegistFlag", "1"); // 仅返回有号源的医师 { 空或0:所有; 1:仅返回可挂号源 } params.put("TimeInterval", 0); // 排班时段[ 0:所有时段、1:上午、2:中午、3:下午、4:晚上 ] if (!ObjectUtils.isEmpty(subDeptCode)) { params.put("DeptCode_YZKCode", subDeptCode); // 亚专科code } JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Register_Source_New, params); List> resultList = new ArrayList<>(); if (!JsonResult.success()) { log.info("[号源-分时段查询]{}", JsonResult.getMessage()); return resultList; } try { JSONArray jsonArray = JsonResult.getJsonArray("Dept", "Doct", "TimeInterval"); JSONObject timeNode, sourceNode; Map map; Register reg; JSONArray sourceArr; BigDecimal regMoney; List list; String tid, tName; for (int i = 0; i < jsonArray.size(); i++) { timeNode = jsonArray.getJSONObject(i); map = new HashMap<>(); tid = timeNode.getString("TID"); tName = timeNode.getString("TName"); map.put("tid", tid); map.put("tName", tName); sourceArr = timeNode.getJSONArray("Source"); list = new ArrayList<>(); for (int k = 0; k < sourceArr.size(); k++) { sourceNode = sourceArr.getJSONObject(k); regMoney = sourceNode.getBigDecimal("RegistPrice"); if (regMoney == null) { regMoney = BigDecimal.ZERO; } if (k == 0) { map.put("regName", sourceNode.getString("RegistName")); map.put("payMoney", regMoney); } reg = new Register(); reg.setTid(tid); reg.setTName(tName); reg.setRegFee(regMoney); // ----------------------- reg.setSourceId(sourceNode.getString("SourceId")); reg.setQueueNum(sourceNode.getString("QueueNumber")); reg.setBegTime(sourceNode.getString("BegTime")); reg.setEndTime(sourceNode.getString("EndTime")); reg.setRegCode(sourceNode.getString("RegistCode")); reg.setRegName(sourceNode.getString("RegistName")); reg.setRegDate(sourceNode.getString("RegistDate")); reg.setAddress(sourceNode.getString("ClinicAddress")); reg.setAllowReg(sourceNode.getInteger("AllowOnline")); reg.setIsUsed(sourceNode.getInteger("IsUsed")); list.add(reg); } map.put("sourceList", list); resultList.add(map); } } catch (Exception e) { e.printStackTrace(); ErrorHelper.println(e); } return resultList; } /** * 执行分时段挂号 * * @param reg 挂号信息 * @return 结果 */ public JsonResult handleTimeReg(Register reg, MerchantEnum merchantEnum) { Map params = new HashMap<>(); params.put("PatientID", reg.getPatientId()); params.put("SourceId", reg.getSourceId()); params.put("DeptCode", reg.getDeptCode()); params.put("DoctCode", reg.getDoctCode()); params.put("TimeInterval", reg.getTid()); params.put("BegTime", reg.getBegTime()); params.put("EndTime", reg.getEndTime()); params.put("RegistCode", reg.getRegCode()); params.put("RegistDate", reg.getRegDate()); params.put("PayMoney", reg.getPayMoney()); params.put("PayDate", reg.getPayDate()); params.put("PayTime", reg.getPayTime()); params.put("TransNo", reg.getTradeNo()); params.put("PayWay", merchantEnum.HIS_PAY_WAY); if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) { params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code } params.put("OpenId", reg.getOpenid()); params.put("Token", WeChatConfig.TOKEN); return HisHelper.getJsonResult(HisEnum.AP_Regist_New, params); } /** * 执行挂号 * * @param reg 参数 * @return map */ public JsonResult handleReg(Register reg, MerchantEnum merchantEnum) { Map params = new HashMap<>(); String regDate = reg.getRegDate(); params.put("PatientID", reg.getPatientId()); params.put("DeptCode", reg.getDeptCode()); params.put("DoctCode", reg.getDoctCode()); params.put("TID", reg.getTid()); params.put("ClinicCode", reg.getClinicCode()); params.put("ClinicFee", reg.getClinicFee()); params.put("RegFee", reg.getRegFee()); params.put("PayMoney", reg.getPayMoney()); params.put("PayDate", reg.getPayDate()); params.put("PayTime", reg.getPayTime()); params.put("TransNo", reg.getTradeNo()); params.put("BankTransNo", reg.getBankTransNo()); params.put("PayDeviceID", "mobile"); params.put("PayWay", merchantEnum.HIS_PAY_WAY); if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) { params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code } if (DateHelper.isToday(regDate)) { // 今日挂号 return HisHelper.getJsonResult(HisEnum.AP_Regist, params); } // 预约挂号 params.put("ReservationDate", regDate); return HisHelper.getJsonResult(HisEnum.AP_Reservation, params); } /** * 分时段挂号--是否占号 * * @param patientId 患者id * @param sourceId 号源id * @return true:是; false:否 */ public synchronized static JsonResult isOccupySource(String patientId, String sourceId) { Map params = new HashMap<>(); params.put("PatientID", patientId); params.put("SourceId", sourceId); params.put("TransNo", CodeHelper.get32UUID()); return HisHelper.getJsonResult(HisEnum.AP_Occupy_Source_New, params); } }