// 基于 @CONTROL/表单/SERVICE.ts.ftl 生成 import { Http,Util,Errorlog } from '@/utils'; import ControlService from '@/widgets/control-service'; import IBIZHardwareService from '@/service/ibizhardware/ibizhardware-service'; import MainModel from './main-form-model'; /** * Main 部件服务对象 * * @export * @class MainService */ export default class MainService extends ControlService { /** * 硬件服务对象 * * @type {IBIZHardwareService} * @memberof MainService */ public appEntityService: IBIZHardwareService = new IBIZHardwareService(); /** * 设置从数据模式 * * @type {boolean} * @memberof MainService */ public setTempMode(){ this.isTempMode = false; } /** * Creates an instance of MainService. * * @param {*} [opts={}] * @memberof MainService */ constructor(opts: any = {}) { super(opts); this.model = new MainModel(); } /** * 远端数据 * * @type {*} * @memberof MainService */ private remoteCopyData:any = {}; /** * 处理数据 * * @private * @param {Promise<any>} promise * @returns {Promise<any>} * @memberof MainService */ private doItems(promise: Promise<any>, deKeyField: string, deName: string): Promise<any> { return new Promise((resolve, reject) => { promise.then((response: any) => { if (response && response.status === 200) { const data = response.data; data.forEach((item:any,index:number) =>{ item[deName] = item[deKeyField]; data[index] = item; }); resolve(data); } else { reject([]) } }).catch((response: any) => { reject([]) }); }); } /** * 获取跨实体数据集合 * * @param {string} serviceName 服务名称 * @param {string} interfaceName 接口名称 * @param {*} data * @param {boolean} [isloading] * @returns {Promise<any[]>} * @memberof MainService */ @Errorlog public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { data.page = data.page ? data.page : 0; data.size = data.size ? data.size : 1000; return Promise.reject([]) } /** * 启动工作流 * * @param {string} action * @param {*} [context={}] * @param {*} [data={}] * @param {boolean} [isloading] * @param {*} [localdata] * @returns {Promise<any>} * @memberof MainService */ @Errorlog public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise<any> { data = this.handleWFData(data,true); context = this.handleRequestData(action,context,data).context; return new Promise((resolve: any, reject: any) => { let result: Promise<any>; const _appEntityService: any = this.appEntityService; if (_appEntityService[action] && _appEntityService[action] instanceof Function) { result = _appEntityService[action](context,data, isloading,localdata); } else { result = this.appEntityService.WFStart(context,data, isloading,localdata); } result.then((response) => { this.handleResponse(action, response); resolve(response); }).catch(response => { reject(response); }); }); } /** * 提交工作流 * * @param {string} action * @param {*} [context={}] * @param {*} [data={}] * @param {boolean} [isloading] * @param {*} [localdata] * @returns {Promise<any>} * @memberof MainService */ @Errorlog public wfsubmit(action: string,context: any = {}, data: any = {}, isloading?: boolean,localdata?:any): Promise<any> { data = this.handleWFData(data,true); context = this.handleRequestData(action,context,data,true).context; return new Promise((resolve: any, reject: any) => { let result: Promise<any>; const _appEntityService: any = this.appEntityService; if (_appEntityService[action] && _appEntityService[action] instanceof Function) { result = _appEntityService[action](context,data, isloading,localdata); } else { result = this.appEntityService.WFSubmit(context,data, isloading,localdata); } result.then((response) => { this.handleResponse(action, response); resolve(response); }).catch(response => { reject(response); }); }); } /** * 添加数据 * * @param {string} action * @param {*} [context={}] * @param {*} [data={}] * @param {boolean} [isloading] * @param {boolean} [isWorkflow] 是否在工作流中添加数据 * @returns {Promise<any>} * @memberof MainService */ @Errorlog public add(action: string, context: any = {},data: any = {}, isloading?: boolean,isWorkflow?:boolean): Promise<any> { const {data:Data,context:Context} = this.handleRequestData(action,context,data); return new Promise((resolve: any, reject: any) => { let result: Promise<any>; const _appEntityService: any = this.appEntityService; if (_appEntityService[action] && _appEntityService[action] instanceof Function) { result = _appEntityService[action](Context,Data, isloading); } else { result = this.appEntityService.Create(Context,Data, isloading); } result.then((response) => { if(isWorkflow){ resolve(response); }else{ this.handleResponse(action, response); resolve(response); } }).catch(response => { reject(response); }); }); } /** * 删除数据 * * @param {string} action * @param {*} [context={}] * @param {*} [data={}] * @param {boolean} [isloading] * @returns {Promise<any>} * @memberof MainService */ @Errorlog public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> { const {data:Data,context:Context} = this.handleRequestData(action,context,data); return new Promise((resolve: any, reject: any) => { let result: Promise<any>; const _appEntityService: any = this.appEntityService; if (_appEntityService[action] && _appEntityService[action] instanceof Function) { result = _appEntityService[action](Context,Data, isloading); } else { result = this.appEntityService.Remove(Context,Data, isloading); } result.then((response) => { resolve(response); }).catch(response => { reject(response); }); }); } /** * 修改数据 * * @param {string} action * @param {*} [context={}] * @param {*} [data={}] * @param {boolean} [isloading] * @param {boolean} [isWorkflow] 是否在工作流中修改数据 * @returns {Promise<any>} * @memberof MainService */ @Errorlog public update(action: string, context: any = {},data: any = {}, isloading?: boolean,isWorkflow?:boolean): Promise<any> { const {data:Data,context:Context} = this.handleRequestData(action,context,data); return new Promise((resolve: any, reject: any) => { let result: Promise<any>; const _appEntityService: any = this.appEntityService; if (_appEntityService[action] && _appEntityService[action] instanceof Function) { result = _appEntityService[action](Context,Data, isloading); } else { result = this.appEntityService.Update(Context,Data, isloading); } result.then((response) => { if(isWorkflow){ resolve(response); }else{ this.handleResponse(action, response); resolve(response); } }).catch(response => { reject(response); }); }); } /** * 查询数据 * * @param {string} action * @param {*} [context={}] * @param {*} [data={}] * @param {boolean} [isloading] * @returns {Promise<any>} * @memberof MainService */ @Errorlog public get(action: string,context: any = {},data: any = {}, isloading?: boolean): Promise<any> { const {data:Data,context:Context} = this.handleRequestData(action,context,data); return new Promise((resolve: any, reject: any) => { let result: Promise<any>; const _appEntityService: any = this.appEntityService; if (_appEntityService[action] && _appEntityService[action] instanceof Function) { result = _appEntityService[action](Context,Data, isloading); } else { result = this.appEntityService.Get(Context,Data, isloading); } result.then((response) => { this.setRemoteCopyData(response); this.handleResponse(action, response); resolve(response); }).catch(response => { reject(response); }); }); } /** * 加载草稿 * * @param {string} action * @param {*} [context={}] * @param {*} [data={}] * @param {boolean} [isloading] * @returns {Promise<any>} * @memberof MainService */ @Errorlog public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> { const {data:Data,context:Context} = this.handleRequestData(action,context,data); //仿真主键数据 const PrimaryKey = Util.createUUID(); Data.ibizhardwareid = PrimaryKey; Data.ibizhardware = PrimaryKey; return new Promise((resolve: any, reject: any) => { let result: Promise<any>; const _appEntityService: any = this.appEntityService; if (_appEntityService[action] && _appEntityService[action] instanceof Function) { result = _appEntityService[action](Context,Data, isloading); } else { result = this.appEntityService.GetDraft(Context,Data, isloading); } result.then((response) => { this.setRemoteCopyData(response); response.data.ibizhardwareid = PrimaryKey; this.handleResponse(action, response, true); resolve(response); }).catch(response => { reject(response); }); }); } /** * 前台逻辑 * @param {string} action * @param {*} [context={}] * @param {*} [data={}] * @param {boolean} [isloading] * @returns {Promise<any>} * @memberof MainService */ @Errorlog public frontLogic(action:string,context: any = {},data: any = {}, isloading?: boolean): Promise<any> { const {data:Data,context:Context} = this.handleRequestData(action,context,data); return new Promise((resolve: any, reject: any)=>{ let result: Promise<any>; const _appEntityService: any = this.appEntityService; if (_appEntityService[action] && _appEntityService[action] instanceof Function) { result = _appEntityService[action](Context,Data, isloading); } else { return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } }); } result.then((response) => { this.handleResponse(action, response,true); resolve(response); }).catch(response => { reject(response); }); }) } /** * 处理请求数据 * * @param action 行为 * @param data 数据 * @memberof MainService */ public handleRequestData(action: string,context:any, data: any = {},isMerge:boolean = false){ let mode: any = this.getMode(); if (!mode && mode.getDataItems instanceof Function) { return data; } let formItemItems: any[] = mode.getDataItems(); let requestData:any = {}; if(isMerge && (data && data.viewparams)){ Object.assign(requestData,data.viewparams); } formItemItems.forEach((item:any) =>{ if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){ if(item && item.prop){ requestData[item.prop] = context[item.name]; } }else{ if(item && item.prop){ requestData[item.prop] = data[item.name]; }else{ if(item.dataType && Object.is(item.dataType,"FORMPART")){ Object.assign(requestData,data[item.name]); } } } }); let tempContext:any = JSON.parse(JSON.stringify(context)); if(tempContext && tempContext.srfsessionid){ tempContext.srfsessionkey = tempContext.srfsessionid; delete tempContext.srfsessionid; } return {context:tempContext,data:requestData}; } /** * 通过属性名称获取表单项名称 * * @param name 实体属性名称 * @memberof MainService */ public getItemNameByDeName(name:string) :string{ let itemName = name; let mode: any = this.getMode(); if (!mode && mode.getDataItems instanceof Function) { return name; } let formItemItems: any[] = mode.getDataItems(); formItemItems.forEach((item:any)=>{ if(item.prop === name){ itemName = item.name; } }); return itemName.trim(); } /** * 重写处理返回数据 * * @param {string} action * @param {*} response * @memberof MainService */ public handleResponseData(action: string, data: any = {},isCreate?:boolean,codelistArray?:any){ let model: any = this.getMode(); if (!model && model.getDataItems instanceof Function) { return data; } let item: any = {}; let dataItems: any[] = model.getDataItems(); dataItems.forEach(dataitem => { let val = data.hasOwnProperty(dataitem.prop) ? data[dataitem.prop] : null; if (val === null) { val = data.hasOwnProperty(dataitem.name) ? data[dataitem.name] : null; } if((isCreate === undefined || isCreate === null ) && Object.is(dataitem.dataType, 'GUID') && Object.is(dataitem.name, 'srfkey') && (val && !Object.is(val, ''))){ isCreate = true; } item[dataitem.name] = val; // 转化代码表 if(codelistArray && dataitem.codelist){ if(codelistArray.get(dataitem.codelist.tag) && codelistArray.get(dataitem.codelist.tag).get(val)){ item[dataitem.name] = codelistArray.get(dataitem.codelist.tag).get(val); } } }); item.srfuf = data.srfuf ? data.srfuf : (isCreate ? "0" : "1"); item = Object.assign(data,item); return item; } /** * 设置远端数据 * * @param result 远端请求结果 * @memberof MainService */ public setRemoteCopyData(result:any){ if (result && result.status === 200) { this.remoteCopyData = Util.deepCopy(result.data); } } /** * 获取远端数据 * * @memberof MainService */ public getRemoteCopyData(){ return this.remoteCopyData; } }