Commit d5168b1f authored by 宋新宇's avatar 宋新宇

Merge branch 'release_20240411' into 'main'

Release 20240411

See merge request !52
parents ccfedbac ba1f79fd
...@@ -78,7 +78,9 @@ public class UniversalProcess { ...@@ -78,7 +78,9 @@ public class UniversalProcess {
public long incrby(String key, int increment) { public long incrby(String key, int increment) {
return redisTemplate.opsForValue().increment(key,increment); return redisTemplate.opsForValue().increment(key,increment);
} }
public void del(String key) {
redisTemplate.delete(key);
}
/******************************************** INNER CLASS ******************************************************/ /******************************************** INNER CLASS ******************************************************/
......
...@@ -14,7 +14,7 @@ public class CheckerDyVideoFirstFlow extends NodeFlow<StoryNovelAction> { ...@@ -14,7 +14,7 @@ public class CheckerDyVideoFirstFlow extends NodeFlow<StoryNovelAction> {
@Override @Override
public void process(StoryNovelAction action) { public void process(StoryNovelAction action) {
if(up.exists(up.getFirstCheckerKey(action))){ if(up.exists(up.getFirstCheckerKey(action)) && !"lotto".equals(action.getVideoUpload().getSource())){
action.stop(true); action.stop(true);
} }
} }
......
...@@ -20,7 +20,7 @@ public class StoreDyVideoAttributionFlow extends NodeFlow<StoryNovelAction> { ...@@ -20,7 +20,7 @@ public class StoreDyVideoAttributionFlow extends NodeFlow<StoryNovelAction> {
//商店归因通知 //商店归因通知
if(Objects.isNull(action.getDeliveryDeviceInfo())){ if(Objects.isNull(action.getDeliveryDeviceInfo())){
if (action.getType().equals(CallBackType.active.getType())) { if (action.getType().equals(CallBackType.active.getType())) {
up.notifyResult(action,"ocpc_result_test", AttributionStatus.STORE_CALLBACK); up.notifyResult(action,"ocpc_result", AttributionStatus.STORE_CALLBACK);
} }
action.stop(true); //结束后面所有执行流程 action.stop(true); //结束后面所有执行流程
} }
......
package com.lwby.marketing.att.dyvideo.handle; package com.lwby.marketing.att.dyvideo.handle;
import com.alibaba.fastjson.JSON;
import com.lwby.marketing.att.CallBackType; import com.lwby.marketing.att.CallBackType;
import com.lwby.marketing.att.dyvideo.DyVideoUniversalProcess; import com.lwby.marketing.att.dyvideo.DyVideoUniversalProcess;
import com.lwby.marketing.flow.NodeFlow; import com.lwby.marketing.flow.NodeFlow;
...@@ -7,6 +8,7 @@ import com.lwby.marketing.vo.StoryNovelAction; ...@@ -7,6 +8,7 @@ import com.lwby.marketing.vo.StoryNovelAction;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Objects;
/** /**
* @author songxinyu * @author songxinyu
...@@ -24,8 +26,14 @@ public class UploadDyVideoCallFlow extends NodeFlow<StoryNovelAction> { ...@@ -24,8 +26,14 @@ public class UploadDyVideoCallFlow extends NodeFlow<StoryNovelAction> {
boolean success = action.getMedia().notify(action); boolean success = action.getMedia().notify(action);
if (success) { if (success) {
//根据source判断是否给指定外包上报
if (Objects.equals(action.getVideoUpload().getSource(),"lotto")) {
up.uploadCallbackUserInfo(action);
action.getDeliveryDeviceInfo().setSrc(action.getVideoUpload().getSource());
}
action.getVideoUpload().setActiveTime(System.currentTimeMillis()); action.getVideoUpload().setActiveTime(System.currentTimeMillis());
up.notifyResult(action, type.getTopic()+"_test",type.getStatus()); up.set(String.format("video:upload:%s", action.getOpenId()),60 * 60 * 24 * 7, JSON.toJSONString(action.getVideoUpload()));
up.notifyResult(action, type.getTopic(),type.getStatus());
up.set(up.getFirstCheckerKey(action),up.getExpire(action),"1"); up.set(up.getFirstCheckerKey(action),up.getExpire(action),"1");
} }
} }
......
...@@ -50,7 +50,7 @@ public class ParameterSetupVideoAppFlow extends NodeFlow<NovelAction> { ...@@ -50,7 +50,7 @@ public class ParameterSetupVideoAppFlow extends NodeFlow<NovelAction> {
//匹配设备ID //匹配设备ID
for(DeviceVideoType type: DeviceVideoType.values()){ for(DeviceVideoType type: DeviceVideoType.values()){
deviceIdKey = type.getDeviceId(clientInfo); deviceIdKey = type.getDeviceId(clientInfo);
if(null != deviceIdKey && null != (deliveryDeviceInfo = up.getOldMarket(DeliveryDeviceInfo.class,assembleKey(deviceIdKey,platformId)))){ if(null != deviceIdKey && null != (deliveryDeviceInfo = up.get(DeliveryDeviceInfo.class,assembleKey(deviceIdKey,platformId)))){
clientInfo.setOaid(deliveryDeviceInfo.getOaid()); //回补OAID clientInfo.setOaid(deliveryDeviceInfo.getOaid()); //回补OAID
action.setDeliveryDeviceInfo(deliveryDeviceInfo); action.setDeliveryDeviceInfo(deliveryDeviceInfo);
action.setDeviceVideoType(type); action.setDeviceVideoType(type);
......
...@@ -25,19 +25,19 @@ import java.util.Map; ...@@ -25,19 +25,19 @@ import java.util.Map;
@EnableKafka @EnableKafka
public class DyVideoActiveKafkaConsumerConfig { public class DyVideoActiveKafkaConsumerConfig {
@Value("${spring.kafka2.bootstrap-servers}") @Value("${spring.kafka.bootstrap-servers}")
private String servers; private String servers;
@Value("${spring.kafka2.consumer.enable-auto-commit}") @Value("${spring.kafka.consumer.enable-auto-commit}")
private boolean enableAutoCommit; private boolean enableAutoCommit;
@Value("${spring.kafka2.consumer.auto-offset-reset}") @Value("${spring.kafka.consumer.auto-offset-reset}")
private String autoOffsetReset; private String autoOffsetReset;
@Value("${system.consumer.dyvideo.active.group_id}") @Value("${system.consumer.dyvideo.active.group_id}")
private String groupId; private String groupId;
@Value("${spring.kafka2.consumer.max-poll-records}") @Value("${spring.kafka.consumer.max-poll-records}")
private int maxPollRecordsConfig; private int maxPollRecordsConfig;
......
...@@ -24,19 +24,19 @@ import java.util.Map; ...@@ -24,19 +24,19 @@ import java.util.Map;
@EnableKafka @EnableKafka
public class DyVideoBehavoirKafkaConsumerConfig { public class DyVideoBehavoirKafkaConsumerConfig {
@Value("${spring.kafka2.bootstrap-servers}") @Value("${spring.kafka.bootstrap-servers}")
private String servers; private String servers;
@Value("${spring.kafka2.consumer.enable-auto-commit}") @Value("${spring.kafka.consumer.enable-auto-commit}")
private boolean enableAutoCommit; private boolean enableAutoCommit;
@Value("${spring.kafka2.consumer.auto-offset-reset}") @Value("${spring.kafka.consumer.auto-offset-reset}")
private String autoOffsetReset; private String autoOffsetReset;
@Value("${system.consumer.dyvideo.behavoir.group_id}") @Value("${system.consumer.dyvideo.behavoir.group_id}")
private String groupId; private String groupId;
@Value("${spring.kafka2.consumer.max-poll-records}") @Value("${spring.kafka.consumer.max-poll-records}")
private int maxPollRecordsConfig; private int maxPollRecordsConfig;
......
...@@ -25,19 +25,19 @@ import java.util.Map; ...@@ -25,19 +25,19 @@ import java.util.Map;
@EnableKafka @EnableKafka
public class KafkaConsumerConfig { public class KafkaConsumerConfig {
@Value("${spring.kafka2.bootstrap-servers}") @Value("${spring.kafka.bootstrap-servers}")
private String servers; private String servers;
@Value("${spring.kafka2.consumer.enable-auto-commit}") @Value("${spring.kafka.consumer.enable-auto-commit}")
private boolean enableAutoCommit; private boolean enableAutoCommit;
@Value("${spring.kafka2.consumer.auto-offset-reset}") @Value("${spring.kafka.consumer.auto-offset-reset}")
private String autoOffsetReset; private String autoOffsetReset;
@Value("${system.consumer.novel.active.group_id}") @Value("${system.consumer.novel.active.group_id}")
private String groupId; private String groupId;
@Value("${spring.kafka2.consumer.max-poll-records}") @Value("${spring.kafka.consumer.max-poll-records}")
private int maxPollRecordsConfig; private int maxPollRecordsConfig;
......
...@@ -25,19 +25,19 @@ import java.util.Map; ...@@ -25,19 +25,19 @@ import java.util.Map;
@EnableKafka @EnableKafka
public class KafkaStoreConsumerConfig { public class KafkaStoreConsumerConfig {
@Value("${spring.kafka2.bootstrap-servers}") @Value("${spring.kafka.bootstrap-servers}")
private String servers; private String servers;
@Value("${spring.kafka2.consumer.enable-auto-commit}") @Value("${spring.kafka.consumer.enable-auto-commit}")
private boolean enableAutoCommit; private boolean enableAutoCommit;
@Value("${spring.kafka2.consumer.auto-offset-reset}") @Value("${spring.kafka.consumer.auto-offset-reset}")
private String autoOffsetReset; private String autoOffsetReset;
@Value("${system.consumer.novel.storeActive.group_id}") @Value("${system.consumer.novel.storeActive.group_id}")
private String groupId; private String groupId;
@Value("${spring.kafka2.consumer.max-poll-records}") @Value("${spring.kafka.consumer.max-poll-records}")
private int maxPollRecordsConfig; private int maxPollRecordsConfig;
......
...@@ -24,19 +24,19 @@ import java.util.Map; ...@@ -24,19 +24,19 @@ import java.util.Map;
@EnableKafka @EnableKafka
public class VideoAppActiveKafkaConsumerConfig { public class VideoAppActiveKafkaConsumerConfig {
@Value("${spring.kafka2.bootstrap-servers}") @Value("${spring.kafka.bootstrap-servers}")
private String servers; private String servers;
@Value("${spring.kafka2.consumer.enable-auto-commit}") @Value("${spring.kafka.consumer.enable-auto-commit}")
private boolean enableAutoCommit; private boolean enableAutoCommit;
@Value("${spring.kafka2.consumer.auto-offset-reset}") @Value("${spring.kafka.consumer.auto-offset-reset}")
private String autoOffsetReset; private String autoOffsetReset;
@Value("${system.consumer.videoapp.active.group_id}") @Value("${system.consumer.videoapp.active.group_id}")
private String groupId; private String groupId;
@Value("${spring.kafka2.consumer.max-poll-records}") @Value("${spring.kafka.consumer.max-poll-records}")
private int maxPollRecordsConfig; private int maxPollRecordsConfig;
......
...@@ -25,19 +25,19 @@ import java.util.Map; ...@@ -25,19 +25,19 @@ import java.util.Map;
@EnableKafka @EnableKafka
public class VideoAppBehavoirKafkaConsumerConfig { public class VideoAppBehavoirKafkaConsumerConfig {
@Value("${spring.kafka2.bootstrap-servers}") @Value("${spring.kafka.bootstrap-servers}")
private String servers; private String servers;
@Value("${spring.kafka2.consumer.enable-auto-commit}") @Value("${spring.kafka.consumer.enable-auto-commit}")
private boolean enableAutoCommit; private boolean enableAutoCommit;
@Value("${spring.kafka2.consumer.auto-offset-reset}") @Value("${spring.kafka.consumer.auto-offset-reset}")
private String autoOffsetReset; private String autoOffsetReset;
@Value("${system.consumer.videoapp.behavoir.group_id}") @Value("${system.consumer.videoapp.behavoir.group_id}")
private String groupId; private String groupId;
@Value("${spring.kafka2.consumer.max-poll-records}") @Value("${spring.kafka.consumer.max-poll-records}")
private int maxPollRecordsConfig; private int maxPollRecordsConfig;
......
package com.lwby.marketing.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.lwby.marketing.att.dyvideo.DyVideoUniversalProcess;
import com.lwby.marketing.notify.media.jrtt.dto.JrttAttributeRequest;
import com.lwby.marketing.po.DyVideoUpload;
import com.lwby.marketing.po.VideoUpload;
import com.lwby.marketing.util.HttpUtil;
import com.lwby.marketing.util.ResultConstant;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @author songxinyu
* @version DyVideoController.java, v 0.1 2024年04月10日 11:27 songxinyu Exp $
*/
@RestController
@Slf4j
@RequestMapping(value = "/market_attr")
public class DyVideoController {
public static final String ATTRIBUTE_URL = "https://analytics.oceanengine.com/api/v2/conversion";
private static final Logger DYVIDEO_SYS_LOG = LoggerFactory.getLogger("dyvideo.sys");
private static final Logger DYVIDEO_ERROR_LOG = LoggerFactory.getLogger("dyvideo.error");
@Resource
DyVideoUniversalProcess up;
@RequestMapping("uploadBehavoir")
public String uploadBehavoirByDyVideo(@RequestParam("openId") String openId) {
Map map = new HashMap();
String result = "";
VideoUpload videoUpload = up.get(VideoUpload.class,assembleKey(openId));
if (Objects.nonNull(videoUpload)) {
Integer platformId = videoUpload.getPlatformId();
String uploadKey = String.format("dv_%s_%d_%s", openId, platformId,videoUpload.getMedia());
if (up.exists(uploadKey)) {
map.put("code", ResultConstant.CALL_BACK_UPED_FAIL);
map.put("message",ResultConstant.CALL_BACK_UPED_MESSAGE);
result = JSONObject.toJSONString(map);
DYVIDEO_SYS_LOG.error("DyVideoController uploadBehavoir uped,uploadKey={}",uploadKey);
return result;
}
JrttAttributeRequest.Ad ad = new JrttAttributeRequest.Ad();
ad.setCallback(videoUpload.getClickId());
JrttAttributeRequest.Context context = new JrttAttributeRequest.Context();
context.setAd(ad);
JrttAttributeRequest request = JrttAttributeRequest.builder().context(context).event_type("game_addiction").timestamp(
System.currentTimeMillis()).build();
String userJson = JSONObject.toJSONString(request);
try {
String ret = HttpUtil.post(ATTRIBUTE_URL, userJson);
Integer resultCode = (Integer) JSON.parseObject(ret).get("code");
if (resultCode == 0) {
map.put("code", ResultConstant.CALL_BACK_SUCCESS);
map.put("message",ResultConstant.CALL_BACK_SUCCESS_MESSAGE);
result = JSONObject.toJSONString(map) ;
//给bi发消息
up.notifyResult(openId,videoUpload);
up.set(uploadKey,60 * 60 * 24 * 7,"1");
} else {
map.put("code", ResultConstant.CALL_BACK_FAIL);
map.put("message",ResultConstant.CALL_BACK_FAIL_MESSAGE);
result = JSONObject.toJSONString(map) ;
DYVIDEO_SYS_LOG.error("DyVideoController uploadBehavoir send back fail,uploadKey={},code={}",uploadKey,resultCode);
}
} catch (Exception e) {
map.put("code", ResultConstant.CALL_BACK_FAIL);
map.put("message",ResultConstant.CALL_BACK_FAIL_MESSAGE);
result = JSONObject.toJSONString(map) ;
DYVIDEO_ERROR_LOG.error("DyVideoController uploadBehavoir exception,uploadKey={}",uploadKey,e);
return result;
}
} else {
map.put("code", ResultConstant.CALL_BACK_NOCACHE_FAIL);
map.put("message",ResultConstant.CALL_BACK_NOCACHE_MESSAGE);
result = JSONObject.toJSONString(map) ;
DYVIDEO_SYS_LOG.error("DyVideoController uploadBehavoir no cache,videoUpload={}",JSONObject.toJSONString(videoUpload));
}
return result;
}
public String assembleKey(String openId) {
return String.format("video:upload:%s", openId);
}
}
package com.lwby.marketing.controller;
import cn.hutool.crypto.SecureUtil;
import org.apache.commons.lang3.StringUtils;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class ServiceHelper {
public String emptyIsNull(String params){
return StringUtils.defaultIfEmpty(params,null);
}
public String encode(String params){
try {
return URLEncoder.encode(params,"utf-8");
} catch (UnsupportedEncodingException e) {
return null;
}
}
public Integer parseInt(String params){
try {
return Integer.valueOf(params);
}catch (Exception e){
return null;
}
}
public String getModelByUa(String ua) {
String uasplit = ua.split("Build")[0];
String model = null;
try {
if (ua.startsWith("com.")) {
String[] split = uasplit.split(";");
model = split[4].trim();
} else {
if (uasplit.split(";").length >= 3 && StringUtils.isNotEmpty(uasplit.split(";")[2].trim())) {
model = uasplit.substring(uasplit.lastIndexOf(";") + 2, uasplit.length() - 1);
model = URLEncoder.encode(model, "utf-8");
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return model;
}
}
package com.lwby.marketing.factory;
import com.google.common.collect.ArrayListMultimap;
import com.lwby.marketing.notify.Media;
import com.lwby.marketing.service.MediaClick;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class MediaClickFactory {
@Autowired
ApplicationContext applicationContext;
ArrayListMultimap<Media, MediaClick> multimap = ArrayListMultimap.create();
/**
* @return
*/
/**
*
* @return
*/
public MediaClick getMediaClickFacade(Media mediaEnum) {
List<MediaClick> mediaClickFacade = multimap.get(mediaEnum);
return mediaClickFacade.get(0);
}
/**
*
*/
@PostConstruct
public void init() {
Map<String, MediaClick> type = applicationContext.getBeansOfType(MediaClick.class);
for (Map.Entry<String, MediaClick> item : type.entrySet()) {
multimap.put(item.getValue().getMedia(), item.getValue());
}
}
}
...@@ -21,7 +21,7 @@ public enum Media { ...@@ -21,7 +21,7 @@ public enum Media {
DY_VIDEO_JRTT("jrtt", Platform.DY_VIDEO, "今日头条",new DyVideoJRTTNotify()), DY_VIDEO_JRTT("jrtt", Platform.DY_VIDEO, "今日头条",new DyVideoJRTTNotify()),
VIDEOAPP_JRTT("jrtt_freevideo", Platform.VIDEO, "今日头条",new VideoAppJRTTNotify()); VIDEOAPP_JRTT("jrtt_freevideo", Platform.VIDEO, "今日头条",new VideoAppJRTTNotify());
final String name; public final String name;
final Platform platform; final Platform platform;
final String desc; final String desc;
final BaseNotiry baseNotify; final BaseNotiry baseNotify;
......
...@@ -46,12 +46,10 @@ public class DyVideoJRTTNotify extends DYNotify { ...@@ -46,12 +46,10 @@ public class DyVideoJRTTNotify extends DYNotify {
String userJson = JSONObject.toJSONString(request); String userJson = JSONObject.toJSONString(request);
try { try {
//TODO;测试不执行 String result = HttpUtil.post(ATTRIBUTE_URL, userJson);
//String result = HttpUtil.post(ATTRIBUTE_URL, userJson); Integer resultCode = (Integer) JSON.parseObject(result).get("code");
//Integer resultCode = (Integer) JSON.parseObject(result).get("code"); DYVIDEO_SYS_LOG.info("DyVideoJRTTNotify.video.{}.upload,userId={},channel={},platform={},code={}",eventType,na.getUserId(),na.getChannelId(),na.getPlatformId(),resultCode);
//return resultCode == 0; return resultCode == 0;
DYVIDEO_SYS_LOG.info("DyVideoJRTTNotify.video.{}.upload,userId={},channel={},platform={}",eventType,na.getUserId(),na.getChannelId(),na.getPlatformId());
return true;
} catch (Exception e) { } catch (Exception e) {
return false; return false;
} }
......
package com.lwby.marketing.po;
import lombok.Data;
/**
* @author songxinyu
* @version DyVideoUpload.java, v 0.1 2024年04月10日 17:06 songxinyu Exp $
*/
@Data
public class DyVideoUpload {
String openId;
Integer platformId;
}
...@@ -25,4 +25,9 @@ public class VideoUpload { ...@@ -25,4 +25,9 @@ public class VideoUpload {
private String perecpmSize; private String perecpmSize;
private long activeTime; private long activeTime;
private long clickTime; private long clickTime;
private Integer platformId;
private Long userId;
//来源
private String source;
} }
package com.lwby.marketing.service;
import com.lwby.marketing.notify.Media;
import java.util.Map;
/**
* @author songxinyu
* @version MediaClick.java, v 0.1 2024年04月10日 14:11 songxinyu Exp $
*/
public interface MediaClick {
String click(String s, Map<String, String> params);
Media getMedia();
}
package com.lwby.marketing.util; package com.lwby.marketing.util;
import org.apache.commons.lang3.StringUtils;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
...@@ -13,6 +17,17 @@ public class CacheKeyUtils { ...@@ -13,6 +17,17 @@ public class CacheKeyUtils {
static SimpleDateFormat df = new SimpleDateFormat("MMdd");//设置日期格式 static SimpleDateFormat df = new SimpleDateFormat("MMdd");//设置日期格式
private static final String CACHE_BOOK_PREFIX = "getBookId";
private static final String CACHE_PART_PREFIX = "getPartId";
private static final String CHANNEL_PREFIX_KEY = "getChannelBy";
private static final String CACHE_VRID_PRE = "vr:";
private static final String CACHE_VID_PRE = "vi:";
public static String getBehavoirKey(Long userId) { public static String getBehavoirKey(Long userId) {
return CACHE_BEHAVIOR_PREFIX + userId + "_" + df.format(new Date()) + "_fv"; return CACHE_BEHAVIOR_PREFIX + userId + "_" + df.format(new Date()) + "_fv";
} }
...@@ -20,4 +35,51 @@ public class CacheKeyUtils { ...@@ -20,4 +35,51 @@ public class CacheKeyUtils {
public static String getVideoBehavoirKey(Long userId) { public static String getVideoBehavoirKey(Long userId) {
return CACHE_BEHAVIOR_PREFIX + userId + "_fv"; return CACHE_BEHAVIOR_PREFIX + userId + "_fv";
} }
public static String getClickKeyByIdfaAndPlatformId(String idfa, String platformId) {
return "getClickByIdfaAndPlatformId" + "_" + idfa + "_" + platformId;
}
public static String getClickKey(String idfa, String platformId) {
return "mck" + ":" + idfa + ":" + platformId;
}
public static String getDeliveryBookIdCacheKey(String deviceKey, String platformId) {
return CACHE_BOOK_PREFIX + "_" + deviceKey + "_" + platformId;
}
public static String getDeliveryPartIdCacheKey(String deviceKey, String platformId) {
return CACHE_PART_PREFIX + "_" + deviceKey + "_" + platformId;
}
public static String getChannelByDeviceIdKeyAndPlatformId(String deviceIdKey, String platformId) {
return CHANNEL_PREFIX_KEY + deviceIdKey + platformId;
}
public static String getModelByUa(String ua) {
String uasplit = ua.split("Build")[0];
String model = null;
try {
if (ua.startsWith("com.")) {
String[] split = uasplit.split(";");
model = split[4].trim();
} else {
if (uasplit.split(";").length >= 3 && StringUtils.isNotEmpty(uasplit.split(";")[2].trim())) {
model = uasplit.substring(uasplit.lastIndexOf(";") + 2, uasplit.length() - 1);
model = URLEncoder.encode(model, "utf-8");
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return model;
}
public static String getDeliveryVRIdCacheKey(String deviceKey, String platformId) {
return CACHE_VRID_PRE + deviceKey + ":" + platformId;
}
public static String getDeliveryVIIdCacheKey(String deviceKey, String platformId) {
return CACHE_VID_PRE + deviceKey + ":" + platformId;
}
} }
...@@ -28,6 +28,14 @@ public class DateTimUtils { ...@@ -28,6 +28,14 @@ public class DateTimUtils {
return DATE_BOTTOM_FORMAT.format(new Date()); return DATE_BOTTOM_FORMAT.format(new Date());
} }
public static String getCurrentTimeString(){
return DATE_TIME_FORMAT.format(new Date());
}
public static String getCurrentTimeString(Date date){
return DATE_TIME_FORMAT.format(date);
}
/** /**
* 时间是否大于7天 * 时间是否大于7天
* *
......
package com.lwby.marketing.util;
public class ResultConstant {
public final static Integer CALL_BACK_SUCCESS = 0;
public final static Integer CALL_BACK_FAIL = 1;
public final static Integer CALL_BACK_UPED_FAIL = 2;
public final static Integer CALL_BACK_NOCACHE_FAIL = 3;
public final static String CALL_BACK_SUCCESS_MESSAGE = "上报成功";
public final static String CALL_BACK_FAIL_MESSAGE = "上报失败";
public final static String CALL_BACK_UPED_MESSAGE = "已上报一次";
public final static String CALL_BACK_NOCACHE_MESSAGE = "无点击缓存,用户超过7天";
}
package com.lwby.marketing.util;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
public enum Stats {
HTTP_MG_JRTT("HTTP接口jrtt", "http_mg_jrtt"),
HTTP_MG_WECHAT("HTTP接口jrtt", "http_mg_wechat"),
HTTP_MG_KUAISHOU("HTTP接口jrtt", "http_mg_kuaishou"),
HTTP_MG_YOUDAO("HTTP接口jrtt", "http_mg_kuaishou"),
HTTP_MG_XIAOMI("HTTP接口jrtt", "http_mg_xiaomi");
private String name;
private Counter counter;
private String indicator;
Stats(String name, String indicator) {
this.name = name;
this.indicator = indicator;
}
public void add() {
counter.increment();
}
public void add(long count) {
counter.increment(count);
}
public String getName() {
return this.name;
}
public long getCount() {
return (long) counter.count();
}
public void bind(MeterRegistry registry) {
this.counter = registry.counter(indicator);
}
}
\ No newline at end of file
...@@ -125,4 +125,6 @@ public class DeliveryDeviceInfo { ...@@ -125,4 +125,6 @@ public class DeliveryDeviceInfo {
private String openId; private String openId;
private String src;
} }
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