bills_lib_interfaces.js 69 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064
  1. /**
  2. * Created by vian on 2017/3/20.
  3. */
  4. let model = require("./bills_lib_model");
  5. let counter = require("../../../public/counter/counter");
  6. let async = require("async");
  7. let StdBillsLib = model.stdBillsLibMod;
  8. let Bills = model.billsMod;
  9. let JobContent = model.jobContentMod;
  10. let ItemCharacter = model.itemCharacterMod;
  11. let billsLibDao = function(){};
  12. billsLibDao.prototype.getMaxNumber = function(gData, callback){
  13. let billsLibId = gData.billsLibId;
  14. let field = gData.field;
  15. if(field === 'jobs'){
  16. JobContent.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
  17. if(err){
  18. callback(1, 'Error', null);
  19. }
  20. else {
  21. callback(0, '', result);
  22. }
  23. });
  24. }
  25. else if(field === 'items'){
  26. ItemCharacter.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
  27. if(err){
  28. callback(1, 'Error', null);
  29. }
  30. else {
  31. callback(0, '', result);
  32. }
  33. });
  34. }
  35. };
  36. //----------StdBillsLib-------------------
  37. billsLibDao.prototype.getABillsLib = function(data, callback){
  38. let billsLibId = data.billsLibId;
  39. StdBillsLib.find({billsLibId: billsLibId, deleted: false}, function(err, data){
  40. if(err){
  41. callback(1, 'Error', null);
  42. }
  43. else {
  44. callback(0, '', data);
  45. }
  46. });
  47. };
  48. billsLibDao.prototype.getStdBillsLib = function(data, callback){
  49. let userId = data.userId;
  50. StdBillsLib.find({userId: userId, deleted: false}, "-_id", function(err, data){
  51. if(err){
  52. callback(1, "Error", null);
  53. }
  54. else{
  55. callback(0, "", data);
  56. }
  57. })
  58. };
  59. billsLibDao.prototype.createStdBillsLib = function(clibData, callback){
  60. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
  61. let billsLibId = result.value.sequence_value;
  62. let userId = clibData.userId;
  63. let billsLibName = clibData.name;
  64. let createDate = Date.now();
  65. let newStdBillsLib = {
  66. userId: userId,
  67. billsLibId: billsLibId,
  68. billsLibName: billsLibName,
  69. createDate: createDate,
  70. deleted: false
  71. };
  72. StdBillsLib.create(newStdBillsLib, function(err){
  73. if(err){
  74. callback(1, "Error", null);
  75. }
  76. else {
  77. StdBillsLib.find({billsLibId: billsLibId}, function(err, data){
  78. if(err){
  79. callback(1, "Error", null)
  80. }
  81. else {
  82. callback(0, "", data);
  83. }
  84. });
  85. }
  86. });
  87. });
  88. };
  89. billsLibDao.prototype.deleteStdBillsLib = function(billsLibId, callback){
  90. async.parallel([
  91. function(cb){
  92. StdBillsLib.update({billsLibId: billsLibId}, {$set: {deleted: true}}, function(err){
  93. if(err){
  94. cb(err);
  95. }
  96. else{
  97. cb(null);
  98. }
  99. });
  100. },
  101. function(cb){
  102. Bills.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err){
  103. cb(null);
  104. });
  105. },
  106. function(cb){
  107. JobContent.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err, result){
  108. cb(null);
  109. });
  110. },
  111. function(cb){
  112. ItemCharacter.update({billsLibId: billsLibId, deleted: false}, {$set: {deleted: true}}, {upsert: false, multi: true}, function(err){
  113. cb(null);
  114. })
  115. }
  116. ], function(err){
  117. if(err){
  118. callback(1, 'Error');
  119. }
  120. else {
  121. callback(0, '');
  122. }
  123. });
  124. };
  125. billsLibDao.prototype.renameStdBillsLib = function(renameData, callback){
  126. let billsLibId = renameData.id;
  127. let renameVal = renameData.value;
  128. StdBillsLib.update({billsLibId: billsLibId}, {$set:{billsLibName: renameVal}}, function(err){
  129. if(err){
  130. callback(1, "Error");
  131. }
  132. else{
  133. callback(0, "");
  134. }
  135. });
  136. };
  137. billsLibDao.prototype.getStdBillsLibName = function(billsLibId, callback){
  138. StdBillsLib.find({billsLibId: billsLibId, deleted: false}, "-_id", function(err, data){
  139. if(err){
  140. callback(1, "Error", null);
  141. }
  142. else {
  143. callback(0, "", data);
  144. }
  145. });
  146. };
  147. billsLibDao.prototype.getCurrentUniqId = function(callback){
  148. counter.counterDAO.getCurrentID(counter.moduleName.billsLib, function(result, err){
  149. let id = result.sequence_value;
  150. if(err){
  151. callback(1, 'Error', null);
  152. }
  153. else{
  154. callback(0, '', id);
  155. }
  156. });
  157. }
  158. //----------------------------Bills---------------------
  159. billsLibDao.prototype.getBills = function (billsLibId, callback) {
  160. Bills.find({billsLibId: billsLibId, deleted: false}, "-_id", function(err, billsData){
  161. if(err){
  162. callback(1, "Error", null);
  163. }
  164. else{
  165. callback(0, "", billsData);
  166. }
  167. });
  168. }
  169. billsLibDao.prototype.createBills = function(cbillsData, callback){
  170. let newId = cbillsData.newId;
  171. let pid = cbillsData.ParentID;
  172. let nid = cbillsData.NextSiblingID;
  173. let billsLibId = cbillsData.billsLibId;
  174. let updatePreData = cbillsData.updatePreData;
  175. let newBills = {
  176. ID: newId,
  177. ParentID: pid,
  178. NextSiblingID: nid,
  179. billsLibId: billsLibId,
  180. code: '',
  181. name: '',
  182. unit: '',
  183. ruleText: '',
  184. Expression: '',
  185. recharge:'',
  186. deleted: false
  187. };
  188. async.parallel([
  189. function(cb){
  190. Bills.create(newBills, function(err){
  191. if(err){
  192. cb(err);
  193. }
  194. else {
  195. cb(null);
  196. }
  197. });
  198. },
  199. function(cb){
  200. if(updatePreData){
  201. Bills.findOneAndUpdate({billsLibId: billsLibId, ID: updatePreData.ID, deleted: false}, {$set: {NextSiblingID: updatePreData.NextSiblingID}}, function(err, result){
  202. if(err){
  203. cb(err);
  204. }
  205. else {
  206. cb(null)
  207. }
  208. });
  209. }
  210. else {
  211. cb(null);
  212. }
  213. }
  214. ], function(err){
  215. if(err){
  216. callback(1, 'Error');
  217. }
  218. else {
  219. callback(0, '');
  220. }
  221. });
  222. };
  223. billsLibDao.prototype.upMove = function(data, callback){
  224. let billsLibId = data.billsLibId,
  225. updateDatas = data.updateDatas;
  226. async.each(updateDatas, function(updateData, cb){
  227. Bills.findOneAndUpdate({billsLibId: billsLibId, ID: updateData.ID, deleted: false}, {$set: {NextSiblingID: updateData.NextSiblingID}}, function(err){
  228. if(err){
  229. cb(err);
  230. }
  231. else {
  232. cb(null);
  233. }
  234. });
  235. }, function(err){
  236. if(err){
  237. callback(1, 'Error');
  238. }
  239. else{
  240. callback(0, '');
  241. }
  242. });
  243. };
  244. billsLibDao.prototype.downMove = function (data, callbck) {
  245. let billsLibId = data.billsLibId,
  246. updateDatas = data.updateDatas,
  247. functions = [];
  248. let parallelFucs = {
  249. nextSiblingNode: function (data) {
  250. return function (cb) {
  251. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  252. if(err){
  253. cb(err);
  254. }
  255. else{
  256. cb(null);
  257. }
  258. });
  259. };
  260. },
  261. oprNode: function (data) {
  262. return function (cb) {
  263. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  264. if(err){
  265. cb(err);
  266. }
  267. else {
  268. cb(null);
  269. }
  270. })
  271. }
  272. },
  273. preSiblingNode: function (data) {
  274. return function (cb) {
  275. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  276. if(err){
  277. cb(err);
  278. }
  279. else{
  280. cb(null);
  281. }
  282. });
  283. };
  284. }
  285. };
  286. for(let i =0; i< updateDatas.length; i++){
  287. if(updateDatas[i].type === 'nextSiblingNode'){
  288. functions.push(parallelFucs.nextSiblingNode(updateDatas[i]));
  289. }
  290. else if(updateDatas[i].type === 'oprNode'){
  291. functions.push(parallelFucs.oprNode(updateDatas[i]));
  292. }
  293. else {
  294. functions.push(parallelFucs.preSiblingNode(updateDatas[i]));
  295. }
  296. }
  297. async.parallel(functions, function (err) {
  298. if(err){
  299. callbck(1, 'Error');
  300. }
  301. else{
  302. callbck(0, '');
  303. }
  304. })
  305. }
  306. billsLibDao.prototype.upLevel = function(data, callback){
  307. let billsLibId = data.billsLibId,
  308. updateDatas = data.updateDatas, functions = [];
  309. let parallelFucs = {
  310. oprNode: function (data) {
  311. return function (cb){
  312. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function(err){
  313. if(err){
  314. console.log(`err1`);
  315. cb(err);
  316. }
  317. else {
  318. cb(null);
  319. }
  320. });
  321. };
  322. },
  323. parentNode: function (data) {
  324. return function(cb){
  325. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  326. if(err){
  327. console.log(`err2`);
  328. cb(err);
  329. }
  330. else {
  331. cb(null);
  332. }
  333. })
  334. };
  335. },
  336. nextSiblingNode: function (data) {
  337. return function (cb) {
  338. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID}}, function (err) {
  339. if(err){
  340. console.log(`err3`);
  341. cb(err);
  342. }
  343. else{
  344. cb(null);
  345. }
  346. });
  347. };
  348. },
  349. preSiblingNode: function(data){
  350. return function (cb) {
  351. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  352. if(err){
  353. cb(err);
  354. }
  355. else {
  356. cb(null);
  357. }
  358. });
  359. };
  360. }
  361. }
  362. for(let i=0; i< updateDatas.length; i++){
  363. if(updateDatas[i].type === 'oprNode'){
  364. functions.push(parallelFucs.oprNode(updateDatas[i]));
  365. }
  366. else if(updateDatas[i].type === 'parentNode'){
  367. functions.push(parallelFucs.parentNode(updateDatas[i]));
  368. }
  369. else if(updateDatas[i].type === 'nextSiblingNode'){
  370. updateDatas[i].ID.forEach(function (id) {
  371. let obj = {ID: id, ParentID: updateDatas[i].ParentID};
  372. functions.push(parallelFucs.nextSiblingNode(obj));
  373. });
  374. }
  375. else {
  376. functions.push(parallelFucs.preSiblingNode(updateDatas[i]));
  377. }
  378. }
  379. async.parallel(functions, function(err){
  380. if(err){
  381. callback(1, 'Error');
  382. }
  383. else{
  384. callback(0, '');
  385. }
  386. });
  387. };
  388. billsLibDao.prototype.downLevel = function (data, callback) {
  389. let billsLibId = data.billsLibId,
  390. updateDatas = data.updateDatas,
  391. functions = [];
  392. let parallelFucs = {
  393. preSiblingNode: function (data) {
  394. return function (cb) {
  395. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  396. if(err){
  397. cb(err);
  398. }
  399. else {
  400. cb(null);
  401. }
  402. });
  403. };
  404. },
  405. oprNode: function (data) {
  406. return function (cb) {
  407. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function (err) {
  408. if(err){
  409. cb(err);
  410. }
  411. else{
  412. cb(null);
  413. }
  414. });
  415. };
  416. },
  417. preChildren: function (data) {
  418. return function (cb) {
  419. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function (err) {
  420. if(err){
  421. cb(err);
  422. }
  423. else{
  424. cb(null);
  425. }
  426. });
  427. };
  428. }
  429. }
  430. for(let i=0; i<updateDatas.length; i++){
  431. if(updateDatas[i].type === 'preSiblingNode'){
  432. functions.push(parallelFucs.preSiblingNode(updateDatas[i]));
  433. }
  434. else if(updateDatas[i].type === 'oprNode'){
  435. functions.push(parallelFucs.oprNode(updateDatas[i]));
  436. }
  437. else {
  438. functions.push(parallelFucs.preChildren(updateDatas[i]));
  439. }
  440. }
  441. async.parallel(functions, function (err) {
  442. if(err){
  443. callback(1, 'Error');
  444. }
  445. else{
  446. callback(0, '');
  447. }
  448. })
  449. };
  450. billsLibDao.prototype.updatePNId= function(upData, callback){
  451. let billsLibId = upData.billsLibId;
  452. let updateDatas = upData.updateData;
  453. let eachDatas = [];
  454. for(let i=0; i< updateDatas.length; i++){
  455. if(updateDatas[i].ID.length > 1){
  456. let ids = updateDatas[i].ID;
  457. for(let j=0; j<ids.length; j++){
  458. let eachObj = {
  459. id: ids[j],
  460. data: updateDatas[i]
  461. }
  462. eachDatas.push(eachObj);
  463. }
  464. }
  465. else {
  466. eachDatas.push({id: updateDatas[i].ID, data: updateDatas[i]});
  467. }
  468. }
  469. async.each(eachDatas, function(eachObj, cb){
  470. let id = eachObj.id, data = eachObj.data;
  471. if(data.ParentID && data.NextSiblingID){
  472. Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function(err){
  473. if(err){
  474. cb(err);
  475. }else {
  476. cb(null);
  477. }
  478. });
  479. }
  480. else if(data.ParentID && !data.NextSiblingID){
  481. Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {ParentID: data.ParentID}}, function(err){
  482. if(err){
  483. if(err){
  484. cb(err);
  485. }else {
  486. cb(null);
  487. }
  488. }
  489. });
  490. }
  491. else if(!data.ParentID && data.NextSiblingID){
  492. Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {NextSiblingID: data.NextSiblingID}}, function(err){
  493. if(err){
  494. cb(err);
  495. }else {
  496. cb(null);
  497. }
  498. });
  499. }
  500. }, function(err){
  501. if(err){
  502. callback(1, 'Error');
  503. }
  504. else {
  505. callback(0, '');
  506. }
  507. });
  508. }
  509. billsLibDao.prototype.updateBills = function(ubillsData, callback){
  510. let billsLibId = ubillsData.billsLibId;
  511. let updateId = ubillsData.updateId;
  512. let updateField = ubillsData.field;
  513. let updateData = ubillsData.data;
  514. if(updateField === "code"){
  515. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$set: {code: updateData}}, function(err){
  516. if(err){
  517. callback(1, "Error");
  518. }
  519. else {
  520. callback(0, "");
  521. }
  522. });
  523. }
  524. else if(updateField === "name"){
  525. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$set: {name: updateData}}, function(err){
  526. if(err){
  527. callback(1, "Error");
  528. }
  529. else {
  530. callback(0, "");
  531. }
  532. });
  533. }
  534. else if(updateField === "unit"){
  535. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$set: {unit: updateData}}, function(err){
  536. if(err){
  537. callback(1, "Error");
  538. }
  539. else {
  540. callback(0, "");
  541. }
  542. });
  543. }
  544. else if(updateField === "ruleText"){
  545. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$set: {ruleText: updateData}}, function(err){
  546. if(err){
  547. callback(1, "Error");
  548. }
  549. else {
  550. callback(0, "");
  551. }
  552. });
  553. }
  554. else if(updateField === "jobs"){
  555. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$addToSet: {jobs: updateData}}, function(err){
  556. if(err){
  557. callback(1, "Error");
  558. }
  559. else {
  560. callback(0, "");
  561. }
  562. });
  563. }
  564. else if(updateField === "items"){
  565. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$addToSet: {items: updateData}}, function(err){
  566. if(err){
  567. callback(1, "Error");
  568. }
  569. else {
  570. callback(0, "");
  571. }
  572. });
  573. }
  574. }
  575. billsLibDao.prototype.removeTotal = function (data, callback) {
  576. let billsLibId = data.billsLibId, billsIds = data.billsIds,
  577. delIds = data.delIds, field = data.field, functions = [], delArr = [];
  578. if(billsIds.length > 0){
  579. billsIds.forEach(function (updateId) {
  580. delIds.forEach(function (delId) {
  581. delArr.push({updateID: updateId, delId: delId});
  582. });
  583. });
  584. }
  585. let parallelFucs = {
  586. delJobs: function () {
  587. return function (cb) {
  588. async.each(delIds, function (delJobId, ecb) {
  589. JobContent.update({billsLibId: billsLibId, id: delJobId, deleted: false}, {$set: {deleted: true}}, function (err, result) {
  590. if(err){
  591. ecb(err);
  592. }
  593. else {
  594. ecb(null);
  595. }
  596. });
  597. }, function (err) {
  598. if(err){
  599. cb(err);
  600. }
  601. else{
  602. cb(null);
  603. }
  604. });
  605. };
  606. },
  607. delJobsArr: function () {
  608. return function (cb) {
  609. async.each(delArr, function (delObj, ecb) {
  610. Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {jobs: {id: delObj.delId}}}, function (err) {
  611. if(err){
  612. ecb(err);
  613. }else{
  614. ecb(null);
  615. }
  616. });
  617. }, function (err) {
  618. if(err){
  619. cb(err);
  620. }
  621. else{
  622. cb(null);
  623. }
  624. })
  625. };
  626. },
  627. delItems: function () {
  628. return function (cb) {
  629. async.each(delIds, function (delItemId, ecb) {
  630. ItemCharacter.update({billsLibId: billsLibId, id: delItemId, deleted: false}, {$set: {deleted: true}}, function (err) {
  631. if(err){
  632. ecb(err);
  633. }
  634. else{
  635. ecb(null);
  636. }
  637. }, function (err) {
  638. if(err){
  639. cb(err);
  640. }
  641. else{
  642. cb(null);
  643. }
  644. });
  645. });
  646. }
  647. },
  648. delItemsArr: function () {
  649. return function (cb) {
  650. async.each(delArr, function (delObj, ecb) {
  651. Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted:false}, {$pull: {items: {id: delObj.delId}}}, function(err){
  652. if(err){
  653. ecb(err);
  654. }
  655. else{
  656. ecb(null);
  657. }
  658. });
  659. }, function (err) {
  660. if(err){
  661. cb(err);
  662. }
  663. else{
  664. cb(null);
  665. }
  666. });
  667. }
  668. }
  669. };
  670. if(field === 'jobs'){
  671. functions.push(parallelFucs.delJobs());
  672. functions.push(parallelFucs.delJobsArr());
  673. }
  674. else{
  675. functions.push(parallelFucs.delItems());
  676. functions.push(parallelFucs.delItemsArr());
  677. }
  678. async.parallel(functions, function (err) {
  679. if(err){
  680. callback(1, 'Error');
  681. }
  682. else{
  683. callback(0, '');
  684. }
  685. });
  686. };
  687. billsLibDao.prototype.updateSerialNo = function (data, callback) {
  688. let billsLibId = data.billsLibId, billsId = data.billsId,
  689. updateArr = data.updateArr, field = data.field;
  690. if(field === 'jobs'){
  691. async.each(updateArr, function (updateObj, cb) {
  692. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'jobs.id': updateObj.id}, {$set: {'jobs.$.serialNo': updateObj.serialNo}}, function (err) {
  693. if(err){
  694. cb(err);
  695. }
  696. else{
  697. cb(null);
  698. }
  699. });
  700. }, function (err) {
  701. if(err){
  702. callback(1, 'Error');
  703. }
  704. else{
  705. callback(0, '');
  706. }
  707. });
  708. }
  709. else{
  710. async.each(updateArr, function (updateObj, cb) {
  711. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'items.id': updateObj.id}, {$set: {'items.$.serialNo': updateObj.serialNo}}, function (err) {
  712. if(err){
  713. cb(err);
  714. }
  715. else{
  716. cb(null);
  717. }
  718. });
  719. }, function (err) {
  720. if(err){
  721. callback(1, 'Error');
  722. }
  723. else{
  724. callback(0, '');
  725. }
  726. });
  727. }
  728. };
  729. billsLibDao.prototype.updateBillsArr = function(updateData, callback){
  730. let billsLibId = updateData.billsLibId;
  731. let updateId = updateData.updateId;
  732. let orgId = updateData.orgId;
  733. let newId = updateData.newId;
  734. let classify = updateData.classify;
  735. let type = updateData.type;
  736. if(classify === 'jobs'){
  737. if(orgId && newId && type === 'update'){
  738. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false, 'jobs.id': orgId}, {$set: {'jobs.$.id': newId}}, function(err){
  739. if(err){
  740. callback(1, 'Error');
  741. }
  742. else {
  743. callback(0, '');
  744. }
  745. });
  746. }
  747. if(orgId && !newId && type === 'delete'){
  748. async.each(orgId, function(oid, cb){
  749. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$pull: {jobs: {id: oid}}}, function(err){
  750. if(err){
  751. cb(err);
  752. }else {
  753. cb(null);
  754. }
  755. });
  756. }, function(err){
  757. if(err){
  758. callback(1, 'Error');
  759. }
  760. });
  761. }
  762. if(orgId && !newId && type === 'deleteAll'){
  763. let delArr = [];
  764. updateId.forEach(function(uid){
  765. orgId.forEach(function(oid){
  766. delArr.push({updateId: uid, delId: oid});
  767. });
  768. });
  769. async.each(delArr, function(delObj, cb){
  770. Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {jobs: {id: delObj.delId}}}, function(err){
  771. if(err){
  772. cb(err);
  773. }else {
  774. cb(null);
  775. }
  776. });
  777. }, function(err){
  778. if(err){
  779. callback(1, 'Error');
  780. }else {
  781. callback(0, '');
  782. }
  783. });
  784. }
  785. }
  786. else if(classify === 'items'){
  787. if(orgId && newId && type === 'update'){
  788. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false, 'items.id': orgId}, {$set: {'items.$.id': newId}}, function(err){
  789. if(err){
  790. callback(1, 'Error');
  791. }
  792. else {
  793. callback(0, '');
  794. }
  795. });
  796. }
  797. if(orgId && !newId && type === 'delete'){
  798. async.each(orgId, function(oid, cb){
  799. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$pull: {items: {id: oid}}}, function(err){
  800. if(err){
  801. cb(err);
  802. }else {
  803. cb(null);
  804. }
  805. });
  806. }, function(err){
  807. if(err){
  808. callback(1, 'Error');
  809. }else {
  810. callback(0, '');
  811. }
  812. });
  813. }
  814. if(orgId && !newId && type === 'deleteAll'){
  815. let delArr = [];
  816. updateId.forEach(function(uid){
  817. orgId.forEach(function(oid){
  818. delArr.push({updateId: uid, delId: oid});
  819. });
  820. });
  821. async.each(delArr, function(delObj, cb){
  822. Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {items: {id: delObj.delId}}}, function(err){
  823. if(err){
  824. cb(err);
  825. }else {
  826. cb(null);
  827. }
  828. });
  829. }, function(err){
  830. if(err){
  831. callback(1, 'Error');
  832. }else {
  833. callback(0, '');
  834. }
  835. });
  836. }
  837. }
  838. };
  839. billsLibDao.prototype.pasteBills = function(pData, callback){
  840. let datas = pData.datas,
  841. billsLibId = pData.billsLibId;
  842. async.each(datas, function(data, cb){
  843. let needSet = {};
  844. for(let i in data){
  845. needSet[i] = data[i];
  846. }
  847. Bills.update({billsLibId: billsLibId, ID: data.ID, deleted: false}, {$set: needSet}, function (err) {
  848. if(err){
  849. cb(err);
  850. }
  851. else {
  852. cb(null);
  853. }
  854. });
  855. }, function(err){
  856. if(err){
  857. callback(1, 'Error');
  858. }else {
  859. callback(0, '');
  860. }
  861. });
  862. }
  863. billsLibDao.prototype.updateRecharge = function(uData, callback){
  864. let billsLibId = uData.billsLibId;
  865. let updateId = uData.updateId;
  866. let data = uData.data;
  867. Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$set: {recharge: data}}, function(err){
  868. if(err){
  869. callback(1, 'Error');
  870. }
  871. else {
  872. callback(0, '');
  873. }
  874. });
  875. /* async.each(updateIds, function(id, cb){
  876. Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {recharge: data}}, function(err){
  877. if(err){
  878. cb(err);
  879. }else {
  880. cb(null);
  881. }
  882. });
  883. }, function(err){
  884. if(err){
  885. callback(1, 'Error');
  886. }else {
  887. callback(0, '');
  888. }
  889. });*/
  890. };
  891. billsLibDao.prototype.pasteRel = function (data, callback) {
  892. const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
  893. const Jobs = 'jobs', Items = 'items';
  894. let field = data.field;
  895. let updateDatas = data.updateDatas;
  896. let createDatas = data.createDatas;
  897. let functions = [];
  898. let parallelFucs = {
  899. updateExJobs: function(data){
  900. let orgJobId = data.orgJobId, newJobId = data.newJobId,
  901. nodeId = data.nodeId, billsLibId = data.billsLibId;
  902. return function (cb){
  903. if(orgJobId && newJobId && nodeId && billsLibId){
  904. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'jobs.id': orgJobId}, {$set: {'jobs.$.id': newJobId}}, function(err){
  905. if(err){
  906. cb(err);
  907. }
  908. else{
  909. cb(null, data)
  910. }
  911. });
  912. }
  913. }
  914. },
  915. updateNeJobs: function(data){
  916. let billsLibId = data.billsLibId, nodeId = data.nodeId, newData = data.newData,
  917. orgJobId = data.orgJobId, code = data.code;
  918. return function (cb){
  919. if(billsLibId && nodeId && newData && orgJobId && code){
  920. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  921. if(err){
  922. cb(err);
  923. }
  924. else {
  925. let newJobId = result.value.sequence_value;
  926. let newJobContent = {
  927. id: newJobId,
  928. billsLibId: billsLibId,
  929. code: code,
  930. content: newData,
  931. deleted: false
  932. };
  933. JobContent.create(newJobContent, function(err){
  934. if(err){
  935. cb(err);
  936. }
  937. else{
  938. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'jobs.id': orgJobId}, {$set: {'jobs.$.id': newJobId}}, function(err){
  939. if(err){
  940. cb(err);
  941. }
  942. else{
  943. data.newJobId = newJobId;
  944. cb(null, data);
  945. }
  946. });
  947. }
  948. });
  949. }
  950. });
  951. }
  952. }
  953. },
  954. createExJobs: function(data){
  955. let billsLibId = data.billsLibId, newData = data.newData,
  956. nodeId = data.nodeId, jobId = data.jobId, serialNo = data.serialNo;
  957. return function (cb){
  958. if(billsLibId && newData && nodeId && jobId){
  959. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {jobs: {id: jobId, serialNo: serialNo}}}, function(err){
  960. if(err){
  961. cb(err);
  962. }
  963. else {
  964. cb(null, data);
  965. }
  966. });
  967. }
  968. }
  969. },
  970. createNeJobs: function(data){
  971. let billsLibId = data.billsLibId, newData = data.newData,
  972. code = data.code, nodeId = data.nodeId, serialNo = data.serialNo;
  973. return function (cb){
  974. if(billsLibId && newData && code){
  975. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  976. if(err){
  977. cb(err);
  978. }
  979. else {
  980. let newJobId = result.value.sequence_value;
  981. let newJobContent = {
  982. id: newJobId,
  983. billsLibId: billsLibId,
  984. code: code,
  985. content: newData,
  986. deleted: false
  987. };
  988. JobContent.create(newJobContent, function(err){
  989. if(err){
  990. cb(err);
  991. }
  992. else{
  993. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {jobs: {id: newJobId, serialNo: serialNo}}}, function(err){
  994. if(err){
  995. cb(err);
  996. }
  997. else {
  998. data.newJobId = newJobId;
  999. cb(null, data);
  1000. }
  1001. });
  1002. }
  1003. });
  1004. }
  1005. });
  1006. }
  1007. }
  1008. },
  1009. updateExItems: function(data){
  1010. let orgItemId = data.orgItemId, newItemId = data.newItemId,
  1011. nodeId = data.nodeId, billsLibId = data.billsLibId;
  1012. return function (cb){
  1013. if(orgItemId && newItemId && nodeId && billsLibId){
  1014. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){
  1015. if(err){
  1016. cb(err);
  1017. }
  1018. else{
  1019. cb(null, data);
  1020. }
  1021. });
  1022. }
  1023. }
  1024. },
  1025. updateNeItems: function(data){
  1026. let billsLibId = data.billsLibId, nodeId = data.nodeId, newData = data.newData,
  1027. orgItemId = data.orgItemId, code = data.code;
  1028. return function (cb){
  1029. if(billsLibId && nodeId && newData && orgItemId && code){
  1030. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  1031. if(err){
  1032. cb(err);
  1033. }
  1034. else {
  1035. let newItemId = result.value.sequence_value;
  1036. let newItemContent = {
  1037. id: newItemId,
  1038. billsLibId: billsLibId,
  1039. code: code,
  1040. content: newData,
  1041. deleted: false
  1042. };
  1043. ItemCharacter.create(newItemContent, function(err){
  1044. if(err){
  1045. cb(err);
  1046. }
  1047. else{
  1048. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){
  1049. if(err){
  1050. cb(err);
  1051. }
  1052. else{
  1053. data.newItemId = newItemId;
  1054. cb(null, data);
  1055. }
  1056. });
  1057. }
  1058. });
  1059. }
  1060. });
  1061. }
  1062. }
  1063. },
  1064. createExItems: function(data){
  1065. let billsLibId = data.billsLibId, newData = data.newData,
  1066. nodeId = data.nodeId, itemId = data.itemId, serialNo = data.serialNo;
  1067. return function (cb){
  1068. if(billsLibId && newData && nodeId && itemId){
  1069. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {items: {id: itemId, serialNo: serialNo}}}, function(err){
  1070. if(err){
  1071. cb(err);
  1072. }
  1073. else {
  1074. cb(null, data);
  1075. }
  1076. });
  1077. }
  1078. }
  1079. },
  1080. createNeItems: function(data){
  1081. let billsLibId = data.billsLibId, newData = data.newData,
  1082. code = data.code, nodeId = data.nodeId, serialNo = data.serialNo;
  1083. return function (cb){
  1084. if(billsLibId && newData && code){
  1085. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  1086. if(err){
  1087. cb(err);
  1088. }
  1089. else {
  1090. let newItemId = result.value.sequence_value;
  1091. let newItemContent = {
  1092. id: newItemId,
  1093. billsLibId: billsLibId,
  1094. code: code,
  1095. content: newData,
  1096. deleted: false
  1097. };
  1098. ItemCharacter.create(newItemContent, function(err){
  1099. if(err){
  1100. cb(err);
  1101. }
  1102. else{
  1103. Bills.update({billsLibId: billsLibId, ID: nodeId, deleted: false}, {$addToSet: {items: {id: newItemId, serialNo: serialNo}}}, function(err){
  1104. if(err){
  1105. cb(err);
  1106. }
  1107. else {
  1108. data.newItemId = newItemId;
  1109. cb(null, data);
  1110. }
  1111. });
  1112. }
  1113. });
  1114. }
  1115. });
  1116. }
  1117. }
  1118. }
  1119. };
  1120. if(field === Jobs){
  1121. if(updateDatas.length > 0){
  1122. for(let i=0; i<updateDatas.length; i++){
  1123. if(updateDatas[i].type === UpdateExist){
  1124. functions.push(parallelFucs.updateExJobs(updateDatas[i]));
  1125. }
  1126. if(updateDatas[i].type === UpdateNew){
  1127. functions.push(parallelFucs.updateNeJobs(updateDatas[i]));
  1128. }
  1129. }
  1130. }
  1131. if(createDatas.length > 0){
  1132. for(let i=0; i<createDatas.length; i++){
  1133. if(createDatas[i].type === CreateExist){
  1134. functions.push(parallelFucs.createExJobs(createDatas[i]));
  1135. }
  1136. if(createDatas[i].type === CreateNew){
  1137. functions.push(parallelFucs.createNeJobs(createDatas[i]));
  1138. }
  1139. }
  1140. }
  1141. }
  1142. else {
  1143. if(updateDatas.length > 0){
  1144. for(let i=0; i<updateDatas.length; i++){
  1145. if(updateDatas[i].type === UpdateExist){
  1146. functions.push(parallelFucs.updateExItems(updateDatas[i]));
  1147. }
  1148. if(updateDatas[i].type === UpdateNew){
  1149. functions.push(parallelFucs.updateNeItems(updateDatas[i]));
  1150. }
  1151. }
  1152. }
  1153. if(createDatas.length > 0){
  1154. for(let i=0; i<createDatas.length; i++){
  1155. if(createDatas[i].type === CreateExist){
  1156. functions.push(parallelFucs.createExItems(createDatas[i]));
  1157. }
  1158. if(createDatas[i].type === CreateNew){
  1159. functions.push(parallelFucs.createNeItems(createDatas[i]));
  1160. }
  1161. }
  1162. }
  1163. }
  1164. async.parallel(functions, function(err, datas){
  1165. if(err){
  1166. callback(1, 'Error', null);
  1167. }else {
  1168. callback(0, '', datas);
  1169. }
  1170. });
  1171. };
  1172. billsLibDao.prototype.deleteBills = function(delData, callback){
  1173. let deleteIds = delData.deleteIds;
  1174. let billsLibId = delData.billsLibId;
  1175. let updateNode = delData.updateNode;
  1176. if(deleteIds){
  1177. async.parallel([
  1178. function(cb){
  1179. async.each(deleteIds, function(delId, ecb){
  1180. Bills.update({billsLibId: billsLibId, ID: delId, deleted: false}, {$set: {deleted: true}}, function(err){
  1181. if(err){
  1182. ecb(err);
  1183. }
  1184. else {
  1185. ecb(null);
  1186. }
  1187. });
  1188. }, function(err){
  1189. if(err){
  1190. cb(err);
  1191. }
  1192. else {
  1193. cb(null);
  1194. }
  1195. });
  1196. },
  1197. function(cb){
  1198. if(updateNode){
  1199. Bills.update({billsLibId: billsLibId, ID: updateNode.ID, deleted: false}, {$set: {NextSiblingID: updateNode.NextSiblingID}}, function(err){
  1200. if(err){
  1201. cb(err);
  1202. }
  1203. else {
  1204. cb(null);
  1205. }
  1206. });
  1207. }else {
  1208. cb(null);
  1209. }
  1210. }
  1211. ], function(err){
  1212. if(err){
  1213. callback(1, 'Error');
  1214. }else {
  1215. callback(0, '');
  1216. }
  1217. });
  1218. }
  1219. }
  1220. //--------------JobContent------------------
  1221. billsLibDao.prototype.getJobContent = function(gJobData, callback){
  1222. let billsLibId = gJobData.billsLibId;
  1223. JobContent.find({billsLibId: billsLibId, deleted: false}, '-_id').sort({code: 1}).exec(function(err, result){
  1224. if(err){
  1225. callback(1, 'Error', null);
  1226. }
  1227. else {
  1228. callback(0, '', result);
  1229. }
  1230. });
  1231. }
  1232. billsLibDao.prototype.createJobContent = function(cJobData, callback){
  1233. let data = cJobData.data;
  1234. let billsLibId = cJobData.billsLibId;
  1235. let serialNo = cJobData.serialNo;
  1236. let newJobContent;
  1237. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  1238. if(err){
  1239. callback(1, 'Error', null)
  1240. }
  1241. else {
  1242. let newJobId = result.value.sequence_value;
  1243. newJobContent = {
  1244. id: newJobId,
  1245. billsLibId: billsLibId,
  1246. code: serialNo,
  1247. content: data,
  1248. deleted: false
  1249. }
  1250. JobContent.create(newJobContent, function(err){
  1251. if(err){
  1252. callback(1, "Error", null);
  1253. }
  1254. else{
  1255. callback(0, "", newJobId);
  1256. }
  1257. });
  1258. }
  1259. });
  1260. };
  1261. billsLibDao.prototype.updateJobContent = function(uJobData, callback){
  1262. let billsLibId = uJobData.billsLibId;
  1263. let field = uJobData.field;
  1264. let updateData = uJobData.data;
  1265. let updateid = uJobData.updateId;
  1266. if(field == "code"){
  1267. JobContent.update({billsLibId: billsLibId, id: updateid}, {$set: {code: updateData}}, function(err){
  1268. if(err){
  1269. callback(1, "Error");
  1270. }
  1271. else{
  1272. callback(0, "");
  1273. }
  1274. });
  1275. }
  1276. else if(field == "content"){
  1277. JobContent.update({billsLibId: billsLibId, id: updateid}, {$set: {content: updateData}}, function(err){
  1278. if(err){
  1279. callback(1, "Error");
  1280. }
  1281. else{
  1282. callback(0, "");
  1283. }
  1284. });
  1285. }
  1286. };
  1287. billsLibDao.prototype.deleteJobContent = function(data, callback){
  1288. let delIds = data.ids;
  1289. let billsLibId = data.billsLibId;
  1290. if(delIds){
  1291. async.each(delIds, function(id, cb){
  1292. JobContent.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err){
  1293. if(err){
  1294. cb(err);
  1295. }
  1296. else {
  1297. cb(null);
  1298. }
  1299. });
  1300. }, function(err){
  1301. if(err){
  1302. callback(1, 'Error');
  1303. }else {
  1304. callback(0, '');
  1305. }
  1306. });
  1307. }
  1308. }
  1309. billsLibDao.prototype.pasteJobs = function (data, callback) {
  1310. let pasteDatas = data.pasteDatas;
  1311. let updateDatas = pasteDatas.updateDatas,
  1312. createDatas = pasteDatas.createDatas;
  1313. let functions = [];
  1314. let parallelFucs = {
  1315. updateFuc: function(data){
  1316. let updateId = data.orgId,
  1317. field = data.field,
  1318. updateData = data.data, billsLibId = data.billsLibId;
  1319. if(field === 'code'){
  1320. return function (cb){
  1321. JobContent.update({billsLibId: billsLibId, id: updateId}, {$set: {code: updateData}}, function(err){
  1322. if(err){
  1323. cb(err);
  1324. }else {
  1325. cb(null, data);
  1326. }
  1327. });
  1328. };
  1329. }else {
  1330. return function (cb){
  1331. JobContent.update({billsLibId: billsLibId, id: updateId}, {$set: {content: updateData}}, function(err){
  1332. if(err){
  1333. cb(err);
  1334. }else {
  1335. cb(null, data);
  1336. }
  1337. });
  1338. }
  1339. }
  1340. },
  1341. createFuc: function(data){
  1342. let billsLibId = data.billsLibId,
  1343. code;
  1344. let jobObj;
  1345. if(data.type === 'CreateT'){
  1346. jobObj = {
  1347. billsLibId: billsLibId,
  1348. code: data.code,
  1349. content: data.content,
  1350. deleted: false
  1351. }
  1352. }
  1353. else{
  1354. if(data.field === 'code'){
  1355. jobObj = {
  1356. billsLibId: billsLibId,
  1357. code: data.data,
  1358. content: '',
  1359. deleted: false
  1360. }
  1361. }
  1362. else {
  1363. jobObj = {
  1364. billsLibId: billsLibId,
  1365. code: data.code,
  1366. content: data.data,
  1367. deleted: false
  1368. }
  1369. }
  1370. }
  1371. return function (cb){
  1372. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  1373. if(err){
  1374. cb(err);
  1375. }
  1376. else {
  1377. let newJobId = result.value.sequence_value;
  1378. jobObj.id = newJobId;
  1379. data.newJobId = newJobId
  1380. JobContent.create(jobObj, function(err){
  1381. if(err){
  1382. cb(err);
  1383. }else {
  1384. cb(null, data);
  1385. }
  1386. });
  1387. }
  1388. });
  1389. }
  1390. }
  1391. };
  1392. if(updateDatas.length > 0){
  1393. for(let i=0; i<updateDatas.length; i++){
  1394. functions.push(parallelFucs.updateFuc(updateDatas[i]));
  1395. }
  1396. }
  1397. if(createDatas.length > 0){
  1398. for(let i =0; i<createDatas.length; i++){
  1399. functions.push(parallelFucs.createFuc(createDatas[i]));
  1400. }
  1401. }
  1402. async.parallel(functions, function(err, datas){
  1403. if(err){
  1404. callback(1, 'Error', null);
  1405. }else {
  1406. callback(0, '', datas);
  1407. }
  1408. });
  1409. };
  1410. billsLibDao.prototype.edCreateJob = function(data, callback){
  1411. let billsLibId = data.billsLibId,
  1412. code = data.code,
  1413. billsId = data.billsId,
  1414. content = data.data,
  1415. serialNo = data.serialNo;
  1416. async.waterfall([
  1417. function(cb){
  1418. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  1419. if(err){
  1420. cb(err, null);
  1421. }
  1422. else {
  1423. let newJobId = result.value.sequence_value;
  1424. cb(null, newJobId);
  1425. }
  1426. })
  1427. },
  1428. function(newJobId, cb){
  1429. async.parallel([
  1430. function(pcb){
  1431. JobContent.create({id: newJobId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){
  1432. if(err){
  1433. pcb(err, null);
  1434. }
  1435. else {
  1436. pcb(null, newJobId);
  1437. }
  1438. });
  1439. },
  1440. function(pcb){
  1441. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false}, {$addToSet: {jobs: {id: newJobId, serialNo: serialNo}}}, function(err){
  1442. if(err){
  1443. pcb(err, null);
  1444. }
  1445. else {
  1446. pcb(null, newJobId);
  1447. }
  1448. });
  1449. }
  1450. ], function(err, result){
  1451. if(err){
  1452. cb(err, null);
  1453. }
  1454. else {
  1455. cb(null, result[0]);
  1456. }
  1457. });
  1458. }
  1459. ], function(err, reslut){
  1460. if(err){
  1461. callback(1, "Error", null);
  1462. }
  1463. else {
  1464. callback(0, '', reslut);
  1465. }
  1466. });
  1467. };
  1468. billsLibDao.prototype.edUpdateJob = function(data, callback){
  1469. let billsLibId = data.billsLibId,
  1470. billsId = data.billsId,
  1471. content = data.content,
  1472. code = data.code,
  1473. orgJobId = data.orgJobId;
  1474. async.waterfall([
  1475. function(cb){
  1476. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_jobs, 1, function(err, result){
  1477. if(err){
  1478. cb(err, null);
  1479. }
  1480. else {
  1481. let newJobId = result.value.sequence_value;
  1482. cb(null, newJobId);
  1483. }
  1484. })
  1485. },
  1486. function(newJobId, cb){
  1487. async.parallel([
  1488. function(pcb){
  1489. JobContent.create({id: newJobId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){
  1490. if(err){
  1491. pcb(err, null);
  1492. }
  1493. else {
  1494. pcb(null, newJobId);
  1495. }
  1496. });
  1497. },
  1498. function(pcb){
  1499. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'jobs.id': orgJobId}, {$set: {'jobs.$.id': newJobId}}, function(err){
  1500. if(err){
  1501. pcb(err, null);
  1502. }
  1503. else {
  1504. pcb(null, newJobId);
  1505. }
  1506. });
  1507. }
  1508. ], function(err, result){
  1509. if(err){
  1510. cb(err, null);
  1511. }
  1512. else {
  1513. cb(null, result[0]);
  1514. }
  1515. });
  1516. }
  1517. ], function(err, reslut){
  1518. if(err){
  1519. callback(1, "Error", null);
  1520. }
  1521. else {
  1522. callback(0, '', reslut);
  1523. }
  1524. });
  1525. };
  1526. //----------------------ItemCharacter---------------------
  1527. billsLibDao.prototype.getItemCharacter = function(gdata, callback){
  1528. let billsLibId = gdata.billsLibId;
  1529. ItemCharacter.find({billsLibId: billsLibId, deleted: false}, '-_id').sort({code: 1}).exec(function(err, result){
  1530. if(err){
  1531. callback(1, 'Error', null);
  1532. }
  1533. else {
  1534. callback(0, '', result);
  1535. }
  1536. });
  1537. }
  1538. billsLibDao.prototype.createItemCharacter = function(cItemData, callback){
  1539. let data = cItemData.data;
  1540. let billsLibId = cItemData.billsLibId;
  1541. let code = cItemData.code;
  1542. let newItemCharacter;
  1543. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function (err, result) {
  1544. if(err){
  1545. callback(0, 'Error', null);
  1546. }
  1547. else{
  1548. let newItemId = result.value.sequence_value;
  1549. newItemCharacter = {
  1550. id: newItemId,
  1551. billsLibId: billsLibId,
  1552. content: data,
  1553. code: code,
  1554. deleted: false
  1555. }
  1556. ItemCharacter.create(newItemCharacter, function(err){
  1557. if(err){
  1558. callback(1, "Error", null);
  1559. }
  1560. else{
  1561. callback(0, "", newItemId);
  1562. }
  1563. });
  1564. }
  1565. });
  1566. };
  1567. billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
  1568. let field = uItemData.field;
  1569. let updateData = uItemData.data;
  1570. let id = uItemData.updateId;
  1571. let billsLibId = uItemData.billsLibId;
  1572. if(field === "code"){
  1573. ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: {code: updateData}}, function(err){
  1574. if(err){
  1575. callback(1, "Error");
  1576. }
  1577. else{
  1578. callback(0, "");
  1579. }
  1580. });
  1581. }
  1582. else if(field === "content"){
  1583. ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: {content: updateData}}, function(err){
  1584. if(err){
  1585. callback(1, "Error");
  1586. }
  1587. else{
  1588. callback(0, "");
  1589. }
  1590. });
  1591. }
  1592. };
  1593. billsLibDao.prototype.updateValue = function(uData, callback){
  1594. let type = uData.type;
  1595. let updateId = uData.updateId;
  1596. let data = uData.data;
  1597. let deleteCodes = uData.deleteCodes;
  1598. let billsLibId = uData.billsLibId;
  1599. if(type === 'create'){
  1600. ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$addToSet: {itemValue: data}}, function(err){
  1601. if(err){
  1602. callback(1, 'Error');
  1603. }
  1604. else{
  1605. callback(0, '');
  1606. }
  1607. });
  1608. }
  1609. else if(type === 'update'){
  1610. if(data.field === 'code'){
  1611. ItemCharacter.update({billsLibId: billsLibId, id: updateId, 'itemValue.code': data.code}, {$set: {'itemValue.$.code': data.newData}}, function(err){
  1612. if(err){
  1613. callback(1, 'Error');
  1614. }
  1615. else{
  1616. callback(0, '');
  1617. }
  1618. });
  1619. }
  1620. else {
  1621. ItemCharacter.update({billsLibId: billsLibId, id: updateId, 'itemValue.code': data.code}, {$set: {'itemValue.$.value': data.newData}}, function(err,result){
  1622. if(err){
  1623. callback(1, 'Error');
  1624. }
  1625. else{
  1626. console.log(`suc`);
  1627. console.log(result);
  1628. callback(0, '');
  1629. }
  1630. });
  1631. }
  1632. }
  1633. //delete
  1634. else {
  1635. if(deleteCodes.length > 0){
  1636. async.each(deleteCodes, function(code, cb){
  1637. ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$pull: {itemValue: {code: code}}}, function(err){
  1638. if(err){
  1639. cb(err);
  1640. }else {
  1641. cb(null);
  1642. }
  1643. });
  1644. }, function(err){
  1645. if(err){
  1646. callback(1, 'Error');
  1647. }else {
  1648. callback(0, '');
  1649. }
  1650. });
  1651. }
  1652. }
  1653. };
  1654. billsLibDao.prototype.deleteItemCharacter = function(data, callback){
  1655. let delIds = data.ids;
  1656. let billsLibId = data.billsLibId;
  1657. if(delIds){
  1658. async.each(delIds, function(id, cb){
  1659. ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err){
  1660. if(err){
  1661. cb(err);
  1662. }else {
  1663. cb(null);
  1664. }
  1665. }, function(err){
  1666. if(err){
  1667. callback(1, 'Error');
  1668. }else {
  1669. callback(0, '');
  1670. }
  1671. });
  1672. });
  1673. }
  1674. };
  1675. billsLibDao.prototype.pasteItems = function (data, callback) {
  1676. let pasteDatas = data.pasteDatas;
  1677. let updateDatas = pasteDatas.updateDatas,
  1678. createDatas = pasteDatas.createDatas;
  1679. let functions = [];
  1680. let parallelFucs = {
  1681. updateFuc: function(data){
  1682. let updateId = data.orgId,
  1683. field = data.field,
  1684. updateData = data.data, billsLibId = data.billsLibId;
  1685. if(field === 'code'){
  1686. return function (cb){
  1687. ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$set: {code: updateData}}, function(err){
  1688. if(err){
  1689. cb(err);
  1690. }else {
  1691. cb(null, data);
  1692. }
  1693. });
  1694. };
  1695. }
  1696. else{
  1697. return function(cb){
  1698. ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$set: {content: updateData}}, function(err){
  1699. if(err){
  1700. cb(err);
  1701. }else {
  1702. cb(null, data);
  1703. }
  1704. });
  1705. }
  1706. }
  1707. },
  1708. createFuc: function(data){
  1709. let billsLibId = data.billsLibId,
  1710. code;
  1711. let itemObj;
  1712. if(data.type === 'CreateT'){
  1713. itemObj = {
  1714. billsLibId: billsLibId,
  1715. code: data.code,
  1716. content: data.content,
  1717. deleted: false
  1718. }
  1719. }
  1720. else{
  1721. if(data.field === 'code'){
  1722. itemObj = {
  1723. billsLibId: billsLibId,
  1724. code: data.data,
  1725. content: '',
  1726. deleted: false
  1727. }
  1728. }
  1729. else {
  1730. itemObj = {
  1731. billsLibId: billsLibId,
  1732. code: data.code,
  1733. content: data.data,
  1734. deleted: false
  1735. }
  1736. }
  1737. }
  1738. return function (cb){
  1739. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  1740. if(err){
  1741. cb(err);
  1742. }
  1743. else{
  1744. let newItemId = result.value.sequence_value;
  1745. itemObj.id = newItemId;
  1746. data.newItemId = newItemId;
  1747. ItemCharacter.create(itemObj, function(err){
  1748. if(err){
  1749. cb(err);
  1750. }else {
  1751. cb(null, data);
  1752. }
  1753. });
  1754. }
  1755. });
  1756. }
  1757. }
  1758. };
  1759. if(updateDatas.length > 0){
  1760. for(let i=0; i<updateDatas.length; i++){
  1761. functions.push(parallelFucs.updateFuc(updateDatas[i]));
  1762. }
  1763. }
  1764. if(createDatas.length > 0){
  1765. for(let i =0; i<createDatas.length; i++){
  1766. functions.push(parallelFucs.createFuc(createDatas[i]));
  1767. }
  1768. }
  1769. async.parallel(functions, function(err, datas){
  1770. if(err){
  1771. callback(1, 'Error', null);
  1772. }else {
  1773. callback(0, '', datas);
  1774. }
  1775. });
  1776. };
  1777. billsLibDao.prototype.pasteValues = function(data, callback) {
  1778. let pasteDatas = data.pasteDatas;
  1779. let updateDatas = pasteDatas.updateDatas, createDatas = pasteDatas.createDatas;
  1780. let functions = [];
  1781. let parallelFucs = {
  1782. updateFuc: function(data){
  1783. let billsLibId = data.billsLibId, itemId = data.itemId, orgCode = data.orgId;
  1784. if (data.type === 'UpdateT') {
  1785. let valueObj = {code: data.code, value: data.content};
  1786. return function (cb){
  1787. ItemCharacter.update({billsLibId: billsLibId, id: itemId}, {$pull: {itemValue: {code: orgCode}}}, function (err) {
  1788. if (err) {
  1789. cb(err);
  1790. }
  1791. else {
  1792. ItemCharacter.update({billsLibId: billsLibId, id: itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
  1793. if (err) {
  1794. cb(err);
  1795. }
  1796. else {
  1797. cb(null, data);
  1798. }
  1799. });
  1800. }
  1801. });
  1802. };
  1803. }
  1804. else if (data.type === 'Update' && data.field === 'code') {
  1805. return function (cb) {
  1806. ItemCharacter.update({billsLibId: billsLibId, id: itemId, 'itemValue.code': orgCode},
  1807. {$set: {'itemValue.$.code': data.data}}, function (err) {
  1808. if(err){
  1809. cb(err);
  1810. }
  1811. else {
  1812. cb(null, data);
  1813. }
  1814. });
  1815. }
  1816. }
  1817. else {
  1818. return function (cb){
  1819. ItemCharacter.update({billsLIbId: billsLibId, id: itemId, 'itemValue.code': orgCode}, {$set: {'itemValue.$.value': data.data}}, function(err){
  1820. if(err){
  1821. cb(err);
  1822. }
  1823. else {
  1824. cb(null, data);
  1825. }
  1826. });
  1827. };
  1828. }
  1829. },
  1830. createFuc: function(data){
  1831. let valueObj;
  1832. if(data.type === 'CreateT'){
  1833. valueObj = {code: data.code, value: data.content};
  1834. return function (cb){
  1835. ItemCharacter.update({billsLibId: data.billsLibId, id: data.itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
  1836. if (err) {
  1837. cb(err);
  1838. }
  1839. else {
  1840. cb(null, data);
  1841. }
  1842. });
  1843. };
  1844. }
  1845. else if(data.type === 'Create' && data.field === 'code'){
  1846. valueObj = {code: data.data, value: ''};
  1847. return function (cb){
  1848. ItemCharacter.update({billsLibId: data.billsLibId, id: data.itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
  1849. if (err) {
  1850. cb(err);
  1851. }
  1852. else {
  1853. cb(null, data);
  1854. }
  1855. });
  1856. };
  1857. }
  1858. else {
  1859. valueObj = {code: data.code, value: data.data};
  1860. return function(cb){
  1861. ItemCharacter.update({billsLibId: data.billsLibId, id: data.itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
  1862. if (err) {
  1863. cb(err);
  1864. }
  1865. else {
  1866. cb(null, data);
  1867. }
  1868. });
  1869. };
  1870. }
  1871. }
  1872. };
  1873. if (updateDatas.length > 0) {
  1874. for (let i = 0; i < updateDatas.length; i++) {
  1875. functions.push(parallelFucs.updateFuc(updateDatas[i]));
  1876. }
  1877. }
  1878. if(createDatas.length >0){
  1879. for(let i=0; i< createDatas.length; i++){
  1880. functions.push(parallelFucs.createFuc(createDatas[i]));
  1881. }
  1882. }
  1883. async.parallel(functions, function(err, datas){
  1884. if(err){
  1885. console.log(`errfinal`);
  1886. callback(1, 'Error', null);
  1887. }
  1888. else {
  1889. console.log('noerror');
  1890. callback(0, '', datas);
  1891. }
  1892. });
  1893. };
  1894. billsLibDao.prototype.edCreateItem = function(data, callback){
  1895. let billsLibId = data.billsLibId,
  1896. code = data.code,
  1897. billsId = data.billsId,
  1898. content = data.data,
  1899. serialNo = data.serialNo;
  1900. async.waterfall([
  1901. function(cb){
  1902. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  1903. if(err){
  1904. cb(err, null);
  1905. }
  1906. else {
  1907. let newItemId = result.value.sequence_value;
  1908. cb(null, newItemId);
  1909. }
  1910. })
  1911. },
  1912. function(newItemId, cb){
  1913. async.parallel([
  1914. function(pcb){
  1915. ItemCharacter.create({id: newItemId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){
  1916. if(err){
  1917. pcb(err, null);
  1918. }
  1919. else {
  1920. pcb(null, newItemId);
  1921. }
  1922. });
  1923. },
  1924. function(pcb){
  1925. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false}, {$addToSet: {items: {id: newItemId, serialNo: serialNo}}}, function(err){
  1926. if(err){
  1927. pcb(err, null);
  1928. }
  1929. else {
  1930. pcb(null, newItemId);
  1931. }
  1932. });
  1933. }
  1934. ], function(err, result){
  1935. if(err){
  1936. cb(err, null);
  1937. }
  1938. else {
  1939. cb(null, result[0]);
  1940. }
  1941. });
  1942. }
  1943. ], function(err, reslut){
  1944. if(err){
  1945. callback(1, "Error", null);
  1946. }
  1947. else {
  1948. callback(0, '', reslut);
  1949. }
  1950. });
  1951. };
  1952. billsLibDao.prototype.edUpdateItem = function(data, callback){
  1953. let billsLibId = data.billsLibId,
  1954. billsId = data.billsId,
  1955. content = data.content,
  1956. code = data.code,
  1957. orgItemId = data.orgItemId;
  1958. async.waterfall([
  1959. function(cb){
  1960. counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib_items, 1, function(err, result){
  1961. if(err){
  1962. cb(err, null);
  1963. }
  1964. else {
  1965. let newItemId = result.value.sequence_value;
  1966. cb(null, newItemId);
  1967. }
  1968. })
  1969. },
  1970. function(newItemId, cb){
  1971. async.parallel([
  1972. function(pcb){
  1973. ItemCharacter.create({id: newItemId, billsLibId: billsLibId, code: code, content: content, deleted: false}, function(err){
  1974. if(err){
  1975. pcb(err, null);
  1976. }
  1977. else {
  1978. pcb(null, newItemId);
  1979. }
  1980. });
  1981. },
  1982. function(pcb){
  1983. Bills.update({billsLibId: billsLibId, ID: billsId, deleted: false, 'items.id': orgItemId}, {$set: {'items.$.id': newItemId}}, function(err){
  1984. if(err){
  1985. pcb(err, null);
  1986. }
  1987. else {
  1988. pcb(null, newItemId);
  1989. }
  1990. });
  1991. }
  1992. ], function(err, result){
  1993. if(err){
  1994. cb(err, null);
  1995. }
  1996. else {
  1997. cb(null, result[0]);
  1998. }
  1999. });
  2000. }
  2001. ], function(err, reslut){
  2002. if(err){
  2003. callback(1, "Error", null);
  2004. }
  2005. else {
  2006. callback(0, '', reslut);
  2007. }
  2008. });
  2009. };
  2010. //
  2011. module.exports = new billsLibDao();