counter.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /**
  2. * Created by Tony on 2017/3/21.
  3. */
  4. var mongoose = require('mongoose');
  5. var counterModel = mongoose.model("counters_operation");
  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. stdGljLib: 'stdGljLib',
  21. billsLib: 'billsLib',
  22. billsLib_jobs: 'billsLib_jobs',
  23. billsLib_designs: 'billsLib_designs',
  24. billsLib_items: 'billsLib_items',
  25. coeList: 'coeList',
  26. installation: 'installation',
  27. stdCalcProgram:'std_calc_programs'
  28. }
  29. /*const PROJECT_COUNTER = 'projects', USER_COUNTER = 'users', BILL_COUNTER = 'bills', RATION_COUNTER = 'rations',
  30. REPORT_COUNTER = 'rptTemplates', FEE_COUNTER = 'fees'*/
  31. var counterDAO = function(){};
  32. /*
  33. * callback = function (err, result) {
  34. * result.value.sequence_value Ϊ�޸ĺ��id
  35. * }
  36. */
  37. counterDAO.prototype.getIDAfterCount = async function(moduleName, stepCount, callback = null) {
  38. var sc = stepCount;
  39. if (isNaN(stepCount) || (stepCount < 0)) {
  40. sc = 1;
  41. } else if (!(/^-?\d+$/.test(stepCount))) {
  42. sc = Math.round(stepCount + 0.5);
  43. }
  44. if (callback === null) {
  45. let result = await counterModel.findOneAndUpdate({_id: moduleName}, { $inc: { sequence_value: sc } }, {'new':true});
  46. return await checkIDResult(result,moduleName,null)
  47. } else {
  48. counterModel.findOneAndUpdate({_id: moduleName}, { $inc: { sequence_value: sc } }, {'new':true}, function (err,result) {
  49. checkIDResult(result,moduleName,callback,err)
  50. });
  51. }
  52. };
  53. async function checkIDResult(result,moduleName,callback,err){
  54. if(result){
  55. return callback?callback(err,result):result;
  56. }else {
  57. return callback?counterModel.create({_id: moduleName,sequence_value:1},callback): await counterModel.create({_id: moduleName,sequence_value:1});
  58. }
  59. }
  60. counterDAO.prototype.getCurrentID = function(moduleName, callback) {
  61. if (callback) {
  62. counterModel.findOne({_id: moduleName}).exec()
  63. .then(function(result, err) {
  64. if (callback) {
  65. callback(result, err);
  66. }
  67. }
  68. );
  69. return null;
  70. } else {
  71. var rst = counterModel.findOne({_id: moduleName}).exec() ;
  72. return rst;
  73. }
  74. }
  75. module.exports = {
  76. counterDAO: new counterDAO(),
  77. moduleName: COUNTER_MODULE_NAME
  78. };