| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | 
							- /**
 
-  * Created by zhang on 2018/1/31.
 
-  */
 
- const mongoose = require('mongoose');
 
- const installSectionModel = mongoose.model("std_ration_lib_installationSection");
 
- const installFeeItemModel = mongoose.model("std_ration_lib_installation");
 
- let installationFeeModel = mongoose.model("installation_fee");
 
- let engineeringModel = mongoose.model('engineering_lib');
 
- const uuidV1 = require('uuid/v1');
 
- let consts = require('../../main/models/project_consts');
 
- module.exports={
 
-     copyInstallationFeeFromLib:copyInstallationFeeFromLib,
 
-     updateInstallationFee:updateInstallationFee,
 
-     resetToDefault:resetToDefault,
 
-     getData:getData
 
- };
 
- async function updateInstallationFee(projectID,updateData) {
 
-     let result = {};
 
-     let tasks = generateUpdateTask(projectID,updateData);
 
-     if(tasks.length>0){
 
-          result =await installationFeeModel.bulkWrite(tasks);
 
-     }
 
-     return result;
 
- }
 
- function generateUpdateTask(projectID,updateData) {
 
-     let tasks = [];
 
-     if(updateData){
 
-         if(updateData instanceof Array){
 
-             for(let ud of updateData){
 
-                 let [uquery,udoc] = createUpdateQuery(projectID,ud);
 
-                 let task={
 
-                     updateOne:{
 
-                         filter:uquery,
 
-                         update :udoc
 
-                     }
 
-                 };
 
-                 tasks.push(task);
 
-             }
 
-         } else {
 
-             let [query,doc] = createUpdateQuery(projectID,updateData);
 
-             let task={
 
-                 updateOne:{
 
-                     filter:query,
 
-                     update :doc
 
-                 }
 
-             };
 
-             tasks.push(task);
 
-         }
 
-     }
 
-     return tasks;
 
- }
 
- function createUpdateQuery(projectID,data) {
 
-     let updateKey = data.type+'.ID';
 
-     let query = {
 
-         projectID:projectID,
 
-         ID:data.ID,
 
-     };
 
-     query[updateKey] = data.itemID;
 
-     let udoc = {};
 
-     for(let property in data.doc){
 
-         udoc[data.type+'.$.'+property] = data.doc[property];
 
-     }
 
-     return [query,udoc];
 
- }
 
- /*[
 
-     {libID:56,ID:123558}
 
- ]*/
 
- async function resetToDefault(projectID,installFees) {
 
-     let newInstallFees = [];
 
-     for(let inf of installFees){
 
-         let newInstallationFee = await getInstallationFeeFromLib(inf.libID);
 
-         if(newInstallationFee){
 
-           let updateResult =  await installationFeeModel.findOneAndUpdate({projectID:projectID,ID:inf.ID},newInstallationFee,{new: true});
 
-             newInstallFees.push(updateResult);
 
-         }
 
-     }
 
-     return newInstallFees;
 
- }
 
- async function copyInstallationFeeFromLib(projectID,engineering_id) {
 
-     //安装增加费用内嵌文档的方式
 
-     let engineering = await engineeringModel.findById(engineering_id);
 
-     let ration_lib = engineering.ration_lib;
 
-     let installationFeeList = [];
 
-     for(let rl of ration_lib){
 
-         let newInstallationFee = await getInstallationFeeFromLib(rl.id);
 
-         if(newInstallationFee){
 
-             newInstallationFee.libID = rl.id;
 
-             newInstallationFee.libName = rl.name;
 
-             newInstallationFee.projectID = projectID;
 
-             newInstallationFee.ID = uuidV1();
 
-             installationFeeList.push(newInstallationFee);
 
-         }
 
-     }
 
-     if(installationFeeList.length > 0){
 
-         await installationFeeModel.insertMany(installationFeeList);
 
-     }
 
- }
 
- async function getInstallationFeeFromLib(libID) {
 
-         let installFeeItems = await installFeeItemModel.find({'rationRepId':libID});
 
-         let installSections = await installSectionModel.find({'rationRepId':libID});
 
-         let positionMap = {};
 
-         let create = false;
 
-         let newInstallationFee={};
 
-         if(installFeeItems && installFeeItems.length > 0) {//费用项
 
-             create = true;
 
-             let tem_installFeeItem = [];
 
-             for(let ifee of installFeeItems){
 
-                 let tem_fee ={
 
-                     feeItem:ifee.feeItem,
 
-                     feeType:ifee.feeType,
 
-                     position:ifee.position,
 
-                     ID:ifee.ID
 
-                 };
 
-                 positionMap[ifee.ID] = ifee.position;//设置选取位置对应表,为给规项赋值
 
-                 tem_installFeeItem.push(tem_fee);
 
-             }
 
-             newInstallationFee.installFeeItem = tem_installFeeItem;
 
-         }
 
-         if(installSections && installSections.length > 0){//章节项
 
-             create = true;
 
-             let tem_installSections = [];
 
-             let tem_feeRules = [];
 
-             for(let isect of installSections){
 
-                 let tem_sec={
 
-                     ID:isect.ID,
 
-                     name:isect.name,
 
-                     feeItemId:isect.feeItemId
 
-                 };
 
-                 if(isect.feeRule && isect.feeRule.length > 0){//规则项
 
-                     tem_sec.feeRuleId = isect.feeRule[0].ID; //选中第一个
 
-                     for(let ifeeR of isect.feeRule){
 
-                         let tem_feeRule = {
 
-                             ID: ifeeR.ID,
 
-                             code: ifeeR.code,
 
-                             rule: ifeeR.rule,
 
-                             base: ifeeR.base,
 
-                             feeRate: ifeeR.feeRate,
 
-                             labour: ifeeR.labour,
 
-                             material: ifeeR.material,
 
-                             machine: ifeeR.machine,
 
-                             sectionId:isect.ID,
 
-                             feeItemId:isect.feeItemId,
 
-                             position:positionMap[isect.feeItemId]
 
-                         };
 
-                         tem_feeRules.push(tem_feeRule);
 
-                     }
 
-                 }else {
 
-                     tem_sec.feeRuleId = "";
 
-                 }
 
-                 tem_installSections.push(tem_sec);
 
-             }
 
-             newInstallationFee.installSection = tem_installSections;
 
-             newInstallationFee.feeRule = tem_feeRules;
 
-         }
 
-         if(create == true){
 
-             return newInstallationFee;
 
-         }
 
-         return null;
 
- }
 
- function getData(projectID, callback) {
 
-     installationFeeModel.find({'projectID': projectID}, (err, datas) => {
 
-         if (err) {
 
-             callback(1, '', null);
 
-         } else {
 
-             callback(0, consts.projectConst.INSTALLATION_FEE, datas);
 
-         }
 
-     })
 
- }
 
 
  |