/** * Created by jimiz on 2017/4/7. */ let mongoose = require('mongoose'); var billsData = require('../models/bills'); let ration_model = require('../models/ration'); let ProjectsData = require('../../pm/models/project_model').project; let logger = require("../../../logs/log_helper").logger; let quantity_detail = require("../facade/quantity_detail_facade"); let ration_glj = mongoose.model('ration_glj'); let ration_coe = mongoose.model('ration_coe'); //统一回调函数 var callback = function(req, res, err, message, data){ res.json({error: err, message: message, data: data}); }; module.exports = { getData: function(req, res){ var data = JSON.parse(req.body.data); billsData.getData(data.projectId, function(err, message, billsList){ if (err === 0) { callback(req, res, err, message, billsList); } else { callback(req, res, err, message, null); } }); }, getItemTemplate: function(req, res){ //var data = JSON.parse(req.body.data); billsData.getItemTemplate(function(err, message, billsItem){ if (billsItem) { callback(req, res, err, message, billsItem); } else { callback(req, res, err, message, null); } }); }, allocIDs: function(req, res){ billsData.allocIDs(function(err, message, data){ if (err) { callback(req, res, err, message, data); } else { callback(req, res, err, message, null); } }); }, //zhong 2017-9-1 updateCharacterContent: function (req, res) { let data = JSON.parse(req.body.data); let findSet = data.findSet, updateObj = data.updateObj, txtObj = data.txtObj; billsData.updateCharacterContent(findSet, updateObj, txtObj, function (err, message) { callback(req, res, err, message, null); }); }, updateBill: async function(request, response) { const data = JSON.parse(request.body.data); const findSet = data.findSet; const updateData = data.updateData; let settingData = {}; // 筛选出要保存在项目属性的设置 for (const index in updateData) { if (updateData[index].field === 'addRule') { settingData = updateData[index].value; delete updateData[index]; } } // 更新项目属性 const propertyUpdateData = { property: 'addRule', data: settingData }; const projectResult = await ProjectsData.updateProjectProperty(findSet.projectID, propertyUpdateData); const result = await billsData.updateBill(findSet, updateData); const message = !result || !projectResult ? '修改失败' : '修改成功'; const err = !result || !projectResult ? 1 : 0; callback(request, response, err, message, null); }, 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); //删除工程量明细 await quantity_detail.deleteByQuery({projectID: data.projectID, billID: data.ID}) ; result.data=resultData; }catch (err){ logger.err(err); result.error=1; result.message = err.message; } res.json(result); }, 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){ logger.err(err); result.error=1; result.message = err.message; } res.json(result); } }; 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+''); } } 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(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}}; } } //先删除工程量明细 if(qd_query!=null){ await quantity_detail.deleteByQuery(qd_query) ; } if(sub_query!=null){ await ration_coe.deleteMany(sub_query);//删除附注条件 await ration_glj.deleteMany(sub_query);//删除定额工料机 } if(rationTask.length>0){ await ration_model.model.bulkWrite(rationTask);//删除定额 } if(billTask.length>0){ await billsData.model.bulkWrite(billTask);//删除清单 } return 'success'; } function generateSingleDeleteTasks(data) { let updateData = data.updateData; updateData[data.ID]=true; let tasks = generateUpdateTasks(updateData,data.projectID,data.user_id); return 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 } } }; if(updateData[key]===true){ task.updateOne.update={ deleteInfo:deleteInfo }; }else { task.updateOne.update=updateData[key]; } tasks.push(task); } return tasks; }