|
@@ -32,7 +32,10 @@ module.exports={
|
|
|
getProjectPlaceholder: getProjectPlaceholder,
|
|
|
exportProject:exportProject,
|
|
|
importProjects:importProjects,//建筑这里重名了,这比养护加多了个s
|
|
|
- initOverHeightItems: initOverHeightItems
|
|
|
+ initOverHeightItems: initOverHeightItems,
|
|
|
+ uploadToken:uploadToken,
|
|
|
+ downLoadProjectFile:downLoadProjectFile,
|
|
|
+ importProcessChecking:importProcessChecking
|
|
|
};
|
|
|
|
|
|
|
|
@@ -77,6 +80,7 @@ let evaluateListModel = mongoose.model("evaluate_list");
|
|
|
let bidListModel = mongoose.model("bid_evaluation_list");
|
|
|
let contractorListModel = mongoose.model("contractor_list");
|
|
|
let featureLibModel = mongoose.model("std_project_feature_lib");
|
|
|
+let importLogsModel = mongoose.model("import_logs");
|
|
|
const overHeightLibModel = mongoose.model('std_over_height_lib');
|
|
|
let scMathUtil = require('../../../public/scMathUtil').getUtil();
|
|
|
let counter = require('../../../public/counter/counter');
|
|
@@ -100,7 +104,18 @@ let mainColLibModel = mongoose.model('std_main_col_lib');
|
|
|
import EngineeringLibModel from "../../users/models/engineering_lib_model";
|
|
|
let installationFacade = require('../../main/facade/installation_facade');
|
|
|
let cipher = require('../../../public/cipher');
|
|
|
-
|
|
|
+let qiniu = require("qiniu");
|
|
|
+let fs = require("fs");
|
|
|
+let path = require("path");
|
|
|
+let request = require("request");
|
|
|
+
|
|
|
+let qiniu_config = {
|
|
|
+ "AccessKey": "_gR1ed4vi1vT2G2YITGSf4_H0fJu_nRS9Tzk3T4z",
|
|
|
+ "SecretKey": "ty4zd0FHqgEDaiVzSLC8DfHlai99aS7bspLkw6s6",
|
|
|
+ "Bucket": "yun-update",
|
|
|
+ "Domain": "https://serverupdate.smartcost.com.cn"
|
|
|
+};
|
|
|
+let mac = new qiniu.auth.digest.Mac(qiniu_config.AccessKey, qiniu_config.SecretKey);
|
|
|
|
|
|
//拷贝例题项目
|
|
|
//@param {String}userID {Array}projIDs拷贝的例题项目ID(建设项目、文件夹)@return {Boolean}
|
|
@@ -1736,7 +1751,70 @@ async function exportTenderData(data){
|
|
|
return cipher.aesEncrypt(JSON.stringify(result));
|
|
|
}
|
|
|
|
|
|
-async function importProjects(data,req,fields) {
|
|
|
+async function downLoadProjectFile(info) {
|
|
|
+ let result = {error:0};
|
|
|
+ let bucketManager2 = new qiniu.rs.BucketManager(mac, null);
|
|
|
+ let publicBucketDomain = qiniu_config.Domain;// "http://serverupdate.smartcost.com.cn";//这里不支持https
|
|
|
+ let deadline = parseInt(Date.now() / 1000) + 3600; // 1小时过期
|
|
|
+ let privateDownloadUrl = bucketManager2.privateDownloadUrl(publicBucketDomain, info.key, deadline);
|
|
|
+
|
|
|
+ let data = {
|
|
|
+ key:info.key,
|
|
|
+ userID:info.session.sessionUser.id,
|
|
|
+ status:"start",
|
|
|
+ create_time:+new Date()
|
|
|
+ };
|
|
|
+ await importLogsModel.create(data);
|
|
|
+ doDownLoadAndImport(privateDownloadUrl,info);
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+async function doDownLoadAndImport(privateDownloadUrl,info) {
|
|
|
+ let stream = fs.createWriteStream(path.join(__dirname, "../../../tmp/"+info.key));//
|
|
|
+ request(privateDownloadUrl).pipe(stream).on("close", async function (err) {
|
|
|
+ console.log("文件[" + info.key + "]下载完毕");
|
|
|
+ let doc = {status:"finish"};
|
|
|
+ try {
|
|
|
+ let data = fs.readFileSync(stream.path,'utf-8');
|
|
|
+ let result = await importProjects(data,{session:info.session},info.updateData);
|
|
|
+ if(result.error == 1){
|
|
|
+ doc.errorMsg = result.msg;
|
|
|
+ doc.status = "error";
|
|
|
+ }
|
|
|
+ }catch (error){
|
|
|
+ console.log(error);
|
|
|
+ doc.errorMsg = "导入失败,请检查文件!";
|
|
|
+ doc.status = "error";
|
|
|
+ }finally {
|
|
|
+ await importLogsModel.update({key:info.key},doc);
|
|
|
+ fs.unlinkSync(stream.path);
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+async function importProcessChecking(data){
|
|
|
+ let result = {error:0};
|
|
|
+ let log = await importLogsModel.findOne({key:data.key});
|
|
|
+ if(log){
|
|
|
+ if(log.status == "finish"){
|
|
|
+ result.status = "complete";
|
|
|
+ await importLogsModel.remove({key:data.key});
|
|
|
+ }else if(log.status == "start"){
|
|
|
+ result.status = "processing";
|
|
|
+ }else if(log.status == "error"){
|
|
|
+ result.error = 1;
|
|
|
+ result.msg = log.errorMsg;
|
|
|
+ await importLogsModel.remove({key:data.key});
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ result.error = 1;
|
|
|
+ result.msg = `导入过程中发生错误!`;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+async function importProjects(data,req,updateData) {
|
|
|
let result = {error:0};
|
|
|
let stringArr = data.split("|----|");
|
|
|
let datas = [];
|
|
@@ -1755,7 +1833,7 @@ async function importProjects(data,req,fields) {
|
|
|
result.error = 1;
|
|
|
result.msg = `导入失败:您要导入的文件是由“${fileCompilationName}”导出,当前软件是“${curCompilationName}”,请选择正确的费用定额再进行操作!`;
|
|
|
}else {
|
|
|
- let [projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap] = await handleMainProjectDatas(mainData,JSON.parse(fields.updateData[0]),req.session.sessionUser.id);
|
|
|
+ let [projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap] = await handleMainProjectDatas(mainData,updateData,req.session.sessionUser.id);
|
|
|
if(datas.length > 1 ){
|
|
|
for(let i = 1;i<datas.length;i++){
|
|
|
await handleEachProject(datas[i],projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap)
|
|
@@ -2010,3 +2088,19 @@ async function initOverHeightItems(engineeringID) {
|
|
|
const overHeightLib = await overHeightLibModel.findOne({ID: overHeightLibID});
|
|
|
return overHeightLib ? overHeightLib.list : defaultData;
|
|
|
}
|
|
|
+
|
|
|
+function uploadToken() {
|
|
|
+ let options = {
|
|
|
+ scope: qiniu_config.Bucket,
|
|
|
+ deleteAfterDays: 1,
|
|
|
+ returnBody:
|
|
|
+ '{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}'
|
|
|
+ };
|
|
|
+ let putPolicy = new qiniu.rs.PutPolicy(options);
|
|
|
+ let token = putPolicy.uploadToken(mac);
|
|
|
+ let result = {
|
|
|
+ uptoken: token,
|
|
|
+ domain: qiniu_config.Domain
|
|
|
+ }
|
|
|
+ return result
|
|
|
+}
|