@ -1,6 +1,12 @@
package com.epmet.controller ;
import cn.hutool.core.thread.ThreadUtil ;
import com.alibaba.fastjson.JSON ;
import com.epmet.commons.tools.constant.NumConstant ;
import com.epmet.commons.tools.constant.StrConstant ;
import com.epmet.commons.tools.enums.BizTypeEnum ;
import com.epmet.commons.tools.exception.EpmetErrorCode ;
import com.epmet.commons.tools.exception.EpmetException ;
import com.epmet.commons.tools.utils.DateUtils ;
import com.epmet.commons.tools.utils.Result ;
import com.epmet.dto.StatsFormDTO ;
@ -14,8 +20,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping ;
import org.springframework.web.bind.annotation.RestController ;
import java.util.Date ;
import java.util.List ;
import java.util.Set ;
import java.util.concurrent.CountDownLatch ;
import java.util.concurrent.TimeUnit ;
/ * *
* @author liujianjun
@ -49,42 +57,101 @@ public class FactAggregationExtractController {
* @date 2020 / 11 / 10 3 : 14 下午
* /
@RequestMapping ( "extractDailyOrMonthly" )
public Result extractDaily ( @RequestBody AggregationExtractFormDTO formDTO ) {
public Result extractDailyOrMonthly ( @RequestBody AggregationExtractFormDTO formDTO ) {
if ( StringUtils . isBlank ( formDTO . getStartDate ( ) ) & & StringUtils . isBlank ( formDTO . getEndDate ( ) ) ) {
log . error ( "抽取日期范围不能为空" ) ;
return new Result ( ) . error ( ) ;
}
if ( formDTO . getStartDate ( ) . indexOf ( StrConstant . HYPHEN ) < 0 | | formDTO . getEndDate ( ) . indexOf ( StrConstant . HYPHEN ) < 0 ) {
if ( ! formDTO . getStartDate ( ) . contains ( StrConstant . HYPHEN ) | | ! formDTO . getEndDate ( ) . contains ( StrConstant . HYPHEN ) ) {
log . error ( "抽取日期范围格式不正确,yyyy-MM-dd" ) ;
return new Result ( ) . error ( ) ;
}
BizTypeEnum bizTypeEnum = null ;
Set < String > bizType = formDTO . getBizType ( ) ;
for ( String item : bizType ) {
bizTypeEnum = BizTypeEnum . getEnum ( item ) ;
if ( bizTypeEnum = = null ) {
log . error ( "抽取业务类型不正确,BizTypeEnum" ) ;
throw new EpmetException ( EpmetErrorCode . SERVER_ERROR . getCode ( ) ) ;
}
}
List < String > daysBetween = DateUtils . getDaysBetween ( formDTO . getStartDate ( ) , formDTO . getEndDate ( ) , DateUtils . DATE_PATTERN , DateUtils . DATE_PATTERN ) ;
daysBetween . forEach ( dateId - > {
Date date = DateUtils . parse ( dateId , DateUtils . DATE_PATTERN ) ;
for ( String dateId : daysBetween ) {
StatsFormDTO param = new StatsFormDTO ( ) ;
param . setCustomerId ( formDTO . getCustomerId ( ) ) ;
param . setDate ( dateId ) ;
switch ( formDTO . getType ( ) ) {
case "monthly" :
if ( "monthly" . equals ( formDTO . getType ( ) ) ) {
if ( bizType . isEmpty ( ) | | bizType . contains ( BizTypeEnum . GROUP . getType ( ) ) ) {
extractGroupDataMonthly ( param ) ;
}
if ( bizType . isEmpty ( ) | | bizType . contains ( BizTypeEnum . ARTICLE . getType ( ) ) ) {
extractArticleDataMonthlyAndQuarterly ( param ) ;
}
} else {
//todo 如果要加方法 记得这个枚举里要加
int threadCount = bizType . isEmpty ( ) ? BizTypeEnum . values ( ) . length : bizType . size ( ) ;
System . out . println ( threadCount ) ;
CountDownLatch countDownLatch = ThreadUtil . newCountDownLatch ( threadCount ) ;
if ( bizType . isEmpty ( ) | | bizType . contains ( BizTypeEnum . USER . getType ( ) ) ) {
ThreadUtil . execute ( ( ) - > {
extractUserDataDaily ( param ) ;
countDownLatch . countDown ( ) ;
} ) ;
}
if ( bizType . isEmpty ( ) | | bizType . contains ( BizTypeEnum . GROUP . getType ( ) ) ) {
ThreadUtil . execute ( ( ) - > {
extractGroupDataDaily ( param ) ;
countDownLatch . countDown ( ) ;
} ) ;
}
if ( bizType . isEmpty ( ) | | bizType . contains ( BizTypeEnum . TOPIC . getType ( ) ) ) {
ThreadUtil . execute ( ( ) - > {
extractTopicDataDaily ( param ) ;
countDownLatch . countDown ( ) ;
} ) ;
}
if ( bizType . isEmpty ( ) | | bizType . contains ( BizTypeEnum . ISSUE . getType ( ) ) ) {
ThreadUtil . execute ( ( ) - > {
extractIssueDataDaily ( param ) ;
countDownLatch . countDown ( ) ;
} ) ;
}
if ( bizType . isEmpty ( ) | | bizType . contains ( BizTypeEnum . PROJECT . getType ( ) ) ) {
ThreadUtil . execute ( ( ) - > {
extractProjectDataDaily ( param ) ;
countDownLatch . countDown ( ) ;
} ) ;
}
if ( bizType . isEmpty ( ) | | bizType . contains ( BizTypeEnum . ARTICLE . getType ( ) ) ) {
ThreadUtil . execute ( ( ) - > {
extractAtricleDataDaily ( param ) ;
countDownLatch . countDown ( ) ;
} ) ;
}
try {
//如果半小时还没执行完 则中断 说明执行方法有问题 要优化
countDownLatch . await ( NumConstant . THIRTY , TimeUnit . MINUTES ) ;
} catch ( InterruptedException e ) {
log . error ( "extractDailyOrMonthly dateId:{} 始终没有结束 中断操作 InterruptedException" , dateId ) ;
break ;
default :
extractUserDataDaily ( param ) ;
extractGroupDataDaily ( param ) ;
extractTopicDataDaily ( param ) ;
extractIssueDataDaily ( param ) ;
extractProjectDataDaily ( param ) ;
extractAtricleDataDaily ( param ) ;
}
}
} ) ;
log . info ( "extractDailyOrMonthly dateId:{} run end" , dateId ) ;
}
return new Result ( ) ;
}
private void extractUserDataDaily ( StatsFormDTO formDTO ) {
try {
statsUserService . partition ( formDTO ) ;
log . info ( "extractUserDataDaily end param:{}" , JSON . toJSONString ( formDTO ) ) ;
} catch ( Exception e ) {
log . error ( "抽取【用户】数据失败" , e ) ;
}
@ -93,6 +160,7 @@ public class FactAggregationExtractController {
private void extractTopicDataDaily ( StatsFormDTO formDTO ) {
try {
statsTopicService . partition ( formDTO ) ;
log . info ( "extractTopicDataDaily end param:{}" , JSON . toJSONString ( formDTO ) ) ;
} catch ( Exception e ) {
log . error ( "抽取【话题】数据失败" , e ) ;
}
@ -101,6 +169,7 @@ public class FactAggregationExtractController {
private void extractIssueDataDaily ( StatsFormDTO formDTO ) {
try {
statsIssueService . agencyGridIssueStats ( formDTO ) ;
log . info ( "extractIssueDataDaily end param:{}" , JSON . toJSONString ( formDTO ) ) ;
} catch ( Exception e ) {
log . error ( "抽取【议题】数据失败" , e ) ;
}
@ -110,6 +179,7 @@ public class FactAggregationExtractController {
try {
statsProjectService . gridProjectStats ( formDTO ) ;
statsProjectService . agencyProjectStats ( formDTO ) ;
log . info ( "extractProjectDataDaily end param:{}" , JSON . toJSONString ( formDTO ) ) ;
} catch ( Exception e ) {
log . error ( "抽取【项目】数据失败" , e ) ;
}
@ -120,6 +190,7 @@ public class FactAggregationExtractController {
statsPublicityService . articleSummaryDailyStatsjob ( formDTO ) ;
statsPublicityService . tagUsedDailyStatsjob ( formDTO ) ;
statsPublicityService . tagViewedDailyStatsjob ( formDTO ) ;
log . info ( "extractAtricleDataDaily end param:{}" , JSON . toJSONString ( formDTO ) ) ;
} catch ( Exception e ) {
log . error ( "抽取【文章】数据失败" , e ) ;
}
@ -133,6 +204,7 @@ public class FactAggregationExtractController {
statsGroupService . groupGridDaily ( groupStatsFormDTO ) ;
statsGroupService . groupAgencyDaily ( groupStatsFormDTO ) ;
log . info ( "extractGroupDataDaily end param:{}" , JSON . toJSONString ( formDTO ) ) ;
} catch ( Exception e ) {
log . error ( "抽取【小组】数据失败" , e ) ;
}
@ -145,6 +217,7 @@ public class FactAggregationExtractController {
groupStatsFormDTO . setCustomerId ( formDTO . getCustomerId ( ) ) ;
statsGroupService . groupAgencyMonthly ( groupStatsFormDTO ) ;
log . info ( "extractGroupDataMonthly end param:{}" , JSON . toJSONString ( formDTO ) ) ;
} catch ( Exception e ) {
log . error ( "抽取【小组】数据失败" , e ) ;
}
@ -156,6 +229,7 @@ public class FactAggregationExtractController {
statsPublicityService . tagUsedQuarterlyStatsjob ( formDTO ) ;
statsPublicityService . tagViewedMonthlyStatsjob ( formDTO ) ;
statsPublicityService . tagViewedQuarterlyStatsjob ( formDTO ) ;
log . info ( "extractArticleDataMonthlyAndQuarterly end param:{}" , JSON . toJSONString ( formDTO ) ) ;
} catch ( Exception e ) {
log . error ( "抽取【文章】数据失败" , e ) ;
}