|
|
@@ -35,6 +35,7 @@ using System.Net.Http.Headers;
|
|
|
using System.Net.Http;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Diagnostics;
|
|
|
+using NPOI.Util;
|
|
|
|
|
|
namespace SiteCore
|
|
|
{
|
|
|
@@ -3892,16 +3893,8 @@ namespace SiteCore
|
|
|
{
|
|
|
string orderSn = DateTimeNow("yyMMddHHmmssfff") + RandomNumbers(random, 3);
|
|
|
|
|
|
- if (CeErpTradeCell.GetByCode(orderSn) == null)
|
|
|
- {
|
|
|
- return orderSn;
|
|
|
- }
|
|
|
-
|
|
|
- // 避免在短时间内重复生成相同的时间戳
|
|
|
- if (i < maxAttempts - 1)
|
|
|
- {
|
|
|
- Thread.Sleep(1);
|
|
|
- }
|
|
|
+ return orderSn;
|
|
|
+
|
|
|
}
|
|
|
return "";
|
|
|
}
|
|
|
@@ -3920,13 +3913,25 @@ namespace SiteCore
|
|
|
private static string RandomNumbers(Random random, int length)
|
|
|
{
|
|
|
if (length <= 0) return string.Empty;
|
|
|
-
|
|
|
- char[] numbers = new char[length];
|
|
|
- for (int i = 0; i < length; i++)
|
|
|
+ var rng = RandomNumberGenerator.Create();
|
|
|
+ while (true)
|
|
|
{
|
|
|
- numbers[i] = (char)('0' + random.Next(0, 10));
|
|
|
+ byte[] randomBytes = new byte[2]; // 2字节=16位,足够0-900范围
|
|
|
+ int value;
|
|
|
+
|
|
|
+ do
|
|
|
+ {
|
|
|
+ rng.GetBytes(randomBytes);
|
|
|
+ value = randomBytes[0] * 256 + randomBytes[1];
|
|
|
+ } while (value >= 900 * (65536 / 900)); // 拒绝采样,避免偏差
|
|
|
+ value = value % 900 + 100;
|
|
|
+ if (value > 100 && value < 1000)
|
|
|
+ {
|
|
|
+ return value.ToString();
|
|
|
+ }
|
|
|
}
|
|
|
- return new string(numbers);
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|