Browse Source

feature1.0.0-img: 优化艺术家收益方法

master
penny 4 years ago
parent
commit
97a8aefc1b
  1. 32
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
  2. 8
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitAdInsertDto.java
  3. 47
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitInviteInsertDto.java
  4. 1
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorProfitMapper.java
  5. 42
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorProfitService.java
  6. 2
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokImgService.java
  7. 95
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java
  8. 52
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokImgServiceImpl.java
  9. 28
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/DownloadSyncTask.java
  10. 4
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorPreAdProfitVo.java
  11. 41
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorPreInviteProfitVo.java

32
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java

@ -191,11 +191,19 @@ public class CreatorMiniController extends BaseController {
}
//@TokenCheck
@ApiOperation(value="新增艺术家即将入账收益缓存")
@ApiOperation(value="新增艺术家即将入账广告收益缓存")
@PostMapping(value = "/insertPreProfit")
public AjaxResult insertPreProfit(@Validated @RequestBody @ApiParam("即将入账对象") CreatorProfitInsertDto dto){
public AjaxResult insertPreAdProfit(@Validated @RequestBody @ApiParam("即将入账广告对象") CreatorProfitAdInsertDto dto){
log.info("【艺术家小程序】新增艺术家即将入账收益缓存参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(creatorProfitService.insertCache(dto));
return AjaxResult.success(creatorProfitService.insertPreAdProfit(dto));
}
//@TokenCheck
@ApiOperation(value="新增艺术家即将入账邀请收益缓存")
@PostMapping(value = "/insertPreProfit")
public AjaxResult insertPreInviteProfit(@Validated @RequestBody @ApiParam("即将入账邀请对象") CreatorProfitInviteInsertDto dto){
log.info("【艺术家小程序】新增艺术家即将入账邀请收益缓存参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(creatorProfitService.insertPreInviteProfit(dto));
}
//@TokenCheck
@ -207,11 +215,19 @@ public class CreatorMiniController extends BaseController {
}
//@TokenCheck
@ApiOperation(value="查询指定艺术家当天即将入账收益列表")
@GetMapping(value = "/getPreProfitList/{creatorId}")
public AjaxResult getPreProfitList(@PathVariable @ApiParam("艺术家id") Long creatorId){
log.info("【艺术家小程序】查询指定艺术家id【{}】当天即将入账收益列表",creatorId);
return AjaxResult.success(creatorProfitService.queryFrontPreProfitList(creatorId));
@ApiOperation(value="查询指定艺术家当天即将入账广告收益列表")
@GetMapping(value = "/getPreAdProfitList/{creatorId}")
public AjaxResult getPreAdProfitList(@PathVariable @ApiParam("艺术家id") Long creatorId){
log.info("【艺术家小程序】查询指定艺术家id【{}】当天即将入账广告收益列表",creatorId);
return AjaxResult.success(creatorProfitService.queryFrontPreAdProfitList(creatorId));
}
//@TokenCheck
@ApiOperation(value="查询指定艺术家当天即将入账邀请收益列表")
@GetMapping(value = "/getPreInviteProfitList/{creatorId}")
public AjaxResult getPreInviteProfitList(@PathVariable @ApiParam("艺术家id") Long creatorId){
log.info("【艺术家小程序】查询指定艺术家id【{}】当天即将入账邀请收益列表",creatorId);
return AjaxResult.success(creatorProfitService.queryFrontPreInviteProfitList(creatorId));
}
}

8
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitInsertDto.java → bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitAdInsertDto.java

@ -14,15 +14,15 @@ import java.util.Date;
@Getter
@Setter
@ApiModel("艺术家新增益接收类")
public class CreatorProfitInsertDto implements Serializable {
@ApiModel("艺术家新增广告收益接收类")
public class CreatorProfitAdInsertDto implements Serializable {
@NotNull(message = "艺术家id不能为空!")
@ApiModelProperty(value="艺术家id")
private Long creatorId;
@NotBlank(message = "收益人/邀请人搜索码不能为空!")
@ApiModelProperty(value="收益人/邀请人搜索码")
@NotBlank(message = "收益人搜索码不能为空!")
@ApiModelProperty(value="收益人搜索码")
private String scanCode;
@NotNull(message = "图片id不能为空!")

47
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorProfitInviteInsertDto.java

@ -0,0 +1,47 @@
package com.bnyer.img.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Getter
@Setter
@ApiModel("艺术家新增邀请收益接收类")
public class CreatorProfitInviteInsertDto implements Serializable {
@NotNull(message = "艺术家id不能为空!")
@ApiModelProperty(value="艺术家id")
private Long creatorId;
@NotBlank(message = "被邀请人搜索码不能为空!")
@ApiModelProperty(value="被邀请人搜索码")
private String scanCode;
@NotBlank(message = "图片地址不能为空!")
@ApiModelProperty(value="图片地址")
private String headUrl;
@NotBlank(message = "应用类型不能为空!")
@ApiModelProperty(value="应用类型(0->bnyer壁纸)")
private String appType;
@NotBlank(message = "收益类型不能为空!")
@ApiModelProperty(value="收益类型(0->广告浏览;1->邀请;2->会员)")
private String type;
@NotBlank(message = "收益状态不能为空!")
@ApiModelProperty(value="收益状态(0->即将到账;1->已到账;2->转入钱包)")
private String status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value="创建时间")
private Date createTime;
}

1
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorProfitMapper.java

@ -3,7 +3,6 @@ package com.bnyer.img.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bnyer.img.domain.CreatorProfit;
import com.bnyer.img.vo.CreatorIncomeProfitVo;
import com.bnyer.img.vo.CreatorPreProfitVo;
import com.bnyer.img.vo.CreatorTransIntoProfitVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

42
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorProfitService.java

@ -1,12 +1,10 @@
package com.bnyer.img.service;
import com.bnyer.img.domain.CreatorProfit;
import com.bnyer.img.dto.CreatorProfitInsertDto;
import com.bnyer.img.dto.CreatorProfitAdInsertDto;
import com.bnyer.img.dto.CreatorProfitInviteInsertDto;
import com.bnyer.img.dto.CreatorProfitPageDto;
import com.bnyer.img.vo.CreatorIncomeProfitVo;
import com.bnyer.img.vo.CreatorPreProfitVo;
import com.bnyer.img.vo.CreatorTransIntoProfitVo;
import com.bnyer.img.vo.ProfitVo;
import com.bnyer.img.vo.*;
import java.util.List;
@ -17,18 +15,33 @@ import java.util.List;
public interface CreatorProfitService {
/**
* 新增即将入账收益
* 新增即将入账广告收益
* @param params 收益参数
* @return -
*/
boolean insertCache(CreatorProfitInsertDto params);
boolean insertPreAdProfit(CreatorProfitAdInsertDto params);
/**
* 新增收益结算
* 新增即将入账邀请收益
* @param params
* @return
*/
boolean insertPreInviteProfit(CreatorProfitInviteInsertDto params);
/**
* 新增广告收益结算
* @param creatorId 艺术家id
* @return -
*/
int insertAd(Long creatorId);
/**
* 新增邀请收益结算
* @param creatorId 艺术家id
* @return -
*/
int insert(Long creatorId);
int insertInvite(Long creatorId);
/**
* 修改结算收益
@ -80,11 +93,18 @@ public interface CreatorProfitService {
void batchUpdateConfirmType();
/**
* 小程序查询当天即将入账收益列表
* 小程序查询当天即将入账广告收益列表
* @param creatorId 艺术家id
* @return -
*/
List<CreatorPreAdProfitVo> queryFrontPreAdProfitList(Long creatorId);
/**
* 小程序查询当天即将入账被邀请收益列表
* @param creatorId 艺术家id
* @return -
*/
List<CreatorPreProfitVo> queryFrontPreProfitList(Long creatorId);
List<CreatorPreInviteProfitVo> queryFrontPreInviteProfitList(Long creatorId);
/**
* 小程序查询昨日已入账收益

2
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokImgService.java

@ -102,7 +102,7 @@ public interface TiktokImgService {
/**
* 同步图片下载数量到db
*/
void insertDownloadNum();
//void insertDownloadNum();
/**
* 查询首页图片列表

95
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java

@ -8,15 +8,13 @@ import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.constants.RedisKeyConstant;
import com.bnyer.img.domain.CreatorProfit;
import com.bnyer.img.dto.CreatorProfitInsertDto;
import com.bnyer.img.dto.CreatorProfitAdInsertDto;
import com.bnyer.img.dto.CreatorProfitInviteInsertDto;
import com.bnyer.img.dto.CreatorProfitPageDto;
import com.bnyer.img.mapper.CreatorProfitMapper;
import com.bnyer.img.service.CreatorProfitService;
import com.bnyer.img.service.TiktokImgService;
import com.bnyer.img.vo.CreatorIncomeProfitVo;
import com.bnyer.img.vo.CreatorPreProfitVo;
import com.bnyer.img.vo.CreatorTransIntoProfitVo;
import com.bnyer.img.vo.ProfitVo;
import com.bnyer.img.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -41,7 +39,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
private TiktokImgService tiktokImgService;
@Override
public boolean insertCache(CreatorProfitInsertDto params) {
public boolean insertPreAdProfit(CreatorProfitAdInsertDto params) {
String redisKey = RedisKeyConstant.WECHAT_CREATOR_DOWNLOAD_KEY + params.getCreatorId();
String hashKey = params.getAppType()+":"+params.getImgId()+":"+params.getPlatform();
try{
@ -49,23 +47,59 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
//写入入账缓存
params.setCreateTime(new Date());
redisService.setCacheMapValue(redisKey,hashKey, JSON.toJSON(params));
log.info("艺术家id【{}】平台【{}】的图片【{}】被下载了,写入即将入账缓存成功!",
log.info("艺术家id【{}】平台【{}】的图片【{}】被下载了,写入即将入账广告缓存成功!",
params.getCreatorId(),params.getPlatform(),params.getImgId());
}
//写入图片下载量缓存
tiktokImgService.writeDownloadNum(params.getCreatorId(),params.getAppType(),params.getImgId(),params.getPlatform());
return true;
}catch (Exception e){
log.error("写入即将入账缓存失败!失败原因为:",e);
log.error("写入即将入账广告缓存失败!失败原因为:",e);
return false;
}
}
@Override
public boolean insertPreInviteProfit(CreatorProfitInviteInsertDto params) {
String redisKey = RedisKeyConstant.WECHAT_CREATOR_INVITE_KEY + params.getCreatorId();
//被邀请人搜索码
String hashKey = params.getScanCode();
try{
if(!redisService.hasHashKey(redisKey,hashKey)){
//写入入账缓存
params.setCreateTime(new Date());
redisService.setCacheMapValue(redisKey,hashKey, JSON.toJSON(params));
log.info("艺术家id【{}】邀请了搜索码【{}】成为艺术家,写入即将入账邀请缓存成功!",
params.getCreatorId(),params.getScanCode());
}
return true;
}catch (Exception e){
log.error("写入即将入账邀请缓存失败!失败原因为:",e);
return false;
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public int insertAd(Long creatorId) {
//TODO 确认收益后讲缓存中信息批量写入数据库,删除对应缓存
List<CreatorPreAdProfitVo> creatorPreProfitVos = this.queryFrontPreAdProfitList(creatorId);
CreatorProfit creatorProfit = new CreatorProfit();
creatorProfit.setCreateTime(new Date());
creatorProfit.setUpdateTime(new Date());
creatorProfit.setIncomeTime(new Date());
creatorProfit.setStatus("1");
creatorProfit.setConfirmStatus("0");
creatorProfit.setIsShow("1");
creatorProfit.setSort(0);
return creatorProfitMapper.insert(creatorProfit);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int insert(Long creatorId) {
//TODO 确认收益后讲缓存中信息写入数据库,删除对应缓存
List<CreatorPreProfitVo> creatorPreProfitVos = this.queryFrontPreProfitList(creatorId);
public int insertInvite(Long creatorId) {
//TODO 确认收益后讲缓存中信息批量写入数据库,删除对应缓存
List<CreatorPreInviteProfitVo> creatorPreProfitVos = this.queryFrontPreInviteProfitList(creatorId);
CreatorProfit creatorProfit = new CreatorProfit();
creatorProfit.setCreateTime(new Date());
creatorProfit.setUpdateTime(new Date());
@ -172,18 +206,18 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
}
@Override
public List<CreatorPreProfitVo> queryFrontPreProfitList(Long creatorId) {
public List<CreatorPreAdProfitVo> queryFrontPreAdProfitList(Long creatorId) {
String redisKey = RedisKeyConstant.WECHAT_CREATOR_DOWNLOAD_KEY + creatorId;
String imgKey = RedisKeyConstant.TIKTOK_IMG_DOWNLOAD_NUM_KEY + creatorId;
//获取基础图片信息
List<CreatorPreProfitVo> list = new ArrayList<>();
List<CreatorPreAdProfitVo> list = new ArrayList<>();
try{
if(redisService.hasKey(redisKey)){
CreatorPreProfitVo profitVo = null;
CreatorPreAdProfitVo profitVo = null;
Map<String, Object> cacheMap = redisService.getCacheMap(redisKey);
for (Map.Entry<String, Object> stringObjectEntry : cacheMap.entrySet()) {
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(stringObjectEntry.getValue()));
profitVo = new CreatorPreProfitVo();
profitVo = new CreatorPreAdProfitVo();
profitVo.setCreatorId(creatorId);
profitVo.setImgId(Long.valueOf(jsonObject.getString("imgId")));
profitVo.setImgUrl(jsonObject.getString("imgUrl"));
@ -202,13 +236,42 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
}
}
}catch (Exception e){
log.error("艺术家查询即将入账收益失败,错误为:",e);
log.error("艺术家查询即将入账广告收益失败,错误为:",e);
return null;
}
return list;
}
@Override
public List<CreatorPreInviteProfitVo> queryFrontPreInviteProfitList(Long creatorId) {
String redisKey = RedisKeyConstant.WECHAT_CREATOR_DOWNLOAD_KEY + creatorId;
//获取邀请列表信息
List<CreatorPreInviteProfitVo> list = new ArrayList<>();
try{
if(redisService.hasKey(redisKey)){
CreatorPreInviteProfitVo profitVo = null;
Map<String, Object> cacheMap = redisService.getCacheMap(redisKey);
for (Map.Entry<String, Object> stringObjectEntry : cacheMap.entrySet()) {
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(stringObjectEntry.getValue()));
profitVo = new CreatorPreInviteProfitVo();
profitVo.setCreatorId(creatorId);
profitVo.setHeadUrl(jsonObject.getString("headUrl"));
profitVo.setAppType(jsonObject.getString("appType"));
profitVo.setType(jsonObject.getString("type"));
profitVo.setScanCode(jsonObject.getString("scanCode"));
profitVo.setStatus(jsonObject.getString("status"));
profitVo.setCreateTime(new Date(Long.parseLong(jsonObject.getString("createTime"))));
list.add(profitVo);
}
}
}catch (Exception e){
log.error("艺术家查询即将入账邀请收益失败,错误为:",e);
return null;
}
return list;
}
@Override
public CreatorIncomeProfitVo queryFrontIncomeProfit(Long creatorId) {
return creatorProfitMapper.queryFrontIncomeProfit(creatorId);

52
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokImgServiceImpl.java

@ -153,32 +153,32 @@ public class TiktokImgServiceImpl implements TiktokImgService {
log.info("应用【{}】的图片id【{}】平台【{}】下载量+1",appType,imgId,platform);
}
@Override
public void insertDownloadNum() {
log.info("==============redis同步图片下载数量到db数据开始!===============");
long startTime = System.currentTimeMillis();
String redisKey = RedisKeyConstant.TIKTOK_IMG_DOWNLOAD_NUM_KEY;
Cursor<Map.Entry<Object, Object>> download = redisService.getHashScan(redisKey);
while (download.hasNext()){
Map.Entry<Object, Object> next = download.next();
String imgId = (String) next.getKey();
Long imgLongId = Long.parseLong(imgId);
Integer downloadNum = (Integer) next.getValue();
TiktokImg img = tiktokImgMapper.selectById(imgLongId);
if(img == null){
redisService.deleteHashKey(redisKey, imgId);
continue;
}
TiktokImg tiktokImg = new TiktokImg();
tiktokImg.setId(imgLongId);
tiktokImg.setUpdateTime(new Date());
tiktokImg.setDownloadNum(downloadNum+img.getDownloadNum());
tiktokImgMapper.updateById(tiktokImg);
//删除缓存
redisService.deleteHashKey(redisKey, imgId);
}
log.info("==============redis同步图片下载数量到db数据完成,耗时【{}】毫秒!===============",System.currentTimeMillis() - startTime);
}
// @Override
// public void insertDownloadNum() {
// log.info("==============redis同步图片下载数量到db数据开始!===============");
// long startTime = System.currentTimeMillis();
// String redisKey = RedisKeyConstant.TIKTOK_IMG_DOWNLOAD_NUM_KEY;
// Cursor<Map.Entry<Object, Object>> download = redisService.getHashScan(redisKey);
// while (download.hasNext()){
// Map.Entry<Object, Object> next = download.next();
// String imgId = (String) next.getKey();
// Long imgLongId = Long.parseLong(imgId);
// Integer downloadNum = (Integer) next.getValue();
// TiktokImg img = tiktokImgMapper.selectById(imgLongId);
// if(img == null){
// redisService.deleteHashKey(redisKey, imgId);
// continue;
// }
// TiktokImg tiktokImg = new TiktokImg();
// tiktokImg.setId(imgLongId);
// tiktokImg.setUpdateTime(new Date());
// tiktokImg.setDownloadNum(downloadNum+img.getDownloadNum());
// tiktokImgMapper.updateById(tiktokImg);
// //删除缓存
// redisService.deleteHashKey(redisKey, imgId);
// }
// log.info("==============redis同步图片下载数量到db数据完成,耗时【{}】毫秒!===============",System.currentTimeMillis() - startTime);
// }
@Override
public List<TiktokImgVo> queryFrontPage() {

28
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/DownloadSyncTask.java

@ -1,28 +0,0 @@
package com.bnyer.img.task;
import com.bnyer.img.service.TiktokImgService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author chengkun
* @date 2022/5/12 18:13
*/
@Component
@Slf4j
public class DownloadSyncTask {
@Autowired
private TiktokImgService tiktokImgService;
@XxlJob("downloadSyncTask")
public ReturnT<String> syncDownload(String param) throws Exception {
tiktokImgService.insertDownloadNum();
XxlJobLogger.log("{} 我执行了同步图片下载数量任务", System.currentTimeMillis());
return ReturnT.SUCCESS;
}
}

4
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorPreProfitVo.java → bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorPreAdProfitVo.java

@ -12,8 +12,8 @@ import java.util.Date;
@Getter
@Setter
@ApiModel("艺术家即将入账收益响应体")
public class CreatorPreProfitVo implements Serializable {
@ApiModel("艺术家即将入账广告收益响应体")
public class CreatorPreAdProfitVo implements Serializable {
@ApiModelProperty(value="艺术家id")
private Long creatorId;

41
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorPreInviteProfitVo.java

@ -0,0 +1,41 @@
package com.bnyer.img.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
@Getter
@Setter
@ApiModel("艺术家即将入账邀请收益响应体")
public class CreatorPreInviteProfitVo implements Serializable {
@ApiModelProperty(value="艺术家id")
private Long creatorId;
@ApiModelProperty(value="收益人/邀请人搜索码")
private String scanCode;
@ApiModelProperty(value="图片地址")
private String headUrl;
@ApiModelProperty(value="应用类型(0->bnyer壁纸)")
private String appType;
@ApiModelProperty(value="收益类型(0->广告浏览;1->邀请;2->会员)")
private String type;
@ApiModelProperty(value="收益状态(0->即将到账;1->已到账;2->转入钱包)")
private String status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value="创建时间")
private Date createTime;
private static final long serialVersionUID = 1L;
}
Loading…
Cancel
Save