diff --git a/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationAuditService`1.cs b/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationAuditService`1.cs
index 6b4d3c3c..93edd2e6 100644
--- a/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationAuditService`1.cs
+++ b/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationAuditService`1.cs
@@ -6,6 +6,8 @@ using DS.WMS.Core.Fee.Method;
using DS.WMS.Core.Flow.Dtos;
using DS.WMS.Core.Flow.Entity;
using DS.WMS.Core.Flow.Interface;
+using DS.WMS.Core.Op.Dtos.TaskInteraction;
+using DS.WMS.Core.Op.Interface.TaskInteraction;
using Microsoft.Extensions.DependencyInjection;
namespace DS.WMS.Core.Application.Method
@@ -22,6 +24,7 @@ namespace DS.WMS.Core.Application.Method
public abstract TaskBaseTypeEnum AuditType { get; }
readonly IClientFlowInstanceService flowService;
+ readonly ITaskService taskService;
///
/// 初始化
@@ -30,6 +33,7 @@ namespace DS.WMS.Core.Application.Method
public ApplicationAuditService(IServiceProvider serviceProvider) : base(serviceProvider)
{
flowService = serviceProvider.GetRequiredService();
+ taskService = serviceProvider.GetRequiredService();
}
///
@@ -69,23 +73,41 @@ namespace DS.WMS.Core.Application.Method
if (!result.Succeeded)
return result;
- var flows = await flowService.GetInstanceByBSIdAsync(AuditType, null, request.Ids);
- if (flows.Count != request.Ids.Length)
- return DataResult.FailedWithDesc(nameof(MultiLanguageConst.FlowNotFound));
-
- List list = [];
- foreach (var item in flows)
+ bool hasAuthorized = await taskService.HasAuthorizedAsync();
+ if (hasAuthorized)
{
- result = flowService.AuditFlowInstance(new FlowAuditInfo
+ result = await taskService.AuditAsync(new TaskAuditRequest
{
- Instance = item,
- Status = request.Result,
- AuditNote = request.Remark
+ Ids = request.Ids,
+ Remark = request.Remark,
+ Result = request.Result,
+ TaskTypeName = AuditType.ToString()
});
if (!result.Succeeded)
return result;
}
+ else
+ {
+ var flows = await flowService.GetInstanceByBSIdAsync(AuditType, null, request.Ids);
+ if (flows.Count != request.Ids.Length)
+ return DataResult.FailedWithDesc(nameof(MultiLanguageConst.FlowNotFound));
+
+ List list = [];
+ foreach (var item in flows)
+ {
+ result = flowService.AuditFlowInstance(new FlowAuditInfo
+ {
+ Instance = item,
+ Status = request.Result,
+ AuditNote = request.Remark
+ });
+
+ if (!result.Succeeded)
+ return result;
+ }
+ }
+
return DataResult.Success;
}
diff --git a/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationService`1.cs b/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationService`1.cs
index 8bffe2a2..13050a4a 100644
--- a/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationService`1.cs
+++ b/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationService`1.cs
@@ -22,9 +22,14 @@ namespace DS.WMS.Core.Application.Method
/// 申请单基础实现
///
/// 实体的类型声明
- public class ApplicationService : FeeServiceBase, IApplicationService
+ public abstract class ApplicationService : FeeServiceBase, IApplicationService
where TEntity : ApplicationForm, new()
{
+ ///
+ /// 适用于当前申请单的审核类型
+ ///
+ public abstract TaskBaseTypeEnum AuditType { get; }
+
readonly IClientFlowInstanceService flowService;
readonly Lazy commonService;
readonly ITaskService taskService;
@@ -411,7 +416,7 @@ namespace DS.WMS.Core.Application.Method
if (!result.Succeeded)
return result;
- List entities = new List(idArray.Length);
+ List entities = new(idArray.Length);
bool hasAuthorized = await taskService.HasAuthorizedAsync();
await TenantDb.Ado.BeginTranAsync();
try
@@ -515,15 +520,32 @@ namespace DS.WMS.Core.Application.Method
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.NotInAudit));
DataResult result;
+ bool hasAuthorized = await taskService.HasAuthorizedAsync();
try
{
- result = await flowService.WithdrawAsync(ids);
- if (!result.Succeeded)
- return result;
+ if (hasAuthorized)
+ {
+ foreach (var item in list)
+ {
+ result = await taskService.WithdrawAsync(new TaskRequest
+ {
+ BusinessId = item.Id,
+ TaskTypeName = AuditType.ToString()
+ }, false);
- foreach (var item in list)
+ OnWithdraw(item);
+ }
+ }
+ else
{
- OnWithdraw(item);
+ result = await flowService.WithdrawAsync(ids);
+ if (!result.Succeeded)
+ return result;
+
+ foreach (var item in list)
+ {
+ OnWithdraw(item);
+ }
}
await TenantDb.Updateable(list).UpdateColumns(x => new { x.Status }).ExecuteCommandAsync();
diff --git a/ds-wms-service/DS.WMS.Core/Application/Method/InvoiceApplicationService.cs b/ds-wms-service/DS.WMS.Core/Application/Method/InvoiceApplicationService.cs
index 2a19dd94..07adac31 100644
--- a/ds-wms-service/DS.WMS.Core/Application/Method/InvoiceApplicationService.cs
+++ b/ds-wms-service/DS.WMS.Core/Application/Method/InvoiceApplicationService.cs
@@ -19,6 +19,8 @@ namespace DS.WMS.Core.Application.Method
///
public class InvoiceApplicationService : ApplicationService, IInvoiceApplicationService
{
+ public override TaskBaseTypeEnum AuditType => TaskBaseTypeEnum.APPLICATION_INVOICE_AUDIT;
+
///
/// 初始化
///
diff --git a/ds-wms-service/DS.WMS.Core/Application/Method/PaymentApplicationService.cs b/ds-wms-service/DS.WMS.Core/Application/Method/PaymentApplicationService.cs
index abd34114..741b9073 100644
--- a/ds-wms-service/DS.WMS.Core/Application/Method/PaymentApplicationService.cs
+++ b/ds-wms-service/DS.WMS.Core/Application/Method/PaymentApplicationService.cs
@@ -19,6 +19,8 @@ namespace DS.WMS.Core.Application.Method
///
public class PaymentApplicationService : ApplicationService, IPaymentApplicationService
{
+ public override TaskBaseTypeEnum AuditType => TaskBaseTypeEnum.APPLICATION_PAYMENT_AUDIT;
+
///
/// 初始化
///
diff --git a/ds-wms-service/DS.WMS.Core/Fee/Entity/FeeCustTemplate.cs b/ds-wms-service/DS.WMS.Core/Fee/Entity/FeeCustTemplate.cs
index 6cc6e134..2e028c5a 100644
--- a/ds-wms-service/DS.WMS.Core/Fee/Entity/FeeCustTemplate.cs
+++ b/ds-wms-service/DS.WMS.Core/Fee/Entity/FeeCustTemplate.cs
@@ -40,7 +40,7 @@ namespace DS.WMS.Core.Fee.Entity
/// 结算对象类型
///
[SugarColumn(ColumnDescription = "结算对象类型", IsNullable = true)]
- public CustomerTypeEnum? CustomerType { get; set; }
+ public string? CustomerType { get; set; }
///
/// 名称
diff --git a/ds-wms-service/DS.WMS.Core/Fee/Entity/FeeCustTemplateDetail.cs b/ds-wms-service/DS.WMS.Core/Fee/Entity/FeeCustTemplateDetail.cs
index bc02adf0..4925fd66 100644
--- a/ds-wms-service/DS.WMS.Core/Fee/Entity/FeeCustTemplateDetail.cs
+++ b/ds-wms-service/DS.WMS.Core/Fee/Entity/FeeCustTemplateDetail.cs
@@ -41,7 +41,7 @@ namespace DS.WMS.Core.Fee.Entity
/// 结算对象类型
///
[SugarColumn(ColumnDescription = "结算对象类型", IsNullable = true)]
- public CustomerTypeEnum? CustomerType { get; set; }
+ public string? CustomerType { get; set; }
///
/// 费用Id
diff --git a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeCustTemplateService.cs b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeCustTemplateService.cs
index e577d90c..88a7b45b 100644
--- a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeCustTemplateService.cs
+++ b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeCustTemplateService.cs
@@ -60,27 +60,28 @@ namespace DS.WMS.Core.Fee.Method
{
x.Id,
x.Condition,
- Details = SqlFunc.Subqueryable().Where(y => y.TemplateId == x.Id).ToList(y => new
- {
- y.CustomerId,
- y.CustomerName,
- y.CustomerType,
- y.FeeId,
- y.FeeCode,
- y.FeeName,
- y.FeeType,
- y.Unit,
- y.IsCtn,
- y.Currency,
- y.UnitPrice,
- y.ExchangeRate,
- y.TaxRate,
- y.AccTaxRate,
- y.Tax,
- y.TaxUnitPrice,
- y.IsInvoice,
- y.IsAdvancedPay
- })
+ Details = SqlFunc.Subqueryable().Where(y =>
+ y.TemplateId == x.Id && y.CustomerId == order.CustomerId).ToList(y => new
+ {
+ y.CustomerId,
+ y.CustomerName,
+ y.CustomerType,
+ y.FeeId,
+ y.FeeCode,
+ y.FeeName,
+ y.FeeType,
+ y.Unit,
+ y.IsCtn,
+ y.Currency,
+ y.UnitPrice,
+ y.ExchangeRate,
+ y.TaxRate,
+ y.AccTaxRate,
+ y.Tax,
+ y.TaxUnitPrice,
+ y.IsInvoice,
+ y.IsAdvancedPay
+ })
}).ToListAsync();
if (list.Count == 0)
@@ -176,8 +177,10 @@ namespace DS.WMS.Core.Fee.Method
///
public async Task> GetAsync(long id)
{
- var data = await TenantDb.Queryable().Where(x => x.Id == id)
- .Includes(x => x.Details).FirstAsync();
+ var data = await TenantDb.Queryable().Where(x => x.Id == id).FirstAsync();
+ if (data != null)
+ data.Details = await TenantDb.Queryable().Where(x => x.TemplateId == data.Id).ToListAsync();
+
return DataResult.Success(data, MultiLanguageConst.DataQuerySuccess);
}
@@ -207,19 +210,30 @@ namespace DS.WMS.Core.Fee.Method
}
}
- bool flag;
- if (model.Id == 0)
+ await TenantDb.Ado.BeginTranAsync();
+ try
{
- flag = await TenantDb.InsertNav(model).Include(x => x.Details).ExecuteCommandAsync();
+ if (model.Id == 0)
+ {
+ await TenantDb.InsertNav(model).Include(x => x.Details).ExecuteCommandAsync();
+ }
+ else
+ {
+ await TenantDb.Updateable(model).ExecuteCommandAsync();
+
+ if (model.Details.Count > 0)
+ await TenantDb.Storageable(model.Details).DefaultAddElseUpdate().ExecuteCommandAsync();
+ }
+
+ await TenantDb.Ado.CommitTranAsync();
+ return DataResult.Successed("提交成功", model.Id, MultiLanguageConst.DataCreateSuccess);
}
- else
+ catch (Exception ex)
{
- flag = await TenantDb.Updateable(model).ExecuteCommandAsync() > 0;
- flag = await TenantDb.Storageable(model.Details).DefaultAddElseUpdate().ExecuteCommandAsync() > 0;
+ await TenantDb.Ado.RollbackTranAsync();
+ await ex.LogAsync(Db);
+ return DataResult.FailedWithDesc(nameof(MultiLanguageConst.Operation_Failed));
}
-
- return flag ? DataResult.Successed("添加成功!", model.Id, MultiLanguageConst.DataCreateSuccess)
- : DataResult.FailedWithDesc(MultiLanguageConst.Operation_Failed);
}
///
diff --git a/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user b/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user
index 19970e39..39730bbb 100644
--- a/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user
+++ b/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user
@@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<_PublishTargetUrl>D:\Publish\DS8\FeeApi
- True|2024-09-03T08:41:23.7516960Z||;True|2024-09-03T15:22:31.8718097+08:00||;True|2024-09-03T10:01:09.7656702+08:00||;False|2024-09-03T09:46:46.8956531+08:00||;True|2024-09-02T17:07:41.0268500+08:00||;True|2024-09-02T13:50:22.0203254+08:00||;True|2024-09-02T13:34:23.3441546+08:00||;True|2024-08-30T11:25:14.7431645+08:00||;True|2024-08-29T16:38:26.3491372+08:00||;True|2024-08-29T16:32:31.8580864+08:00||;False|2024-08-29T16:30:41.4763198+08:00||;True|2024-08-09T09:18:05.8484398+08:00||;True|2024-08-09T08:45:38.7858906+08:00||;True|2024-08-05T11:37:07.3133020+08:00||;True|2024-07-24T16:45:58.2272340+08:00||;True|2024-07-24T15:48:52.0128987+08:00||;True|2024-07-23T17:41:01.7494842+08:00||;True|2024-07-23T17:25:11.8773492+08:00||;True|2024-07-23T17:07:16.5460273+08:00||;True|2024-07-22T08:59:23.3235603+08:00||;True|2024-07-12T17:35:11.1225017+08:00||;True|2024-07-11T11:40:17.3581147+08:00||;True|2024-07-04T17:20:50.0175739+08:00||;True|2024-07-02T11:26:14.2092751+08:00||;True|2024-07-02T09:21:51.3513605+08:00||;True|2024-07-01T17:47:56.0407256+08:00||;True|2024-07-01T16:42:55.7374984+08:00||;True|2024-07-01T15:49:58.9266967+08:00||;True|2024-07-01T14:35:48.1117178+08:00||;True|2024-07-01T11:41:52.2969338+08:00||;True|2024-07-01T11:13:02.6561160+08:00||;True|2024-06-28T15:28:43.1470725+08:00||;True|2024-06-28T15:16:20.1999596+08:00||;True|2024-06-28T15:14:56.2534743+08:00||;True|2024-06-28T15:02:41.3033806+08:00||;True|2024-06-28T13:37:28.2462742+08:00||;True|2024-06-28T11:06:30.7400535+08:00||;True|2024-06-26T15:24:17.1939896+08:00||;True|2024-06-26T14:33:06.3530466+08:00||;True|2024-06-26T09:45:24.4055568+08:00||;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-09-04T02:07:38.3707398Z||;True|2024-09-04T09:52:47.0574599+08:00||;True|2024-09-03T16:41:23.7516960+08:00||;True|2024-09-03T15:22:31.8718097+08:00||;True|2024-09-03T10:01:09.7656702+08:00||;False|2024-09-03T09:46:46.8956531+08:00||;True|2024-09-02T17:07:41.0268500+08:00||;True|2024-09-02T13:50:22.0203254+08:00||;True|2024-09-02T13:34:23.3441546+08:00||;True|2024-08-30T11:25:14.7431645+08:00||;True|2024-08-29T16:38:26.3491372+08:00||;True|2024-08-29T16:32:31.8580864+08:00||;False|2024-08-29T16:30:41.4763198+08:00||;True|2024-08-09T09:18:05.8484398+08:00||;True|2024-08-09T08:45:38.7858906+08:00||;True|2024-08-05T11:37:07.3133020+08:00||;True|2024-07-24T16:45:58.2272340+08:00||;True|2024-07-24T15:48:52.0128987+08:00||;True|2024-07-23T17:41:01.7494842+08:00||;True|2024-07-23T17:25:11.8773492+08:00||;True|2024-07-23T17:07:16.5460273+08:00||;True|2024-07-22T08:59:23.3235603+08:00||;True|2024-07-12T17:35:11.1225017+08:00||;True|2024-07-11T11:40:17.3581147+08:00||;True|2024-07-04T17:20:50.0175739+08:00||;True|2024-07-02T11:26:14.2092751+08:00||;True|2024-07-02T09:21:51.3513605+08:00||;True|2024-07-01T17:47:56.0407256+08:00||;True|2024-07-01T16:42:55.7374984+08:00||;True|2024-07-01T15:49:58.9266967+08:00||;True|2024-07-01T14:35:48.1117178+08:00||;True|2024-07-01T11:41:52.2969338+08:00||;True|2024-07-01T11:13:02.6561160+08:00||;True|2024-06-28T15:28:43.1470725+08:00||;True|2024-06-28T15:16:20.1999596+08:00||;True|2024-06-28T15:14:56.2534743+08:00||;True|2024-06-28T15:02:41.3033806+08:00||;True|2024-06-28T13:37:28.2462742+08:00||;True|2024-06-28T11:06:30.7400535+08:00||;True|2024-06-26T15:24:17.1939896+08:00||;True|2024-06-26T14:33:06.3530466+08:00||;True|2024-06-26T09:45:24.4055568+08:00||;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||;
\ No newline at end of file