Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.12 KB | None | 0 0
  1. //ISUT-542 получение значений из класса/справочника по имени класса/справочника
  2. def getData(def requestData) {
  3.     if(!requestData?.className) {
  4.       "Не задан код справочника или класса".with{ utils.throwReadableException(it, null); }
  5.     }
  6.     logger.error(modules.common.gson(requestData))
  7.    
  8.     return modules.common.gson(findRecursive(requestData));
  9. }
  10.  
  11. //ISUT-542 метод для рекурсивного получения значений колонки
  12.  
  13. def findRecursive(def requestData) {
  14.   logger.error(modules.common.gson("sel cols "+requestData.selectColumns))
  15.   def selectAttrs = requestData.selectColumns ?: api.metainfo.getMetaClass(requestData.className).attributes*.code;
  16.   def queryColumns = requestData.queryColumns ?: [:];
  17.   utils.find(requestData.className, queryColumns).collect{ obj ->
  18.       selectAttrs.collectEntries { attr ->
  19.           expression: {            
  20.           //ISUT-542 проверка на . означает, что нужно идти дальше по атрибутам класса
  21.           if(attr.indexOf('.') > 0)
  22.           {
  23.             def keys = attr.split('\\.');
  24.             def attribute = api.metainfo.getMetaClass(requestData.className).getAttribute(keys[0]);
  25.             def relatedClass = api.metainfo.getMetaClass(attribute.type.relatedMetaClass.code);
  26.             def linkedQuery = relatedClass.attributes.collectEntries {
  27.                 it?.type?.relatedMetaClass?.code == requestData.className.split('\\$')[0]
  28.                     ? [(it.code) : obj?.UUID] : [:]
  29.             }
  30.             //ISUT-542 проверка на то, что количество колонок разделенных . больше 2, если больше, то по цепочке дальше передаем слитые через . колонки дальше в рекурсию. иначе берем просто колонку после . исходной строки
  31.             def joinedColumn = keys.size()-1 > 1 ? keys[1,keys.size()-1].join('.') : keys[1];  
  32.             def recursiveData = [className: attribute.type.relatedMetaClass.code, selectColumns: [joinedColumn], queryColumns: linkedQuery]
  33.             def tempObject = ["${attr}": findRecursive(recursiveData)]
  34.             return tempObject;
  35.           }
  36.           //ISUT-542 проверка на [ означает, что нужно вернуть набор колонок (а не стандартные значения атрибута)
  37.           else if(attr.indexOf('[') > 0)
  38.           {        
  39.             def keys = attr.split('\\[');
  40.             def attribute = api.metainfo.getMetaClass(requestData.className).getAttribute(keys[0]);
  41.             def relatedClass = api.metainfo.getMetaClass(attribute.type.relatedMetaClass.code);
  42.             def linkedQuery = relatedClass.attributes.collectEntries {
  43.                 it?.type?.relatedMetaClass?.code == requestData.className.split('\\$')[0]
  44.                     ? [(it.code) : obj?.UUID] : [:]
  45.             }
  46.             def columns = [];
  47.             def joinedColumn = keys[1].substring(keys[1].indexOf('[')+1, keys[1].indexOf(']'));            
  48.             //ISUT-542 проверка на , означает, что нужно вернуть несколько колонок
  49.             if(joinedColumn.indexOf(',') > 0 && keys.size()-1 <= 1)
  50.             {
  51.               columns = joinedColumn.split(',');
  52.             }
  53.             else
  54.             {
  55.               columns.push(joinedColumn);
  56.             }
  57.             def recursiveData = [className: attribute.type.relatedMetaClass.code, selectColumns: columns, queryColumns: linkedQuery]
  58.             def tempObject = ["${attr}": findRecursive(recursiveData)]
  59.             return tempObject
  60.           }
  61.           else
  62.             return ["${attr}": handleAttr(requestData.className, attr, obj."${attr}")];
  63.         }
  64.       }
  65.     }
  66. }
  67.  
  68. //ISUT-542 получение кодов колонок класса по имени класса
  69. def handleAttr(def className, attrName, def attr) {
  70.     def attrCode = api.metainfo.getMetaClass(className).getAttribute(attrName).type.code;
  71.     switch (attrCode) {
  72.       case ['object']:
  73.         return ['UUID': attr?.UUID, 'title': attr?.title];
  74.       case ['catalogItem']:
  75.         return ['UUID': attr?.UUID, 'code': attr?.code, 'title': attr?.title];
  76.       case ['secGroups']:
  77.         return ['UUID': attr?.code, 'title': attr?.title];
  78.       case ['catalogItemSet']:
  79.         def map = [];        
  80.         attr.each{at -> map.push(['UUID': at?.UUID, 'code': at?.code, 'title': at?.title])}
  81.         return map;
  82.       case ['secGroups', 'boLinks', 'backBOLinks']:
  83.         def map = [];        
  84.         attr.each{at -> map.push(['UUID': at?.UUID, 'title': at?.title])}
  85.         return map;
  86.       default:
  87.         return attr;
  88.     }
  89. }
  90.  
  91. def requestData=[className: 'ae$subSystem', selectColumns: [/*"infSysVer.verNumber", */"infSysVer.stages[dateFrom,devStage]", "metaClass", "title", "UUID"], queryColumns: ["title": "[552] Некая система, которая что-то делает"]]
  92. getData(requestData)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement