|
|
|
|
@ -650,16 +650,20 @@ public class RecipeService { |
|
|
|
|
if (recipe == null) { |
|
|
|
|
return Result.error(ResultEnum.DATA_NOT_FOUND); |
|
|
|
|
} |
|
|
|
|
Integer payStatus = recipe.getPayStatus(); |
|
|
|
|
if (payStatus == null || payStatus != 0) { |
|
|
|
|
log.info("[医保]退费参数缺失 payOrdId={}, payStatus={}", payOrdId, payStatus); |
|
|
|
|
if (!recipe.hasPayStatusPaid()) { |
|
|
|
|
log.info("[医保]订单未支付 payOrdId={}, payStatus={}", payOrdId, recipe.getPayStatus()); |
|
|
|
|
return Result.error(ResultEnum.PAY_ORDER_PARAMS_IS_DEFECT); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String refundResult = recipe.getRefundResult(); |
|
|
|
|
if (WxPayHelper.OK.equals(refundResult)) { |
|
|
|
|
if (recipe.hasRefundByRefundResult()) { |
|
|
|
|
return Result.error(ResultEnum.REFUND_IS_REPEAT); // 退费重复申请
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Boolean hasDateRange = DateHelper.inDateRangeByDay(-30, DateHelper.dateToStr(recipe.getUpdateTime(), DateHelper.DateEnum.yyyy_MM_dd_HH_mm_ss)); |
|
|
|
|
if (hasDateRange == null || !hasDateRange) { |
|
|
|
|
return Result.error("订单支付日期已经超过30天,请从商户平台退费"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String outTradeNo = recipe.getOutTradeNo(); |
|
|
|
|
BigDecimal cashFee = recipe.getPayMoney(); |
|
|
|
|
if (cashFee == null) { |
|
|
|
|
@ -668,7 +672,7 @@ public class RecipeService { |
|
|
|
|
|
|
|
|
|
if (cashFee.compareTo(BigDecimal.ZERO) == 0) { |
|
|
|
|
if (!recipeDao.updateRefundByTradeNo(payOrdId, WxPayHelper.OK)) { |
|
|
|
|
log.error("[医保]现金0修改数据库状态失败 payOrderId={}", payOrdId); |
|
|
|
|
log.error("[医保]现金为0修改数据库状态失败 payOrderId={}", payOrdId); |
|
|
|
|
return Result.error(ResultEnum.DATA_UPDATE_ERROR); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -680,15 +684,14 @@ public class RecipeService { |
|
|
|
|
return Result.success(map); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WxMedOrder order = WxMedHelper.refund(outTradeNo, ("R" + payOrdId), payOrdId, cashFee, reason); |
|
|
|
|
WxMedOrder order = WxMedHelper.refundCash(outTradeNo, ("R" + payOrdId), payOrdId, cashFee, reason); |
|
|
|
|
log.info("[医保]现金退费order={}", order); |
|
|
|
|
String refundReason = "线下现金退费"; |
|
|
|
|
String refundReason = "线下HIS医保现金部分退费"; |
|
|
|
|
if (!ObjectUtils.isEmpty(reason)) { |
|
|
|
|
refundReason = ":" + reason; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage(); |
|
|
|
|
String refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage(); |
|
|
|
|
if (!recipeDao.updateRefundByTradeNo(payOrdId, refundResult, refundReason)) { |
|
|
|
|
log.error("[医保]现金退费修改数据库状态失败 payOrderId={}, refundResult={}", payOrdId, refundResult); |
|
|
|
|
} |
|
|
|
|
|