UNPKG

7.41 kBJSXView Raw
1/**
2 * 数据服务
3 */
4'use strict'
5
6var sysConsts = require('../lib/scripts/sysConsts.json');
7var debug = require('debug')('aprac:DataService');
8var PagerInfo = require('../lib/scripts/dataSource/pagerInfo.js');
9var cacheManager = require('../lib/common/cacheManager.js');
10var configStore = require('../lib/scripts/configStore.js');
11var iPrinter = require('../lib/scripts/iPrinter.js'); // 打印封装
12var request = require("request");
13var apracConfig = require("../index").ApracConfig;
14var signature = require('cookie-signature');
15
16class DataService {
17 openGspx(req, newPageSrc) {
18 return new Promise((resolve, reject) => {
19 let url = `http://127.0.0.1:${apracConfig.port}${newPageSrc}`;
20 let cookie = apracConfig.sessionIdKey + "=" +
21 encodeURIComponent('s:' + signature.sign(req.sessionID, apracConfig.cookieSecret));
22 let cookies = req.cookies;
23 for (var name in cookies) {
24 cookie += ("; " + name + "=" + cookies[name]);
25 }
26
27 request({
28 url: url,
29 method: "GET",
30 headers: {
31 "content-type": "text/html; charset=utf-8",
32 "Cookie": cookie,
33 "server-reqesut": "true"
34 }
35 }, (req, res, msg) => {
36 resolve(msg);
37 });
38 })
39 }
40
41 _updatePagerInfoData(pagerInfo, pagerInfoData) {
42 //保存pagerInfo中上下文参数
43 let dataSource = pagerInfo.getDataSource();
44 if (dataSource) {
45 pagerInfoData._oldQueryParams = dataSource.queryParams == null ? null : { ...dataSource.queryParams
46 };
47 pagerInfoData._oldItemCount = dataSource._itemCount == null ? null : dataSource._itemCount;
48 pagerInfoData._isFirstLoad = false;
49 }
50 }
51
52 _updatePagerInfo(pagerInfo, pagerInfoData) {
53 //恢复pagerInfo中上下文参数
54 let dataSource = pagerInfo.getDataSource();
55 if (dataSource && pagerInfoData._isFirstLoad === false) {
56 dataSource.queryParams = pagerInfoData._oldQueryParams == null ? null : { ...pagerInfoData._oldQueryParams
57 };
58 dataSource._itemCount = pagerInfoData._oldItemCount == null ? null : pagerInfoData._oldItemCount;
59 }
60 }
61
62 getPagerInfoData(session, pagerId) {
63 var key = sysConsts.SessionPrefixPagerInfo + pagerId;
64 //var sid = session.req.sessionID;
65 //key = sid + '_' + key;
66 //pagerInfoData = cacheManager.get(key);
67 var pagerInfoData = session[key];
68
69 if (!pagerInfoData) {
70 throw new Error("会话超时,查询失败。请刷新该页,或重新登录!");
71 }
72 return pagerInfoData;
73 }
74
75 async getPagerInfo(session, pagerId) {
76 var pagerInfoData = this.getPagerInfoData(session, pagerId);
77 var pagerInfo = cacheManager.get(pagerInfoData._cacheId); // 取出PagerInfo
78 if (!pagerInfo) {
79 await this.openGspx(session.req, pagerInfoData._src);
80 pagerInfo = cacheManager.get(pagerInfoData._cacheId); // 取出PagerInfo
81 if (!pagerInfo) {
82 throw new Error("缓存失效,查询失败。请刷新该页,或重新登录!");
83 } else {
84 this._updatePagerInfo(pagerInfo, pagerInfoData);
85 }
86 } else {
87 this._updatePagerInfo(pagerInfo, pagerInfoData);
88 }
89
90 return pagerInfo;
91 }
92
93 async GetPagerData(pagerId, queryParams, orders, filter, first, count) {
94 let pagerInfo = await this.getPagerInfo(this.req.session, pagerId);
95 let result = pagerInfo.getPagerData(queryParams, orders, filter, first, count, null);
96 let pagerInfoData = this.getPagerInfoData(this.req.session, pagerId);
97 this._updatePagerInfoData(pagerInfo, pagerInfoData);
98 return result;
99 }
100
101 async GetPagerSummary(pagerId) {
102 var pagerInfo = await this.getPagerInfo(this.req.session, pagerId);
103 let result = pagerInfo.getPagerSummary();
104 let pagerInfoData = this.getPagerInfoData(this.req.session, pagerId);
105 this._updatePagerInfoData(pagerInfo, pagerInfoData);
106 return result;
107 }
108
109 RemoveSessionData(controlIds) {
110 var session = this.req.session;
111 if (session == null || controlIds == null) return 0;
112
113 controlIds.forEach(function(controlId, i, a) {
114 var data = session[controlId];
115 if (data != null) {
116 delete session[controlId];
117 return;
118 }
119
120 var key = sysConsts.SessionPrefixPagerInfo + controlId;
121 var pagerInfoData = session[key];
122 if (pagerInfoData != null) {
123 if (pagerInfoData._createdCount > 1) {
124 pagerInfoData._createdCount--; // 异步清理session还没完成,页面已经第二次初始化,避免新页面session被清理出现session丢失的假象
125 session[key] = pagerInfoData;
126 return;
127 }
128 var pagerInfo = cacheManager.remove(pagerInfoData._cacheId); // 移除PagerInfo对象的缓存
129 pagerInfo.getDataSource().invalidateCache(); // 目前并没实际意义
130 pagerInfo = null;
131 } else {
132 debug(`${session.id} PagerInfo已丢失:${key}`);
133 }
134 delete session[key];
135 });
136
137 return 1;
138 }
139
140 SavePanelConfig(panelId, data) {
141 return configStore.saveData(this.req, panelId, data, "panel");
142 }
143
144 SaveGridConfig(gridId, data) {
145 return configStore.saveData(this.req, gridId, data, "grid");
146 }
147
148 SaveFormConfig(formId, data) {
149 return configStore.saveData(this.req, formId, data, "form");
150 }
151
152 GetCustomConfig(key) {
153 return configStore.loadData(this.req, key, "custom");
154 }
155
156 SaveCustomConfig(key, data) {
157 return configStore.saveData(this.req, key, data, "custom");
158 }
159
160 // 获取云打印相关信息
161 GetCloudPrinterInfo() {
162 if (!iPrinter.cloudPrinterHandler) return null;
163 iPrinter.cloudPrinterHandler.req = this.req; // 注入req
164 return iPrinter.cloudPrinterHandler.GetCloudPrinterInfo();
165 }
166
167 //获取打印客户端列表
168 GetPrintClients() {
169 if (!iPrinter.cloudPrinterHandler) return null;
170 iPrinter.cloudPrinterHandler.req = this.req; // 注入req
171 return iPrinter.cloudPrinterHandler.GetPrintClients();
172 }
173
174 //通过报表名称获取样式列表
175 GetPrintStyles(reportName, styleFomatType, productType) {
176 if (!iPrinter.cloudPrinterHandler) return null;
177 var info = {
178 ReportName: reportName
179 };
180 iPrinter.cloudPrinterHandler.req = this.req; // 注入req
181 return iPrinter.cloudPrinterHandler.GetPrintStyles(info, styleFomatType, productType);
182 }
183
184 //获取授权码
185 GetAccessCode() {
186 if (!iPrinter.cloudPrinterHandler) return null;
187 iPrinter.cloudPrinterHandler.req = this.req; // 注入req
188 return iPrinter.cloudPrinterHandler.GetAccessCode();
189 }
190}
191exports.WebMethod = DataService;
\No newline at end of file