From b1d01ea6fa62ce12c2e592b3315186f6b3c8359d Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期三, 17 七月 2024 15:20:38 +0800
Subject: [PATCH] Merge branch 'master' of http://116.62.18.175:6699/r/mis-prj
---
jrj/project/business/SystemSettings/Developer.Synch.cpp | 432 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 432 insertions(+), 0 deletions(-)
diff --git a/jrj/project/business/SystemSettings/Developer.Synch.cpp b/jrj/project/business/SystemSettings/Developer.Synch.cpp
new file mode 100644
index 0000000..8789e6e
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Developer.Synch.cpp
@@ -0,0 +1,432 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+ class __declspec(dllexport) DeveloperSynch : public xframe
+ {
+ public:
+ xtreeview tv_gs;
+ xsedit dw_log;
+
+ int nItems;
+ int nCount;
+
+ xstring sContent;
+ public:
+ DeveloperSynch(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+ public:
+ static DeveloperSynch* CreateInstance(void* implPtr, void* hWnd)
+ {
+ DeveloperSynch* pWin = new DeveloperSynch(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+ xstring ProcessDevCmd(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false)
+ {
+ if(aurl == L"") aurl = GetServerUrl();
+ //alert(aurl);
+ xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/developer "+cmd,ext,needlogin);
+ return d;
+ }
+
+ xstring ProcessDevCmd2(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false)
+ {
+ if(aurl == L"") aurl = GetServerUrl();
+ //alert(aurl);
+ xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/dev:"+cmd,ext,needlogin);
+ return d;
+ }
+
+ int GetProjectItem(int hItem)
+ {
+ int pitem = hItem;
+ xstring typ;
+ while(true)
+ {
+ int h =tv_gs.GetItemData(tv_gs.GetId(), pitem);
+ KXMLDOMElement e = trust(h as KXMLDOMElement);
+ typ = GetEleString(e, L"@tagname");
+ if(typ==L"project")break;
+ pitem =tv_gs.GetParentItem(tv_gs.GetId(), pitem);
+ if(pitem<=0)break;
+ }
+ return pitem;
+ }
+
+ int GetP2Item(int hItem)
+ {
+ int hDomainItem;
+ int hP2Item = hItem;
+ while(true)
+ {
+ hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item);
+ if(xtreeview::GetParentItem(tv_gs.GetId(), hDomainItem)<=0)break;
+ hP2Item = hDomainItem;
+ }
+ return hP2Item;
+ }
+
+ xstring GetItemGuid(int hItem)
+ {
+ int h =tv_gs.GetItemData(tv_gs.GetId(), hItem);
+ KXMLDOMElement e = trust(h as KXMLDOMElement);
+ xstring guid = e.GetAttribute(L"guid");
+ return guid;
+ }
+
+ xaserverarg GetDataArg(int hItem, xaserverarg arg)
+ {
+ int h =tv_gs.GetItemData(tv_gs.GetId(), hItem);
+ KXMLDOMElement e = trust(h as KXMLDOMElement);
+ xstring node = GetEleString(e, L"@tagname");
+ //WriteLog(e.xml);
+ if(node==L"File" || node==L"file")
+ {
+ xstring caption = e.getAttribute(L"caption");
+
+ int hP2Item = 0;
+ int hDomainItem = 0;
+ if(xtreeview::GetParentItem(tv_gs.GetId(), hItem)<=0)
+ {
+ hDomainItem = hItem;
+ }else
+ {
+ hP2Item = GetP2Item(hItem);
+ hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item);
+ }
+
+ //find project folder
+ xstring prjguid=L"";
+ int pitem = GetProjectItem(hItem);
+ if(pitem > 0)
+ prjguid = GetItemGuid(pitem);
+
+ //xaserverarg arg ;
+ //;
+ arg.AddArg(L"project.guid",prjguid);
+ if(hP2Item)
+ {
+ if(hP2Item != hItem)
+ {
+ xstring guid = e.getAttribute(L"guid");
+ arg.AddArg(L"guid",guid);
+ }
+ xstring guid2 = GetItemGuid(hP2Item);
+ arg.AddArg(L"root.guid",guid2);
+ }else if(hDomainItem > 0)
+ {
+ xstring guid3 = GetItemGuid(hDomainItem);
+ arg.AddArg(L"domain.guid",guid3);
+ }
+ return 1;
+ }
+ else if(node==L"folder" || node==L"project")
+ return 2;
+ else
+ return 0;
+ }
+
+ int SaveData(int hItem)
+ {
+ xcontrol xc = GetControl(L"surl");
+ xstring surl = xc.GetText();
+ if(surl == L"")
+ {
+ alert(L"请输入同步服务器地址");
+ return 1;
+ }
+
+ xstring name =tv_gs.GetItemLabel(hItem);
+ xaserverarg arg ;
+ ;
+ int ret = GetDataArg(hItem, arg);
+ //alert(arg.GetString());
+ if(ret == 0)
+ {
+ WriteLog(name+L" 失败, 原因:获取工程或文件夹失败!");
+ return -1;
+ }
+ else if(ret == 2)
+ {
+ ret = SynchFolder(hItem);
+ if(ret == -1)
+ WriteLog(name+L" 失败, 原因:获取文件数据失败!");
+ else if(ret == 0)
+ WriteLog(name+L" 失败, 原因:复制文件失败!");
+ else
+ WriteLog(name);
+ return -1;
+ }
+ SynchFolder(hItem);
+ arg.AddArg(L"__name",name);
+ arg.AddArg(L"__url",surl);
+ synchServer(arg);
+ if(name.right(3) == L".vx" || name.right(5) == L".xpage")
+ {
+ arg.AddArg(L"__name",name + L"[Code]");
+ arg.AddArg(L"iscode",L"yes");
+ synchServer(arg);
+ }
+ return 1;
+ }
+
+ xstring GetFolderPath(int hItem)
+ {
+ int k = hItem;
+ if(k == 0) return L"";
+ xstring src = L"";
+ //xstring name = L"";
+ while(k > 0)
+ {
+ int h =tv_gs.GetItemData(tv_gs.GetId(), k);
+ k =tv_gs.GetParentItem(tv_gs.GetId(), k);
+ KXMLDOMElement e = trust(h as KXMLDOMElement);
+ xstring node = GetEleString(e, L"@tagname");
+ if(node != L"File" && node != L"file")
+ {
+ xstring tmp = GetEleString(e, L"@src");
+ //if(name == L"") name = GetEleString(e, L"@caption");
+ if(tmp != L"")
+ {
+ SynchFolder(k);
+ if(src == L"") src = tmp;
+ else
+ {
+ int j = 1;
+ int s = tmp.length()();
+ xstring t = tmp.right(j).left(1);
+ while(t != L"\\" && j < s)
+ {
+ //WriteLog(t);
+ j++;
+ t = tmp.right(j).left(1);
+ }
+ if(j >= s)
+ src = tmp+ L"\\" + src;
+ else
+ src = tmp.left(s - j)+ L"\\" + src;
+ }
+ }
+ }
+ }
+ if(src == L"")
+ {
+ //WriteLog(name+L" 同步失败, 原因:获取文件数据失败0!");
+ return L"";
+ }
+ //if(src.left(9) ==L"Projects\\") src = src.mid(9, src.length()());
+ src = L"\\" + src;//.replace(L"Projects\\",L"");
+ //WriteLog(src);
+ return src;
+ }
+
+ int SynchFolder(int hItem)
+ {
+ xstring src = GetFolderPath(hItem);
+ if(src== L"") return -1;
+ if(xaserver::FileCopy(L"devfolder8001", src, L"devfolder5001", src) != 1)
+ return 0;
+ //WriteLog(src);
+ return 1;
+ }
+
+ int synchServer(xaserverarg arg)
+ {
+ xstring name = arg.GetArgString(L"__name");
+ xstring surl = arg.GetArgString(L"__url");
+ xstring d = ProcessDevCmd(L"getobject",arg.GetString());
+ if(d == L"")
+ {
+ WriteLog(name+L" 失败, 原因:获取文件数据失败!");
+ return -1;
+ }
+ //WriteLog(d);
+ arg.AddArg(L"content",d);
+ ProcessDevCmd(L"saveobject",arg.GetString(), surl,true);
+ WriteLog(name);
+ return 1;
+ }
+
+ int WriteLog(xstring str)
+ {
+ if(sContent == L"")
+ sContent = str;
+ else
+ sContent += L"\r\n" + str;
+ //alert(sContent);
+ dw_log.SetContent(sContent, L"");
+ return 1;
+ }
+
+ //焦点激活处理函数
+ int OnSetFocus(TEvent* evt, LPARAM param)
+ {
+ //重置工具条
+ SetAgent();
+ return 1;
+ }
+
+ int Add(int hItem)
+ {
+ if(nCount >99)
+ {
+ alert(L"同时同步的数量不能大于100个!");
+ return 1;
+ }
+ nItems[nCount] = hItem;
+ nCount++;
+ return 1;
+ }
+
+ int Del(int hItem)
+ {
+ for(int i=0; i<nCount; i++)
+ {
+ int p = nItems[i];
+ if(p == hItem) break;
+ }
+ if(i<nCount)
+ {
+ for(int j=i; j<nCount - 1; j++)
+ {
+ int k = nItems[j + 1];
+ nItems[j] = k;
+ }
+ nCount --;
+ }
+ return 1;
+ }
+
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ if(comdid != L"synch") return 1;
+
+ HCURSOR hCursor = xutil::SetCursorWait();
+ sContent = L"";
+ for(int i=0; i<nCount; i++)
+ {
+ int p = nItems[i];
+ //int h =tv_gs.GetItemData(tv_gs.GetId(), p);
+ //KXMLDOMElement e = trust(h as KXMLDOMElement);
+ //alert(e.xml);
+ SaveData(p);
+ xtreeview::SetChecked(tv_gs.GetId(), p,0);
+ }
+ xutil::RestoreCursor(hCursor);
+ nCount = 0;
+ return 0;
+ }
+
+ int OnTreeCheckBoxSel(TEvent* evt, LPARAM p)
+ {
+ TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh;
+
+ int hItem = nmtv.FromItem;
+
+ HCURSOR hCursor = xutil::SetCursorWait();
+ int hwnd = nmtv.hwndFrom;
+
+ int c = 1 -tv_gs.GetChecked(hwnd, hItem);
+ if(c == 1)
+ Add(hItem);
+ else
+ Del(hItem);
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+
+ //命令处理事件
+ int OnXCommand(TEvent* evt, LPARAM param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND", (FEvent)&DeveloperSynch::OnXCommand);
+ //获取焦点事件,用于重置工具条
+ //AttachEvent(L"WM_SETFOCUS",OnSetFocus);
+ AttachEvent(L"DevExplorer",L"TVN_CHECKBOXSEL", (FEvent)&DeveloperSynch::OnTreeCheckBoxSel);
+ AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING", (FEvent)&DeveloperSynch::OnTreeExpanding);
+ return 1;
+ }
+
+ int OnTreeExpanding(TEvent* evt, LPARAM lparam)
+ {
+ TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh;
+ int hItem = nmtv.itemNew.hItem;
+ int cItem=xtreeview::GetChildItem(tv_gs.GetId(), hItem);
+ if(cItem > 0) return 1;
+ int p =tv_gs.GetItemData(tv_gs.GetId(), hItem);
+ KXMLDOMElement ele = trust(p as KXMLDOMElement);
+ xstring src =GetEleString(ele, L"@src");
+ xstring tagname =GetEleString(ele, L"@tagname");
+ if (src == L"" || tagname == L"file" || tagname == L"File") return 1;
+ OnSetTree(hItem, GetFolderPath(hItem));
+
+ return 1;
+ }
+
+ int OnSetTree(int pItem, KXMLDOMElement e)
+ {
+ KXMLDOMNodeList li=e.selectNodes(L"*");
+ int i=0;
+ int s=li.length();
+ for (i=0;i<s;i++){
+ KXMLDOMElement ele= li.item(s - i - 1);
+ xstring caption = GetEleString(ele, L"@caption");
+ xstring src =GetEleString(ele, L"@src");
+ xstring image =GetEleString(ele, L"@image");
+ int p = trust(ele as int);
+ int hItem=xtreeview::InsertItem(tv_gs.GetId(), pItem,0,caption,p,image.toInt());
+ xstring tagname =GetEleString(ele, L"@tagname");
+ if (src != L"" && tagname != L"file" && tagname != L"File")
+ xtreeview::SetItemChild1(tv_gs.GetId(), hItem,1);
+ OnSetTree(hItem, ele);
+ }
+
+ return 1;
+ }
+
+ int OnSetTree(int hItem, xstring src)
+ {
+ xml x=new xml;
+
+ xaserverarg arg;
+ ;
+ arg.AddArg(L"src",src);
+ if(xaserver::ExecXQuery(GetServerUrl(),L"[Developer.Tree.xq]",arg.GetString(),x)!=1)
+ {
+ alert(L"读取节点失败!");
+ return 1;
+ }
+ KXMLDOMElement e = x.documentElement();
+ OnSetTree(hItem, e);
+ return 1;
+ }
+
+ int onload()
+ {
+ nCount = 0;
+ tv_gs = GetControl(L"DevExplorer");
+ dw_log = GetControl(L"xlog");
+ OnAttachEvent();
+
+ return 1;
+ }
+
+ int onloaded()
+ {
+ OnSetTree(0, L"Projects/projects.xhw");
+ return 1;
+ }
+ };
\ No newline at end of file
--
Gitblit v1.9.3