Exemplo n.º 1
0
        /// <summary>
        /// 忘记密码
        /// </summary>
        /// <param name="code"></param>
        public void ForgetPassword(string code)
        {
            var user = Broker.Retrieve <user_info>("SELECT * FROM user_info WHERE code = @mail OR mailbox = @mail", new Dictionary <string, object>()
            {
                { "@mail", code }
            });

            AssertUtil.CheckNull <SpException>(user, "用户不存在", "5E507D9C-47BC-4586-880D-D9E42D02FEA4");
            UserIdentityUtil.SetCurrentUser(MapperHelper.Map <CurrentUserModel>(user));
            var id  = Guid.NewGuid().ToString();
            var sms = new mail_vertification()
            {
                Id           = id,
                name         = "重置密码",
                content      = $@"你好,<br/><br/>
请在两小时内点击该<a href=""{ SystemConfig.Config.Protocol }://{SystemConfig.Config.Domain}/api/MailVertification/ResetPassword?id={id}"">链接</a>重置密码
",
                expire_time  = DateTime.Now.AddHours(2),
                is_active    = false,
                mail_address = user.mailbox,
                mail_type    = MailType.ResetPassword.ToString()
            };

            Broker.Create(sms);
        }
Exemplo n.º 2
0
        public static IEnumerable <sys_menu> Filter(this IEnumerable <sys_menu> sysMenus)
        {
            var privileges = UserPrivilegesCache.GetUserPrivileges(UserIdentityUtil.GetCurrentUserId()).Where(item => item.object_type == nameof(sys_menu));

            return(sysMenus.Where(item =>
            {
                var data = privileges.FirstOrDefault(e => e.objectid == item.sys_menuId);
                return data != null && data.privilege > 0;
            }));
        }
Exemplo n.º 3
0
        public override void Executing(IJobExecutionContext context)
        {
            var broker           = PersistBrokerFactory.GetPersistBroker();
            var focusUserService = new FocusUserService();
            var user             = UserIdentityUtil.GetCurrentUser();
            var focusUserList    = focusUserService.GetFocusUserList();

            Logger.Debug($"获取到{focusUserList.count}条微信公众号关注用户");
            if (focusUserList.count > 0)
            {
                var user_list = new List <OpenId>();
                focusUserList.data.openid.ForEach(item => user_list.Add(new OpenId()
                {
                    openid = item, lang = "zh_CN"
                }));
                var focusUsers = focusUserService.GetFocusUsers(JsonConvert.SerializeObject(new { user_list }));
                broker.ExecuteTransaction(() =>
                {
                    var dataList = focusUsers.user_list
                                   .Select(focusUser =>
                    {
                        var wechat_user = new wechat_user()
                        {
                            Id              = focusUser.openid,
                            subscribe       = Convert.ToInt32(focusUser.subscribe),
                            nickname        = focusUser.nickname,
                            name            = focusUser.nickname,
                            sex             = focusUser.sex,
                            language        = focusUser.language,
                            city            = focusUser.city,
                            province        = focusUser.province,
                            country         = focusUser.country,
                            headimgurl      = focusUser.headimgurl,
                            subscribe_time  = focusUser.subscribe_time.ToDateTime(),
                            unionid         = focusUser.unionid,
                            remark          = focusUser.remark,
                            groupid         = focusUser.groupid,
                            subscribe_scene = focusUser.subscribe_scene,
                            qr_scene        = focusUser.qr_scene,
                            qr_scene_str    = focusUser.qr_scene_str,
                            createdBy       = user.Id,
                            createdByName   = user.Name,
                            modifiedBy      = user.Id,
                            modifiedByName  = user.Name,
                            createdOn       = DateTime.Now,
                            modifiedOn      = DateTime.Now,
                        };
                        return(wechat_user);
                    })
                                   .ToList();
                    broker.BulkCreateOrUpdate(dataList);
                    Logger.Debug($"创建或更新{dataList.Count}条关注用户信息");
                });
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 是否需要填充信息
        /// </summary>
        /// <returns></returns>
        public bool InfoFilled()
        {
            var user = Broker.Retrieve <user_info>(UserIdentityUtil.GetCurrentUserId());

            AssertUtil.CheckNull <SpException>(user, "未查询到用户", "BE999374-F0CF-4274-8D9D-1E436FBA6935");
            if (user.Id == UserIdentityUtil.ADMIN_ID)
            {
                return(false);
            }
            return(!user.gender.HasValue || AssertUtil.CheckEmpty(user.mailbox, user.cellphone, user.realname));
        }
Exemplo n.º 5
0
        public bool IsUp(string objectid)
        {
            var sql  = @"
SELECT * FROM upvote
WHERE objectid = @objectid AND createdby = @ownerid";
            var data = Broker.Retrieve <upvote>(sql, new Dictionary <string, object>()
            {
                { "@objectid", objectid }, { "@ownerid", UserIdentityUtil.GetCurrentUserId() }
            });

            return(data != null);
        }
Exemplo n.º 6
0
        public bool AllowCreateOrUpdateRole(string roleid)
        {
            var currentRoleId = Broker.Retrieve <user_info>(UserIdentityUtil.GetCurrentUserId())?.roleid;

            if (string.IsNullOrEmpty(currentRoleId))
            {
                return(false);
            }
            var toRoleId = roleid;

            return(Convert.ToInt32(toRoleId.FirstOrDefault().ToString()) >= Convert.ToInt32(currentRoleId.FirstOrDefault().ToString()));
        }
Exemplo n.º 7
0
        /// <summary>
        /// 修改密码
        /// </summary>
        /// <param name="password"></param>
        public void EditPassword(string password)
        {
            var sql       = $@"
UPDATE auth_user
SET password = @password
WHERE user_infoid = @id;
";
            var user      = UserIdentityUtil.GetCurrentUser();
            var paramList = new Dictionary <string, object>()
            {
                { "@id", user.Id }, { "@password", password }
            };

            Broker.Execute(sql, paramList);
        }
Exemplo n.º 8
0
 public FriendBlogProfile()
 {
     CreateMap <Jobs.SyncBlogJob.BlogDetail, FriendBlog.friend_blog>()
     .ForMember(dest => dest.Id, opt => opt.MapFrom(item => item.id))
     .ForMember(dest => dest.name, opt => opt.MapFrom(item => item.title))
     .ForMember(dest => dest.content, opt => opt.MapFrom(item => item.content))
     .ForMember(dest => dest.description, opt => opt.MapFrom(item => item.description))
     .ForMember(dest => dest.createdOn, opt => opt.MapFrom(item => item.createTime.ToDateTime()))
     .ForMember(dest => dest.createdBy, opt => opt.MapFrom(item => UserIdentityUtil.GetCurrentUserId()))
     .ForMember(dest => dest.createdByName, opt => opt.MapFrom(item => UserIdentityUtil.GetCurrentUser().Name))
     .ForMember(dest => dest.modifiedOn, opt => opt.MapFrom(item => item.updateTime.ToDateTime()))
     .ForMember(dest => dest.modifiedBy, opt => opt.MapFrom(item => UserIdentityUtil.GetCurrentUserId()))
     .ForMember(dest => dest.modifiedByName, opt => opt.MapFrom(item => UserIdentityUtil.GetCurrentUser().Name))
     .ForMember(dest => dest.first_picture, opt => opt.MapFrom(item => item.firstPicture));
 }
Exemplo n.º 9
0
        public IEnumerable <SelectOption> GetBasicRole()
        {
            var sql           = @"
select sys_roleid as Value, name as Name  from sys_role
where is_basic = 1 
";
            var dataList      = Broker.Query <SelectOption>(sql);
            var currentRoleId = Broker.Retrieve <user_info>(UserIdentityUtil.GetCurrentUserId())?.roleid;

            if (string.IsNullOrEmpty(currentRoleId))
            {
                return(new List <SelectOption>());
            }

            return(dataList.Where(item => UserIdentityUtil.IsOwner(currentRoleId, item.Value)));
        }
Exemplo n.º 10
0
        public override IList <message_remind> GetDataList(IList <SearchCondition> searchList, string orderBy, string viewId = "", string searchValue = "")
        {
            if (searchList.IsEmpty())
            {
                searchList = new List <SearchCondition>();
            }
            searchList.Add(new SearchCondition()
            {
                Name = "receiverid", Type = SearchType.Equals, Value = UserIdentityUtil.GetCurrentUserId()
            });
            var model = base.GetDataList(searchList, orderBy, viewId, searchValue);
            var ids   = model.Where(item => !item.is_read).Select(item => item.Id);

            ReadMessage(ids);
            return(model);
        }
Exemplo n.º 11
0
        public void RunOnce(string id)
        {
            var data      = GetData(id);
            var paramList = new Dictionary <string, object>()
            {
                { "Entity", data },
                { "User", UserIdentityUtil.GetAdmin() }
            };

            JobHelpers.RunOnceNow(data.name, data.robotidName, paramList);
            var jobState = JobHelpers.GetJobStatus(data.name, data.robotidName).ToSelectOption();

            data.job_state     = jobState.Value.ToString();
            data.job_stateName = jobState.Name;
            UpdateData(data);
        }
Exemplo n.º 12
0
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            base.OnActionExecuting(context);
            Log(context);

            var tokenHeader = context.HttpContext.Request.Headers["Authorization"].ToString()?.Replace("Bearer ", "");
            var user        = JwtHelper.SerializeJwt(tokenHeader);

            if (user != null)
            {
                UserIdentityUtil.SetCurrentUser(MapperHelper.Map <CurrentUserModel>(user));
            }
            else
            {
                UserIdentityUtil.SetCurrentUser(UserIdentityUtil.GetAnonymous());
            }
        }
Exemplo n.º 13
0
        public override void Executing(IJobExecutionContext context)
        {
            var broker = PersistBrokerFactory.GetPersistBroker();

            Logger.Debug("开始同步微信公众号图文素材");
            try
            {
                broker.ExecuteTransaction(() =>
                {
                    var result   = new WeChatNewsService(broker).GetDataList(1, 5000);
                    var user     = UserIdentityUtil.GetCurrentUser() ?? UserIdentityUtil.GetSystem();
                    var dataList = (from item in result.item
                                    let news = item.content.news_item.FirstOrDefault()
                                               select new wechat_news()
                    {
                        wechat_newsId = item.media_id,
                        html_content = new WeChatNewsMaterialService(broker).ConvertWeChatUrlToLocalUrl(news?.content),
                        media_id = item.media_id,
                        update_time = item.update_time,
                        name = news?.title,
                        author = news?.author,
                        digest = news?.digest,
                        thumb_media_id = news?.thumb_media_id,
                        content_source_url = news?.content_source_url,
                        createdBy = user.Id,
                        createdByName = user.Name,
                        modifiedBy = user.Id,
                        modifiedByName = user.Name,
                        createdOn = DateTime.Now,
                        modifiedOn = DateTime.Now,
                    })
                                   .ToList();
                    broker.BulkCreateOrUpdate(dataList);
                    Logger.Debug($"发现{result.item_count}篇文章需要同步");
                    Logger.Debug($"同步微信公众号图文素材成功,共同步:{dataList.Count()}篇文章");
                });
            }
            catch (Exception e)
            {
                Logger.Error("同步微信公众号图文素材失败", e);
            }
        }
Exemplo n.º 14
0
        /// <summary>
        /// 获取用户对实体的权限
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public EntityPrivilegeResponse GetPrivilege()
        {
            var sql       = @"
SELECT * FROM sys_role_privilege
WHERE sys_roleid = @id and object_type = 'sys_entity'
and objectid = @entityid";
            var user      = Broker.Retrieve <user_info>(UserIdentityUtil.GetCurrentUserId());
            var paramList = new Dictionary <string, object>()
            {
                { "@id", user.roleid }, { "@entityid", EntityCache.GetEntity(new T().EntityName)?.Id }
            };
            var data = Broker.Retrieve <sys_role_privilege>(sql, paramList);

            return(new EntityPrivilegeResponse()
            {
                read = data.privilege >= 1,
                create = data.privilege >= 3,
                delete = data.privilege >= 7
            });
        }
Exemplo n.º 15
0
        /// <summary>
        /// 注册作业
        /// </summary>
        public static void Start()
        {
            var logger = LogFactory.GetLogger("startup");
            var jobs   = ServiceContainer.ResolveAll <IJob>().ToList();

            StartService();
            logger.Info($"共发现{jobs.Count}个Job待运行");
            jobs.Each(item => {
                if (item == null)
                {
                    return;
                }

                // 创建 Job
                var instance = item as JobBase;

                if (sched.CheckExists(instance.JobKey).Result)
                {
                    return;
                }

                var job = instance.GetJobBuilder().Build();
                job.JobDataMap.Add("User", UserIdentityUtil.GetSystem());

                var triggerBuilder = instance.GetTriggerBuilder();

                if (triggerBuilder != null)
                {
                    // 创建 trigger
                    ITrigger trigger = triggerBuilder.Build();
                    // 使用 trigger 规划执行任务 job
                    sched.ScheduleJob(job, trigger);
                    logger.Info($"作业[{instance.Name}]运行成功");
                    if (instance.DefaultTriggerState == TriggerState.Paused)
                    {
                        sched.PauseTrigger(trigger.Key);
                    }
                }
            });
        }
Exemplo n.º 16
0
        /// <summary>
        /// 任务执行
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            var user = context.JobDetail.JobDataMap.Get("User") as CurrentUserModel;

            return(Task.Factory.StartNew(() =>
            {
                Logger.Debug($"作业:{Name} 开始执行");

                var stopWatch = new Stopwatch();
                stopWatch.Start();
                var broker = PersistBrokerFactory.GetPersistBroker();
                UserIdentityUtil.SetCurrentUser(user);
                try
                {
                    broker.ExecuteTransaction(() =>
                    {
                        Executing(context);
                        // 更新下次执行时间
                        var nextTime = JobHelpers.GetJobNextTime(Name);
                        var nextTimeSql = "";
                        var paramList = new Dictionary <string, object>()
                        {
                            { "@time", DateTime.Now },
                            { "@name", Name }
                        };
                        paramList.Add("@nextTime", nextTime.UtcDateTime);
                        nextTimeSql = ", nextruntime = @nextTime";
                        broker.Execute($"UPDATE job SET lastruntime = @time {nextTimeSql} WHERE name = @name", paramList);
                    });
                }
                catch (Exception e)
                {
                    Logger.Error($"作业:{Name}执行异常", e);
                    throw e;
                }
                stopWatch.Stop();
                Logger.Debug($"作业:{Name} 执行结束,耗时{stopWatch.ElapsedMilliseconds}ms");
            }));
        }
Exemplo n.º 17
0
        public Task Execute(IJobExecutionContext context)
        {
            var user = context.JobDetail.JobDataMap.Get("User") as CurrentUserModel;

            return(Task.Factory.StartNew(() =>
            {
                var stopWatch = new Stopwatch();
                stopWatch.Start();
                Logger.Debug($"作业:{Name} 开始执行");
                try
                {
                    UserIdentityUtil.SetCurrentUser(user);
                    Executing(context);
                }
                catch (Exception e)
                {
                    Logger.Error($"作业:{Name}执行异常", e);
                }
                stopWatch.Stop();
                Logger.Debug($"作业:{Name} 执行结束,耗时{stopWatch.ElapsedMilliseconds}ms");
            }));
        }
Exemplo n.º 18
0
        /// <summary>
        /// 生成权限
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="role"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static sys_role_privilege GenerateRolePrivilege(BaseEntity entity, sys_role role, int value)
        {
            var user      = UserIdentityUtil.GetSystem();
            var privilege = new sys_role_privilege()
            {
                Id             = Guid.NewGuid().ToString(),
                objectid       = entity.Id,
                objectidName   = entity.name,
                object_type    = entity.EntityName,
                sys_roleid     = role.Id,
                sys_roleidName = role.name,
                createdBy      = user.Id,
                createdByName  = user.Name,
                createdOn      = DateTime.Now,
                modifiedBy     = user.Id,
                modifiedByName = user.Name,
                modifiedOn     = DateTime.Now,
                privilege      = value
            };

            return(privilege);
        }
Exemplo n.º 19
0
        /// <summary>
        /// 是否有进入后台权限
        /// </summary>
        /// <returns></returns>
        public bool GetShowAdmin()
        {
            var userId = UserIdentityUtil.GetCurrentUserId();

            if (string.IsNullOrEmpty(userId))
            {
                return(false);
            }

            var user = Broker.Retrieve <user_info>(userId);

            if (user == null)
            {
                return(false);
            }

            if (user.roleid != UserIdentityUtil.ANONYMOUS_ID)
            {
                return(true);
            }

            return(false);
        }
Exemplo n.º 20
0
        /// <summary>
        /// 获取未读消息数量
        /// </summary>
        /// <returns></returns>
        public object GetUnReadMessageCount()
        {
            var userid    = UserIdentityUtil.GetCurrentUserId();
            var paramList = new Dictionary <string, object>()
            {
                { "@id", userid }
            };
            var sql     = @"
SELECT COUNT(1)
FROM message_remind
WHERE receiverid = @id AND is_read = 0";
            var total   = Broker.ExecuteScalar(sql, paramList);
            var upvote  = Broker.ExecuteScalar($"{sql} AND message_type = 'upvote'", paramList);
            var comment = Broker.ExecuteScalar($"{sql} AND message_type IN ('comment', 'reply')", paramList);
            var system  = Broker.ExecuteScalar($"{sql} AND message_type = 'system'", paramList);

            return(new
            {
                total = Convert.ToInt32(total),
                upvote = Convert.ToInt32(upvote),
                comment = Convert.ToInt32(comment),
                system = Convert.ToInt32(system)
            });
        }
Exemplo n.º 21
0
        /// <summary>
        /// 注册job
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="name"></param>
        /// <param name="group"></param>
        /// <param name="param"></param>
        /// <param name="cronExperssion"></param>
        public static void RegisterJob(DynamicJobBase job, BaseEntity entity, TriggerState state)
        {
            StartService();

            if (sched.CheckExists(job.JobKey).Result)
            {
                return;
            }

            var jobDetail = job.GetJobBuilder().Build();

            jobDetail.JobDataMap.Add("Entity", entity);
            jobDetail.JobDataMap.Add("User", UserIdentityUtil.GetAdmin());

            ITrigger trigger = job.GetTriggerBuilder()
                               .Build();

            sched.ScheduleJob(jobDetail, trigger).Wait();

            if (state == TriggerState.Paused)
            {
                sched.PauseTrigger(trigger.Key);
            }
        }
 /// <summary>
 /// 获取权限条件
 /// </summary>
 /// <param name="broker"></param>
 /// <returns></returns>
 public static string GetFilteredSql(this IPersistBroker broker, string ownerName = "createdBy")
 {
     AssertUtil.CheckIsNullOrEmpty <SpException>(UserIdentityUtil.GetCurrentUserId(), "无法获取当前用户", "11F1C19C-D69E-4A46-BAB6-BAE84E32F7B2");
     return(" AND {0}." + ownerName + $" = '{UserIdentityUtil.GetCurrentUserId()}'");
 }
Exemplo n.º 23
0
 public LoginResponse SignInOrSignUp(LoginRequest model)
 {
     UserIdentityUtil.SetCurrentUser(UserIdentityUtil.GetSystem());
     return(new SystemService().SignInOrSignUp(model));
 }
Exemplo n.º 24
0
 public user_info GetData()
 {
     return(Broker.Retrieve <user_info>(UserIdentityUtil.GetCurrentUserId()));
 }
Exemplo n.º 25
0
 public string ResetPassword(string id)
 {
     UserIdentityUtil.SetCurrentUser(UserIdentityUtil.GetSystem());
     return(new MailVertificationService().ResetPassword(id));
 }
Exemplo n.º 26
0
 public string ActivateUser(string id)
 {
     UserIdentityUtil.SetCurrentUser(UserIdentityUtil.GetSystem());
     return(new MailVertificationService().ActivateUser(id));
 }
Exemplo n.º 27
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public LoginResponse Login(LoginRequest model)
        {
            var code      = model.code;
            var pwd       = model.password;
            var publicKey = model.publicKey;

            UserIdentityUtil.SetCurrentUser(UserIdentityUtil.GetSystem());

            var authUser = Broker.Retrieve <auth_user>("SELECT * FROM auth_user WHERE lower(code) = lower(@code)", new Dictionary <string, object>()
            {
                { "@code", code }
            });

            if (authUser == null)
            {
                return(new LoginResponse()
                {
                    result = false, message = "用户名或密码错误"
                });
            }

            if (authUser.is_lock)
            {
                return(new LoginResponse()
                {
                    result = false, message = "用户已被锁定,请联系管理员"
                });
            }

            if (string.IsNullOrEmpty(pwd) ||
                string.IsNullOrEmpty(publicKey) ||
                !string.Equals(authUser.password, RSAUtil.Decrypt(pwd, publicKey))
                )
            {
                var message = "用户名或密码错误";
                if (!authUser.try_times.HasValue)
                {
                    authUser.try_times = 1;
                }
                else
                {
                    authUser.try_times += 1;
                    if (authUser.try_times > 1)
                    {
                        message = $"用户名或密码已连续错误{authUser.try_times}次,超过五次账号锁定";
                    }
                }

                if (authUser.try_times >= 5)
                {
                    authUser.is_lock = true;
                    message          = $"用户已被锁定,请联系管理员";
                }

                Broker.Update(authUser);
                return(new LoginResponse()
                {
                    result = false, message = message
                });
            }

            if (authUser.try_times > 0)
            {
                authUser.try_times = 0;
            }
            authUser.last_login_time = DateTime.Now;
            Broker.Update(authUser);

            // 返回登录结果、用户信息、用户验证票据信息
            var oUser = new LoginResponse
            {
                result   = true,
                userName = code,
                token    = JwtHelper.CreateToken(new JwtTokenModel()
                {
                    Code = authUser.code, Name = authUser.name, Role = authUser.code, Uid = authUser.Id
                }),
                userId  = authUser.user_infoid,
                message = "登录成功"
            };

            return(oUser);
        }
Exemplo n.º 28
0
        public static IApplicationBuilder UseEntityWatcher(this IApplicationBuilder app)
        {
            var logger = LogFactory.GetLogger("entity");

            UserIdentityUtil.SetCurrentUser(UserIdentityUtil.GetSystem());
            var broker     = PersistBrokerFactory.GetPersistBroker();
            var dialect    = broker.DbClient.Driver;
            var entityList = ServiceContainer.ResolveAll <IEntity>().OrderByDescending(item => item.GetEntityName() == typeof(sys_attrs).Name);

            broker.ExecuteTransaction(() =>
            {
                #region 创建表
                entityList.Each(item =>
                {
                    var entity = broker.Query(dialect.GetTable(item.GetEntityName()));
                    var attrs  = item.GetAttrs();
                    if (entity == null || entity.Rows.Count == 0)
                    {
                        var attrSql = attrs
                                      .Select(e =>
                        {
                            return($"{e.Name} {e.Type.GetDescription()}{(e.Length != null ? $"({e.Length.Value})" : "")} {(e.IsRequire.HasValue && e.IsRequire.Value ? "NOT NULL" : "")}{(e.Name == $"{item.GetEntityName()}id" ? " PRIMARY KEY" : "")}");
                        })
                                      .Aggregate((a, b) => a + ",\r\n" + b);

                        // 创建表
                        var sql = $@"CREATE TABLE public.{item.GetEntityName()} ({attrSql})";
                        broker.Execute(sql);
                        logger.Info($"实体{item.GetLogicalName()}({item.GetEntityName()})创建成功");
                    }
                });
                #endregion

                #region 创建实体记录和实体字段数据
                entityList.Each(item =>
                {
                    #region 实体添加自动写入记录
                    var entityName = item.GetEntityName();
                    var entity     = broker.Retrieve <sys_entity>("select * from sys_entity where code = @code", new Dictionary <string, object>()
                    {
                        { "@code", entityName }
                    });
                    if (entity == null)
                    {
                        entity = new sys_entity()
                        {
                            Id     = Guid.NewGuid().ToString(),
                            name   = item.GetLogicalName(),
                            code   = item.GetEntityName(),
                            is_sys = item.IsSystemEntity()
                        };
                        broker.Create(entity, false);
                    }
                    #endregion

                    var attrs     = item.GetAttrs();
                    var attrsList = new SysEntityService(broker).GetEntityAttrs(entity.Id).Select(e => e.code);

                    #region 实体字段变更(删除字段)
                    attrsList.Each(attr =>
                    {
                        if (!attrs.Any(item => item.Name.ToLower() == attr.ToLower()))
                        {
                            var sql = @"DELETE FROM sys_attrs WHERE lower(code) = @code AND entityid = @entityid";
                            broker.Execute(sql, new Dictionary <string, object>()
                            {
                                { "@code", attr.ToLower() }, { "@entityid", EntityCache.GetEntity(item.GetEntityName())?.Id }
                            });
                            sql = broker.DbClient.Driver.GetDropColumnSql(item.GetEntityName(), new List <Column>()
                            {
                                new Column()
                                {
                                    Name = attr
                                }
                            });
                            broker.Execute(sql);
                            logger.Debug($"实体{item.GetLogicalName()} ({item.GetEntityName()})删除字段:{attr}");
                        }
                    });
                    #endregion

                    #region 实体字段变更(新增字段)
                    attrs.Each(attr =>
                    {
                        if (!attrsList.Contains(attr.Name))
                        {
                            var _attr = new sys_attrs()
                            {
                                Id            = Guid.NewGuid().ToString(),
                                name          = attr.LogicalName,
                                code          = attr.Name,
                                entityid      = entity.Id,
                                entityidname  = entity.name,
                                entityCode    = entity.code,
                                attr_type     = attr.Type.ToString().ToLower(),
                                attr_length   = attr.Length,
                                isrequire     = attr.IsRequire.HasValue && attr.IsRequire.Value,
                                default_value = ConvertUtil.ConToString(attr.DefaultValue)
                            };
                            broker.Create(_attr);
                            logger.Debug($"实体{item.GetLogicalName()}({item.GetEntityName()})创建字段:{attr.LogicalName}({attr.Name})成功");
                        }
                    });
                    #endregion
                });

                #endregion

                #region 执行版本更新脚本
                {
                    var vLogger = LogFactory.GetLogger("version");
                    FileHelper.GetFileList("*.sql", FolderType.Version)
                    .OrderBy(item => Path.GetFileName(item))
                    .ToList()
                    .Each(sqlFile =>
                    {
                        try
                        {
                            var count = new VersionScriptExecutionLogService(broker).ExecuteScript(sqlFile);
                            if (count == 1)
                            {
                                vLogger.Info($"脚本:{Path.GetFileName(sqlFile)}执行成功");
                            }
                        }
                        catch (Exception ex)
                        {
                            vLogger.Error($"脚本:{Path.GetFileName(sqlFile)}执行失败", ex);
                        }
                    });
                }
                #endregion
            });

            return(app);
        }