/// <summary>
 /// 新增组织机构
 /// </summary>
 /// <param name="loginId">登录ID</param>
 /// <param name="orgEntity"></param>
 /// <returns></returns>
 public EntityBase AddOrg(string loginId, OrgEntity orgEntity)
 {
     TradeUser TdUser = new TradeUser();
     if (ComFunction.ExistUserLoginID(loginId, ref TdUser) == false)
     {
         return entityBase;
     }
     UserLogEntity userLogEntity = new UserLogEntity();
     userLogEntity.Account = TdUser.Account;
     userLogEntity.DESC = string.Format(@"后台新增组织机构;{0}", orgEntity.OrgName);
     userLogEntity.UserType = (int)TdUser.UType;
     //检测使用组织编码作为默认组织账户时,组织账户是否已经存在
     if(ComFunction.TradeAccountExist(orgEntity.TelePhone))
     {
         entityBase.Result = false;
         entityBase.Desc = string.Format("新增失败,已存在组织账户{0}!", orgEntity.TelePhone);
         return entityBase;
     }
     if (ComFunction.IsExitOrgName(orgEntity.OrgName, orgEntity.TelePhone) >= 1)
     {
         entityBase.Result = false;
         entityBase.Desc = "新增失败,存在相同的机构名称或组织编码!";
         return entityBase;
     }
     if (string.IsNullOrEmpty(orgEntity.ParentOrgId))
     {
         orgEntity.ParentOrgId = "";
         orgEntity.ParentOrgName = "";
     }
     YicelTransaction tran = new YicelTransaction();
     try
     {
         string ipmac = string.Empty;
         if (!string.IsNullOrEmpty(TdUser.Ip))
         {
             ipmac += string.Format("IP={0},", TdUser.Ip);
         }
         if (!string.IsNullOrEmpty(TdUser.Mac))
         {
             ipmac += string.Format("MAC={0},", TdUser.Mac);
         }
         tran.BeginTransaction();
         ComFunction.AddOrg(orgEntity, tran);
         ComFunction.CreateLogEx(userLogEntity,ipmac, tran);
         tran.Commit();
         entityBase.Result = true;
         entityBase.Desc = "组织机构新增成功";
     }
     catch (Exception ex)
     {
         tran.Rollback();
         entityBase.Result = false;
         entityBase.Desc = "组织机构新增失败";
         SetException("组织机构新增失败,原因:", ex);
     }
     return entityBase;
 }
        /// <summary>
        /// 新增组织机构
        /// </summary>
        /// <param name="orgEntity"></param>
        /// <param name="tran"></param>
        /// <returns></returns>
        public static int AddOrg(OrgEntity orgEntity, YicelTransaction tran)
        {
            SqlParameter[] parms = new SqlParameter[] {
                new SqlParameter("@OrgID",orgEntity.OrgID),
                new SqlParameter("@OrgName",orgEntity.OrgName),
                new SqlParameter("@Coperson",orgEntity.Coperson),
                new SqlParameter("@CardType",orgEntity.CardType),
                new SqlParameter("@CardNum",orgEntity.CardNum),
                new SqlParameter("@ParentOrgId",orgEntity.ParentOrgId),
                new SqlParameter("@ParentOrgName",orgEntity.ParentOrgName),
                new SqlParameter("@Reperson",orgEntity.Reperson),
                new SqlParameter("@PhoneNum",orgEntity.PhoneNum),
                new SqlParameter("@TelePhone",orgEntity.TelePhone),
                new SqlParameter("@Email",orgEntity.Email),
                new SqlParameter("@Address",orgEntity.Address),
                new SqlParameter("@AddTime",orgEntity.AddTime),
                new SqlParameter("@Status",(int)orgEntity.Status)
            };
            StringBuilder strSql = new StringBuilder();
            strSql.AppendFormat("insert into Base_Org({0})", Fields.Org_FIELD_List);
            strSql.AppendFormat(" values ({0})", "@" + Fields.Org_FIELD_List.Replace(",", ",@"));
            object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
            StringBuilder strbld = new StringBuilder();
            string strdt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            //构造新增组织用户信息的sql语句
            strbld.AppendFormat(@"insert into Base_User([userId],[userName],[status],[Accounttype],[Account],[LoginPwd],
                                        [CardType],[CardNum],[OrgId],[PhoneNum],[TelNum],[Email],[LinkAdress],[sex],[OpenTime],
                                        [LastUpdateTime],[LastUpdateID],[Online],[UserType],[BindAccount])
                                        values('{0}','{1}','{2}','{3}','{4}','{5}',",
                                orgEntity.OrgID, string.IsNullOrEmpty(orgEntity.OrgName) ? string.Empty : orgEntity.OrgName,
                                1, 1, orgEntity.TelePhone, com.individual.helper.Des3.Des3EncodeCBC("123456"));
            strbld.AppendFormat("'{0}','{1}','{2}','{3}','{4}','{5}',", 1, string.IsNullOrEmpty(orgEntity.CardNum) ? string.Empty : orgEntity.CardNum, orgEntity.OrgID,
                orgEntity.PhoneNum, string.Empty, string.IsNullOrEmpty(orgEntity.Email) ? string.Empty : orgEntity.Email);
            strbld.AppendFormat("'{0}','{1}','{2}','{3}','{4}',{5},{6},'{7}')",
                string.IsNullOrEmpty(orgEntity.Address) ? string.Empty : orgEntity.Address, 1, strdt, strdt,
                string.Empty, 0, 2, string.Empty);

            obj = DbHelper.ExecuteNonQuery(strbld.ToString(), null, tran.Transaction);
            return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
        }
 /// <summary>
 /// 删除用户角色
 /// </summary>
 /// <param name="loginId">登录ID</param>
 /// <param name="account"></param>
 /// <returns></returns>
 public EntityBase DeleteUserRole(string loginId, string account)
 {
     TradeUser TdUser = new TradeUser();
     if (ComFunction.ExistUserLoginID(loginId, ref TdUser) == false)
     {
         return entityBase;
     }
     UserLogEntity userLogEntity = new UserLogEntity();
     userLogEntity.Account = TdUser.Account;
     userLogEntity.DESC = string.Format(@"后台删除用户角色;{0}", TdUser.Account);
     userLogEntity.UserType = (int)TdUser.UType;
     YicelTransaction tran = new YicelTransaction();
     try
     {
         string ipmac = string.Empty;
         if (!string.IsNullOrEmpty(TdUser.Ip))
         {
             ipmac += string.Format("IP={0},", TdUser.Ip);
         }
         if (!string.IsNullOrEmpty(TdUser.Mac))
         {
             ipmac += string.Format("MAC={0},", TdUser.Mac);
         }
         tran.BeginTransaction();
         ComFunction.DeleteUserRole(account, tran);
         ComFunction.CreateLogEx(userLogEntity,ipmac, tran);
         tran.Commit();
         entityBase.Result = true;
         entityBase.Desc = "用户角色删除成功";
     }
     catch (Exception ex)
     {
         SetException("用户角色删除失败,原因:", ex);
     }
     return entityBase;
 }
 /// <summary>
 /// 修改组织机构数据
 /// </summary>
 /// <param name="loginId"></param>
 /// <param name="orgEntity"></param>
 /// <returns></returns>
 public EntityBase UpdateOrg(string loginId, OrgEntity orgEntity)
 {
     TradeUser TdUser = new TradeUser();
     if (ComFunction.ExistUserLoginID(loginId, ref TdUser) == false)
     {
         return entityBase;
     }
     UserLogEntity userLogEntity = new UserLogEntity();
     userLogEntity.Account = TdUser.Account;
     userLogEntity.DESC = string.Format(@"后台修改组织机构;{0}", orgEntity.OrgName);
     userLogEntity.UserType = (int)TdUser.UType;
     if (ComFunction.IsExitOrgName(orgEntity.OrgName, orgEntity.TelePhone,orgEntity.OrgID) >= 1)
     {
         entityBase.Result = false;
         entityBase.Desc = "修改失败,存在相同的机构名称或组织编码!";
         return entityBase;
     }
     if (ComFunction.IsExistHuWeiFuzi(orgEntity.OrgID, orgEntity.ParentOrgId)>=1)
     {
         entityBase.Result = false;
         entityBase.Desc = "修改失败,上级组织不能是该组织的下级组织!";
         return entityBase;
     }
     YicelTransaction tran = new YicelTransaction();
     try
     {
         string ipmac = string.Empty;
         if (!string.IsNullOrEmpty(TdUser.Ip))
         {
             ipmac += string.Format("IP={0},", TdUser.Ip);
         }
         if (!string.IsNullOrEmpty(TdUser.Mac))
         {
             ipmac += string.Format("MAC={0},", TdUser.Mac);
         }
         tran.BeginTransaction();
         ComFunction.UpdateOrg(orgEntity, tran);
         ComFunction.UpdateChileOrg(orgEntity, tran);
         ComFunction.CreateLogEx(userLogEntity,ipmac, tran);
         tran.Commit();
         entityBase.Result = true;
         entityBase.Desc = "组织机构修改成功";
     }
     catch (Exception ex)
     {
         tran.Rollback();
         SetException("组织机构修改失败,原因:", ex);
     }
     return entityBase;
 }
        /// <summary>
        /// 后台用户库存入库(库存减少用的)
        /// </summary>
        /// <param name="operationId"></param>
        /// <param name="entity"></param>
        /// <param name="loginId"></param>
        /// <returns></returns>
        public static bool CreateStockDeliverAdmin(string operationId, OrderEntity entity, string loginId)
        {
            List<DeliverEntity> deliverList = new List<DeliverEntity>();//需要更新的交割单列表
            List<DeliverRecordEntity> deliverRecordList = new List<DeliverRecordEntity>();
            List<UpdateDataMember> updateList = new List<UpdateDataMember>();//需要更新的订单信息
            List<UpdateDataMember> userList = new List<UpdateDataMember>();//需要更新用户数量

            StockEntity stockEntity = LoadByAccount(entity.UserId);//获取订单所属用户信息
            entity.OrderType = 13;//默认提货单
            Direction d = Direction.库存调整;

            //获取交割单信息
            List<DeliverEntity> list = GetListByAccount(entity.Account, d, 1);
            if (list == null || list.Count <= 0)
                return false;

            #region 计算交割单信息

            Dictionary<GoodsType, decimal> dic = new Dictionary<GoodsType, decimal>();
            dic.Add(GoodsType.Au, entity.Au);
            dic.Add(GoodsType.Ag, entity.Ag);
            dic.Add(GoodsType.Pd, entity.Pd);
            dic.Add(GoodsType.Pt, entity.Pt);
            foreach (var key in dic.Keys)
            {
                var tmp = list.Where(m => m.Goods.Equals((int)key)).ToList();
                var values = dic[key];
                if (values >= 0) continue;
                foreach (var mm in tmp)
                {
                    if (values > mm.AvailableTotal)
                    {
                        values -= mm.AvailableTotal;
                        mm.AvailableTotal = 0;
                        mm.State = 0;
                        deliverList.Add(mm);
                    }
                    else
                    {
                        mm.State = values.Equals(mm.AvailableTotal) ? 0 : 1;
                        mm.AvailableTotal = mm.AvailableTotal + values;
                        if (mm.AvailableTotal == 0)
                        {
                            mm.State = 0;
                        }
                        deliverList.Add(mm);
                        break;
                    }
                }
            }

            #endregion

            List<DeliverAdjustmentEntity> listDeliver = new List<DeliverAdjustmentEntity>();

            DeliverAdjustmentEntity deliver = null;
            if (entity.Au < 0)
            {
                deliver = new DeliverAdjustmentEntity();
                deliver.DeliverAdjustmentID = Guid.NewGuid().ToString("n");
                deliver.DeliverAdjustmentNO = "JS" + DateTime.Now.ToString("yyMMddhhmmssffff");
                deliver.Goods = (int)GoodsType.Au;
                deliver.Direction = (int)OrderType.库存调整;
                deliver.Total = entity.Au;
                deliver.Account = entity.Account;
                deliver.LockPrice = 0;
                deliver.State = 0;
                deliver.AvailableTotal = 0;
                deliver.FromFlag = 1;
                deliver.OperationUserID = operationId;
                deliver.UserID = entity.UserId;
                listDeliver.Add(deliver);
            }
            if (entity.Ag < 0)
            {
                deliver = new DeliverAdjustmentEntity();
                deliver.DeliverAdjustmentID = Guid.NewGuid().ToString("n");
                deliver.DeliverAdjustmentNO = "JS" + DateTime.Now.ToString("yyMMddhhmmssffff");
                deliver.Goods = (int)GoodsType.Ag;
                deliver.Direction = (int)OrderType.库存调整;
                deliver.Total = entity.Ag;
                deliver.Account = entity.Account;
                deliver.LockPrice = 0;
                deliver.State = 0;
                deliver.AvailableTotal = 0;
                deliver.FromFlag = 1;
                deliver.OperationUserID = operationId;
                deliver.UserID = entity.UserId;
                listDeliver.Add(deliver);
            }
            if (entity.Pd < 0)
            {
                deliver = new DeliverAdjustmentEntity();
                deliver.DeliverAdjustmentID = Guid.NewGuid().ToString("n");
                deliver.DeliverAdjustmentNO = "JS" + DateTime.Now.ToString("yyMMddhhmmssffff");
                deliver.Goods = (int)GoodsType.Pd;
                deliver.Direction = (int)OrderType.库存调整;
                deliver.Total = entity.Pd;
                deliver.Account = entity.Account;
                deliver.LockPrice = 0;
                deliver.State = 0;
                deliver.AvailableTotal = 0;
                deliver.FromFlag = 1;
                deliver.OperationUserID = operationId;
                deliver.UserID = entity.UserId;
                listDeliver.Add(deliver);
            }
            if (entity.Pt < 0)
            {
                deliver = new DeliverAdjustmentEntity();
                deliver.DeliverAdjustmentID = Guid.NewGuid().ToString("n");
                deliver.DeliverAdjustmentNO = "JS" + DateTime.Now.ToString("yyMMddhhmmssffff");
                deliver.Goods = (int)GoodsType.Pt;
                deliver.Direction = (int)OrderType.库存调整;
                deliver.Total = entity.Pt;
                deliver.Account = entity.Account;
                deliver.LockPrice = 0;
                deliver.State = 0;
                deliver.AvailableTotal = 0;
                deliver.FromFlag = 1;
                deliver.OperationUserID = operationId;
                deliver.UserID = entity.UserId;
                listDeliver.Add(deliver);
            }

            UserLogEntity userLogEntity = new UserLogEntity();

            userLogEntity.Account = operationId;
            userLogEntity.DESC = string.Format(@"后台用户库存调整(减少):{0}库存,减少.Ag:{1},Au:{2},Pt:{3},Pd:{4};", entity.Account, entity.Au, entity.Ag, entity.Pt, entity.Pd);
            userLogEntity.UserType = (int)LogType.用户库存调整减少;
            YicelTransaction tran = new YicelTransaction();
            try
            {
                tran.BeginTransaction();
                //  CreateOrder(order, tran);//创建订单信息
                deliverList.ForEach(m => UpdateDeliver(m, entity, operationId, tran));//更新交割单信息
                listDeliver.ForEach(m => CreateDeliverAdjustment(m, tran));
                UpdateUserTotal(entity, stockEntity, tran);//更新用户库存数量
                CreateLog(userLogEntity, tran);
                tran.Commit();
                return true;
            }
            catch (Exception ex)
            {
                ManagerLog.WriteErr(ex + ":" + userLogEntity.DESC);
                tran.Rollback();
                return false;
            }
        }
 /// <summary>
 /// 操作记录
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="tran"></param>
 /// <returns></returns>
 public static int CreateOrderOperation(OrderOperationEntity entity, YicelTransaction tran)
 {
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@OperationId",entity.OperationId),
         new SqlParameter("@OrderId",entity.OrderId),
         new SqlParameter("@OrderNo",entity.OrderNo),
         new SqlParameter("@Type",entity.Type),
         new SqlParameter("@Account",entity.Account),
         new SqlParameter("@OperationIP",entity.OperationIP),
         new SqlParameter("@OperationDate",entity.OperationDate),
         new SqlParameter("@Remark",entity.Remark)
     };
     //   Dictionary<string, object> parms = OperationValueParas(entity);   @OperationId
     StringBuilder strSql = new StringBuilder();
     strSql.AppendFormat("insert into OrderOperation_BZJ({0})", Fields.OrderOperation_FIELD_LIST);
     strSql.AppendFormat(" values ({0})", "@" + Fields.OrderOperation_FIELD_LIST.Replace(",", ",@"));
     object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
     return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
 }
 /// <summary>
 /// 日志记录
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="ipmac"></param>
 /// <param name="tran"></param>
 /// <returns></returns>
 public static int CreateLogEx(UserLogEntity entity,string ipmac, YicelTransaction tran)
 {
     entity.OperTime = DateTime.Now.ToString();
     SqlParameter[] parms = new SqlParameter[] {
          new SqlParameter("@OperTime",entity.OperTime),
         new SqlParameter("@Account",entity.Account),
         new SqlParameter("@Remark",ipmac+entity.DESC),
         new SqlParameter("@UserType",entity.UserType)
     };
     StringBuilder strSql = new StringBuilder();
     strSql.AppendFormat("insert into Base_OperrationLog({0})", Fields.Log_FIELD_List);
     strSql.AppendFormat(" values ({0})", "@" + Fields.Log_FIELD_List.Replace(",", ",@"));
     object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
     return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
 }
        /// <summary>
        /// 交割单记录
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="tran"></param>
        /// <returns></returns>
        public static int CreateDeliverRecord(DeliverRecordEntity entity, YicelTransaction tran)
        {
            entity.DeliverRecordId = Guid.NewGuid().ToString("n");
            entity.CreateDate = DateTime.Now.ToString();

            SqlParameter[] parms = new SqlParameter[] {
                new SqlParameter("@DeliverRecordId",entity.DeliverRecordId),
                new SqlParameter("@DeliverId",entity.DeliverId),
                new SqlParameter("@DeliverNo",entity.DeliverNo),
                new SqlParameter("@OrderId",entity.OrderId),
                new SqlParameter("@OrderNo",entity.OrderNo),
                new SqlParameter("@OrderType",entity.OrderType),
                new SqlParameter("@Goods",entity.Goods),
                new SqlParameter("@Direction",entity.Direction),
                new SqlParameter("@UseTotal",entity.UseTotal),
                new SqlParameter("@LockPrice",entity.LockPrice),
                new SqlParameter("@CreateDate",entity.CreateDate)
            };
            StringBuilder strSql = new StringBuilder();
            strSql.AppendFormat("insert into DeliverRecord_BZJ({0})", Fields.DeliverRecord_FIELD_LIST);
            strSql.AppendFormat(" values ({0})", "@" + Fields.DeliverRecord_FIELD_LIST.Replace(",", ",@"));
            object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
            return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
        }
        /// <summary>
        /// 更新用户库存数量
        /// </summary>
        /// <param name="uid">用户编号</param>
        /// <param name="d">提货 卖</param>
        /// <param name="type">物品类型</param>
        /// <param name="total">数量</param>
        /// <param name="tran"></param>
        public static void UpdateAgentTotal(string uid, Direction d, GoodsType type, decimal total, YicelTransaction tran)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("update Trade_Agent set ");
            #region

            if (d == Direction.提货单)
            {
                switch (type)
                {
                    case GoodsType.Au:
                        strSql.Append("Au=Au+@Total ");
                        break;
                    case GoodsType.Ag:
                        strSql.Append("Ag=Ag+@Total ");
                        break;
                    case GoodsType.Pt:
                        strSql.Append("Pt=Pt+@Total ");
                        break;
                    case GoodsType.Pd:
                        strSql.Append("Pd=Pd+@Total ");
                        break;
                }
            }
            else if (d == Direction.卖单)
            {
                switch (type)
                {
                    case GoodsType.Au:
                        strSql.Append("Au_b=Au_b+@Total ");
                        break;
                    case GoodsType.Ag:
                        strSql.Append("Ag_b=Ag_b+@Total ");
                        break;
                    case GoodsType.Pt:
                        strSql.Append("Pt_b=Pt_b+@Total ");
                        break;
                    case GoodsType.Pd:
                        strSql.Append("Pd_b=Pd_b+@Total ");
                        break;
                }
            }
            else if (d == Direction.金店库存同步)
            {
                switch (type)
                {
                    case GoodsType.Au:
                        strSql.Append("Au=Au-@Total ");
                        break;
                    case GoodsType.Ag:
                        strSql.Append("Ag=ag-@Total ");
                        break;
                    case GoodsType.Pt:
                        strSql.Append("Pt=pt-@Total ");
                        break;
                    case GoodsType.Pd:
                        strSql.Append("Pd=pd-@Total ");
                        break;
                }
            }
            #endregion
            strSql.Append("where AgentId=@AgentId");
            SqlParameter[] paras = new SqlParameter[]
            {
            new SqlParameter("@AgentId", uid),
            new SqlParameter("@Total", total)
            };
            DbHelper.ExecuteNonQuery(strSql.ToString(), paras, tran.Transaction);
        }
 //public static int CreateDeliverAgent(DeliverEntity entity, YicelTransaction tran)
 //{
 //    SqlParameter[] paras = new SqlParameter[] {
 //        new SqlParameter("@OrderNo", entity.DeliverNo),
 //        new SqlParameter("@Account", entity.Account),
 //        new SqlParameter("@UserID", entity.UserID),
 //        new SqlParameter("@Price", entity.LockPrice),
 //        new SqlParameter("@Goodst", entity.Goods),
 //        new SqlParameter("@Quantity", entity.Total),
 //        new SqlParameter("@Direction", entity.Direction),
 //        new SqlParameter("@OperUserID", entity.OperationUserID)
 //        };
 //    int result;
 //    return DbHelper.RunProcedure("P_CreateDeliverAgent", paras, out result);
 //}
 /// <summary>
 /// 更新金商绑定用户库存信息
 /// </summary>
 /// <param name="stock"></param>
 /// <param name="tran"></param>
 public static void UpdateAgentTotal(StockEntity stock, YicelTransaction tran)
 {
     StringBuilder strSql = new StringBuilder();
     strSql.AppendFormat(@"update Stock_BZJ SET Au={0},Ag={1},Pt ={2},Pd={3},AuPrice={4},AgPrice={5},PtPrice={6},PdPrice={7},AuTotal={8},AgTotal={9},PtTotal={10},PdTotal={11},AuAmount={12},AgAmount={13},PtAmount={14},PdAmount={15}",
     stock.Au, stock.Ag, stock.Pt, stock.Pd, stock.AuPrice, stock.AgPrice,
     stock.PtPrice, stock.PdPrice, stock.AuTotal, stock.AgTotal, stock.PtTotal, stock.PdTotal, stock.AuAmount,
     stock.AgAmount, stock.PtAmount, stock.PdAmount);
     strSql.Append("where UserId=@UserId");
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@UserId",stock.UserId)
     };
     DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
 }
        /// <summary>
        /// 创建回购订单
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="operationEntity"></param>
        /// <param name="loginId"></param>
        /// <returns></returns>
        public static bool CreateBackOrder(OrderEntity entity, OrderOperationEntity operationEntity, string loginId)
        {
            List<DeliverEntity> deliverList = new List<DeliverEntity>();//需要更新的交割单列表
            List<DeliverRecordEntity> deliverRecordList = new List<DeliverRecordEntity>();//交割单记录列表

            StockEntity stockEntity = new StockEntity();
            stockEntity = LoadByAccount(entity.UserId); //用户信息
            #region 赋值

            entity.OrderId = Guid.NewGuid().ToString("n");
            entity.OrderNo = "HG" + DateTime.Now.ToString("yyMMddhhmmssffff");
            entity.OrderCode = "";
            entity.OrderType = (int)OrderType.回购单;
            entity.State = (int)OrderState.新订单;
            entity.CreateDate = DateTime.Now.ToString();
            entity.EndDate = DateTime.Now.AddDays(7).ToString();

            decimal temp = 0;
            if (stockEntity.Au < entity.Au)
            {
                temp = entity.Au - stockEntity.Au;
                entity.AuP = temp * entity.AuP + entity.Au * (entity.AuP - 3);
            }
            if (stockEntity.Ag < entity.Ag)
            {
                temp = entity.Ag - stockEntity.Ag;
                entity.AgP = temp * entity.AgP + entity.Ag * (entity.AgP - 1);
            }

            if (stockEntity.Pt < entity.Pt)
            {
                temp = entity.Pt - stockEntity.Pt;
                entity.PtP = temp * entity.PtP + entity.Pt * (entity.PtP - 3);
            }

            if (stockEntity.Pd < entity.Pd)
            {
                temp = entity.Pd - stockEntity.Pd;
                entity.PdP = temp * entity.PdP + entity.Pd * (entity.PdP - 3);
            }

            entity.AuQuantity = entity.Au * entity.AuP;
            entity.AgQuantity = entity.Ag * entity.AgP;
            entity.PtQuantity = entity.Pt * entity.PtP;
            entity.PdQuantity = entity.Pd * entity.PdP;

            operationEntity.OperationId = Guid.NewGuid().ToString("n");
            operationEntity.OperationDate = DateTime.Now.ToString();
            operationEntity.OrderNo = entity.OrderNo;
            operationEntity.Remark = string.Format("用户:{0} 创建回购订单", entity.Account);
            operationEntity.OrderId = entity.OrderId;
            operationEntity.Account = entity.Account;
            operationEntity.Type = entity.OrderType;

            OrderPriceEntity orderPriceEntity = new OrderPriceEntity();
            orderPriceEntity.OrderId = entity.OrderId;
            orderPriceEntity.OrderNo = entity.OrderNo;
            orderPriceEntity.PriceId = "";
            orderPriceEntity.AuPrice = stockEntity.AuPrice;
            orderPriceEntity.AgPrice = stockEntity.AgPrice;
            orderPriceEntity.PtPrice = stockEntity.PtPrice;
            orderPriceEntity.PdPrice = stockEntity.PdPrice;

            #endregion

            //判断用户是否存在交割单
            List<DeliverEntity> list = GetListByAccount(entity.Account, Direction.提货单, 1);
            if (list == null || list.Count <= 0)
            {
                return false;
            }
            #region 计算交割单信息

            Dictionary<GoodsType, decimal> dic = new Dictionary<GoodsType, decimal>();
            dic.Add(GoodsType.Au, entity.Au);
            dic.Add(GoodsType.Ag, entity.Ag);
            dic.Add(GoodsType.Pd, entity.Pd);
            dic.Add(GoodsType.Pt, entity.Pt);
            foreach (var key in dic.Keys)
            {
                var tmp = list.Where(m => m.Goods.Equals((int)key)).ToList();
                var values = dic[key];
                if (values <= 0) continue;
                foreach (var mm in tmp)
                {
                    DeliverRecordEntity recordEntity = new DeliverRecordEntity
                    {
                        DeliverId = mm.DeliverId,
                        DeliverNo = mm.DeliverNo,
                        Goods = mm.Goods,
                        Direction = mm.Direction,
                        LockPrice = mm.LockPrice,
                        OrderType = (int)OrderType.回购单,
                        OrderId = entity.OrderId,
                        OrderNo = entity.OrderNo
                    };
                    if (values > mm.AvailableTotal)
                    {
                        recordEntity.UseTotal = mm.AvailableTotal;
                        values -= mm.AvailableTotal;
                        mm.AvailableTotal = 0;
                        mm.State = 0;
                        deliverList.Add(mm);
                        deliverRecordList.Add(recordEntity);
                    }
                    else
                    {
                        mm.State = values.Equals(mm.AvailableTotal) ? 0 : 1;
                        recordEntity.UseTotal = values;
                        mm.AvailableTotal -= values;
                        deliverList.Add(mm);
                        deliverRecordList.Add(recordEntity);
                        break;
                    }
                }
            }

            #endregion

            UserLogEntity userLogEntity = new UserLogEntity();

            userLogEntity.Account = entity.UserId;
            userLogEntity.DESC = string.Format(@"用户{0}创建回购订单,订单号:{1}", entity.Account, entity.OrderNo);
            userLogEntity.UserType = (int)LogType.创建回购订单;

            YicelTransaction tran = new YicelTransaction();
            try
            {
                tran.BeginTransaction();
                CreateOrder(entity, tran);//创建订单信息
                CreateOrderOperation(operationEntity, tran);//创建回购订单操作记录
                CreatePrice(orderPriceEntity, tran);//创建回购单价格信息
                deliverRecordList.ForEach(m => CreateDeliverRecord(m, tran));//插入交割单记录信息
                deliverList.ForEach(m => UpdateDeliver(m, entity, operationEntity.OperationId, tran));//更新交割单信息
                UpdateUserTotal(entity, stockEntity, tran);//更新用户库存数量
                CreateLog(userLogEntity, tran);
                tran.Commit();
                return true;
            }
            catch
            {
                tran.Rollback();
                return false;
            }
        }
 /// <summary>
 /// 金商交割单
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="tran"></param>
 /// <returns></returns>
 public static int CreateAgentDeliver(AgentDeliverEntity entity, YicelTransaction tran)
 {
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@AgentDeliverId", entity.AgentDeliverId),
         new SqlParameter("@AgentInfoId", entity.AgentInfoId),
         new SqlParameter("@FromTo", entity.FromTo),
         new SqlParameter("@OrderId", entity.OrderId),
         new SqlParameter("@Direction", (int)entity.Direction),
         new SqlParameter("@Au", entity.Au),
         new SqlParameter("@Ag", entity.Ag),
         new SqlParameter("@Pt", entity.Pt),
         new SqlParameter("@Pd", entity.Pd),
         new SqlParameter("@AvailableAu", entity.AvailableAu),
         new SqlParameter("@AvailableAg", entity.AvailableAg),
         new SqlParameter("@AvailablePt", entity.AvailablePt),
         new SqlParameter("@AvailablePd", entity.AvailablePd),
         new SqlParameter("@CreateDate", entity.CreateDate),
         new SqlParameter("@State", entity.State)
     };
     StringBuilder strSql = new StringBuilder();
     strSql.AppendFormat("insert into AgentDeliver_BZJ({0})", Fields.Agent_FIELD_LIST);
     strSql.AppendFormat(" values ({0})", "@" + Fields.Agent_FIELD_LIST.Replace(",", ",@"));
     object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
     return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
 }
 /// <summary>
 /// 修改用户角色
 /// </summary>
 /// <param name="roleEntity"></param>
 /// <param name="tran"></param>
 /// <returns></returns>
 public static int UpdateUserRole(UserRoleEntity roleEntity, YicelTransaction tran)
 {
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@userId",roleEntity.UserId),
         new SqlParameter("@RoleID",roleEntity.RoleID)
     };
     StringBuilder strSql = new StringBuilder();
     strSql.AppendFormat(@"UPDATE  Base_UserRole SET  RoleID = @RoleID  WHERE   userId = @userId", Fields.UserRole_FIELD_List);
     object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
     return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
 }
 /// <summary>
 /// 修改组织机构
 /// </summary>
 /// <param name="orgEntity"></param>
 /// <param name="tran"></param>
 /// <returns></returns>
 public static int UpdateOrg(OrgEntity orgEntity, YicelTransaction tran)
 {
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@OrgID",orgEntity.OrgID),
         new SqlParameter("@OrgName",orgEntity.OrgName),
         new SqlParameter("@Coperson",orgEntity.Coperson),
         new SqlParameter("@CardType",orgEntity.CardType),
         new SqlParameter("@CardNum",orgEntity.CardNum),
         new SqlParameter("@ParentOrgID",orgEntity.ParentOrgId),
          new SqlParameter("@ParentOrgName",orgEntity.ParentOrgName),
         new SqlParameter("@Reperson",orgEntity.Reperson),
         new SqlParameter("@PhoneNum",orgEntity.PhoneNum),
        // new SqlParameter("@TelePhone",orgEntity.TelePhone),//组织编码不能修改
         new SqlParameter("@Email",orgEntity.Email),
         new SqlParameter("@Address",orgEntity.Address),
         new SqlParameter("@AddTime",orgEntity.AddTime),
         new SqlParameter("@Status",(int)orgEntity.Status)
     };
     StringBuilder strSql = new StringBuilder();
     //            strSql.AppendFormat(@"UPDATE  Base_Org SET
     //                                OrgName = @OrgName,Coperson = @Coperson,CardType =@CardType,CardNum = @CardNum,ParentOrgID = @ParentOrgID,ParentOrgName=@ParentOrgName,Reperson = @Reperson,
     //                                PhoneNum = @PhoneNum,TelePhone = @TelePhone,Email = @Email,Address =@Address,AddTime = @AddTime,Status = @Status
     //                                WHERE   OrgID = @OrgID", Fields.Org_FIELD_List);
     strSql.AppendFormat(@"UPDATE  Base_Org SET
                                     OrgName = @OrgName,Coperson = @Coperson,CardType =@CardType,CardNum = @CardNum,ParentOrgID = @ParentOrgID,ParentOrgName=@ParentOrgName,Reperson = @Reperson,
                                     PhoneNum = @PhoneNum,Email = @Email,Address =@Address,AddTime = @AddTime,Status = @Status
                                     WHERE   OrgID = @OrgID", Fields.Org_FIELD_List);
     object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
     return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
 }
 public static int UpdateChileOrg(OrgEntity orgEntity, YicelTransaction tran)
 {
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@ParentOrgID",orgEntity.ParentOrgId),
          new SqlParameter("@ParentOrgName",orgEntity.ParentOrgName)
     };
     StringBuilder strSql = new StringBuilder();
     strSql.AppendFormat(@"UPDATE  Base_Org SET  ParentOrgName=@ParentOrgName   WHERE   ParentOrgID = @ParentOrgID");
     object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
     return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
 }
 /// <summary>
 /// 更新员工库存数量
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="userEntity"></param>
 /// <param name="tran"></param>
 private static void UpdateUserTotal(OrderEntity entity, StockEntity userEntity, YicelTransaction tran)
 {
     if (entity.OrderType == (int)OrderType.提货单 || entity.OrderType == (int)OrderType.回购单)
     {
         if (entity.Au != 0)
             UpdateTotal(entity.UserId, Direction.提货单, GoodsType.Au, entity.Au * -1, userEntity, tran);
         if (entity.Ag != 0)
             UpdateTotal(entity.UserId, Direction.提货单, GoodsType.Ag, entity.Ag * -1, userEntity, tran);
         if (entity.Pt != 0)
             UpdateTotal(entity.UserId, Direction.提货单, GoodsType.Pt, entity.Pt * -1, userEntity, tran);
         if (entity.Pd != 0)
             UpdateTotal(entity.UserId, Direction.提货单, GoodsType.Pd, entity.Pd * -1, userEntity, tran);
     }
     if (entity.OrderType == (int)OrderType.卖单)
     {
         if (entity.Au != 0)
             UpdateTotal(entity.UserId, Direction.卖单, GoodsType.Au, entity.Au * -1, userEntity, tran);
         if (entity.Ag != 0)
             UpdateTotal(entity.UserId, Direction.卖单, GoodsType.Ag, entity.Ag * -1, userEntity, tran);
         if (entity.Pt != 0)
             UpdateTotal(entity.UserId, Direction.卖单, GoodsType.Pt, entity.Pt * -1, userEntity, tran);
     }
     if (entity.OrderType == (int)OrderType.金生金)
     {
         if (entity.Au != 0)
             UpdateTotal(entity.UserId, Direction.金生金, GoodsType.Au, entity.Au * -1, userEntity, tran);
         if (entity.Ag != 0)
             UpdateTotal(entity.UserId, Direction.金生金, GoodsType.Ag, entity.Ag * -1, userEntity, tran);
         if (entity.Pt != 0)
             UpdateTotal(entity.UserId, Direction.金生金, GoodsType.Pt, entity.Pt * -1, userEntity, tran);
         if (entity.Pd != 0)
             UpdateTotal(entity.UserId, Direction.金生金, GoodsType.Pd, entity.Pd * -1, userEntity, tran);
     }
     if (entity.OrderType == (int)OrderType.库存调整)
     {
         if (entity.Au != 0)
             UpdateTotal(entity.UserId, Direction.库存调整, GoodsType.Au, entity.Au, userEntity, tran);
         if (entity.Ag != 0)
             UpdateTotal(entity.UserId, Direction.库存调整, GoodsType.Ag, entity.Ag, userEntity, tran);
         if (entity.Pt != 0)
             UpdateTotal(entity.UserId, Direction.库存调整, GoodsType.Pt, entity.Pt, userEntity, tran);
         if (entity.Pd != 0)
             UpdateTotal(entity.UserId, Direction.库存调整, GoodsType.Pd, entity.Pd, userEntity, tran);
     }
 }
 /// <summary>
 /// 金商库存修改减少
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="tran"></param>
 /// <returns></returns>
 public static int CreateDeliverAdjustment(DeliverAdjustmentEntity entity, YicelTransaction tran)
 {
     entity.DeliverDate = DateTime.Now.ToString();
     entity.CreateDate = entity.DeliverDate;
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@DeliverAdjustmentId",entity.DeliverAdjustmentID),
         new SqlParameter("@DeliverAdjustmentNo",entity.DeliverAdjustmentNO),
         new SqlParameter("@Goods",entity.Goods),
         new SqlParameter("@Direction",entity.Direction),
         new SqlParameter("@Total",entity.Total),
         new SqlParameter("@DeliverDate",entity.DeliverDate),
         new SqlParameter("@LockPrice",entity.LockPrice),
         new SqlParameter("@State",entity.State),
         new SqlParameter("@AvailableTotal",entity.AvailableTotal),
         new SqlParameter("@CreateDate",entity.CreateDate),
         new SqlParameter("@FromFlag",entity.FromFlag),
         new SqlParameter("@OperationUserID",entity.OperationUserID),
         new SqlParameter("@UserID",entity.UserID),
        new SqlParameter("@Account",entity.Account)
     };
     StringBuilder strSql = new StringBuilder();
     strSql.AppendFormat("insert into DeliverAdjustment_BZJ({0})", Fields.DeliverAdjustment_List);
     strSql.AppendFormat(" values ({0})", "@" + Fields.DeliverAdjustment_List.Replace(",", ",@"));
     object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
     return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
 }
 /// <summary>
 /// 更新回购订单状态并记录操作日志 
 /// </summary>
 /// <param name="agentId"></param>
 /// <param name="order"></param>
 /// <returns></returns>
 public static bool UpdateBuyBackOrder(string agentId, OrderEntity order)
 {
     UserLogEntity userLogEntity = new UserLogEntity();
     userLogEntity.OperTime = DateTime.Now.ToString();
     userLogEntity.Account = agentId;
     userLogEntity.DESC = string.Format(@"更新回购订单状态:金商{0},订单号:{1}订单ID:{2};", agentId, order.IDNo, order.OrderId);
     userLogEntity.UserType = (int)LogType.金商回购单状态修改;
     YicelTransaction tran = new YicelTransaction();
     SqlParameter[] parms = new SqlParameter[] {
     };
     string strSql = string.Format(@"update Order_BZJ set version={0},state={1} ,OperationDate=GETDATE(),ClerkID='{4}',AgentID='{4}' where OrderNo='{2}' and userid='{3}'", order.Version, order.State, order.OrderNo, order.UserId, agentId);
     try
     {
         tran.BeginTransaction();
         DbHelper.ExecuteNonQuery(strSql, parms, tran.Transaction);
         CreateLog(userLogEntity, tran);
         tran.Commit();
         return true;
     }
     catch
     {
         tran.Rollback();
         return false;
     }
 }
        /// <summary>
        /// 金生金办理
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="operationEntity"></param>
        /// <param name="loginId"></param>
        /// <returns></returns>
        public static int CreateJSJOrder(OrderEntity entity, OrderOperationEntity operationEntity, string loginId)
        {
            List<DeliverEntity> deliverList = new List<DeliverEntity>();//需要更新的交割单列表
            List<DeliverRecordEntity> deliverRecordList = new List<DeliverRecordEntity>();//交割单记录列表
            #region 赋值

            entity.OrderId = Guid.NewGuid().ToString("n");
            entity.OrderNo = "JSJ" + DateTime.Now.ToString("yyMMddhhmmssffff");
            entity.OrderCode = "";
            entity.OrderType = (int)OrderType.金生金;
            entity.State = (int)OrderState.新订单;
            entity.CreateDate = DateTime.Now.ToString();
            entity.EndDate = DateTime.Now.ToString();

            operationEntity.OperationId = Guid.NewGuid().ToString("n");
            operationEntity.OperationDate = DateTime.Now.ToString();
            operationEntity.Account = entity.Account;
            operationEntity.OperationId = Guid.NewGuid().ToString("n");
            operationEntity.OrderId = entity.OrderId;
            operationEntity.OrderNo = entity.OrderNo;
            operationEntity.Type = 5;
            operationEntity.Remark = string.Format("用户:{0} 创建金生金订单", entity.Account);

            #endregion

            List<DeliverEntity> list = GetListByAccount(entity.Account, Direction.提货单, 1);

            #region 计算交割单信息

            Dictionary<GoodsType, decimal> dic = new Dictionary<GoodsType, decimal>();
            dic.Add(GoodsType.Au, entity.Au);
            dic.Add(GoodsType.Ag, entity.Ag);
            dic.Add(GoodsType.Pd, entity.Pd);
            dic.Add(GoodsType.Pt, entity.Pt);
            foreach (var key in dic.Keys)
            {
                var tmp = list.Where(m => m.Goods.Equals((int)key)).ToList();
                var values = dic[key];
                if (values <= 0) continue;
                foreach (var mm in tmp)
                {
                    DeliverRecordEntity recordEntity = new DeliverRecordEntity
                    {
                        DeliverId = mm.DeliverId,
                        DeliverNo = mm.DeliverNo,
                        Goods = mm.Goods,
                        Direction = mm.Direction,
                        LockPrice = mm.LockPrice,
                        OrderType = (int)OrderType.金生金,
                        OrderId = entity.OrderId,
                        OrderNo = entity.OrderNo
                    };
                    if (values > mm.AvailableTotal)
                    {
                        recordEntity.UseTotal = mm.AvailableTotal;
                        values -= mm.AvailableTotal;
                        mm.AvailableTotal = 0;
                        mm.State = 0;
                        deliverList.Add(mm);
                        deliverRecordList.Add(recordEntity);
                        break;
                    }
                    else
                    {
                        mm.State = values.Equals(mm.AvailableTotal) ? 0 : 1;
                        recordEntity.UseTotal = values;
                        mm.AvailableTotal -= values;
                        deliverList.Add(mm);
                        deliverRecordList.Add(recordEntity);
                        break;
                    }
                }
            }

            #endregion
            StockEntity userEntity = new StockEntity();
            userEntity = LoadByAccount(entity.UserId);

            entity.AuP = userEntity.AuPrice;
            entity.AgP = userEntity.AgPrice;
            UserLogEntity userLogEntity = new UserLogEntity();

            userLogEntity.Account = entity.UserId;
            userLogEntity.DESC = string.Format(@"用户{0}金生金办理:Ag:{1},Au:{2};订单号:{3}", entity.Account, entity.Au, entity.Ag, entity.OrderNo);
            userLogEntity.UserType = (int)LogType.用户库存调整减少;
            YicelTransaction tran = new YicelTransaction();
            try
            {
                tran.BeginTransaction();
                CreateOrder(entity, tran);//创建订单信息
                CreateOrderOperation(operationEntity, tran);//创建金生金订单操作记录
                deliverRecordList.ForEach(m => CreateDeliverRecord(m, tran));//插入交割单记录信息
                deliverList.ForEach(m => UpdateDeliver(m, entity, operationEntity.OperationId, tran));//更新交割单信息
                UpdateUserTotal(entity, userEntity, tran);//更新用户库存数量
                CreateLog(userLogEntity, tran);
                tran.Commit();
                return 1;
            }
            catch (Exception ex)
            {
                tran.Rollback();
                ManagerLog.WriteErr(ex);
                return 0;
            }
        }
 /// <summary>
 /// 更新订单状态为已提货或卖
 /// </summary>
 /// <param name="id"></param>
 /// <param name="filter"></param>
 /// <param name="tran"></param>
 /// <returns></returns>
 public static int UpdateColumns(string id, List<UpdateDataMember> filter, YicelTransaction tran)
 {
     Dictionary<string, object> parms;
     return DbHelper.ExecuteNonQuery(UpdateColumns("Order_BZJ", "OrderId", id, filter, out parms), parms);
 }
 /// <summary>
 /// 订单增加
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="tran"></param> 
 /// <returns></returns>
 public static int CreateOrder(OrderEntity entity, YicelTransaction tran)
 {
     if (string.IsNullOrEmpty(entity.JUserId))
     {
         entity.JUserId = "";
     }
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@OrderId",entity.OrderId),
         new SqlParameter("@OrderNo",entity.OrderNo),
         new SqlParameter("@OrderCode",entity.OrderCode),
         new SqlParameter("@OrderType",entity.OrderType),
         new SqlParameter("@UserId",entity.UserId),
         new SqlParameter("@Account",entity.Account),
         new SqlParameter("@JUserId",entity.JUserId),
         new SqlParameter("@CarryWay",entity.CarryWay),
         new SqlParameter("@Au",entity.Au),
         new SqlParameter("@Ag",entity.Ag),
         new SqlParameter("@Pt",entity.Pt),
         new SqlParameter("@Pd",entity.Pd),
         new SqlParameter("@CreateDate",entity.CreateDate),
         new SqlParameter("@EndDate",entity.EndDate),
         new SqlParameter("@State",entity.State),
         new SqlParameter("@Version",entity.Version),
         new SqlParameter("@AuQuantity",entity.AuQuantity),
         new SqlParameter("@AgQuantity",entity.AgQuantity),
         new SqlParameter("@PtQuantity",entity.PtQuantity),
         new SqlParameter("@PdQuantity",entity.PdQuantity),
         new SqlParameter("@AgP",entity.AgP),
         new SqlParameter("@AuP",entity.AuP),
         new SqlParameter("@PdP",entity.PdP),
         new SqlParameter("@PtP",entity.PtP)
     };
     StringBuilder strSql = new StringBuilder();
     strSql.AppendFormat("insert into Order_BZJ({0})", Fields.Order_FIELD_LIST);
     strSql.AppendFormat(" values ({0})", "@" + Fields.Order_FIELD_LIST.Replace(",", ",@"));
     object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
     return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
 }
        /// <summary>
        /// 交割单记录
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="orderEntity"></param>
        /// <param name="operationId"></param>
        /// <param name="tran"></param>
        /// <returns></returns>
        public static int UpdateDeliver(DeliverEntity entity, OrderEntity orderEntity, string operationId, YicelTransaction tran)
        {
            SqlParameter[] parms = new SqlParameter[] {
                new SqlParameter("@DeliverId",entity.DeliverId),
                new SqlParameter("@DeliverNo",entity.DeliverNo),
                new SqlParameter("@Account",entity.Account),
                new SqlParameter("@Direction",entity.Direction),
                new SqlParameter("@Total",entity.Total),
                new SqlParameter("@Goods",entity.Goods),
                new SqlParameter("@DeliverDate",entity.DeliverDate),
                new SqlParameter("@LockPrice",entity.LockPrice),
                new SqlParameter("@AvailableTotal",entity.AvailableTotal),
                new SqlParameter("@FromFlag",entity.FromFlag),
                new SqlParameter("@State",entity.State),
                new SqlParameter("@CreateDate",entity.CreateDate)
            };
            StringBuilder strSql = new StringBuilder();
            strSql.Append("update Deliver_BZJ set ");
            strSql.Append("DeliverNo=@DeliverNo,");
            strSql.Append("Account=@Account,");
            strSql.Append("Goods=@Goods,");
            strSql.Append("Direction=@Direction,");
            strSql.Append("Total=@Total,");
            strSql.Append("DeliverDate=@DeliverDate,");
            strSql.Append("LockPrice=@LockPrice,");
            strSql.Append("AvailableTotal=@AvailableTotal,");
            strSql.Append("FromFlag=@FromFlag,");
            strSql.Append("State=@State,");
            strSql.Append("CreateDate=@CreateDate");
            strSql.AppendFormat(" where DeliverId='{0}'", entity.DeliverId);
            return DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
            #region 记录出库记录
            //DeliverAdjustmentEntity deliver = new DeliverAdjustmentEntity();
            //deliver.DeliverAdjustmentID = Guid.NewGuid().ToString("n");
            //deliver.DeliverAdjustmentNO = "JS" + DateTime.Now.ToString("yyMMddhhmmssffff");
            //deliver.Goods = entity.Goods;
            //deliver.Direction = orderEntity.OrderType;
            //if (entity.Goods == 1)
            //{
            //    deliver.Total =- Math.Abs( orderEntity.Au);
            //}

            //if (entity.Goods == 2)
            //{
            //    deliver.Total = - Math.Abs(orderEntity.Ag);
            //}
            //if (entity.Goods == 3)
            //{
            //    deliver.Total = - Math.Abs(orderEntity.Pt);
            //}
            //if (entity.Goods == 4)
            //{
            //    deliver.Total = - Math.Abs(orderEntity.Pd);
            //}
            //deliver.Account = entity.Account;
            //deliver.LockPrice = 0;
            //deliver.State = 0;
            //deliver.AvailableTotal = 0;
            //deliver.FromFlag = 1;
            //deliver.OperationUserID = OperationId;
            //deliver.UserID = orderEntity.UserId;
            #endregion
            // return CreateDeliverAdjustment(deliver, tran);
        }
        /// <summary>
        /// 订单回购价
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="tran"></param>
        /// <returns></returns>
        public static int CreatePrice(OrderPriceEntity entity, YicelTransaction tran)
        {
            entity.OrderPriceId = Guid.NewGuid().ToString("n");

            SqlParameter[] parms = new SqlParameter[] {
            new SqlParameter("@OrderPriceId", entity.OrderPriceId),
            new SqlParameter("@OrderId", entity.OrderId),
            new SqlParameter("@OrderNo", entity.OrderNo),
            new SqlParameter("@PriceId", entity.PriceId),
            new SqlParameter("@AuPrice", entity.AuPrice),
            new SqlParameter("@AgPrice", entity.AgPrice),
            new SqlParameter("@PtPrice", entity.PtPrice),
            new SqlParameter("@PdPrice", entity.PdPrice)
            };

            StringBuilder strSql = new StringBuilder();
            strSql.AppendFormat("insert into OrderPrice_BZJ({0})", Fields.OrderPrice_FIELD_LIST);
            strSql.AppendFormat(" values ({0})", "@" + Fields.OrderPrice_FIELD_LIST.Replace(",", ",@"));
            object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
            return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
        }
        /// <summary>
        /// 更新订单状态为已提货或卖
        /// </summary>
        /// <param name="agentId"></param>
        /// <param name="order"></param>
        /// <param name="dataMember"></param>
        /// <param name="operationEntity"></param>
        /// <returns></returns>
        public static bool UpdateOrder(string agentId, OrderEntity order, List<UpdateDataMember> dataMember, OrderOperationEntity operationEntity)
        {
            List<DeliverEntity> deliverList = new List<DeliverEntity>();//需要更新的交割单列表
            List<DeliverRecordEntity> deliverRecordList = new List<DeliverRecordEntity>();
            List<UpdateDataMember> updateList = new List<UpdateDataMember>();//需要更新的订单信息
            List<UpdateDataMember> userList = new List<UpdateDataMember>();//需要更新用户数量

            OrderEntity entity = LoadByOrderCode(order.OrderCode);//获取订单信息
            StockEntity stockEntity = LoadByAccount(entity.UserId);//获取订单所属用户信息
            Direction d = entity.OrderType == (int)OrderType.提货单 ? Direction.提货单 : Direction.卖单;

            #region 合法性验证
            //获取用户交割单各物品总重量
            Dictionary<GoodsType, GoodsEntity> goodsDic = GetGoodsDic(entity.Account, d);
            //判断用户交割单种类是否小于0 或者小于提交的种类数量
            if (goodsDic.Count <= 0 || goodsDic.Count < dataMember.Count)
                return false;
            //判断用户物品数量是否与交割物品数量相等 2013/4/6
            if (!CheckTotal(order, stockEntity))
                return false;

            //循环判断提交重量是否大于用户交割单总重量
            foreach (var m in dataMember)
            {
                foreach (var g in goodsDic.Values)
                {
                    if (m.field.ToLower() == g.Symbol.ToString().ToLower() && Convert.ToDecimal(m.value) > g.Total)
                    {
                        return false;
                    }
                    else
                    {
                        if (m.field.ToLower() == "au")
                        {
                            entity.Au = Convert.ToDecimal(m.value);
                            updateList.Add(new UpdateDataMember { field = "Au", value = m.value });

                            updateList.Add(new UpdateDataMember { field = "AuP", value = stockEntity.AuPrice });
                            if (Convert.ToDecimal(m.value) > stockEntity.AuAmount)
                            {
                                updateList.Add(new UpdateDataMember { field = "AuQuantity", value = stockEntity.AuAmount });
                            }
                            else
                            {
                                updateList.Add(new UpdateDataMember { field = "AuQuantity", value = m.value });
                            }
                            break;
                        }
                        if (m.field.ToLower() == "ag")
                        {
                            entity.Ag = Convert.ToDecimal(m.value);
                            updateList.Add(new UpdateDataMember { field = "Ag", value = m.value });

                            updateList.Add(new UpdateDataMember { field = "AgP", value = stockEntity.AgPrice });
                            if (Convert.ToDecimal(m.value) > stockEntity.AuAmount)
                            {
                                updateList.Add(new UpdateDataMember { field = "AgQuantity", value = stockEntity.AgAmount });
                            }
                            else
                            {
                                updateList.Add(new UpdateDataMember { field = "AgQuantity", value = m.value });
                            }
                            break;
                        }
                        if (m.field.ToLower() == "pt")
                        {
                            entity.Pt = Convert.ToDecimal(m.value);
                            updateList.Add(new UpdateDataMember { field = "Pt", value = m.value });

                            updateList.Add(new UpdateDataMember { field = "PtP", value = stockEntity.PtPrice });
                            if (Convert.ToDecimal(m.value) > stockEntity.AuAmount)
                            {
                                updateList.Add(new UpdateDataMember { field = "PtQuantity", value = stockEntity.PtAmount });
                            }
                            else
                            {
                                updateList.Add(new UpdateDataMember { field = "PtQuantity", value = m.value });
                            }
                            break;
                        }
                        if (m.field.ToLower() == "pd")
                        {
                            entity.Pd = Convert.ToDecimal(m.value);
                            updateList.Add(new UpdateDataMember { field = "Pd", value = m.value });

                            updateList.Add(new UpdateDataMember { field = "PdP", value = stockEntity.AuPrice });
                            if (Convert.ToDecimal(m.value) > stockEntity.AuAmount)
                            {
                                updateList.Add(new UpdateDataMember { field = "PdQuantity", value = stockEntity.AuAmount });
                            }
                            else
                            {
                                updateList.Add(new UpdateDataMember { field = "PdQuantity", value = m.value });
                            }
                            break;
                        }
                    }
                }
            }

            #endregion

            //获取交割单信息
            List<DeliverEntity> list = GetListByAccount(entity.Account, d, 1);
            if (list == null || list.Count <= 0)
                return false;

            #region 计算交割单信息

            Dictionary<GoodsType, decimal> dic = new Dictionary<GoodsType, decimal>();
            dic.Add(GoodsType.Au, entity.Au);
            dic.Add(GoodsType.Ag, entity.Ag);
            dic.Add(GoodsType.Pd, entity.Pd);
            dic.Add(GoodsType.Pt, entity.Pt);
            foreach (var key in dic.Keys)
            {
                var tmp = list.Where(m => m.Goods.Equals(key)).ToList(); var values = dic[key];
                if (values <= 0) continue;
                foreach (var mm in tmp)
                {
                    DeliverRecordEntity recordEntity = new DeliverRecordEntity
                    {
                        DeliverId = mm.DeliverId,
                        DeliverNo = mm.DeliverNo,
                        Goods = mm.Goods,
                        Direction = mm.Direction,
                        LockPrice = mm.LockPrice,
                        OrderType = order.OrderType,
                        OrderId = entity.OrderId,
                        OrderNo = entity.OrderNo
                    };
                    if (values > mm.AvailableTotal)
                    {
                        recordEntity.UseTotal = mm.AvailableTotal;
                        values -= mm.AvailableTotal;
                        mm.AvailableTotal = 0;
                        mm.State = 0;
                        deliverList.Add(mm);
                        deliverRecordList.Add(recordEntity);
                    }
                    else
                    {
                        mm.State = values.Equals(mm.AvailableTotal) ? 0 : 1;
                        recordEntity.UseTotal = values;
                        mm.AvailableTotal -= values;
                        deliverList.Add(mm);
                        deliverRecordList.Add(recordEntity);
                        break;
                    }
                }
            }

            #endregion

            #region 部分实体赋值
            AgentDeliverEntity agentDeliverEntity = new AgentDeliverEntity
            {
                AgentInfoId = agentId,
                OrderId = entity.OrderId,
                FromTo = 1,
                Direction = d,
                Ag = entity.Ag,
                Au = entity.Au,
                Pd = entity.Pd,
                Pt = entity.Pt
            };
            #endregion
            updateList.Add(new UpdateDataMember { field = "State", value = "2" });
            updateList.Add(new UpdateDataMember { field = "Version", value = (entity.Version + 1).ToString() });
            updateList.Add(new UpdateDataMember { field = "EndDate", value = DateTime.Now.ToString() });

            UserLogEntity userLogEntity = new UserLogEntity();

            userLogEntity.Account = agentId;
            userLogEntity.DESC = string.Format(@"金商{5},用户{0}提货:Ag:{1},Au:{2},Pt:{3},Pd:{4};", entity.Account, entity.Au, entity.Ag, entity.Pt, entity.Pd, entity.AgentName);
            userLogEntity.UserType = (int)LogType.用户库存调整减少;

            operationEntity.OrderId = entity.OrderId;
            operationEntity.OrderNo = entity.OrderNo;
            YicelTransaction tran = new YicelTransaction();
            try
            {
                tran.BeginTransaction();
                UpdateColumns(entity.OrderId, updateList, tran);
                CreateOrderOperation(operationEntity, tran);//创建订单操作记录
                deliverList.ForEach(m => UpdateDeliver(m, entity, operationEntity.OperationId, tran));//更新交割单信息
                deliverRecordList.ForEach(m => CreateDeliverRecord(m, tran));//创建订单对应交割单信息
                UpdateUserTotal(entity, stockEntity, tran);//更新用户库存数量
                CreateAgent(agentDeliverEntity, tran);//创建金商库存
                CreateLog(userLogEntity, tran);
                tran.Commit();
                return true;
            }
            catch
            {
                tran.Rollback();
                return false;
            }
        }
 /// <summary>
 /// 金商库存
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="tran"></param>
 /// <returns></returns>
 public static bool CreateAgent(AgentDeliverEntity entity, YicelTransaction tran)
 {
     entity.AgentDeliverId = Guid.NewGuid().ToString("n");
     entity.CreateDate = DateTime.Now.ToString();
     entity.State = 1;
     entity.AvailableAg = entity.Ag;
     entity.AvailableAu = entity.Au;
     entity.AvailablePd = entity.Pd;
     entity.AvailablePt = entity.Pt;
     UpdateAgentTotal(entity.AgentInfoId, entity.Direction, GoodsType.Au, entity.Au, tran);
     UpdateAgentTotal(entity.AgentInfoId, entity.Direction, GoodsType.Ag, entity.Ag, tran);
     UpdateAgentTotal(entity.AgentInfoId, entity.Direction, GoodsType.Pt, entity.Pt, tran);
     UpdateAgentTotal(entity.AgentInfoId, entity.Direction, GoodsType.Pd, entity.Pd, tran);
     CreateAgentDeliver(entity, tran);
     return true;
 }
 /// <summary>
 /// 更新订单状态
 /// </summary>
 /// <param name="orderNO"></param>
 /// <param name="userId">用户ID</param>
 /// <param name="state"></param>
 /// <returns></returns>
 public static bool UpdateOrderState(string orderNO, string userId, int state)
 {
     UserLogEntity userLogEntity = new UserLogEntity();
     userLogEntity.OperTime = DateTime.Now.ToString();
     // userLogEntity.UserID = userid;
     userLogEntity.DESC = string.Format(@"更新回购订单状态:用户{0},订单号:{1};", userId, orderNO);
     userLogEntity.UserType = (int)LogType.订单修改;
     YicelTransaction tran = new YicelTransaction();
     SqlParameter[] parms = new SqlParameter[] {
     };
     string strSql = string.Format(@"update Order_BZJ set version={0},state={1} ,enddate='{2}' where OrderNo='{3}' and userid='{4}'", 2, state, DateTime.Now.ToString(), orderNO, userId);
     try
     {
         tran.BeginTransaction();
         DbHelper.ExecuteNonQuery(strSql, parms, tran.Transaction);
         CreateLog(userLogEntity, tran);
         tran.Commit();
         return true;
     }
     catch
     {
         tran.Rollback();
         return false;
     }
 }
 /// <summary>
 /// 系统角色权限设置
 /// </summary>
 /// <param name="loginId"></param>
 /// <param name="list"></param>
 /// <param name="roldeID"></param>
 /// <returns></returns>
 public EntityBase AddRolePrivileges(string loginId, List<RolePrivilegeEntity> list, string roldeID)
 {
     if (ComFunction.ExistUserLoginID(loginId) == false)
     {
         return entityBase;
     }
     YicelTransaction tran = new YicelTransaction();
     try
     {
         tran.BeginTransaction();
         ComFunction.DeleteRolePrivilege(roldeID, tran);//第一步先删除已有角色权限
         list.ForEach(m => ComFunction.AddRolePrivilege(m, tran));//第二步增加新权限
         tran.Commit();
         entityBase.Result = true;
         entityBase.Desc = "角色新增成功";
     }
     catch (Exception ex)
     {
         tran.Rollback();
         SetException("角色新增失败,原因:", ex);
     }
     return entityBase;
 }
        /// <summary>
        /// 更新订单状态
        /// </summary>
        /// <param name="orderid"></param>
        /// <param name="agentId"></param>
        /// <param name="userId"></param>
        /// <param name="clerkId"></param>
        /// <param name="tran"></param>
        /// <returns></returns>
        public static int UpdateOrderState(string orderid, string agentId, string userId, string clerkId, YicelTransaction tran)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.AppendFormat("UPDATE dbo.Order_BZJ SET State=2 ,AgentUserID='{1}' ,AgentID='{2}',ClerkID='{3}' ,OperationDate=GETDATE() where OrderId='{0} '", orderid, agentId, agentId, clerkId);

            object obj = DbHelper.ExecuteNonQuery(strSql.ToString(), null, tran.Transaction);
            return obj == null || obj == DBNull.Value ? 0 : Convert.ToInt32(obj);
        }
        /// <summary>
        /// 更新用户库存数量
        /// </summary>
        /// <param name="uid">用户编号</param>
        /// <param name="d">提货 卖</param>
        /// <param name="type">物品类型</param>
        /// <param name="total"></param>
        /// <param name="userEntity">数量</param>
        /// <param name="tran"></param>
        public static void UpdateTotal(string uid, Direction d, GoodsType type, decimal total, StockEntity userEntity, YicelTransaction tran)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("update Stock_BZJ set ");
            #region
            if (d == Direction.提货单)
            {
                switch (type)
                {
                    case GoodsType.Au:
                        if (userEntity.AuTotal + total * userEntity.AuPrice >= 0)
                        {
                            strSql.Append("Au=Au+@Total,AuTotal=AuTotal+@Total*AuPrice,AuAmount=AuAmount+@Total ");
                        }
                        else
                        {
                            strSql.Append("Au=Au+@Total,AuTotal=0,AuAmount=0 ");
                        }
                        break;
                    case GoodsType.Ag:
                        if (userEntity.AgTotal + total * userEntity.AgPrice >= 0)
                        {
                            strSql.Append("Ag=Ag+@Total,AgTotal=AgTotal+@Total*AgPrice,AgAmount=AgAmount+@Total ");
                        }
                        else
                        {
                            strSql.Append("Ag=Ag+@Total,AgTotal=0,AgAmount=0 ");
                        }
                        break;
                    case GoodsType.Pt:
                        if (userEntity.PtTotal + total * userEntity.PtPrice >= 0)
                        {
                            strSql.Append("Pt=Pt+@Total,PtTotal=PtTotal+@Total*PtPrice,PtAmount=PtAmount+@Total ");
                        }
                        else
                        {
                            strSql.Append("Pt=Pt+@Total,PtTotal=0,PtAmount=0 ");
                        }
                        break;
                    case GoodsType.Pd:
                        if (userEntity.PdTotal + total * userEntity.PdPrice >= 0)
                        {
                            strSql.Append("Pd=Pd+@Total,PdTotal=PdTotal+@Total*PdPrice,PdAmount=PdAmount+@Total ");
                        }
                        else
                        {
                            strSql.Append("Pd=Pd+@Total,PdTotal=0,PdAmount=0 ");
                        }
                        break;
                }
            }
            else if (d == Direction.卖单)
            {
                switch (type)
                {
                    case GoodsType.Au:
                        strSql.Append("Au_b=Au_b+@Total ");
                        break;
                    case GoodsType.Ag:
                        strSql.Append("Ag_b=Ag_b+@Total ");
                        break;
                    case GoodsType.Pt:
                        strSql.Append("Pt_b=Pt_b+@Total ");
                        break;
                }
            }
            else if (d == Direction.金生金 || d == Direction.到期单 || d == Direction.已生金单 || d == Direction.提成单 || d == Direction.金店库存同步 || d == Direction.库存调整)
            {
                switch (type)
                {
                    case GoodsType.Au:
                        strSql.Append("Au=Au+@Total ");
                        break;
                    case GoodsType.Ag:
                        strSql.Append("Ag=Ag+@Total ");
                        break;
                    case GoodsType.Pt:
                        strSql.Append("Pt=Pt+@Total ");
                        break;
                    case GoodsType.Pd:
                        strSql.Append("Pd=Pd+@Total ");
                        break;
                }
            }
            #endregion
            strSql.Append("where UserId=@UserId");

            SqlParameter[] parms = new SqlParameter[] {
                new SqlParameter("@UserId",uid),
                new SqlParameter("@Total",total)
            };
            DbHelper.ExecuteNonQuery(strSql.ToString(), parms, tran.Transaction);
        }
 /// <summary>
 /// 删除用户角色
 /// </summary>
 /// <param name="userId">用户角色ID</param>
 /// <param name="tran"></param>
 /// <returns>影响记录数</returns>
 public static int DeleteUserRole(string userId, YicelTransaction tran)
 {
     SqlParameter[] parms = new SqlParameter[] {
         new SqlParameter("@userId",userId)};
     string sqlCommand = string.Format(@"delete from Base_Org where userId=@userId");
     return DbHelper.ExecuteNonQuery(sqlCommand, parms, tran.Transaction);
 }