这里说的大屏是指大屏幕报表展示,现在,它还有许多酷炫的叫法,诸如:仪表盘,驾驶舱,或者更加洋气的BI。
村长经常溜娃的宁波图书馆也有这么一块大屏:

如何实现这些高逼格、酷炫狂拽屌炸天的大屏呢?
答案往下拉:
第一,需要一个大屏幕,经济方案可以找几个超薄边框显示器(壁挂电视)拼接,6个或9个。例如下面这个是大神wang sir的树莓派6分屏大屏:

第二,需要数据,通常这些数据来自ERP等企业信息化系统,例如用ju/nx/es汇集一个数据表或视图如下:

第三,需要前端html5模板,以及后端api获取ERP中的数据,最终demo使用百度sugar做为前端,效果如下:

经过村长攻关后,esap-api已经可以轻松对接百度sugarBI了,所以技术方面就只剩下设置了。
主要有三种类型的api设置:
esap-api: /api4/模板id
输出字段:value

esap-api: /api3/模板id
输出字段:value,name

esap-api: /api5/模板id
输出字段:value,name,cate

esap-api: /api6/模板id
输出字段: 任意

目前sugar为免费使用,其他效果如下:



使用esap-api连接数据库和sugarBI,实现大屏展示。
2019-05-27
目前sugar已经开始收费了……
客户甲:我们在某个孤岛上有个塔台监测站,没有网络,如何把电脑数据传回大陆机房。
客户乙:我们的生产线工控机有很多机密数据,不能连网,如何把工控机的部分数据传回数据中心。
在电脑没网线,没WIFI的情况下,通常选择GPRS来定向传输,下面就是采集小外设:
SIM800C+GPRS物联卡

直接插在电脑USB接口上即可

安装USB转串口驱动后,会得到一个COM口,这里是COM3

使用NX3.1为例,设置打开串口按钮

设置连接GRPS按钮,示例中的tcpwc.erp8.net:19999就是远程数据中心主机

设置自动发送数据按钮,数据区域的记录将会使用AT+CIPSEND逐条发送到远程主机。

动画中可以看到远程主机与本地的通信和传输过程:

读取工控机数据库,串口通信发给SIM800C,通过GPRS让数据飞一会,最终到达数据中心。

2019-04-30
定期扫描数据表,将结果以表格形式发给相关人。
这里假设用户扫描商品表并发送结果,扫描结果如下:

在ESAP根目录/sql/esap目录下复制email.get和email.put模板文件,修改为自定义模板,例如加入后缀.my

email.get副本中的sql代码如下:
自定义邮件配置,仍然使用ES系统邮件配置
{{define "email.conf.my"}}
SELECT
	isnull(SmtpServer,'') server,
	isnull(SmtpPort,0) port,
	isnull(SmtpAuth,0) auth,
	isnull(SmtpUseSSL,0) ssl,
	isnull(EmailSender,'') sender,
	isnull(EmailAddress,'') addr,
	isnull(EmailPassword,'') pwd 
FROM essystem..es_sysinfo
{{end}}
自定义邮件提醒
{{define "email.my"}}
select 
	'woylyn@qq.com' mailto,
	'备库提醒' subject,
	'下列商品请注意备库存:<br><table border="1">' + replace(
		(select '品号' as th ,'品名' as th_,'类别' as th__,'库存' as th___ for xml path('tr')) 
		+ (select 号 as td , 名 as td_,类 as td__,0 as td___ from 品 for xml path('tr')
		),'_','') + '</table>' content, 
	'' pic,
	'' files,
	0 id,
	'' mailfrom,
	'' pwd
{{end}}
自定义邮件扫描sql代码执行效果如下,主要使用replace函数和for xml path拼接构造html表格标签。

email.put副本中的sql代码如下,是个空模板,不做任何操作:
{ {define "email.my"} }
{ {end} }
配置esap,加入邮件提醒计划,设置每天9点,配置加入后缀.my,启动即可。


加入样式,实现更美观的表格邮件:


1.主要应用esap自定义邮件提醒,使用自定义sql模板。
2.使用replace函数和for xml path拼接构造html表格标签
本文示例ES数据库与往期相同,不再提供额外下载。
2019-04-24
A公司提供appid和appkey给B公司,B公司使用appid和appkey先从A公司API拿到access_token,再用access_token去请求其他业务数据。
典型的Oauth2鉴权,让数据请求更加安全。

本案演示如何使用ESAP实现完整的请求和处理流程。
改造上一篇文章的demo系统,加入oauth2模板。
主要包含appid,appkey和keyword三个关键字段,appid和appkey分发给不同供应商使用。

加入accesstoken模板,用于存放accesstoken鉴权,主要包括keyword,accesstoken,createtime三个字段。
Tips: createtime主要用于定期清理过期的accesstoken,本案不再赘述。

配置好ESAP,在ESAP根目录/sql/api2/下配置gettokensql模板:
{{define "gettoken"}}
declare @accesstoken nvarchar(50)
declare @keyword nvarchar(50)
--验证appid和appkey
set @keyword=(select keyword from oauth2 where appid='{{.appid}}' and appkey='{{.appkey)}}'
if @keyword is not null
begin
--生产accesstoken
set @accesstoken='{{uuid}}'
insert accesstoken(keyword,accesstoken,createtime) values(@keyword,@accesstoken,getdate())
--返回正常的access_token和expires_in
select @accesstoken as access_token,7200 as expires_in
end
else
begin
--返回失败信息
select -1 as errcode,'错误的id或key' as errmsg
end
{{end}}
请求成功时效果如下:

失败时(appkey错误),效果如下:

修改getpurchaseordersql模板,将原来的name改为子查询:
{{define "getpurchaseorder"}}
select 
    订.交期,
    订.号,
    订.供方,
    单.品,
    单.品名,
    单.数,
    单.单位
from 订 
inner join 单 on 订.excelserverrcid=单.excelserverrcid
where 订.类='采购'
and 订.供方=(select keyword from accesstoken where accesstoken=:access_token)
{{end}}
B公司NX系统在外部接口追加gettoken接口。

根据esap查询结果,gettoken关键表结构设置如下:

修改getpurchaseorder接口,传入参数改为access_token,其他不变。

修改待确认采购单模板,增加accesstoken提数公式,通过API提取:

修改外部采购单提数公式,传入参数改为上一个提数的结果,即access_token:

appid和appkey正确时,将获得对应绑定供应商的订单数据:

主要应用esap构建API微服务。
本文涉及的数据库备份可在ESAP水镜禅院中下载。
2019-04-04
A公司是客户,下采购单;B公司是供应商之一,收到邮件通知后,希望从A公司ERP系统获取相关订单数据并导入自己公司的ERP系统。
典型的现代供应链系统工作方式,告别传统手工录单。
通常,两家公司的系统是不一样的,只能通过Internet通信,像下图这样。

如果是在局域网,可以直接在B公司系统中注册A公司系统的数据库为外部源。
* 但是,在广域网,应该禁止直接暴露数据库端口1433,这非常危险。*
本案采用ESAP构建当下流行的API微服务,A公司仅暴露需要的数据,B通过api获取采购订单数据。
假设A使用ES系统,下若干采购单给不同供应商。

订单数据使用sql查询结果如下:

配置好ESAP,在ESAP根目录/sql/api2/下配置getpurchaseordersql模板:
{ {define "getpurchaseorder"} }
select 
    订.交期,
    订.号,
    订.供方,
    单.品,
    单.品名,
    单.数,
    单.单位
from 订 
inner join 单 on 订.excelserverrcid=单.excelserverrcid
where 订.类='采购'
and 订.供方=:name
{ {end} }
api访问效果如下,name代入特斯拉获得特斯拉相关采购订单:

假设B公司使用NX,在外部接口中注册这个接口。

根据esap查询结果,getpurchaseorder关键表结构设置如下:

建立待确认采购单模板,设置表间公式从API提数,表字段一一对应。

特斯拉供应商:

华为供应商:

主要应用esap构建API微服务。
A公司可以是任意基于sql的系统。
B公司系统需要支持API提数。
本文涉及的数据库备份可在ESAP水镜禅院中下载。
2019-04-03