-
-
Notifications
You must be signed in to change notification settings - Fork 377
/
Copy pathFulfillmentService.cs
124 lines (89 loc) · 3.2 KB
/
FulfillmentService.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#region License
/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#endregion
#region Imports
using System;
using Microsoft.Extensions.Logging;
using Spring.Transaction.Interceptor;
using Spring.Northwind.Dao;
using Spring.Northwind.Domain;
#endregion
namespace Spring.Northwind.Service
{
public class FulfillmentService : IFulfillmentService
{
#region Fields
private static readonly ILogger log = LogManager.GetLogger(typeof (FulfillmentService));
private IProductDao productDao;
private ICustomerDao customerDao;
private IOrderDao orderDao;
private IShippingService shippingService;
#endregion
#region Properties
public IProductDao ProductDao
{
get { return productDao; }
set { productDao = value; }
}
public IOrderDao OrderDao
{
get { return orderDao; }
set { orderDao = value; }
}
public ICustomerDao CustomerDao
{
get { return customerDao; }
set { customerDao = value; }
}
public IShippingService ShippingService
{
get { return shippingService; }
set { shippingService = value; }
}
#endregion
#region Methods
[Transaction]
public void ProcessCustomer(string customerId)
{
//Find all orders for customer
Customer customer = CustomerDao.Get(customerId);
foreach (Order order in customer.Orders)
{
if (order.ShippedDate.HasValue)
{
log.LogWarning("Order {OrderId} has already been shipped, skipping.", order.Id);
continue;
}
//Validate Order
Validate(order);
log.LogInformation("Order {OrderId} validated, proceeding with shipping..", order.Id);
//Ship with external shipping service
ShippingService.ShipOrder(order);
//Update shipping date
order.ShippedDate = DateTime.Now;
//Update shipment date
OrderDao.Update(order);
//Other operations...Decrease product quantity... etc
}
}
private void Validate(Order order)
{
//no-op - throw exception on error.
}
#endregion
}
}