标签设计及打印流程
整体流程
- 设计标签(保存标签设计的标签模板信息)
- 上传/保存标签模式
- 标签内容数据源配置及序列号配置
- 打印业务选择序列号规则及标签模板发消息给MQ
- 打印插件接受MQ数据
- 解析下载最新标签模板进行渲染生成图片发送选择打印机打印机进行打印
系统之间的交互:
1、标签系统:进行标签设计,并能上传且下载成Html文件。
2、MES:标签模板上传标签设计文件,在打印标签时选择对应的标签模板,并发送MQ消息,消息内容包含标签设计文件的地址和参数数据。
3、打印插件:接收到MQ消息,下载标签设计文件,并将文件中定义的参数值用MQ消息中的参数数据进行替换,最后进行打印。
本次实现目标:
1、可配置标签模板。
1.1 前端增加一个菜单,标签模板设计。点击菜单,弹出一个新tab(类似于看板设计器),并将mes的token带过去,在保存标签设计的时候要将token 传到header中。
1.2 标签设计器中有所有标签的展示列表。可对标签进行修改及删除。
1.3 后端增加一张标签设计的表。用来保存设计内容。并提供增删改查方法。
2、可下载成html
设计好的标签可以进行下载,下载好的格式为html
3、可上传html
在当前已有的标签模板配置的新增页面,可以选择html文件进行上传
4、用该标签模板进行打印
打印标签时选择的标签模板的格式为html时,可正常进行打印,并能将字段进行正确填充。
mes发送打印MQ,消息内容包含模板地址和数据json。插件接收到消息后,下载设计器文件,并将字段进行替换,最后进行打印。
5、打印插件接受MQ数据
打印插件配置对接接收MQ配置,启动监听MQ消息,监听到MQ消息后,将数据保存在打印队列中,
6、解析下载最新标签模板进行渲染生成图片发送选择打印机打印机进行打印
配置打印机驱动,打印线程定时从打印队列中拿一个数据,解析数据格式,校验模板本地是否存在,不存在的话,先根据传输的数据的打印模板地址进行模板下载,
读取下载成功的模板数据内容,根据解析的数据,将模板内容对应字段的占位符,替换成真实的数据,将替换完成的数据模板内容加载转换成图片,将图片发送打印
打印成功后,将打印的数据记录到打印插件的数据库日志中,后续可以根据打印记录进行重新打印
标签设计器表结构暂定如下:
create table if not exists mes_label_desinger (
id bigserial not null,
tenant_id varchar(12) not null,
site_id int8 not null,
label_name int8 not null,
label_width numeric null,
label_height numeric null,
label_rows numeric null,
label_columns numeric null,
horizontal_spacing numeric null,
vertical_spacing numeric null,
paper_width numeric null,
paper_height numeric null,
paper_top_margin numeric null,
paper_bottom_margin numeric null,
paper_left_margin numeric null,
paper_right_margin numeric null,
content varchar null,
status int2 not null default 1,
remark varchar null,
ext_fields json null,
is_deleted int2 not null default 0,
create_dept int8 null,
create_user int8 null,
create_time timestamp null,
update_user int8 null,
update_time timestamp null,
constraint pk_mes_label_desinger primary key (id)
);
grant select, insert, update, delete on mes_label_desinger to mes_admin;
comment on table mes_label_desinger is 'mes_label_desinger';
comment on column mes_label_desinger.tenant_id is '租户ID,blade_tenant.tenant_id';
comment on column mes_label_desinger.site_id is '工厂ID,blade_dept.id';
comment on column mes_label_desinger.label_name is '标签名称';
comment on column mes_label_desinger.label_width is '标签尺寸(mm), 宽';
comment on column mes_label_desinger.label_height is '标签尺寸(mm), 高';
comment on column mes_label_desinger.label_rows is '标签行数';
comment on column mes_label_desinger.label_columns is '标签列数';
comment on column mes_label_desinger.horizontal_spacing is '标签间距(mm), 水平';
comment on column mes_label_desinger.vertical_spacing is '标签间距(mm), 垂直';
comment on column mes_label_desinger.paper_width is '纸张尺寸(mm), 宽';
comment on column mes_label_desinger.paper_height is '纸张尺寸(mm), 高';
comment on column mes_label_desinger.paper_top_margin is '纸张边距(mm), 上';
comment on column mes_label_desinger.paper_bottom_margin is '纸张边距(mm), 下';
comment on column mes_label_desinger.paper_left_margin is '纸张边距(mm), 左';
comment on column mes_label_desinger.paper_right_margin is '纸张边距(mm), 右';
comment on column mes_label_desinger.content is '模板内容, 大json';
comment on column mes_label_desinger.status is '状态';
comment on column mes_label_desinger.remark is '备注';
comment on column mes_label_desinger.ext_fields is '自定义属性';
Plain Text