deepfos 1.1.60__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. deepfos/__init__.py +6 -0
  2. deepfos/_version.py +21 -0
  3. deepfos/algo/__init__.py +0 -0
  4. deepfos/algo/graph.py +171 -0
  5. deepfos/algo/segtree.py +31 -0
  6. deepfos/api/V1_1/__init__.py +0 -0
  7. deepfos/api/V1_1/business_model.py +119 -0
  8. deepfos/api/V1_1/dimension.py +599 -0
  9. deepfos/api/V1_1/models/__init__.py +0 -0
  10. deepfos/api/V1_1/models/business_model.py +1033 -0
  11. deepfos/api/V1_1/models/dimension.py +2768 -0
  12. deepfos/api/V1_2/__init__.py +0 -0
  13. deepfos/api/V1_2/dimension.py +285 -0
  14. deepfos/api/V1_2/models/__init__.py +0 -0
  15. deepfos/api/V1_2/models/dimension.py +2923 -0
  16. deepfos/api/__init__.py +0 -0
  17. deepfos/api/account.py +167 -0
  18. deepfos/api/accounting_engines.py +147 -0
  19. deepfos/api/app.py +626 -0
  20. deepfos/api/approval_process.py +198 -0
  21. deepfos/api/base.py +983 -0
  22. deepfos/api/business_model.py +160 -0
  23. deepfos/api/consolidation.py +129 -0
  24. deepfos/api/consolidation_process.py +106 -0
  25. deepfos/api/datatable.py +341 -0
  26. deepfos/api/deep_pipeline.py +61 -0
  27. deepfos/api/deepconnector.py +36 -0
  28. deepfos/api/deepfos_task.py +92 -0
  29. deepfos/api/deepmodel.py +188 -0
  30. deepfos/api/dimension.py +486 -0
  31. deepfos/api/financial_model.py +319 -0
  32. deepfos/api/journal_model.py +119 -0
  33. deepfos/api/journal_template.py +132 -0
  34. deepfos/api/memory_financial_model.py +98 -0
  35. deepfos/api/models/__init__.py +3 -0
  36. deepfos/api/models/account.py +483 -0
  37. deepfos/api/models/accounting_engines.py +756 -0
  38. deepfos/api/models/app.py +1338 -0
  39. deepfos/api/models/approval_process.py +1043 -0
  40. deepfos/api/models/base.py +234 -0
  41. deepfos/api/models/business_model.py +805 -0
  42. deepfos/api/models/consolidation.py +711 -0
  43. deepfos/api/models/consolidation_process.py +248 -0
  44. deepfos/api/models/datatable_mysql.py +427 -0
  45. deepfos/api/models/deep_pipeline.py +55 -0
  46. deepfos/api/models/deepconnector.py +28 -0
  47. deepfos/api/models/deepfos_task.py +386 -0
  48. deepfos/api/models/deepmodel.py +308 -0
  49. deepfos/api/models/dimension.py +1576 -0
  50. deepfos/api/models/financial_model.py +1796 -0
  51. deepfos/api/models/journal_model.py +341 -0
  52. deepfos/api/models/journal_template.py +854 -0
  53. deepfos/api/models/memory_financial_model.py +478 -0
  54. deepfos/api/models/platform.py +178 -0
  55. deepfos/api/models/python.py +221 -0
  56. deepfos/api/models/reconciliation_engine.py +411 -0
  57. deepfos/api/models/reconciliation_report.py +161 -0
  58. deepfos/api/models/role_strategy.py +884 -0
  59. deepfos/api/models/smartlist.py +237 -0
  60. deepfos/api/models/space.py +1137 -0
  61. deepfos/api/models/system.py +1065 -0
  62. deepfos/api/models/variable.py +463 -0
  63. deepfos/api/models/workflow.py +946 -0
  64. deepfos/api/platform.py +199 -0
  65. deepfos/api/python.py +90 -0
  66. deepfos/api/reconciliation_engine.py +181 -0
  67. deepfos/api/reconciliation_report.py +64 -0
  68. deepfos/api/role_strategy.py +234 -0
  69. deepfos/api/smartlist.py +69 -0
  70. deepfos/api/space.py +582 -0
  71. deepfos/api/system.py +372 -0
  72. deepfos/api/variable.py +154 -0
  73. deepfos/api/workflow.py +264 -0
  74. deepfos/boost/__init__.py +6 -0
  75. deepfos/boost/py_jstream.py +89 -0
  76. deepfos/boost/py_pandas.py +20 -0
  77. deepfos/cache.py +121 -0
  78. deepfos/config.py +6 -0
  79. deepfos/core/__init__.py +27 -0
  80. deepfos/core/cube/__init__.py +10 -0
  81. deepfos/core/cube/_base.py +462 -0
  82. deepfos/core/cube/constants.py +21 -0
  83. deepfos/core/cube/cube.py +408 -0
  84. deepfos/core/cube/formula.py +707 -0
  85. deepfos/core/cube/syscube.py +532 -0
  86. deepfos/core/cube/typing.py +7 -0
  87. deepfos/core/cube/utils.py +238 -0
  88. deepfos/core/dimension/__init__.py +11 -0
  89. deepfos/core/dimension/_base.py +506 -0
  90. deepfos/core/dimension/dimcreator.py +184 -0
  91. deepfos/core/dimension/dimension.py +472 -0
  92. deepfos/core/dimension/dimexpr.py +271 -0
  93. deepfos/core/dimension/dimmember.py +155 -0
  94. deepfos/core/dimension/eledimension.py +22 -0
  95. deepfos/core/dimension/filters.py +99 -0
  96. deepfos/core/dimension/sysdimension.py +168 -0
  97. deepfos/core/logictable/__init__.py +5 -0
  98. deepfos/core/logictable/_cache.py +141 -0
  99. deepfos/core/logictable/_operator.py +663 -0
  100. deepfos/core/logictable/nodemixin.py +673 -0
  101. deepfos/core/logictable/sqlcondition.py +609 -0
  102. deepfos/core/logictable/tablemodel.py +497 -0
  103. deepfos/db/__init__.py +36 -0
  104. deepfos/db/cipher.py +660 -0
  105. deepfos/db/clickhouse.py +191 -0
  106. deepfos/db/connector.py +195 -0
  107. deepfos/db/daclickhouse.py +171 -0
  108. deepfos/db/dameng.py +101 -0
  109. deepfos/db/damysql.py +189 -0
  110. deepfos/db/dbkits.py +358 -0
  111. deepfos/db/deepengine.py +99 -0
  112. deepfos/db/deepmodel.py +82 -0
  113. deepfos/db/deepmodel_kingbase.py +83 -0
  114. deepfos/db/edb.py +214 -0
  115. deepfos/db/gauss.py +83 -0
  116. deepfos/db/kingbase.py +83 -0
  117. deepfos/db/mysql.py +184 -0
  118. deepfos/db/oracle.py +131 -0
  119. deepfos/db/postgresql.py +192 -0
  120. deepfos/db/sqlserver.py +99 -0
  121. deepfos/db/utils.py +135 -0
  122. deepfos/element/__init__.py +89 -0
  123. deepfos/element/accounting.py +348 -0
  124. deepfos/element/apvlprocess.py +215 -0
  125. deepfos/element/base.py +398 -0
  126. deepfos/element/bizmodel.py +1269 -0
  127. deepfos/element/datatable.py +2467 -0
  128. deepfos/element/deep_pipeline.py +186 -0
  129. deepfos/element/deepconnector.py +59 -0
  130. deepfos/element/deepmodel.py +1806 -0
  131. deepfos/element/dimension.py +1254 -0
  132. deepfos/element/fact_table.py +427 -0
  133. deepfos/element/finmodel.py +1485 -0
  134. deepfos/element/journal.py +840 -0
  135. deepfos/element/journal_template.py +943 -0
  136. deepfos/element/pyscript.py +412 -0
  137. deepfos/element/reconciliation.py +553 -0
  138. deepfos/element/rolestrategy.py +243 -0
  139. deepfos/element/smartlist.py +457 -0
  140. deepfos/element/variable.py +756 -0
  141. deepfos/element/workflow.py +560 -0
  142. deepfos/exceptions/__init__.py +239 -0
  143. deepfos/exceptions/hook.py +86 -0
  144. deepfos/lazy.py +104 -0
  145. deepfos/lazy_import.py +84 -0
  146. deepfos/lib/__init__.py +0 -0
  147. deepfos/lib/_javaobj.py +366 -0
  148. deepfos/lib/asynchronous.py +879 -0
  149. deepfos/lib/concurrency.py +107 -0
  150. deepfos/lib/constant.py +39 -0
  151. deepfos/lib/decorator.py +310 -0
  152. deepfos/lib/deepchart.py +778 -0
  153. deepfos/lib/deepux.py +477 -0
  154. deepfos/lib/discovery.py +273 -0
  155. deepfos/lib/edb_lexer.py +789 -0
  156. deepfos/lib/eureka.py +156 -0
  157. deepfos/lib/filterparser.py +751 -0
  158. deepfos/lib/httpcli.py +106 -0
  159. deepfos/lib/jsonstreamer.py +80 -0
  160. deepfos/lib/msg.py +394 -0
  161. deepfos/lib/nacos.py +225 -0
  162. deepfos/lib/patch.py +92 -0
  163. deepfos/lib/redis.py +241 -0
  164. deepfos/lib/serutils.py +181 -0
  165. deepfos/lib/stopwatch.py +99 -0
  166. deepfos/lib/subtask.py +572 -0
  167. deepfos/lib/sysutils.py +703 -0
  168. deepfos/lib/utils.py +1003 -0
  169. deepfos/local.py +160 -0
  170. deepfos/options.py +670 -0
  171. deepfos/translation.py +237 -0
  172. deepfos-1.1.60.dist-info/METADATA +33 -0
  173. deepfos-1.1.60.dist-info/RECORD +175 -0
  174. deepfos-1.1.60.dist-info/WHEEL +5 -0
  175. deepfos-1.1.60.dist-info/top_level.txt +1 -0
@@ -0,0 +1,553 @@
1
+ from functools import cached_property
2
+ from typing import List, Dict, Any, Optional, Union, TYPE_CHECKING
3
+
4
+ from deepfos.api.models.reconciliation_engine import (
5
+ QueryColumnDataItem,
6
+ CanDoParam,
7
+ ElementBaseInfoParam,
8
+ AccountInfoParam,
9
+ ConfirmItem,
10
+ ReconciliationExecDto,
11
+ OffTaskItem,
12
+ OnTaskItem,
13
+ DeleteTaskItem,
14
+ ReconSignByHand,
15
+ CancelSignByHand,
16
+ CancelReconMatch,
17
+ ReconciliationExecCreate,
18
+ CancelItem,
19
+ DeleteDsItem
20
+ )
21
+ from deepfos.api.reconciliation_engine import ReconcilationAPI, ReconcilationmsAPI
22
+ from deepfos.element.base import ElementBase, SyncMeta
23
+ from deepfos.lib.asynchronous import future_property
24
+
25
+
26
+ __all__ = [
27
+ 'ReconciliationEngine',
28
+ 'AsyncReconciliationEngine',
29
+ 'ReconciliationMsEngine',
30
+ 'AsyncReconciliationMsEngine',
31
+ 'AccountInfoParam'
32
+ ]
33
+
34
+
35
+ class AsyncReconciliationEngine(ElementBase[ReconcilationAPI]):
36
+ """对账引擎-数据集"""
37
+
38
+ @future_property
39
+ async def _base_info(self) -> ElementBaseInfoParam:
40
+ """对账引擎的元素信息"""
41
+ api = await self.wait_for('async_api')
42
+ element_info = await self.wait_for('element_info')
43
+ return ElementBaseInfoParam(
44
+ elementName=self.element_name,
45
+ elementType=element_info.elementType,
46
+ folderId=element_info.folderId,
47
+ moduleId=api.module_id
48
+ )
49
+
50
+ async def extract_data(
51
+ self,
52
+ param: List[Union[AccountInfoParam, Dict]] = None,
53
+ cleanup: Optional[bool] = False,
54
+ auto_confirm: Optional[bool] = False,
55
+ batch_id: str = None,
56
+ batch_name: str = None
57
+ ) -> int:
58
+ """抽取业务数据
59
+
60
+ Args:
61
+ param: 执行参数
62
+ cleanup: 是否清理数据
63
+ auto_confirm: 是否执行完自动确认
64
+ batch_id: 执行批次ID
65
+ batch_name: 执行批次名称
66
+
67
+ .. admonition:: 示例
68
+
69
+ 1.以自定义数据选取参数执行
70
+
71
+ .. code-block:: python
72
+
73
+ auto_process = ReconciliationEngines('ds_bank')
74
+ auto_process.extract_data(param=[
75
+ {'code':'day','defaultValue':'day01',"valueType":1}
76
+ ])
77
+
78
+
79
+ 2.以默认参数执行
80
+
81
+ .. code-block:: python
82
+
83
+ auto_process.extract_data()
84
+
85
+ """
86
+ return await self.async_api.data_get.get_column_data(QueryColumnDataItem(
87
+ canDoParam=CanDoParam(isClean=cleanup, isConfirm=auto_confirm),
88
+ dsBatchId=batch_id,
89
+ dsBatchName=batch_name,
90
+ elementBaseInfoParamTable=self._base_info,
91
+ params=param or []
92
+ ))
93
+
94
+ async def confirm(self, *ids: str) -> Any:
95
+ """确认批次
96
+
97
+ Args:
98
+ ids: 未确认的批次id
99
+
100
+ .. admonition:: 示例
101
+
102
+ .. code-block:: python
103
+
104
+ auto_process = ReconciliationEngines('ds_bank')
105
+ auto_process.confirm('D20230413161618371', 'D20230413161615376')
106
+
107
+ """
108
+ return await self.async_api.data_get.confirm_ds_batch(ConfirmItem(
109
+ dsIds=','.join(ids),
110
+ elementBaseInfoParamData=self._base_info
111
+ ))
112
+
113
+ async def cancel(self, *ids: str) -> Any:
114
+ """取消批次
115
+
116
+ Args:
117
+ ids: 已确认的批次id
118
+
119
+ .. admonition:: 示例
120
+
121
+ .. code-block:: python
122
+
123
+ auto_process = ReconciliationEngines('ds_bank')
124
+ auto_process.cancel('D20230413161618371', 'D20230413161615376')
125
+
126
+ """
127
+ return await self.async_api.data_get.cancel_ds(CancelItem(
128
+ dsIds=','.join(ids),
129
+ elementBaseInfoParamData=self._base_info
130
+ ))
131
+
132
+ async def delete(self, *ids: str) -> Any:
133
+ """删除批次
134
+
135
+ Args:
136
+ ids: 未确认批次id
137
+
138
+ .. admonition:: 示例
139
+
140
+ .. code-block:: python
141
+
142
+ auto_process = ReconciliationEngines('ds_bank')
143
+ auto_process.delete('D20230413161618371', 'D20230413161615376')
144
+
145
+ """
146
+ return await self.async_api.data_get.delete_ds_batch(DeleteDsItem(
147
+ dsIds=','.join(ids),
148
+ elementBaseInfoParamData=self._base_info
149
+ ))
150
+
151
+
152
+ class ReconciliationEngine(AsyncReconciliationEngine, metaclass=SyncMeta):
153
+ synchronize = (
154
+ 'extract_data',
155
+ 'confirm',
156
+ 'cancel',
157
+ 'delete',
158
+ )
159
+ if TYPE_CHECKING:
160
+ def extract_data(
161
+ self,
162
+ param: List[AccountInfoParam, Dict] = None,
163
+ cleanup: Optional[bool] = False,
164
+ auto_confirm: Optional[bool] = False,
165
+ batch_id: str = None,
166
+ batch_name: str = None
167
+ ) -> int:
168
+ ...
169
+
170
+ def confirm(self, *ids: str) -> Any:
171
+ ...
172
+
173
+ def cancel(self, *ids: str) -> Any:
174
+ ...
175
+
176
+ def delete(self, *ids: str) -> Any:
177
+ ...
178
+
179
+
180
+ class AsyncReconciliationMsEngine(ElementBase[ReconcilationmsAPI]):
181
+ """对账引擎_数据集"""
182
+ @cached_property
183
+ def _base_info(self) -> ElementBaseInfoParam:
184
+ """对账引擎的元素信息"""
185
+ return ElementBaseInfoParam(
186
+ elementName=self.element_name,
187
+ elementType=self.element_info.elementType,
188
+ folderId=self.element_info.folderId,
189
+ moduleId=self.api.module_id
190
+ )
191
+
192
+ async def execute(
193
+ self,
194
+ pov: Dict[str, str],
195
+ params: AccountInfoParam = None,
196
+ task_id: str = None,
197
+ task_name: str = None
198
+ ) -> int:
199
+ """创建对账任务并执行
200
+
201
+ Args:
202
+ pov: 开启分块pov信息
203
+ params: 执行参数,创建必填
204
+ task_id: 对账任务id,不为空表示执行旧的对账
205
+ task_name: 对账任务名称,对账id为空,用来新建对账任务
206
+
207
+ .. admonition:: 示例
208
+
209
+ .. code-block:: python
210
+
211
+ auto_process = ReconciliationMsEngines('ms_3')
212
+ auto_process.execute(pov={'entity': "S001"})
213
+
214
+ See Also:
215
+ 如果需要分布执行创建和执行任务,可以使用:
216
+
217
+ - 创建任务: :meth:`create_task`
218
+ - 执行任务: :meth:`exec_task`
219
+
220
+ """
221
+ return await self.async_api.reconcil.reconciliation(ReconciliationExecDto(
222
+ elementBaseInfoParam=self._base_info,
223
+ params=params or [],
224
+ povParams=pov,
225
+ rcTaskId=task_id,
226
+ rcTaskName=task_name
227
+ ))
228
+
229
+ async def create_task(
230
+ self,
231
+ pov: Dict[str, str] = None,
232
+ auto_run: bool = False,
233
+ params: AccountInfoParam = None,
234
+ task_id: str = None,
235
+ task_name: str = None
236
+ ) -> int:
237
+ """创建对账任务
238
+
239
+ Args:
240
+ pov: 开启分块pov信息,开启必传
241
+ auto_run: 是否开启后自动执行
242
+ params: 执行参数,创建必填
243
+ task_id: 对账任务id,不为空表示执行旧的对账
244
+ task_name: 对账任务名称,对账id为空,用来新建对账任务
245
+
246
+ .. admonition:: 示例
247
+
248
+ .. code-block:: python
249
+
250
+ auto_process = ReconciliationMsEngines('ms_3')
251
+ auto_process.create_task(
252
+ pov={'entity': "S001"},
253
+ auto_run=False,
254
+ task_name="testc042301"
255
+ )
256
+
257
+ """
258
+ return await self.async_api.reconcil.create_task(ReconciliationExecCreate(
259
+ autoRunning=auto_run,
260
+ elementBaseInfoParam=self._base_info,
261
+ params=params or [],
262
+ povParams=pov,
263
+ rcTaskId=task_id,
264
+ rcTaskName=task_name
265
+ ))
266
+
267
+ async def exec_task(
268
+ self,
269
+ task_id: str,
270
+ pov: Dict[str, str] = None,
271
+ params: AccountInfoParam = None,
272
+ task_name: str = None
273
+ ) -> int:
274
+ """执行对账
275
+
276
+ Args:
277
+ pov: 开启分块pov信息,开启必传
278
+ params: 执行参数,创建必填
279
+ task_id: 对账任务id,不为空表示执行旧的对账
280
+ task_name: 对账任务名称,对账id为空,用来新建对账任务
281
+
282
+ .. admonition:: 示例
283
+
284
+ .. code-block:: python
285
+
286
+ auto_process = ReconciliationMsEngines('ms_3')
287
+ auto_process.exec_task('T20230423102835188')
288
+
289
+ See Also:
290
+ 如果想创建并执行对账任务,可以使用 :meth:'execute'
291
+
292
+ """
293
+ return await self.async_api.reconcil.exec_task(ReconciliationExecDto(
294
+ elementBaseInfoParam=self._base_info,
295
+ params=params or [],
296
+ povParams=pov,
297
+ rcTaskId=task_id,
298
+ rcTaskName=task_name
299
+ ))
300
+
301
+ async def close_task(self, *task_ids: str) -> Any:
302
+ """关闭对账任务
303
+
304
+ Args:
305
+ task_ids: 对账任务id
306
+
307
+ .. admonition:: 示例
308
+
309
+ .. code-block:: python
310
+
311
+ auto_process = ReconciliationMsEngines('ms_3')
312
+ auto_process.close_task("T20230417171442358")
313
+
314
+ """
315
+ return await self.async_api.reconcil.off_task(OffTaskItem(
316
+ rcTaskIds=list(task_ids),
317
+ reconElement=self._base_info
318
+ ))
319
+
320
+ async def open_task(self, task_id: str) -> Any:
321
+ """打开对账任务
322
+
323
+ Args:
324
+ task_id: 对账任务id
325
+
326
+ .. admonition:: 示例
327
+
328
+ .. code-block:: python
329
+
330
+ auto_process = ReconciliationMsEngines('ms_3')
331
+ auto_process.open_task("T20230417171442358")
332
+
333
+ """
334
+ return await self.async_api.reconcil.on_task(OnTaskItem(
335
+ rcTaskId=task_id,
336
+ reconElement=self._base_info
337
+ ))
338
+
339
+ async def delete_task(self, *task_ids: str) -> Any:
340
+ """删除对账任务
341
+
342
+ Args:
343
+ task_ids: 对账任务id
344
+
345
+ .. admonition:: 示例
346
+
347
+ .. code-block:: python
348
+
349
+ auto_process = ReconciliationMsEngines('ms_3')
350
+ auto_process.delete_task("T20230417171442358")
351
+
352
+ """
353
+ return await self.async_api.reconcil.delete_task(DeleteTaskItem(
354
+ rcTaskIds=list(task_ids),
355
+ reconElement=self._base_info
356
+ ))
357
+
358
+ async def mark_by_hand(
359
+ self,
360
+ task_id: str,
361
+ type: int,
362
+ reason: str,
363
+ base_data_ids: List[str] = None,
364
+ cpr_data_ids: List[str] = None,
365
+ description: str = None,
366
+ ) -> bool:
367
+ """手工标记对账集
368
+
369
+ Args:
370
+ task_id: 匹配批次id
371
+ type: 操作类型
372
+ reason: 原因
373
+ description: 说明
374
+ base_data_ids: 选择的基础数据ids
375
+ cpr_data_ids: 选择的对比数据集ids
376
+
377
+ Hint:
378
+ ``type`` 可选值如下
379
+
380
+ +------+------------+
381
+ | 参数 | 说明 |
382
+ +======+============+
383
+ | 4 | 手工匹配 |
384
+ +------+------------+
385
+ | 6 | 暂挂 |
386
+ +------+------------+
387
+ | 5 | 不参与匹配 |
388
+ +------+------------+
389
+
390
+
391
+ .. admonition:: 示例
392
+
393
+ .. code-block:: python
394
+
395
+ auto_process = ReconciliationMsEngines('ms_3')
396
+ auto_process.mark_by_hand(
397
+ 'T20230417181208780',
398
+ type='6',
399
+ reason='timing_difference',
400
+ base_data_ids=["08GTWH000002", "08GTWH000003"],
401
+ description='说明'
402
+ )
403
+
404
+ """
405
+ return await self.async_api.balance.mark_by_hand(ReconSignByHand(
406
+ baseDataIds=base_data_ids or [],
407
+ cprDataIds=cpr_data_ids or [],
408
+ rcTaskId=task_id,
409
+ description=description,
410
+ reason=reason,
411
+ reconElement=self._base_info,
412
+ type=str(type)
413
+ ))
414
+
415
+ async def cancel_by_hand(
416
+ self,
417
+ task_id: str,
418
+ type: int,
419
+ base_data_ids: List[str] = None,
420
+ cpr_data_ids: List[str] = None,
421
+ ) -> int:
422
+ """手工取消暂挂或者不参与匹配
423
+
424
+ Args:
425
+ task_id: 匹配批次id
426
+ type: 操作类型: 0 取消挂起 1 取消不参与匹配
427
+ base_data_ids: 选择的基础数据ids
428
+ cpr_data_ids: 选择的对比数据集ids
429
+
430
+ .. admonition:: 示例
431
+
432
+ .. code-block:: python
433
+
434
+ auto_process = ReconciliationMsEngines('ms_3')
435
+ auto_process.cancel_by_hand(
436
+ 'T20230417181208780',
437
+ type=0,
438
+ base_data_ids=["08GTWH000002", "08GTWH000003"],
439
+ )
440
+ """
441
+ return await self.async_api.balance.cancel_by_hand(CancelSignByHand(
442
+ baseDataIds=base_data_ids or [],
443
+ cprDataIds=cpr_data_ids or [],
444
+ rcTaskId=task_id,
445
+ reconElement=self._base_info,
446
+ type=type
447
+ ))
448
+
449
+ async def cancel_matched(
450
+ self,
451
+ task_id: str,
452
+ match_ids: List[str],
453
+ ) -> int:
454
+ """取消匹配
455
+
456
+ Args:
457
+ task_id: 匹配批次id
458
+ match_ids: 匹配id
459
+
460
+ .. admonition:: 示例
461
+
462
+ .. code-block:: python
463
+
464
+ auto_process = ReconciliationMsEngines('ms_3')
465
+ auto_process.cancel_recon_match(
466
+ 'T20230417181208780',
467
+ match_ids=["M000000033"]
468
+ )
469
+
470
+ """
471
+ return await self.async_api.balance.cancel_recon_match(CancelReconMatch(
472
+ matchIds=match_ids,
473
+ rcTaskId=task_id,
474
+ reconElement=self._base_info
475
+ ))
476
+
477
+
478
+ class ReconciliationMsEngine(AsyncReconciliationMsEngine, metaclass=SyncMeta):
479
+ synchronize = (
480
+ 'execute',
481
+ 'create_task',
482
+ 'exec_task',
483
+ 'close_task',
484
+ 'open_task',
485
+ 'delete_task',
486
+ 'mark_by_hand',
487
+ 'cancel_by_hand',
488
+ 'cancel_matched',
489
+ )
490
+ if TYPE_CHECKING: # pragma: no cover
491
+ def execute(
492
+ self,
493
+ pov: Dict[str, str],
494
+ params: AccountInfoParam = None,
495
+ task_id: str = None,
496
+ task_name: str = None
497
+ ) -> int:
498
+ ...
499
+
500
+ def create_task(
501
+ self,
502
+ pov: Dict[str, str] = None,
503
+ auto_run: bool = False,
504
+ params: AccountInfoParam = None,
505
+ task_id: str = None,
506
+ task_name: str = None
507
+ ) -> int:
508
+ ...
509
+
510
+ def exec_task(
511
+ self,
512
+ task_id: str,
513
+ pov: Dict[str, str] = None,
514
+ params: AccountInfoParam = None,
515
+ task_name: str = None
516
+ ) -> int:
517
+ ...
518
+
519
+ def close_task(self, *task_ids: str) -> Any:
520
+ ...
521
+
522
+ def open_task(self, task_id: str) -> Any:
523
+ ...
524
+
525
+ def delete_task(self, *task_ids: str) -> Any:
526
+ ...
527
+
528
+ def mark_by_hand(
529
+ self,
530
+ task_id: str,
531
+ type: int,
532
+ reason: str,
533
+ base_data_ids: List[str] = None,
534
+ cpr_data_ids: List[str] = None,
535
+ description: str = None,
536
+ ) -> bool:
537
+ ...
538
+
539
+ def cancel_by_hand(
540
+ self,
541
+ task_id: str,
542
+ type: int,
543
+ base_data_ids: List[str] = None,
544
+ cpr_data_ids: List[str] = None,
545
+ ) -> int:
546
+ ...
547
+
548
+ def cancel_matched(
549
+ self,
550
+ task_id: str,
551
+ match_ids: List[str],
552
+ ) -> int:
553
+ ...