|
@@ -37,6 +37,7 @@ module.exports={
|
|
|
downLoadProjectFile:downLoadProjectFile,
|
|
|
importProcessChecking:importProcessChecking,
|
|
|
importInterface,
|
|
|
+ isTenderOverrun
|
|
|
};
|
|
|
|
|
|
|
|
@@ -109,6 +110,7 @@ let qiniu = require("qiniu");
|
|
|
let fs = require("fs");
|
|
|
let path = require("path");
|
|
|
let request = require("request");
|
|
|
+const systemSettingMiddleware = require('../../main/middleware/system_setting');
|
|
|
|
|
|
let qiniu_config = {
|
|
|
"AccessKey": "_gR1ed4vi1vT2G2YITGSf4_H0fJu_nRS9Tzk3T4z",
|
|
@@ -1839,7 +1841,7 @@ async function downloadFileSync(key) {
|
|
|
}
|
|
|
|
|
|
// 导入接口
|
|
|
-async function importInterface(key, userID, compilationID) {
|
|
|
+async function importInterface(key, session) {
|
|
|
// 源文件内容文本
|
|
|
let downloadFilePath = '';
|
|
|
try {
|
|
@@ -1848,7 +1850,18 @@ async function importInterface(key, userID, compilationID) {
|
|
|
if (!srcData) {
|
|
|
throw '无有效数据';
|
|
|
}
|
|
|
+ const userID = session.sessionUser.id;
|
|
|
+ const compilationID = session.sessionCompilation._id;
|
|
|
const importData = JSON.parse(srcData);
|
|
|
+ let tenderCount = 0;
|
|
|
+ importData.engs.forEach(eng => {
|
|
|
+ eng.tenders.forEach(tender => {
|
|
|
+ tenderCount += 1;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ if (await isTenderOverrun(tenderCount, session)) {
|
|
|
+ throw '您创建的项目个数超限,请联系我们的客服人员,或者导出建设项目保存到本地备份,删除云上数据。';
|
|
|
+ }
|
|
|
const projectData = await importProject(importData, userID, compilationID);
|
|
|
return projectData;
|
|
|
} catch (err) {
|
|
@@ -1877,6 +1890,12 @@ async function importProjects(data,req,updateData) {
|
|
|
result.error = 1;
|
|
|
result.msg = `导入失败:您要导入的文件是由“${fileCompilationName}”导出,当前软件是“${curCompilationName}”,请选择正确的费用定额再进行操作!`;
|
|
|
}else {
|
|
|
+ const tenders = mainData.projects.filter(item => item.projType === projectType.tender);
|
|
|
+ const tenderOverrun = await isTenderOverrun(tenders.length, req.session);
|
|
|
+ if (tenderOverrun) {
|
|
|
+ result.error = 1;
|
|
|
+ result.msg = `您创建的项目个数超限,请联系我们的客服人员,或者导出建设项目保存到本地备份,删除云上数据。`;
|
|
|
+ }
|
|
|
let [projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap] = await handleMainProjectDatas(mainData,updateData,req.session.sessionUser.id);
|
|
|
if(datas.length > 1 ){
|
|
|
for(let i = 1;i<datas.length;i++){
|
|
@@ -2147,4 +2166,23 @@ function uploadToken() {
|
|
|
domain: qiniu_config.Domain
|
|
|
}
|
|
|
return result
|
|
|
+}
|
|
|
+
|
|
|
+// 有些方法无法通过中间件就检查单位工程数量是否超限
|
|
|
+// 需要到具体的业务代码中进行判断
|
|
|
+// 这个方法就是具体业务代码中,需要检查单位工程数量是否超限用
|
|
|
+async function isTenderOverrun(tenderCount, session) {
|
|
|
+ const userID = session.sessionUser.id;
|
|
|
+ const compilation = session.sessionCompilation._id;
|
|
|
+ const compilationVersion = session.compilationVersion || '免费';
|
|
|
+ let systemSetting = session.systemSetting;
|
|
|
+ // 这种情况只有在刚上线此功能时会出现,不考虑时间差
|
|
|
+ if (!systemSetting) {
|
|
|
+ systemSetting = await systemSettingMiddleware.getSystemSetting();
|
|
|
+ session.systemSetting = systemSetting;
|
|
|
+ }
|
|
|
+ const type = compilationVersion.includes('免费') ? 'normal' : 'professional';
|
|
|
+ const limit = systemSetting[type].project;
|
|
|
+ const curTenderCount = await projectModel.count({userID, compilation, projType: 'Tender', '$or':[{deleteInfo: null}, {'deleteInfo.completeDeleted': false}]});
|
|
|
+ return tenderCount + curTenderCount > limit;
|
|
|
}
|