IsolatedArea.cs
2.98 KB
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
using System;
using System.Collections.Generic;
using System.Linq;
using Aspose.BarCode;
using Newtonsoft.Json;
using Sungero.Core;
using Sungero.Docflow;
using Sungero.Docflow.Structures.Module;
namespace Sungero.Docflow.Isolated.BarcodeParser
{
public class Parser
{
/// <summary>
/// Поиск штрихкодов в документе.
/// </summary>
/// <param name="document">Документ.</param>
/// <returns>Список распознанных штрихкодов.</returns>
/// <remarks>
/// Поиск штрихкодов осуществляется только на первой странице документа.
/// Формат штрихкода: Code128.
/// </remarks>
public virtual List<string> GetDocumentBarcodes(System.IO.Stream document)
{
var barcodes = new List<string>();
try
{
var barcodeReader = AsposeExtensions.BarcodeReader.Create();
barcodes = barcodeReader.Extract(document, Aspose.BarCode.BarCodeRecognition.DecodeType.Code128);
}
catch (AsposeExtensions.BarcodeReaderException e)
{
Logger.Error(e.Message);
}
return barcodes;
}
/// <summary>
/// Получение ИД документов из списка штрихкодов.
/// </summary>
/// <param name="barcodes">Список штрихкодов.</param>
/// <param name="formattedTenantId">Имя тенанта в формате, нужном при подстановке в штрих-код.</param>
/// <returns>Список распознанных ИД документа.</returns>
public virtual List<long> ParseDocumentIds(List<string> barcodes, string formattedTenantId)
{
var documentIds = new List<long>();
var ourBarcodes = barcodes.Where(b => b.Contains(formattedTenantId));
foreach (var barcode in ourBarcodes)
{
var documentId = this.ParseDocumentId(barcode, formattedTenantId);
if (documentId.HasValue)
documentIds.Add(documentId.Value);
}
return documentIds;
}
/// <summary>
/// Получение ИД документа из штрихкода.
/// </summary>
/// <param name="barcode">Штрихкод.</param>
/// <param name="formattedTenantId">Имя тенанта в формате, нужном при подстановке в штрих-код.</param>
/// <returns>Распознанный ИД документа.</returns>
/// <remarks>
/// Ожидается, что штрихкод имеет формат "id тенанта - id документа".
/// </remarks>
public virtual long? ParseDocumentId(string barcode, string formattedTenantId)
{
var lastBarcodeElement = barcode.Split(new string[] { " - ", "-" }, StringSplitOptions.None).Last();
long documentId;
if (!long.TryParse(lastBarcodeElement, out documentId))
return null;
return documentId;
}
}
}