package com.ynxbd.common.dao.his; import com.ynxbd.common.bean.HisRecipe; import com.ynxbd.common.bean.enums.MerchantEnum; 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.util.*; /** * HIS处方调用 * * @Author wsq * @Date 2020/11/6 9:56 * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. */ @Slf4j public class HisRecipeDao { /** * HIS处方快速发药 * * @param windowNo 药方号 * @param groupNo 组号 * @param invoiceTransNo 发票号 */ public String hisQuickDrug(String windowNo, String groupNo, String invoiceTransNo) { Map params = new HashMap<>(); params.put("HISTransNo", invoiceTransNo); params.put("WindowNo", windowNo); params.put("GroupNo", groupNo); return HisHelper.getResponseXml(HisEnum.QuickDrugDispense, params); } /** * 根据患者id查询已缴费项目 * * @param patientId 患者id * @param begDate 开始日期 * @param endDate 结束日期 * @return 已缴费项目 */ public List getPaidRecipeList(String patientId, String begDate, String endDate) { List resultList = new ArrayList<>(); Map params = new HashMap<>(); params.put("PatientID", patientId); params.put("RecipeID", ""); params.put("StartTime", begDate); params.put("EndTime", endDate); JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_OutpatientFee, params); if (!jsonResult.success()) { // 请求失败 return resultList; } List hisRecipe = jsonResult.getDataMapList(HisRecipe.class, "Recipe"); if (hisRecipe != null) { resultList = hisRecipe; } return resultList; } /** * 根据患者id查询待付费项目 * * @param patientId 患者id * @return 待付费项目 */ public List getUnPayRecipe(String patientId, int days) { List resultList = new ArrayList<>(); JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> { params.put("PatientID", patientId); params.put("IsLastWeekFlag", days <= 7 ? "1" : ""); }); if (!jsonResult.success()) { // 失败 return resultList; } List hisRecipe = jsonResult.getDataMapList(HisRecipe.class, "Recipe"); if (hisRecipe != null) { resultList = hisRecipe; } return resultList; } /** * HIS申请单预缴费 * * @param patientId 患者ID * @param treatNum 门诊号 * @param recipeIds 处方单号 * @param payMoney 支付金额 * @param payDate 支付日期 * @param payTime 支付时间 * @param payDeviceId payDeviceID * @return payInvoiceResponseBean */ public static JsonResult prepay(String patientId, String treatNum, List recipeIds, String payMoney, String payDate, String payTime, String payDeviceId, MerchantEnum merchantEnum) { StringBuilder recipeIdsXml = new StringBuilder(); for (String id : recipeIds) { recipeIdsXml.append("").append(id).append(""); } return HisHelper.getJsonResult(HisEnum.AP_PrePay_Invoice_New, params -> { params.put("Recipe", recipeIdsXml.toString()); params.put("PatientID", patientId); params.put("MZNum", treatNum); params.put("PayMoney", payMoney); params.put("PayDate", payDate); params.put("PayTime", payTime); params.put("PayDeviceID", payDeviceId); params.put("TransNo", UUID.randomUUID().toString().replace("-", "")); params.put("BankTransNo", UUID.randomUUID().toString().replace("-", "")); params.put("PayWay", merchantEnum.HIS_PAY_WAY); }); } /** * 缴费:更新recipeId参数为List,支持多个处方单同时缴费 * * @param openid openid * @param patientId 患者ID * @param treatNum 门诊号 * @param recipeIds 处方单号 * @param payMoney 支付金额 * @param payDate 支付日期 * @param payTime 支付时间 * @param tradeNo HIS交易流水号 * @param payDeviceId payDeviceID * @param transId 银行流水号 * @return bean */ public static JsonResult payInvoice(String openid, String patientId, String treatNum, List recipeIds, String payMoney, String payDate, String payTime, String tradeNo, String payDeviceId, String transId, MerchantEnum merchantEnum, String feeId, String feeInfo) { String fpOrderId = (tradeNo != null && tradeNo.indexOf("ORD") == 0 ? tradeNo : transId); if (ObjectUtils.isNotEmpty(feeId) && ObjectUtils.isNotEmpty(feeInfo)){ // 新版本预缴费 log.info("[预结算]回调 feeId={}", feeId); return HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice_New, params -> { params.put("PatientID", patientId); params.put("PayDate", payDate); params.put("PayTime", payTime); params.put("TransNo", tradeNo); params.put("PayDeviceID", payDeviceId); params.put("BankTransNo", fpOrderId); // 预结算 params.put("FeeID", feeId); params.put("FeeInfo", feeInfo); }); } StringBuilder recipeIdsXml = new StringBuilder(); for (String id : recipeIds) { recipeIdsXml.append("").append(id).append(""); } return HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice, params -> { params.put("Recipe", recipeIdsXml.toString()); params.put("PatientID", patientId); params.put("MZNum", treatNum); params.put("PayMoney", payMoney); params.put("PayDate", payDate); params.put("PayTime", payTime); params.put("TransNo", tradeNo); params.put("PayDeviceID", payDeviceId); params.put("PayWay", merchantEnum.HIS_PAY_WAY); params.put("BankTransNo", fpOrderId); // 商户订单号 params.put("OpenId", openid); params.put("Token", WeChatConfig.TOKEN); }); } /** * 自助申请单开单 * * @param patientId 患者id * @param pageNum 页码 (0 | 1 ) * @param seq 第几条 (从0开始,1:为第二个申请单) * @return His信息 */ public JsonResult createSelfHelp(String patientId, String pageNum, String seq, String cardNo) { Map params = new HashMap<>(); params.put("PatientId", patientId); params.put("PageFlag", pageNum); params.put("IDCardNo", cardNo); if (!"0".equals(seq)) { params.put("DoubleCollectFlag", seq); // 1 } return HisHelper.getJsonResult(HisEnum.Create_Self_Help, params); } /** * 获取核酸检测价格 * * @param pageNum 页码 (0 | 1 ) * @param seq 第几条 (从0开始,1为第二个申请单) */ public JsonResult getSelfHelpInfo(String pageNum, String seq) { Map params = new HashMap<>(); params.put("CallNo", "618484252"); params.put("PageFlag", pageNum); // 页码 if (!"0".equals(seq)) { params.put("DoubleCollectFlag", seq); } return HisHelper.getJsonResult(HisEnum.Query_Self_Help, params); } /** * 查询标准物价 * * @param pageNum 页号 * @param pageSize 每页数量 * @param pyCode 拼音码 * @param type 类型 * @param groupFlag 组套标识 */ public static JsonResult getStandardPrice(Integer pageNum, Integer pageSize, String pyCode, String type, String groupFlag) { return HisHelper.getJsonResult(HisEnum.Recipe_Query_StandardPrice, params -> { params.put("PageNo", pageNum); params.put("RowsCount", pageSize); params.put("PinyinCode", pyCode); params.put("ItemType", type); params.put("GroupFlag", groupFlag); }); } // public static void main(String[] args) { // List recipeIds = new ArrayList<>(); // recipeIds.add("1002242374"); // // new HisRecipeDao().payInvoice( // null, // "60148480", // "616300", // recipeIds, // "38.000", // "2022-01-19", // "12:08:37", // "4200001404202201191786257634C001", // "app", // "4200001404202201191786257634", MerchantEnum.WX); // } // /** // * 缴费:更新recipeID参数为List,支持多个处方单同时缴费 // * // * @param patientId 患者ID // * @param mzNum 门诊号 // * @param recipeIds 处方单号 // * @param payMoney 金额 // * @param payDate 支付时间 // * @param payTime 支付时间 // * @param transNo transNo // * @param payDeviceID payDeviceID // * @param bankTransNo 流水号 // * @return payInvoiceResponseBean // */ // public PayInvoiceResponseBean old_payInvoice(String patientId, String mzNum, List recipeIds, String payMoney, // String payDate, String payTime, String transNo, String payDeviceID, String bankTransNo) { // Map input = new HashMap<>(); // input.put("PatientID", patientId); // input.put("MZNum", mzNum); // input.put("PayMoney", payMoney); // input.put("PayDate", payDate); // input.put("PayTime", payTime); // input.put("TransNo", transNo); // input.put("PayDeviceID", payDeviceID); // input.put("BankTransNo", bankTransNo); // input.put("Recipe", recipeIds); // //// HisTool tool = new HisTool("AP_Pay_Invoice", input); //// tool.getRespos() // HisTool.getResponseXml(HisEnum.AP_Pay_Invoice, input); // PayInvoiceResponseBean payInvoiceResponseBean = (PayInvoiceResponseBean) XMLUtil // .convertXmlStrToObject(PayInvoiceResponseBean.class, HisTool.getResponseXml(HisEnum.AP_Pay_Invoice, input)); // try { // String drugInfo = payInvoiceResponseBean.getDrugInfo() == null ? "" : payInvoiceResponseBean.getDrugInfo(); // String invoiceTransNo = payInvoiceResponseBean.getInvoiceTransNo() == null ? "" : payInvoiceResponseBean.getInvoiceTransNo(); // log.info("发票流水号:invoiceTransNo={}", invoiceTransNo); // if (!drugInfo.equals("") && !invoiceTransNo.equals("")) { // log.info("调用快速发药:" + invoiceTransNo); // QuickDrugDispenseHelper.quickDrug(drugInfo, invoiceTransNo); // } // } catch (Exception e) { // log.info("快速发药调用失败:" + e.getMessage()); // e.printStackTrace(); // } // return payInvoiceResponseBean; // } }