|
|
|
|
#include "StdAfx.h"
|
|
|
|
|
#include "WorkCmdInvoker.h"
|
|
|
|
|
#include "GlobalFunction.h"
|
|
|
|
|
#include "MsgBox.h"
|
|
|
|
|
#include "FileMgr.h"
|
|
|
|
|
#include "WorkCmdFactory.h"
|
|
|
|
|
#include "WorkCmdContainer.h"
|
|
|
|
|
#include "ExceptionMsg.h"
|
|
|
|
|
#include "DeviceState.h"
|
|
|
|
|
#include "PciCh365Mgr.h"
|
|
|
|
|
#include "PciPortMgr.h"
|
|
|
|
|
#include "ProgressMgr.h"
|
|
|
|
|
#include "DlgProgress.h"
|
|
|
|
|
#include "CommonFlowMgr.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CWorkCmdInvoker::CWorkCmdInvoker(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
CWorkCmdInvoker::~CWorkCmdInvoker(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><>ȡFileName <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|
|
|
|
CString CWorkCmdInvoker::GetFullFilePath(const CString &FileName)
|
|
|
|
|
{
|
|
|
|
|
CString FilePath = _T("\\Parameter\\WorkFlow\\")+FileName+_T(".flw");
|
|
|
|
|
CString FullFilePath;
|
|
|
|
|
|
|
|
|
|
CFileMgr FileMgr;
|
|
|
|
|
FileMgr.GetFullFilePath(FullFilePath,FilePath);
|
|
|
|
|
|
|
|
|
|
return FullFilePath;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD>WorkCmdVec
|
|
|
|
|
void CWorkCmdInvoker::CreatCmd(const CString &FilePath)
|
|
|
|
|
{
|
|
|
|
|
//<2F><>ȡָ<C8A1><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CmdVec -------------------------------------
|
|
|
|
|
vector<CString> CmdVec;
|
|
|
|
|
CFileMgr FileMgr;
|
|
|
|
|
FileMgr.ReadFileToStringVec(FilePath,CmdVec);
|
|
|
|
|
CreatCmd(CmdVec);
|
|
|
|
|
}
|
|
|
|
|
void CWorkCmdInvoker::CreatCmd(vector<CString> &CmdVec)
|
|
|
|
|
{
|
|
|
|
|
CWorkCmdContainer &CmdContainer = CWorkCmdContainer::GetInstance();
|
|
|
|
|
CmdContainer.Clear();
|
|
|
|
|
//<2F><><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>------------------------------
|
|
|
|
|
CWorkCmdFactory CmdFactory;
|
|
|
|
|
vector<CString>::iterator iter = CmdVec.begin();
|
|
|
|
|
vector<CString>::iterator iter_end = CmdVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
CmdFactory.Creat(*iter);
|
|
|
|
|
}
|
|
|
|
|
catch(CExceptionMsg &Msg)
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show(Msg.GetMsgStr(), true);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//ֱ<><D6B1>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
void CWorkCmdInvoker::Excute()
|
|
|
|
|
{
|
|
|
|
|
CDeviceState &DeviceState = CDeviceState::GetInstance();
|
|
|
|
|
if(!DeviceState.CheckState(_STATE_WORKING,false))//<2F><><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>״̬
|
|
|
|
|
return;
|
|
|
|
|
DeviceState.SetState(_STATE_WORKING);
|
|
|
|
|
|
|
|
|
|
//ִ<><D6B4>ָ<EFBFBD>
|
|
|
|
|
ExcuteAllCmd();
|
|
|
|
|
}
|
|
|
|
|
//ִ<><D6B4>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
void CWorkCmdInvoker::ExcuteOneCmd(CWorkCmd *pCmd)
|
|
|
|
|
{
|
|
|
|
|
CDeviceState &DeviceState = CDeviceState::GetInstance();
|
|
|
|
|
if(!DeviceState.CheckState(_STATE_WORKING,false))//<2F><><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>״̬
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
DeviceState.SetState(_STATE_WORKING);
|
|
|
|
|
//<2F><><EFBFBD>ӵ<EFBFBD>ָ<EFBFBD>
|
|
|
|
|
CWorkCmdContainer &CmdContainer = CWorkCmdContainer::GetInstance();
|
|
|
|
|
CmdContainer.Clear();
|
|
|
|
|
CmdContainer.AddCmd(pCmd);
|
|
|
|
|
//ִ<><D6B4>ָ<EFBFBD>
|
|
|
|
|
ExcuteAllCmd();
|
|
|
|
|
}
|
|
|
|
|
void CWorkCmdInvoker::Excute(CWorkCmdContainer &CmdContainer)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CWorkCmd>> &WorkCmdVec = CmdContainer.GetContainer();
|
|
|
|
|
vector<Sptr<CWorkCmd>>::iterator iter = WorkCmdVec.begin();
|
|
|
|
|
vector<Sptr<CWorkCmd>>::iterator iter_end = WorkCmdVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Work(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ִ<><D6B4>һ<EFBFBD><D2BB>ָ<EFBFBD>
|
|
|
|
|
void CWorkCmdInvoker::ExcuteCmd(vector<CString> &CmdVec)
|
|
|
|
|
{
|
|
|
|
|
if(CmdVec.empty())
|
|
|
|
|
return;
|
|
|
|
|
CDeviceState &DeviceState = CDeviceState::GetInstance();
|
|
|
|
|
if(!DeviceState.CheckState(_STATE_WORKING,false))//<2F><><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>״̬
|
|
|
|
|
return;
|
|
|
|
|
DeviceState.SetState(_STATE_WORKING);
|
|
|
|
|
|
|
|
|
|
try//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
{
|
|
|
|
|
CreatCmd(CmdVec);
|
|
|
|
|
}
|
|
|
|
|
catch(CExceptionMsg &Msg)
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show(Msg.GetMsgStr(), true);
|
|
|
|
|
DeviceState.SetState(_STATE_WAIT);
|
|
|
|
|
return;//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
ExcuteAllCmd();
|
|
|
|
|
}
|
|
|
|
|
//ָ<><D6B8><EFBFBD>߳<EFBFBD>ִ<EFBFBD>к<EFBFBD><D0BA><EFBFBD>
|
|
|
|
|
UINT ExcuteAllCmdThread(LPVOID pParam)
|
|
|
|
|
{
|
|
|
|
|
CWorkCmdInvoker *p = (CWorkCmdInvoker *)pParam;
|
|
|
|
|
p->ExcuteAllCmdExt();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
//ִ<><D6B4>ָ<EFBFBD><EFBFBD><EEBCAF><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ָ<EFBFBD><D6B8>-------------------------------------------------
|
|
|
|
|
void CWorkCmdInvoker::ExcuteAllCmd(bool bNewThread)
|
|
|
|
|
{
|
|
|
|
|
if(bNewThread)//<2F><><EFBFBD>µ<EFBFBD><C2B5>߳<EFBFBD><DFB3><EFBFBD>ִ<EFBFBD><D6B4>
|
|
|
|
|
{
|
|
|
|
|
CDlgProgress dlg;
|
|
|
|
|
CWorkCmdContainer &CmdContainer = CWorkCmdContainer::GetInstance();
|
|
|
|
|
int CmdCnt = CmdContainer.GetCmdCnt();
|
|
|
|
|
if(CmdCnt>1)//ֻ<><D6BB>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8>ʱ<EFBFBD><CAB1>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
//<2F><EFBFBD><F3B6A8BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#ifdef __PROGRESS_DLG__
|
|
|
|
|
gProgressMgr.SetWorkProgress(&dlg.GetProgress());
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
CWinThread* pThread = AfxBeginThread(ExcuteAllCmdThread,this);
|
|
|
|
|
if(CmdCnt>1)//ֻ<><D6BB>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8>ʱ<EFBFBD><CAB1>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
#ifdef __PROGRESS_DLG__
|
|
|
|
|
dlg.DoModal();//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
WaitForThreadExit(pThread);//<2F>ȴ<EFBFBD><C8B4>߳̽<DFB3><CCBD><EFBFBD>
|
|
|
|
|
#ifdef __PROGRESS_DLG__
|
|
|
|
|
gProgressMgr.SetWorkProgress(NULL);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ExcuteAllCmdExt();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CWorkCmdInvoker::ExcuteAllCmdExt()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
CDeviceState &DeviceState = CDeviceState::GetInstance();
|
|
|
|
|
gLogMgr->WriteDebugLog(_T("func : ExcuteAllCmd ---------->Start"));
|
|
|
|
|
CWorkCmdContainer &CmdContainer = CWorkCmdContainer::GetInstance();
|
|
|
|
|
vector<Sptr<CWorkCmd>> &WorkCmdVec = CmdContainer.GetContainer();
|
|
|
|
|
|
|
|
|
|
m_bCancel = false;//ָ<><D6B8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ֹ
|
|
|
|
|
int size = WorkCmdVec.size();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
vector<Sptr<CWorkCmd>>::iterator iter = WorkCmdVec.begin();
|
|
|
|
|
vector<Sptr<CWorkCmd>>::iterator iter_end = WorkCmdVec.end();
|
|
|
|
|
CString ErrMsg;
|
|
|
|
|
|
|
|
|
|
for(double k = 1;iter!=iter_end;iter++,k += 1)
|
|
|
|
|
{
|
|
|
|
|
//if((IsShiftKeyDown() || DeviceState.IsWorking()==false)&&m_bCancel==false)
|
|
|
|
|
if((IsShiftKeyDown())&&m_bCancel==false)
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
if(MsgBox.ConfirmOkCancel(_T("ִֹͣ<EFBFBD><EFBFBD>?")))
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog(_T("func : ExcuteAllCmd---->ִֹͣ<D6B9><D6B4>"));
|
|
|
|
|
m_bCancel = true;
|
|
|
|
|
gCommonFlowMgr->SetbWorkStop(true);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DeviceState.SetState(_STATE_WORKING);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Work(m_bCancel);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ִ<EFBFBD><D6B4>ʧ<EFBFBD><CAA7>,ǿ<><C7BF><EFBFBD><EFBFBD>ֹ
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
#ifdef __PROGRESS_DLG__
|
|
|
|
|
gProgressMgr.SetCurProgress(static_cast<int>(k),size);
|
|
|
|
|
#endif
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
GetFrame()->m_DlgCutDeviceCtrl.Update();
|
|
|
|
|
}
|
|
|
|
|
catch(CExceptionMsg &Msg)
|
|
|
|
|
{
|
|
|
|
|
ErrMsg = Msg.GetMsgStr();
|
|
|
|
|
CString str("Func : ExcuteAllCmd---->");
|
|
|
|
|
str += ErrMsg;
|
|
|
|
|
|
|
|
|
|
gLogMgr->WriteDebugLog(str,_LOG_ERROR);
|
|
|
|
|
m_bCancel = true;
|
|
|
|
|
gCommonFlowMgr->SetbWorkStop(true);
|
|
|
|
|
//ǿ<>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#ifdef __PROGRESS_DLG__
|
|
|
|
|
gProgressMgr.SetCurProgress(100,100);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
DeviceState.SetState(_STATE_WAIT);
|
|
|
|
|
if(ErrMsg != "")
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show(ErrMsg);
|
|
|
|
|
}
|
|
|
|
|
gLogMgr->WriteDebugLog(_T("func : ExcuteAllCmd ---------->End"));
|
|
|
|
|
}
|
|
|
|
|
#endif
|