Example #1
0
        private bool CloseAllOrder(List<TOrders> orderList, APIDataDataContext db)
        {
            try
            {
                TOperationLog OLog = new TOperationLog();
                if (orderList.Count > 0)
                {

                    StringBuilder beforevalue=new StringBuilder();
                    beforevalue.Append("{\"IDlist\":[");
                    foreach (var item in orderList)
                    {
                        beforevalue.Append("{");
                        beforevalue.AppendFormat("\"id\":\"{0}\"", item.ID);
                        beforevalue.Append("},");
                        var product = (from c in db.TProducts
                                       join b in db.TLastClose on c.ProductCode equals b.ProductCode
                                       where c.ID == item.ProductID
                                       orderby c.ID
                                       select new
                                       {
                                           c,
                                           b.LastClose,
                                           b.LastUpdateTime
                                       }).FirstOrDefault();
                        if (product != null)
                        {
                            var Scale = Converter.ToFloat(product.c.Scale, 2);
                            var nowdate = product.LastUpdateTime;
                            #region 加工费
                            double closedeposit = 0.0;   //加工费
                            if (product.c.DepositType == 1)//固定
                            {
                                closedeposit = Converter.ToFloat(product.c.CloseDeposit, 0) * Converter.ToFloat(product.c.ContractNumber, 0) * Converter.ToFloat(item.OrderCount, 0);
                            }
                            else if (product.c.DepositType == 2)//浮动
                            {
                                if (item.Deal == false)
                                    closedeposit = 0.01 * Converter.ToFloat(product.c.CloseDeposit, 0) * (Converter.ToFloat(product.LastClose, 0)) * Converter.ToFloat(product.c.ContractNumber, 0) * Converter.ToFloat(item.OrderCount, 0);
                                else
                                    closedeposit = 0.01 * Converter.ToFloat(product.c.CloseDeposit, 0) * (Converter.ToFloat(product.LastClose, 0) + Converter.ToFloat(product.c.Fixedly, 0)) * Converter.ToFloat(product.c.ContractNumber, 0) * Converter.ToFloat(item.OrderCount, 0);
                            }
                            closedeposit = Converter.ToFloat(closedeposit.ToString("F" + Scale), 0);
                            #endregion
                            item.Deposit = Converter.ToFloat((Converter.ToFloat(item.Deposit, 0) + closedeposit).ToString("F" + Scale), 0);
                            //double LastClose = 0.0;       //市场价 收盘价
                            //double Spread = 0.0;        //点数
                            //计算盈亏
                            //if (item.Deal == false)//卖出
                            //{
                            //    LastClose = Converter.ToFloat(product.LastClose, 0) + Converter.ToFloat(product.c.Fixedly, 0);
                            //    Spread = Converter.ToFloat(item.OpenPrice, 0) - LastClose;
                            //}
                            //else if (item.Deal == true && item.Profit > 0)//买入
                            //{
                            //    LastClose = Converter.ToFloat(product.LastClose, 0);
                            //    Spread = LastClose - Converter.ToFloat(item.OpenPrice, 0);
                            //}
                            //item.Spread = Converter.ToFloat(Spread.ToString("F" + Scale), 0);
                            //item.ProfitAndLoss = Converter.ToFloat((Converter.ToFloat(Spread * item.OrderCount, 0) * Converter.ToFloat(product.c.ContractNumber, 0)).ToString("F" + Scale), 0);
                            //item.NowPrice = Converter.ToFloat(LastClose.ToString("F" + Scale), 0);
                            //item.NetProfit = Converter.ToFloat((Converter.ToFloat(item.ProfitAndLoss, 0) - Converter.ToFloat(item.Deposit, 0) - Converter.ToFloat(item.Interest, 0)).ToString("F" + Scale), 0);
                            item.CloseType = "清算/交割";
                            item.UpdateTime = nowdate;
                            item.OrderState = 2;
                            item.OrderType = 2;

                            var user = (from c in db.TRealAccounts where c.ID == item.TRealAccountsID select c).FirstOrDefault();
                            if (user==null)
                            {
                                db.TOrders.DeleteOnSubmit(item);
                            }
                            else
                            {
                            #region 资金记录
                            TAccountMoney tam = new TAccountMoney();
                            tam.MoneyOrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                            tam.RealAccountId = Converter.ToInt(item.TRealAccountsID, 0);
                            tam.TypeId = 4;
                            tam.OriginalMoney = user.AccountMoney;
                            tam.CreateMoney = item.ProfitAndLoss;
                            tam.NowMoney = user.AccountMoney + item.ProfitAndLoss;
                            if (tam.NowMoney<0)
                            {
                                tam.NowMoney = 0;
                            }
                            tam.CreateTime = nowdate;
                            tam.UpDateTime = nowdate;
                            tam.Status = 2;
                            tam.TOrderId = item.ID;
                            db.TAccountMoney.InsertOnSubmit(tam);

                            TAccountMoney tams = new TAccountMoney();
                            tams.MoneyOrderNum = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                            tams.RealAccountId = Converter.ToInt(item.TRealAccountsID, 0);
                            tams.TypeId = 5;
                            tams.OriginalMoney = tam.NowMoney;
                            tams.CreateMoney = item.Deposit;
                            tams.NowMoney = tam.NowMoney - item.Deposit;
                            if (tams.NowMoney<0)
                            {
                                tams.NowMoney = 0;
                            }
                            tams.CreateTime = nowdate;
                            tams.UpDateTime = nowdate;
                            tams.Status = 2;
                            tams.TOrderId = item.ID;
                            db.TAccountMoney.InsertOnSubmit(tams);

                            #endregion
                            user.AccountMoney = user.AccountMoney+item.ProfitAndLoss-item.Deposit;
                            if (user.AccountMoney<0)
                            {
                                user.AccountMoney = 0;
                            }
                            }
                            db.SubmitChanges();

                        }
                        else
                        {
                        }
                    }
                    //移除最后一个‘,’
                    beforevalue.Remove(beforevalue.Length - 1, 1);
                    beforevalue.Append("]}");
                    OLog.BeforeValue = beforevalue.ToString();
                    OLog.UpdateValue = "";
                    //写入操作日志
                    OLog.UserID = Convert.ToInt32(Session["ID"]);
                    OLog.UserType = 2;//0 用户 1 会员 2 员工
                    OLog.CreateDate = DateTime.Now;
                    OLog.PageName = "财务清算";
                    Converter.InsertOperationLog(OLog);
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }
Example #2
0
        /// <summary>
        /// 提交对数据库的更改
        /// 当产生并发冲突时,用数据库的值强制更新当前值
        /// </summary>
        /// <param name="db"></param>
        public static void SubmitChangesByDatabase(APIDataDataContext db)
        {
            try
            {
                db.SubmitChanges(ConflictMode.ContinueOnConflict);
            }

            catch (ChangeConflictException e)
            {
                Console.WriteLine(e.Message);
                foreach (ObjectChangeConflict occ in db.ChangeConflicts)
                {
                    occ.Resolve(RefreshMode.OverwriteCurrentValues);
                }
            }
        }