From 98b1a0affd69bbe63223c21fdd2c404e8bedfccb Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 20 五月 2020 17:25:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into 2.1.2 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserActiveLogServiceImpl.java | 353 ++++++++++++---------------------------------------------- 1 files changed, 72 insertions(+), 281 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 76c1b5a..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,22 +1,25 @@ package com.yeshi.fanli.service.impl.user; -import java.math.BigDecimal; -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.util.MoneyBigDecimalUtil; +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 { @@ -24,19 +27,71 @@ @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 @@ -44,282 +99,18 @@ return userActiveLogMapper.selectLatestByUid(uid); } - @Override - public List<Map<String, Object>> countSameDayByChannel(String channel, Integer type, String years, - String startTime, String endTime) throws Exception{ - return userActiveLogMapper.countSameDayByChannel(channel, type, years, startTime, endTime); - } - - @Override - public List<Object> countSameDayAndBuyGoodsByChannel(String channel, Integer type, String years, - String startTime, String endTime) throws Exception { - List<Map<String, Object>> list = userActiveLogMapper.countSameDayAndBuyGoodsByChannel(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; - } - } - - @Override - public List<Map<String, Object>> countOneWeekUserInfo(String channel, String startTime, String endTime, - Integer orderNumber) throws Exception { - - // 鏃堕棿鍒楄〃 - List<String> dateList = new ArrayList<String>(); - // 缁撴灉鍒楄〃 - List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>(); - - String middleDay = ""; - for (int i = 0; i < 100 ; i++) { - if (i == 0) { - middleDay = startTime; - } else { - middleDay = DateUtil.plusDay(i, startTime); - } - - dateList.add(middleDay); - - if (middleDay.equals(endTime)) { - break; // 鏃堕棿缁撴潫 - } - } - - for (String nowDate: dateList) { - // 鍔犲叆7澶� - String plusDay = DateUtil.plusDay(7, nowDate); - - // 鎵ц鏌ヨ 骞惰繑鍥炵粨鏋� - Map<String, BigDecimal> map= userActiveLogMapper.countOneWeekUserInfo(channel, nowDate, plusDay, orderNumber); - - // 姣斾緥 - BigDecimal proportion = null; - - if (map != null) { - // 鏂板鐢ㄦ埛 - BigDecimal totalUser = map.get("totalUser"); - // 瀛樺湪璁㈠崟鐨勬柊澧炵敤鎴� - BigDecimal orderUser = map.get("orderUser"); - - try { - proportion = MoneyBigDecimalUtil.sub(orderUser, totalUser); - } catch (Exception e) { - e.printStackTrace(); - } - } - - if (proportion == null) { - proportion = new BigDecimal(0); - } - - Map<String, Object> result = new HashMap<String, Object>(); - result.put("showValue", MoneyBigDecimalUtil.mul(proportion, new BigDecimal(100))); - result.put("showDate", nowDate); - - resultList.add(result); - } - - return resultList; - - } - - - @Override - public List<Object> getBuyProportion(String channel, Integer type, String years, - String startTime, String endTime, Integer orderNum) throws Exception{ -// -// // 缁熻娓犻亾褰撴棩鏂板鐢ㄦ埛 -// List<Object> countList = countSameDayByChannel(channel, type, years, startTime, endTime); -// -// if (countList == null || countList.size() == 0) { -// return null; -// } -// -// // 缁熻娓犻亾褰撴棩鏂板鐢ㄦ埛瀛樺湪涓嬪崟鐨勭敤鎴锋暟閲� -// List<Object> countListBuy= null; -// if (orderNum <= 1){ -// countListBuy = countSameDayAndBuyGoodsByChannel(channel, type, years, startTime, endTime); -// } -// -// if (countListBuy == null){ -// new ArrayList<Object>(); -// } -// -// List<Object> listObject = new ArrayList<Object>(); -// -// for (Object object: countList) { -// -// float rate = 0; -// -// Map<String, Object> mapObject = new HashMap<String, Object>(); -// -// Map<String, Object> map = (Map<String, Object>) object; -// Object createDate = map.get("showDate"); -// Object sameDayNum = map.get("showValue"); -// -// long totle = Long.parseLong(sameDayNum.toString()); -// if (totle > 0 && countListBuy != null && countListBuy.size() > 0) { -// for (int j = 0; j < countListBuy.size(); j++) { -// Map<String, Object> mapBuy = (Map<String, Object>) countListBuy.get(j); -// Object createDate2 = mapBuy.get("showDate"); -// if (createDate.toString().equals(createDate2.toString())) { -// Object buyNum = mapBuy.get("showValue"); -// long totleBuy = Long.parseLong(buyNum.toString()); -// rate = (float)totleBuy/totle; -// break; -// } -// } -// } -// -// DecimalFormat df = new DecimalFormat("0.00");//鏍煎紡鍖栧皬鏁� -// mapObject.put("showValue", df.format(rate*100)); -// mapObject.put("showDate", createDate); -// listObject.add(mapObject); -// } -// -// return listObject; - return null; + public UserActiveLog getFirstActiveInfo(Long uid) { + return userActiveLogMapper.selectFirstActiveInfo(uid); } - - /** - * 澶╂暟鏍煎紡 - * @param startTime - * @param endTime - * @param list - * @return - * @throws Exception - */ - 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("showValue"); - - if (sameDayNum == null) { - map.put("showValue", 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("showDate"); - String month = createDate.toString(); - if (plusDay.equalsIgnoreCase(month)) { - sameDayNum = map.get("showValue"); - break; - } - } - - if (sameDayNum == null) { - sameDayNum = 0; - } - mapObject.put("showValue", sameDayNum); - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd"); - Date parseDate = sdf.parse(plusDay.toString()); - - mapObject.put("showDate", sdf2.format(parseDate)); - - listObject.add(mapObject); - - if (plusDay.equals(endTime)) { - break; // 鏃堕棿缁撴潫 - } - } - - return listObject; + return count; } - - /** - * 鏈堜唤鏍煎紡 - * @param list - * @return - */ - 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("showDate"); - String month = createDate.toString(); - if ((i+"").equalsIgnoreCase(month) || i == Integer.parseInt(month)) { - sameDayNum = map.get("showValue"); - break; - } - } - - if (sameDayNum == null) { - sameDayNum = 0; - } - mapObject.put("showValue", sameDayNum); - - mapObject.put("showDate", i + "鏈�"); - - listObject.add(mapObject); - } - return listObject; - } - - /** - * 骞翠唤鏍煎紡 - * @param list - * @return - */ - 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("showValue"); - Object createDate = map.get("showDate"); - - if (sameDayNum == null) { - sameDayNum = 0; - } - map.put("showValue", sameDayNum); - map.put("showDate", createDate + "骞�"); - - listObject.add(map); - } - - return listObject; - } - + } -- Gitblit v1.8.0