/// <summary>
 /// 7.根据商品编号获取所属的商品类别
 /// </summary>
 /// <param name="commodityCode">商品代码</param>
 /// <param name="type">是不是港股</param>
 /// <returns></returns>
 public static CM_BreedClass GetBreedClassByCommodityCode(string commodityCode, int type)
 {
     if (string.IsNullOrEmpty(commodityCode))
     {
         return(null);
     }
     if (type == 1)
     {//非港股
         CM_Commodity commodity = CommonDataCacheProxy.Instanse.GetCacheCommodityByCode(commodityCode);
         if (commodity == null || !commodity.BreedClassID.HasValue)
         {
             return(null);
         }
         return(CommonDataCacheProxy.Instanse.GetCacheCM_BreedClassByKey(commodity.BreedClassID.Value));
     }
     else
     {//港股
         HK_Commodity commodity = CommonDataCacheProxy.Instanse.GetCacheHKCommodityByCode(commodityCode);
         if (commodity == null || !commodity.BreedClassID.HasValue)
         {
             return(null);
         }
         return(CommonDataCacheProxy.Instanse.GetCacheCM_BreedClassByKey(commodity.BreedClassID.Value));
     }
 }
        /// <summary>
        /// 根据港股代码返回品种标识
        /// </summary>
        /// <param name="code">港股代码</param>
        /// <returns>商品</returns>
        public int?GetBreedClassIdByHKCommodityCode(string code)
        {
            HK_Commodity commdity = GetHKCommodityByCommodityCode(code);

            int?result = null;

            if (commdity != null)
            {
                result = commdity.BreedClassID;
            }

            return(result);
        }
        /// <summary>
        /// 根据港股商品代码返回所属交易所
        /// </summary>
        /// <param name="code">代码</param>
        /// <returns></returns>
        public static CM_BourseType GetHK_BourseTypeByCommodityCode(string code)
        {
            HK_Commodity commodity = CommonDataCacheProxy.Instanse.GetCacheHKCommodityByCode(code);

            if (commodity == null || commodity.BreedClassID.HasValue == false)
            {
                return(null);
            }
            CM_BreedClass breedClassEntry = CommonDataCacheProxy.Instanse.GetCacheCM_BreedClassByKey((int)commodity.BreedClassID);

            if (breedClassEntry == null || breedClassEntry.BourseTypeID.HasValue == false)
            {
                return(null);
            }
            return(CommonDataCacheProxy.Instanse.GetCacheCM_BourseTypeByKey((int)breedClassEntry.BourseTypeID));
        }
        /// <summary>
        /// 根据港股商品代码获取港股对应转换单位股的量
        /// </summary>
        /// <param name="code">商品代码</param>
        /// <returns>商品</returns>
        public int GetHKPerHandThighOrShareByCode(string code, out string errMsg)
        {
            errMsg = "";
            HK_Commodity hkcom = GetHKCommodityByCommodityCode(code);

            if (hkcom == null)
            {
                errMsg = "GT-8114:无法根据商品编码获取到相应的港股实体";
                return(0);
            }
            else
            {
                if (!hkcom.PerHandThighOrShare.HasValue)
                {
                    errMsg = "GT-8114:获取商品编码相应的港股实体无相关的转换值";
                    return(0);
                }
                return(hkcom.PerHandThighOrShare.Value);
            }
        }
        public override bool Validate(HKOrderRequest request, ref string strMessage)
        {
            string errMsg  = "港股最小单位检验失败!";
            string errCode = "GT-1250";

            int unitID     = (int)request.OrderUnitType;
            int tradeWayID = (int)request.BuySell;

            if (Utils.IsNullOrEmpty(MinVolumeOfBusinessList))
            {
                strMessage = errCode + ":" + errMsg;
                return(false);
            }

            //======update 2009-11-08 李健华======
            //港股只有手对股的转换,这里特殊处理,而进入此方法后的验证单位和量都转换成了股单位,
            //而对应的规则表(XH_MinVolumeOfBusiness表)中只有手的转换,因此这里要特殊转换

            //判断是否包含有股的转换 ,没有就自行模拟加入
            bool isThigh = false;
            List <ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness> minVolumesList = new List <ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness>(MinVolumeOfBusinessList);

            //minVolumesList = new List<ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness>(MinVolumeOfBusinessList);

            // minVolumesList =MinVolumeOfBusinessList;
            foreach (var item in MinVolumeOfBusinessList)
            {
                if (item.UnitID == (int)CommonObject.Types.UnitType.Thigh)
                {
                    isThigh = true;
                    break;
                }
            }
            //判断是否包含有股的转换 ,没有就自行模拟加入
            if (!isThigh)
            {
                HK_Commodity hkComm = MCService.HKTradeRulesProxy.GetHKCommodityByCommodityCode(request.Code);
                ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness itembuy = new ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness();
                itembuy.UnitID           = (int)CommonObject.Types.UnitType.Thigh;
                itembuy.VolumeOfBusiness = hkComm.PerHandThighOrShare;
                itembuy.TradeWayID       = (int)CommonObject.Types.TransactionDirection.Buying;
                minVolumesList.Add(itembuy);

                ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness itemSell = new ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness();
                itemSell.UnitID           = (int)CommonObject.Types.UnitType.Thigh;
                itemSell.VolumeOfBusiness = hkComm.PerHandThighOrShare;
                itemSell.TradeWayID       = (int)CommonObject.Types.TransactionDirection.Selling;
                minVolumesList.Add(itemSell);
            }

            var minVolumes = from minVolume in minVolumesList
                             where minVolume.UnitID.Value == unitID && minVolume.TradeWayID.Value == tradeWayID
                             select minVolume;

            //当此品种没有此交易单位时检验不通过。如权证 下单80股则检验失败(单位只有手和份)
            if (minVolumes.Count() == 0)
            {
                strMessage = errCode + ":" + errMsg;
                return(false);
            }

            //==================

            //if (request.BuySell == CommonObject.Types.TransactionDirection.Buying)
            //{
            foreach (ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness volume in minVolumes)
            {
                if ((int)request.OrderUnitType == volume.UnitID)
                {
                    if (request.OrderAmount < volume.VolumeOfBusiness.Value ||
                        (request.OrderAmount % volume.VolumeOfBusiness.Value != 0))
                    {
                        strMessage = errCode + ":" + errMsg;
                        return(false);
                    }
                }
            }
            #region 目前只验证所有的改单不分卖买验证,其他的都作为下单后验证
            //}
            ////卖的话需要进行零股处理
            //else
            //{
            //    //委托单位转换为计价单位
            //    decimal scale = MCService.GetTradeUnitScale(CommonObject.Types.BreedClassTypeEnum.HKStock, request.Code, request.OrderUnitType);
            //    var amount = (decimal)request.OrderAmount * scale;


            //    //持仓单位(默认为撮合单位)转为计价单位
            //    decimal scale2 = MCService.GetMatchUnitScale(CommonObject.Types.BreedClassTypeEnum.HKStock, request.Code);
            //    var position = m_Position * scale2;

            //    if (amount > position)
            //    {
            //        strMessage = errCode + ":" + "超过可用持仓";
            //        return false;
            //    }

            //    //港股最小单位零股检验
            //    foreach (ReckoningCounter.DAL.SpotTradingDevolveService.XH_MinVolumeOfBusiness volume in minVolumes)
            //    {
            //        if ((int)request.OrderUnitType == volume.UnitID)
            //        {
            //            if (request.OrderAmount < volume.VolumeOfBusiness.Value ||
            //                (request.OrderAmount % volume.VolumeOfBusiness.Value != 0))
            //            {
            //                if (amount != position)
            //                {
            //                    strMessage = errCode + ":" + errMsg;
            //                    return false;
            //                }
            //            }
            //        }
            //    }

            //}
            #endregion

            return(true);
        }
        /// <summary>
        /// 确定按钮操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (m_EditType == 1)
            {
                #region 添加操作

                try
                {
                    HK_Commodity hK_Commodity = new HK_Commodity();

                    if (!string.IsNullOrEmpty(this.txtHKCommodityCode.Text))
                    {
                        if (!HKManageCommon.IsExistHKCommodityCode(this.txtHKCommodityCode.Text))
                        {
                            ShowMessageBox.ShowInformation("代码已经存在!");
                            return;
                        }
                        if (InputTest.zeroStartIntTest(this.txtHKCommodityCode.Text))
                        {
                            if (this.txtHKCommodityCode.Text.Length == 5)
                            {
                                hK_Commodity.HKCommodityCode = this.txtHKCommodityCode.Text;
                            }
                            else
                            {
                                ShowMessageBox.ShowInformation("港股代码是五位数!");
                                return;
                            }
                        }
                        else
                        {
                            ShowMessageBox.ShowInformation("请输入数字!");
                            return;
                        }
                    }
                    else
                    {
                        ShowMessageBox.ShowInformation("请填写代码!");
                        return;
                    }
                    if (!string.IsNullOrEmpty(this.txtHKCommodityName.Text))
                    {
                        if (!HKManageCommon.IsExistHKCommodityName(this.txtHKCommodityName.Text))
                        {
                            ShowMessageBox.ShowInformation("代码名称已经存在!");
                            return;
                        }
                        hK_Commodity.HKCommodityName = this.txtHKCommodityName.Text;
                    }
                    else
                    {
                        ShowMessageBox.ShowInformation("请填写代码名称!");
                        return;
                    }

                    if (!string.IsNullOrEmpty(this.txtStockPinYin.Text))
                    {
                        hK_Commodity.StockPinYin = this.txtStockPinYin.Text;
                    }
                    else
                    {
                        ShowMessageBox.ShowInformation("拼音简称不能为空!");
                        return;
                    }

                    if (!string.IsNullOrEmpty(this.cmbBreedClassID.Text))
                    {
                        hK_Commodity.BreedClassID = ((UComboItem)this.cmbBreedClassID.SelectedItem).ValueIndex;
                    }
                    else
                    {
                        //cM_Commodity.BreedClassID = AppGlobalVariable.INIT_INT;
                        ShowMessageBox.ShowInformation("请选择品种类型!");
                        return;
                    }
                    if (!string.IsNullOrEmpty(this.dtMarketDate.Text))
                    {
                        hK_Commodity.MarketDate = Convert.ToDateTime(this.dtMarketDate.Text);
                    }
                    else
                    {
                        //cM_Commodity.MarketDate = AppGlobalVariable.INIT_DATETIME;
                        ShowMessageBox.ShowInformation("请选择上市日期!");
                        return;
                    }

                    if (!string.IsNullOrEmpty(this.txtturnovervolume.Text))
                    {
                        if (InputTest.intTest(this.txtturnovervolume.Text))
                        {
                            hK_Commodity.turnovervolume = Convert.ToDouble(this.txtturnovervolume.Text);
                        }
                        else
                        {
                            ShowMessageBox.ShowInformation("请输入正整数!");
                            return;
                        }
                    }
                    else
                    {
                        ShowMessageBox.ShowInformation("流通股数不能为空!");
                        return;
                    }
                    if (!string.IsNullOrEmpty(this.txtPerHandThighOrShare.Text))
                    {
                        if (InputTest.intTest(this.txtPerHandThighOrShare.Text))
                        {
                            hK_Commodity.PerHandThighOrShare = Convert.ToInt32(this.txtPerHandThighOrShare.Text);
                        }
                        else
                        {
                            ShowMessageBox.ShowInformation("请输入正整数!");
                            return;
                        }
                    }
                    else
                    {
                        ShowMessageBox.ShowInformation("每手股数不能为空!");
                        return;
                    }
                    hK_Commodity.ISSysDefaultCode = (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.No;
                    //用户添加的代码不是系统默认代码
                    m_Result = HKManageCommon.AddHKCommodity(hK_Commodity);
                    if (m_Result)
                    {
                        ShowMessageBox.ShowInformation("添加成功!");
                        this.ClearAll();
                        this.QueryHKCommodity();
                    }
                    else
                    {
                        ShowMessageBox.ShowInformation("添加失败!");
                    }
                }
                catch (Exception ex)
                {
                    string      errCode   = "GL-7703";
                    string      errMsg    = "添加港股交易商品失败!";
                    VTException exception = new VTException(errCode, errMsg, ex);
                    LogHelper.WriteError(exception.ToString(), exception.InnerException);
                    return;
                }

                #endregion
            }
            else if (m_EditType == 2)
            {
                #region 修改操作

                try
                {
                    HK_Commodity hK_Commodity = new HK_Commodity();
                    if (string.IsNullOrEmpty(this.txtHKCommodityCode.Text))
                    {
                        ShowMessageBox.ShowInformation("请选择更新数据!");
                        return;
                    }
                    hK_Commodity.HKCommodityCode = this.txtHKCommodityCode.Text;
                    if (!string.IsNullOrEmpty(this.cmbBreedClassID.Text))
                    {
                        hK_Commodity.BreedClassID = ((UComboItem)this.cmbBreedClassID.SelectedItem).ValueIndex;
                    }
                    else
                    {
                        //cM_Commodity.BreedClassID = AppGlobalVariable.INIT_INT;
                        ShowMessageBox.ShowInformation("请选择品种类型!");
                        return;
                    }
                    //注释掉修改港股代码的系统默认代码值
                    //hK_Commodity.ISSysDefaultCode = AppGlobalVariable.INIT_INT;//用户添加的代码不是系统默认代码
                    hK_Commodity.ISSysDefaultCode = m_ISSysDefaultCode; //当是修改时不改变原来的系统默认代码默认值
                    m_Result = HKManageCommon.UpdateHKCommodity(hK_Commodity);
                    if (m_Result)
                    {
                        ShowMessageBox.ShowInformation("修改成功!");
                        this.ClearAll();
                    }
                    else
                    {
                        ShowMessageBox.ShowInformation("修改失败!");
                    }
                    this.QueryHKCommodity();
                    //this.txtHKCommodityCode.Enabled = true;//操作结束代码变成可输入状态
                    m_ISSysDefaultCode = AppGlobalVariable.INIT_INT;
                    this.ClearAll();
                }
                catch (Exception ex)
                {
                    string      errCode   = "GL-7704";
                    string      errMsg    = "修改港股交易商品失败!";
                    VTException exception = new VTException(errCode, errMsg, ex);
                    LogHelper.WriteError(exception.ToString(), exception.InnerException);
                    return;
                }

                #endregion
            }
        }