parent
1cff6ab923
commit
9a740ffc8a
27 changed files with 658 additions and 472 deletions
@ -0,0 +1,39 @@ |
||||
package com.ynxbd.ali.config; |
||||
|
||||
import com.ynxbd.common.helper.ProperHelper; |
||||
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; |
||||
|
||||
// 支付宝医保配置
|
||||
public class AliMIConfig { |
||||
private AliMIConfig() { |
||||
} |
||||
|
||||
//配置文件读取项
|
||||
public static final boolean IS_ENABLE; |
||||
|
||||
public static final String CITY_CODE; // 城市编码
|
||||
public static final String ORG_CHNL_CRTF_CODG; |
||||
public static final String ORG_NO; |
||||
public static final String ORG_APP_ID; |
||||
public static final String ORG_HOSPITAL_NAME; |
||||
|
||||
public static boolean IS_DEV; |
||||
public static boolean IS_AUTO_REFUND; |
||||
|
||||
static { |
||||
ProperHelper config = new ProperHelper().read("medical-ali.properties"); |
||||
|
||||
IS_ENABLE = config.getBoolean("mi_ali.is_enable", false); |
||||
config.setIsEnable(IS_ENABLE); |
||||
|
||||
IS_DEV = config.getBoolean("mi_ali.is_dev", true); |
||||
IS_AUTO_REFUND = config.getBoolean("mi_ali.is_auto_refund", false); |
||||
|
||||
ORG_NO = config.getString("mi_ali.org_no"); |
||||
ORG_APP_ID = config.getString("mi_ali.org_app_id"); |
||||
ORG_CHNL_CRTF_CODG = config.getString("mi_ali.org_chnl_crtf_codg"); |
||||
ORG_HOSPITAL_NAME = config.getString("mi_ali.org_hospital_name"); |
||||
// 相同数据赋值
|
||||
CITY_CODE = WechatMIConfig.CITY_CODE; |
||||
} |
||||
} |
@ -1,284 +1,285 @@ |
||||
package com.ynxbd.common.dao.his; |
||||
|
||||
import com.alibaba.fastjson.JSONArray; |
||||
import com.ynxbd.common.bean.enums.MerchantEnum; |
||||
import com.ynxbd.common.bean.pay.Recipe; |
||||
import com.ynxbd.common.bean.pay.Register; |
||||
import com.ynxbd.common.helper.common.CodeHelper; |
||||
import com.ynxbd.common.helper.common.DateHelper; |
||||
import com.ynxbd.common.helper.common.JsonHelper; |
||||
import com.ynxbd.common.helper.his.HisEnum; |
||||
import com.ynxbd.common.helper.his.HisHelper; |
||||
import com.ynxbd.common.result.JsonResult; |
||||
import com.ynxbd.common.result.Result; |
||||
import com.ynxbd.common.result.ResultEnum; |
||||
import com.ynxbd.wx.wxfactory.bean.MedicalInfo; |
||||
import org.apache.commons.lang3.ObjectUtils; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
public class HisMedicalDao { |
||||
|
||||
/** |
||||
* [医保处方]上传明细(请求地址不通) |
||||
* |
||||
* @param payAuthNo 授权码 |
||||
* @param patientId 患者ID |
||||
* @param cardNo 卡号 |
||||
* @param treatNum 治疗号 |
||||
* @param recipeJson 处方json |
||||
* @param totalFee 总金额 |
||||
*/ |
||||
public static JsonResult recipeMdUploadFeeDetails(String payAuthNo, String cardNo, String openid, String patientId, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) { |
||||
List<Recipe> recipeList = JsonHelper.parseArray(recipeJson, Recipe.class); |
||||
if (recipeList == null || recipeList.isEmpty()) { |
||||
return HisHelper.createErrorResult("处方数量为 0 或 数据转换失败"); |
||||
} |
||||
|
||||
StringBuilder recipeIdsXml = new StringBuilder(); |
||||
for (Recipe item : recipeList) { |
||||
recipeIdsXml.append("<Id>").append(item.getRecipeId()).append("</Id>"); |
||||
} |
||||
Map<String, Object> params = new HashMap<>(); |
||||
params.put("PatientID", patientId); |
||||
params.put("MZNum", treatNum); |
||||
params.put("Recipe", recipeIdsXml.toString()); |
||||
params.put("PayMoney", totalFee); |
||||
params.put("PayDate", DateHelper.getCurDate()); |
||||
params.put("PayTime", DateHelper.getCurTime()); |
||||
params.put("TransNo", CodeHelper.get32UUID()); |
||||
params.put("PayWay", "4"); |
||||
// 医保-----------------------------------
|
||||
params.put("PayAuthNo", payAuthNo); |
||||
params.put("PersonID", cardNo); |
||||
if (ObjectUtils.isNotEmpty(ybAttrib) && ObjectUtils.isNotEmpty(ybBZCode) && ObjectUtils.isNotEmpty(ybBZName)) { |
||||
params.put("YBAttrib", ybAttrib); |
||||
params.put("YBBZCode", ybBZCode); |
||||
params.put("YBBZName", ybBZName); |
||||
} |
||||
return HisHelper.getMdJsonResult(HisEnum.AP_Pay_Invoice, params); |
||||
} |
||||
|
||||
/** |
||||
* [医保]获取该病人的慢病列表 |
||||
* |
||||
* @param idCardNo 身份证号 |
||||
*/ |
||||
public static JsonResult getChronicList(String idCardNo) { |
||||
return HisHelper.getMdJsonResult(HisEnum.YDZF_QueryDiseaseInfo, params -> { |
||||
params.put("CallNo", HisHelper.CALL_NO); |
||||
params.put("IDCardNo", idCardNo); |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* [医保挂号]分时段挂号 |
||||
*/ |
||||
public static JsonResult regTimeMdUploadFeeDetails(Register reg, String payAuthNo, String cardNo, MerchantEnum merchantEnum, Boolean isSplitTime) { |
||||
if (isSplitTime) { |
||||
return HisHelper.getMdJsonResult(HisEnum.AP_Regist_New, params -> { |
||||
params.put("PatientID", reg.getPatientId()); |
||||
params.put("PayMoney", reg.getPayMoney()); |
||||
|
||||
params.put("DeptCode", reg.getDeptCode()); |
||||
params.put("DoctCode", reg.getDoctCode()); |
||||
|
||||
params.put("SourceId", reg.getSourceId()); |
||||
params.put("TimeInterval", reg.getTid()); |
||||
params.put("BegTime", reg.getBegTime()); |
||||
params.put("EndTime", reg.getEndTime()); |
||||
params.put("RegistCode", reg.getRegCode()); |
||||
params.put("RegistDate", reg.getRegDate()); |
||||
|
||||
|
||||
params.put("PayDate", DateHelper.getCurDate()); |
||||
params.put("PayTime", DateHelper.getCurTime()); |
||||
params.put("TransNo", CodeHelper.get32UUID()); |
||||
params.put("PayWay", merchantEnum.HIS_PAY_WAY); |
||||
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) { |
||||
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
|
||||
} |
||||
|
||||
// 医保-----------------------------------
|
||||
params.put("PayAuthNo", payAuthNo); |
||||
params.put("PersonID", cardNo); |
||||
}); |
||||
} |
||||
// 非分时段挂号 医保支付
|
||||
return HisHelper.getMdJsonResult(HisEnum.AP_Regist, params -> { |
||||
params.put("PatientID", reg.getPatientId()); |
||||
params.put("PayMoney", reg.getPayMoney()); |
||||
params.put("DeptCode", reg.getDeptCode()); |
||||
params.put("DoctCode", reg.getDoctCode()); |
||||
params.put("ClinicCode", reg.getClinicCode()); |
||||
params.put("TID", reg.getTid()); |
||||
params.put("RegFee", reg.getRegFee()); |
||||
params.put("ClinicFee", reg.getClinicFee()); |
||||
params.put("PayDate", DateHelper.getCurDate()); |
||||
params.put("PayTime", DateHelper.getCurTime()); |
||||
params.put("TransNo", CodeHelper.get32UUID()); |
||||
params.put("PayDeviceID", reg.getPayDeviceId()); |
||||
params.put("BankTransNo", reg.getBankTransNo()); |
||||
params.put("PayWay", merchantEnum.HIS_PAY_WAY); |
||||
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) { |
||||
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
|
||||
} |
||||
|
||||
// 医保-----------------------------------
|
||||
params.put("PayAuthNo", payAuthNo); |
||||
params.put("PersonID", cardNo); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* HIS医保结算 |
||||
* |
||||
* @param mdUserId 医保用户ID |
||||
* @param cashFee 现金 |
||||
* @param payDate 支付日期 |
||||
* @param payTime 支付实际 |
||||
* @param transNo HIS交易流水号 |
||||
* @param bankTransNo HIS流水号 |
||||
*/ |
||||
public static JsonResult regMdPay(String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) { |
||||
return HisHelper.getMdJsonResult(HisEnum.Medical_PAY, params -> { |
||||
params.put("UserID_YBZF", mdUserId); |
||||
params.put("PayMoney", cashFee); |
||||
params.put("PayDate", payDate); |
||||
params.put("PayTime", payTime); |
||||
params.put("TransNo", transNo); |
||||
params.put("BankTransNo", bankTransNo); |
||||
params.put("PayWay", "4"); |
||||
params.put("PayDeviceID", "mobile"); |
||||
}); |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* [医保]HIS调用支付下单 |
||||
* |
||||
* @param mdInfo 医保下单对象 |
||||
*/ |
||||
public static JsonResult mdPlaceOrder(MedicalInfo mdInfo) { |
||||
return HisHelper.getMdJsonResult(HisEnum.Medical_PayOrders, params -> { |
||||
// 授权码
|
||||
params.put("PayAuthNo", mdInfo.getPayAuthNo()); |
||||
// 授权token
|
||||
params.put("PayToken", mdInfo.getPayToken()); |
||||
// 订单id
|
||||
params.put("PayOrdId", mdInfo.getPayOrdId()); |
||||
params.put("MdtrtId", mdInfo.getMdTrtId()); |
||||
params.put("ChrgBchno", mdInfo.getChrgBchno()); |
||||
params.put("UserID_YBZF", mdInfo.getMdUserId()); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 医保退费(需先退医保,才能再退现金) |
||||
* |
||||
* @param payAuthNo 用户授权码 |
||||
* @param fpNum 发票号(上传费用明细返回的 chrgBchno ,把第一位“M” 过滤后传入) |
||||
*/ |
||||
// * @param refundType 退款类型(ALL:全部,CASH:只退现金 HI:只退医保)
|
||||
public static JsonResult mdRefund(String payAuthNo, String fpNum, String bankTransNo, String refundTradeNo, BigDecimal cashFee) { |
||||
return HisHelper.getMdJsonResult(HisEnum.Medical_Refund, params -> { |
||||
params.put("PayAuthNo", payAuthNo); // AUTH530100202206291132200000008
|
||||
params.put("FPNum", fpNum); |
||||
params.put("PayWay", "4"); |
||||
params.put("BankTransNo", bankTransNo); |
||||
params.put("TransNo", refundTradeNo); |
||||
params.put("PayDeviceID", "mobile"); |
||||
params.put("PayMoney", cashFee); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* HIS医保结算 |
||||
* |
||||
* @param mdUserId 医保用户ID |
||||
* @param cashFee 现金 |
||||
* @param payDate 支付日期 |
||||
* @param payTime 支付实际 |
||||
* @param transNo HIS交易流水号 |
||||
* @param bankTransNo HIS流水号 |
||||
*/ |
||||
public static JsonResult mdRecipePay(String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) { |
||||
return HisHelper.getMdJsonResult(HisEnum.Medical_PAY, params -> { |
||||
params.put("UserID_YBZF", mdUserId); |
||||
params.put("PayMoney", cashFee); |
||||
params.put("PayDate", payDate); |
||||
params.put("PayTime", payTime); |
||||
params.put("TransNo", transNo); |
||||
params.put("BankTransNo", bankTransNo); |
||||
params.put("PayWay", "4"); |
||||
params.put("PayDeviceID", "mobile"); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* [医保]查询医保订单结算信息 |
||||
* |
||||
* @param mdUserId 医保用户ID |
||||
* <p> |
||||
* StatusCode值域: |
||||
* 0 : 已保存 |
||||
* 1 : 预结算完成 |
||||
* 2 : 结算中 |
||||
* 3 : 自费完成 |
||||
* 4 : 医保支付完成 |
||||
* 5 : 院内结算完成 |
||||
* 6 : 结算完成 |
||||
* 7 : 已退款 |
||||
* 8 : 已医保全部退款 |
||||
* 9 : 仅自费全部退款 |
||||
* 10 : 仅自费部分退款 |
||||
* 11 : 医保全部退自费部分退款 |
||||
* 12 : 已撤销 |
||||
* 13 : 医保已撤销 |
||||
* 14 : 异常 |
||||
* 15 : 结算失败 |
||||
* -1 : 状态未知 |
||||
*/ |
||||
public static JsonResult getMedicalAccounts(String mdUserId) { |
||||
return HisHelper.getMdJsonResult(HisEnum.Medical_QueryOrderStatus, params -> { |
||||
params.put("UserID_YBZF", mdUserId); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* HIS医保结算信息查询 |
||||
* |
||||
* @param queryNumType 类型 |
||||
* @param queryNumber 查询号码 |
||||
* @param begDate 开始日期 |
||||
* @param endDate 结束日期 |
||||
* @return 结果 |
||||
*/ |
||||
public static Result getBillInfo(String queryNumType, String queryNumber, String begDate, String endDate) { |
||||
if (ObjectUtils.isEmpty(queryNumType) || ObjectUtils.isEmpty(queryNumber) || ObjectUtils.isEmpty(begDate) || ObjectUtils.isEmpty(endDate)) { |
||||
return Result.error(ResultEnum.PARAM_IS_DEFECT); |
||||
} |
||||
|
||||
JsonResult JsonResult = HisHelper.getMdJsonResult(HisEnum.Medical_Insurance_Bill, params -> { |
||||
params.put("QueryNumType", queryNumType); |
||||
params.put("QueryNumber", queryNumber); |
||||
params.put("BegDate", begDate); |
||||
params.put("EndDate", endDate); |
||||
}); |
||||
if (JsonResult.success()) { |
||||
JSONArray resultList = JsonResult.getJsonArray("SettlementInfo", "Item"); |
||||
return Result.success(resultList); |
||||
} |
||||
return Result.error(JsonResult.getMessage()); |
||||
} |
||||
|
||||
} |
||||
package com.ynxbd.common.dao.his; |
||||
|
||||
import com.alibaba.fastjson.JSONArray; |
||||
import com.ynxbd.common.bean.enums.MerchantEnum; |
||||
import com.ynxbd.common.bean.pay.Recipe; |
||||
import com.ynxbd.common.bean.pay.Register; |
||||
import com.ynxbd.common.helper.common.CodeHelper; |
||||
import com.ynxbd.common.helper.common.DateHelper; |
||||
import com.ynxbd.common.helper.common.JsonHelper; |
||||
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.common.result.ResultEnum; |
||||
import com.ynxbd.wx.wxfactory.bean.MedicalInfo; |
||||
import org.apache.commons.lang3.ObjectUtils; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
// HIS医保接口
|
||||
public class HisMIDao { |
||||
|
||||
/** |
||||
* [医保处方]上传明细(请求地址不通) |
||||
* |
||||
* @param payAuthNo 授权码 |
||||
* @param patientId 患者ID |
||||
* @param cardNo 卡号 |
||||
* @param treatNum 治疗号 |
||||
* @param recipeJson 处方json |
||||
* @param totalFee 总金额 |
||||
*/ |
||||
public static JsonResult rxMIUploadFeeDetails(MerchantEnum merchantEnum, String payAuthNo, String cardNo, String openid, String patientId, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) { |
||||
List<Recipe> recipeList = JsonHelper.parseArray(recipeJson, Recipe.class); |
||||
if (recipeList == null || recipeList.isEmpty()) { |
||||
return HisHelper.createErrorResult("处方数量为 0 或 数据转换失败"); |
||||
} |
||||
|
||||
StringBuilder recipeIdsXml = new StringBuilder(); |
||||
for (Recipe item : recipeList) { |
||||
recipeIdsXml.append("<Id>").append(item.getRecipeId()).append("</Id>"); |
||||
} |
||||
Map<String, Object> params = new HashMap<>(); |
||||
params.put("PatientID", patientId); |
||||
params.put("MZNum", treatNum); |
||||
params.put("Recipe", recipeIdsXml.toString()); |
||||
params.put("PayMoney", totalFee); |
||||
params.put("PayDate", DateHelper.getCurDate()); |
||||
params.put("PayTime", DateHelper.getCurTime()); |
||||
params.put("TransNo", CodeHelper.get32UUID()); |
||||
params.put("PayWay", "4"); |
||||
// 医保-----------------------------------
|
||||
params.put("PayAuthNo", payAuthNo); |
||||
params.put("PersonID", cardNo); |
||||
if (ObjectUtils.isNotEmpty(ybAttrib) && ObjectUtils.isNotEmpty(ybBZCode) && ObjectUtils.isNotEmpty(ybBZName)) { |
||||
params.put("YBAttrib", ybAttrib); |
||||
params.put("YBBZCode", ybBZCode); |
||||
params.put("YBBZName", ybBZName); |
||||
} |
||||
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.AP_Pay_Invoice, params); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* [医保挂号]分时段挂号 |
||||
*/ |
||||
public static JsonResult regMIUploadFeeDetails(MerchantEnum merchantEnum, Register reg, String payAuthNo, String cardNo, Boolean isSplitTime) { |
||||
if (isSplitTime) { |
||||
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.AP_Regist_New, params -> { |
||||
params.put("PatientID", reg.getPatientId()); |
||||
params.put("PayMoney", reg.getPayMoney()); |
||||
|
||||
params.put("DeptCode", reg.getDeptCode()); |
||||
params.put("DoctCode", reg.getDoctCode()); |
||||
|
||||
params.put("SourceId", reg.getSourceId()); |
||||
params.put("TimeInterval", reg.getTid()); |
||||
params.put("BegTime", reg.getBegTime()); |
||||
params.put("EndTime", reg.getEndTime()); |
||||
params.put("RegistCode", reg.getRegCode()); |
||||
params.put("RegistDate", reg.getRegDate()); |
||||
|
||||
|
||||
params.put("PayDate", DateHelper.getCurDate()); |
||||
params.put("PayTime", DateHelper.getCurTime()); |
||||
params.put("TransNo", CodeHelper.get32UUID()); |
||||
params.put("PayWay", merchantEnum.HIS_PAY_WAY); |
||||
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) { |
||||
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
|
||||
} |
||||
|
||||
// 医保-----------------------------------
|
||||
params.put("PayAuthNo", payAuthNo); |
||||
params.put("PersonID", cardNo); |
||||
}); |
||||
} |
||||
// 非分时段挂号 医保支付
|
||||
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.AP_Regist, params -> { |
||||
params.put("PatientID", reg.getPatientId()); |
||||
params.put("PayMoney", reg.getPayMoney()); |
||||
params.put("DeptCode", reg.getDeptCode()); |
||||
params.put("DoctCode", reg.getDoctCode()); |
||||
params.put("ClinicCode", reg.getClinicCode()); |
||||
params.put("TID", reg.getTid()); |
||||
params.put("RegFee", reg.getRegFee()); |
||||
params.put("ClinicFee", reg.getClinicFee()); |
||||
params.put("PayDate", DateHelper.getCurDate()); |
||||
params.put("PayTime", DateHelper.getCurTime()); |
||||
params.put("TransNo", CodeHelper.get32UUID()); |
||||
params.put("PayDeviceID", reg.getPayDeviceId()); |
||||
params.put("BankTransNo", reg.getBankTransNo()); |
||||
params.put("PayWay", merchantEnum.HIS_PAY_WAY); |
||||
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) { |
||||
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
|
||||
} |
||||
|
||||
// 医保-----------------------------------
|
||||
params.put("PayAuthNo", payAuthNo); |
||||
params.put("PersonID", cardNo); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* HIS医保结算 |
||||
* |
||||
* @param mdUserId 医保用户ID |
||||
* @param cashFee 现金 |
||||
* @param payDate 支付日期 |
||||
* @param payTime 支付实际 |
||||
* @param transNo HIS交易流水号 |
||||
* @param bankTransNo HIS流水号 |
||||
*/ |
||||
public static JsonResult regMIPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) { |
||||
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_PAY, params -> { |
||||
params.put("UserID_YBZF", mdUserId); |
||||
params.put("PayMoney", cashFee); |
||||
params.put("PayDate", payDate); |
||||
params.put("PayTime", payTime); |
||||
params.put("TransNo", transNo); |
||||
params.put("BankTransNo", bankTransNo); |
||||
params.put("PayWay", "4"); |
||||
params.put("PayDeviceID", "mobile"); |
||||
}); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* [医保]HIS调用支付下单 |
||||
* |
||||
* @param mdInfo 医保下单对象 |
||||
*/ |
||||
public static JsonResult placeMIOrder(MerchantEnum merchantEnum, MedicalInfo mdInfo) { |
||||
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_PayOrders, params -> { |
||||
// 授权码
|
||||
params.put("PayAuthNo", mdInfo.getPayAuthNo()); |
||||
// 授权token
|
||||
params.put("PayToken", mdInfo.getPayToken()); |
||||
// 订单id
|
||||
params.put("PayOrdId", mdInfo.getPayOrdId()); |
||||
params.put("MdtrtId", mdInfo.getMdTrtId()); |
||||
params.put("ChrgBchno", mdInfo.getChrgBchno()); |
||||
params.put("UserID_YBZF", mdInfo.getMdUserId()); |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* HIS医保结算 |
||||
* |
||||
* @param mdUserId 医保用户ID |
||||
* @param cashFee 现金 |
||||
* @param payDate 支付日期 |
||||
* @param payTime 支付实际 |
||||
* @param transNo HIS交易流水号 |
||||
* @param bankTransNo HIS流水号 |
||||
*/ |
||||
public static JsonResult rxMIPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) { |
||||
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_PAY, params -> { |
||||
params.put("UserID_YBZF", mdUserId); |
||||
params.put("PayMoney", cashFee); |
||||
params.put("PayDate", payDate); |
||||
params.put("PayTime", payTime); |
||||
params.put("TransNo", transNo); |
||||
params.put("BankTransNo", bankTransNo); |
||||
params.put("PayWay", "4"); |
||||
params.put("PayDeviceID", "mobile"); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 医保退费(需先退医保,才能再退现金) |
||||
* |
||||
* @param payAuthNo 用户授权码 |
||||
* @param fpNum 发票号(上传费用明细返回的 chrgBchno ,把第一位“M” 过滤后传入) |
||||
*/ |
||||
// * @param refundType 退款类型(ALL:全部,CASH:只退现金 HI:只退医保)
|
||||
public static JsonResult miRefund(MerchantEnum merchantEnum, String payAuthNo, String fpNum, String bankTransNo, String refundTradeNo, BigDecimal cashFee) { |
||||
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_Refund, params -> { |
||||
params.put("PayAuthNo", payAuthNo); // AUTH530100202206291132200000008
|
||||
params.put("FPNum", fpNum); |
||||
params.put("PayWay", "4"); |
||||
params.put("BankTransNo", bankTransNo); |
||||
params.put("TransNo", refundTradeNo); |
||||
params.put("PayDeviceID", "mobile"); |
||||
params.put("PayMoney", cashFee); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* [医保]查询医保订单结算信息 |
||||
* |
||||
* @param mdUserId 医保用户ID |
||||
* <p> |
||||
* StatusCode值域: |
||||
* 0 : 已保存 |
||||
* 1 : 预结算完成 |
||||
* 2 : 结算中 |
||||
* 3 : 自费完成 |
||||
* 4 : 医保支付完成 |
||||
* 5 : 院内结算完成 |
||||
* 6 : 结算完成 |
||||
* 7 : 已退款 |
||||
* 8 : 已医保全部退款 |
||||
* 9 : 仅自费全部退款 |
||||
* 10 : 仅自费部分退款 |
||||
* 11 : 医保全部退自费部分退款 |
||||
* 12 : 已撤销 |
||||
* 13 : 医保已撤销 |
||||
* 14 : 异常 |
||||
* 15 : 结算失败 |
||||
* -1 : 状态未知 |
||||
*/ |
||||
public static JsonResult getMIAccounts(MerchantEnum merchantEnum, String mdUserId) { |
||||
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_QueryOrderStatus, params -> { |
||||
params.put("UserID_YBZF", mdUserId); |
||||
}); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* HIS医保结算信息查询 |
||||
* |
||||
* @param queryNumType 类型 |
||||
* @param queryNumber 查询号码 |
||||
* @param begDate 开始日期 |
||||
* @param endDate 结束日期 |
||||
* @return 结果 |
||||
*/ |
||||
public static Result getBillInfo(String queryNumType, String queryNumber, String begDate, String endDate) { |
||||
if (ObjectUtils.isEmpty(queryNumType) || ObjectUtils.isEmpty(queryNumber) || ObjectUtils.isEmpty(begDate) || ObjectUtils.isEmpty(endDate)) { |
||||
return Result.error(ResultEnum.PARAM_IS_DEFECT); |
||||
} |
||||
|
||||
JsonResult JsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.Medical_Insurance_Bill, params -> { |
||||
params.put("QueryNumType", queryNumType); |
||||
params.put("QueryNumber", queryNumber); |
||||
params.put("BegDate", begDate); |
||||
params.put("EndDate", endDate); |
||||
}); |
||||
if (JsonResult.success()) { |
||||
JSONArray resultList = JsonResult.getJsonArray("SettlementInfo", "Item"); |
||||
return Result.success(resultList); |
||||
} |
||||
return Result.error(JsonResult.getMessage()); |
||||
} |
||||
|
||||
/** |
||||
* [医保]获取该病人的慢病列表 |
||||
* |
||||
* @param idCardNo 身份证号 |
||||
*/ |
||||
public static JsonResult getChronicList(String idCardNo) { |
||||
return HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.YDZF_QueryDiseaseInfo, params -> { |
||||
params.put("CallNo", HisHelper.CALL_NO); |
||||
params.put("IDCardNo", idCardNo); |
||||
}); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,50 @@ |
||||
package com.ynxbd.common.helper.his; |
||||
|
||||
import com.ynxbd.common.result.JsonResult; |
||||
import com.ynxbd.common.result.JsonResultEnum; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
public class HisMIHelper { |
||||
|
||||
public final static boolean IS_PROD = false; // false为生产环境
|
||||
public final static boolean IS_DEV = true; // true为测试环境
|
||||
|
||||
/** |
||||
* 医保环境 |
||||
* |
||||
* @param hisEnum 枚举 |
||||
* @param params 发送的参数 |
||||
* @return 响应的xml数据 |
||||
*/ |
||||
public static String getResponseXml(boolean isDev, HisEnum hisEnum, Map<String, Object> params) { |
||||
return HisHelper.getResponseXml(hisEnum, isDev ? HisHelper.HIS_DEV_MI_URL : HisHelper.HIS_PROD_MI_URL, params); |
||||
} |
||||
|
||||
/** |
||||
* xml响应数据组装成为JSON数据 |
||||
* |
||||
* @return 封装好的对象 |
||||
*/ |
||||
public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, Map<String, Object> params) { |
||||
JsonResult result = JsonResult.xmlToBean(getResponseXml(isDev, hisEnum, params), JsonResultEnum.SYS_HIS); |
||||
if (result == null) { // 如果返回为空可能为超时
|
||||
return HisHelper.createTimeoutResult(); |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
/** |
||||
* xml响应数据组装成为JSON数据 |
||||
* |
||||
* @return 封装好的对象 |
||||
*/ |
||||
public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, JsonResult.MapParams params) { |
||||
Map<String, Object> requestParams = new HashMap<>(); |
||||
if (params != null) { |
||||
params.setParams(requestParams); |
||||
} |
||||
return getJsonResult(isDev, hisEnum, requestParams); |
||||
} |
||||
} |
@ -0,0 +1,14 @@ |
||||
# \u533B\u4FDD\u914D\u7F6E |
||||
mi_ali.is_dev=true |
||||
mi_ali.is_enable=true |
||||
mi_ali.is_auto_refund=true |
||||
|
||||
# \u5B9A\u70B9\u533B\u7597\u673A\u6784\u540D\u79F0\uFF08\u652F\u4ED8\u5B9D\u53EF\u80FD\u4E0D\u540C\uFF09 |
||||
mi_ali.org_hospital_name=\u4E91\u5357\u7701\u6EC7\u5357\u4E2D\u5FC3\u533B\u9662 |
||||
# \u533B\u4FDD\uFF08PDF\u6587\u6863\uFF09---------------------------------------------------------------------------------- |
||||
# \u5B9A\u70B9\u533B\u836F\u673A\u6784\u7F16\u7801 |
||||
mi_ali.org_no=H53250301796 |
||||
# \u5B9A\u70B9\u533B\u836F\u673A\u6784\u5C0F\u7A0B\u5E8F/h5\u5E94\u7528id\uFF08\u6B63\u5F0F\u73AF\u5883\uFF1A\u6E20\u9053\u7F16\u53F7\uFF09 |
||||
mi_ali.org_app_id=1J06MILHV0JM4460C80A0000F05B9B68 |
||||
# \u5B9A\u70B9\u533B\u836F\u673A\u6784\u6E20\u9053\u8BA4\u8BC1\u7F16\u7801 |
||||
mi_ali.org_chnl_crtf_codg=BqK1kMStlhVDgN2uHf4EsP9BQzovPtfTZGwRsyhqMMY05hWhBzmfAN/glcC2Qe8q |
@ -1 +1 @@ |
||||
# \u5F00\u542F\u5904\u65B9\u9884\u7ED3\u7B97\uFF08\u7B2C2\u5F00\u5173\uFF09\uFF08\u6CE8\u610F\u8BE5\u914D\u7F6E\u9700\u8054\u7CFBhis\u5F00\u53D1\u8005\u786E\u8BA4\u652F\u6301\u624D\u80FD\u5F00\u542F\uFF0C\u5426\u5219\u5B58\u5728\u98CE\u9669\uFF01\uFF09
his.is_recipe_prepay=false
lis.url=192.168.1.185:8090
lis.unifiedEntrance=true
# \u672C\u5730
#his.url=127.0.0.1:8888
# \u6D4B\u8BD5\u73AF\u5883
ali_code=675448357
# \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E
his.is_log_resp=true
# \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F
his.is_push_msg=false
#-------------------------------------------------------------
#\u672C\u5730
his.md_url=127.0.0.1:7777
his.dev_url=127.0.0.1:7777
### \u5FB7\u5B8F\u4E2D\u533B
#his.url=200.200.200.60:8888
# \u7EA2\u6CB3\u5DDE\u533B\u9662
#his.url=10.20.10.6:8888
# \u8292\u5E02\u5987\u5E7C
his.url=192.168.11.7:8888
# \u5B81\u8497\u5987\u5E7C
#his.url=172.19.3.15:8888
# \u516C\u53F8\u6D4B\u8BD5
#his.url=192.168.12.39:8888
# \u516C\u53F8\u6D4B\u8BD5
#his.url=192.168.12.10:8888
# \u7EA2\u6CB3
#his.url=10.20.10.6:8888
# \u7EA2\u6CB3\u533B\u4FDD
#his.url=10.20.10.6:8888
#his.url=192.168.12.10:8888
#his.md_url=192.168.1.128:7885
#his.dev_url=10.20.10.6:9988
# \u6C38\u80DC
#his.url=200.200.200.20:8888
# \u5FB7\u5B8F\u4E2D\u533B
#his.url=200.200.200.60:8888
# \u534E\u576A
#his.url=192.168.1.115:8888
# \u8499\u81EA\u4E2D\u533B
#his.url=192.168.0.228:8888
# \u7389\u9F99
#his.url=192.168.0.17:8888
# \u4E91\u9F99
#his.url=200.200.200.69:8888
#
#his.url=172.16.10.15:8888
# \u7984\u529D\u949F\u7231
#his.url=200.200.200.5:8888
# \u8499\u81EA\u5E02\u4EBA\u6C11\u533B\u9662
#his.url=200.200.200.174:8080
# \u5143\u8C0B
#his.url=200.200.200.29:8888
# \u5143\u8C0B\u533B\u4FDD
#his.dev_url=200.200.200.36:9999
# \u8292\u5E02
#his.url=192.168.100.8:8888
# \u7EA2\u6CB3\u5987\u5E7C\u4FDD\u5065\u9662
#his.url=192.168.1.204:8888
# \u8292\u5E02\u5987\u5E7C
#his.url=192.168.11.7:8888
#
#his.url=10.10.11.23:8888
# \u77F3\u6797
#his.url=192.168.10.10:8888
# \u5BCC\u6C11
#his.url=200.200.201.27:8888
# \u897F\u53CC\u7248\u7EB3
#his.url=10.10.11.23:8888
#wx.password=ynxbd@6910 |
||||
# \u5F00\u542F\u5904\u65B9\u9884\u7ED3\u7B97\uFF08\u7B2C2\u5F00\u5173\uFF09\uFF08\u6CE8\u610F\u8BE5\u914D\u7F6E\u9700\u8054\u7CFBhis\u5F00\u53D1\u8005\u786E\u8BA4\u652F\u6301\u624D\u80FD\u5F00\u542F\uFF0C\u5426\u5219\u5B58\u5728\u98CE\u9669\uFF01\uFF09
his.is_recipe_prepay=false
lis.url=192.168.1.185:8090
lis.unifiedEntrance=true
# \u672C\u5730
#his.url=127.0.0.1:8888
# \u6D4B\u8BD5\u73AF\u5883
ali_code=675448357
# \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E
his.is_log_resp=true
# \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F
his.is_push_msg=false
#-------------------------------------------------------------
# \u6D4B\u8BD5\u73AF\u5883
his.dev_url=127.0.0.1:7777
# \u533B\u4FDD======================
# \u65E7\u914D\u7F6E
his.md_url=127.0.0.1:7777
# \u533B\u4FDD\u6B63\u5F0F\u73AF\u5883
his.prod_mi_url=127.0.0.1:7777
\u672C\u5730
\u672C\u5730
\u672C\u5730
his.md_url=127.0.0.1:7777
\u672C\u5730
his.dev_url=127.0.0.1:7777# \u6D4B\u8BD5============================================================
### \u5FB7\u5B8F\u4E2D\u533B
#his.url=200.200.200.60:8888
# \u7EA2\u6CB3\u5DDE\u533B\u9662
#his.url=10.20.10.6:8888
# \u8292\u5E02\u5987\u5E7C
his.url=192.168.11.7:8888
# \u5B81\u8497\u5987\u5E7C
#his.url=172.19.3.15:8888
# \u516C\u53F8\u6D4B\u8BD5
#his.url=192.168.12.39:8888
# \u516C\u53F8\u6D4B\u8BD5
#his.url=192.168.12.10:8888
# \u7EA2\u6CB3
#his.url=10.20.10.6:8888
# \u7EA2\u6CB3\u533B\u4FDD
#his.url=10.20.10.6:8888
#his.url=192.168.12.10:8888
#his.md_url=192.168.1.128:7885
#his.dev_url=10.20.10.6:9988
# \u6C38\u80DC
#his.url=200.200.200.20:8888
# \u5FB7\u5B8F\u4E2D\u533B
#his.url=200.200.200.60:8888
# \u534E\u576A
#his.url=192.168.1.115:8888
# \u8499\u81EA\u4E2D\u533B
#his.url=192.168.0.228:8888
# \u7389\u9F99
#his.url=192.168.0.17:8888
# \u4E91\u9F99
#his.url=200.200.200.69:8888
#
#his.url=172.16.10.15:8888
# \u7984\u529D\u949F\u7231
#his.url=200.200.200.5:8888
# \u8499\u81EA\u5E02\u4EBA\u6C11\u533B\u9662
#his.url=200.200.200.174:8080
# \u5143\u8C0B
#his.url=200.200.200.29:8888
# \u5143\u8C0B\u533B\u4FDD
#his.dev_url=200.200.200.36:9999
# \u8292\u5E02
#his.url=192.168.100.8:8888
# \u7EA2\u6CB3\u5987\u5E7C\u4FDD\u5065\u9662
#his.url=192.168.1.204:8888
# \u8292\u5E02\u5987\u5E7C
#his.url=192.168.11.7:8888
#
#his.url=10.10.11.23:8888
# \u77F3\u6797
#his.url=192.168.10.10:8888
# \u5BCC\u6C11
#his.url=200.200.201.27:8888
# \u897F\u53CC\u7248\u7EB3
#his.url=10.10.11.23:8888
#wx.password=ynxbd@6910 |
Loading…
Reference in new issue