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);
- }
- })
- }
|