package Ġsample . use case . admin Ċ Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Qualifier Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . Platform Transaction Manager Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġsample . context . Domain Helper Ċ import Ġsample . context . audit . Audit Handler Ċ import Ġsample . context . lock . Id Lock Handler Ċ import Ġsample . context . lock . Lock Type Ċ import Ġsample . context . orm . Default Repository Ċ import Ġsample . model . asset . Cash InOut Ċ import Ġsample . model . asset . Cash flow Ċ import Ġsample . model . asset . Find Cash InOut Ċ import Ġsample . use case . Service Utils Ċ Ċ /** Ċ Ġ* Ġ è³ĩ çĶ £ ãĥī ãĥ¡ ãĤ¤ãĥ³ ãģ«å¯¾ ãģĻãĤĭ ç¤¾ åĨħ ãĥ ¦ ãĥ¼ãĤ¹ ãĤ± ãĥ¼ãĤ¹ åĩ¦çĲĨ ãĢĤ Ċ Ġ*/ Ċ @ Service Ċ class ĠAsset Admin Service ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdh : ĠDomain Helper , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrep : ĠDefault Repository , ĊĠĠĠĠĠĠĠ Ġ@ Qualifier ( Default Repository . Bean Name Tx ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtx m : ĠPlatform Transaction Manager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġaudit : ĠAudit Handler , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġid Lock : ĠId Lock Handler Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮ ¯ è¾¼ åħ¥ åĩº éĩĳ ä¾Ŀ éł ¼ ãĤĴ æ¤ ľç´¢ ãģĹãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* Ġlow : Ġ åı£ åº§ æ¨ ª æĸŃ çļĦãģª ãģ®ãģ§ åī² ãĤĬ åĪĩ ãĤĬ ãģ§ READ ãĥŃ ãĥĥãĤ¯ ãģ¯ ãģĭ ãģĳ ãģ¾ãģĽãĤĵ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transactional ( Default Repository . Bean Name Tx ) ĊĠĠĠ Ġfun Ġfind Cash InOut ( p : ĠFind Cash InOut ): ĠList < Cash InOut > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCash InOut . find ( rep , Ġp ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮ ¯ è¾¼ åĩº éĩĳ ä¾Ŀ éł ¼ ãĤĴ ç· ł ãĤģ ãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclosing Cash Out () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudit . audit (" æĮ ¯ è¾¼ åĩº éĩĳ ä¾Ŀ éł ¼ ãģ® ç· ł ãĤģ åĩ¦çĲĨ ãĤĴ ãģĻãĤĭ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠService Utils . tx ( tx m ) Ġ{ Ġclosing Cash Out In Tx () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclosing Cash Out In Tx () Ġ= ĊĠĠĠ Ġ// low : Ġä»¥ éĻį ãģ® åĩ¦çĲĨ ãģ¯ åı£ åº§ åįĺ ä½į ãģ§ filter æĿŁ ãģ Ń ãģĹãģ¦ ãģĭãĤī å®Łè¡Į ãģĻãĤĭ æĸ¹ ãģĮ æľĽ ãģ¾ ãģĹãģĦ ãĢĤ ĊĠĠĠ Ġ// low : Ġå¤§ éĩı ä»¶ æķ° ãģ® åĩ¦çĲĨ ãģĮ å¿ħè¦ģ ãģª æĻĤ ãģ¯ ãģĿãģ® ãģ¾ ãģ¾ ãĤĦ ãĤĭ ãģ¨ ãĥ Ĵ ãĥ¼ãĥĹ ãģĮ æŃ» ãģ ¬ ãģŁãĤģ ãĢģ id ãĤ½ ãĥ¼ãĥĪ ãģ§ ãĥļãĥ¼ãĤ¸ ãĥ³ãĤ° åĪĨ åī² ãģĹãģ¦ å·® åĪĨ å®Łè¡Į ãģĹãģ¦ãģĦ ãģı ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCash InOut . find Un processed ( rep ). forEach Ġ{ Ġc io Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// low : ĠTX åĨħ ãģ® ãĥŃ ãĥĥãĤ¯ ãģĮ éģ© åĪĩ ãģ« åĭķ ãģı ãģĭ ãģ¯ Id Lock Handler ãģ® å®Ł è£ħ æ¬¡ ç¬¬ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ èª¿ æķ´ ãģĮ éĽ £ ãģĹãģĦ ãĤĪãģĨ ãģª ãĤī å¤§ äºº ãģĹãģ ı åĸ ¶ æ¥Ń åģľæŃ¢ æĻĤéĸĵ ( Id Lock å¿ħè¦ģ ãģª åĩ¦çĲĨ ãģ® ãģ¿ éĿŀ æ´» æĢ§ åĮĸ ãģķãĤĮãģ¦ãģĦãĤĭ çĬ¶æħĭ ) ãĤĴ ä½ľ ãģ£ãģ¦ ãĢģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ń ãĥĥãĤ¯ çĦ¡ ãģĹãģ § ä¸Ģ æ° Ĺ ãģ« åĩ¦çĲĨ ãģĹãģ¦ ãģĹãģ¾ ãģĨ æĸ¹ ãģĮ ãĤ· ãĥ³ãĥĹ ãĥ« ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Lock . call ( c io . accountId , ĠLock Type . Write ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc io . process ( rep ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// low : ĠSQL ãģ® çĻº è¡Į æĭħ ä¿Ŀ ãĢĤ æī ± ãģĨ æĥħåł± ãģ« çĽ¸ äºĴ ä¾Ŀ åŃĺ ãģĮ çĦ¡ ãģı ãĢģ ãĤ» ãĥĥ ãĤ·ãĥ§ãĥ³ ãĤŃ ãĥ£ ãĥĥ ãĤ·ãĥ¥ ãģ¯ ãĥª ãĥ¼ãĤ¯ ãģĹãģ Į ãģ¡ ãģª ãģ®ãģ§ éĥ½ åº¦ æ¶Ī ãģĹãģ¦ ãģĬ ãģı ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrep . flush And Clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" [" Ġ+ Ġc io . id Ġ+ Ġ"] Ġ æĮ ¯ è¾¼ åĩº éĩĳ ä¾Ŀ éł ¼ ãģ® ç· ł ãĤģ åĩ¦çĲĨ ãģ« å¤± æķ Ĺ ãģĹãģ¾ãģĹãģŁ ãĢĤ ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc io . error ( rep ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrep . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// low : Ġ 2 éĩį éļľ å®³ ( æģ Ĳ ãĤī ãģı DB èµ· åĽł ) ãģª ãģ®ãģ§ logger ãģ® ãģ¿ ãģ® è¨ĺ è¼ ī ãģ« çķĻ ãĤģ ãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ Ń ãĥ£ ãĥĥ ãĤ·ãĥ¥ ãĥķ ãĥŃ ãĥ¼ãĤĴ å®Ł çı¾ ãģĹãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åıĹ æ¸ ¡ æĹ¥ ãĤĴ è¿İ ãģĪ ãģŁ ãĤŃ ãĥ£ ãĥĥ ãĤ·ãĥ¥ ãĥķ ãĥŃ ãĥ¼ãĤĴ æ® ĭ é«ĺ ãģ« åıį æĺł ãģĹãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrealize Cash flow () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudit . audit (" ãĤŃ ãĥ£ ãĥĥ ãĤ·ãĥ¥ ãĥķ ãĥŃ ãĥ¼ãĤĴ å®Ł çı¾ ãģĻãĤĭ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠService Utils . tx ( tx m ) Ġ{ Ġrealize Cash flow In Tx () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrealize Cash flow In Tx () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// low : Ġ æĹ¥ åĽŀ ãģĹ å¾Į ãģ® å®Łè¡Į ãĤĴ æĥ³ å®ļ ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġdh . time . day () ĊĠĠĠĠĠĠĠ ĠCash flow . find Do Real ize ( rep , Ġday ). forEach Ġ{ Ġcf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Lock . call ( cf . accountId , ĠLock Type . Write ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcf . real ize ( rep ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrep . flush And Clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" [" Ġ+ Ġcf . id Ġ+ Ġ"] ĠãĤ Ń ãĥ£ ãĥĥ ãĤ·ãĥ¥ ãĥķ ãĥŃ ãĥ¼ãģ® å®Ł çı¾ ãģ« å¤± æķ Ĺ ãģĹãģ¾ãģĹãģŁ ãĢĤ ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcf . error ( rep ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrep . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Asset Admin Service :: class . java ) !! ĊĠĠĠ Ġ} Ċ Ċ }