[ref]同步711
This commit is contained in:
parent
772fc63550
commit
71b4a9cf95
24
product/src/application/apc_if_srv/ApcIfRdbTableDef.h
Normal file
24
product/src/application/apc_if_srv/ApcIfRdbTableDef.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/**********************************************************************************
|
||||||
|
* @file ApcIfRdbTableDef.h
|
||||||
|
* @brief 功率控制内存表定义
|
||||||
|
* @author caodingfa
|
||||||
|
* @versiong 1.0
|
||||||
|
* @date 2024-8-1
|
||||||
|
**********************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace iot_app
|
||||||
|
{
|
||||||
|
typedef struct _SApcCurveYear
|
||||||
|
{
|
||||||
|
int year_rule_id; //年规则ID
|
||||||
|
int type_id; //类型ID
|
||||||
|
int month_begin; //开始月
|
||||||
|
int day_begin; //开始日,包含该日,即从该日0点起
|
||||||
|
int month_end; //结束月
|
||||||
|
int day_end; //结束日,包含该日,即到下一日0点结束
|
||||||
|
int excption; //是否例外
|
||||||
|
}SApcCurveYear,*PSApcCurveYear;
|
||||||
|
|
||||||
|
} //< namespace iot_app
|
||||||
@ -97,7 +97,18 @@ bool CApcIfSrv::start(int argc, char *argv[], int & /*nStatus*/)
|
|||||||
LOGINFO("\n\n%s is now starting ...\n", g_pSzProcName);
|
LOGINFO("\n\n%s is now starting ...\n", g_pSzProcName);
|
||||||
|
|
||||||
//< 判断是否已启动
|
//< 判断是否已启动
|
||||||
if (isAlreadyRunning())
|
std::string strStartArgs;
|
||||||
|
for (int i = 1; i < argc; ++i)
|
||||||
|
{
|
||||||
|
if (i != 1)
|
||||||
|
{
|
||||||
|
strStartArgs += " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
strStartArgs += argv[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAlreadyRunning(strStartArgs))
|
||||||
{
|
{
|
||||||
LOGFATAL("%s 已启动,不可重复启动,本实例退出!", g_pSzProcName);
|
LOGFATAL("%s 已启动,不可重复启动,本实例退出!", g_pSzProcName);
|
||||||
return false;
|
return false;
|
||||||
@ -158,17 +169,6 @@ bool CApcIfSrv::start(int argc, char *argv[], int & /*nStatus*/)
|
|||||||
{
|
{
|
||||||
//< 进程管理
|
//< 进程管理
|
||||||
{
|
{
|
||||||
std::string strStartArgs;
|
|
||||||
for (int i = 1; i < argc; ++i)
|
|
||||||
{
|
|
||||||
if (i != 1)
|
|
||||||
{
|
|
||||||
strStartArgs += " ";
|
|
||||||
}
|
|
||||||
|
|
||||||
strStartArgs += argv[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
iot_sys::SProcessInfoKey objProcInfo;
|
iot_sys::SProcessInfoKey objProcInfo;
|
||||||
objProcInfo.nAppId = m_nAppID;
|
objProcInfo.nAppId = m_nAppID;
|
||||||
objProcInfo.nDomainId = m_nDomainID;
|
objProcInfo.nDomainId = m_nDomainID;
|
||||||
@ -351,9 +351,11 @@ bool CApcIfSrv::addAlarm(iot_idl::SAppAddAlm &objAlarm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CApcIfSrv::isAlreadyRunning()
|
bool CApcIfSrv::isAlreadyRunning(const std::string &strStartArgs)
|
||||||
{
|
{
|
||||||
return iot_public::CSingleProcInstance::hasInstanceRunning(g_pSzProcName);
|
std::string strUniqueName = g_pSzProcName;
|
||||||
|
strUniqueName += strStartArgs;
|
||||||
|
return iot_public::CSingleProcInstance::hasInstanceRunning( strUniqueName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -75,7 +75,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
CApcIfSrv(); //< 单例
|
CApcIfSrv(); //< 单例
|
||||||
|
|
||||||
bool isAlreadyRunning();
|
bool isAlreadyRunning(const std::string &strStartArgs);
|
||||||
|
|
||||||
bool parseCommandLine(int argc, char *argv[]);
|
bool parseCommandLine(int argc, char *argv[]);
|
||||||
|
|
||||||
|
|||||||
@ -44,6 +44,7 @@
|
|||||||
#include "CApcIfSrv.h"
|
#include "CApcIfSrv.h"
|
||||||
|
|
||||||
#include "CThreadLocalCurve.h"
|
#include "CThreadLocalCurve.h"
|
||||||
|
#include "ApcIfRdbTableDef.h"
|
||||||
|
|
||||||
namespace iot_app
|
namespace iot_app
|
||||||
{
|
{
|
||||||
@ -421,7 +422,6 @@ bool CThreadLocalCurve::getCurveByIndex(const int nIndex, SCurve &stCurve)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CThreadLocalCurve::getYearWeekRule(const int nTypeId, CThreadLocalCurve::SYearWeekRule &stRule)
|
bool CThreadLocalCurve::getYearWeekRule(const int nTypeId, CThreadLocalCurve::SYearWeekRule &stRule)
|
||||||
{
|
{
|
||||||
//< 查找缓存
|
//< 查找缓存
|
||||||
@ -440,62 +440,60 @@ bool CThreadLocalCurve::getYearWeekRule(const int nTypeId, CThreadLocalCurve::SY
|
|||||||
CThreadLocalCurve::SYearWeekRule &stRuleInCache = m_mapYearWeekRuleCache[nTypeId];
|
CThreadLocalCurve::SYearWeekRule &stRuleInCache = m_mapYearWeekRuleCache[nTypeId];
|
||||||
stRule = stRuleInCache;
|
stRule = stRuleInCache;
|
||||||
|
|
||||||
iot_dbms::CVarType rdbVal;
|
|
||||||
|
|
||||||
//< 找 apc_curve_year 表
|
//< 找 apc_curve_year 表
|
||||||
{
|
{
|
||||||
iot_dbms::CRdbQueryResult rdbResult;
|
std::vector<PSApcCurveYear> vecApcCurveYear;
|
||||||
|
int nLocalCurDay = m_stLocalTimeNow.wMonth* 100 + m_stLocalTimeNow.wDay;
|
||||||
std::vector<iot_dbms::CONDINFO> vecCondInfo;
|
|
||||||
{
|
|
||||||
iot_dbms::CRdbPublic::addCondInfo
|
|
||||||
(vecCondInfo, "type_id", nTypeId, ATTRCOND_EQU, ATTRCOND_AND);
|
|
||||||
|
|
||||||
//< 开始时间 小于等于 当前
|
|
||||||
iot_dbms::CRdbPublic::addCondInfo
|
|
||||||
(vecCondInfo, "month_begin", m_stLocalTimeNow.wMonth, ATTRCOND_SMALLEQU, ATTRCOND_AND);
|
|
||||||
iot_dbms::CRdbPublic::addCondInfo
|
|
||||||
(vecCondInfo, "day_begin", m_stLocalTimeNow.wDay, ATTRCOND_SMALLEQU, ATTRCOND_AND);
|
|
||||||
|
|
||||||
//< 结束时间 大于等于 当前
|
|
||||||
iot_dbms::CRdbPublic::addCondInfo
|
|
||||||
(vecCondInfo, "month_end", m_stLocalTimeNow.wMonth, ATTRCOND_LARGEEQU, ATTRCOND_AND);
|
|
||||||
iot_dbms::CRdbPublic::addCondInfo
|
|
||||||
(vecCondInfo, "day_end", m_stLocalTimeNow.wDay, ATTRCOND_LARGEEQU, ATTRCOND_AND);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const std::vector<std::string> vecSelectCol({"year_rule_id", "exctption"});
|
|
||||||
|
|
||||||
//< 锁表
|
//< 锁表
|
||||||
|
//因为数量量少,直接全部遍历
|
||||||
iot_dbms::CTableLockGuard tableLock(m_objRtdb_apc_curve_year);
|
iot_dbms::CTableLockGuard tableLock(m_objRtdb_apc_curve_year);
|
||||||
|
int nRowCount = m_objRtdb_apc_curve_year.getRecordCount();
|
||||||
if (!m_objRtdb_apc_curve_year.select(vecCondInfo, rdbResult, vecSelectCol))
|
for(int nRowIdx = 0; nRowIdx < nRowCount; nRowIdx++)
|
||||||
{
|
{
|
||||||
LOGERROR("getYearWeekRule(): 查询实时库 apc_curve_year 表失败!");
|
PSApcCurveYear pRecord = (PSApcCurveYear)m_objRtdb_apc_curve_year.getRecordAddrByIndex(nRowIdx);
|
||||||
return false;
|
if(pRecord->type_id != nTypeId)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int nRowCnt = rdbResult.getRecordCount();
|
int nBeginDay = pRecord->month_begin * 100 + pRecord->day_begin;
|
||||||
if (nRowCnt != 1)
|
int nEndDay = pRecord->month_end * 100 + pRecord->day_end;
|
||||||
|
|
||||||
|
if(nLocalCurDay >= nBeginDay && nLocalCurDay <= nEndDay)
|
||||||
|
{
|
||||||
|
vecApcCurveYear.push_back(pRecord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const int nRowCnt = static_cast<int>(vecApcCurveYear.size());
|
||||||
|
if (nRowCnt != 1 && nRowCnt != 2) //最多只有2条,1条正常的,1条例外的;例外的可以覆盖正常的
|
||||||
{
|
{
|
||||||
//< 配置错误
|
//< 配置错误
|
||||||
//< 此处写LOG会过于频繁,外面写
|
//< 此处写LOG会过于频繁,外面写
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rdbResult.getColumnValue(0, 0, rdbVal))
|
int nYearRowIdx = 0; //默认第1行
|
||||||
|
if(nRowCnt == 2)
|
||||||
{
|
{
|
||||||
LOGERROR("getYearWeekRule(): 获取 year_rule_id 值失败!");
|
//2行时,判断是不是1条正常,1条例外,否则配置错误
|
||||||
return false;
|
int nRowExctption1 = vecApcCurveYear[0]->excption;
|
||||||
}
|
int nRowExctption2 = vecApcCurveYear[1]->excption;
|
||||||
stRuleInCache.m_nYearRuleId = rdbVal.toInt();
|
|
||||||
|
|
||||||
if (!rdbResult.getColumnValue(0, 1, rdbVal))
|
if(nRowExctption1 == nRowExctption2)
|
||||||
{
|
{
|
||||||
LOGERROR("getYearWeekRule(): 获取 exctption 值失败!");
|
return false; //2条不能都是正常或者例外,必须2条不一样
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
if (0 != rdbVal.toInt())
|
|
||||||
|
if(0 != nRowExctption2)
|
||||||
|
{
|
||||||
|
nYearRowIdx = 1;//nYearRowIdx默认=0即第1行,2条Exctption不相等,并且第2条为例外时则认为第2条为准
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stRuleInCache.m_nYearRuleId = vecApcCurveYear[nYearRowIdx]->year_rule_id;
|
||||||
|
if (0 != vecApcCurveYear[nYearRowIdx]->excption)
|
||||||
{
|
{
|
||||||
//< 今天是例外,不用查询周规则
|
//< 今天是例外,不用查询周规则
|
||||||
stRuleInCache.m_nWeekRuleId = -1;
|
stRuleInCache.m_nWeekRuleId = -1;
|
||||||
@ -529,6 +527,7 @@ bool CThreadLocalCurve::getYearWeekRule(const int nTypeId, CThreadLocalCurve::SY
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iot_dbms::CVarType rdbVal;
|
||||||
if (!(m_objRtdb_apc_curve_week.getColumnValueByIndex(nRecIndex, "week_rule_id", rdbVal)))
|
if (!(m_objRtdb_apc_curve_week.getColumnValueByIndex(nRecIndex, "week_rule_id", rdbVal)))
|
||||||
{
|
{
|
||||||
LOGERROR("getYearWeekRule(): 获取 week_rule_id 值失败!");
|
LOGERROR("getYearWeekRule(): 获取 week_rule_id 值失败!");
|
||||||
@ -545,7 +544,6 @@ bool CThreadLocalCurve::getYearWeekRule(const int nTypeId, CThreadLocalCurve::SY
|
|||||||
//return false;
|
//return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int CThreadLocalCurve::getDayRuleId(const char *pSzKeyIdTag, const int nYearRuleId, const int nWeekRuleId)
|
int CThreadLocalCurve::getDayRuleId(const char *pSzKeyIdTag, const int nYearRuleId, const int nWeekRuleId)
|
||||||
{
|
{
|
||||||
struct STableKey
|
struct STableKey
|
||||||
|
|||||||
@ -21,7 +21,8 @@ HEADERS += ApcIfSrvCommon.h \
|
|||||||
CApcIfSrv.h \
|
CApcIfSrv.h \
|
||||||
CThreadAnalog.h \
|
CThreadAnalog.h \
|
||||||
CThreadDigital.h \
|
CThreadDigital.h \
|
||||||
CThreadLocalCurve.h
|
CThreadLocalCurve.h \
|
||||||
|
ApcIfRdbTableDef.h
|
||||||
|
|
||||||
SOURCES += Main.cpp \
|
SOURCES += Main.cpp \
|
||||||
ApcIfSrvCommon.cpp \
|
ApcIfSrvCommon.cpp \
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user