| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 | 
							- /**
 
-  * Created by zhang on 2018/1/26.
 
-  */
 
- let mongoose = require('mongoose');
 
- let logger = require("../../../logs/log_helper").logger;
 
- let  projectsModel = mongoose.model('projects');
 
- let async_n = require("async");
 
- let _ = require('lodash');
 
- let ration_model = require('../models/ration');
 
- let bill_model = require('../models/bills');
 
- let consts = require('../models/project_consts');
 
- let projectConsts = consts.projectConst;
 
- let ration_glj_model = mongoose.model('ration_glj');
 
- let project_glj_model = mongoose.model('glj_list');
 
- let ration_glj_facade = require("../../ration_glj/facade/ration_glj_facade");
 
- const uuidV1 = require('uuid/v1');
 
- const gljUtil = require('../../../public/gljUtil');
 
- module.exports = {
 
-     markUpdateProject:markUpdateProject,
 
-     removeProjectMark:removeProjectMark,
 
-     updateNodes:updateNodes,
 
-     calcInstallationFee:calcInstallationFee,
 
-     saveProperty: saveProperty
 
- };
 
- async function calcInstallationFee(data) {
 
-     let result={};
 
-     let billTasks  = generateTasks(data.bills,data.useID);
 
-     let rationTasks = generateTasks(data.ration,data.useID);
 
-     if(billTasks.length>0){
 
-         await bill_model.model.bulkWrite(billTasks);
 
-     }
 
-     console.log(rationTasks);
 
-     if(rationTasks.length>0){
 
-         await ration_model.model.bulkWrite(rationTasks);
 
-     }
 
-     //如果删除定额,需要删除对应的工料机
 
-     if(data.ration.delete.length>0){
 
-         let rationIDS = _.map(data.ration.delete,'ID');
 
-         await ration_glj_model.deleteMany({projectID: data.ration.delete[0].projectID, rationID: {"$in": rationIDS}});//删除定额工料机
 
-     }
 
-     let rationGLJTasks = [];
 
-     let updateList = [];
 
-     if(data.ration.update.length>0){//如果有需要更新的定额工料机
 
-         for(let ur of data.ration.update){
 
-             for(let g of ur.glj){
 
-                 let gTasks = {
 
-                     updateOne:{
 
-                         filter:{
 
-                             ID:g.ID,
 
-                             projectID:g.projectID
 
-                         },
 
-                         update :{
 
-                             quantity:g.quantity,
 
-                             rationItemQuantity:g.rationItemQuantity
 
-                         }
 
-                     }
 
-                 };
 
-                 rationGLJTasks.push(gTasks);
 
-                 updateList.push(g);
 
-             }
 
-         }
 
-     }
 
-     if(rationGLJTasks.length>0){
 
-        await ration_glj_model.bulkWrite(rationGLJTasks);
 
-     }
 
-     let newGljList = [];
 
-     if(data.ration.add.length>0){//新增的安装子目要增加对应的工料机
 
-         for(let nr of data.ration.add){
 
-             for(let tkey in nr.glj){
 
-                 newGljList.push(await addInstallationGLJ(nr.glj[tkey]));
 
-             }
 
-         }
 
-     }
 
-     if(newGljList.length>0){
 
-         await ration_glj_model.insertMany(newGljList);
 
-     }
 
-     result.update = updateList;
 
-     result.add = newGljList;
 
-     return result;
 
- }
 
- async function addInstallationGLJ(glj) {
 
-     glj.ID = uuidV1();
 
-     let info = await ration_glj_facade.getInfoFromProjectGLJ(glj);
 
-     let newRecode  = ration_glj_facade.createNewRecord(info);
 
-     return newRecode;
 
- }
 
- function generateTasks(data,userID) {
 
-     let tasks=[];
 
-     let deleteInfo={deleted: true, deleteDateTime: new Date(), deleteBy: userID};
 
-     if(data.delete && data.delete.length > 0){
 
-         for(let bd of data.delete){
 
-             let task={
 
-                 updateOne:{
 
-                     filter:{
 
-                         ID:bd.ID,
 
-                         projectID:bd.projectID
 
-                     },
 
-                     update :{
 
-                         deleteInfo:deleteInfo
 
-                     }
 
-                 }
 
-             };
 
-             tasks.push(task);
 
-         }
 
-     }
 
-     if(data.add && data.add.length > 0){
 
-         for(let n_data of data.add){
 
-             let task = {
 
-                 insertOne :{
 
-                     document:n_data
 
-                 }
 
-             };
 
-             tasks.push(task);
 
-         }
 
-     }
 
-     return tasks;
 
- }
 
- async function updateNodes(datas){
 
-     let nodeGroups = _.groupBy(datas,'type');
 
-     let rationTasks = [];
 
-     let billTasks = [];
 
-     let rationGLJTasks = [];
 
-     let projectGLJTasks = [];
 
-     let projectTasks = [];
 
-     let asyncTasks = [];
 
-     for(let type in nodeGroups){
 
-         for(let node of nodeGroups[type]){
 
-             if(type == projectConsts.BILLS){
 
-                 billTasks.push(getTask(node));
 
-             }else if(type == projectConsts.RATION){
 
-                 rationTasks.push(getTask(node));
 
-             }else if(type == projectConsts.RATION_GLJ){
 
-                 rationGLJTasks.push(getTask(node));
 
-             }else if(type == projectConsts.PROJECTGLJ){
 
-                 projectGLJTasks.push(getTask(node,'id'));
 
-             }else if(type == projectConsts.PROJECT){
 
-                 projectTasks.push(getTask(node));
 
-             }
 
-         }
 
-     }
 
-     rationTasks.length>0?asyncTasks.push(ration_model.model.bulkWrite(rationTasks)):'';
 
-     billTasks.length>0?asyncTasks.push(bill_model.model.bulkWrite(billTasks)):"";
 
-     rationGLJTasks.length>0?asyncTasks.push(ration_glj_model.bulkWrite(rationGLJTasks)):"";
 
-     projectGLJTasks.length>0?asyncTasks.push(project_glj_model.bulkWrite(projectGLJTasks)):"";
 
-     projectTasks.length>0?asyncTasks.push(projectsModel.bulkWrite(projectTasks)):"";
 
-     return  asyncTasks.length>0?await Promise.all(asyncTasks):"";
 
-     function getTask(node,idFiled = 'ID') {
 
-         let task={
 
-             updateOne:{
 
-                 filter:{},
 
-                 update :_.cloneDeep(node.data)
 
-             }
 
-         };
 
-         task.updateOne.filter[idFiled] = node.data[idFiled];//现在复制项目也重新生成一个新的ID了,所以ID是唯一的
 
-         delete task.updateOne.update[idFiled];//防止误操作
 
-         return task;
 
-     }
 
- }
 
- /*function updateNodes(datas,callback) {
 
-     let tasks = [];
 
-     for(let node of datas){
 
-         tasks.push(updateOne(node))
 
-     }
 
-     async_n.parallel(tasks, function(err, results) {
 
-         if (!err){
 
-             callback(0, '', results);
 
-         }
 
-         else{
 
-             console.log(err);
 
-             callback(1, 'save project failed'+err.message, null);
 
-         }
 
-     });
 
-     function updateOne(node) {
 
-         if(node.type == projectConsts.BILLS){
 
-             return function (asCallback) {
 
-                 bill_model.model.findOneAndUpdate({projectID: node.data.projectID, ID: node.data.ID,deleteInfo: null}, node.data,{new: true}, asCallback);
 
-             }
 
-         }else if(node.type ==projectConsts.RATION){
 
-             return function (asCallback) {
 
-                 ration_model.model.findOneAndUpdate({projectID: node.data.projectID, ID: node.data.ID,deleteInfo: null}, node.data,{new: true}, asCallback);
 
-             }
 
-         }
 
-     }
 
- }*/
 
- //data = {feeRateID:111111,projectID:1245}; type = feeRate
 
- async function markUpdateProject(data,type) {
 
-     let tasks=[];
 
-     let query = {deleteInfo:null};
 
-     let result = null;
 
-     if(type=="feeRate"){//更改了费率
 
-         query['property.feeFile.id'] = data.feeRateID;
 
-     }
 
-     if(type=="unitFile"){//更改了单价文件
 
-         query['property.unitPriceFile.id'] = data.unitFileID;//unitPriceFile
 
-     }
 
-     let projects =await projectsModel.find(query);
 
-     for(let p of projects){
 
-         if(p.ID!=data.projectID){//当前项目不用更新
 
-             tasks.push(generateMarkTask(type,p.ID));
 
-         }
 
-     }
 
-     if(tasks.length>0){
 
-         result = await projectsModel.bulkWrite(tasks);
 
-     }
 
-     return result;
 
- }
 
- async function removeProjectMark(projectID) {
 
-     return await projectsModel.findOneAndUpdate({ID:projectID},{"$unset":{"changeMark":1}});
 
- }
 
- function generateMarkTask(value,projectID) {
 
-     let task = {
 
-         updateOne:{
 
-             filter:{
 
-                 ID:projectID
 
-             },
 
-             update:{
 
-                 changeMark:value
 
-             }
 
-         }
 
-     };
 
-     return task
 
- }
 
- // {projectID: 5, propertyName: 'aaa', propertyValue: 1}
 
- function saveProperty(data, callback){
 
-     let obj = {};
 
-     let pn = 'property.' + data.propertyName;
 
-     obj[pn] = data.propertyValue;
 
-     projectsModel.update({"ID": data.projectID}, obj, function (err) {
 
-         if (err) {
 
-             logger.err(pn + ' save error: ' + err);
 
-             callback(err, null)
 
-         } else {
 
-             logger.info(pn + ' saved.');
 
-             callback('', null);
 
-         }}
 
-     );
 
- }
 
 
  |