|
@@ -0,0 +1,1077 @@
|
|
|
+package com.fs.statis.service.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.fs.common.core.domain.R;
|
|
|
+import com.fs.common.core.redis.RedisCache;
|
|
|
+import com.fs.common.utils.TimeUtils;
|
|
|
+import com.fs.company.cache.ICompanyCacheService;
|
|
|
+import com.fs.company.service.ICompanyService;
|
|
|
+import com.fs.course.mapper.FsCourseTrafficLogMapper;
|
|
|
+import com.fs.his.vo.OptionsVO;
|
|
|
+import com.fs.statis.StatisticsRedisConstant;
|
|
|
+import com.fs.statis.dto.*;
|
|
|
+import com.fs.statis.mapper.ConsumptionBalanceMapper;
|
|
|
+import com.fs.statis.service.IStatisticsCompanyService;
|
|
|
+import com.fs.statis.service.utils.TrendDataFiller;
|
|
|
+import com.fs.store.service.IFsStoreOrderService;
|
|
|
+import com.fs.store.service.IFsStorePaymentService;
|
|
|
+import com.fs.store.service.IFsStoreProductService;
|
|
|
+import com.fs.store.service.IFsUserService;
|
|
|
+import com.fs.store.service.cache.IFsUserCourseCacheService;
|
|
|
+import com.fs.system.domain.SysConfig;
|
|
|
+import com.fs.system.service.ISysConfigService;
|
|
|
+import com.hc.openapi.tool.util.ObjectUtils;
|
|
|
+import com.hc.openapi.tool.util.StringUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.http.util.Asserts;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.time.DayOfWeek;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import static com.fs.statis.StatisticsRedisConstant.*;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service("statisticsCompanyService")
|
|
|
+public class StatisticsCompanyServiceImpl implements IStatisticsCompanyService {
|
|
|
+ @Autowired
|
|
|
+ private ConsumptionBalanceMapper consumptionBalanceMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsUserCourseCacheService fsUserCourseCacheService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ICompanyCacheService companyCacheService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisCache redisCache;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FsCourseTrafficLogMapper fsCourseTrafficLogMapper;
|
|
|
+ @Autowired
|
|
|
+ private IFsUserService userService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsStoreOrderService storeOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsStorePaymentService paymentService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsStoreProductService productService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISysConfigService configService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ICompanyService companyService;
|
|
|
+ @Override
|
|
|
+ public void dataOverviewTask() {
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if(companyId == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ dataOverviewTaskCompany(companyId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dataOverviewTaskCompany(Long companyId){
|
|
|
+ DealerAggregatedDTO dealerAggregatedDTO = this.dealerAggregated(companyId);
|
|
|
+ ConsumptionBalanceDataDTO consumptionBalanceDataDTO = this.rechargeConsumption(companyId);
|
|
|
+ AuthorizationInfoDTO authorizationInfoDTO = authorizationInfo();
|
|
|
+ Long smsBalance = this.smsBalance(companyId);
|
|
|
+ TrafficLogDTO trafficLog = this.getTrafficLog(companyId);
|
|
|
+
|
|
|
+ redisCache.setCacheObject(String.format(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AGGREGATED+":%d",companyId), dealerAggregatedDTO);
|
|
|
+ redisCache.setCacheObject(String.format(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_BALANCE+":%d",companyId), consumptionBalanceDataDTO);
|
|
|
+ redisCache.setCacheObject(String.format(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AUTHORIZATION_INFO+":%d",companyId), authorizationInfoDTO);
|
|
|
+ redisCache.setCacheObject(String.format(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_SMS_BALANCE+":%d",companyId), smsBalance);
|
|
|
+ redisCache.setCacheObject(String.format(StatisticsRedisConstant.DATA_OVERVIEW_TRAFFIC_LOG+":%d",companyId),trafficLog);
|
|
|
+ }
|
|
|
+ public void analysisPreviewTask0(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ analysisPreviewTask(0,1,companyId);
|
|
|
+ analysisPreviewTask(0,2,companyId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void analysisPreviewTask1(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ analysisPreviewTask(0,1,companyId);
|
|
|
+ analysisPreviewTask(1,1,companyId);
|
|
|
+ analysisPreviewTask(2,1,companyId);
|
|
|
+ analysisPreviewTask(3,1,companyId);
|
|
|
+ analysisPreviewTask(4,1,companyId);
|
|
|
+
|
|
|
+ analysisPreviewTask(0,2,companyId);
|
|
|
+ analysisPreviewTask(1,2,companyId);
|
|
|
+ analysisPreviewTask(2,2,companyId);
|
|
|
+ analysisPreviewTask(3,2,companyId);
|
|
|
+ analysisPreviewTask(4,2,companyId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public void analysisPreviewTask(Integer type, Integer userType,Long companyId) {
|
|
|
+ // 根据type计算出时间范围
|
|
|
+ String startDate = "";
|
|
|
+ String endDate = "";
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ LocalTime startOfDayTime = LocalTime.MIN;
|
|
|
+ LocalTime endOfDayTime = LocalTime.of(23, 59, 59);
|
|
|
+
|
|
|
+ if(0 == type){
|
|
|
+ LocalDateTime startOfDay = now.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfDay = now.with(endOfDayTime);
|
|
|
+ startDate = startOfDay.format(formatter);
|
|
|
+ endDate = endOfDay.format(formatter);
|
|
|
+ } else if(1 == type){
|
|
|
+ LocalDateTime yesterday = now.minusDays(1);
|
|
|
+ LocalDateTime startOfYesterday = yesterday.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfYesterday = yesterday.with(endOfDayTime);
|
|
|
+ startDate = startOfYesterday.format(formatter);
|
|
|
+ endDate = endOfYesterday.format(formatter);
|
|
|
+ } else if(2 == type) {
|
|
|
+ LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
|
|
+ LocalDateTime startOfStartOfWeek = startOfWeek.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfWeek.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(3 == type) {
|
|
|
+ LocalDateTime startOfMonth = now.withDayOfMonth(1);
|
|
|
+ LocalDateTime startOfStartOfMonth = startOfMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfMonth.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(4 == type) {
|
|
|
+ LocalDateTime firstDayOfPreviousMonth = now.minusMonths(1).withDayOfMonth(1);
|
|
|
+ LocalDateTime lastDayOfPreviousMonth = now.withDayOfMonth(1).minusDays(1);
|
|
|
+
|
|
|
+ LocalDateTime startOfPrevMonthStart = firstDayOfPreviousMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfPrevMonthEnd = lastDayOfPreviousMonth.with(endOfDayTime);
|
|
|
+
|
|
|
+ startDate = startOfPrevMonthStart.format(formatter);
|
|
|
+ endDate = endOfPrevMonthEnd.format(formatter);
|
|
|
+ }
|
|
|
+
|
|
|
+ AnalysisPreviewQueryDTO param = new AnalysisPreviewQueryDTO();
|
|
|
+ param.setStartTime(startDate);
|
|
|
+ param.setEndTime(endDate);
|
|
|
+ param.setType(type);
|
|
|
+ param.setUserType(userType);
|
|
|
+ param.setCompanyId(companyId);
|
|
|
+
|
|
|
+ AnalysisPreviewDTO analysisPreviewDTO = this.analysisPreview(param);
|
|
|
+
|
|
|
+ redisCache.setCacheObject(String.format("%s:%d:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType,companyId), analysisPreviewDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void watchEndPlayTrendTask0(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if(companyId == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ this.watchEndPlayTrendTask(0,1,companyId);
|
|
|
+ this.watchEndPlayTrendTask(0,2,companyId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void watchEndPlayTrendTask1(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if(companyId == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ this.watchEndPlayTrendTask(1,1,companyId);
|
|
|
+ this.watchEndPlayTrendTask(2,1,companyId);
|
|
|
+ this.watchEndPlayTrendTask(3,1,companyId);
|
|
|
+ this.watchEndPlayTrendTask(4,1,companyId);
|
|
|
+
|
|
|
+ this.watchEndPlayTrendTask(1,2,companyId);
|
|
|
+ this.watchEndPlayTrendTask(2,2,companyId);
|
|
|
+ this.watchEndPlayTrendTask(3,2,companyId);
|
|
|
+ this.watchEndPlayTrendTask(4,2,companyId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public void watchEndPlayTrendTask(Integer type, Integer userType,Long companyId) {
|
|
|
+ // 根据type计算出时间范围
|
|
|
+ String startDate = "";
|
|
|
+ String endDate = "";
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ LocalTime startOfDayTime = LocalTime.MIN;
|
|
|
+ LocalTime endOfDayTime = LocalTime.of(23, 59, 59);
|
|
|
+
|
|
|
+ if(0 == type){
|
|
|
+ LocalDateTime startOfDay = now.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfDay = now.with(endOfDayTime);
|
|
|
+ startDate = startOfDay.format(formatter);
|
|
|
+ endDate = endOfDay.format(formatter);
|
|
|
+ } else if(1 == type){
|
|
|
+ LocalDateTime yesterday = now.minusDays(1);
|
|
|
+ LocalDateTime startOfYesterday = yesterday.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfYesterday = yesterday.with(endOfDayTime);
|
|
|
+ startDate = startOfYesterday.format(formatter);
|
|
|
+ endDate = endOfYesterday.format(formatter);
|
|
|
+ } else if(2 == type) {
|
|
|
+ LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
|
|
+ LocalDateTime startOfStartOfWeek = startOfWeek.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfWeek.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(3 == type) {
|
|
|
+ LocalDateTime startOfMonth = now.withDayOfMonth(1);
|
|
|
+ LocalDateTime startOfStartOfMonth = startOfMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfMonth.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(4 == type) {
|
|
|
+ LocalDateTime firstDayOfPreviousMonth = now.minusMonths(1).withDayOfMonth(1);
|
|
|
+ LocalDateTime lastDayOfPreviousMonth = now.withDayOfMonth(1).minusDays(1);
|
|
|
+
|
|
|
+ LocalDateTime startOfPrevMonthStart = firstDayOfPreviousMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfPrevMonthEnd = lastDayOfPreviousMonth.with(endOfDayTime);
|
|
|
+
|
|
|
+ startDate = startOfPrevMonthStart.format(formatter);
|
|
|
+ endDate = endOfPrevMonthEnd.format(formatter);
|
|
|
+ }
|
|
|
+
|
|
|
+ AnalysisPreviewQueryDTO param = new AnalysisPreviewQueryDTO();
|
|
|
+ param.setStartTime(startDate);
|
|
|
+ param.setEndTime(endDate);
|
|
|
+ param.setType(type);
|
|
|
+ param.setCompanyId(companyId);
|
|
|
+
|
|
|
+ param.setUserType(userType);
|
|
|
+ List<WatchEndPlayTrendDTO> watchEndPlayTrendDTOS = this.watchEndPlayTrend(param);
|
|
|
+
|
|
|
+ redisCache.setCacheObject(String.format("%s:%d:%d",DATA_OVERVIEW_DEALER_CHARTS,type,userType),watchEndPlayTrendDTOS);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void companyWatchCourseTopTenTask(Integer type, Integer statisticalType, Integer userType,Long companyId) {
|
|
|
+
|
|
|
+ AnalysisPreviewQueryDTO dto = new AnalysisPreviewQueryDTO();
|
|
|
+ dto.setType(type);
|
|
|
+ dto.setStatisticalType(statisticalType);
|
|
|
+
|
|
|
+ String startDate = "";
|
|
|
+ String endDate = "";
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ LocalTime startOfDayTime = LocalTime.MIN;
|
|
|
+ LocalTime endOfDayTime = LocalTime.of(23, 59, 59);
|
|
|
+
|
|
|
+ if(0 == type){
|
|
|
+ LocalDateTime startOfDay = now.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfDay = now.with(endOfDayTime);
|
|
|
+ startDate = startOfDay.format(formatter);
|
|
|
+ endDate = endOfDay.format(formatter);
|
|
|
+ } else if(1 == type){
|
|
|
+ LocalDateTime yesterday = now.minusDays(1);
|
|
|
+ LocalDateTime startOfYesterday = yesterday.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfYesterday = yesterday.with(endOfDayTime);
|
|
|
+ startDate = startOfYesterday.format(formatter);
|
|
|
+ endDate = endOfYesterday.format(formatter);
|
|
|
+ } else if(2 == type) {
|
|
|
+ LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
|
|
+ LocalDateTime startOfStartOfWeek = startOfWeek.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfWeek.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(3 == type) {
|
|
|
+ LocalDateTime startOfMonth = now.withDayOfMonth(1);
|
|
|
+ LocalDateTime startOfStartOfMonth = startOfMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfMonth.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(4 == type) {
|
|
|
+ LocalDateTime firstDayOfPreviousMonth = now.minusMonths(1).withDayOfMonth(1);
|
|
|
+ LocalDateTime lastDayOfPreviousMonth = now.withDayOfMonth(1).minusDays(1);
|
|
|
+
|
|
|
+ LocalDateTime startOfPrevMonthStart = firstDayOfPreviousMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfPrevMonthEnd = lastDayOfPreviousMonth.with(endOfDayTime);
|
|
|
+
|
|
|
+ startDate = startOfPrevMonthStart.format(formatter);
|
|
|
+ endDate = endOfPrevMonthEnd.format(formatter);
|
|
|
+ }
|
|
|
+
|
|
|
+ dto.setStartTime(startDate);
|
|
|
+ dto.setEndTime(endDate);
|
|
|
+ dto.setUserType(userType);
|
|
|
+ dto.setCompanyId(companyId);
|
|
|
+
|
|
|
+ List<DeaMemberTopTenDTO> deaMemberTopTenDTOS = deaMemberTopTen(dto);
|
|
|
+ redisCache.setCacheObject(String.format("%s:%d:%d:%d:%d", CHARTS_MEMBER_TOP_TEN_WATCH, type,statisticalType,userType,companyId), deaMemberTopTenDTOS);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void companyWatchCourseTopTenTask0(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ companyWatchCourseTopTenTask(0,0,1,companyId);
|
|
|
+ companyWatchCourseTopTenTask(0,1,1,companyId);
|
|
|
+
|
|
|
+
|
|
|
+ companyWatchCourseTopTenTask(0,0,2,companyId);
|
|
|
+ companyWatchCourseTopTenTask(0,1,2,companyId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void companyWatchCourseTopTenTask1(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ companyWatchCourseTopTenTask(1,0,1,companyId);
|
|
|
+ companyWatchCourseTopTenTask(1,1,1,companyId);
|
|
|
+ companyWatchCourseTopTenTask(2,0,1,companyId);
|
|
|
+ companyWatchCourseTopTenTask(2,1,1,companyId);
|
|
|
+ companyWatchCourseTopTenTask(3,0,1,companyId);
|
|
|
+ companyWatchCourseTopTenTask(3,1,1,companyId);
|
|
|
+ companyWatchCourseTopTenTask(4,0,1,companyId);
|
|
|
+ companyWatchCourseTopTenTask(4,1,1,companyId);
|
|
|
+
|
|
|
+ companyWatchCourseTopTenTask(1,0,2,companyId);
|
|
|
+ companyWatchCourseTopTenTask(1,1,2,companyId);
|
|
|
+ companyWatchCourseTopTenTask(2,0,2,companyId);
|
|
|
+ companyWatchCourseTopTenTask(2,1,2,companyId);
|
|
|
+ companyWatchCourseTopTenTask(3,0,2,companyId);
|
|
|
+ companyWatchCourseTopTenTask(3,1,2,companyId);
|
|
|
+ companyWatchCourseTopTenTask(4,0,2,companyId);
|
|
|
+ companyWatchCourseTopTenTask(4,1,2,companyId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void watchCourseTopTenTask(Integer type, Integer statisticalType, Integer userType, String sort,Long companyId) {
|
|
|
+ AnalysisPreviewQueryDTO dto = new AnalysisPreviewQueryDTO();
|
|
|
+ dto.setType(type);
|
|
|
+ dto.setStatisticalType(statisticalType);
|
|
|
+ dto.setSort(sort);
|
|
|
+
|
|
|
+ String startDate = "";
|
|
|
+ String endDate = "";
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ LocalTime startOfDayTime = LocalTime.MIN;
|
|
|
+ LocalTime endOfDayTime = LocalTime.of(23, 59, 59);
|
|
|
+
|
|
|
+ if(0 == type){
|
|
|
+ LocalDateTime startOfDay = now.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfDay = now.with(endOfDayTime);
|
|
|
+ startDate = startOfDay.format(formatter);
|
|
|
+ endDate = endOfDay.format(formatter);
|
|
|
+ } else if(1 == type){
|
|
|
+ LocalDateTime yesterday = now.minusDays(1);
|
|
|
+ LocalDateTime startOfYesterday = yesterday.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfYesterday = yesterday.with(endOfDayTime);
|
|
|
+ startDate = startOfYesterday.format(formatter);
|
|
|
+ endDate = endOfYesterday.format(formatter);
|
|
|
+ } else if(2 == type) {
|
|
|
+ LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
|
|
+ LocalDateTime startOfStartOfWeek = startOfWeek.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfWeek.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(3 == type) {
|
|
|
+ LocalDateTime startOfMonth = now.withDayOfMonth(1);
|
|
|
+ LocalDateTime startOfStartOfMonth = startOfMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfMonth.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(4 == type) {
|
|
|
+ LocalDateTime firstDayOfPreviousMonth = now.minusMonths(1).withDayOfMonth(1);
|
|
|
+ LocalDateTime lastDayOfPreviousMonth = now.withDayOfMonth(1).minusDays(1);
|
|
|
+
|
|
|
+ LocalDateTime startOfPrevMonthStart = firstDayOfPreviousMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfPrevMonthEnd = lastDayOfPreviousMonth.with(endOfDayTime);
|
|
|
+
|
|
|
+ startDate = startOfPrevMonthStart.format(formatter);
|
|
|
+ endDate = endOfPrevMonthEnd.format(formatter);
|
|
|
+ }
|
|
|
+ dto.setStartTime(startDate);
|
|
|
+ dto.setEndTime(endDate);
|
|
|
+ dto.setUserType(userType);
|
|
|
+ dto.setCompanyId(companyId);
|
|
|
+ List<CourseStatsDTO> courseStatsDTOS = watchCourseTopTen(dto);
|
|
|
+
|
|
|
+ redisCache.setCacheObject( String.format("%s:%d:%d:%d:%s:%d", CHARTS_WATCH_TOP_TEN, type,statisticalType,userType,sort,companyId), courseStatsDTOS);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void watchCourseTopTenTask0(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ watchCourseTopTenTask(0,0,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(0,0,1,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(0,1,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(0,1,1,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(0,2,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(0,2,1,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(0,3,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(0,3,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(0,0,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(0,0,1,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(0,1,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(0,1,1,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(0,2,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(0,2,1,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(0,3,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(0,3,1,"ASC",companyId);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void watchCourseTopTenTask1(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ watchCourseTopTenTask(1,0,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(1,0,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(1,0,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(1,0,2,"ASC",companyId);
|
|
|
+
|
|
|
+
|
|
|
+ watchCourseTopTenTask(1,1,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(1,1,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(1,1,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(1,1,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(1,2,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(1,2,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(1,2,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(1,2,2,"ASC",companyId);
|
|
|
+
|
|
|
+
|
|
|
+ watchCourseTopTenTask(1,3,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(1,3,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(1,3,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(1,3,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(2,0,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(2,0,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(2,0,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(2,0,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(2,1,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(2,1,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(2,1,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(2,1,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(2,2,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(2,2,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(2,2,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(2,2,2,"ASC",companyId);
|
|
|
+
|
|
|
+
|
|
|
+ watchCourseTopTenTask(2,3,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(2,3,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(2,3,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(2,3,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(3,0,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(3,0,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(3,0,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(3,0,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(3,1,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(3,1,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(3,1,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(3,1,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(3,2,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(3,2,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(3,2,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(3,2,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(3,3,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(3,3,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(3,3,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(3,3,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(4,0,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(4,0,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(4,0,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(4,0,2,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(4,1,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(4,1,1,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(4,2,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(4,2,1,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(4,3,1,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(4,3,1,"ASC",companyId);
|
|
|
+
|
|
|
+ watchCourseTopTenTask(4,1,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(4,1,2,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(4,2,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(4,2,2,"ASC",companyId);
|
|
|
+ watchCourseTopTenTask(4,3,2,"DESC",companyId);
|
|
|
+ watchCourseTopTenTask(4,3,2,"ASC",companyId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void rewardMoneyTopTenTask(Integer type, Integer dataType, Integer userType,Long companyId) {
|
|
|
+ AnalysisPreviewQueryDTO dto = new AnalysisPreviewQueryDTO();
|
|
|
+ dto.setType(type);
|
|
|
+ dto.setDataType(dataType);
|
|
|
+
|
|
|
+ String startDate = "";
|
|
|
+ String endDate = "";
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ LocalTime startOfDayTime = LocalTime.MIN;
|
|
|
+ LocalTime endOfDayTime = LocalTime.of(23, 59, 59);
|
|
|
+
|
|
|
+ if(0 == type){
|
|
|
+ LocalDateTime startOfDay = now.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfDay = now.with(endOfDayTime);
|
|
|
+ startDate = startOfDay.format(formatter);
|
|
|
+ endDate = endOfDay.format(formatter);
|
|
|
+ } else if(1 == type){
|
|
|
+ LocalDateTime yesterday = now.minusDays(1);
|
|
|
+ LocalDateTime startOfYesterday = yesterday.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfYesterday = yesterday.with(endOfDayTime);
|
|
|
+ startDate = startOfYesterday.format(formatter);
|
|
|
+ endDate = endOfYesterday.format(formatter);
|
|
|
+ } else if(2 == type) {
|
|
|
+ LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
|
|
+ LocalDateTime startOfStartOfWeek = startOfWeek.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfWeek.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(3 == type) {
|
|
|
+ LocalDateTime startOfMonth = now.withDayOfMonth(1);
|
|
|
+ LocalDateTime startOfStartOfMonth = startOfMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfMonth.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(4 == type) {
|
|
|
+ LocalDateTime firstDayOfPreviousMonth = now.minusMonths(1).withDayOfMonth(1);
|
|
|
+ LocalDateTime lastDayOfPreviousMonth = now.withDayOfMonth(1).minusDays(1);
|
|
|
+
|
|
|
+ LocalDateTime startOfPrevMonthStart = firstDayOfPreviousMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfPrevMonthEnd = lastDayOfPreviousMonth.with(endOfDayTime);
|
|
|
+
|
|
|
+ startDate = startOfPrevMonthStart.format(formatter);
|
|
|
+ endDate = endOfPrevMonthEnd.format(formatter);
|
|
|
+ }
|
|
|
+
|
|
|
+ dto.setStartTime(startDate);
|
|
|
+ dto.setEndTime(endDate);
|
|
|
+ dto.setUserType(userType);
|
|
|
+ dto.setCompanyId(companyId);
|
|
|
+
|
|
|
+ List<RewardMoneyTopTenDTO> rewardMoneyTopTenDTOS = rewardMoneyTopTen(dto);
|
|
|
+
|
|
|
+ redisCache.setCacheObject( String.format("%s:%d:%d:%d:%d", CHARTS_REWARD_MONEY_TOP_TEN, type,dataType,userType,companyId), rewardMoneyTopTenDTOS);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void rewardMoneyTradeTask(Integer type, Integer userType,Long companyId) {
|
|
|
+ AnalysisPreviewQueryDTO dto = new AnalysisPreviewQueryDTO();
|
|
|
+ dto.setType(type);
|
|
|
+
|
|
|
+ String startDate = "";
|
|
|
+ String endDate = "";
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ LocalTime startOfDayTime = LocalTime.MIN;
|
|
|
+ LocalTime endOfDayTime = LocalTime.of(23, 59, 59);
|
|
|
+
|
|
|
+ if(0 == type){
|
|
|
+ LocalDateTime startOfDay = now.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfDay = now.with(endOfDayTime);
|
|
|
+ startDate = startOfDay.format(formatter);
|
|
|
+ endDate = endOfDay.format(formatter);
|
|
|
+ } else if(1 == type){
|
|
|
+ LocalDateTime yesterday = now.minusDays(1);
|
|
|
+ LocalDateTime startOfYesterday = yesterday.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfYesterday = yesterday.with(endOfDayTime);
|
|
|
+ startDate = startOfYesterday.format(formatter);
|
|
|
+ endDate = endOfYesterday.format(formatter);
|
|
|
+ } else if(2 == type) {
|
|
|
+ LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
|
|
+ LocalDateTime startOfStartOfWeek = startOfWeek.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfWeek.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(3 == type) {
|
|
|
+ LocalDateTime startOfMonth = now.withDayOfMonth(1);
|
|
|
+ LocalDateTime startOfStartOfMonth = startOfMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfToday = now.with(endOfDayTime);
|
|
|
+ startDate = startOfStartOfMonth.format(formatter);
|
|
|
+ endDate = endOfToday.format(formatter);
|
|
|
+ } else if(4 == type) {
|
|
|
+ LocalDateTime firstDayOfPreviousMonth = now.minusMonths(1).withDayOfMonth(1);
|
|
|
+ LocalDateTime lastDayOfPreviousMonth = now.withDayOfMonth(1).minusDays(1);
|
|
|
+
|
|
|
+ LocalDateTime startOfPrevMonthStart = firstDayOfPreviousMonth.with(startOfDayTime);
|
|
|
+ LocalDateTime endOfPrevMonthEnd = lastDayOfPreviousMonth.with(endOfDayTime);
|
|
|
+
|
|
|
+ startDate = startOfPrevMonthStart.format(formatter);
|
|
|
+ endDate = endOfPrevMonthEnd.format(formatter);
|
|
|
+ }
|
|
|
+
|
|
|
+ dto.setStartTime(startDate);
|
|
|
+ dto.setEndTime(endDate);
|
|
|
+ dto.setUserType(userType);
|
|
|
+ dto.setCompanyId(companyId);
|
|
|
+ List<RewardMoneyTrendDTO> rewardMoneyTrendDTOS = rewardMoneyTrendDTO(dto);
|
|
|
+ redisCache.setCacheObject( String.format("%s:%d:%d", CHARTS_REWARD_MONEY_TREND, type,userType), rewardMoneyTrendDTOS);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void rewardMoneyTask15Minutes(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ rewardMoneyTopTenTask(0,0,1,companyId);
|
|
|
+ rewardMoneyTopTenTask(0,1,1,companyId);
|
|
|
+
|
|
|
+ rewardMoneyTradeTask(0,1,companyId);
|
|
|
+
|
|
|
+ rewardMoneyTopTenTask(0,0,2,companyId);
|
|
|
+ rewardMoneyTopTenTask(0,1,2,companyId);
|
|
|
+
|
|
|
+ rewardMoneyTradeTask(0,2,companyId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void rewardMoneyTaskEveryday(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ rewardMoneyTopTenTask(1,0,1,companyId);
|
|
|
+ rewardMoneyTopTenTask(1,1,1,companyId);
|
|
|
+
|
|
|
+
|
|
|
+ rewardMoneyTopTenTask(2,0,1,companyId);
|
|
|
+ rewardMoneyTopTenTask(2,1,1,companyId);
|
|
|
+
|
|
|
+ rewardMoneyTopTenTask(3,0,1,companyId);
|
|
|
+ rewardMoneyTopTenTask(3,1,1,companyId);
|
|
|
+
|
|
|
+ rewardMoneyTopTenTask(4,0,1,companyId);
|
|
|
+ rewardMoneyTopTenTask(4,1,1,companyId);
|
|
|
+
|
|
|
+
|
|
|
+ rewardMoneyTradeTask(1,1,companyId);
|
|
|
+ rewardMoneyTradeTask(2,1,companyId);
|
|
|
+ rewardMoneyTradeTask(3,1,companyId);
|
|
|
+ rewardMoneyTradeTask(4,1,companyId);
|
|
|
+
|
|
|
+
|
|
|
+ rewardMoneyTopTenTask(1,0,2,companyId);
|
|
|
+ rewardMoneyTopTenTask(1,1,2,companyId);
|
|
|
+ rewardMoneyTopTenTask(2,0,2,companyId);
|
|
|
+ rewardMoneyTopTenTask(2,1,2,companyId);
|
|
|
+ rewardMoneyTopTenTask(3,0,2,companyId);
|
|
|
+ rewardMoneyTopTenTask(3,1,2,companyId);
|
|
|
+ rewardMoneyTopTenTask(4,0,2,companyId);
|
|
|
+ rewardMoneyTopTenTask(4,1,2,companyId);
|
|
|
+
|
|
|
+ rewardMoneyTradeTask(1,2,companyId);
|
|
|
+ rewardMoneyTradeTask(2,2,companyId);
|
|
|
+ rewardMoneyTradeTask(3,2,companyId);
|
|
|
+ rewardMoneyTradeTask(4,2,companyId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DealerAggregatedDTO dealerAggregated(Long companyId) {
|
|
|
+ Long dayUserCount=userService.selectFsUserCount(1,companyId);
|
|
|
+ Long storeOrderCount=storeOrderService.selectFsStoreOrderTotalCount(0,companyId);
|
|
|
+ Long dayStoreOrderCount=storeOrderService.selectFsStoreOrderTotalCount(1,companyId);
|
|
|
+ Long paymentCount=paymentService.selectFsStorePaymentCount(0,companyId);
|
|
|
+ Long dayPaymentCount=paymentService.selectFsStorePaymentCount(1,companyId);
|
|
|
+ Long productCount=productService.selectFsStoreProductCount(0,companyId);
|
|
|
+ Long dayProductCount=productService.selectFsStoreProductCount(1,companyId);
|
|
|
+ DealerAggregatedDTO dealerAggregatedDTO = consumptionBalanceMapper.dealerAggregatedCompanyId(companyId);
|
|
|
+ dealerAggregatedDTO.setTodayIncreaseUserNum(dayUserCount);
|
|
|
+ dealerAggregatedDTO.setOrderTotalNum(storeOrderCount);
|
|
|
+ dealerAggregatedDTO.setTodayOrderNum(dayStoreOrderCount);
|
|
|
+ dealerAggregatedDTO.setRecvTodayNum(paymentCount);
|
|
|
+ dealerAggregatedDTO.setRecvTodayNum(dayPaymentCount);
|
|
|
+ dealerAggregatedDTO.setGoodsTotalNum(productCount);
|
|
|
+ dealerAggregatedDTO.setTodayGoodsNum(dayProductCount);
|
|
|
+ return dealerAggregatedDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ConsumptionBalanceDataDTO rechargeConsumption(Long companyId) {
|
|
|
+ // 获取流量统计数据
|
|
|
+ TrafficLogDTO trafficLog = this.getTrafficLog(companyId);
|
|
|
+
|
|
|
+ // 获取流量价格配置
|
|
|
+ SysConfig config = configService.selectConfigByConfigKey("statis.config");
|
|
|
+ Asserts.notNull(config, "流量价格配置不能为空!");
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(config.getConfigValue());
|
|
|
+ float trafficPrice = jsonObject.getFloatValue("trafficPrice");
|
|
|
+
|
|
|
+ // 创建消费余额数据对象
|
|
|
+ ConsumptionBalanceDataDTO consumptionBalanceData = new ConsumptionBalanceDataDTO();
|
|
|
+
|
|
|
+ // 计算消费金额(将流量从字节转换为GB,然后乘以每GB价格)
|
|
|
+ BigDecimal todayConsumption = calculateTrafficCost(trafficLog.getToday(), trafficPrice);
|
|
|
+ BigDecimal yesterdayConsumption = calculateTrafficCost(trafficLog.getYesterday(), trafficPrice);
|
|
|
+
|
|
|
+ // 设置消费数据
|
|
|
+ consumptionBalanceData.setTodayComsumption(todayConsumption);
|
|
|
+ consumptionBalanceData.setYesterdayComsumption(yesterdayConsumption);
|
|
|
+
|
|
|
+ // 从数据库获取当前余额
|
|
|
+ BigDecimal currentBalance = consumptionBalanceMapper.getCurrentBalanceCompanyId(companyId);
|
|
|
+ consumptionBalanceData.setBalance(currentBalance);
|
|
|
+
|
|
|
+ return consumptionBalanceData;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 计算流量消费金额
|
|
|
+ * @param trafficBytes 流量字节数
|
|
|
+ * @param pricePerGB 每GB价格
|
|
|
+ * @return 消费金额
|
|
|
+ */
|
|
|
+ private BigDecimal calculateTrafficCost(Long trafficBytes, float pricePerGB) {
|
|
|
+ if (trafficBytes == null || trafficBytes <= 0) {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将字节转换为GB (1GB = 1024^3 bytes)
|
|
|
+ BigDecimal trafficGB = new BigDecimal(trafficBytes)
|
|
|
+ .divide(new BigDecimal(1024 * 1024 * 1024), 6, BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+ // 计算消费金额
|
|
|
+ return trafficGB.multiply(new BigDecimal(pricePerGB)).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AnalysisPreviewDTO analysisPreview(AnalysisPreviewQueryDTO param) {
|
|
|
+ AnalysisPreviewDTO dto = new AnalysisPreviewDTO();
|
|
|
+
|
|
|
+ Long watchUserCount = consumptionBalanceMapper.queryWatchUserCount(param);
|
|
|
+ Long completedUserCount = consumptionBalanceMapper.queryCompletedUserCount(param);
|
|
|
+
|
|
|
+ if(watchUserCount == null){
|
|
|
+ watchUserCount = 0L;
|
|
|
+ }
|
|
|
+ if(completedUserCount == null){
|
|
|
+ completedUserCount = 0L;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 观看人数
|
|
|
+ dto.setWatchUserCount(watchUserCount);
|
|
|
+ // 完播人数
|
|
|
+ dto.setCompletedUserCount(completedUserCount);
|
|
|
+
|
|
|
+ // 完播率
|
|
|
+ if(!ObjectUtils.equals(watchUserCount,0L)){
|
|
|
+ BigDecimal multiply = (BigDecimal.valueOf(completedUserCount)
|
|
|
+ .divide(BigDecimal.valueOf(watchUserCount),4,BigDecimal.ROUND_HALF_UP))
|
|
|
+ .multiply(BigDecimal.valueOf(100));
|
|
|
+
|
|
|
+ dto.setCompletedRate(multiply.setScale(2,BigDecimal.ROUND_HALF_UP).toPlainString());
|
|
|
+ } else {
|
|
|
+ dto.setCompletedRate("0");
|
|
|
+ }
|
|
|
+
|
|
|
+ Long watchCount = consumptionBalanceMapper.queryWatchCount(param);
|
|
|
+ Long completedCount = consumptionBalanceMapper.queryCompletedCount(param);
|
|
|
+
|
|
|
+ if(watchCount == null){
|
|
|
+ watchCount = 0L;
|
|
|
+ }
|
|
|
+ if(completedCount == null){
|
|
|
+ completedCount = 0L;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 观看次数
|
|
|
+ dto.setWatchCount(watchCount);
|
|
|
+ // 完播次数
|
|
|
+ dto.setCompletedCount(completedCount);
|
|
|
+ // 视频完播率
|
|
|
+ if(!ObjectUtils.equals(watchCount, 0L)){
|
|
|
+ BigDecimal multiply = BigDecimal.valueOf(completedCount)
|
|
|
+ .divide(BigDecimal.valueOf(watchCount),4,BigDecimal.ROUND_HALF_UP)
|
|
|
+ .multiply(BigDecimal.valueOf(100));
|
|
|
+
|
|
|
+ dto.setWatchRate(multiply.setScale(2,BigDecimal.ROUND_HALF_UP).toPlainString());
|
|
|
+ } else {
|
|
|
+ dto.setWatchRate("0");
|
|
|
+ }
|
|
|
+
|
|
|
+ Long answerMemberCount = consumptionBalanceMapper.queryAnswerMemberCount(param);
|
|
|
+ Long correctUserCount = consumptionBalanceMapper.queryCorrectUserCount(param);
|
|
|
+
|
|
|
+ if(answerMemberCount == null){
|
|
|
+ answerMemberCount = 0L;
|
|
|
+ }
|
|
|
+ if(correctUserCount == null){
|
|
|
+ correctUserCount = 0L;
|
|
|
+ }
|
|
|
+ // 答题人数
|
|
|
+ dto.setAnswerMemberCount(answerMemberCount);
|
|
|
+ // 正确人数
|
|
|
+ dto.setCorrectUserCount(correctUserCount);
|
|
|
+ // 正确比例
|
|
|
+ if(!ObjectUtils.equals(answerMemberCount, 0L)){
|
|
|
+ BigDecimal multiply = BigDecimal.valueOf(correctUserCount)
|
|
|
+ .divide(BigDecimal.valueOf(answerMemberCount),4,BigDecimal.ROUND_HALF_UP)
|
|
|
+ .multiply(BigDecimal.valueOf(100));
|
|
|
+
|
|
|
+ dto.setCorrectRate(multiply.setScale(2, RoundingMode.HALF_UP).toPlainString());
|
|
|
+ } else {
|
|
|
+ dto.setCorrectRate("0");
|
|
|
+ }
|
|
|
+ Long rewardCount = consumptionBalanceMapper.queryRewardCount(param);
|
|
|
+ if(rewardCount == null) {
|
|
|
+ rewardCount = 0L;
|
|
|
+ }
|
|
|
+ BigDecimal rewardMoney = consumptionBalanceMapper.queryRewardMoney(param);
|
|
|
+ if(rewardMoney == null) {
|
|
|
+ rewardMoney = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ // 答题红包个数
|
|
|
+ dto.setRewardCount(rewardCount);
|
|
|
+ // 答题红包金额
|
|
|
+ dto.setRewardMoney(rewardMoney);
|
|
|
+
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Long smsBalance(Long companyId) {
|
|
|
+ Long smsBalance = consumptionBalanceMapper.smsBalanceCompany(companyId);
|
|
|
+ if(smsBalance != null) {
|
|
|
+ smsBalance = 0L;
|
|
|
+ }
|
|
|
+ return smsBalance;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AuthorizationInfoDTO authorizationInfo() {
|
|
|
+ return consumptionBalanceMapper.authorizationInfo();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<WatchEndPlayTrendDTO> watchEndPlayTrend(AnalysisPreviewQueryDTO param) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DeaMemberTopTenDTO> deaMemberTopTen(AnalysisPreviewQueryDTO param) {
|
|
|
+ List<DeaMemberTopTenDTO> deaMemberTopTenDTOS = consumptionBalanceMapper.deaMemberTopTen(param);
|
|
|
+ for (DeaMemberTopTenDTO dto : deaMemberTopTenDTOS) {
|
|
|
+ Long companyId = dto.getCompanyId();
|
|
|
+ String companyName = companyCacheService.selectCompanyNameById(companyId);
|
|
|
+ if(StringUtils.isNotBlank(companyName)){
|
|
|
+ dto.setCompanyName(companyName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return deaMemberTopTenDTOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<CourseStatsDTO> watchCourseTopTen(AnalysisPreviewQueryDTO param) {
|
|
|
+ List<CourseStatsDTO> courseStatsDTOS = consumptionBalanceMapper.watchCourseTopTen(param);
|
|
|
+ for (CourseStatsDTO courseStatsDTO : courseStatsDTOS) {
|
|
|
+ String courseName = fsUserCourseCacheService.selectCourseNameByCourseId(courseStatsDTO.getCourseId());
|
|
|
+ if(StringUtils.isNotBlank(courseName)){
|
|
|
+ courseStatsDTO.setCourseName(courseName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return courseStatsDTOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<RewardMoneyTopTenDTO> rewardMoneyTopTen(AnalysisPreviewQueryDTO param) {
|
|
|
+ List<RewardMoneyTopTenDTO> rewardMoneyTopTenDTOS = consumptionBalanceMapper.rewardMoneyTopTen(param);
|
|
|
+ for (RewardMoneyTopTenDTO dto : rewardMoneyTopTenDTOS) {
|
|
|
+ if(dto.getCompanyId() != null) {
|
|
|
+ String companyName = companyCacheService.selectCompanyNameById(dto.getCompanyId());
|
|
|
+ dto.setCompanyName(companyName);
|
|
|
+ }
|
|
|
+ if(dto.getCourseId() != null){
|
|
|
+ String courseName = fsUserCourseCacheService.selectCourseNameByCourseId(dto.getCourseId());
|
|
|
+ dto.setCourseName(courseName);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return rewardMoneyTopTenDTOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<RewardMoneyTrendDTO> rewardMoneyTrendDTO(AnalysisPreviewQueryDTO param) {
|
|
|
+ List<RewardMoneyTrendDTO> rewardMoneyTrendDTOS = consumptionBalanceMapper.rewardMoneyTrendDTO(param);
|
|
|
+
|
|
|
+ // 今日,昨日 格式为24小时
|
|
|
+ if(ObjectUtils.equals(param.getType(),0) || ObjectUtils.equals(param.getType(),1)){
|
|
|
+ rewardMoneyTrendDTOS = TrendDataFiller.fillRewardHourData(rewardMoneyTrendDTOS);
|
|
|
+ // 否则都是按天为维度的时间范围
|
|
|
+ } else {
|
|
|
+ rewardMoneyTrendDTOS = TrendDataFiller.fillRewardDateSegmentData(rewardMoneyTrendDTOS, param.getStartTime(), param.getEndTime());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return rewardMoneyTrendDTOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TrafficLogDTO getTrafficLog(Long companyId) {
|
|
|
+ TrafficLogDTO trafficLogDTO = new TrafficLogDTO();
|
|
|
+ Long todayTrafficLog = fsCourseTrafficLogMapper.getTodayTrafficLogCompanyId(companyId);
|
|
|
+ Long yesterdayTrafficLog = fsCourseTrafficLogMapper.getYesterdayTrafficLogCompanyId(companyId);
|
|
|
+ Long monthTrafficLog = fsCourseTrafficLogMapper.getMonthTrafficLogCompanyId(companyId);
|
|
|
+ trafficLogDTO.setToday(todayTrafficLog);
|
|
|
+ trafficLogDTO.setThisMonth(monthTrafficLog);
|
|
|
+ trafficLogDTO.setYesterday(yesterdayTrafficLog);
|
|
|
+ return trafficLogDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void companyThisMonthOrderCount(){
|
|
|
+ List<OptionsVO> optionsVOS = companyService.selectAllCompanyList();
|
|
|
+ for (OptionsVO optionsVO : optionsVOS) {
|
|
|
+ Long companyId = optionsVO.getDictValue();
|
|
|
+ if (companyId == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ this.thisMonthOrderCount(companyId);
|
|
|
+ this.thisMonthRecvCount(companyId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public void thisMonthOrderCount(Long companyId) {
|
|
|
+ Long[] users=new Long[0];
|
|
|
+ TimeUtils.TimeEntity timeEntity=TimeUtils.parseTime("5",null,null);
|
|
|
+ timeEntity.setUserIds(users);
|
|
|
+ timeEntity.setCompanyId(companyId);
|
|
|
+ Integer cycleNum = timeEntity.getCycleNum();
|
|
|
+ Integer beginTime = timeEntity.getBeginTime();
|
|
|
+ List<Integer> timeList = new ArrayList<>();
|
|
|
+ for (int i = 1; i <= cycleNum; i++) {
|
|
|
+ timeList.add(beginTime);
|
|
|
+ beginTime = TimeUtils.formatTime(beginTime);
|
|
|
+ }
|
|
|
+ List<JSONObject> jsonObjectList = storeOrderService.selectFsStoreOrderCounts(timeEntity.toMap());
|
|
|
+ List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
|
|
|
+ List<Integer> orderCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("orderCount")).collect(Collectors.toList());
|
|
|
+ List<Integer> payPrice = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("payPrice")).collect(Collectors.toList());
|
|
|
+ R result = R.ok().put("dates", dates).put("orderCount", orderCount).put("payPrice", payPrice);
|
|
|
+ redisCache.setCacheObject(String.format(THIS_MONTH_ORDER_COUNT+":%d",companyId),result);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void thisMonthRecvCount(Long companyId) {
|
|
|
+ Long[] users=new Long[0];
|
|
|
+ TimeUtils.TimeEntity timeEntity=TimeUtils.parseTime("5",null,null);
|
|
|
+ timeEntity.setUserIds(users);
|
|
|
+ timeEntity.setCompanyId(companyId);
|
|
|
+ Integer cycleNum = timeEntity.getCycleNum();
|
|
|
+ Integer beginTime = timeEntity.getBeginTime();
|
|
|
+ List<Integer> timeList = new ArrayList<>();
|
|
|
+ for (int i = 1; i <= cycleNum; i++) {
|
|
|
+ timeList.add(beginTime);
|
|
|
+ beginTime = TimeUtils.formatTime(beginTime);
|
|
|
+ }
|
|
|
+ List<JSONObject> jsonObjectList = paymentService.selectFsStorePaymentCounts(timeEntity.toMap());
|
|
|
+ List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
|
|
|
+ List<Integer> orderCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("orderCount")).collect(Collectors.toList());
|
|
|
+ List<Float> payMoney = jsonObjectList.stream().map(jsonObject -> jsonObject.getFloatValue("payMoney")).collect(Collectors.toList());
|
|
|
+ R result = R.ok().put("dates", dates).put("orderCount", orderCount).put("payMoney", payMoney);
|
|
|
+ redisCache.setCacheObject(String.format(THIS_MONTH_RECV_COUNT+":%d",companyId),result);
|
|
|
+ }
|
|
|
+}
|