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.
		
		
		
		
			
				
					
					
						
							317 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							317 lines
						
					
					
						
							11 KiB
						
					
					
				| 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<String, Object> 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<HisRecipe> getPaidRecipeList(String patientId, String begDate, String endDate) {
 | |
|         List<HisRecipe> resultList = new ArrayList<>();
 | |
| 
 | |
|         Map<String, Object> 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> hisRecipe = jsonResult.getDataMapList(HisRecipe.class, "Recipe");
 | |
|         if (hisRecipe != null) {
 | |
|             resultList = hisRecipe;
 | |
|         }
 | |
|         return resultList;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 根据患者id查询待付费项目
 | |
|      *
 | |
|      * @param patientId 患者id
 | |
|      * @return 待付费项目
 | |
|      */
 | |
|     public List<HisRecipe> getUnPayRecipe(String patientId, int days) {
 | |
|         List<HisRecipe> 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> 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<String> recipeIds, String payMoney,
 | |
|                                     String payDate, String payTime, String payDeviceId, MerchantEnum merchantEnum) {
 | |
| 
 | |
| 
 | |
|         StringBuilder recipeIdsXml = new StringBuilder();
 | |
|         for (String id : recipeIds) {
 | |
|             recipeIdsXml.append("<Id>").append(id).append("</Id>");
 | |
|         }
 | |
| 
 | |
|         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<String> 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("<Id>").append(id).append("</Id>");
 | |
|         }
 | |
| 
 | |
|         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<String, Object> 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<String, Object> 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<String> 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<String> recipeIds, String payMoney,
 | |
| //                                                 String payDate, String payTime, String transNo, String payDeviceID, String bankTransNo) {
 | |
| //        Map<String, Object> 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;
 | |
| //    }
 | |
| 
 | |
| }
 | |
| 
 |