Ejemplo n.º 1
0
        /// <summary>
        /// 获取文件流
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Stream GetStream(string id)
        {
            var broker = PersistBrokerFactory.GetPersistBroker();
            var data   = broker.Retrieve <sys_file>(id);

            return(FileUtil.GetFileStream(data.GetFilePath()));
        }
Ejemplo n.º 2
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}条关注用户信息");
                });
            }
        }
Ejemplo n.º 3
0
 public static sys_entity GetEntity(string entityName)
 {
     return(Entities.GetOrAdd(EntityCachePrefix + entityName, (key) =>
     {
         var broker = PersistBrokerFactory.GetPersistBroker();
         var data = broker.Retrieve <sys_entity>("select * from sys_entity where code = @name", new Dictionary <string, object>()
         {
             { "@name", entityName }
         });
         return data;
     }));
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 获取用户权限信息
 /// </summary>
 /// <param name="userId"></param>
 /// <returns></returns>
 public static IEnumerable <sys_role_privilege> GetUserPrivileges(string userId)
 {
     return(UserPrivliege.GetOrAdd(UserPrivilegesPrefix + userId, (key) =>
     {
         var broker = PersistBrokerFactory.GetPersistBroker();
         var user = broker.Retrieve <auth_user>(userId);
         return broker.RetrieveMultiple <sys_role_privilege>("select * from sys_role_privilege where sys_roleid = @id", new Dictionary <string, object>()
         {
             { "@id", user.roleid }
         }).ToList();
     }));
 }
Ejemplo n.º 5
0
        public void Execute(string id)
        {
            if (Broker == null)
            {
                Broker = PersistBrokerFactory.GetPersistBroker();
            }

            Broker.ExecuteTransaction(() =>
            {
                blog data      = Broker.Retrieve <blog>(id);
                var contentUrl = $"{SystemConfig.Config.Protocol}://{SystemConfig.Config.Domain}/#/blog/{id}";
                AssertUtil.CheckIsNullOrEmpty <SpException>(data.surfaceid, "请上传博客封面", "4365FB1F-2EE7-40CF-852C-F6CFA71E8DE2");

                // 如果封面素材未上传则创建封面素材
                string mediaId = Broker.Retrieve <wechat_material>("SELECT * FROM wechat_material WHERE sys_fileid = @id", new Dictionary <string, object>()
                {
                    { "@id", data.surfaceid }
                })?.media_id;
                if (string.IsNullOrEmpty(mediaId))
                {
                    mediaId = new WeChatMaterialService(Broker).CreateData(MaterialType.image, data.big_surfaceid)?.media_id;
                }

                // 未创建图文素材则创建,已创建则更新
                if (string.IsNullOrEmpty(data.wechat_newsid))
                {
                    data.wechat_newsid = new WeChatNewsService(Broker).CreateData(data.title, mediaId, data.createdByName, "", true, data.html_content, contentUrl, true, false);
                }
                else
                {
                    // 如果图文素材已经被删除,则创建
                    var news = Broker.Retrieve <wechat_news>(data.wechat_newsid);
                    if (news == null)
                    {
                        data.wechat_newsid = new WeChatNewsService(Broker).CreateData(data.title, mediaId, data.createdByName, "", true, data.html_content, contentUrl, true, false);
                    }
                    else
                    {
                        news.html_content       = data.html_content;
                        news.thumb_media_id     = mediaId;
                        news.content_source_url = contentUrl;
                        new WeChatNewsService(Broker).UpdateData(news);
                    }
                }

                // 图文素材id回写到博客
                Broker.Update(data);
            });
        }
Ejemplo n.º 6
0
        public static IApplicationBuilder UseSysRole(this IApplicationBuilder app)
        {
            var roles  = ServiceContainer.ResolveAll <IRole>();
            var broker = PersistBrokerFactory.GetPersistBroker();

            new SysRolePrivilegeService(broker).CreateRoleMissingPrivilege();

            // 权限读取到缓存
            roles.Each(item => MemoryCacheUtil.Set(item.GetRoleKey, new RolePrivilegeModel()
            {
                Role = item.GetSysRole(), Privileges = item.GetRolePrivilege()
            }, 3600 * 12));

            return(app);
        }
 public static IDataProvider DataProvider(IPersistBroker persistBroker, System.Globalization.CultureInfo cultureInfo)
 {
     if (cultureInfo == null)
     {
         cultureInfo = new System.Globalization.CultureInfo("en-US", false);
     }
     if (persistBroker == null)//目前只返回sqlserver的privider
     {
         return(new SQLDataProvider(PersistBrokerFactory.PersistBroker(cultureInfo), cultureInfo));
     }
     else
     {
         return(new SQLDataProvider(persistBroker, cultureInfo));
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        /// 获取头像
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IActionResult GetAvatar(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                return(null);
            }
            var broker = PersistBrokerFactory.GetPersistBroker();
            var user   = broker.Retrieve <user_info>(id);

            if (!string.IsNullOrEmpty(user?.avatar))
            {
                var config = StoreConfig.Config;
                return(ServiceContainer.Resolve <IStoreStrategy>(config?.Type).DownLoad(user.avatar)?.Result);
            }
            return(IdenticonResult.FromValue(id, 64));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="filePath"></param>
        public async Task <IActionResult> DownLoad(string objectId)
        {
            var broker = PersistBrokerFactory.GetPersistBroker();
            var data   = broker.Retrieve <sys_file>(objectId) ?? broker.Retrieve <sys_file>("select * from sys_file where hash_code = @id", new Dictionary <string, object>()
            {
                { "@id", objectId }
            });
            var fileInfo = new FileInfo(data.GetFilePath());

            if (fileInfo.Exists)
            {
                var stream = await FileUtil.GetFileStreamAsync(fileInfo.FullName);

                HttpCurrentContext.Response.Headers.Add("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileInfo.Name, System.Text.Encoding.UTF8));
                return(new FileStreamResult(stream, "application/octet-stream"));
            }
            LogUtils.Error($"文件{fileInfo.Name}未找到,文件路径:{fileInfo.FullName}");
            throw new FileNotFoundException();
        }
Ejemplo n.º 10
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);
            }
        }
Ejemplo n.º 11
0
        public override void Executing(IJobExecutionContext context)
        {
            var entity = context.JobDetail.JobDataMap.Get("Entity") as robot_message_task;
            var broker = PersistBrokerFactory.GetPersistBroker();
            var robot  = broker.Retrieve <robot>(entity.robotid);

            try
            {
                var client = RobotClientFacotry.GetClient(robot.robot_type, robot.hook);
                client.SendTextMessage(entity.content);
                Logger.Debug($"机器人[{robot.name}]发送了一条消息[{entity.content}]");
            }
            catch (Exception e)
            {
                Logger.Error($"机器人[{robot.name}]的消息[{entity.name}]发送失败", e);
                entity.job_state     = "3";
                entity.job_stateName = "错误";
                broker.Update(entity);
            }
        }
Ejemplo n.º 12
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");
            }));
        }
Ejemplo n.º 13
0
        public override void Executing(IJobExecutionContext context)
        {
            var broker = PersistBrokerFactory.GetPersistBroker();
            var count  = 0;

            Logger.Debug("开始同步谢振国博客");
            try
            {
                broker.ExecuteTransaction(() =>
                {
                    var result    = HttpUtil.Get("http://122.51.132.149:8081/index?index=0&offset=5000");
                    var blogModel = JsonConvert.DeserializeObject <BlogModel>(result);
                    if (result != null && blogModel.statuscode == 200)
                    {
                        Logger.Debug($"共发现{blogModel.data.Count}篇博客待同步");
                        var dataList = blogModel.data
                                       .Select(item => MapperHelper.Map <friend_blog>(item))
                                       .ToList();
                        dataList.Each(item => item.author = "谢振国");
                        count = dataList.Count;
                        broker.BulkCreateOrUpdate(dataList, new List <string>()
                        {
                            "content", "first_picture", "author", "description", "modifiedon", "modifiedbyname", "modifiedby"
                        });
                    }
                });
            }
            catch (Exception e)
            {
                Logger.Error("同步博客出现异常", e);
            }
            finally
            {
                Logger.Debug($"同步谢振国博客结束,共同步{count}篇博客");
            }
        }
Ejemplo n.º 14
0
 public static IDataProvider DataProvider(DBType type, string connectString)
 {
     return(DataProvider(PersistBrokerFactory.PersistBroker(type, connectString), new System.Globalization.CultureInfo("en-US", false)));
 }
Ejemplo n.º 15
0
 static SysConfigFactory()
 {
     broker = PersistBrokerFactory.GetPersistBroker();
 }
Ejemplo n.º 16
0
 public EntityContextBase()
 {
     Broker = PersistBrokerFactory.GetPersistBroker();
 }
Ejemplo n.º 17
0
        public override void Executing(IJobExecutionContext context)
        {
            var broker = PersistBrokerFactory.GetPersistBroker();

            Logger.Debug("开始同步微信公众号素材");
            var user = broker.Retrieve <user_info>("5B4A52AF-052E-48F0-82BB-108CC834E864");

            try
            {
                var images = new WeChatMaterialService(broker).GetMaterial(MaterialType.image.ToMaterialTypeString(), 1, 5000);
                if (images.item_count == 0)
                {
                    Logger.Debug($"未发现图片待同步");
                }
                else
                {
                    Logger.Debug($"发现共{images.item_count}张图片待同步");
                    images.item.ForEach(item =>
                    {
                        var data = broker.Retrieve <wechat_material>(item.media_id);
                        if (data == null)
                        {
                            var material = new wechat_material()
                            {
                                wechat_materialId = item.media_id,
                                media_id          = item.media_id,
                                url            = item.url,
                                name           = item.name,
                                type           = MaterialType.image.ToMaterialTypeString(),
                                createdBy      = user.Id,
                                createdByName  = user.name,
                                modifiedBy     = user.Id,
                                modifiedByName = user.name,
                                modifiedOn     = DateTime.Now,
                                createdOn      = DateTime.Now
                            };
                            broker.Create(material);
                        }
                        Logger.Debug($"同步图片{item.name}成功");
                    });
                    Logger.Debug($"微信图片素材同步成功,共同步{images.item_count}个");
                }


                var voices = new WeChatMaterialService(broker).GetMaterial(MaterialType.voice.ToMaterialTypeString(), 1, 5000);
                if (voices.item_count == 0)
                {
                    Logger.Debug($"未发现语音待同步");
                }
                else
                {
                    Logger.Debug($"发现共{images.item_count}个语音待同步");
                    voices.item.ForEach(item =>
                    {
                        var data = broker.Retrieve <wechat_material>(item.media_id);
                        if (data == null)
                        {
                            var material = new wechat_material()
                            {
                                wechat_materialId = item.media_id,
                                media_id          = item.media_id,
                                url            = item.url,
                                sys_fileid     = "",
                                name           = item.name,
                                type           = MaterialType.voice.ToMaterialTypeString(),
                                createdBy      = user.Id,
                                createdByName  = user.name,
                                modifiedBy     = user.Id,
                                modifiedByName = user.name,
                                modifiedOn     = DateTime.Now,
                                createdOn      = DateTime.Now
                            };
                            broker.Create(material);
                        }
                        Logger.Debug($"同步语音{item.name}成功");
                    });
                    Logger.Debug($"微信语音素材同步成功,共同步{images.item_count}个");
                }


                var videos = new WeChatMaterialService(broker).GetMaterial(MaterialType.video.ToMaterialTypeString(), 1, 5000);
                if (voices.item_count == 0)
                {
                    Logger.Debug($"未发现视频待同步");
                }
                else
                {
                    Logger.Debug($"发现共{images.item_count}个视频待同步");
                    videos.item.ForEach(item =>
                    {
                        var data = broker.Retrieve <wechat_material>(item.media_id);
                        if (data == null)
                        {
                            var material = new wechat_material()
                            {
                                wechat_materialId = item.media_id,
                                media_id          = item.media_id,
                                url            = item.url,
                                sys_fileid     = "",
                                name           = item.name,
                                type           = MaterialType.video.ToMaterialTypeString(),
                                createdBy      = user.Id,
                                createdByName  = user.name,
                                modifiedBy     = user.Id,
                                modifiedByName = user.name,
                                modifiedOn     = DateTime.Now,
                                createdOn      = DateTime.Now
                            };
                            broker.Create(material);
                            Logger.Debug($"同步视频{item.name}成功");
                        }
                    });
                    Logger.Debug($"微信视频素材同步成功,共同步{videos.item_count}个");
                }
            }
            catch (Exception ex)
            {
                Logger.Debug($"微信素材同步失败");
                Logger.Error($"{ex.Message}\r\n{ex.StackTrace}");
            }
        }
Ejemplo n.º 18
0
        public IEnumerable <SelectOption> GetOptions()
        {
            var broker = PersistBrokerFactory.GetPersistBroker();

            return(broker.Query <SelectOption>($"select code AS Value, name AS Name from sys_entity"));
        }
Ejemplo n.º 19
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);
        }
Ejemplo n.º 20
0
 public AnalysisService()
 {
     broker = PersistBrokerFactory.GetPersistBroker();
 }
Ejemplo n.º 21
0
 public SystemService()
 {
     Broker = PersistBrokerFactory.GetPersistBroker();
 }
Ejemplo n.º 22
0
 public FocusUserService()
 {
     broker = PersistBrokerFactory.GetPersistBroker();
     logger = LogFactory.GetLogger("wechat");
 }