bills_lib_interfaces.js 112 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080
  1. /**
  2. * Created by vian on 2017/3/20.
  3. */
  4. const mongoose = require('mongoose');
  5. let counter = require("../../../public/counter/counter");
  6. let async = require("async");
  7. let StdBillsLib = mongoose.model('std_bills_lib_list');
  8. let Bills = mongoose.model('std_bills_lib_bills');
  9. let JobContent = mongoose.model('std_bills_lib_jobContent');
  10. let ItemCharacter = mongoose.model('std_bills_lib_itemCharacter');
  11. let moment = require("moment");
  12. let billsLibDao = function(){};
  13. billsLibDao.prototype.getMaxNumber = function(gData, callback){
  14. let billsLibId = gData.billsLibId;
  15. let field = gData.field;
  16. if(field === 'jobs'){
  17. JobContent.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
  18. if(err){
  19. callback(1, 'Error', null);
  20. }
  21. else {
  22. callback(0, '', result);
  23. }
  24. });
  25. }
  26. else if(field === 'items'){
  27. ItemCharacter.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
  28. if(err){
  29. callback(1, 'Error', null);
  30. }
  31. else {
  32. callback(0, '', result);
  33. }
  34. });
  35. }
  36. };
  37. //----------StdBillsLib-------------------
  38. billsLibDao.prototype.getABillsLib = function(data, callback){
  39. let billsLibId = data.billsLibId;
  40. StdBillsLib.find({billsLibId: billsLibId, deleted: false}, function(err, data){
  41. if(err){
  42. callback(1, 'Error', null);
  43. }
  44. else {
  45. callback(0, '', data);
  46. }
  47. });
  48. };
  49. billsLibDao.prototype.getStdBillsLib = function(callback){
  50. // let userId = data.userId;
  51. StdBillsLib.find({deleted: false}, "-_id", function(err, data){
  52. if(err){
  53. callback(1, "Error", null);
  54. }
  55. else{
  56. callback(0, "", data);
  57. }
  58. });
  59. };
  60. billsLibDao.prototype.createStdBillsLib = function(clibData, callback){
  61. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
  62. let billsLibId = result.sequence_value;
  63. let userAccount = clibData.userAccount;
  64. let billsLibName = clibData.name;
  65. let compilationId = clibData.compilationId;
  66. let compilationName = clibData.compilationName;
  67. let dateStr = moment().format('YYYY-MM-DD HH:mm:ss');
  68. let newStdBillsLib = {
  69. creator: userAccount,
  70. createDate: dateStr,
  71. recentOpr: [{operator: userAccount, operateDate: dateStr}],
  72. billsLibId: billsLibId,
  73. billsLibName: billsLibName,
  74. compilationId: compilationId,
  75. compilationName: compilationName,
  76. deleted: false
  77. };
  78. StdBillsLib.create(newStdBillsLib, function(err){
  79. if(err){
  80. callback(1, "Error", null);
  81. }
  82. else {
  83. StdBillsLib.find({billsLibId: billsLibId}, function(err, data){
  84. if(err){
  85. callback(1, "Error", null)
  86. }
  87. else {
  88. callback(0, "", data);
  89. }
  90. });
  91. }
  92. });
  93. });
  94. };
  95. function getNewOprArr(recentOprArr, oprtor, oprDate){
  96. let isExist = false;
  97. for(let i =0 ; i<recentOprArr.length; i++){
  98. if(recentOprArr[i].operator === oprtor){
  99. recentOprArr[i].operateDate = oprDate;
  100. isExist = true;
  101. }
  102. }
  103. if(!isExist){
  104. if(recentOprArr.length < 5){
  105. recentOprArr.push({operator: oprtor, operateDate: oprDate});
  106. }
  107. else if(recentOprArr.length === 5){
  108. recentOprArr.sort(function (a, b) {
  109. if(a.operateDate > b.operateDate){
  110. return -1;
  111. }else {
  112. return 1;
  113. }
  114. return 0;
  115. });
  116. recentOprArr.splice(recentOprArr.length -1, 1);
  117. recentOprArr.splice(0, 1, {operator: oprtor, operateDate: oprDate});
  118. }
  119. }
  120. return recentOprArr;
  121. }
  122. billsLibDao.prototype.deleteStdBillsLib = function(data, callback){
  123. let billsLibId = data.billsLibId, lastOperator = data.lastOperator,
  124. lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  125. async.parallel([
  126. function(cb){
  127. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  128. if(err){
  129. cb(err);
  130. }
  131. else{
  132. if(result.length > 0 ){
  133. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  134. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr, deleted: true}}, function(err){
  135. if(err){
  136. cb(err);
  137. }
  138. else{
  139. cb(null);
  140. }
  141. });
  142. }
  143. }
  144. });
  145. },
  146. function(cb){
  147. Bills.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err){
  148. cb(null);
  149. });
  150. },
  151. function(cb){
  152. JobContent.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err, result){
  153. cb(null);
  154. });
  155. },
  156. function(cb){
  157. ItemCharacter.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err){
  158. cb(null);
  159. })
  160. }
  161. ], function(err){
  162. if(err){
  163. callback(1, 'Error');
  164. }
  165. else {
  166. callback(0, '');
  167. }
  168. });
  169. };
  170. billsLibDao.prototype.renameStdBillsLib = function(renameData, callback){
  171. let billsLibId = renameData.id;
  172. let renameVal = renameData.value;
  173. let lastOperator = renameData.lastOperator;
  174. let lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  175. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  176. if(err){
  177. callback(0, '');
  178. }
  179. else{
  180. if(result.length > 0){
  181. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  182. StdBillsLib.update({billsLibId: billsLibId}, {$set:{billsLibName: renameVal, recentOpr: newRecentOpr}}, function(err){
  183. if(err){
  184. callback(1, "Error");
  185. }
  186. else{
  187. callback(0, "");
  188. }
  189. });
  190. }
  191. }
  192. })
  193. };
  194. billsLibDao.prototype.getStdBillsLibName = function(billsLibId, callback){
  195. StdBillsLib.find({billsLibId: billsLibId, deleted: false}, "-_id", function(err, data){
  196. if(err){
  197. callback(1, "Error", null);
  198. }
  199. else {
  200. callback(0, "", data);
  201. }
  202. });
  203. };
  204. billsLibDao.prototype.getCurrentUniqId = function(callback){
  205. counter.counterDAO.getCurrentID(counter.moduleName.billsLib, function(result, err){
  206. let id = result.sequence_value;
  207. if(err){
  208. callback(1, 'Error', null);
  209. }
  210. else{
  211. callback(0, '', id);
  212. }
  213. });
  214. }
  215. //----------------------------Bills---------------------
  216. billsLibDao.prototype.getBills = function (billsLibId, callback) {
  217. Bills.find({billsLibId: billsLibId, deleted: false}, "-_id", function(err, billsData){
  218. if(err){
  219. callback(1, "Error", null);
  220. }
  221. else{
  222. callback(0, "", billsData);
  223. }
  224. });
  225. }
  226. billsLibDao.prototype.createBills = function(cbillsData, callback){
  227. let newId = cbillsData.newId;
  228. let pid = cbillsData.ParentID;
  229. let nid = cbillsData.NextSiblingID;
  230. let billsLibId = cbillsData.billsLibId;
  231. let updatePreData = cbillsData.updatePreData;
  232. let sectionInfo = cbillsData.sectionInfo;
  233. let lastOperator = cbillsData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  234. let newBills = {
  235. ID: newId,
  236. ParentID: pid,
  237. NextSiblingID: nid,
  238. billsLibId: billsLibId,
  239. code: '',
  240. name: '',
  241. unit: '',
  242. ruleText: '',
  243. Expression: '',
  244. recharge:'',
  245. sectionInfo: sectionInfo,
  246. deleted: false
  247. };
  248. async.parallel([
  249. function(cb){
  250. Bills.create(newBills, function(err){
  251. if(err){
  252. cb(err);
  253. }
  254. else {
  255. cb(null);
  256. }
  257. });
  258. },
  259. function(cb){
  260. if(updatePreData){
  261. Bills.findOneAndUpdate({billsLibId: billsLibId, ID: updatePreData.ID, deleted: false}, {$set: {NextSiblingID: updatePreData.NextSiblingID}}, function(err, result){
  262. if(err){
  263. cb(err);
  264. }
  265. else {
  266. cb(null)
  267. }
  268. });
  269. }
  270. else {
  271. cb(null);
  272. }
  273. },
  274. function (cb) {
  275. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  276. if(err){
  277. cb(err);
  278. }
  279. else{
  280. if(result.length > 0 ){
  281. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  282. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  283. if(err){
  284. cb(err);
  285. }
  286. else{
  287. cb(null);
  288. }
  289. });
  290. }
  291. }
  292. });
  293. }
  294. ], function(err){
  295. if(err){
  296. callback(1, 'Error');
  297. }
  298. else {
  299. callback(0, '');
  300. }
  301. });
  302. };
  303. billsLibDao.prototype.upMove = function(data, callback){
  304. let billsLibId = data.billsLibId,
  305. updateDatas = data.updateDatas,
  306. lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  307. async.parallel([
  308. function (cb) {
  309. async.each(updateDatas, function(updateData, ecb){
  310. Bills.findOneAndUpdate({billsLibId: billsLibId, ID: updateData.ID, deleted: false}, {$set: {NextSiblingID: updateData.NextSiblingID}}, function(err){
  311. if(err){
  312. ecb(err);
  313. }
  314. else {
  315. ecb(null);
  316. }
  317. });
  318. }, function(err){
  319. if(err){
  320. cb(err);
  321. }
  322. else{
  323. cb(null);
  324. }
  325. });
  326. },
  327. function (cb) {
  328. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  329. if(err){
  330. cb(err);
  331. }
  332. else{
  333. if(result.length > 0 ){
  334. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  335. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  336. if(err){
  337. cb(err);
  338. }
  339. else{
  340. cb(null);
  341. }
  342. });
  343. }
  344. }
  345. });
  346. }
  347. ], function (err) {
  348. if(err){
  349. callback(1, 'Error');
  350. }
  351. else{
  352. callback(0, '');
  353. }
  354. });
  355. };
  356. billsLibDao.prototype.downMove = function (data, callbck) {
  357. let billsLibId = data.billsLibId,
  358. updateDatas = data.updateDatas,
  359. functions = [], lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  360. let parallelFucs = {
  361. updateLastOpr: function () {
  362. return function (cb) {
  363. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  364. if(err){
  365. cb(err);
  366. }
  367. else{
  368. if(result.length > 0 ){
  369. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  370. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  371. if(err){
  372. cb(err);
  373. }
  374. else{
  375. cb(null);
  376. }
  377. });
  378. }
  379. }
  380. });
  381. }
  382. },
  383. nextSiblingNode: function (data) {
  384. return function (cb) {
  385. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  386. if(err){
  387. cb(err);
  388. }
  389. else{
  390. cb(null);
  391. }
  392. });
  393. };
  394. },
  395. oprNode: function (data) {
  396. return function (cb) {
  397. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  398. if(err){
  399. cb(err);
  400. }
  401. else {
  402. cb(null);
  403. }
  404. })
  405. }
  406. },
  407. preSiblingNode: function (data) {
  408. return function (cb) {
  409. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  410. if(err){
  411. cb(err);
  412. }
  413. else{
  414. cb(null);
  415. }
  416. });
  417. };
  418. }
  419. };
  420. for(let i =0; i< updateDatas.length; i++){
  421. if(updateDatas[i].type === 'nextSiblingNode'){
  422. functions.push(parallelFucs.nextSiblingNode(updateDatas[i]));
  423. }
  424. else if(updateDatas[i].type === 'oprNode'){
  425. functions.push(parallelFucs.oprNode(updateDatas[i]));
  426. }
  427. else {
  428. functions.push(parallelFucs.preSiblingNode(updateDatas[i]));
  429. }
  430. }
  431. functions.push(parallelFucs.updateLastOpr());
  432. async.parallel(functions, function (err) {
  433. if(err){
  434. callbck(1, 'Error');
  435. }
  436. else{
  437. callbck(0, '');
  438. }
  439. })
  440. }
  441. billsLibDao.prototype.upLevel = function(data, callback){
  442. let billsLibId = data.billsLibId,
  443. updateDatas = data.updateDatas, functions = [],
  444. lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  445. let parallelFucs = {
  446. updateLastOpr: function () {
  447. return function (cb) {
  448. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  449. if(err){
  450. cb(err);
  451. }
  452. else{
  453. if(result.length > 0 ){
  454. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  455. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  456. if(err){
  457. cb(err);
  458. }
  459. else{
  460. cb(null);
  461. }
  462. });
  463. }
  464. }
  465. });
  466. }
  467. },
  468. oprNode: function (data) {
  469. return function (cb){
  470. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID, sectionInfo: data.sectionInfo?data.sectionInfo:null}}, function(err){
  471. if(err){
  472. cb(err);
  473. }
  474. else {
  475. cb(null);
  476. }
  477. });
  478. };
  479. },
  480. parentNode: function (data) {
  481. return function(cb){
  482. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  483. if(err){
  484. cb(err);
  485. }
  486. else {
  487. cb(null);
  488. }
  489. })
  490. };
  491. },
  492. nextSiblingNode: function (data) {
  493. return function (cb) {
  494. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID, sectionInfo: data.sectionInfo}}, function (err) {
  495. if(err){
  496. cb(err);
  497. }
  498. else{
  499. cb(null);
  500. }
  501. });
  502. };
  503. },
  504. preSiblingNode: function(data){
  505. return function (cb) {
  506. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  507. if(err){
  508. cb(err);
  509. }
  510. else {
  511. cb(null);
  512. }
  513. });
  514. };
  515. }
  516. }
  517. for(let i=0; i< updateDatas.length; i++){
  518. if(updateDatas[i].type === 'oprNode'){
  519. functions.push(parallelFucs.oprNode(updateDatas[i]));
  520. }
  521. else if(updateDatas[i].type === 'parentNode'){
  522. functions.push(parallelFucs.parentNode(updateDatas[i]));
  523. }
  524. else if(updateDatas[i].type === 'nextSiblingNode'){
  525. updateDatas[i].ID.forEach(function (id) {
  526. let obj = {ID: id, ParentID: updateDatas[i].ParentID, sectionInfo: updateDatas[i].sectionInfo ? updateDatas[i].sectionInfo : null };
  527. functions.push(parallelFucs.nextSiblingNode(obj));
  528. });
  529. }
  530. else {
  531. functions.push(parallelFucs.preSiblingNode(updateDatas[i]));
  532. }
  533. }
  534. functions.push(parallelFucs.updateLastOpr());
  535. async.parallel(functions, function(err){
  536. if(err){
  537. callback(1, 'Error');
  538. }
  539. else{
  540. callback(0, '');
  541. }
  542. });
  543. };
  544. billsLibDao.prototype.downLevel = function (data, callback) {
  545. let billsLibId = data.billsLibId,
  546. updateDatas = data.updateDatas,
  547. functions = [], lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  548. let parallelFucs = {
  549. updateLastOpr: function () {
  550. return function (cb) {
  551. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  552. if(err){
  553. cb(err);
  554. }
  555. else{
  556. if(result.length > 0 ){
  557. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  558. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  559. if(err){
  560. cb(err);
  561. }
  562. else{
  563. cb(null);
  564. }
  565. });
  566. }
  567. }
  568. });
  569. }
  570. },
  571. preSiblingNode: function (data) {
  572. return function (cb) {
  573. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  574. if(err){
  575. cb(err);
  576. }
  577. else {
  578. cb(null);
  579. }
  580. });
  581. };
  582. },
  583. oprNode: function (data) {
  584. return function (cb) {
  585. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID, sectionInfo: data.sectionInfo?data.sectionInfo:null}}, function (err) {
  586. if(err){
  587. cb(err);
  588. }
  589. else{
  590. cb(null);
  591. }
  592. });
  593. };
  594. },
  595. preChildren: function (data) {
  596. return function (cb) {
  597. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  598. if(err){
  599. cb(err);
  600. }
  601. else{
  602. cb(null);
  603. }
  604. });
  605. };
  606. },
  607. oprChildren: function (data) {
  608. return function (cb) {
  609. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {sectionInfo: data.sectionInfo?data.sectionInfo:null}}, function (err) {
  610. if(err){
  611. cb(err);
  612. }
  613. else{
  614. cb(null);
  615. }
  616. });
  617. };
  618. }
  619. }
  620. for(let i=0; i<updateDatas.length; i++){
  621. if(updateDatas[i].type === 'preSiblingNode'){
  622. functions.push(parallelFucs.preSiblingNode(updateDatas[i]));
  623. }
  624. else if(updateDatas[i].type === 'oprNode'){
  625. functions.push(parallelFucs.oprNode(updateDatas[i]));
  626. }
  627. else if(updateDatas[i].type === 'oprChildren'){
  628. functions.push(parallelFucs.oprChildren(updateDatas[i]));
  629. }
  630. else {
  631. functions.push(parallelFucs.preChildren(updateDatas[i]));
  632. }
  633. }
  634. functions.push(parallelFucs.updateLastOpr());
  635. async.parallel(functions, function (err) {
  636. if(err){
  637. callback(1, 'Error');
  638. }
  639. else{
  640. callback(0, '');
  641. }
  642. })
  643. };
  644. billsLibDao.prototype.updatePNId= function(upData, callback){
  645. let billsLibId = upData.billsLibId;
  646. let updateDatas = upData.updateData;
  647. let eachDatas = [];
  648. for(let i=0; i< updateDatas.length; i++){
  649. if(updateDatas[i].ID.length > 1){
  650. let ids = updateDatas[i].ID;
  651. for(let j=0; j<ids.length; j++){
  652. let eachObj = {
  653. id: ids[j],
  654. data: updateDatas[i]
  655. }
  656. eachDatas.push(eachObj);
  657. }
  658. }
  659. else {
  660. eachDatas.push({id: updateDatas[i].ID, data: updateDatas[i]});
  661. }
  662. }
  663. async.each(eachDatas, function(eachObj, cb){
  664. let id = eachObj.id, data = eachObj.data;
  665. if(data.ParentID && data.NextSiblingID){
  666. Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function(err){
  667. if(err){
  668. cb(err);
  669. }else {
  670. cb(null);
  671. }
  672. });
  673. }
  674. else if(data.ParentID && !data.NextSiblingID){
  675. Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {ParentID: data.ParentID}}, function(err){
  676. if(err){
  677. if(err){
  678. cb(err);
  679. }else {
  680. cb(null);
  681. }
  682. }
  683. });
  684. }
  685. else if(!data.ParentID && data.NextSiblingID){
  686. Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function(err){
  687. if(err){
  688. cb(err);
  689. }else {
  690. cb(null);
  691. }
  692. });
  693. }
  694. }, function(err){
  695. if(err){
  696. callback(1, 'Error');
  697. }
  698. else {
  699. callback(0, '');
  700. }
  701. });
  702. }
  703. billsLibDao.prototype.updateSectionInfo = function (data, callback) {
  704. let functions = [];
  705. let updateData = data.updateData;
  706. for(let ud of updateData){
  707. functions.push((function(udData){
  708. return function(cb){
  709. Bills.update({ID: udData.ID}, {$set: udData}, function(err){
  710. if(err){
  711. cb(err);
  712. }
  713. else{
  714. cb(null);
  715. }
  716. });
  717. };
  718. })(ud));
  719. }
  720. async.parallel(functions, function(err, results) {
  721. let errCode = 0,
  722. errMsg = '';
  723. if(err){
  724. errCode = 1;
  725. errMsg = 'Error'
  726. }
  727. callback(errCode, errMsg);
  728. });
  729. };
  730. billsLibDao.prototype.updateBills = function(ubillsData, callback){
  731. let billsLibId = ubillsData.billsLibId;
  732. let updateId = ubillsData.updateId;
  733. let updateField = ubillsData.field;
  734. let updateData = ubillsData.data, lastOperator = ubillsData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  735. let needSet = {};
  736. needSet[updateField] = updateData;
  737. async.parallel([
  738. function (cb) {
  739. if(updateField !== 'jobs' && updateField !== 'items'){
  740. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$set: needSet}, function (err) {
  741. if(err){
  742. cb(err);
  743. }
  744. else{
  745. cb(null);
  746. }
  747. })
  748. }
  749. else{
  750. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$addToSet: needSet}, function (err) {
  751. if(err){
  752. cb(err);
  753. }
  754. else{
  755. cb(null);
  756. }
  757. });
  758. }
  759. },
  760. function (cb) {
  761. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  762. if(err){
  763. cb(err);
  764. }
  765. else{
  766. if(result.length > 0 ){
  767. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  768. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  769. if(err){
  770. cb(err);
  771. }
  772. else{
  773. cb(null);
  774. }
  775. });
  776. }
  777. }
  778. });
  779. }
  780. ], function (err) {
  781. if(err){
  782. callback(1, 'Error');
  783. }
  784. else{
  785. callback(0, '');
  786. }
  787. });
  788. }
  789. billsLibDao.prototype.removeTotal = function (data, callback) {
  790. let billsLibId = data.billsLibId, billsIds = data.billsIds,
  791. delIds = data.delIds, field = data.field, functions = [], delArr = [],
  792. lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  793. if(billsIds.length > 0){
  794. billsIds.forEach(function (updateId) {
  795. delIds.forEach(function (delId) {
  796. delArr.push({updateID: updateId, delId: delId});
  797. });
  798. });
  799. }
  800. let parallelFucs = {
  801. updateLastOpr: function () {
  802. return function (cb) {
  803. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  804. if(err){
  805. cb(err);
  806. }
  807. else{
  808. if(result.length > 0 ){
  809. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  810. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  811. if(err){
  812. cb(err);
  813. }
  814. else{
  815. cb(null);
  816. }
  817. });
  818. }
  819. }
  820. });
  821. }
  822. },
  823. delJobs: function () {
  824. return function (cb) {
  825. async.each(delIds, function (delJobId, ecb) {
  826. JobContent.update({billsLibId: billsLibId, id: delJobId, deleted: false}, {$set: {deleted: true}}, function (err, result) {
  827. if(err){
  828. ecb(err);
  829. }
  830. else {
  831. ecb(null);
  832. }
  833. });
  834. }, function (err) {
  835. if(err){
  836. cb(err);
  837. }
  838. else{
  839. cb(null);
  840. }
  841. });
  842. };
  843. },
  844. delJobsArr: function () {
  845. return function (cb) {
  846. async.each(delArr, function (delObj, ecb) {
  847. Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {jobs: {id: delObj.delId}}}, function (err) {
  848. if(err){
  849. ecb(err);
  850. }else{
  851. ecb(null);
  852. }
  853. });
  854. }, function (err) {
  855. if(err){
  856. cb(err);
  857. }
  858. else{
  859. cb(null);
  860. }
  861. })
  862. };
  863. },
  864. delItems: function () {
  865. return function (cb) {
  866. async.each(delIds, function (delItemId, ecb) {
  867. ItemCharacter.update({billsLibId: billsLibId, id: delItemId, deleted: false}, {$set: {deleted: true}}, function (err) {
  868. if(err){
  869. ecb(err);
  870. }
  871. else{
  872. ecb(null);
  873. }
  874. }, function (err) {
  875. if(err){
  876. cb(err);
  877. }
  878. else{
  879. cb(null);
  880. }
  881. });
  882. });
  883. }
  884. },
  885. delItemsArr: function () {
  886. return function (cb) {
  887. async.each(delArr, function (delObj, ecb) {
  888. Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted:false}, {$pull: {items: {id: delObj.delId}}}, function(err){
  889. if(err){
  890. ecb(err);
  891. }
  892. else{
  893. ecb(null);
  894. }
  895. });
  896. }, function (err) {
  897. if(err){
  898. cb(err);
  899. }
  900. else{
  901. cb(null);
  902. }
  903. });
  904. }
  905. }
  906. };
  907. if(field === 'jobs'){
  908. functions.push(parallelFucs.delJobs());
  909. functions.push(parallelFucs.delJobsArr());
  910. }
  911. else{
  912. functions.push(parallelFucs.delItems());
  913. functions.push(parallelFucs.delItemsArr());
  914. }
  915. functions.push(parallelFucs.updateLastOpr());
  916. async.parallel(functions, function (err) {
  917. if(err){
  918. callback(1, 'Error');
  919. }
  920. else{
  921. callback(0, '');
  922. }
  923. });
  924. };
  925. billsLibDao.prototype.updateSerialNo = function (data, callback) {
  926. let billsLibId = data.billsLibId, billsId = data.billsId,
  927. updateArr = data.updateArr, field = data.field,
  928. lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  929. if(field === 'jobs'){
  930. async.parallel([
  931. function (cb) {
  932. async.each(updateArr, function (updateObj, ecb) {
  933. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'jobs.id': updateObj.id}, {$set: {'jobs.$.serialNo': updateObj.serialNo}}, function (err) {
  934. if(err){
  935. ecb(err);
  936. }
  937. else{
  938. ecb(null);
  939. }
  940. });
  941. }, function (err) {
  942. if(err){
  943. cb(err);
  944. }
  945. else{
  946. cb(null);
  947. }
  948. });
  949. },
  950. function (cb) {
  951. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  952. if(err){
  953. cb(err);
  954. }
  955. else{
  956. if(result.length > 0 ){
  957. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  958. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  959. if(err){
  960. cb(err);
  961. }
  962. else{
  963. cb(null);
  964. }
  965. });
  966. }
  967. }
  968. });
  969. }
  970. ], function (err) {
  971. if(err){
  972. callback(1, 'Error');
  973. }
  974. else{
  975. callback(0, '');
  976. }
  977. });
  978. }
  979. else{
  980. async.parallel([
  981. function (cb) {
  982. async.each(updateArr, function (updateObj, ecb) {
  983. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'items.id': updateObj.id}, {$set: {'items.$.serialNo': updateObj.serialNo}}, function (err) {
  984. if(err){
  985. ecb(err);
  986. }
  987. else{
  988. ecb(null);
  989. }
  990. });
  991. }, function (err) {
  992. if(err){
  993. cb(err);
  994. }
  995. else{
  996. cb(null);
  997. }
  998. });
  999. },
  1000. function (cb) {
  1001. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1002. if(err){
  1003. cb(err);
  1004. }
  1005. else{
  1006. if(result.length > 0 ){
  1007. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1008. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1009. if(err){
  1010. cb(err);
  1011. }
  1012. else{
  1013. cb(null);
  1014. }
  1015. });
  1016. }
  1017. }
  1018. });
  1019. }
  1020. ], function (err) {
  1021. if(err){
  1022. callback(1, 'Error');
  1023. }
  1024. else{
  1025. callback(0, '');
  1026. }
  1027. });
  1028. }
  1029. };
  1030. billsLibDao.prototype.updateBillsArr = function(updateData, callback){
  1031. let billsLibId = updateData.billsLibId;
  1032. let updateId = updateData.updateId;
  1033. let orgId = updateData.orgId;
  1034. let newId = updateData.newId;
  1035. let classify = updateData.classify;
  1036. let type = updateData.type;
  1037. let lastOperator = updateData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  1038. if(classify === 'jobs'){
  1039. if(orgId && newId && type === 'update'){
  1040. async.parallel([
  1041. function (cb) {
  1042. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false, 'jobs.id': orgId}, {$set: {'jobs.$.id': newId}}, function(err){
  1043. if(err){
  1044. cb(err);
  1045. }
  1046. else {
  1047. cb(null);
  1048. }
  1049. });
  1050. },
  1051. function (cb) {
  1052. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1053. if(err){
  1054. cb(err);
  1055. }
  1056. else{
  1057. if(result.length > 0 ){
  1058. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1059. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1060. if(err){
  1061. cb(err);
  1062. }
  1063. else{
  1064. cb(null);
  1065. }
  1066. });
  1067. }
  1068. }
  1069. });
  1070. }
  1071. ], function (err) {
  1072. if(err){
  1073. callback(1, 'Error');
  1074. }
  1075. else{
  1076. callback(0, '');
  1077. }
  1078. });
  1079. }
  1080. if(orgId && !newId && type === 'delete'){
  1081. async.parallel([
  1082. function (cb) {
  1083. async.each(orgId, function(oid, ecb){
  1084. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$pull: {jobs: {id: oid}}}, function(err){
  1085. if(err){
  1086. ecb(err);
  1087. }else {
  1088. ecb(null);
  1089. }
  1090. });
  1091. }, function(err){
  1092. if(err){
  1093. cb(err);
  1094. }
  1095. else{
  1096. cb(null);
  1097. }
  1098. });
  1099. },
  1100. function (cb) {
  1101. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1102. if(err){
  1103. cb(err);
  1104. }
  1105. else{
  1106. if(result.length > 0 ){
  1107. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1108. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1109. if(err){
  1110. cb(err);
  1111. }
  1112. else{
  1113. cb(null);
  1114. }
  1115. });
  1116. }
  1117. }
  1118. });
  1119. }
  1120. ], function (err) {
  1121. if(err){
  1122. callback(1, 'Error');
  1123. }
  1124. else{
  1125. callback(0, '');
  1126. }
  1127. })
  1128. }
  1129. if(orgId && !newId && type === 'deleteAll'){
  1130. let delArr = [];
  1131. updateId.forEach(function(uid){
  1132. orgId.forEach(function(oid){
  1133. delArr.push({updateId: uid, delId: oid});
  1134. });
  1135. });
  1136. async.parallel([
  1137. function (cb) {
  1138. async.each(delArr, function(delObj, ecb){
  1139. Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {jobs: {id: delObj.delId}}}, function(err){
  1140. if(err){
  1141. ecb(err);
  1142. }else {
  1143. ecb(null);
  1144. }
  1145. });
  1146. }, function(err){
  1147. if(err){
  1148. cb(err);
  1149. }else {
  1150. cb(null);
  1151. }
  1152. });
  1153. },
  1154. function (cb) {
  1155. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1156. if(err){
  1157. cb(err);
  1158. }
  1159. else{
  1160. if(result.length > 0 ){
  1161. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1162. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1163. if(err){
  1164. cb(err);
  1165. }
  1166. else{
  1167. cb(null);
  1168. }
  1169. });
  1170. }
  1171. }
  1172. });
  1173. }
  1174. ], function (err) {
  1175. if(err){
  1176. callback(1, 'Error');
  1177. }
  1178. else{
  1179. callback(0, '');
  1180. }
  1181. });
  1182. }
  1183. }
  1184. else if(classify === 'items'){
  1185. if(orgId && newId && type === 'update'){
  1186. async.parallel([
  1187. function (cb) {
  1188. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false, 'items.id': orgId}, {$set: {'items.$.id': newId}}, function(err){
  1189. if(err){
  1190. cb(err);
  1191. }
  1192. else {
  1193. cb(null);
  1194. }
  1195. });
  1196. },
  1197. function (cb) {
  1198. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1199. if(err){
  1200. cb(err);
  1201. }
  1202. else{
  1203. if(result.length > 0 ){
  1204. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1205. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1206. if(err){
  1207. cb(err);
  1208. }
  1209. else{
  1210. cb(null);
  1211. }
  1212. });
  1213. }
  1214. }
  1215. });
  1216. }
  1217. ], function (err) {
  1218. if(err){
  1219. callback(1, 'Error');
  1220. }
  1221. else{
  1222. callback(0, '');
  1223. }
  1224. });
  1225. }
  1226. if(orgId && !newId && type === 'delete'){
  1227. async.parallel([
  1228. function (cb) {
  1229. async.each(orgId, function(oid, ecb){
  1230. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$pull: {items: {id: oid}}}, function(err){
  1231. if(err){
  1232. ecb(err);
  1233. }else {
  1234. ecb(null);
  1235. }
  1236. });
  1237. }, function(err){
  1238. if(err){
  1239. cb(err);
  1240. }else {
  1241. cb(null);
  1242. }
  1243. });
  1244. },
  1245. function (cb) {
  1246. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1247. if(err){
  1248. cb(err);
  1249. }
  1250. else{
  1251. if(result.length > 0 ){
  1252. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1253. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1254. if(err){
  1255. cb(err);
  1256. }
  1257. else{
  1258. cb(null);
  1259. }
  1260. });
  1261. }
  1262. }
  1263. });
  1264. }
  1265. ], function (err) {
  1266. if(err){
  1267. callback(1, 'Error');
  1268. }
  1269. else{
  1270. callback(0, '');
  1271. }
  1272. })
  1273. }
  1274. if(orgId && !newId && type === 'deleteAll'){
  1275. let delArr = [];
  1276. updateId.forEach(function(uid){
  1277. orgId.forEach(function(oid){
  1278. delArr.push({updateId: uid, delId: oid});
  1279. });
  1280. });
  1281. async.parallel([
  1282. function (cb) {
  1283. async.each(delArr, function(delObj, ecb){
  1284. Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {items: {id: delObj.delId}}}, function(err){
  1285. if(err){
  1286. ecb(err);
  1287. }else {
  1288. ecb(null);
  1289. }
  1290. });
  1291. }, function(err){
  1292. if(err){
  1293. cb(err);
  1294. }else {
  1295. cb(err);
  1296. }
  1297. });
  1298. },
  1299. function (cb) {
  1300. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1301. if(err){
  1302. cb(err);
  1303. }
  1304. else{
  1305. if(result.length > 0 ){
  1306. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1307. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1308. if(err){
  1309. cb(err);
  1310. }
  1311. else{
  1312. cb(null);
  1313. }
  1314. });
  1315. }
  1316. }
  1317. });
  1318. }
  1319. ], function (err) {
  1320. if(err){
  1321. callback(1, 'Error');
  1322. }
  1323. else{
  1324. callback(0, '');
  1325. }
  1326. });
  1327. }
  1328. }
  1329. };
  1330. billsLibDao.prototype.pasteBills = function(pData, callback){
  1331. let datas = pData.datas,
  1332. billsLibId = pData.billsLibId, lastOperator = pData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  1333. async.parallel([
  1334. function (cb) {
  1335. async.each(datas, function(data, ecb){
  1336. let needSet = {};
  1337. for(let i in data){
  1338. needSet[i] = data[i];
  1339. }
  1340. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: needSet}, function (err) {
  1341. if(err){
  1342. ecb(err);
  1343. }
  1344. else {
  1345. ecb(null);
  1346. }
  1347. });
  1348. }, function(err){
  1349. if(err){
  1350. cb(err);
  1351. }else {
  1352. cb(null);
  1353. }
  1354. });
  1355. },
  1356. function (cb) {
  1357. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1358. if(err){
  1359. cb(err);
  1360. }
  1361. else{
  1362. if(result.length > 0 ){
  1363. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1364. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1365. if(err){
  1366. cb(err);
  1367. }
  1368. else{
  1369. cb(null);
  1370. }
  1371. });
  1372. }
  1373. }
  1374. });
  1375. }
  1376. ], function (err) {
  1377. if(err){
  1378. callback(1, 'Error');
  1379. }
  1380. else{
  1381. callback(0, '');
  1382. }
  1383. });
  1384. }
  1385. billsLibDao.prototype.updateRecharge = function(uData, callback){
  1386. let billsLibId = uData.billsLibId;
  1387. let updateId = uData.updateId;
  1388. let data = uData.data, lastOperator = uData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  1389. async.parallel([
  1390. function (cb) {
  1391. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$set: {recharge: data}}, function(err){
  1392. if(err){
  1393. cb(err);
  1394. }
  1395. else {
  1396. cb(null);
  1397. }
  1398. });
  1399. },
  1400. function (cb) {
  1401. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1402. if(err){
  1403. cb(err);
  1404. }
  1405. else{
  1406. if(result.length > 0 ){
  1407. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1408. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1409. if(err){
  1410. cb(err);
  1411. }
  1412. else{
  1413. cb(null);
  1414. }
  1415. });
  1416. }
  1417. }
  1418. });
  1419. }
  1420. ], function (err) {
  1421. if(err){
  1422. callback(1, 'Error');
  1423. }
  1424. else{
  1425. callback(0, '');
  1426. }
  1427. });
  1428. };
  1429. billsLibDao.prototype.pasteRel = function (data, callback) {
  1430. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  1431. const Jobs = 'jobs', Items = 'items';
  1432. let field = data.field;
  1433. let updateDatas = data.updateDatas;
  1434. let createDatas = data.createDatas;
  1435. let functions = [], lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  1436. let parallelFucs = {
  1437. updateLastOpr: function () {
  1438. return function (cb) {
  1439. StdBillsLib.find({billsLibId: data.billsLibId}, function (err, result) {
  1440. if(err){
  1441. cb(err);
  1442. }
  1443. else{
  1444. if(result.length > 0 ){
  1445. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1446. StdBillsLib.update({billsLibId: data.billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1447. if(err){
  1448. cb(err);
  1449. }
  1450. else{
  1451. cb(null);
  1452. }
  1453. });
  1454. }
  1455. }
  1456. });
  1457. }
  1458. },
  1459. updateExJobs: function(data){
  1460. let orgJobId = data.orgJobId, newJobId = data.newJobId,
  1461. nodeId = data.nodeId, billsLibId = data.billsLibId;
  1462. return function (cb){
  1463. if(orgJobId && newJobId && nodeId && billsLibId){
  1464. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'jobs.id': orgJobId}, {$set: {'jobs.$.id': newJobId}}, function(err){
  1465. if(err){
  1466. cb(err);
  1467. }
  1468. else{
  1469. cb(null, data)
  1470. }
  1471. });
  1472. }
  1473. }
  1474. },
  1475. updateNeJobs: function(data){
  1476. let billsLibId = data.billsLibId, nodeId = data.nodeId, newData = data.newData,
  1477. orgJobId = data.orgJobId, code = data.code;
  1478. return function (cb){
  1479. if(billsLibId && nodeId && newData && orgJobId && code){
  1480. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  1481. if(err){
  1482. cb(err);
  1483. }
  1484. else {
  1485. let newJobId = result.sequence_value;
  1486. let newJobContent = {
  1487. id: newJobId,
  1488. billsLibId: billsLibId,
  1489. code: code,
  1490. content: newData,
  1491. deleted: false
  1492. };
  1493. JobContent.create(newJobContent, function(err){
  1494. if(err){
  1495. cb(err);
  1496. }
  1497. else{
  1498. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'jobs.id': orgJobId}, {$set: {'jobs.$.id': newJobId}}, function(err){
  1499. if(err){
  1500. cb(err);
  1501. }
  1502. else{
  1503. data.newJobId = newJobId;
  1504. cb(null, data);
  1505. }
  1506. });
  1507. }
  1508. });
  1509. }
  1510. });
  1511. }
  1512. }
  1513. },
  1514. createExJobs: function(data){
  1515. let billsLibId = data.billsLibId, newData = data.newData,
  1516. nodeId = data.nodeId, jobId = data.jobId, serialNo = data.serialNo;
  1517. return function (cb){
  1518. if(billsLibId && newData && nodeId && jobId){
  1519. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {jobs: {id: jobId, serialNo: serialNo}}}, function(err){
  1520. if(err){
  1521. cb(err);
  1522. }
  1523. else {
  1524. cb(null, data);
  1525. }
  1526. });
  1527. }
  1528. }
  1529. },
  1530. createNeJobs: function(data){
  1531. let billsLibId = data.billsLibId, newData = data.newData,
  1532. code = data.code, nodeId = data.nodeId, serialNo = data.serialNo;
  1533. return function (cb){
  1534. if(billsLibId && newData && code){
  1535. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  1536. if(err){
  1537. cb(err);
  1538. }
  1539. else {
  1540. let newJobId = result.sequence_value;
  1541. let newJobContent = {
  1542. id: newJobId,
  1543. billsLibId: billsLibId,
  1544. code: code,
  1545. content: newData,
  1546. deleted: false
  1547. };
  1548. JobContent.create(newJobContent, function(err){
  1549. if(err){
  1550. cb(err);
  1551. }
  1552. else{
  1553. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {jobs: {id: newJobId, serialNo: serialNo}}}, function(err){
  1554. if(err){
  1555. cb(err);
  1556. }
  1557. else {
  1558. data.newJobId = newJobId;
  1559. cb(null, data);
  1560. }
  1561. });
  1562. }
  1563. });
  1564. }
  1565. });
  1566. }
  1567. }
  1568. },
  1569. updateExItems: function(data){
  1570. let orgItemId = data.orgItemId, newItemId = data.newItemId,
  1571. nodeId = data.nodeId, billsLibId = data.billsLibId;
  1572. return function (cb){
  1573. if(orgItemId && newItemId && nodeId && billsLibId){
  1574. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){
  1575. if(err){
  1576. cb(err);
  1577. }
  1578. else{
  1579. cb(null, data);
  1580. }
  1581. });
  1582. }
  1583. }
  1584. },
  1585. updateNeItems: function(data){
  1586. let billsLibId = data.billsLibId, nodeId = data.nodeId, newData = data.newData,
  1587. orgItemId = data.orgItemId, code = data.code;
  1588. return function (cb){
  1589. if(billsLibId && nodeId && newData && orgItemId && code){
  1590. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  1591. if(err){
  1592. cb(err);
  1593. }
  1594. else {
  1595. let newItemId = result.sequence_value;
  1596. let newItemContent = {
  1597. id: newItemId,
  1598. billsLibId: billsLibId,
  1599. code: code,
  1600. content: newData,
  1601. deleted: false
  1602. };
  1603. ItemCharacter.create(newItemContent, function(err){
  1604. if(err){
  1605. cb(err);
  1606. }
  1607. else{
  1608. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){
  1609. if(err){
  1610. cb(err);
  1611. }
  1612. else{
  1613. data.newItemId = newItemId;
  1614. cb(null, data);
  1615. }
  1616. });
  1617. }
  1618. });
  1619. }
  1620. });
  1621. }
  1622. }
  1623. },
  1624. createExItems: function(data){
  1625. let billsLibId = data.billsLibId, newData = data.newData,
  1626. nodeId = data.nodeId, itemId = data.itemId, serialNo = data.serialNo;
  1627. return function (cb){
  1628. if(billsLibId && newData && nodeId && itemId){
  1629. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {items: {id: itemId, serialNo: serialNo}}}, function(err){
  1630. if(err){
  1631. cb(err);
  1632. }
  1633. else {
  1634. cb(null, data);
  1635. }
  1636. });
  1637. }
  1638. }
  1639. },
  1640. createNeItems: function(data){
  1641. let billsLibId = data.billsLibId, newData = data.newData,
  1642. code = data.code, nodeId = data.nodeId, serialNo = data.serialNo;
  1643. return function (cb){
  1644. if(billsLibId && newData && code){
  1645. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  1646. if(err){
  1647. cb(err);
  1648. }
  1649. else {
  1650. let newItemId = result.sequence_value;
  1651. let newItemContent = {
  1652. id: newItemId,
  1653. billsLibId: billsLibId,
  1654. code: code,
  1655. content: newData,
  1656. deleted: false
  1657. };
  1658. ItemCharacter.create(newItemContent, function(err){
  1659. if(err){
  1660. cb(err);
  1661. }
  1662. else{
  1663. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {items: {id: newItemId, serialNo: serialNo}}}, function(err){
  1664. if(err){
  1665. cb(err);
  1666. }
  1667. else {
  1668. data.newItemId = newItemId;
  1669. cb(null, data);
  1670. }
  1671. });
  1672. }
  1673. });
  1674. }
  1675. });
  1676. }
  1677. }
  1678. }
  1679. };
  1680. if(field === Jobs){
  1681. if(updateDatas.length > 0){
  1682. for(let i=0; i<updateDatas.length; i++){
  1683. if(updateDatas[i].type === UpdateExist){
  1684. functions.push(parallelFucs.updateExJobs(updateDatas[i]));
  1685. }
  1686. if(updateDatas[i].type === UpdateNew){
  1687. functions.push(parallelFucs.updateNeJobs(updateDatas[i]));
  1688. }
  1689. }
  1690. }
  1691. if(createDatas.length > 0){
  1692. for(let i=0; i<createDatas.length; i++){
  1693. if(createDatas[i].type === CreateExist){
  1694. functions.push(parallelFucs.createExJobs(createDatas[i]));
  1695. }
  1696. if(createDatas[i].type === CreateNew){
  1697. functions.push(parallelFucs.createNeJobs(createDatas[i]));
  1698. }
  1699. }
  1700. }
  1701. }
  1702. else {
  1703. if(updateDatas.length > 0){
  1704. for(let i=0; i<updateDatas.length; i++){
  1705. if(updateDatas[i].type === UpdateExist){
  1706. functions.push(parallelFucs.updateExItems(updateDatas[i]));
  1707. }
  1708. if(updateDatas[i].type === UpdateNew){
  1709. functions.push(parallelFucs.updateNeItems(updateDatas[i]));
  1710. }
  1711. }
  1712. }
  1713. if(createDatas.length > 0){
  1714. for(let i=0; i<createDatas.length; i++){
  1715. if(createDatas[i].type === CreateExist){
  1716. functions.push(parallelFucs.createExItems(createDatas[i]));
  1717. }
  1718. if(createDatas[i].type === CreateNew){
  1719. functions.push(parallelFucs.createNeItems(createDatas[i]));
  1720. }
  1721. }
  1722. }
  1723. }
  1724. functions.push(parallelFucs.updateLastOpr());
  1725. async.parallel(functions, function(err, datas){
  1726. if(err){
  1727. callback(1, 'Error', null);
  1728. }else {
  1729. callback(0, '', datas);
  1730. }
  1731. });
  1732. };
  1733. billsLibDao.prototype.deleteBills = function(delData, callback){
  1734. let deleteIds = delData.deleteIds;
  1735. let billsLibId = delData.billsLibId;
  1736. let updateNode = delData.updateNode,
  1737. lastOperator = delData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  1738. if(deleteIds){
  1739. async.parallel([
  1740. function(cb){
  1741. async.each(deleteIds, function(delId, ecb){
  1742. Bills.update({billsLibId: billsLibId, ID: delId, deleted: false}, {$set: {deleted: true}}, function(err){
  1743. if(err){
  1744. ecb(err);
  1745. }
  1746. else {
  1747. ecb(null);
  1748. }
  1749. });
  1750. }, function(err){
  1751. if(err){
  1752. cb(err);
  1753. }
  1754. else {
  1755. cb(null);
  1756. }
  1757. });
  1758. },
  1759. function(cb){
  1760. if(updateNode){
  1761. Bills.update({billsLibId: billsLibId, ID: updateNode.ID, deleted: false}, {$set: {NextSiblingID: updateNode.NextSiblingID}}, function(err){
  1762. if(err){
  1763. cb(err);
  1764. }
  1765. else {
  1766. cb(null);
  1767. }
  1768. });
  1769. }else {
  1770. cb(null);
  1771. }
  1772. },
  1773. function (cb) {
  1774. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1775. if(err){
  1776. cb(err);
  1777. }
  1778. else{
  1779. if(result.length > 0 ){
  1780. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1781. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1782. if(err){
  1783. cb(err);
  1784. }
  1785. else{
  1786. cb(null);
  1787. }
  1788. });
  1789. }
  1790. }
  1791. });
  1792. }
  1793. ], function(err){
  1794. if(err){
  1795. callback(1, 'Error');
  1796. }else {
  1797. callback(0, '');
  1798. }
  1799. });
  1800. }
  1801. }
  1802. //--------------JobContent------------------
  1803. billsLibDao.prototype.getJobContent = function(gJobData, callback){
  1804. let billsLibId = gJobData.billsLibId;
  1805. JobContent.find({billsLibId: billsLibId, deleted: false}, '-_id').sort({code: 1}).exec(function(err, result){
  1806. if(err){
  1807. callback(1, 'Error', null);
  1808. }
  1809. else {
  1810. callback(0, '', result);
  1811. }
  1812. });
  1813. }
  1814. billsLibDao.prototype.createJobContent = function(cJobData, callback){
  1815. let data = cJobData.data;
  1816. let billsLibId = cJobData.billsLibId;
  1817. let serialNo = cJobData.serialNo;
  1818. let newJobContent, lastOperator = cJobData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  1819. async.parallel([
  1820. function (cb) {
  1821. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  1822. if(err){
  1823. cb(err)
  1824. }
  1825. else {
  1826. let newJobId = result.sequence_value;
  1827. newJobContent = {
  1828. id: newJobId,
  1829. billsLibId: billsLibId,
  1830. code: serialNo,
  1831. content: data,
  1832. deleted: false
  1833. };
  1834. JobContent.create(newJobContent, function(err){
  1835. if(err){
  1836. cb(err);
  1837. }
  1838. else{
  1839. cb(null, newJobId);
  1840. }
  1841. });
  1842. }
  1843. });
  1844. },
  1845. function (cb) {
  1846. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1847. if(err){
  1848. cb(err);
  1849. }
  1850. else{
  1851. if(result.length > 0 ){
  1852. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1853. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1854. if(err){
  1855. cb(err);
  1856. }
  1857. else{
  1858. cb(null);
  1859. }
  1860. });
  1861. }
  1862. }
  1863. });
  1864. }
  1865. ], function (err, result) {
  1866. if(err){
  1867. callback(1, 'Error', null);
  1868. }
  1869. else{
  1870. callback(0, '', result[0])
  1871. }
  1872. })
  1873. };
  1874. billsLibDao.prototype.updateJobContent = function(uJobData, callback){
  1875. let billsLibId = uJobData.billsLibId;
  1876. let field = uJobData.field;
  1877. let updateData = uJobData.data;
  1878. let updateid = uJobData.updateId, lastOperator = uJobData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'),
  1879. needSet = {};
  1880. needSet[field] = updateData;
  1881. async.parallel([
  1882. function (cb) {
  1883. JobContent.update({billsLibId: billsLibId, id: updateid}, {$set: needSet}, function (err) {
  1884. if(err){
  1885. cb(err);
  1886. }
  1887. else{
  1888. cb(null);
  1889. }
  1890. });
  1891. },
  1892. function (cb) {
  1893. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1894. if(err){
  1895. cb(err);
  1896. }
  1897. else{
  1898. if(result.length > 0 ){
  1899. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1900. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1901. if(err){
  1902. cb(err);
  1903. }
  1904. else{
  1905. cb(null);
  1906. }
  1907. });
  1908. }
  1909. }
  1910. });
  1911. }
  1912. ], function (err) {
  1913. if(err){
  1914. callback(1, 'Error');
  1915. }
  1916. else{
  1917. callback(0, '');
  1918. }
  1919. });
  1920. };
  1921. billsLibDao.prototype.deleteJobContent = function(data, callback){
  1922. let delIds = data.ids;
  1923. let billsLibId = data.billsLibId, lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  1924. if(delIds){
  1925. async.parallel([
  1926. function (cb) {
  1927. async.each(delIds, function(id, ecb){
  1928. JobContent.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err){
  1929. if(err){
  1930. ecb(err);
  1931. }
  1932. else {
  1933. ecb(null);
  1934. }
  1935. });
  1936. }, function(err){
  1937. if(err){
  1938. cb(err);
  1939. }else {
  1940. cb(null);
  1941. }
  1942. });
  1943. },
  1944. function (cb) {
  1945. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  1946. if(err){
  1947. cb(err);
  1948. }
  1949. else{
  1950. if(result.length > 0 ){
  1951. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1952. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1953. if(err){
  1954. cb(err);
  1955. }
  1956. else{
  1957. cb(null);
  1958. }
  1959. });
  1960. }
  1961. }
  1962. });
  1963. }
  1964. ], function (err) {
  1965. if(err){
  1966. callback(1, 'Error');
  1967. }
  1968. else{
  1969. callback(0, '');
  1970. }
  1971. })
  1972. }
  1973. }
  1974. billsLibDao.prototype.pasteJobs = function (data, callback) {
  1975. let pasteDatas = data.pasteDatas;
  1976. let updateDatas = pasteDatas.updateDatas,
  1977. createDatas = pasteDatas.createDatas;
  1978. let functions = [], lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  1979. let parallelFucs = {
  1980. updateLastOpr: function () {
  1981. return function (cb) {
  1982. StdBillsLib.find({billsLibId: data.billsLibId}, function (err, result) {
  1983. if(err){
  1984. cb(err);
  1985. }
  1986. else{
  1987. if(result.length > 0 ){
  1988. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  1989. StdBillsLib.update({billsLibId: data.billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  1990. if(err){
  1991. cb(err);
  1992. }
  1993. else{
  1994. cb(null);
  1995. }
  1996. });
  1997. }
  1998. }
  1999. });
  2000. }
  2001. },
  2002. updateFuc: function(data){
  2003. let updateId = data.orgId,
  2004. field = data.field,
  2005. updateData = data.data, billsLibId = data.billsLibId;
  2006. if(field === 'code'){
  2007. return function (cb){
  2008. JobContent.update({billsLibId: billsLibId, id: updateId}, {$set: {code: updateData}}, function(err){
  2009. if(err){
  2010. cb(err);
  2011. }else {
  2012. cb(null, data);
  2013. }
  2014. });
  2015. };
  2016. }else {
  2017. return function (cb){
  2018. JobContent.update({billsLibId: billsLibId, id: updateId}, {$set: {content: updateData}}, function(err){
  2019. if(err){
  2020. cb(err);
  2021. }else {
  2022. cb(null, data);
  2023. }
  2024. });
  2025. }
  2026. }
  2027. },
  2028. createFuc: function(data){
  2029. let billsLibId = data.billsLibId,
  2030. code;
  2031. let jobObj;
  2032. if(data.type === 'CreateT'){
  2033. jobObj = {
  2034. billsLibId: billsLibId,
  2035. code: data.code,
  2036. content: data.content,
  2037. deleted: false
  2038. }
  2039. }
  2040. else{
  2041. if(data.field === 'code'){
  2042. jobObj = {
  2043. billsLibId: billsLibId,
  2044. code: data.data,
  2045. content: '',
  2046. deleted: false
  2047. }
  2048. }
  2049. else {
  2050. jobObj = {
  2051. billsLibId: billsLibId,
  2052. code: data.code,
  2053. content: data.data,
  2054. deleted: false
  2055. }
  2056. }
  2057. }
  2058. return function (cb){
  2059. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  2060. if(err){
  2061. cb(err);
  2062. }
  2063. else {
  2064. let newJobId = result.sequence_value;
  2065. jobObj.id = newJobId;
  2066. data.newJobId = newJobId
  2067. JobContent.create(jobObj, function(err){
  2068. if(err){
  2069. cb(err);
  2070. }else {
  2071. cb(null, data);
  2072. }
  2073. });
  2074. }
  2075. });
  2076. }
  2077. }
  2078. };
  2079. if(updateDatas.length > 0){
  2080. for(let i=0; i<updateDatas.length; i++){
  2081. functions.push(parallelFucs.updateFuc(updateDatas[i]));
  2082. }
  2083. }
  2084. if(createDatas.length > 0){
  2085. for(let i =0; i<createDatas.length; i++){
  2086. functions.push(parallelFucs.createFuc(createDatas[i]));
  2087. }
  2088. }
  2089. functions.push(parallelFucs.updateLastOpr());
  2090. async.parallel(functions, function(err, datas){
  2091. if(err){
  2092. callback(1, 'Error', null);
  2093. }else {
  2094. callback(0, '', datas);
  2095. }
  2096. });
  2097. };
  2098. billsLibDao.prototype.edCreateJob = function(data, callback){
  2099. let billsLibId = data.billsLibId,
  2100. code = data.code,
  2101. billsId = data.billsId,
  2102. content = data.data,
  2103. serialNo = data.serialNo, lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2104. async.waterfall([
  2105. function(cb){
  2106. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  2107. if(err){
  2108. cb(err, null);
  2109. }
  2110. else {
  2111. let newJobId = result.sequence_value;
  2112. cb(null, newJobId);
  2113. }
  2114. })
  2115. },
  2116. function(newJobId, cb){
  2117. async.parallel([
  2118. function(pcb){
  2119. JobContent.create({id: newJobId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){
  2120. if(err){
  2121. pcb(err, null);
  2122. }
  2123. else {
  2124. pcb(null, newJobId);
  2125. }
  2126. });
  2127. },
  2128. function(pcb){
  2129. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false}, {$addToSet: {jobs: {id: newJobId, serialNo: serialNo}}}, function(err){
  2130. if(err){
  2131. pcb(err, null);
  2132. }
  2133. else {
  2134. pcb(null, newJobId);
  2135. }
  2136. });
  2137. },
  2138. function (pcb) {
  2139. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2140. if(err){
  2141. pcb(err);
  2142. }
  2143. else{
  2144. if(result.length > 0 ){
  2145. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2146. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2147. if(err){
  2148. pcb(err);
  2149. }
  2150. else{
  2151. pcb(null);
  2152. }
  2153. });
  2154. }
  2155. }
  2156. });
  2157. }
  2158. ], function(err, result){
  2159. if(err){
  2160. cb(err, null);
  2161. }
  2162. else {
  2163. cb(null, result[0]);
  2164. }
  2165. });
  2166. }
  2167. ], function(err, reslut){
  2168. if(err){
  2169. callback(1, "Error", null);
  2170. }
  2171. else {
  2172. callback(0, '', reslut);
  2173. }
  2174. });
  2175. };
  2176. billsLibDao.prototype.edUpdateJob = function(data, callback){
  2177. let billsLibId = data.billsLibId,
  2178. billsId = data.billsId,
  2179. content = data.content,
  2180. code = data.code,
  2181. orgJobId = data.orgJobId, lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2182. async.waterfall([
  2183. function(cb){
  2184. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  2185. if(err){
  2186. cb(err, null);
  2187. }
  2188. else {
  2189. let newJobId = result.sequence_value;
  2190. cb(null, newJobId);
  2191. }
  2192. })
  2193. },
  2194. function(newJobId, cb){
  2195. async.parallel([
  2196. function(pcb){
  2197. JobContent.create({id: newJobId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){
  2198. if(err){
  2199. pcb(err, null);
  2200. }
  2201. else {
  2202. pcb(null, newJobId);
  2203. }
  2204. });
  2205. },
  2206. function(pcb){
  2207. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'jobs.id': orgJobId}, {$set: {'jobs.$.id': newJobId}}, function(err){
  2208. if(err){
  2209. pcb(err, null);
  2210. }
  2211. else {
  2212. pcb(null, newJobId);
  2213. }
  2214. });
  2215. },
  2216. function (pcb) {
  2217. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2218. if(err){
  2219. pcb(err);
  2220. }
  2221. else{
  2222. if(result.length > 0 ){
  2223. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2224. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2225. if(err){
  2226. pcb(err);
  2227. }
  2228. else{
  2229. pcb(null);
  2230. }
  2231. });
  2232. }
  2233. }
  2234. });
  2235. }
  2236. ], function(err, result){
  2237. if(err){
  2238. cb(err, null);
  2239. }
  2240. else {
  2241. cb(null, result[0]);
  2242. }
  2243. });
  2244. }
  2245. ], function(err, reslut){
  2246. if(err){
  2247. callback(1, "Error", null);
  2248. }
  2249. else {
  2250. callback(0, '', reslut);
  2251. }
  2252. });
  2253. };
  2254. //----------------------ItemCharacter---------------------
  2255. billsLibDao.prototype.getItemCharacter = function(gdata, callback){
  2256. let billsLibId = gdata.billsLibId;
  2257. ItemCharacter.find({billsLibId: billsLibId, deleted: false}, '-_id').sort({code: 1}).exec(function(err, result){
  2258. if(err){
  2259. callback(1, 'Error', null);
  2260. }
  2261. else {
  2262. callback(0, '', result);
  2263. }
  2264. });
  2265. }
  2266. billsLibDao.prototype.createItemCharacter = function(cItemData, callback){
  2267. let data = cItemData.data;
  2268. let billsLibId = cItemData.billsLibId;
  2269. let code = cItemData.code;
  2270. let newItemCharacter, lastOperator = cItemData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2271. async.parallel([
  2272. function (cb) {
  2273. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function (err, result) {
  2274. if(err){
  2275. cb(err);
  2276. }
  2277. else{
  2278. let newItemId = result.sequence_value;
  2279. newItemCharacter = {
  2280. id: newItemId,
  2281. billsLibId: billsLibId,
  2282. content: data,
  2283. code: code,
  2284. deleted: false
  2285. }
  2286. ItemCharacter.create(newItemCharacter, function(err){
  2287. if(err){
  2288. cb(err);
  2289. }
  2290. else{
  2291. cb(null, newItemId);
  2292. }
  2293. });
  2294. }
  2295. });
  2296. },
  2297. function (cb) {
  2298. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2299. if(err){
  2300. cb(err);
  2301. }
  2302. else{
  2303. if(result.length > 0 ){
  2304. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2305. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2306. if(err){
  2307. cb(err);
  2308. }
  2309. else{
  2310. cb(null);
  2311. }
  2312. });
  2313. }
  2314. }
  2315. });
  2316. }
  2317. ], function (err, result) {
  2318. if(err){
  2319. callback(1, 'Error', null);
  2320. }
  2321. else{
  2322. callback(0, '', result[0]);
  2323. }
  2324. });
  2325. };
  2326. billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
  2327. let field = uItemData.field;
  2328. let updateData = uItemData.data;
  2329. let id = uItemData.updateId;
  2330. let billsLibId = uItemData.billsLibId, needSet = {},
  2331. lastOperator = uItemData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2332. needSet[field] = updateData;
  2333. async.parallel([
  2334. function (cb) {
  2335. ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: needSet}, function(err){
  2336. if(err){
  2337. cb(err);
  2338. }
  2339. else{
  2340. cb(null);
  2341. }
  2342. });
  2343. },
  2344. function (cb) {
  2345. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2346. if(err){
  2347. cb(err);
  2348. }
  2349. else{
  2350. if(result.length > 0 ){
  2351. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2352. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2353. if(err){
  2354. cb(err);
  2355. }
  2356. else{
  2357. cb(null);
  2358. }
  2359. });
  2360. }
  2361. }
  2362. });
  2363. }
  2364. ], function (err) {
  2365. if(err){
  2366. callback(1, 'Error');
  2367. }
  2368. else{
  2369. callback(0, '');
  2370. }
  2371. });
  2372. };
  2373. billsLibDao.prototype.updateValue = function(uData, callback){
  2374. let type = uData.type;
  2375. let updateId = uData.updateId;
  2376. let data = uData.data;
  2377. let deleteCodes = uData.deleteCodes;
  2378. let billsLibId = uData.billsLibId, lastOperator = uData.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2379. if(type === 'create'){
  2380. async.parallel([
  2381. function (cb) {
  2382. ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$addToSet: {itemValue: data}}, function(err){
  2383. if(err){
  2384. cb(err);
  2385. }
  2386. else{
  2387. cb(null);
  2388. }
  2389. });
  2390. },
  2391. function (cb) {
  2392. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2393. if(err){
  2394. cb(err);
  2395. }
  2396. else{
  2397. if(result.length > 0 ){
  2398. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2399. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2400. if(err){
  2401. cb(err);
  2402. }
  2403. else{
  2404. cb(null);
  2405. }
  2406. });
  2407. }
  2408. }
  2409. });
  2410. }
  2411. ], function (err) {
  2412. if(err){
  2413. callback(1, 'Error');
  2414. }
  2415. else{
  2416. callback(0, '');
  2417. }
  2418. })
  2419. }
  2420. else if(type === 'update'){
  2421. if(data.field === 'code'){
  2422. async.parallel([
  2423. function (cb) {
  2424. ItemCharacter.update({billsLibId: billsLibId, id: updateId, 'itemValue.code': data.code}, {$set: {'itemValue.$.code': data.newData}}, function(err){
  2425. if(err){
  2426. cb(err);
  2427. }
  2428. else{
  2429. cb(null);
  2430. }
  2431. });
  2432. },
  2433. function (cb) {
  2434. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2435. if(err){
  2436. cb(err);
  2437. }
  2438. else{
  2439. if(result.length > 0 ){
  2440. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2441. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2442. if(err){
  2443. cb(err);
  2444. }
  2445. else{
  2446. cb(null);
  2447. }
  2448. });
  2449. }
  2450. }
  2451. });
  2452. }
  2453. ], function (err) {
  2454. if(err){
  2455. callback(1, 'Error');
  2456. }
  2457. else{
  2458. callback(0, '');
  2459. }
  2460. });
  2461. }
  2462. else {
  2463. async.parallel([
  2464. function (cb) {
  2465. ItemCharacter.update({billsLibId: billsLibId, id: updateId, 'itemValue.code': data.code}, {$set: {'itemValue.$.value': data.newData}}, function(err,result){
  2466. if(err){
  2467. cb(err);
  2468. }
  2469. else{
  2470. cb(null);
  2471. }
  2472. });
  2473. },
  2474. function (cb) {
  2475. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2476. if(err){
  2477. cb(err);
  2478. }
  2479. else{
  2480. if(result.length > 0 ){
  2481. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2482. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2483. if(err){
  2484. cb(err);
  2485. }
  2486. else{
  2487. cb(null);
  2488. }
  2489. });
  2490. }
  2491. }
  2492. });
  2493. }
  2494. ], function (err) {
  2495. if(err){
  2496. callback(1, 'Error');
  2497. }
  2498. else{
  2499. callback(0, '');
  2500. }
  2501. })
  2502. }
  2503. }
  2504. //delete
  2505. else {
  2506. if(deleteCodes.length > 0){
  2507. async.parallel([
  2508. function (cb) {
  2509. async.each(deleteCodes, function(code, ecb){
  2510. ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$pull: {itemValue: {code: code}}}, function(err){
  2511. if(err){
  2512. ecb(err);
  2513. }else {
  2514. ecb(null);
  2515. }
  2516. });
  2517. }, function(err){
  2518. if(err){
  2519. cb(err);
  2520. }else {
  2521. cb(null);
  2522. }
  2523. });
  2524. },
  2525. function (cb) {
  2526. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2527. if(err){
  2528. cb(err);
  2529. }
  2530. else{
  2531. if(result.length > 0 ){
  2532. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2533. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2534. if(err){
  2535. cb(err);
  2536. }
  2537. else{
  2538. cb(null);
  2539. }
  2540. });
  2541. }
  2542. }
  2543. });
  2544. }
  2545. ], function (err) {
  2546. if(err){
  2547. callback(1, 'Error');
  2548. }
  2549. else{
  2550. callback(0, '');
  2551. }
  2552. });
  2553. }
  2554. }
  2555. };
  2556. billsLibDao.prototype.deleteItemCharacter = function(data, callback){
  2557. let delIds = data.ids;
  2558. let billsLibId = data.billsLibId, lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2559. if(delIds){
  2560. async.parallel([
  2561. function (cb) {
  2562. async.each(delIds, function(id, ecb){
  2563. ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err){
  2564. if(err){
  2565. ecb(err);
  2566. }else {
  2567. ecb(null);
  2568. }
  2569. }, function(err){
  2570. if(err){
  2571. cb(err);
  2572. }else {
  2573. cb(null);
  2574. }
  2575. });
  2576. });
  2577. },
  2578. function (cb) {
  2579. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2580. if(err){
  2581. cb(err);
  2582. }
  2583. else{
  2584. if(result.length > 0 ){
  2585. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2586. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2587. if(err){
  2588. cb(err);
  2589. }
  2590. else{
  2591. cb(null);
  2592. }
  2593. });
  2594. }
  2595. }
  2596. });
  2597. }
  2598. ], function (err) {
  2599. if(err){
  2600. callback(1, 'Error');
  2601. }
  2602. else{
  2603. callback(0, '');
  2604. }
  2605. });
  2606. }
  2607. };
  2608. billsLibDao.prototype.pasteItems = function (data, callback) {
  2609. let pasteDatas = data.pasteDatas;
  2610. let updateDatas = pasteDatas.updateDatas,
  2611. createDatas = pasteDatas.createDatas;
  2612. let functions = [], lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2613. let parallelFucs = {
  2614. updateLastOpr: function () {
  2615. return function (cb) {
  2616. StdBillsLib.find({billsLibId: data.billsLibId}, function (err, result) {
  2617. if(err){
  2618. cb(err);
  2619. }
  2620. else{
  2621. if(result.length > 0 ){
  2622. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2623. StdBillsLib.update({billsLibId: data.billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2624. if(err){
  2625. cb(err);
  2626. }
  2627. else{
  2628. cb(null);
  2629. }
  2630. });
  2631. }
  2632. }
  2633. });
  2634. }
  2635. },
  2636. updateFuc: function(data){
  2637. let updateId = data.orgId,
  2638. field = data.field,
  2639. updateData = data.data, billsLibId = data.billsLibId;
  2640. if(field === 'code'){
  2641. return function (cb){
  2642. ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$set: {code: updateData}}, function(err){
  2643. if(err){
  2644. cb(err);
  2645. }else {
  2646. cb(null, data);
  2647. }
  2648. });
  2649. };
  2650. }
  2651. else{
  2652. return function(cb){
  2653. ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$set: {content: updateData}}, function(err){
  2654. if(err){
  2655. cb(err);
  2656. }else {
  2657. cb(null, data);
  2658. }
  2659. });
  2660. }
  2661. }
  2662. },
  2663. createFuc: function(data){
  2664. let billsLibId = data.billsLibId,
  2665. code;
  2666. let itemObj;
  2667. if(data.type === 'CreateT'){
  2668. itemObj = {
  2669. billsLibId: billsLibId,
  2670. code: data.code,
  2671. content: data.content,
  2672. deleted: false
  2673. }
  2674. }
  2675. else{
  2676. if(data.field === 'code'){
  2677. itemObj = {
  2678. billsLibId: billsLibId,
  2679. code: data.data,
  2680. content: '',
  2681. deleted: false
  2682. }
  2683. }
  2684. else {
  2685. itemObj = {
  2686. billsLibId: billsLibId,
  2687. code: data.code,
  2688. content: data.data,
  2689. deleted: false
  2690. }
  2691. }
  2692. }
  2693. return function (cb){
  2694. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  2695. if(err){
  2696. cb(err);
  2697. }
  2698. else{
  2699. let newItemId = result.sequence_value;
  2700. itemObj.id = newItemId;
  2701. data.newItemId = newItemId;
  2702. ItemCharacter.create(itemObj, function(err){
  2703. if(err){
  2704. cb(err);
  2705. }else {
  2706. cb(null, data);
  2707. }
  2708. });
  2709. }
  2710. });
  2711. }
  2712. }
  2713. };
  2714. if(updateDatas.length > 0){
  2715. for(let i=0; i<updateDatas.length; i++){
  2716. functions.push(parallelFucs.updateFuc(updateDatas[i]));
  2717. }
  2718. }
  2719. if(createDatas.length > 0){
  2720. for(let i =0; i<createDatas.length; i++){
  2721. functions.push(parallelFucs.createFuc(createDatas[i]));
  2722. }
  2723. }
  2724. functions.push(parallelFucs.updateLastOpr());
  2725. async.parallel(functions, function(err, datas){
  2726. if(err){
  2727. callback(1, 'Error', null);
  2728. }else {
  2729. callback(0, '', datas);
  2730. }
  2731. });
  2732. };
  2733. billsLibDao.prototype.pasteValues = function(data, callback) {
  2734. let pasteDatas = data.pasteDatas;
  2735. let updateDatas = pasteDatas.updateDatas, createDatas = pasteDatas.createDatas;
  2736. let functions = [], lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2737. let parallelFucs = {
  2738. updateLastOpr: function () {
  2739. return function (cb) {
  2740. StdBillsLib.find({billsLibId: data.billsLibId}, function (err, result) {
  2741. if(err){
  2742. cb(err);
  2743. }
  2744. else{
  2745. if(result.length > 0 ){
  2746. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2747. StdBillsLib.update({billsLibId: data.billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2748. if(err){
  2749. cb(err);
  2750. }
  2751. else{
  2752. cb(null);
  2753. }
  2754. });
  2755. }
  2756. }
  2757. });
  2758. }
  2759. },
  2760. updateFuc: function(data){
  2761. let billsLibId = data.billsLibId, itemId = data.itemId, orgCode = data.orgId;
  2762. if (data.type === 'UpdateT') {
  2763. let valueObj = {code: data.code, value: data.content};
  2764. return function (cb){
  2765. ItemCharacter.update({billsLibId: billsLibId, id: itemId}, {$pull: {itemValue: {code: orgCode}}}, function (err) {
  2766. if (err) {
  2767. cb(err);
  2768. }
  2769. else {
  2770. ItemCharacter.update({billsLibId: billsLibId, id: itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
  2771. if (err) {
  2772. cb(err);
  2773. }
  2774. else {
  2775. cb(null, data);
  2776. }
  2777. });
  2778. }
  2779. });
  2780. };
  2781. }
  2782. else if (data.type === 'Update' && data.field === 'code') {
  2783. return function (cb) {
  2784. ItemCharacter.update({billsLibId: billsLibId, id: itemId, 'itemValue.code': orgCode},
  2785. {$set: {'itemValue.$.code': data.data}}, function (err) {
  2786. if(err){
  2787. cb(err);
  2788. }
  2789. else {
  2790. cb(null, data);
  2791. }
  2792. });
  2793. }
  2794. }
  2795. else if(data.type === 'Update' && data.field === 'value') {
  2796. return function (cb){
  2797. ItemCharacter.update({billsLibId: billsLibId, id: itemId, 'itemValue.code': orgCode}, {$set: {'itemValue.$.value': data.data}}, function(err){
  2798. if(err){
  2799. cb(err);
  2800. }
  2801. else {
  2802. cb(null, data);
  2803. }
  2804. });
  2805. };
  2806. }
  2807. },
  2808. createFuc: function(data){
  2809. let valueObj;
  2810. if(data.type === 'CreateT'){
  2811. valueObj = {code: data.code, value: data.content};
  2812. return function (cb){
  2813. ItemCharacter.update({billsLibId: data.billsLibId, id: data.itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
  2814. if (err) {
  2815. cb(err);
  2816. }
  2817. else {
  2818. cb(null, data);
  2819. }
  2820. });
  2821. };
  2822. }
  2823. else if(data.type === 'Create' && data.field === 'code'){
  2824. valueObj = {code: data.data, value: ''};
  2825. return function (cb){
  2826. ItemCharacter.update({billsLibId: data.billsLibId, id: data.itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
  2827. if (err) {
  2828. cb(err);
  2829. }
  2830. else {
  2831. cb(null, data);
  2832. }
  2833. });
  2834. };
  2835. }
  2836. else {
  2837. valueObj = {code: data.code, value: data.data};
  2838. return function(cb){
  2839. ItemCharacter.update({billsLibId: data.billsLibId, id: data.itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
  2840. if (err) {
  2841. cb(err);
  2842. }
  2843. else {
  2844. cb(null, data);
  2845. }
  2846. });
  2847. };
  2848. }
  2849. }
  2850. };
  2851. if (updateDatas.length > 0) {
  2852. for (let i = 0; i < updateDatas.length; i++) {
  2853. functions.push(parallelFucs.updateFuc(updateDatas[i]));
  2854. }
  2855. }
  2856. if(createDatas.length >0){
  2857. for(let i=0; i< createDatas.length; i++){
  2858. functions.push(parallelFucs.createFuc(createDatas[i]));
  2859. }
  2860. }
  2861. functions.push(parallelFucs.updateLastOpr());
  2862. async.parallel(functions, function(err, datas){
  2863. if(err){
  2864. callback(1, 'Error', null);
  2865. }
  2866. else {
  2867. callback(0, '', datas);
  2868. }
  2869. });
  2870. };
  2871. billsLibDao.prototype.edCreateItem = function(data, callback){
  2872. let billsLibId = data.billsLibId,
  2873. code = data.code,
  2874. billsId = data.billsId,
  2875. content = data.data,
  2876. serialNo = data.serialNo, lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2877. async.waterfall([
  2878. function(cb){
  2879. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  2880. if(err){
  2881. cb(err, null);
  2882. }
  2883. else {
  2884. let newItemId = result.sequence_value;
  2885. cb(null, newItemId);
  2886. }
  2887. })
  2888. },
  2889. function(newItemId, cb){
  2890. async.parallel([
  2891. function(pcb){
  2892. ItemCharacter.create({id: newItemId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){
  2893. if(err){
  2894. pcb(err, null);
  2895. }
  2896. else {
  2897. pcb(null, newItemId);
  2898. }
  2899. });
  2900. },
  2901. function(pcb){
  2902. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false}, {$addToSet: {items: {id: newItemId, serialNo: serialNo}}}, function(err){
  2903. if(err){
  2904. pcb(err, null);
  2905. }
  2906. else {
  2907. pcb(null, newItemId);
  2908. }
  2909. });
  2910. },
  2911. function (pcb) {
  2912. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2913. if(err){
  2914. pcb(err);
  2915. }
  2916. else{
  2917. if(result.length > 0 ){
  2918. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2919. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2920. if(err){
  2921. pcb(err);
  2922. }
  2923. else{
  2924. pcb(null);
  2925. }
  2926. });
  2927. }
  2928. }
  2929. });
  2930. }
  2931. ], function(err, result){
  2932. if(err){
  2933. cb(err, null);
  2934. }
  2935. else {
  2936. cb(null, result[0]);
  2937. }
  2938. });
  2939. }
  2940. ], function(err, reslut){
  2941. if(err){
  2942. callback(1, "Error", null);
  2943. }
  2944. else {
  2945. callback(0, '', reslut);
  2946. }
  2947. });
  2948. };
  2949. billsLibDao.prototype.edUpdateItem = function(data, callback){
  2950. let billsLibId = data.billsLibId,
  2951. billsId = data.billsId,
  2952. content = data.content,
  2953. code = data.code,
  2954. orgItemId = data.orgItemId, lastOperator = data.lastOperator, lastOperateDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  2955. async.waterfall([
  2956. function(cb){
  2957. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  2958. if(err){
  2959. cb(err, null);
  2960. }
  2961. else {
  2962. let newItemId = result.sequence_value;
  2963. cb(null, newItemId);
  2964. }
  2965. })
  2966. },
  2967. function(newItemId, cb){
  2968. async.parallel([
  2969. function(pcb){
  2970. ItemCharacter.create({id: newItemId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){
  2971. if(err){
  2972. pcb(err, null);
  2973. }
  2974. else {
  2975. pcb(null, newItemId);
  2976. }
  2977. });
  2978. },
  2979. function(pcb){
  2980. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){
  2981. if(err){
  2982. pcb(err, null);
  2983. }
  2984. else {
  2985. pcb(null, newItemId);
  2986. }
  2987. });
  2988. },
  2989. function (pcb) {
  2990. StdBillsLib.find({billsLibId: billsLibId}, function (err, result) {
  2991. if(err){
  2992. pcb(err);
  2993. }
  2994. else{
  2995. if(result.length > 0 ){
  2996. let newRecentOpr = getNewOprArr(result[0].recentOpr, lastOperator, lastOperateDate);
  2997. StdBillsLib.update({billsLibId: billsLibId}, {$set: {recentOpr: newRecentOpr}}, function(err){
  2998. if(err){
  2999. pcb(err);
  3000. }
  3001. else{
  3002. pcb(null);
  3003. }
  3004. });
  3005. }
  3006. }
  3007. });
  3008. }
  3009. ], function(err, result){
  3010. if(err){
  3011. cb(err, null);
  3012. }
  3013. else {
  3014. cb(null, result[0]);
  3015. }
  3016. });
  3017. }
  3018. ], function(err, reslut){
  3019. if(err){
  3020. callback(1, "Error", null);
  3021. }
  3022. else {
  3023. callback(0, '', reslut);
  3024. }
  3025. });
  3026. };
  3027. //
  3028. module.exports = new billsLibDao();