diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/ad/AdRecordController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/ad/AdRecordController.java index c633f9146..0b71d0ffe 100755 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/ad/AdRecordController.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/ad/AdRecordController.java @@ -60,19 +60,12 @@ public class AdRecordController { return R.ok(adRecordService.reportAdView(dto)); } -// @Operation(summary = "个人积分广告统计", description = "个人积分广告统计") -// @PostMapping("/app/integral-total") -// public R integralTotal() { -// PjcloudUser user = SecurityUtils.getUser(); -// return R.ok(adRecordService.integralTotal(user.getId())); -// } - @Operation(summary = "个人积分广告分页", description = "个人积分广告分页") @GetMapping("/app/integral-page") public R> integralPage(@ParameterObject Page page, @ParameterObject AdRecordDto dto) { PjcloudUser user = SecurityUtils.getUser(); dto.setUserId(user.getId()); - dto.setIntegralNumNullStatus(YesNoEnum.YES.getCode()); + dto.setIntegralNumNullStatus(YesNoEnum.NO.getCode()); return R.ok(adRecordService.pageList(page, dto)); } /* ************************************* start app start ************************************* */ diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/ad/AdRecordEntity.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/ad/AdRecordEntity.java index a4d2f4314..5618d8ed6 100755 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/ad/AdRecordEntity.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/ad/AdRecordEntity.java @@ -99,12 +99,6 @@ public class AdRecordEntity extends Model { @Schema(description = "广告预计收入") private Integer adPredictPrice; - /** - * 获取的积分 - */ - @Schema(description = "获取的积分") - private Integer integralNum; - /** * 创建人 */ diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/ad/ThirdAdRecordMapper.xml b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/ad/ThirdAdRecordMapper.xml index 20861f12d..e35a0651e 100755 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/ad/ThirdAdRecordMapper.xml +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/ad/ThirdAdRecordMapper.xml @@ -15,7 +15,6 @@ a.visit_duration, a.status, a.extra, - a.integral_num, a.create_time, a.update_time, a.create_by, @@ -38,13 +37,8 @@ and a.ad_type = #{dto.adType} - - - and a.integral_num is null - - - and a.integral_num is not null - + + and a.status = #{dto.status} and a.create_time between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ad/UniappAdCallbackDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ad/UniappAdCallbackDto.java index 79e5918e7..493cef677 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ad/UniappAdCallbackDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ad/UniappAdCallbackDto.java @@ -1,5 +1,6 @@ package com.bsd.pjcloud.thirdparty.dto.ad; +import cn.hutool.core.util.ObjectUtil; import lombok.Data; import java.util.Map; @@ -51,7 +52,9 @@ public class UniappAdCallbackDto { dto.setTransId(map.get("trans_id")); dto.setUserId(Long.parseLong(map.get("user_id"))); dto.setExtra(map.get("extra")); - dto.setCpm(Integer.parseInt(map.get("cpm"))); + if (ObjectUtil.isNotEmpty(map.get("cpm"))) { + dto.setCpm(Integer.parseInt(map.get("cpm"))); + } } catch (Exception e) { e.printStackTrace(); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ad/ThirdUniAdController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ad/ThirdUniAdController.java index 66f7bff0d..dd617d8ef 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ad/ThirdUniAdController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ad/ThirdUniAdController.java @@ -7,6 +7,7 @@ import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.integrated.api.feign.RemoterIntegratedAdService; import com.bsd.pjcloud.thirdparty.config.AdConfig; import com.bsd.pjcloud.thirdparty.dto.ad.UniappAdCallbackDto; +import com.bsd.pjcloud.wallet.api.feign.RemoteIntegralTransactionService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; @@ -35,9 +36,12 @@ import java.util.Map; @SecurityRequirement(name = HttpHeaders.AUTHORIZATION) public class ThirdUniAdController { + final private String TAG = "uniapp广告"; + final private AdConfig adConfig; final private RemoterIntegratedAdService remoterIntegratedAdService; + final private RemoteIntegralTransactionService remoteIntegralTransactionService; @Inner(value = false) @GetMapping("/callback") @@ -73,6 +77,11 @@ public class ThirdUniAdController { if (ObjectUtil.isNotEmpty(res) && res) { result.put("isValid", true); } + // 增加用户积分 + Boolean isAddIntegral = remoteIntegralTransactionService.remoteAddRewardIedntegral(dto.getUserId(), dto.getTransId()).getData(); + if (ObjectUtil.isEmpty(isAddIntegral) || !isAddIntegral) { + log.error("|{}|增加用户积分失败,userId:{}", TAG, dto.getUserId()); + } return result; } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/Integral/WalletIntegralBizEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/Integral/WalletIntegralBizEnum.java new file mode 100644 index 000000000..eb483da7c --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/Integral/WalletIntegralBizEnum.java @@ -0,0 +1,37 @@ +package com.bsd.pjcloud.wallet.api.constant.Integral; + +import cn.hutool.core.util.ObjectUtil; +import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; + +/** + * 积分业务枚举 + */ +@Getter +@AllArgsConstructor +public enum WalletIntegralBizEnum { + REWARDED_AD("1", "激励广告"), + UPDATE("5", "更新积分"), + ; + + private final String code; + + private final String desc; + + + public static WalletIntegralBizEnum valueOfByType(String code) { + return Arrays.stream(WalletIntegralBizEnum.values()) + .filter(v -> ObjectUtil.equal(v.getCode(), code)) + .findFirst().orElse(null); + } + + public static WalletIntegralBizEnum descOf(String description) { + return Arrays.stream(WalletIntegralBizEnum.values()) + .filter(v -> ObjectUtil.equal(v.getDesc(), description)) + .findFirst().orElse(null); + } +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponDto.java index 94437c022..1b508eb51 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCouponDto.java @@ -5,4 +5,5 @@ import lombok.Data; @Data public class ActCouponDto extends ActCouponEntity { + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/integral/IntegralTransactionDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/integral/IntegralTransactionDto.java index 022642cc4..f66eae60a 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/integral/IntegralTransactionDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/integral/IntegralTransactionDto.java @@ -1,9 +1,33 @@ package com.bsd.pjcloud.wallet.api.dto.integral; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralTransactionEntity; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class IntegralTransactionDto extends IntegralTransactionEntity { + /** + * 类型 - 收入 + */ + public static final Integer TYPE_INCOME = 1; + /** + * 类型 - 支出 + */ + public static final Integer TYPE_EXPENSE = 2; + + private Integer type; + + /** + * 用户id + */ + @Schema(description = "用户id") + private Long userId; + + /** + * 添加余额用户id + */ + @Schema(description = "添加余额用户id") + private Long addUserId; + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/WalletSettingEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/WalletSettingEntity.java index 4148c909e..4c83b4a70 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/WalletSettingEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/WalletSettingEntity.java @@ -91,6 +91,16 @@ public class WalletSettingEntity extends Model { */ private Long topupUserId; + /** + * 看一个激励视频可以获取多少积分 + */ + private Integer rewardedAdIntegral; + + /** + * 一天可以看多少个激励视频 + */ + private Integer todayViewRewardedAdLimit; + /** * 创建人 */ diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCouponEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCouponEntity.java index 3b164b9fc..8bd25e61e 100755 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCouponEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCouponEntity.java @@ -27,6 +27,12 @@ public class ActCouponEntity extends Model { @Schema(description = "优惠券ID") private Long id; + /** + * 优惠券封面图 + */ + @Schema(description = "优惠券封面图") + private String coveImage; + /** * 父活动id */ diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/integral/IntegralManageEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/integral/IntegralManageEntity.java index f43a86f11..0ee0e4843 100755 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/integral/IntegralManageEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/integral/IntegralManageEntity.java @@ -32,12 +32,6 @@ public class IntegralManageEntity extends Model { @Schema(description = "用户id") private Long userId; - /** - * 部门id - */ - @Schema(description = "部门id") - private Long deptId; - /** * 积分总数 */ diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/integral/IntegralTransactionEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/integral/IntegralTransactionEntity.java index 8206f3058..04acf9b56 100755 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/integral/IntegralTransactionEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/integral/IntegralTransactionEntity.java @@ -27,9 +27,9 @@ public class IntegralTransactionEntity extends Model private Long id; /** - * 积分总数 + * 积分钱包id */ - @Schema(description = "积分总数") + @Schema(description = "积分钱包id") private Long integralId; /** diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteIntegralTransactionService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteIntegralTransactionService.java new file mode 100644 index 000000000..0f08f1c3a --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteIntegralTransactionService.java @@ -0,0 +1,17 @@ +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 org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@FeignClient(contextId = "remoteIntegralTransactionService", value = ServiceNameConstants.WALLET_SERVICE) +public interface RemoteIntegralTransactionService { + + @NoToken + @GetMapping("/integral-transaction/remote/add-rewarded-integral") + R remoteAddRewardIedntegral(@RequestParam Long userId, @RequestParam String bizId); + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/integral/IntegralMakeMoneyTotalVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/integral/IntegralMakeMoneyTotalVo.java new file mode 100644 index 000000000..1a761bfdf --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/integral/IntegralMakeMoneyTotalVo.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.wallet.api.vo.integral; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class IntegralMakeMoneyTotalVo { + + @Schema(description = "积分总数") + private Integer integralNum = 0; + + @Schema(description = "今日已看激励广告") + private Integer todayViewAdNum = 0; + + @Schema(description = "今日可看激励广告的上限") + private Integer todayViewAdLimitNum = 0; + + @Schema(description = "看一个激励广告可获得积分") + private Integer viewAdIntegralNum = 0; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/integral/IntegralManageVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/integral/IntegralManageVo.java index f62012566..5ad1b43f3 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/integral/IntegralManageVo.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/integral/IntegralManageVo.java @@ -1,9 +1,19 @@ package com.bsd.pjcloud.wallet.api.vo.integral; +import com.bsd.pjcloud.admin.api.vo.base.BaseUserInterface; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralManageEntity; import lombok.Data; @Data -public class IntegralManageVo extends IntegralManageEntity { +public class IntegralManageVo extends IntegralManageEntity implements BaseUserInterface { + + /** + * 用户相关 + */ + private String username; + + private String userMobile; + + private String userAvatar; } 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 a4de33581..e7517385b 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,5 +1,6 @@ com.bsd.pjcloud.wallet.api.feign.RemoteActCancelService com.bsd.pjcloud.wallet.api.feign.RemoteWalletService +com.bsd.pjcloud.wallet.api.feign.RemoteIntegralTransactionService com.bsd.pjcloud.wallet.api.feign.RemoteMchPickUpService com.bsd.pjcloud.wallet.api.feign.RemoteMchRuleJoinService com.bsd.pjcloud.wallet.api.feign.RemoteCodeUseService diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/Integral/IntegralManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/Integral/IntegralManageController.java index a4893485f..f9b0f5e53 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/Integral/IntegralManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/Integral/IntegralManageController.java @@ -2,13 +2,15 @@ package com.bsd.pjcloud.wallet.controller.Integral; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.wallet.api.dto.integral.IntegralManageDto; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralManageEntity; +import com.bsd.pjcloud.wallet.api.vo.integral.IntegralMakeMoneyTotalVo; import com.bsd.pjcloud.wallet.api.vo.integral.IntegralManageVo; import com.bsd.pjcloud.wallet.service.IntegralManageService; import org.springframework.security.access.prepost.PreAuthorize; @@ -36,6 +38,25 @@ public class IntegralManageController { private final IntegralManageService integralManageService; + /* ************************************* start app start ************************************* */ + + @Operation(summary = "创建或获取用户积分", description = "创建或获取用户积分") + @GetMapping("/app/get-or-create") + + public R getOrCreate() { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(integralManageService.getOrCreateIntegral(user.getId())); + } + + @Operation(summary = "我要赚钱面板统计", description = "我要赚钱面板统计") + @GetMapping("/app/make-money-total") + public R makeMoneyTotal() { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(integralManageService.makeMoneyTotal(user.getId())); + } + + /* ************************************* end app end ************************************* */ + /** * 查询分页页面 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/Integral/IntegralTransactionController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/Integral/IntegralTransactionController.java index 9eae9ce40..d738a7972 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/Integral/IntegralTransactionController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/Integral/IntegralTransactionController.java @@ -7,8 +7,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import com.bsd.pjcloud.common.log.annotation.SysLog; +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.Integral.WalletIntegralBizEnum; +import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto; import com.bsd.pjcloud.wallet.api.dto.integral.IntegralTransactionDto; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralTransactionEntity; +import com.bsd.pjcloud.wallet.api.vo.integral.IntegralTransactionVo; import com.bsd.pjcloud.wallet.service.IntegralTransactionService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -26,19 +32,54 @@ import java.util.List; */ @RestController @RequiredArgsConstructor -@RequestMapping("/integralTransaction") -@Tag(description = "integralTransaction", name = "积分记录管理") +@RequestMapping("/integral-transaction") +@Tag(description = "integral-transaction", name = "积分记录管理") @SecurityRequirement(name = HttpHeaders.AUTHORIZATION) public class IntegralTransactionController { private final IntegralTransactionService integralTransactionService; + /* ************************************* start 远程调用 start ************************************* */ + + @Inner + @Operation(summary = "增加信息流广告积分", description = "增加信息流广告积分") + @GetMapping("/remote/add-rewarded-integral") + public R remoteAddRewardIedntegral(@RequestParam Long userId, @RequestParam String bizId) { + return R.ok(integralTransactionService.remoteAddRewardIedntegral(userId, bizId)); + } + + /* ************************************* end 远程调用 end ************************************* */ + + /* ************************************* start app start ************************************* */ + + @Operation(summary = "增加信息流广告积分", description = "增加信息流广告积分") + @GetMapping("/app/rewarded-integral-page") + public R> appRewardedIntegralPage(@ParameterObject Page page) { + PjcloudUser user = SecurityUtils.getUser(); + + IntegralTransactionDto dto = new IntegralTransactionDto(); + dto.setUserId(user.getId()); + dto.setBizType(WalletIntegralBizEnum.REWARDED_AD.getCode()); + + return R.ok(integralTransactionService.scopePageList(page, dto, null)); + } + + /* ************************************* end app end ************************************* */ + + @PostMapping("/update-integral") + @Operation(summary = "更新积分") + @PreAuthorize("@pms.hasPermission('integral_transaction_update_integral')") + public R updateIntegral(@RequestBody IntegralTransactionDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + dto.setAddUserId(user.getId()); + return R.ok(integralTransactionService.updateIntegral(dto)); + } + /** * 分页查询 */ @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") - @PreAuthorize("@pms.hasPermission('wallet_integralTransaction_view')") public R getIntegralTransactionPage(@ParameterObject Page page, @ParameterObject IntegralTransactionDto dto) { return R.ok(integralTransactionService.scopePageList(page, dto, null)); } @@ -53,28 +94,6 @@ public class IntegralTransactionController { return R.ok(integralTransactionService.getById(id)); } - /** - * 新增积分记录 - */ - @Operation(summary = "新增积分记录", description = "新增积分记录") - @SysLog("新增积分记录") - @PostMapping - @PreAuthorize("@pms.hasPermission('wallet_integralTransaction_add')") - public R save(@RequestBody IntegralTransactionEntity integralTransaction) { - return R.ok(integralTransactionService.save(integralTransaction)); - } - - /** - * 修改积分记录 - */ - @Operation(summary = "修改积分记录", description = "修改积分记录") - @SysLog("修改积分记录") - @PutMapping - @PreAuthorize("@pms.hasPermission('wallet_integralTransaction_edit')") - public R updateById(@RequestBody IntegralTransactionEntity integralTransaction) { - return R.ok(integralTransactionService.updateById(integralTransaction)); - } - /** * 通过id删除积分记录 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActAdController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActAdController.java index 3638779d6..0f5088907 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActAdController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActAdController.java @@ -6,9 +6,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.wallet.api.dto.act.ActAdDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCouponDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCouponRecordDto; import com.bsd.pjcloud.wallet.api.entity.act.ActAdEntity; import com.bsd.pjcloud.wallet.api.vo.act.ActAdVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActCouponRecordVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActCouponVo; import com.bsd.pjcloud.wallet.service.ActAdService; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; @@ -34,6 +40,30 @@ public class ActAdController { private final ActAdService actAdService; + /* ************************************* start app start ************************************* */ + + @Operation(summary = "激励广告兑换券分页", description = "激励广告兑换券分页") + @GetMapping("/app/rewarded-ad-coupon-page") + public R> rewardedAdCouponPage(@ParameterObject Page page) { + return R.ok(actAdService.rewardedAdCouponPage(page)); + } + + + @Operation(summary = "激励广告兑换券领取分页", description = "激励广告兑换券领取分页") + @GetMapping("/app/rewarded-ad0-apply-coupon-page") + public R> rewardedAdApplyCouponPage(@ParameterObject Page page) { + + PjcloudUser user = SecurityUtils.getUser(); + + ActCouponRecordDto dto = new ActCouponRecordDto(); + dto.setUserId(user.getId()); + + return R.ok(actAdService.rewardedAdApplyCouponPage(page, dto)); + } + + + /* ************************************* end app end ************************************* */ + /** * 分页查询 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/integral/IntegralManageMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/integral/IntegralManageMapper.java index 7f3316b06..fd889ff5b 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/integral/IntegralManageMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/integral/IntegralManageMapper.java @@ -1,9 +1,12 @@ package com.bsd.pjcloud.wallet.mapper.integral; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; import com.bsd.pjcloud.wallet.api.dto.integral.IntegralManageDto; +import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralManageEntity; import com.bsd.pjcloud.wallet.api.vo.integral.IntegralManageVo; import org.apache.ibatis.annotations.Mapper; @@ -14,4 +17,37 @@ public interface IntegralManageMapper extends PjcloudBaseMapper scopePageList(Page page, @Param("dto") IntegralManageDto dto, DataScope dataScope); + /** + * 当充值的时候,更新积分 + */ + default int updateWhenIntegral(Long id, Integer integral) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() + .setSql(" integral_num = integral_num + " + integral + ", total_recharge = total_recharge + " + integral) + .eq(IntegralManageEntity::getId, id); + return update(null, lambdaUpdateWrapper); + } + + /** + * 当消费退款时候,更新积分 + */ + default int updateWhenConsumptionRefundIntegral(Long id, Integer integral) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() + .setSql(" integral_num = integral_num + " + integral + ", total_expense = total_expense - " + integral) + .eq(IntegralManageEntity::getId, id); + return update(null, lambdaUpdateWrapper); + } + + /** + * 当消费时候,更新钱包 + * @param force 是否强制消费(会导致扣成负数) + */ + default int updateWhenConsumption(Long id, Integer integral, Boolean force) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() + .setSql(" integral_num = integral_num - " + integral + ", total_expense = total_expense + " + integral) + .eq(IntegralManageEntity::getId, id); + if (ObjectUtil.isEmpty(force) || !force) { + lambdaUpdateWrapper.ge(IntegralManageEntity::getIntegralFreeze, integral); + } + return update(null, lambdaUpdateWrapper); + } } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActAdService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActAdService.java index 48ea278a3..f920587e0 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActAdService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActAdService.java @@ -5,8 +5,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.wallet.api.dto.act.ActAdDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCouponDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCouponRecordDto; import com.bsd.pjcloud.wallet.api.entity.act.ActAdEntity; import com.bsd.pjcloud.wallet.api.vo.act.ActAdVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActCouponRecordVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActCouponVo; public interface ActAdService extends IService { @@ -15,4 +19,14 @@ public interface ActAdService extends IService { Long create(ActAdDto dto); ActAdEntity edit(ActAdDto dto); + + /** + * 激励广告兑换券分页 + */ + Page rewardedAdCouponPage(Page page); + + /** + * 激励广告兑换券领取分页 + */ + Page rewardedAdApplyCouponPage(Page page, ActCouponRecordDto dto); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/IntegralManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/IntegralManageService.java index 1ba8b3d33..fe74ecb2f 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/IntegralManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/IntegralManageService.java @@ -5,13 +5,23 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.wallet.api.dto.integral.IntegralManageDto; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralManageEntity; +import com.bsd.pjcloud.wallet.api.vo.integral.IntegralMakeMoneyTotalVo; import com.bsd.pjcloud.wallet.api.vo.integral.IntegralManageVo; public interface IntegralManageService extends IService { + /** + * 创建或获取用户积分 + */ + IntegralManageEntity getOrCreateIntegral(Long userId); + + /** + * 我要赚钱面板统计 + */ + IntegralMakeMoneyTotalVo makeMoneyTotal(Long userId); + /** * 分页查询 */ Page scopePageList(Page page, IntegralManageDto dto, DataScope dataScope); - } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/IntegralTransactionService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/IntegralTransactionService.java index 4f7e73b5d..30ebd41a2 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/IntegralTransactionService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/IntegralTransactionService.java @@ -3,12 +3,34 @@ package com.bsd.pjcloud.wallet.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.wallet.api.constant.Integral.WalletIntegralBizEnum; +import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.dto.integral.IntegralTransactionDto; +import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralTransactionEntity; import com.bsd.pjcloud.wallet.api.vo.integral.IntegralTransactionVo; public interface IntegralTransactionService extends IService { + /** + * 增加信息流广告积分 + */ + Boolean remoteAddRewardIedntegral(Long userId, String bizId); + + /** + * 增加积分 + */ + IntegralTransactionEntity addIntegral(Long userId, Integer integral, WalletIntegralBizEnum bizType, String bizId); + + /** + * 减少积分 + */ + IntegralTransactionEntity reduceIntegral(Long userId, Integer integral, WalletIntegralBizEnum bizType, String bizId, Boolean force); + Page scopePageList(Page page, IntegralTransactionDto dto, DataScope dataScope); + /** + * 更新积分 + */ + Boolean updateIntegral(IntegralTransactionDto dto); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java index 7347045ee..e34075165 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java @@ -9,8 +9,6 @@ import com.bsd.pjcloud.wallet.api.dto.WalletSettingDto; import com.bsd.pjcloud.wallet.api.entity.WalletSettingEntity; import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; import com.bsd.pjcloud.wallet.mapper.WalletSettingMapper; -import com.bsd.pjcloud.wallet.service.MchRuleJoinService; -import com.bsd.pjcloud.wallet.service.WalletRuleJoinService; import com.bsd.pjcloud.wallet.service.WalletSettingService; import lombok.Data; import lombok.RequiredArgsConstructor; diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActAdServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActAdServiceImpl.java index e1c55a68c..d9bea4f05 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActAdServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActAdServiceImpl.java @@ -9,12 +9,17 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.wallet.api.constant.act.*; import com.bsd.pjcloud.wallet.api.dto.act.ActAdDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCouponDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCouponRecordDto; import com.bsd.pjcloud.wallet.api.dto.act.ActCreateAdCouponDto; import com.bsd.pjcloud.wallet.api.entity.act.ActAdEntity; import com.bsd.pjcloud.wallet.api.entity.act.ActCouponEntity; import com.bsd.pjcloud.wallet.api.vo.act.ActAdVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActCouponRecordVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActCouponVo; import com.bsd.pjcloud.wallet.mapper.act.ActAdMapper; import com.bsd.pjcloud.wallet.service.ActAdService; +import com.bsd.pjcloud.wallet.service.ActCouponRecordService; import com.bsd.pjcloud.wallet.service.ActCouponService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -31,7 +36,10 @@ import java.util.List; @RequiredArgsConstructor public class ActAdServiceImpl extends ServiceImpl implements ActAdService { + private final static String REWARDED_AD_UNIQUE_CODE = "wbcHjM"; + private final ActCouponService actCouponService; + private final ActCouponRecordService actCouponRecordService; @Override public Page scopePageList(Page page, ActAdDto dto, DataScope dataScope) { @@ -66,6 +74,38 @@ public class ActAdServiceImpl extends ServiceImpl impl return baseMapper.selectById(entity.getId()); } + /* ************************************* start app start ************************************* */ + + /** + * 激励广告兑换券分页 + */ + @Override + public Page rewardedAdCouponPage(Page page) { + ActAdEntity actAd = baseMapper.selectOne(new LambdaQueryWrapper().eq(ActAdEntity::getUniqueCode, "wbcHjM")); + if (ObjectUtil.isEmpty(actAd)) { + return new Page<>(); + } + ActCouponDto queryDto = new ActCouponDto(); + queryDto.setParentActId(actAd.getId()); + return actCouponService.pageJoin(page, queryDto); + } + + /** + * 激励广告兑换券领取分页 + */ + @Override + public Page rewardedAdApplyCouponPage(Page page, ActCouponRecordDto dto) { + ActAdEntity actAd = baseMapper.selectOne(new LambdaQueryWrapper().eq(ActAdEntity::getUniqueCode, "wbcHjM")); + if (ObjectUtil.isEmpty(actAd)) { + return new Page<>(); + } + dto.setParentActId(actAd.getId()); + return actCouponRecordService.pageList(page, dto); + } + + + /* ************************************* end app end ************************************* */ + private void generateDefaultAct(ActAdEntity actAd) { if (ObjectUtil.isEmpty(actAd.getTypeList())) { return; diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/integral/IntegralManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/integral/IntegralManageServiceImpl.java index 3e16979d2..c66c2e9f1 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/integral/IntegralManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/integral/IntegralManageServiceImpl.java @@ -1,18 +1,32 @@ package com.bsd.pjcloud.wallet.service.impl.integral; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.spring.SpringUtil; +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.entity.SysUser; +import com.bsd.pjcloud.admin.api.feign.RemoteUserService; +import com.bsd.pjcloud.admin.api.utils.DataUtil; +import com.bsd.pjcloud.common.core.util.CollectionUtils; +import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.wallet.api.dto.integral.IntegralManageDto; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralManageEntity; +import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; +import com.bsd.pjcloud.wallet.api.vo.integral.IntegralMakeMoneyTotalVo; import com.bsd.pjcloud.wallet.api.vo.integral.IntegralManageVo; import com.bsd.pjcloud.wallet.mapper.integral.IntegralManageMapper; import com.bsd.pjcloud.wallet.service.IntegralManageService; +import com.bsd.pjcloud.wallet.service.WalletSettingService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.ArrayList; +import java.util.List; + /** * 用户积分 */ @@ -22,12 +36,74 @@ import org.springframework.validation.annotation.Validated; @Service public class IntegralManageServiceImpl extends ServiceImpl implements IntegralManageService { + private final WalletSettingService walletSettingService; + + private final RemoteUserService remoteUserService; + + /** + * 创建或获取用户积分 + */ + @Override + public IntegralManageEntity getOrCreateIntegral(Long userId) { + IntegralManageEntity integral = baseMapper.selectOne(new LambdaQueryWrapper().eq(IntegralManageEntity::getUserId, userId)); + if (ObjectUtil.isNotEmpty(integral)) { + return integral; + } + // 创建用户积分 + IntegralManageEntity saveObj = new IntegralManageEntity(); + saveObj.setUserId(userId); + baseMapper.insert(saveObj); + return baseMapper.selectById(saveObj.getId()); + } + + /** + * 我要赚钱面板统计 + */ + @Override + public IntegralMakeMoneyTotalVo makeMoneyTotal(Long userId) { + IntegralMakeMoneyTotalVo result = new IntegralMakeMoneyTotalVo(); + // 积分 + IntegralManageEntity integral = getSelf().getOrCreateIntegral(userId); + if (ObjectUtil.isNotEmpty(integral)) { + result.setIntegralNum(integral.getIntegralNum()); + } + // 激励视频配置 + WalletSettingVo setting = walletSettingService.getSetting(); + if (ObjectUtil.isNotEmpty(setting)) { + result.setTodayViewAdLimitNum(setting.getTodayViewRewardedAdLimit()); + result.setViewAdIntegralNum(setting.getRewardedAdIntegral()); + } + // 今日已看视频 + + return result; + } + /** * 分页查询 */ @Override public Page scopePageList(Page page, IntegralManageDto dto, DataScope dataScope) { - return baseMapper.scopePageList(page, dto, dataScope); + Page pageList = baseMapper.scopePageList(page, dto, dataScope); + disposePageList(pageList.getRecords()); + return pageList; + } + + private void disposePageList(List list) { + if (ObjectUtil.isEmpty(list)) { + return; + } + // 用户 + List userIds = list.stream().map(IntegralManageVo::getUserId).distinct().toList(); + if (ObjectUtil.isNotEmpty(userIds)) { + R> userList = remoteUserService.getUserById(new ArrayList<>(userIds)); + if (ObjectUtil.isNotEmpty(userList.getData())) { + DataUtil.convertUserList(list, CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); + } + } + } + + private IntegralManageServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); } } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/integral/IntegralTransactionServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/integral/IntegralTransactionServiceImpl.java index 4142aea85..eb3144add 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/integral/IntegralTransactionServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/integral/IntegralTransactionServiceImpl.java @@ -1,16 +1,29 @@ package com.bsd.pjcloud.wallet.service.impl.integral; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.admin.api.dto.UserInfo; +import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.wallet.api.constant.Integral.WalletIntegralBizEnum; +import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.dto.integral.IntegralTransactionDto; +import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity; +import com.bsd.pjcloud.wallet.api.entity.integral.IntegralManageEntity; import com.bsd.pjcloud.wallet.api.entity.integral.IntegralTransactionEntity; +import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; import com.bsd.pjcloud.wallet.api.vo.integral.IntegralTransactionVo; +import com.bsd.pjcloud.wallet.mapper.integral.IntegralManageMapper; import com.bsd.pjcloud.wallet.mapper.integral.IntegralTransactionMapper; +import com.bsd.pjcloud.wallet.service.IntegralManageService; import com.bsd.pjcloud.wallet.service.IntegralTransactionService; +import com.bsd.pjcloud.wallet.service.WalletSettingService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; /** @@ -22,9 +35,142 @@ import org.springframework.validation.annotation.Validated; @Service public class IntegralTransactionServiceImpl extends ServiceImpl implements IntegralTransactionService { + static private final String TAG = "积分流水"; + + private final WalletSettingService walletSettingService; + private final IntegralManageService integralManageService; + + private final IntegralManageMapper integralManageMapper; + + private final RemoteUserService remoteUserService; + + /* ************************************* start 远程调用 start ************************************* */ + + /** + * 增加信息流广告积分 + */ + @Override + public Boolean remoteAddRewardIedntegral(Long userId, String bizId) { + // 获取积分配置 + WalletSettingVo setting = walletSettingService.getSetting(); + if (ObjectUtil.isEmpty(setting) || ObjectUtil.isEmpty(setting.getRewardedAdIntegral()) || setting.getRewardedAdIntegral() <= 0) { + return false; + } + IntegralManageEntity integral = integralManageService.getOrCreateIntegral(userId); + if (ObjectUtil.isEmpty(integral)) { + log.error("|{}|增加信息流广告积分,用户id({})不存在.", TAG, userId); + return false; + } + getSelf().addIntegral(userId, setting.getRewardedAdIntegral(), WalletIntegralBizEnum.REWARDED_AD, bizId); + return null; + } + + + /* ************************************* end 远程调用 end ************************************* */ + + /** + * 增加积分 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public IntegralTransactionEntity addIntegral(Long userId, Integer integral, WalletIntegralBizEnum bizType, String bizId) { + // 查询用户 + UserInfo userInfo = remoteUserService.getInnerByUserId(userId).getData(); + if (ObjectUtil.isEmpty(userInfo)) { + log.error("|{}|增加积分,用户id({})不存在.", TAG, userId); + throw new RuntimeException("扣款失败,用户钱包不存在"); + } + IntegralManageEntity integralManage = integralManageService.getOrCreateIntegral(userId); + if (ObjectUtil.isEmpty(integralManage)) { + log.error("|{}|增加积分,用户id({})不存在.", TAG, userId); + throw new RuntimeException("扣款失败,用户钱包不存在"); + } + switch (bizType) { + case UPDATE, REWARDED_AD -> { + integralManageMapper.updateWhenIntegral(integralManage.getId(), integral); + } + default -> { + log.error("|{}|用户id({})使用未实现的增加钱包余额的类型({}).", TAG, userId, bizType.getDesc()); + throw new UnsupportedOperationException("待实现"); + } + } + IntegralTransactionEntity insetObj = new IntegralTransactionEntity(); + insetObj.setIntegralId(integralManage.getId()); + insetObj.setDeptId(userInfo.getSysUser().getDeptId()); + insetObj.setBizType(bizType.getCode()); + insetObj.setBizId(bizId); + insetObj.setTitle(bizType.getDesc()); + insetObj.setIntegralNum(integral); + insetObj.setIntegralBalance(integralManage.getIntegralNum() + integral); + save(insetObj); + return insetObj; + } + + /** + * 减少积分 + */ + @Override + public IntegralTransactionEntity reduceIntegral(Long userId, Integer integral, WalletIntegralBizEnum bizType, String bizId, Boolean force) { + if (ObjectUtil.isEmpty(force)) force = false; + // 查询用户 + UserInfo userInfo = remoteUserService.getInnerByUserId(userId).getData(); + if (ObjectUtil.isEmpty(userInfo)) { + log.error("|{}|减少积分,用户id({})不存在.", TAG, userId); + throw new RuntimeException("扣款失败,用户钱包不存在"); + } + IntegralManageEntity integralManage = integralManageService.getOrCreateIntegral(userId); + if (ObjectUtil.isEmpty(integralManage)) { + log.error("|{}|减少积分,用户id({})不存在.", TAG, userId); + throw new RuntimeException("扣款失败,用户钱包不存在"); + } + int updateCounts = integralManageMapper.updateWhenConsumption(integralManage.getId(), integral, force); + if (updateCounts == 0) { + log.error("|{}|减少积分,用户id({})积分不足.", TAG, integralManage.getUserId()); + throw new RuntimeException("积分不足"); + } + + Integer afterBalance = integralManage.getIntegralNum() - integral; + + IntegralTransactionEntity insetObj = new IntegralTransactionEntity(); + insetObj.setIntegralId(integralManage.getId()); + insetObj.setDeptId(userInfo.getSysUser().getDeptId()); + insetObj.setBizType(bizType.getCode()); + insetObj.setBizId(bizId); + insetObj.setTitle(bizType.getDesc()); + insetObj.setIntegralNum(-integral); + insetObj.setIntegralBalance(afterBalance); + save(insetObj); + return insetObj; + } + @Override public Page scopePageList(Page page, IntegralTransactionDto dto, DataScope dataScope) { + if (ObjectUtil.isNotEmpty(dto.getUserId())) { + IntegralManageEntity integralManage = integralManageService.getOrCreateIntegral(dto.getUserId()); + if (ObjectUtil.isNotEmpty(integralManage)) { + dto.setIntegralId(integralManage.getId()); + } + } return baseMapper.scopePageList(page, dto, dataScope); } + /** + * 更新积分 + */ + @Override + public Boolean updateIntegral(IntegralTransactionDto dto) { + IntegralManageEntity integralManage = integralManageService.getById(dto.getId()); + if (ObjectUtil.isEmpty(integralManage)) { + log.error("|{}|更新积分,用户id({})不存在.", TAG, integralManage.getUserId()); + throw new RuntimeException("扣款失败,用户钱包不存在"); + } + // 更新积分 + IntegralTransactionEntity result = getSelf().addIntegral(integralManage.getUserId(), dto.getIntegralNum(), WalletIntegralBizEnum.UPDATE, String.valueOf(dto.getAddUserId())); + return ObjectUtil.isNotEmpty(result); + } + + private IntegralTransactionServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } + } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCouponMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCouponMapper.xml index 9237eaedd..b1702ed46 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCouponMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCouponMapper.xml @@ -5,6 +5,7 @@ select a.id, a.unique_code, + a.cove_image, a.parent_act_id, a.bind_notify_id, a.name, diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/integral/IntegralManageMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/integral/IntegralManageMapper.xml index 80de84459..0e75c7082 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/integral/IntegralManageMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/integral/IntegralManageMapper.xml @@ -6,7 +6,6 @@ select a.id, a.user_id, - a.dept_id, a.integral_num, a.total_expense, a.total_recharge,