From 667bdac868ea4faaa0fda7b73c13dc53ec235fde Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 26 May 2026 10:49:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=94=AF=E4=BB=98=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/app/HardAppCreateOrderScancode.java | 3 + .../dto/order/app/HardAppCreateOrderDto.java | 3 + .../controller/order/HardOrderController.java | 1 + .../impl/order/HardOrderServiceImpl.java | 16 +++- .../api/dto/act/ActCouponRecordDto.java | 10 +++ .../act/ActCouponRecordRemoteCancelDto.java | 23 +++++ .../feign/RemoteActCouponCancelService.java | 27 ++++++ .../wallet/api/vo/act/ActCouponRecordVo.java | 4 + ...mework.cloud.openfeign.FeignClient.imports | 1 + .../2025-08/debug.2025-08-13.0.log.gz | Bin 0 -> 9980 bytes .../2026-04/debug.2026-04-15.0.log.gz | Bin 0 -> 13061 bytes .../act/ActCancelItemController.java | 2 + .../act/ActCouponRecordController.java | 33 ++++++++ .../wallet/mapper/WalletManageMapper.java | 2 +- .../mapper/act/ActCouponRecordMapper.java | 2 + .../service/ActCouponRecordService.java | 23 ++++- .../impl/act/ActCouponRecordServiceImpl.java | 80 ++++++++++++++++++ .../WalletRechargeInvoiceServiceImpl.java | 2 - .../mapper/act/ActCouponRecordMapper.xml | 49 ++++++----- 19 files changed, 255 insertions(+), 26 deletions(-) create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponRecordRemoteCancelDto.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteActCouponCancelService.java create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/logs/pjcloud-wallet-biz/2025-08/debug.2025-08-13.0.log.gz create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/logs/pjcloud-wallet-biz/2026-04/debug.2026-04-15.0.log.gz diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/app/HardAppCreateOrderScancode.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/app/HardAppCreateOrderScancode.java index 2b6e594ce..d6b750376 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/app/HardAppCreateOrderScancode.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/app/HardAppCreateOrderScancode.java @@ -19,4 +19,7 @@ public class HardAppCreateOrderScancode { @NotNull(message = "自定义金额不能为空") private Integer customPrice; + @Schema(description = "优惠券id") + private Long actCouponRecordId; + } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateOrderDto.java index 680926051..5890f40be 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateOrderDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateOrderDto.java @@ -48,4 +48,7 @@ public class HardAppCreateOrderDto { // 预约id private Long apptId; + // 优惠券id + private Long actCouponRecordId; + } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java index e8a52071b..e9f4770e1 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java @@ -235,6 +235,7 @@ public class HardOrderController { .hardType(HardTypeEnum.MERCHANT_QR_CODE) .orderType(HardOrderTypeEnum.BELOW) .payType(HardPayTypeEnum.WALLET_QR_CODE_SCAN) + .actCouponRecordId(body.getActCouponRecordId()) .build(); return R.ok(hardwareOrderService.appCreateOrderScancode(dto)); } 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 a340491ea..78225c366 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 @@ -97,6 +97,7 @@ import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; import com.bsd.pjcloud.wallet.api.vo.WalletXfjDiscounts; 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.ActCouponRecordVo; import com.bsd.pjcloud.wallet.api.vo.mch.MchPickUpVo; import com.bsd.pjcloud.wallet.api.vo.mch.MchRuleJoinDtoVo; import jakarta.validation.Valid; @@ -158,6 +159,7 @@ public class HardOrderServiceImpl extends ServiceImpl yyxService.send(orderObj.getMerchantId(), orderObj.getPayPrice(), userDetail.getSysUser().getPhone())); return orderObj.getId(); diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponRecordDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponRecordDto.java index acd9e4e21..1bbe5171d 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponRecordDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponRecordDto.java @@ -18,4 +18,14 @@ public class ActCouponRecordDto extends ActCouponRecordEntity { private LocalDateTime[] createTimeList; + /** + * 适用范围 (1:全场通用 2:指定商户 3:指定分类 4:指定商品) + */ + private String useScopeType; + + /** + * 适用范围ID集合 (商户ID/分类ID/商品ID, 逗号分隔) + */ + private String scopeId; + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponRecordRemoteCancelDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponRecordRemoteCancelDto.java new file mode 100644 index 000000000..bd61cc1d8 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponRecordRemoteCancelDto.java @@ -0,0 +1,23 @@ +package com.bsd.pjcloud.wallet.api.dto.act; + +import lombok.Data; + +@Data +public class ActCouponRecordRemoteCancelDto { + + /** + * 优惠券id + */ + private Long actCouponRecordId; + + /** + * 订单id + */ + private Long orderId; + + /** + * 优惠券抵消的金额 + */ + private Integer useAmountPrice; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteActCouponCancelService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteActCouponCancelService.java new file mode 100644 index 000000000..8a870c09c --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteActCouponCancelService.java @@ -0,0 +1,27 @@ +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.ActCancelItemDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCouponRecordRemoteCancelDto; +import com.bsd.pjcloud.wallet.api.vo.act.ActCancelItemVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActCouponRecordVo; +import org.springframework.cloud.openfeign.FeignClient; +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; + +@FeignClient(contextId = "remoteActCouponCancelService", value = ServiceNameConstants.WALLET_SERVICE) +public interface RemoteActCouponCancelService { + + @NoToken + @GetMapping("/act-coupon-record/remote/get-detail") + R remoteGetDetail(@RequestParam Long actCouponRecordId, @RequestParam Integer totalPrice); + + @NoToken + @PostMapping("/act-coupon-record/remote/cancel") + R remoteCancel(@RequestBody ActCouponRecordRemoteCancelDto dto); + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCouponRecordVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCouponRecordVo.java index 958d618fd..e71d44ae0 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCouponRecordVo.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCouponRecordVo.java @@ -27,4 +27,8 @@ public class ActCouponRecordVo extends ActCouponRecordEntity implements BaseUser */ private String actUniquecode; + /** + * 优惠券抵消的金额 + */ + private Integer useAmountPrice; } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports b/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports index d98cea5d5..bfc242642 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports @@ -1,4 +1,5 @@ com.bsd.pjcloud.wallet.api.feign.RemoteActCancelService +com.bsd.pjcloud.wallet.api.feign.RemoteActCouponCancelService com.bsd.pjcloud.wallet.api.feign.RemoteWalletService com.bsd.pjcloud.wallet.api.feign.RemoteMchPickUpService com.bsd.pjcloud.wallet.api.feign.RemoteMchRuleJoinService diff --git a/pjcloud-wallet/pjcloud-wallet-biz/logs/pjcloud-wallet-biz/2025-08/debug.2025-08-13.0.log.gz b/pjcloud-wallet/pjcloud-wallet-biz/logs/pjcloud-wallet-biz/2025-08/debug.2025-08-13.0.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..3ef755d17e1068d8094e2c2b1c1f4bde57f814fd GIT binary patch literal 9980 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 literal 0 HcmV?d00001 diff --git a/pjcloud-wallet/pjcloud-wallet-biz/logs/pjcloud-wallet-biz/2026-04/debug.2026-04-15.0.log.gz b/pjcloud-wallet/pjcloud-wallet-biz/logs/pjcloud-wallet-biz/2026-04/debug.2026-04-15.0.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..6f65209692bee002255fc9effb621979804abb47 GIT binary patch literal 13061 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 remoteGetDetail(@RequestParam Long actCouponRecordId, @RequestParam Integer totalPrice) { + return R.ok(actCouponRecordService.remoteGetDetail(actCouponRecordId, totalPrice)); + } + + @Inner() + @Operation(summary = "远程核销优惠券", description = "远程核销优惠券") + @PostMapping("/remote/cancel") + R remoteCancel(@RequestBody ActCouponRecordRemoteCancelDto dto) { + return R.ok(actCouponRecordService.remoteCancel(dto)); + } + + /* ************************************* end 远程调用 end ************************************* */ + /* ************************************* start app start ************************************* */ + @Operation(summary = "查询用户拥有的店铺优惠券", description = "查询用户拥有的店铺优惠券") + @PostMapping("/app/mch-list") + public R> appMchList(@RequestBody ActCouponRecordDto dto) { + if (ObjectUtil.isEmpty(dto.getScopeId())) { + throw new RuntimeException("商户id不能为空"); + } + PjcloudUser user = SecurityUtils.getUser(); + dto.setUserId(user.getId()); + return R.ok(actCouponRecordService.mchList(dto)); + } + @Operation(summary = "领取优惠券", description = "领取优惠券") @PostMapping("/app/receive") @Idempotent(expireTime = 2, key = "'/act/receive/app/receive/' + #dto.getReceiveUserId()", info = "正在领取中,请勿重复操作") diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java index 29964905c..5878b9c98 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java @@ -42,7 +42,7 @@ public interface WalletManageMapper extends PjcloudBaseMapper pageList(Page page, @Param("dto") ActCouponRecordDto dto); + List findList(@Param("dto") ActCouponRecordDto dto); + Long userTotal(@Param("userId") Long userId, @Param("statusCodeList") List statusCodeList); } \ No newline at end of file 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 dea669ffe..cae2f295f 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,9 +5,10 @@ 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.dto.act.ActCouponRecordRemoteCancelDto; import com.bsd.pjcloud.wallet.api.entity.act.ActCouponRecordEntity; import com.bsd.pjcloud.wallet.api.vo.act.ActCouponRecordVo; +import jakarta.validation.Valid; import java.util.List; @@ -23,6 +24,21 @@ public interface ActCouponRecordService extends IService */ ActCouponRecordEntity getDetail(Long actItemId, Long userId); + /** + * 查询用户拥有的店铺优惠券 + */ + List mchList(@Valid ActCouponRecordDto dto); + + /** + * 远程核销优惠券 + */ + Boolean remoteCancel(ActCouponRecordRemoteCancelDto dto); + + /** + * 远程查询优惠券详情 + */ + ActCouponRecordVo remoteGetDetail(Long actCouponRecordId, Integer totalPrice); + /** * 领取优惠券 */ @@ -49,4 +65,9 @@ public interface ActCouponRecordService extends IService * 用户参加活动的数量统计 */ Long userTotal(Long userId); + + /** + * 计算优惠券优惠后的价格 + */ + int computerUseAmountPrice(ActCouponRecordEntity detail, Integer totalPrice); } \ No newline at end of file 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 4181169db..b4508ff5f 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,5 +1,6 @@ package com.bsd.pjcloud.wallet.service.impl.act; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.IterUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSON; @@ -20,10 +21,13 @@ import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletCodeBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; import com.bsd.pjcloud.wallet.api.constant.act.ActCouponRecordStatusEnum; +import com.bsd.pjcloud.wallet.api.constant.act.ActCouponTypeEnum; +import com.bsd.pjcloud.wallet.api.constant.act.ActCouponUseScopeTypeEnum; import com.bsd.pjcloud.wallet.api.constant.act.ActUserReceiveEnum; import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto; import com.bsd.pjcloud.wallet.api.dto.act.ActCouponReceiveDto; import com.bsd.pjcloud.wallet.api.dto.act.ActCouponRecordDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCouponRecordRemoteCancelDto; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity; import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity; @@ -42,6 +46,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -83,6 +88,17 @@ public class ActCouponRecordServiceImpl extends ServiceImpl mchList(ActCouponRecordDto dto) { + dto.setStatus(ActCouponRecordStatusEnum.UNUSED.getCode()); + dto.setUseScopeType(ActCouponUseScopeTypeEnum.SPECIFIED_MERCHANT.getCode()); + dto.setIsFindNoExpire(true); + return baseMapper.findList(dto); + } + /** * 查询详情 */ @@ -130,10 +146,74 @@ public class ActCouponRecordServiceImpl extends ServiceImpl 0) { + return 0; + } + return detail.getUseAmount(); + } + // 折扣券 + else if (ObjectUtil.equals(detail.getCouponType(), ActCouponTypeEnum.ZHEKOU_QUAN.getCode())) { + if (totalPrice < detail.getMinPoint() && detail.getMinPoint() > 0) { + return 0; + } + return BigDecimal.valueOf(totalPrice).multiply(BigDecimal.valueOf(detail.getFaceValue())).divide(BigDecimal.valueOf(100)).intValue(); + } + // 立减券 + else if (ObjectUtil.equals(detail.getCouponType(), ActCouponTypeEnum.LIJIAN_QUAN.getCode())) { + return detail.getUseAmount(); + } else { + return 0; + } + } + /** * 核销优惠券 */ @Override + @Transactional public void cancel(ActCouponRecordEntity dto, Long orderId, Integer useAmountPrice) { // 1. 获取当前用户 UserInfo userInfo = remoteUserService.getInnerByUserId(dto.getUserId()).getData(); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java index 37f6bed0e..15f637bd9 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java @@ -3,7 +3,6 @@ package com.bsd.pjcloud.wallet.service.impl.recharge; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; @@ -14,7 +13,6 @@ import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.dto.UserInfo; diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCouponRecordMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCouponRecordMapper.xml index 863e03875..1f7596999 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCouponRecordMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCouponRecordMapper.xml @@ -4,26 +4,26 @@ select a.id, - a.coupon_id, - a.user_id, - a.user_name, - a.coupon_code, - a.status, - a.coupon_name, - a.coupon_type, - a.face_value, - a.min_point, - a.start_time, - a.end_time, - a.use_time, - a.order_id, - a.use_amount, - a.create_by, - a.create_time, - a.update_by, - a.update_time, - a.del_flag, - a.tenant_id + a.coupon_id, + a.user_id, + a.user_name, + a.coupon_code, + a.status, + a.coupon_name, + a.coupon_type, + a.face_value, + a.min_point, + a.start_time, + a.end_time, + a.use_time, + a.order_id, + a.use_amount, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.del_flag, + a.tenant_id @@ -60,6 +60,15 @@ order by a.create_time desc , a.id desc + +