Setting.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. const mongoose = require('mongoose');
  2. const { Schema } = mongoose;
  3. const systemSettingSchema = new Schema({
  4. _id: {
  5. type: String,
  6. default: 'system' // 固定 ID
  7. },
  8. innerDefaultAmount: {
  9. type: Number,
  10. required: true,
  11. default: 10000
  12. },
  13. // minProfitAmount: {
  14. // type: Number,
  15. // required: true,
  16. // default: 0
  17. // },
  18. minShowAmount: {
  19. type: Number,
  20. required: true,
  21. default: 0
  22. },
  23. innerRebateRatio: {
  24. type: Number,
  25. required: true,
  26. default: 0
  27. },
  28. innerOuMinValue: {
  29. type: Number,
  30. required: true,
  31. default: 0,
  32. },
  33. obRebateRatio: {
  34. type: Number,
  35. required: true,
  36. default: 0
  37. },
  38. obRebateType: {
  39. type: Number,
  40. required: true,
  41. default: 0
  42. },
  43. obMaxDiff: {
  44. type: Number,
  45. required: true,
  46. default: 0
  47. },
  48. imRebateRatio: {
  49. type: Number,
  50. required: true,
  51. default: 0
  52. },
  53. imRebateType: {
  54. type: Number,
  55. required: true,
  56. default: 0
  57. },
  58. imMaxDiff: {
  59. type: Number,
  60. required: true,
  61. default: 0
  62. },
  63. hgRebateRatio: {
  64. type: Number,
  65. required: true,
  66. default: 0
  67. },
  68. hgRebateType: {
  69. type: Number,
  70. required: true,
  71. default: 0
  72. },
  73. hgRebateLower: {
  74. type: Number,
  75. required: true,
  76. default: 0
  77. },
  78. hgMaxDiff: {
  79. type: Number,
  80. required: true,
  81. default: 0
  82. },
  83. pcRebateRatio: {
  84. type: Number,
  85. required: true,
  86. default: 0
  87. },
  88. pcRebateType: {
  89. type: Number,
  90. required: true,
  91. default: 0
  92. },
  93. innerRouSubsidyValue: {
  94. type: Number,
  95. required: true,
  96. default: 0
  97. },
  98. // innerRouMaxAdjust: {
  99. // type: Number,
  100. // required: true,
  101. // default: 100
  102. // },
  103. innerReMaxAdjust: {
  104. type: Number,
  105. required: true,
  106. default: 100
  107. },
  108. innerOuMaxAdjust: {
  109. type: Number,
  110. required: true,
  111. default: 100
  112. },
  113. innerWmSubsidyRatio: {
  114. type: Number,
  115. required: true,
  116. default: 0
  117. },
  118. innerOtSubsidyRatio: {
  119. type: Number,
  120. required: true,
  121. default: 0
  122. },
  123. halfTimeActiveTime: {
  124. type: Number,
  125. required: true,
  126. default: 0
  127. },
  128. expireTimeEvents: {
  129. type: Number,
  130. required: true,
  131. default: 45000
  132. },
  133. expireTimeSpecial: {
  134. type: Number,
  135. required: true,
  136. default: 60000
  137. },
  138. syncSettingEnabled: {
  139. type: Boolean,
  140. required: true,
  141. default: false
  142. },
  143. runWorkerEnabled: {
  144. type: Boolean,
  145. required: true,
  146. default: false
  147. },
  148. }, {
  149. toJSON: {
  150. transform(doc, ret) {
  151. delete ret._id;
  152. delete ret.__v;
  153. }
  154. },
  155. toObject: {
  156. transform(doc, ret) {
  157. delete ret._id;
  158. delete ret.__v;
  159. }
  160. }
  161. });
  162. const Setting = mongoose.model('SystemSetting', systemSettingSchema);
  163. const CALLBACKS = {
  164. update: null,
  165. };
  166. const onUpdate = (callback) => {
  167. CALLBACKS.update = callback;
  168. }
  169. const get = async () => {
  170. return await Setting.findById('system');
  171. }
  172. const update = async (fields) => {
  173. CALLBACKS.update?.(fields);
  174. return await Setting.findByIdAndUpdate(
  175. 'system',
  176. { $set: fields },
  177. { upsert: true, new: true }
  178. );
  179. }
  180. const init = async (fields = {}) => {
  181. const systemSetting = await Setting.findById('system');
  182. if (systemSetting) {
  183. return;
  184. }
  185. const setting = new Setting({
  186. _id: 'system',
  187. ...fields,
  188. });
  189. return setting.save();
  190. }
  191. module.exports = { get, update, init, onUpdate };