/** * Created by Zhong on 2017/8/22. */ import {complementaryGljModel, stdGljModel, gljClassModel} from "./schemas"; import counter from "../../../public/counter/counter"; import async from "async"; import STDGLJLibGLJListModel from "../../common/std/std_glj_lib_glj_list_model"; class GljDao { getGljTypes (gljLibId, callback){ gljClassModel.find({"repositoryId": gljLibId, "$or": [{"isDeleted": null}, {"isDeleted": false} ]},function(err,data){ if(data.length) { callback(false,data); } else if(err) callback("获取工料机类型错误!",false); }) } getGljItemsByRep(repositoryId,callback){ gljModel.find({"repositoryId": repositoryId},function(err,data){ if(err) callback(true, "") else callback(false,data); }) } getGljItemByType (repositoryId, type, callback){ gljModel.find({"repositoryId": repositoryId, "gljType": type},function(err,data){ if(err) callback(true, "") else callback(false, data); }) }; getGljItem (repositoryId, code, callback){ gljModel.find({"repositoryId": repositoryId, "code": code},function(err,data){ if(err) callback(true, "") else callback(false, data); }) }; //获得用户的补充工料机和用户当前所在编办的标准工料机 getGljItems (stdGljLibId, userId, compilationId, callback){ let rst = {stdGljs: [], complementaryGljs: []}; async.parallel([ function (cb) { stdGljModel.find({repositoryId: stdGljLibId}, function (err, stdGljs) { if(err){ cb(err); } else{ rst.stdGljs = stdGljs; cb(null); } }); }, function (cb) { complementaryGljModel.find({userId: userId, compilationId: compilationId}, function (err, complementaryGljs) { if(err){ cb(err); } else{ rst.complementaryGljs = complementaryGljs; cb(null); } }); } ], function (err) { if(err){ callback(true, null); } else{ callback(false, rst); } }) }; getGljItemsByCode (repositoryId, codes, callback){ gljModel.find({"repositoryId": repositoryId,"code": {"$in": codes}},function(err,data){ if(err) callback(true, "") else callback(false, data); }) }; updateComponent(userId, updateArr, callback){ let parallelFucs = []; for(let i = 0; i < updateArr.length; i++){ parallelFucs.push((function(obj){ return function (cb) { if(typeof obj.component === 'undefined'){ obj.component = []; } complementaryGljModel.update({userId: userId, ID: obj.ID}, obj, function (err, result) { if(err){ cb(err); } else{ cb(null, obj); } }) } })(updateArr[i])); } async.parallel(parallelFucs, function (err, result) { if(err){ callback(err, '更新组成物错误!', null); } else{ callback(null, '成功!', result); } }); } //-oprtor mixUpdateGljItems (userId, compilationId, updateItems, addItems, rIds, callback) { if (updateItems.length == 0 && rIds.length == 0) { GljDao.addGljItems(userId, compilationId, addItems, callback); } else if(rIds.length > 0 && updateItems.length > 0){ async.parallel([ function (cb) { GljDao.removeGljItems(rIds, cb); }, function (cb) { GljDao.updateGljItems(userId, compilationId, updateItems, cb); } ], function (err) { if(err){ callback(true, "Fail to update and delete", false) } else{ callback(false, "Save successfully", false); } }) } else if (rIds.length > 0 && updateItems.length === 0) { GljDao.removeGljItems(rIds, callback); } else if(updateItems.length > 0 || addItems.length > 0){ GljDao.updateGljItems(userId, compilationId, updateItems, function(err, results){ if (err) { callback(true, "Fail to update", false); } else { if (addItems && addItems.length > 0) { GljDao.addGljItems(userId, compilationId, addItems, callback); } else { callback(false, "Save successfully", results); } } }); } } /*mixUpdateGljItems (repId, lastOpr, updateItems, addItems, rIds, callback) { if (updateItems.length == 0 && rIds.length == 0) { GljDao.addGljItems(repId, lastOpr, addItems, callback); } else if (rIds.length > 0) { GljDao.removeGljItems(repId, lastOpr, rIds, function(err, message, docs) { }); }else{ GljDao.updateGljItems(repId, lastOpr, updateItems, function(err, results){ if (err) { callback(true, "Fail to update", false); } else { if (addItems && addItems.length > 0) { GljDao.addGljItems(repId, lastOpr, addItems, callback); } else { callback(false, "Save successfully", results); } } }); } };*/ static removeGljItems (rIds, callback) { if (rIds && rIds.length > 0) { complementaryGljModel.collection.remove({ID: {$in: rIds}}, null, function(err, docs){ if (err) { callback(true, "Fail to remove", false); } else { callback(false, "Remove successfully", docs); } }) } else { callback(false, "No records were deleted!", null); } } static addGljItems (userId, compilationId, items, callback) { if (items && items.length > 0) { counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, items.length, function(err, result){ var maxId = result.value.sequence_value; var arr = []; for (var i = 0; i < items.length; i++) { var obj = new complementaryGljModel(items[i]); obj.ID = (maxId - (items.length - 1) + i); obj.userId = userId; obj.compilationId = compilationId; arr.push(obj); } complementaryGljModel.collection.insert(arr, null, function(err, docs){ if (err) { callback(true, "Fail to add", false); } else { callback(false, "Add successfully", docs); } }); }); } else { callback(true, "No source", false); } } static updateGljItems(userId, compilationId, items, callback) { var functions = []; for (var i=0; i < items.length; i++) { functions.push((function(doc) { return function(cb) { var filter = {}; if (doc.ID) { filter.ID = doc.ID; } else { filter.userId = userId; filter.compilationId = compilationId; filter.code = doc.code; } complementaryGljModel.update(filter, doc, cb); }; })(items[i])); } async.parallel(functions, function(err, results) { callback(err, results); }); } /** * 获取组成物数据 * * @param {Number} gljId * @return {Promise} */ async getComponent(gljId) { let result = []; let libGljData = await complementaryGljModel.find({ID: gljId}); if (libGljData === null || libGljData.component.length <= 0) { return result; } // 标准工料机库 let componentIdListStd = []; // 补充工料机库 let componentIdListCpt = []; let componentConsume = {}; // 整理数据 for (let component of libGljData.component) { if (component.isStd) { componentIdListStd.push(component.ID); } else { componentIdListCpt.push(component.ID); } let isStdFlag = component.isStd ? 'std' : 'cpt'; componentConsume[component.ID + '_' + isStdFlag] = component.consumeAmt; } // 查找标准库数据 let condition = {}; let componentStdGljData = []; if (componentIdListStd.length > 0) { let gljListModel = new STDGLJLibGLJListModel(); condition = {ID: {$in: componentIdListStd}}; componentStdGljData = await gljListModel.findDataByCondition(condition, null, false); } // 查找补充库数据 let componentCptGljData = []; if (componentIdListCpt.length > 0) { condition = {ID: {$in: componentIdListCpt}}; componentCptGljData = await complementaryGljModel.find(condition); } if (componentCptGljData === null && componentStdGljData === null) { return result; } // 整理数据 if (componentStdGljData.length > 0) { componentStdGljData = JSON.stringify(componentStdGljData); componentStdGljData = JSON.parse(componentStdGljData); for(let gljData of componentStdGljData) { gljData.connectCode = libGljData.code; gljData.consumption = componentConsume[gljData.ID + '_std']; result.push(gljData); } } if (componentCptGljData.length > 0) { componentCptGljData = JSON.stringify(componentCptGljData); componentCptGljData = JSON.parse(componentCptGljData); for(let gljData of componentCptGljData) { gljData.connectCode = libGljData.code; gljData.consumption = componentConsume[gljData.ID + '_cpt']; result.push(gljData); } } return result; } } export default GljDao;