Jelajahi Sumber

补全数据库接口类接口;

sat23 4 tahun lalu
induk
melakukan
e3a8176fd7

+ 1 - 54
CTSManager/CTSManager/CTSManager.cpp

@@ -17,11 +17,6 @@
 #define new DEBUG_NEW
 #endif
 
-#define _STR_HOST_		"10.201.44.26"
-#define _STR_USER_		"root"
-#define _STR_PASSWD_	"Root@123"
-#define _STR_DBNAME_	"scbc_cts"
-
 #include "Database.h"
 // CCTSManagerApp
 
@@ -127,55 +122,7 @@ BOOL CCTSManagerApp::InitInstance()
 #endif
 
 #ifdef _DEBUG
-	CDatabase db;
-	if (db.Init(_STR_HOST_, _STR_USER_, _STR_PASSWD_, _STR_DBNAME_))
-	{
-		if (0) {
-			db.InserSoc(_T("RT2851C"), _T("RealTealk"), _T("RTK台湾"));
-			db.InserSoc(_T("RT2851M"), _T("RealTealk2"), _T("RTK台湾"));
-			std::vector<STSOC> vtSOC;
-			db.QuerySoc(vtSOC);
-
-			for (std::vector<STSOC>::iterator it = vtSOC.begin(); it != vtSOC.end(); it++) {
-				TRACE3(_T("name=%s, provider=%s, note=%s\n"), it->name.c_str(), it->provider.c_str(), it->note.c_str());
-				it->note = _T("xxxx1111xxx");
-				db.UpdateSoc(it->name, *it);
-			}
-		}
-
-		if (0) {
-			CFile file;
-			BYTE* pImage = NULL;
-			DWORD dwLength = 0;
-			if (file.Open(_T("D:\\桌面\\logo\\channels\\AccuWeather.png"), CFile::modeRead))
-			{
-				dwLength = file.GetLength();
-				pImage = new BYTE[dwLength];
-				file.Read(pImage, dwLength);
-				file.Close();
-			}
-
-			db.SetBinaryField("update brand set logo = ? where `name`='SCBC'", pImage, dwLength);
-			if (pImage)
-				delete[]pImage;
-			pImage = NULL;
-			dwLength = 0;
-		}
-
-		if (0)
-		{
-			BYTE* pImage = NULL;
-			DWORD dwLength = 0;
-			db.GetBinaryField("select logo from brand where `name`='SCBC';", (void**)&pImage, dwLength);
-
-			CFile file;
-			if (file.Open(_T("D:\\11.png"), CFile::modeCreate | CFile::modeWrite))
-			{
-				file.Write(pImage, dwLength);
-				file.Close();
-			}
-		}
-	}
+	DBTest();
 #endif
 
 	// 初始化 OLE 库

+ 313 - 2
CTSManager/CTSManager/Database.cpp

@@ -588,7 +588,7 @@ BOOL CDatabase::QueryBrand(std::vector<STBranch>& vtBrand)
 	return TRUE;
 }
 
-BOOL CDatabase::ImportLogo(std::string name, std::string file)
+BOOL CDatabase::ImportLogo(std::string brand, std::string file, BOOL bQuarter/*=FALSE*/)
 {
 	if (!PathFileExists(file.c_str()))
 		return FALSE;
@@ -597,8 +597,10 @@ BOOL CDatabase::ImportLogo(std::string name, std::string file)
 	return 0;
 }
 
-BOOL CDatabase::ExportLogo(std::string name, std::string file)
+BOOL CDatabase::ExportLogo(std::string brand, std::string file, BOOL bQuarter/*=FALSE*/)
 {
+
+
 	return 0;
 }
 
@@ -941,6 +943,262 @@ BOOL CDatabase::QueryUser(std::vector<STUser>& vtUser)
 	return TRUE;
 }
 
+BOOL CDatabase::InsertBranch(const STBranch& branch)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, INSER_BRANCH, branch.name.c_str(), branch.quarter.c_str(), 
+		branch.address.c_str(), branch.provider.c_str(), branch.chip.c_str(), 
+		branch.type.c_str(), branch.status.c_str(), branch.note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("InsertBranch error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::DeleteBranch(std::string branch)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, DEL_BRANCH, branch.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("DeleteBranch error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::UpdateBranch(std::string branch, const STBranch& stBranch)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, MOD_BRANCH, stBranch.quarter.c_str(), stBranch.address.c_str(), 
+		stBranch.provider.c_str(), stBranch.chip.c_str(), stBranch.type.c_str(), 
+		stBranch.status.c_str(), stBranch.note.c_str(),branch.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("UpdateBranch error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::QueryBranch(std::vector<STBranch>& vtBranch)
+{
+	CHECKDB;
+	if (0 != mysql_query(m_pConn, QUERY_BRANCH)) {
+#ifdef _DEBUG
+		TRACE1(_T("QueryBranch error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	// 获取表数据;
+	MYSQL_RES* pData = mysql_store_result(m_pConn);
+	if (pData == NULL) {
+#ifdef _DEBUG
+		TRACE1(_T("QueryBranch error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+#ifdef _DEBUG
+	// 统计表字段;
+	unsigned int nLen = mysql_num_fields(pData);
+	// 字段长度是否一致;
+	if (nLen != 8) {
+		mysql_free_result(pData);
+		return FALSE;
+	}
+
+	// 打印出字段名称;
+	TCHAR szLog[MAX_PATH] = { 0 };
+	for (int i = 0; i < nLen; i++) {
+		_stprintf_s(szLog, _T("字段名称:%s\n"), mysql_fetch_field(pData)->name);
+		OutputDebugString(szLog);
+	}
+#endif
+
+	// 遍历数据;
+	MYSQL_ROW row;
+	while ((row = mysql_fetch_row(pData)) != NULL) {
+		STBranch stBranch;
+		stBranch.name = row[0];
+		stBranch.quarter = row[1];
+		stBranch.address = row[2];
+		stBranch.provider = row[3];
+		stBranch.chip = row[4];
+		stBranch.type = row[5];
+		stBranch.status = row[6];
+		stBranch.note = row[7];
+		vtBranch.push_back(stBranch);
+	}
+
+	// 释放内存;
+	mysql_free_result(pData);
+
+	return TRUE;
+}
+
+BOOL CDatabase::InsertQBrand(const STQbrand& QBrand)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, INSER_QBRAND, QBrand.soc.c_str(), QBrand.brand.c_str(), QBrand.quarter.c_str(),
+		QBrand.whitelist.c_str(), QBrand.version.c_str(),
+		QBrand.oemkey.c_str(), QBrand.approved.c_str(),
+		QBrand.approveddate.c_str(), QBrand.fingerprint.c_str(),
+		QBrand.builddate.c_str(), QBrand.gtvs.c_str(),
+		QBrand.ftpdir.c_str(), QBrand.codedir.c_str(),
+		QBrand.note.c_str(), QBrand.status.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("InsertQBrand error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::DeleteQBrand(std::string soc, std::string quarter, std::string brand)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, DEL_QBRAND, soc.c_str(), brand.c_str(), quarter.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("DeleteQBrand error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::UpdateQBrand(std::string brand, STQbrand& QBrand)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, MOD_QBRAND, QBrand.soc.c_str(), QBrand.quarter.c_str(),
+		QBrand.brand.c_str(), QBrand.whitelist.c_str(),
+		QBrand.version.c_str(), QBrand.approved.c_str(),
+		QBrand.oemkey.c_str(), QBrand.approveddate.c_str(),
+		QBrand.fingerprint.c_str(), QBrand.builddate.c_str(),
+		QBrand.gtvs.c_str(), QBrand.note.c_str(),
+		QBrand.apps_cfg.c_str(), QBrand.fav_cfg.c_str(),
+		QBrand.local_cfg.c_str(), QBrand.ftpdir.c_str(),
+		QBrand.codedir.c_str(), QBrand.pre_apk.c_str(), QBrand.status.c_str(),
+		brand.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("UpdateQBrand error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::UpdateQBrand(std::string soc, std::string quarter, std::string brand, STQbrand& QBrand)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, MOD_QBRAND, 
+		QBrand.soc.c_str(), QBrand.quarter.c_str(), QBrand.brand.c_str(),
+		QBrand.whitelist.c_str(), QBrand.version.c_str(), QBrand.approved.c_str(),
+		QBrand.oemkey.c_str(), QBrand.approveddate.c_str(), QBrand.fingerprint.c_str(),
+		QBrand.builddate.c_str(), QBrand.gtvs.c_str(), QBrand.note.c_str(),
+		QBrand.apps_cfg.c_str(), QBrand.fav_cfg.c_str(), QBrand.local_cfg.c_str(),
+		QBrand.ftpdir.c_str(), QBrand.codedir.c_str(), QBrand.pre_apk.c_str(), QBrand.status.c_str(),
+		brand.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("UpdateQBrand error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::QueryQBrand(std::vector<STQbrand>& vtQBrand)
+{
+	CHECKDB;
+	if (0 != mysql_query(m_pConn, QUERY_QBRAND)) {
+#ifdef _DEBUG
+		TRACE1(_T("QueryServer error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	// 获取表数据;
+	MYSQL_RES* pData = mysql_store_result(m_pConn);
+	if (pData == NULL) {
+#ifdef _DEBUG
+		TRACE1(_T("QueryServer error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+#ifdef _DEBUG
+	// 统计表字段;
+	unsigned int nLen = mysql_num_fields(pData);
+	// 字段长度是否一致;
+	if (nLen != 19) {
+		mysql_free_result(pData);
+		return FALSE;
+	}
+
+	// 打印出字段名称;
+	TCHAR szLog[MAX_PATH] = { 0 };
+	for (int i = 0; i < nLen; i++) {
+		_stprintf_s(szLog, _T("字段名称:%s\n"), mysql_fetch_field(pData)->name);
+		OutputDebugString(szLog);
+	}
+#endif
+
+	// 遍历数据;
+	MYSQL_ROW row;
+	while ((row = mysql_fetch_row(pData)) != NULL) {
+		STQbrand QBrand;
+		QBrand.soc = row[0];
+		QBrand.quarter = row[1];
+		QBrand.brand = row[2];
+		QBrand.whitelist = row[3];
+		QBrand.version = row[4];
+		QBrand.oemkey = row[5];
+		QBrand.approved = row[6];
+		QBrand.approveddate = row[7];
+		QBrand.fingerprint = row[8];
+		QBrand.builddate = row[9];
+		QBrand.gtvs = row[10];
+		QBrand.note = row[11];
+		QBrand.apps_cfg = row[12];
+		QBrand.fav_cfg = row[13];
+		QBrand.local_cfg = row[14];
+		QBrand.ftpdir = row[15];
+		QBrand.codedir = row[16];
+		QBrand.pre_apk = row[17];
+		QBrand.status = row[18];
+		vtQBrand.push_back(QBrand);
+	}
+
+	// 释放内存;
+	mysql_free_result(pData);
+
+	return TRUE;
+}
+
 // 示例;
 void test(MYSQL* mysql)
 {
@@ -1129,3 +1387,56 @@ void test(MYSQL* mysql)
 		exit(0);
 	}
 }
+
+void DBTest()
+{
+	CDatabase db;
+	if (db.Init(_STR_HOST_, _STR_USER_, _STR_PASSWD_, _STR_DBNAME_))
+	{
+		if (1) {
+			db.InserSoc(_T("RT2851C"), _T("RealTealk"), _T("RTK台湾"));
+			db.InserSoc(_T("RT2851M"), _T("RealTealk2"), _T("RTK台湾"));
+			std::vector<STSOC> vtSOC;
+			db.QuerySoc(vtSOC);
+
+			for (std::vector<STSOC>::iterator it = vtSOC.begin(); it != vtSOC.end(); it++) {
+				TRACE3(_T("name=%s, provider=%s, note=%s\n"), it->name.c_str(), it->provider.c_str(), it->note.c_str());
+				it->note = _T("xxxx1111xxx");
+				db.UpdateSoc(it->name, *it);
+			}
+		}
+
+		if (0) {
+			CFile file;
+			BYTE* pImage = NULL;
+			DWORD dwLength = 0;
+			if (file.Open(_T("D:\\桌面\\logo\\channels\\AccuWeather.png"), CFile::modeRead))
+			{
+				dwLength = file.GetLength();
+				pImage = new BYTE[dwLength];
+				file.Read(pImage, dwLength);
+				file.Close();
+			}
+
+			db.SetBinaryField("update brand set logo = ? where `name`='SCBC'", pImage, dwLength);
+			if (pImage)
+				delete[]pImage;
+			pImage = NULL;
+			dwLength = 0;
+		}
+
+		if (0)
+		{
+			BYTE* pImage = NULL;
+			DWORD dwLength = 0;
+			db.GetBinaryField("select logo from brand where `name`='SCBC';", (void**)&pImage, dwLength);
+
+			CFile file;
+			if (file.Open(_T("D:\\11.png"), CFile::modeCreate | CFile::modeWrite))
+			{
+				file.Write(pImage, dwLength);
+				file.Close();
+			}
+		}
+	}
+}

+ 10 - 2
CTSManager/CTSManager/Database.h

@@ -87,8 +87,8 @@ public:
 	BOOL UpdateBrand(std::string name, const STBranch& brand);
 	BOOL QueryBrand(std::vector<STBranch>& vtBrand);
 	// 导入/导出品牌logo;
-	BOOL ImportLogo(std::string name, std::string file);
-	BOOL ExportLogo(std::string name, std::string file);
+	BOOL ImportLogo(std::string brand, std::string file, BOOL bQuarter=FALSE);
+	BOOL ExportLogo(std::string brand, std::string file, BOOL bQuarter=FALSE);
 
 	// 季度表;
 	BOOL InsertQuarter(const STQuarter& quarter);
@@ -112,12 +112,20 @@ public:
 	BOOL QueryUser(std::vector<STUser>& vtUser);
 
 	// 分支表;
+	BOOL InsertBranch(const STBranch& branch);
+	BOOL DeleteBranch(std::string branch);
+	BOOL UpdateBranch(std::string branch, const STBranch& stBranch);
+	BOOL QueryBranch(std::vector<STBranch>& vtBranch);
 
 	// 季度品牌表;
 	BOOL InsertQBrand(const STQbrand& QBrand);
 	BOOL DeleteQBrand(std::string soc, std::string quarter, std::string brand);
+	BOOL UpdateQBrand(std::string brand, STQbrand& QBrand);
 	BOOL UpdateQBrand(std::string soc, std::string quarter, std::string brand, STQbrand &QBrand);
 	BOOL QueryQBrand(std::vector<STQbrand>& vtQBrand);
 };
 
+
+extern void DBTest();
+
 #endif

+ 6 - 4
CTSManager/CTSManager/MainFrm.cpp

@@ -163,9 +163,10 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
 #endif
 
+#if ENABLE_TITILBAR
 	m_wndTitleBar.EnableDocking(CBRS_ALIGN_TOP);
 	DockPane(&m_wndTitleBar);
-
+#endif
 	m_wndNavBar.EnableDocking(CBRS_ALIGN_LEFT);
 	DockPane(&m_wndNavBar);	
 
@@ -269,6 +270,7 @@ BOOL CMainFrame::CreateDockingWindows()
 	}
 #endif
 
+#if ENABLE_TITILBAR
 	// 标题栏
 	CString strFileView;
 	bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
@@ -279,13 +281,13 @@ BOOL CMainFrame::CreateDockingWindows()
 		TRACE0("未能创建“文件视图”窗口\n");
 		return FALSE; // 未能创建
 	}
-
+#endif
 	// 左导航栏
 	CString strClassView;
 	bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
 	ASSERT(bNameValid);
 	// 如何禁止改变大小:将最后2个默认参数全改为,将且删除注册表“应用程序向导生成的本地应用程序”才会生效;
-	if (!m_wndNavBar.Create(strFileView, this, CRect(0, 0, 200, 200), FALSE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT, 0, 0))
+	if (!m_wndNavBar.Create(strClassView, this, CRect(0, 0, 200, 200), FALSE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT, 0, 0))
 	{
 		TRACE0("未能创建“文件视图”窗口\n");
 		return FALSE; // 未能创建
@@ -308,7 +310,7 @@ BOOL CMainFrame::CreateDockingWindows()
 	bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
 	ASSERT(bNameValid);
 	// 将参数4改为FALSE,就不会有Gripper;
-	if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), FALSE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
+	if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), FALSE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI, AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE))
 	{
 		TRACE0("未能创建“属性”窗口\n");
 		return FALSE; // 未能创建

+ 2 - 1
CTSManager/CTSManager/MainFrm.h

@@ -53,8 +53,9 @@ protected:  // 控件条嵌入成员
 	CClassView        m_wndClassView;
 #endif
 	CNavbar			  m_wndNavBar;
+#if ENABLE_TITILBAR
 	CTitleBar		  m_wndTitleBar;
-
+#endif
 #if ENABLE_OUTPUT
 	COutputWnd        m_wndOutput;
 #endif

+ 1 - 1
CTSManager/CTSManager/TitleBar.cpp

@@ -224,7 +224,7 @@ void CTitleBar::OnPaint()
 	CRect rc;
 	GetClientRect(rc);
 	CBrush   brush;
-	brush.CreateSolidBrush(0xFFEFD5);
+	brush.CreateSolidBrush(CMFCVisualManager::GetInstance()->GetToolbarHighlightColor());
 	dc.FillRect(&rc, &brush);
 #endif
 }

+ 3 - 1
CTSManager/CTSManager/pch.h

@@ -23,8 +23,10 @@
 // 启用输出;
 #define ENABLE_OUTPUT 0
 // 日历及文件树;
-#define ENABLE_TREE 1
+#define ENABLE_TREE 0
 // 默认的Outbar;
 #define ENABLE_OUTBAR 0
+// 标题栏;
+#define ENABLE_TITILBAR 0
 
 #endif //PCH_H

+ 24 - 12
CTSManager/CTSManager/table.h

@@ -4,46 +4,57 @@
 #pragma once
 
 #include <string>
+
+#define _STR_HOST_		"localhost"
+#define _STR_USER_		"root"
+#define _STR_PASSWD_	"123456"
+#define _STR_DBNAME_	"scbc_cts"
+
 // 插入数据;
-#define INSER_PROVIDER _T("INSERT INTO `provider` (`name`,`note`) VALUES ('%s', '%s');")
+//#define INSER_PROVIDER _T("INSERT INTO `provider` (`name`,`note`) VALUES ('%s', '%s');")
 #define INSER_SOC _T("INSERT INTO `soc` (`name`,`provider`,`note`) VALUES ('%s', '%s', '%s');")
 #define INSER_QUARTER _T("INSERT INTO `quarter` (`name`,`scp`,`note`) VALUES ('%s', '%s', '%s');")
 #define INSER_BRAND _T("INSERT INTO `brand` (`name`,`note`,``) VALUES ('%s', '%s');")
 #define INSER_SERVER _T("INSERT INTO `server` (`name`,`ip`,`type`,`user`,`password`,`note`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s');")
 #define INSER_BRANCH _T("INSERT INTO `branch` (`name` ,`quarter`,`address`,`provider`,`chip`,`type`,`status`,`note`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');")
 #define INSER_USER _T("INSERT INTO `user` (`user`,`password`,`permission`) VALUES ('%s', '%s', '%s');")
-#define INSER_QBRANCH _T("INSERT INTO `qbrand` \
-(`soc`,`brand`,`quarter`,`whitelist`,`version`,`oemkey`,`approved`,`approveddate`,`fingerprint`,`builddate`,`gtvs`,`ftpdir`,`codedir`,`note`)\
- VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');")
+#define INSER_QBRAND _T("INSERT INTO `qbrand` \
+(`soc`,`brand`,`quarter`,`whitelist`,`version`,`oemkey`,`approved`,`approveddate`,`fingerprint`,`builddate`,`gtvs`,`ftpdir`,`codedir`,`note`, `status`)\
+ VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');")
 #define INSER_LOG _T("INSERT INTO `log` (`user`,`datetime`,`content`) VALUES ('%s', 'datetime', '%s');")
 
+
 // 删除数据;
-#define DEL_PROVIDER _T("DELETE FROM `provider` WHERE `name` = '%s';")
+//#define DEL_PROVIDER _T("DELETE FROM `provider` WHERE `name` = '%s';")
 #define DEL_SOC _T("DELETE FROM `soc` WHERE `name` = '%s';")
 #define DEL_BRAND _T("DELETE FROM `brand` WHERE `name` = '%s';")
 #define DEL_QUARTER _T("DELETE FROM `quarter` where `name` = '%s';")
 #define DEL_SERVER _T("DELETE FROM `server` where `name` = '%s';")
 #define DEL_USER _T("DELETE FROM `user` where `user` = '%s';")
-#define DEL_QBRAND _T("DELETE FROM `qbrand` where `soc` = '%s', `brand`='%s',`quarter`='%s';")
-
+#define DEL_QBRAND _T("DELETE FROM `qbrand` where `soc` = '%s' and `brand`='%s' and`quarter`='%s';")
+#define DEL_BRANCH _T("DELETE FROM `brach` where `name` = '%s';")
+#define DEL_LOG _T("DELETE FROM `log` where `id` = '%s';")
 
 // 更新数据;
-#define MOD_PROVIDER _T("UPDATE `provider` SET `name`='%s',`note`='%s' WHERE `name`='%s';")
+//#define MOD_PROVIDER _T("UPDATE `provider` SET `name`='%s',`note`='%s' WHERE `name`='%s';")
 #define MOD_SOC _T("UPDATE `soc` SET `name`='%s', `provider`='%s', `note`='%s' WHERE `name`='%s';")
 #define MOD_BRAND _T("UPDATE `brand` SET `name`='%s',`note`='%s' WHERE `name`='%s';")
 #define MOD_QUARTER _T("UPDATE `quarter` SET `name`='%s', `scp` = '%s' ,`note`='%s' WHERE `name`='%s';")
 #define MOD_SERVER _T("UPDATE `server` SET `name`='%s', `ip` = '%s', `type`='%s', `user`='%s', `password`='%s', `note`='%s' WHERE `name`='%s';")
 #define MOD_USER _T("UPDATE `user` SET `user`='%s', `password` = '%s', `permission`='%s' WHERE `user`='%s';")
-#define MOD_QBRAND _T("")
+#define MOD_QBRAND _T("UPDATE qbrand SET soc='%s', `quarter` = '%s', brand = '%s', whitelist = '%s', version = '%s', approved = '%s', oemkey = '%s', approveddate = '%s', fingerprint = '%s', builddate = '%s', gtvs = '%s', note = '%s', apps_cfg = '%s', fav_cfg = '%s', local_cfg = '%s', ftpdir = '%s', codedir = '%s', pre_apk = '%s', `status` = '%s' FROM qbrand WHERE `brand` = '%s'")
+#define MOD_BRANCH _T("UPDATE `branch` SET `quater`='%s', `address`='%s', `provider`='%s', `chip`='%s', `type`='%s', `status`='%s', `note`='%s' WHERE `name`='%s';")
 
 // 查询数据;
-#define QUERY_PROVIDER _T("SELECT `name`, `note` FROM `provider`;")
+//#define QUERY_PROVIDER _T("SELECT `name`, `note` FROM `provider`;")
 #define QUERY_SOC _T("SELECT `name`, `provider`, `note` FROM `soc`;")
 #define QUERY_BRAND _T("SELECT `name`, `note` FROM `brand`;")
 #define QUERY_QUARTER _T("SELECT `name`,`scp`, `note` FROM `quarter`;")
 #define QUERY_SERVER _T("SELECT `name`, `ip`, `type`, `user`, `password`, `note` FROM `server`;")
 #define QUERY_USER _T("SELECT `user`, `password`, `permission` FROM `user`;")
-#define QUERY_QBRAND _T("")
+#define QUERY_QBRAND _T("SELECT soc, `quarter`, brand, whitelist, version, oemkey, approved, approveddate, fingerprint, builddate, gtvs, note, apps_cfg, fav_cfg, local_cfg, ftpdir, codedir, pre_apk, `status` FROM qbrand;")
+#define QUERY_BRANCH _T("SELECT `name`, `quarter`, `address`, `provider`, `chip`, `type`, `status`, `note` FROM `branch`;")
+#define QUERY_LOG _T("SELECT `id`, `user`,`content`,`datetime` FROM `log`;")
 
 #if DEPRECATED
 // 供应商表;
@@ -108,7 +119,7 @@ typedef struct {
 	std::string brand;						// 季度品牌名称;
 	std::string quarter;					// 季度;
 	std::string whitelist;					// 白名单状态;
-	std::string verion;						// 软件版本号;
+	std::string version;						// 软件版本号;
 	std::string oemkey;						// oem key;
 	std::string approved;					// 认证状态;
 	std::string approveddate;				// 认证通过日期;
@@ -126,6 +137,7 @@ typedef struct {
 	std::string ftpdir;						// ftp下载路径;
 	std::string codedir;					// 代码路径,只对admin可见;
 	std::string note;						// 备注;
+	std::string status;						// 状态:提醒要修改脚本;
 }STQbrand, *pSTQbrand;
 
 // 日志表;

+ 4 - 3
CTSManager/scbc_cts.sql

@@ -4,14 +4,14 @@
  Source Server         : mysql
  Source Server Type    : MySQL
  Source Server Version : 50731
- Source Host           : 10.201.44.26:3306
+ Source Host           : localhost:3306
  Source Schema         : scbc_cts
 
  Target Server Type    : MySQL
  Target Server Version : 50731
  File Encoding         : 65001
 
- Date: 27/11/2020 15:43:05
+ Date: 08/12/2020 09:00:30
 */
 
 SET NAMES utf8mb4;
@@ -82,7 +82,8 @@ CREATE TABLE `qbrand`  (
   `local_cfg` text CHARACTER SET gb18030 COLLATE gb18030_chinese_ci NULL COMMENT 'model中的SChannel配置',
   `ftpdir` varchar(255) CHARACTER SET gb18030 COLLATE gb18030_chinese_ci NULL DEFAULT NULL COMMENT 'ftp下载路径',
   `codedir` varchar(255) CHARACTER SET gb18030 COLLATE gb18030_chinese_ci NULL DEFAULT NULL COMMENT '代码路径:只对Admin有效',
-  `pre_apk` varchar(255) CHARACTER SET gb18030 COLLATE gb18030_chinese_ci NULL DEFAULT NULL COMMENT '品牌要预装的apk'
+  `pre_apk` varchar(255) CHARACTER SET gb18030 COLLATE gb18030_chinese_ci NULL DEFAULT NULL COMMENT '品牌要预装的apk',
+  `status` bit(1) NULL DEFAULT NULL COMMENT '相对上一季度是否有配置变化:主要用于软件提醒该品牌有修改,在编译时需要注意变更处理'
 ) ENGINE = InnoDB CHARACTER SET = gb18030 COLLATE = gb18030_chinese_ci ROW_FORMAT = Dynamic;
 
 -- ----------------------------