From a34d378f8529d3e7ebe96d656349da26fdc0dbbb Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期一, 08 六月 2020 17:42:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div
---
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserActiveLogServiceImpl.java | 370 ++++++++++------------------------------------------
1 files changed, 72 insertions(+), 298 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 dad8a40..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,23 +1,25 @@
package com.yeshi.fanli.service.impl.user;
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-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 {
@@ -25,318 +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;
- }
- }
-
- @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;
+ 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