📄 transview.cpp
字号:
// TransView.cpp : implementation of the CTransView class
//
#include "stdafx.h"
#include "Trans.h"
#include "TransDoc.h"
#include "TransView.h"
#include <fstream>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTransView
IMPLEMENT_DYNCREATE(CTransView, CListView)
BEGIN_MESSAGE_MAP(CTransView, CListView)
//{{AFX_MSG_MAP(CTransView)
ON_COMMAND(ID_MENU_OPEN, OnMenuOpen)
ON_COMMAND(ID_MENU_CLOSE, OnMenuClose)
ON_COMMAND(ID_MENU_REPORT, OnMenuReport)
ON_COMMAND(ID_MENU_SGDZ, OnMenuSgdz)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTransView construction/destruction
UINT GetBankReq(LPVOID PARAM);
UINT GetSecuReq(LPVOID PARAM);
CTransView::CTransView()
{
m_bOpen=FALSE;
m_bCheckIn=FALSE;
m_bMulti=FALSE;
m_Interface=NULL;
m_BankInte=NULL;
char szTmp[200];
memset(&m_comm,0,sizeof(INNERCOMM));
GetPrivateProfileString("证券","银行代码","",m_comm.BANKID,6,CONFIGINI);//
GetPrivateProfileString("银行","券商代码","",m_comm.SECUID,6,CONFIGINI);//
GetPrivateProfileString("证券","操作员","",m_comm.OPERATOR,40,CONFIGINI);//4-操作员代码
GetPrivateProfileString("证券","操作员密码","",m_comm.OPERPSWD,40,CONFIGINI);
GetPrivateProfileString("系统","发起方","券商发起",szTmp,20,CONFIGINI);
GetPrivateProfileString("银行","银行名称","银行",m_szBankName,40,CONFIGINI);
if(strcmp(szTmp,"券商发起")==0)
m_nCauseType=1;
else if(strcmp(szTmp,"银行发起")==0)
m_nCauseType=2;
else //双方发起
m_nCauseType=3;
int n=GetPrivateProfileInt("系统","支持多币种",0,CONFIGINI);
if(n) m_bMulti=TRUE;
}
CTransView::~CTransView()
{
if(m_bOpen){
AfxMessageBox("尚未签退!");
}
m_bOpen=FALSE;
if(m_Interface) delete m_Interface;
if(m_BankInte) delete m_BankInte;
}
BOOL CTransView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CListView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTransView drawing
void CTransView::OnDraw(CDC* pDC)
{
CTransDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CTransView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
GetListCtrl().ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS);
GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_GRIDLINES|
LVS_EX_FULLROWSELECT);
CDC *pDC=GetDC();
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
GetListCtrl().InsertColumn(0,"账号",LVCFMT_LEFT,15*tm.tmAveCharWidth,0);
GetListCtrl().InsertColumn(1,"券商流水号",LVCFMT_LEFT,15*tm.tmAveCharWidth,1);
GetListCtrl().InsertColumn(2,"银行",LVCFMT_LEFT,12*tm.tmAveCharWidth,2);
GetListCtrl().InsertColumn(3,"银行流水号",LVCFMT_LEFT,18*tm.tmAveCharWidth,3);
GetListCtrl().InsertColumn(4,"操作类型",LVCFMT_LEFT,16*tm.tmAveCharWidth,4);
GetListCtrl().InsertColumn(5,"金额",LVCFMT_LEFT,20*tm.tmAveCharWidth,5);
GetListCtrl().InsertColumn(6,"操作结果",LVCFMT_LEFT,20*tm.tmAveCharWidth,6);
GetListCtrl().InsertColumn(7,"结果说明",LVCFMT_LEFT,20*tm.tmAveCharWidth,7);
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
}
/////////////////////////////////////////////////////////////////////////////
// CTransView printing
BOOL CTransView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTransView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTransView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CTransView diagnostics
#ifdef _DEBUG
void CTransView::AssertValid() const
{
CListView::AssertValid();
}
void CTransView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CTransDoc* CTransView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTransDoc)));
return (CTransDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTransView message handlers
//签到
void CTransView::OnMenuOpen()
{
//取得基本数据
PARAM myParam;
RESULT myResult;
char szTmp[256];
CTime t=CTime::GetCurrentTime();
CString strTime=t.Format("%Y%m%d");
GetPrivateProfileString("系统","签到日期","",szTmp,10,CONFIGINI);
if(strTime==szTmp)
{
m_nBankToSecu=GetPrivateProfileInt("系统","银行转证券笔数",0,CONFIGINI);
m_nSecuToBank=GetPrivateProfileInt("系统","证券转银行笔数",0,CONFIGINI);
m_nBToS=GetPrivateProfileInt("系统","银行转证券金额",0,CONFIGINI);
m_nSToB=GetPrivateProfileInt("系统","证券转银行金额",0,CONFIGINI);
m_nOpenAcc=GetPrivateProfileInt("系统","开户数目",0,CONFIGINI);
m_nDelAcc=GetPrivateProfileInt("系统","销户数目",0,CONFIGINI);
}
else
{
m_nBankToSecu=0;
m_nSecuToBank=0;
m_nBToS=0;
m_nSToB=0;
m_nOpenAcc=0;
m_nDelAcc=0;
}
m_nInnerPort=GetPrivateProfileInt("证券","内部服务端口",8003,CONFIGINI);
if(!m_bOpen)
{
BOOL OK1,OK2;
OK1=OK2=FALSE;
GetPrivateProfileString("证券","券商接口文件","0",szTmp,200,CONFIGINI);
m_Interface=new CInterface;
if(m_Interface)
{
if(m_Interface->Init(szTmp))
OK1=TRUE;
}
else
{
LogMsg("加载券商接口文件失败!",0);
}
GetPrivateProfileString("银行","银行接口文件","0",szTmp,200,CONFIGINI);
m_BankInte=new CInterface;
if(m_BankInte)
{
if(m_BankInte->Init(szTmp))
OK2=TRUE;
}
else
{
LogMsg("加载银行接口文件失败!",0);
}
if(OK1&OK2) m_bOpen=TRUE;
}
else
return ;
GetPrivateProfileString("银行","银行地址","127.0.0.1",myParam.prData.prCol.Array[6],40,CONFIGINI);//6-目的地址
GetPrivateProfileString("银行","券商代码","",m_comm.SECUID,20,CONFIGINI);
GetPrivateProfileString("证券","营业部代码","2110",m_comm.DETCODE,20,CONFIGINI);
GetPrivateProfileString("证券","银行代码","02",m_comm.BANKID,20,CONFIGINI);
m_nTRecords=0;
if(!m_bCheckIn)
{
strcpy(myParam.prData.prCol.Array[v_jylx],"9"); //签到
strTime=t.Format("%Y%m%d");
strcpy(myParam.prData.prCol.Array[v_rq],(LPCSTR)strTime);
strTime=t.Format("%H%M%S");
strcpy(myParam.prData.prCol.Array[v_time],(LPCSTR)strTime);
strcpy(myParam.prData.prCol.Array[v_bankid],m_comm.BANKID);
strcpy(myParam.prData.prCol.Array[v_secuid],m_comm.SECUID);
LogMsg("开始券商签到........",0);
if(m_Interface->CheckInOut(&myParam,&myResult)>=0)
{
LogMsg("券商签到成功.........",0);
sprintf(m_comm.RETCODE,"%d",myResult.iRet);
strcpy(m_comm.NOTE,myResult.szErrMsg);
m_comm.TRTYPE='9';
if(myResult.iRet>=0)
{
LogMsg("开始调用银行签到..........",0);
m_BankInte->CheckInOut(&myParam,&myResult);
LogMsg("调用银行签到结束",0);
if(myResult.iRet>=0)
m_bCheckIn=TRUE;
else
{
sprintf(m_comm.RETCODE,"%d",myResult.iRet);
m_bCheckIn=FALSE;
strcpy(m_comm.NOTE,myResult.szErrMsg);
}
ShowMSG(&m_comm);
}
if(m_bCheckIn)
{
strTime=t.Format("%Y%m%d");
DWORD dw=WritePrivateProfileString("系统","签到日期",(LPCSTR)strTime,CONFIGINI);
if(dw>0) m_bCheckIn=TRUE;
}
}
else
{
strcpy(m_comm.NOTE,"签到失败!");
ShowMSG(&m_comm);
m_bCheckIn=FALSE;
}
}
//处理银证服务器请求
if(m_bOpen){
if(m_nCauseType==1){ //券商发起,处理中间件过来的包
LogMsg("券商发起开始>>>>>>>>>",0);
if(m_bCheckIn) SecuGen();
}
else if(m_nCauseType==2) //银行发起
{
LogMsg("银行发起开始>>>>>>>>",0);
BankGen();
}
else if(m_nCauseType==3) //双方发起
{
LogMsg("双方发起开始>>>>>>>>",0);
DoubleGen();
}
}
}
//证券公司签退
void CTransView::OnMenuClose()
{
//取得基本数据
PARAM myParam;
RESULT myResult;
if(m_bOpen)
{
closesocket(m_sInnerSocket);
CTime t=CTime::GetCurrentTime();
CString strTime=t.Format("%Y%m%d");
strcpy(myParam.prData.prCol.Array[v_jylx],"0");
strcpy(myParam.prData.prCol.Array[v_rq],(LPCSTR)strTime);
strTime=t.Format("%H%M%S");
strcpy(myParam.prData.prCol.Array[v_time],(LPCSTR)strTime);
strcpy(myParam.prData.prCol.Array[v_bankid],m_comm.BANKID);
strcpy(myParam.prData.prCol.Array[v_secuid],m_comm.SECUID);
strcpy(myParam.prData.prCol.Array[v_oper],m_comm.OPERATOR);
strcpy(myParam.prData.prCol.Array[v_operpswd],m_comm.OPERPSWD);
m_Interface->CheckInOut(&myParam,&myResult);
if(myResult.iRet>=0){
m_bOpen=FALSE;
m_BankInte->CheckInOut(&myParam,&myResult);
}
INNERCOMM data;
memset(&data,0,sizeof(INNERCOMM));
data.TRTYPE='0';
strcpy(data.BANKID,m_comm.BANKID);
sprintf(data.RETCODE,"%d",myResult.iRet);
strcpy(data.NOTE,myResult.szErrMsg);
ShowMSG(&data);
//
//标明已经签退
strTime=t.Format("%Y%m%d");
DWORD dw=WritePrivateProfileString("系统","签退日期",strTime,CONFIGINI);
char szTmp[200];
sprintf(szTmp,"%d",m_nBankToSecu);
WritePrivateProfileString("系统","银行转证券笔数",szTmp,CONFIGINI);
sprintf(szTmp,"%d",m_nSecuToBank);
WritePrivateProfileString("系统","证券转银行笔数",szTmp,CONFIGINI);
sprintf(szTmp,"%d",m_nBToS);
WritePrivateProfileString("系统","银行转证券金额",szTmp,CONFIGINI);
sprintf(szTmp,"%d",m_nSToB);
WritePrivateProfileString("系统","证券转银行金额",szTmp,CONFIGINI);
sprintf(szTmp,"%d",m_nOpenAcc);
WritePrivateProfileString("系统","开户数目",szTmp,CONFIGINI);
sprintf(szTmp,"%d",m_nDelAcc);
WritePrivateProfileString("系统","销户数目",szTmp,CONFIGINI);
}
}
//处理证券发起的转账
int CTransView::SecuGen()
{
AfxBeginThread(GetSecuReq,this);
return 0;
}
//处理银行发起的请求
int CTransView::BankGen()
{
SOCKADDR_IN LocalServer;
char LocalAddr[40];
ListenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
LocalServer.sin_family=AF_INET;
int nPort=GetPrivateProfileInt("证券","券商端口",3026,CONFIGINI);
GetPrivateProfileString("证券","券商地址","127.0.0.1",LocalAddr,20,CONFIGINI);
LocalServer.sin_port=htons(nPort);
LocalServer.sin_addr.s_addr=inet_addr(LocalAddr);
bind(ListenSocket,(SOCKADDR *)&LocalServer,sizeof(LocalServer));
if(listen(ListenSocket,5)==SOCKET_ERROR)
{
LogMsg("CTransView::BankGen()-->监听失败!",0);
return -1;
}
AfxBeginThread(GetBankReq,this);
return 0;
}
//处理双方发起的请求
int CTransView::DoubleGen()
{
BankGen();
if(m_bCheckIn) SecuGen();
return 0;
}
void CTransView::ShowMSG(INNERCOMM *data)
{
if(m_nTRecords<=0) m_nTRecords=0;
LV_ITEM lvitem;
int iPos;
lvitem.mask=LVIF_TEXT;
lvitem.iItem=m_nTRecords;
lvitem.iSubItem=0;
lvitem.pszText=data->SECUACC;
iPos=GetListCtrl().InsertItem(&lvitem);//返回表项插入后的索引号
lvitem.iItem=iPos;
lvitem.iSubItem=1;
lvitem.pszText=data->SECUSER;
GetListCtrl().SetItem(&lvitem);
lvitem.iSubItem=2;
lvitem.pszText=(char *)(LPCSTR)m_szBankName;
GetListCtrl().SetItem(&lvitem);
lvitem.iSubItem=3;
lvitem.pszText=data->BANKSER;
GetListCtrl().SetItem(&lvitem);
lvitem.iSubItem=4;
switch(data->TRTYPE){
case '1':
lvitem.pszText="银行转证券";
break;
case '2':
lvitem.pszText="证券转银行";
break;
case '3':
lvitem.pszText="查询银行余额";
break;
case '4':
lvitem.pszText="修改银行密码";
break;
case '5':
lvitem.pszText="银行冲销申请";
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -