DFS_Shuo_Chen 4 mesiacov pred
rodič
commit
8123cd3803
28 zmenil súbory, kde vykonal 310 pridanie a 99 odobranie
  1. 2 0
      .gitignore
  2. 3 3
      ChatRoomClient-VR/Release/conn.ini
  3. BIN
      DatabaseUpdate/DatabaseUpdate.v12.suo
  4. 3 3
      SensorDataSimulator/Release/conn.ini
  5. BIN
      VaporRecoveryMonitor/VaporRecoveryMonitor/Bin/VaporRecoveryMonitor.exe
  6. BIN
      VaporRecoveryMonitor/VaporRecoveryMonitor/Bin/setting/setting.db
  7. 24 4
      VaporRecoveryMonitor/VaporRecoveryMonitor/Bin/skin_1366_768/setting.xml
  8. BIN
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor.v12.suo
  9. 141 47
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/DataBackup.cpp
  10. 8 0
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/DataBackup.h
  11. BIN
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRec.A31C344F.tlog/CL.read.1.tlog
  12. BIN
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRec.A31C344F.tlog/CL.write.1.tlog
  13. BIN
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRec.A31C344F.tlog/cl.command.1.tlog
  14. BIN
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRec.A31C344F.tlog/link.read.1.tlog
  15. 11 11
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRecoveryMonitor.log
  16. 8 8
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/conn.ini
  17. 5 2
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/global.cpp
  18. 17 1
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/instance.cpp
  19. 39 8
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_app.cpp
  20. 2 1
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_common.h
  21. 3 0
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_db.cpp
  22. 9 0
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_ext.cpp
  23. 2 1
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_ext.h
  24. 4 1
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_object.cpp
  25. 5 5
      VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_ui.cpp
  26. BIN
      VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控_版本发布说明.xlsx
  27. BIN
      VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统安装包/files/VR/VaporRecoveryMonitor.exe
  28. 24 4
      VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统安装包/files/VR/skin_1366_768/setting.xml

+ 2 - 0
.gitignore

@@ -146,3 +146,5 @@ VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统
 VaporRecoveryMonitor/VaporRecoveryMonitor/.vs/
 VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统安装包V1.16.20.zip
 VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统安装包V1.16.21.zip
+VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统安装包V1.16.22.zip
+VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统安装包V1.16.23.zip

+ 3 - 3
ChatRoomClient-VR/Release/conn.ini

@@ -1,12 +1,12 @@
 [Config]
-fip=1
+fip=3
 noz=1
 YLS=10.00
 QLS=10.00
 YL=15.00
 QL=15.00
-VL=1.10
-TTC=44
+VL=1.00
+TTC=78
 ERROR=110
 PRESS=10
 PWM=10

BIN
DatabaseUpdate/DatabaseUpdate.v12.suo


+ 3 - 3
SensorDataSimulator/Release/conn.ini

@@ -1,13 +1,13 @@
 [Config]
 val232_0=08 ff
-val232_1=08 78
-val232_2=08 16
+val232_1=08 68
+val232_2=08 26
 val232_3=08 36
 val232_4=02 b1
 val232_5=02 b1
 val232_6=02 b1
 val232_7=08 36
-val232_8=00 00
+val232_8=08 36
 PORT_232=11
 PORT_485=
 val485_Addr1=10

BIN
VaporRecoveryMonitor/VaporRecoveryMonitor/Bin/VaporRecoveryMonitor.exe


BIN
VaporRecoveryMonitor/VaporRecoveryMonitor/Bin/setting/setting.db


+ 24 - 4
VaporRecoveryMonitor/VaporRecoveryMonitor/Bin/skin_1366_768/setting.xml

@@ -5,7 +5,8 @@
     <horizontallayout height="36" bkcolor="#ff2460a0" textpadding="20,0,0,0">
       <option   name="setting1"  width="100"  text="设置1"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff" selected="true"></option>
       <option   name="setting2"  width="100"  text="设置2"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff"></option>
-      <option   name="setting3"  width="100"  text="零压校准"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff"></option>
+      <option   name="setting3"  width="100"  text="设置3"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff"></option>
+      <option   name="setting_pressureoffset"  width="100"  text="零压校准"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff"></option>
       
 
       <label></label>
@@ -92,7 +93,7 @@
 
 
 
-
+      <!--设置2-->
       <horizontallayout padding="5,10,5,5" bkcolor="#ffd6dfea">
        <verticallayout padding="15,15,5,5">
          
@@ -102,7 +103,6 @@
           <label text ="(限10个字)" width="100" font ="414"></label>
         </horizontallayout>
 
-
         <horizontallayout>
         </horizontallayout>
 
@@ -115,11 +115,29 @@
       </horizontallayout>
 
 
+
+
+      <!--设置3-->
+      <horizontallayout padding="5,10,5,5" bkcolor="#ffd6dfea">
+        <verticallayout padding="15,15,5,5">
+
+          <horizontallayout  height="50" >
+            <button name="dbRecoverFromBackup" text="修复数据库" padding="0,10,0,0" height="30" width="150"  bkcolor="#ff2460a0" textcolor="0xffffffff" font ="515"></button>
+            <label text ="当数据库备份处显示'主数据缺漏'时使用,需确保主数据库和备份数据库是同个油站的数据" padding="20,0,0,0"  width="800" font ="414"></label>
+          </horizontallayout>
+
+          <horizontallayout>
+          </horizontallayout>
+
+        </verticallayout>
+      </horizontallayout>
       
+      
+
+      <!--零压校准-->
        <horizontallayout padding="5,10,5,5" bkcolor="#ffd6dfea">
        <verticallayout padding="15,15,5,5">
          
-         
         <horizontallayout  height="30" >
           <label text ="零压校准(调零)须知:校准时传感器必须已经安装固定好,并处于大气压之下" width="800" font ="515"></label>
         </horizontallayout>
@@ -178,6 +196,8 @@
       </verticallayout>
       </horizontallayout>
     
+      
+      
     
       
       

BIN
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor.v12.suo


+ 141 - 47
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/DataBackup.cpp

@@ -2,6 +2,7 @@
 #include "DataBackup.h"
 #include "global.h"
 #include "vr_ext.h"
+#include <set>
 
 
 #include <imagehlp.h>
@@ -20,8 +21,8 @@ DataBackup::DataBackup()
 void DataBackup::Init()
 {
 
-	int enable = GetPrivateProfileIntA("DataBackup", "Enable", 0, ".//conn.ini");
-	if (!enable)
+	m_enable = GetPrivateProfileIntA("DataBackup", "Enable", 0, ".//conn.ini");
+	if (!m_enable)
 	{
 		if (FindDisk(DISK_SIZE))
 		{
@@ -77,11 +78,11 @@ void DataBackup::Init()
 	char dir[MAX_PATH] = { 0 };
 	_get_instance_dir(dir, MAX_PATH);
 
-	string sourcedir = string(dir) + "data\\";
 
-	string source = sourcedir + "*.*";
-	string destdir = g_backuppath;//"C:\\VRBackup\\data\\";
-	string dest = destdir + "*.*";
+	sourcedir = string(dir) + "data\\";
+	source = sourcedir + "*.db";
+	destdir = g_backuppath;//"C:\\VRBackup\\data\\";
+	dest = destdir + "*.db";
 
 
 	int pathrtn = MakeSureDirectoryPathExists(destdir.c_str());
@@ -103,65 +104,46 @@ void DataBackup::Init()
 
 
 
-
 	int datacount = 0;
 	int successcount = 0;
 	int backupcount = 0;
+	std::set<string> dbset;
+	std::set<string> backupset;
 
+	dbset = getdbset(source);
+	datacount = dbset.size();
 
+	backupset = getdbset(dest);
+	backupcount = backupset.size();
 
-	intptr_t handle;
-	_finddata_t findData;
-
-	handle = _findfirst(source.c_str(), &findData);    // 查找目录中的第一个文件
-	if (handle == -1)
-	{
-		//Log("打开data目录失败!");
-		//m_state = BackupState_READERROR;
+	std::set<string> diff1; // set1 中独有的元素
+	// 计算 set1 中独有的元素
+	std::set_difference(dbset.begin(), dbset.end(), backupset.begin(), backupset.end(), std::inserter(diff1, diff1.begin()));
 
-		//找不到主目录的文件是第一次使用
-		m_state = BackupState_NORMAL;
 
-		return;
-	}
+	string log = "共有" + to_string(datacount) + "个数据文件,备份目录有" + to_string(backupcount) + "个数据文件,主数据库独有"
+		+ to_string(diff1.size()) +"个文件";
+	Log(log.c_str());
 
-	do
+	for (auto it:diff1)
 	{
-		if (findData.attrib & _A_SUBDIR)
-		{
-			/*if (string(findData.name) == "."
-				|| string(findData.name) == ".."
-				)  */
-		}
-		else
-		{
-			std::string path1 = sourcedir + string(findData.name);
-			std::string path2 = destdir + string(findData.name);
+		std::string path1 = sourcedir + it;
+		std::string path2 = destdir + it;
 
-			datacount++;
-
-			int rtn = CopyFileA(path1.c_str(), path2.c_str(), TRUE);//跳过存在的文件
-			if (rtn)
-			{
-				successcount++;
-			}
+		int rtn = CopyFileA(path1.c_str(), path2.c_str(), TRUE);//跳过存在的文件
+		if (rtn)
+		{
+			successcount++;
 		}
-	} while (_findnext(handle, &findData) == 0);    // 查找目录中的下一个文件
-	_findclose(handle);    // 关闭搜索句柄
-
-
+	}
 
 	backupcount = getFileCount(dest);
 
-
-
-
-
-
-	string log = "共找到" + to_string(datacount) + "个数据文件,复制" + to_string(successcount) + "个,当前备份目录有" + to_string(backupcount) + "个数据文件";
+	log = "主数据库复制" + to_string(successcount) + "个文件到备份数据库,备份数据库当前有"+to_string(backupcount)+"个文件";
 	Log(log.c_str());
 
 
+
 	if (backupcount < datacount)
 	{
 		m_state = BackupState_BACKUPERROR;
@@ -191,6 +173,118 @@ void DataBackup::Init()
 }
 
 
+std::set<string> DataBackup::getdbset(string path)
+{
+	std::set<string> dbset;
+	intptr_t handle;
+	_finddata_t findData;
+	handle = _findfirst(path.c_str(), &findData);    // 查找目录中的第一个文件
+	if (handle == -1)
+	{
+	}
+	else
+	{
+		do
+		{
+			if (string(findData.name) == "."
+				|| string(findData.name) == ".."
+				)    // 是否是子目录并且不为"."或".."
+			{
+			}
+			else
+			{
+				if (string(findData.name).length() == 14)
+				{
+					dbset.insert(findData.name);
+				}
+			}
+		} while (_findnext(handle, &findData) == 0);    // 查找目录中的下一个文件
+	}
+	_findclose(handle);    // 关闭搜索句柄
+
+	return dbset;
+}
+
+
+int DataBackup::recoverFromBackup(string&  rtnmsg)
+{
+	int rtn = false;
+
+	if (m_state == BackupState_MAINDATALACKING)
+	{
+
+		int datacount = 0;
+		int successcount = 0;
+		int backupcount = 0;
+		std::set<string> dbset;
+		std::set<string> backupset;
+
+		dbset = getdbset(source);
+		datacount = dbset.size();
+
+		backupset = getdbset(dest);
+		backupcount = backupset.size();
+
+		std::set<string> diff2; // set2 中独有的元素
+		// 计算 set2 中独有的元素
+		std::set_difference(backupset.begin(), backupset.end(),dbset.begin(), dbset.end(),  std::inserter(diff2, diff2.begin()));
+
+
+		string log = "共有" + to_string(datacount) + "个数据文件,备份目录有" + to_string(backupcount) + "个数据文件,备份数据库独有"
+			+ to_string(diff2.size()) + "个文件";
+		Log(log.c_str());
+
+		for (auto it : diff2)
+		{
+			std::string path1 = sourcedir + it;
+			std::string path2 = destdir + it;
+
+			int rtn = CopyFileA(path2.c_str(), path1.c_str(), TRUE);//跳过存在的文件
+			if (rtn)
+			{
+				successcount++;
+			}
+		}
+
+		datacount = getFileCount(source);
+
+		log = "备份数据库复制" + to_string(successcount) + "个文件到主数据库,主数据库当前有" + to_string(datacount) + "个文件";
+		Log(log.c_str());
+
+
+		if (successcount != 0)
+		{
+			rtnmsg = "复制"+to_string(successcount) +"个文件";
+			if (datacount>=backupcount)
+			{
+				m_state = BackupState_NORMAL;
+				return true;
+			}
+			else
+			{
+				rtnmsg += ",但主数据库文件数依然少于备份数据库";
+				return false;
+			}
+
+		}
+		else
+		{
+			rtnmsg = "复制0个文件,操作无效";
+			return false;
+		}
+
+
+	}
+	else
+	{
+		rtnmsg = "当前主数据库不需要修复";
+		return false;
+	}
+
+
+}
+
+
 void DataBackup::SetState(int state)
 {
 	if (m_state == BackupState_MAINDATALACKING)

+ 8 - 0
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/DataBackup.h

@@ -24,6 +24,9 @@ public:
 
 	void SetState(int state);
 
+	std::set<string> getdbset(string path);
+	int recoverFromBackup(string&  rtnmsg);
+
 	string GetStateString();
 
 	LPCTSTR getColor();
@@ -35,4 +38,9 @@ public:
 private:
 	int m_state;
 	int m_bReady;
+	int m_enable;
+	string sourcedir;
+	string source;
+	string destdir;
+	string dest;
 };

BIN
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRec.A31C344F.tlog/CL.read.1.tlog


BIN
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRec.A31C344F.tlog/CL.write.1.tlog


BIN
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRec.A31C344F.tlog/cl.command.1.tlog


BIN
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRec.A31C344F.tlog/link.read.1.tlog


+ 11 - 11
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/Release/VaporRecoveryMonitor.log

@@ -1,4 +1,4 @@
-Build started 2025/8/8 10:47:39.
+Build started 2025/8/21 15:56:20.
      1>Project "C:\bitbucket\apacsys-vaporrecoverymonitor_new\VaporRecoveryMonitor\VaporRecoveryMonitor\VaporRecoveryMonitor\VaporRecoveryMonitor.vcxproj" on node 2 (Build target(s)).
      1>ClCompile:
          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe /c /I..\..\..\SDK\DuiLib /I..\VaporRecoveryMonitor /I..\..\..\cryptopp /Zi /nologo /W3 /WX- /sdl /Od /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _WINDOWS /D _CRT_NONSTDC_NO_DEPRECATE /D _CRT_SECURE_NO_WARNINGS /D _USING_V110_SDK71_ /D _UNICODE /D UNICODE /Gm- /EHsc /MT /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Yu"stdafx.h" /Fp"Release\VaporRecoveryMonitor.pch" /Fo"Release\\" /Fd"Release\vc120.pdb" /Gd /TP /analyze- /errorReport:prompt global.cpp
@@ -12,12 +12,12 @@
      1>global.cpp(438): warning C4018: '<' : signed/unsigned mismatch
      1>global.cpp(476): warning C4018: '<' : signed/unsigned mismatch
      1>global.cpp(523): warning C4101: 'i' : unreferenced local variable
-     1>global.cpp(651): warning C4244: 'return' : conversion from 'uint64_t' to 'double', possible loss of data
-     1>global.cpp(660): warning C4101: 'Free' : unreferenced local variable
-     1>global.cpp(660): warning C4101: 'Available' : unreferenced local variable
-     1>global.cpp(1029): warning C4018: '<' : signed/unsigned mismatch
-     1>global.cpp(1051): warning C4018: '<' : signed/unsigned mismatch
-     1>global.cpp(1077): warning C4018: '<' : signed/unsigned mismatch
+     1>global.cpp(654): warning C4244: 'return' : conversion from 'uint64_t' to 'double', possible loss of data
+     1>global.cpp(663): warning C4101: 'Free' : unreferenced local variable
+     1>global.cpp(663): warning C4101: 'Available' : unreferenced local variable
+     1>global.cpp(1032): warning C4018: '<' : signed/unsigned mismatch
+     1>global.cpp(1054): warning C4018: '<' : signed/unsigned mismatch
+     1>global.cpp(1080): warning C4018: '<' : signed/unsigned mismatch
        Link:
          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\bitbucket\apacsys-vaporrecoverymonitor_new\VaporRecoveryMonitor\VaporRecoveryMonitor\Bin\VaporRecoveryMonitor.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\bitbucket\apacsys-vaporrecoverymonitor_new\VaporRecoveryMonitor\VaporRecoveryMonitor\Lib\\" /LIBPATH:C:\common\openSSL\lib /LIBPATH:C:\common\openSSL /LIBPATH:"C:\Bitbucket\apacsys-vaporrecoverymonitor\cryptopp\lib\Output\Release" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /manifestinput:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\Include\Manifest\dpiaware.manifest" /DEBUG /PDB:"C:\bitbucket\apacsys-vaporrecoverymonitor_new\VaporRecoveryMonitor\VaporRecoveryMonitor\Bin\VaporRecoveryMonitor.pdb" /SUBSYSTEM:WINDOWS,"5.01" /OPT:REF /OPT:ICF /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\bitbucket\apacsys-vaporrecoverymonitor_new\VaporRecoveryMonitor\VaporRecoveryMonitor\Bin\VaporRecoveryMonitor.lib" /MACHINE:X86 /SAFESEH Release\VaporRecoveryMonitor.res
          Release\AES.obj
@@ -109,9 +109,9 @@
          Release\vr_ui.obj
          Generating code
      1>c:\bitbucket\apacsys-vaporrecoverymonitor_new\vaporrecoverymonitor\vaporrecoverymonitor\vaporrecoverymonitor\global.h(184): warning C4715: 'Area::getArea' : not all control paths return a value
-     1>c:\bitbucket\apacsys-vaporrecoverymonitor_new\vaporrecoverymonitor\vaporrecoverymonitor\vaporrecoverymonitor\vr_ext.cpp(1034): warning C4715: 'ThreadHandle_Start_2' : not all control paths return a value
-     1>c:\bitbucket\apacsys-vaporrecoverymonitor_new\vaporrecoverymonitor\vaporrecoverymonitor\vaporrecoverymonitor\vr_ext.cpp(1082): warning C4715: 'ThreadHandle_Start_3' : not all control paths return a value
-     1>c:\bitbucket\apacsys-vaporrecoverymonitor_new\vaporrecoverymonitor\vaporrecoverymonitor\vaporrecoverymonitor\vr_ext.cpp(978): warning C4715: 'ThreadHandle_Start' : not all control paths return a value
+     1>c:\bitbucket\apacsys-vaporrecoverymonitor_new\vaporrecoverymonitor\vaporrecoverymonitor\vaporrecoverymonitor\vr_ext.cpp(1091): warning C4715: 'ThreadHandle_Start_3' : not all control paths return a value
+     1>c:\bitbucket\apacsys-vaporrecoverymonitor_new\vaporrecoverymonitor\vaporrecoverymonitor\vaporrecoverymonitor\vr_ext.cpp(1043): warning C4715: 'ThreadHandle_Start_2' : not all control paths return a value
+     1>c:\bitbucket\apacsys-vaporrecoverymonitor_new\vaporrecoverymonitor\vaporrecoverymonitor\vaporrecoverymonitor\vr_ext.cpp(987): warning C4715: 'ThreadHandle_Start' : not all control paths return a value
          Finished generating code
      1>cryptlib.lib(cryptlib.obj) : warning LNK4099: PDB 'vc120.pdb' was not found with 'cryptlib.lib(cryptlib.obj)' or at 'C:\bitbucket\apacsys-vaporrecoverymonitor_new\VaporRecoveryMonitor\VaporRecoveryMonitor\Bin\vc120.pdb'; linking object as if no debug info
      1>cryptlib.lib(cpu.obj) : warning LNK4099: PDB 'vc120.pdb' was not found with 'cryptlib.lib(cpu.obj)' or at 'C:\bitbucket\apacsys-vaporrecoverymonitor_new\VaporRecoveryMonitor\VaporRecoveryMonitor\Bin\vc120.pdb'; linking object as if no debug info
@@ -152,4 +152,4 @@
 
 Build succeeded.
 
-Time Elapsed 00:00:12.20
+Time Elapsed 00:00:19.04

+ 8 - 8
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/conn.ini

@@ -1,11 +1,11 @@
 ;上传平台选择
 [City]
 ;上传平台1;  0-北京;1-;2-;3-浙江杭州环保局;4-;5-山东省环保;6-广州;7-湖南中石化;8-山东烟台;9-重庆;10-;11-浙江金华环保局;12-南京环保局;13-福建厦门环保局;14-东莞市环保局;15-深圳环保局;16-江门环保局;17-沈阳环保局;18-广东惠州环保局;19=汕头环保局;20-云浮环保局;21-揭阳环保局;22-浙江宁波环保局;23-佛山市环保2;24-阳江环保局;25-安徽合肥环保局;26-浙江温州环保局;27-珠海环保局; 28-河北张家口环保局;29-浙江台州环保;30-湛江环保局;31-清远环保局;32-河北唐山环保局;33-内蒙古呼和浩特环保局;34-武汉环保局;35-宁夏环保局;36-成都环保局;999-测试1;1000-不设置
-CityNo=18
+CityNo=0
 ;上传平台2;  0-不设置;1-浙江浙石油;2-浙江中石化;3-山东青岛;4-湖南长沙环保局;5-佛山顺德(佛山市);6-广东中石化;7-重庆环保2;8-山东烟台;9-中化道达尔;999-测试2
-CityNo2=6
+CityNo2=0
 ;上传平台3;0-不设置;1-浙江高速;2-中山智慧平台;3-北京中石化;4-山东烟台(新地址)
-CityNo3=1
+CityNo3=0
 ;主平台设置;1-以平台1规则为主;2-以平台2规则为主
 MainCity=1
 
@@ -23,9 +23,9 @@ Enable3=0
 ;数据备份
 [DataBackup]
 ;是否开启数据备份。0-关闭;1-开启
-Enable=0
+Enable=1
 ;备份盘符,如 E,必须是机械硬盘的盘符,不能为系统盘或者固态硬盘的盘符
-path=
+path=K
 
 
 ;北京加油站设置
@@ -941,13 +941,13 @@ enablefillinglog=1
 nozstr=
 tankstr=
 stationname=珠江二加油站
-Times=1:0;2:0;5:0;6:0;13:0;14:0;15:0;16:0;17:0;18:0;19:0;20:0;23:0;24:0;
-Times_alert=1:0;2:0;5:0;6:0;13:0;14:0;15:0;16:0;17:0;18:0;19:0;20:0;23:0;24:0;
+Times=1:0;2:0;5:0;6:0;9:0;13:0;14:0;15:0;16:0;17:0;18:0;19:0;20:0;23:0;24:0;
+Times_alert=1:0;2:0;5:0;6:0;9:0;13:0;14:0;15:0;16:0;17:0;18:0;19:0;20:0;23:0;24:0;
 configupdatetime=20250717135510
 
 [RunningState]
 UnLockFlag=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-Date=20250808
+Date=20250822
 TradeFlag=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 
 

+ 5 - 2
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/global.cpp

@@ -25,7 +25,7 @@
 
 using namespace VR::notify;
 
-string g_version = "V1.16.21";
+string g_version = "V1.16.23";
 
 
 int g_read_unuploadday = 31;	//程序开启时读未上传交易的天数 非特殊情况皆为31天
@@ -599,7 +599,10 @@ int getFileCount(string path)
 		}
 		else
 		{
-			count++;
+			if (string(findData.name).length() == 14)
+			{
+				count++;
+			}
 		}
 	} while (_findnext(handle, &findData) == 0);    // 查找目录中的下一个文件
 	_findclose(handle);    // 关闭搜索句柄

+ 17 - 1
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/instance.cpp

@@ -1326,6 +1326,14 @@ int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
 	char logs_dir[MAX_PATH] = { 0 };
 	_get_instance_dir(logs_dir, MAX_PATH);
 
+	{
+		char dir[MAX_PATH] = { 0 };
+		strcpy_s(dir, logs_dir);
+		strcat_s(dir, "\\data");
+		cdirrtn &= createDir(dir, err);
+		serr = (err == 0 ? serr : err);
+	}
+
 	{
 		char dir[MAX_PATH] = { 0 };
 		strcpy_s(dir, logs_dir);
@@ -1399,6 +1407,14 @@ int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
 		serr = (err == 0 ? serr : err);
 	}
 
+	{
+		char dir[MAX_PATH] = { 0 };
+		strcpy_s(dir, logs_dir);
+		strcat_s(dir, "\\log\\log_DBError");
+		cdirrtn &= createDir(dir, err);
+		serr = (err == 0 ? serr : err);
+	}
+
 	{
 		char dir[MAX_PATH] = { 0 };
 		strcpy_s(dir, logs_dir);
@@ -1811,7 +1827,7 @@ int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
 		g_bSendWebData_2 = 0;
 		g_bSendWebData_3 = 0;
 		vr_log("加密狗错误,后台将不能与油机、油罐和远程进行通讯\n");
-		MessageBox(nullptr, L"加密狗错误,后台将不能与油机、油罐和远程进行通讯!", nullptr, 0);
+		MessageBox(nullptr, L"加密狗错误,后台将不能与油机、油罐和远程进行通讯!", nullptr, MB_TOPMOST);
 	}
 
 

+ 39 - 8
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_app.cpp

@@ -575,6 +575,36 @@ void VRMonitorApp::OnClick (DuiLib::TNotifyUI& msg)
 		};
 		std::thread t1(func);
 		t1.detach();
+	}
+	else if(itemName == L"dbRecoverFromBackup")
+	{
+		DUI_OBJ(backupstate);
+		DUI_OBJ(dbRecoverFromBackup);
+
+		dbRecoverFromBackup->SetEnabled(false);
+		dbRecoverFromBackup->SetText("数据库修复中...");
+	
+		auto func = [&](){
+			string msg;
+			int rtn = g_backup.recoverFromBackup(msg);
+			if (rtn)
+			{
+				backupstate->SetText(string2Duistring(g_backup.GetStateString()));
+				backupstate->SetAttribute(L"textcolor", g_backup.getColor());
+				MessageBox(GetHWND(), L"数据修复成功,请重启在线监控软件", L"提示", MB_TOPMOST);
+			}
+			else
+			{
+				string str = "数据修复失败,错误信息:" + msg;
+				MessageBoxA(GetHWND(), str.c_str(), "提示", MB_TOPMOST);
+			}
+			dbRecoverFromBackup->SetText("修复数据库");
+			dbRecoverFromBackup->SetEnabled(true);
+		};
+		std::thread t1(func);
+		t1.detach();
+
+		
 	}
 	else if (itemName == L"pressure_reset_1" ||
 			itemName == L"pressure_reset_2" ||
@@ -653,16 +683,16 @@ void VRMonitorApp::OnClick (DuiLib::TNotifyUI& msg)
 					g_EnvironmentData.LiquidResistance = ppress->getdata();
 				}
 
-				MessageBox(GetHWND(), L"校准成功", L"提示", 0);
+				MessageBox(GetHWND(), L"校准成功", L"提示", MB_TOPMOST);
 			}
 			else
 			{
-				MessageBox(GetHWND(), L"压力数据必须处于正常状态才可校准", nullptr, 0);
+				MessageBox(GetHWND(), L"压力数据必须处于正常状态才可校准", nullptr, MB_TOPMOST);
 			}
 		}
 		else
 		{
-			MessageBox(GetHWND(), L"密码不对", nullptr, 0);
+			MessageBox(GetHWND(), L"密码不对", nullptr, MB_TOPMOST);
 		}
 
 	}
@@ -677,7 +707,7 @@ void VRMonitorApp::OnClick (DuiLib::TNotifyUI& msg)
 		auto pump = get_device_tree()->find_pump(pumpid);
 		if (pump != nullptr && g_engines[pump->engine_id - 1].getnozzlenum() >= 8)
 		{
-			MessageBox(GetHWND(), L"一个油机所有主板的总枪数不能超过8!", nullptr, 0);
+			MessageBox(GetHWND(), L"一个油机所有主板的总枪数不能超过8!", nullptr, MB_TOPMOST);
 		}
 		else
 		{
@@ -997,10 +1027,11 @@ void VRMonitorApp::OnClick (DuiLib::TNotifyUI& msg)
 	{
 		DUI_OBJ_EXT(setting_tab, CTabLayoutUI);
 		setting_tab->SelectItem(2);
-
-
-
-
+	}
+	else if (itemName == L"setting_pressureoffset")
+	{
+		DUI_OBJ_EXT(setting_tab, CTabLayoutUI);
+		setting_tab->SelectItem(3);
 	}
 	else if (itemName == L"gas_percentage" || itemName == L"gas_percentage_text" )
 	{

+ 2 - 1
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_common.h

@@ -512,7 +512,8 @@ typedef struct _filling_data
 
 typedef struct _filling_record
 {
-	unsigned fip;
+	unsigned fip;//程序中改为油机id使用
+	unsigned fip_origin;//fip_origin:协议数据中的原来的加油点fip
 	unsigned nozzle;
 	char tmBegin[15];
 	char tmEnd[15];

+ 3 - 0
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_db.cpp

@@ -69,6 +69,9 @@ BOOL db_manage::excute(LPCSTR lpszSql, sqlite3_callback callback_fun /*= nullptr
 		else
 		{
 			g_backup.SetState(BackupState_EXECUTEERROR);
+			string msg = sqlite3_engine::get_last_error();
+			vr_log_DBError(msg.c_str());
+
 		}
 
 	}

+ 9 - 0
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_ext.cpp

@@ -322,6 +322,7 @@ void vr_log_DBBackup(LPCSTR str)
 	logs_by_date(str, logs_dir);
 }
 
+//дµ½±¸·ÝÅ̵ÄÈÕÖ¾
 void vr_log_DBBackup_2(string path,LPCSTR str)
 {
 	char logs_dir[MAX_PATH] = { 0 };
@@ -330,6 +331,14 @@ void vr_log_DBBackup_2(string path,LPCSTR str)
 	strcat_s(logs_dir, "\\log\\log_DBBackup_2");
 	logs_by_date(str, logs_dir);
 }
+
+void vr_log_DBError(LPCSTR str)
+{
+	char logs_dir[MAX_PATH] = { 0 };
+	_get_instance_dir(logs_dir, MAX_PATH);
+	strcat_s(logs_dir, "\\log\\log_DBError");
+	logs_by_date(str, logs_dir);
+}
  
 void vr_WebLog_SH(LPCSTR str)
 {

+ 2 - 1
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_ext.h

@@ -58,7 +58,8 @@ void vr_log_vrState(LPCSTR str);
 void vr_log_middleware(LPCSTR str);
 void vr_log_error(LPCSTR str);
 void vr_log_DBBackup(LPCSTR str);
-void vr_log_DBBackup_2(string path,LPCSTR str);
+void vr_log_DBBackup_2(string path, LPCSTR str);
+void vr_log_DBError(LPCSTR str);
 
 void vr_WebLog_SH(LPCSTR str);
 

+ 4 - 1
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_object.cpp

@@ -322,7 +322,7 @@ void nozzle_object::filling_done(UINT fip, UINT noz, filling_record& record, BOO
 	*/
 
 
-	info.fip = record.fip;//这里用油机上传数据中的加油点
+	info.fip = record.fip_origin;
 	info.noz = noz;
 	info.ttc = record.data.ttc;
 	info.offset = record.data.VLR_OFFSET;
@@ -866,6 +866,7 @@ void pump_object::translate_message(LPVRMSG src, notify_fillingdone& dst, int pa
 		auto& cmd = src->data.CMD4;
 		dst.target = cmd.noz;
 		dst.record.fip = get_device_tree()->m_mapNozToEngine[cmd.noz];
+		dst.record.fip_origin = cmd.fip;
 		dst.record.nozzle = cmd.noz;
 		_bytes_rev (&dst.record.data.liquidFR, cmd.liqflow, sizeof cmd.liqflow);
 		_bytes_rev (&dst.record.data.liquidVL, cmd.liqvol, sizeof cmd.liqvol);
@@ -895,6 +896,7 @@ void pump_object::translate_message_vrc_485(LPVRMSG src, notify_fillingdone& dst
 		auto& cmd = src->data.CMD4_2;
 		dst.target = cmd.noz;
 		dst.record.fip = get_device_tree()->m_mapNozToEngine[cmd.noz];
+		dst.record.fip_origin = cmd.fip;
 		dst.record.nozzle = cmd.noz;
 		_bytes_rev(&dst.record.data.ttc, cmd.ttc, sizeof cmd.ttc);
 		_bytes_rev(&dst.record.data.liquidFR, cmd.liqflow, sizeof cmd.liqflow);
@@ -919,6 +921,7 @@ void pump_object::translate_message_new(LPVRMSG src, notify_fillingdone& dst, in
 	auto& cmd = src->data.CMD4_3;
 	dst.target = cmd.noz;
 	dst.record.fip = get_device_tree()->m_mapNozToEngine[cmd.noz];
+	dst.record.fip_origin = cmd.fip;
 	dst.record.nozzle = cmd.noz;
 	_bytes_rev(&dst.record.data.ttc, cmd.ttc, sizeof cmd.ttc);
 	_bytes_rev(&dst.record.data.liquidFR, cmd.liqflow, sizeof cmd.liqflow);

+ 5 - 5
VaporRecoveryMonitor/VaporRecoveryMonitor/VaporRecoveryMonitor/vr_ui.cpp

@@ -843,7 +843,7 @@ void PumpEditDlg::OnClick (TNotifyUI& msg)
 		auto ipv4L = inet_addr (ansi_ip);
 		if(INADDR_ANY == ipv4L || INADDR_NONE == ipv4L)
 		{
-			MessageBox (GetHWND (), L"请输入有效的主板地址!", nullptr, 0);
+			MessageBox(GetHWND(), L"请输入有效的主板地址!", nullptr, MB_TOPMOST);
 			return;
 		}
 
@@ -860,7 +860,7 @@ void PumpEditDlg::OnClick (TNotifyUI& msg)
 
 		if (0 == ps_->engine_id)
 		{
-			MessageBox(GetHWND(), L"请选择一个有效的油机号!", nullptr, 0);
+			MessageBox(GetHWND(), L"请选择一个有效的油机号!", nullptr, MB_TOPMOST);
 			return;
 		}
 
@@ -881,7 +881,7 @@ void PumpEditDlg::OnClick (TNotifyUI& msg)
 
 			if (newsize > 8)
 			{
-				MessageBox(GetHWND(), L"一个油机所有主板的总枪数不能超过8,请重新选择油机编号!", nullptr, 0);
+				MessageBox(GetHWND(), L"一个油机所有主板的总枪数不能超过8,请重新选择油机编号!", nullptr, MB_TOPMOST);
 				return;
 			}
 		}
@@ -916,7 +916,7 @@ void PumpEditDlg::OnClick (TNotifyUI& msg)
 		
 		if (ipset.find(string(ps_->ip)) != ipset.end())
 		{
-			MessageBox(GetHWND(), L"该主板地址已被其他主板使用!", nullptr, 0);
+			MessageBox(GetHWND(), L"该主板地址已被其他主板使用!", nullptr, MB_TOPMOST);
 			
 			Close(IDCANCEL);
 		}
@@ -1024,7 +1024,7 @@ void NozzleEditDlg::OnClick (TNotifyUI& msg)
 		unsigned id = _ttoi (nozzle_id->GetText ());
 		if(0 == id)
 		{
-			MessageBox (GetHWND (), L"请选择一个有效的油枪号!", nullptr, 0);
+			MessageBox(GetHWND(), L"请选择一个有效的油枪号!", nullptr, MB_TOPMOST);
 			return;
 		}
 		ns_->id = id;

BIN
VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控_版本发布说明.xlsx


BIN
VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统安装包/files/VR/VaporRecoveryMonitor.exe


+ 24 - 4
VaporRecoveryMonitor/油气回收系统安装包/油气回收在线监控系统安装包/files/VR/skin_1366_768/setting.xml

@@ -5,7 +5,8 @@
     <horizontallayout height="36" bkcolor="#ff2460a0" textpadding="20,0,0,0">
       <option   name="setting1"  width="100"  text="设置1"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff" selected="true"></option>
       <option   name="setting2"  width="100"  text="设置2"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff"></option>
-      <option   name="setting3"  width="100"  text="零压校准"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff"></option>
+      <option   name="setting3"  width="100"  text="设置3"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff"></option>
+      <option   name="setting_pressureoffset"  width="100"  text="零压校准"  group="setting" font ="316" textcolor="#ffffffff" bkcolor="#ff2460a0" selectedbkcolor="#ff95b4de" selectedtextcolor="#ffffffff"></option>
       
 
       <label></label>
@@ -92,7 +93,7 @@
 
 
 
-
+      <!--设置2-->
       <horizontallayout padding="5,10,5,5" bkcolor="#ffd6dfea">
        <verticallayout padding="15,15,5,5">
          
@@ -102,7 +103,6 @@
           <label text ="(限10个字)" width="100" font ="414"></label>
         </horizontallayout>
 
-
         <horizontallayout>
         </horizontallayout>
 
@@ -115,11 +115,29 @@
       </horizontallayout>
 
 
+
+
+      <!--设置3-->
+      <horizontallayout padding="5,10,5,5" bkcolor="#ffd6dfea">
+        <verticallayout padding="15,15,5,5">
+
+          <horizontallayout  height="50" >
+            <button name="dbRecoverFromBackup" text="修复数据库" padding="0,10,0,0" height="30" width="150"  bkcolor="#ff2460a0" textcolor="0xffffffff" font ="515"></button>
+            <label text ="当数据库备份处显示'主数据缺漏'时使用,需确保主数据库和备份数据库是同个油站的数据" padding="20,0,0,0"  width="800" font ="414"></label>
+          </horizontallayout>
+
+          <horizontallayout>
+          </horizontallayout>
+
+        </verticallayout>
+      </horizontallayout>
       
+      
+
+      <!--零压校准-->
        <horizontallayout padding="5,10,5,5" bkcolor="#ffd6dfea">
        <verticallayout padding="15,15,5,5">
          
-         
         <horizontallayout  height="30" >
           <label text ="零压校准(调零)须知:校准时传感器必须已经安装固定好,并处于大气压之下" width="800" font ="515"></label>
         </horizontallayout>
@@ -178,6 +196,8 @@
       </verticallayout>
       </horizontallayout>
     
+      
+