123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- /**
- * Created by zhang on 2018/8/22.
- */
- import mongoose from "mongoose";
- const uuidV1 = require('uuid/v1');
- let moment = require("moment");
- let compilationModel = mongoose.model("compilation");
- let materialLibModel = mongoose.model("std_material_replace_lib");
- let replaceBillModel = mongoose.model("std_replace_bills");
- let replaceMaterialModel = mongoose.model("std_replace_material");
- let StdBillsLib = mongoose.model('std_bills_lib_list');
- let stdBillsModel = mongoose.model('std_bills_lib_bills');
- let stdGLJMode = mongoose.model('std_glj_lib_gljList');
- const stdGljLibModel = mongoose.model('std_glj_lib_map');
- let materialReplaceLib = {
- findByCondition:async function(conditions,options,single=true){
- if(single == true){
- return await materialLibModel.findOne(conditions,options);
- }else {
- return await materialLibModel.find(conditions,options);
- }
- },
- addLib : async function (data){
- let now = new Date().getTime();
- let dateStr = moment(now).format('YYYY-MM-DD HH:mm:ss');
- //取编办信息
- let compilation = await compilationModel.findOne({_id:data.compilationId});
- //取清单规则信息
- let billLib = await StdBillsLib.findOne({billsLibId:data.billsLibId});
- if(compilation && billLib){
- let newLib = {
- creator: data.userAccount,
- createDate: now,
- recentOpr: [{operator: data.userAccount, operateDate: dateStr}],
- name: data.name,
- compilationId: data.compilationId,
- compilationName: compilation.name,
- billsLibId:billLib.billsLibId,
- billsLibName:billLib.billsLibName,
- deleted: false
- };
- newLib.ID = uuidV1();
- return await materialLibModel.create(newLib);
- }else {
- throw new Error("编办或清单规则有误!");
- }
- },
- saveLib:async function(param) {
- return await materialLibModel.findOneAndUpdate(param.query,param.data,{new:true});
- },
- deleteLibByID:async function(ID){
- //删除材料数据
- await replaceMaterialModel.deleteMany({libID:ID});
- //删除清单数据
- await replaceBillModel.deleteMany({libID:ID});
- return await materialLibModel.deleteOne({ID:ID});
- },
- findGLJLibByComID:async function(compilationId){//跟据费用定额查找工料机库
- return await stdGljLibModel.findOne({compilationId:compilationId},['ID']);
- },
- findBillsByLibID:async function(libID){
- return await replaceBillModel.find({libID:libID});
- },
- saveBills:async function(data){
- let [addList,updateList,deleteList] = prepareDatas(data);
- let p = await Promise.all([addBills(addList),updateBills(updateList),deleteBills(deleteList)]);
- return p;
- },
- saveMaterial:async function(data){
- let [addList,updateList,deleteList] = prepareDatas(data);
- let p = await Promise.all([addMaterial(addList),replaceMaterial(updateList),deleteMaterial(deleteList)]);
- return p;
- },
- getMaterialByBillsID : async function(billsID){
- return await replaceMaterialModel.find({billsItemID:billsID});
- },
- getStdBillsByLib:async function(libID){
- let bills = await stdBillsModel.find({billsLibId: libID},['ID','code','name','items']);
- return bills;
- }
- };
- function prepareDatas(data) {//整理数据
- let addList = [],updateList =[],deleteList=[];
- for(let d of data){
- if(d.type == 'add') addList.push(d);
- if(d.type == 'update') updateList.push(d);
- if(d.type == 'delete') deleteList.push(d);
- }
- return [addList,updateList,deleteList]
- }
- async function addMaterial(datas) {
- let newMaterial = [],missCodes=[];
- for(let d of datas){
- let stdGLJ = await stdGLJMode.findOne({repositoryId:d.gljLibID,code:d.code});
- if(stdGLJ){
- let temM = {
- libID:d.libID,
- billsItemID:d.billsItemID,
- code:d.code,
- name:stdGLJ.name,
- specs:stdGLJ.specs,
- type:stdGLJ.gljType,
- unit:stdGLJ.unit
- };
- temM.ID = uuidV1();
- newMaterial.push(temM);
- }else {
- missCodes.push(d.code);
- }
- }
- if(newMaterial.length>0){
- await replaceMaterialModel.create(newMaterial);
- }
- return {type:'add',list:newMaterial,missCodes:missCodes};
- }
- async function replaceMaterial(datas) {
- let tasks = [],list=[],missCodes = [];
- for(let d of datas){
- let stdGLJ = await stdGLJMode.findOne({repositoryId:d.gljLibID,code:d.code});
- if(stdGLJ){
- let updateData = {code:d.code, name:stdGLJ.name, specs:stdGLJ.specs, type:stdGLJ.gljType, unit:stdGLJ.unit};
- let task = {
- updateOne:{filter:{ID:d.ID}, update :updateData}
- };
- tasks.push(task);
- list.push({ID:d.ID,updateData:updateData})
- }else {
- missCodes.push(d.code)
- }
- }
- if(tasks.length > 0) await replaceMaterialModel.bulkWrite(tasks);
- return {type:'update',list:list,missCodes:missCodes};
- }
- async function deleteMaterial(datas) {
- let IDList = [];
- for(let d of datas){
- if(d.ID) IDList.push(d.ID);
- }
- await replaceMaterialModel.deleteMany({ID:{"$in": IDList}});
- return {type:'delete',list:IDList};
- }
- async function addBills(datas) {
- let newBills = [],missCodes=[];
- for(let d of datas){
- //先查找清单规则库找到对应的清单
- let stdBill = await stdBillsModel.findOne({billsLibId:d.billsLibId,code:d.code});
- if(stdBill){
- let temBill = {
- libID:d.libID,
- code:d.code,
- name:stdBill.name,
- };
- temBill.ID = uuidV1();
- newBills.push(temBill);
- }else {
- missCodes.push(d.code);
- }
- }
- if(newBills.length>0){
- await replaceBillModel.create(newBills);
- }
- return {type:'add',list:newBills,missCodes:missCodes};
- }
- async function updateBills(datas) {
- let tasks = [],list=[],missCodes = [];
- for(let d of datas){
- let updateData = null;
- let filter = {libID:d.libID, code:d.oldCode};
- if(d.newCode && d.newCode !=''){//说明是要替换清单
- let stdBill = await stdBillsModel.findOne({billsLibId:d.billsLibId,code:d.newCode});
- if(stdBill){
- updateData = {code:d.newCode, name:stdBill.name};
- }else {
- missCodes.push(d.newCode);
- }
- }else {
- updateData = d.updateData;
- }
- if(updateData){
- let task = {
- updateOne:{filter:filter, update :updateData}
- };
- tasks.push(task);
- list.push({code:d.oldCode,updateData:updateData})
- }
- }
- if(tasks.length > 0) await replaceBillModel.bulkWrite(tasks);
- return {type:'update',list:list,missCodes:missCodes};
- }
- async function deleteBills(datas) {
- let IDList = [];
- for(let d of datas){
- if(d.ID) IDList.push(d.ID)
- }
- await replaceMaterialModel.deleteMany({billsItemID:{"$in": IDList}});//删除清单时要把对应的材料也删除了
- await replaceBillModel.deleteMany({ID:{"$in": IDList}});
- return {type:'delete',list:IDList};
- }
- export default materialReplaceLib
|