package Ġcom . tencent . bk . code cc . def ect . component Ċ Ċ import Ġcom . tencent . bk . code cc . def ect . cluster . Cluster Commit Id Compare Process Ċ import Ġcom . tencent . bk . code cc . def ect . cluster . Cluster Lint Compare Process Ċ import Ġcom . tencent . bk . code cc . def ect . dao . mong ore pository . Lint Defect V 2 Repository Ċ import Ġcom . tencent . bk . code cc . def ect . dao . mong ore pository . Tool Build Stack Repository Ċ import Ġcom . tencent . bk . code cc . def ect . model . Build Entity Ċ import Ġcom . tencent . bk . code cc . def ect . model . def ect . Lint Defect V 2 Entity Ċ import Ġcom . tencent . bk . code cc . def ect . pojo . Aggregate Defect New Input Model Ċ import Ġcom . tencent . bk . code cc . def ect . pojo . Aggregate Defect Output Model V 2 Ċ import Ġcom . tencent . bk . code cc . def ect . pojo . Defect Cluster DTO Ċ import Ġcom . tencent . bk . code cc . def ect . service . impl . Lint Filter Path Biz ServiceImpl Ċ import Ġcom . tencent . bk . code cc . def ect . vo . Commit Defect VO Ċ import Ġcom . tencent . bk . code cc . task . vo . Filter Path Input VO Ċ import Ġcom . tencent . devops . common . constant . Com Constants Ċ import Ġorg . apache . commons . collections . Collection Utils Ċ import Ġorg . apache . commons . lang . StringUtils Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . util . concurrent . Copy On Write ArrayList Ċ import Ġjava . util . concurrent . atomic . Atomic Long Ċ import Ġjava . util . function . Consumer Ċ Ċ @ Component Ċ class ĠCommit Id Defect Commit Component Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġlint Defect V 2 Repository : ĠL int Defect V 2 Repository , ĊĠĠĠ Ġcluster Lint Compare Process : ĠCluster Lint Compare Process , ĊĠĠĠ Ġprivate Ġval Ġcluster Commit Id Compare Process : ĠCluster Commit Id Compare Process , ĊĠĠĠ Ġnew Lint Defect Tracing Component : ĠNew Lint Defect Tracing Component , ĊĠĠĠ Ġsc m Json Component : ĠS cm Json Component , ĊĠĠĠ Ġprivate Ġval Ġdefect Id Generator : ĠDef ect Id Generator , ĊĠĠĠ Ġprivate Ġval Ġtool Build Stack Repository : ĠTool Build Stack Repository , ĊĠĠĠ Ġprivate Ġval Ġlint Filter Path Biz ServiceImpl : ĠL int Filter Path Biz ServiceImpl Ċ ) Ġ: ĠL int Defect Commit Component ( ĊĠĠĠ Ġlint Defect V 2 Repository , ĊĠĠĠ Ġcluster Lint Compare Process , ĊĠĠĠ Ġnew Lint Defect Tracing Component , ĊĠĠĠ Ġsc m Json Component Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġpre Handle Defect List ( ĊĠĠĠĠĠĠĠ Ġstream Name : ĠString , ĊĠĠĠĠĠĠĠ Ġtool Name : ĠString , ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġcurrent Defect List : ĠList < Lint Defect V 2 Entity >, ĊĠĠĠĠĠĠĠ Ġpre Defect List : ĠList < Lint Defect V 2 Entity >, ĊĠĠĠĠĠĠĠ Ġmd 5 Same Map : ĠMutable Map < String , ĠBoolean > ĊĠĠĠ Ġ): ĠList < Lint Defect V 2 Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Defect List Ġ= Ġmutable ListOf < Lint Defect V 2 Entity >() ĊĠĠĠĠĠĠĠ Ġ// 1 . åħĪ å¤ĦçĲĨ æľ¬ æ¬¡ ä¸Ĭ æĬ¥ çļĦ åĳĬ èŃ¦ ĊĠĠĠĠĠĠĠ Ġcurrent Defect List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . entityId Ġ= ĠObjectId . get (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . new Defect Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . line UpdateTime Ġ= Ġ 1 0 0 0 Ġ* Ġit . line UpdateTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . status Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . status Ġ= ĠCom Constants . Defect Status . NEW . value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinal Defect List . addAll ( current Defect List ) ĊĠĠĠĠĠĠĠ Ġ// 2 . åĨį å¤ĦçĲĨ åİŁ æľīçļĦ åĳĬ èŃ¦ ĊĠĠĠĠĠĠĠ Ġpre Defect List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . new Defect Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . status Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . status Ġ= ĠCom Constants . Defect Status . NEW . value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinal Defect List . addAll ( pre Defect List ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfinal Defect List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcluster Method ( ĊĠĠĠĠĠĠĠ Ġinput Defect List : ĠList < Lint Defect V 2 Entity >, ĊĠĠĠĠĠĠĠ Ġmd 5 Same Map : ĠMutable Map < String , ĠBoolean > ĊĠĠĠ Ġ): ĠCopy On Write ArrayList < Aggregate Defect Output Model V 2 < Lint Defect V 2 Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcluster Commit Id Compare Process . cluster Method ( input Defect List , Ġmutable Map Of ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Defect File ( ĊĠĠĠĠĠĠĠ Ġcommit Defect VO : ĠCommit Defect VO , ĊĠĠĠĠĠĠĠ Ġaggregate Defect New Input Model : ĠAggregate Defect New Input Model < Lint Defect V 2 Entity >, ĊĠĠĠĠĠĠĠ Ġbuild Entity : ĠBuild Entity ?, ĊĠĠĠĠĠĠĠ Ġupsert Defect List : ĠList < Lint Defect V 2 Entity > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( commit Defect VO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbegin Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" begin Ġsave Defect File : ĠtaskId : {}, Ġtool Name : {}, Ġbuild Id :{} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtaskId , Ġtool Name , Ġbuild Entity !!. build Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Collection Utils . isNotEmpty ( upsert Defect List )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneed Generate Defect IdList : ĠMutable List < Lint Defect V 2 Entity ?> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupsert Defect List . forEach ( Consumer Ġ{ Ġdefect : ĠL int Defect V 2 Entity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefect . taskId Ġ= ĠtaskId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefect . tool Name Ġ= Ġtool Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefect . updated Date Ġ= Ġcur Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlint Filter Path Biz ServiceImpl . process Biz ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Path Input VO ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Defect New Input Model . white Paths , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Defect New Input Model . filter Paths , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( StringUtils . isEmpty ( def ect . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneed Generate Defect IdList . add ( def ect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ åĳĬ èŃ¦ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Collection Utils . isNotEmpty ( need Generate Defect IdList )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincrement Ġ= Ġneed Generate Defect IdList . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr Max Id : ĠLong Ġ= Ġdefect Id Generator . generate Defect Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtaskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtool Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincrement ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr Min Id Atom Ġ= ĠAtomic Long ( curr Max Id Ġ- Ġincrement Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneed Generate Defect IdList . forEach ( Consumer Ġ{ Ġdefect : ĠL int Defect V 2 Entity ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefect !!. id Ġ= Ġcurr Min Id Atom . get And Increment (). toString () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" save Ġdefect Ġtrace Ġresult : ĠtaskId : {}, Ġtool Name : {}, Ġbuild Id : {}, " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġdefect Count :{} ", ĠtaskId , Ġtool Name , Ġbuild Entity . build Id , Ġupsert Defect List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlint Defect V 2 Repository . save All ( upsert Defect List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" end Ġsave Defect File , Ġcost : {}, ĠtaskId : {}, Ġtool Name : {}, Ġbuild Id :{} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . currentTimeMillis () Ġ- Ġbegin Time , ĠtaskId , Ġtool Name , Ġbuild Entity . build Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Pre Defect List ( ĊĠĠĠĠĠĠĠ Ġdefect Cluster DTO : ĠDef ect Cluster DTO , ĊĠĠĠĠĠĠĠ Ġrel Path Set : ĠSet < String > ?, ĊĠĠĠĠĠĠĠ ĠfilePath Set : ĠSet < String >? ĊĠĠĠ Ġ): ĠList < Lint Defect V 2 Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtaskId Ġ= Ġdefect Cluster DTO . commit Defect VO . taskId ĊĠĠĠĠĠĠĠ Ġval Ġtool Name Ġ= Ġdefect Cluster DTO . commit Defect VO . tool Name ĊĠĠĠĠĠĠĠ Ġval Ġbuild Id Ġ= Ġdefect Cluster DTO . commit Defect VO . build Id ĊĠĠĠĠĠĠĠ Ġval Ġfinal Defect s Ġ= Ġmutable ListOf < Lint Defect V 2 Entity >() ĊĠĠĠĠĠĠĠ Ġval Ġtool Build Stack Ġ= Ġtool Build Stack Repository . findFirst By TaskId And Tool Name And Build Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtaskId , Ġtool Name , Ġbuild Id ) ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" commit Ġdefect Ġcomponent Ġget Pre Defect List : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ taskId Ġ$ tool Name Ġ$ build Id Ġ$ tool Build Stack ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æĸĩä»¶ éĽĨåĲĪ ä¸Ń å¢ŀ éĩı æĹ¶éĹ´ ä¹ĭåĲİ çļĦ åĳĬ èŃ¦ ĊĠĠĠĠĠĠĠ Ġif Ġ(! filePath Set . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Defect s . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlint Defect V 2 Repository . findBy TaskId And Tool Name And FilePath In And Line UpdateTime GreaterThan Equal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtaskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtool Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfilePath Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtool Build Stack ?. commit Since ?: 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! rel Path Set . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Defect s . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlint Defect V 2 Repository . findBy TaskId And Tool Name And Rel Path In And Line UpdateTime GreaterThan Equal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtaskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtool Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrel Path Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtool Build Stack ?. commit Since ?: 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfinal Defect s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Commit Id Defect Commit Component :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ