From 38ddb2605167497ca958067e3e918bd1dea2812c Mon Sep 17 00:00:00 2001 From: XinWei <2718030729@qq.com> Date: Thu, 17 Oct 2024 15:17:16 +0800 Subject: [PATCH 01/24] =?UTF-8?q?=E5=95=86=E5=93=81=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=93=81=E7=89=8C?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/spu/AppProductSpuController.java | 6 ++++++ .../controller/app/spu/vo/AppProductSpuDetailRespVO.java | 3 ++- .../module/product/service/brand/ProductBrandService.java | 7 +++++++ .../product/service/brand/ProductBrandServiceImpl.java | 8 ++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java index 7706e1c..c0959f5 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.product.controller.app.spu; import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -16,6 +17,7 @@ import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.enums.ErrorCodeConstants; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; +import cn.iocoder.yudao.module.product.service.brand.ProductBrandService; import cn.iocoder.yudao.module.product.service.history.ProductBrowseHistoryService; import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; import cn.iocoder.yudao.module.product.service.spu.ProductSpuService; @@ -61,6 +63,8 @@ public class AppProductSpuController { private MemberLevelApi memberLevelApi; @Resource private MemberUserApi memberUserApi; + @Resource + private ProductBrandService productBrandService; @GetMapping("/list-by-ids") @Operation(summary = "获得商品 SPU 列表") @@ -138,6 +142,8 @@ public class AppProductSpuController { spu.setBrowseCount(spu.getBrowseCount() + spu.getVirtualSalesCount()); AppProductSpuDetailRespVO spuVO = BeanUtils.toBean(spu, AppProductSpuDetailRespVO.class) .setSkus(BeanUtils.toBean(skus, AppProductSpuDetailRespVO.Sku.class)); + // 添加品牌详细信息 + spuVO.setProductBrand(productBrandService.getBrandByIdStatus(spu.getBrandId(), CommonStatusEnum.ENABLE.getStatus())); // 处理 vip 价格 MemberLevelRespDTO memberLevel = getMemberLevel(); spuVO.setVipPrice(calculateVipPrice(spuVO.getPrice(), memberLevel)); diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuDetailRespVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuDetailRespVO.java index b26c5a0..60e404d 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuDetailRespVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuDetailRespVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.product.controller.app.spu.vo; import cn.iocoder.yudao.module.product.controller.app.property.vo.value.AppProductPropertyValueDetailRespVO; +import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO; import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -35,7 +36,7 @@ public class AppProductSpuDetailRespVO { private List sliderPicUrls; @Schema(description = "商品品牌编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Long brandId; + private ProductBrandDO productBrand; // ========== 营销相关字段 ========= // ========== SKU 相关字段 ========= diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandService.java index aa401ed..9680047 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandService.java @@ -45,6 +45,13 @@ public interface ProductBrandService { */ ProductBrandDO getBrand(Long id); + /** + * 根据编号和状态获取品牌 + * @param id 编号 + * @param status 状态 + * @return cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO + */ + ProductBrandDO getBrandByIdStatus(Long id, Integer status); /** * 获得品牌列表 * diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImpl.java index b97123f..d983027 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.product.service.brand; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandCreateReqVO; import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandListReqVO; import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandPageReqVO; @@ -88,6 +89,13 @@ public class ProductBrandServiceImpl implements ProductBrandService { return brandMapper.selectById(id); } + @Override + public ProductBrandDO getBrandByIdStatus(Long id, Integer status) { + LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); + wrapperX.eq(ProductBrandDO::getId, id).eq(ProductBrandDO::getStatus, status); + return brandMapper.selectOne(wrapperX); + } + @Override public List getBrandList(Collection ids) { return brandMapper.selectBatchIds(ids); -- 2.45.2 From e3d554da42cf761315467f6e91ca8361a67a8da5 Mon Sep 17 00:00:00 2001 From: XinWei <2718030729@qq.com> Date: Thu, 17 Oct 2024 16:30:07 +0800 Subject: [PATCH 02/24] =?UTF-8?q?=E9=80=80=E6=AC=BE=E7=A9=BA=E6=8C=87?= =?UTF-8?q?=E9=92=88=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trade/service/order/TradeOrderUpdateServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java index 80d4545..766df87 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java @@ -906,6 +906,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { // 2.1 更新订单的退款金额、积分 Integer orderRefundPrice = order.getRefundPrice() + refundPrice; + if (order.getRefundPoint() == null){ + order.setRefundPoint(0); + } Integer orderRefundPoint = order.getRefundPoint() + orderItem.getUsePoint(); Integer refundStatus = isAllOrderItemAfterSaleSuccess(order.getId()) ? TradeOrderRefundStatusEnum.ALL.getStatus() // 如果都售后成功,则需要取消订单 -- 2.45.2 From 1316b41df70563650918b3f8029f29c570f91bd0 Mon Sep 17 00:00:00 2001 From: XinWei <2718030729@qq.com> Date: Fri, 18 Oct 2024 13:42:20 +0800 Subject: [PATCH 03/24] =?UTF-8?q?=E6=94=AF=E4=BB=98=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=B8=ADmerchant=5Forder=5Fid=E9=87=8D=E5=A4=8D=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/pay/dal/dataobject/wallet/PayWalletRechargeDO.java | 3 ++- .../module/system/service/social/SocialClientServiceImpl.java | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletRechargeDO.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletRechargeDO.java index a842c95..831aa52 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletRechargeDO.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletRechargeDO.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -22,7 +23,7 @@ public class PayWalletRechargeDO extends BaseDO { /** * 编号 */ - @TableId + @TableId(type = IdType.ASSIGN_ID) private Long id; /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java index 9fa6642..4f30315 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java @@ -14,6 +14,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.cache.CacheUtils; import cn.iocoder.yudao.framework.common.util.http.HttpUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO; import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; -- 2.45.2 From 11dd5f7f6f6863279e8ef69bea9d55cee07c7ad3 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Mon, 21 Oct 2024 08:49:23 +0800 Subject: [PATCH 04/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/enums/ErrorCodeConstants.java | 4 +- .../order/PaidMemberOrderController.java | 95 +++++++++++++ .../order/vo/PaidMemberOrderPageReqVO.java | 73 ++++++++++ .../admin/order/vo/PaidMemberOrderRespVO.java | 88 ++++++++++++ .../order/vo/PaidMemberOrderSaveReqVO.java | 78 +++++++++++ .../user/vo/PaidMemberUserSaveReqVO.java | 74 ++++++++++ .../app/type/AppMemberCardTypeController.java | 14 +- .../convert/order/PaidMemberOrderConvert.java | 18 +++ .../membercardtype/PaidMemberCardTypeDO.java | 3 +- .../dataobject/order/PaidMemberOrderDO.java | 107 ++++++++++++++ .../dal/dataobject/user/MemberUserDO.java | 2 +- .../dal/dataobject/user/PaidMemberUserDO.java | 110 +++++++++++++++ .../PaidMemberCardTypeMapper.java | 7 + .../mysql/order/PaidMemberOrderMapper.java | 42 ++++++ .../dal/mysql/user/PaidMemberUserMapper.java | 19 +++ .../PaidMemberCardTypeService.java | 15 +- .../PaidMemberCardTypeServiceImpl.java | 40 +++++- .../service/order/PaidMemberOrderService.java | 80 +++++++++++ .../order/PaidMemberOrderServiceImpl.java | 118 ++++++++++++++++ .../service/user/MemberUserService.java | 1 + .../service/user/PaidMemberUserService.java | 58 ++++++++ .../user/PaidMemberUserServiceImpl.java | 76 ++++++++++ yudao-module-pay/yudao-module-pay-biz/pom.xml | 12 ++ .../member/AppPaidMembeOrderController.java | 132 ++++++++++++++++++ .../member/vo/AppPaidMemberOrderReqVO.java | 29 ++++ .../member/vo/AppPaidMemberOrderRespVO.java | 15 ++ .../convert/member/PayMemberOrderConvert.java | 15 ++ .../pay/service/wallet/PayWalletService.java | 10 ++ .../service/wallet/PayWalletServiceImpl.java | 9 ++ 29 files changed, 1336 insertions(+), 8 deletions(-) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/PaidMemberOrderController.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderPageReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderRespVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderSaveReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/order/PaidMemberOrderMapper.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/PaidMemberUserMapper.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java create mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java create mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderReqVO.java create mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderRespVO.java create mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/member/PayMemberOrderConvert.java diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index b7e3b04..5b7bc4d 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -63,7 +63,9 @@ public interface ErrorCodeConstants { ErrorCode TRANSFER_NOT_EXISTS = new ErrorCode(1_004_017_000, "会员卡划拨不存在"); ErrorCode TRANSFER_LOG_NOT_EXISTS = new ErrorCode(1_004_018_000, "会员卡划拨记录不存在"); - // ========== ========== + // ==========会员类型、权益、支付 1-019-22-000 ========== ErrorCode INPUTCODE_NOT_EXISTS = new ErrorCode(1_004_019_000, "进件码不存在"); ErrorCode CARD_NOT_EXISTS = new ErrorCode(1_004_020_000, "会员卡类型不存在"); + ErrorCode MEMBER_USER_NOT_EXISTS = new ErrorCode(1_004_021_000, "会员不存在"); + ErrorCode PAID_MEMBER_ORDER_NOT_EXISTS = new ErrorCode(1_004_022_000, "付费会员订单不存在"); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/PaidMemberOrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/PaidMemberOrderController.java new file mode 100644 index 0000000..3dcf866 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/PaidMemberOrderController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.member.controller.admin.order; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.member.controller.admin.order.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; +import cn.iocoder.yudao.module.member.service.order.PaidMemberOrderService; + +@Tag(name = "管理后台 - 付费会员订单") +@RestController +@RequestMapping("/member/paid-member-order") +@Validated +public class PaidMemberOrderController { + + @Resource + private PaidMemberOrderService paidMemberOrderService; + + @PostMapping("/create") + @Operation(summary = "创建付费会员订单") + @PreAuthorize("@ss.hasPermission('member:paid-member-order:create')") + public CommonResult createPaidMemberOrder(@Valid @RequestBody PaidMemberOrderSaveReqVO createReqVO) { + return success(paidMemberOrderService.createPaidMemberOrder(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新付费会员订单") + @PreAuthorize("@ss.hasPermission('member:paid-member-order:update')") + public CommonResult updatePaidMemberOrder(@Valid @RequestBody PaidMemberOrderSaveReqVO updateReqVO) { + paidMemberOrderService.updatePaidMemberOrder(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除付费会员订单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('member:paid-member-order:delete')") + public CommonResult deletePaidMemberOrder(@RequestParam("id") Integer id) { + paidMemberOrderService.deletePaidMemberOrder(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得付费会员订单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('member:paid-member-order:query')") + public CommonResult getPaidMemberOrder(@RequestParam("id") Integer id) { + PaidMemberOrderDO paidMemberOrder = paidMemberOrderService.getPaidMemberOrder(id); + return success(BeanUtils.toBean(paidMemberOrder, PaidMemberOrderRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得付费会员订单分页") + @PreAuthorize("@ss.hasPermission('member:paid-member-order:query')") + public CommonResult> getPaidMemberOrderPage(@Valid PaidMemberOrderPageReqVO pageReqVO) { + PageResult pageResult = paidMemberOrderService.getPaidMemberOrderPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PaidMemberOrderRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出付费会员订单 Excel") + @PreAuthorize("@ss.hasPermission('member:paid-member-order:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPaidMemberOrderExcel(@Valid PaidMemberOrderPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = paidMemberOrderService.getPaidMemberOrderPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "付费会员订单.xls", "数据", PaidMemberOrderRespVO.class, + BeanUtils.toBean(list, PaidMemberOrderRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderPageReqVO.java new file mode 100644 index 0000000..9990879 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderPageReqVO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.member.controller.admin.order.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 付费会员订单分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PaidMemberOrderPageReqVO extends PageParam { + + @Schema(description = "用户UID", example = "23917") + private Integer uid; + + @Schema(description = "订单号") + private String orderNo; + + @Schema(description = "付费会员卡ID", example = "8322") + private Integer cardId; + + @Schema(description = "会员卡名称", example = "赵六") + private String cardName; + + @Schema(description = "0-试用,1-期限,2-永久", example = "2") + private Integer type; + + @Schema(description = "期限天数") + private Integer deadlineDay; + + @Schema(description = "会员卡原价", example = "16244") + private BigDecimal originalPrice; + + @Schema(description = "会员卡售价", example = "17277") + private BigDecimal price; + + @Schema(description = "赠送余额") + private BigDecimal giftBalance; + + @Schema(description = "支付方式:weixin,alipay,give,yue", example = "2") + private String payType; + + @Schema(description = "支付渠道:public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付") + private String payChannel; + + @Schema(description = "是否支付", example = "29374") + private Boolean paid; + + @Schema(description = "支付时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] payTime; + + @Schema(description = "支付服务方订单号") + private String outTradeNo; + + @Schema(description = "会员卡到期时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] cardExpirationTime; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "是否微信小程序发货") + private Boolean isWechatShipping; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderRespVO.java new file mode 100644 index 0000000..0d2358e --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderRespVO.java @@ -0,0 +1,88 @@ +package cn.iocoder.yudao.module.member.controller.admin.order.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 付费会员订单 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PaidMemberOrderRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "30259") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "用户UID", example = "23917") + @ExcelProperty("用户UID") + private Integer uid; + + @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("订单号") + private String orderNo; + + @Schema(description = "付费会员卡ID", example = "8322") + @ExcelProperty("付费会员卡ID") + private Integer cardId; + + @Schema(description = "会员卡名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("会员卡名称") + private String cardName; + + @Schema(description = "0-试用,1-期限,2-永久", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("0-试用,1-期限,2-永久") + private Integer type; + + @Schema(description = "期限天数", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("期限天数") + private Integer deadlineDay; + + @Schema(description = "会员卡原价", requiredMode = Schema.RequiredMode.REQUIRED, example = "16244") + @ExcelProperty("会员卡原价") + private BigDecimal originalPrice; + + @Schema(description = "会员卡售价", requiredMode = Schema.RequiredMode.REQUIRED, example = "17277") + @ExcelProperty("会员卡售价") + private BigDecimal price; + + @Schema(description = "赠送余额", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("赠送余额") + private BigDecimal giftBalance; + + @Schema(description = "支付方式:weixin,alipay,give,yue", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("支付方式:weixin,alipay,give,yue") + private String payType; + + @Schema(description = "支付渠道:public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("支付渠道:public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付") + private String payChannel; + + @Schema(description = "是否支付", requiredMode = Schema.RequiredMode.REQUIRED, example = "29374") + @ExcelProperty("是否支付") + private Boolean paid; + + @Schema(description = "支付时间") + @ExcelProperty("支付时间") + private LocalDateTime payTime; + + @Schema(description = "支付服务方订单号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("支付服务方订单号") + private String outTradeNo; + + @Schema(description = "会员卡到期时间") + @ExcelProperty("会员卡到期时间") + private LocalDateTime cardExpirationTime; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "是否微信小程序发货", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否微信小程序发货") + private Boolean isWechatShipping; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderSaveReqVO.java new file mode 100644 index 0000000..f8a1fb8 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderSaveReqVO.java @@ -0,0 +1,78 @@ +package cn.iocoder.yudao.module.member.controller.admin.order.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 付费会员订单新增/修改 Request VO") +@Data +public class PaidMemberOrderSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "30259") + private Integer id; + + @Schema(description = "用户UID", example = "23917") + private Integer uid; + + @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "订单号不能为空") + private String orderNo; + + @Schema(description = "付费会员卡ID", example = "8322") + private Integer cardId; + + @Schema(description = "会员卡名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "会员卡名称不能为空") + private String cardName; + + @Schema(description = "0-试用,1-期限,2-永久", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "0-试用,1-期限,2-永久不能为空") + private Integer type; + + @Schema(description = "期限天数", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "期限天数不能为空") + private Integer deadlineDay; + + @Schema(description = "会员卡原价", requiredMode = Schema.RequiredMode.REQUIRED, example = "16244") + @NotNull(message = "会员卡原价不能为空") + private BigDecimal originalPrice; + + @Schema(description = "会员卡售价", requiredMode = Schema.RequiredMode.REQUIRED, example = "17277") + @NotNull(message = "会员卡售价不能为空") + private BigDecimal price; + + @Schema(description = "赠送余额", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "赠送余额不能为空") + private BigDecimal giftBalance; + + @Schema(description = "支付方式:weixin,alipay,give,yue", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotEmpty(message = "支付方式:weixin,alipay,give,yue不能为空") + private String payType; + + @Schema(description = "支付渠道:public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "支付渠道:public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付不能为空") + private String payChannel; + + @Schema(description = "是否支付", requiredMode = Schema.RequiredMode.REQUIRED, example = "29374") + @NotNull(message = "是否支付不能为空") + private Boolean paid; + + @Schema(description = "支付时间") + private LocalDateTime payTime; + + @Schema(description = "支付服务方订单号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "支付服务方订单号不能为空") + private String outTradeNo; + + @Schema(description = "会员卡到期时间") + private LocalDateTime cardExpirationTime; + + @Schema(description = "是否微信小程序发货", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否微信小程序发货不能为空") + private Boolean isWechatShipping; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java new file mode 100644 index 0000000..4d8e824 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.member.controller.admin.user.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员新增/修改 Request VO") +@Data +public class PaidMemberUserSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12209") + private Long id; + + @Schema(description = "手机号") + private String mobile; + + @Schema(description = "密码") + private String password; + + @Schema(description = "状态", example = "1") + private Integer status; + + @Schema(description = "注册 IP") + private String registerIp; + + @Schema(description = "注册终端") + private Integer registerTerminal; + + @Schema(description = "最后登录IP") + private String loginIp; + + @Schema(description = "最后登录时间") + private LocalDateTime loginDate; + + @Schema(description = "用户昵称", example = "赵六") + private String nickname; + + @Schema(description = "头像") + private String avatar; + + @Schema(description = "真实名字", example = "张三") + private String name; + + @Schema(description = "性别") + private Integer sex; + + @Schema(description = "出生日期") + private LocalDateTime birthday; + + @Schema(description = "所在地", example = "18998") + private Integer areaId; + + @Schema(description = "用户备注") + private String mark; + + @Schema(description = "积分") + private Integer point; + + @Schema(description = "用户标签编号列表,以逗号分隔") + private String tagIds; + + @Schema(description = "等级编号", example = "27166") + private Long levelId; + + @Schema(description = "经验") + private Integer experience; + + @Schema(description = "用户分组编号", example = "27409") + private Long groupId; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java index 79c4305..d009e45 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java @@ -5,16 +5,20 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.member.controller.app.type.vo.AppMemberCardTypeRespVO; import cn.iocoder.yudao.module.member.convert.type.MemberCardTypeConvert; import cn.iocoder.yudao.module.member.dal.dataobject.membercardtype.PaidMemberCardTypeDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeService; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.lang.reflect.Member; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; @Tag(name = "用户 App - 会员卡类型") @RestController @@ -25,13 +29,19 @@ public class AppMemberCardTypeController { @Resource private PaidMemberCardTypeService cardService; + @Resource + private MemberUserService userService; @GetMapping("/list") @Operation(summary = "获得会员卡类型列表") public CommonResult> list() { - /** 查询状态为启用的会员卡类型列表*/ - List list = cardService.getCardTypeList(CommonStatusEnum.DISABLE.getStatus()); + /** 查询状态为启用的会员卡类型列表 */ + MemberUserDO memberUserDO = userService.getUser(getLoginUserId()); + /** 根据用户查询是否有试用会员的类型列表 */ + List list = cardService.getCardTypeList(memberUserDO.getActivate()); return success(MemberCardTypeConvert.INSTANCE.convertList(list)); } + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java new file mode 100644 index 0000000..5139eae --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.member.convert.order; + +import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Mapper +public interface PaidMemberOrderConvert { + + PaidMemberOrderConvert INSTANCE = Mappers.getMapper(PaidMemberOrderConvert.class); + + PaidMemberOrderDO convert(Long uid, String cardName, Integer type, + String payChannel, BigDecimal price, LocalDateTime payTime); + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/membercardtype/PaidMemberCardTypeDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/membercardtype/PaidMemberCardTypeDO.java index 01efeda..95b204d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/membercardtype/PaidMemberCardTypeDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/membercardtype/PaidMemberCardTypeDO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.dal.dataobject.membercardtype; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -21,7 +22,7 @@ import java.math.BigDecimal; @Builder @NoArgsConstructor @AllArgsConstructor -public class PaidMemberCardTypeDO extends BaseDO { +public class PaidMemberCardTypeDO extends TenantBaseDO { /** * id diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java new file mode 100644 index 0000000..2652ae1 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java @@ -0,0 +1,107 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.order; + +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 付费会员订单 DO + * + * @author 管理员 + */ +@TableName("paid_member_order") +@KeySequence("paid_member_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PaidMemberOrderDO extends TenantBaseDO { + + /** + * 编号 + */ + @TableId + private Integer id; + /** + * 用户UID + */ + private Integer uid; + /** + * 订单号 + */ + private String orderNo; + /** + * 付费会员卡ID + */ + private Integer cardId; + /** + * 会员卡名称 + */ + private String cardName; + /** + * 0-试用,1-期限,2-永久 + */ + private Integer type; + /** + * 期限天数 + */ + private Integer deadlineDay; + /** + * 会员卡原价 + */ + private BigDecimal originalPrice; + /** + * 会员卡售价 + */ + private BigDecimal price; + /** + * 赠送余额 + */ + private BigDecimal giftBalance; + /** + * 支付方式:weixin,alipay,give,yue + */ + private String payType; + /** + * 支付渠道:public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付 + */ + private String payChannel; + /** + * 是否支付 + */ + private Boolean paid; + /** + * 支付时间 + */ + private LocalDateTime payTime; + /** + * 支付服务方订单号 + */ + private String outTradeNo; + /** + * 会员卡到期时间 + */ + private LocalDateTime cardExpirationTime; + /** + * 是否微信小程序发货 + */ + private Boolean isWechatShipping; + /** + * 支付订单编号 + * + * 关联 {@link PayOrderDO#getId()} + */ + private Long payOrderId; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java index 0d0dde0..bf8732e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java @@ -143,7 +143,7 @@ public class MemberUserDO extends TenantBaseDO { private Long groupId; /** - * 是否绑过卡 + * 是否绑过卡,是否开通过试用会员 */ private Integer activate; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java new file mode 100644 index 0000000..22b87e2 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java @@ -0,0 +1,110 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.user; + +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 会员 DO + * + * @author 管理员 + */ +@TableName("paid_member_user") +@KeySequence("paid_member_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PaidMemberUserDO extends TenantBaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 手机号 + */ + private String mobile; + /** + * 密码 + */ + private String password; + /** + * 状态 + */ + private Integer status; + /** + * 注册 IP + */ + private String registerIp; + /** + * 注册终端 + */ + private Integer registerTerminal; + /** + * 最后登录IP + */ + private String loginIp; + /** + * 最后登录时间 + */ + private LocalDateTime loginDate; + /** + * 用户昵称 + */ + private String nickname; + /** + * 头像 + */ + private String avatar; + /** + * 真实名字 + */ + private String name; + /** + * 性别 + */ + private Integer sex; + /** + * 出生日期 + */ + private LocalDateTime birthday; + /** + * 所在地 + */ + private Integer areaId; + /** + * 用户备注 + */ + private String mark; + /** + * 积分 + */ + private Integer point; + /** + * 用户标签编号列表,以逗号分隔 + */ + private String tagIds; + /** + * 等级编号 + */ + private Long levelId; + /** + * 经验 + */ + private Integer experience; + /** + * 用户分组编号 + */ + private Long groupId; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/membercardtype/PaidMemberCardTypeMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/membercardtype/PaidMemberCardTypeMapper.java index 958bc77..963f291 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/membercardtype/PaidMemberCardTypeMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/membercardtype/PaidMemberCardTypeMapper.java @@ -31,4 +31,11 @@ public interface PaidMemberCardTypeMapper extends BaseMapperX selectListByStatus(Integer status){ return selectList(PaidMemberCardTypeDO::getStatus, status); } + + default List selectListByIsActivate(Integer status){ + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberCardTypeDO::getStatus,status) + .neIfPresent(PaidMemberCardTypeDO::getName,"试用") + .orderByAsc(PaidMemberCardTypeDO::getId)); + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/order/PaidMemberOrderMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/order/PaidMemberOrderMapper.java new file mode 100644 index 0000000..3c539da --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/order/PaidMemberOrderMapper.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.member.dal.mysql.order; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.*; + +/** + * 付费会员订单 Mapper + * + * @author 管理员 + */ +@Mapper +public interface PaidMemberOrderMapper extends BaseMapperX { + + default PageResult selectPage(PaidMemberOrderPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberOrderDO::getUid, reqVO.getUid()) + .eqIfPresent(PaidMemberOrderDO::getOrderNo, reqVO.getOrderNo()) + .eqIfPresent(PaidMemberOrderDO::getCardId, reqVO.getCardId()) + .likeIfPresent(PaidMemberOrderDO::getCardName, reqVO.getCardName()) + .eqIfPresent(PaidMemberOrderDO::getType, reqVO.getType()) + .eqIfPresent(PaidMemberOrderDO::getDeadlineDay, reqVO.getDeadlineDay()) + .eqIfPresent(PaidMemberOrderDO::getOriginalPrice, reqVO.getOriginalPrice()) + .eqIfPresent(PaidMemberOrderDO::getPrice, reqVO.getPrice()) + .eqIfPresent(PaidMemberOrderDO::getGiftBalance, reqVO.getGiftBalance()) + .eqIfPresent(PaidMemberOrderDO::getPayType, reqVO.getPayType()) + .eqIfPresent(PaidMemberOrderDO::getPayChannel, reqVO.getPayChannel()) + .eqIfPresent(PaidMemberOrderDO::getPaid, reqVO.getPaid()) + .betweenIfPresent(PaidMemberOrderDO::getPayTime, reqVO.getPayTime()) + .eqIfPresent(PaidMemberOrderDO::getOutTradeNo, reqVO.getOutTradeNo()) + .betweenIfPresent(PaidMemberOrderDO::getCardExpirationTime, reqVO.getCardExpirationTime()) + .betweenIfPresent(PaidMemberOrderDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(PaidMemberOrderDO::getIsWechatShipping, reqVO.getIsWechatShipping()) + .orderByDesc(PaidMemberOrderDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/PaidMemberUserMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/PaidMemberUserMapper.java new file mode 100644 index 0000000..db4da9a --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/PaidMemberUserMapper.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.member.dal.mysql.user; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; + +/** + * 会员 Mapper + * + * @author 管理员 + */ +@Mapper +public interface PaidMemberUserMapper extends BaseMapperX { +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java index 8f79e8a..110d55f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.member.controller.admin.membercardtype.vo.PaidMem import cn.iocoder.yudao.module.member.dal.dataobject.membercardtype.PaidMemberCardTypeDO; import javax.validation.Valid; +import java.math.BigDecimal; import java.util.List; /** @@ -53,6 +54,18 @@ public interface PaidMemberCardTypeService { */ PageResult getcardPage(PaidMemberCardTypePageReqVO pageReqVO); - List getCardTypeList (Integer status); + /** + * 根据用户是否使用试用会员 + * 查询会员类型列表 + * @param activate + * @return + */ + List getCardTypeList (Integer activate); + /** + * 根据发起的订单type确定试用、有效期、永久的会员卡 + * @param type + * @return + */ + PaidMemberCardTypeDO selectMemberCardType(Integer type, BigDecimal price); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index 8e7480a..1a0c78d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -2,18 +2,24 @@ package cn.iocoder.yudao.module.member.service.membercardtype; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.controller.admin.membercardtype.vo.PaidMemberCardTypePageReqVO; import cn.iocoder.yudao.module.member.controller.admin.membercardtype.vo.PaidMemberCardTypeSaveReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.membercardtype.PaidMemberCardTypeDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.membercardtype.PaidMemberCardTypeMapper; +import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.CARD_NOT_EXISTS; /** @@ -28,6 +34,9 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService @Resource private PaidMemberCardTypeMapper cardMapper; + @Resource + private PaidMemberUserService paidMemberUserService01; + @Override public Long createcard(PaidMemberCardTypeSaveReqVO createReqVO) { // 插入 @@ -71,10 +80,37 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService } @Override - public List getCardTypeList(Integer status) { - List list = cardMapper.selectListByStatus(status); + public List getCardTypeList(Integer activate) { + List list = new ArrayList<>(); + Integer status = 1; + if(activate == 1){ + list = cardMapper.selectListByIsActivate(status); + } + else { + list = cardMapper.selectListByStatus(status); + } return list; } + @Override + public PaidMemberCardTypeDO selectMemberCardType(Integer type, BigDecimal price) { + PaidMemberCardTypeDO paidMemberCardTypeDO = new PaidMemberCardTypeDO(); + PaidMemberUserDO paidMemberUserDO = paidMemberUserService01.getMemberUser(getLoginUserId()); + if(type == 0){ + paidMemberCardTypeDO =cardMapper.selectOne(new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberCardTypeDO::getName,"试用")); + } else if (type == 1 && paidMemberUserDO == null) { + paidMemberCardTypeDO =cardMapper.selectOne(new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberCardTypeDO::getOriginalPrice,price)); + } else if (type == 1 && paidMemberUserDO != null) { + paidMemberCardTypeDO =cardMapper.selectOne(new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberCardTypeDO::getSpecialPrice,price)); + } else if (type == 2) { + paidMemberCardTypeDO =cardMapper.selectOne(new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberCardTypeDO::getName,"永久")); + } + return paidMemberCardTypeDO; + } + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java new file mode 100644 index 0000000..cd09e76 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java @@ -0,0 +1,80 @@ +package cn.iocoder.yudao.module.member.service.order; + +import java.math.BigDecimal; +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + + +/** + * 付费会员订单 Service 接口 + * + * @author 管理员 + */ +public interface PaidMemberOrderService { + + /** + * 创建付费会员订单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createPaidMemberOrder(@Valid PaidMemberOrderSaveReqVO createReqVO); + + /** + * 更新付费会员订单 + * + * @param updateReqVO 更新信息 + */ + void updatePaidMemberOrder(@Valid PaidMemberOrderSaveReqVO updateReqVO); + + /** + * 删除付费会员订单 + * + * @param id 编号 + */ + void deletePaidMemberOrder(Integer id); + + /** + * 获得付费会员订单 + * + * @param id 编号 + * @return 付费会员订单 + */ + PaidMemberOrderDO getPaidMemberOrder(Integer id); + + /** + * 获得付费会员订单分页 + * + * @param pageReqVO 分页查询 + * @return 付费会员订单分页 + */ + PageResult getPaidMemberOrderPage(PaidMemberOrderPageReqVO pageReqVO); + + /** + * 创建会员支付记录 + * + * @return 编号 + */ + BigDecimal createMemberRecord(Long userId, Integer userType, String userIp, + BigDecimal price, Integer type); + + /** + * 创建付费会员订单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + void createOrder(@Valid PaidMemberOrderDO createReqVO); + + /** + * 更新付费会员订单 + * + * @param updateReqVO 更新信息 + */ + void updateOrder(@Valid PaidMemberOrderDO updateReqVO); + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java new file mode 100644 index 0000000..9d1ad29 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java @@ -0,0 +1,118 @@ +package cn.iocoder.yudao.module.member.service.order; + +import cn.iocoder.yudao.module.member.dal.dataobject.membercardtype.PaidMemberCardTypeDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; +import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeService; +import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.member.dal.mysql.order.PaidMemberOrderMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; + +/** + * 付费会员订单 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class PaidMemberOrderServiceImpl implements PaidMemberOrderService { + + @Resource + private PaidMemberOrderMapper paidMemberOrderMapper; + + @Resource + private PaidMemberCardTypeService typeService; + + @Resource + private PaidMemberUserService paidMemberUserService; + + @Override + public Integer createPaidMemberOrder(PaidMemberOrderSaveReqVO createReqVO) { + // 插入 + PaidMemberOrderDO paidMemberOrder = BeanUtils.toBean(createReqVO, PaidMemberOrderDO.class); + paidMemberOrderMapper.insert(paidMemberOrder); + // 返回 + return paidMemberOrder.getId(); + } + + @Override + public void updatePaidMemberOrder(PaidMemberOrderSaveReqVO updateReqVO) { + // 校验存在 + validatePaidMemberOrderExists(updateReqVO.getId()); + // 更新 + PaidMemberOrderDO updateObj = BeanUtils.toBean(updateReqVO, PaidMemberOrderDO.class); + paidMemberOrderMapper.updateById(updateObj); + } + + @Override + public void deletePaidMemberOrder(Integer id) { + // 校验存在 + validatePaidMemberOrderExists(id); + // 删除 + paidMemberOrderMapper.deleteById(id); + } + + private void validatePaidMemberOrderExists(Integer id) { + if (paidMemberOrderMapper.selectById(id) == null) { + throw exception(PAID_MEMBER_ORDER_NOT_EXISTS); + } + } + + @Override + public PaidMemberOrderDO getPaidMemberOrder(Integer id) { + return paidMemberOrderMapper.selectById(id); + } + + @Override + public PageResult getPaidMemberOrderPage(PaidMemberOrderPageReqVO pageReqVO) { + return paidMemberOrderMapper.selectPage(pageReqVO); + } + + @Override + public BigDecimal createMemberRecord(Long userId, Integer userType, String userIp, + BigDecimal price, Integer type) { + //定义一个支付金额 + BigDecimal payPrice = null; + BigDecimal gitBalance = BigDecimal.valueOf(0);//赠送余额,权益规则还未定 + + if(Objects.nonNull(type)){ + PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getMemberUser(getLoginUserId()); + PaidMemberCardTypeDO paidMemberCardTypeDO =typeService.selectMemberCardType(type,price); + if(paidMemberCardTypeDO.getName().equals("试用")){ + payPrice = paidMemberCardTypeDO.getOriginalPrice(); + }else if (paidMemberUserDO != null){ + payPrice = paidMemberCardTypeDO.getSpecialPrice(); + } + else { + payPrice = paidMemberCardTypeDO.getOriginalPrice(); + } + } + return payPrice; + } + + @Override + public void createOrder(PaidMemberOrderDO createReqVO) { + paidMemberOrderMapper.insert(createReqVO); + } + + @Override + public void updateOrder(PaidMemberOrderDO updateReqVO) { + paidMemberOrderMapper.updateById(updateReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index d8e6dd9..d33d722 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -188,4 +188,5 @@ public interface MemberUserService { boolean updateUserPoint(Long userId, Integer point); void updateUserDo(MemberUserDO user); + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java new file mode 100644 index 0000000..9d20748 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.member.service.user; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 会员 Service 接口 + * + * @author 管理员 + */ +public interface PaidMemberUserService { + + + /** + * 创建会员 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createMemberUser(@Valid PaidMemberUserSaveReqVO createReqVO); + + /** + * 更新会员 + * + * @param updateReqVO 更新信息 + */ + void updateMemberUser(@Valid PaidMemberUserSaveReqVO updateReqVO); + + /** + * 删除会员 + * + * @param id 编号 + */ + void deleteMemberUser(Long id); + + /** + * 获得会员 + * + * @param id 编号 + * @return 会员 + */ + PaidMemberUserDO getMemberUser(Long id); + + +// /** +// * 获得会员分页 +// * +// * @param pageReqVO 分页查询 +// * @return 会员分页 +// */ +// PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java new file mode 100644 index 0000000..fe7410b --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java @@ -0,0 +1,76 @@ +package cn.iocoder.yudao.module.member.service.user; + +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.member.dal.mysql.user.PaidMemberUserMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; + +/** + * 会员 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class PaidMemberUserServiceImpl implements PaidMemberUserService { + + @Resource + private PaidMemberUserMapper paidMemberUserMapper; + + + @Override + public Long createMemberUser(PaidMemberUserSaveReqVO createReqVO) { + // 插入 + PaidMemberUserDO memberUser = BeanUtils.toBean(createReqVO, PaidMemberUserDO.class); + paidMemberUserMapper.insert(memberUser); + // 返回 + return memberUser.getId(); + } + + @Override + public void updateMemberUser(PaidMemberUserSaveReqVO updateReqVO) { + // 校验存在 + validateMemberUserExists(updateReqVO.getId()); + // 更新 + PaidMemberUserDO updateObj = BeanUtils.toBean(updateReqVO, PaidMemberUserDO.class); + paidMemberUserMapper.updateById(updateObj); + } + + @Override + public void deleteMemberUser(Long id) { + // 校验存在 + validateMemberUserExists(id); + // 删除 + paidMemberUserMapper.deleteById(id); + } + + private void validateMemberUserExists(Long id) { + if (paidMemberUserMapper.selectById(id) == null) { + throw exception(MEMBER_USER_NOT_EXISTS); + } + } + + @Override + public PaidMemberUserDO getMemberUser(Long id) { + return paidMemberUserMapper.selectById(id); + } + +// @Override +// public PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO) { +// return memberUserMapper.selectPage(pageReqVO); +// } + +} \ No newline at end of file diff --git a/yudao-module-pay/yudao-module-pay-biz/pom.xml b/yudao-module-pay/yudao-module-pay-biz/pom.xml index 22dc86f..5051ee4 100644 --- a/yudao-module-pay/yudao-module-pay-biz/pom.xml +++ b/yudao-module-pay/yudao-module-pay-biz/pom.xml @@ -70,6 +70,18 @@ cn.iocoder.boot yudao-spring-boot-starter-excel + + + cn.iocoder.boot + yudao-module-member-api + ${revision} + + + + cn.iocoder.boot + yudao-module-member-biz + ${revision} + diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java new file mode 100644 index 0000000..81e2bf7 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java @@ -0,0 +1,132 @@ +package cn.iocoder.yudao.module.pay.controller.app.member; + + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +//import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.PaidMemberUserSaveReqVO; +import cn.iocoder.yudao.module.member.convert.order.PaidMemberOrderConvert; +import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.service.order.PaidMemberOrderService; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; +import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; +import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberOrderReqVO; +import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberOrderRespVO; +import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionPageReqVO; +import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionRespVO; +import cn.iocoder.yudao.module.pay.convert.member.PayMemberOrderConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO; +import cn.iocoder.yudao.module.pay.service.order.PayOrderService; +import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import java.math.BigDecimal; +import java.time.Duration; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime; +import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserType; + +@Tag(name = "用户 APP - 会员支出") +@RestController +@RequestMapping("/pay/member") +@Validated +@Slf4j +public class AppPaidMembeOrderController { + + @Resource + private MemberUserService userService1; + + @Resource + private PaidMemberUserService memberUserService1; + + @Resource + private PaidMemberOrderService paidMemberOrderService1; + + @Resource + private PayWalletService memberWalletService; + + @Resource + private PayOrderService payOrderService01; + + + + + + @PostMapping("/create") + @Operation(summary = "创建会员支付记录(发起支付)") + public CommonResult createcard(@Valid @RequestBody AppPaidMemberOrderReqVO reqVO) { + MemberUserDO memberUserDO = userService1.getUser(getLoginUserId()); + PaidMemberUserSaveReqVO paidMemberUserSaveReqVO = new PaidMemberUserSaveReqVO(); + // 判断当前用户是否选择过试用会员 + if(memberUserDO.getActivate() == 0 && memberUserDO != null){ + memberUserDO.setActivate(CommonStatusEnum.DISABLE.getStatus()); + BeanUtils.copyProperties(memberUserDO,paidMemberUserSaveReqVO); + // 若不是会员则往会员表插入数据 + if(memberUserService1.getMemberUser(memberUserDO.getId()) == null){ + memberUserService1.createMemberUser(paidMemberUserSaveReqVO); + } + } + //判断会员类型 + if(reqVO.getCardName().equals("试用")){ + reqVO.setType(0); + } else if (reqVO.getCardName().equals("永久")) { + reqVO.setType(2); + }else { + reqVO.setType(1); + } + BigDecimal payPrice = paidMemberOrderService1.createMemberRecord(getLoginUserId(), + getLoginUserType(),getClientIP(),reqVO.getPrice(),reqVO.getType()); + BigDecimal p = payPrice.multiply(new BigDecimal("100")); + Integer payPriceInt = p.intValue(); + PayWalletDO walletDO = memberWalletService.getWalletByUserIdAndType(getLoginUserId(),getLoginUserType()); + LocalDateTime payTime = LocalDateTime.now(); + PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), + reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime); + Long payOrderId = payOrderService01.createOrder(new PayOrderCreateReqDTO() + .setAppId(1L).setUserIp(getClientIP()) + .setMerchantOrderId(""+paidMemberOrderDO.getId()) // 业务的订单编号 + .setSubject("会员支付").setBody("") + .setPrice(payPriceInt) + .setExpireTime(addTime(Duration.ofHours(2L)))); // TODO @芋艿:支付超时时间 + paidMemberOrderDO.setPayOrderId(payOrderId); + userService1.updateUserDo(memberUserDO); + paidMemberOrderService1.createOrder(paidMemberOrderDO); + return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberOrderDO)); + +// BigDecimal payPrice = paidMemberOrderService1.createMemberRecord(getLoginUserId(), +// getLoginUserType(),getClientIP(),reqVO.getPrice(),reqVO.getType()); +// BigDecimal p = payPrice.multiply(new BigDecimal("100")); +// Integer payPriceInt = p.intValue(); +// PayWalletDO walletDO = memberWalletService.getWalletByUserIdAndType(getLoginUserId(),getLoginUserType()); +// LocalDateTime payTime = LocalDateTime.now(); +// PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), +// reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime); +// +// Long payOrderId = payOrderService01.createOrder(new PayOrderCreateReqDTO() +// .setAppId(1L).setUserIp(getClientIP()) +// .setMerchantOrderId(""+paidMemberOrderDO.getId()) // 业务的订单编号 +// .setSubject("会员支付").setBody("") +// .setPrice(payPriceInt) +// .setExpireTime(addTime(Duration.ofHours(2L)))); // TODO @芋艿:支付超时时间 +// paidMemberOrderDO.setPayOrderId(payOrderId); +// paidMemberOrderService1.createOrder(paidMemberOrderDO); +// return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberOrderDO)); + } +} diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderReqVO.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderReqVO.java new file mode 100644 index 0000000..97b52dc --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderReqVO.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.pay.controller.app.member.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.Min; +import java.math.BigDecimal; + +@Schema(description = "用户 APP - 会员支付 Request VO") +@Data +public class AppPaidMemberOrderReqVO { + + @Schema(description = "会员卡售价", example = "1000") + @Min(value = 0, message = "会员卡必须大等于零") + private BigDecimal price; + + @Schema(description = "会员卡名称", example = "试用") + private String cardName; + + + @Schema(description = "会员类型", example = "0-试用,1-期限,2-永久") + private Integer type; + +// @Schema(description = "支付方式", example = "weixin,alipay,give,yue") +// private String payType; + + @Schema(description = "支付渠道", example = "公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送") + private String payChannel; +} diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderRespVO.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderRespVO.java new file mode 100644 index 0000000..76f6066 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderRespVO.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.pay.controller.app.member.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "用户 APP - 会员支付 Resp VO") +@Data +public class AppPaidMemberOrderRespVO { + + @Schema(description = "会员支付编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "o100") + private Long payOrderId; +} diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/member/PayMemberOrderConvert.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/member/PayMemberOrderConvert.java new file mode 100644 index 0000000..ba4d88a --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/member/PayMemberOrderConvert.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.pay.convert.member; + +import cn.iocoder.yudao.module.member.controller.admin.order.vo.PaidMemberOrderRespVO; +import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; +import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberOrderRespVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface PayMemberOrderConvert { + + PayMemberOrderConvert INSTANCE = Mappers.getMapper(PayMemberOrderConvert.class); + + AppPaidMemberOrderRespVO convert(PaidMemberOrderDO bean); +} diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java index 89b27af..d871d16 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java @@ -98,6 +98,16 @@ public interface PayWalletService { */ void unfreezePrice(Long id, Integer price); + /** + * 获取钱包信息 + *

+ * 如果不存在,则创建钱包。由于用户注册时候不会创建钱包 + * + * @param userId 用户编号 + * @param userType 用户类型 + */ + PayWalletDO getWalletByUserIdAndType(Long userId, Integer userType); + // /** // * 修改钱包余额(后台操作) // * @param reqVo diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java index c33a887..11ccbe6 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java @@ -226,6 +226,15 @@ public class PayWalletServiceImpl implements PayWalletService { } } + @Override + public PayWalletDO getWalletByUserIdAndType(Long userId, Integer userType) { + PayWalletDO wallet = walletMapper.selectByUserIdAndType(userId, userType); + if (wallet == null) { + throw exception(WALLET_NOT_FOUND); + } + return wallet; + } + // @Override // public void updateWallet(PayWalletUserBalanceVo reqVo) { // // 如果 -- 2.45.2 From 5cb71e0889df4382b30157896c8ae39d0f199017 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Mon, 21 Oct 2024 10:59:45 +0800 Subject: [PATCH 05/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/vo/PaidMemberOrderPageReqVO.java | 2 +- .../admin/order/vo/PaidMemberOrderRespVO.java | 2 +- .../order/vo/PaidMemberOrderSaveReqVO.java | 2 +- .../convert/order/PaidMemberOrderConvert.java | 2 +- .../dataobject/order/PaidMemberOrderDO.java | 2 +- .../PaidMemberCardTypeService.java | 6 +++ .../PaidMemberCardTypeServiceImpl.java | 7 +++ .../service/order/PaidMemberOrderService.java | 7 +++ .../order/PaidMemberOrderServiceImpl.java | 20 ++++++++ .../member/AppPaidMembeOrderController.java | 49 +++++++------------ 10 files changed, 64 insertions(+), 35 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderPageReqVO.java index 9990879..7d07a9b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderPageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderPageReqVO.java @@ -32,7 +32,7 @@ public class PaidMemberOrderPageReqVO extends PageParam { private Integer type; @Schema(description = "期限天数") - private Integer deadlineDay; + private String deadlineDay; @Schema(description = "会员卡原价", example = "16244") private BigDecimal originalPrice; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderRespVO.java index 0d2358e..6e821ed 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderRespVO.java @@ -39,7 +39,7 @@ public class PaidMemberOrderRespVO { @Schema(description = "期限天数", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("期限天数") - private Integer deadlineDay; + private String deadlineDay; @Schema(description = "会员卡原价", requiredMode = Schema.RequiredMode.REQUIRED, example = "16244") @ExcelProperty("会员卡原价") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderSaveReqVO.java index f8a1fb8..8938d92 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/PaidMemberOrderSaveReqVO.java @@ -35,7 +35,7 @@ public class PaidMemberOrderSaveReqVO { @Schema(description = "期限天数", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "期限天数不能为空") - private Integer deadlineDay; + private String deadlineDay; @Schema(description = "会员卡原价", requiredMode = Schema.RequiredMode.REQUIRED, example = "16244") @NotNull(message = "会员卡原价不能为空") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java index 5139eae..62cf15b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java @@ -13,6 +13,6 @@ public interface PaidMemberOrderConvert { PaidMemberOrderConvert INSTANCE = Mappers.getMapper(PaidMemberOrderConvert.class); PaidMemberOrderDO convert(Long uid, String cardName, Integer type, - String payChannel, BigDecimal price, LocalDateTime payTime); + String payChannel, BigDecimal price, LocalDateTime payTime,String deadlineDay,LocalDateTime cardExpirationTime); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java index 2652ae1..7d6005f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java @@ -56,7 +56,7 @@ public class PaidMemberOrderDO extends TenantBaseDO { /** * 期限天数 */ - private Integer deadlineDay; + private String deadlineDay; /** * 会员卡原价 */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java index 110d55f..2a08986 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java @@ -68,4 +68,10 @@ public interface PaidMemberCardTypeService { * @return */ PaidMemberCardTypeDO selectMemberCardType(Integer type, BigDecimal price); + + + /** + * 根据会员卡名查询 + */ + PaidMemberCardTypeDO selectByName(String cardName); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index 1a0c78d..e724a06 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -112,5 +112,12 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService return paidMemberCardTypeDO; } + @Override + public PaidMemberCardTypeDO selectByName(String cardName) { + PaidMemberCardTypeDO paidMemberCardTypeDO = cardMapper.selectOne(new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberCardTypeDO::getName,cardName)); + return paidMemberCardTypeDO; + } + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java index cd09e76..e3f0dce 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.service.order; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import javax.validation.*; import cn.iocoder.yudao.module.member.controller.admin.order.vo.*; @@ -77,4 +78,10 @@ public interface PaidMemberOrderService { */ void updateOrder(@Valid PaidMemberOrderDO updateReqVO); + /** + * 根据订单会员类型 + * 获得到期时间 + */ + LocalDateTime getDeadLineDay(String cardName); + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java index 9d1ad29..679e66b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java @@ -10,6 +10,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; import java.util.*; import cn.iocoder.yudao.module.member.controller.admin.order.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; @@ -115,4 +117,22 @@ public class PaidMemberOrderServiceImpl implements PaidMemberOrderService { paidMemberOrderMapper.updateById(updateReqVO); } + @Override + public LocalDateTime getDeadLineDay(String cardName) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime deadlineDay; + if (cardName.equals("试用")){ + deadlineDay = now.plus(1, ChronoUnit.DAYS); + } else if (cardName.equals("月卡")) { + deadlineDay = now.plus(1,ChronoUnit.MONTHS); + } else if (cardName.equals("季卡")) { + deadlineDay = now.plus(3,ChronoUnit.MONTHS); + } else if (cardName.equals("年卡")) { + deadlineDay = now.plus(1,ChronoUnit.YEARS); + } else { + deadlineDay = null; + } + return deadlineDay; + } + } \ No newline at end of file diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java index 81e2bf7..e9f2f69 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java @@ -10,14 +10,13 @@ import cn.iocoder.yudao.module.member.controller.admin.user.vo.PaidMemberUserSav import cn.iocoder.yudao.module.member.convert.order.PaidMemberOrderConvert; import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeService; import cn.iocoder.yudao.module.member.service.order.PaidMemberOrderService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberOrderReqVO; import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberOrderRespVO; -import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionPageReqVO; -import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionRespVO; import cn.iocoder.yudao.module.pay.convert.member.PayMemberOrderConvert; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO; @@ -65,7 +64,8 @@ public class AppPaidMembeOrderController { @Resource private PayOrderService payOrderService01; - + @Resource + private PaidMemberCardTypeService cardService; @@ -77,11 +77,11 @@ public class AppPaidMembeOrderController { // 判断当前用户是否选择过试用会员 if(memberUserDO.getActivate() == 0 && memberUserDO != null){ memberUserDO.setActivate(CommonStatusEnum.DISABLE.getStatus()); + } + // 若不是会员则往会员表插入数据 + if(memberUserService1.getMemberUser(memberUserDO.getId()) == null){ BeanUtils.copyProperties(memberUserDO,paidMemberUserSaveReqVO); - // 若不是会员则往会员表插入数据 - if(memberUserService1.getMemberUser(memberUserDO.getId()) == null){ - memberUserService1.createMemberUser(paidMemberUserSaveReqVO); - } + memberUserService1.createMemberUser(paidMemberUserSaveReqVO); } //判断会员类型 if(reqVO.getCardName().equals("试用")){ @@ -91,14 +91,22 @@ public class AppPaidMembeOrderController { }else { reqVO.setType(1); } + + //获得对应会员期限天数 + String deadlineDay = cardService.selectByName(reqVO.getCardName()).getVid(); + LocalDateTime payTime = LocalDateTime.now(); + LocalDateTime cardExpirationTime = paidMemberOrderService1.getDeadLineDay(reqVO.getCardName()); + + //获得支付金额 BigDecimal payPrice = paidMemberOrderService1.createMemberRecord(getLoginUserId(), getLoginUserType(),getClientIP(),reqVO.getPrice(),reqVO.getType()); BigDecimal p = payPrice.multiply(new BigDecimal("100")); Integer payPriceInt = p.intValue(); - PayWalletDO walletDO = memberWalletService.getWalletByUserIdAndType(getLoginUserId(),getLoginUserType()); - LocalDateTime payTime = LocalDateTime.now(); +// PayWalletDO walletDO = memberWalletService.getWalletByUserIdAndType(getLoginUserId(),getLoginUserType()); + //订单对象赋值 PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), - reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime); + reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime,deadlineDay,cardExpirationTime); + paidMemberOrderService1.createOrder(paidMemberOrderDO); Long payOrderId = payOrderService01.createOrder(new PayOrderCreateReqDTO() .setAppId(1L).setUserIp(getClientIP()) .setMerchantOrderId(""+paidMemberOrderDO.getId()) // 业务的订单编号 @@ -107,26 +115,7 @@ public class AppPaidMembeOrderController { .setExpireTime(addTime(Duration.ofHours(2L)))); // TODO @芋艿:支付超时时间 paidMemberOrderDO.setPayOrderId(payOrderId); userService1.updateUserDo(memberUserDO); - paidMemberOrderService1.createOrder(paidMemberOrderDO); + paidMemberOrderService1.updateOrder(paidMemberOrderDO); return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberOrderDO)); - -// BigDecimal payPrice = paidMemberOrderService1.createMemberRecord(getLoginUserId(), -// getLoginUserType(),getClientIP(),reqVO.getPrice(),reqVO.getType()); -// BigDecimal p = payPrice.multiply(new BigDecimal("100")); -// Integer payPriceInt = p.intValue(); -// PayWalletDO walletDO = memberWalletService.getWalletByUserIdAndType(getLoginUserId(),getLoginUserType()); -// LocalDateTime payTime = LocalDateTime.now(); -// PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), -// reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime); -// -// Long payOrderId = payOrderService01.createOrder(new PayOrderCreateReqDTO() -// .setAppId(1L).setUserIp(getClientIP()) -// .setMerchantOrderId(""+paidMemberOrderDO.getId()) // 业务的订单编号 -// .setSubject("会员支付").setBody("") -// .setPrice(payPriceInt) -// .setExpireTime(addTime(Duration.ofHours(2L)))); // TODO @芋艿:支付超时时间 -// paidMemberOrderDO.setPayOrderId(payOrderId); -// paidMemberOrderService1.createOrder(paidMemberOrderDO); -// return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberOrderDO)); } } -- 2.45.2 From 3329093c8891e72d0ca990d78147c6c9e8f6fbc8 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Mon, 21 Oct 2024 11:18:46 +0800 Subject: [PATCH 06/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/member/AppPaidMembeOrderController.java | 2 +- .../module/pay/service/wallet/PayWalletService.java | 9 --------- .../module/pay/service/wallet/PayWalletServiceImpl.java | 8 -------- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java index e9f2f69..e04f11f 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java @@ -102,7 +102,7 @@ public class AppPaidMembeOrderController { getLoginUserType(),getClientIP(),reqVO.getPrice(),reqVO.getType()); BigDecimal p = payPrice.multiply(new BigDecimal("100")); Integer payPriceInt = p.intValue(); -// PayWalletDO walletDO = memberWalletService.getWalletByUserIdAndType(getLoginUserId(),getLoginUserType()); +// PayWalletDO walletDO = memberWalletService.getOrCreateWallet(getLoginUserId(),getLoginUserType()); //订单对象赋值 PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime,deadlineDay,cardExpirationTime); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java index d871d16..89f62ca 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java @@ -98,15 +98,6 @@ public interface PayWalletService { */ void unfreezePrice(Long id, Integer price); - /** - * 获取钱包信息 - *

- * 如果不存在,则创建钱包。由于用户注册时候不会创建钱包 - * - * @param userId 用户编号 - * @param userType 用户类型 - */ - PayWalletDO getWalletByUserIdAndType(Long userId, Integer userType); // /** // * 修改钱包余额(后台操作) diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java index 11ccbe6..4cdf001 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java @@ -226,14 +226,6 @@ public class PayWalletServiceImpl implements PayWalletService { } } - @Override - public PayWalletDO getWalletByUserIdAndType(Long userId, Integer userType) { - PayWalletDO wallet = walletMapper.selectByUserIdAndType(userId, userType); - if (wallet == null) { - throw exception(WALLET_NOT_FOUND); - } - return wallet; - } // @Override // public void updateWallet(PayWalletUserBalanceVo reqVo) { -- 2.45.2 From caaca7b31895e8753523935eb728f9348e3f6454 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Mon, 21 Oct 2024 11:34:53 +0800 Subject: [PATCH 07/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/member/convert/order/PaidMemberOrderConvert.java | 3 ++- .../pay/controller/app/member/AppPaidMembeOrderController.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java index 62cf15b..7561fe4 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java @@ -13,6 +13,7 @@ public interface PaidMemberOrderConvert { PaidMemberOrderConvert INSTANCE = Mappers.getMapper(PaidMemberOrderConvert.class); PaidMemberOrderDO convert(Long uid, String cardName, Integer type, - String payChannel, BigDecimal price, LocalDateTime payTime,String deadlineDay,LocalDateTime cardExpirationTime); + String payChannel, BigDecimal price, LocalDateTime payTime, + String deadlineDay,LocalDateTime cardExpirationTime,BigDecimal originalPrice); } diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java index e04f11f..a2d87aa 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java @@ -102,10 +102,11 @@ public class AppPaidMembeOrderController { getLoginUserType(),getClientIP(),reqVO.getPrice(),reqVO.getType()); BigDecimal p = payPrice.multiply(new BigDecimal("100")); Integer payPriceInt = p.intValue(); + BigDecimal originalPrice = cardService.selectByName(reqVO.getCardName()).getOriginalPrice(); // PayWalletDO walletDO = memberWalletService.getOrCreateWallet(getLoginUserId(),getLoginUserType()); //订单对象赋值 PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), - reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime,deadlineDay,cardExpirationTime); + reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime,deadlineDay,cardExpirationTime,originalPrice); paidMemberOrderService1.createOrder(paidMemberOrderDO); Long payOrderId = payOrderService01.createOrder(new PayOrderCreateReqDTO() .setAppId(1L).setUserIp(getClientIP()) -- 2.45.2 From bdbcae287c81069e309ed37344335a8d2a3a11a7 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Mon, 21 Oct 2024 16:01:06 +0800 Subject: [PATCH 08/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../convert/order/PaidMemberOrderConvert.java | 3 +-- .../PaidMemberCardTypeService.java | 7 ------- .../PaidMemberCardTypeServiceImpl.java | 19 ------------------- .../service/order/PaidMemberOrderService.java | 2 +- .../order/PaidMemberOrderServiceImpl.java | 4 ++-- .../member/AppPaidMembeOrderController.java | 5 ++--- 6 files changed, 6 insertions(+), 34 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java index 7561fe4..0f868d1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/order/PaidMemberOrderConvert.java @@ -12,8 +12,7 @@ public interface PaidMemberOrderConvert { PaidMemberOrderConvert INSTANCE = Mappers.getMapper(PaidMemberOrderConvert.class); - PaidMemberOrderDO convert(Long uid, String cardName, Integer type, - String payChannel, BigDecimal price, LocalDateTime payTime, + PaidMemberOrderDO convert(Long uid, String cardName, Integer type, BigDecimal price, LocalDateTime payTime, String deadlineDay,LocalDateTime cardExpirationTime,BigDecimal originalPrice); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java index 2a08986..e88559c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java @@ -62,13 +62,6 @@ public interface PaidMemberCardTypeService { */ List getCardTypeList (Integer activate); - /** - * 根据发起的订单type确定试用、有效期、永久的会员卡 - * @param type - * @return - */ - PaidMemberCardTypeDO selectMemberCardType(Integer type, BigDecimal price); - /** * 根据会员卡名查询 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index e724a06..4f7fa3c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -92,25 +92,6 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService return list; } - @Override - public PaidMemberCardTypeDO selectMemberCardType(Integer type, BigDecimal price) { - PaidMemberCardTypeDO paidMemberCardTypeDO = new PaidMemberCardTypeDO(); - PaidMemberUserDO paidMemberUserDO = paidMemberUserService01.getMemberUser(getLoginUserId()); - if(type == 0){ - paidMemberCardTypeDO =cardMapper.selectOne(new LambdaQueryWrapperX() - .eqIfPresent(PaidMemberCardTypeDO::getName,"试用")); - } else if (type == 1 && paidMemberUserDO == null) { - paidMemberCardTypeDO =cardMapper.selectOne(new LambdaQueryWrapperX() - .eqIfPresent(PaidMemberCardTypeDO::getOriginalPrice,price)); - } else if (type == 1 && paidMemberUserDO != null) { - paidMemberCardTypeDO =cardMapper.selectOne(new LambdaQueryWrapperX() - .eqIfPresent(PaidMemberCardTypeDO::getSpecialPrice,price)); - } else if (type == 2) { - paidMemberCardTypeDO =cardMapper.selectOne(new LambdaQueryWrapperX() - .eqIfPresent(PaidMemberCardTypeDO::getName,"永久")); - } - return paidMemberCardTypeDO; - } @Override public PaidMemberCardTypeDO selectByName(String cardName) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java index e3f0dce..93b6981 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java @@ -61,7 +61,7 @@ public interface PaidMemberOrderService { * @return 编号 */ BigDecimal createMemberRecord(Long userId, Integer userType, String userIp, - BigDecimal price, Integer type); + Integer type,String cardName); /** * 创建付费会员订单 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java index 679e66b..96bec75 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java @@ -87,14 +87,14 @@ public class PaidMemberOrderServiceImpl implements PaidMemberOrderService { @Override public BigDecimal createMemberRecord(Long userId, Integer userType, String userIp, - BigDecimal price, Integer type) { + Integer type, String cardName) { //定义一个支付金额 BigDecimal payPrice = null; BigDecimal gitBalance = BigDecimal.valueOf(0);//赠送余额,权益规则还未定 if(Objects.nonNull(type)){ PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getMemberUser(getLoginUserId()); - PaidMemberCardTypeDO paidMemberCardTypeDO =typeService.selectMemberCardType(type,price); + PaidMemberCardTypeDO paidMemberCardTypeDO =typeService.selectByName(cardName); if(paidMemberCardTypeDO.getName().equals("试用")){ payPrice = paidMemberCardTypeDO.getOriginalPrice(); }else if (paidMemberUserDO != null){ diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java index a2d87aa..d9818d8 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java @@ -68,7 +68,6 @@ public class AppPaidMembeOrderController { private PaidMemberCardTypeService cardService; - @PostMapping("/create") @Operation(summary = "创建会员支付记录(发起支付)") public CommonResult createcard(@Valid @RequestBody AppPaidMemberOrderReqVO reqVO) { @@ -99,14 +98,14 @@ public class AppPaidMembeOrderController { //获得支付金额 BigDecimal payPrice = paidMemberOrderService1.createMemberRecord(getLoginUserId(), - getLoginUserType(),getClientIP(),reqVO.getPrice(),reqVO.getType()); + getLoginUserType(),getClientIP(),reqVO.getType(),reqVO.getCardName()); BigDecimal p = payPrice.multiply(new BigDecimal("100")); Integer payPriceInt = p.intValue(); BigDecimal originalPrice = cardService.selectByName(reqVO.getCardName()).getOriginalPrice(); // PayWalletDO walletDO = memberWalletService.getOrCreateWallet(getLoginUserId(),getLoginUserType()); //订单对象赋值 PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), - reqVO.getCardName(),reqVO.getType(),reqVO.getPayChannel(),reqVO.getPrice(),payTime,deadlineDay,cardExpirationTime,originalPrice); + reqVO.getCardName(),reqVO.getType(),reqVO.getPrice(),payTime,deadlineDay,cardExpirationTime,originalPrice); paidMemberOrderService1.createOrder(paidMemberOrderDO); Long payOrderId = payOrderService01.createOrder(new PayOrderCreateReqDTO() .setAppId(1L).setUserIp(getClientIP()) -- 2.45.2 From 89b94e856b35e4b71cb507d261fa00dc178fa38c Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Mon, 21 Oct 2024 19:19:44 +0800 Subject: [PATCH 09/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E6=94=AF=E4=BB=98(?= =?UTF-8?q?=E8=AF=95=E7=94=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/service/order/PaidMemberOrderService.java | 6 ++++++ .../service/order/PaidMemberOrderServiceImpl.java | 12 ++++++++++++ .../app/member/AppPaidMembeOrderController.java | 9 ++++++++- .../app/member/vo/AppPaidMemberOrderRespVO.java | 5 +++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java index 93b6981..62c9384 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java @@ -84,4 +84,10 @@ public interface PaidMemberOrderService { */ LocalDateTime getDeadLineDay(String cardName); + + /** + * 根据id获取对应的会员订单 + */ + PaidMemberOrderDO getPaidMemeberOrder(Long id); + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java index 96bec75..7312a9d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.membercardtype.PaidMemberCa import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeService; import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -32,6 +33,7 @@ import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; */ @Service @Validated +@Slf4j public class PaidMemberOrderServiceImpl implements PaidMemberOrderService { @Resource @@ -135,4 +137,14 @@ public class PaidMemberOrderServiceImpl implements PaidMemberOrderService { return deadlineDay; } + @Override + public PaidMemberOrderDO getPaidMemeberOrder(Long id) { + PaidMemberOrderDO paidMemberOrderDO = paidMemberOrderMapper.selectById(id); + if (paidMemberOrderDO == null){ + log.error("[getPaidMemeberOrder][会员支付订单记录不存在,会员支付订单记录 id({})]",id); + throw exception(PAID_MEMBER_ORDER_NOT_EXISTS); + } + return paidMemberOrderDO; + } + } \ No newline at end of file diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java index d9818d8..3f14799 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java @@ -74,8 +74,15 @@ public class AppPaidMembeOrderController { MemberUserDO memberUserDO = userService1.getUser(getLoginUserId()); PaidMemberUserSaveReqVO paidMemberUserSaveReqVO = new PaidMemberUserSaveReqVO(); // 判断当前用户是否选择过试用会员 - if(memberUserDO.getActivate() == 0 && memberUserDO != null){ + if(memberUserDO.getActivate() == 0 && memberUserDO != null && reqVO.getCardName().equals("试用")){ + //试用会员 memberUserDO.setActivate(CommonStatusEnum.DISABLE.getStatus()); + }else if(reqVO.getCardName().equals("永久")){ + //永久会员 + memberUserDO.setActivate(3); + }else { + //有效期会员 + memberUserDO.setActivate(2); } // 若不是会员则往会员表插入数据 if(memberUserService1.getMemberUser(memberUserDO.getId()) == null){ diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderRespVO.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderRespVO.java index 76f6066..e431c02 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderRespVO.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderRespVO.java @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.pay.controller.app.member.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.time.LocalDateTime; + @Schema(description = "用户 APP - 会员支付 Resp VO") @Data public class AppPaidMemberOrderRespVO { @@ -12,4 +14,7 @@ public class AppPaidMemberOrderRespVO { @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "o100") private Long payOrderId; + + @Schema(description = "到期时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime cardExpirationTime; } -- 2.45.2 From 9d92e8c7f0103611093dc46799d882adce9f728b Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Tue, 22 Oct 2024 18:04:01 +0800 Subject: [PATCH 10/24] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/PaidMemberOrderController.java | 2 +- .../app/type/AppMemberCardTypeController.java | 6 ++- .../dataobject/order/PaidMemberOrderDO.java | 2 +- .../PaidMemberCardTypeMapper.java | 3 ++ .../PaidMemberCardTypeService.java | 9 ++++ .../PaidMemberCardTypeServiceImpl.java | 14 +++++ .../service/order/PaidMemberOrderService.java | 2 +- .../order/PaidMemberOrderServiceImpl.java | 2 +- .../member/AppPaidMembeOrderController.java | 52 ++++++++++++++++++- .../member/vo/AppPaidMemberOrderRespVO.java | 10 +++- .../member/vo/AppPaidMemeberOrderReqDto.java | 34 ++++++++++++ .../convert/member/PayMemberOrderConvert.java | 4 +- 12 files changed, 131 insertions(+), 9 deletions(-) create mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemeberOrderReqDto.java diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/PaidMemberOrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/PaidMemberOrderController.java index 3dcf866..ea85d49 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/PaidMemberOrderController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/PaidMemberOrderController.java @@ -41,7 +41,7 @@ public class PaidMemberOrderController { @PostMapping("/create") @Operation(summary = "创建付费会员订单") @PreAuthorize("@ss.hasPermission('member:paid-member-order:create')") - public CommonResult createPaidMemberOrder(@Valid @RequestBody PaidMemberOrderSaveReqVO createReqVO) { + public CommonResult createPaidMemberOrder(@Valid @RequestBody PaidMemberOrderSaveReqVO createReqVO) { return success(paidMemberOrderService.createPaidMemberOrder(createReqVO)); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java index d009e45..907f4d1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java @@ -34,11 +34,15 @@ public class AppMemberCardTypeController { @GetMapping("/list") @Operation(summary = "获得会员卡类型列表") - public CommonResult> list() { + public CommonResult> list(@RequestParam(value = "name", required = false) String name) { /** 查询状态为启用的会员卡类型列表 */ MemberUserDO memberUserDO = userService.getUser(getLoginUserId()); /** 根据用户查询是否有试用会员的类型列表 */ List list = cardService.getCardTypeList(memberUserDO.getActivate()); + if(!name.isEmpty()){ + //根据用户查询是否有有效期会员的类型列表 + list = cardService.getCardTypeList2(memberUserDO.getActivate(),name); + } return success(MemberCardTypeConvert.INSTANCE.convertList(list)); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java index 7d6005f..2a1054a 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/PaidMemberOrderDO.java @@ -32,7 +32,7 @@ public class PaidMemberOrderDO extends TenantBaseDO { * 编号 */ @TableId - private Integer id; + private Long id; /** * 用户UID */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/membercardtype/PaidMemberCardTypeMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/membercardtype/PaidMemberCardTypeMapper.java index 963f291..6ec9dbe 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/membercardtype/PaidMemberCardTypeMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/membercardtype/PaidMemberCardTypeMapper.java @@ -38,4 +38,7 @@ public interface PaidMemberCardTypeMapper extends BaseMapperX getCardTypeList (Integer activate); + /** + * 根据用户是否使用有效期会员 + * 查询会员类型列表 + * @param activate + * @return + */ + List getCardTypeList2 (Integer activate,String name); + + /** * 根据会员卡名查询 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index 4f7fa3c..273370c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -92,6 +92,20 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService return list; } + @Override + public List getCardTypeList2(Integer activate,String name) { + List list = new ArrayList<>(); + Integer status = 1; + if (activate == 2){ + list = cardMapper.selectList(new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberCardTypeDO::getStatus,status) + .neIfPresent(PaidMemberCardTypeDO::getName,name) + .neIfPresent(PaidMemberCardTypeDO::getName,"试用") + .orderByAsc(PaidMemberCardTypeDO::getId)); + } + return list; + } + @Override public PaidMemberCardTypeDO selectByName(String cardName) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java index 62c9384..be1e653 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java @@ -23,7 +23,7 @@ public interface PaidMemberOrderService { * @param createReqVO 创建信息 * @return 编号 */ - Integer createPaidMemberOrder(@Valid PaidMemberOrderSaveReqVO createReqVO); + Long createPaidMemberOrder(@Valid PaidMemberOrderSaveReqVO createReqVO); /** * 更新付费会员订单 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java index 7312a9d..16d56d5 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java @@ -46,7 +46,7 @@ public class PaidMemberOrderServiceImpl implements PaidMemberOrderService { private PaidMemberUserService paidMemberUserService; @Override - public Integer createPaidMemberOrder(PaidMemberOrderSaveReqVO createReqVO) { + public Long createPaidMemberOrder(PaidMemberOrderSaveReqVO createReqVO) { // 插入 PaidMemberOrderDO paidMemberOrder = BeanUtils.toBean(createReqVO, PaidMemberOrderDO.class); paidMemberOrderMapper.insert(paidMemberOrder); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java index 3f14799..97abc0b 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; //import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; import cn.iocoder.yudao.module.member.controller.admin.user.vo.PaidMemberUserSaveReqVO; import cn.iocoder.yudao.module.member.convert.order.PaidMemberOrderConvert; import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; @@ -14,10 +15,13 @@ import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeS import cn.iocoder.yudao.module.member.service.order.PaidMemberOrderService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; +import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO; import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberOrderReqVO; import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberOrderRespVO; +import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemeberOrderReqDto; import cn.iocoder.yudao.module.pay.convert.member.PayMemberOrderConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO; import cn.iocoder.yudao.module.pay.service.order.PayOrderService; @@ -30,17 +34,23 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.annotation.security.PermitAll; import javax.validation.Valid; import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDateTime; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserType; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.PAID_MEMBER_ORDER_NOT_EXISTS; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.WALLET_BALANCE_NOT_ENOUGH; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.WALLET_NOT_FOUND; +import static cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum.PAYMENT; @Tag(name = "用户 APP - 会员支出") @RestController @@ -67,6 +77,9 @@ public class AppPaidMembeOrderController { @Resource private PaidMemberCardTypeService cardService; + @Resource + private PayWalletService payWalletService; + @PostMapping("/create") @Operation(summary = "创建会员支付记录(发起支付)") @@ -112,7 +125,7 @@ public class AppPaidMembeOrderController { // PayWalletDO walletDO = memberWalletService.getOrCreateWallet(getLoginUserId(),getLoginUserType()); //订单对象赋值 PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), - reqVO.getCardName(),reqVO.getType(),reqVO.getPrice(),payTime,deadlineDay,cardExpirationTime,originalPrice); + reqVO.getCardName(),reqVO.getType(),payPrice,payTime,deadlineDay,cardExpirationTime,originalPrice); paidMemberOrderService1.createOrder(paidMemberOrderDO); Long payOrderId = payOrderService01.createOrder(new PayOrderCreateReqDTO() .setAppId(1L).setUserIp(getClientIP()) @@ -123,6 +136,41 @@ public class AppPaidMembeOrderController { paidMemberOrderDO.setPayOrderId(payOrderId); userService1.updateUserDo(memberUserDO); paidMemberOrderService1.updateOrder(paidMemberOrderDO); - return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberOrderDO)); + return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberOrderDO.getId(),paidMemberOrderDO.getPayOrderId() + ,paidMemberOrderDO.getCardExpirationTime(),memberUserDO.getActivate())); } + + @PostMapping("/update") + @Operation(summary = "更新会员订单未支付为已支付") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob + public CommonResult updatePaidMemberOrder(@Valid @RequestBody AppPaidMemeberOrderReqDto notifyReqDTO){ + //获取订单记录 + PaidMemberOrderDO paidMemberOrderDO = paidMemberOrderService1.getPaidMemeberOrder(Long.valueOf(notifyReqDTO.getMerchantOrderId())); + if(paidMemberOrderDO == null){ + log.error("[updatePaidMemberOrder],updateReqVO({}) 付费会员订单不存在."); + throw exception(PAID_MEMBER_ORDER_NOT_EXISTS); + } + BigDecimal decimalprice = paidMemberOrderDO.getPrice(); + Integer price = decimalprice.multiply(new BigDecimal("100")).intValue(); +// 校验钱包充值是否可以支付 + PayWalletDO walletDO = payWalletService.getOrCreateWallet(WebFrameworkUtils.getLoginUserId(),getLoginUserType()); + if(walletDO == null){ + log.error("[updatePaidMemberOrder],updateReqVO({}) 用户钱包不存在."); + throw exception(WALLET_NOT_FOUND); + } + if(walletDO.getBalance() Date: Tue, 22 Oct 2024 22:55:57 +0800 Subject: [PATCH 11/24] =?UTF-8?q?=E4=BD=99=E9=A2=9D=E5=85=85=E5=80=BC?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=9C=AA=E6=94=AF=E4=BB=98=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=A2=9E=E5=8A=A0=E4=BD=99=E9=A2=9D=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/order/PayOrderServiceImpl.java | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java index 6a6dbb9..c677372 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.pay.core.client.PayClient; import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO; @@ -149,7 +150,17 @@ public class PayOrderServiceImpl implements PayOrderService { // 1.32 校验支付渠道是否有效 PayChannelDO channel = validateChannelCanSubmit(order.getAppId(), reqVO.getChannelCode()); PayClient client = channelService.getPayClient(channel.getId()); - + // 如果订单扩展里面已经存在该订单号的订单扩展(正在等待),则关闭已有的订单扩展,然后再创建(解决先点击微信支付,然后再使用余额支付会产生两个扩展订单的bug) + LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); + wrapperX.eq(PayOrderExtensionDO::getOrderId, order.getId()).eq(PayOrderExtensionDO::getStatus, PayOrderStatusEnum.WAITING.getStatus()); + List existOrderExtensionList = orderExtensionMapper.selectList(wrapperX); + if (existOrderExtensionList != null){ + // 考虑到这种重复的扩展订单一般就一个(最大值取决与支付方式个数),所以不使用批处理插入 + for (PayOrderExtensionDO payOrderExtensionDO : existOrderExtensionList) { + payOrderExtensionDO.setStatus(PayOrderStatusEnum.CLOSED.getStatus()); + orderExtensionMapper.updateById(payOrderExtensionDO); + } + } // 2. 插入 PayOrderExtensionDO String no = noRedisDAO.generate(payProperties.getOrderNoPrefix()); PayOrderExtensionDO orderExtension = PayOrderConvert.INSTANCE.convert(reqVO, userIp) @@ -262,13 +273,19 @@ public class PayOrderServiceImpl implements PayOrderService { PayChannelDO channel = channelService.validPayChannel(channelId); // 更新支付订单为已支付 TenantUtils.execute(channel.getTenantId(), () -> getSelf().notifyOrder(channel, notify)); + // 获取订单扩展 PayOrderExtensionDO payOrderExtensionDO = orderExtensionMapper.selectByNo(notify.getOutTradeNo()); - PayWalletRechargeDO walletRechargeDO = walletRechargeMapper.selectOne("pay_order_id", payOrderExtensionDO.getOrderId()); - if (walletRechargeDO != null){ - walletRechargeDO.setPayStatus(true); - walletRechargeDO.setPayTime(LocalDateTime.now()); - walletRechargeMapper.updateById(walletRechargeDO); - payWalletService.addWalletBalance(walletRechargeDO.getWalletId(),walletRechargeDO.getPayOrderId().toString(),RECHARGE,walletRechargeDO.getTotalPrice()); + // 判断订单是否更新为已支付 + if (Objects.equals(PayOrderStatusEnum.SUCCESS.getStatus(), orderMapper.selectById(payOrderExtensionDO.getOrderId()).getStatus())){ + + // 充值判断 + PayWalletRechargeDO walletRechargeDO = walletRechargeMapper.selectOne("pay_order_id", payOrderExtensionDO.getOrderId()); + if (walletRechargeDO != null){ + walletRechargeDO.setPayStatus(true); + walletRechargeDO.setPayTime(LocalDateTime.now()); + walletRechargeMapper.updateById(walletRechargeDO); + payWalletService.addWalletBalance(walletRechargeDO.getWalletId(),walletRechargeDO.getPayOrderId().toString(),RECHARGE,walletRechargeDO.getTotalPrice()); + } } } -- 2.45.2 From 94650851360b586d69af16ee9ba6207643321221 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Wed, 23 Oct 2024 10:25:48 +0800 Subject: [PATCH 12/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/vo/PaidMemberUserSaveReqVO.java | 24 ++++++++++++++ .../app/type/AppMemberCardTypeController.java | 4 +-- .../dal/dataobject/user/PaidMemberUserDO.java | 32 +++++++++++++++++++ .../PaidMemberCardTypeServiceImpl.java | 1 + 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java index 4d8e824..aa184f0 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java @@ -7,6 +7,8 @@ import javax.validation.constraints.*; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + @Schema(description = "管理后台 - 会员新增/修改 Request VO") @Data public class PaidMemberUserSaveReqVO { @@ -71,4 +73,26 @@ public class PaidMemberUserSaveReqVO { @Schema(description = "用户分组编号", example = "27409") private Long groupId; + @Schema(description = "是否支付", example = "0:未支付,1:已支付") + private Boolean paid; + + @Schema(description = "支付时间", example = "2024-11-22 09:30:05") + private LocalDateTime payTime; + + @Schema(description = "到期时间", example = "2024-11-22 09:30:05") + private LocalDateTime cardExpirationTime; + + + @Schema(description = "支付金额,单位为分", example = "10") + private Integer price; + + @Schema(description = "期限天数", example = "10") + private String deadlineDay ; + + @Schema(description = "支付方式", example = "免费领取") + private String payType; + + @Schema(description = "支付渠道", example = "public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付") + private String payChannel; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java index 907f4d1..6bd33b2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java @@ -34,12 +34,12 @@ public class AppMemberCardTypeController { @GetMapping("/list") @Operation(summary = "获得会员卡类型列表") - public CommonResult> list(@RequestParam(value = "name", required = false) String name) { + public CommonResult> list(@RequestParam(value = "name",required = false) String name) { /** 查询状态为启用的会员卡类型列表 */ MemberUserDO memberUserDO = userService.getUser(getLoginUserId()); /** 根据用户查询是否有试用会员的类型列表 */ List list = cardService.getCardTypeList(memberUserDO.getActivate()); - if(!name.isEmpty()){ + if(name != null){ //根据用户查询是否有有效期会员的类型列表 list = cardService.getCardTypeList2(memberUserDO.getActivate(),name); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java index 22b87e2..8113753 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.dal.dataobject.user; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -107,4 +108,35 @@ public class PaidMemberUserDO extends TenantBaseDO { */ private Long groupId; + /** + * 是否支付,0:未支付,1:已支付 + * */ + private Boolean paid; + + /* + * 支付时间 + * */ + private LocalDateTime payTime; + /** + * 到期时间 + */ + private LocalDateTime cardExpirationTime; + /** + * 支付金额,单位为分 + */ + private Integer price; + /** + * 期限天数 + */ + private String deadlineDay ; + /** + * 支付方式 + */ + private String payType; + /** + * 支付渠道 + */ + private String payChannel; + + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index 273370c..db1c064 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -111,6 +111,7 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService public PaidMemberCardTypeDO selectByName(String cardName) { PaidMemberCardTypeDO paidMemberCardTypeDO = cardMapper.selectOne(new LambdaQueryWrapperX() .eqIfPresent(PaidMemberCardTypeDO::getName,cardName)); + validatecardExists(paidMemberCardTypeDO.getId()); return paidMemberCardTypeDO; } -- 2.45.2 From 2f62a01f02c47ff7d8cdd48d2dcc38b34aa8ac6c Mon Sep 17 00:00:00 2001 From: XinWei <2718030729@qq.com> Date: Wed, 23 Oct 2024 10:53:38 +0800 Subject: [PATCH 13/24] =?UTF-8?q?=E6=94=AF=E4=BB=98=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/channel/AppPayChannelController.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/channel/AppPayChannelController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/channel/AppPayChannelController.java index 12323a7..c53d091 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/channel/AppPayChannelController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/channel/AppPayChannelController.java @@ -31,8 +31,15 @@ public class AppPayChannelController { @GetMapping("/get-enable-code-list") @Operation(summary = "获得指定应用的开启的支付渠道编码列表") @Parameter(name = "appId", description = "应用编号", required = true, example = "1") - public CommonResult> getEnableChannelCodeList(@RequestParam("appId") Long appId) { + public CommonResult> getEnableChannelCodeList(@RequestParam("appId") Long appId, @RequestParam(value = "hideWalletPay", defaultValue = "false") Boolean hideWalletPay) { List channels = channelService.getEnableChannelList(appId); + if (hideWalletPay) { + for (int i = channels.size() - 1; i >= 0; i--) { + if ("wallet".equals(channels.get(i).getCode())) { + channels.remove(i); + } + } + } return success(convertSet(channels, PayChannelDO::getCode)); } -- 2.45.2 From 8f6e7e168a315e7271c29f804380820f055a5354 Mon Sep 17 00:00:00 2001 From: XinWei <2718030729@qq.com> Date: Wed, 23 Oct 2024 12:53:21 +0800 Subject: [PATCH 14/24] =?UTF-8?q?=E5=AE=A2=E6=9C=8D-=E6=9C=80=E8=BF=91?= =?UTF-8?q?=E6=B5=8F=E8=A7=88-=E5=AD=97=E6=AE=B5=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProductBrowseHistoryController.java | 34 +++++++++++++++++-- .../vo/ProductBrowseHistoryRespVO.java | 14 ++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/history/ProductBrowseHistoryController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/history/ProductBrowseHistoryController.java index e0d47f4..7bfb2d3 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/history/ProductBrowseHistoryController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/history/ProductBrowseHistoryController.java @@ -1,12 +1,16 @@ package cn.iocoder.yudao.module.product.controller.admin.history; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.product.controller.admin.history.vo.ProductBrowseHistoryPageReqVO; import cn.iocoder.yudao.module.product.controller.admin.history.vo.ProductBrowseHistoryRespVO; +import cn.iocoder.yudao.module.product.controller.app.history.vo.AppProductBrowseHistoryRespVO; import cn.iocoder.yudao.module.product.dal.dataobject.history.ProductBrowseHistoryDO; +import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.service.history.ProductBrowseHistoryService; +import cn.iocoder.yudao.module.product.service.spu.ProductSpuService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.security.access.prepost.PreAuthorize; @@ -18,7 +22,11 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.*; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Tag(name = "管理后台 - 商品浏览记录") @RestController @@ -28,13 +36,35 @@ public class ProductBrowseHistoryController { @Resource private ProductBrowseHistoryService browseHistoryService; - + @Resource + private ProductSpuService productSpuService; @GetMapping("/page") @Operation(summary = "获得商品浏览记录分页") @PreAuthorize("@ss.hasPermission('product:browse-history:query')") public CommonResult> getBrowseHistoryPage(@Valid ProductBrowseHistoryPageReqVO pageReqVO) { PageResult pageResult = browseHistoryService.getBrowseHistoryPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ProductBrowseHistoryRespVO.class)); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty()); + } + // 创建空结果列表 + List resultList = new ArrayList<>(); + // 得到商品 spu 信息 + Set spuIds = convertSet(pageResult.getList(), ProductBrowseHistoryDO::getSpuId); + // 得到集合 + Map spuMap = convertMap(productSpuService.getSpuList(spuIds), ProductSpuDO::getId); + + for (ProductBrowseHistoryRespVO productBrowseHistoryRespVO : BeanUtils.toBean(pageResult.getList(), ProductBrowseHistoryRespVO.class)) { + ProductSpuDO productSpuDO = spuMap.get(productBrowseHistoryRespVO.getSpuId()); + productBrowseHistoryRespVO.setPicUrl(productSpuDO.getPicUrl()); + productBrowseHistoryRespVO.setPrice(productSpuDO.getPrice()); + productBrowseHistoryRespVO.setSpuName(productSpuDO.getName()); + productBrowseHistoryRespVO.setIntroduction(productSpuDO.getIntroduction()); + resultList.add(productBrowseHistoryRespVO); + } + PageResult result = new PageResult<>(); + result.setTotal(pageResult.getTotal()); + result.setList(resultList); + return success(result); } } \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/history/vo/ProductBrowseHistoryRespVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/history/vo/ProductBrowseHistoryRespVO.java index 0e2e0cb..d5e659b 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/history/vo/ProductBrowseHistoryRespVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/history/vo/ProductBrowseHistoryRespVO.java @@ -31,4 +31,18 @@ public class ProductBrowseHistoryRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + // ========== 商品相关字段 ========== + + @Schema(description = "商品 SPU 名称", example = "赵六") + private String spuName; + + @Schema(description = "商品封面图", example = "https://domain/pic.png") + private String picUrl; + + @Schema(description = "商品单价", example = "100") + private Integer price; + + @Schema(description = "介绍", example = "100") + private String introduction; + } \ No newline at end of file -- 2.45.2 From e0bac9998e0e0f4ef8344b16fa0d2e27393fa395 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Wed, 23 Oct 2024 14:07:18 +0800 Subject: [PATCH 15/24] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/enums/ErrorCodeConstants.java | 4 + .../PaidMemberCardTypeController.java | 14 +- .../user/vo/PaidMemberUserSaveReqVO.java | 6 + .../dal/dataobject/user/MemberUserDO.java | 2 +- .../dal/dataobject/user/PaidMemberUserDO.java | 8 + .../PaidMemberCardTypeServiceImpl.java | 2 - .../service/order/PaidMemberOrderService.java | 14 +- .../order/PaidMemberOrderServiceImpl.java | 76 ++++---- .../service/user/PaidMemberUserService.java | 10 + .../user/PaidMemberUserServiceImpl.java | 62 +++++- .../app/member/AppPaidMembeController.java | 146 +++++++++++++++ .../member/AppPaidMembeOrderController.java | 176 ------------------ .../member/vo/AppPaidMemberCreateReqVO.java | 15 ++ ...VO.java => AppPaidMemberCreateRespVO.java} | 9 +- .../member/vo/AppPaidMemberOrderReqVO.java | 29 --- .../member/vo/AppPaidMemeberOrderReqDto.java | 16 +- .../convert/member/PayMemberOrderConvert.java | 4 +- 17 files changed, 316 insertions(+), 277 deletions(-) create mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java delete mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeOrderController.java create mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberCreateReqVO.java rename yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/{AppPaidMemberOrderRespVO.java => AppPaidMemberCreateRespVO.java} (74%) delete mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberOrderReqVO.java diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index 5b7bc4d..20995c4 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -68,4 +68,8 @@ public interface ErrorCodeConstants { ErrorCode CARD_NOT_EXISTS = new ErrorCode(1_004_020_000, "会员卡类型不存在"); ErrorCode MEMBER_USER_NOT_EXISTS = new ErrorCode(1_004_021_000, "会员不存在"); ErrorCode PAID_MEMBER_ORDER_NOT_EXISTS = new ErrorCode(1_004_022_000, "付费会员订单不存在"); + + ErrorCode PAID_MEMBER_USER_ORDER_NO_NOT_EXISTS = new ErrorCode(1_004_023_000, "生成会员订单号失败,请重新提交"); + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/membercardtype/PaidMemberCardTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/membercardtype/PaidMemberCardTypeController.java index cc4af4a..0a50621 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/membercardtype/PaidMemberCardTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/membercardtype/PaidMemberCardTypeController.java @@ -34,20 +34,20 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; public class PaidMemberCardTypeController { @Resource - private PaidMemberCardTypeService cardService; + private PaidMemberCardTypeService cardTypeService; @PostMapping("/create") @Operation(summary = "创建会员卡类型") @PreAuthorize("@ss.hasPermission('member:paid-member-card-type:create')") public CommonResult createcard(@Valid @RequestBody PaidMemberCardTypeSaveReqVO createReqVO) { - return success(cardService.createcard(createReqVO)); + return success(cardTypeService.createcard(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新会员卡类型") @PreAuthorize("@ss.hasPermission('member:paid-member-card-type:update')") public CommonResult updatecard(@Valid @RequestBody PaidMemberCardTypeSaveReqVO updateReqVO) { - cardService.updatecard(updateReqVO); + cardTypeService.updatecard(updateReqVO); return success(true); } @@ -58,7 +58,7 @@ public class PaidMemberCardTypeController { @PreAuthorize("@ss.hasPermission('member:paid-member-card-type:delete')") public CommonResult deletecard(@RequestParam("id") long memberCardId) { System.out.println(memberCardId); - cardService.deletecard(memberCardId); + cardTypeService.deletecard(memberCardId); return success(true); } @@ -67,7 +67,7 @@ public class PaidMemberCardTypeController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('member:paid-member-card-type:query')") public CommonResult getcard(@RequestParam("id") Long id) { - PaidMemberCardTypeDO card = cardService.getcard(id); + PaidMemberCardTypeDO card = cardTypeService.getcard(id); return success(BeanUtils.toBean(card, PaidMemberCardTypeRespVO.class)); } @@ -75,7 +75,7 @@ public class PaidMemberCardTypeController { @Operation(summary = "获得会员卡类型分页") @PreAuthorize("@ss.hasPermission('member:paid-member-card-type:query')") public CommonResult> getcardPage(@Valid PaidMemberCardTypePageReqVO pageReqVO) { - PageResult pageResult = cardService.getcardPage(pageReqVO); + PageResult pageResult = cardTypeService.getcardPage(pageReqVO); return success(BeanUtils.toBean(pageResult, PaidMemberCardTypeRespVO.class)); } @@ -86,7 +86,7 @@ public class PaidMemberCardTypeController { public void exportcardExcel(@Valid PaidMemberCardTypePageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = cardService.getcardPage(pageReqVO).getList(); + List list = cardTypeService.getcardPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "会员卡类型.xls", "数据", PaidMemberCardTypeRespVO.class, BeanUtils.toBean(list, PaidMemberCardTypeRespVO.class)); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java index aa184f0..e495ec3 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java @@ -16,6 +16,9 @@ public class PaidMemberUserSaveReqVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12209") private Long id; + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12209") + private Long uid; + @Schema(description = "手机号") private String mobile; @@ -95,4 +98,7 @@ public class PaidMemberUserSaveReqVO { @Schema(description = "支付渠道", example = "public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付") private String payChannel; + @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) + private String orderNo; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java index bf8732e..f619f1d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java @@ -143,7 +143,7 @@ public class MemberUserDO extends TenantBaseDO { private Long groupId; /** - * 是否绑过卡,是否开通过试用会员 + * 是否绑过卡,是否开通过会员(0:未开通,1:试用,2:有效期,3:永久) */ private Integer activate; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java index 8113753..d1fbc00 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java @@ -31,6 +31,10 @@ public class PaidMemberUserDO extends TenantBaseDO { */ @TableId private Long id; + /** + * 用户编号 + */ + private Long uid; /** * 手机号 */ @@ -137,6 +141,10 @@ public class PaidMemberUserDO extends TenantBaseDO { * 支付渠道 */ private String payChannel; + /** + * 订单号 + */ + private String orderNo; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index db1c064..2f3b10e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -34,8 +34,6 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService @Resource private PaidMemberCardTypeMapper cardMapper; - @Resource - private PaidMemberUserService paidMemberUserService01; @Override public Long createcard(PaidMemberCardTypeSaveReqVO createReqVO) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java index be1e653..64abcab 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderService.java @@ -60,8 +60,8 @@ public interface PaidMemberOrderService { * * @return 编号 */ - BigDecimal createMemberRecord(Long userId, Integer userType, String userIp, - Integer type,String cardName); +// BigDecimal createMemberRecord(Long userId, Integer userType, String userIp, +// Integer type,String cardName); /** * 创建付费会员订单 @@ -78,11 +78,11 @@ public interface PaidMemberOrderService { */ void updateOrder(@Valid PaidMemberOrderDO updateReqVO); - /** - * 根据订单会员类型 - * 获得到期时间 - */ - LocalDateTime getDeadLineDay(String cardName); +// /** +// * 根据订单会员类型 +// * 获得到期时间 +// */ +// LocalDateTime getDeadLineDay(String cardName); /** diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java index 16d56d5..ef2e37e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/PaidMemberOrderServiceImpl.java @@ -87,27 +87,27 @@ public class PaidMemberOrderServiceImpl implements PaidMemberOrderService { return paidMemberOrderMapper.selectPage(pageReqVO); } - @Override - public BigDecimal createMemberRecord(Long userId, Integer userType, String userIp, - Integer type, String cardName) { - //定义一个支付金额 - BigDecimal payPrice = null; - BigDecimal gitBalance = BigDecimal.valueOf(0);//赠送余额,权益规则还未定 - - if(Objects.nonNull(type)){ - PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getMemberUser(getLoginUserId()); - PaidMemberCardTypeDO paidMemberCardTypeDO =typeService.selectByName(cardName); - if(paidMemberCardTypeDO.getName().equals("试用")){ - payPrice = paidMemberCardTypeDO.getOriginalPrice(); - }else if (paidMemberUserDO != null){ - payPrice = paidMemberCardTypeDO.getSpecialPrice(); - } - else { - payPrice = paidMemberCardTypeDO.getOriginalPrice(); - } - } - return payPrice; - } +// @Override +// public BigDecimal createMemberRecord(Long userId, Integer userType, String userIp, +// Integer type, String cardName) { +// //定义一个支付金额 +// BigDecimal payPrice = null; +// BigDecimal gitBalance = BigDecimal.valueOf(0);//赠送余额,权益规则还未定 +// +// if(Objects.nonNull(type)){ +// PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getMemberUser(getLoginUserId()); +// PaidMemberCardTypeDO paidMemberCardTypeDO =typeService.selectByName(cardName); +// if(paidMemberCardTypeDO.getName().equals("试用")){ +// payPrice = paidMemberCardTypeDO.getOriginalPrice(); +// }else if (paidMemberUserDO != null){ +// payPrice = paidMemberCardTypeDO.getSpecialPrice(); +// } +// else { +// payPrice = paidMemberCardTypeDO.getOriginalPrice(); +// } +// } +// return payPrice; +// } @Override public void createOrder(PaidMemberOrderDO createReqVO) { @@ -119,23 +119,23 @@ public class PaidMemberOrderServiceImpl implements PaidMemberOrderService { paidMemberOrderMapper.updateById(updateReqVO); } - @Override - public LocalDateTime getDeadLineDay(String cardName) { - LocalDateTime now = LocalDateTime.now(); - LocalDateTime deadlineDay; - if (cardName.equals("试用")){ - deadlineDay = now.plus(1, ChronoUnit.DAYS); - } else if (cardName.equals("月卡")) { - deadlineDay = now.plus(1,ChronoUnit.MONTHS); - } else if (cardName.equals("季卡")) { - deadlineDay = now.plus(3,ChronoUnit.MONTHS); - } else if (cardName.equals("年卡")) { - deadlineDay = now.plus(1,ChronoUnit.YEARS); - } else { - deadlineDay = null; - } - return deadlineDay; - } +// @Override +// public LocalDateTime getDeadLineDay(String cardName) { +// LocalDateTime now = LocalDateTime.now(); +// LocalDateTime deadlineDay; +// if (cardName.equals("试用")){ +// deadlineDay = now.plus(1, ChronoUnit.DAYS); +// } else if (cardName.equals("月卡")) { +// deadlineDay = now.plus(1,ChronoUnit.MONTHS); +// } else if (cardName.equals("季卡")) { +// deadlineDay = now.plus(3,ChronoUnit.MONTHS); +// } else if (cardName.equals("年卡")) { +// deadlineDay = now.plus(1,ChronoUnit.YEARS); +// } else { +// deadlineDay = null; +// } +// return deadlineDay; +// } @Override public PaidMemberOrderDO getPaidMemeberOrder(Long id) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java index 9d20748..b96c42e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.member.service.user; +import java.time.LocalDateTime; import java.util.*; import javax.validation.*; import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; @@ -24,6 +25,9 @@ public interface PaidMemberUserService { */ Long createMemberUser(@Valid PaidMemberUserSaveReqVO createReqVO); + + + /** * 更新会员 * @@ -46,6 +50,12 @@ public interface PaidMemberUserService { */ PaidMemberUserDO getMemberUser(Long id); + int getPriceByTtype(Integer activate, String cardName); + + LocalDateTime getDeadLineDay(String cardName); + + PaidMemberUserDO getPaidMemberUserByOrderNo(String orderNO); + // /** // * 获得会员分页 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java index fe7410b..bd6068b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java @@ -1,11 +1,18 @@ package cn.iocoder.yudao.module.member.service.user; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; import java.util.*; import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; @@ -30,16 +37,29 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { @Resource private PaidMemberUserMapper paidMemberUserMapper; + @Resource + private PaidMemberCardTypeService memberCardTypeService; + @Override public Long createMemberUser(PaidMemberUserSaveReqVO createReqVO) { // 插入 PaidMemberUserDO memberUser = BeanUtils.toBean(createReqVO, PaidMemberUserDO.class); + String prefix = String.valueOf('m'); + memberUser.setOrderNo(generate(prefix)); + if(getPaidMemberUserByOrderNo(memberUser.getOrderNo()) != null){ + throw exception(PAID_MEMBER_USER_ORDER_NO_NOT_EXISTS); + } paidMemberUserMapper.insert(memberUser); // 返回 return memberUser.getId(); } + public String generate(String prefix){ + String no = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN); + return no; + } + @Override public void updateMemberUser(PaidMemberUserSaveReqVO updateReqVO) { // 校验存在 @@ -59,15 +79,55 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { private void validateMemberUserExists(Long id) { if (paidMemberUserMapper.selectById(id) == null) { - throw exception(MEMBER_USER_NOT_EXISTS); + throw exception(PAID_MEMBER_ORDER_NOT_EXISTS); } } @Override public PaidMemberUserDO getMemberUser(Long id) { + validateMemberUserExists(id); return paidMemberUserMapper.selectById(id); } + @Override + public int getPriceByTtype(Integer activate, String cardName) { + int price = 0; + if(activate == 0){ + BigDecimal payprice = memberCardTypeService.selectByName(cardName).getOriginalPrice(); + price = payprice.multiply(new BigDecimal("100")).intValue(); + } + else { + BigDecimal payprice = memberCardTypeService.selectByName(cardName).getSpecialPrice(); + price = payprice.multiply(new BigDecimal("100")).intValue(); + } + return price; + } + + //获取会员类型对应的过期时间 + @Override + public LocalDateTime getDeadLineDay(String cardName) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime deadlineDay; + if (cardName.equals("试用")){ + deadlineDay = now.plus(1, ChronoUnit.DAYS); + } else if (cardName.equals("月卡")) { + deadlineDay = now.plus(1,ChronoUnit.MONTHS); + } else if (cardName.equals("季卡")) { + deadlineDay = now.plus(3,ChronoUnit.MONTHS); + } else if (cardName.equals("年卡")) { + deadlineDay = now.plus(1,ChronoUnit.YEARS); + } else { + deadlineDay = null; + } + return deadlineDay; + } + + @Override + public PaidMemberUserDO getPaidMemberUserByOrderNo(String orderNO) { + PaidMemberUserDO paidMemberUserDO = paidMemberUserMapper.selectOne(PaidMemberUserDO::getOrderNo,orderNO); + return paidMemberUserDO; + } + // @Override // public PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO) { // return memberUserMapper.selectPage(pageReqVO); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java new file mode 100644 index 0000000..3699ea7 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java @@ -0,0 +1,146 @@ +package cn.iocoder.yudao.module.pay.controller.app.member; + + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +//import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.PaidMemberUserSaveReqVO; +import cn.iocoder.yudao.module.member.convert.order.PaidMemberOrderConvert; +import cn.iocoder.yudao.module.member.dal.dataobject.order.PaidMemberOrderDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; +import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeService; +import cn.iocoder.yudao.module.member.service.order.PaidMemberOrderService; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; +import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberCreateReqVO; +import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberCreateRespVO; +import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemeberOrderReqDto; +import cn.iocoder.yudao.module.pay.convert.member.PayMemberOrderConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO; +import cn.iocoder.yudao.module.pay.service.order.PayOrderService; +import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserType; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.MEMBER_USER_NOT_EXISTS; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.WALLET_BALANCE_NOT_ENOUGH; +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.WALLET_NOT_FOUND; +import static cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum.PAYMENT; + +@Tag(name = "用户 APP - 会员支付") +@RestController +@RequestMapping("/pay/member") +@Validated +@Slf4j +public class AppPaidMembeController { + + @Resource + private MemberUserService memberUserService; + + @Resource + private PaidMemberUserService paidMemberUserService; + + @Resource + private PaidMemberCardTypeService memberCardService; + + @Resource + private PayWalletService payWalletService; + + @PostMapping("/create") + @Operation(summary = "创建会员支付记录(发起支付)") + public CommonResult createcard(@Valid @RequestBody AppPaidMemberCreateReqVO reqVO) { + //获取当前登录用户信息,并判断用户是否存在 + MemberUserDO memberUserDO = memberUserService.getUser(getLoginUserId()); + if (memberUserDO == null){ + throw exception(MEMBER_USER_NOT_EXISTS); + } + PaidMemberUserDO paidMemberUserDO = new PaidMemberUserDO(); + PaidMemberUserSaveReqVO paidMemberUserSaveReqVO = new PaidMemberUserSaveReqVO(); + //初始化支付金额,单位为分 + int price = 0; + if(reqVO.getCardName().equals("试用")){ + BeanUtils.copyProperties(memberUserDO,paidMemberUserSaveReqVO); + paidMemberUserSaveReqVO.setId(null); + paidMemberUserSaveReqVO.setUid(memberUserDO.getId()); + paidMemberUserSaveReqVO.setPrice(price); + paidMemberUserSaveReqVO.setPaid(true); + //获取期限天数 + String deadlineDay = memberCardService.selectByName(reqVO.getCardName()).getVid(); + paidMemberUserSaveReqVO.setDeadlineDay(deadlineDay); + paidMemberUserSaveReqVO.setPayType("免费领取"); + //获取支付时间 + LocalDateTime payTime = LocalDateTime.now(); + paidMemberUserSaveReqVO.setPayTime(payTime); + //获取试用类型的过期时间 + LocalDateTime cardExpirationTime = paidMemberUserService.getDeadLineDay(reqVO.getCardName()); + paidMemberUserSaveReqVO.setCardExpirationTime(cardExpirationTime); + //新增会员订单记录 + Long id = paidMemberUserService.createMemberUser(paidMemberUserSaveReqVO); + //查询新增的会员订单记录 + paidMemberUserDO = paidMemberUserService.getMemberUser(id); + memberUserDO.setActivate(1); + //跟新用户的会员启用状态 + memberUserService.updateUserDo(memberUserDO); + } + else { + BeanUtils.copyProperties(memberUserDO,paidMemberUserSaveReqVO); + paidMemberUserSaveReqVO.setId(null); + paidMemberUserSaveReqVO.setUid(memberUserDO.getId()); + //获取实际支付金额(判断是否为会员有无优惠价) + price = paidMemberUserService.getPriceByTtype(memberUserDO.getActivate(),reqVO.getCardName()); + //获取期限天数 + String deadlineDay = memberCardService.selectByName(reqVO.getCardName()).getVid(); + paidMemberUserSaveReqVO.setDeadlineDay(deadlineDay); + paidMemberUserSaveReqVO.setPrice(price); + paidMemberUserSaveReqVO.setPayType("钱包支付"); + //新增会员订单记录 + Long id = paidMemberUserService.createMemberUser(paidMemberUserSaveReqVO); + //查询新增的会员订单记录 + paidMemberUserDO = paidMemberUserService.getMemberUser(id); + } + return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberUserDO.getId(),paidMemberUserDO.getOrderNo() + ,paidMemberUserDO.getCardExpirationTime(),memberUserDO.getActivate())); + } + +// @PostMapping("/update") +// @Operation(summary = "更新会员订单未支付为已支付") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob +// public CommonResult updatePaidMemberUser(@Valid @RequestBody AppPaidMemeberOrderReqDto notifyReqDTO){ +// //获取订单记录 +// PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getMemberUser(notifyReqDTO.getId()); +//// 校验钱包充值是否可以支付 +// PayWalletDO walletDO = payWalletService.getOrCreateWallet(WebFrameworkUtils.getLoginUserId(),getLoginUserType()); +// if(walletDO.getBalance() createcard(@Valid @RequestBody AppPaidMemberOrderReqVO reqVO) { - MemberUserDO memberUserDO = userService1.getUser(getLoginUserId()); - PaidMemberUserSaveReqVO paidMemberUserSaveReqVO = new PaidMemberUserSaveReqVO(); - // 判断当前用户是否选择过试用会员 - if(memberUserDO.getActivate() == 0 && memberUserDO != null && reqVO.getCardName().equals("试用")){ - //试用会员 - memberUserDO.setActivate(CommonStatusEnum.DISABLE.getStatus()); - }else if(reqVO.getCardName().equals("永久")){ - //永久会员 - memberUserDO.setActivate(3); - }else { - //有效期会员 - memberUserDO.setActivate(2); - } - // 若不是会员则往会员表插入数据 - if(memberUserService1.getMemberUser(memberUserDO.getId()) == null){ - BeanUtils.copyProperties(memberUserDO,paidMemberUserSaveReqVO); - memberUserService1.createMemberUser(paidMemberUserSaveReqVO); - } - //判断会员类型 - if(reqVO.getCardName().equals("试用")){ - reqVO.setType(0); - } else if (reqVO.getCardName().equals("永久")) { - reqVO.setType(2); - }else { - reqVO.setType(1); - } - - //获得对应会员期限天数 - String deadlineDay = cardService.selectByName(reqVO.getCardName()).getVid(); - LocalDateTime payTime = LocalDateTime.now(); - LocalDateTime cardExpirationTime = paidMemberOrderService1.getDeadLineDay(reqVO.getCardName()); - - //获得支付金额 - BigDecimal payPrice = paidMemberOrderService1.createMemberRecord(getLoginUserId(), - getLoginUserType(),getClientIP(),reqVO.getType(),reqVO.getCardName()); - BigDecimal p = payPrice.multiply(new BigDecimal("100")); - Integer payPriceInt = p.intValue(); - BigDecimal originalPrice = cardService.selectByName(reqVO.getCardName()).getOriginalPrice(); -// PayWalletDO walletDO = memberWalletService.getOrCreateWallet(getLoginUserId(),getLoginUserType()); - //订单对象赋值 - PaidMemberOrderDO paidMemberOrderDO = PaidMemberOrderConvert.INSTANCE.convert(getLoginUserId(), - reqVO.getCardName(),reqVO.getType(),payPrice,payTime,deadlineDay,cardExpirationTime,originalPrice); - paidMemberOrderService1.createOrder(paidMemberOrderDO); - Long payOrderId = payOrderService01.createOrder(new PayOrderCreateReqDTO() - .setAppId(1L).setUserIp(getClientIP()) - .setMerchantOrderId(""+paidMemberOrderDO.getId()) // 业务的订单编号 - .setSubject("会员支付").setBody("") - .setPrice(payPriceInt) - .setExpireTime(addTime(Duration.ofHours(2L)))); // TODO @芋艿:支付超时时间 - paidMemberOrderDO.setPayOrderId(payOrderId); - userService1.updateUserDo(memberUserDO); - paidMemberOrderService1.updateOrder(paidMemberOrderDO); - return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberOrderDO.getId(),paidMemberOrderDO.getPayOrderId() - ,paidMemberOrderDO.getCardExpirationTime(),memberUserDO.getActivate())); - } - - @PostMapping("/update") - @Operation(summary = "更新会员订单未支付为已支付") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob - public CommonResult updatePaidMemberOrder(@Valid @RequestBody AppPaidMemeberOrderReqDto notifyReqDTO){ - //获取订单记录 - PaidMemberOrderDO paidMemberOrderDO = paidMemberOrderService1.getPaidMemeberOrder(Long.valueOf(notifyReqDTO.getMerchantOrderId())); - if(paidMemberOrderDO == null){ - log.error("[updatePaidMemberOrder],updateReqVO({}) 付费会员订单不存在."); - throw exception(PAID_MEMBER_ORDER_NOT_EXISTS); - } - BigDecimal decimalprice = paidMemberOrderDO.getPrice(); - Integer price = decimalprice.multiply(new BigDecimal("100")).intValue(); -// 校验钱包充值是否可以支付 - PayWalletDO walletDO = payWalletService.getOrCreateWallet(WebFrameworkUtils.getLoginUserId(),getLoginUserType()); - if(walletDO == null){ - log.error("[updatePaidMemberOrder],updateReqVO({}) 用户钱包不存在."); - throw exception(WALLET_NOT_FOUND); - } - if(walletDO.getBalance() Date: Wed, 23 Oct 2024 18:11:40 +0800 Subject: [PATCH 16/24] =?UTF-8?q?=E6=94=AF=E4=BB=98=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/enums/ErrorCodeConstants.java | 3 +- .../user/vo/PaidMemberUserSaveReqVO.java | 2 + .../app/type/AppMemberCardTypeController.java | 2 +- .../dal/dataobject/user/PaidMemberUserDO.java | 6 ++ .../PaidMemberCardTypeService.java | 2 +- .../PaidMemberCardTypeServiceImpl.java | 2 +- .../service/user/PaidMemberUserService.java | 12 +++ .../user/PaidMemberUserServiceImpl.java | 56 +++++++---- .../app/member/AppPaidMembeController.java | 99 ++++++++++++++----- .../member/vo/AppPaidMemberCreateRespVO.java | 8 +- .../member/vo/AppPaidMemeberOrderReqDto.java | 2 + .../convert/member/PayMemberOrderConvert.java | 2 +- 12 files changed, 147 insertions(+), 49 deletions(-) diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index 20995c4..79655f2 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -68,8 +68,9 @@ public interface ErrorCodeConstants { ErrorCode CARD_NOT_EXISTS = new ErrorCode(1_004_020_000, "会员卡类型不存在"); ErrorCode MEMBER_USER_NOT_EXISTS = new ErrorCode(1_004_021_000, "会员不存在"); ErrorCode PAID_MEMBER_ORDER_NOT_EXISTS = new ErrorCode(1_004_022_000, "付费会员订单不存在"); - ErrorCode PAID_MEMBER_USER_ORDER_NO_NOT_EXISTS = new ErrorCode(1_004_023_000, "生成会员订单号失败,请重新提交"); + ErrorCode PAID_MEMBER_USER_NOT_OPEN = new ErrorCode(1_004_021_000, "会员未开通"); + ErrorCode PAID_MEMBER_USER_PASSED = new ErrorCode(1_004_021_000, "会员已过期"); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java index e495ec3..850e384 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java @@ -101,4 +101,6 @@ public class PaidMemberUserSaveReqVO { @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) private String orderNo; + @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED) + private Long payOrderId; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java index 6bd33b2..5b96de1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java @@ -41,7 +41,7 @@ public class AppMemberCardTypeController { List list = cardService.getCardTypeList(memberUserDO.getActivate()); if(name != null){ //根据用户查询是否有有效期会员的类型列表 - list = cardService.getCardTypeList2(memberUserDO.getActivate(),name); + list = cardService.getCardTypeValidList(memberUserDO.getActivate(),name); } return success(MemberCardTypeConvert.INSTANCE.convertList(list)); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java index d1fbc00..f875f9c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java @@ -145,6 +145,12 @@ public class PaidMemberUserDO extends TenantBaseDO { * 订单号 */ private String orderNo; + /** + * 支付订单编号 + * + * 关联 {@link PayOrderDO#getId()} + */ + private Long payOrderId; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java index 82830d3..f7c8c64 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java @@ -68,7 +68,7 @@ public interface PaidMemberCardTypeService { * @param activate * @return */ - List getCardTypeList2 (Integer activate,String name); + List getCardTypeValidList (Integer activate,String name); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index 2f3b10e..7a3ab0e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -91,7 +91,7 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService } @Override - public List getCardTypeList2(Integer activate,String name) { + public List getCardTypeValidList(Integer activate,String name) { List list = new ArrayList<>(); Integer status = 1; if (activate == 2){ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java index b96c42e..c8c2de2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java @@ -50,12 +50,24 @@ public interface PaidMemberUserService { */ PaidMemberUserDO getMemberUser(Long id); +// /** +// * 判断是否为会员 +// */ +// PaidMemberUserDO isValidPaidMember(Integer activate,LocalDateTime cardExpirationTime); + int getPriceByTtype(Integer activate, String cardName); LocalDateTime getDeadLineDay(String cardName); PaidMemberUserDO getPaidMemberUserByOrderNo(String orderNO); + /** + * 更新会员 + * + * @param updateReqVO 更新信息 + */ + void update(@Valid PaidMemberUserDO updateReqVO); + // /** // * 获得会员分页 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java index bd6068b..d45fd8f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java @@ -23,6 +23,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.member.dal.mysql.user.PaidMemberUserMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; /** @@ -41,12 +42,11 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { private PaidMemberCardTypeService memberCardTypeService; + @Override public Long createMemberUser(PaidMemberUserSaveReqVO createReqVO) { // 插入 PaidMemberUserDO memberUser = BeanUtils.toBean(createReqVO, PaidMemberUserDO.class); - String prefix = String.valueOf('m'); - memberUser.setOrderNo(generate(prefix)); if(getPaidMemberUserByOrderNo(memberUser.getOrderNo()) != null){ throw exception(PAID_MEMBER_USER_ORDER_NO_NOT_EXISTS); } @@ -55,10 +55,10 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { return memberUser.getId(); } - public String generate(String prefix){ - String no = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN); - return no; - } +// public String generate(String prefix){ +// String no = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN); +// return no; +// } @Override public void updateMemberUser(PaidMemberUserSaveReqVO updateReqVO) { @@ -89,6 +89,20 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { return paidMemberUserMapper.selectById(id); } +// @Override +// public PaidMemberUserDO isValidPaidMember(Integer activate, LocalDateTime cardExpirationTime) { +// if (activate == 0){ +// throw exception(PAID_MEMBER_USER_NOT_OPEN); +// } else if (activate != 0 && cardExpirationTime.isBefore(LocalDateTime.now())) { +// throw exception(PAID_MEMBER_USER_PASSED); +// }else { +// //当前用户为会员 +// List list = paidMemberUserMapper.selectList(PaidMemberUserDO::getUid,getLoginUserId(), +// ) +// } +// return null; +// } + @Override public int getPriceByTtype(Integer activate, String cardName) { int price = 0; @@ -108,17 +122,19 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { public LocalDateTime getDeadLineDay(String cardName) { LocalDateTime now = LocalDateTime.now(); LocalDateTime deadlineDay; - if (cardName.equals("试用")){ - deadlineDay = now.plus(1, ChronoUnit.DAYS); - } else if (cardName.equals("月卡")) { - deadlineDay = now.plus(1,ChronoUnit.MONTHS); - } else if (cardName.equals("季卡")) { - deadlineDay = now.plus(3,ChronoUnit.MONTHS); - } else if (cardName.equals("年卡")) { - deadlineDay = now.plus(1,ChronoUnit.YEARS); - } else { - deadlineDay = null; - } + //判断是否具有过期时间,该操作为续费 + if (cardName.equals("试用")){ + deadlineDay = now.plus(1, ChronoUnit.DAYS); + } else if (cardName.equals("月卡")) { + deadlineDay = now.plus(1,ChronoUnit.MONTHS); + } else if (cardName.equals("季卡")) { + deadlineDay = now.plus(3,ChronoUnit.MONTHS); + } else if (cardName.equals("年卡")) { + deadlineDay = now.plus(1,ChronoUnit.YEARS); + } else { + //永久设置为一个非常远的的日期 + deadlineDay = LocalDateTime.of(9999,12,31,23,59,59); + } return deadlineDay; } @@ -128,6 +144,12 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { return paidMemberUserDO; } + @Override + public void update(PaidMemberUserDO updateReqVO) { + // 校验存在 + validateMemberUserExists(updateReqVO.getId()); + paidMemberUserMapper.updateById(updateReqVO); + } // @Override // public PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO) { // return memberUserMapper.selectPage(pageReqVO); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java index 3699ea7..9e2df10 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeS import cn.iocoder.yudao.module.member.service.order.PaidMemberOrderService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; +import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberCreateReqVO; import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemberCreateRespVO; import cn.iocoder.yudao.module.pay.controller.app.member.vo.AppPaidMemeberOrderReqDto; @@ -20,6 +21,7 @@ import cn.iocoder.yudao.module.pay.convert.member.PayMemberOrderConvert; import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO; +import cn.iocoder.yudao.module.pay.dal.redis.no.PayNoRedisDAO; import cn.iocoder.yudao.module.pay.service.order.PayOrderService; import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService; import io.swagger.v3.oas.annotations.Operation; @@ -33,11 +35,14 @@ import javax.annotation.Resource; import javax.validation.Valid; import java.math.BigDecimal; +import java.time.Duration; import java.time.LocalDateTime; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.addTime; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; +import static cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum.WALLET; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserType; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.MEMBER_USER_NOT_EXISTS; @@ -45,6 +50,7 @@ import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.WALLET_BALANC import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.WALLET_NOT_FOUND; import static cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum.PAYMENT; + @Tag(name = "用户 APP - 会员支付") @RestController @RequestMapping("/pay/member") @@ -52,6 +58,12 @@ import static cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum.PAYM @Slf4j public class AppPaidMembeController { + /** + * 会员支付的 no 前缀 + * */ + private static final String PAID_MEMBER_NO_PREFIX = "M"; + + private static final String PAID_MEMBER_USER_SUBJECT = "会员支付购卡"; @Resource private MemberUserService memberUserService; @@ -64,6 +76,12 @@ public class AppPaidMembeController { @Resource private PayWalletService payWalletService; + @Resource + private PayNoRedisDAO noRedisDAO; + + @Resource + private PayOrderService payOrderService; + @PostMapping("/create") @Operation(summary = "创建会员支付记录(发起支付)") public CommonResult createcard(@Valid @RequestBody AppPaidMemberCreateReqVO reqVO) { @@ -76,6 +94,7 @@ public class AppPaidMembeController { PaidMemberUserSaveReqVO paidMemberUserSaveReqVO = new PaidMemberUserSaveReqVO(); //初始化支付金额,单位为分 int price = 0; + Long payOrderId = null; if(reqVO.getCardName().equals("试用")){ BeanUtils.copyProperties(memberUserDO,paidMemberUserSaveReqVO); paidMemberUserSaveReqVO.setId(null); @@ -92,6 +111,8 @@ public class AppPaidMembeController { //获取试用类型的过期时间 LocalDateTime cardExpirationTime = paidMemberUserService.getDeadLineDay(reqVO.getCardName()); paidMemberUserSaveReqVO.setCardExpirationTime(cardExpirationTime); + //设置会员订单号 + paidMemberUserSaveReqVO.setOrderNo(noRedisDAO.generate(PAID_MEMBER_NO_PREFIX)); //新增会员订单记录 Long id = paidMemberUserService.createMemberUser(paidMemberUserSaveReqVO); //查询新增的会员订单记录 @@ -110,37 +131,69 @@ public class AppPaidMembeController { String deadlineDay = memberCardService.selectByName(reqVO.getCardName()).getVid(); paidMemberUserSaveReqVO.setDeadlineDay(deadlineDay); paidMemberUserSaveReqVO.setPrice(price); - paidMemberUserSaveReqVO.setPayType("钱包支付"); + //设置会员订单号 + paidMemberUserSaveReqVO.setOrderNo(noRedisDAO.generate(PAID_MEMBER_NO_PREFIX)); //新增会员订单记录 Long id = paidMemberUserService.createMemberUser(paidMemberUserSaveReqVO); //查询新增的会员订单记录 paidMemberUserDO = paidMemberUserService.getMemberUser(id); + // 创建支付订单号 + payOrderId = payOrderService.createOrder(new PayOrderCreateReqDTO() + .setAppId(1L).setUserIp(getClientIP()) + .setMerchantOrderId(""+paidMemberUserDO.getId()) + .setSubject(PAID_MEMBER_USER_SUBJECT).setBody("") + .setPrice(paidMemberUserDO.getPrice()) + .setExpireTime(addTime(Duration.ofHours(2L)))); // TODO @芋艿:支付超时时间 + paidMemberUserDO.setPayOrderId(payOrderId); + //跟新支付订单号进付费会员表里 + paidMemberUserService.update(paidMemberUserDO); } - return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberUserDO.getId(),paidMemberUserDO.getOrderNo() + return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberUserDO.getId(),payOrderId ,paidMemberUserDO.getCardExpirationTime(),memberUserDO.getActivate())); } -// @PostMapping("/update") -// @Operation(summary = "更新会员订单未支付为已支付") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob -// public CommonResult updatePaidMemberUser(@Valid @RequestBody AppPaidMemeberOrderReqDto notifyReqDTO){ -// //获取订单记录 -// PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getMemberUser(notifyReqDTO.getId()); -//// 校验钱包充值是否可以支付 -// PayWalletDO walletDO = payWalletService.getOrCreateWallet(WebFrameworkUtils.getLoginUserId(),getLoginUserType()); -// if(walletDO.getBalance() updatePaidMemberUser(@Valid @RequestBody AppPaidMemeberOrderReqDto notifyReqDTO){ + //获取当前登录用户信息,并判断用户是否为会员 + MemberUserDO memberUserDO = memberUserService.getUser(getLoginUserId()); + //获取订单记录 + PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getMemberUser(notifyReqDTO.getId()); +// 获取当前用户钱包信息 + PayWalletDO walletDO = payWalletService.getOrCreateWallet(WebFrameworkUtils.getLoginUserId(),getLoginUserType()); +// 扣减钱包余额 + payWalletService.reduceWalletBalance + (walletDO.getId(),notifyReqDTO.getId(),PAYMENT,paidMemberUserDO.getPrice()); + //获取支付时间 + LocalDateTime payTime = LocalDateTime.now(); + paidMemberUserDO.setPayTime(payTime); + //更新会员订单支付状态为已支付 + paidMemberUserDO.setPaid(true); + //获取试用类型的过期时间 + LocalDateTime cardExpirationTime = paidMemberUserService.getDeadLineDay(notifyReqDTO.getCardName()); + paidMemberUserDO.setCardExpirationTime(cardExpirationTime); + paidMemberUserDO.setPayChannel(notifyReqDTO.getPayChannel()); + if (notifyReqDTO.getPayChannel().equals("wallet")){ + paidMemberUserDO.setPayType("余额"); + } else if(notifyReqDTO.getPayChannel().startsWith("wx")){ + paidMemberUserDO.setPayType("微信"); + } else if (notifyReqDTO.getPayChannel().startsWith("alipay")) { + paidMemberUserDO.setPayType("支付宝"); + } else { + paidMemberUserDO.setPayType("模拟支付"); + } + //更新会员订单 + paidMemberUserService.update(paidMemberUserDO); + //设置个人信息的会员状态,0:未开通,1试用,2有效期,3永久 + if(notifyReqDTO.getCardName().equals("永久")){ + memberUserDO.setActivate(3); + }else { + memberUserDO.setActivate(2); + } + //更新用户会员状态 + memberUserService.updateUserDo(memberUserDO); + return success(true); + } } diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberCreateRespVO.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberCreateRespVO.java index ca86552..da82ce6 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberCreateRespVO.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemberCreateRespVO.java @@ -15,11 +15,11 @@ public class AppPaidMemberCreateRespVO { @Schema(description = "会员支付编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Long id; -// @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "o100") -// private Long payOrderId; + @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "o100") + private Long payOrderId; - @Schema(description = "会员订单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "m100") - private String orderNo; +// @Schema(description = "会员订单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "m100") +// private String orderNo; @Schema(description = "到期时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-11-22 09:30:05") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemeberOrderReqDto.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemeberOrderReqDto.java index 29b3a38..98a6594 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemeberOrderReqDto.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/vo/AppPaidMemeberOrderReqDto.java @@ -22,6 +22,8 @@ public class AppPaidMemeberOrderReqDto { @Schema(description = "会员支付编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Long id; + @Schema(description = "会员卡名称", example = "试用") + private String cardName; @Schema(description = "支付渠道", example = "公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送") private String payChannel; diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/member/PayMemberOrderConvert.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/member/PayMemberOrderConvert.java index f5381d5..0ebf675 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/member/PayMemberOrderConvert.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/member/PayMemberOrderConvert.java @@ -13,5 +13,5 @@ public interface PayMemberOrderConvert { PayMemberOrderConvert INSTANCE = Mappers.getMapper(PayMemberOrderConvert.class); - AppPaidMemberCreateRespVO convert(Long id, String orderNo, LocalDateTime cardExpirationTime, Integer activate); + AppPaidMemberCreateRespVO convert(Long id, Long payOrderId, LocalDateTime cardExpirationTime, Integer activate); } -- 2.45.2 From a35f333ec23172be8d865eaa0b150f23a2f31a49 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Wed, 23 Oct 2024 21:10:42 +0800 Subject: [PATCH 17/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E5=9B=9E=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/vo/PaidMemberUserSaveReqVO.java | 3 +++ .../app/type/AppMemberCardTypeController.java | 6 +----- .../app/user/AppMemberUserController.java | 7 ++++++- .../app/user/vo/AppMemberUserInfoRespVO.java | 6 ++++++ .../convert/user/MemberUserConvert.java | 3 ++- .../dal/dataobject/user/PaidMemberUserDO.java | 4 ++++ .../PaidMemberCardTypeService.java | 7 ------- .../PaidMemberCardTypeServiceImpl.java | 19 +++---------------- .../service/user/PaidMemberUserService.java | 2 ++ .../user/PaidMemberUserServiceImpl.java | 14 ++++++++++++++ .../app/member/AppPaidMembeController.java | 6 +++++- 11 files changed, 46 insertions(+), 31 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java index 850e384..9f09793 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserSaveReqVO.java @@ -103,4 +103,7 @@ public class PaidMemberUserSaveReqVO { @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED) private Long payOrderId; + + @Schema(description = "会员类型", requiredMode = Schema.RequiredMode.REQUIRED) + private String payMemberType; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java index 5b96de1..d009e45 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/type/AppMemberCardTypeController.java @@ -34,15 +34,11 @@ public class AppMemberCardTypeController { @GetMapping("/list") @Operation(summary = "获得会员卡类型列表") - public CommonResult> list(@RequestParam(value = "name",required = false) String name) { + public CommonResult> list() { /** 查询状态为启用的会员卡类型列表 */ MemberUserDO memberUserDO = userService.getUser(getLoginUserId()); /** 根据用户查询是否有试用会员的类型列表 */ List list = cardService.getCardTypeList(memberUserDO.getActivate()); - if(name != null){ - //根据用户查询是否有有效期会员的类型列表 - list = cardService.getCardTypeValidList(memberUserDO.getActivate(),name); - } return success(MemberCardTypeConvert.INSTANCE.convertList(list)); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java index d1eb7dd..ded14dd 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java @@ -21,6 +21,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; import cn.iocoder.yudao.module.member.dal.dataobject.memberCode.MemberCodeDo; import cn.iocoder.yudao.module.member.dal.dataobject.transferlog.TransferLogDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.memberCode.MemberCodeMapper; import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; import cn.iocoder.yudao.module.member.service.afterverification.AfterVerificationService; @@ -32,6 +33,7 @@ import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; import cn.iocoder.yudao.module.member.service.transfer.TransferService; import cn.iocoder.yudao.module.member.service.transferlog.TransferLogService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService; import io.swagger.v3.oas.annotations.Operation; @@ -78,13 +80,16 @@ public class AppMemberUserController { private MemberPointRecordService pointRecordService; @Resource private MemberCodeMapper memberCodeMapper; + @Resource + private PaidMemberUserService paidMemberUserService; @GetMapping("/get") @Operation(summary = "获得基本信息") @PreAuthenticated public CommonResult getUserInfo() { MemberUserDO user = userService.getUser(getLoginUserId()); MemberLevelDO level = levelService.getLevel(user.getLevelId()); - return success(MemberUserConvert.INSTANCE.convert(user, level)); + PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getPaidMemberUserByUid(getLoginUserId()); + return success(MemberUserConvert.INSTANCE.convert(user, level,paidMemberUserDO.getPayMemberType(),paidMemberUserDO.getCardExpirationTime())); } @PutMapping("/update") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java index cac56a4..7a13f20 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java @@ -41,6 +41,12 @@ public class AppMemberUserInfoRespVO { @Schema(description = "是否成为推广员", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") private Boolean brokerageEnabled; + @Schema(description = "会员名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "季卡") + private String cardName; + + @Schema(description = "会员名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String cardExpirationTime; + @Schema(description = "用户 App - 会员等级") @Data public static class Level { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java index eaa5ab5..c1de086 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java @@ -15,6 +15,7 @@ import org.mapstruct.Mapping; import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -34,7 +35,7 @@ public interface MemberUserConvert { @Mapping(source = "bean.id", target = "id"), @Mapping(source = "bean.experience", target = "experience") }) - AppMemberUserInfoRespVO convert(MemberUserDO bean, MemberLevelDO level); + AppMemberUserInfoRespVO convert(MemberUserDO bean, MemberLevelDO level, String cardName, LocalDateTime cardExpirationTime); MemberUserRespDTO convert2(MemberUserDO bean); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java index f875f9c..bbdd0f9 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/PaidMemberUserDO.java @@ -151,6 +151,10 @@ public class PaidMemberUserDO extends TenantBaseDO { * 关联 {@link PayOrderDO#getId()} */ private Long payOrderId; + /** + * 会员类型 + */ + private String payMemberType; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java index f7c8c64..f6c27c2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java @@ -62,13 +62,6 @@ public interface PaidMemberCardTypeService { */ List getCardTypeList (Integer activate); - /** - * 根据用户是否使用有效期会员 - * 查询会员类型列表 - * @param activate - * @return - */ - List getCardTypeValidList (Integer activate,String name); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index 7a3ab0e..7f2fa99 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -81,28 +81,15 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService public List getCardTypeList(Integer activate) { List list = new ArrayList<>(); Integer status = 1; - if(activate == 1){ - list = cardMapper.selectListByIsActivate(status); + if(activate == 0){ + list = cardMapper.selectListByStatus(status); } else { - list = cardMapper.selectListByStatus(status); + list = cardMapper.selectListByIsActivate(status); } return list; } - @Override - public List getCardTypeValidList(Integer activate,String name) { - List list = new ArrayList<>(); - Integer status = 1; - if (activate == 2){ - list = cardMapper.selectList(new LambdaQueryWrapperX() - .eqIfPresent(PaidMemberCardTypeDO::getStatus,status) - .neIfPresent(PaidMemberCardTypeDO::getName,name) - .neIfPresent(PaidMemberCardTypeDO::getName,"试用") - .orderByAsc(PaidMemberCardTypeDO::getId)); - } - return list; - } @Override diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java index c8c2de2..e10025f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java @@ -68,6 +68,8 @@ public interface PaidMemberUserService { */ void update(@Valid PaidMemberUserDO updateReqVO); + PaidMemberUserDO getPaidMemberUserByUid(Long uid); + // /** // * 获得会员分页 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java index d45fd8f..8c6f45b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java @@ -3,8 +3,10 @@ package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.service.membercardtype.PaidMemberCardTypeService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -150,6 +152,18 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { validateMemberUserExists(updateReqVO.getId()); paidMemberUserMapper.updateById(updateReqVO); } + + @Override + public PaidMemberUserDO getPaidMemberUserByUid(Long uid) { + List list = paidMemberUserMapper.selectList( + new LambdaQueryWrapperX().eq(PaidMemberUserDO::getUid,uid) + .orderByDesc(PaidMemberUserDO::getId)); + if(list.isEmpty()){ + throw exception(MEMBER_USER_NOT_EXISTS); + } + PaidMemberUserDO paidMemberUserDO = list.get(0); + return paidMemberUserDO; + } // @Override // public PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO) { // return memberUserMapper.selectPage(pageReqVO); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java index 9e2df10..11de3ff 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java @@ -97,6 +97,7 @@ public class AppPaidMembeController { Long payOrderId = null; if(reqVO.getCardName().equals("试用")){ BeanUtils.copyProperties(memberUserDO,paidMemberUserSaveReqVO); + paidMemberUserSaveReqVO.setPayMemberType(reqVO.getCardName()); paidMemberUserSaveReqVO.setId(null); paidMemberUserSaveReqVO.setUid(memberUserDO.getId()); paidMemberUserSaveReqVO.setPrice(price); @@ -124,6 +125,7 @@ public class AppPaidMembeController { else { BeanUtils.copyProperties(memberUserDO,paidMemberUserSaveReqVO); paidMemberUserSaveReqVO.setId(null); + paidMemberUserSaveReqVO.setPayMemberType(reqVO.getCardName()); paidMemberUserSaveReqVO.setUid(memberUserDO.getId()); //获取实际支付金额(判断是否为会员有无优惠价) price = paidMemberUserService.getPriceByTtype(memberUserDO.getActivate(),reqVO.getCardName()); @@ -153,7 +155,7 @@ public class AppPaidMembeController { } @PostMapping("/update") - @Operation(summary = "更新会员订单未支付为已支付") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob + @Operation(summary = "余额支付") public CommonResult updatePaidMemberUser(@Valid @RequestBody AppPaidMemeberOrderReqDto notifyReqDTO){ //获取当前登录用户信息,并判断用户是否为会员 MemberUserDO memberUserDO = memberUserService.getUser(getLoginUserId()); @@ -192,6 +194,8 @@ public class AppPaidMembeController { } //更新用户会员状态 memberUserService.updateUserDo(memberUserDO); +// return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberUserDO.getId(),payOrderId +// ,paidMemberUserDO.getCardExpirationTime(),memberUserDO.getActivate())); return success(true); } -- 2.45.2 From 41bcb2c9ea798439f0efcea62d3f2d8a77659676 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Wed, 23 Oct 2024 21:34:18 +0800 Subject: [PATCH 18/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E4=BD=99=E9=A2=9D?= =?UTF-8?q?=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/app/user/AppMemberUserController.java | 3 +++ .../module/member/service/user/PaidMemberUserServiceImpl.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java index ded14dd..a8284a2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java @@ -89,6 +89,9 @@ public class AppMemberUserController { MemberUserDO user = userService.getUser(getLoginUserId()); MemberLevelDO level = levelService.getLevel(user.getLevelId()); PaidMemberUserDO paidMemberUserDO = paidMemberUserService.getPaidMemberUserByUid(getLoginUserId()); + if (paidMemberUserDO == null) { + return success(MemberUserConvert.INSTANCE.convert(user, level,null,null)); + } return success(MemberUserConvert.INSTANCE.convert(user, level,paidMemberUserDO.getPayMemberType(),paidMemberUserDO.getCardExpirationTime())); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java index 8c6f45b..6e2c121 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java @@ -159,7 +159,7 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { new LambdaQueryWrapperX().eq(PaidMemberUserDO::getUid,uid) .orderByDesc(PaidMemberUserDO::getId)); if(list.isEmpty()){ - throw exception(MEMBER_USER_NOT_EXISTS); + return null; } PaidMemberUserDO paidMemberUserDO = list.get(0); return paidMemberUserDO; -- 2.45.2 From e90d9dd5ca5bc108718cdff9b9174c9ec24a0451 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Thu, 24 Oct 2024 09:33:51 +0800 Subject: [PATCH 19/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=EF=BC=88=E5=90=8E=E5=8F=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/member/memberuser/index.ts | 79 ++++++ yudao-admin-vue3/src/api/member/type/index.ts | 5 + yudao-admin-vue3/src/utils/dict.ts | 4 + .../member/memberuser/PaidMemberUserForm.vue | 195 +++++++++++++++ .../src/views/member/memberuser/index.vue | 226 ++++++++++++++++++ .../PaidMemberCardTypeController.java | 7 + .../admin/user/PaidMemberUserController.java | 95 ++++++++ .../user/vo/PaidMemberUserPageReqVO.java | 112 +++++++++ .../admin/user/vo/PaidMemberUserRespVO.java | 130 ++++++++++ .../dal/mysql/user/PaidMemberUserMapper.java | 9 + .../PaidMemberCardTypeService.java | 2 + .../PaidMemberCardTypeServiceImpl.java | 7 + .../service/user/PaidMemberUserService.java | 14 +- .../user/PaidMemberUserServiceImpl.java | 9 +- 14 files changed, 883 insertions(+), 11 deletions(-) create mode 100644 yudao-admin-vue3/src/api/member/memberuser/index.ts create mode 100644 yudao-admin-vue3/src/views/member/memberuser/PaidMemberUserForm.vue create mode 100644 yudao-admin-vue3/src/views/member/memberuser/index.vue create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/PaidMemberUserController.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserPageReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserRespVO.java diff --git a/yudao-admin-vue3/src/api/member/memberuser/index.ts b/yudao-admin-vue3/src/api/member/memberuser/index.ts new file mode 100644 index 0000000..f52d44b --- /dev/null +++ b/yudao-admin-vue3/src/api/member/memberuser/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +// 付费会员 VO +export interface PaidMemberUserVO { + id: number // 编号 + mobile: string // 手机号 + password: string // 密码 + status: number // 状态 + registerIp: string // 注册 IP + registerTerminal: number // 注册终端 + loginIp: string // 最后登录IP + loginDate: Date // 最后登录时间 + nickname: string // 用户昵称 + avatar: string // 头像 + name: string // 真实名字 + sex: number // 性别 + birthday: Date // 出生日期 + areaId: number // 所在地 + mark: string // 用户备注 + point: number // 积分 + tagIds: string // 用户标签编号列表,以逗号分隔 + levelId: number // 等级编号 + experience: number // 经验 + groupId: number // 用户分组编号 + + paid: Boolean //是否支付,0:未支付,1:已支付 + + payTime: Date //支付时间 + + cardExpirationTime: Date; //到期时间 + + price:number //支付金额,单位为分 + + deadlineDay:string //期限天数 + + payType: string //支付方式 + + + payChannel: string//支付渠道 + + orderNo: string //订单号 + + payOrderId: number //支付订单编号 + + payMemberType: string//会员类型 +} + +// 付费会员 API +export const PaidMemberUserApi = { + // 查询付费会员分页 + getPaidMemberUserPage: async (params: any) => { + return await request.get({ url: `/member/paid-member-user/page`, params }) + }, + + // 查询付费会员详情 + getPaidMemberUser: async (id: number) => { + return await request.get({ url: `/member/paid-member-user/get?id=` + id }) + }, + + // 新增付费会员 + createPaidMemberUser: async (data: PaidMemberUserVO) => { + return await request.post({ url: `/member/paid-member-user/create`, data }) + }, + + // 修改付费会员 + updatePaidMemberUser: async (data: PaidMemberUserVO) => { + return await request.put({ url: `/member/paid-member-user/update`, data }) + }, + + // 删除付费会员 + deletePaidMemberUser: async (id: number) => { + return await request.delete({ url: `/member/paid-member-user/delete?id=` + id }) + }, + + // 导出付费会员 Excel + exportPaidMemberUser: async (params) => { + return await request.download({ url: `/member/paid-member-user/export-excel`, params }) + }, +} diff --git a/yudao-admin-vue3/src/api/member/type/index.ts b/yudao-admin-vue3/src/api/member/type/index.ts index f473c73..967bc05 100644 --- a/yudao-admin-vue3/src/api/member/type/index.ts +++ b/yudao-admin-vue3/src/api/member/type/index.ts @@ -42,4 +42,9 @@ export const cardApi = { exportcard: async (params) => { return await request.download({ url: `/paid/member/card/type/export-excel`, params }) }, + + // 获取会员卡类型下拉列表 + getcardlist: async () => { + return await request.get({ url: `/paid/member/card/type/get-list`}) + }, } diff --git a/yudao-admin-vue3/src/utils/dict.ts b/yudao-admin-vue3/src/utils/dict.ts index 98cea3c..69bdbad 100644 --- a/yudao-admin-vue3/src/utils/dict.ts +++ b/yudao-admin-vue3/src/utils/dict.ts @@ -195,6 +195,10 @@ export enum DICT_TYPE { MEMBER_POINT_BIZ_TYPE = 'member_point_biz_type', // 积分的业务类型 MEMBER_EXPERIENCE_BIZ_TYPE = 'member_experience_biz_type', // 会员经验业务类型 + PAID_MEMBER_USER_PAID = 'paid_member_user_paid', //付费会员支付状态 + + MEMBER_USER_PAY_TYPE = 'member_user_pay_type',// 会员记录支付方式 + // ========== MALL - 商品模块 ========== PRODUCT_SPU_STATUS = 'product_spu_status', //商品状态 POINT_PRODUCT_STATUS='point_product_status',//积分商品状态 diff --git a/yudao-admin-vue3/src/views/member/memberuser/PaidMemberUserForm.vue b/yudao-admin-vue3/src/views/member/memberuser/PaidMemberUserForm.vue new file mode 100644 index 0000000..2374033 --- /dev/null +++ b/yudao-admin-vue3/src/views/member/memberuser/PaidMemberUserForm.vue @@ -0,0 +1,195 @@ + + \ No newline at end of file diff --git a/yudao-admin-vue3/src/views/member/memberuser/index.vue b/yudao-admin-vue3/src/views/member/memberuser/index.vue new file mode 100644 index 0000000..2b95c1f --- /dev/null +++ b/yudao-admin-vue3/src/views/member/memberuser/index.vue @@ -0,0 +1,226 @@ + + + diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/membercardtype/PaidMemberCardTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/membercardtype/PaidMemberCardTypeController.java index 0a50621..cc21c17 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/membercardtype/PaidMemberCardTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/membercardtype/PaidMemberCardTypeController.java @@ -71,6 +71,13 @@ public class PaidMemberCardTypeController { return success(BeanUtils.toBean(card, PaidMemberCardTypeRespVO.class)); } + @GetMapping("/get-list") + @Operation(summary = "获得会员卡类型下拉列表") + public CommonResult> getcardlist() { + List card = cardTypeService.getOpenType(); + return success(card); + } + @GetMapping("/page") @Operation(summary = "获得会员卡类型分页") @PreAuthorize("@ss.hasPermission('member:paid-member-card-type:query')") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/PaidMemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/PaidMemberUserController.java new file mode 100644 index 0000000..3cfe98c --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/PaidMemberUserController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.member.controller.admin.user; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.user.PaidMemberUserDO; +import cn.iocoder.yudao.module.member.service.user.PaidMemberUserService; + +@Tag(name = "管理后台 - 付费会员") +@RestController +@RequestMapping("/member/paid-member-user") +@Validated +public class PaidMemberUserController { + + @Resource + private PaidMemberUserService paidMemberUserService; + + @PostMapping("/create") + @Operation(summary = "创建付费会员") + @PreAuthorize("@ss.hasPermission('member:paid-member-user:create')") + public CommonResult createPaidMemberUser(@Valid @RequestBody PaidMemberUserSaveReqVO createReqVO) { + return success(paidMemberUserService.createMemberUser(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新付费会员") + @PreAuthorize("@ss.hasPermission('member:paid-member-user:update')") + public CommonResult updatePaidMemberUser(@Valid @RequestBody PaidMemberUserSaveReqVO updateReqVO) { + paidMemberUserService.updateMemberUser(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除付费会员") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('member:paid-member-user:delete')") + public CommonResult deletePaidMemberUser(@RequestParam("id") Long id) { + paidMemberUserService.deleteMemberUser(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得付费会员") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('member:paid-member-user:query')") + public CommonResult getPaidMemberUser(@RequestParam("id") Long id) { + PaidMemberUserDO paidMemberUser = paidMemberUserService.getMemberUser(id); + return success(BeanUtils.toBean(paidMemberUser, PaidMemberUserRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得付费会员分页") + @PreAuthorize("@ss.hasPermission('member:paid-member-user:query')") + public CommonResult> getPaidMemberUserPage(@Valid PaidMemberUserPageReqVO pageReqVO) { + PageResult pageResult = paidMemberUserService.getMemberUserPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PaidMemberUserRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出付费会员 Excel") + @PreAuthorize("@ss.hasPermission('member:paid-member-user:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPaidMemberUserExcel(@Valid PaidMemberUserPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = paidMemberUserService.getMemberUserPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "付费会员.xls", "数据", PaidMemberUserRespVO.class, + BeanUtils.toBean(list, PaidMemberUserRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserPageReqVO.java new file mode 100644 index 0000000..f835b38 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserPageReqVO.java @@ -0,0 +1,112 @@ +package cn.iocoder.yudao.module.member.controller.admin.user.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 付费会员分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PaidMemberUserPageReqVO extends PageParam { + + @Schema(description = "手机号") + private String mobile; + + @Schema(description = "密码") + private String password; + + @Schema(description = "状态", example = "1") + private Integer status; + + @Schema(description = "注册 IP") + private String registerIp; + + @Schema(description = "注册终端") + private Integer registerTerminal; + + @Schema(description = "最后登录IP") + private String loginIp; + + @Schema(description = "最后登录时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] loginDate; + + @Schema(description = "用户昵称", example = "赵六") + private String nickname; + + @Schema(description = "头像") + private String avatar; + + @Schema(description = "真实名字", example = "张三") + private String name; + + @Schema(description = "性别") + private Integer sex; + + @Schema(description = "出生日期") + private LocalDateTime birthday; + + @Schema(description = "所在地", example = "18998") + private Integer areaId; + + @Schema(description = "用户备注") + private String mark; + + @Schema(description = "积分") + private Integer point; + + @Schema(description = "用户标签编号列表,以逗号分隔") + private String tagIds; + + @Schema(description = "等级编号", example = "27166") + private Long levelId; + + @Schema(description = "经验") + private Integer experience; + + @Schema(description = "用户分组编号", example = "27409") + private Long groupId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "是否支付", example = "0:未支付,1:已支付") + private Boolean paid; + + @Schema(description = "支付时间", example = "2024-11-22 09:30:05") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] payTime; + + @Schema(description = "到期时间", example = "2024-11-22 09:30:05") + private LocalDateTime cardExpirationTime; + + + @Schema(description = "支付金额,单位为分", example = "10") + private Integer price; + + @Schema(description = "期限天数", example = "10") + private String deadlineDay ; + + @Schema(description = "支付方式", example = "免费领取") + private String payType; + + @Schema(description = "支付渠道", example = "public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付") + private String payChannel; + + @Schema(description = "订单号") + private String orderNo; + + @Schema(description = "支付订单编号") + private Long payOrderId; + + @Schema(description = "会员类型") + private String payMemberType; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserRespVO.java new file mode 100644 index 0000000..be206c3 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/PaidMemberUserRespVO.java @@ -0,0 +1,130 @@ +package cn.iocoder.yudao.module.member.controller.admin.user.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 付费会员 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PaidMemberUserRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12209") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "手机号") + @ExcelProperty("手机号") + private String mobile; + + @Schema(description = "密码") + @ExcelProperty("密码") + private String password; + + @Schema(description = "状态", example = "1") + @ExcelProperty("状态") + private Integer status; + + @Schema(description = "注册 IP") + @ExcelProperty("注册 IP") + private String registerIp; + + @Schema(description = "注册终端") + @ExcelProperty("注册终端") + private Integer registerTerminal; + + @Schema(description = "最后登录IP") + @ExcelProperty("最后登录IP") + private String loginIp; + + @Schema(description = "最后登录时间") + @ExcelProperty("最后登录时间") + private LocalDateTime loginDate; + + @Schema(description = "用户昵称", example = "赵六") + @ExcelProperty("用户昵称") + private String nickname; + + @Schema(description = "头像") + @ExcelProperty("头像") + private String avatar; + + @Schema(description = "真实名字", example = "张三") + @ExcelProperty("真实名字") + private String name; + + @Schema(description = "性别") + @ExcelProperty("性别") + private Integer sex; + + @Schema(description = "出生日期") + @ExcelProperty("出生日期") + private LocalDateTime birthday; + + @Schema(description = "所在地", example = "18998") + @ExcelProperty("所在地") + private Integer areaId; + + @Schema(description = "用户备注") + @ExcelProperty("用户备注") + private String mark; + + @Schema(description = "积分") + @ExcelProperty("积分") + private Integer point; + + @Schema(description = "用户标签编号列表,以逗号分隔") + @ExcelProperty("用户标签编号列表,以逗号分隔") + private String tagIds; + + @Schema(description = "等级编号", example = "27166") + @ExcelProperty("等级编号") + private Long levelId; + + @Schema(description = "经验") + @ExcelProperty("经验") + private Integer experience; + + @Schema(description = "用户分组编号", example = "27409") + @ExcelProperty("用户分组编号") + private Long groupId; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "是否支付", example = "0:未支付,1:已支付") + private Boolean paid; + + @Schema(description = "支付时间", example = "2024-11-22 09:30:05") + private LocalDateTime payTime; + + @Schema(description = "到期时间", example = "2024-11-22 09:30:05") + private LocalDateTime cardExpirationTime; + + + @Schema(description = "支付金额,单位为分", example = "10") + private Integer price; + + @Schema(description = "期限天数", example = "10") + private String deadlineDay ; + + @Schema(description = "支付方式", example = "免费领取") + private String payType; + + @Schema(description = "支付渠道", example = "public-公众号,mini-小程序,h5-网页支付,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付包,alipayApp-支付宝App,give-平台赠送,yue-余额支付") + private String payChannel; + + @Schema(description = "订单号") + private String orderNo; + + @Schema(description = "支付订单编号") + private Long payOrderId; + + @Schema(description = "会员类型") + private String payMemberType; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/PaidMemberUserMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/PaidMemberUserMapper.java index db4da9a..7efbc26 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/PaidMemberUserMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/PaidMemberUserMapper.java @@ -16,4 +16,13 @@ import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; */ @Mapper public interface PaidMemberUserMapper extends BaseMapperX { + default PageResult selectPage(PaidMemberUserPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberUserDO::getPayMemberType,reqVO.getPayMemberType()) + .eqIfPresent(PaidMemberUserDO::getPayType,reqVO.getPayType()) + .betweenIfPresent(PaidMemberUserDO::getPayTime, reqVO.getPayTime()) + .eqIfPresent(PaidMemberUserDO::getPaid,reqVO.getPaid()) + .likeIfPresent(PaidMemberUserDO::getNickname,reqVO.getNickname()) + .orderByDesc(PaidMemberUserDO::getId)); + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java index f6c27c2..0897d1c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeService.java @@ -69,4 +69,6 @@ public interface PaidMemberCardTypeService { * 根据会员卡名查询 */ PaidMemberCardTypeDO selectByName(String cardName); + + List getOpenType(); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java index 7f2fa99..0965a08 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/membercardtype/PaidMemberCardTypeServiceImpl.java @@ -100,5 +100,12 @@ public class PaidMemberCardTypeServiceImpl implements PaidMemberCardTypeService return paidMemberCardTypeDO; } + @Override + public List getOpenType() { + Integer status = 1; + List list = cardMapper.selectListByStatus(status); + return list; + } + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java index e10025f..16c4969 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java @@ -71,12 +71,12 @@ public interface PaidMemberUserService { PaidMemberUserDO getPaidMemberUserByUid(Long uid); -// /** -// * 获得会员分页 -// * -// * @param pageReqVO 分页查询 -// * @return 会员分页 -// */ -// PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO); + /** + * 获得会员分页 + * + * @param pageReqVO 分页查询 + * @return 会员分页 + */ + PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java index 6e2c121..304b55e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java @@ -164,9 +164,10 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { PaidMemberUserDO paidMemberUserDO = list.get(0); return paidMemberUserDO; } -// @Override -// public PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO) { -// return memberUserMapper.selectPage(pageReqVO); -// } + + @Override + public PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO) { + return paidMemberUserMapper.selectPage(pageReqVO); + } } \ No newline at end of file -- 2.45.2 From 017aea38dafe75d1966c1de11a8b4bee2d4389b8 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Thu, 24 Oct 2024 13:59:45 +0800 Subject: [PATCH 20/24] =?UTF-8?q?=E4=BB=98=E8=B4=B9=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/member/memberconfig/index.ts | 21 ++++ .../src/views/member/memberconfig/index.vue | 114 ++++++++++++++++++ .../src/views/member/memberuser/index.vue | 32 ++--- .../member/enums/ErrorCodeConstants.java | 5 +- .../PaidMemberConfigController.java | 59 +++++++++ .../vo/PaidMemberConfigPageReqVO.java | 28 +++++ .../vo/PaidMemberConfigRespVO.java | 31 +++++ .../vo/PaidMemberConfigSaveReqVO.java | 22 ++++ .../memberconfig/PaidMemberConfigConvert.java | 18 +++ .../memberconfig/PaidMemberConfigDO.java | 39 ++++++ .../memberconfig/PaidMemberConfigMapper.java | 28 +++++ .../memberconfig/PaidMemberConfigService.java | 63 ++++++++++ .../PaidMemberConfigServiceImpl.java | 94 +++++++++++++++ 13 files changed, 536 insertions(+), 18 deletions(-) create mode 100644 yudao-admin-vue3/src/api/member/memberconfig/index.ts create mode 100644 yudao-admin-vue3/src/views/member/memberconfig/index.vue create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/PaidMemberConfigController.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigPageReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigRespVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigSaveReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/memberconfig/PaidMemberConfigConvert.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/memberconfig/PaidMemberConfigDO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/memberconfig/PaidMemberConfigMapper.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/memberconfig/PaidMemberConfigService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/memberconfig/PaidMemberConfigServiceImpl.java diff --git a/yudao-admin-vue3/src/api/member/memberconfig/index.ts b/yudao-admin-vue3/src/api/member/memberconfig/index.ts new file mode 100644 index 0000000..61f4d42 --- /dev/null +++ b/yudao-admin-vue3/src/api/member/memberconfig/index.ts @@ -0,0 +1,21 @@ +import request from '@/config/axios' + +// 付费会员配置 VO +export interface PaidMemberConfigVO { + id: number // 编号 + openPaidMember: boolean // 开启付费会员 + paidMemberPrice: boolean // 商品付费会员价 +} + +// 付费会员配置 API +export const PaidMemberConfigApi = { + // 查询付费会员配置详情 + getPaidMemberConfig: async () => { + return await request.get({ url: `/member/paid-member-config/get` }) + }, + + // 保存付费会员配置 + savePaidMemberConfig: async (data: PaidMemberConfigVO) => { + return await request.put({ url: `/member/paid-member-config/save`, data }) + } +} diff --git a/yudao-admin-vue3/src/views/member/memberconfig/index.vue b/yudao-admin-vue3/src/views/member/memberconfig/index.vue new file mode 100644 index 0000000..16055ec --- /dev/null +++ b/yudao-admin-vue3/src/views/member/memberconfig/index.vue @@ -0,0 +1,114 @@ + + + diff --git a/yudao-admin-vue3/src/views/member/memberuser/index.vue b/yudao-admin-vue3/src/views/member/memberuser/index.vue index 2b95c1f..d6849b1 100644 --- a/yudao-admin-vue3/src/views/member/memberuser/index.vue +++ b/yudao-admin-vue3/src/views/member/memberuser/index.vue @@ -9,19 +9,19 @@ label-width="68px" > - - - - - - - + + + + + + + + + + @@ -108,7 +108,7 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { dateFormatter } from '@/utils/formatTime' import download from '@/utils/download' import { PaidMemberUserApi, PaidMemberUserVO } from '@/api/member/memberuser' -import * as CardApi from '@/api/member/type' +import * as CardVoApid from '@/api/member/type' import PaidMemberUserForm from './PaidMemberUserForm.vue' /** 付费会员 列表 */ @@ -217,10 +217,10 @@ const handleExport = async () => { } } -const cardlist = ref([])//会员类型下拉列表 +const cardlist = ref([])//会员类型下拉列表 /** 初始化 **/ onMounted(async () => { await getList() - cardlist.value = (await CardApi.getcardlist()) as CardApi.cardVO[] + cardlist.value = (await CardVoApid.cardApi.getcardlist()) as CardVoApid.cardVO[] }) diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index 79655f2..efcd957 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -69,8 +69,9 @@ public interface ErrorCodeConstants { ErrorCode MEMBER_USER_NOT_EXISTS = new ErrorCode(1_004_021_000, "会员不存在"); ErrorCode PAID_MEMBER_ORDER_NOT_EXISTS = new ErrorCode(1_004_022_000, "付费会员订单不存在"); ErrorCode PAID_MEMBER_USER_ORDER_NO_NOT_EXISTS = new ErrorCode(1_004_023_000, "生成会员订单号失败,请重新提交"); - ErrorCode PAID_MEMBER_USER_NOT_OPEN = new ErrorCode(1_004_021_000, "会员未开通"); - ErrorCode PAID_MEMBER_USER_PASSED = new ErrorCode(1_004_021_000, "会员已过期"); + ErrorCode PAID_MEMBER_USER_NOT_OPEN = new ErrorCode(1_004_024_000, "会员未开通"); + ErrorCode PAID_MEMBER_USER_PASSED = new ErrorCode(1_004_025_000, "会员已过期"); + ErrorCode PAID_MEMBER_CONFIG_NOT_EXISTS = new ErrorCode(1_004_026_000, "付费会员配置不存在"); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/PaidMemberConfigController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/PaidMemberConfigController.java new file mode 100644 index 0000000..a5dbc18 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/PaidMemberConfigController.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.member.controller.admin.memberconfig; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.member.controller.admin.memberconfig.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.memberconfig.PaidMemberConfigDO; +import cn.iocoder.yudao.module.member.service.memberconfig.PaidMemberConfigService; + +@Tag(name = "管理后台 - 付费会员配置") +@RestController +@RequestMapping("/member/paid-member-config") +@Validated +public class PaidMemberConfigController { + + @Resource + private PaidMemberConfigService paidMemberConfigService; + + + @PutMapping("/save") + @Operation(summary = "保存付费会员配置") + @PreAuthorize("@ss.hasPermission('member:paid-member-config:save')") + public CommonResult updatePaidMemberConfig(@Valid @RequestBody PaidMemberConfigSaveReqVO saveReqVO) { + paidMemberConfigService.saveConfig(saveReqVO); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得付费会员配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('member:paid-member-config:query')") + public CommonResult getPaidMemberConfig() { + PaidMemberConfigDO paidMemberConfig = paidMemberConfigService.getConfig(); + return success(BeanUtils.toBean(paidMemberConfig, PaidMemberConfigRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigPageReqVO.java new file mode 100644 index 0000000..e6d8996 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigPageReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.member.controller.admin.memberconfig.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 付费会员配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PaidMemberConfigPageReqVO extends PageParam { + + @Schema(description = "开启付费会员") + private Boolean openPaidMember; + + @Schema(description = "商品付费会员价", example = "20313") + private Boolean paidMemberPrice; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigRespVO.java new file mode 100644 index 0000000..f55545f --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigRespVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.member.controller.admin.memberconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 付费会员配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PaidMemberConfigRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9256") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "开启付费会员", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("开启付费会员") + private Boolean openPaidMember; + + @Schema(description = "商品付费会员价", requiredMode = Schema.RequiredMode.REQUIRED, example = "20313") + @ExcelProperty("商品付费会员价") + private Boolean paidMemberPrice; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigSaveReqVO.java new file mode 100644 index 0000000..3c8793f --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/memberconfig/vo/PaidMemberConfigSaveReqVO.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.member.controller.admin.memberconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 付费会员配置新增/修改 Request VO") +@Data +public class PaidMemberConfigSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9256") + private Long id; + + @Schema(description = "开启付费会员", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开启付费会员不能为空") + private Boolean openPaidMember; + + @Schema(description = "商品付费会员价", requiredMode = Schema.RequiredMode.REQUIRED, example = "20313") + private Boolean paidMemberPrice; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/memberconfig/PaidMemberConfigConvert.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/memberconfig/PaidMemberConfigConvert.java new file mode 100644 index 0000000..3b5b636 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/memberconfig/PaidMemberConfigConvert.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.member.convert.memberconfig; + +import cn.iocoder.yudao.module.member.controller.admin.memberconfig.vo.PaidMemberConfigSaveReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.memberconfig.PaidMemberConfigDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 付费会员配置 Convert + * + */ +@Mapper +public interface PaidMemberConfigConvert { + + PaidMemberConfigConvert INSTANCE = Mappers.getMapper(PaidMemberConfigConvert.class); + + PaidMemberConfigDO convert(PaidMemberConfigSaveReqVO bean); +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/memberconfig/PaidMemberConfigDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/memberconfig/PaidMemberConfigDO.java new file mode 100644 index 0000000..42a3d78 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/memberconfig/PaidMemberConfigDO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.memberconfig; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 付费会员配置 DO + * + * @author 管理员 + */ +@TableName("paid_member_config") +@KeySequence("paid_member_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PaidMemberConfigDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 开启付费会员 + */ + private Boolean openPaidMember; + /** + * 商品付费会员价 + */ + private Boolean paidMemberPrice; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/memberconfig/PaidMemberConfigMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/memberconfig/PaidMemberConfigMapper.java new file mode 100644 index 0000000..b52e471 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/memberconfig/PaidMemberConfigMapper.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.member.dal.mysql.memberconfig; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.memberconfig.PaidMemberConfigDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.member.controller.admin.memberconfig.vo.*; + +/** + * 付费会员配置 Mapper + * + * @author 管理员 + */ +@Mapper +public interface PaidMemberConfigMapper extends BaseMapperX { + + default PageResult selectPage(PaidMemberConfigPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PaidMemberConfigDO::getOpenPaidMember, reqVO.getOpenPaidMember()) + .eqIfPresent(PaidMemberConfigDO::getPaidMemberPrice, reqVO.getPaidMemberPrice()) + .betweenIfPresent(PaidMemberConfigDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PaidMemberConfigDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/memberconfig/PaidMemberConfigService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/memberconfig/PaidMemberConfigService.java new file mode 100644 index 0000000..a61c43b --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/memberconfig/PaidMemberConfigService.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.member.service.memberconfig; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.member.controller.admin.memberconfig.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.memberconfig.PaidMemberConfigDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 付费会员配置 Service 接口 + * + * @author 管理员 + */ +public interface PaidMemberConfigService { + + /** + * 创建付费会员配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPaidMemberConfig(@Valid PaidMemberConfigSaveReqVO createReqVO); + + /** + * 更新付费会员配置 + * + * @param updateReqVO 更新信息 + */ + void updatePaidMemberConfig(@Valid PaidMemberConfigSaveReqVO updateReqVO); + + /** + * 删除付费会员配置 + * + * @param id 编号 + */ + void deletePaidMemberConfig(Long id); + + /** + * 获得付费会员配置 + * + * @param id 编号 + * @return 付费会员配置 + */ + PaidMemberConfigDO getPaidMemberConfig(Long id); + + /** + * 获得付费会员配置分页 + * + * @param pageReqVO 分页查询 + * @return 付费会员配置分页 + */ + PageResult getPaidMemberConfigPage(PaidMemberConfigPageReqVO pageReqVO); + + /** + * 获得付费会员配置 + * + * @return 会员配置 + */ + PaidMemberConfigDO getConfig(); + + void saveConfig(PaidMemberConfigSaveReqVO saveReqVO); +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/memberconfig/PaidMemberConfigServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/memberconfig/PaidMemberConfigServiceImpl.java new file mode 100644 index 0000000..d55bb2d --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/memberconfig/PaidMemberConfigServiceImpl.java @@ -0,0 +1,94 @@ +package cn.iocoder.yudao.module.member.service.memberconfig; + +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.member.convert.memberconfig.PaidMemberConfigConvert; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.member.controller.admin.memberconfig.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.memberconfig.PaidMemberConfigDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.member.dal.mysql.memberconfig.PaidMemberConfigMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; + +/** + * 付费会员配置 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class PaidMemberConfigServiceImpl implements PaidMemberConfigService { + + @Resource + private PaidMemberConfigMapper paidMemberConfigMapper; + + @Override + public Long createPaidMemberConfig(PaidMemberConfigSaveReqVO createReqVO) { + // 插入 + PaidMemberConfigDO paidMemberConfig = BeanUtils.toBean(createReqVO, PaidMemberConfigDO.class); + paidMemberConfigMapper.insert(paidMemberConfig); + // 返回 + return paidMemberConfig.getId(); + } + + @Override + public void updatePaidMemberConfig(PaidMemberConfigSaveReqVO updateReqVO) { + // 校验存在 + validatePaidMemberConfigExists(updateReqVO.getId()); + // 更新 + PaidMemberConfigDO updateObj = BeanUtils.toBean(updateReqVO, PaidMemberConfigDO.class); + paidMemberConfigMapper.updateById(updateObj); + } + + @Override + public void deletePaidMemberConfig(Long id) { + // 校验存在 + validatePaidMemberConfigExists(id); + // 删除 + paidMemberConfigMapper.deleteById(id); + } + + private void validatePaidMemberConfigExists(Long id) { + if (paidMemberConfigMapper.selectById(id) == null) { + throw exception(PAID_MEMBER_CONFIG_NOT_EXISTS); + } + } + + @Override + public PaidMemberConfigDO getPaidMemberConfig(Long id) { + return paidMemberConfigMapper.selectById(id); + } + + @Override + public PageResult getPaidMemberConfigPage(PaidMemberConfigPageReqVO pageReqVO) { + return paidMemberConfigMapper.selectPage(pageReqVO); + } + + @Override + public PaidMemberConfigDO getConfig() { + List list = paidMemberConfigMapper.selectList(); + return CollectionUtils.getFirst(list); + } + + @Override + public void saveConfig(PaidMemberConfigSaveReqVO saveReqVO) { + //存在,则更新 + PaidMemberConfigDO paidMemberConfigDO = getConfig(); + if(paidMemberConfigDO != null){ + paidMemberConfigMapper.updateById(PaidMemberConfigConvert.INSTANCE.convert(saveReqVO).setId(paidMemberConfigDO.getId())); + return; + } + //不存在,则进行插入 + paidMemberConfigMapper.insert(PaidMemberConfigConvert.INSTANCE.convert(saveReqVO)); + } + +} \ No newline at end of file -- 2.45.2 From 1bf166aa0f38a3415abc37e8e8a465837dff0df4 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Thu, 24 Oct 2024 16:30:24 +0800 Subject: [PATCH 21/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=E6=94=AF=E4=BB=98bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/user/vo/AppMemberUserInfoRespVO.java | 4 ++++ .../module/member/service/user/MemberUserServiceImpl.java | 2 +- .../yudao/module/pay/dal/mysql/order/PayOrderMapper.java | 6 ++++++ .../yudao/module/pay/service/order/PayOrderServiceImpl.java | 6 +++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java index 7a13f20..ea22be3 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java @@ -4,6 +4,9 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @Schema(description = "用户 APP - 用户个人信息 Response VO") @Data @@ -45,6 +48,7 @@ public class AppMemberUserInfoRespVO { private String cardName; @Schema(description = "会员名称", requiredMode = Schema.RequiredMode.REQUIRED) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private String cardExpirationTime; @Schema(description = "用户 App - 会员等级") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index a83ab5b..6400bf8 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -322,7 +322,7 @@ public class MemberUserServiceImpl implements MemberUserService { validateMobileUnique(memberUserDO.getId(), memberUserDO.getMobile()); // 更新 - if(memberUserDO.getLevelId() == 5){ + if(memberUserDO.getLevelId() != null && memberUserDO.getLevelId() == 5){ memberUserDO.setLevelId(Long.parseLong("1")); } memberUserMapper.updateById(memberUserDO); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderMapper.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderMapper.java index 95510d5..a3c00ad 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderMapper.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderMapper.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.pay.dal.mysql.order; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO; import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; @@ -59,4 +60,9 @@ public interface PayOrderMapper extends BaseMapperX { .lt(PayOrderDO::getExpireTime, expireTime)); } + default PayOrderDO selectByAppIdAndMerchantOrderIdAndSubject(Long appId, String merchantOrderId, String subject){ + return selectOne(PayOrderDO::getAppId, appId, + PayOrderDO::getMerchantOrderId, merchantOrderId, + PayOrderDO::getSubject,subject); + } } diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java index 6a6dbb9..709ea49 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java @@ -120,10 +120,14 @@ public class PayOrderServiceImpl implements PayOrderService { public Long createOrder(PayOrderCreateReqDTO reqDTO) { // 校验 App PayAppDO app = appService.validPayApp(reqDTO.getAppId()); - // 查询对应的支付交易单是否已经存在。如果是,则直接返回 PayOrderDO order = orderMapper.selectByAppIdAndMerchantOrderId( reqDTO.getAppId(), reqDTO.getMerchantOrderId()); + if(reqDTO.getSubject() != null && reqDTO.getSubject().equals("会员支付购卡")){ + /// 查询对应的会员购卡是否已经存在。如果是,则直接返回(付费会员订单) + order = orderMapper.selectByAppIdAndMerchantOrderIdAndSubject(reqDTO.getAppId(),reqDTO.getMerchantOrderId() + ,reqDTO.getSubject()); + } if (order != null) { log.warn("[createOrder][appId({}) merchantOrderId({}) 已经存在对应的支付单({})]", order.getAppId(), order.getMerchantOrderId(), toJsonString(order)); // 理论来说,不会出现这个情况 -- 2.45.2 From 734af91921bc8500b3f6e6fa88d702f6e2756b37 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Thu, 24 Oct 2024 18:35:52 +0800 Subject: [PATCH 22/24] =?UTF-8?q?=E4=BC=9A=E5=91=98=EF=BC=88=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E6=94=AF=E4=BB=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataobject/member/TradeMemberUserDO.java | 156 +++++++++++++++++ .../member/TradePaidMemberUserDO.java | 157 ++++++++++++++++++ .../mysql/member/TradeMemberUserMapper.java | 72 ++++++++ .../member/TradePaidMemberUserMapper.java | 14 ++ .../member/TradeMemberUserService.java | 26 +++ .../member/TradeMemberUserServiceImpl.java | 107 ++++++++++++ .../member/TradePaidMemberUserService.java | 37 +++++ .../TradeTradePaidMemberUserServiceImpl.java | 95 +++++++++++ .../order/TradeOrderUpdateServiceImpl.java | 31 +++- .../service/user/MemberUserService.java | 2 + .../service/user/MemberUserServiceImpl.java | 13 ++ .../service/user/PaidMemberUserService.java | 7 + .../user/PaidMemberUserServiceImpl.java | 23 +++ .../app/member/AppPaidMembeController.java | 19 +-- 14 files changed, 742 insertions(+), 17 deletions(-) create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/member/TradeMemberUserDO.java create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/member/TradePaidMemberUserDO.java create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/member/TradeMemberUserMapper.java create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/member/TradePaidMemberUserMapper.java create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeMemberUserService.java create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeMemberUserServiceImpl.java create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradePaidMemberUserService.java create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeTradePaidMemberUserServiceImpl.java diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/member/TradeMemberUserDO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/member/TradeMemberUserDO.java new file mode 100644 index 0000000..f97712f --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/member/TradeMemberUserDO.java @@ -0,0 +1,156 @@ +package cn.iocoder.yudao.module.trade.dal.dataobject.member; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.enums.TerminalEnum; +import cn.iocoder.yudao.framework.ip.core.Area; +import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import cn.iocoder.yudao.module.system.enums.common.SexEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 会员用户 DO + * + * uk_mobile 索引:基于 {@link #mobile} 字段 + * + * @author 芋道源码 + */ +@TableName(value = "member_user", autoResultMap = true) +@KeySequence("member_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TradeMemberUserDO extends TenantBaseDO { + + // ========== 账号信息 ========== + + /** + * 用户ID + */ + @TableId + private Long id; + /** + * 手机 + */ + private String mobile; + /** + * 加密后的密码 + * + * 因为目前使用 {@link BCryptPasswordEncoder} 加密器,所以无需自己处理 salt 盐 + */ + private String password; + /** + * 帐号状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 注册 IP + */ + private String registerIp; + /** + * 注册终端 + * 枚举 {@link TerminalEnum} + */ + private Integer registerTerminal; + /** + * 最后登录IP + */ + private String loginIp; + /** + * 最后登录时间 + */ + private LocalDateTime loginDate; + + // ========== 基础信息 ========== + + /** + * 用户昵称 + */ + private String nickname; + /** + * 用户头像 + */ + private String avatar; + + /** + * 真实名字 + */ + private String name; + /** + * 性别 + * + * 枚举 {@link SexEnum} + */ + private Integer sex; + /** + * 出生日期 + */ + private LocalDateTime birthday; + /** + * 所在地 + * + * 关联 {@link Area#getId()} 字段 + */ + private Integer areaId; + /** + * 用户备注 + */ + private String mark; + + // ========== 其它信息 ========== + + /** + * 积分 + */ + private Integer point; + // TODO 疯狂:增加一个 totalPoint;个人信息接口要返回 + + /** + * 会员标签列表,以逗号分隔 + */ + @TableField(typeHandler = LongListTypeHandler.class) + private List tagIds; + + /** + * 会员级别编号 + * + * 关联 {@link MemberLevelDO#getId()} 字段 + */ + private Long levelId; + /** + * 会员经验 + */ + private Integer experience; + /** + * 用户分组编号 + * + * 关联 {@link MemberGroupDO#getId()} 字段 + */ + private Long groupId; + + /** + * 是否绑过卡,是否开通过会员(0:未开通,1:试用,2:有效期,3:永久) + */ + private Integer activate; + + /** + * 会员权益id + */ + private Long noticeInterestId; + /** + * 角色id(0:普通用户, 1:工作人员) + */ + private Integer roleId; +} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/member/TradePaidMemberUserDO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/member/TradePaidMemberUserDO.java new file mode 100644 index 0000000..476bc3c --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/member/TradePaidMemberUserDO.java @@ -0,0 +1,157 @@ +package cn.iocoder.yudao.module.trade.dal.dataobject.member; + +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * 会员 DO + * + * @author 管理员 + */ +@TableName("paid_member_user") +@KeySequence("paid_member_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TradePaidMemberUserDO extends TenantBaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 用户编号 + */ + private Long uid; + /** + * 手机号 + */ + private String mobile; + /** + * 密码 + */ + private String password; + /** + * 状态 + */ + private Integer status; + /** + * 注册 IP + */ + private String registerIp; + /** + * 注册终端 + */ + private Integer registerTerminal; + /** + * 最后登录IP + */ + private String loginIp; + /** + * 最后登录时间 + */ + private LocalDateTime loginDate; + /** + * 用户昵称 + */ + private String nickname; + /** + * 头像 + */ + private String avatar; + /** + * 真实名字 + */ + private String name; + /** + * 性别 + */ + private Integer sex; + /** + * 出生日期 + */ + private LocalDateTime birthday; + /** + * 所在地 + */ + private Integer areaId; + /** + * 用户备注 + */ + private String mark; + /** + * 积分 + */ + private Integer point; + /** + * 用户标签编号列表,以逗号分隔 + */ + private String tagIds; + /** + * 等级编号 + */ + private Long levelId; + /** + * 经验 + */ + private Integer experience; + /** + * 用户分组编号 + */ + private Long groupId; + + /** + * 是否支付,0:未支付,1:已支付 + * */ + private Boolean paid; + + /* + * 支付时间 + * */ + private LocalDateTime payTime; + /** + * 到期时间 + */ + private LocalDateTime cardExpirationTime; + /** + * 支付金额,单位为分 + */ + private Integer price; + /** + * 期限天数 + */ + private String deadlineDay ; + /** + * 支付方式 + */ + private String payType; + /** + * 支付渠道 + */ + private String payChannel; + /** + * 订单号 + */ + private String orderNo; + /** + * 支付订单编号 + * + * 关联 {@link PayOrderDO#getId()} + */ + private Long payOrderId; + /** + * 会员类型 + */ + private String payMemberType; + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/member/TradeMemberUserMapper.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/member/TradeMemberUserMapper.java new file mode 100644 index 0000000..0642ddc --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/member/TradeMemberUserMapper.java @@ -0,0 +1,72 @@ +package cn.iocoder.yudao.module.trade.dal.mysql.member; + +import cn.hutool.core.lang.Assert; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.trade.dal.dataobject.member.TradeMemberUserDO; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 会员 User Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface TradeMemberUserMapper extends BaseMapperX { + + default TradeMemberUserDO selectByMobile(String mobile) { + return selectOne(TradeMemberUserDO::getMobile, mobile); + } + + default List selectListByNicknameLike(String nickname) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(TradeMemberUserDO::getNickname, nickname)); + } + + + default Long selectCountByGroupId(Long groupId) { + return selectCount(TradeMemberUserDO::getGroupId, groupId); + } + + default Long selectCountByLevelId(Long levelId) { + return selectCount(TradeMemberUserDO::getLevelId, levelId); + } + + default Long selectCountByTagId(Long tagId) { + return selectCount(new LambdaQueryWrapperX() + .apply("FIND_IN_SET({0}, tag_ids)", tagId)); + } + + /** + * 更新用户积分(增加) + * + * @param id 用户编号 + * @param incrCount 增加积分(正数) + */ + default void updatePointIncr(Long id, Integer incrCount) { + Assert.isTrue(incrCount > 0); + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() + .setSql(" point = point + " + incrCount) + .eq(TradeMemberUserDO::getId, id); + update(null, lambdaUpdateWrapper); + } + + /** + * 更新用户积分(减少) + * + * @param id 用户编号 + * @param incrCount 增加积分(负数) + * @return 更新行数 + */ + default int updatePointDecr(Long id, Integer incrCount) { + Assert.isTrue(incrCount < 0); + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() + .setSql(" point = point + " + incrCount) // 负数,所以使用 + 号 + .eq(TradeMemberUserDO::getId, id); + return update(null, lambdaUpdateWrapper); + } + +} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/member/TradePaidMemberUserMapper.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/member/TradePaidMemberUserMapper.java new file mode 100644 index 0000000..d0d33d8 --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/member/TradePaidMemberUserMapper.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.trade.dal.mysql.member; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.trade.dal.dataobject.member.TradePaidMemberUserDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 会员 Mapper + * + * @author 管理员 + */ +@Mapper +public interface TradePaidMemberUserMapper extends BaseMapperX { +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeMemberUserService.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeMemberUserService.java new file mode 100644 index 0000000..9061ee5 --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeMemberUserService.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.trade.service.member; + +import cn.iocoder.yudao.module.trade.dal.dataobject.member.TradeMemberUserDO; + +/** + * 会员用户 Service 接口 + * + * @author 芋道源码 + */ +public interface TradeMemberUserService { + + + /** + * 通过用户 ID 查询用户 + * + * @param id 用户ID + * @return 用户对象信息 + */ + TradeMemberUserDO getUser(Long id); + + + void updateUserDo(TradeMemberUserDO user); + + void updateActivate(String cardName); + +} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeMemberUserServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeMemberUserServiceImpl.java new file mode 100644 index 0000000..23a0fa7 --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeMemberUserServiceImpl.java @@ -0,0 +1,107 @@ +package cn.iocoder.yudao.module.trade.service.member; + +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.module.trade.dal.dataobject.member.TradeMemberUserDO; +import cn.iocoder.yudao.module.trade.dal.mysql.member.TradeMemberUserMapper; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; + +/** + * 会员 User Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Valid +@Slf4j +public class TradeMemberUserServiceImpl implements TradeMemberUserService { + + @Resource + private TradeMemberUserMapper tradeMemberUserMapper; + + + + @Override + public TradeMemberUserDO getUser(Long id) { + return tradeMemberUserMapper.selectById(id); + } + + + + private TradeMemberUserDO validateUserExists(String mobile) { + TradeMemberUserDO user = tradeMemberUserMapper.selectByMobile(mobile); + if (user == null) { + throw exception(USER_MOBILE_NOT_EXISTS); + } + return user; + } + + + @VisibleForTesting + TradeMemberUserDO validateUserExists(Long id) { + if (id == null) { + return null; + } + TradeMemberUserDO user = tradeMemberUserMapper.selectById(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + return user; + } + + @VisibleForTesting + void validateMobileUnique(Long id, String mobile) { + if (StrUtil.isBlank(mobile)) { + return; + } + TradeMemberUserDO user = tradeMemberUserMapper.selectByMobile(mobile); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_MOBILE_USED, mobile); + } + if (!user.getId().equals(id)) { + throw exception(USER_MOBILE_USED, mobile); + } + } + + + + @Override + public void updateUserDo(TradeMemberUserDO tradeMemberUserDO) { + // 校验存在 + validateUserExists(tradeMemberUserDO.getId()); + // 校验手机唯一 + validateMobileUnique(tradeMemberUserDO.getId(), tradeMemberUserDO.getMobile()); + + // 更新 + if(tradeMemberUserDO.getLevelId() != null && tradeMemberUserDO.getLevelId() == 5){ + tradeMemberUserDO.setLevelId(Long.parseLong("1")); + } + tradeMemberUserMapper.updateById(tradeMemberUserDO); + } + + @Override + public void updateActivate(String cardName) { + TradeMemberUserDO tradeMemberUserDO = getUser(getLoginUserId()); + //设置个人信息的会员状态,0:未开通,1试用,2有效期,3永久 + if(cardName.equals("永久")){ + tradeMemberUserDO.setActivate(3); + }else { + tradeMemberUserDO.setActivate(2); + } + tradeMemberUserMapper.updateById(tradeMemberUserDO); + } + +} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradePaidMemberUserService.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradePaidMemberUserService.java new file mode 100644 index 0000000..823c807 --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradePaidMemberUserService.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.trade.service.member; + +import cn.iocoder.yudao.module.trade.dal.dataobject.member.TradePaidMemberUserDO; + +import javax.validation.Valid; +import java.time.LocalDateTime; + +/** + * 会员 Service 接口 + * + * @author 管理员 + */ +public interface TradePaidMemberUserService { + + + + LocalDateTime getDeadLineDay(String cardName); + + TradePaidMemberUserDO getPaidMemberUserByOrderNo(String orderNO); + + /** + * 判断当前支付方式 + * */ + String currentPayType(String payChannel); + + /** + * 更新会员 + * + * @param updateReqVO 更新信息 + */ + void update(@Valid TradePaidMemberUserDO updateReqVO); + + + + TradePaidMemberUserDO getByIdAndPayOrderId(Long id, Long payOrderId); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeTradePaidMemberUserServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeTradePaidMemberUserServiceImpl.java new file mode 100644 index 0000000..34c5b17 --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/member/TradeTradePaidMemberUserServiceImpl.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.trade.service.member; + +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.trade.dal.dataobject.member.TradePaidMemberUserDO; +import cn.iocoder.yudao.module.trade.dal.mysql.member.TradePaidMemberUserMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.PAID_MEMBER_ORDER_NOT_EXISTS; + +/** + * 会员 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class TradeTradePaidMemberUserServiceImpl implements TradePaidMemberUserService { + + @Resource + private TradePaidMemberUserMapper tradePaidMemberUserMapper; + + private void validateMemberUserExists(Long id) { + if (tradePaidMemberUserMapper.selectById(id) == null) { + throw exception(PAID_MEMBER_ORDER_NOT_EXISTS); + } + } + + + + //获取会员类型对应的过期时间 + @Override + public LocalDateTime getDeadLineDay(String cardName) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime deadlineDay; + //判断是否具有过期时间,该操作为续费 + if (cardName.equals("试用")){ + deadlineDay = now.plus(1, ChronoUnit.DAYS); + } else if (cardName.equals("月卡")) { + deadlineDay = now.plus(1,ChronoUnit.MONTHS); + } else if (cardName.equals("季卡")) { + deadlineDay = now.plus(3,ChronoUnit.MONTHS); + } else if (cardName.equals("年卡")) { + deadlineDay = now.plus(1,ChronoUnit.YEARS); + } else { + //永久设置为一个非常远的的日期 + deadlineDay = LocalDateTime.of(9999,12,31,23,59,59); + } + return deadlineDay; + } + + @Override + public TradePaidMemberUserDO getPaidMemberUserByOrderNo(String orderNO) { + TradePaidMemberUserDO tradePaidMemberUserDO = tradePaidMemberUserMapper.selectOne(TradePaidMemberUserDO::getOrderNo,orderNO); + return tradePaidMemberUserDO; + } + + @Override + public String currentPayType(String payChannel) { + String payType = null; + if (payChannel.equals("wallet")){ + payType = "余额"; + } else if(payChannel.startsWith("wx")){ + payType = "微信"; + } else if (payChannel.startsWith("alipay")) { + payType = "支付宝"; + } else { + payType = "模拟支付"; + } + return payType; + } + + @Override + public void update(TradePaidMemberUserDO updateReqVO) { + // 校验存在 + validateMemberUserExists(updateReqVO.getId()); + tradePaidMemberUserMapper.updateById(updateReqVO); + } + + + + @Override + public TradePaidMemberUserDO getByIdAndPayOrderId(Long id, Long payOrderId) { + TradePaidMemberUserDO tradePaidMemberUserDO = tradePaidMemberUserMapper.selectOne( + new LambdaQueryWrapperX().eqIfPresent(TradePaidMemberUserDO::getId,id) + .eqIfPresent(TradePaidMemberUserDO::getPayOrderId,payOrderId)); + return tradePaidMemberUserDO; + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java index 80d4545..86b4ec0 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java @@ -22,7 +22,6 @@ import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi; import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO; import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; -import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; import cn.iocoder.yudao.module.promotion.dal.dataobject.pointorder.PointOrderDO; import cn.iocoder.yudao.module.promotion.dal.mysql.pointorder.PointOrderMapper; import cn.iocoder.yudao.module.system.api.social.SocialUserApi; @@ -38,6 +37,8 @@ import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderI import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; import cn.iocoder.yudao.module.trade.dal.dataobject.cart.CartDO; import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; +import cn.iocoder.yudao.module.trade.dal.dataobject.member.TradeMemberUserDO; +import cn.iocoder.yudao.module.trade.dal.dataobject.member.TradePaidMemberUserDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper; @@ -50,6 +51,8 @@ import cn.iocoder.yudao.module.trade.framework.order.core.annotations.TradeOrder import cn.iocoder.yudao.module.trade.framework.order.core.utils.TradeOrderLogUtils; import cn.iocoder.yudao.module.trade.service.cart.CartService; import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; +import cn.iocoder.yudao.module.trade.service.member.TradeMemberUserService; +import cn.iocoder.yudao.module.trade.service.member.TradePaidMemberUserService; import cn.iocoder.yudao.module.trade.service.message.TradeMessageService; import cn.iocoder.yudao.module.trade.service.message.bo.TradeOrderMessageWhenDeliveryOrderReqBO; import cn.iocoder.yudao.module.trade.service.order.handler.TradeOrderHandler; @@ -75,6 +78,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.minusTime; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getTerminal; import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_NOT_FOUND; @@ -128,6 +132,12 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @Resource private ProductSpuApi productSpuApi; + @Resource + private TradeMemberUserService tradeMemberUserService; + + @Resource + private TradePaidMemberUserService tradePaidMemberUserService; + // =================== Order =================== @@ -325,6 +335,25 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { TradeOrderDO order = orderResult.getKey(); PayOrderRespDTO payOrder = orderResult.getValue(); + //会员用户信息,支付状态修改 + TradeMemberUserDO tradeMemberUserDO = tradeMemberUserService.getUser(getLoginUserId()); + TradePaidMemberUserDO tradePaidMemberUserDO = tradePaidMemberUserService.getByIdAndPayOrderId(id,payOrderId); + if(tradePaidMemberUserDO != null && tradeMemberUserDO != null){ + tradePaidMemberUserDO.setPayTime(LocalDateTime.now()); + tradePaidMemberUserDO.setPaid(true); + //过期时间 + LocalDateTime cardExpirationTime = tradePaidMemberUserService.getDeadLineDay(tradePaidMemberUserDO.getPayMemberType()); + tradePaidMemberUserDO.setCardExpirationTime(cardExpirationTime); + tradePaidMemberUserDO.setPayChannel(payOrder.getChannelCode()); + //支付方式 + String payType = tradePaidMemberUserService.currentPayType(payOrder.getChannelCode()); + tradePaidMemberUserDO.setPayType(payType); + //更新会员订单 + tradePaidMemberUserService.update(tradePaidMemberUserDO); + //更新用户会员状态 + tradeMemberUserService.updateActivate(tradePaidMemberUserDO.getPayMemberType()); + } + // 2. 更新 TradeOrderDO 状态为已支付,等待发货 int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(), new TradeOrderDO().setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()).setPayStatus(true) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index d33d722..21c7819 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -189,4 +189,6 @@ public interface MemberUserService { void updateUserDo(MemberUserDO user); + void updateActivate(String cardName); + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 6400bf8..8727150 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -38,6 +38,7 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; /** @@ -328,4 +329,16 @@ public class MemberUserServiceImpl implements MemberUserService { memberUserMapper.updateById(memberUserDO); } + @Override + public void updateActivate(String cardName) { + MemberUserDO memberUserDO = getUser(getLoginUserId()); + //设置个人信息的会员状态,0:未开通,1试用,2有效期,3永久 + if(cardName.equals("永久")){ + memberUserDO.setActivate(3); + }else { + memberUserDO.setActivate(2); + } + memberUserMapper.updateById(memberUserDO); + } + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java index 16c4969..67ada52 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserService.java @@ -61,6 +61,11 @@ public interface PaidMemberUserService { PaidMemberUserDO getPaidMemberUserByOrderNo(String orderNO); + /** + * 判断当前支付方式 + * */ + String currentPayType(String payChannel); + /** * 更新会员 * @@ -79,4 +84,6 @@ public interface PaidMemberUserService { */ PageResult getMemberUserPage(PaidMemberUserPageReqVO pageReqVO); + PaidMemberUserDO getByIdAndPayOrderId(Long id,Long payOrderId); + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java index 304b55e..b9fa2d1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/PaidMemberUserServiceImpl.java @@ -146,6 +146,21 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { return paidMemberUserDO; } + @Override + public String currentPayType(String payChannel) { + String payType = null; + if (payChannel.equals("wallet")){ + payType = "余额"; + } else if(payChannel.startsWith("wx")){ + payType = "微信"; + } else if (payChannel.startsWith("alipay")) { + payType = "支付宝"; + } else { + payType = "模拟支付"; + } + return payType; + } + @Override public void update(PaidMemberUserDO updateReqVO) { // 校验存在 @@ -170,4 +185,12 @@ public class PaidMemberUserServiceImpl implements PaidMemberUserService { return paidMemberUserMapper.selectPage(pageReqVO); } + @Override + public PaidMemberUserDO getByIdAndPayOrderId(Long id, Long payOrderId) { + PaidMemberUserDO paidMemberUserDO = paidMemberUserMapper.selectOne( + new LambdaQueryWrapperX().eqIfPresent(PaidMemberUserDO::getId,id) + .eqIfPresent(PaidMemberUserDO::getPayOrderId,payOrderId)); + return paidMemberUserDO; + } + } \ No newline at end of file diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java index 11de3ff..1cf5851 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/member/AppPaidMembeController.java @@ -175,25 +175,12 @@ public class AppPaidMembeController { LocalDateTime cardExpirationTime = paidMemberUserService.getDeadLineDay(notifyReqDTO.getCardName()); paidMemberUserDO.setCardExpirationTime(cardExpirationTime); paidMemberUserDO.setPayChannel(notifyReqDTO.getPayChannel()); - if (notifyReqDTO.getPayChannel().equals("wallet")){ - paidMemberUserDO.setPayType("余额"); - } else if(notifyReqDTO.getPayChannel().startsWith("wx")){ - paidMemberUserDO.setPayType("微信"); - } else if (notifyReqDTO.getPayChannel().startsWith("alipay")) { - paidMemberUserDO.setPayType("支付宝"); - } else { - paidMemberUserDO.setPayType("模拟支付"); - } + String payType = paidMemberUserService.currentPayType(notifyReqDTO.getPayChannel()); + paidMemberUserDO.setPayType(payType); //更新会员订单 paidMemberUserService.update(paidMemberUserDO); - //设置个人信息的会员状态,0:未开通,1试用,2有效期,3永久 - if(notifyReqDTO.getCardName().equals("永久")){ - memberUserDO.setActivate(3); - }else { - memberUserDO.setActivate(2); - } //更新用户会员状态 - memberUserService.updateUserDo(memberUserDO); + memberUserService.updateActivate(paidMemberUserDO.getPayMemberType()); // return success(PayMemberOrderConvert.INSTANCE.convert(paidMemberUserDO.getId(),payOrderId // ,paidMemberUserDO.getCardExpirationTime(),memberUserDO.getActivate())); return success(true); -- 2.45.2 From dcff7fc4a55201373419c3d2e031a4cdc1612500 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Thu, 24 Oct 2024 18:57:03 +0800 Subject: [PATCH 23/24] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?=EF=BC=88=E6=97=A5=E5=BF=97=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trade/service/order/TradeOrderUpdateServiceImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java index 86b4ec0..65806ac 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java @@ -334,11 +334,12 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { KeyValue orderResult = validateOrderPayable(id, payOrderId); TradeOrderDO order = orderResult.getKey(); PayOrderRespDTO payOrder = orderResult.getValue(); - + System.out.println("交易订单成功id:"+id+"和payOrderId:"+payOrderId); //会员用户信息,支付状态修改 TradeMemberUserDO tradeMemberUserDO = tradeMemberUserService.getUser(getLoginUserId()); TradePaidMemberUserDO tradePaidMemberUserDO = tradePaidMemberUserService.getByIdAndPayOrderId(id,payOrderId); if(tradePaidMemberUserDO != null && tradeMemberUserDO != null){ + System.out.println("进入会员支付修改操作paid:"+tradePaidMemberUserDO+"和member:"+tradeMemberUserDO); tradePaidMemberUserDO.setPayTime(LocalDateTime.now()); tradePaidMemberUserDO.setPaid(true); //过期时间 @@ -350,10 +351,12 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { tradePaidMemberUserDO.setPayType(payType); //更新会员订单 tradePaidMemberUserService.update(tradePaidMemberUserDO); + System.out.println("成功更新会员订单paid:"+tradePaidMemberUserDO); //更新用户会员状态 tradeMemberUserService.updateActivate(tradePaidMemberUserDO.getPayMemberType()); + System.out.println("成功更新用户的会员状态member:"+tradeMemberUserDO); } - + System.out.println("会员修改操作结束!!!"); // 2. 更新 TradeOrderDO 状态为已支付,等待发货 int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(), new TradeOrderDO().setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()).setPayStatus(true) -- 2.45.2 From aa3d6de962edd525824c81bfa7173e0a3c394b1f Mon Sep 17 00:00:00 2001 From: sonjinyon <2476687577@qq.com> Date: Fri, 25 Oct 2024 15:51:43 +0800 Subject: [PATCH 24/24] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E5=95=86=E5=9F=8E=EF=BC=8C=E6=88=91=E7=9A=84=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=98=BE=E7=A4=BA=EF=BC=8C=E5=85=91=E6=8D=A2?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dal/mysql/order/TradeOrderMapper.java | 4 ++-- .../point/AppMemberPointRecordController.java | 11 ++++++++++ .../dataobject/point/MemberPointRecordDO.java | 10 ++++++++++ .../point/MemberPointRecordService.java | 2 ++ .../point/MemberPointRecordServiceImpl.java | 20 +++++++++++++++++++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java index e714837..55492e5 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java @@ -132,10 +132,10 @@ public interface TradeOrderMapper extends BaseMapperX { return selectList(wrapperX); } - @Select(" SELECT a.status,d.label,a.create_time,a.pay_price,a.use_point,c.name,c.pic_url,b.count FROM trade_order a " + + @Select(" SELECT a.id,a.status,d.label,a.create_time,a.pay_price,a.use_point,c.name,c.pic_url,b.count FROM trade_order a " + " inner join trade_order_item b on a.id = b.order_id " + " inner join (SELECT sort, label, value, dict_type, css_class FROM system_dict_data WHERE dict_type = 'trade_order_status') d on d.sort = a.status "+ " inner join product_spu c on b.spu_id = c.id " + - " where a.user_id = #{userId} and a.use_point > 0 order by a.create_time ASC ") + " where a.user_id = #{userId} and a.use_point > 0 order by a.create_time DESC ") List getPointOrder(Long userId); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java index 3871b54..762a3a4 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java @@ -41,4 +41,15 @@ public class AppMemberPointRecordController { return success(BeanUtils.toBean(pageResult, AppMemberPointRecordRespVO.class)); } + + + @GetMapping("/getPointInfo") + public CommonResult getPointInfo() { + MemberPointRecordDO pointInfo = pointRecordService.getPointInfo(getLoginUserId()); + return success(pointInfo); + } + + + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointRecordDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointRecordDO.java index f884f08..de5a731 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointRecordDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/point/MemberPointRecordDO.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.member.dal.dataobject.point; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -66,4 +67,13 @@ public class MemberPointRecordDO extends BaseDO { */ private Integer totalPoint; + + //总共获得的积分 + @TableField(exist = false) + private Integer addUp; + + //总共消费的积分 + @TableField(exist = false) + private Integer reduce; + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordService.java index 7e660d5..493c38b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordService.java @@ -39,4 +39,6 @@ public interface MemberPointRecordService { * @param bizId 业务编号 */ void createPointRecord(Long userId, Integer point, MemberPointBizTypeEnum bizType, String bizId); + + MemberPointRecordDO getPointInfo(Long userId); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java index d21c7bf..91de488 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java @@ -92,4 +92,24 @@ public class MemberPointRecordServiceImpl implements MemberPointRecordService { memberPointRecordMapper.insert(record); } + @Override + public MemberPointRecordDO getPointInfo(Long userId) { + List memberPointRecordDOList = memberPointRecordMapper.selectList("user_id", userId); + Integer addUp = 0; + Integer reduce = 0; + for (int i = 0; i < memberPointRecordDOList.size(); i++) { + MemberPointRecordDO memberPointRecordDO = memberPointRecordDOList.get(i); + if (memberPointRecordDO.getPoint() > 0){ //获得积分 + addUp = addUp + memberPointRecordDO.getPoint(); + } + if (memberPointRecordDO.getPoint() < 0){ //消费积分 + reduce = reduce + memberPointRecordDO.getPoint(); + } + } + MemberPointRecordDO memberPointRecordDO = new MemberPointRecordDO(); + memberPointRecordDO.setAddUp(addUp); + memberPointRecordDO.setReduce(reduce); + return memberPointRecordDO; + } + } -- 2.45.2