You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
3.9 KiB
C

1 month ago
#pragma once
#include <vector>
#include <string>
#include "WellCommonDef.h"
using namespace std;
class AFX_EXT_CLASS CTreeBase
{
public:
CTreeBase();
virtual ~CTreeBase();
struct TreeBaseNode
{
CString strNode; //<2F>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
CString strCode;
int parent; //<2F><><EFBFBD>׽ڵ<D7BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>id<69><64>,(<28><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<69><64><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĸ<D0B5><C4B8>ڵ<EFBFBD>, ע<><EFBFBD><E2B2BB><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>е<EFBFBD>parentId)
int dbParentId; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>е<EFBFBD>parentId,<2C><>selfId<49><64>ͬ<EFBFBD>γɲ㼶<C9B2><E3BCB6>
int Treelevel; //<2F><><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>,<2C>ɸߵ<C9B8><DFB5><EFBFBD>,<2C><>0<EFBFBD><30>ʼ
std::vector<int> ChildRowsId; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>id<69><64><EFBFBD><EFBFBD>,<2C><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
int rowId; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>id<69><64><EFBFBD><EFBFBD>,<2C><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
int selfId; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>е<EFBFBD>id
int order; // <20>ڵ<EFBFBD><DAB5><EFBFBD>˳<EFBFBD><CBB3>
CString classStr; //<2F><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>IJ㼶<C4B2><E3BCB6>int<6E><74><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
};
void operator =(CTreeBase& tree);
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>ڵ<EFBFBD><DAB5>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>ڵ<EFBFBD><DAB5><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,className<6D>Dz<EFBFBD><C7B2>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ǿ<EFBFBD><C7BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ֱ<EFBFBD>ӹ<EFBFBD><D3B9>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>
//void MakeTreeFromTable(CString tablName, CString nodeFldName, CString ParentFldName, CString showFldName, CString className = "");
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>ڵ<EFBFBD><DAB5>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>ڵ<EFBFBD><DAB5><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,className<6D>Dz<EFBFBD><C7B2>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.rootNodeName<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ǿ<EFBFBD><C7BF>ַ<EFBFBD><D6B7><EFBFBD>,<2C><>"-1"<22><>
BOOL MakeTreeFromTable(CString& JsonStr, CString nodeFldName, CString ParentFldName, CString showFldName, CString className, CString orderName,CString rootNodeName);
BOOL FindNode(CString nodeName, vector<CString>& ParentArr, int treeLevel = -1); //<2F><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ӽڵ㣬<DAB5><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽ڵ㿪ʼ<E3BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>졣(<28><>Ϊ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Ӳ㼶<D3B2><E3BCB6>treeLevel<65><6C>1<EFBFBD><31>ʼ<EFBFBD>
BOOL FindChild(CString nodeName, vector<CString> &ChildArr , int treeLevel = -1);
BOOL FindClassChildren(CString nodeName, CString classChildName, vector<TreeBaseNode*>&childNodes, int nodetreeLevel = -1);//<2F><><EFBFBD><EFBFBD>ijһ<C4B3><EFBFBD><E3BCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
BOOL GetTreeLevelNode(int depId, vector<CString> &NodeArr);//<2F><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ㡣<DAB5><E3A1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>depId<49><64>1<EFBFBD><31>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
void GetTreeLevelNode(CString className, vector<CString> &NodeArr);
int GetTreeDepth(); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString GetClassName(int id);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>depId<49><64>1<EFBFBD><31>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
//void InItTreeFromCTree(HTREEITEM hItem);
CString GetClassCode(int id);
int ClassLevelId(CString className); //<2F><><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><E3BCB6>id<69><64><EFBFBD><EFBFBD>1<EFBFBD><31>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
void ClearNodeDataRowID();
const vector<CString>& GetClassNames();
TreeBaseNode& GetNode(CString nodeName, int treeLevel = -1); //
TreeBaseNode& GetParentNode(CString nodeName , int treeLevel = -1);
BOOL GetChildNodes(CString nodeName, vector<TreeBaseNode*>&childNodes, BOOL bAllDescendants = FALSE, int treeLevel = -1);
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><E3BCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>á<EFBFBD>
void checkNodeInParentPos(CString pnode, CString childnode,CString childclassName, BOOL &bTop,BOOL &bBottom);// posid =0 top, posi=1 bottom, posi =2 top,bottom(<28><><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD>ǵ<EFBFBD>), pos =3<><33>middle;
enum cTree{
EMPTYNODE = -10000
};
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>buffer<65><72><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ShowNameId<49><64><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>Ƶ<EFBFBD><C6B5>ֶ<EFBFBD>ID<49><44>treeid<69>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ֶ<EFBFBD>ID<49><44>pid<69>Ǹ<EFBFBD><C7B8>ڵ<EFBFBD><DAB5>ֶε<D6B6>ID<49><44><EFBFBD><EFBFBD>treeid<69><64>pid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>ֶ<EFBFBD>ID<49><44>
void InitTreeFromDbTab(int ShowNameId, int treeid, int pid, int classid,int orderId, CString rootNodeName,StringVectorSet& datas);
void GetChildVector(int ParentId, std::vector<int> &childVec);
void DeepTreeFromTab(int arrPid, CString PName, int ShowNameId, int treeid, int pid, int classid,int orderId, StringVectorSet& datas, int& deepCount);
void CountDepTree(int parentId, int &MaxDep, int& depCount);
void treeLevelNodeArr(int depId, int parentId, int& depCount, vector<CString> &nodeArr);
//CArray <TreeBaseNode,TreeBaseNode> m_TreeNodeArr;
std::vector<TreeBaseNode> m_TreeNodeArr;
std::vector<CString> m_classNameVec; //<2F><EFBFBD><E3BCB6><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><E3BCB6><EFBFBD><EFBFBD>
std::vector<CString> m_classCodeVec; //Ŀǰ<C4BF>Ȳ<EFBFBD>ʹ<EFBFBD><CAB9>20250726
std::vector<BOOL> m_bVisitVec; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʾ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>
TreeBaseNode m_EmptyNode; //һ<><D2BB><EFBFBD>սڵ<D5BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};