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.

231 lines
6.8 KiB
C++

#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