|
|
@@ -15,15 +15,15 @@ let stdBillCharacterModel = mongoose.model('std_bills_lib_itemCharacter');
|
|
|
const { fixedFlag } = require('../../../public/common_constants');
|
|
|
let LZString = require('lz-string');
|
|
|
const uuidV1 = require('uuid/v1');
|
|
|
-const billType ={
|
|
|
- DXFY:1,//大项费用
|
|
|
- FB:2,//分部
|
|
|
- FX:3,//分项
|
|
|
- BILL:4,//清单
|
|
|
- BX:5//补项
|
|
|
+const billType = {
|
|
|
+ DXFY: 1,//大项费用
|
|
|
+ FB: 2,//分部
|
|
|
+ FX: 3,//分项
|
|
|
+ BILL: 4,//清单
|
|
|
+ BX: 5//补项
|
|
|
};
|
|
|
//上传的09表、广联达表
|
|
|
-const uploadType = {lj: 'lj', gld: 'gld'};
|
|
|
+const uploadType = { lj: 'lj', gld: 'gld' };
|
|
|
// 上传控件
|
|
|
const multiparty = require("multiparty");
|
|
|
const fs = require("fs");
|
|
|
@@ -31,14 +31,14 @@ const fs = require("fs");
|
|
|
const excel = require("node-xlsx");
|
|
|
const urlencode = require('urlencode');
|
|
|
//统一回调函数
|
|
|
-var callback = function(req, res, err, message, data){
|
|
|
- res.json({error: err, message: message, data: data});
|
|
|
+var callback = function (req, res, err, message, data) {
|
|
|
+ res.json({ error: err, message: message, data: data });
|
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
|
- getData: function(req, res){
|
|
|
+ getData: function (req, res) {
|
|
|
var data = JSON.parse(req.body.data);
|
|
|
- billsData.getData(data.projectId, function(err, message, billsList){
|
|
|
+ billsData.getData(data.projectId, function (err, message, billsList) {
|
|
|
if (err === 0) {
|
|
|
callback(req, res, err, message, billsList);
|
|
|
} else {
|
|
|
@@ -47,9 +47,9 @@ module.exports = {
|
|
|
});
|
|
|
},
|
|
|
|
|
|
- getItemTemplate: function(req, res){
|
|
|
+ getItemTemplate: function (req, res) {
|
|
|
//var data = JSON.parse(req.body.data);
|
|
|
- billsData.getItemTemplate(function(err, message, billsItem){
|
|
|
+ billsData.getItemTemplate(function (err, message, billsItem) {
|
|
|
if (billsItem) {
|
|
|
callback(req, res, err, message, billsItem);
|
|
|
} else {
|
|
|
@@ -58,8 +58,8 @@ module.exports = {
|
|
|
});
|
|
|
},
|
|
|
|
|
|
- allocIDs: function(req, res){
|
|
|
- billsData.allocIDs(function(err, message, data){
|
|
|
+ allocIDs: function (req, res) {
|
|
|
+ billsData.allocIDs(function (err, message, data) {
|
|
|
if (err) {
|
|
|
callback(req, res, err, message, data);
|
|
|
} else {
|
|
|
@@ -78,16 +78,16 @@ module.exports = {
|
|
|
});
|
|
|
},
|
|
|
updateBills: async function (req, res) {
|
|
|
- try{
|
|
|
+ try {
|
|
|
let data = JSON.parse(req.body.data);
|
|
|
await billsData.updateBills(data.updateDatas);
|
|
|
callback(req, res, 0, 'success', null);
|
|
|
}
|
|
|
- catch (err){
|
|
|
+ catch (err) {
|
|
|
callback(req, res, 1, err, null);
|
|
|
}
|
|
|
},
|
|
|
- updateBill: async function(request, response) {
|
|
|
+ updateBill: async function (request, response) {
|
|
|
const data = JSON.parse(request.body.data);
|
|
|
const findSet = data.findSet;
|
|
|
const updateData = data.updateData;
|
|
|
@@ -111,90 +111,90 @@ module.exports = {
|
|
|
const err = !result ? 1 : 0;
|
|
|
callback(request, response, err, message, null);
|
|
|
},
|
|
|
- singleDelete:async function(req, res){
|
|
|
- let result={
|
|
|
- error:0
|
|
|
+ singleDelete: async function (req, res) {
|
|
|
+ let result = {
|
|
|
+ error: 0
|
|
|
}
|
|
|
try {
|
|
|
let data = req.body.data;
|
|
|
data = JSON.parse(data);
|
|
|
let tasks = generateSingleDeleteTasks(data);
|
|
|
- let resultData= await billsData.model.bulkWrite(tasks);
|
|
|
+ let resultData = await billsData.model.bulkWrite(tasks);
|
|
|
//删除工程量明细
|
|
|
- await quantity_detail.deleteByQuery({projectID: data.projectID, billID: data.ID}) ;
|
|
|
- result.data=resultData;
|
|
|
- }catch (err){
|
|
|
+ await quantity_detail.deleteByQuery({ projectID: data.projectID, billID: data.ID });
|
|
|
+ result.data = resultData;
|
|
|
+ } catch (err) {
|
|
|
logger.err(err);
|
|
|
- result.error=1;
|
|
|
+ result.error = 1;
|
|
|
result.message = err.message;
|
|
|
}
|
|
|
res.json(result);
|
|
|
},
|
|
|
- multiDelete:async function(req, res){
|
|
|
- let result={
|
|
|
- error:0
|
|
|
+ multiDelete: async function (req, res) {
|
|
|
+ let result = {
|
|
|
+ error: 0
|
|
|
};
|
|
|
try {
|
|
|
let data = req.body.data;
|
|
|
data = JSON.parse(data);
|
|
|
- result.data=await doBillsOrRationsDelete(data);
|
|
|
- }catch (err){
|
|
|
+ result.data = await doBillsOrRationsDelete(data);
|
|
|
+ } catch (err) {
|
|
|
logger.err(err);
|
|
|
- result.error=1;
|
|
|
+ result.error = 1;
|
|
|
result.message = err.message;
|
|
|
}
|
|
|
res.json(result);
|
|
|
},
|
|
|
- getSectionInfo:async function(req, res){
|
|
|
- let result={
|
|
|
- error:0
|
|
|
+ getSectionInfo: async function (req, res) {
|
|
|
+ let result = {
|
|
|
+ error: 0
|
|
|
}
|
|
|
try {
|
|
|
let data = req.body.data;
|
|
|
data = JSON.parse(data);
|
|
|
- let sectionInfo= await bill_facade.getSectionInfo(data);
|
|
|
- result.data=sectionInfo;
|
|
|
- }catch (err){
|
|
|
+ let sectionInfo = await bill_facade.getSectionInfo(data);
|
|
|
+ result.data = sectionInfo;
|
|
|
+ } catch (err) {
|
|
|
logger.err(err);
|
|
|
- result.error=1;
|
|
|
+ result.error = 1;
|
|
|
result.message = err.message;
|
|
|
}
|
|
|
res.json(result);
|
|
|
},
|
|
|
- reorganizeFBFX:async function(req,res){
|
|
|
- let result={
|
|
|
- error:0
|
|
|
+ reorganizeFBFX: async function (req, res) {
|
|
|
+ let result = {
|
|
|
+ error: 0
|
|
|
}
|
|
|
try {
|
|
|
let data = req.body.data;
|
|
|
data = JSON.parse(data);
|
|
|
- let reorganizeResult= await bill_facade.reorganizeFBFX(data);
|
|
|
- result.data=reorganizeResult;
|
|
|
- }catch (err){
|
|
|
+ let reorganizeResult = await bill_facade.reorganizeFBFX(data);
|
|
|
+ result.data = reorganizeResult;
|
|
|
+ } catch (err) {
|
|
|
logger.err(err);
|
|
|
- result.error=1;
|
|
|
+ result.error = 1;
|
|
|
result.message = err.message;
|
|
|
}
|
|
|
res.json(result);
|
|
|
},
|
|
|
- pasteBlock:async function(req,res){
|
|
|
- let result={
|
|
|
- error:0
|
|
|
+ pasteBlock: async function (req, res) {
|
|
|
+ let result = {
|
|
|
+ error: 0
|
|
|
};
|
|
|
try {
|
|
|
let data = req.body.data;
|
|
|
data = JSON.parse(data);
|
|
|
- let pasteResult = await bill_facade.pasteBlock(data,req.session.sessionCompilation);
|
|
|
+ let pasteResult = await bill_facade.pasteBlock(data, req.session.sessionCompilation);
|
|
|
result.data = pasteResult;
|
|
|
- }catch (err){
|
|
|
+ } catch (err) {
|
|
|
logger.err(err);
|
|
|
- result.error=1;
|
|
|
+ result.error = 1;
|
|
|
result.message = err.message;
|
|
|
}
|
|
|
res.json(result);
|
|
|
},
|
|
|
//下载导入清单示例
|
|
|
- downloadExample: async function(request, response) {
|
|
|
+ downloadExample: async function (request, response) {
|
|
|
try {
|
|
|
const filePath = './public/static/清单示例.xlsx';
|
|
|
const stats = fs.statSync(filePath);
|
|
|
@@ -213,15 +213,15 @@ module.exports = {
|
|
|
|
|
|
},
|
|
|
//导入清单
|
|
|
- import: async function(req, res){
|
|
|
+ import: async function (req, res) {
|
|
|
let responseData = {
|
|
|
err: 0,
|
|
|
msg: '',
|
|
|
data: []
|
|
|
};
|
|
|
const form = new multiparty.Form();
|
|
|
- form.parse(req, async function(err, fields, files) {
|
|
|
- try{
|
|
|
+ form.parse(req, async function (err, fields, files) {
|
|
|
+ try {
|
|
|
const projectID = fields.projectID !== undefined && fields.projectID.length > 0 ?
|
|
|
parseInt(fields.projectID[0]) : 0;
|
|
|
if (projectID <= 0) {
|
|
|
@@ -230,21 +230,21 @@ module.exports = {
|
|
|
//导入清单数据
|
|
|
let compressData = fields.compressData !== undefined && fields.compressData.length > 0 ?
|
|
|
fields.compressData[0] : null;
|
|
|
- if(compressData === null){
|
|
|
+ if (compressData === null) {
|
|
|
throw 'excel没有对应数据'
|
|
|
}
|
|
|
- let importData = JSON.parse(LZString.decompressFromUTF16(compressData));
|
|
|
+ let { insertData, removeData } = JSON.parse(LZString.decompressFromUTF16(compressData));
|
|
|
//导入表
|
|
|
let importDateA = +new Date();
|
|
|
- let updateFrontData = await importSheet(importData, req.session.sessionUser.id, projectID);
|
|
|
- if(updateFrontData){
|
|
|
+ let updateFrontData = await importSheet(insertData, removeData, req.session.sessionUser.id, projectID);
|
|
|
+ if (updateFrontData) {
|
|
|
responseData.data.push(updateFrontData);
|
|
|
}
|
|
|
let importDateB = +new Date();
|
|
|
console.log(`导入时间: ${importDateB - importDateA}=========================================================================`);
|
|
|
res.json(responseData);
|
|
|
}
|
|
|
- catch (error){
|
|
|
+ catch (error) {
|
|
|
responseData.err = 1;
|
|
|
console.log(error);
|
|
|
responseData.msg = typeof error === 'object' ? '上传失败' : error;
|
|
|
@@ -264,77 +264,78 @@ module.exports = {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-async function importSheet(excelBills, userID, projectID,){
|
|
|
+async function importSheet(excelBills, removeData, userID, projectID,) {
|
|
|
//导入位置的有固定行
|
|
|
let flag = fixedFlag.ONE_SEVEN_BILLS; //第100章至700章清单
|
|
|
- let fixedBill = await billsData.model.findOne({projectID: projectID, 'flags.flag': flag, deleteInfo: null});
|
|
|
+ let fixedBill = await billsData.model.findOne({ projectID: projectID, 'flags.flag': flag, deleteInfo: null });
|
|
|
//删除相关数据
|
|
|
- let deleteDatas = await billsData.deepDeleteBill([fixedBill], userID, projectID);
|
|
|
+ // let deleteDatas = await billsData.deepDeleteBill([fixedBill], userID, projectID);
|
|
|
+ let deleteDatas = await billsData.newDeepDeleteBill(removeData.rBillIDs, removeData.rRationIDs);
|
|
|
//新增清单数据
|
|
|
await billsData.importBills(excelBills);
|
|
|
//返回数据以更新前端
|
|
|
- return {fixedBill: fixedBill, insert: {bill: excelBills, ration: []}, remove: {bill: deleteDatas.bill, ration: deleteDatas.ration}};
|
|
|
+ return { fixedBill: fixedBill, insert: { bill: excelBills, ration: [] }, remove: { bill: deleteDatas.bill, ration: deleteDatas.ration } };
|
|
|
}
|
|
|
|
|
|
|
|
|
-function getImportFlag(position){
|
|
|
- const fixedItem = {'fbfx': fixedFlag.SUB_ENGINERRING, 'jscsxm': fixedFlag.CONSTRUCTION_TECH, 'zzcsxm': fixedFlag.CONSTRUCTION_ORGANIZATION};
|
|
|
+function getImportFlag(position) {
|
|
|
+ const fixedItem = { 'fbfx': fixedFlag.SUB_ENGINERRING, 'jscsxm': fixedFlag.CONSTRUCTION_TECH, 'zzcsxm': fixedFlag.CONSTRUCTION_ORGANIZATION };
|
|
|
return fixedItem[position] ? fixedItem[position] : null;
|
|
|
}
|
|
|
-function isDef(data){
|
|
|
+function isDef(data) {
|
|
|
return typeof data !== 'undefined' && data !== null && data !== '';
|
|
|
}
|
|
|
|
|
|
async function doBillsOrRationsDelete(data) {
|
|
|
let billTask = [];
|
|
|
let deleteBillIDs = [];
|
|
|
- let rationTask=[];
|
|
|
- let deleteRationIDs=[];
|
|
|
- let qd_query=null;
|
|
|
- let sub_query=null;
|
|
|
- if(data['bills']){
|
|
|
- billTask = generateUpdateTasks(data['bills'],data.projectID,data.user_id);
|
|
|
- for(let b_key in data['bills']){
|
|
|
- if(data['bills'][b_key]===true){
|
|
|
- deleteBillIDs.push(b_key+'');
|
|
|
+ let rationTask = [];
|
|
|
+ let deleteRationIDs = [];
|
|
|
+ let qd_query = null;
|
|
|
+ let sub_query = null;
|
|
|
+ if (data['bills']) {
|
|
|
+ billTask = generateUpdateTasks(data['bills'], data.projectID, data.user_id);
|
|
|
+ for (let b_key in data['bills']) {
|
|
|
+ if (data['bills'][b_key] === true) {
|
|
|
+ deleteBillIDs.push(b_key + '');
|
|
|
}
|
|
|
}
|
|
|
- if(deleteBillIDs.length>0){
|
|
|
- qd_query={projectID: data.projectID, billID: {"$in": deleteBillIDs}};
|
|
|
+ if (deleteBillIDs.length > 0) {
|
|
|
+ qd_query = { projectID: data.projectID, billID: { "$in": deleteBillIDs } };
|
|
|
}
|
|
|
}
|
|
|
- if(data['ration']){
|
|
|
- rationTask = generateUpdateTasks(data['ration'],data.projectID,data.user_id);
|
|
|
- for(let r_key in data['ration']){
|
|
|
- if(data['ration'][r_key]===true){
|
|
|
- deleteRationIDs.push(r_key+'');
|
|
|
+ if (data['ration']) {
|
|
|
+ rationTask = generateUpdateTasks(data['ration'], data.projectID, data.user_id);
|
|
|
+ for (let r_key in data['ration']) {
|
|
|
+ if (data['ration'][r_key] === true) {
|
|
|
+ deleteRationIDs.push(r_key + '');
|
|
|
}
|
|
|
}
|
|
|
- if(deleteRationIDs.length>0){
|
|
|
- if(qd_query==null){//说明没删除清单
|
|
|
- qd_query={projectID: data.projectID, rationID: {"$in": deleteRationIDs}};
|
|
|
- }else {
|
|
|
- qd_query={
|
|
|
- "$or":[
|
|
|
- {projectID: data.projectID, billID: {"$in": deleteBillIDs}},
|
|
|
- {projectID: data.projectID, rationID: {"$in": deleteRationIDs}}
|
|
|
+ if (deleteRationIDs.length > 0) {
|
|
|
+ if (qd_query == null) {//说明没删除清单
|
|
|
+ qd_query = { projectID: data.projectID, rationID: { "$in": deleteRationIDs } };
|
|
|
+ } else {
|
|
|
+ qd_query = {
|
|
|
+ "$or": [
|
|
|
+ { projectID: data.projectID, billID: { "$in": deleteBillIDs } },
|
|
|
+ { projectID: data.projectID, rationID: { "$in": deleteRationIDs } }
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
- sub_query={projectID: data.projectID, rationID: {"$in": deleteRationIDs}};
|
|
|
+ sub_query = { projectID: data.projectID, rationID: { "$in": deleteRationIDs } };
|
|
|
}
|
|
|
}
|
|
|
//先删除工程量明细
|
|
|
- if(qd_query!=null){
|
|
|
- await quantity_detail.deleteByQuery(qd_query) ;
|
|
|
+ if (qd_query != null) {
|
|
|
+ await quantity_detail.deleteByQuery(qd_query);
|
|
|
}
|
|
|
- if(sub_query!=null){
|
|
|
+ if (sub_query != null) {
|
|
|
await raiton_facade.deleteSubListByQuery(sub_query);
|
|
|
}
|
|
|
- if(rationTask.length>0){
|
|
|
+ if (rationTask.length > 0) {
|
|
|
await ration_model.model.bulkWrite(rationTask);//删除定额
|
|
|
}
|
|
|
- if(billTask.length>0){
|
|
|
+ if (billTask.length > 0) {
|
|
|
await billsData.model.bulkWrite(billTask);//删除清单
|
|
|
}
|
|
|
return 'success';
|
|
|
@@ -342,41 +343,41 @@ async function doBillsOrRationsDelete(data) {
|
|
|
|
|
|
|
|
|
|
|
|
-function generateSingleDeleteTasks(data) {
|
|
|
+function generateSingleDeleteTasks(data) {
|
|
|
let updateData = data.updateData;
|
|
|
- updateData[data.ID]=true;
|
|
|
- let tasks = generateUpdateTasks(updateData,data.projectID,data.user_id);
|
|
|
+ updateData[data.ID] = true;
|
|
|
+ let tasks = generateUpdateTasks(updateData, data.projectID, data.user_id);
|
|
|
return tasks;
|
|
|
}
|
|
|
|
|
|
-function generateUpdateTasks(data,projectID,user_id) {
|
|
|
- let tasks=[];
|
|
|
+function generateUpdateTasks(data, projectID, user_id) {
|
|
|
+ let tasks = [];
|
|
|
let updateData = data;
|
|
|
- let deleteInfo={deleted: true, deleteDateTime: new Date(), deleteBy: user_id};
|
|
|
- for(let key in updateData){
|
|
|
- let task={
|
|
|
- updateOne:{
|
|
|
- filter:{
|
|
|
- ID:key,
|
|
|
- projectID:projectID
|
|
|
+ let deleteInfo = { deleted: true, deleteDateTime: new Date(), deleteBy: user_id };
|
|
|
+ for (let key in updateData) {
|
|
|
+ let task = {
|
|
|
+ updateOne: {
|
|
|
+ filter: {
|
|
|
+ ID: key,
|
|
|
+ projectID: projectID
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
- if(updateData[key]===true){
|
|
|
+ if (updateData[key] === true) {
|
|
|
//原先是假删除,现在改成真删除
|
|
|
task = {
|
|
|
- deleteOne:{
|
|
|
- filter:{
|
|
|
- ID:key,
|
|
|
- projectID:projectID
|
|
|
+ deleteOne: {
|
|
|
+ filter: {
|
|
|
+ ID: key,
|
|
|
+ projectID: projectID
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/* task.updateOne.update={
|
|
|
deleteInfo:deleteInfo
|
|
|
};*/
|
|
|
- }else {
|
|
|
- task.updateOne.update=updateData[key];
|
|
|
+ } else {
|
|
|
+ task.updateOne.update = updateData[key];
|
|
|
}
|
|
|
tasks.push(task);
|
|
|
}
|