|
|
|
@ -9,7 +9,7 @@ import com.ynxbd.common.bean.enums.MerchantEnum; |
|
|
|
|
import com.ynxbd.common.bean.pay.*; |
|
|
|
|
import com.ynxbd.common.dao.RecipeDao; |
|
|
|
|
import com.ynxbd.common.dao.RegisterDao; |
|
|
|
|
import com.ynxbd.common.dao.his.HisMIDao; |
|
|
|
|
import com.ynxbd.common.dao.his.HisMedDao; |
|
|
|
|
import com.ynxbd.common.helper.common.CodeHelper; |
|
|
|
|
import com.ynxbd.common.helper.common.JsonHelper; |
|
|
|
|
import com.ynxbd.common.result.JsonResult; |
|
|
|
@ -17,10 +17,10 @@ import com.ynxbd.common.result.Result; |
|
|
|
|
import com.ynxbd.common.result.ResultEnum; |
|
|
|
|
import com.ynxbd.common.result.ServiceException; |
|
|
|
|
import com.ynxbd.wx.config.WeChatConfig; |
|
|
|
|
import com.ynxbd.wx.wxfactory.WxMedicalHelper; |
|
|
|
|
import com.ynxbd.wx.wxfactory.WxMedHelper; |
|
|
|
|
import com.ynxbd.wx.wxfactory.WxPayHelper; |
|
|
|
|
import com.ynxbd.wx.wxfactory.bean.MedicalInfo; |
|
|
|
|
import com.ynxbd.wx.wxfactory.bean.MIOrder; |
|
|
|
|
import com.ynxbd.wx.wxfactory.bean.WxMedOrder; |
|
|
|
|
import com.ynxbd.wx.wxfactory.bean.MedicalUserInfo; |
|
|
|
|
import com.ynxbd.wx.wxfactory.bean.OrderMIEnum; |
|
|
|
|
import com.ynxbd.wx.wxfactory.medical.WxMedConfig; |
|
|
|
@ -69,7 +69,7 @@ public class MedicalService { |
|
|
|
|
if (merchantEnum == MerchantEnum.ALI_MEDICAL) { // 支付宝医保
|
|
|
|
|
payAuthNo = qrCode; |
|
|
|
|
} else { |
|
|
|
|
MedicalUserInfo userInfo = WxMedicalHelper.getUserInfo(openid, qrCode, cardNo, realName); |
|
|
|
|
MedicalUserInfo userInfo = WxMedHelper.getUserInfo(openid, qrCode, cardNo, realName); |
|
|
|
|
payAuthNo = userInfo.getPayAuthNo(); |
|
|
|
|
} |
|
|
|
|
return payAuthNo; |
|
|
|
@ -86,11 +86,11 @@ public class MedicalService { |
|
|
|
|
* @param realName 真实姓名 |
|
|
|
|
* @param reg 挂号信息 |
|
|
|
|
*/ |
|
|
|
|
public MedicalInfo hisRegMIUploadFeeDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, Register reg, Boolean isSplitTime) throws ServiceException { |
|
|
|
|
public MedicalInfo hisRegMedUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, Register reg, Boolean isSplitTime) throws ServiceException { |
|
|
|
|
String payAuthNo = getPayAuthNo(merchantEnum, openid, qrCode, cardNo, realName); |
|
|
|
|
log.info("[医保]上传明细:patientId={}, cardNo={}, realName={}, reg={}", patientId, cardNo, realName, reg); |
|
|
|
|
JsonResult result = HisMIDao.regMIUploadFeeDetails(merchantEnum, reg, payAuthNo, cardNo, isSplitTime); |
|
|
|
|
return hisMIPlaceOrder(merchantEnum, payAuthNo, result); |
|
|
|
|
JsonResult result = HisMedDao.regMedUploadDetails(merchantEnum, reg, payAuthNo, cardNo, isSplitTime); |
|
|
|
|
return hisMedPlaceOrder(merchantEnum, payAuthNo, result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -105,19 +105,19 @@ public class MedicalService { |
|
|
|
|
* @param recipeJson 处方json |
|
|
|
|
* @param totalFee 订单金额 |
|
|
|
|
*/ |
|
|
|
|
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 { |
|
|
|
|
public MedicalInfo hisRxUploadDetails(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); |
|
|
|
|
MedicalUserInfo userInfo = WxMedHelper.getUserInfo(openid, qrCode, cardNo, realName); |
|
|
|
|
payAuthNo = userInfo.getPayAuthNo(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 测试报告内容[2]
|
|
|
|
|
log.info("{}[HIS医保上传明细] req={patientId:{}, treatNum={}, totalFee:{}, cardNo:{}, recipeJson:{}}", merchantEnum.NAME, patientId, treatNum, totalFee, cardNo, recipeJson); |
|
|
|
|
JsonResult result = HisMIDao.rxMIUploadFeeDetails(merchantEnum, payAuthNo, cardNo, openid, patientId, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName); |
|
|
|
|
return hisMIPlaceOrder(merchantEnum, payAuthNo, result); |
|
|
|
|
JsonResult result = HisMedDao.rxMedUploadDetails(merchantEnum, payAuthNo, cardNo, openid, patientId, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName); |
|
|
|
|
return hisMedPlaceOrder(merchantEnum, payAuthNo, result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -125,7 +125,7 @@ public class MedicalService { |
|
|
|
|
* |
|
|
|
|
* @param payAuthNo 授权码 |
|
|
|
|
*/ |
|
|
|
|
private MedicalInfo hisMIPlaceOrder(MerchantEnum merchantEnum, String payAuthNo, JsonResult result) throws ServiceException { |
|
|
|
|
private MedicalInfo hisMedPlaceOrder(MerchantEnum merchantEnum, String payAuthNo, JsonResult result) throws ServiceException { |
|
|
|
|
if (result == null) { |
|
|
|
|
throw new ServiceException("[医保]返回数据为空"); |
|
|
|
|
} |
|
|
|
@ -152,7 +152,7 @@ public class MedicalService { |
|
|
|
|
medicalInfo.setChrgBchno(chrgBchno); |
|
|
|
|
medicalInfo.setMdUserId(mdUserId); |
|
|
|
|
|
|
|
|
|
JsonResult resp = HisMIDao.placeMIOrder(merchantEnum, medicalInfo); |
|
|
|
|
JsonResult resp = HisMedDao.placeMedOrder(merchantEnum, medicalInfo); |
|
|
|
|
if (!resp.success()) { |
|
|
|
|
log.info("[上传明细失败] {}", resp.getMessage()); |
|
|
|
|
throw new ServiceException(resp.getMessage()); |
|
|
|
@ -184,13 +184,13 @@ public class MedicalService { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 创建医保订单
|
|
|
|
|
private MICreateOrder createMIOrder(MerchantEnum merchantEnum, OrderMIEnum orderMIEnum, boolean hasDBOrder, String orderTitle, String openid, String outTradeNo, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String chrgBchno, |
|
|
|
|
BigDecimal totalFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, |
|
|
|
|
String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) throws ServiceException { |
|
|
|
|
MICreateOrder miCreateOrder = new MICreateOrder(); |
|
|
|
|
private MedCreateOrder createMIOrder(MerchantEnum merchantEnum, OrderMIEnum orderMIEnum, boolean hasDBOrder, String orderTitle, String openid, String outTradeNo, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String chrgBchno, |
|
|
|
|
BigDecimal totalFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, |
|
|
|
|
String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) throws ServiceException { |
|
|
|
|
MedCreateOrder medCreateOrder = new MedCreateOrder(); |
|
|
|
|
|
|
|
|
|
if (MerchantEnum.WX_MEDICAL.equals(merchantEnum)) { |
|
|
|
|
Map<String, Object> map = WxMedicalHelper.createOrder(orderMIEnum, |
|
|
|
|
Map<String, Object> map = WxMedHelper.createOrder(orderMIEnum, |
|
|
|
|
openid, |
|
|
|
|
outTradeNo, |
|
|
|
|
chrgBchno, |
|
|
|
@ -209,8 +209,8 @@ public class MedicalService { |
|
|
|
|
familyType, |
|
|
|
|
familyName, |
|
|
|
|
familyCardNo); |
|
|
|
|
miCreateOrder.setIsHasMerOrder(null); |
|
|
|
|
miCreateOrder.setMap(map); |
|
|
|
|
medCreateOrder.setIsHasMerOrder(null); |
|
|
|
|
medCreateOrder.setMap(map); |
|
|
|
|
|
|
|
|
|
} else if (MerchantEnum.ALI_MEDICAL.equals(merchantEnum)) { |
|
|
|
|
if (ObjectUtils.isEmpty(medicalCardId)) { |
|
|
|
@ -236,11 +236,11 @@ public class MedicalService { |
|
|
|
|
medicalCardInstId, |
|
|
|
|
medicalCardId); |
|
|
|
|
|
|
|
|
|
miCreateOrder.setIsHasMerOrder(order.hasTradeState()); |
|
|
|
|
miCreateOrder.setMap(map); |
|
|
|
|
return miCreateOrder; |
|
|
|
|
medCreateOrder.setIsHasMerOrder(order.hasTradeState()); |
|
|
|
|
medCreateOrder.setMap(map); |
|
|
|
|
return medCreateOrder; |
|
|
|
|
} |
|
|
|
|
return miCreateOrder; |
|
|
|
|
return medCreateOrder; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -289,7 +289,7 @@ public class MedicalService { |
|
|
|
|
log.info("[医保][处方]下单 hasDBOrder={}, openid={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", hasDBOrder, openid, patientId, treatNum, outTradeNo, payOrdId, payAuthNo, totalFee, acctFee, hifpFee, cashFee, cardNo, realName, familyType, familyName, medicalCardId, medicalCardInstId); |
|
|
|
|
|
|
|
|
|
String orderTitle = "门诊号:" + treatNum; |
|
|
|
|
MICreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.DIAG_PAY, hasDBOrder, orderTitle, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno, |
|
|
|
|
MedCreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.DIAG_PAY, hasDBOrder, orderTitle, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno, |
|
|
|
|
totalFee, insuranceFee, cashFee, notifyType, |
|
|
|
|
familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId); |
|
|
|
|
|
|
|
|
@ -383,7 +383,7 @@ public class MedicalService { |
|
|
|
|
log.info("[医保][挂号]下单 hasDBOrder={}, openid={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", hasDBOrder, openid, patientId, treatNum, outTradeNo, payOrdId, payAuthNo, totalFee, acctFee, hifpFee, cashFee, cardNo, realName, familyType, familyName, medicalCardId, medicalCardInstId); |
|
|
|
|
|
|
|
|
|
String orderTitle = "挂号"; |
|
|
|
|
MICreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.REG_PAY, hasDBOrder, orderTitle, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno, |
|
|
|
|
MedCreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.REG_PAY, hasDBOrder, orderTitle, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno, |
|
|
|
|
totalFee, insuranceFee, cashFee, notifyType, |
|
|
|
|
familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId); |
|
|
|
|
|
|
|
|
@ -477,7 +477,7 @@ public class MedicalService { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
JsonResult jsonResult = HisMIDao.regMIPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee); |
|
|
|
|
JsonResult jsonResult = HisMedDao.regMedPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee); |
|
|
|
|
if (!jsonResult.success()) { |
|
|
|
|
String respCode = jsonResult.getCode(); |
|
|
|
|
String respMessage = jsonResult.getMessage(); |
|
|
|
@ -533,7 +533,7 @@ public class MedicalService { |
|
|
|
|
private ApiResult autoRefund(MerchantEnum merchantEnum, String outTradeNo, String tradeNo, BigDecimal cashFee, String reason) { |
|
|
|
|
ApiResult apiResult = new ApiResult(); |
|
|
|
|
if (MerchantEnum.WX_MEDICAL == merchantEnum) { |
|
|
|
|
MIOrder order = WxMedicalHelper.refundCash(outTradeNo, tradeNo, cashFee, reason); |
|
|
|
|
WxMedOrder order = WxMedHelper.refundCash(outTradeNo, tradeNo, cashFee, reason); |
|
|
|
|
apiResult.setSuccess(order.isOk()); |
|
|
|
|
apiResult.setMessage(order.isOk() ? WxPayHelper.OK : order.getMessage()); |
|
|
|
|
} else { |
|
|
|
@ -598,7 +598,7 @@ public class MedicalService { |
|
|
|
|
log.info("{} [医保][处方]更新商户信息成功 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
JsonResult jsonResult = HisMIDao.rxMIPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee); |
|
|
|
|
JsonResult jsonResult = HisMedDao.rxMedPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee); |
|
|
|
|
if (!jsonResult.success()) { |
|
|
|
|
String respCode = jsonResult.getCode(); |
|
|
|
|
String respMessage = jsonResult.getMessage(); |
|
|
|
@ -680,7 +680,7 @@ public class MedicalService { |
|
|
|
|
|
|
|
|
|
// 医保退费-必须先执行
|
|
|
|
|
log.info("[医保][处方][个账]退费开始 tradeNo={}, payAuthNo={}, fpNum={}", tradeNo, payAuthNo, fpNum); |
|
|
|
|
JsonResult jsonResult = HisMIDao.miRefund(MerchantEnum.WX_MEDICAL, payAuthNo, fpNum, bankTransNo, ("R" + tradeNo), cashFee); |
|
|
|
|
JsonResult jsonResult = HisMedDao.medRefund(MerchantEnum.WX_MEDICAL, payAuthNo, fpNum, bankTransNo, ("R" + tradeNo), cashFee); |
|
|
|
|
if (!jsonResult.success()) { // 失败
|
|
|
|
|
log.info("[医保][处方][个账]退费失败 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); |
|
|
|
|
String message = jsonResult.getMessage(); |
|
|
|
@ -715,7 +715,7 @@ public class MedicalService { |
|
|
|
|
|
|
|
|
|
String outRefundNo = ("R" + tradeNo); |
|
|
|
|
if (merchantEnum.equals(MerchantEnum.WX_MEDICAL)) { |
|
|
|
|
MIOrder order = WxMedicalHelper.refund(outTradeNo, outRefundNo, tradeNo, cashFee, null); |
|
|
|
|
WxMedOrder order = WxMedHelper.refund(outTradeNo, outRefundNo, tradeNo, cashFee, null); |
|
|
|
|
boolean isOk = order.isOk(); |
|
|
|
|
log.info("[微信][处方][现金]退费{} outTradeNo={}, bankTransNo={}, tradeNo={}", (isOk ? "成功" : "失败"), outTradeNo, bankTransNo, tradeNo); |
|
|
|
|
if (isOk) { |
|
|
|
@ -771,7 +771,7 @@ public class MedicalService { |
|
|
|
|
if (merchantEnum == null) { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
JsonResult jsonResult = HisMIDao.getMIAccounts(merchantEnum, mdUserId); |
|
|
|
|
JsonResult jsonResult = HisMedDao.getMedAccounts(merchantEnum, mdUserId); |
|
|
|
|
if (!jsonResult.success()) { // 未找到
|
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|