获取两种币别之间的汇率

usertest
嵇文龙 5 months ago
parent 16a6c6bc91
commit 70983287ff

@ -121,6 +121,11 @@ namespace DS.WMS.Core.Application.Dtos
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 申请开票日期
/// </summary>
public DateTime ApplyDate => CreateTime.Date;
/// <summary>
/// 原币金额
/// </summary>
@ -128,5 +133,10 @@ namespace DS.WMS.Core.Application.Dtos
public List<InvoiceApplicationDetailDto> Details { get; set; }
/// <summary>
/// 是否已审核(仅用于查询)
/// </summary>
public bool? IsAudited { get; set; }
}
}

@ -1,7 +1,6 @@
using DS.Module.Core;
using DS.WMS.Core.Application.Dtos;
using DS.WMS.Core.Application.Entity;
using DS.WMS.Core.Fee.Dtos;
namespace DS.WMS.Core.Application.Interface
{

@ -6,7 +6,7 @@ using DS.WMS.Core.Fee.Dtos;
namespace DS.WMS.Core.Application.Interface
{
/// <summary>
/// 付费申请
/// 发票申请
/// </summary>
public interface IInvoiceApplicationService : IApplicationService<InvoiceApplication>
{

@ -0,0 +1,143 @@
using DS.Module.Core;
using DS.Module.Core.Enums;
using DS.Module.Core.Extensions;
using DS.WMS.Core.Application.Dtos;
using DS.WMS.Core.Application.Entity;
using DS.WMS.Core.Flow.Dtos;
using DS.WMS.Core.Info.Entity;
using DS.WMS.Core.Op.Entity;
using DS.WMS.Core.Sys.Entity;
using SqlSugar;
namespace DS.WMS.Core.Application.Method
{
/// <summary>
/// 费用申请单审核服务
/// </summary>
public class InvoiceApplicationAuditService : ApplicationAuditService<InvoiceApplication>
{
/// <summary>
/// 初始化
/// </summary>
/// <param name="serviceProvider"></param>
public InvoiceApplicationAuditService(IServiceProvider serviceProvider) : base(serviceProvider)
{
}
/// <summary>
/// 获取待审核列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<DataResult<List<InvoiceApplicationDto>>> GetListAsync(PageRequest request)
{
var query = CreateListQuery();
if (!request.QueryCondition.IsNullOrEmpty())
{
var whereList = Db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition);
int? index = null;
foreach (var item in whereList)
{
ConditionalModel? model = item as ConditionalModel;
if (model == null)
continue;
//设置了状态筛选
if (string.Equals(model.FieldName, nameof(InvoiceApplicationDto.IsAudited)) && bool.TryParse(model.FieldValue, out bool isAudited))
{
if (isAudited)
{
query = query.Where(x => x.Status == InvoiceApplicationStatus.AuditPassed || x.Status == InvoiceApplicationStatus.AuditRejected);
}
else
{
query = query.Where(x => x.Status == InvoiceApplicationStatus.AuditSubmittd);
}
index = whereList.IndexOf(item);
break;
}
}
if (index.HasValue)
whereList.RemoveAt(index.Value);
query = query.Where(whereList);
}
var result = await query.GroupBy(x => x.Id).ToQueryPageAsync(request.PageCondition);
if (result.Data.Count > 0)
{
var orgIds = result.Data.Select(x => x.SaleDeptId).Distinct().ToList();
var orgs = await Db.Queryable<SysOrg>().Where(x => orgIds.Contains(x.Id)).Select(x => new { x.Id, x.OrgName }).ToListAsync();
foreach (var item in result.Data)
{
item.SaleDeptName = orgs.Find(x => x.Id == item.SaleDeptId)?.OrgName;
}
}
return result;
}
internal ISugarQueryable<InvoiceApplicationDto> CreateListQuery()
{
var query1 = TenantDb.Queryable<InvoiceApplication>().Where(x => x.Status == InvoiceApplicationStatus.AuditSubmittd)
.InnerJoin<ApplicationDetail>((a, d) => a.Id == d.ApplicationId)
.LeftJoin<SeaExport>((a, d, s) => d.BusinessId == s.Id)
.LeftJoin<InfoClientBank>((a, d, s, b) => a.CustomerBankId == b.Id)
.Select((a, d, s, b) => new InvoiceApplicationDto
{
Id = a.Id,
ApplicationNO = a.ApplicationNO,
Status = a.Status,
CustomerId = a.CustomerId,
CustomerName = a.CustomerName, //委托单位
InvoiceHeader = a.InvoiceHeader,
Currency = a.Currency,
ApplyAmount = a.ApplyAmount,
InvoiceAmount = a.InvoiceAmount,
InvoiceCurrency = a.InvoiceCurrency,
OriginalAmountList = a.Details.Select(y => y.OriginalCurrency + " " + y.OriginalAmount).ToList(),
CreateTime = a.CreateTime,//申请开票日期+申请时间
CreateBy = a.CreateBy, //申请人
Category = a.Category, //申请类型
Rate = a.Rate, //发票税率
InvoiceNO = a.InvoiceNO, //发票号
Note = a.Note,
InvoiceRemark = a.InvoiceRemark, //开票要求
SaleDeptId = a.SaleDeptId
});
return TenantDb.UnionAll(new List<ISugarQueryable<InvoiceApplicationDto>> { query1 });
}
protected override DataResult PreAudit(List<InvoiceApplication> applications)
{
if (applications.Exists(x => x.Status != InvoiceApplicationStatus.AuditSubmittd))
return DataResult.Failed("提交数据中包含不在待审批状态的申请单");
return DataResult.Success;
}
protected override async Task OnUpdateStatusAsync(FlowCallback callback, InvoiceApplication application)
{
var auditType = callback.AuditType.ToEnum<AuditType>();
if (auditType != AuditType.PaidApplication)
return;
if (callback.FlowStatus == FlowStatusEnum.Approve)
{
application.Status = InvoiceApplicationStatus.AuditPassed;
application.Reason = string.Empty;
}
else if (callback.FlowStatus == FlowStatusEnum.Reject)
application.Status = InvoiceApplicationStatus.AuditRejected;
await base.OnUpdateStatusAsync(callback, application);
}
}
}

@ -269,7 +269,7 @@ namespace DS.WMS.Core.Application.Method
}
/// <summary>
/// 获取申请详情
/// 获取发票申请详情
/// </summary>
/// <param name="id">申请单ID</param>
/// <returns></returns>

@ -0,0 +1,35 @@
using DS.Module.Core;
namespace DS.WMS.Core.Fee.Dtos
{
/// <summary>
/// 汇率转换信息
/// </summary>
public class ExchangeRate
{
/// <summary>
/// 原币别
/// </summary>
public string CurrencyFrom { get; set; }
/// <summary>
/// 目标币别
/// </summary>
public string CurrencyTo { get; set; }
/// <summary>
/// 费用类型(用于指定应收/应付汇率)
/// </summary>
public FeeType? FeeType { get; set; }
/// <summary>
/// 转换汇率
/// </summary>
public decimal Rate { get; set; }
/// <summary>
/// 反向汇率
/// </summary>
public decimal ReverseRate { get; set; }
}
}

@ -27,4 +27,11 @@ public interface IFeeCurrencyExchangeService
/// <param name="id"></param>
/// <returns></returns>
DataResult<FeeCurrencyExchangeRes> GetFeeCurrencyExchangeInfo(string id);
/// <summary>
/// 获取两种币别之间的汇率
/// </summary>
/// <param name="exchange">币别信息</param>
/// <returns></returns>
DataResult<ExchangeRate> GetExchangeRate(ExchangeRate exchange);
}

@ -381,7 +381,7 @@ namespace DS.WMS.Core.Fee.Method
SourceId = s.SourceId,
AccountDate = s.AccountDate,
OperatorId = s.OperatorId
});
}).MergeTable();
var queryList = TenantDb.UnionAll(new List<ISugarQueryable<FeeAuditItemQuery>> { query1 });

@ -1,33 +1,24 @@
using DS.Module.Core;
using DS.Module.SqlSugar;
using DS.Module.UserModule;
using DS.Module.Core.Extensions;
using DS.WMS.Core.Fee.Dtos;
using DS.WMS.Core.Fee.Entity;
using DS.WMS.Core.Fee.Interface;
using DS.WMS.Core.Sys.Entity;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using Mapster;
using DS.Module.Core.Extensions;
namespace DS.WMS.Core.Fee.Method
{
public class FeeCurrencyExchangeService : IFeeCurrencyExchangeService
/// <summary>
/// 汇率服务
/// </summary>
public class FeeCurrencyExchangeService : FeeServiceBase, IFeeCurrencyExchangeService
{
private readonly IServiceProvider _serviceProvider;
private readonly ISqlSugarClient db;
private readonly IUser user;
private readonly ISaasDbService saasService;
/// <summary>
///
/// </summary>
/// <param name="serviceProvider"></param>
public FeeCurrencyExchangeService(IServiceProvider serviceProvider)
public FeeCurrencyExchangeService(IServiceProvider serviceProvider) : base(serviceProvider)
{
_serviceProvider = serviceProvider;
db = _serviceProvider.GetRequiredService<ISqlSugarClient>();
user = _serviceProvider.GetRequiredService<IUser>();
saasService = _serviceProvider.GetRequiredService<ISaasDbService>();
}
/// <summary>
@ -37,11 +28,9 @@ namespace DS.WMS.Core.Fee.Method
/// <returns></returns>
public DataResult<List<FeeCurrencyExchangeRes>> GetListByPage(PageRequest request)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
//序列化查询条件
var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition);
var data = tenantDb.Queryable<FeeCurrencyExchange>()
var whereList = Db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition);
var data = TenantDb.Queryable<FeeCurrencyExchange>()
.Where(whereList)
.Select<FeeCurrencyExchangeRes>().ToQueryPage(request.PageCondition);
return data;
@ -54,10 +43,9 @@ namespace DS.WMS.Core.Fee.Method
/// <returns></returns>
public DataResult EditFeeCurrencyExchange(FeeCurrencyExchangeReq req)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
if (req.Id == 0)
{
if (tenantDb.Queryable<FeeCurrencyExchange>()
if (TenantDb.Queryable<FeeCurrencyExchange>()
.Where(x => x.CurrencyCode == req.CurrencyCode && x.LocalCurrency == req.LocalCurrency).Any())
{
return DataResult.Failed("汇率设置已存在!", MultiLanguageConst.FeeCurrencyExchangeExist);
@ -65,17 +53,17 @@ namespace DS.WMS.Core.Fee.Method
var data = req.Adapt<FeeCurrencyExchange>();
var entity = tenantDb.Insertable(data).ExecuteReturnEntity();
var entity = TenantDb.Insertable(data).ExecuteReturnEntity();
return DataResult.Successed("添加成功!", entity.Id, MultiLanguageConst.DataCreateSuccess);
}
else
{
var info = tenantDb.Queryable<FeeCurrencyExchange>().Where(x => x.Id == req.Id).First();
var info = TenantDb.Queryable<FeeCurrencyExchange>().Where(x => x.Id == req.Id).First();
info = req.Adapt(info);
tenantDb.Updateable(info).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
TenantDb.Updateable(info).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
return DataResult.Successed("更新成功!", MultiLanguageConst.DataUpdateSuccess);
}
}
@ -87,12 +75,87 @@ namespace DS.WMS.Core.Fee.Method
/// <returns></returns>
public DataResult<FeeCurrencyExchangeRes> GetFeeCurrencyExchangeInfo(string id)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
var data = tenantDb.Queryable<FeeCurrencyExchange>()
var data = TenantDb.Queryable<FeeCurrencyExchange>()
.Where(x => x.Id == long.Parse(id))
.Select<FeeCurrencyExchangeRes>()
.First();
return DataResult<FeeCurrencyExchangeRes>.Success(data, MultiLanguageConst.DataQuerySuccess);
}
/// <summary>
/// 获取两种币别之间的汇率
/// </summary>
/// <param name="exchange">币别信息</param>
/// <returns></returns>
public DataResult<ExchangeRate> GetExchangeRate(ExchangeRate exchange)
{
if (exchange.CurrencyFrom == exchange.CurrencyTo)
{
exchange.ReverseRate = exchange.Rate = 1m;
return DataResult<ExchangeRate>.Success(exchange);
}
long id = long.Parse(User.OrgId);
//获取本位币,默认=人民币
string localCurrency = Db.Queryable<SysOrg>().Where(x => x.Id == id).Select(x => x.LocalCurrency).First() ?? RMB_CODE;
//需要做二次转换
if (exchange.CurrencyFrom != localCurrency && exchange.CurrencyTo != localCurrency)
{
//获取中间汇率
var middleRate = GetLocalRate(exchange.CurrencyFrom, localCurrency, exchange.FeeType);
if (middleRate == null)
return DataResult<ExchangeRate>.FailedData(exchange, message: $"尚未维护币别:{exchange.CurrencyFrom}");
var rate = GetLocalRate(exchange.CurrencyTo, localCurrency, exchange.FeeType);
exchange.Rate = Math.Round(1 / (rate ?? 1m) * middleRate.GetValueOrDefault(), 4, MidpointRounding.AwayFromZero);
exchange.ReverseRate = Math.Round(1 / exchange.Rate, 4, MidpointRounding.AwayFromZero);
}
else
{
string currency = exchange.CurrencyFrom == RMB_CODE ? exchange.CurrencyTo : exchange.CurrencyFrom;
var rate = GetLocalRate(currency, localCurrency, exchange.FeeType);
if (currency == exchange.CurrencyFrom)
{
exchange.Rate = rate ?? 1m;
exchange.ReverseRate = Math.Round(1 / exchange.Rate, 4, MidpointRounding.AwayFromZero);
}
else
{
exchange.ReverseRate = rate ?? 1m;
exchange.Rate = Math.Round(1 / exchange.ReverseRate, 4, MidpointRounding.AwayFromZero);
}
}
return DataResult<ExchangeRate>.Success(exchange);
}
internal decimal? GetLocalRate(string currency, string localCurrency, FeeType? type)
{
var entity = TenantDb.Queryable<FeeCurrency>().Where(x =>
x.CodeName == currency).Includes(x => x.Exchanges).First();
if (entity == null)
return null;
var rate = entity.DefaultRate;
DateTime dtNow = DateTime.Now;
if (type.HasValue && entity.Exchanges != null && entity.Exchanges.Count > 0)
{
//取当前时间范围内的最新一条,优先获取本位币
var item = entity.Exchanges.FindAll(x => x.Status == StatusEnum.Enable && x.LocalCurrency == localCurrency &&
x.StartDate >= dtNow && x.EndDate <= dtNow).OrderByDescending(x => x.CreateTime).FirstOrDefault();
item ??= entity.Exchanges.FindAll(x => x.Status == StatusEnum.Enable &&
x.StartDate >= dtNow && x.EndDate <= dtNow).OrderByDescending(x => x.CreateTime).FirstOrDefault();
if (item != null)
rate = type.Value == FeeType.Receivable ? item.DRValue : item.CRValue;
}
return rate;
}
}
}

@ -62,5 +62,23 @@ namespace DS.WMS.FeeApi.Controllers
var res = _invokeService.GetFeeCurrencyExchangeInfo(id);
return res;
}
/// <summary>
/// 获取两种币别之间的汇率
/// </summary>
/// <param name="currencyFrom">原币别</param>
/// <param name="currencyTo">目标币别</param>
/// <param name="feeType">费用类型</param>
/// <returns></returns>
[HttpGet, Route("GetExchangeRate")]
public DataResult<ExchangeRate> GetExchangeRate([FromQuery] string currencyFrom, [FromQuery] string currencyTo, [FromQuery] FeeType? feeType)
{
return _invokeService.GetExchangeRate(new ExchangeRate
{
CurrencyFrom = currencyFrom,
CurrencyTo = currencyTo,
FeeType = feeType
});
}
}
}

@ -1545,3 +1545,52 @@
2024-06-25 17:17:52.9453 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.FeeApi\bin\Debug\net8.0\nlog.config
2024-06-25 17:17:52.9453 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-06-25 17:17:52.9612 Info Configuration initialized.
2024-06-26 13:51:38.5103 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-06-26 13:51:38.5445 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-06-26 13:51:38.5478 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-06-26 13:51:38.5478 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-06-26 13:51:38.5677 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.FeeApi\bin\Debug\net8.0\nlog.config
2024-06-26 13:51:38.5677 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-06-26 13:51:38.5677 Info Configuration initialized.
2024-06-26 14:12:47.4877 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-06-26 14:12:47.5208 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-06-26 14:12:47.5208 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-06-26 14:12:47.5428 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-06-26 14:12:47.5493 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.FeeApi\bin\Debug\net8.0\nlog.config
2024-06-26 14:12:47.5493 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-06-26 14:12:47.5493 Info Configuration initialized.
2024-06-26 14:14:55.7367 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-06-26 14:14:55.7626 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-06-26 14:14:55.7626 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-06-26 14:14:55.7754 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-06-26 14:14:55.7754 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.FeeApi\bin\Debug\net8.0\nlog.config
2024-06-26 14:14:55.7826 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-06-26 14:14:55.7826 Info Configuration initialized.
2024-06-26 14:15:51.7061 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-06-26 14:15:51.7364 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-06-26 14:15:51.7364 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-06-26 14:15:51.7364 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-06-26 14:15:51.7560 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.FeeApi\bin\Debug\net8.0\nlog.config
2024-06-26 14:15:51.7560 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-06-26 14:15:51.7560 Info Configuration initialized.
2024-06-26 14:16:04.0317 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-06-26 14:16:04.0561 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-06-26 14:16:04.0726 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-06-26 14:16:04.0837 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-06-26 14:16:04.0837 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.FeeApi\bin\Debug\net8.0\nlog.config
2024-06-26 14:16:04.0837 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-06-26 14:16:04.0962 Info Configuration initialized.
2024-06-26 14:26:07.1847 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-06-26 14:26:07.2139 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-06-26 14:26:07.2191 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-06-26 14:26:07.2351 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-06-26 14:26:07.2351 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.FeeApi\bin\Debug\net8.0\nlog.config
2024-06-26 14:26:07.2351 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-06-26 14:26:07.2573 Info Configuration initialized.
2024-06-26 14:29:47.2415 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-06-26 14:29:47.3036 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-06-26 14:29:47.3135 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-06-26 14:29:47.3135 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-06-26 14:29:47.3328 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.FeeApi\bin\Debug\net8.0\nlog.config
2024-06-26 14:29:47.3328 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-06-26 14:29:47.3328 Info Configuration initialized.

@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<Project>
<PropertyGroup>
<_PublishTargetUrl>D:\Publish\DS8\FeeApi</_PublishTargetUrl>
<History>True|2024-06-25T07:45:57.6052473Z||;True|2024-06-25T10:17:17.7408916+08:00||;False|2024-06-25T10:16:23.5639654+08:00||;False|2024-06-25T10:15:28.3857721+08:00||;False|2024-06-25T10:10:59.5536995+08:00||;False|2024-06-25T10:07:10.4050937+08:00||;True|2024-06-24T15:22:18.2672769+08:00||;True|2024-06-24T15:01:04.8153621+08:00||;False|2024-06-24T15:00:29.9618848+08:00||;True|2024-06-24T14:07:19.9401637+08:00||;False|2024-06-24T14:06:36.1250570+08:00||;True|2024-06-21T15:13:57.4273503+08:00||;True|2024-06-21T15:04:37.8218608+08:00||;True|2024-06-21T14:12:48.0266638+08:00||;True|2024-06-21T13:52:30.0950155+08:00||;True|2024-06-20T11:02:42.9508506+08:00||;True|2024-06-19T11:43:01.1899282+08:00||;True|2024-06-19T11:23:01.2938141+08:00||;True|2024-06-18T08:51:21.6222152+08:00||;True|2024-06-17T09:20:35.0804494+08:00||;True|2024-06-17T08:41:58.1319484+08:00||;True|2024-06-17T08:38:09.0137102+08:00||;True|2024-06-14T15:19:45.7395180+08:00||;True|2024-06-14T14:38:49.7094421+08:00||;True|2024-06-14T14:27:39.2815370+08:00||;True|2024-06-14T09:42:21.5397525+08:00||;True|2024-06-13T16:03:39.8475642+08:00||;True|2024-06-13T14:12:10.1725629+08:00||;True|2024-06-13T10:46:52.6971321+08:00||;True|2024-06-11T17:03:44.8328978+08:00||;True|2024-06-06T17:41:51.1810315+08:00||;True|2024-06-06T10:57:27.8273617+08:00||;True|2024-06-04T14:23:21.3742450+08:00||;True|2024-05-31T17:01:42.4717460+08:00||;True|2024-05-31T13:56:03.0734064+08:00||;True|2024-05-31T08:45:52.3549394+08:00||;True|2024-05-30T17:16:32.8907958+08:00||;True|2024-05-30T16:18:06.9957657+08:00||;True|2024-05-29T15:44:18.4051203+08:00||;True|2024-05-29T15:11:03.1518632+08:00||;True|2024-05-29T14:52:26.0823495+08:00||;True|2024-05-29T11:17:20.2245101+08:00||;True|2024-05-29T08:36:28.9569161+08:00||;True|2024-05-28T08:44:31.4427261+08:00||;False|2024-05-28T08:44:02.5254826+08:00||;True|2024-05-27T15:16:32.9413631+08:00||;True|2024-05-27T15:03:42.9803879+08:00||;True|2024-05-27T08:49:54.3933663+08:00||;True|2024-05-27T08:46:13.5862236+08:00||;True|2024-05-23T17:19:32.8154451+08:00||;True|2024-05-23T17:19:01.4587615+08:00||;True|2024-05-22T16:52:42.2166228+08:00||;True|2024-05-22T15:19:49.1773202+08:00||;True|2024-05-22T15:13:31.9485525+08:00||;True|2024-05-22T13:29:02.1355808+08:00||;True|2024-05-22T09:48:40.8753914+08:00||;True|2024-05-22T09:25:06.2068137+08:00||;True|2024-05-22T09:18:53.0759815+08:00||;True|2024-05-21T17:13:36.4091775+08:00||;True|2024-05-21T14:41:18.8486299+08:00||;True|2024-05-21T11:04:27.3649637+08:00||;</History>
<History>True|2024-06-26T01:45:24.4055568Z||;True|2024-06-25T15:45:57.6052473+08:00||;True|2024-06-25T10:17:17.7408916+08:00||;False|2024-06-25T10:16:23.5639654+08:00||;False|2024-06-25T10:15:28.3857721+08:00||;False|2024-06-25T10:10:59.5536995+08:00||;False|2024-06-25T10:07:10.4050937+08:00||;True|2024-06-24T15:22:18.2672769+08:00||;True|2024-06-24T15:01:04.8153621+08:00||;False|2024-06-24T15:00:29.9618848+08:00||;True|2024-06-24T14:07:19.9401637+08:00||;False|2024-06-24T14:06:36.1250570+08:00||;True|2024-06-21T15:13:57.4273503+08:00||;True|2024-06-21T15:04:37.8218608+08:00||;True|2024-06-21T14:12:48.0266638+08:00||;True|2024-06-21T13:52:30.0950155+08:00||;True|2024-06-20T11:02:42.9508506+08:00||;True|2024-06-19T11:43:01.1899282+08:00||;True|2024-06-19T11:23:01.2938141+08:00||;True|2024-06-18T08:51:21.6222152+08:00||;True|2024-06-17T09:20:35.0804494+08:00||;True|2024-06-17T08:41:58.1319484+08:00||;True|2024-06-17T08:38:09.0137102+08:00||;True|2024-06-14T15:19:45.7395180+08:00||;True|2024-06-14T14:38:49.7094421+08:00||;True|2024-06-14T14:27:39.2815370+08:00||;True|2024-06-14T09:42:21.5397525+08:00||;True|2024-06-13T16:03:39.8475642+08:00||;True|2024-06-13T14:12:10.1725629+08:00||;True|2024-06-13T10:46:52.6971321+08:00||;True|2024-06-11T17:03:44.8328978+08:00||;True|2024-06-06T17:41:51.1810315+08:00||;True|2024-06-06T10:57:27.8273617+08:00||;True|2024-06-04T14:23:21.3742450+08:00||;True|2024-05-31T17:01:42.4717460+08:00||;True|2024-05-31T13:56:03.0734064+08:00||;True|2024-05-31T08:45:52.3549394+08:00||;True|2024-05-30T17:16:32.8907958+08:00||;True|2024-05-30T16:18:06.9957657+08:00||;True|2024-05-29T15:44:18.4051203+08:00||;True|2024-05-29T15:11:03.1518632+08:00||;True|2024-05-29T14:52:26.0823495+08:00||;True|2024-05-29T11:17:20.2245101+08:00||;True|2024-05-29T08:36:28.9569161+08:00||;True|2024-05-28T08:44:31.4427261+08:00||;False|2024-05-28T08:44:02.5254826+08:00||;True|2024-05-27T15:16:32.9413631+08:00||;True|2024-05-27T15:03:42.9803879+08:00||;True|2024-05-27T08:49:54.3933663+08:00||;True|2024-05-27T08:46:13.5862236+08:00||;True|2024-05-23T17:19:32.8154451+08:00||;True|2024-05-23T17:19:01.4587615+08:00||;True|2024-05-22T16:52:42.2166228+08:00||;True|2024-05-22T15:19:49.1773202+08:00||;True|2024-05-22T15:13:31.9485525+08:00||;True|2024-05-22T13:29:02.1355808+08:00||;True|2024-05-22T09:48:40.8753914+08:00||;True|2024-05-22T09:25:06.2068137+08:00||;True|2024-05-22T09:18:53.0759815+08:00||;True|2024-05-21T17:13:36.4091775+08:00||;True|2024-05-21T14:41:18.8486299+08:00||;True|2024-05-21T11:04:27.3649637+08:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>
Loading…
Cancel
Save