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;
}
}
}