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.
974 lines
39 KiB
974 lines
39 KiB
package com.ynxbd.common.dao.his;
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
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.his.HisTreat;
|
|
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.*;
|
|
|
|
/**
|
|
* 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.setRefundDate(node.getString("RefundDate"));
|
|
// 是否取号
|
|
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,MerchantEnum merchantEnum) {
|
|
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, merchantEnum);
|
|
}
|
|
|
|
/**
|
|
* 今日挂号-取消挂号
|
|
* @return
|
|
*/
|
|
public JsonResult refundRegister(String tradeNo,MerchantEnum merchantEnum){
|
|
Map<String, Object> params = new HashMap<>();
|
|
params.put("TransNo",tradeNo);
|
|
params.put("DelTransNo","R" + tradeNo);
|
|
return HisHelper.getJsonResult(HisEnum.AP_Refund_Register,params,merchantEnum);
|
|
}
|
|
|
|
/**
|
|
* 查询患者是否挂过号
|
|
*
|
|
* @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,String deptCode) {
|
|
List<Dept> deptList = new ArrayList<>();
|
|
|
|
Map<String, Object> params = new HashMap<>();
|
|
params.put("DeptCode", 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, returnDeptCode, deptName, hospitalAreaName;
|
|
|
|
RegisterDao registerDao = new RegisterDao();
|
|
List<Dept> wxDeptList = registerDao.selectDeptList();
|
|
|
|
String subDeptJson;
|
|
List<Dept> subDeptList;
|
|
String subDeptName, subDeptCode, subDeptNote, subDeptSourceInfo;
|
|
JSONObject subDeptItem;
|
|
Dept subDept;
|
|
for (int i = 0; i < jsonArray.size(); i++) {
|
|
nodeItem = jsonArray.getJSONObject(i);
|
|
returnDeptCode = nodeItem.getString("Code");
|
|
deptName = nodeItem.getString("Name");
|
|
address = nodeItem.getString("Address");
|
|
hospitalAreaName = nodeItem.getString("HospitalAreaName");
|
|
|
|
// 科室过滤
|
|
dept = registerDao.deptFilter(wxDeptList, returnDeptCode, 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");
|
|
subDeptNote = subDeptItem.getString("Note");
|
|
subDeptSourceInfo = subDeptItem.getString("SourceInfo");
|
|
subDept = new Dept();
|
|
subDept.setDeptName(subDeptName);
|
|
subDept.setDeptCode(subDeptCode);
|
|
subDept.setNote(subDeptNote);
|
|
subDept.setSourceInfo(subDeptSourceInfo);
|
|
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,merchantEnum);
|
|
}
|
|
|
|
/**
|
|
* 执行挂号
|
|
*
|
|
* @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,merchantEnum);
|
|
}
|
|
|
|
// 预约挂号
|
|
params.put("ReservationDate", regDate);
|
|
return HisHelper.getJsonResult(HisEnum.AP_Reservation, params,merchantEnum);
|
|
}
|
|
|
|
/**
|
|
* 分时段挂号--是否占号
|
|
*
|
|
* @param patientId 患者id
|
|
* @param sourceId 号源id
|
|
* @return true:是; false:否
|
|
*/
|
|
public synchronized static JsonResult isOccupySource(String patientId, String sourceId, MerchantEnum merchantEnum) {
|
|
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,merchantEnum);
|
|
}
|
|
|
|
/**
|
|
* 获取某个医生排班表
|
|
* @param begDate 开始时间
|
|
* @param endDate 结束时间
|
|
* @param doctCode 医生编码
|
|
* @return 排班信息
|
|
*/
|
|
|
|
public JSONArray getDoctorSchedule(String begDate, String endDate,String doctCode) {
|
|
|
|
JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Doctor_Schedule, params -> {
|
|
params.put("BegDate", begDate);
|
|
params.put("EndDate", endDate);
|
|
params.put("DoctCode", doctCode);
|
|
});
|
|
if(jsonResult.success()){
|
|
return jsonResult.getJsonArray("Items","Item");
|
|
}
|
|
return null;
|
|
}
|
|
|
|
}
|
|
|