diff --git a/bnyer-common/bnyer-common-redis/pom.xml b/bnyer-common/bnyer-common-redis/pom.xml
index 4782190..2c7b99b 100644
--- a/bnyer-common/bnyer-common-redis/pom.xml
+++ b/bnyer-common/bnyer-common-redis/pom.xml
@@ -8,26 +8,32 @@
1.0.0
4.0.0
-
+
bnyer-common-redis
-
+
bnyer-common-redis缓存服务
-
+
org.springframework.boot
spring-boot-starter-data-redis
-
+
com.dimensionalnode
bnyer-common-core
-
+
+
+
+ org.redisson
+ redisson-spring-boot-starter
+
+
-
\ No newline at end of file
+
diff --git a/bnyer-common/bnyer-common-redis/src/main/java/com/bnyer/common/redis/configure/RedissonConfig.java b/bnyer-common/bnyer-common-redis/src/main/java/com/bnyer/common/redis/configure/RedissonConfig.java
new file mode 100644
index 0000000..f65a078
--- /dev/null
+++ b/bnyer-common/bnyer-common-redis/src/main/java/com/bnyer/common/redis/configure/RedissonConfig.java
@@ -0,0 +1,40 @@
+package com.bnyer.common.redis.configure;
+
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * redisson配置
+ * @author chengkun
+ * @date 2022/7/1 11:12
+ */
+@ConfigurationProperties(prefix = "spring.redis")
+@Configuration
+@RefreshScope
+public class RedissonConfig {
+
+ @Value("${spring.redis.host}")
+ private String host;
+
+ @Value("${spring.redis.port}")
+ private String port;
+
+ @Value("${spring.redis.password}")
+ private String password;
+
+ @Bean(destroyMethod = "shutdown")
+ @ConditionalOnMissingBean(RedissonClient.class)
+ public RedissonClient redissonClient()
+ {
+ Config config = new Config();
+ config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password);
+ return Redisson.create(config);
+ }
+}
diff --git a/bnyer-common/bnyer-common-redis/src/main/java/com/bnyer/common/redis/service/RedissonService.java b/bnyer-common/bnyer-common-redis/src/main/java/com/bnyer/common/redis/service/RedissonService.java
new file mode 100644
index 0000000..0642c63
--- /dev/null
+++ b/bnyer-common/bnyer-common-redis/src/main/java/com/bnyer/common/redis/service/RedissonService.java
@@ -0,0 +1,114 @@
+package com.bnyer.common.redis.service;
+
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * redisson锁工具类
+ * @author chengkun
+ * @date 2022/7/1 11:10
+ */
+@Component
+public class RedissonService {
+
+ @Autowired
+ private RedissonClient redissonClient;
+
+ /**
+ * 获取锁
+ *
+ * @param lockKey 锁实例key
+ * @return 锁信息
+ */
+ public RLock getRLock(String lockKey)
+ {
+ return redissonClient.getLock(lockKey);
+ }
+
+ /**
+ * 加锁
+ *
+ * @param lockKey 锁实例key
+ * @return 锁信息
+ */
+ public RLock lock(String lockKey)
+ {
+ RLock lock = getRLock(lockKey);
+ lock.lock();
+ return lock;
+ }
+
+ /**
+ * 加锁
+ *
+ * @param lockKey 锁实例key
+ * @param leaseTime 上锁后自动释放锁时间
+ * @return true=成功;false=失败
+ */
+ public Boolean tryLock(String lockKey, long leaseTime)
+ {
+ return tryLock(lockKey, 0, leaseTime, TimeUnit.SECONDS);
+ }
+
+ /**
+ * 加锁
+ *
+ * @param lockKey 锁实例key
+ * @param leaseTime 上锁后自动释放锁时间
+ * @param unit 时间颗粒度
+ * @return true=加锁成功;false=加锁失败
+ */
+ public Boolean tryLock(String lockKey, long leaseTime, TimeUnit unit)
+ {
+ return tryLock(lockKey, 0, leaseTime, unit);
+ }
+
+ /**
+ * 加锁
+ *
+ * @param lockKey 锁实例key
+ * @param waitTime 最多等待时间
+ * @param leaseTime 上锁后自动释放锁时间
+ * @param unit 时间颗粒度
+ * @return true=加锁成功;false=加锁失败
+ */
+ public Boolean tryLock(String lockKey, long waitTime, long leaseTime, TimeUnit unit)
+ {
+ RLock rLock = getRLock(lockKey);
+ boolean tryLock = false;
+ try
+ {
+ tryLock = rLock.tryLock(waitTime, leaseTime, unit);
+ }
+ catch (InterruptedException e)
+ {
+ return false;
+ }
+ return tryLock;
+ }
+
+ /**
+ * 释放锁
+ *
+ * @param lockKey 锁实例key
+ */
+ public void unlock(String lockKey)
+ {
+ RLock lock = getRLock(lockKey);
+ lock.unlock();
+ }
+
+ /**
+ * 释放锁
+ *
+ * @param lock 锁信息
+ */
+ public void unlock(RLock lock)
+ {
+ lock.unlock();
+ }
+}
diff --git a/bnyer-common/bnyer-common-redis/src/main/resources/META-INF/spring.factories b/bnyer-common/bnyer-common-redis/src/main/resources/META-INF/spring.factories
index 2d21a45..6dfffb0 100644
--- a/bnyer-common/bnyer-common-redis/src/main/resources/META-INF/spring.factories
+++ b/bnyer-common/bnyer-common-redis/src/main/resources/META-INF/spring.factories
@@ -1,5 +1,7 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.bnyer.common.redis.configure.RedisConfig,\
- com.bnyer.common.redis.service.RedisService
+ com.bnyer.common.redis.service.RedisService,\
+ com.bnyer.common.redis.configure.RedissonConfig,\
+ com.bnyer.common.redis.service.RedissonService
+
-
diff --git a/bnyer-services/bnyer-img/pom.xml b/bnyer-services/bnyer-img/pom.xml
index f70bda5..1811aec 100644
--- a/bnyer-services/bnyer-img/pom.xml
+++ b/bnyer-services/bnyer-img/pom.xml
@@ -107,14 +107,12 @@
com.github.binarywang
weixin-java-pay
- 4.2.0
com.alipay.sdk
alipay-sdk-java
- 4.23.21.ALL
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/AlipayConfig.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/AlipayConfig.java
index b173f11..7c95f63 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/AlipayConfig.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/AlipayConfig.java
@@ -35,20 +35,4 @@ public class AlipayConfig{
@Value("${alipay.rootPath}")
public String rootPath;
-
-// @Resource
-// private TokenCheckHandler tokenCheckHandler;
-
- /** 不需要拦截地址 */
-// public static final String[] excludeUrls = { "/mini/tiktok/loginTiktok", "/mini/tiktok/insertFeedback"};
-//
-// @Override
-// public void addInterceptors(InterceptorRegistry registry) {
-// // 注册Token拦截器
-// registry.addInterceptor(tokenCheckHandler)
-// .addPathPatterns("/**")
-// .excludePathPatterns(excludeUrls)
-// .order(-10);
-//
-// }
}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java
index 911f747..c665d13 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java
@@ -51,4 +51,9 @@ public class RedisKeyConstant {
* 微信小程序艺术家邀请键
*/
public static final String WECHAT_CREATOR_INVITE_KEY = "bnyer.img.invite.creator:";
+
+ /**
+ * 审核收益锁键
+ */
+ public static final String VERIFY_PROFIT_LOCK_KEY = "bnyer.img.profit.lock:";
}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
index ac35ddc..9925830 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
@@ -265,12 +265,4 @@ public class CreatorMiniController extends BaseController {
log.info("小程序艺术家数据参数为:{}", JSON.toJSON(param));
return AjaxResult.success(creatorService.login(param));
}
-
- //@TokenCheck
- @ApiOperation(value="支付宝异步回调")
- @GetMapping(value = "/callback")
- public AjaxResult alipayCallback(){
- log.info("支付宝回调了!");
- return AjaxResult.success();
- }
}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/CreatorProfit.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/CreatorProfit.java
index c34ae02..94e05a7 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/CreatorProfit.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/CreatorProfit.java
@@ -76,10 +76,10 @@ public class CreatorProfit extends BaseDomain {
private String platform;
/**
- * 应用类型(0->bnyer壁纸)
+ * 应用类型(0->次元壁纸)
*/
@TableField(value = "app_type")
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
+ @ApiModelProperty(value="应用类型(0->次元壁纸)")
private String appType;
/**
@@ -138,6 +138,13 @@ public class CreatorProfit extends BaseDomain {
@ApiModelProperty(value="转入钱包时间")
private Date walletTime;
+ /**
+ * 唯一标识
+ */
+ @TableField(value = "mark")
+ @ApiModelProperty(value="唯一标识")
+ private String mark;
+
private static final long serialVersionUID = 1L;
}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/BatchUpdateInviteDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/BatchUpdateInviteDto.java
deleted file mode 100644
index d769ee1..0000000
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/BatchUpdateInviteDto.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.bnyer.img.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-
-@Getter
-@Setter
-@ApiModel("批量更新邀请者收益接收类")
-public class BatchUpdateInviteDto implements Serializable {
-
- @ApiModelProperty(value="艺术家id")
- private Long creatorId;
-
- @ApiModelProperty(value="图片id")
- private Long imgId;
-
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
- private String appType;
-
- @ApiModelProperty(value="结算平台(0->抖音;1->快手;2->微信;3->uniapp)")
- private String platform;
-
- @ApiModelProperty(value="收益类型(0->广告浏览;1->邀请;2->会员)")
- private String type;
-
- @ApiModelProperty(value="创建时间")
- private String date;
-}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitAdInsertDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitAdInsertDto.java
index 15fd71c..d65a415 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitAdInsertDto.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitAdInsertDto.java
@@ -34,7 +34,7 @@ public class CreatorProfitAdInsertDto implements Serializable {
private String platform;
@NotBlank(message = "应用类型不能为空!")
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
+ @ApiModelProperty(value="应用类型(0->次元壁纸)")
private String appType;
public CreatorProfit extractParam(){
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitPageDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitPageDto.java
index 99dc33b..d97206d 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitPageDto.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitPageDto.java
@@ -19,7 +19,7 @@ public class CreatorProfitPageDto extends BasePageDto {
@ApiModelProperty(value="结算平台(0->抖音;1->快手;2->微信;3->uniapp)")
private String platform;
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
+ @ApiModelProperty(value="应用类型(0->次元壁纸)")
private String appType;
@ApiModelProperty(value="收益类型(0->广告浏览;1->邀请;2->会员)")
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitUpdateDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitUpdateDto.java
index 7237ce1..f8d484b 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitUpdateDto.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitUpdateDto.java
@@ -45,7 +45,7 @@ public class CreatorProfitUpdateDto implements Serializable {
private String platform;
@NotBlank(message = "应用类型不能为空!")
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
+ @ApiModelProperty(value="应用类型(0->次元壁纸)")
private String appType;
@NotBlank(message = "收益类型不能为空!")
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorProfitMapper.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorProfitMapper.java
index c1fbe96..0c98e38 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorProfitMapper.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorProfitMapper.java
@@ -1,9 +1,7 @@
package com.bnyer.img.mapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bnyer.img.domain.CreatorProfit;
-import com.bnyer.img.dto.BatchUpdateInviteDto;
import com.bnyer.img.dto.CreatorProfitPageDto;
import com.bnyer.img.dto.ProfitInOrEndDto;
import com.bnyer.img.vo.*;
@@ -29,15 +27,10 @@ public interface CreatorProfitMapper extends BaseMapper {
/**
* 更新下载数量
- * @param creatorId 艺术家id
- * @param imgId 图片Id
- * @param appType 应用
- * @param platform 平台
- * @param type 类型
- * @param date 日期
+ * @param mark 唯一标识
* @return -
*/
- int updateDownloadNum(@Param("creatorId") Long creatorId,@Param("imgId") Long imgId,@Param("appType") String appType,@Param("platform") String platform,@Param("type")String type,@Param("date") String date);
+ int updateDownloadNum(@Param("mark") String mark);
/**
* 小程序查询即将入账日期下载次数
@@ -98,21 +91,16 @@ public interface CreatorProfitMapper extends BaseMapper {
/**
* 判断当天是否存在结算收益订单数据
- * @param creatorId 艺术家id
- * @param imgId 图片id
- * @param platform 平台
- * @param appType 应用
- * @param date 日期(年月日)
+ * @param mark 唯一标识
* @return -
*/
- CreatorProfit checkCreatorProfitExist(@Param("creatorId") Long creatorId,@Param("imgId") Long imgId,@Param("appType") String appType,
- @Param("platform") String platform, @Param("type") String type, @Param("date") String date);
+ CreatorProfit checkCreatorProfitExist(@Param("mark") String mark);
/**
* 批量更新邀请记录下载次数
* @param list -
*/
- void batchUpdateDownload(@Param("list") List list);
+ void batchUpdateDownload(@Param("list") List list);
/**
* 批量新增邀请收益
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorProfitService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorProfitService.java
index 7fc8ed3..bc9cc56 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorProfitService.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorProfitService.java
@@ -16,15 +16,10 @@ public interface CreatorProfitService {
/**
* 判断当天是否存在结算收益订单数据
- * @param creatorId 艺术家id
- * @param imgId 图片id
- * @param platform 平台
- * @param appType 应用
- * @param type 类型
- * @param date 日期(年月日)
+ * @param mark 唯一标识
* @return -
*/
- boolean checkCreatorProfitExist(Long creatorId,Long imgId,String appType,String platform,String type,String date);
+ boolean checkCreatorProfitExist(String mark);
/**
* 新增或更新广告收益记录
@@ -41,15 +36,10 @@ public interface CreatorProfitService {
/**
* 更新指定日期图片下载数量
- * @param creatorId 艺术家id
- * @param imgId 图片id
- * @param appType 应用
- * @param platform 平台
- * @param type 类型
- * @param date 日期
+ * @param mark 唯一标识
* @return -
*/
- int updateCreatorProfitDownloadNum(Long creatorId,Long imgId,String appType,String platform,String type,String date);
+ int updateCreatorProfitDownloadNum(String mark);
/**
* 修改结算收益
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java
index 0fb4040..3f39f6b 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java
@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.domain.CreatorProfit;
import com.bnyer.img.domain.InviteLog;
-import com.bnyer.img.dto.BatchUpdateInviteDto;
import com.bnyer.img.dto.CreatorProfitPageDto;
import com.bnyer.img.dto.ProfitInOrEndDto;
import com.bnyer.img.mapper.CreatorProfitMapper;
@@ -15,7 +14,6 @@ import com.bnyer.img.service.CreatorProfitService;
import com.bnyer.img.service.TiktokImgService;
import com.bnyer.img.vo.*;
import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -43,8 +41,8 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
private InviteLogMapper inviteLogMapper;
@Override
- public boolean checkCreatorProfitExist(Long creatorId, Long imgId,String appType,String platform,String type, String date) {
- CreatorProfit creatorProfit = creatorProfitMapper.checkCreatorProfitExist(creatorId, imgId, appType, platform,type, date);
+ public boolean checkCreatorProfitExist(String mark) {
+ CreatorProfit creatorProfit = creatorProfitMapper.checkCreatorProfitExist(mark);
if(creatorProfit != null){
return true;
}else{
@@ -58,13 +56,15 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
long times = System.currentTimeMillis();
String date = format.format(times);
+ String mark = creatorProfit.getCreatorId()+creatorProfit.getImgId()+creatorProfit.getAppType()+creatorProfit.getPlatform()+
+ "0"+date.replace("-","");
//缓存中下载总数+1
tiktokImgService.writeDownloadTotalNum(creatorProfit.getAppType(),creatorProfit.getPlatform());
//检查收益表是否存在广告记录,存在则更新次数
- boolean b = this.checkCreatorProfitExist(creatorProfit.getCreatorId(),creatorProfit.getImgId(),creatorProfit.getAppType(),creatorProfit.getPlatform(),"0",date);
+ boolean b = this.checkCreatorProfitExist(mark);
if(b){
- int update = this.updateCreatorProfitDownloadNum(creatorProfit.getCreatorId(), creatorProfit.getImgId(), creatorProfit.getAppType(), creatorProfit.getPlatform(),"0", date);
- log.info("更新日期【{}】艺术家【{}】图片【{}】应用【{}】平台【{}】收益下载次数+1",date,creatorProfit.getCreatorId(), creatorProfit.getImgId(), creatorProfit.getAppType(), creatorProfit.getPlatform());
+ int update = this.updateCreatorProfitDownloadNum(mark);
+ log.info("唯一标识【{}】收益下载次数+1",mark);
return update;
}
//不存在则新增广告记录
@@ -75,6 +75,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
creatorProfit.setIsShow("1");
creatorProfit.setSort(0);
creatorProfit.setDownloadNum(1);
+ creatorProfit.setMark(mark);
//根据平台生成订单号
switch (creatorProfit.getPlatform()){
case "0" :
@@ -106,20 +107,15 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
wrapper.eq(InviteLog::getInvitedCreatorId, creatorProfit.getCreatorId());
List inviteLogs = inviteLogMapper.selectList(wrapper);
if(inviteLogs.size() > 0){
- List updateList = new ArrayList<>();
+ List updateList = new ArrayList<>();
List insertList = new ArrayList<>();
for (InviteLog inviteLog : inviteLogs) {
+ String mark = inviteLog.getCreatorId()+creatorProfit.getImgId()+creatorProfit.getAppType()+creatorProfit.getPlatform()+
+ "1"+date.replace("-","");
//检查收益表是否存在邀请记录,存在则记录更新邀请者Id
- boolean b = this.checkCreatorProfitExist(inviteLog.getCreatorId(),creatorProfit.getImgId(),creatorProfit.getAppType(),creatorProfit.getPlatform(),"1",date);
+ boolean b = this.checkCreatorProfitExist(mark);
if(b){
- BatchUpdateInviteDto dto = new BatchUpdateInviteDto();
- dto.setCreatorId(inviteLog.getCreatorId());
- dto.setAppType(creatorProfit.getAppType());
- dto.setImgId(creatorProfit.getImgId());
- dto.setPlatform(creatorProfit.getPlatform());
- dto.setDate(date);
- dto.setType("1");
- updateList.add(dto);
+ updateList.add(mark);
}else{
//不存在则新增邀请者id
creatorProfit.setCreatorId(inviteLog.getCreatorId());
@@ -130,6 +126,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
creatorProfit.setIsShow("1");
creatorProfit.setSort(0);
creatorProfit.setDownloadNum(1);
+ creatorProfit.setMark(mark);
//根据平台生成订单号
switch (creatorProfit.getPlatform()){
case "0" :
@@ -150,6 +147,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
}
if(updateList.size() > 0){
//批量更新邀请记录
+ //TODO 修改此处BUG
creatorProfitMapper.batchUpdateDownload(updateList);
}
if(insertList.size() > 0){
@@ -161,8 +159,8 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
@Override
@Transactional(rollbackFor = Exception.class)
- public int updateCreatorProfitDownloadNum(Long creatorId, Long imgId, String appType, String platform,String type, String date) {
- return creatorProfitMapper.updateDownloadNum(creatorId,imgId,appType,platform,type,date);
+ public int updateCreatorProfitDownloadNum(String mark) {
+ return creatorProfitMapper.updateDownloadNum(mark);
}
@Override
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java
index c099f8f..b569910 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java
@@ -1,8 +1,10 @@
package com.bnyer.img.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.redis.service.RedisService;
+import com.bnyer.common.redis.service.RedissonService;
import com.bnyer.img.constants.ProfitOrderConstant;
import com.bnyer.img.constants.RedisKeyConstant;
import com.bnyer.img.domain.Creator;
@@ -12,13 +14,13 @@ import com.bnyer.img.dto.ProfitVerifyOrderDto;
import com.bnyer.img.dto.ProfitVerifyOrderInsertDto;
import com.bnyer.img.dto.ProfitVerifyOrderPageDto;
import com.bnyer.img.dto.ProfitVerifyOrderUpdateDto;
-import com.bnyer.img.mapper.CreatorMapper;
import com.bnyer.img.mapper.ProfitVerifyOrderMapper;
import com.bnyer.img.service.CreatorProfitService;
import com.bnyer.img.service.CreatorService;
import com.bnyer.img.service.ProfitVerifyOrderService;
import com.bnyer.img.vo.ConfirmProfitVo;
import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -28,6 +30,7 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.concurrent.TimeUnit;
@Service
@Slf4j
@@ -46,7 +49,7 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
private CreatorService creatorService;
@Autowired
- private CreatorMapper creatorMapper;
+ private RedissonService redissonService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -104,59 +107,76 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
@Transactional(rollbackFor = Exception.class)
public boolean verify(ProfitVerifyOrderDto params) {
if(params.getVerifyStatus().equals(ProfitOrderConstant.PASS)){
- //审核通过计算收益
- //昨日总收益的80%作为广告收益
- BigDecimal yesterdayTotalAdProfit = params.getAmt().multiply(BigDecimal.valueOf(0.8));
- //昨日总收益的10%作为邀请收益
- BigDecimal yesterdayTotalInviteProfit = params.getAmt().multiply(BigDecimal.valueOf(0.1));
- //获取昨日日期
- Date yesterday = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24);
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
- String date = simpleDateFormat.format(yesterday);
- String tiktokKey = RedisKeyConstant.TIKTOK_IMG_TOTAL_DOWNLOAD_NUM_KEY + date;
- String hashKey = params.getAppType()+":"+ params.getPlatform();
- if(redisService.hasHashKey(tiktokKey, hashKey)){
- //存在昨日平台下载数量
- Integer platformDownloadNum = redisService.getCacheMapValue(tiktokKey, hashKey);
- //广告单价
- BigDecimal adPrice = yesterdayTotalAdProfit.divide(BigDecimal.valueOf(platformDownloadNum), 3, BigDecimal.ROUND_DOWN);
- //邀请单价
- BigDecimal invitePrice = yesterdayTotalInviteProfit.divide(BigDecimal.valueOf(platformDownloadNum), 3, BigDecimal.ROUND_DOWN);
- //查出昨日对应平台的所有广告待入账信息
- List adProfits = creatorProfitService.queryPreProfit(params.getPlatform(), params.getAppType(), "0",date);
- if(adProfits.size() > 0){
- for (CreatorProfit adProfit : adProfits) {
- //设置广告收益
- adProfit.setProfit(BigDecimal.valueOf(adProfit.getDownloadNum()).multiply(adPrice));
- adProfit.setConfirmStatus("0");
- adProfit.setIncomeTime(new Date());
- adProfit.setStatus("1");
- creatorProfitService.update(adProfit);
+ //获取分布式锁
+ RLock lock = redissonService.getRLock(RedisKeyConstant.VERIFY_PROFIT_LOCK_KEY + params.getId());
+ try{
+ if(lock.tryLock(0L, 30L, TimeUnit.SECONDS)){
+ log.info("锁获取成功,开始执行审核收益操作");
+ //审核通过计算收益
+ //昨日总收益的80%作为广告收益
+ BigDecimal yesterdayTotalAdProfit = params.getAmt().multiply(BigDecimal.valueOf(0.8));
+ //昨日总收益的10%作为邀请收益
+ BigDecimal yesterdayTotalInviteProfit = params.getAmt().multiply(BigDecimal.valueOf(0.1));
+ //获取昨日日期
+ Date yesterday = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24);
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ String date = simpleDateFormat.format(yesterday);
+ String tiktokKey = RedisKeyConstant.TIKTOK_IMG_TOTAL_DOWNLOAD_NUM_KEY + date;
+ String hashKey = params.getAppType()+":"+ params.getPlatform();
+ if(redisService.hasHashKey(tiktokKey, hashKey)){
+ //存在昨日平台下载数量
+ Integer platformDownloadNum = redisService.getCacheMapValue(tiktokKey, hashKey);
+ //广告单价
+ BigDecimal adPrice = yesterdayTotalAdProfit.divide(BigDecimal.valueOf(platformDownloadNum), 3, BigDecimal.ROUND_DOWN);
+ //邀请单价
+ BigDecimal invitePrice = yesterdayTotalInviteProfit.divide(BigDecimal.valueOf(platformDownloadNum), 3, BigDecimal.ROUND_DOWN);
+ //查出昨日对应平台的所有广告待入账信息
+ List adProfits = creatorProfitService.queryPreProfit(params.getPlatform(), params.getAppType(), "0",date);
+ if(adProfits.size() > 0){
+ for (CreatorProfit adProfit : adProfits) {
+ //设置广告收益
+ adProfit.setProfit(BigDecimal.valueOf(adProfit.getDownloadNum()).multiply(adPrice));
+ adProfit.setConfirmStatus("0");
+ adProfit.setIncomeTime(new Date());
+ adProfit.setStatus("1");
+ creatorProfitService.update(adProfit);
+ }
}
- }
- //查出昨日对应平台的所有邀请待入账信息
- List inviteProfits = creatorProfitService.queryPreProfit(params.getPlatform(), params.getAppType(), "1",date);
- if(inviteProfits.size() > 0){
- //设置邀请收益
- for (CreatorProfit inviteProfit : inviteProfits) {
- inviteProfit.setProfit(BigDecimal.valueOf(inviteProfit.getDownloadNum()).multiply(invitePrice));
- inviteProfit.setConfirmStatus("0");
- inviteProfit.setIncomeTime(new Date());
- inviteProfit.setStatus("1");
- creatorProfitService.update(inviteProfit);
+ //查出昨日对应平台的所有邀请待入账信息
+ List inviteProfits = creatorProfitService.queryPreProfit(params.getPlatform(), params.getAppType(), "1",date);
+ if(inviteProfits.size() > 0){
+ //设置邀请收益
+ for (CreatorProfit inviteProfit : inviteProfits) {
+ inviteProfit.setProfit(BigDecimal.valueOf(inviteProfit.getDownloadNum()).multiply(invitePrice));
+ inviteProfit.setConfirmStatus("0");
+ inviteProfit.setIncomeTime(new Date());
+ inviteProfit.setStatus("1");
+ creatorProfitService.update(inviteProfit);
+ }
}
+ //设置完结算收益,删除数量缓存
+ redisService.deleteHashKey(tiktokKey,hashKey);
+ //更新审核单信息
+ ProfitVerifyOrder order = new ProfitVerifyOrder();
+ order.setId(params.getId());
+ order.setReason(params.getReason());
+ order.setVerifyAdminId(params.getVerifyAdminId());
+ order.setVerifyStatus(params.getVerifyStatus());
+ order.setVerifyTime(new Date());
+ profitVerifyOrderMapper.updateById(order);
+ return true;
}
- //设置完结算收益,删除数量缓存
- redisService.deleteHashKey(tiktokKey,hashKey);
- //更新审核单信息
- ProfitVerifyOrder order = new ProfitVerifyOrder();
- order.setId(params.getId());
- order.setReason(params.getReason());
- order.setVerifyAdminId(params.getVerifyAdminId());
- order.setVerifyStatus(params.getVerifyStatus());
- order.setVerifyTime(new Date());
- profitVerifyOrderMapper.updateById(order);
- return true;
+ }else{
+ throw new ServiceException("系统繁忙,请稍候重试!");
+ }
+ }catch (Exception e){
+ log.error("审核收益单失败!错误原因为【{}】",e.getMessage());
+ }finally {
+ //释放锁
+ if(lock.isHeldByCurrentThread()){
+ lock.unlock();
+ log.info("审核收益操作执行完毕,释放锁成功!");
+ }
}
return false;
}else{
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitEndAmtVo.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitEndAmtVo.java
index aef9fb3..68caa95 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitEndAmtVo.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitEndAmtVo.java
@@ -40,7 +40,7 @@ public class CreatorProfitEndAmtVo implements Serializable {
@ApiModelProperty(value="结算平台(0->抖音;1->快手;2->微信;3->uniapp)")
private String platform;
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
+ @ApiModelProperty(value="应用类型(0->次元壁纸)")
private String appType;
@ApiModelProperty(value="收益类型(0->广告浏览;1->邀请;2->会员)")
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitInAmtVo.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitInAmtVo.java
index d17fcef..d657c3e 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitInAmtVo.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitInAmtVo.java
@@ -40,7 +40,7 @@ public class CreatorProfitInAmtVo implements Serializable {
@ApiModelProperty(value="结算平台(0->抖音;1->快手;2->微信;3->uniapp)")
private String platform;
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
+ @ApiModelProperty(value="应用类型(0->次元壁纸)")
private String appType;
@ApiModelProperty(value="收益类型(0->广告浏览;1->邀请;2->会员)")
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitPreVo.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitPreVo.java
index 0e6824f..da2d3fd 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitPreVo.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitPreVo.java
@@ -33,7 +33,7 @@ public class CreatorProfitPreVo implements Serializable {
@ApiModelProperty(value="结算平台(0->抖音;1->快手;2->微信;3->uniapp)")
private String platform;
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
+ @ApiModelProperty(value="应用类型(0->次元壁纸)")
private String appType;
@ApiModelProperty(value="收益类型(0->广告浏览;1->邀请;2->会员)")
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitVo.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitVo.java
index b6ee5af..b74c008 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitVo.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorProfitVo.java
@@ -36,7 +36,7 @@ public class CreatorProfitVo implements Serializable {
@ApiModelProperty(value="结算平台(0->抖音;1->快手;2->微信;3->uniapp)")
private String platform;
- @ApiModelProperty(value="应用类型(0->bnyer壁纸)")
+ @ApiModelProperty(value="应用类型(0->次元壁纸)")
private String appType;
@ApiModelProperty(value="收益类型(0->广告浏览;1->邀请;2->会员)")
diff --git a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml
index 127525e..5b9a30d 100644
--- a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml
+++ b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml
@@ -24,12 +24,13 @@
+
id, order_no, creator_id,scan_code, img_id, profit, platform, app_type, `type`, `status`, confirm_type,
confirm_status, download_num, is_show, create_time, income_time, confirm_time,
- wallet_time, update_time, sort
+ wallet_time, update_time, sort, mark
@@ -43,8 +44,7 @@
update img_creator_profit
set download_num = download_num + 1, update_time = (select NOW())
- where creator_id = #{creatorId} and img_id = #{imgId} and app_type = #{appType}
- and platform = #{platform} and type = #{type} and DATE_FORMAT(create_time,'%Y-%m-%d') = #{date} and status = '0'
+ where mark = #{mark} and status = '0'
@@ -137,19 +136,17 @@
download_num = download_num + 1, update_time = (select NOW())
- where creator_id = #{item.creatorId} and img_id = #{item.imgId} and app_type = #{item.appType}
- and platform = #{item.platform} and DATE_FORMAT(create_time,'%Y-%m-%d') = #{item.date} and type = #{item.type}
- and status = '0'
+ where mark = #{item.mark} and status = '0'
insert into img_creator_profit(creator_id,order_no,type,status,is_show,sort,download_num,
- create_time,update_time,scan_code,img_id,platform,app_type) values
+ create_time,update_time,scan_code,img_id,platform,app_type,mark) values
(#{item.creatorId},#{item.orderNo}, #{item.type}, #{item.status}, #{item.isShow},#{item.sort},
#{item.downloadNum},#{item.createTime},#{item.updateTime},#{item.scanCode},#{item.imgId},
- #{item.platform},#{item.appType})
+ #{item.platform},#{item.appType},#{item.mark})
diff --git a/pom.xml b/pom.xml
index e4e109a..0c1278d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,6 +42,9 @@
2.12.2
1.18.12
5.8.0.M3
+ 3.16.2
+ 4.23.21.ALL
+ 4.2.0
@@ -190,6 +193,27 @@
${transmittable-thread-local.version}
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ ${redisson.version}
+
+
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+ ${aliPay.version}
+
+
+
+
+ com.github.binarywang
+ weixin-java-pay
+ ${wePay.version}
+
+
com.dimensionalnode