/** * 数据组织模型业务 */ import { Instance } from "noomi"; import { EntityConfig, EntityFactory, EntityManager, getEntityManager, Query } from "relaen"; import { AmOrgItem } from "../../dao/entity/base/amorgitem" import { AmOrgMode } from "../../dao/entity/base/amorgmode"; import { AmProperty } from "../../dao/entity/base/amproperty"; import { AmTarget } from "../../dao/entity/base/amtarget"; import { __AmDataConfig } from "./__amdataconfig"; @Instance() export class __AmOrgModeService{ public async getLevelData(){ return await AmOrgMode.findMany(); } /** * 获取条件列表 * @param * @returns 返回条件列表 */ public async getCondList(key:string,pageNo:number,pageSize:number){ let ka = key.split('|'); let param = {}; for(let i=0;i0 && pageSize>0){ start = (pageNo-1) * pageSize; } const em: EntityManager = await getEntityManager(); let orderBy = {}; orderBy[__AmDataConfig.cond.id] = 'desc'; let query: Query = em.createQuery(__AmDataConfig.cond.entity); const rows = await query.select(__AmDataConfig.cond.fields.slice(0)) .where(param) .orderBy(orderBy) .getResultList(start,pageSize); const enCfg: EntityConfig = EntityFactory.getEntityConfig(__AmDataConfig.cond.entity); const total = await (enCfg.entity as any).getCount(param); //关闭em await em.close(); return {total:total,rows:rows}; } /** * 获取数据 * @param dataEntity 数据实体 * @param condId 条件id */ public async getData(dataEntity,condId){ const entity = __AmDataConfig.cond.entity; const enCfg: EntityConfig = EntityFactory.getEntityConfig(dataEntity); let param = {}; param[entity.substring(0,1).toLowerCase() + entity.substring(1) + '.' + entity] = condId; return await (enCfg.entity as any).findMany(param); } /** * 获取条件树信息 * @param orgModeId 组织模式id * @returns {conds:条件数组,targets:研究对象数组} */ public async getCond(orgModeId){ const em: EntityManager = await getEntityManager(); let query: Query = em.createQuery(AmOrgItem.name); const rows = await query.select(['*','amOrgCond.*']) .where({ "amOrgMode.orgModeId":orgModeId }) .orderBy({orgItemId:"asc"}) .getResultList() as AmOrgItem[]; let fields = []; let levels = []; let retObj = {}; for(let r of rows){ //真实id let realId; let entity = r.amOrgCond.entity; // 获取对应外键主键 let prop:AmProperty = await AmProperty.findOne({'amModel.modelName':'Mdl' + entity,isId:1}); if(!prop){ throw entity + "不存在主键"; } realId = prop.propName; let o:any = Object.assign({},r.amOrgCond); o.idName = realId; levels.push(o); fields.push(r.amOrgCond.relName + '.' + r.amOrgCond.propName); fields.push(r.amOrgCond.relName + '.' + realId); //级联对象 if(r.amOrgCond.isCascade){ retObj[r.amOrgCond.entity] = await this.getCascade(r.amOrgCond.entity); } } query = em.createQuery(__AmDataConfig.cond.entity); //条件数据 const condDatas = await query.select(fields).distinct().getResultList(); await em.close(); retObj['conds'] = condDatas; retObj['levels'] = levels; return retObj; } /** * 获取级联数据 * @param entityName 实体名 * @returns 数据结果 */ private async getCascade(entityName){ let param = {}; param['amModel.refEntity'] = entityName; let props:AmProperty[] = await AmProperty.findMany(param); const idProp = props.find(item=>item.isId); const showProp = props.find(item=>item.showInRef); const fields = [idProp.propName,showProp.propName,'entityName','showName',entityName.substring(0,1).toLowerCase() + entityName.substring(1) + '.' + idProp.propName]; const em: EntityManager = await getEntityManager(); const query: Query = em.createQuery(AmTarget.name); const rows = await query.select(fields).getResultList(); await em.close(); return rows; } }