From e8a27bb203fe2aff70390a5eca002d7438da9b0f Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 22 十月 2025 14:24:34 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/Servo/CControlJob.h |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/SourceCode/Bond/Servo/CControlJob.h b/SourceCode/Bond/Servo/CControlJob.h
index a9611a4..1c391e1 100644
--- a/SourceCode/Bond/Servo/CControlJob.h
+++ b/SourceCode/Bond/Servo/CControlJob.h
@@ -36,14 +36,17 @@
     /// CControlJob:Control Job 管理类
     class CControlJob {
     public:
+        CControlJob();
         explicit CControlJob(std::string cjId);
         explicit CControlJob(CControlJob& src);
 
         // —— 基本属性 —— //
         const std::string& id()     const noexcept { return m_cjId; }
+        void setId(std::string& id);
         CJState            state()  const noexcept { return m_state; }
         uint8_t            priority() const noexcept { return m_priority; }
         void               setPriority(uint8_t p) noexcept { m_priority = p; }
+        std::string getStateText();
 
         // —— PJ 列表维护(去重)—— //
         bool addPJ(const std::string& pjId);                // 已存在则不重复添加
@@ -52,7 +55,10 @@
         bool containsPJ(const std::string& pjId) const;
         const std::vector<std::string>& pjIds() const noexcept { return m_pjIds; }
         bool setPJs(const std::vector<CProcessJob*>& pjs);
+        bool removePjPointer(const std::string& id);
+        bool addPjPointer(CProcessJob* pj);
         void clearPJs() { m_pjIds.clear(); }
+        const std::vector<CProcessJob*>& getPjs() { return m_pjs; };
 
         // —— 校验 —— //
         struct ValidationIssue { uint32_t code; std::string text; };
@@ -65,7 +71,8 @@
             const std::function<bool(const std::string&)>& getPjExistsFn,
             const std::function<bool(const std::string&)>& canJoinFn
         );
-        const std::vector<CControlJob::ValidationIssue>& CControlJob::issues();
+        const std::vector<ValidationIssue>& CControlJob::issues();
+        void clearIssues();
 
         // —— S14F9 → S14F10 的“应用结果”模型 —— //
         struct CreateRequest {
@@ -92,7 +99,7 @@
         bool pause();          // Executing -> Paused
         bool resume();         // Paused -> Executing
         bool complete();       // Executing/Paused -> Completed
-        bool abort();          // 非终态 -> Aborted
+        bool abort(std::string reason);          // 非终态 -> Aborted
         bool fail(std::string reason); // 任意 -> Failed
 
         const std::string& failReason() const noexcept { return m_failReason; }
@@ -111,12 +118,18 @@
         static void clampString(std::string& s, size_t maxLen);
         static bool asciiPrintable(const std::string& s);
 
+        static constexpr uint32_t CJ_MAGIC = 0x434A5031; // "CJP1"
+        static constexpr uint16_t CJ_VERSION = 0x0001;
+
+        void serialize(std::ostream& os) const;
+        static bool deserialize(std::istream& is, CControlJob& out, std::string* err = nullptr);
+
     private:
         void markQueued();
         void markStart();
         void markEnd();
 
-    private:
+    protected:
         // —— 标识 & 配置 —— //
         std::string m_cjId;
         uint8_t     m_priority{ 5 }; // 缺省优先级(自定)

--
Gitblit v1.9.3