This commit is contained in:
njdaoyehu 2025-04-23 15:55:51 +08:00
parent 2749a840ec
commit f95d182632
21 changed files with 159 additions and 138 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
var B=Object.defineProperty;var c=Object.getOwnPropertySymbols;var h=Object.prototype.hasOwnProperty,b=Object.prototype.propertyIsEnumerable;var _=(o,l,e)=>l in o?B(o,l,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[l]=e,u=(o,l)=>{for(var e in l||(l={}))h.call(l,e)&&_(o,e,l[e]);if(c)for(var e of c(l))b.call(l,e)&&_(o,e,l[e]);return o};var P=(o,l)=>{var e={};for(var s in o)h.call(o,s)&&l.indexOf(s)<0&&(e[s]=o[s]);if(o!=null&&c)for(var s of c(o))l.indexOf(s)<0&&b.call(o,s)&&(e[s]=o[s]);return e};var f=(o,l,e)=>new Promise((s,p)=>{var i=r=>{try{n(e.next(r))}catch(m){p(m)}},d=r=>{try{n(e.throw(r))}catch(m){p(m)}},n=r=>r.done?s(r.value):Promise.resolve(r.value).then(i,d);n((e=e.apply(o,l)).next())});import{a as x,B as F}from"./index-8a6826ba.js";import{u as M,B as k}from"./useForm-baba730a.js";import{d as R,f as v,c as W,u as t,Z as H,a4 as L,a5 as X,k as Y,a9 as O}from"./vue-72a104e4.js";import{_ as S}from"./index.js";import"./antd-0679333d.js";import"./useWindowSizeFn-1db11f4f.js";import"./copyTextToClipboard-3ca69a78.js";const U=R({__name:"modal",emits:["success","register"],setup(o,{emit:l}){const e=v(),s=v(!0),p=l,i=W(()=>t(s)?"编辑":"新增"),[d,{closeModal:n,setModalProps:r}]=x(a=>f(this,null,function*(){yield C(),r({confirmLoading:!1}),s.value=!!(a!=null&&a.isUpdate),e.value=a==null?void 0:a.record,yield I(u({},a.record))})),m=[{colProps:{span:24},field:"sn",label:"序号",componentProps:{allowClear:!1,placeholder:"序号"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入序号!"}]},{colProps:{span:24},field:"code",label:"预埋件编号",componentProps:{allowClear:!1,placeholder:"预埋件编号"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入预埋件编号!"}]},{colProps:{span:24},field:"type",label:"类型",componentProps:{allowClear:!1,placeholder:"类型"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入类型!"}]},{colProps:{span:24},field:"x",label:"X(mm)",componentProps:{allowClear:!1,placeholder:"X(mm)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入X(mm)"}]},{colProps:{span:24},field:"y",label:"Y(mm)",componentProps:{allowClear:!1,placeholder:"Y(mm)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入Y(mm)"}]},{colProps:{span:24},field:"w",label:"W(mm)",componentProps:{allowClear:!1,placeholder:"W(mm)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入W(mm)"}]},{colProps:{span:24},field:"h",label:"H(mm)",componentProps:{allowClear:!1,placeholder:"H(mm)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入H(mm)"}]},{colProps:{span:24},field:"center",label:"Center(m)",componentProps:{allowClear:!1,placeholder:"Center(m)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入Center(m)"}]}],[w,{resetFields:C,setFieldsValue:I,validate:V}]=M({labelWidth:90,schemas:m,showActionButtonGroup:!1});function y(){return f(this,null,function*(){try{const a=yield V();r({confirmLoading:!0});const g=P(a,[]);n();const q=Object.assign({},u(u({},t(e)),g));p("success",q)}catch(a){}finally{r({confirmLoading:!1})}})}return(a,g)=>(H(),L(t(F),O(a.$attrs,{onRegister:t(d),closable:!1,showFooter:"",title:i.value,width:"400px",onOk:y}),{default:X(()=>[Y(t(k),{onRegister:t(w)},null,8,["onRegister"])]),_:1},16,["onRegister","title"]))}});const D=S(U,[["__scopeId","data-v-934beb3b"]]);export{D as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
var B=Object.defineProperty;var p=Object.getOwnPropertySymbols;var h=Object.prototype.hasOwnProperty,P=Object.prototype.propertyIsEnumerable;var g=(o,l,e)=>l in o?B(o,l,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[l]=e,i=(o,l)=>{for(var e in l||(l={}))h.call(l,e)&&g(o,e,l[e]);if(p)for(var e of p(l))P.call(l,e)&&g(o,e,l[e]);return o};var v=(o,l)=>{var e={};for(var s in o)h.call(o,s)&&l.indexOf(s)<0&&(e[s]=o[s]);if(o!=null&&p)for(var s of p(o))l.indexOf(s)<0&&P.call(o,s)&&(e[s]=o[s]);return e};var f=(o,l,e)=>new Promise((s,m)=>{var u=r=>{try{n(e.next(r))}catch(c){m(c)}},d=r=>{try{n(e.throw(r))}catch(c){m(c)}},n=r=>r.done?s(r.value):Promise.resolve(r.value).then(u,d);n((e=e.apply(o,l)).next())});import{a as x,B as F}from"./index-8a6826ba.js";import{u as M,B as k}from"./useForm-baba730a.js";import{d as R,f as w,c as W,u as t,Z as H,a4 as L,a5 as X,k as Y,a9 as O}from"./vue-72a104e4.js";import{_ as S}from"./index.js";import"./antd-0679333d.js";import"./useWindowSizeFn-1db11f4f.js";import"./copyTextToClipboard-3ca69a78.js";const U=R({__name:"modal",emits:["success","register"],setup(o,{emit:l}){const e=w(),s=w(!0),m=l,u=W(()=>t(s)?"编辑":"新增"),[d,{closeModal:n,setModalProps:r}]=x(a=>f(this,null,function*(){yield b(),r({confirmLoading:!1}),s.value=!!(a!=null&&a.isUpdate),e.value=a==null?void 0:a.record,yield y(i({},a.record))})),c=[{colProps:{span:24},field:"code",label:"预埋件编号",componentProps:{allowClear:!1,placeholder:"预埋件编号"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入预埋件编号!"}]},{colProps:{span:24},field:"type",label:"类型",componentProps:{allowClear:!1,placeholder:"类型"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入类型!"}]},{colProps:{span:24},field:"x",label:"X(mm)",componentProps:{allowClear:!1,placeholder:"X(mm)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入X(mm)"}]},{colProps:{span:24},field:"y",label:"Y(mm)",componentProps:{allowClear:!1,placeholder:"Y(mm)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入Y(mm)"}]},{colProps:{span:24},field:"w",label:"W(mm)",componentProps:{allowClear:!1,placeholder:"W(mm)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入W(mm)"}]},{colProps:{span:24},field:"h",label:"H(mm)",componentProps:{allowClear:!1,placeholder:"H(mm)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入H(mm)"}]},{colProps:{span:24},field:"center",label:"Center(m)",componentProps:{allowClear:!1,placeholder:"Center(m)"},component:"Input",defaultValue:void 0,rules:[{required:!0,message:"请输入Center(m)"}]}],[C,{resetFields:b,setFieldsValue:y,validate:I}]=M({labelWidth:90,schemas:c,showActionButtonGroup:!1});function V(){return f(this,null,function*(){try{const a=yield I();r({confirmLoading:!0});const _=v(a,[]);n();const q=Object.assign({},i(i({},t(e)),_));m("success",q)}catch(a){}finally{r({confirmLoading:!1})}})}return(a,_)=>(H(),L(t(F),O(a.$attrs,{onRegister:t(d),closable:!1,showFooter:"",title:u.value,width:"400px",onOk:V}),{default:X(()=>[Y(t(k),{onRegister:t(C)},null,8,["onRegister"])]),_:1},16,["onRegister","title"]))}});const D=S(U,[["__scopeId","data-v-c3887645"]]);export{D as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -9,9 +9,7 @@ using System.Text.RegularExpressions;
using System.Text.Unicode; using System.Text.Unicode;
using System.Threading.Tasks; using System.Threading.Tasks;
using detect.gui.Models; using detect.gui.Models;
using detect.gui.VWMS;
using PaddleOCRSharp; using PaddleOCRSharp;
using Splat;
namespace detect.gui.Services; namespace detect.gui.Services;
@ -86,13 +84,16 @@ public class OCRService
return new ApiResponse<string?>(0, "success", result); return new ApiResponse<string?>(0, "success", result);
} }
public Task<string> ImportByOCR(string base64ImageString, string? wallCode) public Task<string> ImportByOCR(string base64ImageString)
{ {
return Task.Run(() => return Task.Run(() =>
{ {
var fileName = DateTime.Now.ToString("yyyyMMddHHmmss"); // var fileName = DateTime.Now.ToString("yyyyMMddHHmmss");
fileName = GetImage(base64ImageString, fileName); // fileName = GetImage(base64ImageString, fileName);
var result = _engine?.DetectText(new Bitmap(fileName)); // var result = _engine?.DetectText(new Bitmap(fileName));
var image = GetImage(base64ImageString);
if (image is null) return "";
var result = _engine?.DetectText(image);
if (result == null) return ""; if (result == null) return "";
var resultList = JsonHelper.DeserializeObject<List<OCRResultEntity>>(result.JsonText); var resultList = JsonHelper.DeserializeObject<List<OCRResultEntity>>(result.JsonText);
resultList = resultList.Select((d, index) => resultList = resultList.Select((d, index) =>
@ -100,29 +101,49 @@ public class OCRService
d.Index = index; d.Index = index;
return d; return d;
}).ToList(); }).ToList();
var items = resultList.Where(d => !string.IsNullOrEmpty(d.Text) && d.Text.ToUpper().Contains("定位信息表")).ToList(); // var items = resultList.Where(d => !string.IsNullOrEmpty(d.Text) && d.Text.ToUpper().Contains("定位信息表")).ToList();
if (items.Any() && !string.IsNullOrEmpty(items.First().Text)) // if (items.Any() && !string.IsNullOrEmpty(items.First().Text))
{ // {
wallCode = items.First().Text!.Replace("定位信息表", "").Replace("预埋件", "").Replace("墙", ""); // wallCode = items.First().Text!.Replace("定位信息表", "").Replace("预埋件", "").Replace("墙", "");
} // }
// var tempList = resultList.Where(d => !string.IsNullOrEmpty(d.Text) && // var tempList = new List<OCRResultEntity>();
// (d.Text.ToUpper().Contains("PT") || // if (!string.IsNullOrWhiteSpace(wallCode))
// d.Text.ToUpper().Contains("VBP") || // {
// d.Text.ToUpper().Contains("BSC"))) // tempList = resultList.Where(d => !string.IsNullOrEmpty(d.Text) && d.Text.ToUpper().Contains(wallCode.ToUpper())).ToList();
// .ToList(); // }
var tempList = new List<OCRResultEntity>(); // else
if (wallCode != null) // {
{ var tempList = resultList.Where(d => !string.IsNullOrEmpty(d.Text) &&
tempList = resultList.Where(d => !string.IsNullOrEmpty(d.Text) && d.Text.ToUpper().Contains(wallCode.ToUpper())).ToList(); (d.Text.ToUpper().Contains("PA") ||
} d.Text.ToUpper().Contains("PB") ||
else d.Text.ToUpper().Contains("PC") ||
{ d.Text.ToUpper().Contains("PD") ||
tempList = resultList.Where(d => !string.IsNullOrEmpty(d.Text) && d.Text.ToUpper().Contains("PE") ||
(d.Text.ToUpper().Contains("P") || d.Text.ToUpper().Contains("PF") ||
d.Text.ToUpper().Contains("PG") ||
d.Text.ToUpper().Contains("PH") ||
d.Text.ToUpper().Contains("PI") ||
d.Text.ToUpper().Contains("PJ") ||
d.Text.ToUpper().Contains("PK") ||
d.Text.ToUpper().Contains("PL") ||
d.Text.ToUpper().Contains("PM") ||
d.Text.ToUpper().Contains("PN") ||
d.Text.ToUpper().Contains("PO") ||
d.Text.ToUpper().Contains("PP") ||
d.Text.ToUpper().Contains("PO") ||
d.Text.ToUpper().Contains("PR") ||
d.Text.ToUpper().Contains("PS") ||
d.Text.ToUpper().Contains("PT") ||
d.Text.ToUpper().Contains("PU") ||
d.Text.ToUpper().Contains("PV") ||
d.Text.ToUpper().Contains("PW") ||
d.Text.ToUpper().Contains("PX") ||
d.Text.ToUpper().Contains("PY") ||
d.Text.ToUpper().Contains("PZ") ||
d.Text.ToUpper().Contains("VB") || d.Text.ToUpper().Contains("VB") ||
d.Text.ToUpper().Contains("BS"))) d.Text.ToUpper().Contains("BS")))
.ToList(); .ToList();
} // }
var data = new List<dynamic>(); var data = new List<dynamic>();
foreach (var item in tempList) foreach (var item in tempList)
{ {
@ -149,8 +170,14 @@ public class OCRService
h = type; h = type;
} }
} }
else if (type.Contains('x', StringComparison.CurrentCultureIgnoreCase))
{
w = type.Split("x")[0];
h = type.Split("x")[1];
}
else else
continue; continue;
// } // }
// else // else
// { // {
@ -159,6 +186,7 @@ public class OCRService
// } // }
data.Add(new data.Add(new
{ {
sn = ReplaceChars(resultList[item.Index - 1].Text),
code = ReplaceChars(resultList[item.Index].Text), code = ReplaceChars(resultList[item.Index].Text),
type = ReplaceChars(resultList[item.Index + 1].Text), type = ReplaceChars(resultList[item.Index + 1].Text),
x = ReplaceChars(resultList[item.Index + 2].Text), x = ReplaceChars(resultList[item.Index + 2].Text),
@ -173,17 +201,18 @@ public class OCRService
} }
catch catch
{ {
data.Add(new // data.Add(new
{ // {
code = "", // sn = "",
type = "", // code = "",
x = "0", // type = "",
y = "0", // x = "0",
center = "0", // y = "0",
w = "0", // center = "0",
h = "0", // w = "0",
angle = "0", // h = "0",
}); // angle = "0",
// });
} }
} }
@ -200,33 +229,33 @@ public class OCRService
return string.IsNullOrEmpty(text) ? "" : text.Replace("\u00d7", "x").Replace("_", "").Replace(",", "").Replace(":", "").Replace(";", "").Replace(" ", "").Replace("", ""); return string.IsNullOrEmpty(text) ? "" : text.Replace("\u00d7", "x").Replace("_", "").Replace(",", "").Replace(":", "").Replace(";", "").Replace(" ", "").Replace("", "");
} }
private string GetImage(string base64ImageString, string fileName) private Image? GetImage(string base64ImageString)
{ {
var imageType = System.Drawing.Imaging.ImageFormat.Gif; var imageType = System.Drawing.Imaging.ImageFormat.Gif;
if (base64ImageString.IndexOf("data:image/jpeg", StringComparison.Ordinal) >= 0) if (base64ImageString.IndexOf("data:image/jpeg", StringComparison.Ordinal) >= 0)
{ {
imageType = System.Drawing.Imaging.ImageFormat.Jpeg; imageType = System.Drawing.Imaging.ImageFormat.Jpeg;
base64ImageString = base64ImageString.Replace("data:image/jpeg;base64,", ""); base64ImageString = base64ImageString.Replace("data:image/jpeg;base64,", "");
fileName += ".jpg"; // fileName += ".jpg";
} }
if (base64ImageString.IndexOf("data:image/png", StringComparison.Ordinal) >= 0) if (base64ImageString.IndexOf("data:image/png", StringComparison.Ordinal) >= 0)
{ {
imageType = System.Drawing.Imaging.ImageFormat.Png; imageType = System.Drawing.Imaging.ImageFormat.Png;
base64ImageString = base64ImageString.Replace("data:image/png;base64,", ""); base64ImageString = base64ImageString.Replace("data:image/png;base64,", "");
fileName += ".png"; // fileName += ".png";
} }
if (base64ImageString.IndexOf("data:image/bmp", StringComparison.Ordinal) >= 0) if (base64ImageString.IndexOf("data:image/bmp", StringComparison.Ordinal) >= 0)
{ {
imageType = System.Drawing.Imaging.ImageFormat.Bmp; imageType = System.Drawing.Imaging.ImageFormat.Bmp;
base64ImageString = base64ImageString.Replace("data:image/bmp;base64,", ""); base64ImageString = base64ImageString.Replace("data:image/bmp;base64,", "");
fileName += ".bmp"; // fileName += ".bmp";
} }
if (Equals(imageType, System.Drawing.Imaging.ImageFormat.Gif)) if (Equals(imageType, System.Drawing.Imaging.ImageFormat.Gif))
{ {
return ""; return null;
} }
try try
@ -234,19 +263,18 @@ public class OCRService
var imageBytes = Convert.FromBase64String(base64ImageString.Replace("data:image/jpeg;base64,", "")); var imageBytes = Convert.FromBase64String(base64ImageString.Replace("data:image/jpeg;base64,", ""));
using var ms = new MemoryStream(imageBytes); using var ms = new MemoryStream(imageBytes);
var image = System.Drawing.Image.FromStream(ms); var image = System.Drawing.Image.FromStream(ms);
using (var bmpStream = new MemoryStream()) using var bmpStream = new MemoryStream();
{
image.Save(bmpStream, imageType); image.Save(bmpStream, imageType);
var bmpBytes = bmpStream.ToArray(); // var bmpBytes = bmpStream.ToArray();
File.WriteAllBytes(fileName, bmpBytes); // File.WriteAllBytes(fileName, bmpBytes);
}
image.Dispose(); return image;
return fileName; // image.Dispose();
// return fileName;
} }
catch catch
{ {
return ""; return null;
} }
} }

View File

@ -1,17 +1,9 @@
using System; using System.Threading.Tasks;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
using System.Threading.Tasks;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.Notifications; using Avalonia.Controls.Notifications;
using Avalonia.Threading; using Avalonia.Threading;
using detect.gui.VWMS; using detect.gui.VWMS;
using detect.gui.VWS; using detect.gui.VWS;
using OfficeOpenXml;
using Splat; using Splat;
using WebViewControl; using WebViewControl;
@ -21,55 +13,55 @@ public class WebViewService(MainWindow? w)
{ {
public MainWindow? Self { get; set; } = w; public MainWindow? Self { get; set; } = w;
[Obsolete("过时的")] // [Obsolete("过时的")]
public async Task<string?> ImportExcel() // public async Task<string?> ImportExcel()
{ // {
var dialog = new OpenFileDialog // var dialog = new OpenFileDialog
{ // {
Title = "打开文件", // Title = "打开文件",
AllowMultiple = false, // AllowMultiple = false,
Filters = // Filters =
[ // [
new FileDialogFilter { Name = "Excel Files", Extensions = { "*.xls; *.xlsx" } } // new FileDialogFilter { Name = "Excel Files", Extensions = { "*.xls; *.xlsx" } }
] // ]
}; // };
var result = await dialog.ShowAsync(Self!); // var result = await dialog.ShowAsync(Self!);
if (result is not { Length: 1 }) return null; // if (result is not { Length: 1 }) return null;
try // try
{ // {
return ConvertExcelToJson(result[0]); // return ConvertExcelToJson(result[0]);
} // }
catch // catch
{ // {
return null; // return null;
} // }
} // }
public static string ConvertExcelToJson(string excelFilePath) // public static string ConvertExcelToJson(string excelFilePath)
{ // {
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
var fileInfo = new FileInfo(excelFilePath); // var fileInfo = new FileInfo(excelFilePath);
using var package = new ExcelPackage(fileInfo); // using var package = new ExcelPackage(fileInfo);
var worksheet = package.Workbook.Worksheets[0]; // var worksheet = package.Workbook.Worksheets[0];
var rowCount = worksheet.Dimension.Rows; // var rowCount = worksheet.Dimension.Rows;
var colCount = worksheet.Dimension.Columns; // var colCount = worksheet.Dimension.Columns;
//
var data = new List<Dictionary<string, object>>(); // var data = new List<Dictionary<string, object>>();
var headers = Enumerable.Range(1, colCount) // var headers = Enumerable.Range(1, colCount)
.Select(col => worksheet.Cells[1, col].Text) // .Select(col => worksheet.Cells[1, col].Text)
.ToList(); // .ToList();
for (var row = 2; row <= rowCount; row++) // for (var row = 2; row <= rowCount; row++)
{ // {
var rowData = new Dictionary<string, object>(); // var rowData = new Dictionary<string, object>();
for (var col = 1; col <= colCount; col++) // for (var col = 1; col <= colCount; col++)
{ // {
rowData[headers[col - 1]] = worksheet.Cells[row, col].Text; // rowData[headers[col - 1]] = worksheet.Cells[row, col].Text;
} // }
//
data.Add(rowData); // data.Add(rowData);
} // }
return JsonSerializer.Serialize(data, new JsonSerializerOptions { WriteIndented = true, Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) }); // return JsonSerializer.Serialize(data, new JsonSerializerOptions { WriteIndented = true, Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) });
} // }
public Task SetIsLoading(bool isLoading) public Task SetIsLoading(bool isLoading)
{ {

View File

@ -1,12 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport> <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest> <ApplicationManifest>app.manifest</ApplicationManifest>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault> <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64</Platforms>
<ApplicationIcon>Assets\logo.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -32,7 +33,6 @@
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="OfficeOpenXml.Extension.AspNetCore" Version="1.0.0" />
<PackageReference Include="PaddleOCRSharp" Version="4.4.0.2" /> <PackageReference Include="PaddleOCRSharp" Version="4.4.0.2" />
<PackageReference Include="RestSharp" Version="112.0.0" /> <PackageReference Include="RestSharp" Version="112.0.0" />
<PackageReference Include="Serilog" Version="4.1.0" /> <PackageReference Include="Serilog" Version="4.1.0" />
@ -40,7 +40,6 @@
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" /> <PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="7.0.0" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="7.0.0" />
<PackageReference Include="Tesseract" Version="5.2.0" />
</ItemGroup> </ItemGroup>

View File

@ -6,6 +6,7 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACommonBrowserAdapter_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff4f16e8c3bfe1b303dac9ad0491e3142f9d145ffbd9eaf32f291d9bb6cb31f_003FCommonBrowserAdapter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACommonBrowserAdapter_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff4f16e8c3bfe1b303dac9ad0491e3142f9d145ffbd9eaf32f291d9bb6cb31f_003FCommonBrowserAdapter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AControl_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff963a2a29ea2bb2d4ad8737293b45c4edbd94e55219dc42cf68343d6d91d9_003FControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AControl_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff963a2a29ea2bb2d4ad8737293b45c4edbd94e55219dc42cf68343d6d91d9_003FControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AControl_002Ecs_002Fl_003AC_0021_003FUsers_003Fxiongwei_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff963a2a29ea2bb2d4ad8737293b45c4edbd94e55219dc42cf68343d6d91d9_003FControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AControl_002Ecs_002Fl_003AC_0021_003FUsers_003Fxiongwei_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff963a2a29ea2bb2d4ad8737293b45c4edbd94e55219dc42cf68343d6d91d9_003FControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AConvert_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F2832e8c2b81f4641b3863f406ce3a519c90938_003Fa7_003Fbafa7f7b_003FConvert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AConvert_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb2b917c507d64d0980727dbdd83b6585c8f8a0_003Fae_003F21158426_003FConvert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AConvert_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb2b917c507d64d0980727dbdd83b6585c8f8a0_003Fae_003F21158426_003FConvert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADbContext_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Faacc74311ca994f12b71cddb22241be9d6654c65e94f5985c5488dee396916f_003FDbContext_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADbContext_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Faacc74311ca994f12b71cddb22241be9d6654c65e94f5985c5488dee396916f_003FDbContext_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADependencyResolverMixins_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fca0d4592dc494bbaa872fd9db942335922638_003Ff9_003Fb0105fc3_003FDependencyResolverMixins_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADependencyResolverMixins_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fca0d4592dc494bbaa872fd9db942335922638_003Ff9_003Fb0105fc3_003FDependencyResolverMixins_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
@ -29,6 +30,7 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AJsonStringEnumConverter_002Ecs_002Fl_003AC_0021_003FUsers_003Fxiongwei_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fe8fd44bb4fe5af449849853612f32962e78c0e82a7b6a4307a7bcae61a547a_003FJsonStringEnumConverter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AJsonStringEnumConverter_002Ecs_002Fl_003AC_0021_003FUsers_003Fxiongwei_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fe8fd44bb4fe5af449849853612f32962e78c0e82a7b6a4307a7bcae61a547a_003FJsonStringEnumConverter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_00601_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F2832e8c2b81f4641b3863f406ce3a519c90938_003F91_003Ff40bad6e_003FList_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_00601_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F2832e8c2b81f4641b3863f406ce3a519c90938_003F91_003Ff40bad6e_003FList_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ALocator_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fcf54cc1573c8f4a376437dc7b76dc8161cde5af828e4b880c5826778c7de6ae5_003FLocator_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ALocator_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fcf54cc1573c8f4a376437dc7b76dc8161cde5af828e4b880c5826778c7de6ae5_003FLocator_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMethodBaseInvoker_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F2832e8c2b81f4641b3863f406ce3a519c90938_003F8d_003Fd2910eb2_003FMethodBaseInvoker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMethodBaseInvoker_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fd882146b4f265f10bcbec2663fce248db9ffec5fa1aeaf76e32a11ba5eafcd6_003FMethodBaseInvoker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMethodBaseInvoker_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fd882146b4f265f10bcbec2663fce248db9ffec5fa1aeaf76e32a11ba5eafcd6_003FMethodBaseInvoker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANameScopeExtensions_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F262340175512b8eb1fbf3ba15178a24384aa0ef6c1e268ed6ca51d5c249e2_003FNameScopeExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANameScopeExtensions_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F262340175512b8eb1fbf3ba15178a24384aa0ef6c1e268ed6ca51d5c249e2_003FNameScopeExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AReactiveCommandBase_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fd8c4af3416758fd750ab8cf4e2117d76fd3e73c9259c1517e228c75cd49fe_003FReactiveCommandBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AReactiveCommandBase_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fd8c4af3416758fd750ab8cf4e2117d76fd3e73c9259c1517e228c75cd49fe_003FReactiveCommandBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>