Commit d3f03540f8ea6512a8e75562e11f0edc993af189
Merge remote-tracking branch 'yudao/feature/mall_product' into feature/mall_product
Showing
32 changed files
with
180 additions
and
158 deletions
sql/mysql/pay_wallet.sql
| 1 | -- ---------------------------- | 1 | -- ---------------------------- |
| 2 | --- 会员钱包表 | ||
| 3 | --- ---------------------------- | ||
| 4 | -DROP TABLE IF EXISTS `pay_wallet`; | ||
| 5 | -CREATE TABLE `pay_wallet` | ||
| 6 | -( | ||
| 7 | - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', | ||
| 8 | - `user_id` bigint NOT NULL COMMENT '用户编号', | ||
| 9 | - `user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型', | ||
| 10 | - `balance` int NOT NULL DEFAULT 0 COMMENT '余额,单位分', | ||
| 11 | - `total_expense` int NOT NULL DEFAULT 0 COMMENT '累计支出,单位分', | ||
| 12 | - `total_recharge` int NOT NULL DEFAULT 0 COMMENT '累计充值,单位分', | ||
| 13 | - `freeze_price` int NOT NULL DEFAULT 0 COMMENT '冻结金额,单位分', | ||
| 14 | - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', | ||
| 15 | - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 16 | - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', | ||
| 17 | - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | ||
| 18 | - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', | ||
| 19 | - `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', | ||
| 20 | - PRIMARY KEY (`id`) USING BTREE | ||
| 21 | -) ENGINE=InnoDB COMMENT='会员钱包表'; | ||
| 22 | - | ||
| 23 | --- ---------------------------- | ||
| 24 | --- 会员钱包流水表 | ||
| 25 | --- ---------------------------- | ||
| 26 | -DROP TABLE IF EXISTS `pay_wallet_transaction`; | ||
| 27 | -CREATE TABLE `pay_wallet_transaction` | ||
| 28 | -( | ||
| 29 | - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', | ||
| 30 | - `wallet_id` bigint NOT NULL COMMENT '会员钱包 id', | ||
| 31 | - `biz_type` tinyint NOT NULL COMMENT '关联类型', | ||
| 32 | - `biz_id` varchar(64) NOT NULL COMMENT '关联业务编号', | ||
| 33 | - `no` varchar(64) NOT NULL COMMENT '流水号', | ||
| 34 | - `title` varchar(128) NOT NULL COMMENT '流水标题', | ||
| 35 | - `price` int NOT NULL COMMENT '交易金额, 单位分', | ||
| 36 | - `balance` int NOT NULL COMMENT '余额, 单位分', | ||
| 37 | - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', | ||
| 38 | - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 39 | - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', | ||
| 40 | - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | ||
| 41 | - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', | ||
| 42 | - `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', | ||
| 43 | - PRIMARY KEY (`id`) USING BTREE | ||
| 44 | -) ENGINE=InnoDB COMMENT='会员钱包流水表'; | ||
| 45 | - | ||
| 46 | --- ---------------------------- | ||
| 47 | --- 会员钱包充值 | ||
| 48 | --- ---------------------------- | ||
| 49 | -DROP TABLE IF EXISTS `pay_wallet_recharge`; | ||
| 50 | -CREATE TABLE `pay_wallet_recharge` | ||
| 51 | -( | ||
| 52 | - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', | ||
| 53 | - `wallet_id` bigint NOT NULL COMMENT '会员钱包 id', | ||
| 54 | - `total_price` int NOT NULL COMMENT '用户实际到账余额,例如充 100 送 20,则该值是 120', | ||
| 55 | - `pay_price` int NOT NULL COMMENT '实际支付金额', | ||
| 56 | - `bonus_price` int NOT NULL COMMENT '钱包赠送金额', | ||
| 57 | - `pay_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已支付:[0:未支付 1:已经支付过]', | ||
| 58 | - `pay_order_id` bigint NULL COMMENT '支付订单编号', | ||
| 59 | - `pay_channel_code` varchar(16) NULL COMMENT '支付成功的支付渠道', | ||
| 60 | - `pay_time` datetime NULL COMMENT '订单支付时间', | ||
| 61 | - `pay_refund_id` bigint NULL COMMENT '支付退款单编号', | ||
| 62 | - `refund_total_price` int NOT NULL DEFAULT 0 COMMENT '退款金额,包含赠送金额', | ||
| 63 | - `refund_pay_price` int NOT NULL DEFAULT 0 COMMENT '退款支付金额', | ||
| 64 | - `refund_bonus_price` int NOT NULL DEFAULT 0 COMMENT '退款钱包赠送金额', | ||
| 65 | - `refund_time` datetime NULL COMMENT '退款时间', | ||
| 66 | - `refund_status` int NOT NULL DEFAULT 0 COMMENT '退款状态', | ||
| 67 | - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', | ||
| 68 | - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 69 | - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', | ||
| 70 | - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | ||
| 71 | - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', | ||
| 72 | - `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', | ||
| 73 | - PRIMARY KEY (`id`) USING BTREE | ||
| 74 | -) ENGINE=InnoDB COMMENT='会员钱包充值'; | ||
| 75 | - | ||
| 76 | --- ---------------------------- | ||
| 77 | -- 转账单表 | 2 | -- 转账单表 |
| 78 | -- ---------------------------- | 3 | -- ---------------------------- |
| 79 | DROP TABLE IF EXISTS `pay_transfer`; | 4 | DROP TABLE IF EXISTS `pay_transfer`; |
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiAccessLog.java
| @@ -5,6 +5,7 @@ import lombok.Data; | @@ -5,6 +5,7 @@ import lombok.Data; | ||
| 5 | import javax.validation.constraints.NotNull; | 5 | import javax.validation.constraints.NotNull; |
| 6 | import java.time.LocalDateTime; | 6 | import java.time.LocalDateTime; |
| 7 | 7 | ||
| 8 | +// TODO @小吉祥:搞个 job,清理 14 天外的访问日志; | ||
| 8 | /** | 9 | /** |
| 9 | * API 访问日志 | 10 | * API 访问日志 |
| 10 | * | 11 | * |
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiErrorLog.java
| @@ -5,6 +5,7 @@ import lombok.Data; | @@ -5,6 +5,7 @@ import lombok.Data; | ||
| 5 | import javax.validation.constraints.NotNull; | 5 | import javax.validation.constraints.NotNull; |
| 6 | import java.time.LocalDateTime; | 6 | import java.time.LocalDateTime; |
| 7 | 7 | ||
| 8 | +// TODO @小吉祥:搞个 job,清理 14 天外的异常日志; | ||
| 8 | /** | 9 | /** |
| 9 | * API 错误日志 | 10 | * API 错误日志 |
| 10 | * | 11 | * |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImpl.java
| @@ -70,4 +70,5 @@ public class JobLogServiceImpl implements JobLogService { | @@ -70,4 +70,5 @@ public class JobLogServiceImpl implements JobLogService { | ||
| 70 | return jobLogMapper.selectList(exportReqVO); | 70 | return jobLogMapper.selectList(exportReqVO); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | + // TODO @小吉祥:每天 0 点的时候,清理超过 14 天的日志; | ||
| 73 | } | 74 | } |
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/member/package-info.java renamed to yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/member/package-info.java
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/product/ProductStatisticsController.java renamed to yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/product/ProductStatisticsController.java
| 1 | -package cn.iocoder.yudao.module.statistics.controller.product; | 1 | +package cn.iocoder.yudao.module.statistics.controller.admin.product; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/trade/TradeStatisticsController.java
| @@ -32,6 +32,7 @@ public class TradeStatisticsController { | @@ -32,6 +32,7 @@ public class TradeStatisticsController { | ||
| 32 | @Resource | 32 | @Resource |
| 33 | private TradeStatisticsService tradeStatisticsService; | 33 | private TradeStatisticsService tradeStatisticsService; |
| 34 | 34 | ||
| 35 | + // TODO @疯狂:要不这个就是 /trend/summary 的特例,前端自己查询两次? | ||
| 35 | @GetMapping("/summary") | 36 | @GetMapping("/summary") |
| 36 | @Operation(summary = "获得交易统计") | 37 | @Operation(summary = "获得交易统计") |
| 37 | @PreAuthorize("@ss.hasPermission('statistics:trade:query')") | 38 | @PreAuthorize("@ss.hasPermission('statistics:trade:query')") |
| @@ -39,6 +40,7 @@ public class TradeStatisticsController { | @@ -39,6 +40,7 @@ public class TradeStatisticsController { | ||
| 39 | return success(tradeStatisticsService.getTradeSummaryComparison()); | 40 | return success(tradeStatisticsService.getTradeSummaryComparison()); |
| 40 | } | 41 | } |
| 41 | 42 | ||
| 43 | + // TODO @疯狂:直接 comparison?主要 trend 和 comparison 二选一,一个是数据趋势,一个是数据对比哈; | ||
| 42 | @GetMapping("/trend/summary") | 44 | @GetMapping("/trend/summary") |
| 43 | @Operation(summary = "获得交易状况统计") | 45 | @Operation(summary = "获得交易状况统计") |
| 44 | @PreAuthorize("@ss.hasPermission('statistics:trade:query')") | 46 | @PreAuthorize("@ss.hasPermission('statistics:trade:query')") |
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/trade/vo/TradeTrendSummaryRespVO.java
| @@ -36,4 +36,5 @@ public class TradeTrendSummaryRespVO { | @@ -36,4 +36,5 @@ public class TradeTrendSummaryRespVO { | ||
| 36 | 36 | ||
| 37 | @Schema(description = "商品退款金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | 37 | @Schema(description = "商品退款金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 38 | private Integer orderRefundPrice; | 38 | private Integer orderRefundPrice; |
| 39 | + | ||
| 39 | } | 40 | } |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/core/package-info.java renamed to yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/app/package-info.java
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/package-info.java deleted
| 1 | -package cn.iocoder.yudao.module.statistics.controller; |
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/TradeStatisticsService.java
| @@ -26,7 +26,8 @@ public interface TradeStatisticsService { | @@ -26,7 +26,8 @@ public interface TradeStatisticsService { | ||
| 26 | * | 26 | * |
| 27 | * @return 统计数据对照 | 27 | * @return 统计数据对照 |
| 28 | */ | 28 | */ |
| 29 | - TradeStatisticsComparisonRespVO<TradeTrendSummaryRespVO> getTradeTrendSummaryComparison(LocalDateTime beginTime, LocalDateTime endTime); | 29 | + TradeStatisticsComparisonRespVO<TradeTrendSummaryRespVO> getTradeTrendSummaryComparison( |
| 30 | + LocalDateTime beginTime, LocalDateTime endTime); | ||
| 30 | 31 | ||
| 31 | /** | 32 | /** |
| 32 | * 获得交易状况明细 | 33 | * 获得交易状况明细 |
| @@ -34,4 +35,5 @@ public interface TradeStatisticsService { | @@ -34,4 +35,5 @@ public interface TradeStatisticsService { | ||
| 34 | * @return 统计数据列表 | 35 | * @return 统计数据列表 |
| 35 | */ | 36 | */ |
| 36 | List<TradeTrendSummaryRespVO> getTradeStatisticsList(LocalDateTime beginTime, LocalDateTime endTime); | 37 | List<TradeTrendSummaryRespVO> getTradeStatisticsList(LocalDateTime beginTime, LocalDateTime endTime); |
| 38 | + | ||
| 37 | } | 39 | } |
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/TradeStatisticsServiceImpl.java
| @@ -79,6 +79,7 @@ public class TradeStatisticsServiceImpl implements TradeStatisticsService { | @@ -79,6 +79,7 @@ public class TradeStatisticsServiceImpl implements TradeStatisticsService { | ||
| 79 | * @return 交易数据 | 79 | * @return 交易数据 |
| 80 | */ | 80 | */ |
| 81 | private TradeSummaryRespBO getTradeSummaryByMonths(int months) { | 81 | private TradeSummaryRespBO getTradeSummaryByMonths(int months) { |
| 82 | + // TODO @疯狂:可以在 LocalDateUtils 封装方法;获得月份的开始;以及结束两个方法;然后这里就可以直接调用了 | ||
| 82 | // 月份开始时间 | 83 | // 月份开始时间 |
| 83 | LocalDateTime beginOfMonth = LocalDateTime.now() | 84 | LocalDateTime beginOfMonth = LocalDateTime.now() |
| 84 | .plusMonths(months) | 85 | .plusMonths(months) |
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/bo/TradeSummaryRespBO.java
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/trade/TradeStatisticsMapper.xml
| 1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| 3 | <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeStatisticsMapper"> | 3 | <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeStatisticsMapper"> |
| 4 | + | ||
| 4 | <select id="selectByTimeBetween" | 5 | <select id="selectByTimeBetween" |
| 5 | resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryRespVO"> | 6 | resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryRespVO"> |
| 6 | SELECT | 7 | SELECT |
| @@ -35,4 +36,5 @@ | @@ -35,4 +36,5 @@ | ||
| 35 | AND deleted = FALSE | 36 | AND deleted = FALSE |
| 36 | GROUP BY date | 37 | GROUP BY date |
| 37 | </select> | 38 | </select> |
| 39 | + | ||
| 38 | </mapper> | 40 | </mapper> |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageUserMapper.java
| @@ -139,7 +139,7 @@ public interface BrokerageUserMapper extends BaseMapperX<BrokerageUserDO> { | @@ -139,7 +139,7 @@ public interface BrokerageUserMapper extends BaseMapperX<BrokerageUserDO> { | ||
| 139 | @Param("endTime") LocalDateTime endTime); | 139 | @Param("endTime") LocalDateTime endTime); |
| 140 | 140 | ||
| 141 | IPage<AppBrokerageUserChildSummaryRespVO> selectSummaryPageByUserId(Page<?> page, | 141 | IPage<AppBrokerageUserChildSummaryRespVO> selectSummaryPageByUserId(Page<?> page, |
| 142 | - @Param("ids") List<Long> ids, | 142 | + @Param("ids") List<Long> ids, // BrokerageUser 的 ids 数组 |
| 143 | @Param("bizType") Integer bizType, | 143 | @Param("bizType") Integer bizType, |
| 144 | @Param("status") Integer status, | 144 | @Param("status") Integer status, |
| 145 | @Param("bindUserIds") List<Long> bindUserIds, | 145 | @Param("bindUserIds") List<Long> bindUserIds, |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java
| @@ -230,12 +230,15 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -230,12 +230,15 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 230 | ? Collections.emptyList() | 230 | ? Collections.emptyList() |
| 231 | : convertList(memberUserApi.getUserListByNickname(pageReqVO.getNickname()), MemberUserRespDTO::getId); | 231 | : convertList(memberUserApi.getUserListByNickname(pageReqVO.getNickname()), MemberUserRespDTO::getId); |
| 232 | // 1.2 生成推广员编号列表 | 232 | // 1.2 生成推广员编号列表 |
| 233 | + // TODO @疯狂:是不是可以先 1.2 查询出来,然后查询对应的昵称,进行过滤?避免昵称过滤返回的 id 过多; | ||
| 233 | List<Long> bindUserIds = buildBindUserIdsByLevel(userId, pageReqVO.getLevel()); | 234 | List<Long> bindUserIds = buildBindUserIdsByLevel(userId, pageReqVO.getLevel()); |
| 235 | + | ||
| 234 | // 2. 分页查询 | 236 | // 2. 分页查询 |
| 235 | IPage<AppBrokerageUserChildSummaryRespVO> pageResult = brokerageUserMapper.selectSummaryPageByUserId( | 237 | IPage<AppBrokerageUserChildSummaryRespVO> pageResult = brokerageUserMapper.selectSummaryPageByUserId( |
| 236 | MyBatisUtils.buildPage(pageReqVO), ids, BrokerageRecordBizTypeEnum.ORDER.getType(), | 238 | MyBatisUtils.buildPage(pageReqVO), ids, BrokerageRecordBizTypeEnum.ORDER.getType(), |
| 237 | BrokerageRecordStatusEnum.SETTLEMENT.getStatus(), bindUserIds, pageReqVO.getSortingField() | 239 | BrokerageRecordStatusEnum.SETTLEMENT.getStatus(), bindUserIds, pageReqVO.getSortingField() |
| 238 | ); | 240 | ); |
| 241 | + | ||
| 239 | // 3. 拼接数据并返回 | 242 | // 3. 拼接数据并返回 |
| 240 | List<Long> userIds = convertList(pageResult.getRecords(), AppBrokerageUserChildSummaryRespVO::getId); | 243 | List<Long> userIds = convertList(pageResult.getRecords(), AppBrokerageUserChildSummaryRespVO::getId); |
| 241 | Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds); | 244 | Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds); |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryServiceImpl.java
| @@ -120,6 +120,7 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService { | @@ -120,6 +120,7 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService { | ||
| 120 | return getExpressTrackList(order); | 120 | return getExpressTrackList(order); |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | + // TODO @puhui999:可以加个 spring 缓存,30 分钟;主要考虑及时性要求不高,但是每次调用需要钱; | ||
| 123 | /** | 124 | /** |
| 124 | * 获得订单的物流轨迹 | 125 | * 获得订单的物流轨迹 |
| 125 | * | 126 | * |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/signin/MemberSignInRecordDO.java
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java
| @@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; | @@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; | ||
| 11 | import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO; | 11 | import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO; |
| 12 | import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; | 12 | import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; |
| 13 | import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; | 13 | import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; |
| 14 | -import cn.iocoder.yudao.module.pay.framework.pay.wallet.WalletPayClient; | 14 | +import cn.iocoder.yudao.module.pay.framework.pay.core.WalletPayClient; |
| 15 | import cn.iocoder.yudao.module.pay.service.app.PayAppService; | 15 | import cn.iocoder.yudao.module.pay.service.app.PayAppService; |
| 16 | import cn.iocoder.yudao.module.pay.service.order.PayOrderService; | 16 | import cn.iocoder.yudao.module.pay.service.order.PayOrderService; |
| 17 | import com.google.common.collect.Maps; | 17 | import com.google.common.collect.Maps; |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/PayWalletRechargeController.java
| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.pay.controller.admin.wallet; | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.pay.controller.admin.wallet; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | 4 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 5 | +import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO; | ||
| 5 | import cn.iocoder.yudao.module.pay.api.notify.dto.PayRefundNotifyReqDTO; | 6 | import cn.iocoder.yudao.module.pay.api.notify.dto.PayRefundNotifyReqDTO; |
| 6 | import cn.iocoder.yudao.module.pay.service.wallet.PayWalletRechargeService; | 7 | import cn.iocoder.yudao.module.pay.service.wallet.PayWalletRechargeService; |
| 7 | import io.swagger.v3.oas.annotations.Operation; | 8 | import io.swagger.v3.oas.annotations.Operation; |
| @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.*; | @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.*; | ||
| 13 | 14 | ||
| 14 | import javax.annotation.Resource; | 15 | import javax.annotation.Resource; |
| 15 | import javax.annotation.security.PermitAll; | 16 | import javax.annotation.security.PermitAll; |
| 17 | +import javax.validation.Valid; | ||
| 16 | 18 | ||
| 17 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 19 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 18 | import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; | 20 | import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; |
| @@ -27,12 +29,22 @@ public class PayWalletRechargeController { | @@ -27,12 +29,22 @@ public class PayWalletRechargeController { | ||
| 27 | @Resource | 29 | @Resource |
| 28 | private PayWalletRechargeService walletRechargeService; | 30 | private PayWalletRechargeService walletRechargeService; |
| 29 | 31 | ||
| 32 | + @PostMapping("/update-paid") | ||
| 33 | + @Operation(summary = "更新钱包充值为已充值") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob | ||
| 34 | + @PermitAll // 无需登录, 内部校验实现 | ||
| 35 | + @OperateLog(enable = false) // 禁用操作日志,因为没有操作人 | ||
| 36 | + public CommonResult<Boolean> updateWalletRechargerPaid(@Valid @RequestBody PayOrderNotifyReqDTO notifyReqDTO) { | ||
| 37 | + walletRechargeService.updateWalletRechargerPaid(Long.valueOf(notifyReqDTO.getMerchantOrderId()), | ||
| 38 | + notifyReqDTO.getPayOrderId()); | ||
| 39 | + return success(true); | ||
| 40 | + } | ||
| 30 | 41 | ||
| 42 | + // TODO @jason:发起退款,要 post 操作哈; | ||
| 31 | @GetMapping("/refund") | 43 | @GetMapping("/refund") |
| 32 | @Operation(summary = "发起钱包充值退款") | 44 | @Operation(summary = "发起钱包充值退款") |
| 33 | @Parameter(name = "id", description = "编号", required = true, example = "1024") | 45 | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| 34 | public CommonResult<Boolean> refundWalletRecharge(@RequestParam("id") Long id) { | 46 | public CommonResult<Boolean> refundWalletRecharge(@RequestParam("id") Long id) { |
| 35 | - walletRechargeService.refundWalletRecharge(id,getClientIP()); | 47 | + walletRechargeService.refundWalletRecharge(id, getClientIP()); |
| 36 | return success(true); | 48 | return success(true); |
| 37 | } | 49 | } |
| 38 | 50 |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java
| 1 | package cn.iocoder.yudao.module.pay.controller.app.order; | 1 | package cn.iocoder.yudao.module.pay.controller.app.order; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | +import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum; | ||
| 4 | import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderRespVO; | 5 | import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderRespVO; |
| 5 | import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderSubmitRespVO; | 6 | import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderSubmitRespVO; |
| 6 | import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitReqVO; | 7 | import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitReqVO; |
| 7 | import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO; | 8 | import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO; |
| 8 | import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; | 9 | import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; |
| 10 | +import cn.iocoder.yudao.module.pay.framework.pay.core.WalletPayClient; | ||
| 9 | import cn.iocoder.yudao.module.pay.service.order.PayOrderService; | 11 | import cn.iocoder.yudao.module.pay.service.order.PayOrderService; |
| 12 | +import com.google.common.collect.Maps; | ||
| 10 | import io.swagger.v3.oas.annotations.Operation; | 13 | import io.swagger.v3.oas.annotations.Operation; |
| 11 | import io.swagger.v3.oas.annotations.Parameter; | 14 | import io.swagger.v3.oas.annotations.Parameter; |
| 12 | import io.swagger.v3.oas.annotations.tags.Tag; | 15 | import io.swagger.v3.oas.annotations.tags.Tag; |
| @@ -16,8 +19,13 @@ import org.springframework.web.bind.annotation.*; | @@ -16,8 +19,13 @@ import org.springframework.web.bind.annotation.*; | ||
| 16 | 19 | ||
| 17 | import javax.annotation.Resource; | 20 | import javax.annotation.Resource; |
| 18 | 21 | ||
| 22 | +import java.util.Map; | ||
| 23 | +import java.util.Objects; | ||
| 24 | + | ||
| 19 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 25 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 20 | import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; | 26 | import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; |
| 27 | +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; | ||
| 28 | +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserType; | ||
| 21 | 29 | ||
| 22 | @Tag(name = "用户 APP - 支付订单") | 30 | @Tag(name = "用户 APP - 支付订单") |
| 23 | @RestController | 31 | @RestController |
| @@ -40,6 +48,16 @@ public class AppPayOrderController { | @@ -40,6 +48,16 @@ public class AppPayOrderController { | ||
| 40 | @PostMapping("/submit") | 48 | @PostMapping("/submit") |
| 41 | @Operation(summary = "提交支付订单") | 49 | @Operation(summary = "提交支付订单") |
| 42 | public CommonResult<AppPayOrderSubmitRespVO> submitPayOrder(@RequestBody AppPayOrderSubmitReqVO reqVO) { | 50 | public CommonResult<AppPayOrderSubmitRespVO> submitPayOrder(@RequestBody AppPayOrderSubmitReqVO reqVO) { |
| 51 | + // 1. 钱包支付事,需要额外传 user_id 和 user_type | ||
| 52 | + if (Objects.equals(reqVO.getChannelCode(), PayChannelEnum.WALLET.getCode())) { | ||
| 53 | + Map<String, String> channelExtras = reqVO.getChannelExtras() == null ? | ||
| 54 | + Maps.newHashMapWithExpectedSize(2) : reqVO.getChannelExtras(); | ||
| 55 | + channelExtras.put(WalletPayClient.USER_ID_KEY, String.valueOf(getLoginUserId())); | ||
| 56 | + channelExtras.put(WalletPayClient.USER_TYPE_KEY, String.valueOf(getLoginUserType())); | ||
| 57 | + reqVO.setChannelExtras(channelExtras); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + // 2. 提交支付 | ||
| 43 | PayOrderSubmitRespVO respVO = payOrderService.submitOrder(reqVO, getClientIP()); | 61 | PayOrderSubmitRespVO respVO = payOrderService.submitOrder(reqVO, getClientIP()); |
| 44 | return success(PayOrderConvert.INSTANCE.convert3(respVO)); | 62 | return success(PayOrderConvert.INSTANCE.convert3(respVO)); |
| 45 | } | 63 | } |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletRechargeController.java
| 1 | package cn.iocoder.yudao.module.pay.controller.app.wallet; | 1 | package cn.iocoder.yudao.module.pay.controller.app.wallet; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | ||
| 5 | -import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO; | ||
| 6 | import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletRechargeCreateReqVO; | 4 | import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletRechargeCreateReqVO; |
| 7 | import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletRechargeCreateRespVO; | 5 | import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletRechargeCreateRespVO; |
| 8 | import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletRechargeConvert; | 6 | import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletRechargeConvert; |
| @@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestMapping; | @@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestMapping; | ||
| 18 | import org.springframework.web.bind.annotation.RestController; | 16 | import org.springframework.web.bind.annotation.RestController; |
| 19 | 17 | ||
| 20 | import javax.annotation.Resource; | 18 | import javax.annotation.Resource; |
| 21 | -import javax.annotation.security.PermitAll; | ||
| 22 | import javax.validation.Valid; | 19 | import javax.validation.Valid; |
| 23 | 20 | ||
| 24 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 21 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| @@ -44,13 +41,4 @@ public class AppPayWalletRechargeController { | @@ -44,13 +41,4 @@ public class AppPayWalletRechargeController { | ||
| 44 | return success(PayWalletRechargeConvert.INSTANCE.convert(walletRecharge)); | 41 | return success(PayWalletRechargeConvert.INSTANCE.convert(walletRecharge)); |
| 45 | } | 42 | } |
| 46 | 43 | ||
| 47 | - @PostMapping("/update-paid") | ||
| 48 | - @Operation(summary = "更新钱包充值为已充值") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob | ||
| 49 | - @PermitAll // 无需登录,安全由 内部校验实现 | ||
| 50 | - @OperateLog(enable = false) // 禁用操作日志,因为没有操作人 | ||
| 51 | - public CommonResult<Boolean> updateWalletRechargerPaid(@Valid @RequestBody PayOrderNotifyReqDTO notifyReqDTO) { | ||
| 52 | - walletRechargeService.updateWalletRechargerPaid(Long.valueOf(notifyReqDTO.getMerchantOrderId()), | ||
| 53 | - notifyReqDTO.getPayOrderId()); | ||
| 54 | - return success(true); | ||
| 55 | - } | ||
| 56 | } | 44 | } |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletRechargePackageController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.pay.controller.app.wallet; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 4 | +import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletPackageRespVO; | ||
| 5 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 6 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 7 | +import lombok.extern.slf4j.Slf4j; | ||
| 8 | +import org.springframework.validation.annotation.Validated; | ||
| 9 | +import org.springframework.web.bind.annotation.GetMapping; | ||
| 10 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 11 | +import org.springframework.web.bind.annotation.RestController; | ||
| 12 | + | ||
| 13 | +import java.util.ArrayList; | ||
| 14 | +import java.util.List; | ||
| 15 | + | ||
| 16 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 17 | + | ||
| 18 | +@Tag(name = "用户 APP - 钱包充值套餐") | ||
| 19 | +@RestController | ||
| 20 | +@RequestMapping("/pay/wallet-recharge-package") | ||
| 21 | +@Validated | ||
| 22 | +@Slf4j | ||
| 23 | +public class AppPayWalletRechargePackageController { | ||
| 24 | + | ||
| 25 | + @GetMapping("/list") | ||
| 26 | + @Operation(summary = "获得钱包充值套餐列表") | ||
| 27 | + public CommonResult<List<AppPayWalletPackageRespVO>> getWalletRechargePackageList() { | ||
| 28 | + // 只查询开启;需要按照 payPrice 排序; | ||
| 29 | + List<AppPayWalletPackageRespVO> list = new ArrayList<>(); | ||
| 30 | + list.add(new AppPayWalletPackageRespVO().setId(1L).setName("土豆").setPayPrice(10).setBonusPrice(2)); | ||
| 31 | + list.add(new AppPayWalletPackageRespVO().setId(2L).setName("番茄").setPayPrice(20).setBonusPrice(5)); | ||
| 32 | + return success(list); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | +} |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/vo/recharge/AppPayWalletPackageRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +@Schema(description = "用户 APP - 用户充值套餐 Response VO") | ||
| 7 | +@Data | ||
| 8 | +public class AppPayWalletPackageRespVO { | ||
| 9 | + | ||
| 10 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 11 | + private Long id; | ||
| 12 | + @Schema(description = "套餐名", requiredMode = Schema.RequiredMode.REQUIRED, example = "小套餐") | ||
| 13 | + private String name; | ||
| 14 | + | ||
| 15 | + @Schema(description = "支付金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") | ||
| 16 | + private Integer payPrice; | ||
| 17 | + @Schema(description = "赠送金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") | ||
| 18 | + private Integer bonusPrice; | ||
| 19 | + | ||
| 20 | +} |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/vo/recharge/AppPayWalletRechargeCreateReqVO.java
| @@ -3,24 +3,27 @@ package cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge; | @@ -3,24 +3,27 @@ package cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge; | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | -import javax.validation.constraints.DecimalMin; | ||
| 7 | import javax.validation.constraints.Min; | 6 | import javax.validation.constraints.Min; |
| 8 | -import javax.validation.constraints.NotNull; | ||
| 9 | 7 | ||
| 10 | @Schema(description = "用户 APP - 创建钱包充值 Request VO") | 8 | @Schema(description = "用户 APP - 创建钱包充值 Request VO") |
| 11 | @Data | 9 | @Data |
| 12 | public class AppPayWalletRechargeCreateReqVO { | 10 | public class AppPayWalletRechargeCreateReqVO { |
| 13 | 11 | ||
| 14 | @Schema(description = "支付金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000") | 12 | @Schema(description = "支付金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000") |
| 15 | - @NotNull(message = "支付金额不能为空") | 13 | +// @NotNull(message = "支付金额不能为空") |
| 16 | @Min(value = 1, message = "支付金额必须大于零") | 14 | @Min(value = 1, message = "支付金额必须大于零") |
| 17 | private Integer payPrice; | 15 | private Integer payPrice; |
| 18 | 16 | ||
| 19 | // TODO @jason:这个是不是后端计算出来呀?不然前端可以直接搞了。。。 | 17 | // TODO @jason:这个是不是后端计算出来呀?不然前端可以直接搞了。。。 |
| 20 | // TOTO 那是不是搞一个充值模板 | 18 | // TOTO 那是不是搞一个充值模板 |
| 21 | @Schema(description = "钱包赠送金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000") | 19 | @Schema(description = "钱包赠送金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000") |
| 22 | - @NotNull(message = "钱包赠送金额不能为空") | ||
| 23 | - @DecimalMin(value = "0", message = "钱包赠送金额必须大于等于零") | ||
| 24 | - private Integer bonusPrice; | 20 | +// @NotNull(message = "钱包赠送金额不能为空") |
| 21 | +// @DecimalMin(value = "0", message = "钱包赠送金额必须大于等于零") | ||
| 22 | + private Integer bonusPrice = 0; | ||
| 23 | + | ||
| 24 | + @Schema(description = "充值套餐编号", example = "1024") | ||
| 25 | + private Long packageId; | ||
| 26 | + | ||
| 27 | + // TODO @jason:可以改成 payPrice 和 packageId 两个至少一个不为空; | ||
| 25 | 28 | ||
| 26 | } | 29 | } |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/vo/wallet/AppPayWalletRespVO.java
| @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.pay.controller.app.wallet.vo.wallet; | @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.pay.controller.app.wallet.vo.wallet; | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | -@Schema(description = "用户 APP - 获取用户钱包 Response VO") | 6 | +@Schema(description = "用户 APP - 用户钱包 Response VO") |
| 7 | @Data | 7 | @Data |
| 8 | public class AppPayWalletRespVO { | 8 | public class AppPayWalletRespVO { |
| 9 | 9 |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletRechargeDO.java
| @@ -47,6 +47,7 @@ public class PayWalletRechargeDO extends BaseDO { | @@ -47,6 +47,7 @@ public class PayWalletRechargeDO extends BaseDO { | ||
| 47 | * 钱包赠送金额 | 47 | * 钱包赠送金额 |
| 48 | */ | 48 | */ |
| 49 | private Integer bonusPrice; | 49 | private Integer bonusPrice; |
| 50 | + // TODO @jason:如果有赠送金额,需要关联下 PayWalletPackageDO 的 id 字段 | ||
| 50 | 51 | ||
| 51 | /** | 52 | /** |
| 52 | * 是否已支付 | 53 | * 是否已支付 |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletRechargePackageDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.pay.dal.dataobject.wallet; | ||
| 2 | + | ||
| 3 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 4 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 5 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 6 | +import lombok.Data; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 会员钱包充值套餐 DO | ||
| 10 | + * | ||
| 11 | + * 通过套餐充值时,可以赠送一定金额; | ||
| 12 | + * | ||
| 13 | + * @author 芋道源码 | ||
| 14 | + */ | ||
| 15 | +@TableName(value ="pay_wallet_recharge_package") | ||
| 16 | +@KeySequence("pay_wallet_recharge_package_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||
| 17 | +@Data | ||
| 18 | +public class PayWalletRechargePackageDO { | ||
| 19 | + | ||
| 20 | + /** | ||
| 21 | + * 编号 | ||
| 22 | + */ | ||
| 23 | + @TableId | ||
| 24 | + private Long id; | ||
| 25 | + /** | ||
| 26 | + * 套餐名 | ||
| 27 | + */ | ||
| 28 | + private String name; | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 支付金额 | ||
| 32 | + */ | ||
| 33 | + private Integer payPrice; | ||
| 34 | + /** | ||
| 35 | + * 赠送金额 | ||
| 36 | + */ | ||
| 37 | + private Integer bonusPrice; | ||
| 38 | + | ||
| 39 | + /** | ||
| 40 | + * 状态 | ||
| 41 | + * | ||
| 42 | + * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum} | ||
| 43 | + */ | ||
| 44 | + private Integer status; | ||
| 45 | + | ||
| 46 | +} |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/wallet/WalletPayClient.java renamed to yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/core/WalletPayClient.java
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/channel/PayChannelServiceImpl.java
| @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.pay.controller.admin.channel.vo.PayChannelUpdateR | @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.pay.controller.admin.channel.vo.PayChannelUpdateR | ||
| 13 | import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert; | 13 | import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert; |
| 14 | import cn.iocoder.yudao.module.pay.dal.dataobject.channel.PayChannelDO; | 14 | import cn.iocoder.yudao.module.pay.dal.dataobject.channel.PayChannelDO; |
| 15 | import cn.iocoder.yudao.module.pay.dal.mysql.channel.PayChannelMapper; | 15 | import cn.iocoder.yudao.module.pay.dal.mysql.channel.PayChannelMapper; |
| 16 | +import cn.iocoder.yudao.module.pay.framework.pay.core.WalletPayClient; | ||
| 16 | import com.google.common.cache.CacheLoader; | 17 | import com.google.common.cache.CacheLoader; |
| 17 | import com.google.common.cache.LoadingCache; | 18 | import com.google.common.cache.LoadingCache; |
| 18 | import lombok.Getter; | 19 | import lombok.Getter; |
| @@ -20,6 +21,7 @@ import lombok.extern.slf4j.Slf4j; | @@ -20,6 +21,7 @@ import lombok.extern.slf4j.Slf4j; | ||
| 20 | import org.springframework.stereotype.Service; | 21 | import org.springframework.stereotype.Service; |
| 21 | import org.springframework.validation.annotation.Validated; | 22 | import org.springframework.validation.annotation.Validated; |
| 22 | 23 | ||
| 24 | +import javax.annotation.PostConstruct; | ||
| 23 | import javax.annotation.Resource; | 25 | import javax.annotation.Resource; |
| 24 | import javax.validation.Validator; | 26 | import javax.validation.Validator; |
| 25 | import java.time.Duration; | 27 | import java.time.Duration; |
| @@ -68,6 +70,14 @@ public class PayChannelServiceImpl implements PayChannelService { | @@ -68,6 +70,14 @@ public class PayChannelServiceImpl implements PayChannelService { | ||
| 68 | @Resource | 70 | @Resource |
| 69 | private Validator validator; | 71 | private Validator validator; |
| 70 | 72 | ||
| 73 | + /** | ||
| 74 | + * 初始化,为了注册钱包 | ||
| 75 | + */ | ||
| 76 | + @PostConstruct | ||
| 77 | + public void init() { | ||
| 78 | + payClientFactory.registerPayClientClass(PayChannelEnum.WALLET, WalletPayClient.class); | ||
| 79 | + } | ||
| 80 | + | ||
| 71 | @Override | 81 | @Override |
| 72 | public Long createChannel(PayChannelCreateReqVO reqVO) { | 82 | public Long createChannel(PayChannelCreateReqVO reqVO) { |
| 73 | // 断言是否有重复的 | 83 | // 断言是否有重复的 |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java
| @@ -40,6 +40,7 @@ import static cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum.*; | @@ -40,6 +40,7 @@ import static cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum.*; | ||
| 40 | @Service | 40 | @Service |
| 41 | @Slf4j | 41 | @Slf4j |
| 42 | public class PayWalletRechargeServiceImpl implements PayWalletRechargeService { | 42 | public class PayWalletRechargeServiceImpl implements PayWalletRechargeService { |
| 43 | + | ||
| 43 | /** | 44 | /** |
| 44 | * TODO 放到 配置文件中 | 45 | * TODO 放到 配置文件中 |
| 45 | */ | 46 | */ |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/util/PaySeqUtils.java deleted
| 1 | -package cn.iocoder.yudao.module.pay.util; | ||
| 2 | - | ||
| 3 | -import cn.hutool.core.date.DatePattern; | ||
| 4 | -import cn.hutool.core.date.DateUtil; | ||
| 5 | - | ||
| 6 | -import java.time.LocalDateTime; | ||
| 7 | -import java.util.concurrent.atomic.AtomicLong; | ||
| 8 | - | ||
| 9 | -/** | ||
| 10 | - * 支付相关编号的生产 | ||
| 11 | - */ | ||
| 12 | -// TODO @jason:需要改造,基于 db; | ||
| 13 | -public class PaySeqUtils { | ||
| 14 | - | ||
| 15 | - private static final AtomicLong REFUND_REQ_NO_SEQ = new AtomicLong(0L); | ||
| 16 | - | ||
| 17 | - private static final AtomicLong MER_REFUND_NO_SEQ = new AtomicLong(0L); | ||
| 18 | - | ||
| 19 | - private static final AtomicLong MER_ORDER_NO_SEQ = new AtomicLong(0L); | ||
| 20 | - | ||
| 21 | - // TODO 芋艿:需要看看 | ||
| 22 | - /** | ||
| 23 | - * 生成商户退款单号,用于测试,应该由商户系统生成 | ||
| 24 | - * @return 商户退款单 | ||
| 25 | - */ | ||
| 26 | - public static String genMerchantRefundNo() { | ||
| 27 | - return String.format("%s%s%04d", "MR", | ||
| 28 | - DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_MS_PATTERN), | ||
| 29 | - (int) MER_REFUND_NO_SEQ.getAndIncrement() % 10000); | ||
| 30 | - } | ||
| 31 | - | ||
| 32 | - // TODO 芋艿:需要看看 | ||
| 33 | - | ||
| 34 | - /** | ||
| 35 | - * 生成退款请求号 | ||
| 36 | - * @return 退款请求号 | ||
| 37 | - */ | ||
| 38 | - public static String genRefundReqNo() { | ||
| 39 | - return String.format("%s%s%04d", "RR", | ||
| 40 | - DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_MS_PATTERN), | ||
| 41 | - (int) REFUND_REQ_NO_SEQ.getAndIncrement() % 10000); | ||
| 42 | - } | ||
| 43 | - | ||
| 44 | - /** | ||
| 45 | - * 生成商户订单编号号 用于测试,应该由商户系统生成 | ||
| 46 | - * @return 商户订单编号 | ||
| 47 | - */ | ||
| 48 | - public static String genMerchantOrderNo() { | ||
| 49 | - return String.format("%s%s%04d", "MO", | ||
| 50 | - DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_MS_PATTERN), | ||
| 51 | - (int) MER_ORDER_NO_SEQ.getAndIncrement() % 10000); | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | -} |