SerialNumberAppService.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using Bussiness.Model.SystemData;
  2. using System;
  3. using System.Text.RegularExpressions;
  4. using Volo.Abp.Application.Services;
  5. using Volo.Abp.Domain.Repositories;
  6. namespace Business.ResourceExamineManagement
  7. {
  8. public class SerialNumberAppService : ApplicationService, ISerialNumberAppService
  9. {
  10. private readonly IRepository<sys_serial_number, long> _sys_serial_number;
  11. public SerialNumberAppService(IRepository<sys_serial_number, long> sys_serial_number) {
  12. _sys_serial_number = sys_serial_number;
  13. }
  14. /// <summary>
  15. /// 流水号生成
  16. /// </summary>
  17. /// <param name="id"></param>
  18. /// <returns></returns>
  19. /// <exception cref="NotImplementedException"></exception>
  20. public string GetSerialNumber(long id)
  21. {
  22. var model = Get(id);
  23. if (model == null)
  24. {
  25. return string.Empty;
  26. }
  27. int max = model.current_number + 1;
  28. var date = DateTime.Now;
  29. var lastDate = model.last_time;
  30. switch (model.number_type)
  31. {
  32. case 1: //年流水
  33. if (date.Year > lastDate.Year)
  34. {
  35. max = 1;
  36. }
  37. break;
  38. case 2: //月流水
  39. if (date.Year > lastDate.Year || date.Month > lastDate.Month)
  40. {
  41. max = 1;
  42. }
  43. break;
  44. case 3: //日流水
  45. if (date.Year > lastDate.Year || date.Month > lastDate.Month || date.Day > lastDate.Day)
  46. {
  47. max = 1;
  48. }
  49. break;
  50. }
  51. model.last_time = date;
  52. model.current_number = max;
  53. string number = max.ToString().PadLeft(model.number_size, '0');
  54. string sn = model.format;
  55. sn = Replace(sn);
  56. if (sn.Contains("{number}"))
  57. {
  58. sn = Regex.Replace(sn, "{number}", number);
  59. }
  60. Update(model);
  61. return sn;
  62. }
  63. /// <summary>
  64. /// 获取流水号规则配置信息
  65. /// </summary>
  66. /// <param name="id"></param>
  67. /// <returns></returns>
  68. private sys_serial_number Get(long id)
  69. {
  70. return _sys_serial_number.FindAsync(id).Result;
  71. }
  72. /// <summary>
  73. /// 替换通配符
  74. /// </summary>
  75. private string Replace(string str)
  76. {
  77. if (str.Contains("{DateTime<"))
  78. {
  79. string key = str.Substring(str.IndexOf("{DateTime<") + 10);
  80. string key1 = key.Substring(0, key.IndexOf(">}"));
  81. if (!string.IsNullOrWhiteSpace(key1))
  82. {
  83. string newChar = DateTime.Now.ToString(key1);
  84. string old = "{DateTime<" + key1 + ">}";
  85. return str.Replace(old, newChar);
  86. }
  87. }
  88. return str;
  89. }
  90. public void Update(sys_serial_number model)
  91. {
  92. _sys_serial_number.UpdateAsync(model);
  93. }
  94. }
  95. }