| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 | /** * Created by Zhong on 2017/8/11. */const mongoose = require('mongoose');const gljMapModel = mongoose.model('std_glj_lib_map');const gljModel = mongoose.model('std_glj_lib_gljList');const gljClassModel = mongoose.model('std_glj_lib_gljClass');const gljClassTemplateModel = mongoose.model('std_glj_lib_gljClassTemplate');const rationRepository = mongoose.model('std_ration_lib_map');const engLibModel = mongoose.model('engineering_lib');import moment from "moment";import counter from "../../../public/counter/counter";import async from "async";let rationRepositoryDao =  require("../../ration_repository/models/repository_map");class OprDao {    static updateOprArr(findSet, oprtor, date, cb){        let oprDate = moment(date).format('YYYY-MM-DD HH:mm:ss');        gljMapModel.find(findSet, function (err, result) {            if(err){                cb(err);            }            else{                if(result.length === 1){                    let recentOprArr = result[0].recentOpr;                    let isExist = false;                    for(let i =0 ; i<recentOprArr.length; i++){                        if(recentOprArr[i].operator === oprtor){                            recentOprArr[i].operateDate = oprDate;                            isExist = true;                        }                    }                    if(!isExist){                        if(recentOprArr.length < 5){                            recentOprArr.push({operator: oprtor, operateDate: oprDate});                        }                        else if(recentOprArr.length === 5){                            recentOprArr.sort(function (a, b) {                                if(a.operateDate > b.operateDate){                                    return -1;                                }else {                                    return 1;                                }                                return 0;                            });                            recentOprArr.splice(recentOprArr.length -1, 1);                            recentOprArr.splice(0, 1, {operator: oprtor, operateDate: oprDate});                        }                    }                    gljMapModel.update(findSet, {$set: {recentOpr: recentOprArr}}, function (err) {                        if(err){                            cb(err);                        }                        else{                            cb(null);                        }                    });                }                else{                    cb(err);                }            }        });    };}class GljMapDao extends OprDao{   static createNewLibModel(gljLibObj){        var rst = {};        rst.dispName = gljLibObj.dispName;        rst.appType = gljLibObj.appType?gljLibObj.appType:'construct';        rst.compilationId = gljLibObj.compilationId?gljLibObj.compilationId: -1;        rst.compilationName = gljLibObj.compilationName?gljLibObj.compilationName:'';        rst.creator = gljLibObj.creator;        rst.createDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');        rst.recentOpr = [{operator: gljLibObj.creator, operateDate: rst.createDate}];        rst.deleted = false;        return rst;    }    getGljLib(libId, callback){        gljMapModel.find({ID: libId}, function (err, result) {            if(err){                callback(err, '没有数据!', null);            }            else{                callback(null, '成功', result);            }        })    }    async getAllGljLib(callback){        try{            let gljLibs = await gljMapModel.find({deleted: false});            for(let gljLib of gljLibs){                let tempRationLibs = [];                for(let rationLib of gljLib.rationLibs){                    let rLib = await rationRepository.findOne({ID: rationLib.ID, deleted: false});                    if(rLib !== undefined && rLib !== null){                        tempRationLibs.push({ID: rationLib.ID, dispName: rLib.dispName});                    }                }                gljLib._doc.rationLibs = tempRationLibs;            }            callback(null, '成功', gljLibs);        }        catch(err){            callback(err, '没有定额库数据!', null);        }    }    createGljLib(gljLibObj, callback){        counter.counterDAO.getIDAfterCount(counter.moduleName.stdGljLib, 1, function (err, result) {            if(err){                callback(err, '获取新ID失败!');            }            else{                let newGljLib = GljMapDao.createNewLibModel(gljLibObj);                newGljLib.ID = result.sequence_value;                gljMapModel.create(newGljLib, function (err, result) {                    if(err){                        callback(err, '创建新工料机库失败!', null);                    }                    else{                        //创建分类模板                        gljClassTemplateModel.find({'$or': [{isDeleted: null}, {isDeleted: false}, {deleted: false}]}, function (err, datas) {                            if(err){                                callback(err, "获取工料机类型错误!", null);                            }                            else{                                let rst = [];                                async.each(datas, function (data, cb) {                                    let newClassObj = {};                                    newClassObj.ID = data.ID;                                    newClassObj.ParentID = data.ParentID;                                    newClassObj.NextSiblingID = data.NextSiblingID;                                    newClassObj.Name = data.Name;                                    newClassObj.repositoryId = newGljLib.ID;                                    newClassObj.deleted = false;                                    gljClassModel.create(newClassObj, function(err){                                        if(err)cb(err);                                        else{                                            rst.push(newClassObj);                                            cb(null);                                        }                                    });                                }, function (err) {                                    if(err) callback(err, "新增工料机类型错误!", null);                                    else callback(null, '创建成功', result);                                });                            }                        });                    }                });            }        })    }    renameGljLib(oprtor, renameObj, callback){        gljMapModel.update({ID: renameObj.ID, deleted: false}, {$set: {dispName: renameObj.newName}}, function (err) {            if(err){                callback(err, '重命名失败!');            }            else{                GljMapDao.updateOprArr({ID: renameObj.ID, deleted: false}, oprtor, Date.now(), function (err) {                    if(err){                        callback(err, '更新最近操作者失败!');                    }                    else{                        engLibModel.update({'glj_lib.id': renameObj.ID}, {$set: {'glj_lib.$.name': renameObj.newName}}, {multi: true}, function (err) {                            if(err){                                callback(err, '更新工程专业引用失败!');                            }                            else {                                callback(null, '成功!');                            }                        });                    }                });            }        });    }    removeGljLib(oprtor, libId, callback){        GljMapDao.updateOprArr({ID: libId, deleted: false}, oprtor, Date.now(), function (err) {            if(err){                callback(err, '失败!')            }            else{                gljMapModel.find({ID: libId, deleted: false}, function (err, result) {                    if(err){                        callback(err, '数据不存在!');                    }                    else{                        if(result[0].rationLibs.length > 0){//已被引用                            callback(null, '此人材机库已被引用!');                        }                        else{                            async.parallel([                                function (cb) {                                    gljMapModel.remove({ID: libId}, function (err) {                                        if(err){                                            cb(err);                                        }                                        else{                                            cb(null);                                        }                                    });                                },                                function (cb) {                                    gljModel.remove({repositoryId: libId}, function (err) {                                        if(err){                                            cb(err);                                        }                                        else{                                            cb(null);                                        }                                    });                                },                                function (cb) {                                    gljClassModel.remove({repositoryId: libId}, function (err) {                                        if(err){                                            cb(err);                                        }                                        else{                                            cb(null);                                        }                                    })                                }                            ], function (err) {                                if(err){                                    callback(err, '移除工料机库失败!');                                }                                else{                                    callback(null, '删除成功');                                }                            });                           /* gljMapModel.update({ID: libId, deleted: false}, {$set: {deleted: true}}, function (err) {                                if(err){                                    callback(err, '移除工料机库失败!');                                }                                else{                                   callback(null, '删除成功');                                }                            });*/                        }                    }                });            }        });    }}export {OprDao, GljMapDao};
 |