/** * Created by vian on 2017/3/20. */ let model = require("./bills_lib_model"); let counter = require("../../../public/counter/counter"); let async = require("async"); let StdBillsLib = model.stdBillsLibMod; let Bills = model.billsMod; let JobContent = model.jobContentMod; let ItemCharacter = model.itemCharacterMod; let billsLibDao = function(){}; billsLibDao.prototype.getMaxNumber = function(gData, callback){ let billsLibId = gData.billsLibId; let field = gData.field; if(field === 'jobs'){ JobContent.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){ if(err){ callback(1, 'Error', null); } else { callback(0, '', result); } }); } else if(field === 'items'){ ItemCharacter.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){ if(err){ callback(1, 'Error', null); } else { callback(0, '', result); } }); } }; //----------StdBillsLib------------------- billsLibDao.prototype.getABillsLib = function(data, callback){ let billsLibId = data.billsLibId; StdBillsLib.find({billsLibId: billsLibId, deleted: false}, function(err, data){ if(err){ callback(1, 'Error', null); } else { callback(0, '', data); } }); }; billsLibDao.prototype.getStdBillsLib = function(data, callback){ let userId = data.userId; StdBillsLib.find({userId: userId, deleted: false}, "-_id", function(err, data){ if(err){ callback(1, "Error", null); } else{ callback(0, "", data); } }) }; billsLibDao.prototype.createStdBillsLib = function(clibData, callback){ counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){ let billsLibId = result.value.sequence_value; let userId = clibData.userId; let billsLibName = clibData.name; let createDate = Date.now(); let newStdBillsLib = { userId: userId, billsLibId: billsLibId, billsLibName: billsLibName, createDate: createDate, deleted: false }; StdBillsLib.create(newStdBillsLib, function(err){ if(err){ callback(1, "Error", null); } else { StdBillsLib.find({billsLibId: billsLibId}, function(err, data){ if(err){ callback(1, "Error", null) } else { callback(0, "", data); } }); } }); }); }; billsLibDao.prototype.deleteStdBillsLib = function(billsLibId, callback){ async.parallel([ function(cb){ StdBillsLib.update({billsLibId: billsLibId}, {$set: {deleted: true}}, function(err){ if(err){ cb(err); } else{ cb(null); } }); }, function(cb){ Bills.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err){ cb(null); }); }, function(cb){ JobContent.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err, result){ cb(null); }); }, function(cb){ ItemCharacter.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err){ cb(null); }) } ], function(err){ if(err){ callback(1, 'Error'); } else { callback(0, ''); } }); }; billsLibDao.prototype.renameStdBillsLib = function(renameData, callback){ let billsLibId = renameData.id; let renameVal = renameData.value; StdBillsLib.update({billsLibId: billsLibId}, {$set:{billsLibName: renameVal}}, function(err){ if(err){ callback(1, "Error"); } else{ callback(0, ""); } }); }; billsLibDao.prototype.getStdBillsLibName = function(billsLibId, callback){ StdBillsLib.find({billsLibId: billsLibId, deleted: false}, "-_id", function(err, data){ if(err){ callback(1, "Error", null); } else { callback(0, "", data); } }); }; billsLibDao.prototype.getCurrentUniqId = function(callback){ counter.counterDAO.getCurrentID(counter.moduleName.billsLib, function(result, err){ let id = result.sequence_value; if(err){ callback(1, 'Error', null); } else{ callback(0, '', id); } }); } //----------------------------Bills--------------------- billsLibDao.prototype.getBills = function (billsLibId, callback) { Bills.find({billsLibId: billsLibId, deleted: false}, "-_id", function(err, billsData){ if(err){ callback(1, "Error", null); } else{ callback(0, "", billsData); } }); } billsLibDao.prototype.createBills = function(cbillsData, callback){ let newId = cbillsData.newId; let pid = cbillsData.ParentID; let nid = cbillsData.NextSiblingID; let billsLibId = cbillsData.billsLibId; let updatePreData = cbillsData.updatePreData; let newBills = { ID: newId, ParentID: pid, NextSiblingID: nid, billsLibId: billsLibId, code: '', name: '', unit: '', ruleText: '', Expression: '', recharge:'', deleted: false }; async.parallel([ function(cb){ Bills.create(newBills, function(err){ if(err){ cb(err); } else { cb(null); } }); }, function(cb){ if(updatePreData){ Bills.findOneAndUpdate({billsLibId: billsLibId, ID: updatePreData.ID, deleted: false}, {$set: {NextSiblingID: updatePreData.NextSiblingID}}, function(err, result){ if(err){ cb(err); } else { cb(null) } }); } else { cb(null); } } ], function(err){ if(err){ callback(1, 'Error'); } else { callback(0, ''); } }); }; billsLibDao.prototype.upMove = function(data, callback){ let billsLibId = data.billsLibId, updateDatas = data.updateDatas; async.each(updateDatas, function(updateData, cb){ Bills.findOneAndUpdate({billsLibId: billsLibId, ID: updateData.ID, deleted: false}, {$set: {NextSiblingID: updateData.NextSiblingID}}, function(err){ if(err){ cb(err); } else { cb(null); } }); }, function(err){ if(err){ callback(1, 'Error'); } else{ callback(0, ''); } }); }; billsLibDao.prototype.downMove = function (data, callbck) { let billsLibId = data.billsLibId, updateDatas = data.updateDatas, functions = []; let parallelFucs = { nextSiblingNode: function (data) { return function (cb) { Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) { if(err){ cb(err); } else{ cb(null); } }); }; }, oprNode: function (data) { return function (cb) { Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) { if(err){ cb(err); } else { cb(null); } }) } }, preSiblingNode: function (data) { return function (cb) { Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) { if(err){ cb(err); } else{ cb(null); } }); }; } }; for(let i =0; i< updateDatas.length; i++){ if(updateDatas[i].type === 'nextSiblingNode'){ functions.push(parallelFucs.nextSiblingNode(updateDatas[i])); } else if(updateDatas[i].type === 'oprNode'){ functions.push(parallelFucs.oprNode(updateDatas[i])); } else { functions.push(parallelFucs.preSiblingNode(updateDatas[i])); } } async.parallel(functions, function (err) { if(err){ callbck(1, 'Error'); } else{ callbck(0, ''); } }) } billsLibDao.prototype.upLevel = function(data, callback){ let billsLibId = data.billsLibId, updateDatas = data.updateDatas, functions = []; let parallelFucs = { oprNode: function (data) { return function (cb){ Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function(err){ if(err){ console.log(`err1`); cb(err); } else { cb(null); } }); }; }, parentNode: function (data) { return function(cb){ Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) { if(err){ console.log(`err2`); cb(err); } else { cb(null); } }) }; }, nextSiblingNode: function (data) { return function (cb) { Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID}}, function (err) { if(err){ console.log(`err3`); cb(err); } else{ cb(null); } }); }; }, preSiblingNode: function(data){ return function (cb) { Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) { if(err){ cb(err); } else { cb(null); } }); }; } } for(let i=0; i< updateDatas.length; i++){ if(updateDatas[i].type === 'oprNode'){ functions.push(parallelFucs.oprNode(updateDatas[i])); } else if(updateDatas[i].type === 'parentNode'){ functions.push(parallelFucs.parentNode(updateDatas[i])); } else if(updateDatas[i].type === 'nextSiblingNode'){ updateDatas[i].ID.forEach(function (id) { let obj = {ID: id, ParentID: updateDatas[i].ParentID}; functions.push(parallelFucs.nextSiblingNode(obj)); }); } else { functions.push(parallelFucs.preSiblingNode(updateDatas[i])); } } async.parallel(functions, function(err){ if(err){ callback(1, 'Error'); } else{ callback(0, ''); } }); }; billsLibDao.prototype.downLevel = function (data, callback) { let billsLibId = data.billsLibId, updateDatas = data.updateDatas, functions = []; let parallelFucs = { preSiblingNode: function (data) { return function (cb) { Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) { if(err){ cb(err); } else { cb(null); } }); }; }, oprNode: function (data) { return function (cb) { Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function (err) { if(err){ cb(err); } else{ cb(null); } }); }; }, preChildren: function (data) { return function (cb) { Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) { if(err){ cb(err); } else{ cb(null); } }); }; } } for(let i=0; i 1){ let ids = updateDatas[i].ID; for(let j=0; j 0){ billsIds.forEach(function (updateId) { delIds.forEach(function (delId) { delArr.push({updateID: updateId, delId: delId}); }); }); } let parallelFucs = { delJobs: function () { return function (cb) { async.each(delIds, function (delJobId, ecb) { JobContent.update({billsLibId: billsLibId, id: delJobId, deleted: false}, {$set: {deleted: true}}, function (err, result) { if(err){ ecb(err); } else { ecb(null); } }); }, function (err) { if(err){ cb(err); } else{ cb(null); } }); }; }, delJobsArr: function () { return function (cb) { async.each(delArr, function (delObj, ecb) { Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {jobs: {id: delObj.delId}}}, function (err) { if(err){ ecb(err); }else{ ecb(null); } }); }, function (err) { if(err){ cb(err); } else{ cb(null); } }) }; }, delItems: function () { return function (cb) { async.each(delIds, function (delItemId, ecb) { ItemCharacter.update({billsLibId: billsLibId, id: delItemId, deleted: false}, {$set: {deleted: true}}, function (err) { if(err){ ecb(err); } else{ ecb(null); } }, function (err) { if(err){ cb(err); } else{ cb(null); } }); }); } }, delItemsArr: function () { return function (cb) { async.each(delArr, function (delObj, ecb) { Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted:false}, {$pull: {items: {id: delObj.delId}}}, function(err){ if(err){ ecb(err); } else{ ecb(null); } }); }, function (err) { if(err){ cb(err); } else{ cb(null); } }); } } }; if(field === 'jobs'){ functions.push(parallelFucs.delJobs()); functions.push(parallelFucs.delJobsArr()); } else{ functions.push(parallelFucs.delItems()); functions.push(parallelFucs.delItemsArr()); } async.parallel(functions, function (err) { if(err){ callback(1, 'Error'); } else{ callback(0, ''); } }); }; billsLibDao.prototype.updateSerialNo = function (data, callback) { let billsLibId = data.billsLibId, billsId = data.billsId, updateArr = data.updateArr, field = data.field; if(field === 'jobs'){ async.each(updateArr, function (updateObj, cb) { Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'jobs.id': updateObj.id}, {$set: {'jobs.$.serialNo': updateObj.serialNo}}, function (err) { if(err){ cb(err); } else{ cb(null); } }); }, function (err) { if(err){ callback(1, 'Error'); } else{ callback(0, ''); } }); } else{ async.each(updateArr, function (updateObj, cb) { Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'items.id': updateObj.id}, {$set: {'items.$.serialNo': updateObj.serialNo}}, function (err) { if(err){ cb(err); } else{ cb(null); } }); }, function (err) { if(err){ callback(1, 'Error'); } else{ callback(0, ''); } }); } }; billsLibDao.prototype.updateBillsArr = function(updateData, callback){ let billsLibId = updateData.billsLibId; let updateId = updateData.updateId; let orgId = updateData.orgId; let newId = updateData.newId; let classify = updateData.classify; let type = updateData.type; if(classify === 'jobs'){ if(orgId && newId && type === 'update'){ Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false, 'jobs.id': orgId}, {$set: {'jobs.$.id': newId}}, function(err){ if(err){ callback(1, 'Error'); } else { callback(0, ''); } }); } if(orgId && !newId && type === 'delete'){ async.each(orgId, function(oid, cb){ Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$pull: {jobs: {id: oid}}}, function(err){ if(err){ cb(err); }else { cb(null); } }); }, function(err){ if(err){ callback(1, 'Error'); } }); } if(orgId && !newId && type === 'deleteAll'){ let delArr = []; updateId.forEach(function(uid){ orgId.forEach(function(oid){ delArr.push({updateId: uid, delId: oid}); }); }); async.each(delArr, function(delObj, cb){ Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {jobs: {id: delObj.delId}}}, function(err){ if(err){ cb(err); }else { cb(null); } }); }, function(err){ if(err){ callback(1, 'Error'); }else { callback(0, ''); } }); } } else if(classify === 'items'){ if(orgId && newId && type === 'update'){ Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false, 'items.id': orgId}, {$set: {'items.$.id': newId}}, function(err){ if(err){ callback(1, 'Error'); } else { callback(0, ''); } }); } if(orgId && !newId && type === 'delete'){ async.each(orgId, function(oid, cb){ Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$pull: {items: {id: oid}}}, function(err){ if(err){ cb(err); }else { cb(null); } }); }, function(err){ if(err){ callback(1, 'Error'); }else { callback(0, ''); } }); } if(orgId && !newId && type === 'deleteAll'){ let delArr = []; updateId.forEach(function(uid){ orgId.forEach(function(oid){ delArr.push({updateId: uid, delId: oid}); }); }); async.each(delArr, function(delObj, cb){ Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {items: {id: delObj.delId}}}, function(err){ if(err){ cb(err); }else { cb(null); } }); }, function(err){ if(err){ callback(1, 'Error'); }else { callback(0, ''); } }); } } }; billsLibDao.prototype.pasteBills = function(pData, callback){ let datas = pData.datas, billsLibId = pData.billsLibId; async.each(datas, function(data, cb){ let needSet = {}; for(let i in data){ needSet[i] = data[i]; } Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: needSet}, function (err) { if(err){ cb(err); } else { cb(null); } }); }, function(err){ if(err){ callback(1, 'Error'); }else { callback(0, ''); } }); } billsLibDao.prototype.updateRecharge = function(uData, callback){ let billsLibId = uData.billsLibId; let updateId = uData.updateId; let data = uData.data; Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$set: {recharge: data}}, function(err){ if(err){ callback(1, 'Error'); } else { callback(0, ''); } }); /* async.each(updateIds, function(id, cb){ Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {recharge: data}}, function(err){ if(err){ cb(err); }else { cb(null); } }); }, function(err){ if(err){ callback(1, 'Error'); }else { callback(0, ''); } });*/ }; billsLibDao.prototype.pasteRel = function (data, callback) { const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew'; const Jobs = 'jobs', Items = 'items'; let field = data.field; let updateDatas = data.updateDatas; let createDatas = data.createDatas; let functions = []; let parallelFucs = { updateExJobs: function(data){ let orgJobId = data.orgJobId, newJobId = data.newJobId, nodeId = data.nodeId, billsLibId = data.billsLibId; return function (cb){ if(orgJobId && newJobId && nodeId && billsLibId){ Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'jobs.id': orgJobId}, {$set: {'jobs.$.id': newJobId}}, function(err){ if(err){ cb(err); } else{ cb(null, data) } }); } } }, updateNeJobs: function(data){ let billsLibId = data.billsLibId, nodeId = data.nodeId, newData = data.newData, orgJobId = data.orgJobId, code = data.code; return function (cb){ if(billsLibId && nodeId && newData && orgJobId && code){ counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){ if(err){ cb(err); } else { let newJobId = result.value.sequence_value; let newJobContent = { id: newJobId, billsLibId: billsLibId, code: code, content: newData, deleted: false }; JobContent.create(newJobContent, function(err){ if(err){ cb(err); } else{ Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'jobs.id': orgJobId}, {$set: {'jobs.$.id': newJobId}}, function(err){ if(err){ cb(err); } else{ data.newJobId = newJobId; cb(null, data); } }); } }); } }); } } }, createExJobs: function(data){ let billsLibId = data.billsLibId, newData = data.newData, nodeId = data.nodeId, jobId = data.jobId, serialNo = data.serialNo; return function (cb){ if(billsLibId && newData && nodeId && jobId){ Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {jobs: {id: jobId, serialNo: serialNo}}}, function(err){ if(err){ cb(err); } else { cb(null, data); } }); } } }, createNeJobs: function(data){ let billsLibId = data.billsLibId, newData = data.newData, code = data.code, nodeId = data.nodeId, serialNo = data.serialNo; return function (cb){ if(billsLibId && newData && code){ counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){ if(err){ cb(err); } else { let newJobId = result.value.sequence_value; let newJobContent = { id: newJobId, billsLibId: billsLibId, code: code, content: newData, deleted: false }; JobContent.create(newJobContent, function(err){ if(err){ cb(err); } else{ Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {jobs: {id: newJobId, serialNo: serialNo}}}, function(err){ if(err){ cb(err); } else { data.newJobId = newJobId; cb(null, data); } }); } }); } }); } } }, updateExItems: function(data){ let orgItemId = data.orgItemId, newItemId = data.newItemId, nodeId = data.nodeId, billsLibId = data.billsLibId; return function (cb){ if(orgItemId && newItemId && nodeId && billsLibId){ Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){ if(err){ cb(err); } else{ cb(null, data); } }); } } }, updateNeItems: function(data){ let billsLibId = data.billsLibId, nodeId = data.nodeId, newData = data.newData, orgItemId = data.orgItemId, code = data.code; return function (cb){ if(billsLibId && nodeId && newData && orgItemId && code){ counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){ if(err){ cb(err); } else { let newItemId = result.value.sequence_value; let newItemContent = { id: newItemId, billsLibId: billsLibId, code: code, content: newData, deleted: false }; ItemCharacter.create(newItemContent, function(err){ if(err){ cb(err); } else{ Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){ if(err){ cb(err); } else{ data.newItemId = newItemId; cb(null, data); } }); } }); } }); } } }, createExItems: function(data){ let billsLibId = data.billsLibId, newData = data.newData, nodeId = data.nodeId, itemId = data.itemId, serialNo = data.serialNo; return function (cb){ if(billsLibId && newData && nodeId && itemId){ Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {items: {id: itemId, serialNo: serialNo}}}, function(err){ if(err){ cb(err); } else { cb(null, data); } }); } } }, createNeItems: function(data){ let billsLibId = data.billsLibId, newData = data.newData, code = data.code, nodeId = data.nodeId, serialNo = data.serialNo; return function (cb){ if(billsLibId && newData && code){ counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){ if(err){ cb(err); } else { let newItemId = result.value.sequence_value; let newItemContent = { id: newItemId, billsLibId: billsLibId, code: code, content: newData, deleted: false }; ItemCharacter.create(newItemContent, function(err){ if(err){ cb(err); } else{ Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {items: {id: newItemId, serialNo: serialNo}}}, function(err){ if(err){ cb(err); } else { data.newItemId = newItemId; cb(null, data); } }); } }); } }); } } } }; if(field === Jobs){ if(updateDatas.length > 0){ for(let i=0; i 0){ for(let i=0; i 0){ for(let i=0; i 0){ for(let i=0; i 0){ for(let i=0; i 0){ for(let i =0; i 0){ async.each(deleteCodes, function(code, cb){ ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$pull: {itemValue: {code: code}}}, function(err){ if(err){ cb(err); }else { cb(null); } }); }, function(err){ if(err){ callback(1, 'Error'); }else { callback(0, ''); } }); } } }; billsLibDao.prototype.deleteItemCharacter = function(data, callback){ let delIds = data.ids; let billsLibId = data.billsLibId; if(delIds){ async.each(delIds, function(id, cb){ ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err){ if(err){ cb(err); }else { cb(null); } }, function(err){ if(err){ callback(1, 'Error'); }else { callback(0, ''); } }); }); } }; billsLibDao.prototype.pasteItems = function (data, callback) { let pasteDatas = data.pasteDatas; let updateDatas = pasteDatas.updateDatas, createDatas = pasteDatas.createDatas; let functions = []; let parallelFucs = { updateFuc: function(data){ let updateId = data.orgId, field = data.field, updateData = data.data, billsLibId = data.billsLibId; if(field === 'code'){ return function (cb){ ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$set: {code: updateData}}, function(err){ if(err){ cb(err); }else { cb(null, data); } }); }; } else{ return function(cb){ ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$set: {content: updateData}}, function(err){ if(err){ cb(err); }else { cb(null, data); } }); } } }, createFuc: function(data){ let billsLibId = data.billsLibId, code; let itemObj; if(data.type === 'CreateT'){ itemObj = { billsLibId: billsLibId, code: data.code, content: data.content, deleted: false } } else{ if(data.field === 'code'){ itemObj = { billsLibId: billsLibId, code: data.data, content: '', deleted: false } } else { itemObj = { billsLibId: billsLibId, code: data.code, content: data.data, deleted: false } } } return function (cb){ counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){ if(err){ cb(err); } else{ let newItemId = result.value.sequence_value; itemObj.id = newItemId; data.newItemId = newItemId; ItemCharacter.create(itemObj, function(err){ if(err){ cb(err); }else { cb(null, data); } }); } }); } } }; if(updateDatas.length > 0){ for(let i=0; i 0){ for(let i =0; i 0) { for (let i = 0; i < updateDatas.length; i++) { functions.push(parallelFucs.updateFuc(updateDatas[i])); } } if(createDatas.length >0){ for(let i=0; i< createDatas.length; i++){ functions.push(parallelFucs.createFuc(createDatas[i])); } } async.parallel(functions, function(err, datas){ if(err){ console.log(`errfinal`); callback(1, 'Error', null); } else { console.log('noerror'); callback(0, '', datas); } }); }; billsLibDao.prototype.edCreateItem = function(data, callback){ let billsLibId = data.billsLibId, code = data.code, billsId = data.billsId, content = data.data, serialNo = data.serialNo; async.waterfall([ function(cb){ counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){ if(err){ cb(err, null); } else { let newItemId = result.value.sequence_value; cb(null, newItemId); } }) }, function(newItemId, cb){ async.parallel([ function(pcb){ ItemCharacter.create({id: newItemId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){ if(err){ pcb(err, null); } else { pcb(null, newItemId); } }); }, function(pcb){ Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false}, {$addToSet: {items: {id: newItemId, serialNo: serialNo}}}, function(err){ if(err){ pcb(err, null); } else { pcb(null, newItemId); } }); } ], function(err, result){ if(err){ cb(err, null); } else { cb(null, result[0]); } }); } ], function(err, reslut){ if(err){ callback(1, "Error", null); } else { callback(0, '', reslut); } }); }; billsLibDao.prototype.edUpdateItem = function(data, callback){ let billsLibId = data.billsLibId, billsId = data.billsId, content = data.content, code = data.code, orgItemId = data.orgItemId; async.waterfall([ function(cb){ counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){ if(err){ cb(err, null); } else { let newItemId = result.value.sequence_value; cb(null, newItemId); } }) }, function(newItemId, cb){ async.parallel([ function(pcb){ ItemCharacter.create({id: newItemId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){ if(err){ pcb(err, null); } else { pcb(null, newItemId); } }); }, function(pcb){ Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){ if(err){ pcb(err, null); } else { pcb(null, newItemId); } }); } ], function(err, result){ if(err){ cb(err, null); } else { cb(null, result[0]); } }); } ], function(err, reslut){ if(err){ callback(1, "Error", null); } else { callback(0, '', reslut); } }); }; // module.exports = new billsLibDao();