/// <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())); }
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}条关注用户信息"); }); } }
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; })); }
/// <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(); })); }
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); }); }
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)); } }
/// <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)); }
/// <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(); }
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); } }
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); } }
/// <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"); })); }
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}篇博客"); } }
public static IDataProvider DataProvider(DBType type, string connectString) { return(DataProvider(PersistBrokerFactory.PersistBroker(type, connectString), new System.Globalization.CultureInfo("en-US", false))); }
static SysConfigFactory() { broker = PersistBrokerFactory.GetPersistBroker(); }
public EntityContextBase() { Broker = PersistBrokerFactory.GetPersistBroker(); }
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}"); } }
public IEnumerable <SelectOption> GetOptions() { var broker = PersistBrokerFactory.GetPersistBroker(); return(broker.Query <SelectOption>($"select code AS Value, name AS Name from sys_entity")); }
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); }
public AnalysisService() { broker = PersistBrokerFactory.GetPersistBroker(); }
public SystemService() { Broker = PersistBrokerFactory.GetPersistBroker(); }
public FocusUserService() { broker = PersistBrokerFactory.GetPersistBroker(); logger = LogFactory.GetLogger("wechat"); }