counter.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /**
  2. * Created by Tony on 2017/3/21.
  3. */
  4. var mongoose = require('mongoose');
  5. var counterModel = mongoose.model("counters");
  6. // All counter Must predefine in DB
  7. const COUNTER_MODULE_NAME = {
  8. project: 'projects',
  9. user: 'users',
  10. bills: 'bills',
  11. rations: 'rations',
  12. GLJ: 'glj',
  13. rationMap: 'rationMaps',
  14. rationTree: 'rationChapterTrees',
  15. report: 'rptTemplates',
  16. fee: 'fees',
  17. unitPriceFile: 'unitPriceFile',
  18. unitPriceGLJ: 'unitPriceGLJ',
  19. template_bills: 'temp_bills',
  20. billsLib: 'billsLib',
  21. coeList: 'coeList',
  22. complementaryCoeList: 'complementary_coe_list',
  23. glj_list: 'glj_list',
  24. unit_price_file: 'unit_price_file',
  25. }
  26. /*const PROJECT_COUNTER = 'projects', USER_COUNTER = 'users', BILL_COUNTER = 'bills', RATION_COUNTER = 'rations',
  27. REPORT_COUNTER = 'rptTemplates', FEE_COUNTER = 'fees'*/
  28. var counterDAO = function(){};
  29. /*
  30. * callback = function (err, result) {
  31. * result.value.sequence_value Ϊ�޸ĺ��id
  32. * }
  33. */
  34. counterDAO.prototype.getIDAfterCount =async function(moduleName, stepCount, callback) {
  35. var sc = stepCount;
  36. if (isNaN(stepCount) || (stepCount < 0)) {
  37. sc = 1;
  38. } else if (!(/^-?\d+$/.test(stepCount))) {
  39. sc = Math.round(stepCount + 0.5);
  40. }
  41. if (callback === null) {
  42. let result = await counterModel.findOneAndUpdate({_id: moduleName}, { $inc: { sequence_value: sc } }, {'new':true});
  43. return await checkIDResult(result,moduleName,null)
  44. } else {
  45. counterModel.findOneAndUpdate({_id: moduleName}, { $inc: { sequence_value: sc } }, {'new':true}, function (err,result) {
  46. checkIDResult(result,moduleName,callback,err)
  47. });
  48. }
  49. }
  50. counterDAO.prototype.getIDAfterCountSync = async function (moduleName, stepCount) {
  51. let sc = stepCount;
  52. if (isNaN(stepCount) || (stepCount < 0)) {
  53. sc = 1;
  54. } else if (!(/^-?\d+$/.test(stepCount))) {
  55. sc = Math.round(stepCount + 0.5);
  56. }
  57. let result = await counterModel.findOneAndUpdate({_id: moduleName}, { $inc: { sequence_value: sc } }, {'new':true});
  58. return await checkIDResult(result,moduleName,null)
  59. };
  60. async function checkIDResult(result,moduleName,callback,err){
  61. if(result){
  62. return callback?callback(err,result):result;
  63. }else {
  64. return callback?counterModel.create({_id: moduleName,sequence_value:1},callback): await counterModel.create({_id: moduleName,sequence_value:1});
  65. }
  66. }
  67. counterDAO.prototype.getCurrentID = function(moduleName, callback) {
  68. if (callback) {
  69. counterModel.findOne({_id: moduleName}).exec()
  70. .then(function(result, err) {
  71. if (callback) {
  72. callback(result, err);
  73. }
  74. }
  75. );
  76. return null;
  77. } else {
  78. var rst = counterModel.findOne({_id: moduleName}).exec() ;
  79. return rst;
  80. }
  81. }
  82. module.exports = {
  83. counterDAO: new counterDAO(),
  84. moduleName: COUNTER_MODULE_NAME
  85. };