using System.Threading; using Muchinfo.MTPClient.Adapter.Abstract; using Muchinfo.MTPClient.CustomException; using Muchinfo.MTPClient.Data; using Muchinfo.MTPClient.Data.Enums; using Muchinfo.MTPClient.Data.Model; using Muchinfo.MTPClient.Data.Model.Account; using Muchinfo.MTPClient.Data.Model.GoodRules; using Muchinfo.MTPClient.Infrastructure.Cache; using Muchinfo.MTPClient.Infrastructure.Helpers; using Muchinfo.MTPClient.Infrastructure.LinkProxy; using Muchinfo.MTPClient.Infrastructure.Utilities; using Muchinfo.MTPClient.IService; using Muchinfo.MTPClient.NetworkCore; using Muchinfo.MTPClient.Resources; using Muchinfo.MTPClient.Service.Utilities; using Muchinfo.PC.Common.Helpers; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.Linq; using Muchinfo.MTPClient.Data.Model.Message; namespace Muchinfo.MTPClient.Service { public class LoginService : ILoginService { private readonly AccountAdapter _accountAdapter; public LoginService() { _accountAdapter = LinkManager.Instance.TradeAdapterFactory.CreateAccountAdapter(); } /// /// 通知查询 MTP2.0 /// /// The login identifier. /// 最后一条通知id /// The success action. /// The error action. public void NoticeQuerySearch(ulong loginID, long LastNoticeId, Action> successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustNoticeQuery(loginID, LastNoticeId); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_NoticeQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeNoticeQuery(revPackgage.Content); if (responeEntrity.RetCode == 0) { //todo:本地缓存公告,赋值CacheServerLastNoticeId为最大的MSGID; successAction(responeEntrity.Entity); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 通知查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "通知查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "通知查询" }); } })); } /// /// 风险协议书查询 MTP2.0 /// /// 上次更新配置时间 public void RiskTipQuerySearch(ulong RiskMsgUTime, Action successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustRiskTipQueryReq(RiskMsgUTime); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_RiskTipQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeRiskTipQueryReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(responeEntrity.Entity, RiskMsgUTime); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 风险协议书查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "风险协议书查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "风险协议书查询" }); } })); } /// /// 市场运行计划查询 MTP2.0 /// /// 交易日 public void MarketRunQuerySearch(string TradeDate, Action successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustMarketRunQueryReq(TradeDate); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_MarketRunQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeMarketRunQueryReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(responeEntrity.Entity); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 市场运行计划查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "市场运行计划查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "市场运行计划查询" }); } })); } /// /// 市场查询 MTP2.0 /// /// 上次更新配置时间 public void MarketsQuerySearch(ulong MarketsUTime, Action, ulong, bool> successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustMarketsQueryReq(MarketsUTime); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_MarketsQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeMarketsQueryReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { ///缓存市场信息 CacheManager.LoadMarketInfoList(responeEntrity.Entity); successAction(responeEntrity.Entity, MarketsUTime, true); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 市场查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "市场查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "市场查询" }); } })); } /// /// 枚举常量字典查询 MTP2.0 /// /// 上次更新配置时间 public void DictionaryQuerySearch(ulong DictionaryUTime, Action, ulong> successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustDictionaryQueryReq(DictionaryUTime); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_DictionaryQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeDictionaryQueryReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(responeEntrity.Entity, DictionaryUTime); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 枚举常量字典查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "枚举常量字典查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "枚举常量字典查询" }); } })); } /// /// 错误码字典查询 MTP2.0 /// /// 上次更新配置时间 public void ErrorCodeQuerySearch(ulong ErrorcodeUTime, Action, ulong> successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustErrorCodeQueryReq(ErrorcodeUTime); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ErrorCodeQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeErrorCodeQueryReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(responeEntrity.Entity, ErrorcodeUTime); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 错误码字典查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "错误码字典查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "错误码字典查询" }); } })); } /// /// 终端系统参数查询 MTP2.0 /// /// 配置时间 public void ConfigQuerySearch(ulong ConfigUTime, Action, ulong, bool> successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustConfigQueryReq(ConfigUTime); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ConfigQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeConfigQueryReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { SetApplicationParameters(responeEntrity.Entity); ////设置系统参数 ////设置系统参数 - mtp2.0 SystemParamManager.ParamConfigs = responeEntrity.Entity; UserManager.CurrentTradeAccount.RiskRatioCalcMode = SystemParamManager.RiskRatioCalcMode; //更新系统参数浮动盈利是否可用 if (UserManager.CurrentTradeAccount.FundsAccounts != null) { foreach (var fundsAccount in UserManager.CurrentTradeAccount.FundsAccounts) { fundsAccount.FloatAvaliabelFlag = SystemParamManager.IsFloatPLAvaliabled; } } successAction(responeEntrity.Entity, ConfigUTime, true); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 终端系统参数查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "终端系统参数查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "终端系统参数查询" }); } })); } public void DeliveryGoodsQuerySearch(ulong DeliveryGoodsUTime, Action, ulong, bool> successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustDeliveryGoodsReq(DeliveryGoodsUTime); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_DeliveryGoodsQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeDeliveryGoodsReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(responeEntrity.Entity, DeliveryGoodsUTime, true); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 终端系统参数查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "终端交割商品查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "终端交割商品查询" }); } })); } /// /// 商品查询请求 MTP2.0 /// /// 商品更新时间 public void GoodsInfoSearch(ulong GoodsUTime, List midParam, Action, ulong, bool, List> successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustGoodsQueryReq(GoodsUTime); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_GoodsQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeGoodsQueryReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { CacheManager.LoadGoodsInfoList(responeEntrity.Entity == null ? new List() : responeEntrity.Entity.OrderBy(z => z.GoodsCode).ToList(), GoodsFromScr.Trade); successAction(responeEntrity.Entity, GoodsUTime, true, midParam); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 商品查询请求 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "商品查询请求", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "商品查询请求" }); } })); } /// /// 获取最后更新时间 MTP2.0 /// /// 成功回调 /// 失败回应 public void LastUpdateTimeSearch(Action successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustLastUpdateTimeReq(); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LastUpdateTimeReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeLastUpdateTimeReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(responeEntrity.Entity); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 获取最后更新时间 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "获取最后更新时间", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "获取最后更新时间" }); } })); } /// /// 获取功能菜单 /// /// /// /// public void QueryAccountFuncMenu(ulong MenuUTime, List GoodsRuleLst, Action, ulong, List, bool> successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustFuncMenuQueryReq(MenuUTime); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_FuncMenuReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeLocalFuncMenu(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(responeEntrity.Entity, MenuUTime, GoodsRuleLst, true); } else { if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "菜单查询请求", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "菜单查询请求" }); } })); } /// /// 登录查询/基本信息【打包】查询 MTP2.0 /// 【账户信息 资金账户信息 实物持仓列表 持仓头寸列表 商品交易规则和费用规则列表 市场权限列表 菜单权限列表】 /// /// 交易账号 /// 成功回调 /// 失败回应 public void LoginQuerySearch(ulong loginID, LoginQueryType queryType, Action successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustLoginQueryReq(loginID, ((int)queryType).ToString()); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LoginQueryReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeLoginQueryReq(revPackgage.Content); if (responeEntrity.RetCode == 0) { if (queryType == LoginQueryType.All || queryType == LoginQueryType.TAAccountList) { if (responeEntrity.Entity.TradeAccount != null) { responeEntrity.Entity.TradeAccount.Token = UserManager.CurrentTradeAccount.Token; responeEntrity.Entity.TradeAccount.AreaId = UserManager.CurrentTradeAccount.AreaId; responeEntrity.Entity.TradeAccount.AccountType = UserManager.CurrentTradeAccount.AccountType; responeEntrity.Entity.TradeAccount.SystemTime = UserManager.CurrentTradeAccount.SystemTime; responeEntrity.Entity.TradeAccount.AccountStatus = UserManager.CurrentTradeAccount.AccountStatus; responeEntrity.Entity.TradeAccount.MemberAreaId = UserManager.CurrentTradeAccount.MemberAreaId; responeEntrity.Entity.TradeAccount.Md5Password = UserManager.CurrentTradeAccount.Md5Password; responeEntrity.Entity.TradeAccount.LoginID = UserManager.CurrentTradeAccount.LoginID; responeEntrity.Entity.TradeAccount.HasUpdatedPwd = UserManager.CurrentTradeAccount.HasUpdatedPwd; responeEntrity.Entity.TradeAccount.PwdWrongCnt = UserManager.CurrentTradeAccount.PwdWrongCnt; responeEntrity.Entity.TradeAccount.LoginLockHourNum = UserManager.CurrentTradeAccount.LoginLockHourNum; responeEntrity.Entity.TradeAccount.RiskRatioCalcMode = UserManager.CurrentTradeAccount.RiskRatioCalcMode; responeEntrity.Entity.TradeAccount.ClientId = UserManager.CurrentTradeAccount.ClientId; responeEntrity.Entity.TradeAccount.ClientSystemInfo = UserManager.CurrentTradeAccount.ClientSystemInfo; } //资金信息单独查询 if (responeEntrity.Entity.TAAccountList != null && responeEntrity.Entity.TAAccountList.Any()) { responeEntrity.Entity.TradeAccount.FundsAccounts = new ObservableCollection(responeEntrity.Entity.TAAccountList.Select(x => x.FundsAccounts).ToList()); responeEntrity.Entity.TradeAccount.FundsAccountIds = new List(responeEntrity.Entity.TAAccountList.Select(x => x.FundsAccounts.AccountId).ToList()); responeEntrity.Entity.TradeAccount.FundsAccountId = responeEntrity.Entity.TradeAccount.FundsAccountIds[0]; responeEntrity.Entity.TradeAccount.AccountId = responeEntrity.Entity.TradeAccount.FundsAccountIds[0]; //更新所属交易账号 foreach (var fundsAccount in responeEntrity.Entity.TradeAccount.FundsAccounts) { fundsAccount.TradeAccount = UserManager.CurrentTradeAccount; //更新系统参数浮动盈利是否可用 fundsAccount.FloatAvaliabelFlag = SystemParamManager.IsFloatPLAvaliabled; } } } //缓存登陆后基本信息 CacheManager.LoadLoginBaseInfo(responeEntrity.Entity); //更新当前账户信息 UserManager.CurrentTradeAccount = responeEntrity.Entity.TradeAccount; successAction(responeEntrity.Entity); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 登录查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "登录查询", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "登录查询" }); } })); } //=====================================================MTP2.0 NEW ABOVE=============================================================================== /// /// 认证账号登录 /// /// 登录类型 /// 登录账号 /// 手机号 /// The password. /// The action. /// The error action. /// 返回码:0为成功,其它为失败 public void TradeAccountLogin(LoginType loginType, ulong loginID, string phoneUserName, string password, Action action, Action errorAction) { var appId = "muchinfo_mtpclient_5.0.1"; var reqeust = _accountAdapter.ToReqeustLogin((int)loginType, password, loginID, ApplicationParameter.LoginGuid, IPHelper.GetMACAddress(), string.Empty, ApplicationParameter.Version, new byte[128], appId); LogInfoHelper.WriteInfo("登陆请求ToString:" + System.Text.Encoding.UTF8.GetString(reqeust) + "Guid.NewGuid():" + Guid.NewGuid()); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LoginReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntity = _accountAdapter.ToLocalLoginEntity(revPackgage.Content); if (responeEntity.RetCode == 0) { responeEntity.Entity.Md5Password = password; responeEntity.Entity.LoginID = loginID; //更新当前账户 UserManager.CurrentTradeAccount = responeEntity.Entity; if (action != null) { action(responeEntity.Entity); } } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = string.Format("查询结算信息({0})" Client_Resource.Resources_Service_RequestTradeAccountLogin ReturnCode = responeEntity.RetCode, ReturnDesc = responeEntity.RetMessage, RequestFunc = Client_Resource.LoginService_Login_FuntionName, }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.LoginService_Login_FuntionName }); } })); } public void TradeAccountLogout(TradeAccount tradeAccount) { var reqeust = _accountAdapter.ToReqeustLogOut(tradeAccount.LoginID); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_LogoutReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { }), new Action((errorCode, errorDesc) => { })); } public EntityResult ModifyPasswords(AccountPwds aPwds) { throw new NotImplementedException(); } public void UpdateAccountAmount(TradeAccount tradeAccount) { //todo: } public void AccountRiskRate(TradeAccount tradeAccount) { throw new NotImplementedException(); } public void QueryBankRate(string loginCode) { throw new NotImplementedException(); } public void UpdateTaAccount(TradeAccount tradeAccount) { throw new NotImplementedException(); } public void SetServerTimeOut(string loginCode) { } /// /// 账号基本信息查询(账号信息,资金信息,交易所信息,市场信息,商品) /// /// The account identifier. /// The success action. /// The error action. public void AccountBaseInfoInit(ulong accountId, Action successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustAccountInfo(accountId); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_AccountFundInfoReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.TolocalAccountInfoEntity(revPackgage.Content); if (responeEntrity.RetCode == 0) { CacheManager.LoadGoodsBaseInfo(responeEntrity.Entity); if (responeEntrity.Entity.TradeAccount != null) { responeEntrity.Entity.TradeAccount.Token = UserManager.CurrentTradeAccount.Token; responeEntrity.Entity.TradeAccount.AccountStatus = UserManager.CurrentTradeAccount.AccountStatus; responeEntrity.Entity.TradeAccount.MemberAreaId = UserManager.CurrentTradeAccount.MemberAreaId; responeEntrity.Entity.TradeAccount.Md5Password = UserManager.CurrentTradeAccount.Md5Password; responeEntrity.Entity.TradeAccount.LoginID = UserManager.CurrentTradeAccount.LoginID; ////登录的Token UserManager.CurrentTradeAccount = responeEntrity.Entity.TradeAccount; } //资金信息单独查询 if (responeEntrity.Entity.FundsAccounts != null && responeEntrity.Entity.FundsAccounts.Any()) { foreach (var fundsAccount in responeEntrity.Entity.FundsAccounts) { ////显示账号的状态 fundsAccount.TradeAccount = UserManager.CurrentTradeAccount; } } ////刷新商品时解决合约单位不显示问题 if (Muchinfo.MTPClient.Infrastructure.Cache.CacheManager.TradeGoodsUnit != null) { foreach (var quoteGoods in CacheManager.CacheGoodsBaseInfos) { quoteGoods.AgreeUnitDisplay = quoteGoods.GoodsParameters.AgreeUnit.ToString() + CacheManager.TradeGoodsUnit.Where( x => x.UNITID == quoteGoods.GoodsParameters.AgreeUnitType) .Select(x => x.GOODSUNITNAME) .FirstOrDefault(); } } UserManager.CurrentTradeAccount.FundsAccounts = new ObservableCollection(responeEntrity.Entity.FundsAccounts); successAction(responeEntrity.Entity); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 账号基本信息查询 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Resources_Service_QueryAccountBaseInfo }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountBaseInfo }); } })); } /// /// 判断当前Token是否有有效的方法 /// 内容处理逻辑: /// 1、如果当前Token有效,则在方法内部会自动进行静默登录; /// 2、如果当前Token已失效,则直接返回失效状态。 /// /// 请求成功回调,将包含Token状态信息 /// 请求失败回调 public void TokenCheck(Action action, Action errorAction) { if (null == UserManager.CurrentTradeAccount || null == UserManager.CurrentTradeAccount.Token) { //if (null != errorAction) // // warning:错误码需要添加 // errorAction(new ErrorEntity() { ReturnCode = -1, ReturnDesc = "当前Token为空。" }); return; } var timeSpan = ApplicationParameter.ServerTimeNow - ApplicationParameter.BasicDateTime; var request = _accountAdapter.ToTokenCheck(UserManager.CurrentTradeAccount.LoginID, UserManager.CurrentTradeAccount.Token, (ulong)timeSpan.TotalMilliseconds); var package = new TCPPackage() { Content = request, FunCode = FuncCode.FID_TokenCheckReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(package, new Action((responsePackage) => { ResponeEntity responeEntity = _accountAdapter.GetTokenStatus(responsePackage.Content); if (responeEntity.RetCode == 0) // Check登录 { ApplicationParameter.SetSystemTime(responeEntity.Entity); //重新连接设置时间 if (action != null) { action(responeEntity.RetCode); } } else { // 服务端返回操作失败 if (null != errorAction) errorAction(new ErrorEntity() { ReturnCode = responeEntity.RetCode, ReturnDesc = responeEntity.RetMessage, RequestFunc = Client_Resource.LoginService_CheckedToken_funcName }); LogInfoHelper.WriteInfo(string.Format("令牌校检失败,错误代码:{0}({1})", responeEntity.RetCode, responeEntity.RetMessage)); } }), new Action((errorCode, errorDesc) => { // 发送信息失败 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.LoginService_CheckedToken_funcName }); } LogInfoHelper.WriteInfo(string.Format("令牌校检失败,错误代码:{0}({1})", errorCode, errorDesc)); })); } /// /// 查询交易端的系统参数 /// /// 成功调用 /// public void SystemClientParamterConfig(Action> parameterAction, Action errorAction) { var queryCommonParams = new List(); //参数2,PC交易端 queryCommonParams.Add(new QueryCommonParam() { ParamKey = "type", ParamValue = 2 + string.Empty }); QueryCommonHelper.QueryCommon(QueryStatement.QueryParamConfig, queryCommonParams, new Action>( (parameterConfigs) => { //SetApplicationParameters(parameterConfigs); ////设置系统参数 if (parameterAction != null) { parameterAction(parameterConfigs); } }), (errorEntity) => { errorEntity.RequestFunc = Client_Resource.Client_ParamterConfig; if (errorAction != null) errorAction(errorEntity); }); } /// /// 查询交易端的系统参数 /// /// 成功调用 /// public void SystemClientParamterConfigByID(string paramid, Action> parameterAction, Action errorAction) { var queryCommonParams = new List(); queryCommonParams.Add(new QueryCommonParam() { ParamKey = "ParamID", ParamValue = paramid }); QueryCommonHelper.QueryCommon(QueryStatement.QueryParamConfig, queryCommonParams, new Action>( (parameterConfigs) => { if (parameterAction != null) { parameterAction(parameterConfigs); } }), (errorEntity) => { errorEntity.RequestFunc = Client_Resource.Client_ParamterConfig + paramid; if (errorAction != null) errorAction(errorEntity); }); } /// /// 设置程序参数 /// /// 查询的参数 private void SetApplicationParameters(List parameterConfigs) { try { if (parameterConfigs != null && parameterConfigs.Count > 0) { Type t = typeof(ApplicationParameter); var properties = t.GetProperties().Where((item) => item.CanWrite); foreach (var propertyInfo in properties) { var parameter = parameterConfigs.Where(u => !string.IsNullOrEmpty(u.ParamName) && u.ParamName.Trim().ToLower().Equals(propertyInfo.Name.Trim().ToLower())).ToList(); if (parameter != null && parameter.Count > 0) { var finacingModel = parameter[0]; if (propertyInfo.PropertyType == typeof(String)) { propertyInfo.SetValue(t, finacingModel.ParamValue, null); } else if (propertyInfo.PropertyType == typeof(Int32)) { propertyInfo.SetValue(t, Convert.ToInt32(finacingModel.ParamValue), null); } else if (propertyInfo.PropertyType == typeof(DateTime)) { propertyInfo.SetValue(t, Convert.ToDateTime(finacingModel.ParamValue), null); } else if (propertyInfo.PropertyType == typeof(Decimal)) { propertyInfo.SetValue(t, Convert.ToDecimal(finacingModel.ParamValue), null); } else if (propertyInfo.PropertyType == typeof(Boolean)) { propertyInfo.SetValue(t, Convert.ToBoolean(finacingModel.ParamValue), null); } } } } } catch (Exception ex) { ////写错误日志 LogHelper.WriteError(typeof(Exception), ex.ToString()); } } /// /// 查询资金信息 /// /// /// public void QueryTaAccount(ulong accountid, Action> successAction, Action errorAction) { List queryCommonParams = new List(); queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountid + string.Empty }); QueryCommonHelper.QueryCommon(QueryStatement.QueryTaAccount, queryCommonParams, new Action>((fundsAccounts) => { foreach (var fundsAccount in fundsAccounts) { ////显示账号的状态 fundsAccount.TradeAccount = UserManager.CurrentTradeAccount; } UserManager.CurrentTradeAccount.FundsAccounts = new ObservableCollection(fundsAccounts); if (successAction != null) { successAction(fundsAccounts); } }), (error) => { //RequestFunc = 查询资金信息 error.RequestFunc = Client_Resource.Resources_Service_QueryTaAccount; if (errorAction != null) errorAction(error); }); } /// /// 修改账号相关密码 /// /// 密码对象 /// 成功回应 /// 失败回应 public void ModifyPasswords(AccountPwds pwds, Action successAction, Action errorAction) { var reqeust = _accountAdapter.ToReqeustModifyPwds(pwds); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ModifyPwdReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponeModifyPWDEntity(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(true); } else { if (errorAction != null) { errorAction(new ErrorEntity() { //RequestFunc = 修改账号相关密码 ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = Client_Resource.Resources_Service_ModifyPasswords, }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_ModifyPasswords }); } })); } /// /// 查询交易端配置的菜单 /// /// 登录账号 /// 成功回调 /// 失败回应 public void QueryAccountFuncMenu(string loginCode, Action> successAction, Action errorAction) { return; //var reqeust = _accountAdapter.ToReqeustFuncMenu(loginCode); //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_QueryAccountFuncMenuReq }; //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => //{ // var responeEntrity = _accountAdapter.ResponeLocalFuncMenu(revPackgage.Content); // if (responeEntrity.RetCode == 0) // { // successAction(responeEntrity.Entity); // } // else // { // if (errorAction != null) // { // errorAction(new ErrorEntity() // { // //RequestFunc = 查询交易端配置的菜单 // ReturnCode = responeEntrity.RetCode, // ReturnDesc = responeEntrity.RetMessage, // RequestFunc = Client_Resource.Resources_Service_QueryAccountFuncMenu, // }); // } // } //}), new Action((errorCode, errorDesc) => //{ ////通信错误 // if (errorAction != null) // { // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountFuncMenu }); // } //})); } /// /// 查询交易端交易费用 /// /// /// /// public void QueryAccountTradeFee(uint accountId, Action> successAction, Action errorAction) { return; //var reqeust = _accountAdapter.ToReqeustTradeFeeRules(accountId); //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_QueryAccountGoodsTypeReq }; //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => //{ // var responeEntrity = _accountAdapter.ResoneLocalGoodsFeeRules(revPackgage.Content); // if (responeEntrity.RetCode == 0) // { // successAction(responeEntrity.Entity); // ///更新商品涨跌停价 // } // else // { // if (errorAction != null) // { // errorAction(new ErrorEntity() // { // //RequestFunc = 查询交易端交易费用 // ReturnCode = responeEntrity.RetCode, // ReturnDesc = responeEntrity.RetMessage, // RequestFunc = Client_Resource.Resources_Service_QueryAccountTradeFee, // }); // } // } //}), new Action((errorCode, errorDesc) => //{ ////通信错误 // if (errorAction != null) // { // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = Client_Resource.Resources_Service_QueryAccountTradeFee }); // } //})); } /// /// 查询交易商品费用及规则参数 /// /// /// /// public void QueryAccountGoodsParams(ulong accountId, Action> successAction, Action errorAction) { var queryCommonParams = new List(); queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountId + string.Empty }); QueryCommonHelper.QueryCommon(QueryStatement.QueryAccountGoodsParams, queryCommonParams, new Action>((feeTypes) => { var goodsFeeRules = new Dictionary(); foreach (var goodsFeeType in feeTypes) { if (!goodsFeeRules.ContainsKey(goodsFeeType.GoodsId)) { var goodsFee = new TradeGoodsFeeRule(); goodsFeeRules[goodsFeeType.GoodsId] = goodsFee; } switch (goodsFeeType.KeyType) { case FeeRuleType.GoodsFee: goodsFeeRules[goodsFeeType.GoodsId].GoodsFees[goodsFeeType.FeeTypeId] = goodsFeeType; break; case FeeRuleType.GoodsRule: goodsFeeRules[goodsFeeType.GoodsId].GoodsRules[goodsFeeType.FeeTypeId] = goodsFeeType; break; case FeeRuleType.PersonalFee: goodsFeeRules[goodsFeeType.GoodsId].AccountGoodsFees[goodsFeeType.FeeTypeId] = goodsFeeType; break; case FeeRuleType.PersonalRule: goodsFeeRules[goodsFeeType.GoodsId].AccountGoodsRules[goodsFeeType.FeeTypeId] = goodsFeeType; break; case FeeRuleType.GoodsRaiseFall: //goodsFeeRules[goodsFeeType.GoodsId].RaisePrice = goodsFeeType.FeeMode; //goodsFeeRules[goodsFeeType.GoodsId].FallPrice = goodsFeeType.FeeValue; //var goods = CacheManager.CacheGoodsBaseInfos.FirstOrDefault( // (item) => item.GoodsId == goodsFeeType.GoodsId); //if (goods != null) //{ //goods.RaisesPrice = goodsFeeType.FeeMode; //涨停价 //goods.FallsPrice = goodsFeeType.FeeValue; //跌停价 // goods.IssueTotal = goodsFeeType.FeeTypeId; //对应发售商品发行总量 //} break; case FeeRuleType.QuoteValidStatus: //goodsFeeRules[goodsFeeType.GoodsId].RaisePrice = goodsFeeType.FeeMode; //goodsFeeRules[goodsFeeType.GoodsId].FallPrice = goodsFeeType.FeeValue; //var goods = CacheManager.CacheGoodsBaseInfos.FirstOrDefault( // (item) => item.GoodsId == goodsFeeType.GoodsId && goodsFeeType.Trademode==eTradeMode.TRADEMODE_BIDDINGMARKETMAKE); //if (goods != null) //{ // //goods.RaisesPrice = goodsFeeType.FeeMode; //涨停价 // //goods.FallsPrice = goodsFeeType.FeeValue; //跌停价 // goods.IsQuoteValid = goodsFeeType.FeeValue==1; //外部行情是否有效 //} break; default: break; } } CacheManager.TradeGoodsFeeRules = goodsFeeRules; if (successAction != null) { successAction(goodsFeeRules); } }), (error) => { //RequestFunc = 查询交易商品费用及规则参数 error.RequestFunc = Client_Resource.Resources_Service_QueryAccountGoodsParams; if (errorAction != null) errorAction(error); }); } public void QueryOutMoneyThresholdRatio(ulong accountId, Action> successAction, Action errorAction) { var queryCommonParams = new List(); queryCommonParams.Add(new QueryCommonParam() { ParamKey = "accountId", ParamValue = accountId + string.Empty }); QueryCommonHelper.QueryCommon(QueryStatement.SearchOutMoneyThresholdRatio, queryCommonParams, new Action>( (ratios) => { successAction(ratios); }), (error) => { error.RequestFunc = Client_Resource.Resources_Service_QueryAccountGoodsParams; if (errorAction != null) errorAction(error); }); } public void SystemRateComfrim(ulong accountId, ComfrimType comfrim, Action successAction, Action errorAction) { return; //var reqeust = _accountAdapter.ToReqeustRiskChecked(accountId,(uint) comfrim); //var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_RiskCheckNotifyReq }; //LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => //{ // var responeEntrity = _accountAdapter.ResponeRiskChecked(revPackgage.Content); // if (responeEntrity.RetCode == 0) // { // successAction(true); // } // else // { // if (errorAction != null) // { // errorAction(new ErrorEntity() // { // ReturnCode = responeEntrity.RetCode, // ReturnDesc = responeEntrity.RetMessage, // }); // } // } //}), new Action((errorCode, errorDesc) => //{ ////通信错误 // if (errorAction != null) // { // errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, }); // } //})); } /// /// 查询外部交易所信息 /// /// /// public void QueryExternalExchange(Action> successAction, Action errorAction) { var reqeust = _accountAdapter.ToExternalExchangeReq(); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_ExternalExchangeReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponseExternalExchange(revPackgage.Content); if (responeEntrity.RetCode == 0) { successAction(responeEntrity.Entity); } else { if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "ExternalExchangeReq", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "ExternalExchangeReq" }); } })); } /// /// 查询商品组 /// /// /// public void QueryGoodsGroup(Action> successAction, Action errorAction) { var reqeust = _accountAdapter.ToGoodsGroupReq(); var packgage = new TCPPackage() { Content = reqeust, FunCode = FuncCode.FID_GoodsGroupReq }; LinkManager.Instance.TradeTcpLinkProxy.SendPackage(packgage, new Action((revPackgage) => { var responeEntrity = _accountAdapter.ResponseGoodsGroup(revPackgage.Content); if (responeEntrity.RetCode == 0) { CacheManager.LoadGoodsGroupList(responeEntrity.Entity); if (successAction != null) successAction(responeEntrity.Entity); } else { if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = responeEntrity.RetCode, ReturnDesc = responeEntrity.RetMessage, RequestFunc = "GoodsGroupReq", }); } } }), new Action((errorCode, errorDesc) => { ////通信错误 if (errorAction != null) { errorAction(new ErrorEntity() { ReturnCode = errorCode, ReturnDesc = errorDesc, RequestFunc = "GoodsGroupReq" }); } })); } } }