Commit 7e05214c authored by 刘乐's avatar 刘乐

1,方案管理规划和表创建接口

parent bb7193b7
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
#ifndef DLLEXPORT #ifndef DLLEXPORT
#ifdef WINDOWS #ifdef WINDOWS
#ifdef __cplusplus #ifdef __cplusplus
#define DLLEXPORT extern "C" __declspec(dllexport) #define DLLEXPORT __declspec(dllexport)
#else #else
#define DLLEXPORT __declspec(dllexport) __stdcall #define DLLEXPORT __declspec(dllexport) __stdcall
#endif // __cplusplus #endif // __cplusplus
......
...@@ -86,7 +86,7 @@ void CivDownStreamTrackingTest::test(char* uri) ...@@ -86,7 +86,7 @@ void CivDownStreamTrackingTest::test(char* uri)
{ {
// 追踪节点编号 // 追踪节点编号
char sn[32]; char sn[32];
strcpy(sn, "JD00000047"); strcpy(sn, "JD00000016");
char result[1024 * 128]; char result[1024 * 128];
......
...@@ -36,12 +36,12 @@ int main(int argc, char* argv[]) ...@@ -36,12 +36,12 @@ int main(int argc, char* argv[])
context.contextTest(findUri);*/ context.contextTest(findUri);*/
// 上游追踪 // 上游追踪
/* CivTestContext context(new CivUpstreamTrackingTest()); CivTestContext context(new CivUpstreamTrackingTest());
context.contextTest(findUri);*/ context.contextTest(findUri);
// 下游追踪 // 下游追踪
CivTestContext context(new CivDownStreamTrackingTest()); /*CivTestContext context(new CivDownStreamTrackingTest());
context.contextTest(findUri); context.contextTest(findUri);*/
// 水源供水范围分析 // 水源供水范围分析
......
...@@ -7,7 +7,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pandaDbManager", "pandaDbMa ...@@ -7,7 +7,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pandaDbManager", "pandaDbMa
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pandaAnalysis", "pandaAnalysis\pandaAnalysis.vcxproj", "{47F29C6C-9170-4188-A7AF-6BBCF38BFF6F}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pandaAnalysis", "pandaAnalysis\pandaAnalysis.vcxproj", "{47F29C6C-9170-4188-A7AF-6BBCF38BFF6F}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
{BE73E098-3D8C-4F80-88DD-B36A2BB68B64} = {BE73E098-3D8C-4F80-88DD-B36A2BB68B64}
{2B673FBC-3F91-4952-BDD3-4B802A761162} = {2B673FBC-3F91-4952-BDD3-4B802A761162} {2B673FBC-3F91-4952-BDD3-4B802A761162} = {2B673FBC-3F91-4952-BDD3-4B802A761162}
EndProjectSection EndProjectSection
EndProject EndProject
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "CivHydrSimulation.h" #include "CivHydrSimulation.h"
#include "CivTrackingAnalysis.h" #include "CivTrackingAnalysis.h"
bool DLLEXPORT getDataByInterval(char* uri, char* date, char* interval) bool __declspec(dllexport) getDataByInterval(char* uri, char* date, char* interval)
{ {
CivDbConn* dbConn = new CivPgConn(uri); CivDbConn* dbConn = new CivPgConn(uri);
if (!dbConn->open()) if (!dbConn->open())
...@@ -31,7 +31,7 @@ bool DLLEXPORT getDataByInterval(char* uri, char* date, char* interval) ...@@ -31,7 +31,7 @@ bool DLLEXPORT getDataByInterval(char* uri, char* date, char* interval)
return true; return true;
} }
bool DLLEXPORT hdyrSimulation(char* uri) bool __declspec(dllexport) hdyrSimulation(char* uri)
{ {
// 创建数据库连接 // 创建数据库连接
CivDbConn* pgConn = new CivPgConn(uri); CivDbConn* pgConn = new CivPgConn(uri);
...@@ -48,7 +48,7 @@ bool DLLEXPORT hdyrSimulation(char* uri) ...@@ -48,7 +48,7 @@ bool DLLEXPORT hdyrSimulation(char* uri)
return flag; return flag;
} }
bool DLLEXPORT qualitySimulation(char* uri) bool __declspec(dllexport) qualitySimulation(char* uri)
{ {
// 创建数据库连接 // 创建数据库连接
CivDbConn* pgConn = new CivPgConn(uri); CivDbConn* pgConn = new CivPgConn(uri);
...@@ -66,7 +66,7 @@ bool DLLEXPORT qualitySimulation(char* uri) ...@@ -66,7 +66,7 @@ bool DLLEXPORT qualitySimulation(char* uri)
return flag; return flag;
} }
bool DLLEXPORT trackingSimulation(char* uri, char* sN, int hours, char* result) bool __declspec(dllexport) trackingSimulation(char* uri, char* sN, int hours, char* result)
{ {
// 创建数据库连接 // 创建数据库连接
...@@ -92,7 +92,7 @@ bool DLLEXPORT trackingSimulation(char* uri, char* sN, int hours, char* result) ...@@ -92,7 +92,7 @@ bool DLLEXPORT trackingSimulation(char* uri, char* sN, int hours, char* result)
return flag; return flag;
} }
bool DLLEXPORT getRptByCondition(char* uri, char* type, char* condition, char* result) bool __declspec(dllexport) getRptByCondition(char* uri, char* type, char* condition, char* result)
{ {
CivDbConn* dbConn = new CivPgConn(uri); CivDbConn* dbConn = new CivPgConn(uri);
if (!dbConn->open()) if (!dbConn->open())
...@@ -176,7 +176,7 @@ bool DLLEXPORT getRptByCondition(char* uri, char* type, char* condition, char* r ...@@ -176,7 +176,7 @@ bool DLLEXPORT getRptByCondition(char* uri, char* type, char* condition, char* r
return true; return true;
} }
bool DLLEXPORT upstreamTracking(char* uri, char* sn, char* result) bool __declspec(dllexport) upstreamTracking(char* uri, char* sn, char* result)
{ {
// 创建数据库连接 // 创建数据库连接
CivDbConn* pgConn = new CivPgConn(uri); CivDbConn* pgConn = new CivPgConn(uri);
...@@ -199,7 +199,7 @@ bool DLLEXPORT upstreamTracking(char* uri, char* sn, char* result) ...@@ -199,7 +199,7 @@ bool DLLEXPORT upstreamTracking(char* uri, char* sn, char* result)
return true; return true;
} }
bool DLLEXPORT downstreamTracking(char* uri, char* sn, char* result) bool __declspec(dllexport) downstreamTracking(char* uri, char* sn, char* result)
{ {
// 创建数据库连接 // 创建数据库连接
CivDbConn* pgConn = new CivPgConn(uri); CivDbConn* pgConn = new CivPgConn(uri);
...@@ -222,7 +222,7 @@ bool DLLEXPORT downstreamTracking(char* uri, char* sn, char* result) ...@@ -222,7 +222,7 @@ bool DLLEXPORT downstreamTracking(char* uri, char* sn, char* result)
return true; return true;
} }
bool DLLEXPORT waterSupplyScopeAnalysis(char* uri, char* sn, char* result) bool __declspec(dllexport) waterSupplyScopeAnalysis(char* uri, char* sn, char* result)
{ {
// 创建数据库连接 // 创建数据库连接
CivDbConn* pgConn = new CivPgConn(uri); CivDbConn* pgConn = new CivPgConn(uri);
......
#ifndef CIVHYDRFUNCINTER_H #ifndef CIVHYDRFUNCINTER_H
#define CIVHYDRFUNCINTER_H #define CIVHYDRFUNCINTER_H
#define DLLEXPORT __declspec(dllexport)
#define FUNEXPORT extern "C" __declspec(dllexport)
#if defined(__cplusplus) #if defined(__cplusplus)
extern "C" { extern "C" {
...@@ -12,7 +13,7 @@ extern "C" { ...@@ -12,7 +13,7 @@ extern "C" {
*@param sn 追踪节点本点号 *@param sn 追踪节点本点号
*@param result 追踪结果 *@param result 追踪结果
*/ */
bool DLLEXPORT upstreamTracking(char* uri, char* sn, char* result); bool __declspec(dllexport) upstreamTracking(char* uri, char* sn, char* result);
/** /**
*@brief 下游追踪 *@brief 下游追踪
...@@ -20,7 +21,7 @@ extern "C" { ...@@ -20,7 +21,7 @@ extern "C" {
*@param sn 追踪节点本点号 *@param sn 追踪节点本点号
*@param result 追踪结果 *@param result 追踪结果
*/ */
bool DLLEXPORT downstreamTracking(char* uri, char* sn, char* result); bool __declspec(dllexport) downstreamTracking(char* uri, char* sn, char* result);
/** /**
*@brief 供水范围追踪 *@brief 供水范围追踪
...@@ -28,7 +29,7 @@ extern "C" { ...@@ -28,7 +29,7 @@ extern "C" {
*@param sn 追踪节点本点号 *@param sn 追踪节点本点号
*@param result 追踪结果 *@param result 追踪结果
*/ */
bool DLLEXPORT waterSupplyScopeAnalysis(char* uri, char* sn, char* result); bool __declspec(dllexport) waterSupplyScopeAnalysis(char* uri, char* sn, char* result);
/** /**
*@brief 获取当前日期和时段的结果值 *@brief 获取当前日期和时段的结果值
...@@ -38,21 +39,21 @@ extern "C" { ...@@ -38,21 +39,21 @@ extern "C" {
*@param result 获取的结果值 *@param result 获取的结果值
*@return 1: 成功,其他值失败 *@return 1: 成功,其他值失败
*/ */
bool DLLEXPORT getRptByCondition(char* uri, char* type, char* condition, char* result); bool __declspec(dllexport) getRptByCondition(char* uri, char* type, char* condition, char* result);
/** /**
*@brief 水力计算服务 *@brief 水力计算服务
*@param uri:数据库连接地址 *@param uri:数据库连接地址
*@return 1:成功,其他值失败 *@return 1:成功,其他值失败
*/ */
bool DLLEXPORT hdyrSimulation(char* uri); bool __declspec(dllexport) hdyrSimulation(char* uri);
/** /**
*@brief 水质计算 *@brief 水质计算
*@param uri:数据库连接地址 *@param uri:数据库连接地址
*@return 1:成功,其他值失败 *@return 1:成功,其他值失败
*/ */
bool DLLEXPORT qualitySimulation(char* uri); bool __declspec(dllexport) qualitySimulation(char* uri);
/** /**
*@brief 水质追踪分析,扩散分析 *@brief 水质追踪分析,扩散分析
...@@ -62,7 +63,7 @@ extern "C" { ...@@ -62,7 +63,7 @@ extern "C" {
*@param result:输出结果:json字符串 *@param result:输出结果:json字符串
*@return 1:成功,其他值失败 *@return 1:成功,其他值失败
*/ */
bool DLLEXPORT trackingSimulation(char* uri, char* sN, int hours,char* result); bool __declspec(dllexport) trackingSimulation(char* uri, char* sN, int hours,char* result);
/** /**
*@brief 获取管网计算特定时段的结果 *@brief 获取管网计算特定时段的结果
...@@ -71,7 +72,7 @@ extern "C" { ...@@ -71,7 +72,7 @@ extern "C" {
*@param interval: 时段,整数 *@param interval: 时段,整数
*@return 成功,失败 *@return 成功,失败
*/ */
bool DLLEXPORT getDataByInterval(char* uri, char* date, char* interval); bool __declspec(dllexport) getDataByInterval(char* uri, char* date, char* interval);
#if defined(__cplusplus) #if defined(__cplusplus)
} }
......
#ifndef CIVMIDDLEWAREQUERY_H
#define CIVMIDDLEWAREQUERY_H
/**
ݿѯ
*/
class CivMiddlewareQuery
{
public:
};
#endif // !CIVMIDDLEWAREQUERY_H
#include "CivSimulResultCache.h" #include "CivSimulResultCache.h"
#include"CivSysLog.h" #include"CivSysLog.h"
#include "CivDbConn.h"
void CivSimulResultCache::addNodeQuality(float quality, int interval, Str sNo) void CivSimulResultCache::addNodeQuality(float quality, int interval, Str sNo)
{ {
...@@ -13,6 +14,11 @@ void CivSimulResultCache::addNodeQuality(float quality, int interval, Str sNo) ...@@ -13,6 +14,11 @@ void CivSimulResultCache::addNodeQuality(float quality, int interval, Str sNo)
mNodeItemsMap[interval][sNo].dQuality = quality; mNodeItemsMap[interval][sNo].dQuality = quality;
} }
bool CivSimulResultCache::updateToDb(CivDbConn* dbConn)
{
return true;
}
void CivSimulResultCache::addLinkQuality(float quality, int interval, Str sNo) void CivSimulResultCache::addLinkQuality(float quality, int interval, Str sNo)
{ {
if (mLinkItemsMap.find(interval) == mLinkItemsMap.end()) if (mLinkItemsMap.find(interval) == mLinkItemsMap.end())
...@@ -35,69 +41,6 @@ void CivSimulResultCache::addLinkItems(const LinkResultItem& linkItem) ...@@ -35,69 +41,6 @@ void CivSimulResultCache::addLinkItems(const LinkResultItem& linkItem)
mLinkItemsMap[linkItem.dInterval][linkItem.szNo] = linkItem; mLinkItemsMap[linkItem.dInterval][linkItem.szNo] = linkItem;
} }
bool CivSimulResultCache::updateToDb(CivDbConn* dbConn)
{
CivSysLog::getInstance()->error("开始写入数据库", "CivSimulResultCache", __FUNCTION__);
if (dbConn == nullptr)
{
CivSysLog::getInstance()->error("dbConn == nullptr", "CivSimulResultCache", __FUNCTION__);
return false;
}
for (auto iter = mNodeItemsMap.begin(); iter != mNodeItemsMap.end(); iter++)
{
NodeResultItems nodeItems = iter->second;
if (!dbConn->updateNode(nodeItems))
{
CivSysLog::getInstance()->error("存储节点数据失败", "CivSimulResultCache", __FUNCTION__);
}
}
for (auto iter = mLinkItemsMap.begin(); iter != mLinkItemsMap.end(); iter++)
{
LinkResultItems nodeItems = iter->second;
if (!dbConn->updateLink(nodeItems))
{
CivSysLog::getInstance()->error("存储管段数据失败", "CivSimulResultCache", __FUNCTION__);
}
}
CivSysLog::getInstance()->error("写入数据库完成", "CivSimulResultCache", __FUNCTION__);
return true;
}
bool CivSimulResultCache::updateToDb(CivDbConnection* dbConn)
{
CivSysLog::getInstance()->error("开始写入数据库", "CivSimulResultCache", __FUNCTION__);
if (dbConn == nullptr)
{
CivSysLog::getInstance()->error("dbConn == nullptr", "CivSimulResultCache", __FUNCTION__);
return false;
}
for (auto iter = mNodeItemsMap.begin(); iter != mNodeItemsMap.end(); iter++)
{
NodeResultItems nodeItems = iter->second;
if (!dbConn->updateNode(nodeItems))
{
CivSysLog::getInstance()->error("存储节点数据失败", "CivSimulResultCache", __FUNCTION__);
}
}
for (auto iter = mLinkItemsMap.begin(); iter != mLinkItemsMap.end(); iter++)
{
LinkResultItems nodeItems = iter->second;
if (!dbConn->updateLink(nodeItems))
{
CivSysLog::getInstance()->error("存储管段数据失败", "CivSimulResultCache", __FUNCTION__);
}
}
CivSysLog::getInstance()->error("写入数据库完成", "CivSimulResultCache", __FUNCTION__);
clear();
return true;
}
void CivSimulResultCache::getResultByTime(int time, NodeResultItems& nodeItems, LinkResultItems& linkItems) void CivSimulResultCache::getResultByTime(int time, NodeResultItems& nodeItems, LinkResultItems& linkItems)
{ {
nodeItems.clear(); nodeItems.clear();
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
#define CIVSIMULRESULTCACHE_H #define CIVSIMULRESULTCACHE_H
#include <map> #include <map>
#include "CivDbConn.h"
#include "CivDbConnection.h"
#include "CivTypes.h" #include "CivTypes.h"
class CivDbConn;
/** /**
模拟结果缓存类 模拟结果缓存类
*/ */
...@@ -49,8 +49,6 @@ public: ...@@ -49,8 +49,6 @@ public:
*@brief 缓存数据更新到数据库 *@brief 缓存数据更新到数据库
*@param dbConn:数据库连接对象 *@param dbConn:数据库连接对象
*/ */
bool updateToDb(CivDbConnection* dbConn);
bool updateToDb(CivDbConn* dbConn); bool updateToDb(CivDbConn* dbConn);
/** /**
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include "CivSimulResultCache.h" #include "CivSimulResultCache.h"
#include "CivHydrSimulation.h" #include "CivHydrSimulation.h"
#include "CivGraphFactory.h" #include "CivGraphFactory.h"
#include "CivDbConn.h"
CivTrackingAnalysis::CivTrackingAnalysis() CivTrackingAnalysis::CivTrackingAnalysis()
:mGraph(new ALGraph<CivGraphJunction, CivGraphEdage>()) :mGraph(new ALGraph<CivGraphJunction, CivGraphEdage>())
...@@ -92,28 +93,28 @@ bool CivTrackingAnalysis::transformJson(const std::vector<CivGraphJunction>& jun ...@@ -92,28 +93,28 @@ bool CivTrackingAnalysis::transformJson(const std::vector<CivGraphJunction>& jun
const std::vector<CivGraphEdage>& pipes, std::string& jsonResult) const std::vector<CivGraphEdage>& pipes, std::string& jsonResult)
{ {
jsonResult.append("{\"node\":[");
// 节点
size_t juncTotal = junctions.size();
for (int i = 0; i < juncTotal; i++)
{
CivGraphJunction junction = junctions.at(i);
std::string sn = junction.getSn();
std::string xCoord = junction.getXCoord();
std::string yCoord = junction.getYCoord();
jsonResult.append("["); jsonResult.append("[");
jsonResult.append(sn);
jsonResult.append(","); //// 节点
jsonResult.append(xCoord); //size_t juncTotal = junctions.size();
jsonResult.append(","); //for (int i = 0; i < juncTotal; i++)
jsonResult.append(yCoord); //{
jsonResult.append("],"); // CivGraphJunction junction = junctions.at(i);
}
jsonResult = jsonResult.substr(0, jsonResult.length() - 1); // std::string sn = junction.getSn();
jsonResult.append("],\"pipes\":["); // std::string xCoord = junction.getXCoord();
// std::string yCoord = junction.getYCoord();
// jsonResult.append("[");
// jsonResult.append(sn);
// jsonResult.append(",");
// jsonResult.append(xCoord);
// jsonResult.append(",");
// jsonResult.append(yCoord);
// jsonResult.append("],");
//}
//jsonResult = jsonResult.substr(0, jsonResult.length() - 1);
//jsonResult.append("],\"pipes\":[");
// 管段 // 管段
size_t pipesTotal = pipes.size(); size_t pipesTotal = pipes.size();
...@@ -124,22 +125,18 @@ bool CivTrackingAnalysis::transformJson(const std::vector<CivGraphJunction>& jun ...@@ -124,22 +125,18 @@ bool CivTrackingAnalysis::transformJson(const std::vector<CivGraphJunction>& jun
if (edge.getSN().empty()) if (edge.getSN().empty())
continue; continue;
jsonResult.append("["); jsonResult.append("[[");
jsonResult.append(edge.getSN());
jsonResult.append(",");
jsonResult.append(edge.getLength());
jsonResult.append(",");
jsonResult.append(edge.getStartX()); jsonResult.append(edge.getStartX());
jsonResult.append(","); jsonResult.append(",");
jsonResult.append(edge.getStartY()); jsonResult.append(edge.getStartY());
jsonResult.append(","); jsonResult.append("],[");
jsonResult.append(edge.getEndX()); jsonResult.append(edge.getEndX());
jsonResult.append(","); jsonResult.append(",");
jsonResult.append(edge.getEndY()); jsonResult.append(edge.getEndY());
jsonResult.append("],"); jsonResult.append("]],");
} }
jsonResult = jsonResult.substr(0, jsonResult.length() - 1); jsonResult = jsonResult.substr(0, jsonResult.length() - 1);
jsonResult.append("]}"); jsonResult.append("]");
return true; return true;
} }
...@@ -184,6 +181,7 @@ bool CivTrackingAnalysis::downstreamTracking(const std::string& sN, std::string& ...@@ -184,6 +181,7 @@ bool CivTrackingAnalysis::downstreamTracking(const std::string& sN, std::string&
bool CivTrackingAnalysis::waterSupplyScopeAnalysis(const std::string& sN, std::string& jsonResult) bool CivTrackingAnalysis::waterSupplyScopeAnalysis(const std::string& sN, std::string& jsonResult)
{ {
return true; return true;
} }
...@@ -194,9 +192,9 @@ bool CivTrackingAnalysis::upstreamTracking(const std::string& sN, ...@@ -194,9 +192,9 @@ bool CivTrackingAnalysis::upstreamTracking(const std::string& sN,
// 上溯,图反向 // 上溯,图反向
ALGraph<CivGraphJunction, CivGraphEdage>* graph = mGraph->reverseGraph(); ALGraph<CivGraphJunction, CivGraphEdage>* graph = mGraph->reverseGraph();
CivGraphJunction junction(sN); CivGraphJunction junction(sN);
graph->getVisitedResult(junction, junctions, pipes); graph->getVisitedResult(junction, junctions, pipes);
delete graph; delete graph;
return true; return true;
} }
......
...@@ -171,7 +171,6 @@ ...@@ -171,7 +171,6 @@
<ClInclude Include="CivHydrSimulation.h" /> <ClInclude Include="CivHydrSimulation.h" />
<ClInclude Include="CivBuilder.h" /> <ClInclude Include="CivBuilder.h" />
<ClInclude Include="CivInpDirector.h" /> <ClInclude Include="CivInpDirector.h" />
<ClInclude Include="CivMiddlewareQuery.h" />
<ClInclude Include="CivNewInp.h" /> <ClInclude Include="CivNewInp.h" />
<ClInclude Include="CivSimulResultCache.h" /> <ClInclude Include="CivSimulResultCache.h" />
<ClInclude Include="CivTrackingAnalysis.h" /> <ClInclude Include="CivTrackingAnalysis.h" />
......
...@@ -62,9 +62,6 @@ ...@@ -62,9 +62,6 @@
<ClInclude Include="CivSimulResultCache.h"> <ClInclude Include="CivSimulResultCache.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="CivMiddlewareQuery.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CivHydrSimulation.h"> <ClInclude Include="CivHydrSimulation.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
......
#include "CivConnection.h"
CivConnection::CivConnection()
:mValid(false)
{
}
CivConnection::~CivConnection()
{
}
bool CivConnection::isValid() const
{
return mValid;
}
std::string CivConnection::getLastError() const
{
return mLastError;
}
#pragma once
#include <string>
/**
数据库连接类
*/
class CivConnection
{
public:
CivConnection();
virtual ~CivConnection();
virtual bool connect(const std::string url) = 0;
/**
*@brief 建立数据,与具体的数据有关子类实现
*/
virtual bool open() = 0;
/**
*@brief 关闭数据,与具体的数据有关子类实现
*/
virtual bool close() = 0;
/**
*@brief 执行sql, 非查询操作,与具体的数据有关子类实现
*@param 非查询类,sql语句
*/
virtual bool execNoQquery(const std::string& sql) = 0;
/**
*@brief 执行查询操作,与具体的数据有关子类实现
*@param sql 查询sql语句
*/
virtual bool execQuery(const std::string& sql) = 0;
// 检查连接
bool isValid() const;
// 获取信息
std::string getLastError() const;
private:
bool mValid;
std::string mLastError;
};
#include "CivDbConnection.h"
#include "CivCommonUtils.h"
#include<iostream>
#include <sstream>
CivDbConnection::CivDbConnection(char* uri)
: mConn(NULL), mUri(uri)
{
}
CivDbConnection::~CivDbConnection()
{
close();
}
bool CivDbConnection::tableExist(StrQuote tableName)
{
char sql[256] = "select count(*) from pg_class where relname = '";
strcat_s(sql, tableName.c_str());
strcat_s(sql, "'");
if (!execSql(sql))
return false;
char* res = PQgetvalue(mResult, 0, 0);
PQclear(mResult);
int number = atoi(res);
return number > 0 ? true : false;
}
bool CivDbConnection::open()
{
mConn = PQconnectdb(mUri);
if (PQstatus(mConn) == CONNECTION_BAD) {
mConn = NULL;
PQfinish(mConn);
return false;
}
mIsOpen = true;
return true;
}
bool CivDbConnection::isValid() const
{
return mIsOpen;
}
void CivDbConnection::close()
{
if(mConn != NULL)
PQfinish(mConn);
mIsOpen = false;
}
Tables CivDbConnection::getTables(StrQuote netName,StrQuote schema)
{
if (!isValid())
return Tables();
std::string utf8NetName = TransUTFCoding(netName); // 中文乱码
std::string sql = "select \"name\" from public.__layer_info__ where net_code in(select code from public.__layer_net_info__ where \"name\" ='" + utf8NetName + "' and \"schema\" = '"+ schema +"')";
if (!execSql(sql))
return Tables();
Tables tables;
int rows = PQntuples(mResult);
int columns = PQnfields(mResult);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
char* item =PQgetvalue(mResult, i, j);
std::string ss = UTFTransCoding(item);
tables.push_back(ss);
}
}
PQclear(mResult);
return tables;
}
bool CivDbConnection::deleteByDate(StrQuote table, StrQuote filedName, StrQuote fieldValue)
{
if (!isValid())
return false;
char delSql[256] = "delete from \"";
strcat_s(delSql, table.c_str());
strcat_s(delSql, "\" where ");
strcat_s(delSql, filedName.c_str());
strcat_s(delSql, "='");
strcat_s(delSql, fieldValue.c_str());
strcat_s(delSql, "'");
std::string utf8Sql = TransUTFCoding(delSql);
if (!execSql(utf8Sql))
return false;
return true;
}
bool CivDbConnection::updateNode(const NodeResultItems& nodeItems)
{
if (!isValid())
return false;
std::stringstream os;
NodeFieldName filedNames;
os << "INSERT INTO public."<< NODERESULTTABLE<<" ( ";
os << filedNames.Number<<",";
os<< filedNames.dDemand << ",";
os<< filedNames.dHead<<",";
os<< filedNames.dElevation<< ",";
os<< filedNames.dPressure<< ",";
os<< filedNames.dTankLevel<< ",";
os<< filedNames.dTankMaxVolume<< ",";
os<< filedNames.dTankVolume<<",";
os << filedNames.dDate << ",";
os << filedNames.dInterval<<",";
os << filedNames.dQuality<< ",";
os << filedNames.dModifyTime;
os<< ") VALUES";
std::string preSql = os.str();
os.flush();
os.clear();
os.str("");
// 2, 参数值
for(auto iter= nodeItems.begin();iter!=nodeItems.end();iter++)
{
NodeResultItem item = iter->second;
os << "('" << item.szNo << "',";
os << item.dDemand << ",";
os << item.dHead << ",";
os << item.dElevation << ",";
os << item.dPressure << ",";
os << item.dTankLevel << ",";
os << item.dTankMaxVolume << ",";
os << item.dTankVolume << ",";
os <<"'"<< CurrentDate <<"',";
os << item.dInterval<<",";
os << item.dQuality<< ",";
os << "'"<< CurrentTime <<"'";
auto subiter = iter;
++subiter;
if (subiter == nodeItems.end())
{
os << ")";
}
else
{
os << "),";
}
}
std::string sql = TransUTFCoding(preSql) + os.str();
os.clear();
os.str("");
if (!execSql(sql))
return false;
return true;
}
bool CivDbConnection::updateLink(const LinkResultItems& lineItems)
{
if (!isValid())
return false;
std::stringstream os;
LinkFiledName filedNames;
std::string currData = CurrentDate;
os<< "INSERT INTO public."<< PIPERESULTTABLE <<"( ";
os<< filedNames.szNo<< ",";
os<< filedNames.dFlow<< ",";
os<< filedNames.nFlowDirect<< ",";
os<< filedNames.dVelocity<< ",";
os<< filedNames.dHeadloss<< ",";
os<< filedNames.dUnitHeadloss<< ",";
os<< filedNames.dFromNodHeadloss<< ",";
os<< filedNames.dToNodHeadloss<< ",";
os<< filedNames.dLocalHeadloss<< ",";
os<< filedNames.dFrictionHeadloss<<",";
os << filedNames.szStatus << ",";
os << filedNames.dDate << ",";
os << filedNames.dInterval<<",";
os << filedNames.dQuality << ",";
os << filedNames.dModifyTime;
os<< ") VALUES";
std::string preSql = os.str();
os.clear();
os.str("");
// 2, 参数值
for(auto iter = lineItems.begin();iter!=lineItems.end();iter++)
{
LinkResultItem item =iter->second;
os<<"('" <<item.szNo<<"'"<< ",";
os<< item.dFlow<< ",";
os<< item.nFlowDirect<<",";
os<< item.dVelocity<< ",";
os<< item.dHeadloss<< ",";
os<< item.dUnitHeadloss<< ",";
os<< item.dFromNodHeadloss<< ",";
os<< item.dToNodHeadloss<< ",";
os<< item.dLocalHeadloss<< ",";
os<< item.dFrictionHeadloss<< ",";
os<< "'"<<TransUTFCoding(item.szStatus)<<"'"<<",";
os <<"'"<< CurrentDate << "',";
os<< item.dInterval<<",";
os << item.dQuality << ",";
os <<"'" << CurrentTime <<"'";
auto subIte = iter;
++subIte;
if (subIte == lineItems.end())
os << ")";
else
os << "),";
}
std::string utf8Sql = TransUTFCoding(preSql);
std::string sql = utf8Sql + os.str();
os.clear();
os.str("");
if (!execSql(sql))
return false;
return true;
}
bool CivDbConnection::updateNodeByInterval(StrQuote currDate, StrQuote interval)
{
if (!isValid())
return false;
std::stringstream os;
NodeFieldName filedNames;
os << "UPDATE "
<< TransUTFCoding(PIPENODE) << " AS tb1 set ("
<< TransUTFCoding("总水头") << ","
<< TransUTFCoding("压力") << ","
<< TransUTFCoding("实际需水量")<<","
<<TransUTFCoding("水质")
<< ")=( "
<< "tb2." << TransUTFCoding(filedNames.dHead) << ","
<< "tb2." << TransUTFCoding(filedNames.dPressure) << ","
<< "tb2." << TransUTFCoding(filedNames.dDemand) << ","
<< "tb2." << TransUTFCoding(filedNames.dQuality) << ")" << " from "
<< TransUTFCoding(NODERESULTTABLE) << " AS tb2 where tb1."
<< TransUTFCoding(filedNames.Number) << "= tb2."
<< TransUTFCoding(filedNames.Number) << " AND tb2."
<< TransUTFCoding(filedNames.dDate) << "='" << currDate << "' AND tb2."
<< TransUTFCoding(filedNames.dInterval) << "=" << interval;
std::string updateSql = os.str();
std::cout << updateSql << std::endl;
os.clear();
os.str("");
if (!execSql(updateSql))
return false;
return true;
}
bool CivDbConnection::updateLinkByInterval(StrQuote currDate, StrQuote interval)
{
if (!isValid())
return false;
std::stringstream os;
LinkFiledName filedNames;
os << "UPDATE "
<< TransUTFCoding(PIPELINE) << " AS tb1 set ("
<< TransUTFCoding("流量") << ","
<< TransUTFCoding("流速") << ","
<< TransUTFCoding("单位水头损") <<","
<< TransUTFCoding("水头总损失")<< ","
<< TransUTFCoding("摩擦水头损")<<","
<< TransUTFCoding("上点水头")<<","
<< TransUTFCoding("本点水头")<<","
<< TransUTFCoding("水质") << ","
<< TransUTFCoding("局部水头损")
<<")=( "
<< "tb2." <<TransUTFCoding(filedNames.dFlow) << ","
<< "tb2." << TransUTFCoding(filedNames.dVelocity) << ","
<< "tb2." << TransUTFCoding(filedNames.dUnitHeadloss)<<","
<< "tb2." << TransUTFCoding(filedNames.dHeadloss)<<","
<< "tb2." << TransUTFCoding(filedNames.dFrictionHeadloss) << ","
<< "tb2." << TransUTFCoding(filedNames.dFromNodHeadloss) << ","
<< "tb2." << TransUTFCoding(filedNames.dToNodHeadloss) << ","
<< "tb2." << TransUTFCoding(filedNames.dQuality) << ","
<< "tb2." << TransUTFCoding(filedNames.dLocalHeadloss) <<")"<< " from "
<< TransUTFCoding(PIPERESULTTABLE) << " AS tb2 where tb1."
<< TransUTFCoding(filedNames.szNo) << "= tb2."
<< TransUTFCoding(filedNames.szNo) << " AND tb2."
<< TransUTFCoding(filedNames.dDate) << "='" << currDate << "' AND tb2."
<< TransUTFCoding(filedNames.dInterval) << "=" << interval;
std::string updateSql = os.str();
os.clear();
os.str("");
if (!execSql(updateSql))
return false;
return true;
}
Componets CivDbConnection::getComponets(StrQuote tableName)
{
if (!isValid())
return Nodes();
std::string utf8Name = TransUTFCoding(tableName);
std::string sql = "select * from public.\"" + utf8Name + "\"";
if (!execSql(sql))
{
return Nodes();
}
Componets nodes;
// 取数据到容器中
getData(nodes);
return nodes;
}
Componets CivDbConnection::getComponetsByWhere(StrQuote tableName, StrQuote where)
{
if (!isValid())
return Componets();
std::string utf8Name = TransUTFCoding(tableName);
std::string utf8Where = TransUTFCoding(where);
char sql[128] = "select * from public.";
strcat_s(sql, utf8Name.c_str());
strcat_s(sql, utf8Where.c_str());
if (!execSql(sql))
{
return Componets();
}
Componets comps;
// 取数据到容器中
getData(comps);
return comps;
}
void CivDbConnection::getData(Componets& comp)
{
if (mResult == NULL)
return;
int rows = PQntuples(mResult);
int columns = PQnfields(mResult);
for (int i = 0; i < rows; i++)
{
Componet node;
for (int j = 0; j < columns; j++)
{
char* item = PQgetvalue(mResult, i, j);
char* fieldName = PQfname(mResult, j); // 获取列表字段名
std::string itemStr = UTFTransCoding(item);
std::string fieldStr = UTFTransCoding(fieldName);
node.insert(std::pair<std::string, std::string>(fieldStr, itemStr));
}
comp.push_back(node);
}
PQclear(mResult);
}
Componets CivDbConnection::getNodeByCode(StrQuote table, StrQuote code)
{
if (!isValid())
return Nodes();
char sql[256] = "select * from public.\"";
strcat_s(sql, TransUTFCoding(table).c_str());
strcat_s(sql, "\"");
strcat_s(sql, " where code = '");
strcat_s(sql, code.c_str());
strcat_s(sql, "'");
if (!execSql(sql))
{
return Nodes();
}
Componets componets;
getData(componets);
return componets;
}
Componets CivDbConnection::getLineByCode(StrQuote table, StrQuote code)
{
if (!isValid())
return Nodes();
char sql[256] = "select * from public.\"";
strcat_s(sql, TransUTFCoding(table).c_str());
strcat_s(sql,"\"");
strcat_s(sql, " where from_code = '");
strcat_s(sql, code.c_str());
strcat_s(sql, "' or to_code= '");
strcat_s(sql, code.c_str());
strcat_s(sql, "'");
if (!execSql(sql))
{
return Nodes();
}
Componets componets;
getData(componets);
return componets;
}
Componets CivDbConnection::getLikelyPipes(StrQuote tableName)
{
if (!isValid())
return Componets();
// 查询点数据
char sql[256] = "select * from public.\"";
strcat_s(sql, TransUTFCoding(tableName).c_str());
strcat_s(sql,"\"");
if (!execSql(sql))
{
return Componets();
}
Componets nodes;
getData(nodes);
// 查询线表
if (nodes.size() <= 0)
return Componets();
// 查询:连接节点也有可能连接水源,或者水库
std::vector<Str> tables;
tables.push_back(PIPENODE);
tables.push_back(RESIVOIR);
tables.push_back(TANK);
// 阀门类型映射
std::map<Str, Str> mValvesMap;
mValvesMap.insert(std::pair<Str, Str>(PRV_TYPE,"PRV"));
mValvesMap.insert(std::pair<Str, Str>(PSV_TYPE, "PSV"));
mValvesMap.insert(std::pair<Str, Str>(PBV_TYPE, "PBV"));
mValvesMap.insert(std::pair<Str, Str>(FCV_TYPE, "FCV"));
mValvesMap.insert(std::pair<Str, Str>(TCV_TYPE, "TCV"));
mValvesMap.insert(std::pair<Str, Str>(GPV_TYPE, "PRV"));
std::vector<Str> mVavesTables;
mVavesTables.push_back(PRV_TYPE);
mVavesTables.push_back(PSV_TYPE);
mVavesTables.push_back(PBV_TYPE);
mVavesTables.push_back(FCV_TYPE);
mVavesTables.push_back(TCV_TYPE);
mVavesTables.push_back(GPV_TYPE);
// 不同阀门对应的特殊参数
std::map<Str, Str> mParameterMap;
mParameterMap.insert(std::pair<Str, Str>(PRV_TYPE, "恒定压力值"));
mParameterMap.insert(std::pair<Str, Str>(PSV_TYPE, "恒定压力值"));
mParameterMap.insert(std::pair<Str, Str>(PBV_TYPE, "恒定压力值"));
mParameterMap.insert(std::pair<Str, Str>(FCV_TYPE, "流量设置"));
mParameterMap.insert(std::pair<Str, Str>(TCV_TYPE, "流量设置"));
mParameterMap.insert(std::pair<Str, Str>(GPV_TYPE, "水头损失曲"));
// 根据点数据查询起点和终点,管径
size_t total = nodes.size();
for (int i = 0; i < total; i++)
{
Componet componet = nodes[i];
Str bendianhao = componet.find("本点号")->second;
if (bendianhao.empty() )
{
Str ID = componet.find("id")->second;
Str type = mValvesMap.find(tableName)->second;
Str newbendian = type + ID;
nodes[i]["编号"] = newbendian;
}
else {
nodes[i]["编号"] = bendianhao;
}
Str code = componet.find("code")->second;
// 跟点
Componets lines = getLineByCode(PIPELINE, code);
size_t lTotal = lines.size();
if (lTotal == 2)
{
Componet lin = lines[0];
nodes[i]["上点号"] = lin.find("本点号")->second;
nodes[i]["本点号"] = lin.find("上点号")->second;
Str diameter = lin.find("管径")->second;
nodes[i]["管径"] = diameter;
Str number = lin.find("id")->second;
addFilter(PIPELINE, number);
// 阀门类型设置特殊字段
std::vector<Str>::iterator iter = std::find(mVavesTables.begin(), mVavesTables.end(), tableName);
if (iter!=mVavesTables.end())
{
nodes[i]["类型"] = mValvesMap.find(tableName)->second;
Str fieldType = mParameterMap.find(tableName)->second;
nodes[i]["参数设置"] = componet.find(fieldType)->second;
}
}
}
return nodes;
}
void CivDbConnection::addFilter(Str type, Str number)
{
mFilter[type].insert(number);
}
FiledFilter CivDbConnection::getFilter() const
{
return mFilter;
}
bool CivDbConnection::createTable(CivTableTemp& temp)
{
if (&temp == NULL)
return false;
Str sql = temp.createSql();
Str finalSql = TransUTFCoding(sql);
return execSql(finalSql);
}
bool CivDbConnection::execSql(std::string sql)
{
if (sql.empty())
return false;
mResult = PQexec(mConn, sql.c_str());
char* error = PQresultErrorMessage(mResult);
std::string errorStr = error;
if ( !errorStr.empty())
{
mLastError = error;
CivSysLog::getInstance()->error(mLastError, "CivDbConnection", __FUNCTION__);
PQclear(mResult);
return false;
}
return true;
}
void CivDbConnection::clearResult()
{
PQclear(mResult);
}
\ No newline at end of file
#pragma once
#include "CivTypes.h"
#include <vector>
#include <set>
#include <libpq-fe.h>
#include "CivTableTemp.h"
#include "CivSysLog.h"
#define DLLEXPORT __declspec(dllexport)
class CivDbConnection;
/**
数据库连接类,获取数据,写入数据接口
*/
class DLLEXPORT CivDbConnection
{
public:
CivDbConnection(char* uri);
~CivDbConnection();
/**
*@brief 获取管网的所有表
*@netName: 管网名
*/
Tables getTables(StrQuote netName, StrQuote schema = "public");
/**
*@brief 获取管网组件数据:管线,节点,水源等(必须组件)
*@tableName: 组件表
*/
Componets getComponets(StrQuote tableName);
Componets getComponetsByWhere(StrQuote tableName, StrQuote where);
/**
*@brief 水泵,阀门 (节点转换为管线)
*@tableName: 组件表
*/
Componets getLikelyPipes(StrQuote tableName);
bool tableExist(StrQuote tableName);
/**
*@brief 创建表格
*@tableName: 表名
*@schema:
*@tableType:表类型,点结果,线结果
*/
bool createTable(CivTableTemp& temp);
bool deleteByDate(StrQuote table, StrQuote filedName, StrQuote fieldValue);
bool updateNodeByInterval(StrQuote currDate, StrQuote interval);
bool updateLinkByInterval(StrQuote currDate, StrQuote interval);
/**
*@brief 刷新模拟的水质字段值
*@quality: 水质
*@currDate: 模拟的日期
*@StrQuote: 模拟的次数
*/
bool updateNodeQuality(const NodeResultItems& nodeItems);
bool updatePipeQuality(const LinkResultItems& lineItems);
/**
*@brief 更新点表数据
*@nodeItems:需要更新的值
*/
bool updateNode(const NodeResultItems& nodeItems);
/**
*@brief 更新线表的数据
*@lineItems: 线数据
*/
bool updateLink(const LinkResultItems& lineItems);
bool open();
void close();
void addFilter(Str type, Str number);
FiledFilter getFilter() const;
private:
bool isValid() const;
/**
*@brief 查询与点连接的线
*@table: 线表
*@code:
*/
Componets getLineByCode(StrQuote table, StrQuote code);
Componets getNodeByCode(StrQuote table, StrQuote code);
/**
*@brief 执行sql语句
*@sql: 需要执行的sql语句
*/
bool execSql(std::string sql);
void clearResult();
/**
*@brief 从查询集取出数据
*@result: 查询结果集
*@comp: 数据容器
*/
void getData( Componets& comp);
private:
PGconn* mConn;
PGresult* mResult;
bool mIsOpen = false;
char* mUri;
char* mLastError;
FiledFilter mFilter; // 表名:对应的编号
};
\ No newline at end of file
#include "CivDbUtils.h"
CivDbUtils::CivDbUtils()
{
}
\ No newline at end of file
#pragma once
class CivDbUtils
{
public:
CivDbUtils();
private:
};
#include "CivMaintainModel.h"
CivMaintainModel::CivMaintainModel()
{
}
void CivMaintainModel::maintain()
{
}
void CivMaintainModel::addNecessaryTable(const std::string& table)
{
}
bool CivMaintainModel::checkTable(const std::string& table)
{
return true;
}
bool CivMaintainModel::checkTableFiled(const std::string& talbe, const std::string& filed, const std::string& filedType)
{
return true;
}
void CivMaintainModel::addTableFiled(const std::string& table, const std::string& filed, const std::string& filedType)
{
}
void CivMaintainModel::deleteTableFiled(const std::string& table, const std::string& filed)
{
}
\ No newline at end of file
#pragma once
#include "CivDbConn.h"
#include <vector>
/**
维护水力模型必要的表
*/
class DBEXPORT CivMaintainModel
{
public:
CivMaintainModel();
/**
*@brief 维护模型必要的表
*/
void maintain();
/**
*@brief 添加模型所必须的表
*@param table 表名
*/
void addNecessaryTable(const std::string& table);
private:
/**
*@brief 检查表是否存在
*/
bool checkTable(const std::string& table);
/**
*@brief 检查表字段
*@param table 表名
*@param filed 表字段
*@param filedType 表字段类型
*/
bool checkTableFiled(const std::string& table, const std::string& filed, const std::string& filedType);
/**
*@brief 添加表字段
*@param table 表名
*@param filed 表字段
*@param filedType 表字段类型
*/
void addTableFiled(const std::string& table, const std::string& filed, const std::string& filedType);
/**
*@brief 删除表字段
*@param table 表名
*@param filed 表字段
*/
void deleteTableFiled(const std::string& table, const std::string& filed);
private:
std::vector<std::string> mNecessTables;
};
...@@ -10,9 +10,13 @@ CivTableTemp::CivTableTemp() ...@@ -10,9 +10,13 @@ CivTableTemp::CivTableTemp()
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_VARCHAR64, "varchar(64)")); mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_VARCHAR64, "varchar(64)"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_VARCHAR128, "varchar(128)")); mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_VARCHAR128, "varchar(128)"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_VARCHAR256,"varchar(256)")); mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_VARCHAR256,"varchar(256)"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_BOOLEAN, "boolean"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_CHARACTER_VARYING,"character varying"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_DATETIME, "timestamp")); mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_DATETIME, "timestamp"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_JSON, "json")); mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_JSON, "json"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_DATE, "date")); mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_DATE, "date"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_GEOM_POINT,"geometry(Point,4326)"));
mFieldTyepMap.insert(std::pair<FieldType, std::string>(CivTableTemp::FILED_GEOM_LINE, "geometry(MultiLineString,4326)"));
} }
CivTableTemp::~CivTableTemp() CivTableTemp::~CivTableTemp()
...@@ -340,3 +344,184 @@ CivCurveTableTemp::CivCurveTableTemp() :CivTableTemp() ...@@ -340,3 +344,184 @@ CivCurveTableTemp::CivCurveTableTemp() :CivTableTemp()
addProperty(fileds.CurveType, CivTableTemp::FILED_INTEGER); addProperty(fileds.CurveType, CivTableTemp::FILED_INTEGER);
addProperty(fileds.CurveData, CivTableTemp::FILED_VARCHAR256); addProperty(fileds.CurveData, CivTableTemp::FILED_VARCHAR256);
} }
/**
方案点表
*/
CivProjNodeTableTemp::CivProjNodeTableTemp() :CivTableTemp()
{
setName(PROJNODETABLE);
TableField fileds;
addProperty(fileds.ProjCode, CivTableTemp::FILED_VARCHAR64);
addProperty(fileds.ProjType, CivTableTemp::FILED_INT);
addProperty(fileds.ProjGeom, CivTableTemp::FILED_GEOM_POINT);
addProperty(fileds.ProjSn, CivTableTemp::FILED_VARCHAR64);
addProperty(fileds.ProjXcoord, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjYcoord, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjDesc, CivTableTemp::FILED_CHARACTER_VARYING);
addProperty(fileds.ProjLabel, CivTableTemp::FILED_VARCHAR64);
addProperty(fileds.ProElev, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjBaseDemand, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjPattern, CivTableTemp::FILED_VARCHAR64);
addProperty(fileds.ProjDemandType, CivTableTemp::FILED_VARCHAR64);
addProperty(fileds.ProjDiffuserCoeff, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjInitQuality, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjSourceQuality, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjDmaID, CivTableTemp::FILED_VARCHAR64);
addProperty(fileds.ProjDemand, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjConsumption, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjLackWater, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjLackWaterPer, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjTotalWater, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjTotalHead, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjPressure, CivTableTemp::FILED_DOUBLE);
addProperty(fileds.ProjQuality, CivTableTemp::FILED_DOUBLE);
}
/**
方案线表
*/
CivProjPipeTableTemp::CivProjPipeTableTemp() : CivTableTemp()
{
setName(PROJPIPETABLE);
TableField fileds;
addProperty(fileds.ProjCode , CivTableTemp::FILED_VARCHAR64);// "方案名";
addProperty(fileds.ProjType , CivTableTemp::FILED_BOOLEAN);// "修改类型";
addProperty(fileds.ProjGeom , CivTableTemp::FILED_GEOM_LINE);// "Geom";
addProperty(fileds.ProjSn , CivTableTemp::FILED_VARCHAR64);// "编号";
addProperty(fileds.ProjStartID , CivTableTemp::FILED_VARCHAR64);// "起始节点";
addProperty(fileds.ProjEndID , CivTableTemp::FILED_VARCHAR64);// "终止节点";
addProperty(fileds.ProjDesc , CivTableTemp::FILED_CHARACTER_VARYING);// "描述";
addProperty(fileds.ProjLabel , CivTableTemp::FILED_VARCHAR64);// "标签";
addProperty(fileds.ProjLength , CivTableTemp::FILED_DOUBLE);// "管长";
addProperty(fileds.ProjDiameter , CivTableTemp::FILED_DOUBLE);// "管径";
addProperty(fileds.ProjMaterial , CivTableTemp::FILED_VARCHAR64);// "管材";
addProperty(fileds.ProjFractionCoeff , CivTableTemp::FILED_DOUBLE);// "摩阻系数";
addProperty(fileds.ProjLoclLossCoeff , CivTableTemp::FILED_DOUBLE);// "局损系数";
addProperty(fileds.ProjInitStatus , CivTableTemp::FILED_VARCHAR64);// "初始状态";
addProperty(fileds.ProjMainstreamCoeff , CivTableTemp::FILED_DOUBLE);// "主流系数";
addProperty(fileds.ProjWallCoeff , CivTableTemp::FILED_DOUBLE);// "管壁系数";
addProperty(fileds.ProjLeakageCoeff1 , CivTableTemp::FILED_DOUBLE);// "漏水系数1";
addProperty(fileds.ProLeakageCoeff2 , CivTableTemp::FILED_DOUBLE);// "漏水系数2";
addProperty(fileds.ProjDmaID , CivTableTemp::FILED_VARCHAR64);// "DMAID";
addProperty(fileds.ProjFlow , CivTableTemp::FILED_DOUBLE);// "流量";
addProperty(fileds.ProjVelocity , CivTableTemp::FILED_DOUBLE);// "流速";
addProperty(fileds.ProjUnitLoss , CivTableTemp::FILED_DOUBLE);// "单位水损";
addProperty(fileds.ProjStatus , CivTableTemp::FILED_DOUBLE);// "状态";
addProperty(fileds.ProjQuality , CivTableTemp::FILED_DOUBLE);// "水质";
addProperty(fileds.ProjWaterLeakage , CivTableTemp::FILED_DOUBLE);// "漏水量";
}
/**
方案表
*/
CivProjTableTemp::CivProjTableTemp() : CivTableTemp()
{
setName(PROJTABLE);
TableField fileds;
addProperty(fileds.ProjName , CivTableTemp::FILED_VARCHAR64);// "方案名";
addProperty(fileds.ProjCode , CivTableTemp::FILED_VARCHAR64);// "方案编号";
addProperty(fileds.ProjType , CivTableTemp::FILED_VARCHAR64);// "方案类型";
addProperty(fileds.ProjCreator , CivTableTemp::FILED_VARCHAR64);// "创建人";
addProperty(fileds.ProjAddTime , CivTableTemp::FILED_DATETIME);// "创建时间";
addProperty(fileds.ProjUpdateTime , CivTableTemp::FILED_DATETIME);// "更新时间";
addProperty(fileds.ProjTime , CivTableTemp::FILED_DATETIME);// "方案时间";
addProperty(fileds.ProjScore , CivTableTemp::FILED_VARCHAR64);// "评分";
addProperty(fileds.ProDescribe , CivTableTemp::FILED_VARCHAR64);// "评价";
addProperty(fileds.ProjEvaluate , CivTableTemp::FILED_VARCHAR64);// "评估";
addProperty(fileds.ProjDemand , CivTableTemp::FILED_DOUBLE);// "水量调整";
addProperty(fileds.ProjWorkCode , CivTableTemp::FILED_VARCHAR64);// "作业编号";
addProperty(fileds.ProjDetection , CivTableTemp::FILED_VARCHAR64);// "关注检测点";
}
/**
压力监测表
*/
CivMonitorPressureTableTemp::CivMonitorPressureTableTemp() : CivTableTemp()
{
setName(PRESSURETABLE);
TableField fileds;
addProperty(fileds.MonitorScard, CivTableTemp::FILED_VARCHAR64);// "SCADAID";
addProperty(fileds.MonitorXCoord, CivTableTemp::FILED_DOUBLE);// "横坐标";
addProperty(fileds.MonitorYCoord, CivTableTemp::FILED_DOUBLE);// "纵坐标 ";
addProperty(fileds.MonitorDesc, CivTableTemp::FILED_CHARACTER_VARYING);// "描述";
addProperty(fileds.MonitorLabel, CivTableTemp::FILED_VARCHAR64);// "标签";
addProperty(fileds.MonitorNode, CivTableTemp::FILED_VARCHAR64);// "节点ID ";
addProperty(fileds.MonitorMonitor, CivTableTemp::FILED_DOUBLE);// "检测值 ";
addProperty(fileds.MonitorCalc, CivTableTemp::FILED_DOUBLE);// "计算值 ";
addProperty(fileds.MonitorError, CivTableTemp::FILED_DOUBLE);// "误差";
addProperty(fileds.MonitorMonitorAverage, CivTableTemp::FILED_DOUBLE);// "检测平均值";
addProperty(fileds.MonitorCalcAverage, CivTableTemp::FILED_DOUBLE);// "计算平均值";
addProperty(fileds.MonitorErrorAverage, CivTableTemp::FILED_DOUBLE);// "平均误差 ";
addProperty(fileds.MonitorAbsErrirAverage, CivTableTemp::FILED_DOUBLE);// "平均绝对误差";
addProperty(fileds.MonitorSquareError, CivTableTemp::FILED_DOUBLE);// "均方根误差";
addProperty(fileds.MonitorErrorFlu, CivTableTemp::FILED_DOUBLE);// "误差波动";
addProperty(fileds.MonitorNashCoeff, CivTableTemp::FILED_DOUBLE);// "纳什系数";
addProperty(fileds.MonitorScore, CivTableTemp::FILED_DOUBLE);// "分数";
addProperty(fileds.MonitorReliability, CivTableTemp::FILED_VARCHAR64);// "可靠度";
}
/*
流量监测表
*/
CivMonitorFlowTableTemp::CivMonitorFlowTableTemp() : CivTableTemp()
{
setName(FLOWTABLE);
TableField fileds;
addProperty(fileds.MonitorScard, CivTableTemp::FILED_VARCHAR64);// "SCADAID";
addProperty(fileds.MonitorXCoord, CivTableTemp::FILED_DOUBLE);// "横坐标";
addProperty(fileds.MonitorYCoord, CivTableTemp::FILED_DOUBLE);// "纵坐标 ";
addProperty(fileds.MonitorDesc, CivTableTemp::FILED_VARCHAR64);// "描述";
addProperty(fileds.MonitorLabel, CivTableTemp::FILED_VARCHAR64);// "标签";
addProperty(fileds.MonitorPipe, CivTableTemp::FILED_VARCHAR64);// "节点ID";
addProperty(fileds.MonitorMonitor, CivTableTemp::FILED_DOUBLE);// "检测值 ";
addProperty(fileds.MonitorCalc, CivTableTemp::FILED_DOUBLE);// "计算值 ";
addProperty(fileds.MonitorError, CivTableTemp::FILED_DOUBLE);// "误差";
addProperty(fileds.MonitorMonitorAverage, CivTableTemp::FILED_DOUBLE);// "检测平均值";
addProperty(fileds.MonitorCalcAverage, CivTableTemp::FILED_DOUBLE);// "计算平均值";
addProperty(fileds.MonitorErrorAverage, CivTableTemp::FILED_DOUBLE);// "平均误差 ";
addProperty(fileds.MonitorAbsErrirAverage, CivTableTemp::FILED_DOUBLE);// "平均绝对误差";
addProperty(fileds.MonitorSquareError, CivTableTemp::FILED_DOUBLE);// "均方根误差";
addProperty(fileds.MonitorErrorFlu, CivTableTemp::FILED_DOUBLE);// "误差波动";
addProperty(fileds.MonitorNashCoeff, CivTableTemp::FILED_DOUBLE);// "纳什系数";
addProperty(fileds.MonitorScore, CivTableTemp::FILED_DOUBLE);// "分数";
addProperty(fileds.MonitorReliability, CivTableTemp::FILED_VARCHAR64);// "可靠度";
}
/*
水质检测表
*/
CivMonitorQualityTableTemp::CivMonitorQualityTableTemp() : CivTableTemp()
{
setName(QUALITYTABLE);
TableField fileds;
addProperty(fileds.MonitorScard, CivTableTemp::FILED_VARCHAR64);// "SCADAID";
addProperty(fileds.MonitorXCoord, CivTableTemp::FILED_DOUBLE);// "横坐标";
addProperty(fileds.MonitorYCoord, CivTableTemp::FILED_DOUBLE);// "纵坐标 ";
addProperty(fileds.MonitorDesc, CivTableTemp::FILED_CHARACTER_VARYING);// "描述";
addProperty(fileds.MonitorLabel, CivTableTemp::FILED_VARCHAR64);// "标签";
addProperty(fileds.MonitorNode, CivTableTemp::FILED_VARCHAR64);// "节点ID ";
addProperty(fileds.MonitorMonitor, CivTableTemp::FILED_DOUBLE); // "检测值 ";
addProperty(fileds.MonitorCalc, CivTableTemp::FILED_DOUBLE); // "计算值 ";
addProperty(fileds.MonitorError, CivTableTemp::FILED_DOUBLE); // "误差";
addProperty(fileds.MonitorMonitorAverage, CivTableTemp::FILED_DOUBLE); // "检测平均值";
addProperty(fileds.MonitorCalcAverage, CivTableTemp::FILED_DOUBLE); // "计算平均值";
addProperty(fileds.MonitorErrorAverage, CivTableTemp::FILED_DOUBLE); // "平均误差 ";
addProperty(fileds.MonitorAbsErrirAverage, CivTableTemp::FILED_DOUBLE); // "平均绝对误差";
addProperty(fileds.MonitorSquareError, CivTableTemp::FILED_DOUBLE); // "均方根误差";
addProperty(fileds.MonitorErrorFlu, CivTableTemp::FILED_DOUBLE); // "误差波动";
addProperty(fileds.MonitorNashCoeff, CivTableTemp::FILED_DOUBLE); // "纳什系数";
addProperty(fileds.MonitorScore, CivTableTemp::FILED_DOUBLE); // "分数";
addProperty(fileds.MonitorReliability, CivTableTemp::FILED_VARCHAR64); // "可靠度";
}
...@@ -30,9 +30,13 @@ public: ...@@ -30,9 +30,13 @@ public:
FILED_VARCHAR64, FILED_VARCHAR64,
FILED_VARCHAR128, FILED_VARCHAR128,
FILED_VARCHAR256, FILED_VARCHAR256,
FILED_BOOLEAN,
FILED_CHARACTER_VARYING,
FILED_DATETIME, FILED_DATETIME,
FILED_JSON, FILED_JSON,
FILED_DATE FILED_DATE,
FILED_GEOM_POINT,
FILED_GEOM_LINE
}; };
explicit CivTableTemp(); explicit CivTableTemp();
...@@ -395,6 +399,202 @@ public: ...@@ -395,6 +399,202 @@ public:
explicit CivCurveTableTemp(); explicit CivCurveTableTemp();
}; };
/**
方案点表
*/
class CivProjNodeTableTemp :public CivTableTemp
{
public:
typedef struct TableField
{
Str ProjCode = "方案编号";
Str ProjType = "修改类型";
Str ProjGeom = "geom";
Str ProjSn = "本点号";
Str ProjXcoord = "横坐标";
Str ProjYcoord = "纵坐标 ";
Str ProjDesc = "描述";
Str ProjLabel = "标签";
Str ProElev = "高程";
Str ProjBaseDemand = "基本需水量";
Str ProjPattern = "需水量模式";
Str ProjDemandType = "需水量类型";
Str ProjDiffuserCoeff = "扩散器系数";
Str ProjInitQuality = "初始水质 ";
Str ProjSourceQuality = "源头水质 ";
Str ProjDmaID = "DMAID";
Str ProjDemand = "实际需水量";
Str ProjConsumption = "用水量";
Str ProjLackWater = "用水缺额";
Str ProjLackWaterPer = "用水缺额(%)";
Str ProjTotalWater = "总水量";
Str ProjTotalHead = "总水头";
Str ProjPressure = "压力";
Str ProjQuality = "水质";
}ProjNodeTable;
explicit CivProjNodeTableTemp();
};
/**
方案线表
*/
class CivProjPipeTableTemp :public CivTableTemp
{
public:
typedef struct TableField
{
Str ProjCode = "方案名";
Str ProjType = "修改类型";
Str ProjGeom = "Geom";
Str ProjSn = "编号";
Str ProjStartID = "起始节点";
Str ProjEndID = "终止节点";
Str ProjDesc = "描述";
Str ProjLabel= "标签";
Str ProjLength = "管长";
Str ProjDiameter = "管径";
Str ProjMaterial = "管材";
Str ProjFractionCoeff = "摩阻系数";
Str ProjLoclLossCoeff = "局损系数";
Str ProjInitStatus = "初始状态";
Str ProjMainstreamCoeff = "主流系数";
Str ProjWallCoeff = "管壁系数";
Str ProjLeakageCoeff1 = "漏水系数1";
Str ProLeakageCoeff2 = "漏水系数2";
Str ProjDmaID = "DMAID";
Str ProjFlow = "流量";
Str ProjVelocity = "流速";
Str ProjUnitLoss = "单位水损";
Str ProjStatus = "状态";
Str ProjQuality = "水质";
Str ProjWaterLeakage = "漏水量";
}ProjPipeTable;
explicit CivProjPipeTableTemp();
};
/**
方案表
*/
class CivProjTableTemp :public CivTableTemp
{
public:
typedef struct TableField
{
Str ProjName = "方案名";
Str ProjCode = "方案编号";
Str ProjType = "方案类型";
Str ProjCreator = "创建人";
Str ProjAddTime = "创建时间";
Str ProjUpdateTime = "更新时间";
Str ProjTime = "方案时间";
Str ProjScore = "评分";
Str ProDescribe = "评价";
Str ProjEvaluate = "评估";
Str ProjDemand = "水量调整";
Str ProjWorkCode = "作业编号";
Str ProjDetection = "关注检测点";
}ProjTable;
explicit CivProjTableTemp();
};
/**
检测压力表
*/
class CivMonitorPressureTableTemp :public CivTableTemp
{
public:
typedef struct TableField
{
Str MonitorScard = "SCADAID";
Str MonitorXCoord = "横坐标";
Str MonitorYCoord = "纵坐标 ";
Str MonitorDesc = "描述";
Str MonitorLabel = "标签";
Str MonitorNode = "节点ID ";
Str MonitorMonitor = "检测值 ";
Str MonitorCalc = "计算值 ";
Str MonitorError = "误差";
Str MonitorMonitorAverage = "检测平均值";
Str MonitorCalcAverage = "计算平均值";
Str MonitorErrorAverage = "平均误差 ";
Str MonitorAbsErrirAverage = "平均绝对误差";
Str MonitorSquareError = "均方根误差";
Str MonitorErrorFlu = "误差波动";
Str MonitorNashCoeff = "纳什系数";
Str MonitorScore = "分数";
Str MonitorReliability = "可靠度";
}MonitorPressureTable;
explicit CivMonitorPressureTableTemp();
};
/**
检测流量表
*/
class CivMonitorFlowTableTemp :public CivTableTemp
{
public:
typedef struct TableField
{
Str MonitorScard = "SCADAID";
Str MonitorXCoord = "横坐标";
Str MonitorYCoord = "纵坐标 ";
Str MonitorDesc = "描述";
Str MonitorLabel = "标签";
Str MonitorPipe= "管段ID ";
Str MonitorMonitor = "检测值 ";
Str MonitorCalc = "计算值 ";
Str MonitorError = "误差";
Str MonitorMonitorAverage = "检测平均值";
Str MonitorCalcAverage = "计算平均值";
Str MonitorErrorAverage = "平均误差 ";
Str MonitorAbsErrirAverage = "平均绝对误差";
Str MonitorSquareError = "均方根误差";
Str MonitorErrorFlu = "误差波动";
Str MonitorNashCoeff = "纳什系数";
Str MonitorScore = "分数";
Str MonitorReliability = "可靠度";
}MonitorFlowTable;
explicit CivMonitorFlowTableTemp();
};
/**
检测水质表
*/
class CivMonitorQualityTableTemp :public CivTableTemp
{
public:
typedef struct TableField
{
Str MonitorScard = "SCADAID";
Str MonitorXCoord = "横坐标";
Str MonitorYCoord = "纵坐标 ";
Str MonitorDesc = "描述";
Str MonitorLabel = "标签";
Str MonitorNode = "节点ID ";
Str MonitorMonitor = "检测值 ";
Str MonitorCalc = "计算值 ";
Str MonitorError = "误差";
Str MonitorMonitorAverage = "检测平均值";
Str MonitorCalcAverage = "计算平均值";
Str MonitorErrorAverage = "平均误差 ";
Str MonitorAbsErrirAverage = "平均绝对误差";
Str MonitorSquareError = "均方根误差";
Str MonitorErrorFlu = "误差波动";
Str MonitorNashCoeff = "纳什系数";
Str MonitorScore = "分数";
Str MonitorReliability = "可靠度";
}MonitorQualityTable;
explicit CivMonitorQualityTableTemp();
};
#endif // !CIVTABLETEMP_H #endif // !CIVTABLETEMP_H
......
...@@ -24,6 +24,21 @@ typedef const std::string& StrQuote; ...@@ -24,6 +24,21 @@ typedef const std::string& StrQuote;
#define CURVETABLE Str("__curve__") #define CURVETABLE Str("__curve__")
#define OPTIONTTABLE Str("__parameter__") #define OPTIONTTABLE Str("__parameter__")
/**
方案规划相关表定义
*/
#define PROJTABLE Str("__proj__")
#define PROJNODETABLE Str("__proj_node__")
#define PROJPIPETABLE Str("__proj_pipe__")
/*
监测点表系列
*/
#define PRESSURETABLE Str("__monitor_pressure__")
#define FLOWTABLE Str("__monitor_flow __")
#define QUALITYTABLE Str("__monitor_quality __")
#define PRV_TYPE Str("稳压阀") #define PRV_TYPE Str("稳压阀")
#define PSV_TYPE Str("减压阀") #define PSV_TYPE Str("减压阀")
#define PBV_TYPE Str("压力制动阀") #define PBV_TYPE Str("压力制动阀")
......
...@@ -149,18 +149,20 @@ ...@@ -149,18 +149,20 @@
<ImportLibrary>$(OutDir)..\lib\$(TargetName).lib</ImportLibrary> <ImportLibrary>$(OutDir)..\lib\$(TargetName).lib</ImportLibrary>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>
<Command>copy CivDbConnection.h $(OutDir)..\include /y <Command>copy CivTypes.h $(OutDir)..\include /y
copy CivTypes.h $(OutDir)..\include /y
copy CivPgConn.h $(OutDir)..\include /y copy CivPgConn.h $(OutDir)..\include /y
copy CivAssembly.h $(OutDir)..\include /y copy CivAssembly.h $(OutDir)..\include /y
copy CivDbConn.h $(OutDir)..\include /y
</Command> </Command>
</PostBuildEvent> </PostBuildEvent>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="CivAssembly.h" /> <ClInclude Include="CivAssembly.h" />
<ClInclude Include="CivCommonUtils.h" /> <ClInclude Include="CivCommonUtils.h" />
<ClInclude Include="CivConnection.h" />
<ClInclude Include="CivDbConn.h" /> <ClInclude Include="CivDbConn.h" />
<ClInclude Include="CivDbConnection.h" /> <ClInclude Include="CivDbUtils.h" />
<ClInclude Include="CivMaintainModel.h" />
<ClInclude Include="CivPgConn.h" /> <ClInclude Include="CivPgConn.h" />
<ClInclude Include="CivTableTemp.h" /> <ClInclude Include="CivTableTemp.h" />
<ClInclude Include="CivTrackingResultCache.h" /> <ClInclude Include="CivTrackingResultCache.h" />
...@@ -169,8 +171,10 @@ copy CivAssembly.h $(OutDir)..\include /y ...@@ -169,8 +171,10 @@ copy CivAssembly.h $(OutDir)..\include /y
<ItemGroup> <ItemGroup>
<ClCompile Include="CivAssembly.cpp" /> <ClCompile Include="CivAssembly.cpp" />
<ClCompile Include="CivCommonUtils.cpp" /> <ClCompile Include="CivCommonUtils.cpp" />
<ClCompile Include="CivConnection.cpp" />
<ClCompile Include="CivDbConn.cpp" /> <ClCompile Include="CivDbConn.cpp" />
<ClCompile Include="CivDbConnection.cpp" /> <ClCompile Include="CivDbUtils.cpp" />
<ClCompile Include="CivMaintainModel.cpp" />
<ClCompile Include="CivPgConn.cpp" /> <ClCompile Include="CivPgConn.cpp" />
<ClCompile Include="CivTableTemp.cpp" /> <ClCompile Include="CivTableTemp.cpp" />
<ClCompile Include="CivTrackingResultCache.cpp" /> <ClCompile Include="CivTrackingResultCache.cpp" />
......
...@@ -15,9 +15,6 @@ ...@@ -15,9 +15,6 @@
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="CivDbConnection.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CivTypes.h"> <ClInclude Include="CivTypes.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
...@@ -39,11 +36,17 @@ ...@@ -39,11 +36,17 @@
<ClInclude Include="CivTrackingResultCache.h"> <ClInclude Include="CivTrackingResultCache.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="CivDbUtils.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CivConnection.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CivMaintainModel.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="CivDbConnection.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="CivTableTemp.cpp"> <ClCompile Include="CivTableTemp.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
...@@ -62,5 +65,14 @@ ...@@ -62,5 +65,14 @@
<ClCompile Include="CivTrackingResultCache.cpp"> <ClCompile Include="CivTrackingResultCache.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="CivConnection.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="CivMaintainModel.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="CivDbUtils.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment