SerialNumberAppService.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using Business.Core.Utilities;
  2. using Business.EntityFrameworkCore;
  3. using Business.ResourceExamineManagement.Dto;
  4. using Microsoft.EntityFrameworkCore;
  5. using Microsoft.Extensions.Configuration;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Globalization;
  9. using System.Linq;
  10. using Volo.Abp.Application.Services;
  11. namespace Business.ResourceExamineManagement
  12. {
  13. public class SerialNumberAppService : ApplicationService
  14. {
  15. private readonly BusinessDbContext _businessDbContext;
  16. public SerialNumberAppService(BusinessDbContext businessDbContext) {
  17. _businessDbContext = businessDbContext;
  18. }
  19. /// <summary>
  20. /// 流水号生成
  21. /// </summary>
  22. /// <param name="id"></param>
  23. /// <returns></returns>
  24. /// <exception cref="NotImplementedException"></exception>
  25. public string GetSerialNumber(long id)
  26. {
  27. string sn = string.Empty;
  28. if (id > long.MinValue)
  29. {
  30. IConfiguration configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("appsettings.json").Build();
  31. var tfSite = configuration["appSettings:ThinkFlow"];
  32. string url = tfSite + "/ThinkFlowApi/SerialNumber/GetMaxSerialNumber?id=" + id.ToString();
  33. /*JObject jobect = new() {
  34. { "id", id }
  35. };
  36. string postJson = jobect.ToString();*/
  37. string json = HttpHelper.HttpPost(url, "");
  38. sn = json;
  39. }
  40. return sn;
  41. }
  42. /// <summary>
  43. /// 获取单号
  44. /// </summary>
  45. /// <param name="domain"></param>
  46. /// <param name="NbrType">类型</param>
  47. /// <param name="Increment">步长</param>
  48. /// <param name="UserNo">用户账号</param>
  49. /// <param name="IsDopCall"></param>
  50. /// <returns></returns>
  51. public List<GetNbr> GetBillNo(string domain, string NbrType, int Increment, string UserNo, int IsDopCall)
  52. {
  53. string sql = string.Format("CALL pr_SFM_GetOrdNbr('{0}', '{1}', {2}, '{3}', {4}, @NbrResult);", domain, NbrType, Increment, UserNo, IsDopCall);
  54. var getnbr = _businessDbContext.GetNbr.FromSqlRaw(sql).ToList();
  55. return getnbr;
  56. }
  57. /// <summary>
  58. /// 获取序列号(与存储过程 pr_SFM_GetSequenceID 等价的本地实现,不再调用数据库)。
  59. /// 时间格式:yyMMddHHmmss + 毫秒(3位) + 随机数(3位),再转为数值;IsDopCall=1 时返回首条为 base+1(与过程插入顺序一致);IsDopCall≠1 时与原 EF 无行一致返回空字符串。
  60. /// </summary>
  61. /// <param name="domain">域(过程中若 NULL 会置为 1000;原过程未参与数值计算,此处仅保留默认行为)。</param>
  62. /// <param name="Increment">步长;≤0 时按 1 处理。</param>
  63. /// <param name="IsDopCall">为 1 时返回与过程首行一致(base+1)。</param>
  64. /// <returns></returns>
  65. public string GetSeqIdList(string domain, int Increment, int IsDopCall)
  66. {
  67. if (domain == null)
  68. {
  69. domain = "1000";
  70. }
  71. if (Increment <= 0)
  72. {
  73. Increment = 1;
  74. }
  75. var now = DateTime.Now;
  76. var timePart = now.ToString("yyMMddHHmmss", CultureInfo.InvariantCulture);
  77. var msPart = now.Millisecond.ToString("D3", CultureInfo.InvariantCulture);
  78. var randPart = Random.Shared.Next(0, 1000).ToString("D3", CultureInfo.InvariantCulture);
  79. var v_Time = string.Concat(timePart, msPart, randPart);
  80. if (!ulong.TryParse(v_Time, NumberStyles.Integer, CultureInfo.InvariantCulture, out var p_SequenceId))
  81. {
  82. return string.Empty;
  83. }
  84. if (IsDopCall == 1)
  85. {
  86. return (p_SequenceId + 1).ToString(CultureInfo.InvariantCulture);
  87. }
  88. // 与原过程在非 Dop 调用时不返回结果集、FromSqlRaw 得到空列表的行为一致
  89. return string.Empty;
  90. }
  91. }
  92. }