using Business.Core.Utilities; using Business.EntityFrameworkCore; using Business.ResourceExamineManagement.Dto; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using Volo.Abp.Application.Services; namespace Business.ResourceExamineManagement { public class SerialNumberAppService : ApplicationService { private readonly BusinessDbContext _businessDbContext; public SerialNumberAppService(BusinessDbContext businessDbContext) { _businessDbContext = businessDbContext; } /// /// 流水号生成 /// /// /// /// public string GetSerialNumber(long id) { string sn = string.Empty; if (id > long.MinValue) { IConfiguration configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("appsettings.json").Build(); var tfSite = configuration["appSettings:ThinkFlow"]; string url = tfSite + "/ThinkFlowApi/SerialNumber/GetMaxSerialNumber?id=" + id.ToString(); /*JObject jobect = new() { { "id", id } }; string postJson = jobect.ToString();*/ string json = HttpHelper.HttpPost(url, ""); sn = json; } return sn; } /// /// 获取单号 /// /// /// 类型 /// 步长 /// 用户账号 /// /// public List GetBillNo(string domain, string NbrType, int Increment, string UserNo, int IsDopCall) { string sql = string.Format("CALL pr_SFM_GetOrdNbr('{0}', '{1}', {2}, '{3}', {4}, @NbrResult);", domain, NbrType, Increment, UserNo, IsDopCall); var getnbr = _businessDbContext.GetNbr.FromSqlRaw(sql).ToList(); return getnbr; } /// /// 获取序列号(与存储过程 pr_SFM_GetSequenceID 等价的本地实现,不再调用数据库)。 /// 时间格式:yyMMddHHmmss + 毫秒(3位) + 随机数(3位),再转为数值;IsDopCall=1 时返回首条为 base+1(与过程插入顺序一致);IsDopCall≠1 时与原 EF 无行一致返回空字符串。 /// /// 域(过程中若 NULL 会置为 1000;原过程未参与数值计算,此处仅保留默认行为)。 /// 步长;≤0 时按 1 处理。 /// 为 1 时返回与过程首行一致(base+1)。 /// public string GetSeqIdList(string domain, int Increment, int IsDopCall) { if (domain == null) { domain = "1000"; } if (Increment <= 0) { Increment = 1; } var now = DateTime.Now; var timePart = now.ToString("yyMMddHHmmss", CultureInfo.InvariantCulture); var msPart = now.Millisecond.ToString("D3", CultureInfo.InvariantCulture); var randPart = Random.Shared.Next(0, 1000).ToString("D3", CultureInfo.InvariantCulture); var v_Time = string.Concat(timePart, msPart, randPart); if (!ulong.TryParse(v_Time, NumberStyles.Integer, CultureInfo.InvariantCulture, out var p_SequenceId)) { return string.Empty; } if (IsDopCall == 1) { return (p_SequenceId + 1).ToString(CultureInfo.InvariantCulture); } // 与原过程在非 Dop 调用时不返回结果集、FromSqlRaw 得到空列表的行为一致 return string.Empty; } } }