医保现金部分退费,新增限制必须在支付后30天内才能退现金部分

debug
王绍全 1 week ago
parent 424cf697ec
commit 2c545921f2
  1. 1
      src/main/java/com/ynxbd/common/action/PatientAction.java
  2. 2
      src/main/java/com/ynxbd/common/action/test/TestAction.java
  3. 1
      src/main/java/com/ynxbd/common/bean/pay/Register.java
  4. 23
      src/main/java/com/ynxbd/common/service/RecipeService.java
  5. 26
      src/main/java/com/ynxbd/common/service/RegService.java
  6. 2
      src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java

@ -397,6 +397,7 @@ public class PatientAction extends BaseAction {
return Result.success();
}
// http://127.0.0.1:8080/wx/patient/queryGMCId?hisPatientId=5C881337931CDBBC8D38FACAE2D302D8
@Action("queryGMCId")
public Result queryGMCId(@AesDecode String hisPatientId) {
String gmcPatientId = new HisPatientDao().getGMCPatientId(hisPatientId);

@ -8,8 +8,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.WxMedHelper;
import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.medical.WxMedConfig;
import com.ynxbd.wx.wxfactory.medical.models.WxMedOrder;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;

@ -1,6 +1,5 @@
package com.ynxbd.common.bean.pay;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.RegService;

@ -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);
}

@ -1,5 +1,6 @@
package com.ynxbd.common.service;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.ali.enums.AliMsgEnum;
import com.ynxbd.ali.helper.AliHelper;
@ -255,10 +256,25 @@ public class RegService {
if (regInfo == null) {
return Result.error(ResultEnum.DATA_NOT_FOUND);
}
String refundResult = regInfo.getRefundResult();
if (WxPayHelper.OK.equals(refundResult)) {
Date updateTime = regInfo.getUpdateTime();
if (updateTime == null) {
return null;
}
if (!regInfo.hasPayStatusPaid()) {
log.info("[医保]订单未支付 payOrdId={}, payStatus={}", payOrdId, regInfo.getPayStatus());
return Result.error(ResultEnum.PAY_ORDER_PARAMS_IS_DEFECT);
}
if (regInfo.hasRefundByRefundResult()) {
return Result.error(ResultEnum.REFUND_IS_REPEAT); // 退费重复申请
}
Boolean hasDateRange = DateHelper.inDateRangeByDay(-30, DateHelper.dateToStr(regInfo.getUpdateTime(), DateHelper.DateEnum.yyyy_MM_dd_HH_mm_ss));
if (hasDateRange == null || !hasDateRange) {
return Result.error("订单支付日期已经超过30天,请从商户平台退费");
}
String outTradeNo = regInfo.getOutTradeNo();
BigDecimal cashFee = regInfo.getPayMoney();
if (cashFee == null) {
@ -278,13 +294,13 @@ public class RegService {
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 (!regDao.updateRefundByTradeNo(payOrdId, refundResult, refundReason)) {
log.error("[医保]挂号现金退费修改数据库状态失败 payOrderId={}, refundResult={}", payOrdId, refundResult);
}

@ -57,7 +57,7 @@ public class AesWxHelper extends AesHelper {
}
public static void main(String[] args) {
System.out.println(decode("3806267E84D1FF06A6C17FCA60FAFD22"));
System.out.println(encode("30020502"));
// System.out.println(decode("E6835E243069406F53EC8464898B37C0"));
}
}

Loading…
Cancel
Save