From 2c545921f283df09d8ded97b097c4c078f342337 Mon Sep 17 00:00:00 2001 From: wangsq Date: Tue, 28 Apr 2026 11:01:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BB=E4=BF=9D=E7=8E=B0=E9=87=91=E9=83=A8?= =?UTF-8?q?=E5=88=86=E9=80=80=E8=B4=B9=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=99=90?= =?UTF-8?q?=E5=88=B6=E5=BF=85=E9=A1=BB=E5=9C=A8=E6=94=AF=E4=BB=98=E5=90=8E?= =?UTF-8?q?30=E5=A4=A9=E5=86=85=E6=89=8D=E8=83=BD=E9=80=80=E7=8E=B0?= =?UTF-8?q?=E9=87=91=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ynxbd/common/action/PatientAction.java | 1 + .../ynxbd/common/action/test/TestAction.java | 2 ++ .../com/ynxbd/common/bean/pay/Register.java | 1 - .../ynxbd/common/service/RecipeService.java | 23 +++++++++------- .../com/ynxbd/common/service/RegService.java | 26 +++++++++++++++---- .../com/ynxbd/wx/wxfactory/AesWxHelper.java | 2 +- 6 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/ynxbd/common/action/PatientAction.java b/src/main/java/com/ynxbd/common/action/PatientAction.java index 903e7a9..4e13078 100644 --- a/src/main/java/com/ynxbd/common/action/PatientAction.java +++ b/src/main/java/com/ynxbd/common/action/PatientAction.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); diff --git a/src/main/java/com/ynxbd/common/action/test/TestAction.java b/src/main/java/com/ynxbd/common/action/test/TestAction.java index 56bdbce..90b5949 100644 --- a/src/main/java/com/ynxbd/common/action/test/TestAction.java +++ b/src/main/java/com/ynxbd/common/action/test/TestAction.java @@ -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; diff --git a/src/main/java/com/ynxbd/common/bean/pay/Register.java b/src/main/java/com/ynxbd/common/bean/pay/Register.java index 3a673c4..c4f6c9f 100644 --- a/src/main/java/com/ynxbd/common/bean/pay/Register.java +++ b/src/main/java/com/ynxbd/common/bean/pay/Register.java @@ -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; diff --git a/src/main/java/com/ynxbd/common/service/RecipeService.java b/src/main/java/com/ynxbd/common/service/RecipeService.java index ac81fd6..c9954d4 100644 --- a/src/main/java/com/ynxbd/common/service/RecipeService.java +++ b/src/main/java/com/ynxbd/common/service/RecipeService.java @@ -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); } diff --git a/src/main/java/com/ynxbd/common/service/RegService.java b/src/main/java/com/ynxbd/common/service/RegService.java index cbd2c23..a962482 100644 --- a/src/main/java/com/ynxbd/common/service/RegService.java +++ b/src/main/java/com/ynxbd/common/service/RegService.java @@ -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); } diff --git a/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java index d59acd3..8536626 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java @@ -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")); } }