From 744594ef1a2f530fc3e86ea9dc48b62247f79420 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 19 五月 2020 17:13:23 +0800 Subject: [PATCH] 饿了么绘图,添加口碑 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserActiveLogServiceImpl.java | 208 ++++++++++++++++++---------------------------------- 1 files changed, 72 insertions(+), 136 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserActiveLogServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserActiveLogServiceImpl.java index 3837520..3e44e8e 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserActiveLogServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserActiveLogServiceImpl.java @@ -1,20 +1,25 @@ package com.yeshi.fanli.service.impl.user; -import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Service; -import org.yeshi.utils.DateUtil; +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.Producer; import com.yeshi.fanli.dao.mybatis.user.UserActiveLogMapper; +import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; +import com.yeshi.fanli.dto.mq.user.body.UserActiveMQMsg; import com.yeshi.fanli.entity.bus.user.UserActiveLog; +import com.yeshi.fanli.entity.bus.user.UserInfoRegister; +import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.user.UserActiveLogService; +import com.yeshi.fanli.service.inter.user.UserInfoExtraService; +import com.yeshi.fanli.service.inter.user.UserInfoRegisterService; +import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; +import com.yeshi.fanli.util.rocketmq.MQTopicName; @Service public class UserActiveLogServiceImpl implements UserActiveLogService { @@ -22,159 +27,90 @@ @Resource private UserActiveLogMapper userActiveLogMapper; + @Resource + private UserInfoExtraService userInfoExtraService; + + @Resource + private UserInfoRegisterService userInfoRegisterService; + + @Resource(name = "producer") + private Producer producer; + @Override public void addUserActiveLog(UserActiveLog userActiveLog) { if (userActiveLog == null) return; if (userActiveLog.getUid() == null || userActiveLog.getUid() == 0) return; + UserActiveLog latestLog = getUserLatestActiveInfo(userActiveLog.getUid()); + if (latestLog == null) { + try { // 淇濆瓨娉ㄥ唽淇℃伅 + UserInfoRegister register = new UserInfoRegister(); + register.setId(userActiveLog.getUid()); + register.setIp(userActiveLog.getIp()); + register.setChannel(userActiveLog.getChannel()); + register.setDevice(userActiveLog.getDevice()); + userInfoRegisterService.addRegisterInfo(register); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + } + // 闂撮殧5鍒嗛挓浠ヤ笂鍐嶈褰� if (latestLog == null || System.currentTimeMillis() - latestLog.getCreateTime().getTime() > 1000 * 60 * 5L) { userActiveLog.setCreateTime(new Date()); userActiveLog.setUpdateTime(new Date()); userActiveLogMapper.insertSelective(userActiveLog); + // 鏇存柊鏈�鏂版椿璺冩椂闂� + userInfoExtraService.updateActiveTime(userActiveLog.getUid(), new Date()); + addMQMsg(userActiveLog.getUid()); + } else if (latestLog != null) { + // 濡傛灉璁惧 锛岀増鏈紝娓犻亾鏈夊彉鍖栧垯闇�瑕佹洿鏀� + String oldIdentify = latestLog.getDevice() + "#" + latestLog.getVersionCode() + "#" + + latestLog.getChannel(); + String newIdentify = userActiveLog.getDevice() + "#" + userActiveLog.getVersionCode() + "#" + + userActiveLog.getChannel(); + if (!oldIdentify.equalsIgnoreCase(newIdentify)) {// 璁惧淇℃伅鍙樺寲瑕佽褰曚俊鎭� + userActiveLog.setCreateTime(new Date()); + userActiveLog.setUpdateTime(new Date()); + userActiveLogMapper.insertSelective(userActiveLog); + // 鏇存柊鏈�鏂版椿璺冩椂闂� + userInfoExtraService.updateActiveTime(userActiveLog.getUid(), new Date()); + addMQMsg(userActiveLog.getUid()); + } } + } + + //娣诲姞娲昏穬娑堟伅 + private void addMQMsg(Long uid) { + if (Constant.IS_TEST) { + return; + } + + UserActiveMQMsg msg = new UserActiveMQMsg(uid, new Date()); + Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userActve, msg); + message.setStartDeliverTime(System.currentTimeMillis() + 1000 * 5L);// 5s鍚庡彂閫佹椿璺冩秷鎭� + producer.send(message); } @Override public UserActiveLog getUserLatestActiveInfo(Long uid) { - return userActiveLogMapper.selectLatestByUid(uid); } - @Override - public List<Object> countSameDayByChannel(String channel, Integer type, String years, - String startTime, String endTime) throws Exception{ - List<Map<String, Object>> list = userActiveLogMapper.countSameDayByChannel(channel, type, years, - startTime, endTime); - - if (list == null || list.size() == 0) { - return null; - } - - switch (type){ - case 1: // 鎸夊ぉ澶勭悊 - return dayFactory(startTime, endTime, list); - case 2: // 鎸夋湀澶勭悊 - return monthFactory(list); - case 3: - return yearFactory(list); - default: - return null; - } + public UserActiveLog getFirstActiveInfo(Long uid) { + return userActiveLogMapper.selectFirstActiveInfo(uid); } - - public List<Object> dayFactory(String startTime, String endTime, List<Map<String, Object>> list) throws Exception { - - List<Object> listObject = new ArrayList<Object>(); - - if (startTime.equals(endTime)) { - - Map<String, Object> map = list.get(0); - Object sameDayNum = map.get("sameDayNum"); - - if (sameDayNum == null) { - map.put("sameDayNum", 0); - } - listObject.add(map); - - return listObject; + @Override + public long count90DaysLaterActiveNum(String preDay) { + Long count = userActiveLogMapper.countActiveNumByDate(preDay); + if (count == null) { + count = 0L; } - - - String plusDay = ""; - for (int i = 0; i < 1000 ; i++) { - if (i == 0) { - plusDay = startTime; - } else { - plusDay = DateUtil.plusDay(i, startTime); - } - - Map<String, Object> mapObject = new HashMap<String, Object>(); - Object sameDayNum = null; - - for (int j = 0; j < list.size(); j++) { - Map<String, Object> map = list.get(j); - Object createDate = map.get("createDate"); - String month = createDate.toString(); - if (plusDay.equalsIgnoreCase(month)) { - sameDayNum = map.get("sameDayNum"); - break; - } - } - - if (sameDayNum == null) { - sameDayNum = 0; - } - mapObject.put("sameDayNum", sameDayNum); - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd"); - Date parseDate = sdf.parse(plusDay.toString()); - - mapObject.put("createDate", sdf2.format(parseDate)); - - listObject.add(mapObject); - - if (plusDay.equals(endTime)) { - break; // 鏃堕棿缁撴潫 - } - } - - return listObject; + return count; } - - - public List<Object> monthFactory(List<Map<String, Object>> list) { - - List<Object> listObject = new ArrayList<Object>(); - // 12 涓湀澶勭悊 - for (int i = 1; i <= 12; i++) { - Map<String, Object> mapObject = new HashMap<String, Object>(); - Object sameDayNum = null; - for (int j = 0; j < list.size(); j++) { - Map<String, Object> map = list.get(j); - Object createDate = map.get("createDate"); - String month = createDate.toString(); - if ((i+"").equalsIgnoreCase(month) || i == Integer.parseInt(month)) { - sameDayNum = map.get("sameDayNum"); - break; - } - } - - if (sameDayNum == null) { - sameDayNum = 0; - } - mapObject.put("sameDayNum", sameDayNum); - - mapObject.put("createDate", i + "鏈�"); - - listObject.add(mapObject); - } - return listObject; - } - - public List<Object> yearFactory(List<Map<String, Object>> list) { - - List<Object> listObject = new ArrayList<Object>(); - - for (int i = 0; i < list.size(); i++) { - Map<String, Object> map = list.get(i); - Object sameDayNum = map.get("sameDayNum"); - Object createDate = map.get("createDate"); - - if (sameDayNum == null) { - sameDayNum = 0; - } - map.put("sameDayNum", sameDayNum); - map.put("createDate", createDate + "骞�"); - - listObject.add(map); - } - - return listObject; - } + } -- Gitblit v1.8.0