|
|
|
@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; |
|
|
|
|
import com.ynxbd.ali.helper.AliMedicalHelper; |
|
|
|
|
import com.ynxbd.common.action.pay.PEnum; |
|
|
|
|
import com.ynxbd.common.bean.enums.MerchantEnum; |
|
|
|
|
import com.ynxbd.common.bean.pay.ApiResult; |
|
|
|
|
import com.ynxbd.common.bean.pay.Recipe; |
|
|
|
|
import com.ynxbd.common.bean.pay.Register; |
|
|
|
|
import com.ynxbd.common.dao.RecipeDao; |
|
|
|
@ -61,10 +62,14 @@ public class MedicalService { |
|
|
|
|
* @param realName 真实姓名 |
|
|
|
|
* @param reg 挂号信息 |
|
|
|
|
*/ |
|
|
|
|
public MedicalInfo hisRegMIUploadFeeDetails(String qrCode, String openid, String patientId, String cardNo, String realName, Register reg, Boolean isSplitTime) throws ServiceException { |
|
|
|
|
public MedicalInfo hisRegMIUploadFeeDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, Register reg, Boolean isSplitTime) throws ServiceException { |
|
|
|
|
String payAuthNo; |
|
|
|
|
if (merchantEnum == MerchantEnum.ALI_MEDICAL) { // 支付宝医保
|
|
|
|
|
payAuthNo = qrCode; |
|
|
|
|
} else { |
|
|
|
|
MedicalUserInfo userInfo = WxMedicalHelper.getUserInfo(openid, qrCode, cardNo, realName); |
|
|
|
|
|
|
|
|
|
String payAuthNo = userInfo.getPayAuthNo(); |
|
|
|
|
payAuthNo = userInfo.getPayAuthNo(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.info("[医保]上传明细:patientId={}, cardNo={}, realName={}, reg={}", patientId, cardNo, realName, reg); |
|
|
|
|
JsonResult result = HisMedicalDao.regTimeMdUploadFeeDetails(reg, payAuthNo, cardNo, MerchantEnum.WX, isSplitTime); |
|
|
|
@ -83,10 +88,14 @@ public class MedicalService { |
|
|
|
|
* @param recipeJson 处方json |
|
|
|
|
* @param totalFee 订单金额 |
|
|
|
|
*/ |
|
|
|
|
public MedicalInfo hisRxUploadFeeDetails(String qrCode, String openid, String patientId, String cardNo, String realName, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) throws ServiceException { |
|
|
|
|
public MedicalInfo hisRxUploadFeeDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) throws ServiceException { |
|
|
|
|
String payAuthNo; |
|
|
|
|
if (merchantEnum == MerchantEnum.ALI_MEDICAL) { |
|
|
|
|
payAuthNo = qrCode; |
|
|
|
|
} else { |
|
|
|
|
MedicalUserInfo userInfo = WxMedicalHelper.getUserInfo(openid, qrCode, cardNo, realName); |
|
|
|
|
|
|
|
|
|
String payAuthNo = userInfo.getPayAuthNo(); |
|
|
|
|
payAuthNo = userInfo.getPayAuthNo(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.info("[医保]上传明细:patientId={}, totalFee={}, cardNo={}, recipeJson={}", patientId, totalFee, cardNo, recipeJson); |
|
|
|
|
JsonResult result = HisMedicalDao.recipeMdUploadFeeDetails(payAuthNo, cardNo, openid, patientId, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName); |
|
|
|
@ -426,7 +435,7 @@ public class MedicalService { |
|
|
|
|
if (cashFee.compareTo(BigDecimal.ZERO) == 0) { // 现金部分为0
|
|
|
|
|
log.info("[医保][挂号]现金为0不执行退费-修改退费状态 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); |
|
|
|
|
if (!regDao.updateRefundByTradeNo(tradeNo, "OK")) { |
|
|
|
|
log.info("【微信】[医保][挂号] 修改数据库退费状态失败 tradeNo={}", tradeNo); |
|
|
|
|
log.info("[医保][挂号] 修改数据库退费状态失败 tradeNo={}", tradeNo); |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
@ -436,14 +445,14 @@ public class MedicalService { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 微信医保自动退费
|
|
|
|
|
MedicalOrder order = WxMedicalHelper.refundCash(outTradeNo, tradeNo, cashFee, "系统繁忙缴费失败,自动退费"); |
|
|
|
|
boolean isOk = order.isOk(); |
|
|
|
|
String refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage(); |
|
|
|
|
// 医保自动退费
|
|
|
|
|
ApiResult apiResult = new MedicalService().autoRefund(merchantEnum, outTradeNo, tradeNo, cashFee, "系统繁忙缴费失败,自动退费"); |
|
|
|
|
boolean isOk = apiResult.isOk(); |
|
|
|
|
String refundResult = apiResult.getMessage(); |
|
|
|
|
|
|
|
|
|
log.info("【微信】[医保][挂号]现金自动退费 outTradeNo={}, bankTransNo={}, tradeNo={} [{}]:{}", outTradeNo, bankTransNo, tradeNo, (isOk ? "成功" : "失败"), order.getMessage()); |
|
|
|
|
log.info("{}[挂号]现金自动退费 outTradeNo={}, bankTransNo={}, tradeNo={} [{}]:{}", merchantEnum.NAME, outTradeNo, bankTransNo, tradeNo, (isOk ? "成功" : "失败"), refundResult); |
|
|
|
|
if (!regDao.updateRefundByTradeNo(tradeNo, refundResult)) { |
|
|
|
|
log.info("【微信】[医保][挂号]现金自动退费 修改数据库状态失败 tradeNo={}, refundResult={}", tradeNo, refundResult); |
|
|
|
|
log.info("{}[挂号]现金自动退费 修改数据库状态失败 tradeNo={}, refundResult={}", merchantEnum.NAME, tradeNo, refundResult); |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
@ -456,6 +465,19 @@ public class MedicalService { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private ApiResult autoRefund(MerchantEnum merchantEnum, String outTradeNo, String tradeNo, BigDecimal cashFee, String reason) { |
|
|
|
|
ApiResult apiResult = new ApiResult(); |
|
|
|
|
if (MerchantEnum.WX_MEDICAL == merchantEnum) { |
|
|
|
|
MedicalOrder order = WxMedicalHelper.refundCash(outTradeNo, tradeNo, cashFee, reason); |
|
|
|
|
apiResult.setSuccess(order.isOk()); |
|
|
|
|
apiResult.setMessage(order.isOk() ? WxPayHelper.OK : order.getMessage()); |
|
|
|
|
} else { |
|
|
|
|
log.info("[支付宝][医保]未开通自动退费....."); |
|
|
|
|
apiResult.setMessage("[支付宝]未启用自动退费"); |
|
|
|
|
} |
|
|
|
|
return apiResult; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [医保]处方缴费 |
|
|
|
@ -536,7 +558,7 @@ public class MedicalService { |
|
|
|
|
if (cashFee.compareTo(BigDecimal.ZERO) == 0) { // 现金部分为0
|
|
|
|
|
log.info("[医保][处方]现金为0不执行退费-修改退费状态 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); |
|
|
|
|
if (!recipeDao.updateRefundByTradeNo(tradeNo, "OK")) { |
|
|
|
|
log.info("【微信】[医保][处方]修改数据库退费状态失败 tradeNo={}", tradeNo); |
|
|
|
|
log.info("[医保][处方]修改数据库退费状态失败 tradeNo={}", tradeNo); |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
@ -546,12 +568,13 @@ public class MedicalService { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
MedicalOrder order = WxMedicalHelper.refundCash(outTradeNo, tradeNo, cashFee, "系统繁忙缴费失败,自动退费"); |
|
|
|
|
boolean isOk = order.isOk(); |
|
|
|
|
String refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage(); |
|
|
|
|
log.info("【微信】[医保][处方]现金自动退费 outTradeNo={}, bankTransNo={}, tradeNo={} [{}]:{}", outTradeNo, bankTransNo, tradeNo, (isOk ? "成功" : "失败"), order.getMessage()); |
|
|
|
|
ApiResult apiResult = new MedicalService().autoRefund(merchantEnum, outTradeNo, tradeNo, cashFee, "系统繁忙缴费失败,自动退费"); |
|
|
|
|
boolean isOk = apiResult.isOk(); |
|
|
|
|
String refundResult = apiResult.getMessage(); |
|
|
|
|
|
|
|
|
|
log.info("{}[处方]现金自动退费 outTradeNo={}, bankTransNo={}, tradeNo={} [{}]:{}", merchantEnum.NAME, outTradeNo, bankTransNo, tradeNo, (isOk ? "成功" : "失败"), refundResult); |
|
|
|
|
if (!recipeDao.updateRefundByTradeNo(tradeNo, refundResult)) { |
|
|
|
|
log.info("【微信】[医保][处方]现金自动退费 修改数据库状态失败 tradeNo={}, refundResult={}", tradeNo, refundResult); |
|
|
|
|
log.info("{}[处方]现金自动退费 修改数据库状态失败 tradeNo={}, refundResult={}", merchantEnum.NAME, tradeNo, refundResult); |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|