/// <summary>
 /// 异步清空所有模型
 /// </summary>
 /// <param name="comData">通用数据</param>
 /// <param name="connectionId">连接ID</param>
 /// <returns>返回信息任务</returns>
 public virtual async Task <ReturnInfo <bool> > ClearAsync(CommonUseData comData = null, string connectionId = null)
 {
     return(await Task.Run <ReturnInfo <bool> >(() =>
     {
         return Clear(comData, connectionId);
     }));
 }
        /// <summary>
        /// 初始化缓存
        /// </summary>
        /// <param name="tenantId">租戶ID</param>
        /// <param name="userId">用户ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>返回信息</returns>
        public BasicReturnInfo InitCache(IdT tenantId, IdT userId, CommonUseData comData = null)
        {
            var key    = GetKey(tenantId, userId);
            var result = Get(key);

            if (result == null)
            {
                var reMenuFunCodes = TenantIdUserMenuReader.GetHavePermissionMenuFunCodes(tenantId, userId, comData);
                if (reMenuFunCodes.Failure())
                {
                    return(reMenuFunCodes);
                }
                if (reMenuFunCodes.Data == null)
                {
                    Add(key, new Dictionary <string, string[]>(0));
                }
                else
                {
                    Add(key, reMenuFunCodes.Data);
                }

                return(reMenuFunCodes);
            }

            return(new BasicReturnInfo());
        }
        /// <summary>
        /// 根据归属移除
        /// </summary>
        /// <param name="ownerType">归属类型</param>
        /// <param name="ownerId">归属ID</param>
        /// <param name="connectionId">连接ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>返回信息</returns>
        public virtual ReturnInfo <bool> RemoveByOwner(short ownerType, int ownerId, CommonUseData comData = null, string connectionId = null)
        {
            ReturnInfo <bool> returnInfo = new ReturnInfo <bool>();
            ReturnInfo <IList <AttachmentInfo> > ownerReturnInfo = QueryByOwner(ownerType, ownerId, connectionId: connectionId, comData: comData);

            if (returnInfo.Failure() || ownerReturnInfo.Data.IsNullOrCount0())
            {
                returnInfo.FromBasic(ownerReturnInfo);

                return(returnInfo);
            }

            Persistence.DeleteByOwner(ownerType, ownerId, connectionId);

            // 查找所有的文件地址
            string[] fileAddress = new string[ownerReturnInfo.Data.Count];
            for (var i = 0; i < fileAddress.Length; i++)
            {
                fileAddress[i] = ownerReturnInfo.Data[i].FileAddress;
            }

            AttachmentUploadStore.Remove(comData, fileAddress);

            return(returnInfo);
        }
 /// <summary>
 /// 异步根据ID修改模型
 /// </summary>
 /// <param name="model">模型</param>
 /// <param name="comData">通用数据</param>
 /// <param name="connectionId">连接ID</param>
 /// <returns>返回信息任务</returns>
 public virtual async Task <ReturnInfo <bool> > ModifyByIdAsync(ModelT model, CommonUseData comData = null, string connectionId = null)
 {
     return(await Task.Run <ReturnInfo <bool> >(() =>
     {
         return ModifyById(model, comData, connectionId);
     }));
 }
예제 #5
0
        /// <summary>
        /// 创建基本的通用数据
        /// </summary>
        /// <param name="context">上下文</param>
        /// <param name="key">键</param>
        /// <param name="menuCode">菜单编码</param>
        /// <param name="authToken">授权票据</param>
        /// <param name="functionCodes">功能编码数组</param>
        /// <returns>基本的通用数据</returns>
        public static CommonUseData CreateBasicCommonUseData(this HttpContext context, string key = null, string menuCode = null, IAuthToken authToken = null, params string[] functionCodes)
        {
            var result = new CommonUseData()
            {
                Key           = key,
                MenuCode      = menuCode,
                FunctionCodes = functionCodes
            };

            if (context != null && context.Request != null)
            {
                result.Path = context.Request.Path.Value.ToLower();
                var routeValue = context.Request.RouteValues;
                var routes     = routeValue.GetControllerAction();
                if (routes != null && routes.Length > 1)
                {
                    result.Controller = routes[0];
                    result.Action     = routes[1];
                }

                result.Token = authToken == null?context.Request.GetBearerOriginTokenFromHeader() : authToken.GetToken();

                if (context.Request.Headers != null && context.Request.Headers.ContainsKey(App.EVENT_ID_KEY))
                {
                    result.EventId = context.Request.Headers[App.EVENT_ID_KEY];
                }

                result.CommMode = GRpcChannelUtil.IsRequestGRpc(context.Request.ContentType) ? CommunicationMode.GRPC : CommunicationMode.HTTP;
            }

            return(result);
        }
 /// <summary>
 /// 异步根据ID集合移除模型
 /// </summary>
 /// <param name="ids">ID集合</param>
 /// <param name="comData">通用数据</param>
 /// <param name="connectionId">连接ID</param>
 /// <returns>返回信息任务</returns>
 public virtual async Task <ReturnInfo <bool> > RemoveByIdsAsync(IdT[] ids, CommonUseData comData = null, string connectionId = null)
 {
     return(await Task.Run <ReturnInfo <bool> >(() =>
     {
         return RemoveByIds(ids, comData, connectionId);
     }));
 }
 /// <summary>
 /// 异步根据ID判断模型是否存在
 /// </summary>
 /// <param name="id">ID</param>
 /// <param name="comData">通用数据</param>
 /// <param name="connectionId">连接ID</param>
 /// <returns>返回信息任务</returns>
 public virtual async Task <ReturnInfo <bool> > ExistsAsync(IdT id, CommonUseData comData = null, string connectionId = null)
 {
     return(await Task.Run <ReturnInfo <bool> >(() =>
     {
         return Exists(id, comData, connectionId);
     }));
 }
        /// <summary>
        /// 根据ID修改模型
        /// </summary>
        /// <param name="model">模型</param>
        /// <param name="connectionId">连接ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>返回信息</returns>
        public override ReturnInfo <bool> ModifyById([Model] UserInfo model, CommonUseData comData = null, string connectionId = null)
        {
            SetModifyInfo(model, comData);

            bool isClose = false;

            if (string.IsNullOrWhiteSpace(connectionId))
            {
                isClose = true;
            }

            ReturnInfo <bool> returnInfo = new ReturnInfo <bool>();

            BeforeModifyById(returnInfo, model, ref connectionId);
            if (returnInfo.Failure())
            {
                return(returnInfo);
            }

            ExecModifyById(returnInfo, model, connectionId: connectionId, comData: comData);

            AfterModifyById(returnInfo, model, ref connectionId);

            if (isClose)
            {
                Persistence.Release(connectionId);
            }

            return(returnInfo);
        }
예제 #9
0
        public virtual ReturnInfo <IList <string> > Upload(CommonUseData comData = null, params AttachmentStreamInfo[] attachmentStream)
        {
            // 以当前年月为目录
            string yearMonthDic = $"{DateTime.Now.ToCompactShortYM()}/";
            string dic          = $"{FileRoot}{yearMonthDic}";

            lock (syncCreateRoot)
            {
                dic.CreateNotExistsDirectory();
            }

            ReturnInfo <IList <string> > returnInfo = new ReturnInfo <IList <string> >();

            returnInfo.Data = new List <string>(attachmentStream.Length);

            try
            {
                foreach (var attStream in attachmentStream)
                {
                    string expandName  = attStream.FileName.FileExpandName();
                    string newFileName = $"{StringUtil.NewShortGuid()}{expandName}";

                    $"{dic}{newFileName}".WriteFile(attStream.Stream);
                    returnInfo.Data.Add($"{Config["Attachment:DownloadRoot"]}{yearMonthDic}{newFileName}");
                }
            }
            catch (Exception ex)
            {
                Log.ErrorAsync(ex.Message, ex, this.GetType().FullName);
                returnInfo.SetFailureMsg(ex.Message, ex.StackTrace, ex);
            }

            return(returnInfo);
        }
        /// <summary>
        /// 根据ID移除模型
        /// </summary>
        /// <param name="id">ID</param>
        /// <param name="connectionId">连接ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>返回信息</returns>
        public override ReturnInfo <bool> RemoveById([Id] int id, CommonUseData comData = null, string connectionId = null)
        {
            ReturnInfo <bool> re = new ReturnInfo <bool>();

            // 先取出当前ID的文件地址
            ReturnInfo <AttachmentInfo> returnInfo = Find(id, connectionId: connectionId, comData: comData);

            if (returnInfo.Failure() || returnInfo.Data == null)
            {
                re.FromBasic(returnInfo);

                return(re);
            }

            re = base.RemoveById(id, connectionId: connectionId, comData: comData);
            if (re.Failure())
            {
                return(re);
            }

            if (!string.IsNullOrWhiteSpace(returnInfo.Data.FileAddress))
            {
                AttachmentUploadStore.Remove(comData, returnInfo.Data.FileAddress);
            }

            return(re);
        }
예제 #11
0
 /// <summary>
 /// 查询角色列表并去掉系统隐藏
 /// </summary>
 /// <param name="connectionId">连接ID</param>
 /// <param name="comData">通用数据</param>
 /// <returns>返回信息</returns>
 public virtual ReturnInfo <IList <RoleInfo> > QueryAndNotSystemHide(CommonUseData comData = null, string connectionId = null)
 {
     return(ExecReturnFunc <IList <RoleInfo> >((reInfo) =>
     {
         return Persistence.SelectAndNotSystemHide(connectionId);
     }));
 }
 /// <summary>
 /// 异步根据ID查找模型
 /// </summary>
 /// <param name="id">ID</param>
 /// <param name="comData">通用数据</param>
 /// <param name="connectionId">连接ID</param>
 /// <returns>返回信息任务</returns>
 public virtual async Task <ReturnInfo <ModelT> > FindAsync(IdT id, CommonUseData comData = null, string connectionId = null)
 {
     return(await Task.Run <ReturnInfo <ModelT> >(() =>
     {
         return Find(id, comData, connectionId);
     }));
 }
 /// <summary>
 /// 异步查询模型列表
 /// </summary>
 /// <param name="comData">通用数据</param>
 /// <param name="connectionId">连接ID</param>
 /// <returns>返回信息任务</returns>
 public virtual async Task <ReturnInfo <IList <ModelT> > > QueryAsync(CommonUseData comData = null, string connectionId = null)
 {
     return(await Task.Run <ReturnInfo <IList <ModelT> > >(() =>
     {
         return Query(comData, connectionId);
     }));
 }
예제 #14
0
        public virtual int Delete(CommonUseData comData = null, string connectionId = null)
        {
            int result = 0;
            IDictionary <string, string> slaveTables = SlaveTables();

            if (slaveTables.IsNullOrCount0())
            {
                DbConnectionManager.BrainpowerExecute(connectionId, this, (connId, dbConn) =>
                {
                    result = Delete(dbConn, GetDbTransaction(connId, AccessMode.MASTER), comData: comData);
                }, AccessMode.MASTER);

                return(result);
            }

            ExecTransaction((cId) =>
            {
                DbConnectionManager.BrainpowerExecute(cId, this, (connId, dbConn) =>
                {
                    var trans = GetDbTransaction(connId, AccessMode.MASTER);
                    result    = Delete(dbConn, trans, comData: comData);

                    foreach (KeyValuePair <string, string> slTable in slaveTables)
                    {
                        DeleteSlaveTable(slTable.Key, dbConn, trans, comData: comData);
                    }
                }, AccessMode.MASTER);
            }, AccessMode.MASTER, connectionId: connectionId);

            return(result);
        }
        /// <summary>
        /// 添加用户角色
        /// </summary>
        /// <param name="model">模型</param>
        /// <param name="connectionId">连接ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>影响行数</returns>
        private int AddUserRoles(UserInfo model, CommonUseData comData = null, string connectionId = null)
        {
            if (model.OwnRoles.IsNullOrCount0())
            {
                return(0);
            }

            IList <UserRoleInfo> userRoles = new List <UserRoleInfo>(model.OwnRoles.Count);

            foreach (RoleInfo r in model.OwnRoles)
            {
                UserRoleInfo ur = new UserRoleInfo()
                {
                    UserId = model.Id,
                    RoleId = r.Id
                };
                ur.SetCreateInfo(UserTool <int> .GetCurrUser(comData));

                userRoles.Add(ur);
            }
            if (userRoles.IsNullOrCount0())
            {
                return(0);
            }

            return(UserRolePersistence.Insert(userRoles, connectionId: connectionId, comData: comData));
        }
예제 #16
0
 /// <summary>
 /// 查询菜单树列表
 /// </summary>
 /// <param name="connectionId">连接ID</param>
 /// <param name="comData">通用数据</param>
 /// <returns>返回信息</returns>
 public virtual ReturnInfo <IList <MenuTreeInfo> > QueryMenuTrees(CommonUseData comData = null, string connectionId = null)
 {
     return(ExecReturnFunc <IList <MenuTreeInfo> >((reInfo) =>
     {
         IList <MenuInfo> menus = Persistence.SelectContainsFunctions(connectionId);
         return menus.ToOrigAndSort().ToMenuTrees();
     }));
 }
 protected virtual void ExecAdd(ReturnInfo <bool> returnInfo, UserInfo model, CommonUseData comData = null, string connectionId = null)
 {
     returnInfo.Data = Persistence.Insert(model, connectionId: connectionId, comData: comData) > 0;
     if (returnInfo.Data)
     {
         AddUserRoles(model, connectionId: connectionId, comData: comData);
     }
 }
        /// <summary>
        /// 填充页面数据,包含当前用户所拥有的权限功能列表
        /// </summary>
        /// <param name="returnInfo">返回信息</param>
        /// <param name="comData">通用数据</param>
        protected override void FillPageData(ReturnInfo <PageInfo> returnInfo, CommonUseData comData = null)
        {
            var re = UserService.QueryPageData <PageInfo>(MenuCode(), () =>
            {
                return(returnInfo.Data);
            }, comData: comData);

            returnInfo.FromBasic(re);
        }
예제 #19
0
        /// <summary>
        /// 查询模型列表
        /// </summary>
        /// <param name="propertyNames">属性名称集合</param>
        /// <param name="comData">通用数据</param>
        /// <param name="connectionId">连接ID</param>
        /// <returns>模型列表</returns>
        public virtual IList <ModelT> Select(string[] propertyNames, CommonUseData comData = null, string connectionId = null)
        {
            IList <ModelT> result = null;

            DbConnectionManager.BrainpowerExecute(connectionId, this, (connId, dbConn) =>
            {
                result = Select(dbConn, GetDbTransaction(connId, AccessMode.SLAVE), propertyNames, comData: comData);
            }, AccessMode.SLAVE);

            return(result);
        }
예제 #20
0
        /// <summary>
        /// 根据ID查询模型
        /// </summary>
        /// <param name="id">ID</param>
        /// <param name="comData">通用数据</param>
        /// <param name="connectionId">连接ID</param>
        /// <returns>模型</returns>
        public virtual ModelT Select(IdT id, CommonUseData comData = null, string connectionId = null)
        {
            ModelT result = null;

            DbConnectionManager.BrainpowerExecute(connectionId, this, (connId, dbConn) =>
            {
                result = Select(id, dbConn, GetDbTransaction(connId, AccessMode.SLAVE), comData: comData);
            }, AccessMode.SLAVE);

            return(result);
        }
예제 #21
0
        /// <summary>
        /// 根据ID更新模型
        /// </summary>
        /// <param name="model">模型</param>
        /// <param name="propertyNames">属性名称集合</param>
        /// <param name="comData">通用数据</param>
        /// <param name="connectionId">连接ID</param>
        /// <returns>影响行数</returns>
        public virtual int UpdateById(ModelT model, string[] propertyNames, CommonUseData comData = null, string connectionId = null)
        {
            int result = 0;

            DbConnectionManager.BrainpowerExecute(connectionId, this, (connId, dbConn) =>
            {
                result = UpdateById(model, dbConn, GetDbTransaction(connId, AccessMode.MASTER), propertyNames, comData: comData);
            }, AccessMode.MASTER);

            return(result);
        }
예제 #22
0
        /// <summary>
        /// 统计模型数
        /// </summary>
        /// <param name="comData">通用数据</param>
        /// <param name="connectionId">连接ID</param>
        /// <returns>模型数</returns>
        public virtual int Count(CommonUseData comData = null, string connectionId = null)
        {
            int result = 0;

            DbConnectionManager.BrainpowerExecute(connectionId, this, (connId, dbConn) =>
            {
                result = Count(dbConn, GetDbTransaction(connId, AccessMode.SLAVE), comData: comData);
            }, AccessMode.SLAVE);

            return(result);
        }
예제 #23
0
        /// <summary>
        /// 去分页
        /// </summary>
        /// <param name="comData">通用数据</param>
        /// <returns>返回信息任务</returns>
        protected virtual ReturnInfo <PagingInfo <ModelT> > DoPage(CommonUseData comData = null)
        {
            int         pageIndex, pageSize;
            PageFilterT filter = PagingParseFilter.ToFilterObjectFromHttp <PageFilterT>(Request, out pageIndex, out pageSize);

            AppendFilterParams(filter, comData);

            ReturnInfo <PagingInfo <ModelT> > returnInfo = QueryPageFromService(pageIndex, pageSize, filter, comData);

            AfterPage(returnInfo, pageIndex, pageSize, filter, comData);

            return(returnInfo);
        }
예제 #24
0
        /// <summary>
        /// 异步根据ID查询模型
        /// </summary>
        /// <param name="id">ID</param>
        /// <param name="connectionId">连接ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>模型任务</returns>
        public virtual Task <ModelT> SelectAsync(IdT id, ref string connectionId, CommonUseData comData = null)
        {
            Task <ModelT> task = null;

            DbConnectionManager.BrainpowerExecuteAsync(ref connectionId, this, (connId, isClose, dbConn) =>
            {
                task = ExecAsync <ModelT>(connId, isClose, dbConn, (dbTrans) =>
                {
                    return(Select(id, dbConn, dbTrans, comData: comData));
                }, AccessMode.SLAVE);
            }, accessMode: AccessMode.SLAVE);

            return(task);
        }
예제 #25
0
        /// <summary>
        /// 异步统计模型数
        /// </summary>
        /// <param name="connectionId">连接ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>模型数任务</returns>
        public virtual Task <int> CountAsync(ref string connectionId, CommonUseData comData = null)
        {
            Task <int> task = null;

            DbConnectionManager.BrainpowerExecuteAsync(ref connectionId, this, (connId, isClose, dbConn) =>
            {
                task = ExecAsync <int>(connId, isClose, dbConn, (dbTrans) =>
                {
                    return(Count(dbConn, dbTransaction: dbTrans, comData: comData));
                }, AccessMode.SLAVE);
            }, accessMode: AccessMode.SLAVE);

            return(task);
        }
예제 #26
0
        /// <summary>
        /// 异步删除所有模型
        /// </summary>
        /// <param name="connectionId">连接ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>影响行数任务</returns>
        public virtual Task <int> DeleteAsync(ref string connectionId, CommonUseData comData = null)
        {
            Task <int> task = null;

            DbConnectionManager.BrainpowerExecuteAsync(ref connectionId, this, (connId, isClose, dbConn) =>
            {
                task = ExecAsync <int>(connId, isClose, dbConn, (dbTrans) =>
                {
                    return(Delete(dbConn, dbTransaction: dbTrans, comData: comData));
                });
            });

            return(task);
        }
        /// <summary>
        /// 生成序列号
        /// </summary>
        /// <param name="seqType">序列类型</param>
        /// <param name="noLength">序列号长度</param>
        /// <param name="increment">增量</param>
        /// <param name="comData">通用数据</param>
        /// <returns>序列号</returns>
        public string BuilderNo(string seqType, byte noLength, int increment, CommonUseData comData = null)
        {
            string        dateStr      = DateTime.Now.ToCompactFixedShortDate();
            StringBuilder result       = new StringBuilder($"{seqType}{dateStr}");
            int           existsLength = result.Length;
            int           length       = noLength - existsLength - increment.ToString().Length;

            for (var i = 0; i < length; i++)
            {
                result.Append("0");
            }
            result.Append(increment.ToString());

            return(result.ToString());
        }
        /// <summary>
        /// 执行
        /// </summary>
        /// <param name="flowIn">流程输入</param>
        /// <param name="connectionId">连接ID</param>
        /// <param name="comData">通用数据</param>
        /// <returns>返回信息</returns>
        public virtual ReturnInfo <bool> Execute(int flowIn, CommonUseData comData = null, string connectionId = null)
        {
            return(ExecReturnFuncAndConnectionId <bool>((reInfo, connId) =>
            {
                var workflow = WorkflowPersistence.Select(flowIn, connectionId: connId, comData: comData);
                if (workflow == null)
                {
                    reInfo.SetFailureMsg($"找不到ID[{flowIn}]的工作流");

                    return false;
                }

                workflow.WorkflowDefine = WorkflowDefinePersistence.Select(workflow.WorkflowDefineId, connectionId: connId, comData: comData);
                if (workflow.WorkflowDefine == null)
                {
                    reInfo.SetFailureMsg($"找不到ID[{flowIn}]的工作流定义");

                    return false;
                }

                workflow.Handles = WorkflowHandlePersistence.SelectByWorkflowId(flowIn, connId);

                Vali(reInfo, workflow, comData);
                if (reInfo.Failure())
                {
                    return false;
                }

                ReturnInfo <bool> reTrans = ExecTransaction(reInfo, workflow, connectionId: connId, comData: comData);
                reInfo.FromBasic(reTrans);

                if (reTrans.Failure())
                {
                    return false;
                }

                var descAttr = typeof(RemoveType).GetAttributeForEnum <DescriptionAttribute>(GetRemoveType().ToString());
                if (descAttr != null)
                {
                    reInfo.SetSuccessMsg($"此工作流已{descAttr.Description}");
                }

                return true;
            }));
        }
        /// <summary>
        /// 授权
        /// </summary>
        /// <param name="user">用户</param>
        /// <param name="password">密码</param>
        /// <param name="comData">通用数据</param>
        /// <returns>返回信息</returns>
        public ReturnInfo <UserT> Accredit(string user, string password, CommonUseData comData = null)
        {
            if (userVali == null)
            {
                throw new NullReferenceException("用户验证不能为null");
            }

            ReturnInfo <UserT> returnInfo = userVali.Vali(user, password, comData);

            if (returnInfo.Failure())
            {
                return(returnInfo);
            }

            SaveUserInfo(returnInfo.Data);

            return(returnInfo);
        }
        /// <summary>
        /// 根据归属类型读取附件归属信息
        /// </summary>
        /// <param name="type">归属类型</param>
        /// <param name="comData">通用数据</param>
        /// <returns>附件归属信息</returns>
        public AttachmentOwnerInfo ReaderByOwnerType(short type, CommonUseData comData = null)
        {
            if (dicCache.ContainsKey(type))
            {
                return(dicCache[type]);
            }

            AttachmentOwnerInfo AttachmentOwnerInfo = ProtoAttachmentOwnerReader.ReaderByOwnerType(type, comData);

            if (AttachmentOwnerInfo == null)
            {
                return(null);
            }

            Add(type, AttachmentOwnerInfo);

            return(AttachmentOwnerInfo);
        }