package Ġcom . on eli ang . k tx . frame . script Ċ Ċ import Ġcom . on eli ang . k tx . Constants Ċ import Ġcom . on eli ang . k tx . frame . script . engine . Function Engine Manager Ċ import Ġcom . on eli ang . k tx . util . common . matches Ċ import Ġcom . on eli ang . k tx . util . common . null To Blank Ċ import Ġcom . on eli ang . k tx . util . common . toDouble S af ely Ċ import Ġcom . on eli ang . k tx . util . common . to Key List And Map Ċ import Ġcom . on eli ang . k tx . util . json . toJson Ċ import Ġcom . on eli ang . k tx . util . logging . Logger Manager Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ import Ġkotlin . collections . component 1 Ċ import Ġkotlin . collections . component 2 Ċ import Ġkotlin . collections . set Ċ import Ġkotlin . math . abs Ċ Ċ class ĠFunction Executor ( ĊĠĠĠ Ġprivate Ġval Ġengine Name : ĠFunction Engine Manager . Engine Name Ġ= ĠFunction Engine Manager . Engine Name . JS , ĊĠĠĠ Ġprivate Ġval Ġclass Loader : ĠClassLoader ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger Manager . getLogger ( Function Executor :: class ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCODE _ TYPE _ ST ABLE Ġ= Ġ" ST ABLE " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCODE _ TYPE _ FUNCTION Ġ= Ġ" FUNCTION " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRETURN _ SUFFIX Ġ= Ġ"_ RESULT " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfunction Engine Manager Ġ= ĠFunction Engine Manager () ĊĠĠĠ Ġprivate Ġval Ġfunction Engine Ġ= Ġfunction Engine Manager . get Engine ByName ( this . engine Name , Ġthis . class Loader ) ĊĠĠĠ Ġprivate Ġval Ġall Function Item Map Ġ= ĠConcurrent HashMap < String , ĠFunction Item >() ĊĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġval Ġall Function ItemList Ġ= ĠCopy On Write ArrayList < Function Item >() ĊĠĠĠ Ġprivate Ġval Ġupdate Lock Ġ= ĠRe entrant Lock () ĊĊĠĠĠ Ġfun Ġupdate Function Item ListOf Engine ( function ItemList : ĠList < Function Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . update Lock . lock () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Function ItemList Ġ= Ġfunction ItemList . sorted By Ġ{ Ġit . order Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . all Function Item Map . clear () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthis . all Function ItemList . addAll ( sorted Function ItemList ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction ItemList . forEach Ġ{ Ġfunction Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . all Function Item Map [ function Item . code ] Ġ= Ġfunction Item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . function Engine . eval ( function Item . script ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . update Lock . unlock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfix Code ( code : ĠString , Ġexecute Times : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( execute Times Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+ ĠConstants . Symbol . UNDER LINE Ġ+ Ġexecute Times ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute ( ĊĠĠĠĠĠĠĠ Ġinput Map : ĠMap < String , ĠString >, ĊĠĠĠĠĠĠĠ Ġstable Value Input Map : ĠMap < String , ĠString > Ġ= Ġempty Map (), ĊĠĠĠĠĠĠĠ Ġtotal ResultCode : ĠString Ġ= ĠConstants . String . BLANK ,// no Ġtotal Ġresult ĊĠĠĠĠĠĠĠ Ġdefault Execute Function Item Code List : ĠList < Execute Function Item Code >, // execute Ġlist ĊĠĠĠĠĠĠĠ Ġother Condition Execute Function Item Code List Map : ĠMap < Map < String , ĠString >, ĠList < Execute Function Item Code >> Ġ= Ġempty Map (), ĊĠĠĠĠĠĠĠ Ġstable Value Code Type : ĠString Ġ= ĠCODE _ TYPE _ ST ABLE , ĊĠĠĠĠĠĠĠ Ġfunction ResultCode : ĠString Ġ= ĠCODE _ TYPE _ FUNCTION , ĊĠĠĠĠĠĠĠ Ġcheck Function Result Item : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġoriginal Function Result Map : ĠMap < String , ĠString > Ġ= Ġempty Map (), ĊĠĠĠĠĠĠĠ Ġoptimize Result Processor : Ġ( result Value : ĠDouble ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} ĊĠĠĠ Ġ): ĠFunction Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall Function Item Map Ġ= Ġthis . all Function Item Map ĊĠĠĠĠĠĠĠ Ġif Ġ( all Function Item Map . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Please Ġupdate Ġfunction Ġitem Ġlist Ġfirst , Ġfunction Ġitem Ġis Ġempty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfunction Result Item Map Ġ= Ġmutable Map Of < String , ĠFunction Result Item >() ĊĠĠĠĠĠĠĠ Ġ// mapping Ġfunction Ġresult Ġwithout Ġinitialize Ġfunction Ġtype ĊĠĠĠĠĠĠĠ Ġval Ġfunction Result Item Mapping Map Ġ= Ġmutable Map Of < String , ĠFunction Result Item >() ĊĠĠĠĠĠĠĠ Ġval Ġfunction Result List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġstable Value Ġ= Ġ 0 . 0 // åĽºå®ļ åĢ¼ æ±Ĥ åĴĮ ĊĠĠĠĠĠĠĠ Ġ// stable Ġvalue ĊĠĠĠĠĠĠĠ Ġstable Value Input Map . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Code Ġ= Ġit . key Ġ+ ĠRETURN _ SUFFIX ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Function Result Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! original Function Result Map . containsKey ( return Code )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" check Ġstable Ġvalue Ġinput Ġdata Ġerror , Ġmiss Ġreturn Code :% s ", Ġreturn Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFunction Result ( false , Ġempty Map (), Ġfunction Result Item Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Function Result Ġ= Ġoriginal Function Result Map [ return Code ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġoriginal Function Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" check Ġstable Ġvalue Ġinput Ġdata Ġerror , Ġreturn Code :% s , Ġresult :% s , Ġoriginal Ġfunction Ġresult :% s ", Ġreturn Code , Ġresult , Ġoriginal Function Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFunction Result ( false , Ġempty Map (), Ġfunction Result Item Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Stable :% s , Ġresult :% s ", Ġreturn Code , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstable Value Ġ+= Ġresult . toDouble S af ely () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Result Item Ġ= ĠFunction Result Item ( name Ġ= Ġreturn Code , Ġcode Ġ= Ġreturn Code , Ġoriginal Code Ġ= Ġreturn Code , Ġvalue Ġ= Ġresult , Ġcode Type Ġ= Ġstable Value Code Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Result Item Map [ return Code ] Ġ= Ġfunction Result Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Result Item Mapping Map [ return Code ] Ġ= Ġfunction Result Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// function Ġinput Ġdata Ġinitialize ĊĠĠĠĠĠĠĠ Ġval Ġoptimize Input Map Ġ= Ġinput Map . to Mutable Map () ĊĠĠĠĠĠĠĠ Ġval Ġsupport Total Result Ġ= Ġtotal ResultCode . isNotBlank () ĊĠĠĠĠĠĠĠ Ġvar Ġfunction Result Total Value Ġ= Ġ 0 . 0 // åĩ½æķ° åĢ¼ æ±Ĥ åĴĮ ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Function Result Item Ġ= ĠFunction Result Item () ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Result Value Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( support Total Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// initialize Ġtotal Ġfunction Ġresult Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Function Result Item Ġ= ĠFunction Result Item ( name Ġ= Ġtotal ResultCode , Ġcode Ġ= Ġtotal ResultCode , Ġoriginal Code Ġ= Ġtotal ResultCode , Ġvalue Ġ= ĠConstants . String . ZERO , Ġcode Type Ġ= Ġfunction ResultCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Result Item Map [ total ResultCode ] Ġ= Ġtotal Function Result Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Result Item Mapping Map [ total ResultCode ] Ġ= Ġtotal Function Result Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( default Execute Function Item Code List . isEmpty () Ġ&& Ġother Condition Execute Function Item Code List Map . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warning (" default Ġfunction Ġitem Ġcode Ġmapping Ġand Ġother Ġcondition Ġfunction Ġitem Ġcode Ġmapping Ġmap Ġare Ġempty ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexecute Function Item Code List Ġ= Ġdefault Execute Function Item Code List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġmatches Ġother Ġcondition , Ġreplace Ġthe Ġfunction Ġitem Ġcode Ġmapping ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( condition Map , Ġcode Mapping ) Ġin Ġother Condition Execute Function Item Code List Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input Map . matches ( condition Map )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Function Item Code List Ġ= Ġcode Mapping ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( execute Function Item Code List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warning (" function Ġitem Ġcode Ġlist Ġis Ġempty ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( execute Code List , Ġfunction Item Code Mapping ) Ġ= Ġexecute Function Item Code List . to Key List And Map ({ Ġit . code Ġ}, Ġ{ Ġit . code Ġ}, Ġ{ Ġit . category Code Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Execute Times Ġ= Ġmutable Map Of < String , ĠInt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// execute Ġfunction Ġprocess Ġand Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Code List . forEach Ġ{ Ġfunction Item Code Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Item Ġ= Ġall Function Item Map [ function Item Code ] Ġ?: Ġerror (" Function Ġdoes Ġnot Ġexist , Ġplease Ġcheck Ġit , Ġcode :$ function Item Code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexecute Times Before Execute Ġ= Ġcode Execute Times [ function Item Code ] Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// update Ġexecute Ġtimes Ġafter Ġget ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Execute Times [ function Item Code ] Ġ= Ġexecute Times Before Execute Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction ItemType Ġ= Ġfunction Item . function Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( input Json , Ġresult ) Ġ= Ġwhen Ġ( function Item . parameter Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Item . ParameterType . JSON _ OBJECT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Json Ġ= Ġoptimize Input Map . toJson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Json Ġto Ġthis . function Engine . invoke Function ( function Item Code , Ġinput Json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Item . ParameterType . STRING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Input List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter List Ġ= Ġfunction Item . parameter . split ( Constants . Symbol . COMMA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter List . forEach Ġparameter List @{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Key Ġ= Ġit . trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameter Key . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Function :% s Ġhas Ġblank Ġparameter , Ġplease Ġcheck Ġand Ġconfirm Ġit ", Ġfunction Item Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ parameter List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// fix Ġcode Ġonly Ġfor Ġfunction Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfix Parameter Key Ġ= Ġfix Code ( parameter Key , Ġexecute Times Before Execute ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptimize Input Map . containsKey ( parameter Key ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Input List . add ( optimize Input Map . getValue ( parameter Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstable Value Input Map . containsKey ( parameter Key ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Input List . add ( stable Value Input Map . getValue ( parameter Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Result Item Map . containsKey ( fix Parameter Key ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfunction Result Item Map [ fix Parameter Key ] !!. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Input List . add ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠConstants . String . BLANK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptimize Input Map [ parameter Key ] Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Input List . add ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlogger . error (" Function :% s Ġerror , Ġ% s Ġnot Ġfound ", Ġfunction Item Code , Ġparameter Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Type Array Ġ= Ġfunction Input List . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Json Ġ= Ġinput Type Array . toJson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Json Ġto Ġthis . function Engine . invoke Function ( function Item Code , Ġ*( input Type Array )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( fix Value , Ġresult String ) Ġ= Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠConstants . String . NULL Ġto ĠConstants . String . NULL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptimize Input Map [ key ?. toString (). null To Blank ()] Ġ= Ġvalue ?. toString (). null To Blank () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . String . BLANK Ġto Ġresult . toJson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġresult . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġto Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Function :% s (% s ), result :% s , Ġ% s ", Ġfunction Item . name , Ġfunction Item Code , Ġresult String , Ġinput Json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfix Input Json Ġ= Ġif Ġ( function Item . parameter Type Ġ== ĠFunction Item . ParameterType . JSON _ OBJECT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . String . BLANK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Json ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Function Return Code Ġ= Ġfunction Item . return Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfix Function Return Code Ġ= Ġfix Code ( function Item . return Code , Ġexecute Times Before Execute ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Result Item Map [ fix Function Return Code ] Ġ= ĠFunction Result Item ( name Ġ= Ġfunction Item . name , Ġcode Ġ= Ġfix Function Return Code , Ġoriginal Code Ġ= Ġoriginal Function Return Code , Ġinput Json Ġ= Ġfix Input Json , Ġvalue Ġ= Ġfix Value , Ġcode Type Ġ= Ġfunction ResultCode ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function ItemType Ġ!= ĠFunction Item . FunctionType . RESULT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach // continue , Ġno Ġneed Ġto Ġsave ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// map Ġquote Ġfunction Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function Item Code Mapping . containsKey ( function Item Code )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Return Code Mapping Ġ= Ġfunction Item Code Mapping [ function Item Code ]. null To Blank () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function Return Code Mapping . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Result Value Ġ= Ġfix Value . toDouble S af ely () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Result Item Ġ= Ġfunction Result Item Mapping Map . get Or Put ( function Return Code Mapping ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Result Item ( name Ġ= Ġfunction Return Code Mapping , Ġcode Ġ= Ġfunction Return Code Mapping , Ġoriginal Code Ġ= Ġfunction Return Code Mapping , Ġvalue Ġ= ĠConstants . String . ZERO , Ġcode Type Ġ= Ġfunction ResultCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Function Result Item Value Ġ= Ġfunction Result Item . value . toDouble S af ely () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Result Item . value Ġ= Ġ"% . 2 f ". format ( original Function Result Item Value Ġ+ Ġfunction Result Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error , Ġresult Ġis Ġnull , Ġdid Ġyou Ġforget Ġthe Ġkeyword Ġ' return '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFunction Result ( false , Ġoptimize Input Map , Ġfunction Result Item Map , Ġfunction Result Item Mapping Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// double Ġcheck Ġthe Ġif Ġlogic , Ġmaybe Ġunused ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function ItemType Ġ== ĠFunction Item . FunctionType . RESULT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Result Total Value Ġ+= Ġresult . toString (). toDouble S af ely () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// update Ġthe Ġtotal Ġresult Ġin Ġprocess ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( support Total Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Result Value Ġ= Ġstable Value Ġ+ Ġfunction Result Total Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Total Function Result Item Ġ= Ġfunction Result Item Map [ total ResultCode ] Ġ?: Ġerror (" it Ġis Ġimpossible , Ġmaybe Ġlogic Ġerror , Ġsupport Total Result :% s ". format ( support Total Result )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Total Function Result Item . value Ġ= Ġtotal Result Value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Function Result Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! original Function Result Map . containsKey ( fix Function Return Code )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Check Ġoriginal Ġfunction Ġresult Ġerror , Ġmiss Ġfunction Return Code :$ fix Function Return Code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFunction Result ( false , Ġoptimize Input Map , Ġfunction Result Item Map , Ġfunction Result Item Mapping Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Function Result Ġ= Ġoriginal Function Result Map [ fix Function Return Code ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . toString () Ġ!= Ġoriginal Function Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Check Ġoriginal Ġfunction Ġresult Ġerror , Ġfunction Return Code :$ fix Function Return Code , Ġ( result )/( original Function Result ): ($ result )/ ($ original Function Result )") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFunction Result ( false , Ġfunction Result Item Map , Ġfunction Result Item Mapping Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// maybe Ġno Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! support Total Result ) Ġ{// no Ġtotal Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFunction Result ( true , Ġoptimize Input Map , Ġfunction Result Item Map , Ġfunction Result Item Mapping Map ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{// replace Ġagain , Ġthrough Ġit Ġis Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Result Value Ġ= Ġstable Value Ġ+ Ġfunction Result Total Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Result Value Ġ= Ġoriginal Function Result Map [" ${ total ResultCode }$ RETURN _ SUFFIX "] ?. toDouble () Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġfix Total Result Value Ġ= Ġif Ġ( total Result Value . isNaN ()) Ġ 0 . 0 Ġelse Ġtotal Result Value ĊĠĠĠĠĠĠĠ Ġval Ġoptimize Result Ġ= Ġoptimize Result Processor ( fix Total Result Value ) ĊĠĠĠĠĠĠĠ Ġlogger . info (" Stable Ġvalue :% s , Ġfunction Ġresult Ġtotal Ġvalue :% s ", Ġstable Value , Ġfunction Result Total Value ) ĊĠĠĠĠĠĠĠ Ġif Ġ( support Total Result ) Ġ{// update Ġtotal Ġfunction Ġresult Ġitem Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Total Function Result Item Ġ= Ġfunction Result Item Map [ total ResultCode ] Ġ?: Ġerror (" it Ġis Ġimpossible , Ġmaybe Ġlogic Ġerror , Ġsupport Total Result :% s ". format ( support Total Result )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Total Function Result Item . value Ġ= Ġoptimize Result ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġabs ( fix Total Result Value Ġ- Ġoriginal Result Value ) Ġ< Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġlogger . info (" Total Ġresult Ġvalue :% . 2 f , Ġfix Ġtotal Ġresult Ġvalue :% s , Ġoptimize Ġresult :% s , Ġoriginal Ġresult :% s , Ġmatch :% s ". format ( total Result Value , Ġfix Total Result Value , Ġoptimize Result , Ġoriginal Result Value , Ġmatch )) ĊĠĠĠĠĠĠĠ Ġif Ġ( check Function Result Item Ġ&& Ġ! match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFunction Result ( false , Ġoptimize Input Map , Ġfunction Result Item Map , Ġfunction Result Item Mapping Map , Ġtotal Function Result Item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠFunction Result ( true , Ġoptimize Input Map , Ġfunction Result Item Map , Ġfunction Result Item Mapping Map , Ġtotal Function Result Item ) ĊĠĠĠ Ġ} Ċ } Ċ