import { HttpRequest, Inject, Instance } from "noomi"; import { EntityConfig, EntityFactory } from "relaen"; import { AmDataImport } from "../../dao/entity/base/amdataimport"; import { AmFile } from "../../dao/entity/base/amfile"; import { AmImportTemplate } from "../../dao/entity/base/amimporttemplate"; import { AmImportRes } from "../../dao/entity/base/amimportres"; import { AmUser } from "../../dao/entity/base/amuser"; import { __BaseService } from "../__base/__baseservice"; import { __AmDataConfig } from "./__amdataconfig"; import { NFEngine } from "noomiflow"; import { __UserService } from "../__base/__userservice"; import { __Util } from "../__base/__util"; import { AmFlowService } from "../__base/__flowservice"; /** * 数据导入业务类 */ @Instance() export class __AmImportService extends __BaseService { @Inject(AmFlowService) flowService:AmFlowService; async parse(model) { //数据文件 const file: AmFile = await AmFile.find(model.fileId); //模版 const temp: AmImportTemplate = ( await AmImportTemplate.find(model.importTemplateId) ); const tempFile: AmFile = await temp.getAmHandleFile(); //获取解析类 try { const parser = require(tempFile.savePath); //得到解析结果 let result = parser(file.savePath); return {success:true,result:result}; } catch (e) { return {success:false,result:e} } } /** * * @param model * dataTypeId 数据类型编号,通过此id找到待存入的数据实体 * conditions {entity:条件实体名,conds:条件对象} * datas 数据属组 * other 批次信息,datatypeid,条件实体名 */ async saveData(request: HttpRequest, model) { const data = JSON.parse(model.data); //保存批次 let imp = new AmDataImport(); imp.publishType = data.other.publishType; imp.importTime = new Date().getTime(); imp.remarks = data.other.remarks; imp.enabled = 0; imp.amImportTemplate = new AmImportTemplate(data.conditions.conds.amImportTemplate.importTemplateId); //添加用户 let logInfo = await __Util.getLogonUser(request); if (logInfo) { imp.amUser = new AmUser(logInfo.userId); } imp = await imp.save(); //保存条件 let cfg:EntityConfig = EntityFactory.getEntityConfig(__AmDataConfig.cond.entity); data.conditions.conds.amDataImport = imp; const cond = await super.save(request, data.conditions.conds, cfg); //保存状态 const condName = __AmDataConfig.cond.entity.substring(0,1).toLowerCase() + __AmDataConfig.cond.entity.substring(1); let statusMap = new Map(); for(let st of data.datas.status){ st[condName] = cond; //对应表 const table = st.table; delete st.table; //状态id const id = st.id; delete st.id; cfg = EntityFactory.getEntityConfig(table); if(!cfg){ continue; } const status = await super.save(request,st,cfg); statusMap.set(id,{entity:table,data:status}); } //保存数据 for (let d of data.datas.datas) { //确定数据表名 if(!statusMap.has(d.id)){ continue; } const stObj = statusMap.get(d.id); const name = stObj.entity[0].toLowerCase() + stObj.entity.substring(1); //设置状态 d[name] = stObj.data; cfg = EntityFactory.getEntityConfig(d.table); //删除状态表 delete d.table; await super.save(request, d, cfg); } //保存资源文件 if(data.other.resFile){ for(let f of data.other.resFile){ let res = new AmImportRes(); res.amDataImport = imp; res.amFile = new AmFile(f.fileId); await res.save(); } } await this.flowService.doAsk(request,{ processName:'数据导入', condId:cond[__AmDataConfig.cond.id] }); return true; } }