123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /**
- * Created by zhang on 2018/4/17.
- */
- let mongoose = require('mongoose');
- let _ = require("lodash");
- let feeRate_facade = require('../../fee_rates/facade/fee_rates_facade');
- const uuidV1 = require('uuid/v1');
- let projectModel = mongoose.model('projects');
- let feeRateModel = mongoose.model('fee_rates');
- let feeRateFileModel = mongoose.model('fee_rate_file');
- let unitPriceFileModel = mongoose.model("unit_price_file");
- let mixRatioModel = mongoose.model("mix_ratio");
- let unitPriceModel = mongoose.model("unit_price");
- import CounterModel from "../../glj/models/counter_model";
- module.exports={
- moveProject:moveProject,
- copyProject:copyProject
- };
- async function copyProject(userID, compilationID,data) {;
- console.log(userID);
- console.log(compilationID);
- console.log(data);
- let p = Promise.all([getFeeRate(),getUnitfile()]);
- return await p;
- }
- async function getFeeRate() {
- return await feeRateFileModel.findOne({ID:"e7527fa0-3bd0-11e8-bced-7f72a1e036f0"});
- }
- async function getUnitfile() {
- return await unitPriceFileModel.findOne({id:958});
- }
- async function moveProject(data) {
- data = JSON.parse(data);
- let projectMap = data.projectMap,feeRateMap = data.feeRateMap,unitPriceMap = data.unitPriceMap;
- let projectTasks = [],feeRateTask=[],feeRateFileTask=[],unitPriceTask=[],unitPriceFileTask=[],mixRatioTask=[];
- let feeUniqMap=[],priceUniqMap={};//费率、单价文件唯一映射表当移动多个项目时,任务有可能出现重复的情况
- if(!_.isEmpty(feeRateMap)&&data.rootProjectID){//如果费率有修改
- let feeRates =await feeRate_facade.getFeeRatesByProject(data.rootProjectID);//取目标建设项目的所有费率文件,重名检查
- for(let projectID in feeRateMap){
- let rename = feeRateMap[projectID].name;
- let feeRateID = feeRateMap[projectID].query.ID;
- let checkFee = _.find(feeRates,{'name':rename});
- let newID = feeRateID;
- if(checkFee){//说明费率名字已存在,需要重命名
- rename = feeUniqMap[feeRateID]?feeUniqMap[feeRateID].name:rename + '(' + new Date().Format('MM-dd hh:mm:ss') + '移动)';
- projectMap[projectID]['update']['property.feeFile.name'] = rename;
- if(feeRateMap[projectID].action == 'move'){
- feeRateMap[projectID].update.name = rename;
- }
- }
- if(feeRateMap[projectID].action == 'copy'){
- newID = feeUniqMap[feeRateID]?feeUniqMap[feeRateID].ID:uuidV1();
- feeRateMap[projectID].name = rename;
- feeRateMap[projectID].ID = newID;
- projectMap[projectID]['update']['property.feeFile.id'] = newID;
- }
- if(!feeUniqMap[feeRateID]){
- await generateFeeRateTask(feeRateMap[projectID],feeRateTask,feeRateFileTask);
- feeUniqMap[feeRateID] = {name:rename,ID:newID};
- }
- }
- }
- if(!_.isEmpty(unitPriceMap)&&data.rootProjectID) {//如果单价文件有修改
- let unitPriceFiles = await unitPriceFileModel.find({root_project_id: data.rootProjectID, deleteInfo: null});
- for(let projectID in unitPriceMap){
- let checkUn = _.find(unitPriceFiles,{'name':unitPriceMap[projectID].name});
- let rename = unitPriceMap[projectID].name;
- let unitPriceID = unitPriceMap[projectID].query.id;
- let newID = unitPriceID;
- if(checkUn){//重名检查
- rename = priceUniqMap[unitPriceID]?priceUniqMap[unitPriceID].name:rename + '(' + new Date().Format('MM-dd hh:mm:ss') + '移动)';
- projectMap[projectID]['update']['property.unitPriceFile.name'] = rename;
- if(unitPriceMap[projectID].action =='move'){
- unitPriceMap[projectID].update.name = rename;
- }
- }
- if(unitPriceMap[projectID].action =='copy'){
- newID = priceUniqMap[unitPriceID]?priceUniqMap[unitPriceID].id: await getCounterID("unit_price_file");
- unitPriceMap[projectID].name = rename;
- unitPriceMap[projectID].id = newID;
- projectMap[projectID]['update']['property.unitPriceFile.id'] = newID;
- }
- if(!priceUniqMap[unitPriceID]){
- await generateUnitPriceTask(unitPriceMap[projectID],projectID,data.user_id,unitPriceTask,unitPriceFileTask,mixRatioTask);
- priceUniqMap[unitPriceID] = {name:rename,id:newID};
- }
- }
- }
- if(!_.isEmpty(projectMap)){
- for(let projectID in projectMap){
- projectTasks.push({updateOne:{filter : projectMap[projectID].query, update : projectMap[projectID].update}});
- }
- }
- projectTasks.length>0?await projectModel.bulkWrite(projectTasks):'';
- feeRateTask.length>0?await feeRateModel.bulkWrite(feeRateTask):'';
- feeRateFileTask.length>0?await feeRateFileModel.bulkWrite(feeRateFileTask):'';
- unitPriceFileTask.length>0?await unitPriceFileModel.bulkWrite(unitPriceFileTask):'';
- unitPriceTask.length>0?await insertMany(unitPriceTask,unitPriceModel):'';
- mixRatioTask.length>0?await insertMany(mixRatioTask,mixRatioModel):'';
- return projectMap;
- }
- async function generateFeeRateTask(data,feeRateTask,feeRateFileTask) {
- if(data.action == 'move'){
- let task = {
- updateOne:{
- filter : data.query,
- update : data.update
- }
- };
- feeRateFileTask.push(task);
- }
- if(data.action == 'copy'){//copy 费率的时候用insertOne方法
- let [feeRateFile,feeRate] =await feeRate_facade.getFeeRateByID(data.query.ID);
- let newFeeRateID = uuidV1();
- let newFeeRate = {
- ID:newFeeRateID,
- rates:feeRate.rates
- };
- let newFeeRateFile = {
- ID:data.ID,
- rootProjectID:data.rootProjectID,
- userID:feeRateFile.userID,
- name:data.name,
- libID:feeRateFile.libID,
- libName:feeRateFile.libName,
- feeRateID:newFeeRateID
- };
- feeRateTask.push({insertOne :{document:newFeeRate}});
- feeRateFileTask.push({insertOne :{document:newFeeRateFile}});
- }
- }
- async function generateUnitPriceTask(data,projectID,user_id,unitPriceTask,unitPriceFileTask,mixRatioTask){
- if(data.action == 'move'){
- let task = {
- updateOne:{
- filter : data.query,
- update : data.update
- }
- };
- unitPriceFileTask.push(task);
- }
- if(data.action == 'copy'){
- let newUnitFile = {
- id:data.id,
- name: data.name,
- project_id:projectID,
- user_id:user_id,
- root_project_id: data.rootProjectID
- };
- unitPriceFileTask.push({insertOne :{document:newUnitFile}});
- let mixRatios = await mixRatioModel.find({unit_price_file_id: data.query.id});
- mixRatios = JSON.stringify(mixRatios);
- mixRatios = JSON.parse(mixRatios);
- for(let m of mixRatios){
- delete m._id; // 删除原有id信息
- delete m.id;
- m.unit_price_file_id = data.id;
- m.id = await getCounterID('mix_ratio');
- mixRatioTask.push(m);
- }
- let unitPrices = await unitPriceModel.find({unit_price_file_id: data.query.id});//unit_price_file_id
- unitPrices = JSON.stringify(unitPrices);
- unitPrices = JSON.parse(unitPrices);
- for(let u of unitPrices){
- delete u._id; // 删除原有id信息
- delete u.id;
- u.unit_price_file_id = data.id;
- u.id = await getCounterID('unit_price');
- unitPriceTask.push(u);
- }
- }
- }
- async function getCounterID(collectionName){
- let counterModel = new CounterModel();
- return await counterModel.getId(collectionName);
- }
- async function insertMany(datas,model) {
- while (datas.length>1000){//因为mongoose限制了批量插入的条数为1000.所以超出限制后需要分批插入
- let newList = datas.splice(0,1000);//一次插入1000条
- model.insertMany(newList);
- }
- model.insertMany(datas);
- }
|