From c7f4faf79f8fc92a43b50e78421cde5d3ce70c16 Mon Sep 17 00:00:00 2001 From: xxm1995 Date: Sat, 23 Mar 2024 23:16:52 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=94=AF=E4=BB=98=E9=99=90=E9=A2=9D?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _doc/Task.md | 9 +++------ .../gateway/controller/TestController.java | 10 ---------- .../daxpay/service/code/AliPayCode.java | 3 +++ .../service/common/context/PlatformLocal.java | 2 +- .../channel/alipay/entity/AliPayConfig.java | 11 +++++++++++ .../channel/alipay/service/AliPayService.java | 4 ++++ .../alipay/service/AliPayTransferService.java | 15 +++++++++------ .../cash/service/CashPayConfigService.java | 13 +++++++++++++ .../channel/union/entity/UnionPayConfig.java | 3 +++ .../channel/union/service/UnionPayService.java | 4 ++++ .../voucher/service/VoucherConfigService.java | 17 +++++++++++++++-- .../channel/wechat/entity/WeChatPayConfig.java | 4 ++++ .../wechat/service/WeChatPayService.java | 4 ++++ .../common/service/PaymentAssistService.java | 2 +- .../payment/pay/strategy/CashPayStrategy.java | 10 ++++++++++ .../pay/strategy/VoucherPayStrategy.java | 12 +++++++++++- .../payment/pay/strategy/WalletPayStrategy.java | 2 +- .../system/config/entity/PlatformConfig.java | 2 +- .../dto/channel/alipay/AliPayConfigDto.java | 7 +++++++ .../dto/channel/union/UnionPayConfigDto.java | 2 ++ .../dto/channel/wechat/WeChatPayConfigDto.java | 3 +++ .../param/channel/alipay/AliPayConfigParam.java | 6 ++++++ .../channel/union/UnionPayConfigParam.java | 3 +++ .../channel/wechat/WeChatPayConfigParam.java | 3 +++ 24 files changed, 122 insertions(+), 29 deletions(-) diff --git a/_doc/Task.md b/_doc/Task.md index e2aaf271..9f6dcf04 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -1,8 +1,5 @@ 2.0.4: -- [ ] 支付流程也改为先落库后支付情况, 避免极端情况导致掉单 - - [ ] 支付改造 - - [ ] 关闭订单改造 - - [ ] 支付补偿改造 +- [x] 支付流程也改为先落库后支付情况, 避免极端情况导致掉单 - [x] 首页驾驶舱功能: 各通道收入和支付情况 - [x] 第一排: (数字格式)显示今日收入、支出金额,支付总订单数量、退款总订单数, 时间分支分为: 今日金额/昨日金额/七天内金额 - [x] 第二排: (饼图)显示各通道各支付方式数量和占比, 时间分为: 今日金额/昨日金额/七天内金额 @@ -15,17 +12,17 @@ - [ ] 云闪付 - [ ] 增加账户余额查询功能 - [ ] 支付宝 - - [ ] 微信 - [ ] 云闪付 - [ ] 云闪付支持对账功能 - [x] 结算台DEMO增加云闪付示例 - [ ] 增加支付限额 - - [ ] 各通道支持单独的限额 + - [x] 各通道(异步支付)支持单独的限额 - [ ] 整个订单支持整体的限额 2.0.x 版本内容 - [ ] 微信新增V3版本接口 - [ ] 付款码支付自动路由到V2接口 - [ ] 统一关闭接口增加使用撤销关闭订单 +- [ ] 支持分账 - [ ] 增加各类日志记录,例如钱包的各项操作 - [ ] 增加撤销功能,用于处理线下支付订单的情况 - [ ] 数据库表进行规则, 字段设置长度, 增加索引 diff --git a/daxpay-single/daxpay-single-gateway/src/main/java/cn/bootx/platform/daxpay/gateway/controller/TestController.java b/daxpay-single/daxpay-single-gateway/src/main/java/cn/bootx/platform/daxpay/gateway/controller/TestController.java index e0d72911..579e3a5b 100644 --- a/daxpay-single/daxpay-single-gateway/src/main/java/cn/bootx/platform/daxpay/gateway/controller/TestController.java +++ b/daxpay-single/daxpay-single-gateway/src/main/java/cn/bootx/platform/daxpay/gateway/controller/TestController.java @@ -4,7 +4,6 @@ import cn.bootx.platform.common.core.annotation.IgnoreAuth; import cn.bootx.platform.common.core.exception.BizException; import cn.bootx.platform.common.core.rest.Res; import cn.bootx.platform.common.core.rest.ResResult; -import cn.bootx.platform.daxpay.service.core.channel.alipay.service.AliPayTransferService; import cn.hutool.core.thread.ThreadUtil; import com.baomidou.lock.LockInfo; import com.baomidou.lock.LockTemplate; @@ -28,7 +27,6 @@ import java.util.Objects; @RequiredArgsConstructor public class TestController { private final LockTemplate lockTemplate; - private final AliPayTransferService aliPayTransferService; @Operation(summary = "锁测试1") @GetMapping("/lock1") @@ -59,13 +57,5 @@ public class TestController { return "ok"; } - @IgnoreAuth - @Operation(summary = "支付宝回调测试") - @GetMapping("/queryAmount") - public String alipay(){ - - aliPayTransferService.queryAccountAmount(); - return "ok"; - } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/code/AliPayCode.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/code/AliPayCode.java index 865791c4..3e537c0a 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/code/AliPayCode.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/code/AliPayCode.java @@ -25,6 +25,9 @@ public interface AliPayCode { /** APP支付必填 APP支付产品 */ String QUICK_MSECURITY_PAY = "QUICK_MSECURITY_PAY"; + /** 询余额账户类型 */ + String QUERY_ACCOUNT_TYPE = "ACCTRANS_ACCOUNT"; + /** 付款码支付 */ String BAR_CODE = "bar_code"; diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/context/PlatformLocal.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/context/PlatformLocal.java index 36dec826..a66cf9c3 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/context/PlatformLocal.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/context/PlatformLocal.java @@ -35,5 +35,5 @@ public class PlatformLocal { private Integer orderTimeout; /** 支付限额 */ - private Integer limitAmount; + private Integer singleLimit; } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/entity/AliPayConfig.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/entity/AliPayConfig.java index 137312b8..6f5b13dd 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/entity/AliPayConfig.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/entity/AliPayConfig.java @@ -41,6 +41,10 @@ public class AliPayConfig extends MpBaseEntity implements EntityBaseFunction alipayConfig.getSingleLimit()){ + throw new PayFailureException("支付宝支付金额超过限额"); + } } /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayTransferService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayTransferService.java index d8442d3e..17e9b3fe 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayTransferService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayTransferService.java @@ -2,13 +2,17 @@ package cn.bootx.platform.daxpay.service.core.channel.alipay.service; import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig; import com.alipay.api.domain.AlipayFundAccountQueryModel; +import com.alipay.api.domain.AlipayFundTransToaccountTransferModel; import com.alipay.api.response.AlipayFundAccountQueryResponse; +import com.alipay.api.response.AlipayFundTransToaccountTransferResponse; import com.ijpay.alipay.AliPayApi; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import static cn.bootx.platform.daxpay.service.code.AliPayCode.QUERY_ACCOUNT_TYPE; + @Slf4j @Service @RequiredArgsConstructor @@ -20,12 +24,10 @@ public class AliPayTransferService { * 余额查询接口 */ @SneakyThrows - public void queryAccountAmount() { - AliPayConfig config = payConfigService.getAndCheckConfig(); - payConfigService.initConfig(config); + public void queryAccountAmount(AliPayConfig config) { AlipayFundAccountQueryModel model = new AlipayFundAccountQueryModel(); - model.setAccountType("ACCTRANS_ACCOUNT"); - model.setAlipayUserId("2088441532699265"); + model.setAccountType(QUERY_ACCOUNT_TYPE); + model.setAlipayUserId(config.getAlipayUserId()); AlipayFundAccountQueryResponse response = AliPayApi.accountQueryToResponse(model, null); System.out.println(response); } @@ -35,6 +37,7 @@ public class AliPayTransferService { */ @SneakyThrows public void transfer() { - + AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel(); + AlipayFundTransToaccountTransferResponse response = AliPayApi.transferToResponse(model); } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/cash/service/CashPayConfigService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/cash/service/CashPayConfigService.java index eeaf7371..1e3639ac 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/cash/service/CashPayConfigService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/cash/service/CashPayConfigService.java @@ -3,6 +3,7 @@ package cn.bootx.platform.daxpay.service.core.channel.cash.service; import cn.bootx.platform.common.core.exception.DataNotExistException; import cn.bootx.platform.common.core.rest.dto.LabelValue; import cn.bootx.platform.daxpay.code.PayChannelEnum; +import cn.bootx.platform.daxpay.exception.pay.PayFailureException; import cn.bootx.platform.daxpay.service.code.WalletPayWay; import cn.bootx.platform.daxpay.service.core.channel.cash.dao.CashConfigManager; import cn.bootx.platform.daxpay.service.core.channel.cash.entity.CashConfig; @@ -38,6 +39,18 @@ public class CashPayConfigService { return cashConfigManager.findById(ID).orElseThrow(() -> new DataNotExistException("现金配置不存在")); } + /** + * 获取并检查钱包配置 + */ + public CashConfig getAndCheckConfig() { + CashConfig config = this.getConfig(); + if (!config.getEnable()){ + throw new PayFailureException("钱包支付未启用"); + } + return config; + } + + /** * 更新 */ diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/entity/UnionPayConfig.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/entity/UnionPayConfig.java index 44c94e90..6d1e7a1d 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/entity/UnionPayConfig.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/entity/UnionPayConfig.java @@ -41,6 +41,9 @@ public class UnionPayConfig extends MpBaseEntity implements EntityBaseFunction unionPayConfig.getSingleLimit()) { + throw new PayFailureException("云闪付支付金额超限"); + } } /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/voucher/service/VoucherConfigService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/voucher/service/VoucherConfigService.java index 7b065d41..d57a78ef 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/voucher/service/VoucherConfigService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/voucher/service/VoucherConfigService.java @@ -3,6 +3,7 @@ package cn.bootx.platform.daxpay.service.core.channel.voucher.service; import cn.bootx.platform.common.core.exception.DataNotExistException; import cn.bootx.platform.common.core.rest.dto.LabelValue; import cn.bootx.platform.daxpay.code.PayChannelEnum; +import cn.bootx.platform.daxpay.exception.pay.PayFailureException; import cn.bootx.platform.daxpay.service.code.VoucherPayWay; import cn.bootx.platform.daxpay.service.core.channel.voucher.dao.VoucherConfigManager; import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherConfig; @@ -33,10 +34,22 @@ public class VoucherConfigService { private final PayChannelConfigService payChannelConfigService; /** - * 获取钱包配置 + * 获取储值卡配置 */ public VoucherConfig getConfig(){ - return manager.findById(ID).orElseThrow(() -> new DataNotExistException("钱包配置不存在")); + return manager.findById(ID).orElseThrow(() -> new DataNotExistException("储值卡配置不存在")); + } + + + /** + * 获取并检查储值卡配置 + */ + public VoucherConfig getAndCheckConfig() { + VoucherConfig config = this.getConfig(); + if (!config.getEnable()){ + throw new PayFailureException("储值卡支付未启用"); + } + return config; } /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/entity/WeChatPayConfig.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/entity/WeChatPayConfig.java index 23a2429e..a8f11b4b 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/entity/WeChatPayConfig.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/entity/WeChatPayConfig.java @@ -46,6 +46,10 @@ public class WeChatPayConfig extends MpBaseEntity implements EntityBaseFunction< @DbColumn(comment = "是否启用") private Boolean enable; + /** 支付限额 */ + @DbColumn(comment = "支付限额") + private Integer singleLimit; + /** * 服务器异步通知页面路径, 需要填写本网关服务的地址, 不可以直接填写业务系统的地址 * 1. 需http://或者https://格式的完整路径, diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java index 0875cd51..fe6a773a 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java @@ -70,6 +70,10 @@ public class WeChatPayService { if (!payWays.contains(payWayEnum.getCode())) { throw new PayFailureException("该微信支付方式不可用"); } + // 支付金额是否超限 + if (payChannelParam.getAmount() > weChatPayConfig.getSingleLimit()) { + throw new PayFailureException("微信支付金额超限"); + } } /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/common/service/PaymentAssistService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/common/service/PaymentAssistService.java index f31a90fd..b870ac9c 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/common/service/PaymentAssistService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/common/service/PaymentAssistService.java @@ -41,7 +41,7 @@ public class PaymentAssistService { platform.setSignSecret(config.getSignSecret()); platform.setNotifyUrl(config.getNotifyUrl()); platform.setOrderTimeout(config.getOrderTimeout()); - platform.setLimitAmount(config.getLimitAmount()); + platform.setSingleLimit(config.getSingleLimit()); platform.setWebsiteUrl(config.getWebsiteUrl()); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/CashPayStrategy.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/CashPayStrategy.java index fa18a894..0301631e 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/CashPayStrategy.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/CashPayStrategy.java @@ -2,7 +2,10 @@ package cn.bootx.platform.daxpay.service.core.payment.pay.strategy; import cn.bootx.platform.daxpay.code.PayChannelEnum; import cn.bootx.platform.daxpay.exception.pay.PayAmountAbnormalException; +import cn.bootx.platform.daxpay.exception.pay.PayFailureException; import cn.bootx.platform.daxpay.param.pay.PayChannelParam; +import cn.bootx.platform.daxpay.service.core.channel.cash.entity.CashConfig; +import cn.bootx.platform.daxpay.service.core.channel.cash.service.CashPayConfigService; import cn.bootx.platform.daxpay.service.core.channel.cash.service.CashRecordService; import cn.bootx.platform.daxpay.service.func.AbsPayStrategy; import lombok.RequiredArgsConstructor; @@ -26,6 +29,8 @@ public class CashPayStrategy extends AbsPayStrategy { private final CashRecordService cashRecordService; + private final CashPayConfigService cashPayConfigService; + /** * 现金支付 */ @@ -39,11 +44,16 @@ public class CashPayStrategy extends AbsPayStrategy { */ @Override public void doBeforePayHandler() { + CashConfig config = cashPayConfigService.getAndCheckConfig(); // 检查金额 PayChannelParam payChannelParam = this.getPayChannelParam(); if (payChannelParam.getAmount() <= 0) { throw new PayAmountAbnormalException(); } + // 支付金额是否超限 + if (payChannelParam.getAmount() > config.getSingleLimit()) { + throw new PayFailureException("现金支付金额超过限制"); + } } /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/VoucherPayStrategy.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/VoucherPayStrategy.java index 18dd4a09..4c41f909 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/VoucherPayStrategy.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/VoucherPayStrategy.java @@ -4,6 +4,8 @@ import cn.bootx.platform.daxpay.code.PayChannelEnum; import cn.bootx.platform.daxpay.exception.pay.PayFailureException; import cn.bootx.platform.daxpay.param.channel.VoucherPayParam; import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.Voucher; +import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherConfig; +import cn.bootx.platform.daxpay.service.core.channel.voucher.service.VoucherConfigService; import cn.bootx.platform.daxpay.service.core.channel.voucher.service.VoucherPayService; import cn.bootx.platform.daxpay.service.core.channel.voucher.service.VoucherQueryService; import cn.bootx.platform.daxpay.service.core.channel.voucher.service.VoucherRecordService; @@ -38,6 +40,8 @@ public class VoucherPayStrategy extends AbsPayStrategy { private final VoucherRecordService voucherRecordService; + private final VoucherConfigService voucherConfigService; + private Voucher voucher; @Override @@ -63,8 +67,14 @@ public class VoucherPayStrategy extends AbsPayStrategy { catch (JSONException e) { throw new PayFailureException("储值卡支付参数错误"); } - this.voucher = voucherQueryService.getAndCheckVoucher(voucherPayParam); + VoucherConfig config = voucherConfigService.getAndCheckConfig(); + // 支付金额是否超限 + if (this.getPayChannelParam().getAmount() > config.getSingleLimit()) { + throw new PayFailureException("现金支付金额超过限制"); + } + // 金额是否满足 + this.voucher = voucherQueryService.getAndCheckVoucher(voucherPayParam); if (this.getPayChannelParam().getAmount() > this.voucher.getBalance()) { throw new PayFailureException("储值卡余额不足"); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/WalletPayStrategy.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/WalletPayStrategy.java index 8b6dfe89..93fc3d0b 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/WalletPayStrategy.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/pay/strategy/WalletPayStrategy.java @@ -82,7 +82,7 @@ public class WalletPayStrategy extends AbsPayStrategy { } // 判断是否超过限额 if (getPayChannelParam().getAmount() > this.walletConfig.getSingleLimit()){ - throw new PayFailureException("钱包单次支付金额超过限额"); + throw new PayFailureException("钱包支付金额超过限额"); } // 判断余额 diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/system/config/entity/PlatformConfig.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/system/config/entity/PlatformConfig.java index b4aa8779..ffc0f819 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/system/config/entity/PlatformConfig.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/system/config/entity/PlatformConfig.java @@ -43,7 +43,7 @@ public class PlatformConfig extends MpBaseEntity implements EntityBaseFunction