package Ġsample . use case Ċ Ċ import Ġorg . springframework . beans . factory . annotation . Qualifier Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . Platform Transaction Manager Ċ import Ġsample . context . Domain Helper Ċ import Ġsample . context . actor . Actor Ċ 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 . Business Day Handler Ċ import Ġsample . model . asset . Cash InOut Ċ import Ġsample . model . asset . Reg Cash Out Ċ import Ġsample . use case . mail . Service Mail Deliver ĊĊ Ċ /** Ċ Ġ* Ġ è³ĩ çĶ £ ãĥī ãĥ¡ ãĤ¤ãĥ³ ãģ«å¯¾ ãģĻãĤĭ é¡ § å®¢ ãĥ ¦ ãĥ¼ãĤ¹ ãĤ± ãĥ¼ãĤ¹ åĩ¦çĲĨ ãĢĤ Ċ Ġ*/ Ċ @ Service Ċ class ĠAsset 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 , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbusiness Day : ĠBusiness Day Handler , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmail : ĠService Mail Deliver Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** Ġ åĮ ¿ åĲį ãĤĴ éĻ¤ ãģı Actor ãĤĴ è¿Ķ ãģĹãģ¾ãģĻ ãĢĤ Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġactor (): ĠActor Ġ= ĠService Utils . actor User ( dh ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľª åĩ¦çĲĨ ãģ® æĮ ¯ è¾¼ ä¾Ŀ éł ¼ æĥħåł± ãĤĴ æ¤ ľç´¢ ãģĹãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* Ġlow : Ġ åıĤçħ§ ç³» ãģ¯ åı£ åº§ ãĥŃ ãĥĥãĤ¯ ãģĮ å¿ħè¦ģ çĦ¡ ãģĦ ãĤ± ãĥ¼ãĤ¹ ãģ§ ãģĤ ãĤĮãģ° @ Transactional ãģ§ ãĤĤ åįģ åĪĨ ĊĠĠĠĠ Ġ* Ġlow : ĠCash InOut ãģ¯ æĥħåł± éģİ å¤ļ ãģ§ãģĻ ãģĮ ãĤ¢ãĥĹãĥªãĤ±ãĥ¼ãĤ·ãĥ§ãĥ³ å± ¤ ãģ§ãģ¯ åħ¬ éĸĭ å¯¾è±¡ ãĤĴ çī¹å®ļ ãģĹ ãģ« ãģı ãģĦ äºĭ ãĤĤ ãģĤãĤĬ ãĢģ ĊĠĠĠĠ Ġ* ĠUI å± ¤ ãģ« æľĢ çµĤ åĪ¤æĸŃ ãĤĴ å§Ķ ãģ Ń ãģ¦ãģĦãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Un processed Cash Out (): ĠList < Cash InOut > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Lock . call ( actor (). id , ĠLock Type . Read ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠService Utils . tx ( tx m ) Ġ{ ĠCash InOut . find Un processed ( rep , Ġactor (). id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮ ¯ è¾¼ åĩº éĩĳ ä¾Ŀ éł ¼ ãĤĴ ãģĹãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* Ġlow : Ġ åħ¬ éĸĭ ãĥª ãĤ¹ãĤ¯ ãģĮãģĤãĤĭ ãģŁãĤģ UI å± ¤ ãģ«ãģ¯ å¿ħè¦ģ ä»¥ä¸Ĭ ãģ® æĥħåł± ãĤĴ è¿Ķ ãģķ ãģªãģĦ äºĭ ãĤĴ æĦı èŃ ĺ ãģĹãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* Ġlow : Ġ çĽ £ æŁ » ãĥŃãĤ° ãģ® è¨ĺ éĮ² ãģ¯ çĬ¶æħĭ ãĤĴ å¤ī ãģĪ ãģĨ ãĤĭ æĽ´æĸ° ç³» ãĥ ¦ ãĥ¼ãĤ¹ ãĤ± ãĥ¼ãĤ¹ ãģ§ ãģ® ãģ¿ è¡Į ãģĦ ãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* Ġlow : Ġãĥ Ń ãĥ¼ãĥ« ãĥĲ ãĥĥãĤ¯ çĻº çĶŁ æĻĤ ãģ« ãĥ¡ ãĥ¼ãĥ« ãģĮ é£ Ľ ãģ° ãģªãģĦ ãĤĪãģĨãģ« ãĥĪ ãĥ© ãĥ³ ãĤ¶ ãĤ¯ ãĤ·ãĥ§ãĥ³ å¢ĥ çķĮ ç· ļ ãĤĴ æĺİ ç¢º ãģ« åĪĨ éĽ ¢ ãģĹãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ return Ġ æĮ ¯ è¾¼ åĩº éĩĳ ä¾Ŀ éł ¼ ID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwithdraw ( p : ĠReg Cash Out ): ĠLong Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudit . audit (" æĮ ¯ è¾¼ åĩº éĩĳ ä¾Ŀ éł ¼ ãĤĴ ãģĹãģ¾ãģĻ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġacc Id Ġ= Ġactor (). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Param Ġ= Ġp . copy ( accountId Ġ= Ġacc Id ) Ġ// Ġ é¡ § å®¢ åģ ´ ãģ¯ ãĥŃãĤ° ãĤ¤ãĥ³ åĪ©çĶ¨ èĢħ ãģ§ å¼ · åĪ¶ ä¸Ĭ æĽ¸ ãģį ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlow : Ġ åı£ åº§ ID ãĥŃ ãĥĥãĤ¯ ( WRITE ) ãģ¨ ãĥĪ ãĥ© ãĥ³ ãĤ¶ ãĤ¯ ãĤ·ãĥ§ãĥ³ ãĤĴ ãģĭ ãģĳ ãģ¦ æĮ ¯ è¾¼ åĩ¦çĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc io Ġ= Ġid Lock . call ( acc Id , ĠLock Type . Read ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠService Utils . tx ( tx m ) Ġ{ ĠCash InOut . withdraw ( rep , Ġbusiness Day , Ġmy Param ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlow : Ġ ãĥĪ ãĥ© ãĥ³ ãĤ¶ ãĤ¯ ãĤ·ãĥ§ãĥ³ ç¢º å®ļ å¾Į ãģ« åĩº éĩĳ ä¾Ŀ éł ¼ ãĤĴ åıĹ ä»ĺ ãģĹãģŁ äºĭ ãĤĴ ãĥ¡ ãĥ¼ãĥ« éĢļçŁ¥ ãģĹãģ¾ãģĻ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmail . send Withdraw al ( c io ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc io . id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ }