package com.ynxbd.common.dao.his; import com.ynxbd.common.bean.HisRecipe; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.xk.medicalRecipe; import com.ynxbd.common.helper.his.HisEnum; import com.ynxbd.common.helper.his.HisHelper; import com.ynxbd.common.helper.his.HisMIHelper; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; 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, String personNo) { List resultList = new ArrayList<>(); Map params = new HashMap<>(); params.put("PatientID", patientId); params.put("RecipeID", ""); params.put("StartTime", begDate); params.put("EndTime", endDate); params.put("PersonNo", personNo); 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 getRxUnPay(String patientId, String personNo, int days) { List resultList = new ArrayList<>(); JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> { params.put("PatientID", patientId); params.put("PersonNo", personNo); params.put("IsLastWeekFlag", days <= 7 ? "1" : ""); params.put("CallNo", HisHelper.CALL_NO); }); if (!jsonResult.success()) { // 失败 return resultList; } List hisRecipe = jsonResult.getDataMapList(HisRecipe.class, "Recipe"); if (hisRecipe != null) { resultList = hisRecipe; } return resultList; } public Result uploadRxMI(String treatNum, String personID, String recipes) { List resultList = new ArrayList<>(); JsonResult jsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.XK_MEDICAL_RECIPE, params -> { params.put("PersonID", personID); params.put("MZNum", treatNum); params.put("CallNo", HisHelper.CALL_NO); params.put("CFNums", recipes); }); if (!jsonResult.success()) { // 失败 return Result.error(jsonResult.getMessage()); } List medicalRecipe = jsonResult.getDataMapList(medicalRecipe.class, "CFNums", "Item"); if (medicalRecipe != null) { resultList = medicalRecipe; } return Result.success(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); }, merchantEnum); } /** * 缴费:更新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 totalFee, 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); }, merchantEnum); } StringBuilder recipeIdsXml = new StringBuilder(); for (String id : recipeIds) { recipeIdsXml.append("").append(id).append(""); } Map params = new HashMap<>(); 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); if (treatNum.contains("P-")) { log.info("[{}支付回调-体检,体检号-{}]", merchantEnum.NAME, treatNum); params.put("MZNum", "0"); params.put("PatientID", "0"); params.put("TJBH", treatNum.split("-")[1]); params.put("GroupFlag", "1"); params.remove("Recipe"); params.put("PayMoney", totalFee); //如果是体检支付就传入总金额 } return HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice, params, merchantEnum); } /** * 自助申请单开单 * * @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); }); } /** * 查询发票信息 * * @param invoiceNo 发票号 */ public Result queryElectronInvoice(String invoiceNo) { JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.QUERY_ELECTRON_INVOICE, params -> { params.put("FPNum", invoiceNo); }); if (!jsonResult.success()) { String message = jsonResult.getMessage(); if (ObjectUtils.isEmpty(message)) { return Result.error("[电子票据]查询异常"); } if (message.contains("未找到业务流水号") && message.contains("电子票据信息")) { return Result.error("未找到电子票据信息"); } return Result.error(message); } String invoiceJSon = jsonResult.getDataMapString("EInvoiceJSonStr"); if (ObjectUtils.isEmpty(invoiceJSon)) { return Result.error("EInvoiceJSonStr为空"); } return Result.success(invoiceJSon); } // 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; // } }