counter.js 2.4 KB

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