TEMP

#include "stdafx.h"
#include "MqCallBack.h"
#include "SLabelTrayDlg.h"

#include "../common/LocalCfg.h"

#include "../SLabelMQ/SLabelMQLib.h"

#include "../SLabelGui/SLabelGuiLib.h"



#include <boost/format.hpp>

#include <stdarg.h>
#include <assert.h>

//调试业务流程
#ifdef DEBUG
#define TRACE_CMD(cmd, type) traceCmd(cmd, type)
#else
#define TRACE_CMD(cmd, type)
#endif

CMqCallBack::CMqCallBack(CSLabelTrayDlg* pTrayDlg)
	:m_pTrayDlg(pTrayDlg)
{
	initMsgMap();
}


CMqCallBack::~CMqCallBack(void)
{
	_msgMap.clear();
}

void CMqCallBack::insert(int cmd, std::wstring header, std::wstring format, ...)
{
	std::wstring end(L"\0");

	std::vector<std::wstring> content;
	content.push_back(header);
	content.push_back(format);
	va_list ap;
	va_start(ap, format);
	std::wstring str;
	while(true)
	{
		str = va_arg(ap, std::wstring);
		if (str == end)
		{
			break;
		}
		content.push_back(str);
	}
	va_end(ap);

#ifdef DEBUG
	//test invalid cmd
	std::map<int, std::vector<std::wstring>>::const_iterator iter;
	iter = _msgMap.find(cmd);
	assert(iter == _msgMap.end());
#endif

	_msgMap[cmd] = content;
}


void CMqCallBack::initMsgMap()
{
	using namespace SLabel::Model;

	std::wstring filename(L"filename");
	std::wstring user(L"user");
	std::wstring fileid(L"fileid");
	std::wstring depart(L"depart");
	std::wstring submituser(L"submituser");
	std::wstring audituser(L"audituser");
	std::wstring resultdecribed(L"resultdecribed");
	std::wstring message(L"message");

	std::wstring end(L"\0");

	insert(Fix, L"您收到一个定密申请任务",
		L"申请部门:%s\r\n申请人员:%s\r\n申请文件:%s", depart, user, filename, end);
	insert(CheckFixResult | Pass | AuditYes,L"您的定密申请已审核通过", 
		L"申请文件:%s\r\n申请状态:%s 审核通过,已转交给 %s 确认\r\n审核意见:%s",  filename, submituser, audituser, resultdecribed, end);
	insert(CheckFixResult | Pass | AuditNo, L"您的定密申请已审批通过", 
		L"申请文件:%s\r\n申请状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(CheckFixResult | Reject, L"您的定密申请被驳回",
		L"申请文件:%s\r\n申请状态:%s 未通过,申请被驳回\r\n审核意见:%s", filename , submituser , resultdecribed, end);
	insert(NotifyKnowUser, L"您收到一个共享文档", 
		L"您有一个文件共享通知:\r\n文件名称:%s \r\n文件作者:%s", filename , user, end);
	insert(NotifyMiddleUser | Pass | AuditNo, 
		L"您审核的文件已审批通过", L"申请文件:%s\r\n申请状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(NotifyMiddleUser | Reject, L"您审核的一个文件被驳回", 
		L"申请文件:%s\r\n申请状态:%s 未通过,申请被驳回\r\n审核意见:%s", filename , submituser , resultdecribed, end);
	insert(RequestChangeApply, L"您收到一个变更申请任务",
		L"申请部门:%s\r\n申请人员:%s\r\n申请文件:%s", depart , user , filename, end);
	insert(ChangeApplyNotifyOriUser | Pass | AuditYes, L"您的变更申请已完成审核", 
		L"变更文件:%s\r\n变更状态:%s 审核通过,已转交给 %s 确认\r\n审核意见:%s", filename , submituser , audituser , resultdecribed, end);
	insert(ChangeApplyNotifyOriUser | Pass | AuditNo, L"您的变更申请已审批通过", 
		L"变更文件:%s\r\n变更状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(ChangeApplyNotifyOriUser | Reject, L"您的变更申请被驳回", 
		L"变更文件:%s\r\n变更状态:%s 未通过,申请被驳回\r\n审核意见:%s", filename , submituser , resultdecribed, end);
	insert(ChangeApplyNotifyMiddleUser | Pass | AuditYes, L"变更状态通知", 
		L"变更文件:%s\r\n变更状态:%s 审核通过,已转交给 %s 确认\r\n审核意见:%s", filename , submituser , audituser , resultdecribed, end);
	insert(ChangeApplyNotifyMiddleUser | Pass | AuditNo, L"您审核的变更申请通过审批", 
		L"变更文件:%s\r\n变更状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(ChangeApplyNotifyMiddleUser | Reject, L"您审核的变更申请被驳回", 
		L"变更文件:%s\r\n变更状态:%s 未通过,申请被驳回\r\n审核意见:%s", filename , submituser , resultdecribed, end);
	insert(ChangeApplyNotifyKnowers, L"您收到一个变更后的共享文档", 
		L"您有一个文件共享通知:\r\n文件名称:%s \r\n文件作者:%s",filename , user, end);
	insert(RequestDecrypt, L"您收到一个解密申请",
		L"申请部门:%s\r\n申请人员:%s\r\n申请文件:%s", depart, user, filename, end);
	insert(DecryptNotifyOriUser | Pass | AuditYes, L"您的解密申请已通过审核", 
		L"解密文件:%s\r\n解密状态:%s 审核通过,已转交给 %s 确认\r\n审核意见:%s", filename , submituser , audituser , resultdecribed, end);
	insert(DecryptNotifyOriUser | Pass | AuditNo, L"您的解密申请已审批通过", 
		L"解密文件:%s\r\n解密状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(DecryptNotifyOriUser | Reject, L"您的解密申请未通过", 
		L"解密文件:%s\r\n解密状态:%s 未通过,申请被驳回\r\n审核意见:%s", filename , submituser , resultdecribed, end);
	insert(DecryptNotifyMiddleUser | Pass | AuditYes, L"解密状态通知",
		L"解密文件:%s\r\n解密状态:%s 审核通过,已转交给 %s 确认\r\n审核意见:%s", filename , submituser , audituser , resultdecribed, end);
	insert(DecryptNotifyMiddleUser | Pass | AuditNo, L"您审核的解密文件审批通过", 
		L"解密文件:%s\r\n解密状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(DecryptNotifyMiddleUser | Reject, L"您审核的解密文件被驳回", 
		L"解密文件:%s\r\n解密状态:%s 未通过,申请被驳回\r\n审核意见:%s", filename , submituser , resultdecribed, end);
	insert(DecryptNotifyKnowers, L"您收到一个共享的解密文件", 
		L"您有一个文件共享通知:\r\n文件名称:%s \r\n文件作者:%s", filename , user, end);
	insert(RequestRemoveSlabel, L"您收到一个解除标志申请任务", 
		L"申请部门:%s\r\n申请人员:%s\r\n解除标志文件:%s", depart , user , filename, end);
	insert(RemoveSlabelNotifyOriUser | Pass | AuditYes, L"您的解除标志申请已完成审核", 
		L"解除标志文件:%s\r\n解除标志状态:%s 审核通过,已转交给 %s 确认\r\n审核意见:%s", filename , submituser , audituser , resultdecribed, end);
	insert(RemoveSlabelNotifyOriUser | Pass | AuditNo, L"您的解除标志申请已审批通过", 
		L"解除标志文件:%s\r\n解除标志状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(RemoveSlabelNotifyOriUser | Reject, L"您的解除标志申请被驳回", 
		L"解除标志文件:%s\r\n解除标志状态:%s 未通过,申请被驳回\r\n审核意见:%s", filename , submituser , resultdecribed, end);
	insert(RemoveSlabelNotifyKnowers, L"您收到一个解除标志的共享通知", 
		L"您有一个解除标志共享通知:\r\n文件名称:%s \r\n文件作者:%s", filename , user, end);
	insert(RequestPrint, L"您收到一个打印申请任务", 
		L"申请部门:%s\r\n申请人员:%s\r\n申请文件:%s", depart , user , filename, end);
	insert(PrintNotifyOriUser | Pass | AuditYes, L"您的打印申请已完成审核", 
		L"打印文件:%s\r\n申请状态:%s 审核通过,已转交给 %s 确认\r\n审核意见:%s",filename , submituser , audituser , resultdecribed, end);
	insert(PrintNotifyOriUser | Pass | AuditNo, L"您的打印申请已审批通过", 
		L"打印文件:%s\r\n申请状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(PrintNotifyOriUser | Reject, L"您的打印申请被驳回", 
		L"打印文件:%s\r\n申请状态:%s 未通过,申请被驳回\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(RequestOut, L"您收到一个文件外发申请任务",
		L"申请部门:%s\r\n申请人员:%s\r\n申请文件:%s", depart , user , filename, end);
	insert(OutNotifyOriUser | Pass | AuditYes, L"您的文件外发申请已完成审核",
		L"外发文件:%s\r\n申请状态:%s 审核通过,已转交给 %s 确认\r\n审核意见:%s", filename , submituser , audituser , resultdecribed, end);
	insert(OutNotifyOriUser | Pass | AuditNo, L"您的文件外发申请已审批通过", 
		L"外发文件:%s\r\n申请状态:%s 审批通过\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(OutNotifyOriUser | Reject, L"您的文件外发申请被驳回", 
		L"外发文件:%s\r\n申请状态:%s 未通过,申请被驳回\r\n审批意见:%s", filename , submituser , resultdecribed, end);
	insert(CancelTask, L"您的定密申请已撤销",
		L"文件名称:%s \r\n文件作者:%s", filename , user, end);
	insert(CancelPrintlTask, L"您的打印申请已撤销", 
		L"文件名称:%s \r\n文件作者:%s", filename , user, end);
	insert(CancelOutTask, L"您的外发申请已撤销", 
		L"文件名称:%s \r\n文件作者:%s", filename , user, end);
	insert(ErrorInfo, L"系统消息",
		L"%s", message, end);
}


void CMqCallBack::getMsgByCmd(std::wstring& header, std::wstring& content, int cmd, MqJsonPtr spMqJson)
{
	header.clear();
	content.clear();

	std::map<int, std::vector<std::wstring>>::const_iterator iter;
	iter = _msgMap.find(cmd);
	if (iter != _msgMap.end())
	{
		std::vector<std::wstring> msg = iter->second;
		formatContent(header, content, msg, spMqJson);
	}
	else
	{
		assert(false);
	}
}

void CMqCallBack::formatContent(std::wstring& header, std::wstring& content, std::vector<std::wstring>& msg, MqJsonPtr spMqJson)
{
	//must include header and content
	if (msg.size() < 2)
	{
		assert(false);
		return;
	}

	header = msg[0];
	std::wstring fomat = msg[1];
	std::vector<std::wstring> args;
	for (unsigned int i = 2; i < msg.size(); i++)
	{
		std::wstring data;
		getJsonData(data, msg[i], spMqJson);
		args.push_back(data);
	}
	//format
	boost::wformat fmt = boost::wformat(fomat);
	switch(args.size())
	{
	case 0:
		content = fomat;
		break;
	case 1:
		content = (fmt % args[0]).str(); 
		break;
	case 2:
		content = (fmt % args[0] % args[1]).str(); 
		break;
	case 3:
		content = (fmt % args[0] % args[1] % args[2]).str(); 
		break;
	case 4:
		content = (fmt % args[0] % args[1] % args[2] % args[3]).str(); 
		break;
	case 5:
		content = (fmt % args[0] % args[1] % args[2] % args[3] % args[4]).str(); 
		break;
	case 6:
		content = (fmt % args[0] % args[1] % args[2] % args[3] % args[4] % args[5]).str(); 
		break;
	default:
		assert(false);
	}
}

void CMqCallBack::getJsonData(std::wstring& data, const std::wstring& arg, MqJsonPtr spMqJson)
{
	data.clear();

	std::wstring filename(L"filename");
	std::wstring user(L"user");
	std::wstring fileid(L"fileid");
	std::wstring depart(L"depart");
	std::wstring submituser(L"submituser");
	std::wstring audituser(L"audituser");
	std::wstring resultdecribed(L"resultdecribed");
	std::wstring message(L"message");

	if (arg == filename)
	{
		spMqJson->GetString(filename, data);
	}
	else if (arg == user)
	{
		spMqJson->GetString(user, data);
	}
	else if (arg == fileid)
	{
		spMqJson->GetString(fileid, data);
	}
	else if (arg == depart)
	{
		spMqJson->GetString(depart, data);
	}
	else if (arg == submituser)
	{
		spMqJson->GetString(submituser, data);
	}
	else if (arg == audituser)
	{
		spMqJson->GetString(audituser, data);
	}
	else if (arg == resultdecribed)
	{
		boost::shared_ptr<SLabel::Model::MqJsonFix>spFix = boost::dynamic_pointer_cast<SLabel::Model::MqJsonFix>(spMqJson);  
		shared_array<AuditHistory> ptrHistory;
		if(ptrHistory)
		{
			ptrHistory.reset();
		}
		int count;
		spFix->ParseFixHistory(ptrHistory, count);
		if (!ptrHistory || count < 2)
		{
			assert(false);
		}
		data = ptrHistory[1].resultdecribed;
	}
	else if (arg == message)
	{
		spMqJson->GetString(message, data);
	}
	else
	{
		assert(false);
	}
}

bool CMqCallBack::histroyResult(MqJsonPtr spMqJson)
{
	boost::shared_ptr<SLabel::Model::MqJsonFix>spFix = boost::dynamic_pointer_cast<SLabel::Model::MqJsonFix>(spMqJson);  
	shared_array<AuditHistory> ptrHistory;
	if(ptrHistory)
	{
		ptrHistory.reset();
	}
	int count;
	spFix->ParseFixHistory(ptrHistory, count);
	if (!ptrHistory || count < 2)
	{
		assert(false);
	}
	return (ptrHistory[1].result == 1);
}

bool CMqCallBack::hasAuditUser(MqJsonPtr spMqJson)
{
	std::wstring audituser;
	spMqJson->GetString(L"audituser",audituser);
	return !audituser.empty();
}

void CMqCallBack::addPoupeMessage(int cmd, 
	MqJsonPtr spMqJson)
{
	std::wstring header, content;
	getMsgByCmd(header, content, cmd, spMqJson);
	m_pTrayDlg->m_poupeWnd.AddMessage(header,content);
}

void CMqCallBack::addPoupeMessage(int cmd, 
	MqJsonPtr spMqJson,
	bool isLinker,
	std::wstring url,
	std::wstring data,
	int type)
{
	std::wstring header, content;
	getMsgByCmd(header, content, cmd, spMqJson);
	std::wstring fileid;
	spMqJson->GetString(L"fileid", fileid);
	m_pTrayDlg->m_poupeWnd.AddMessage(header,content,isLinker,url,data, fileid, type);
}

void CMqCallBack::showPoupeWnd()
{
	m_pTrayDlg->m_poupeWnd.ShowFirst();
}

void CMqCallBack::updateTrayIconTip(int connectStatu )
{
	m_pTrayDlg->m_connectStatu = connectStatu;
	m_pTrayDlg->UpdateTrayIcon();   
}

void CMqCallBack::mqSend(std::wstring text)
{
	std::string ssText = CTChar::ws2s(text);
	int result = MqSend((void*)ssText.c_str(), ssText.length() + 1);
	if (result)
	{
		OutputDebugStringA("[CMqCallBack] Send Mq Data Error!");
		assert(false);
	}
#ifdef DEBUG
	//回调Mq的CMD可以检测到,但是发送Mq的CMD有的是在对话框里面发送的
	//有的是在外面发送的
	using namespace SLabel::Model;
	boost::shared_ptr<MqJson>spMqJson = MqJsonFactory::MakeMqJson(text);       
	if (!spMqJson.get())
	{
		return;
	}
	int cmd = spMqJson->GetCmd();
	TRACE_CMD(cmd, 1);
#endif
}

void CMqCallBack::traceCmd(int cmd, int type)
{
	using namespace SLabel::Model;
	string strCmd;
	switch(cmd)
	{
	case Fix: strCmd = "Fix"; break;
	case CheckFix: strCmd = "CheckFix"; break;
	case CheckFixResult: strCmd = "CheckFixResult"; break;
	case NotifyKnowUser: strCmd = "NotifyKnowUser"; break;
	case NotifyMiddleUser: strCmd = "NotifyMiddleUser"; break;
	case TaskManage: strCmd = "TaskManage"; break;
	case ErrorInfo: strCmd = "ErrorInfo"; break;
	case UserRequest: strCmd = "UserRequest"; break;
	case CompanyDepartRequest: strCmd = "CompanyDepartRequest"; break;
	case FixBasis: strCmd = "FixBasis"; break;
	case FileCheck: strCmd = "FileCheck"; break;
	case RequestChangeApply: strCmd = "RequestChangeApply"; break;
	case ChangeApplyNotifyOriUser: strCmd = "ChangeApplyNotifyOriUser"; break;
	case ChangeApplyNotifyKnowers: strCmd = "ChangeApplyNotifyKnowers"; break;
	case ChangeApplyNotifyMiddleUser: strCmd = "ChangeApplyNotifyMiddleUser"; break;
	case RequestDecrypt: strCmd = "RequestDecrypt"; break;
	case DecryptNotifyOriUser: strCmd = "DecryptNotifyOriUser";break;
	case DecryptNotifyKnowers: strCmd = "DecryptNotifyKnowers"; break;
	case DecryptNotifyMiddleUser: strCmd = "DecryptNotifyMiddleUser"; break;
	case RequestRemoveSlabel: strCmd = "RequestRemoveSlabel"; break;
	case RemoveSlabelNotifyOriUser: strCmd = "RemoveSlabelNotifyOriUser"; break;
	case RemoveSlabelNotifyKnowers: strCmd = "RemoveSlabelNotifyKnowers"; break;
	case RemoveSlabelNotifyMiddleUser: strCmd = "RemoveSlabelNotifyMiddleUser"; break;
	case RequestPrint: strCmd = "RequestPrint"; break;
	case PrintNotifyOriUser: strCmd = "PrintNotifyOriUser"; break;        
	case RequestOut: strCmd = "RequestOut"; break;
	case OutNotifyOriUser: strCmd = "OutNotifyOriUser"; break;
	case CancelTask: strCmd = "CancelTask"; break;
	case CancelPrintlTask: strCmd = "CancelPrintlTask"; break;
	case CancelOutTask: strCmd = "CancelOutTask"; break;
	case DecryptTip: strCmd = "DecryptTip"; break;
	case ResponseOperation: strCmd = "ResponseOperation"; break;
	case None: strCmd = "None"; break;
	default: strCmd = "Error"; break;
	};
	char outDebug[100] = {0};
	if (type == 0)
		sprintf_s(outDebug, 100, "MqReceive===%s", strCmd.c_str());
	else
		sprintf_s(outDebug, 100, "MqSend=====%s", strCmd.c_str());
	OutputDebugStringA(outDebug);
}

void CMqCallBack::checkFixImp(const std::wstring& data, MqJsonPtr spMqJson)
{
	using namespace SLabel::Model;

	wstring strFileName,strApply,strFileID,strAuditer;
	spMqJson->GetString(L"filename",strFileName);
	spMqJson->GetString(L"user",strApply);
	spMqJson->GetString(L"fileid",strFileID);
	spMqJson->GetString(L"audituser",strAuditer);
	int taskType(-1);
	spMqJson->GetInt(L"tasktype", taskType);

	wstring taskid;
	spMqJson->GetString(L"taskid",taskid);

	std::auto_ptr<SHOW_MESSAGE> apMessage(new SHOW_MESSAGE);
	apMessage->caption = L"定密申请";
	apMessage->AddItem(L"申请文件:",strFileName,true,L"",data, strFileID);

	int taskstatus = TaskStatu_Apply;
	spMqJson->GetInt(L"taskstatus", taskstatus);
	// 任务被拒绝
	if (taskstatus == TaskStatu_Reject)
	{
		int tasktype;
		spMqJson->GetInt(L"tasktype", tasktype);
		switch (tasktype)
		{                
		case TaskType_PrintCtrl:
			{
				wstring text;   
				if (PrintCtrlApplyDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		case TaskType_OutCtrl:
			{
				wstring text;   
				if (OutCtrlApplyDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		default:
			{
				ShowDealRejestWnd(data);
			}
			break;
		} 

		// 如果是任务被拒绝,下面解析不对,不用处理
		return;
	}

	int optType(-1);
	spMqJson->GetInt(L"opt_type", optType);
	// 0-9,表示处理申请,optType表示任务类型
	if (optType > -1 && optType < 10) 
	{
		// 此时optType作为taskType,taskType不一定正确
		switch (optType)
		{
		case TaskType_Fix:
			break;
		case TaskType_Change:
			{
				wstring text;
				wstring newData = getRightData(spMqJson);
				ChangeApplyDialog(newData, text);
			}
			break;
		case TaskType_Decrypt:
			{
				wstring text;
				wstring newData = getRightData(spMqJson);
				if (DecryptApplyDialog(newData, text) == IDOK)
					mqSend(text);
			}
			break;
		case TaskType_RemoveSlabel:
			{
				wstring text;   
				if (RemoveSlabelApplyDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		case TaskType_PrintCtrl:
			{
				wstring text;   
				if (PrintCtrlApplyDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		case TaskType_OutCtrl:
			{
				wstring text;   
				if (OutCtrlApplyDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		}  
	}   
	// 撤销申请
	else if (optType == 21) 
	{   
		SLabel::Model::MqJsonTask json; 
		int result = json.MakeCancelTask(m_pTrayDlg->m_user.username,m_pTrayDlg->m_user.userid, taskid);
		if (result == S_OK)
		{
			wstring text;
			json.ToString(text);
			mqSend(text);

			Sleep(500);
			SendCopyDataMessage(0);
		}     
	}
	// 10-19,表示处理审核
	else //if (optType > 10) 
	{
		switch (taskType)
		{
		case TaskType_Fix:        
			m_pTrayDlg->ShowCheckDlg(apMessage->items[0].get());                       
			break;
		case TaskType_Change:
			{
				wstring text;
				if (ChangeDialog(data, text) == IDOK)
					mqSend(text);


			}
			break;
		case TaskType_Decrypt:
			{
				wstring text;
				if (DecryptDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		case TaskType_RemoveSlabel:
			{
				wstring text;
				if (RemoveSlabelDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		case TaskType_PrintCtrl:
			{
				wstring text;   
				if (PrintCtrlDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		case TaskType_OutCtrl:
			{
				wstring text;   
				if (OutCtrlDialog(data, text) == IDOK)
					mqSend(text);
			}
			break;
		}
	}
}

std::wstring CMqCallBack::getRightData(MqJsonPtr spMqJson)
{
	using namespace SLabel::Model;
	wstring filename,strFileID;
	spMqJson->GetString(L"fileid",strFileID);
	std::map<std::wstring,std::wstring>::iterator i= m_pTrayDlg->m_mapFilenames.find(strFileID);
	if(i != m_pTrayDlg->m_mapFilenames.end())
	{
		spMqJson->SetString(L"filename",i->second);
		m_pTrayDlg->m_mapFilenames.erase(i);
	}

	wstring data;
	spMqJson->ToString(data);
	return data;
}

void CMqCallBack::Connect( const std::wstring& data )
{
	int nTimeInterval = CLocalCfg::get_const_instance().GetTimeInterval();

	// mq连接失败
	if(data.empty())
	{
		if (m_pTrayDlg->m_isConnected == false && m_pTrayDlg->m_connectStatu == UNCONNECTED)
		{
			return;
		}

		m_pTrayDlg->m_isConnected = false;
		m_pTrayDlg->m_connectStatu = UNCONNECTED;
		m_pTrayDlg->UpdateTrayIcon();  

		m_pTrayDlg->SetTimer(TIMER_TRY_CONNECT, nTimeInterval * 1000, NULL);

		return ;
	}   

	// mq需要二个连接,一个发送,一个接收
	// 这里指其中一个连接完成,还需要第二个连接
	if (data == L"SLabelServer:1")
	{
		m_pTrayDlg->m_connectStatu = CONNECTING;
		RegeditMqUser(m_pTrayDlg->m_user.userid);
	}
	// mq连接成功
	else if (data == L"SLabelServer:2")
	{
		m_pTrayDlg->m_connectStatu = CONNECTED;
		m_pTrayDlg->UpdateTrayIcon();

		// 请求组织机构,定密依据等
		// 此函数名比较老,作为心跳包,请求组织机构、定密依据是否有更新等
		m_pTrayDlg->UserRegister();

		// 启动心跳包定时器
		m_pTrayDlg->SetTimer(TIMER_USER_REGISTER, nTimeInterval * 1000, NULL);

		//不懂
		HWND hWnd1 = ::FindWindowA(NULL, string(BROWER_TITLE_NAME + CLocalCfg::get_const_instance().GetVersion()).c_str());
		if(hWnd1)
		{
			::PostMessage(hWnd1, WM_CANCELJOURNAL, NULL, NULL);
		}
	}  
}

void CMqCallBack::Receive( const std::wstring& data )
{
	using namespace SLabel::Model;

	m_pTrayDlg->m_isConnected = true;

	// 把mq解析成实际业务的json对象
	boost::shared_ptr<MqJson>spMqJson = MqJsonFactory::MakeMqJson(data);       
	if (!spMqJson.get())
	{
		return;
	}

	// 每一个cmd代表一个业务,具体参考详细设计文档
	int cmd = spMqJson->GetCmd();

	TRACE_CMD(cmd, 0);

	switch (cmd)
	{
	case ResponseOperation:
		{
			SendCopyDataMessage(4);
		}
		break;
	case CheckFix:
		{
			updateTrayIconTip(CONNECTED);
			checkFixImp(data, spMqJson);
		}
		break;
	case Fix:
		{
			addPoupeMessage(Fix, spMqJson, true,L"",data, ID_SHOW_CHECK_DLG);
			showPoupeWnd();
			updateTrayIconTip(TIP);
		}
		break;
	case CheckFixResult:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(CheckFixResult | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(CheckFixResult | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(CheckFixResult | Reject, spMqJson, true, L"", data, ID_SEND_REJEST);
			}
			showPoupeWnd();
		}           
		break;
	case CompanyDepartRequest:
		{
			boost::shared_ptr<MqJsonUserInfo>spUsers = boost::dynamic_pointer_cast<MqJsonUserInfo>(spMqJson);  
			wstring out;
			spUsers->ToString(out);
			m_pTrayDlg->SaveCompanyInfo(spUsers);

			int version;
			spMqJson->GetInt(L"secret_version", version);
			if (m_pTrayDlg->m_fixBasisVersion < version)
			{
				m_pTrayDlg->CheckFixBasis();
			}
		}
		break;
	case ErrorInfo:
		{
			// 有些应该弹出窗口的,因为错误,弹出poupe窗口错误提示,但是qt浏览器锁住了
			// 强制解锁
			SendCopyDataMessage(NULL);

			addPoupeMessage(ErrorInfo, spMqJson);
			showPoupeWnd();
		}
		break;
	case TaskManage:    
		{ 

		}
		break;
	case FixBasis:
		{
			boost::shared_ptr<MqJsonFixBasis>spUsers = boost::dynamic_pointer_cast<MqJsonFixBasis>(spMqJson);  
			m_pTrayDlg->UpdateFixBasis(spUsers.get());
		}
		break;
	case FileCheck:
		{
			boost::shared_ptr<MqJsonFileCheck>spUsers = boost::dynamic_pointer_cast<MqJsonFileCheck>(spMqJson);
			SetFileCheckResult(spUsers);
		}
		break;
	case NotifyKnowUser:
		{
			addPoupeMessage(NotifyKnowUser, spMqJson);
			showPoupeWnd();
		}
		break;
	case NotifyMiddleUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					assert(false);
				}
				else //AuditNo
				{
					addPoupeMessage(NotifyMiddleUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(NotifyMiddleUser | Reject, spMqJson);
			}
			showPoupeWnd();
		}
		break;
	case RequestChangeApply:
		{              
			addPoupeMessage(RequestChangeApply, spMqJson, true, L"", data, ID_SHOW_CHANGE_DLG);
			showPoupeWnd();
			updateTrayIconTip(TIP);                                     		
		}
		break;
	case ChangeApplyNotifyOriUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(ChangeApplyNotifyOriUser | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(ChangeApplyNotifyOriUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(ChangeApplyNotifyOriUser | Reject, spMqJson, true, L"", data, ID_SEND_REJEST);
			}
			showPoupeWnd();
		}
		break;
	case ChangeApplyNotifyMiddleUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(ChangeApplyNotifyMiddleUser | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(ChangeApplyNotifyMiddleUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(ChangeApplyNotifyMiddleUser | Reject, spMqJson);
			}
			showPoupeWnd();
		}
		break;
	case ChangeApplyNotifyKnowers:
		{
			addPoupeMessage(ChangeApplyNotifyKnowers, spMqJson);
			showPoupeWnd();
		}
		break;
		
	case RequestDecrypt:
		{
			addPoupeMessage(RequestDecrypt, spMqJson, true,L"",data, ID_SHOW_DECRYPT_DLG);
			showPoupeWnd();  
			updateTrayIconTip(TIP);
		}
		break;
	case DecryptNotifyOriUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(DecryptNotifyOriUser | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(DecryptNotifyOriUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(DecryptNotifyOriUser | Reject, spMqJson, true, L"", data, ID_SEND_REJEST);
			}
			showPoupeWnd();
		}
		break;
	case DecryptNotifyMiddleUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(DecryptNotifyMiddleUser | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(DecryptNotifyMiddleUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(DecryptNotifyMiddleUser | Reject, spMqJson);
			}
			showPoupeWnd();
		}
		break;
	case DecryptNotifyKnowers:
		{
			addPoupeMessage(DecryptNotifyKnowers, spMqJson);
			showPoupeWnd();
		}
		break;
	case RequestRemoveSlabel:
		{              
			addPoupeMessage(RequestRemoveSlabel, spMqJson, true,L"",data, ID_SHOW_REMOVE_SLABEL_DLG);
			showPoupeWnd();
			updateTrayIconTip(TIP);
		}
		break;
	case RemoveSlabelNotifyOriUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(RemoveSlabelNotifyOriUser | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(RemoveSlabelNotifyOriUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(RemoveSlabelNotifyOriUser | Reject, spMqJson, true, L"", data, ID_SEND_REJEST);
			}
			showPoupeWnd();
		}
		break;
	case RemoveSlabelNotifyMiddleUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(RemoveSlabelNotifyMiddleUser | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(RemoveSlabelNotifyMiddleUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(RemoveSlabelNotifyMiddleUser | Reject, spMqJson);
			}
			showPoupeWnd();
		}
		break;
	case RemoveSlabelNotifyKnowers:
		{
			addPoupeMessage(RemoveSlabelNotifyKnowers, spMqJson);
			showPoupeWnd();
		}
		break;

	case RequestPrint:
		{              
			addPoupeMessage(RequestPrint, spMqJson, true,L"",data, ID_SHOW_CHANGE_DLG);
			showPoupeWnd();
			updateTrayIconTip(TIP);
		}
		break;
	case PrintNotifyOriUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(PrintNotifyOriUser | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(PrintNotifyOriUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(PrintNotifyOriUser | Reject, spMqJson, true, L"", data, ID_SEND_REJEST);
			}
			showPoupeWnd();
		}
		break;

	case RequestOut:
		{              
			addPoupeMessage(RequestOut, spMqJson, true,L"",data, ID_SHOW_CHANGE_DLG);
			showPoupeWnd();
			updateTrayIconTip(TIP);                                  		
		}
		break;
	case OutNotifyOriUser:
		{
			if(histroyResult(spMqJson))  //pass
			{
				if (hasAuditUser(spMqJson))//AuditYes
				{
					addPoupeMessage(OutNotifyOriUser | Pass | AuditYes, spMqJson);
				}
				else //AuditNo
				{
					addPoupeMessage(OutNotifyOriUser | Pass | AuditNo, spMqJson);

					SendCopyDataMessage(2);
				}
			}
			else //Reject
			{
				addPoupeMessage(PrintNotifyOriUser | Reject, spMqJson, true, L"", data, ID_SEND_REJEST);
			}
			showPoupeWnd();
		}
		break;

	case CancelTask:
		{       
			addPoupeMessage(CancelTask, spMqJson);
			showPoupeWnd();
		}
		break;
	case CancelPrintlTask:
		{
			addPoupeMessage(CancelPrintlTask, spMqJson);
			showPoupeWnd();
		}
		break;
	case CancelOutTask:
		{
			addPoupeMessage(CancelOutTask, spMqJson);
			showPoupeWnd();
		}
		break;
	case DecryptTip:
		{
			//解密操作里面,没有解密提醒这个消息,故删除之
			assert(false);
		}
		break;
		
	default:
		break;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值