|
|
@@ -19,6 +19,7 @@ module.exports={
|
|
|
moveProject:moveProject,
|
|
|
copyProject:copyProject,
|
|
|
copyExample: copyExample,
|
|
|
+ setupSummaryFields: setupSummaryFields,
|
|
|
getSummaryInfo: getSummaryInfo,
|
|
|
getSummaryInfoByTender: getSummaryInfoByTender,
|
|
|
getTendersFeeInfo: getTendersFeeInfo,
|
|
|
@@ -952,6 +953,24 @@ async function getTendersFeeInfo(tenders) {
|
|
|
}
|
|
|
return IDMapping;
|
|
|
}
|
|
|
+
|
|
|
+// 项目管理界面需要显示的汇总字段
|
|
|
+function setupSummaryFields(summaryInfo, projects, fields = null) {
|
|
|
+ if (!fields) {
|
|
|
+ fields = [
|
|
|
+ 'totalCost'
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ for(const proj of projects){
|
|
|
+ const summaryProj = summaryInfo[proj.ID];
|
|
|
+ if(summaryProj){
|
|
|
+ for (const field of fields) {
|
|
|
+ proj[field] = summaryProj[field];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
//@param {Array}projectIDs(建设项目ID) @return {Object}
|
|
|
async function getSummaryInfo(projectIDs, flagFieldMapping = null){
|
|
|
//ID与汇总信息映射
|
|
|
@@ -1080,9 +1099,15 @@ async function getUpChainIDs(projectID) {
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
-//获取projectIDs文件下所有子项目(不包括projectIDs本身)
|
|
|
-async function getPosterityProjects(projectIDs) {
|
|
|
+//获取projectIDs文件下所有子项目(默认不包括projectIDs本身)
|
|
|
+async function getPosterityProjects(projectIDs, includeSelf = false) {
|
|
|
let rst = [];
|
|
|
+ if (includeSelf) {
|
|
|
+ const projects = await projectModel.find({ID: {$in: projectIDs}, $or: notDeleted}, '-_id').lean();
|
|
|
+ if (projects) {
|
|
|
+ rst.push(...projects);
|
|
|
+ }
|
|
|
+ }
|
|
|
async function getProjects(parentIDs) {
|
|
|
if (parentIDs.length > 0) {
|
|
|
let newIDs = [];
|
|
|
@@ -1102,6 +1127,7 @@ async function getPosterityProjects(projectIDs) {
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
//根据项目获得分享信息(分享层级不一定在项目级)(以最新为准)
|
|
|
async function getShareInfo(userID, projectID) {
|
|
|
// 接受到的分享项目
|
|
|
@@ -1331,6 +1357,7 @@ async function doDownLoadAndImport(privateDownloadUrl,info) {
|
|
|
try {
|
|
|
let data = fs.readFileSync(stream.path,'utf-8');
|
|
|
let result = await importProject(data,{session:info.session},info.updateData);
|
|
|
+ doc.projectID = result.constructionProjectID;
|
|
|
if(result.error == 1){
|
|
|
doc.errorMsg = result.msg;
|
|
|
doc.status = "error";
|
|
|
@@ -1353,6 +1380,13 @@ async function importProcessChecking(data){
|
|
|
if(log.status == "finish"){
|
|
|
result.status = "complete";
|
|
|
await importLogsModel.remove({key:data.key});
|
|
|
+ // 获取导入的项目数据
|
|
|
+ if (log.projectID) {
|
|
|
+ const projects = await getPosterityProjects([log.projectID], true);
|
|
|
+ const summaryInfo = await getSummaryInfo([log.projectID]);
|
|
|
+ setupSummaryFields(summaryInfo, projects);
|
|
|
+ result.data = projects;
|
|
|
+ }
|
|
|
}else if(log.status == "start"){
|
|
|
result.status = "processing";
|
|
|
}else if(log.status == "error"){
|
|
|
@@ -1394,7 +1428,8 @@ async function importProject(data,req,updateData) {
|
|
|
result.error = 1;
|
|
|
result.msg = `您创建的项目个数超限,请联系我们的客服人员,或者导出建设项目保存到本地备份,删除云上数据。`;
|
|
|
}
|
|
|
- let [projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap] = await handleMainProjectDatas(mainData,updateData,req.session.sessionUser.id);
|
|
|
+ let [constructionProjectID,projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap] = await handleMainProjectDatas(mainData,updateData,req.session.sessionUser.id);
|
|
|
+ result.constructionProjectID = constructionProjectID;
|
|
|
if(datas.length > 1 ){
|
|
|
for(let i = 1;i<datas.length;i++){
|
|
|
await handleEachProject(datas[i],projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap)
|
|
|
@@ -1509,11 +1544,15 @@ async function handleMainProjectDatas(mainData,updateData,userID) {
|
|
|
let projectIDMap = {},feeRateFileIDMap={},unitPriceFileIDMap={},labourCoeFileIDMap={},calcProgramFileIDMap={};
|
|
|
let tasks = [];
|
|
|
projectIDMap[-1] = -1;//最后一个项目的nextID为-1的情况
|
|
|
+ let constructionProjectID;
|
|
|
//生成新的projectID
|
|
|
for(let p of mainData.projects){
|
|
|
let newProjectID = await getCounterID("projects");
|
|
|
projectIDMap[p.ID] = newProjectID;
|
|
|
- if(p.projType == "Project") mainProjectID = newProjectID;
|
|
|
+ if(p.projType == "Project") {
|
|
|
+ mainProjectID = newProjectID;
|
|
|
+ constructionProjectID = newProjectID;
|
|
|
+ }
|
|
|
if(p.projType == "Tender"){
|
|
|
if(p.property.calcProgramFile) calcProgramFileIDMap[p.property.calcProgramFile.ID] = uuidV1();//新的计算程序文件ID
|
|
|
if(p.property.labourCoeFile) labourCoeFileIDMap[p.property.labourCoeFile.ID] = uuidV1();//新的人工调整系数文件ID
|
|
|
@@ -1562,7 +1601,7 @@ async function handleMainProjectDatas(mainData,updateData,userID) {
|
|
|
await importUnitPriceFiles(mainData,projectIDMap,unitPriceFileIDMap,userID);
|
|
|
|
|
|
|
|
|
- return [projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap]
|
|
|
+ return [constructionProjectID,projectIDMap,labourCoeFileIDMap,calcProgramFileIDMap]
|
|
|
}
|
|
|
|
|
|
|