Skip to content

Commit b50dfee

Browse files
author
linzhijun
committed
fix
1 parent 9df2015 commit b50dfee

File tree

9 files changed

+125
-64
lines changed

9 files changed

+125
-64
lines changed

csharp/ToolGood.Algorithm.WebAssembly/Program.cs

Lines changed: 95 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace ToolGood.Algorithm.WebAssembly
22
{
33
using Microsoft.JSInterop;
4+
using System.Text;
45
using System.Text.Json;
56
using ToolGood.Algorithm;
67
using ToolGood.Algorithm.Enums;
@@ -11,29 +12,6 @@ private static void Main(string[] args)
1112
{
1213
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
1314
}
14-
[JSInvokable]
15-
public static string GetErrorMessage(string exp, string def = null, string data = null, string option = null)
16-
{
17-
AlgorithmEngine ae;
18-
if (option == null) {
19-
ae = new AlgorithmEngine();
20-
} else {
21-
var ops = JsonSerializer.Deserialize<Dictionary<string, object>>(option);
22-
ae = new AlgorithmEngine(bool.Parse(ops["IgnoreCase"].ToString()));
23-
ae.UseExcelIndex = bool.Parse(ops["UseExcelIndex"].ToString());
24-
ae.UseTempDict = bool.Parse(ops["UseTempDict"].ToString());
25-
ae.UseLocalTime = bool.Parse(ops["UseLocalTime"].ToString());
26-
ae.DistanceUnit = (DistanceUnitType)(int.Parse(ops["DistanceUnit"].ToString()));
27-
ae.AreaUnit = (AreaUnitType)(int.Parse(ops["AreaUnit"].ToString()));
28-
ae.VolumeUnit = (VolumeUnitType)(int.Parse(ops["VolumeUnit"].ToString()));
29-
ae.MassUnit = (MassUnitType)(int.Parse(ops["MassUnit"].ToString()));
30-
}
31-
if (data != null) {
32-
ae.AddParameterFromJson(data);
33-
}
34-
ae.TryEvaluate(exp,def);
35-
return ae.LastError;
36-
}
3715

3816
[JSInvokable]
3917
public static string TryEvaluateString(string exp, string def = null, string data = null, string option = null)
@@ -55,27 +33,45 @@ public static string TryEvaluateString(string exp, string def = null, string dat
5533
if (data != null) {
5634
ae.AddParameterFromJson(data);
5735
}
36+
Dictionary<string, object> result = new Dictionary<string, object>();
37+
result["parse"] = false;
38+
result["useDef"] = false;
39+
result["error"] = null;
5840
try {
5941
if (ae.Parse(exp)) {
42+
result["parse"] = true;
6043
var obj = ae.Evaluate();
6144
if (obj.IsNull) {
62-
return null;
45+
result["result"] = null;
46+
return JsonSerializer.Serialize(result);
6347
}
6448
if (obj.IsError) {
65-
return def;
49+
result["result"] = def;
50+
result["useDef"] = true;
51+
result["error"] = obj.ErrorMsg;
52+
return JsonSerializer.Serialize(result);
6653
}
6754
if (obj.Type == OperandType.DATE) {
68-
return obj.DateValue.ToString();
55+
result["result"] = obj.DateValue.ToString();
56+
result["error"] = ae.LastError;
57+
return JsonSerializer.Serialize(result);
6958
}
7059
obj = obj.ToText("It can't be converted to string!");
71-
return obj.TextValue;
60+
result["result"] = obj.TextValue;
61+
return JsonSerializer.Serialize(result);
7262
}
73-
} catch { }
74-
return def;
63+
result["error"] = "Parameter exp invalid !";
64+
} catch (Exception ex) {
65+
result["error"] = ex.Message;
66+
}
67+
result["useDef"] = true;
68+
result["result"] = def;
69+
return JsonSerializer.Serialize(result);
7570
}
7671

72+
7773
[JSInvokable]
78-
public static decimal TryEvaluateNumber(string exp, decimal def, string data = null, string option = null)
74+
public static string TryEvaluateNumber(string exp, decimal def, string data = null, string option = null)
7975
{
8076
AlgorithmEngine ae;
8177
if (option == null) {
@@ -94,11 +90,35 @@ public static decimal TryEvaluateNumber(string exp, decimal def, string data = n
9490
if (data != null) {
9591
ae.AddParameterFromJson(data);
9692
}
97-
return ae.TryEvaluate(exp, def);
93+
Dictionary<string, object> result = new Dictionary<string, object>();
94+
result["parse"] = false;
95+
result["useDef"] = false;
96+
result["error"] = null;
97+
try {
98+
if (ae.Parse(exp)) {
99+
result["parse"] = true;
100+
var obj = ae.Evaluate();
101+
obj = obj.ToNumber("It can't be converted to number!");
102+
if (obj.IsError) {
103+
result["result"] = def;
104+
result["useDef"] = true;
105+
result["error"] = obj.ErrorMsg;
106+
return JsonSerializer.Serialize(result);
107+
}
108+
result["result"] = obj.NumberValue;
109+
return JsonSerializer.Serialize(result);
110+
}
111+
result["error"] = "Parameter exp invalid !";
112+
} catch (Exception ex) {
113+
result["error"] = ex.Message;
114+
}
115+
result["useDef"] = true;
116+
result["result"] = def;
117+
return JsonSerializer.Serialize(result);
98118
}
99119

100120
[JSInvokable]
101-
public static bool TryEvaluateBool(string exp, bool def, string data = null, string option = null)
121+
public static string TryEvaluateBool(string exp, bool def, string data = null, string option = null)
102122
{
103123
AlgorithmEngine ae;
104124
if (option == null) {
@@ -117,7 +137,31 @@ public static bool TryEvaluateBool(string exp, bool def, string data = null, str
117137
if (data != null) {
118138
ae.AddParameterFromJson(data);
119139
}
120-
return ae.TryEvaluate(exp, def);
140+
Dictionary<string, object> result = new Dictionary<string, object>();
141+
result["parse"] = false;
142+
result["useDef"] = false;
143+
result["error"] = null;
144+
try {
145+
if (ae.Parse(exp)) {
146+
result["parse"] = true;
147+
var obj = ae.Evaluate();
148+
obj = obj.ToBoolean("It can't be converted to bool!");
149+
if (obj.IsError) {
150+
result["result"] = def;
151+
result["useDef"] = true;
152+
result["error"] = obj.ErrorMsg;
153+
return JsonSerializer.Serialize(result);
154+
}
155+
result["result"] = obj.BooleanValue;
156+
return JsonSerializer.Serialize(result);
157+
}
158+
result["error"] = "Parameter exp invalid !";
159+
} catch (Exception ex) {
160+
result["error"] = ex.Message;
161+
}
162+
result["useDef"] = true;
163+
result["result"] = def;
164+
return JsonSerializer.Serialize(result);
121165
}
122166

123167
[JSInvokable]
@@ -140,22 +184,31 @@ public static string TryEvaluateDateTime(string exp, DateTime def, string data =
140184
if (data != null) {
141185
ae.AddParameterFromJson(data);
142186
}
187+
Dictionary<string, object> result = new Dictionary<string, object>();
188+
result["parse"] = false;
189+
result["useDef"] = false;
190+
result["error"] = null;
143191
try {
144192
if (ae.Parse(exp)) {
193+
result["parse"] = true;
145194
var obj = ae.Evaluate();
146-
if (obj.IsNull) {
147-
return null;
148-
}
195+
obj= obj.ToMyDate("It can't be converted to datetime!");
149196
if (obj.IsError) {
197+
result["result"] = def;
198+
result["useDef"] = true;
199+
result["error"] = ae.LastError;
150200
return def.ToString("yyyy-MM-dd HH:mm:ss");
151201
}
152-
if (obj.Type == OperandType.DATE) {
153-
return obj.DateValue.ToString();
154-
}
155-
return obj.DateValue.ToString();
202+
result["result"] = obj.DateValue.ToString();
203+
return JsonSerializer.Serialize(result);
156204
}
157-
} catch { }
158-
return def.ToString("yyyy-MM-dd HH:mm:ss");
205+
result["error"] = "Parameter exp invalid !";
206+
} catch (Exception ex) {
207+
result["error"] = ex.Message;
208+
}
209+
result["useDef"] = true;
210+
result["result"] = def.ToString("yyyy-MM-dd HH:mm:ss");
211+
return JsonSerializer.Serialize(result);
159212
}
160213
[JSInvokable]
161214

csharp/ToolGood.Algorithm2.WebTest/wwwroot/Test/test-csharp.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@
9292
await new Promise(resolve => setTimeout(resolve, 300));
9393

9494
var engine = new AlgorithmEngine();
95-
//var dt = engine.TryEvaluate("Md5('&=我中国人 >||')", null);
96-
//assert.equal(dt, "2E1CEFBDFA3677725B7856E02D225819"); //不支持Md5
95+
//var dt2 = engine.TryEvaluate("Md5('&=我中国人 >||')", null);
96+
//assert.equal(dt2, "2E1CEFBDFA3677725B7856E02D225819"); //不支持Md5
9797

9898

9999
var dt = engine.TryEvaluate("Md5('&=我中国人 >||','GGG')", null);

csharp/ToolGood.Algorithm2.WebTest/wwwroot/Test/test.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ QUnit.module('test', function () {
77

88
var c = engine.TryEvaluate("2+3", 0);
99
assert.equal(5, c);
10-
c = engine.TryEvaluate("(2)+3", 0);
11-
assert.equal(5, c);
10+
var ddd = engine.TryEvaluate("(2)+3", 0);
11+
assert.equal(5, ddd);
1212
c = engine.TryEvaluate("2+3*2+10/2*4", 0);
1313
assert.equal(28, c);
1414

@@ -230,7 +230,7 @@ QUnit.module('test', function () {
230230
//assert.equal(10 * 10 * Math.PI, t, 10, data);
231231

232232

233-
var json = {'灰色':'L','canBookCount':905,'saleCount':91,'specId':'43b0e72e98731aed69e1f0cc7d64bf4d'};
233+
var json = { '灰色': 'L', 'canBookCount': 905, 'saleCount': 91, 'specId': '43b0e72e98731aed69e1f0cc7d64bf4d' };
234234

235235
var tt = c.TryEvaluate("['灰色']", "", json); //圆的体积
236236
assert.equal("L", tt);
@@ -248,15 +248,14 @@ QUnit.module('test', function () {
248248
var data = { '半径': 3, '直径': 6, '高': 10 };
249249

250250

251-
var t = c.GetSimplifiedFormula("[半径]*[半径]*pi()", data); // 圆底面积
251+
var t = engine.GetSimplifiedFormula("[半径]*[半径]*pi()", data); // 圆底面积
252252
assert.equal("3 * 3 * 3.14159265358979", t);
253253

254-
var t2 = c.GetSimplifiedFormula("半径*if(半径>2,1,3)", data);
254+
var t2 = engine.GetSimplifiedFormula("半径*if(半径>2,1,3)", data);
255255
assert.equal("3 * 1", t2);
256256

257-
var t24 = c.GetSimplifiedFormula("半径*if(半径>2,1+4,3)", data);
257+
var t24 = engine.GetSimplifiedFormula("半径*if(半径>2,1+4,3)", data);
258258
assert.equal("3 * 5", t24);
259259
});
260260
});
261261

262-

csharp/ToolGood.Algorithm2.WebTest/wwwroot/ToolGood.Algorithm.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,20 @@ AlgorithmEngine = class {
1414
this.MassUnit = MassUnitType.KG;
1515
this.IgnoreCase = false;
1616
}
17-
GetErrorMessage = function (exp, def, data) { return DotNet.invokeMethod('ToolGood.Algorithm.WebAssembly', 'GetErrorMessage', exp, def, JSON.stringify(data), JSON.stringify(this)); }
18-
TryEvaluateString = function (exp, def, data) { return DotNet.invokeMethod('ToolGood.Algorithm.WebAssembly', 'TryEvaluateString', exp, def, JSON.stringify(data), JSON.stringify(this)); }
19-
TryEvaluateNumber = function (exp, def, data) { return DotNet.invokeMethod('ToolGood.Algorithm.WebAssembly', 'TryEvaluateNumber', exp, def, JSON.stringify(data), JSON.stringify(this)); }
20-
TryEvaluateBool = function (exp, def, data) { return DotNet.invokeMethod('ToolGood.Algorithm.WebAssembly', 'TryEvaluateBool', exp, def, JSON.stringify(data), JSON.stringify(this)); }
21-
TryEvaluateDateTime = function (exp, def, data) { return DotNet.invokeMethod('ToolGood.Algorithm.WebAssembly', 'TryEvaluateDateTime', exp, def, JSON.stringify(data), JSON.stringify(this)); }
17+
__callResult = function (name, exp, def, data) {
18+
var json = DotNet.invokeMethod('ToolGood.Algorithm.WebAssembly', name, exp, def, JSON.stringify(data), JSON.stringify(this));
19+
var result = JSON.parse(json);
20+
this.LastParse = result["parse"];
21+
this.LastUseDef = result["useDef"];
22+
this.LastError = result["error"];
23+
this.LastResult = result["result"];
24+
return this.LastResult;
25+
}
26+
27+
TryEvaluateString = function (exp, def, data) { return this.__callResult('TryEvaluateString', exp, def, data); }
28+
TryEvaluateNumber = function (exp, def, data) { return this.__callResult('TryEvaluateNumber', exp, def, data); }
29+
TryEvaluateBool = function (exp, def, data) { return this.__callResult('TryEvaluateBool', exp, def, data); }
30+
TryEvaluateDateTime = function (exp, def, data) { return this.__callResult('TryEvaluateDateTime', exp, def, data); }
2231

2332
TryEvaluate = function (exp, def, data) {
2433
if (def == null) { return this.TryEvaluateString(exp, def, data); }
Binary file not shown.
Binary file not shown.

csharp/ToolGood.Algorithm2.WebTest/wwwroot/_framework/blazor.boot.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
{
1+
{
22
"mainAssemblyName": "ToolGood.Algorithm.WebAssembly",
33
"resources": {
4-
"hash": "sha256-TuVqRixkrkO+HeUdQ2d7OnI8JphJOLQMu18vZNlrBKY=",
4+
"hash": "sha256-TKw+M9YQSdMAOX1gaR9BompWaHDxSY6CpJgn6UpcP60=",
55
"jsModuleNative": {
6-
"dotnet.native.8.0.4.s1uvq6euq2.js": "sha256-ju0+XWE0ihz554eKEj0HQ8Opa61xpbUIaX5/MNo8we4="
6+
"dotnet.native.8.0.4.rkw194kvb3.js": "sha256-ju0+XWE0ihz554eKEj0HQ8Opa61xpbUIaX5/MNo8we4="
77
},
88
"jsModuleRuntime": {
9-
"dotnet.runtime.8.0.4.gikbt2nxyc.js": "sha256-JeVsECOqOie/Pe89n9PJNJaMmb5vJsAAxfXY8INN64A="
9+
"dotnet.runtime.8.0.4.ogva3chynz.js": "sha256-JeVsECOqOie/Pe89n9PJNJaMmb5vJsAAxfXY8INN64A="
1010
},
1111
"wasmNative": {
1212
"dotnet.native.wasm": "sha256-U1JSgnum2OTerSq8i5Y9L17deHEWJmae0djinSPLyJM="
@@ -49,12 +49,12 @@
4949
"System.wasm": "sha256-0twHy0v/4itK9vi9rjRNTda0kvYqNiRrDeYoPWiUMOQ=",
5050
"netstandard.wasm": "sha256-YOZxxR9PM3Dltcijfb0Q4FD39DkWZbZ1e2ScbZDvWJ4=",
5151
"System.Private.CoreLib.wasm": "sha256-NrT1QkAzVU//2wgK9vXdq77lCGvLJ4IOZ+Aegesyanc=",
52-
"ToolGood.Algorithm.wasm": "sha256-5oqpBe3OTj7DfcvsFm1pjOZlBabUKjrrjIXeniDm7A8=",
53-
"ToolGood.Algorithm.WebAssembly.wasm": "sha256-B4A/rV/E1hYknaOFPuwd4gPj1Ai4aP+ds0WcfK95Dbo="
52+
"ToolGood.Algorithm.wasm": "sha256-ivfS9SwgMSb8msOrAO3SJxyhaqxVa0ZjqJOvkZJZhco=",
53+
"ToolGood.Algorithm.WebAssembly.wasm": "sha256-D5v93S8pO02HW9772WNOuIngfOb0GuW0JWVAt/8NESk="
5454
},
5555
"pdb": {
56-
"ToolGood.Algorithm.pdb": "sha256-ZeVF6NQfDr2MoTGxMbvy7VGL3b956AIFVLxybbQwFI4=",
57-
"ToolGood.Algorithm.WebAssembly.pdb": "sha256-5tjHP1KEID/sH8A3G9EFj5/Ao4jSFt3Uh3GZvgOexIg="
56+
"ToolGood.Algorithm.pdb": "sha256-oYjZcpuvfMJFl2p1AZwbqQLLC8RGOG8i9qwZKRGnbJs=",
57+
"ToolGood.Algorithm.WebAssembly.pdb": "sha256-a+u2/cYcBcvVutdGAVeDSBZ/Ukkx+7NV1GX64Ka3hXM="
5858
}
5959
},
6060
"cacheBootResources": true,

csharp/ToolGood.Algorithm2.WebTest/wwwroot/_framework/dotnet.native.8.0.4.s1uvq6euq2.js renamed to csharp/ToolGood.Algorithm2.WebTest/wwwroot/_framework/dotnet.native.8.0.4.rkw194kvb3.js

File renamed without changes.

csharp/ToolGood.Algorithm2.WebTest/wwwroot/_framework/dotnet.runtime.8.0.4.gikbt2nxyc.js renamed to csharp/ToolGood.Algorithm2.WebTest/wwwroot/_framework/dotnet.runtime.8.0.4.ogva3chynz.js

File renamed without changes.

0 commit comments

Comments
 (0)