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

262 lines
13 KiB

package com.ynxbd.wx.config;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.bean.me_technology.BookOrder;
import com.ynxbd.common.bean.me_technology.BookedInfo;
import com.ynxbd.common.bean.me_technology.NumberSourceDetails;
import com.ynxbd.common.bean.me_technology.NumberSourceStatistics;
import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum;
import com.ynxbd.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 李进才
* @ClassName MeTechnologyReConfig
* @Description TODO
* @date 2024/06/14 09:27:00
*/
@Slf4j
public class MeTechnologyReConfig {
private MeTechnologyReConfig() {
}
public static final String MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL;
public static final String MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO;
public static final String MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID;
public static final String MEDICAL_TECHNOLOGY_RESERVE_JSON_URL;
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
static {
ProperHelper config = new ProperHelper().read("medical-technology-reserve.properties");
if (config == null) {
MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = null;
MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = null;
MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = null;
MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = null;
} else {
MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = config.getString("medical_technology_reserve_webservice_url");
MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = config.getString("medical_technology_reserve_terminal_no");
MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = config.getString("medical_technology_reserve_test_patientId");
MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = config.getString("medical_technology_reserve_json_url");
}
}
public static void reserveRun(String patientId) {
try {
if (MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL == null) {
return;
}
if (MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID != null) {
if (!patientId.equals(MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID)) {
log.info("[天助预约平台] 不是测试账号,不允许调用接口 patientId-{}", patientId);
return;
}
}
String result = OkHttpHelper.get(MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL, params -> {
params.put("patientID", patientId);
params.put("terminalNo", MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO);
});
JsonResult jsonResult = JsonResult.xmlToBean(result, JsonResultEnum.SYS_RESERVE);
if (jsonResult == null) {
log.info("[天助预约平台] xml转换出错,result-{}", result);
return;
}
if (jsonResult.success()) {
log.info("[天助预约平台] 预约成功 message-{}", jsonResult.getMessage());
// MessagePushConfig.businessPush("天助预约平台",patientId,jsonResult.getMessage(),null);
}
} catch (Exception e) {
log.error("[天助预约平台] 调用医技预约出错,error-{}", e.toString());
}
}
public static String getToken() {
String result = OkHttpHelper.get(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/Tools/Tool/GetToken", params -> {
params.put("clientName", "WXAPP");
params.put("clientCode", "wxapp");
});
JSONObject jsonObject = JsonHelper.parseObject(result);
if (jsonObject == null) {
log.info("[天助预约平台] token获取失败,result-{}", result);
return null;
}
String token = jsonObject.getString("token");
log.info("[天助预约平台] token获取成功,token={}", token);
return token;
}
/**
* 预约平台提供终端调用主要用来获取患者申请单列表用于预约改约
*
* @return 根据患者身份获得开立检查单情况
*/
public static Result getCanBookOrders(String patientId, String startDate, String endDate) {
Map<String, String> params = new HashMap<>();
params.put("PatientId", patientId);
params.put("StartDate", startDate);
params.put("EndDate", endDate);
params.put("TerminalNo", MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO);
params.put("IsBooked", "2");
RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params));
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetCanBookOrders", requestBody, headers -> {
headers.add("token", getToken());
});
JSONObject jsonObject = JsonHelper.parseObject(result);
if (jsonObject == null) {
log.info("[天助预约平台] patientId-{},startDate-{},endDate-{} 获取患者申请信息失败,result-{}", patientId, startDate, endDate, result);
return Result.error();
}
if (!"0".equals(jsonObject.getString("ResultCode"))) {
log.info("[天助预约平台] 获取患者申请信息失败,失败原因-{}", jsonObject.getString("ResultContent"));
return Result.error(jsonObject.getString("ResultCode"));
}
return Result.success(jsonObject.getJSONArray("OrderLists").toJavaList(BookOrder.class));
}
/**
* 根据日期范围获得可使用资源概况
*
* @param patientId 患者id
* @param startDate 开始时间
* @param endDate 结束时间
* @param docDetailedNo 申请单编号
* @param intervalTimeType 上午或者下午
* @return 日期范围获得可使用资源概况
*/
public static Result getNumberSourceStatistics(String patientId, String startDate, String endDate, String docDetailedNo, String intervalTimeType) {
Map<String, String> params = new HashMap<>();
params.put("PatientId", patientId);
params.put("StartDate", startDate);
params.put("EndDate", endDate);
params.put("DocDetailedNo", docDetailedNo);
params.put("IntervalTimeType", intervalTimeType);
String json = JsonHelper.toJsonString(params);
RequestBody requestBody = RequestBody.create(JSON, json);
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetNumberSourceStatistics", requestBody, headers -> {
headers.add("token", getToken());
});
JSONObject jsonObject = JsonHelper.parseObject(result);
if (jsonObject == null) {
log.info("[天助预约平台] patientId-{},startDate-{},endDate-{},docDetailedNo-{},intervalTimeType-{} 根据日期范围获得可使用资源概况失败,result-{}", patientId, startDate, endDate, docDetailedNo, intervalTimeType, result);
return Result.error();
}
if (!"0".equals(jsonObject.getString("resultCode"))) {
log.info("[天助预约平台] 根据日期范围获得可使用资源概况失败,失败原因-{}", jsonObject.getString("resultContent"));
return Result.error(jsonObject.getString("resultCode"));
}
return Result.success(jsonObject.getJSONArray("numberSourceStatisticsApplyDTO").toJavaList(NumberSourceStatistics.class));
}
/**
* 预约平台提供终端调用主要用来获取号池明细信息
*
* @param examRoomOrQueue 检查室或队列
* @param startDate 开始时间
* @param endDate 结束时间
* @param appFromID 医嘱申请单号
* @return 号池明细信息
*/
public static Result getNumberSourceDetails(String examRoomOrQueue, String startDate, String endDate, String appFromID) {
JSONObject jsonParams = new JSONObject();
jsonParams.put("examRoomOrQueue", examRoomOrQueue);
jsonParams.put("StartDate", startDate);
jsonParams.put("EndDate", endDate);
jsonParams.put("appFromID", appFromID);
RequestBody requestBody = RequestBody.create(JSON, jsonParams.toJSONString());
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetNumberSourceDetails", requestBody, headers -> {
headers.add("token", getToken());
});
JSONObject jsonObject = JsonHelper.parseObject(result);
if (jsonObject == null) {
log.info("[天助预约平台] examRoomOrQueue-{},startDate-{},endDate-{},appFromID-{}, 获取号池明细失败,result-{}", examRoomOrQueue, startDate, endDate, appFromID, result);
return Result.error();
}
if (!"0".equals(jsonObject.getString("resultCode"))) {
log.info("[天助预约平台] 获取号池明细失败,失败原因-{}", jsonObject.getString("resultContent"));
return Result.error(jsonObject.getString("resultCode"));
}
return Result.success(jsonObject.getJSONArray("numPoolDetailsDTOList").toJavaList(NumberSourceDetails.class));
}
/**
* 根据提交时段锁定号池资源
*
* @param appFormID 检查室或队列
* @param examRoomOrQueue 检查室或队列
* @param beginDateTime 开始时间
* @param endDateTime 结束时间
* @param lockStatus 锁定状态
* @return 是否锁定成功
*/
public static Boolean lockedBookNo(String appFormID, String examRoomOrQueue, String beginDateTime, String endDateTime, Boolean lockStatus) {
Map<String, Object> params = new HashMap<>();
params.put("appFormID", appFormID);
params.put("examRoomOrQueue", examRoomOrQueue);
params.put("beginDateTime", beginDateTime);
params.put("endDateTime", endDateTime);
params.put("lockStatus", lockStatus);
RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params));
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/LockedBookNo", requestBody, headers -> {
headers.add("token", getToken());
});
JSONObject jsonObject = JsonHelper.parseObject(result);
if (jsonObject == null) {
log.info("[天助预约平台] examRoomOrQueue-{},beginDateTime-{},endDateTime-{},lockStatus-{}, 根据提交时段锁定号池资源失败,result-{}", examRoomOrQueue, beginDateTime, endDateTime, lockStatus, result);
return false;
}
if (!"0".equals(jsonObject.getString("resultCode"))) {
log.info("[天助预约平台] 根据提交时段锁定号池资源失败,失败原因-{}", jsonObject.getString("resultContent"));
return false;
}
return true;
}
public static Result getBookedDateTime(String appFormID, String examRoomOrQueue, String beginDateTime, String endDateTime, String patientId, String patientName) {
Map<String, String> param = new HashMap<>();
param.put("AppFormID", appFormID);
param.put("ExamRoomOrQueue", examRoomOrQueue);
param.put("BeginDateTime", beginDateTime);
param.put("EndDateTime", endDateTime);
List<Map<String, String>> paramList = new ArrayList<>();
paramList.add(param);
Map<String, Object> params = new HashMap<>();
params.put("BookedDateTimeDTOList", paramList);
params.put("ScheduleUserId", patientId);
params.put("ScheduleUser", patientName);
log.info("[天助预约平台] 确定预约json={}", JsonHelper.toProJsonString(params));
RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toProJsonString(params));
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetBookedDateTime", requestBody, headers -> {
headers.add("token", getToken());
});
JSONObject jsonObject = JsonHelper.parseObject(result);
if (jsonObject == null) {
log.info("[天助预约平台] examRoomOrQueue-{},startDate-{},endDate-{},appFromID-{}, patientId-{},patientName-{}, 提交预约具体时间失败,result-{}", examRoomOrQueue, beginDateTime, endDateTime, appFormID, patientId, patientName, result);
return Result.error();
}
if (!"0".equals(jsonObject.getString("resultCode"))) {
log.info("[天助预约平台] 提交预约具体时间失败,失败原因-{}", jsonObject.getString("resultContent"));
return Result.error(jsonObject.getString("resultCode"));
}
return Result.success(jsonObject.getJSONArray("bookedInfos").toJavaList(BookedInfo.class).get(0));
}
}