Просмотр исходного кода

Update 优化MockDate启动逻辑,判断启动时是否发送数据

Yue 2 лет назад
Родитель
Сommit
3b14ff7e19

+ 23 - 6
VB_DSM_DATA/VbdsmMockData/Vbdsm.Hj212/Gen/GenData.cs

@@ -18,26 +18,43 @@ namespace Vbdsm.Gen
         public string TerminalIds { get; set; }
         public string? CompanyId { get; set; }
 
-        public string GenTerminals(string? date = null)
+        public string GenTerminals(long date)
         {
-            date = date ?? $"{DateTime.Now:yyyyMMddHH}{(DateTime.Now.Minute - DateTime.Now.Minute % 15):D2}00";
+            //date = date ?? $"{DateTime.Now:yyyyMMddHH}{(DateTime.Now.Minute - DateTime.Now.Minute % 15):D2}00";
             var str = $"st=01;cn={CompanyId};datatime={date};cphh=&&";
             var tidList = TerminalIds.Split(',');
             foreach (var tid in tidList)
             {
-                str += GenTerminal(tid) + "$";
+                var terminalStr = GenTerminal(tid, date);
+                if (string.IsNullOrEmpty(terminalStr))
+                {
+                    return "";
+                }
+                str += terminalStr + "$";
             }
             str = str.TrimEnd('$');
-            Console.WriteLine($"\t {str}");
             byte[] bytes = StrHexHelper.HexStrToArray(StrHexHelper.StrToHexStr(str, Encoding.Default));
             var result = $"##{str.Length:D6}{str}{StrHexHelper.do_CRC(bytes)}\r\n";
             return result;
         }
 
-        private string GenTerminal(string terminalId)
+        // public long GetGenDateTime(string terminalId)
+        // {
+        //     string fileName = $"{CompanyId}@{terminalId}";
+        //     TerminalData terminalData = FileHelper.ReadFileInfo<TerminalData>(fileName) ?? new TerminalData(CompanyId, terminalId);
+        //     return terminalData.GenDateTime;
+        // }
+
+        private string GenTerminal(string terminalId, long date)
         {
             string fileName = $"{CompanyId}@{terminalId}";
             TerminalData terminalData = FileHelper.ReadFileInfo<TerminalData>(fileName) ?? new TerminalData(CompanyId, terminalId);
+            var genDate = terminalData.GenDateTime;
+            if (genDate != 0 && genDate >= date)
+            {
+                return "";
+            }
+
             var str = $"tid={terminalId}";
             var power = new PowerEnergy();
             var dp = Helper.GetRan(22000, 3000, 100);
@@ -47,7 +64,7 @@ namespace Vbdsm.Gen
             var ps = terminalData.Total_P + dp;
             var qs = terminalData.Total_E + de;
             power.SetEngine(pe, qe, ps, ps);
-            terminalData.SetMouthTotal_P(pe == 0 ? (decimal)0.01 : pe).SetMouthTotal_E(qe == 0 ? (decimal)0.01 : qe).SetTotal_P(ps).SetTotal_E(qs).Save();
+            terminalData.SetMouthTotal_P(pe == 0 ? (decimal)0.01 : pe).SetMouthTotal_E(qe == 0 ? (decimal)0.01 : qe).SetTotal_P(ps).SetTotal_E(qs).SetGenDateTime(date).Save();
             str += "&" + power.GetStr();
             var hia = new Harmonic("a").SetI(power.ia);
             str += "&" + hia.GetStr_I();

+ 18 - 10
VB_DSM_DATA/VbdsmMockData/Vbdsm.Hj212/Gen/TerminalData.cs

@@ -16,17 +16,19 @@ namespace Vbdsm.Gen
             TerminalId = terminalId;
         }
 
+        public long GenDateTime { get; set; } = 0;
+
         public string? CompanyId { get; set; }
         public string TerminalId { get; set; }
-        public Dictionary<string, decimal> MonthTotal_P { get; set; } = new Dictionary<string, decimal>();
+        public Dictionary<string, decimal> DayTotal_P { get; set; } = new Dictionary<string, decimal>();
         public decimal Total_P { get; set; }
-        public Dictionary<string, decimal> MonthTotal_E { get; set; } = new Dictionary<string, decimal>();
+        public Dictionary<string, decimal> DayTotal_E { get; set; } = new Dictionary<string, decimal>();
         public decimal Total_E { get; set; }
         private string Key => $"{DateTime.Now:yyyyMMdd}";
 
         public decimal GetCurMonthTotal_P()
         {
-            if (!MonthTotal_P.TryGetValue(Key, out var d))
+            if (!DayTotal_P.TryGetValue(Key, out var d))
             {
                 d = 0;
             }
@@ -35,7 +37,7 @@ namespace Vbdsm.Gen
 
         public decimal GetCurMonthTotal_E()
         {
-            if (!MonthTotal_E.TryGetValue(Key, out var d))
+            if (!DayTotal_E.TryGetValue(Key, out var d))
             {
                 d = 0;
             }
@@ -50,11 +52,11 @@ namespace Vbdsm.Gen
 
         public TerminalData SetMouthTotal_P(decimal d)
         {
-            if (MonthTotal_P.ContainsKey(Key))
+            if (DayTotal_P.ContainsKey(Key))
             {
-                MonthTotal_P.Remove(Key);
+                DayTotal_P.Remove(Key);
             }
-            MonthTotal_P.Add(Key, d);
+            DayTotal_P.Add(Key, d);
             return this;
         }
 
@@ -66,11 +68,17 @@ namespace Vbdsm.Gen
 
         public TerminalData SetMouthTotal_E(decimal d)
         {
-            if (MonthTotal_E.ContainsKey(Key))
+            if (DayTotal_E.ContainsKey(Key))
             {
-                MonthTotal_E.Remove(Key);
+                DayTotal_E.Remove(Key);
             }
-            MonthTotal_E.Add(Key, d);
+            DayTotal_E.Add(Key, d);
+            return this;
+        }
+
+        public TerminalData SetGenDateTime(long time)
+        {
+            GenDateTime = time;
             return this;
         }
 

+ 8 - 3
VB_DSM_DATA/VbdsmMockData/Vbdsm.Hj212/SocketClients/TpcClient.cs

@@ -27,7 +27,7 @@ namespace Vbdsm.SocketClients
             MaxErrorCount = AppSetting.Instance.MaxErrorCount;
             ClientId = clientId;
             TerminalIds = terminalIds;
-            LastRequestTime = CalcCurrentTime();
+            //LastRequestTime = CalcCurrentTime();
         }
 
         private Dictionary<string, AsyncTcpSession> GenClients()
@@ -132,8 +132,13 @@ namespace Vbdsm.SocketClients
             try
             {
                 LastRequestTime = CalcCurrentTime();
-                Console.WriteLine($"\r\n[{DateTime.Now}] 客户端【{ClientId}】发送数据[{LastRequestTime}] ==>");
-                string str = new GenData(TerminalIds, ClientId).GenTerminals(LastRequestTime + "");
+                string str = new GenData(TerminalIds, ClientId).GenTerminals(LastRequestTime);
+                if (string.IsNullOrEmpty(str))
+                {
+                    Console.WriteLine($"\r\n[{DateTime.Now}] 客户端【{ClientId}】[{LastRequestTime}] 已发送过数据! ");
+                    return;
+                }
+                Console.WriteLine($"\r\n[{DateTime.Now}] 客户端【{ClientId}】发送数据[{LastRequestTime}] ==> {str}");
                 byte[] bytes = Encoding.UTF8.GetBytes(str);
                 foreach (var kv in Clients)
                 {