/// <summary>
        /// 进行撤单校验
        /// </summary>
        /// <param name="errMsg">错误信息</param>
        /// <returns>校验结果</returns>
        public bool Check(ref string errMsg)
        {
            bool result = CheckDelegateExist(ref errMsg);

            if (result)
            {
                int state = todayEntrustTable.OrderStatusId;
                Types.OrderStateType orderState = (Types.OrderStateType)state;
                result = CheckCanCancelDelegate(orderState, ref errMsg);
            }

            return(result);
        }
예제 #2
0
        /// <summary>
        /// 根据撮合中心的委托单号移除一个处理单元
        /// </summary>
        /// <param name="matchOrderNo">撮合中心的委托单号</param>
        /// <param name="ost">当前委托状态</param>
        /// <returns>是否成功</returns>
        public bool RemoveReckonUnitByMatchOrderNo(string matchOrderNo, Types.OrderStateType ost)
        {
            if (string.IsNullOrEmpty(matchOrderNo))
            {
                return(false);
            }

            bool result = false;

            cacheLock.EnterUpgradeableReadLock();
            try
            {
                if (cache.ContainsKey(matchOrderNo))
                {
                    if (ost == Types.OrderStateType.DOSCanceled ||
                        ost == Types.OrderStateType.DOSDealed ||
                        ost == Types.OrderStateType.DOSPartRemoved ||
                        ost == Types.OrderStateType.DOSRemoved)
                    {
                        cacheLock.EnterWriteLock();
                        try
                        {
                            LogHelper.WriteDebug(
                                "ReckonUnitManager.RemoveReckonUnitByMatchOrderNo根据撮合中心的委托单号移除一个处理单元,委托单号=" +
                                matchOrderNo);
                            T unit = cache[matchOrderNo];
                            cache.Remove(matchOrderNo);
                            //timer.Check -= unit.DoReckonCommitCheck;
                        }
                        finally
                        {
                            cacheLock.ExitWriteLock();
                        }
                    }
                    result = true;
                }
            }
            finally
            {
                cacheLock.ExitUpgradeableReadLock();
            }

            return(result);
        }
        /// <summary>
        /// 检查是否可撤单
        /// </summary>
        /// <param name="orderState">委托状态</param>
        /// <param name="errMsg">错误信息</param>
        /// <returns>校验结果</returns>
        private bool CheckCanCancelDelegate(Types.OrderStateType orderState, ref string errMsg)
        {
            bool result = false;

            errMsg = "";

            if (orderState == Types.OrderStateType.DOSUnRequired || orderState == Types.OrderStateType.DOSRequiredSoon ||
                orderState == Types.OrderStateType.DOSIsRequired || orderState == Types.OrderStateType.DOSPartDealed)
            {
                result = true;
            }
            else
            {
                string errCode = "GT-1501";
                errMsg = "委托不可撤。";
                errMsg = errCode + ":" + errMsg;
                LogHelper.WriteInfo(errMsg);
            }

            return(result);
        }