SerialNumberAppService.cs 3.4 KB

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