import com.groupstp.rtneo.util.JsonUtil;
//Если есть сохраненные данные, используем их
def rootContractData = loadContractData(contract)
if(rootContractData != null){
return rootContractData
}
//Сохраняем полученные данные
saveContractData(root, contract)
/**/
private void saveContractData(def data, Contract contract){
ContractData cdata = metadata.create(ContractData.class)
JsonUtil jsonUtil = AppBeans.get(JsonUtil.NAME)
String json;
try{
json = jsonUtil.toJson(data)
}
catch(Exception e){log("LOG.ERROR: JSON object serialization failed")}
cdata.setJsonData(json)
cdata.setContract(contract)
dataManager.commit(cdata)
contract.setContractData(cdata)
dataManager.commit(contract)
}
private def loadContractData(Contract contract){
JsonUtil jsonUtil = AppBeans.get(JsonUtil.NAME)
ContractData cdata = dataManager.load(ContractData.class)
.query('select c from rtneo$ContractData c where c.contract.id = :contract')
.parameter("contract", contract.getId())
.view("_local")
.optional()
.orElse(null);
if(cdata == null)return null
//Если версия контракта изменилась, удаляем данные контракта
if(contract.getVersion() != cdata.contract.getVersion()){
dataManager.remove(cdata)
return null
}
String json;
try{
json = cdata.getJsonData();
}catch(Exception e){}
def arr = jsonUtil.fromJson(json, ArrayList.class)
return arr;
}