From a2623df7e24b461f1f9eece96ce0ce260bc6840a Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 30 Jan 2026 15:24:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E7=A1=AC=E4=BB=B6=E6=A0=B8=E9=94=80?= =?UTF-8?q?=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/dto/hard/HandCancelActCodeDto.java | 18 ++++ .../controller/hard/HardApiController.java | 14 +-- .../hard/service/HardOrderService.java | 7 +- .../impl/order/HardOrderServiceImpl.java | 12 +++ .../api/constant/WalletCodeBizEnum.java | 1 + .../wallet/api/dto/act/ActComCancelDto.java | 31 +++++++ .../api/feign/RemoteCodeUseService.java | 6 -- .../wallet/api/feign/RemoteComActService.java | 42 +++++++++ .../wallet/api/vo/act/ActComItemVo.java | 21 +++++ .../controller/WalletCodeUseController.java | 11 +++ .../controller/act/ActComController.java | 44 ++++++++-- .../wallet/service/ActCancelItemService.java | 7 ++ .../pjcloud/wallet/service/ActComService.java | 19 ++++ .../service/ActCouponRecordService.java | 18 +++- .../impl/WalletCodeUseServiceImpl.java | 4 + .../impl/act/ActCancelItemServiceImpl.java | 48 +++++++++++ .../service/impl/act/ActComServiceImpl.java | 86 +++++++++++++++++++ .../impl/act/ActCouponRecordServiceImpl.java | 59 +++++++++++++ .../act/service/ActCouponComUtilService.java | 44 ++++++---- 19 files changed, 455 insertions(+), 37 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HandCancelActCodeDto.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActComCancelDto.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteComActService.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActComItemVo.java diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HandCancelActCodeDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HandCancelActCodeDto.java new file mode 100644 index 000000000..d580652b3 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HandCancelActCodeDto.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.hard.api.dto.hard; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class HandCancelActCodeDto { + + @Schema(description = "核销活动i子d") + @NotNull(message = "核销活动子id不能为空") + private Long actItemId; + + @Schema(description = "设备id") + @NotNull(message = "设备id不能为空") + private Long hardwareId; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java index 687657edf..c323c3ace 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java @@ -9,10 +9,7 @@ import com.bsd.pjcloud.hard.api.constant.HardProductNatureEnum; import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.async.SyncOfflineReqVo; -import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; -import com.bsd.pjcloud.hard.api.dto.hard.HardBindDto; -import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto; -import com.bsd.pjcloud.hard.api.dto.hard.HardDoneHardQrCodeScanOrderDto; +import com.bsd.pjcloud.hard.api.dto.hard.*; import com.bsd.pjcloud.hard.api.dto.order.HardChartLatitudeVo; import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; import com.bsd.pjcloud.hard.api.vo.HardInvoiceVo; @@ -121,7 +118,7 @@ public class HardApiController { @PostMapping("/cancel-code") @Operation(summary = "核销二维码") - @Idempotent(expireTime = 10, info = "正在核销中,请勿重复操作") + @Idempotent(expireTime = 10, key = "'/hard-api/ad/cancel-code' + #dto.getOrderId() ", info = "正在核销中,请勿重复操作") public R handCancelCode(@RequestBody HandCancelCodeDto dto) { if (!ObjectUtil.isAllNotEmpty(dto.getOrderId(), dto.getHardwareId())) { throw new RuntimeException("参数不正确"); @@ -129,6 +126,13 @@ public class HardApiController { return R.ok(hardwareOrderService.handCancelCode(dto)); } + @PostMapping("/cancel-act-code") + @Operation(summary = "核销二维码") + @Idempotent(expireTime = 10, key = "'/hard-api/ad/cancel-act-code' + #dto.getActItemId() ", info = "正在核销中,请勿重复操作") + public R handCancelActCode(@Validated @RequestBody HandCancelActCodeDto dto) { + return R.ok(hardwareOrderService.handCancelActCode(dto)); + } + @GetMapping("/generate-invoice") @Operation(summary = "生成发票") @Idempotent(expireTime = 10, info = "正在生成中,请勿重复操作") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java index 63985dbd6..aa9922f7f 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java @@ -10,6 +10,7 @@ import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; +import com.bsd.pjcloud.hard.api.dto.hard.HandCancelActCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto; import com.bsd.pjcloud.hard.api.dto.hard.HardDoneHardQrCodeScanOrderDto; @@ -142,6 +143,11 @@ public interface HardOrderService extends IService { */ Boolean handCancelCode(HandCancelCodeDto dto); + /** + * 核销活动二维码 + */ + Boolean handCancelActCode(HandCancelActCodeDto dto); + /** * 创建订单后发送mq消息 */ @@ -151,5 +157,4 @@ public interface HardOrderService extends IService { * 是否需要支付 */ boolean isPay(HardOrderTypeEnum type, HardPayTypeEnum payType); - } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index ffa2b0e86..f25212217 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -38,6 +38,7 @@ import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.ali.AliMicropayDto; import com.bsd.pjcloud.hard.api.dto.ali.AliReverseDto; +import com.bsd.pjcloud.hard.api.dto.hard.HandCancelActCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardDoneHardQrCodeScanOrderDto; import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto; import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; @@ -1143,6 +1144,17 @@ public class HardOrderServiceImpl extends ServiceImpl 0; } + /** + * 核销活动二维码 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean handCancelActCode(HandCancelActCodeDto dto) { + // 查看该优惠券 + + return null; + } + @Override // @GlobalTransactional @Transactional(rollbackFor = Exception.class) diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletCodeBizEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletCodeBizEnum.java index 9a05b57c4..2b6e76767 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletCodeBizEnum.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletCodeBizEnum.java @@ -15,6 +15,7 @@ public enum WalletCodeBizEnum { SUPERMARKET_RESERVE("4", "超市线上预订"), USER_WALLET("5", "用户钱包二维码"), FARMER_RESERVE("6", "用户钱包二维码"), + ACT("6", "活动二维码"), ; private final String code; diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActComCancelDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActComCancelDto.java new file mode 100644 index 000000000..9ac0c49ea --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActComCancelDto.java @@ -0,0 +1,31 @@ +package com.bsd.pjcloud.wallet.api.dto.act; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class ActComCancelDto { + + /** + * 活动子id + */ + @NotNull(message = "活动子id不能为空") + private Long actItemId; + + /** + * 用户id + */ + @NotNull(message = "用户id不能为空") + private Long userId; + + /** + * 订单id + */ + private Long orderId; + + /** + * 活动提现金额 + */ + private Integer useAmountPrice; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteCodeUseService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteCodeUseService.java index 92c8f9cca..9db4b75b2 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteCodeUseService.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteCodeUseService.java @@ -45,12 +45,6 @@ public interface RemoteCodeUseService { /** * 生成二维码 - * - * @param id - * @param userId - * @param walletCodeBiz - * @param count - * @return */ @NoToken @GetMapping("/wallet-code-use/generate-code") diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteComActService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteComActService.java new file mode 100644 index 000000000..8dbd47a88 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteComActService.java @@ -0,0 +1,42 @@ +package com.bsd.pjcloud.wallet.api.feign; + +import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.feign.annotation.NoToken; +import com.bsd.pjcloud.wallet.api.dto.act.ActComCancelDto; +import com.bsd.pjcloud.wallet.api.entity.WalletCodeUseEntity; +import com.bsd.pjcloud.wallet.api.vo.act.ActComItemVo; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(contextId = "RemoteComActService", value = ServiceNameConstants.WALLET_SERVICE) +public interface RemoteComActService { + + /** + * 根据公告id查询对应的活动 + */ + @NoToken + @GetMapping("/act/com/remote/get-act") + R remoteGetComAct(@RequestParam Long actItemId, @RequestParam Long userId); + + /** + * 活动是否能够核销 + */ + @NoToken + @GetMapping("/act/com/remote/is-can-cancel") + R remoteIsCanCancel(@RequestParam Long actItemId, @RequestParam Long userId); + + /** + * 核销活动 + */ + @NoToken + @PostMapping("/act/com/remote/do-cancel") + R remoteDoCancel(@Validated @RequestBody ActComCancelDto body); + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActComItemVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActComItemVo.java new file mode 100644 index 000000000..9b24dccf6 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActComItemVo.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.wallet.api.vo.act; + +import com.bsd.pjcloud.wallet.api.constant.act.ActTypeEnum; +import lombok.Data; + +@Data +public class ActComItemVo { + + private String actType; + + private Long actItemId; + + private Long userId; + + private String username; + + private String userAvatar; + + private T detail; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletCodeUseController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletCodeUseController.java index c0ef1047b..53b88b68c 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletCodeUseController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletCodeUseController.java @@ -95,6 +95,17 @@ public class WalletCodeUseController { dto.setUserId(user.getId()); return R.ok(walletCodeUseService.pageJoin(page, dto)); } + + @Operation(summary = "查询二维码", description = "查询二维码") + @GetMapping("/app/user-code") + public R appUserCode(@RequestParam Long id) { + PjcloudUser user = SecurityUtils.getUser(); + WalletCodeUseEntity detail = walletCodeUseService.getOne(new LambdaQueryWrapper() + .eq(WalletCodeUseEntity::getBizId, id) + .eq(WalletCodeUseEntity::getUserId, user.getId()) + ); + return R.ok(detail); + } /* ************************************* end app end ************************************* */ /* ************************************* start android start ************************************* */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActComController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActComController.java index 284239d70..0a5cc082d 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActComController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActComController.java @@ -1,12 +1,12 @@ package com.bsd.pjcloud.wallet.controller.act; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.wallet.api.constant.act.ActTypeEnum; -import com.bsd.pjcloud.wallet.api.constant.act.ActUserReceiveEnum; -import com.bsd.pjcloud.wallet.api.vo.act.ActCouponVo; +import com.bsd.pjcloud.wallet.api.dto.act.ActComCancelDto; +import com.bsd.pjcloud.wallet.api.vo.act.ActComItemVo; import com.bsd.pjcloud.wallet.api.vo.act.ActSimpleNotfiyVo; import com.bsd.pjcloud.wallet.api.vo.act.ActUserTotalVo; import com.bsd.pjcloud.wallet.service.ActComService; @@ -15,10 +15,8 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; /** * 活动公用方法 @@ -32,6 +30,38 @@ public class ActComController { private final ActComService actComService; + /* ************************************* start 远程调用 start ************************************* */ + @Operation(summary = "根据公告id查询对应的活动", description = "根据公告id查询对应的活动") + @GetMapping("/remote/get-act") + @Inner + public R remoteGetComAct(@RequestParam Long actItemId, @RequestParam Long userId) { + return R.ok(actComService.getComAct(actItemId, userId)); + } + + @Operation(summary = "活动是否能够核销", description = "活动是否能够核销") + @GetMapping("/remote/is-can-cancel") + @Inner + public R remoteIsCanCancel(@RequestParam Long actItemId, @RequestParam Long userId) { + return R.ok(actComService.actIsCanCancel(actItemId, userId)); + } + + @Operation(summary = "核销活动", description = "核销活动") + @PostMapping("/remote/do-cancel") + @Inner + public R remoteDoCancel(@Validated @RequestBody ActComCancelDto body) { + return R.ok(actComService.doCancel(body)); + } + /* ************************************* end 远程调用 end ************************************* */ + + + /* ************************************* start ad start ************************************* */ + @Operation(summary = "根据公告id查询对应的活动", description = "根据公告id查询对应的活动") + @GetMapping("/ad/get-act") + public R getComAct(@RequestParam Long actItemId, @RequestParam Long userId) { + return R.ok(actComService.getComAct(actItemId, userId)); + } + /* ************************************* end ad end ************************************* */ + @Operation(summary = "根据公告id查询对应的活动", description = "根据公告id查询对应的活动") @GetMapping("/app/get-act-by-notify-id") public R getActByNotifyId(@RequestParam Long notifyId) { diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelItemService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelItemService.java index 7c8aecc21..6c6066779 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelItemService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelItemService.java @@ -38,11 +38,18 @@ public interface ActCancelItemService extends IService { */ Boolean cancel(ActCancelItemDto dto); + /** + * 活动是否能够核销 + */ + String actIsCanCancel(ActCancelItemDto detail); + /** * 查询详情 */ ActCancelItemVo getDetail(Long cancelId); + ActCancelItemVo getDetail(Long actItemId, Long userId); + /** * 用户参加活动的数量统计 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActComService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActComService.java index 6c83a0cc9..8c986330a 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActComService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActComService.java @@ -2,11 +2,30 @@ package com.bsd.pjcloud.wallet.service; import com.bsd.pjcloud.wallet.api.constant.act.ActTypeEnum; +import com.bsd.pjcloud.wallet.api.dto.act.ActComCancelDto; +import com.bsd.pjcloud.wallet.api.vo.act.ActComItemVo; import com.bsd.pjcloud.wallet.api.vo.act.ActSimpleNotfiyVo; import com.bsd.pjcloud.wallet.api.vo.act.ActUserTotalVo; public interface ActComService { + /** + * 获取活动 + */ + ActComItemVo getComAct(Long actId, Long userId); + + /** + * 活动是否能够核销 + * + * @return 错误信息 + */ + String actIsCanCancel(Long actItemId, Long userId); + + /** + * 核销活动 + */ + Boolean doCancel(ActComCancelDto body); + /** * 根据公告id查询对应的活动 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCouponRecordService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCouponRecordService.java index e94cd2943..118cb691c 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCouponRecordService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCouponRecordService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.wallet.api.constant.act.ActUserReceiveEnum; import com.bsd.pjcloud.wallet.api.dto.act.ActCouponReceiveDto; import com.bsd.pjcloud.wallet.api.dto.act.ActCouponRecordDto; +import com.bsd.pjcloud.wallet.api.entity.act.ActCouponEntity; import com.bsd.pjcloud.wallet.api.entity.act.ActCouponRecordEntity; import com.bsd.pjcloud.wallet.api.vo.act.ActCouponRecordVo; @@ -15,11 +16,27 @@ public interface ActCouponRecordService extends IService */ Page pageList(Page page, ActCouponRecordDto dto); + /** + * 查询详情 + */ + ActCouponRecordEntity getDetail(Long actItemId, Long userId); + /** * 领取优惠券 */ Long appReceive(ActCouponReceiveDto dto); + /** + * 核销优惠券 + * @param useAmountPrice 优惠券抵消的金额 + */ + void cancel(ActCouponRecordEntity dto, Long orderId, Integer useAmountPrice); + + /** + * 活动是否能够核销 + */ + String actIsCanCancel(ActCouponRecordEntity detail); + /** * 判断用户是否可以参加活动 */ @@ -29,5 +46,4 @@ public interface ActCouponRecordService extends IService * 用户参加活动的数量统计 */ Long userTotal(Long userId); - } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletCodeUseServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletCodeUseServiceImpl.java index 1206e5513..42eb4e586 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletCodeUseServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletCodeUseServiceImpl.java @@ -104,6 +104,10 @@ public class WalletCodeUseServiceImpl extends ServiceImpl() + .eq(ActCancelItemEntity::getId, cancelId) + .eq(ActCancelItemEntity::getReceiverUserId, userId) + ); + if (ObjectUtil.isEmpty(detail)) return null; + result = BeanUtils.toBean(detail, ActCancelItemVo.class); + // 查询活动 + ActCancelEntity actDetail = actCancelMapper.selectById(detail.getActId()); + if (ObjectUtil.isNotEmpty(actDetail)) { + result.setActiveCancelPrice(actDetail.getActiveCancelPrice()); + } + result.setActStartTime(actDetail.getStartTime()); + result.setActExpireTime(actDetail.getExpireTime()); + return result; + } + /** * 用户参加活动的数量统计 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActComServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActComServiceImpl.java index 879315a6f..7c7ca833d 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActComServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActComServiceImpl.java @@ -1,10 +1,18 @@ package com.bsd.pjcloud.wallet.service.impl.act; import cn.hutool.core.util.ObjectUtil; +import com.bsd.pjcloud.admin.api.dto.UserInfo; +import com.bsd.pjcloud.admin.api.entity.SysUser; +import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.wallet.api.constant.act.ActTypeEnum; import com.bsd.pjcloud.wallet.api.constant.act.ActUserReceiveEnum; +import com.bsd.pjcloud.wallet.api.dto.act.ActCancelItemDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActComCancelDto; import com.bsd.pjcloud.wallet.api.entity.act.ActCancelEntity; import com.bsd.pjcloud.wallet.api.entity.act.ActCouponEntity; +import com.bsd.pjcloud.wallet.api.entity.act.ActCouponRecordEntity; +import com.bsd.pjcloud.wallet.api.vo.act.ActCancelItemVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActComItemVo; import com.bsd.pjcloud.wallet.api.vo.act.ActSimpleNotfiyVo; import com.bsd.pjcloud.wallet.api.vo.act.ActUserTotalVo; import com.bsd.pjcloud.wallet.service.*; @@ -28,6 +36,84 @@ public class ActComServiceImpl implements ActComService { private final ActCouponService actCouponService; private final ActCouponRecordService actCouponRecordService; + private final RemoteUserService remoteUserService; + + /** + * 获取活动 + */ + @Override + public ActComItemVo getComAct(Long actItemId, Long userId) { + ActComItemVo result = new ActComItemVo<>(); + List actEnumList = ActTypeEnum.sortList(); + for (ActTypeEnum act : actEnumList) { + if (ObjectUtil.equals(act, ActTypeEnum.CANCEL_ACT)) { + ActCancelItemVo detail = actCancelItemService.getDetail(actItemId, userId); + if (ObjectUtil.isNotEmpty(detail)) { + result.setActItemId(detail.getId()); + result.setActType(act.getCode()); + result.setDetail(detail); + break; + } + } + if (ObjectUtil.equals(act, ActTypeEnum.COUPON_ACT)) { + ActCouponRecordEntity detail = actCouponRecordService.getDetail(actItemId, userId); + if (ObjectUtil.isNotEmpty(detail)) { + result.setActItemId(detail.getId()); + result.setActType(act.getCode()); + result.setDetail(detail); + break; + } + } + } + if (ObjectUtil.isEmpty(result)) return null; + // 查询用户 + UserInfo userInfo = remoteUserService.getByUserId(userId).getData(); + if (ObjectUtil.isNotEmpty(userInfo)) { + SysUser sysUser = userInfo.getSysUser(); + result.setUserId(sysUser.getUserId()); + result.setUsername(sysUser.getName()); + result.setUserAvatar(sysUser.getAvatar()); + return result; + } + return null; + } + + /** + * 活动是否能够核销 + * + * @return 错误信息 + */ + @Override + public String actIsCanCancel(Long actItemId, Long userId) { + ActComItemVo comAct = getComAct(actItemId, userId); + ActTypeEnum actType = ActTypeEnum.valueOfByType(comAct.getActType()); + switch (actType) { + case CANCEL_ACT: + return actCancelItemService.actIsCanCancel((ActCancelItemDto) comAct.getDetail()); + case COUPON_ACT: + return actCouponRecordService.actIsCanCancel((ActCouponRecordEntity) comAct.getDetail()); + } + return null; + } + + /** + * 核销活动 + */ + @Override + public Boolean doCancel(ActComCancelDto body) { + ActComItemVo comAct = getComAct(body.getActItemId(), body.getUserId()); + ActTypeEnum actType = ActTypeEnum.valueOfByType(comAct.getActType()); + switch (actType) { + case CANCEL_ACT: + actCancelItemService.cancel((ActCancelItemDto) comAct.getDetail()); + return true; + case COUPON_ACT: + actCouponRecordService.cancel((ActCouponRecordEntity) comAct.getDetail(), body.getOrderId(), body.getUseAmountPrice()); + return true; + } + return false; + } + /** * 根据公告id查询对应的活动 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCouponRecordServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCouponRecordServiceImpl.java index 50eabf1fa..13189be7d 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCouponRecordServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCouponRecordServiceImpl.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.wallet.service.impl.act; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.dto.UserInfo; @@ -14,6 +15,7 @@ import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.hard.api.vo.HardAuthVo; import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; +import com.bsd.pjcloud.wallet.api.constant.WalletCodeBizEnum; import com.bsd.pjcloud.wallet.api.constant.act.ActCouponRecordStatusEnum; import com.bsd.pjcloud.wallet.api.constant.act.ActUserReceiveEnum; import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto; @@ -29,6 +31,7 @@ import com.bsd.pjcloud.wallet.mapper.act.ActCouponMapper; import com.bsd.pjcloud.wallet.mapper.act.ActCouponRecordMapper; import com.bsd.pjcloud.wallet.service.ActCouponRecordService; import com.bsd.pjcloud.wallet.service.MchManageService; +import com.bsd.pjcloud.wallet.service.WalletCodeUseService; import com.bsd.pjcloud.wallet.utils.act.service.ActCouponComUtilService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -53,6 +56,7 @@ public class ActCouponRecordServiceImpl extends ServiceImpl() + .eq(ActCouponRecordEntity::getId, actItemId) + .eq(ActCouponRecordEntity::getUserId, userId) + .orderByDesc(ActCouponRecordEntity::getCreateTime) + .orderByDesc(ActCouponRecordEntity::getId) + .last("limit 1") + ); + } + /** * 领取优惠券 */ @@ -92,10 +110,51 @@ public class ActCouponRecordServiceImpl extends ServiceImpl