|
|
|
|
|
#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>
|
|
|
|
|
|
};
|