6
6
7
7
namespace Magento \AsynchronousOperations \Model ;
8
8
9
- use Magento \AsynchronousOperations \Model \ResourceModel \Bulk \CollectionFactory as BulkCollectionFactory ;
10
- use Magento \AsynchronousOperations \Model \ResourceModel \Operation \CollectionFactory as OperationCollectionFactory ;
11
- use Magento \AsynchronousOperations \Api \Data \OperationInterface ;
12
- use Magento \AsynchronousOperations \Api \Data \BulkSummaryInterface ;
13
- use Magento \Framework \App \ResourceConnection ;
14
- use Magento \AsynchronousOperations \Model \BulkStatus \CalculatedStatusSql ;
15
- use Magento \Framework \EntityManager \MetadataPool ;
16
9
use Magento \Framework \Exception \NoSuchEntityException ;
17
10
use Magento \Framework \EntityManager \EntityManager ;
18
11
use Magento \AsynchronousOperations \Api \Data \BulkStatusInterfaceFactory as BulkStatusShortFactory ;
19
12
use Magento \AsynchronousOperations \Api \Data \DetailedBulkStatusInterfaceFactory as BulkStatusDetailedFactory ;
20
13
use Magento \AsynchronousOperations \Api \Data \OperationDetailsInterfaceFactory ;
21
14
use Magento \AsynchronousOperations \Api \BulkStatusInterface ;
15
+ use Magento \AsynchronousOperations \Model \ResourceModel \Operation \CollectionFactory ;
22
16
23
17
/**
24
18
* Class BulkStatus
25
19
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
26
20
*/
27
21
class BulkOperationsStatus implements BulkStatusInterface
28
22
{
29
- /**
30
- * @var \Magento\AsynchronousOperations\Api\Data\BulkSummaryInterfaceFactory
31
- */
32
- private $ bulkCollectionFactory ;
33
-
34
- /**
35
- * @var \Magento\AsynchronousOperations\Api\Data\OperationInterfaceFactory
36
- */
37
- private $ operationCollectionFactory ;
38
-
39
- /**
40
- * @var ResourceConnection
41
- */
42
- private $ resourceConnection ;
43
-
44
- /**
45
- * @var CalculatedStatusSql
46
- */
47
- private $ calculatedStatusSql ;
48
-
49
- /**
50
- * @var MetadataPool
51
- */
52
- private $ metadataPool ;
53
-
54
23
/**
55
24
* @var EntityManager
56
25
*/
@@ -66,33 +35,34 @@ class BulkOperationsStatus implements BulkStatusInterface
66
35
*/
67
36
private $ bulkShortFactory ;
68
37
38
+ /**
39
+ * @var BulkStatus
40
+ */
41
+ private $ bulkStatus ;
42
+
43
+ /**
44
+ * @var \Magento\AsynchronousOperations\Api\Data\OperationInterfaceFactory
45
+ */
46
+ private $ operationCollectionFactory ;
47
+
69
48
/**
70
49
* Init dependencies.
71
50
*
72
- * @param \Magento\AsynchronousOperations\Model\ResourceModel\Bulk\CollectionFactory $bulkCollection
73
- * @param \Magento\AsynchronousOperations\Model\ResourceModel\Operation\CollectionFactory $operationCollection
74
- * @param \Magento\Framework\App\ResourceConnection $resourceConnection
75
- * @param \Magento\AsynchronousOperations\Model\BulkStatus\CalculatedStatusSql $calculatedStatusSql
76
- * @param \Magento\Framework\EntityManager\MetadataPool $metadataPool
51
+ * @param BulkStatus $bulkStatus
52
+ * @param CollectionFactory $operationCollection
77
53
* @param BulkStatusDetailedFactory $bulkDetailedFactory
78
54
* @param BulkStatusShortFactory $bulkShortFactory
79
55
* @param \Magento\Framework\EntityManager\EntityManager $entityManager
80
56
*/
81
57
public function __construct (
82
- BulkCollectionFactory $ bulkCollection ,
83
- OperationCollectionFactory $ operationCollection ,
84
- ResourceConnection $ resourceConnection ,
85
- CalculatedStatusSql $ calculatedStatusSql ,
86
- MetadataPool $ metadataPool ,
58
+ BulkStatus $ bulkStatus ,
59
+ CollectionFactory $ operationCollection ,
87
60
BulkStatusDetailedFactory $ bulkDetailedFactory ,
88
61
BulkStatusShortFactory $ bulkShortFactory ,
89
62
EntityManager $ entityManager
90
63
) {
91
64
$ this ->operationCollectionFactory = $ operationCollection ;
92
- $ this ->bulkCollectionFactory = $ bulkCollection ;
93
- $ this ->resourceConnection = $ resourceConnection ;
94
- $ this ->calculatedStatusSql = $ calculatedStatusSql ;
95
- $ this ->metadataPool = $ metadataPool ;
65
+ $ this ->bulkStatus = $ bulkStatus ;
96
66
$ this ->bulkDetailedFactory = $ bulkDetailedFactory ;
97
67
$ this ->bulkShortFactory = $ bulkShortFactory ;
98
68
$ this ->entityManager = $ entityManager ;
@@ -103,127 +73,31 @@ public function __construct(
103
73
*/
104
74
public function getFailedOperationsByBulkId ($ bulkUuid , $ failureType = null )
105
75
{
106
- $ failureCodes = $ failureType
107
- ? [$ failureType ]
108
- : [
109
- OperationInterface::STATUS_TYPE_RETRIABLY_FAILED ,
110
- OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED ,
111
- ];
112
- $ operations = $ this ->operationCollectionFactory ->create ()
113
- ->addFieldToFilter ('bulk_uuid ' , $ bulkUuid )
114
- ->addFieldToFilter ('status ' , $ failureCodes )
115
- ->getItems ();
116
-
117
- return $ operations ;
76
+ return $ this ->bulkStatus ->getFailedOperationsByBulkId ($ bulkUuid , $ failureType );
118
77
}
119
78
120
79
/**
121
80
* @inheritDoc
122
81
*/
123
82
public function getOperationsCountByBulkIdAndStatus ($ bulkUuid , $ status )
124
83
{
125
-
126
- /** @var \Magento\AsynchronousOperations\Model\ResourceModel\Operation\Collection $collection */
127
- $ collection = $ this ->operationCollectionFactory ->create ();
128
-
129
- return $ collection ->addFieldToFilter ('bulk_uuid ' , $ bulkUuid )
130
- ->addFieldToFilter ('status ' , $ status )
131
- ->getSize ();
84
+ return $ this ->bulkStatus ->getOperationsCountByBulkIdAndStatus ($ bulkUuid , $ status );
132
85
}
133
86
134
87
/**
135
88
* @inheritDoc
136
89
*/
137
90
public function getBulksByUser ($ userId )
138
91
{
139
- /** @var ResourceModel\Bulk\Collection $collection */
140
- $ collection = $ this ->bulkCollectionFactory ->create ();
141
- $ operationTableName = $ this ->resourceConnection ->getTableName ('magento_operation ' );
142
- $ statusesArray = [
143
- OperationInterface::STATUS_TYPE_RETRIABLY_FAILED ,
144
- OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED ,
145
- BulkSummaryInterface::NOT_STARTED ,
146
- OperationInterface::STATUS_TYPE_OPEN ,
147
- OperationInterface::STATUS_TYPE_COMPLETE ,
148
- ];
149
- $ select = $ collection ->getSelect ();
150
- $ select ->columns (['status ' => $ this ->calculatedStatusSql ->get ($ operationTableName )])
151
- ->order (
152
- new \Zend_Db_Expr (
153
- 'FIELD(status, ' . implode (', ' , $ statusesArray ) . ') '
154
- )
155
- );
156
- $ collection ->addFieldToFilter ('user_id ' , $ userId )
157
- ->addOrder ('start_time ' );
158
-
159
- return $ collection ->getItems ();
92
+ return $ this ->bulkStatus ->getBulksByUser ($ userId );
160
93
}
161
94
162
95
/**
163
96
* @inheritDoc
164
97
*/
165
98
public function getBulkStatus ($ bulkUuid )
166
99
{
167
- /**
168
- * Number of operations that has been processed (i.e. operations with any status but 'open')
169
- */
170
- $ allProcessedOperationsQty = (int )$ this ->operationCollectionFactory ->create ()
171
- ->addFieldToFilter ('bulk_uuid ' , $ bulkUuid )
172
- ->getSize ();
173
-
174
- if ($ allProcessedOperationsQty == 0 ) {
175
- return BulkSummaryInterface::NOT_STARTED ;
176
- }
177
-
178
- /**
179
- * Total number of operations that has been scheduled within the given bulk
180
- */
181
- $ allOperationsQty = $ this ->getOperationCount ($ bulkUuid );
182
-
183
- /**
184
- * Number of operations that has not been started yet (i.e. operations with status 'open')
185
- */
186
- $ allOpenOperationsQty = $ allOperationsQty - $ allProcessedOperationsQty ;
187
-
188
- /**
189
- * Number of operations that has been completed successfully
190
- */
191
- $ allCompleteOperationsQty = $ this ->operationCollectionFactory
192
- ->create ()
193
- ->addFieldToFilter ('bulk_uuid ' , $ bulkUuid )
194
- ->addFieldToFilter (
195
- 'status ' ,
196
- OperationInterface::STATUS_TYPE_COMPLETE
197
- )
198
- ->getSize ();
199
-
200
- if ($ allCompleteOperationsQty == $ allOperationsQty ) {
201
- return BulkSummaryInterface::FINISHED_SUCCESSFULLY ;
202
- }
203
-
204
- if ($ allOpenOperationsQty > 0 && $ allOpenOperationsQty !== $ allOperationsQty ) {
205
- return BulkSummaryInterface::IN_PROGRESS ;
206
- }
207
-
208
- return BulkSummaryInterface::FINISHED_WITH_FAILURE ;
209
- }
210
-
211
- /**
212
- * Get total number of operations that has been scheduled within the given bulk.
213
- *
214
- * @param string $bulkUuid
215
- * @return int
216
- */
217
- private function getOperationCount ($ bulkUuid )
218
- {
219
- $ metadata = $ this ->metadataPool ->getMetadata (BulkSummaryInterface::class);
220
- $ connection = $ this ->resourceConnection ->getConnectionByName ($ metadata ->getEntityConnectionName ());
221
-
222
- return (int )$ connection ->fetchOne (
223
- $ connection ->select ()
224
- ->from ($ metadata ->getEntityTable (), 'operation_count ' )
225
- ->where ('uuid = ? ' , $ bulkUuid )
226
- );
100
+ return $ this ->bulkStatus ->getBulkStatus ($ bulkUuid );
227
101
}
228
102
229
103
/**
0 commit comments