|
@@ -436,6 +436,7 @@ async function handleCopyProject(key, userID, compilationID, data, newProjectID)
|
|
|
async function copyProject(userID, compilationID,data,newProjectID = null, delayProjectTask = false) {
|
|
|
let projectMap = data.projectMap;
|
|
|
let originalID = projectMap['copy'].document.ID;
|
|
|
+
|
|
|
if (!newProjectID) {
|
|
|
newProjectID = await getCounterID("projects");
|
|
|
}
|
|
@@ -493,6 +494,7 @@ async function copyProject(userID, compilationID,data,newProjectID = null, delay
|
|
|
];
|
|
|
let [billMap,rationMap,projectGLJMap] = await Promise.all(IDtasks);
|
|
|
//所有复制任务异步处理,提升效率 复制清单,定额,4个文件,项目工料机, 定额工料机,人工系数,工程量明细,定额安装增加费,安装增加费
|
|
|
+
|
|
|
let copyTasks = [
|
|
|
copyProjectSetting(originalID,newProjectID),
|
|
|
copyBills(newProjectID,billMap),
|
|
@@ -534,12 +536,12 @@ async function copyProject(userID, compilationID,data,newProjectID = null, delay
|
|
|
async function createIDsAndReturn(originalID,model) {
|
|
|
let uuidMaping = {};//做ID映射
|
|
|
let datas = [];
|
|
|
- let result = await model.find({"projectID": originalID}, '-_id');
|
|
|
+ let result = await model.find({"projectID": originalID}, '-_id').lean();
|
|
|
uuidMaping['-1'] = -1;
|
|
|
//建立uuid-ID映射
|
|
|
for(let d of result){
|
|
|
uuidMaping[d.ID] = uuidV1();
|
|
|
- datas.push(d._doc);
|
|
|
+ datas.push(d);
|
|
|
}
|
|
|
return{uuidMaping:uuidMaping,datas:datas};
|
|
|
}
|
|
@@ -547,16 +549,16 @@ async function createIDsAndReturn(originalID,model) {
|
|
|
async function getProjectGLJIDAndReturn(originalID,newProjectID) {
|
|
|
let IDMap = {};
|
|
|
let datas = [];
|
|
|
- let result = await gljListModel.find({project_id:originalID}, '-_id');
|
|
|
+ let result = await gljListModel.find({project_id:originalID}, '-_id').lean();
|
|
|
let gljCount = await counter.counterDAO.getIDAfterCountSync(counter.moduleName.glj_list, result.length);
|
|
|
for(let i = 0; i < result.length; i++){
|
|
|
let d = result[i];
|
|
|
let newID = gljCount.sequence_value - (result.length - 1) + i;
|
|
|
//let newID = await getCounterID("glj_list");
|
|
|
IDMap[d.id] = newID;
|
|
|
- d._doc.project_id = newProjectID;
|
|
|
- d._doc.id = newID;
|
|
|
- datas.push(d._doc);
|
|
|
+ d.project_id = newProjectID;
|
|
|
+ d.id = newID;
|
|
|
+ datas.push(d);
|
|
|
}
|
|
|
return{IDMap:IDMap,datas:datas};
|
|
|
}
|
|
@@ -689,12 +691,15 @@ async function copyUnitPriceFile(newProjectID,rootProjectID,userID,originaluUnit
|
|
|
}
|
|
|
|
|
|
async function copySubList(srcFID,newFID,model) {
|
|
|
- let mList = await model.find({unit_price_file_id: srcFID}, '-_id');
|
|
|
+ let mList = await model.find({unit_price_file_id: srcFID}, '-_id').lean();
|
|
|
let rList = [];
|
|
|
+ let IDcounter = await counter.counterDAO.getIDAfterCountSync(model.modelName, mList.length);
|
|
|
+ let firstID = IDcounter.sequence_value - (mList.length - 1);
|
|
|
for(let m of mList){
|
|
|
- m._doc.unit_price_file_id = newFID;
|
|
|
- m._doc.id = await getCounterID(model.modelName);
|
|
|
- rList.push(m._doc);
|
|
|
+ m.unit_price_file_id = newFID;
|
|
|
+ m.id = firstID;
|
|
|
+ firstID+=1
|
|
|
+ rList.push(m);
|
|
|
}
|
|
|
await insertMany(rList,model)
|
|
|
}
|
|
@@ -716,26 +721,17 @@ async function copyInstallFee(originalPID,newProjectID) {
|
|
|
}
|
|
|
|
|
|
async function copyRationSubList(originalPID,newProjectID,billIDMap,rationIDMap,projectGLJIDMap,model) {// 定额工料机,附注条件,工程量明细,定额安装增加费,模板子目
|
|
|
- let subList = await model.find({projectID:originalPID}, '-_id');
|
|
|
+ let first = +new Date();
|
|
|
+ let subList = await model.find({projectID:originalPID}, '-_id').lean();
|
|
|
let newList =[];
|
|
|
for(let s of subList){
|
|
|
- s._doc = getCopyRationSubData(s._doc,newProjectID,billIDMap,rationIDMap,projectGLJIDMap);
|
|
|
- /* s._doc.ID = uuidV1();
|
|
|
- s._doc.projectID = newProjectID;
|
|
|
- s._doc.rationID&&rationIDMap[s._doc.rationID]?s._doc.rationID = rationIDMap[s._doc.rationID]:'';
|
|
|
- s._doc.billID&&billIDMap[s._doc.billID]?s._doc.billID = billIDMap[s._doc.billID]:'';
|
|
|
- s._doc.billsItemID&&billIDMap[s._doc.billsItemID]?s._doc.billsItemID = billIDMap[s._doc.billsItemID]:'';
|
|
|
- s._doc.projectGLJID&&projectGLJIDMap[s._doc.projectGLJID]?s._doc.projectGLJID = projectGLJIDMap[s._doc.projectGLJID]:'';
|
|
|
- if(s._doc.templateList && s._doc.templateList.length > 0 ){
|
|
|
- for(let t of s._doc.templateList){
|
|
|
- if(t.billID && billIDMap[t.billID]) t.billID = billIDMap[t.billID];
|
|
|
- if(t.fxID && billIDMap[t.fxID]) t.fxID = billIDMap[t.fxID];
|
|
|
- }
|
|
|
- }*/
|
|
|
- newList.push(s._doc);
|
|
|
+ s = getCopyRationSubData(s,newProjectID,billIDMap,rationIDMap,projectGLJIDMap);
|
|
|
+ newList.push(s);
|
|
|
|
|
|
}
|
|
|
- await insertMany(newList,model);
|
|
|
+ if(newList.length > 0) await insertMany(newList,model);
|
|
|
+ let last = +new Date();
|
|
|
+ console.log(model.modelName+"-------"+newList.length+"--copyRationSubList - insert时间为-------------------------------"+(last-first));
|
|
|
}
|
|
|
|
|
|
|
|
@@ -926,10 +922,10 @@ async function getCounterID(collectionName){
|
|
|
}
|
|
|
|
|
|
async function insertMany(datas,model) {
|
|
|
- while (datas.length>1000){//因为mongoose限制了批量插入的条数为1000.所以超出限制后需要分批插入
|
|
|
+ /* while (datas.length>1000){//因为mongoose限制了批量插入的条数为1000.所以超出限制后需要分批插入 2020-05-28 测试后发现没有限制,暂时先保留代码
|
|
|
let newList = datas.splice(0,1000);//一次插入1000条
|
|
|
await model.insertMany(newList);
|
|
|
- }
|
|
|
+ } */
|
|
|
await model.insertMany(datas);
|
|
|
|
|
|
}
|
|
@@ -2407,6 +2403,7 @@ async function importProjects(data,req,updateData) {
|
|
|
let result = {error:0};
|
|
|
let stringArr = data.split("|----|");
|
|
|
let datas = [];
|
|
|
+ let first = +new Date();
|
|
|
for(let s of stringArr){
|
|
|
datas.push(JSON.parse(cipher.aesDecrypt(s)));
|
|
|
}
|
|
@@ -2431,13 +2428,48 @@ async function importProjects(data,req,updateData) {
|
|
|
let [constructionProjectID,projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap] = await handleMainProjectDatas(mainData,updateData,req.session.sessionUser.id);
|
|
|
result.constructionProjectID = constructionProjectID;
|
|
|
if(datas.length > 1 ){
|
|
|
+ let newProjectSettings=[],bills=[],rations=[],installationFees=[],projectGLJs=[],rationGLJs=[],rationCoes=[],quantityDetails=[],rationInstallations=[],rationTemplates=[],evaluateList=[],bidList=[],contractorList=[],newCalcProgramsFiles=[],newLabourCoes=[]
|
|
|
for(let i = 1;i<datas.length;i++){
|
|
|
- await handleEachProject(datas[i],projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap)
|
|
|
+ let [tnewProjectSetting,tbills,trations,tinstallationFees,tprojectGLJs,trationGLJs,trationCoes,tquantityDetails,trationInstallations,trationTemplates,tevaluateList,tbidList,tcontractorList,tnewCalcProgramsFile,tnewLabourCoe] = await handleEachProject(datas[i],projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap)
|
|
|
+ if(tnewProjectSetting) newProjectSettings.push(tnewProjectSetting);
|
|
|
+ if(tbills.length > 0) bills = bills.concat(tbills);
|
|
|
+ if(trations.length > 0) rations = rations.concat(trations);
|
|
|
+ if(tinstallationFees.length > 0) installationFees = installationFees.concat(tinstallationFees);
|
|
|
+ if(tprojectGLJs.length > 0) projectGLJs = projectGLJs.concat(tprojectGLJs);
|
|
|
+ if(trationGLJs.length > 0) rationGLJs = rationGLJs.concat(trationGLJs);
|
|
|
+ if(trationCoes.length > 0) rationCoes = rationCoes.concat(trationCoes);
|
|
|
+ if(tquantityDetails.length > 0) quantityDetails = quantityDetails.concat(tquantityDetails);
|
|
|
+ if(trationInstallations.length > 0) rationInstallations = rationInstallations.concat(trationInstallations);
|
|
|
+ if(trationTemplates.length > 0) rationTemplates = rationTemplates.concat(trationTemplates);
|
|
|
+ if(tevaluateList.length > 0) evaluateList = evaluateList.concat(tevaluateList);
|
|
|
+ if(tbidList.length > 0) bidList = bidList.concat(tbidList);
|
|
|
+ if(tcontractorList.length > 0) contractorList = contractorList.concat(tcontractorList);
|
|
|
+ if(tnewCalcProgramsFile) newCalcProgramsFiles.push(tnewCalcProgramsFile);
|
|
|
+ if(tnewLabourCoe) newLabourCoes.push(tnewLabourCoe);
|
|
|
}
|
|
|
+
|
|
|
+ if(newProjectSettings.length > 0) await insertMany(newProjectSettings,projectSettingModel)
|
|
|
+ if(bills.length > 0) await insertMany(bills,billsModel);
|
|
|
+ if(rations.length > 0) await insertMany(rations,rationModel);
|
|
|
+ if(installationFees.length > 0) await insertMany(installationFees,installationFeeModel);
|
|
|
+ if(projectGLJs.length > 0) await insertMany(projectGLJs,gljListModel);
|
|
|
+ if(rationGLJs.length > 0) await insertMany(rationGLJs,rationGLJModel);
|
|
|
+ if(rationCoes.length > 0) await insertMany(rationCoes,rationCoeModel);
|
|
|
+ if(quantityDetails.length > 0) await insertMany(quantityDetails,quantityDetailModel);
|
|
|
+ if(rationInstallations.length > 0) await insertMany(rationInstallations,rationInstallationModel);
|
|
|
+ if(rationTemplates.length > 0) await insertMany(rationTemplates,rationTemplateModel);
|
|
|
+ if(evaluateList.length > 0) await insertMany(evaluateList,evaluateListModel);
|
|
|
+ if(bidList.length > 0) await insertMany(bidList,bidListModel);
|
|
|
+ if(contractorList.length > 0) await insertMany(contractorList,contractorListModel);
|
|
|
+ if(newCalcProgramsFiles.length > 0) await insertMany(newCalcProgramsFiles,calcProgramsModel);
|
|
|
+ if(newLabourCoes.length > 0) await insertMany(newLabourCoes,labourCoesModel);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+ let finish = +new Date();
|
|
|
+ console.log("导入操作总时间为-------------------------------"+(finish-first));
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -2526,7 +2558,9 @@ async function handleEachProject(data,projectIDMap,labourCoeFileIDMap,calcProgra
|
|
|
delete newLabourCoe._id;
|
|
|
}
|
|
|
|
|
|
- if(newProjectSetting) await projectSettingModel.create(newProjectSetting);
|
|
|
+ return [newProjectSetting,bills,rations,installationFees,projectGLJs,rationGLJs,rationCoes,quantityDetails,rationInstallations,rationTemplates,evaluateList,bidList,contractorList,newCalcProgramsFile,newLabourCoe]
|
|
|
+
|
|
|
+ /* if(newProjectSetting) await projectSettingModel.create(newProjectSetting);
|
|
|
if(bills.length > 0) await insertMany(bills,billsModel);
|
|
|
if(rations.length > 0) await insertMany(rations,rationModel);
|
|
|
if(installationFees.length > 0) await insertMany(installationFees,installationFeeModel);
|
|
@@ -2540,8 +2574,8 @@ async function handleEachProject(data,projectIDMap,labourCoeFileIDMap,calcProgra
|
|
|
if(bidList.length > 0) await insertMany(bidList,bidListModel);
|
|
|
if(contractorList.length > 0) await insertMany(contractorList,contractorListModel);
|
|
|
if(newCalcProgramsFile) await calcProgramsModel.create(newCalcProgramsFile);
|
|
|
- if(newLabourCoe) await labourCoesModel.create(newLabourCoe);
|
|
|
-
|
|
|
+ if(newLabourCoe) await labourCoesModel.create(newLabourCoe); */
|
|
|
+
|
|
|
|
|
|
}
|
|
|
function setMaterialList(datas,newProjectID,projectGLJIDMap){
|
|
@@ -2629,6 +2663,8 @@ async function handleMainProjectDatas(mainData,updateData,userID) {
|
|
|
|
|
|
|
|
|
async function importUnitPriceFiles(mainData,projectIDMap,unitPriceFileIDMap,userID) {
|
|
|
+
|
|
|
+
|
|
|
if(!mainData.files.unitFiles) return;
|
|
|
let unitFiles = [],unitPrices =[],mixRatios=[],freights=[],originals=[];
|
|
|
for(let f of mainData.files.unitFiles){
|
|
@@ -2650,11 +2686,14 @@ async function importUnitPriceFiles(mainData,projectIDMap,unitPriceFileIDMap,use
|
|
|
if(unitPrices.length > 0) await insertMany(unitPrices,unitPriceModel);
|
|
|
if(mixRatios.length > 0) await insertMany(mixRatios,mixRatioModel);
|
|
|
|
|
|
- async function setSubList(oList,nList,fileID,model,UUID=false) {
|
|
|
+ async function setSubList(oList,nList,fileID,model) {
|
|
|
+ let IDcounter = await counter.counterDAO.getIDAfterCountSync(model.modelName, oList.length);
|
|
|
+ let firstID = IDcounter.sequence_value - (oList.length - 1);
|
|
|
for(let o of oList){
|
|
|
delete o._id;
|
|
|
o.unit_price_file_id = fileID;
|
|
|
- UUID == true?o.ID = uuidV1():o.id = await getCounterID(model.modelName);
|
|
|
+ o.id = firstID;
|
|
|
+ firstID+=1
|
|
|
nList.push(o)
|
|
|
}
|
|
|
}
|