You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					
					
						
							937 lines
						
					
					
						
							37 KiB
						
					
					
				
			
		
		
	
	
							937 lines
						
					
					
						
							37 KiB
						
					
					
				| 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<Doctor> getRegReserveDoctorList(String deptCode, String regDate) {
 | |
|         log.info("[预约挂号]查询HIS医生列表");
 | |
| 
 | |
|         List<Doctor> resultList = new ArrayList<>();
 | |
|         if (regDate == null) {
 | |
|             log.info("[预约挂号]获取医生列表失败 regDate 为空");
 | |
|             return resultList;
 | |
|         }
 | |
| 
 | |
|         Map<String, Object> 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<Doctor> 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<Doctor> getRegTodayDoctorList(String deptCode, String timeInterval) {
 | |
|         log.info("[现场挂号]查询HIS医生列表 deptCode={}", deptCode);
 | |
| 
 | |
|         Map<String, Object> params = new HashMap<>();
 | |
|         params.put("DeptCode", deptCode);
 | |
|         params.put("DoctCode", "");
 | |
|         params.put("AllowRegistFlag", "1"); // 只返回有号源的医生
 | |
| 
 | |
|         JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Doct, params);
 | |
| 
 | |
|         List<Doctor> resultList = new ArrayList<>();
 | |
|         if (!jsonResult.success()) {
 | |
|             return resultList;
 | |
|         }
 | |
| 
 | |
|         List<Doctor> 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<Dept> getRegResDeptList() {
 | |
|         log.info("[预约挂号]查询HIS科室列表");
 | |
|         List<Dept> resultList = new ArrayList<>();
 | |
| 
 | |
|         Map<String, Object> 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<Dept> deptList = new ArrayList<>();
 | |
|         JSONArray jsonArray = jsonResult.getJsonArray("Dept");
 | |
| 
 | |
| 
 | |
|         RegisterDao registerDao = new RegisterDao();
 | |
|         List<Dept> wxDeptList = registerDao.selectDeptList();
 | |
| 
 | |
|         String subDeptJson;
 | |
|         List<Dept> 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<Dept> getRegTodayDeptList(String hasSourcesFlag) {
 | |
|         if (ObjectUtils.isEmpty(hasSourcesFlag)) {
 | |
|             hasSourcesFlag = "1";
 | |
|         }
 | |
| 
 | |
|         if (!"0".equals(hasSourcesFlag) && !"1".equals(hasSourcesFlag)) {
 | |
|             hasSourcesFlag = "1";
 | |
|         }
 | |
| 
 | |
|         log.info("[现场挂号]查询HIS科室列表");
 | |
|         List<Dept> resultList = new ArrayList<>();
 | |
| 
 | |
|         Map<String, Object> 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<Dept> deptList = new ArrayList<>();
 | |
|         JSONArray jsonArray = jsonResult.getJsonArray("Dept");
 | |
| 
 | |
|         RegisterDao registerDao = new RegisterDao();
 | |
|         List<Dept> wxDeptList = registerDao.selectDeptList();
 | |
| 
 | |
|         String subDeptJson;
 | |
|         List<Dept> 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<Register> getRegSiteHistory(String patientId, String regDate) {
 | |
|         List<Register> resultList = new ArrayList<>();
 | |
|         Map<String, Object> 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<Register> getRegReserveHistory(String patientId, String regDate) {
 | |
|         List<Register> resultList = new ArrayList<>();
 | |
|         Map<String, Object> 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<String, Object> 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<Register> hasRegSite(String patientId, String regDate) {
 | |
|         return getRegSiteHistory(patientId, regDate);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 查询患者是否预约过
 | |
|      *
 | |
|      * @param patientId 患者ID
 | |
|      * @param regDate   挂号时间
 | |
|      * @return boolean
 | |
|      */
 | |
|     public List<Register> hasRegReserve(String patientId, String regDate) {
 | |
|         return getRegReserveHistory(patientId, regDate);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     // 分时段---------------------------------------------------------------------------
 | |
| 
 | |
|     /**
 | |
|      * [分时段挂号]查询科室
 | |
|      *
 | |
|      * @param begDate 开始时间
 | |
|      * @param endDate 结束时间
 | |
|      * @return 科室列表
 | |
|      */
 | |
|     public List<Dept> getTimeDeptList(String begDate, String endDate) {
 | |
|         List<Dept> deptList = new ArrayList<>();
 | |
| 
 | |
|         Map<String, Object> 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<Dept> wxDeptList = registerDao.selectDeptList();
 | |
| 
 | |
|         String subDeptJson;
 | |
|         List<Dept> 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<Doctor> getTimeDoctorList(String deptCode, String subDeptCode, String begDate, String endDate) {
 | |
|         Map<String, Object> 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<Doctor> 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<Map<Object, Object>> getTimeSource(String deptCode, String subDeptCode, String doctCode, String
 | |
|             begDate, String endDate) {
 | |
|         if (DateHelper.isToday(begDate)) {
 | |
|             begDate = begDate + " " + DateHelper.getCurTime();
 | |
|         }
 | |
|         Map<String, Object> 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<Map<Object, Object>> resultList = new ArrayList<>();
 | |
|         if (!JsonResult.success()) {
 | |
|             log.info("[号源-分时段查询]{}", JsonResult.getMessage());
 | |
|             return resultList;
 | |
|         }
 | |
| 
 | |
|         try {
 | |
|             JSONArray jsonArray = JsonResult.getJsonArray("Dept", "Doct", "TimeInterval");
 | |
|             JSONObject timeNode, sourceNode;
 | |
|             Map<Object, Object> map;
 | |
|             Register reg;
 | |
|             JSONArray sourceArr;
 | |
|             BigDecimal regMoney;
 | |
|             List<Register> 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<String, Object> 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<String, Object> 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<String, Object> 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);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 |