Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
travel-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cloud
travel-cloud
Commits
ca538fda
提交
ca538fda
authored
1月 02, 2025
作者:
hzh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
退款回调调试
上级
994e8035
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
141 行增加
和
9 行删除
+141
-9
JsapiRefundNotifyBodyModel.java
...dromara/common/pay/domain/JsapiRefundNotifyBodyModel.java
+80
-0
CurrencyUtils.java
.../main/java/org/dromara/common/pay/util/CurrencyUtils.java
+26
-0
RemoteOrderServiceImpl.java
.../java/org/dromara/order/dubbo/RemoteOrderServiceImpl.java
+2
-7
WeChatOrderPayServiceImpl.java
...dromara/order/service/impl/WeChatOrderPayServiceImpl.java
+33
-1
OrderQueryVo.java
.../main/java/org/dromara/server/domain/vo/OrderQueryVo.java
+0
-1
没有找到文件。
ruoyi-common/ruoyi-common-pay/src/main/java/org/dromara/common/pay/domain/JsapiRefundNotifyBodyModel.java
0 → 100644
浏览文件 @
ca538fda
package
org
.
dromara
.
common
.
pay
.
domain
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* @author hzh
* @date 2025-01-02
* @desc 退款回调body
**/
@Data
@Accessors
(
chain
=
true
)
public
class
JsapiRefundNotifyBodyModel
implements
Serializable
{
/**
* 【通知ID】回调通知的唯一编号。
*/
private
String
id
;
/**
* 【通知创建时间】
* <p>
* 1、定义:本次回调通知创建的时间。
*/
private
String
create_time
;
/**
* 【通知的类型】微信支付回调通知的类型。
*/
private
String
event_type
;
/**
* 【通知数据类型】通知的资源数据类型,固定为encrypt-resource。
*/
private
String
resource_type
;
/**
* 【通知资源数据】通知资源数据
*/
private
Resource
resource
;
@Data
@Accessors
(
chain
=
true
)
public
static
class
Resource
implements
Serializable
{
/**
* 【加密算法类型】
* 回调数据密文的加密算法类型,目前为AEAD_AES_256_GCM,开发者需要使用同样类型的数据进行解密。
*/
private
String
algorithm
;
/**
* 【原始回调类型】
* 加密前的对象类型,为refund。
*/
private
String
original_type
;
/**
* 【数据密文】
* Base64编码后的回调数据密文,商户需Base64解码并使用APIV3密钥解密,参考如何解密证书和回调报文。
*/
private
String
ciphertext
;
/**
* 【附加数据】
* 参与解密的附加数据,该值可能为空。
*/
private
String
associated_data
;
/**
* 【随机串】
* 参与解密的随机串。
*/
private
String
nonce
;
}
}
ruoyi-common/ruoyi-common-pay/src/main/java/org/dromara/common/pay/util/CurrencyUtils.java
0 → 100644
浏览文件 @
ca538fda
package
org
.
dromara
.
common
.
pay
.
util
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
/**
* @author hzh
* @date 2025-01-02
* @desc 货币工具类
**/
public
class
CurrencyUtils
{
/**
* 分转元
*
* @param score 分
* @return 元
*/
public
static
BigDecimal
convertScoreToYuan
(
Integer
score
)
{
if
(
score
==
null
)
{
return
null
;
}
return
new
BigDecimal
(
score
).
divide
(
new
BigDecimal
(
100
),
2
,
RoundingMode
.
HALF_UP
);
}
}
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/dubbo/RemoteOrderServiceImpl.java
浏览文件 @
ca538fda
...
...
@@ -39,12 +39,13 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
import
static
org
.
dromara
.
common
.
pay
.
util
.
CurrencyUtils
.
convertScoreToYuan
;
/**
* @author hzh
* @date 2024-12-05
...
...
@@ -224,12 +225,6 @@ public class RemoteOrderServiceImpl implements RemoteOrderService {
return
true
;
}
private
BigDecimal
convertScoreToYuan
(
Integer
score
)
{
if
(
score
==
null
)
{
return
null
;
}
return
new
BigDecimal
(
score
).
divide
(
new
BigDecimal
(
100
),
2
,
RoundingMode
.
HALF_UP
);
}
@Override
public
List
<
RemoteOrder
>
queryList
(
String
orderType
,
List
<
String
>
orderNoList
)
{
...
...
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/WeChatOrderPayServiceImpl.java
浏览文件 @
ca538fda
...
...
@@ -11,14 +11,18 @@ import org.apache.commons.lang3.StringUtils;
import
org.apache.dubbo.config.annotation.DubboReference
;
import
org.dromara.common.pay.domain.JsapiNotifyModel
;
import
org.dromara.common.pay.domain.JsapiRefundNotifyModel
;
import
org.dromara.common.pay.enums.RefundStatus
;
import
org.dromara.common.pay.service.IWxPayService
;
import
org.dromara.order.api.enums.OrderStatus
;
import
org.dromara.order.constant.WechatTradeState
;
import
org.dromara.order.domain.bo.OrderBo
;
import
org.dromara.order.domain.bo.OrderRefundBo
;
import
org.dromara.order.domain.bo.OrderTradeBo
;
import
org.dromara.order.domain.vo.OrderRefundVo
;
import
org.dromara.order.domain.vo.OrderTradeVo
;
import
org.dromara.order.domain.vo.OrderVo
;
import
org.dromara.order.service.IOrderPayService
;
import
org.dromara.order.service.IOrderRefundService
;
import
org.dromara.order.service.IOrderService
;
import
org.dromara.order.service.IOrderTradeService
;
import
org.dromara.server.api.RemoteYsOrderService
;
...
...
@@ -31,6 +35,8 @@ import java.util.List;
import
java.util.Objects
;
import
java.util.Optional
;
import
static
org
.
dromara
.
common
.
pay
.
util
.
CurrencyUtils
.
convertScoreToYuan
;
/**
* @author hzh
* @date 2024-12-09
...
...
@@ -40,6 +46,7 @@ import java.util.Optional;
@RequiredArgsConstructor
public
class
WeChatOrderPayServiceImpl
implements
IOrderPayService
{
private
final
IOrderRefundService
orderRefundService
;
private
final
IOrderTradeService
orderTradeService
;
private
final
IOrderService
orderService
;
@DubboReference
...
...
@@ -102,7 +109,32 @@ public class WeChatOrderPayServiceImpl implements IOrderPayService {
* @param model 退款回调参数
*/
private
void
dealRefundOrder
(
JsapiRefundNotifyModel
model
)
{
//TODO 处理退款订单
OrderRefundVo
or
=
orderRefundService
.
queryList
(
new
OrderRefundBo
()
.
setOrderRefundNo
(
model
.
getOut_refund_no
()))
.
stream
().
findFirst
().
orElse
(
null
);
if
(
or
==
null
)
{
throw
new
RuntimeException
(
"退款订单不存在"
);
}
if
(
StringUtils
.
equals
(
or
.
getStatus
(),
RefundStatus
.
SUCCESS
.
name
()))
{
throw
new
RuntimeException
(
"退款订单已处理"
);
}
if
(
StringUtils
.
equals
(
model
.
getRefund_status
(),
RefundStatus
.
SUCCESS
.
name
()))
{
or
.
setSuccessTime
(
model
.
getSuccess_time
());
or
.
setStatus
(
model
.
getRefund_status
());
or
.
setUserReceivedAccount
(
model
.
getUser_received_account
());
or
.
setRefundId
(
model
.
getRefund_id
());
JsapiRefundNotifyModel
.
Amount
amount
=
model
.
getAmount
();
if
(
Objects
.
nonNull
(
amount
))
{
or
.
setTotal
(
convertScoreToYuan
(
amount
.
getTotal
()));
or
.
setAmount
(
convertScoreToYuan
(
amount
.
getRefund
()));
or
.
setPayerTotal
(
convertScoreToYuan
(
amount
.
getPayer_total
()));
or
.
setPayerRefund
(
convertScoreToYuan
(
amount
.
getPayer_refund
()));
}
}
else
{
or
.
setRefundId
(
model
.
getRefund_id
());
or
.
setStatus
(
model
.
getRefund_status
());
}
orderRefundService
.
updateByBo
(
BeanUtil
.
copyProperties
(
or
,
OrderRefundBo
.
class
));
}
@GlobalTransactional
(
rollbackFor
=
Exception
.
class
)
...
...
ruoyi-modules/ruoyi-server/src/main/java/org/dromara/server/domain/vo/OrderQueryVo.java
浏览文件 @
ca538fda
...
...
@@ -9,7 +9,6 @@ import java.util.List;
/**
* @author hzh
* @date 2024-12-09
* @desc TODO
**/
@Data
public
class
OrderQueryVo
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论