Commit 6a5e4989 authored by 严俊's avatar 严俊

Merge branch 'dev-activity-faw' of...

Merge branch 'dev-activity-faw' of http://gitlab.afanticar.com:13140/java-ms/afanti-open-api into develop
parents 56c576b8 7693165b
......@@ -36,12 +36,21 @@ public class TokenInterceptor implements HandlerInterceptor {
}
String token = request.getHeader("authorization");
if (StrUtil.isNotBlank(token)) {
request.setAttribute("clientId", JWTUtils.getClientId(token));
try{
String clientId = JWTUtils.getClientId(token);
request.setAttribute("clientId", clientId);
}catch (Exception e){
response.setCharacterEncoding("UTF-8");
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentType("application/json");
response.getWriter().append(JSONObject.toJSONString(BaseController.error("401", "认证失败,无效的token")));
return false;
}
} else {
response.setCharacterEncoding("UTF-8");
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentType("application/json");
response.getWriter().append(JSONObject.toJSONString(BaseController.error("401", "认证失败")));
response.getWriter().append(JSONObject.toJSONString(BaseController.error("401", "认证失败,无效的token")));
return false;
}
return true;
......
package com.afanticar.afantiopenapi.constant;
import java.util.HashMap;
import java.util.Map;
/**
* @author chin
* @contact chenyan@afanticar.com
......@@ -9,4 +12,33 @@ public class Constant {
public static final String SUCCESS_CODE = "200";
// key=车系name,value=车系code
public static Map<String, String> seriesMap = new HashMap();
static {
seriesMap.put("E-001", "E-001");
seriesMap.put("EH7", "EH7");
seriesMap.put("E-HS3", "E-HS3");
seriesMap.put("EHS7", "EHS7");
seriesMap.put("E-HS9", "E-HS9");
seriesMap.put("E-QM5", "E-QM5");
seriesMap.put("H5", "H5");
seriesMap.put("H5-2", "H5-2");
seriesMap.put("H6", "H6");
seriesMap.put("H7", "H7");
seriesMap.put("H9", "H9");
seriesMap.put("H9+", "H9+");
seriesMap.put("HQ9", "HQ9");
seriesMap.put("HS3", "HS3");
seriesMap.put("HS5", "HS5");
seriesMap.put("HS7", "HS7");
seriesMap.put("HS7-2", "HS7-2");
seriesMap.put("L1", "L1");
seriesMap.put("L5", "L5");
seriesMap.put("红旗国礼", "红旗国礼");
seriesMap.put("红旗国雅", "红旗国雅");
seriesMap.put("红旗国耀", "红旗国耀");
seriesMap.put("红旗国悦", "红旗国悦");
seriesMap.put("盛世", "盛世");
}
}
......@@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.afanticar.afantiopenapi.model.BaseResponse;
import com.afanticar.afantiopenapi.model.dto.FawActivityDTO;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
......@@ -103,10 +104,13 @@ public class BaseController {
if (DateUtil.between(publishDateEnd, publishDateStart, DateUnit.DAY) > dateNum) {
return BaseController.error("10010", "时间跨度最大为31天!");
}
// if (CollectionUtils.isEmpty(dto.getActivityIds()) || dto.getActivityIds().size() > 5) {
// return BaseController.error("10010", "活动ID不能为空,最大5个!");
// }
dto.setEnd(publishDateEnd);
dto.setStart(publishDateStart);
dto.setPageNum(dto.getPageNum() == null ? 1 : dto.getPageNum());
dto.setPageSize(dto.getPageSize() == null ? 500 : dto.getPageSize());
dto.setCurrent(dto.getCurrent() == null ? 1 : dto.getCurrent());
dto.setSize(dto.getSize() == null ? 500 : dto.getSize());
return null;
}
......
......@@ -145,7 +145,7 @@ public class FawOpenController extends BaseController {
@ApiOperation(value = "抖音活动视频数据信息", notes = "抖音活动视频数据", produces = "application/json")
@PostMapping("/activity/douyin/aweme/list")
public BaseResponse<BasePageVO<HongqiActivityAwemeVO>> getDouyinActivityAwemeData(@RequestBody @Validated FawActivityDTO dto) {
BaseResponse check = baseService.baseLimit(dataType, limit, limitPeriod);
BaseResponse check = baseService.pageApiLimit(dataType, limit, limitPeriod);
if (check != null) {
return check;
}
......@@ -159,7 +159,7 @@ public class FawOpenController extends BaseController {
@ApiOperation(value = "抖音活动直播数据信息", notes = "抖音活动直播数据", produces = "application/json")
@PostMapping("/activity/douyin/live/list")
public BaseResponse<BasePageVO<HongqiActivityLiveVO>> getDouyinActivityLiveData(@RequestBody @Validated FawActivityDTO dto) {
BaseResponse check = baseService.baseLimit(dataType, limit, limitPeriod);
BaseResponse check = baseService.pageApiLimit(dataType, limit, limitPeriod);
if (check != null) {
return check;
}
......@@ -173,7 +173,7 @@ public class FawOpenController extends BaseController {
@ApiOperation(value = "快手活动视频数据信息", notes = "快手活动视频数据", produces = "application/json")
@PostMapping("/activity/kuaishou/aweme/list")
public BaseResponse<BasePageVO<HongqiActivityAwemeVO>> getKuaishouActivityAwemeData(@RequestBody @Validated FawActivityDTO dto) {
BaseResponse check = baseService.baseLimit(dataType, limit, limitPeriod);
BaseResponse check = baseService.pageApiLimit(dataType, limit, limitPeriod);
if (check != null) {
return check;
}
......@@ -187,7 +187,7 @@ public class FawOpenController extends BaseController {
@ApiOperation(value = "快手活动直播数据信息", notes = "快手活动直播数据", produces = "application/json")
@PostMapping("/activity/kuaishou/live/list")
public BaseResponse<BasePageVO<HongqiActivityLiveVO>> getKuaishouActivityLiveData(@RequestBody @Validated FawActivityDTO dto) {
BaseResponse check = baseService.baseLimit(dataType, limit, limitPeriod);
BaseResponse check = baseService.pageApiLimit(dataType, limit, limitPeriod);
if (check != null) {
return check;
}
......
......@@ -25,6 +25,7 @@ public interface DwdKuaishouAuthorInfoMapper extends BaseMapper<DwdDouyinAuthorI
@Select("<script>select " +
" t1.aweme_id, " +
" t1.author_id , " +
" t1.aweme_title , " +
" 'douyin' as platform, " +
" t3.dealer_area_names area_name, " +
......@@ -39,12 +40,12 @@ public interface DwdKuaishouAuthorInfoMapper extends BaseMapper<DwdDouyinAuthorI
" t1.share_count , " +
" t1.share_url , " +
" t1.data_update_time , " +
" t2.activity_id_list " +
" t2.activity_info " +
"from ( " +
" select * from dwd_douyin_aweme_info " +
" where publish_time &gt;= #{dto.start} and publish_time &lt;= #{dto.end} " +
") t1 left join ( " +
" select aweme_id,collect_set(activity_id) as activity_id_list " +
" select aweme_id,collect_set(json_object('activity_id',activity_id,'match_keywords',match_keywords)) as activity_info " +
" from dwd_fhl_activity_douyin_aweme_info " +
" where " +
" publish_time &gt;= #{dto.start} " +
......@@ -63,13 +64,14 @@ public interface DwdKuaishouAuthorInfoMapper extends BaseMapper<DwdDouyinAuthorI
" </choose> " +
" and is_deleted = 0 " +
" group by aweme_id " +
" ) t2 on t1.aweme_id = t2.aweme_id " +
" ) t2 on t1.aweme_id = t2.aweme_id or t1.other_video_id = t2.aweme_id " +
" left join dwd_douyin_author_info t3 on t1.author_id = t3.author_id " +
"where contains(split(t3.principal_ids,','),'869752931296989184')</script>")
IPage<HongqiActivityAwemeVO> douyinActivityAwemes(IPage<HongqiActivityAwemeVO> page, @Param("dto") FawActivityDTO dto);
@Select("<script>select " +
" t1.aweme_id, " +
" t1.author_id, " +
" t1.aweme_title , " +
" 'kuaishou' as platform, " +
" t3.dealer_area_names area_name, " +
......@@ -84,12 +86,12 @@ public interface DwdKuaishouAuthorInfoMapper extends BaseMapper<DwdDouyinAuthorI
" t1.share_count , " +
" t1.share_url , " +
" t1.data_update_time , " +
" t2.activity_id_list " +
" t2.activity_info " +
"from ( " +
" select * from dwd_kuaishou_aweme_info " +
" where publish_time &gt;= #{dto.start} and publish_time &lt;= #{dto.end} " +
") t1 left join ( " +
" select aweme_id,collect_set(activity_id) as activity_id_list " +
" select aweme_id,collect_set(json_object('activity_id',activity_id,'match_keywords',match_keywords)) as activity_info " +
" from dwd_fhl_activity_kuaishou_aweme_info " +
" where " +
" publish_time &gt;= #{dto.start} " +
......@@ -108,13 +110,14 @@ public interface DwdKuaishouAuthorInfoMapper extends BaseMapper<DwdDouyinAuthorI
" </choose> " +
" and is_deleted = 0 " +
" group by aweme_id " +
" ) t2 on t1.aweme_id = t2.aweme_id " +
" ) t2 on t1.aweme_id = t2.aweme_id or t1.other_video_id = t2.aweme_id " +
" left join dwd_kuaishou_author_info t3 on t1.author_id = t3.author_id " +
"where contains(split(t3.principal_ids,','),'869752931296989184')</script>")
IPage<HongqiActivityAwemeVO> kuaishouActivityAwemes(IPage<HongqiActivityAwemeVO> page, @Param("dto") FawActivityDTO dto);
@Select("<script>select " +
" t1.room_id, " +
" t3.author_id , " +
" t1.title, " +
" 'douyin' as platform, " +
" t3.dealer_area_names area_name, " +
......@@ -130,12 +133,12 @@ public interface DwdKuaishouAuthorInfoMapper extends BaseMapper<DwdDouyinAuthorI
" t1.statistics_total_gift_count gift_cnt, " +
" t1.statistics_fans_add , " +
" t1.data_update_time , " +
" t2.activity_id_list " +
" t2.activity_info " +
"from ( " +
" select * from dwd_douyin_live_info " +
" where publish_time &gt;= #{dto.start} and publish_time &lt;= #{dto.end} " +
") t1 left join ( " +
" select room_id,collect_set(activity_id) as activity_id_list " +
" select room_id,collect_set(json_object('activity_id',activity_id,'match_keywords',match_keywords)) as activity_info " +
" from dwd_fhl_activity_douyin_live_info " +
" where publish_time &gt;= #{dto.start} and publish_time &lt;= #{dto.end} " +
" and " +
......@@ -160,11 +163,12 @@ public interface DwdKuaishouAuthorInfoMapper extends BaseMapper<DwdDouyinAuthorI
@Select("<script>select " +
" t1.room_id, " +
" t1.title, " +
" 'douyin' as platform, " +
" 'kuaishou' as platform, " +
" t3.dealer_area_names area_name, " +
" t3.dealer_store_code dealer_code, " +
" t3.dealer_name , " +
" t3.nickname , " +
" t3.author_id , " +
" t1.publish_time , " +
" t1.statistics_total_watch_user_count , " +
" round(t1.statistics_live_time/60, 2) statistics_live_time, " +
......@@ -174,12 +178,12 @@ public interface DwdKuaishouAuthorInfoMapper extends BaseMapper<DwdDouyinAuthorI
" t1.statistics_total_gift_count gift_cnt, " +
" t1.statistics_fans_add , " +
" t1.data_update_time , " +
" t2.activity_id_list " +
" t2.activity_info " +
"from ( " +
" select * from dwd_kuaishou_live_info " +
" where publish_time &gt;= #{dto.start} and publish_time &lt;= #{dto.end} " +
") t1 left join ( " +
" select room_id,collect_set(activity_id) as activity_id_list " +
" select room_id,collect_set(json_object('activity_id',activity_id,'match_keywords',match_keywords)) as activity_info " +
" from dwd_fhl_activity_kuaishou_live_info " +
" where publish_time &gt;= #{dto.start} and publish_time &lt;= #{dto.end} " +
" and " +
......
......@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.util.Date;
import java.util.List;
......@@ -18,10 +19,11 @@ import java.util.List;
@JSONType(naming = com.alibaba.fastjson.PropertyNamingStrategy.SnakeCase)
public class FawActivityDTO {
@Max(value = 500,message = "单页数据page_size过大")
private Integer pageSize;
@Min(value = 1, message = "当前页最小1")
private Integer current;
private Integer pageNum;
@Max(value = 1000, message = "分页大小最大1000")
private Integer size;
private String publishDateStart;
......
package com.afanticar.afantiopenapi.model.vo;
import com.alibaba.fastjson.annotation.JSONType;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
/**
* @author chin
* @contact chenyan@afanticar.com
* @since 2024/9/23/023
*/
@Data
@JsonNaming(value = com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy.class)
@JSONType(naming = com.alibaba.fastjson.PropertyNamingStrategy.SnakeCase)
public class ActivityVO {
private String activityId;
private String matchKeywords;
private String seriesCode;
}
package com.afanticar.afantiopenapi.model.vo;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONType;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
......@@ -15,9 +16,10 @@ import java.util.List;
@Data
@JsonNaming(value = com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy.class)
@JSONType(naming = com.alibaba.fastjson.PropertyNamingStrategy.SnakeCase)
public class HongqiActivityAwemeVO {
public class HongqiActivityAwemeVO extends HongqiActivityBaseVO {
private String awemeId;
private String authorId;
private String awemeTitle;
private String platform;
private String areaName;
......@@ -32,7 +34,5 @@ public class HongqiActivityAwemeVO {
private Integer shareCount;
private String shareUrl;
private Date dataUpdateTime;
private List<String> activityIdList;
private List<String> keywordList;
}
package com.afanticar.afantiopenapi.model.vo;
import com.alibaba.fastjson.annotation.JSONType;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import java.util.List;
@Data
@JsonNaming(value = com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy.class)
@JSONType(naming = com.alibaba.fastjson.PropertyNamingStrategy.SnakeCase)
public class HongqiActivityBaseVO {
private List<ActivityVO> activityList;
@JsonIgnore
private String activityInfo;
}
......@@ -15,9 +15,10 @@ import java.util.List;
@Data
@JsonNaming(value = com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy.class)
@JSONType(naming = com.alibaba.fastjson.PropertyNamingStrategy.SnakeCase)
public class HongqiActivityLiveVO {
public class HongqiActivityLiveVO extends HongqiActivityBaseVO {
private String roomId;
private String authorId;
private String title;
private String platform;
private String areaName;
......@@ -32,7 +33,5 @@ public class HongqiActivityLiveVO {
private Integer commentCnt;
private Integer giftCnt;
private Integer statisticsFansAdd;
private List<String> activityIdList;
private List<String> keywordList;
}
......@@ -42,11 +42,26 @@ public class BaseService {
String header = "token";
String fawKey = String.format("%s:%s:limit", dataType, header);
RRateLimiter rateLimiter = redissonClient.getRateLimiter(fawKey);
rateLimiter.trySetRate(RateType.OVERALL, limit,limitPeriod, RateIntervalUnit.SECONDS);
rateLimiter.trySetRate(RateType.OVERALL, limit, limitPeriod, RateIntervalUnit.SECONDS);
if (!rateLimiter.tryAcquire(1, waiting, TimeUnit.MILLISECONDS)) {
return BaseController.error("10010", "您的请求太过频繁,请稍后再试!");
}
return null;
}
public BaseResponse pageApiLimit(String dataType, Integer limit, Integer limitPeriod) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
String header = "token";
String fawKey = String.format("%s:%s:limit", dataType, header);
RRateLimiter rateLimiter = redissonClient.getRateLimiter(fawKey);
rateLimiter.trySetRate(RateType.OVERALL, limit, limitPeriod, RateIntervalUnit.SECONDS);
if (!rateLimiter.tryAcquire(1, waiting, TimeUnit.MILLISECONDS)) {
return BaseController.error("10010", "您的请求太过频繁,请稍后再试!");
}
return null;
}
}
......@@ -9,6 +9,7 @@ import com.afanticar.afantiopenapi.model.entity.HongqiAwemeIncentiveQuarter;
import com.afanticar.afantiopenapi.model.entity.HongqiLiveIncentiveMonthly;
import com.afanticar.afantiopenapi.model.entity.HongqiLiveIncentiveQuarter;
import com.afanticar.afantiopenapi.model.vo.*;
import com.afanticar.afantiopenapi.utils.BaseUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -104,31 +105,35 @@ public class FawOpenService {
public BasePageVO<HongqiActivityAwemeVO> douyinActivityAwemes(FawActivityDTO dto) {
PageHelper.orderBy(" publish_time DESC ");
IPage<HongqiActivityAwemeVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
IPage<HongqiActivityAwemeVO> page = new Page<>(dto.getCurrent(), dto.getSize());
IPage<HongqiActivityAwemeVO> awemePage = dwdKuaishouAuthorInfoMapper.douyinActivityAwemes(page, dto);
return BasePageVO.restPage(dto.getPageNum(), (int) awemePage.getSize(), (int) awemePage.getTotal(), (int) awemePage.getPages(), awemePage.getRecords());
BaseUtils.parseSeries(awemePage.getRecords());
return BasePageVO.restPage(dto.getCurrent(), (int) awemePage.getSize(), (int) awemePage.getTotal(), (int) awemePage.getPages(), awemePage.getRecords());
}
public BasePageVO<HongqiActivityLiveVO> douyinActivityLives(FawActivityDTO dto) {
PageHelper.orderBy(" publish_time DESC ");
IPage<HongqiActivityLiveVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
IPage<HongqiActivityLiveVO> page = new Page<>(dto.getCurrent(), dto.getSize());
IPage<HongqiActivityLiveVO> livePage = dwdKuaishouAuthorInfoMapper.douyinActivityLives(page, dto);
return BasePageVO.restPage(dto.getPageNum(), (int) livePage.getSize(), (int) livePage.getTotal(), (int) livePage.getPages(), livePage.getRecords());
BaseUtils.parseSeries(livePage.getRecords());
return BasePageVO.restPage(dto.getCurrent(), (int) livePage.getSize(), (int) livePage.getTotal(), (int) livePage.getPages(), livePage.getRecords());
}
public BasePageVO<HongqiActivityAwemeVO> kuaishouActivityAwemes(FawActivityDTO dto) {
PageHelper.orderBy(" publish_time DESC ");
IPage<HongqiActivityAwemeVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
IPage<HongqiActivityAwemeVO> page = new Page<>(dto.getCurrent(), dto.getSize());
IPage<HongqiActivityAwemeVO> awemePage = dwdKuaishouAuthorInfoMapper.kuaishouActivityAwemes(page, dto);
return BasePageVO.restPage(dto.getPageNum(), (int) awemePage.getSize(), (int) awemePage.getTotal(), (int) awemePage.getPages(), awemePage.getRecords());
BaseUtils.parseSeries(awemePage.getRecords());
return BasePageVO.restPage(dto.getCurrent(), (int) awemePage.getSize(), (int) awemePage.getTotal(), (int) awemePage.getPages(), awemePage.getRecords());
}
public BasePageVO<HongqiActivityLiveVO> kuaishouActivityLives(FawActivityDTO dto) {
PageHelper.orderBy(" publish_time DESC ");
IPage<HongqiActivityLiveVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
IPage<HongqiActivityLiveVO> page = new Page<>(dto.getCurrent(), dto.getSize());
IPage<HongqiActivityLiveVO> livePage = dwdKuaishouAuthorInfoMapper.kuaishouActivityLives(page, dto);
return BasePageVO.restPage(dto.getPageNum(), (int) livePage.getSize(), (int) livePage.getTotal(), (int) livePage.getPages(), livePage.getRecords());
BaseUtils.parseSeries(livePage.getRecords());
return BasePageVO.restPage(dto.getCurrent(), (int) livePage.getSize(), (int) livePage.getTotal(), (int) livePage.getPages(), livePage.getRecords());
}
}
package com.afanticar.afantiopenapi.utils;
import com.afanticar.afantiopenapi.constant.Constant;
import com.afanticar.afantiopenapi.model.vo.ActivityVO;
import com.afanticar.afantiopenapi.model.vo.HongqiActivityAwemeVO;
import com.afanticar.afantiopenapi.model.vo.HongqiActivityBaseVO;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
public class BaseUtils {
public static <T extends HongqiActivityBaseVO> void parseSeries(List<T> list) {
for (HongqiActivityBaseVO awemeVO: list) {
if (StringUtils.isEmpty(awemeVO.getActivityInfo())) {
continue;
}
List<ActivityVO> activityVOList = new ArrayList<>();
List<String> objects = JSONObject.parseArray(awemeVO.getActivityInfo(), String.class);
for (String object : objects) {
ActivityVO activityVO = JSONObject.parseObject(object, ActivityVO.class);
activityVOList.add(activityVO);
if (StringUtils.isEmpty(activityVO.getMatchKeywords())) {
continue;
}
StringBuffer seriesCode = new StringBuffer();
String[] names = activityVO.getMatchKeywords().split(",");
for (String name : names) {
String code = Constant.seriesMap.get(name);
if (StringUtils.isEmpty(code)) {
continue;
}
seriesCode.append(code).append(",");
}
if (seriesCode.length() > 0) {
activityVO.setSeriesCode(seriesCode.substring(0, seriesCode.length() - 1));
}
}
awemeVO.setActivityList(activityVOList);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment