123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- module.exports={
- getData:getData,
- insertData:insertData,
- deleteEquipment:deleteEquipment,
- updateEquipments:updateEquipments,
- getEquipmentTotalCost:getEquipmentTotalCost,
- getEquipmentSummary:getEquipmentSummary
- };
- let mongoose = require('mongoose');
- let equipmentPurchaseModel = mongoose.model("equipment_purchase");
- let consts = require('../../main/models/project_consts');
- let decimal_facade = require('../../main/facade/decimal_facade');
- const scMathUtil = require('../../../public/scMathUtil').getUtil();
- let _ = require('lodash')
- //返回 ID - total 映射如: {2566:60}
- async function getEquipmentTotalCost(projectIDs) {
- let decimal =2;
- let totalMap ={};
- if(projectIDs.length > 0){
- let decimalObject =await decimal_facade.getProjectDecimal(projectIDs[0]);
- if(decimalObject&&decimalObject.glj&&decimalObject.glj.unitPrice)decimal = decimalObject.glj.unitPrice;
- let equipments = await equipmentPurchaseModel.find({projectID:{$in: projectIDs}}).lean();
- for(let e of equipments){
- let total =e.total?scMathUtil.roundForObj(e.total,decimal):0;
- totalMap[e.projectID] = total;
- }
- }
- return totalMap;
- }
- function sortEquipments(equipments) {
- let IDMap = {};
- let parentMap = {};
- equipments = _.sortBy(equipments,'seq');
- for(let d of equipments){
- IDMap[d.ID] = d;
- parentMap[d.ParentID] ?parentMap[d.ParentID].push(d):parentMap[d.ParentID]=[d];
- }
- let treeData = [];
- let roots = parentMap['-1'];
- getChildren(roots,treeData);
- return treeData;
-
- function getChildren(nodes,data){
- if(nodes){
- for(let n of nodes){
- data.push(n);
- getChildren(parentMap[n.ID],data)
- }
- }
- }
- }
- async function getEquipmentSummary(projectIDs) {
- let data = [];
- if (projectIDs.length > 0) {
- let map = {};
- let equipments = await equipmentPurchaseModel.find({projectID:{$in: projectIDs}}).lean();
- for (let e of equipments) {
- e.equipments = sortEquipments(e.equipments);
- map[e.projectID] = e;
- }
- for (let projectID of projectIDs ) {
- /*
- if(map[projectID]) data.push(map[projectID]);
- /*/
- // 以下是根据实际来调整
- if(map[projectID]) {
- for (let item of map[projectID].equipments) {
- let dtlData = {projectID: -1, total: 0, equipSummaryType: 'budget_equipment'};
- // 属性summaryType是作为一个判断依据给后来代码用
- dtlData.projectID = projectID;
- dtlData.total = item.total;
- for (let key in item) {
- dtlData[key] = item[key];
- }
- data.push(dtlData);
- }
- }
- //*/
- }
- }
- return data;
- }
- function getPreUpdate (pre, doc){
- const update = {};
- for (const key in doc) {
- update[`${pre}.${key}`] = doc[key];
- }
- return update;
- };
- async function deleteEquipment(projectID,ID){
- await equipmentPurchaseModel.update({projectID},{'$pull':{equipments:{ ID }}});
- }
- async function insertData (projectID,data){
- await equipmentPurchaseModel.update({projectID},{'$push':{equipments:{ $each: data }}});
- return data
- }
- async function updateEquipments (projectID,updateData,total){
- let tasks = [];
- if(total !== undefined || total !== null) tasks.push({updateOne :{filter:{projectID},update:{$set:{total:total}}}});
- for(let data of updateData){
- if(data.type === 'insert' ){
- tasks.push({updateOne:{ filter:{projectID},update:{'$push':{equipments:{ $each: data.documents }}}}})
- }else if(data.type === 'delete' ){
- tasks.push({updateOne:{ filter:{projectID},update:{'$pull':{equipments:{ ID: data.ID }}}}})
- } else {
- let task = {updateOne : {
- filter:{projectID,'equipments.ID':data.ID},
- update:{$set:getPreUpdate('equipments.$',data.doc)}
- }}
- tasks.push(task)
- }
- }
- if(tasks.length > 0) await equipmentPurchaseModel.bulkWrite(tasks);
- return updateData
- }
- function getData(projectID, callback) {
- equipmentPurchaseModel.findOne({'projectID': projectID}).lean().exec((err, data) => {
- if (err) {
- callback(1, '', null);
- } else {
- callback(0, consts.projectConst.EQUIPMENT_PURCHASE, data);
- }
- })
- }
|