【顶】报表模块自动化设计

  也不知道干啥,跑来写写博客。看到很多的框架都不搭建一套自动化的模块,费事;作为一个成熟的框架力软或者大公司积累还是有这功能的,这里我们不要求多成熟,从简单配置开始,达到我们需要功能就OK

  适用于2年(对泛型有深入了解就行)左右的开发人员自己搭建特么是ERP之类的,游戏运维后台这些

  正题:

    基础框架权限【用户-角色-模块】中后期模块自动化处理的方案,减少大量繁琐的cs等创建时间;

    功能:代码处理生成所需的数据报表(抽取的运营数据,日志分析,销售额度,绩效...)

    附带功能:可视化图形

    适用角色:后台、运维    

  第一步 

    还是先创建Module模块(url,name,code...),至于 url 则是我们的重点,平时都是与之对应的响应地址,这里我们将是一个公用地址(配置的报表都从这里路过),那么所有的报表都走这里,如何区分不同?

  下面是一个简化版的界面

 

    没错,正如你们所看到的一样,code以及sql,sql就是我们自己写的,报表sql当然我们都会写,那么在建设过程中我们还会遇到什么样的问题呢?

    (1)【参数】作为查询,怎么能没有参数呢?参数分为2种:一种是查询字段参数查询,一种是登录信息参数查询。我们可以根据sql查询返回的数据【重点(我们后台返回的数据肯定是未知的对象 例:SqlQuery<decimal>,说明下EF Core里面没有只有FromSql并且返回类型还必须是继承Entity的)】建立可编辑Table其中比较重要列应该包含:是否显示该查询列名(我们不可能给客户看字段名称)、数据类型下拉(sql查询需要自动该类似int,string,datetime),还需要依照情况添加,当然不需要查询直接忽略;第二种参数则是sql中查询碰到用户权限的时候@(UserID)登录信息这种持久参数,后台系统自己写正则识别匹配

public IQueryable<T> SqlQuery<T>(string sql, params object[] parameters) where T: class
{
     return _dbContextProvider.GetDbContext().Set<T>().FromSql(sql, parameters).AsQueryable();
}

    (2)CRUD大家都熟悉吧,那么我们后台用这个模块的时候CRUD如何设计?简单粗暴直接写4个开关按钮,当选择的时候,后台自动写代码生成器→别怕写代码生成器VS为你保驾护航   后面我会写个博文(当然是基础版的代码生成(减少创建cs这些的时间,现在的框架分层都比较多,都知道的))类创建了肯定没有包含进解决方案,需要手动包涵下,既然要写代码生成,那么我们的访问路径,创建文件夹名称这些如何设定→CODE参数根据不可重复性的code参数来创建,当然方法不唯一

    (3)数据的导出开关→基于sql数据导出公用类自己网上找,这样我们的Module创建就完成了第一步

 

   第二步 

    我们的sql,表头都有了,现在呢?搭建显示界面咯。根据sql有了数据,根据title知道列名,再给你一个Table.js插件,你搭建不出一个显示界面?

 

  第三步 

    前面我们说了。我们可以添加一些辅助的功能,有以下2个比较重要:

    (1)多表头(水晶报表)

    (2)数据可视化

    如下面的一个多表头(水晶报表)未接触人员可以去看看,此多表头的自动化处理方法难点,开始我基于递归的树形结构规律做了一个,但是交互不强,我建议让高级前端人员做交互(每一个小的单元格为一个点,每个大的单元格点击能有上下左右一些添加按钮基于excel),最后根据所使用得Table.js多表头规则生成对应的数据保存,

     

    数据可视化方案其实就是根据Charts的API文档解析出需要的图形类型,抽取重要参数进行的二次开发!

 

    后面找了一个原公司项目中界面,保密协议还没过,看看表格,希望对开源框架中功能完善有帮助

 2018/03/02

    最近看了使用了下根据实体生成对应的代码(代码生成器);原理,根据自身的框架的分层结构-构件对应层级的txt文档,{{替换NAME}},File生成产生对应的.cs文档

  

 

  

posted @ 2018-01-17 18:28  Frank.Deng  阅读(216)  评论(0编辑  收藏  举报