医保现金部分退费,新增限制必须在支付后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(); return Result.success();
} }
// http://127.0.0.1:8080/wx/patient/queryGMCId?hisPatientId=5C881337931CDBBC8D38FACAE2D302D8
@Action("queryGMCId") @Action("queryGMCId")
public Result queryGMCId(@AesDecode String hisPatientId) { public Result queryGMCId(@AesDecode String hisPatientId) {
String gmcPatientId = new HisPatientDao().getGMCPatientId(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.ResultEnum;
import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.result.ServiceException;
import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.WxMedHelper;
import com.ynxbd.wx.wxfactory.WxPayHelper; import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import com.ynxbd.wx.wxfactory.medical.WxMedConfig;
import com.ynxbd.wx.wxfactory.medical.models.WxMedOrder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.Namespace;

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

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

@ -1,5 +1,6 @@
package com.ynxbd.common.service; package com.ynxbd.common.service;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ynxbd.ali.enums.AliMsgEnum; import com.ynxbd.ali.enums.AliMsgEnum;
import com.ynxbd.ali.helper.AliHelper; import com.ynxbd.ali.helper.AliHelper;
@ -255,10 +256,25 @@ public class RegService {
if (regInfo == null) { if (regInfo == null) {
return Result.error(ResultEnum.DATA_NOT_FOUND); return Result.error(ResultEnum.DATA_NOT_FOUND);
} }
String refundResult = regInfo.getRefundResult(); Date updateTime = regInfo.getUpdateTime();
if (WxPayHelper.OK.equals(refundResult)) { 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); // 退费重复申请 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(); String outTradeNo = regInfo.getOutTradeNo();
BigDecimal cashFee = regInfo.getPayMoney(); BigDecimal cashFee = regInfo.getPayMoney();
if (cashFee == null) { if (cashFee == null) {
@ -278,13 +294,13 @@ public class RegService {
return Result.success(map); 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); log.info("[医保]挂号现金退费order={}", order);
String refundReason = "线下现金退费"; String refundReason = "线下HIS医保现金部分退费";
if (!ObjectUtils.isEmpty(reason)) { if (!ObjectUtils.isEmpty(reason)) {
refundReason = ":" + reason; refundReason = ":" + reason;
} }
refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage(); String refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage();
if (!regDao.updateRefundByTradeNo(payOrdId, refundResult, refundReason)) { if (!regDao.updateRefundByTradeNo(payOrdId, refundResult, refundReason)) {
log.error("[医保]挂号现金退费修改数据库状态失败 payOrderId={}, refundResult={}", payOrdId, refundResult); log.error("[医保]挂号现金退费修改数据库状态失败 payOrderId={}, refundResult={}", payOrdId, refundResult);
} }

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

Loading…
Cancel
Save