Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
travel-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cloud
travel-cloud
Commits
a2b2f4de
提交
a2b2f4de
authored
12月 09, 2024
作者:
hzh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
支付服务费功能实现
上级
596fe6d7
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
144 行增加
和
7 行删除
+144
-7
YsServiceFee.java
...rc/main/java/org/dromara/order/constant/YsServiceFee.java
+53
-0
RemoteOrderServiceImpl.java
.../java/org/dromara/order/dubbo/RemoteOrderServiceImpl.java
+7
-4
IOrderServiceFeeStrategy.java
...a/org/dromara/order/service/IOrderServiceFeeStrategy.java
+46
-0
IPayStrategy.java
...src/main/java/org/dromara/order/service/IPayStrategy.java
+1
-1
JsapiPayStrategy.java
...java/org/dromara/order/service/impl/JsapiPayStrategy.java
+2
-2
YsOrderServiceFeeStrategy.java
...dromara/order/service/impl/YsOrderServiceFeeStrategy.java
+35
-0
没有找到文件。
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/constant/YsServiceFee.java
0 → 100644
浏览文件 @
a2b2f4de
package
org
.
dromara
.
order
.
constant
;
import
com.alibaba.excel.support.cglib.core.internal.Function
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
org.dromara.order.api.enums.OrderType
;
import
java.math.BigDecimal
;
/**
* 云上服务费
*
* @author wenhe
*/
@Getter
@AllArgsConstructor
public
enum
YsServiceFee
{
//(1) 中国境内机票(不含港澳台):30 元/票号(改期不收服务费,退票服务费不退)
//(2)中国境外机票(含港澳台):含税总价加收2%(改期不收服务费,退票服务费不退):
//(3)酒店:含税总价加收4%(取消服务费不退);
//(4)用车:含税总价加收4%(取消服务费不退)。
AIRPORT
(
OrderType
.
AIRPORT
.
getType
(),
amount
->
new
BigDecimal
(
"30"
)),
TRAIN
(
OrderType
.
TRAIN
.
getType
(),
amount
->
new
BigDecimal
(
"0"
)),
HOTEL
(
OrderType
.
HOTEL
.
getType
(),
amount
->
amount
.
multiply
(
new
BigDecimal
(
"0.04"
))),
CAR
(
OrderType
.
CAR
.
getType
(),
amount
->
amount
.
multiply
(
new
BigDecimal
(
"0.04"
)));
/**
* 订单类型
*/
private
final
String
orderType
;
/**
* 服务费
*/
private
final
Function
<
BigDecimal
,
BigDecimal
>
serviceFeeFun
;
/**
* 获取服务费
*
* @param orderType 订单类型
* @return 服务费
*/
public
static
YsServiceFee
getFeeByOrderType
(
String
orderType
)
{
for
(
YsServiceFee
fee
:
YsServiceFee
.
values
())
{
if
(
fee
.
getOrderType
().
equals
(
orderType
))
{
return
fee
;
}
}
throw
new
RuntimeException
(
"未找到对应的服务费"
);
}
}
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/dubbo/RemoteOrderServiceImpl.java
浏览文件 @
a2b2f4de
...
...
@@ -21,10 +21,7 @@ import org.dromara.order.domain.bo.OrderTradeBo;
import
org.dromara.order.domain.vo.OrderFeeVo
;
import
org.dromara.order.domain.vo.OrderTradeVo
;
import
org.dromara.order.domain.vo.OrderVo
;
import
org.dromara.order.service.IOrderFeeService
;
import
org.dromara.order.service.IOrderService
;
import
org.dromara.order.service.IOrderTradeService
;
import
org.dromara.order.service.util.IPayStrategy
;
import
org.dromara.order.service.*
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
...
...
@@ -83,8 +80,14 @@ public class RemoteOrderServiceImpl implements RemoteOrderService {
List
<
OrderFeeVo
>
feeList
=
Optional
.
ofNullable
(
orderFeeService
.
queryList
(
new
OrderFeeBo
()
.
setOrderNo
(
order
.
getOrderNo
())))
.
orElseGet
(()
->
{
//创建订单费用信息
List
<
RemoteSaveOrder
.
Fee
>
list
=
remoteOrder
.
getFeeList
();
//获取服务费信息
RemoteSaveOrder
.
Fee
serviceFee
=
IOrderServiceFeeStrategy
.
calcServiceFee
(
remoteOrder
.
getSource
(),
remoteOrder
.
getOrderType
(),
list
);
list
.
add
(
serviceFee
);
List
<
OrderFeeBo
>
ofList
=
list
.
stream
().
map
(
fee
->
{
return
new
OrderFeeBo
()
.
setOrderNo
(
order
.
getOrderNo
())
...
...
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/IOrderServiceFeeStrategy.java
0 → 100644
浏览文件 @
a2b2f4de
package
org
.
dromara
.
order
.
service
;
import
org.dromara.common.core.exception.ServiceException
;
import
org.dromara.common.core.utils.SpringUtils
;
import
org.dromara.order.api.domain.RemoteSaveOrder
;
import
org.dromara.order.api.enums.OrderType
;
import
org.dromara.order.api.enums.Source
;
import
java.util.List
;
/**
* 账单策略
* @author wenhe
*/
public
interface
IOrderServiceFeeStrategy
{
String
BASE_NAME
=
"OrderServiceFeeStrategy"
;
/**
* 获取服务费信息
*
* @param source 订单来源
* @param orderType 订单类型
* @param feeList 订单费用集合
* @return 费用信息
*/
static
RemoteSaveOrder
.
Fee
calcServiceFee
(
Source
source
,
OrderType
orderType
,
List
<
RemoteSaveOrder
.
Fee
>
feeList
)
{
// 授权类型和客户端id
String
beanName
=
source
.
getSource
()
+
BASE_NAME
;
if
(!
SpringUtils
.
containsBean
(
beanName
))
{
throw
new
ServiceException
(
"服务类型不正确!"
);
}
IOrderServiceFeeStrategy
instance
=
SpringUtils
.
getBean
(
beanName
);
return
instance
.
calcServiceFee
(
orderType
,
feeList
);
}
/**
* 获取服务费信息
*
* @param orderType 订单类型
* @param feeList 费用集合
* @return 费用信息
*/
RemoteSaveOrder
.
Fee
calcServiceFee
(
OrderType
orderType
,
List
<
RemoteSaveOrder
.
Fee
>
feeList
);
}
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/
util/
IPayStrategy.java
→
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/IPayStrategy.java
浏览文件 @
a2b2f4de
package
org
.
dromara
.
order
.
service
.
util
;
package
org
.
dromara
.
order
.
service
;
import
org.dromara.common.core.exception.ServiceException
;
import
org.dromara.common.core.utils.SpringUtils
;
...
...
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/
util/
impl/JsapiPayStrategy.java
→
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/JsapiPayStrategy.java
浏览文件 @
a2b2f4de
package
org
.
dromara
.
order
.
service
.
util
.
impl
;
package
org
.
dromara
.
order
.
service
.
impl
;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DateUtil
;
...
...
@@ -23,7 +23,7 @@ import org.dromara.common.json.utils.JsonUtils;
import
org.dromara.order.config.WechatPayConfiguration
;
import
org.dromara.order.domain.bo.OrderTradeBo
;
import
org.dromara.order.domain.vo.OrderFeeVo
;
import
org.dromara.order.service.
util.
IPayStrategy
;
import
org.dromara.order.service.IPayStrategy
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
...
...
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/YsOrderServiceFeeStrategy.java
0 → 100644
浏览文件 @
a2b2f4de
package
org
.
dromara
.
order
.
service
.
impl
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.dromara.order.api.domain.RemoteSaveOrder
;
import
org.dromara.order.api.enums.FeeType
;
import
org.dromara.order.api.enums.OrderType
;
import
org.dromara.order.constant.YsServiceFee
;
import
org.dromara.order.service.IOrderServiceFeeStrategy
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* 云上服务费收取策略
*
* @author hzh
* @date 2024-12-09
**/
@Slf4j
@Service
(
"YS"
+
IOrderServiceFeeStrategy
.
BASE_NAME
)
@RequiredArgsConstructor
public
class
YsOrderServiceFeeStrategy
implements
IOrderServiceFeeStrategy
{
@Override
public
RemoteSaveOrder
.
Fee
calcServiceFee
(
OrderType
orderType
,
List
<
RemoteSaveOrder
.
Fee
>
feeList
)
{
YsServiceFee
fee
=
YsServiceFee
.
getFeeByOrderType
(
orderType
.
getType
());
BigDecimal
amount
=
feeList
.
stream
().
map
(
RemoteSaveOrder
.
Fee
::
getFeeAmount
).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
return
new
RemoteSaveOrder
.
Fee
()
.
setFeeDesc
(
"云上服务费"
)
.
setFeeAmount
(
fee
.
getServiceFeeFun
().
apply
(
amount
))
.
setFeeType
(
FeeType
.
SERVICE_FEE
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论