Commit 51b4e486 authored by 张大伟's avatar 张大伟

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	adc-da-main/src/main/java/com/adc/da/znks/dao/PositionDao.java
#	adc-da-main/src/main/java/com/adc/da/znks/service/UserService.java
#	adc-da-main/src/main/resources/application-dev.properties
#	adc-da-main/src/main/resources/mybatis/mapper/znks/PositionMapper.xml
parents 585f84ff 42067036
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.5" level="project" />
<orderEntry type="library" name="Maven: com.adc:adc-da-base:2.0.0" level="project" /> <orderEntry type="library" name="Maven: com.adc:adc-da-base:2.0.0" level="project" />
<orderEntry type="library" name="Maven: com.adc:adc-da-util:2.2.41" level="project" /> <orderEntry type="library" name="Maven: com.adc:adc-da-util:2.2.41" level="project" />
<orderEntry type="library" name="Maven: eu.bitwalker:UserAgentUtils:1.20" level="project" /> <orderEntry type="library" name="Maven: eu.bitwalker:UserAgentUtils:1.20" level="project" />
......
...@@ -9,6 +9,7 @@ import com.adc.da.znks.dao.PositionDao; ...@@ -9,6 +9,7 @@ import com.adc.da.znks.dao.PositionDao;
import com.adc.da.znks.entity.ResponseEntity; import com.adc.da.znks.entity.ResponseEntity;
import com.adc.da.znks.entity.User; import com.adc.da.znks.entity.User;
import com.adc.da.znks.service.LockRecordService; import com.adc.da.znks.service.LockRecordService;
import com.adc.da.znks.service.UserCountService;
import com.adc.da.znks.service.UserService; import com.adc.da.znks.service.UserService;
import com.adc.da.znks.util.DateTimeUtil; import com.adc.da.znks.util.DateTimeUtil;
import com.adc.da.znks.util.GenResponse; import com.adc.da.znks.util.GenResponse;
...@@ -43,6 +44,9 @@ public class UserController extends BaseController<User> { ...@@ -43,6 +44,9 @@ public class UserController extends BaseController<User> {
private static final Logger log = LoggerFactory.getLogger(UserController.class); private static final Logger log = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserCountService userCountService;
@ApiOperation(value = "|User|登录或者注册用户") @ApiOperation(value = "|User|登录或者注册用户")
@PostMapping(value = {"/loginOrRegisterUser"}) @PostMapping(value = {"/loginOrRegisterUser"})
public ResponseEntity<Boolean> loginOrRegisterUser(String phoneNumber, String password) { public ResponseEntity<Boolean> loginOrRegisterUser(String phoneNumber, String password) {
...@@ -142,8 +146,9 @@ public class UserController extends BaseController<User> { ...@@ -142,8 +146,9 @@ public class UserController extends BaseController<User> {
@ApiOperation(value = "|User|统计用户信息") @ApiOperation(value = "|User|统计用户信息")
@PostMapping("/countUserInfo") @PostMapping("/countUserInfo")
public ResponseEntity<UserCountVO> countUserInfo() { public ResponseEntity<List<UserCountVO>> countUserInfo() {
return GenResponse.success(String.valueOf(HttpStatus.OK.value()), "统计用户信息成功", userService.getUserCountVO()); return GenResponse.success(String.valueOf(HttpStatus.OK.value()), "统计用户信息成功",
userCountService.getUserCountInfo());
} }
@Autowired @Autowired
......
package com.adc.da.znks.service;
import com.adc.da.util.utils.DateUtils;
import com.adc.da.util.utils.GsonUtil;
import com.adc.da.znks.contants.ZnksConstants;
import com.adc.da.znks.dao.PositionDao;
import com.adc.da.znks.dao.UserDao;
import com.adc.da.znks.page.UserPage;
import com.adc.da.znks.util.DateTimeUtil;
import com.adc.da.znks.vo.UserCountVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TreeMap;
/**
* 统计用户service
**/
@Service
public class UserCountService {
@Autowired(required = false)
private UserDao userDao;
@Autowired(required = false)
private PositionDao positionDao;
private static final Logger logger = LoggerFactory.getLogger(UserCountService.class);
/**
* 统计用户VO的list
**/
private static List<UserCountVO> userCountVOS = new ArrayList<>(24);
/**
* 统计次数
**/
private static final int COUNT_SIZE = 24;
/**
* 获取用户统计信息vo list
**/
public List<UserCountVO> getUserCountInfo() {
int countSize = UserCountService.COUNT_SIZE;
for (int i = 0; i < COUNT_SIZE; i++) {
Date recordTime1 = DateUtils.addHours(DateTimeUtil.getCurrentDayStartTime(),
i);
userCountVOS.add(getUserCountInfo(recordTime1));
}
List<UserCountVO> userCountVOList = UserCountService.userCountVOS;
logger.info("userCountVoList json: {}", GsonUtil.toJson(userCountVOList));
return userCountVOList;
}
/**
* 获取用户统计信息vo
**/
private UserCountVO getUserCountInfo(Date recordTime1) {
UserCountVO userCountVO = new UserCountVO();
userCountVO.setUserCount(getUserTotal());
userCountVO.setClickRate(getClickRate());
String recordTime1Str = DateUtils.dateToString(recordTime1, "yyyy-MM-dd HH:mm:ss");
String recordTime2Str = getRecordTime2(recordTime1);
userCountVO.setDistributePosition(getUserMainPosition(recordTime1Str, recordTime2Str));
//获取每个时间段的人数
userCountVO.setPerQuantumUserCount(String.valueOf(getPerQuantumUserCount(recordTime1Str, recordTime2Str)));
logger.info("userCountVO: {}", userCountVO);
return userCountVO;
}
/**
* 获取每个时间段的人数
**/
private Integer getPerQuantumUserCount(String recordTime1, String recordTime2) {
return positionDao.getUserCountByPerHour(recordTime1, recordTime2);
}
/**
* 获取每个时间段的结束时间
**/
private String getRecordTime2(Date time1) {
return DateUtils.dateToString(DateUtils.addHours(time1, 1),
"yyyy-MM-dd HH:mm:ss");
}
/**
* 从00:00-23:59,每一个小时统计一次,获取主要分布位置信息
*
* @param recordTime1 统计起始时间
* @param recordTime2 统计结束时间
**/
private String getUserMainPosition(String recordTime1, String recordTime2) {
TreeMap<Integer, String> mainPositionMap = new TreeMap<>();
int positionAreaSize = ZnksConstants.TIANJIN_AREAS.length;
List<String> positionAreas = CollectionUtils.arrayToList(ZnksConstants.TIANJIN_AREAS);
for (int i = 0; i < positionAreaSize; i++) {
int userCount = positionDao.getUserCountInTianJinPerArea(positionAreas.get(i),
recordTime1, recordTime2);
String positionArea = positionAreas.get(i);
mainPositionMap.put(userCount, positionArea);
}
String mainPosition = mainPositionMap.lastEntry().getValue();
logger.info("mainPositionMap json: {}", GsonUtil.toJson(mainPositionMap));
logger.info("main position: {},user count: {}", mainPositionMap.lastEntry().getValue(),
mainPositionMap.lastEntry().getKey());
return mainPosition;
}
/**
* 获得软件总人数
**/
private int getUserTotal() {
UserPage page = new UserPage();
int userCount = userDao.queryByCount(page);
return userCount;
}
/**
* 获取每天客户使用软件的点击率
**/
private String getClickRate() {
int currentDayPositionUserCount = positionDao.getCurrentDayUsers(new Date(System.currentTimeMillis()));
double userCount = Double.parseDouble(String.valueOf(currentDayPositionUserCount));
double userTotal = Double.parseDouble(String.valueOf(getUserTotal()));
double clickRate = userCount / userTotal;
String clickRateStr = String.valueOf(clickRate);
clickRateStr = clickRateStr.substring(0, 5);
logger.info("clickRate: {}", Double.parseDouble(clickRateStr));
return clickRateStr;
}
}
package com.adc.da.znks.vo;
public class MainDistributeVO {
/**
* 主要分布时间
**/
private String mainDistributeTime;
/**
* 主要分布式人数
**/
private String mainDistributePosition;
public MainDistributeVO(String mainDistributeTime, String mainDistributePosition) {
this.mainDistributeTime = mainDistributeTime;
this.mainDistributePosition = mainDistributePosition;
}
public MainDistributeVO() {
}
public String getMainDistributeTime() {
return mainDistributeTime;
}
public void setMainDistributeTime(String mainDistributeTime) {
this.mainDistributeTime = mainDistributeTime;
}
public String getMainDistributePosition() {
return mainDistributePosition;
}
public void setMainDistributePosition(String mainDistributePosition) {
this.mainDistributePosition = mainDistributePosition;
}
@Override
public String toString() {
return "MainDistributeVO{" +
"mainDistributeTime='" + mainDistributeTime + '\'' +
", mainDistributePosition='" + mainDistributePosition + '\'' +
'}';
}
}
...@@ -15,34 +15,61 @@ public class UserCountVO { ...@@ -15,34 +15,61 @@ public class UserCountVO {
/** /**
* 点击率 * 点击率
*/ */
private Double clickRate; private String clickRate;
/**
* 分布时间段
**/
private String perQuantumUserCount;
/** /**
* 主要分布地区和时间 * 分布人数
**/ **/
List<MainDistributeVO> distributeVOS; private String distributePosition;
public Double getClickRate() { public Integer getUserCount() {
return userCount;
}
public void setUserCount(Integer userCount) {
this.userCount = userCount;
}
public String getClickRate() {
return clickRate; return clickRate;
} }
public void setClickRate(Double clickRate) { public void setClickRate(String clickRate) {
this.clickRate = clickRate; this.clickRate = clickRate;
} }
public List<MainDistributeVO> getDistributeVOS() { public String getDistributePosition() {
return distributeVOS; return distributePosition;
} }
public void setDistributeVOS(List<MainDistributeVO> distributeVOS) { public void setDistributePosition(String distributePosition) {
this.distributeVOS = distributeVOS; this.distributePosition = distributePosition;
} }
public Integer getUserCount() { public String getPerQuantumUserCount() {
return userCount; return perQuantumUserCount;
} }
public void setUserCount(Integer userCount) { public void setPerQuantumUserCount(String perQuantumUserCount) {
this.userCount = userCount; this.perQuantumUserCount = perQuantumUserCount;
}
@Override
public String toString() {
return "UserCountVO{" +
"userCount=" + userCount +
", clickRate=" + clickRate +
", perQuantumUserCount='" + perQuantumUserCount + '\'' +
", distributePosition='" + distributePosition + '\'' +
'}';
} }
} }
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