chenluhua1980
2025-12-11 33f080ddc32f3545b685b2e0a7a5df3c35894270
1.Event删除功能的实现;
已修改6个文件
112 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CCollectionEvent.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageCollectionEvent.cpp 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CUserManager2.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.cpp 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/HsmsPassive.h 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/CollectionEventList.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCollectionEvent.h
@@ -2,7 +2,6 @@
#include "CReport.h"
#include <vector>
namespace SERVO {
    class CCollectionEvent
    {
@@ -17,6 +16,7 @@
        std::string& getDescription();
        std::vector<CReport*>& getReports();
        std::string getReportIdsText();
        const std::vector<unsigned int>& getReportIds() const { return m_rptids; }
        BOOL addReport(CReport* pReport);
        BOOL deleteReport(unsigned int nReportId);
        CReport* getReport(unsigned int nReportId);
@@ -33,4 +33,4 @@
        std::vector<unsigned int> m_rptids;
        std::vector<CReport*> m_reports;
    };
}
}
SourceCode/Bond/Servo/CPageCollectionEvent.cpp
@@ -149,5 +149,30 @@
void CPageCollectionEvent::OnClickedBtn(const char* btnName)
{
    // 暂留:后续实现增删改逻辑
    ASSERT(btnName);
    if (_strcmpi(btnName, "删除") == 0) {
        POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
        if (pos == nullptr) return;
        int nItem = m_listCtrl.GetNextSelectedItem(pos);
        auto pEvent = reinterpret_cast<SERVO::CCollectionEvent*>(m_listCtrl.GetItemData(nItem));
        if (pEvent == nullptr) return;
        int rc = UX_CanExecute(L"delEvents");
        if (rc != 1) {
            AfxMessageBox("操作权限不足,请联系管理人员!");
            return;
        }
        int ret = theApp.m_model.m_hsmsPassive.deleteCollectionEvent((unsigned short)pEvent->getEventId());
        if (ret == 0) {
            UX_RecordAction(L"delEvents");
            m_listCtrl.DeleteAllItems();
            loadCollectionEvents();
            if (CButton* pDel = GetBtnByName("删除")) pDel->EnableWindow(FALSE);
            if (CButton* pEdit = GetBtnByName("编辑")) pEdit->EnableWindow(FALSE);
        }
        else {
            AfxMessageBox(_T("删除事件失败"));
        }
    }
}
SourceCode/Bond/Servo/CUserManager2.cpp
@@ -88,6 +88,7 @@
    UX_DefineAction(L"addReports", L"新增Report", L"PE");
    UX_DefineAction(L"editReports", L"编辑Report", L"PE");
    UX_DefineAction(L"delReports", L"删除Report", L"PE");
    UX_DefineAction(L"delEvents", L"删除Event", L"PE");
}
bool CUserManager2::login(const char* pszAccount, const char* pszPwd)
SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -875,6 +875,9 @@
int CHsmsPassive::loadCollectionEvents(const char* pszFilepath)
{
    m_strCollectionEventFilepath = pszFilepath;
    m_bCollectionUtf8 = false;
    m_bCollectionUtf8Bom = false;
    CFile file;
    if (!file.Open(pszFilepath, CFile::modeRead | CFile::shareDenyNone)) {
        return -1;
@@ -897,6 +900,8 @@
    // UTF-8 BOM
    if (nLen >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) {
        offset = 3;
        m_bCollectionUtf8 = true;
        m_bCollectionUtf8Bom = true;
    }
    // UTF-16 LE BOM
@@ -926,6 +931,7 @@
            MultiByteToWideChar(CP_UTF8, 0, buffer.data() + off,
                static_cast<int>(buffer.size() - off), temp.data(), need);
            content = temp.c_str();
            m_bCollectionUtf8 = true;
            return true;
        };
@@ -1014,6 +1020,18 @@
    return m_collectionEvents;
}
int CHsmsPassive::deleteCollectionEvent(unsigned short CEID)
{
    for (auto iter = m_collectionEvents.begin(); iter != m_collectionEvents.end(); ++iter) {
        if ((*iter)->getEventId() == CEID) {
            delete (*iter);
            m_collectionEvents.erase(iter);
            return writeCollectionEventsToFile(m_strCollectionEventFilepath);
        }
    }
    return -1;
}
void CHsmsPassive::clearAllCollectionEvent()
{
    for (auto item : m_collectionEvents) {
@@ -1055,6 +1073,62 @@
    return result;
}
int CHsmsPassive::writeCollectionEventsToFile(const std::string& filepath)
{
    if (filepath.empty()) return -1;
    CFile file;
    if (!file.Open(filepath.c_str(), CFile::modeCreate | CFile::modeWrite)) {
        return -1;
    }
    if (m_bCollectionUtf8 && m_bCollectionUtf8Bom) {
        const BYTE bom[3] = { 0xEF, 0xBB, 0xBF };
        file.Write(bom, 3);
    }
    const std::string headerAnsi = "CEID,CE Name,Descriptions,Attached RPTID\r\n";
    if (m_bCollectionUtf8) {
        CStringA header = AnsiToUtf8(headerAnsi);
        file.Write(header.GetString(), header.GetLength());
    }
    else {
        file.Write(headerAnsi.data(), (UINT)headerAnsi.size());
    }
    for (auto ev : m_collectionEvents) {
        if (ev == nullptr) continue;
        std::string line;
        line.reserve(128);
        line += std::to_string(ev->getEventId());
        line.push_back(',');
        line += ev->getName();
        line.push_back(',');
        line += ev->getDescription();
        line.push_back(',');
        line.push_back('(');
        auto rptIds = ev->getReportIds();
        for (size_t i = 0; i < rptIds.size(); ++i) {
            line += std::to_string(rptIds[i]);
            if (i + 1 < rptIds.size()) {
                line.push_back(',');
            }
        }
        line += ")\r\n";
        if (m_bCollectionUtf8) {
            CStringA out = AnsiToUtf8(line);
            file.Write(out.GetString(), out.GetLength());
        }
        else {
            file.Write(line.data(), (UINT)line.size());
        }
    }
    file.Close();
    return 0;
}
int CHsmsPassive::init(CModel* pModel, const char* pszName, unsigned int port)
{
    m_pModel = pModel;
SourceCode/Bond/Servo/HsmsPassive.h
@@ -174,6 +174,7 @@
    // 取消/删除所有CollectionEvent
    void clearAllCollectionEvent();
    int deleteCollectionEvent(unsigned short CEID);
    // 取得CCollectionEvent
    SERVO::CCollectionEvent* getEvent(unsigned short CEID);
@@ -244,6 +245,7 @@
    std::vector<unsigned int> parseVidList(CString& strNums);
    int writeVariablesToFile(const std::string& filepath);
    int writeReportsToFile(const std::string& filepath);
    int writeCollectionEventsToFile(const std::string& filepath);
private:
    CModel* m_pModel;
@@ -267,6 +269,9 @@
    std::string m_strReportFilepath;
    bool m_bReportUtf8{ false };
    bool m_bReportUtf8Bom{ false };
    std::string m_strCollectionEventFilepath;
    bool m_bCollectionUtf8{ false };
    bool m_bCollectionUtf8Bom{ false };
    BOOL m_bCimWorking;
    HANDLE m_hCimWorkEvent;
    HANDLE m_hCimWorkThreadHandle;
SourceCode/Bond/x64/Debug/CollectionEventList.txt
@@ -1,3 +1,4 @@
CEID,CE Name,Descriptions,Attached RPTID
300,AccessMode_To_Manual,,(300)
301,AccessMode_To_Auto,,(301)
600,ControlStateChanged,,(600)