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.
		
		
		
		
			
				
					
					
						
							318 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
	
	
							318 lines
						
					
					
						
							12 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" : "");
 | 
						|
            params.put("CallNo",HisHelper.CALL_NO);
 | 
						|
        });
 | 
						|
 | 
						|
        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);
 | 
						|
        },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<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);
 | 
						|
            },merchantEnum);
 | 
						|
        }
 | 
						|
 | 
						|
        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);
 | 
						|
        },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<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;
 | 
						|
//    }
 | 
						|
 | 
						|
}
 | 
						|
 |