/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ċ Ġ* Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ċ Ġ* Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe Ċ Ġ* ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . devops . project . service . impl Ċ Ċ import Ġcom . tencent . devops . art ifactory . api . service . Service File Resource Ċ import Ġcom . tencent . devops . art ifactory . pojo . enums . File Channel TypeEnum Ċ import Ġcom . tencent . devops . common . api . exception . OperationException Ċ import Ġcom . tencent . devops . common . api . util . File Util Ċ import Ġcom . tencent . devops . common . api . util . UUID Util Ċ import Ġcom . tencent . devops . common . auth . api . pojo . Resource Register Info Ċ import Ġcom . tencent . devops . common . client . Client Ċ import Ġcom . tencent . devops . common . redis . Redis Operation Ċ import Ġcom . tencent . devops . common . service . gray . Gray Ċ import Ġcom . tencent . devops . common . service . utils . Common Utils Ċ import Ġcom . tencent . devops . common . service . utils . Message Code Util Ċ import Ġcom . tencent . devops . project . constant . Project Message Code Ċ import Ġcom . tencent . devops . project . dao . Project Dao Ċ import Ġcom . tencent . devops . project . dispatch . Project Dispatcher Ċ import Ġcom . tencent . devops . project . j mx . api . Project J mx Api Ċ import Ġcom . tencent . devops . project . j mx . api . Project J mx Api . Companion . PROJECT _ LIST Ċ import Ġcom . tencent . devops . project . pojo . Project CreateInfo Ċ import Ġcom . tencent . devops . project . pojo . Project Update Info Ċ import Ġcom . tencent . devops . project . pojo . Project VO Ċ import Ġcom . tencent . devops . project . pojo . Result Ċ import Ġcom . tencent . devops . project . pojo . enums . Project Validate Type Ċ import Ġcom . tencent . devops . project . pojo . mq . Project Create Broad Cast Event Ċ import Ġcom . tencent . devops . project . pojo . mq . Project Update Broad Cast Event Ċ import Ġcom . tencent . devops . project . pojo . mq . Project Update Logo Broad Cast Event Ċ import Ġcom . tencent . devops . project . pojo . user . User Dept Detail Ċ import Ġcom . tencent . devops . project . service . Project Permission Service Ċ import Ġcom . tencent . devops . project . service . Project Service Ċ import Ġcom . tencent . devops . project . util . Image Util Ċ import Ġcom . tencent . devops . project . util . Project Utils Ċ import Ġcom . tencent . devops . project . util . exception . Project NotExist Exception Ċ import Ġorg . glass fish . j ersey . media . multipart . FormData Content Disposition Ċ import Ġorg . jooq . DSL Context Ċ import Ġorg . jooq . impl . DSL Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . dao . Duplicate Key Exception Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . regex . Pattern Ċ Ċ abstract Ġclass ĠAbs Project ServiceImpl Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġproject Permission Service : ĠProject Permission Service , ĊĠĠĠ Ġprivate Ġval Ġd sl Context : ĠDSL Context , ĊĠĠĠ Ġprivate Ġval Ġproject Dao : ĠProject Dao , ĊĠĠĠ Ġprivate Ġval Ġproject J mx Api : ĠProject J mx Api , ĊĠĠĠ Ġprivate Ġval Ġredis Operation : ĠRedis Operation , ĊĠĠĠ Ġprivate Ġval Ġgray : ĠGray , ĊĠĠĠ Ġprivate Ġval Ġclient : ĠClient , ĊĠĠĠ Ġprivate Ġval Ġproject Dispatcher : ĠProject Dispatcher Ċ ) Ġ: ĠProject Service Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( validate Type : ĠProject Validate Type , Ġname : ĠString , ĠprojectId : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . NAME _ EMPTY )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( validate Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject Validate Type . project _ name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . length Ġ< Ġ 4 Ġ|| Ġname . length Ġ> Ġ 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . NAME _ TOO _ LONG )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project Dao . exist By ProjectName ( dsl Context , Ġname , ĠprojectId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . PROJECT _ NAME _ EXIST )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject Validate Type . english _ name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 Ġ~ Ġ 3 2 Ġä¸ª åŃĹç¬¦ + æķ°åŃĹ ï¼Į ä»¥ å°ı åĨĻ åŃĹ æ¯į å¼Ģ å¤´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . length Ġ< Ġ 2 Ġ|| Ġname . length Ġ> Ġ 3 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . EN _ NAME _ INTERVAL _ ERROR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Pattern . matches ( EN GL ISH _ NAME _ PATTERN , Ġname )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Project ĠEnglish ĠName ($ name ) Ġis Ġnot Ġmatch ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . EN _ NAME _ COMB INATION _ ERROR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project Dao . exist By English Name ( dsl Context , Ġname , ĠprojectId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . EN _ NAME _ EXIST )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º é¡¹çĽ® ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcreate ( userId : ĠString , Ġproject CreateInfo : ĠProject CreateInfo ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( Project Validate Type . project _ name , Ġproject CreateInfo . projectName ) ĊĠĠĠĠĠĠĠ Ġvalidate ( Project Validate Type . english _ name , Ġproject CreateInfo . english Name ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ éļıæľº çĶŁæĪĲ é¦ĸ åŃĹ æ¯į åĽ¾çīĩ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Char Ġ= Ġproject CreateInfo . english Name . substring ( 0 , Ġ 1 ). toUpperCase () ĊĠĠĠĠĠĠĠ Ġval Ġlogo File Ġ= ĠImage Util . drawImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Char , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWidth , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHeight ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¿ĿåŃĺ Logo æĸĩä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Url Prefix Ġ= Ġclient . getService Url ( Service File Resource :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . service Upload File ( userId , Ġservice Url Prefix , Ġlogo File , ĠFile Channel TypeEnum . WEB _ SHOW . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . isNot Ok ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ("${ result . status }:${ result . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogo Address Ġ= Ġresult . data !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æ³¨åĨĮ é¡¹çĽ® åĪ° æĿĥéĻĲ ä¸Ńå¿ĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Permission Service . create Resources ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaccessToken Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Register Info Ġ= ĠResource Register Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject CreateInfo . english Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject CreateInfo . projectName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" æĿĥéĻĲ ä¸Ńå¿ĥ åĪĽå»º é¡¹çĽ® ä¿¡æģ¯ ï¼ļ Ġ$ project CreateInfo ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . PEM _ CREATE _ FAIL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprojectId Ġ= ĠUUID Util . generate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Dept Detail Ġ= ĠUser Dept Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbg Name Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbg Id Ġ= Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Name Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Id Ġ= Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdept Name Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdept Id Ġ= Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgroupId Ġ= Ġ" 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgroupName Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . transaction Ġ{ Ġconfiguration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠDSL . using ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . create ( context , ĠuserId , Ġlogo Address , Ġproject CreateInfo , Ġuser Dept Detail , ĠprojectId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dispatcher . dispatch ( Project Create Broad Cast Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Info Ġ= Ġproject CreateInfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠDuplicate Key Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Duplicate Ġproject Ġ$ project CreateInfo ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . PROJECT _ NAME _ EXIST )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fail Ġto Ġcreate Ġthe Ġproject Ġ($ project CreateInfo )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġignored ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Permission Service . delete Resource ( project Code Ġ= Ġproject CreateInfo . english Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġignored ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠprojectId ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logo File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogo File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetBy English Name ( english Name : ĠString ): ĠProject VO ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= Ġproject Dao . getBy English Name ( dsl Context , Ġenglish Name ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠProject Utils . packaging Bean ( record , Ġgray Project Set ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( userId : ĠString , ĠprojectId : ĠString , Ġproject Update Info : ĠProject Update Info ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . transaction Ġ{ Ġconfiguration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠDSL . using ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . update ( context , ĠuserId , ĠprojectId , Ġproject Update Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Permission Service . modify Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Code Ġ= Ġproject Update Info . english Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectName Ġ= Ġproject Update Info . projectName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dispatcher . dispatch ( Project Update Broad Cast Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Info Ġ= Ġproject Update Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠDuplicate Key Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Duplicate Ġproject Ġ$ project Update Info ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . PROJECT _ NAME _ EXIST )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject J mx Api . execute ( Project J mx Api . PROJECT _ UPDATE , ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuccess ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æīĢæľī é¡¹çĽ® ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġlist ( userId : ĠString ): ĠList < Project VO > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprojects Ġ= Ġproject Permission Service . getUser Projects ( userId ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Project VO >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . list By English Name ( dsl Context , Ġprojects ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Project Utils . packaging Bean ( it , Ġgray Project Set ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject J mx Api . execute ( PROJECT _ LIST , ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" It Ġtook Ġ${ System . currentTimeMillis () Ġ- Ġstart Epoch } ms Ġto Ġlist Ġprojects ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist ( project Codes : ĠSet < String >): ĠList < Project VO > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Project VO >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgray Project Set Ġ= Ġgray Project Set () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . list By Codes ( dsl Context , Ġproject Codes ). filter Ġ{ Ġit . enabled Ġ== Ġnull Ġ|| Ġit . enabled Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Project Utils . packaging Bean ( it , Ġgray Project Set )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject J mx Api . execute ( PROJECT _ LIST , ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" It Ġtook Ġ${ System . currentTimeMillis () Ġ- Ġstart Epoch } ms Ġto Ġlist Ġprojects ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist Only By Project Code ( project Codes : ĠSet < String >): ĠList < Project VO > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Project VO >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgray Project Set Ġ= Ġgray Project Set () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . list By Codes ( dsl Context , Ġproject Codes ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Project Utils . packaging Bean ( it , Ġgray Project Set )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject J mx Api . execute ( PROJECT _ LIST , ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" It Ġtook Ġ${ System . currentTimeMillis () Ġ- Ġstart Epoch } ms Ġto Ġlist Ġprojects ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® æľī åºı project Code åĪĹè¡¨ èİ·åıĸ æľī åºı é¡¹çĽ® ä¿¡æģ¯ åĪĹè¡¨ ĊĠĠĠĠ Ġ* Ġä¸į è¿ĩæ»¤ å·² åĪłéĻ¤ é¡¹çĽ® ï¼Į è°ĥçĶ¨ ä¸ļåĬ¡ ç«¯ æł¹æį® enable è¿ĩæ»¤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġlist ( project Codes : ĠList < String >): ĠList < Project VO > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Project VO >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgray Project Set Ġ= Ġgray Project Set () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Codes . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤ļ æ¬¡ æŁ¥è¯¢ ä¿Ŀè¯ģ æľī åºı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Record Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . getBy English Name ( dsl Context , Ġit ) Ġ?: Ġthrow ĠProject NotExist Exception (" project Code =$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Project Utils . packaging Bean ( project Record , Ġgray Project Set )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject J mx Api . execute ( PROJECT _ LIST , ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" It Ġtook Ġ${ System . currentTimeMillis () Ġ- Ġstart Epoch } ms Ġto Ġlist Ġprojects ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetAll Project (): ĠList < Project VO > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Project VO >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . getAll Project ( dsl Context ). filter Ġ{ Ġit . enabled Ġ== Ġnull Ġ|| Ġit . enabled Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Project Utils . packaging Bean ( it , Ġempty Set ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject J mx Api . execute ( PROJECT _ LIST , ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" It Ġtook Ġ${ System . currentTimeMillis () Ġ- Ġstart Epoch } ms Ġto Ġlist Ġprojects ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ çĶ¨æĪ· å·² çļĦ åı¯ è®¿éĹ® é¡¹çĽ® åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Project ByUser ( userName : ĠString ): ĠList < Project VO > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject List Ġ= Ġproject Permission Service . getUser Projects Available ( userName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Project VO >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Codes Ġ= Ġproject List . map Ġ{ Ġit . key Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgray Project Set Ġ= Ġgray Project Set () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . list By Codes ( dsl Context , Ġproject Codes . toSet ()). filter Ġ{ Ġit . enabled Ġ== Ġnull Ġ|| Ġit . enabled Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Project Utils . packaging Bean ( it , Ġgray Project Set )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject J mx Api . execute ( PROJECT _ LIST , ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" It Ġtook Ġ${ System . currentTimeMillis () Ġ- Ġstart Epoch } ms Ġto Ġlist Ġprojects ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetName By Code ( project Codes : ĠString ): ĠHashMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġproject Dao . list By Codes ( dsl Context , Ġproject Codes . split ("," ). toSet ()). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( it . english Name , Ġit . projectName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgray Project Set () Ġ= Ġgray . gray Project Set ( redis Operation ) ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Logo ( ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ ĠprojectId : ĠString , ĊĠĠĠĠĠĠĠ ĠinputStream : ĠInputStream , ĊĠĠĠĠĠĠĠ Ġdis position : ĠFormData Content Disposition ĊĠĠĠ Ġ): ĠResult < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Update Ġthe Ġlogo Ġof Ġproject Ġ$ projectId ") ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject Dao . get ( dsl Context , ĠprojectId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( project Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlogo File : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogo File Ġ= ĠFile Util . convert TempFile ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Url Prefix Ġ= Ġclient . getService Url ( Service File Resource :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . service Upload File ( userId , Ġservice Url Prefix , Ġlogo File , ĠFile Channel TypeEnum . WEB _ SHOW . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . isNot Ok ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult ( result . status , Ġresult . message , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . transaction Ġ{ Ġconfiguration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠDSL . using ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao . update Logo Address ( context , ĠuserId , ĠprojectId , Ġresult . data !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dispatcher . dispatch ( Project Update Logo Broad Cast Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogo Addr Ġ= Ġresult . data !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" fail Ġupdate Ġproject Logo ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . UPDATE _ LOG O _ FAIL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogo File ?. delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ("$ project Ġis Ġnull Ġor Ġ$ project Ġis Ġempty ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠOperation Exception ( Message Code Util . getCode Lan Message ( Project Message Code . QUERY _ PROJECT _ FAIL )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResult ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠWidth Ġ= Ġ 1 2 8 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠHeight Ġ= Ġ 1 2 8 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Abs Project ServiceImpl :: class . java ) !! ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEN GL ISH _ NAME _ PATTERN Ġ= Ġ"[ a - z ][ a - zA - Z 0 - 9 ] +" ĊĠĠĠ Ġ} Ċ } Ċ