微信后端代码
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

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;
}
}