export 数据导出开发
功能介绍
框架已经封装了数据导出功能,所有导出记录都会在这里展示

添加新的数据类型
在 niucloud-addon/插件名称/src/main/resources/插件名称/loader/export/ExportType.json 中添加新的数据类型
导出数据类型文件位置:

ExportType.json 关键代码:
[
"shop_invoice": {
"name": "发票列表",
"column": [
{
"order_no": {
"name": "订单号"
}
},
{
"nickname": {
"name": "会员昵称"
}
},
{
"order_money": {
"name": "订单金额"
}
},
{
"header_name": {
"name": "发票抬头"
}
},
{
"header_type_name": {
"name": "抬头类型"
}
},
{
"type_name": {
"name": "发票类型"
}
},
{
"tax_number": {
"name": "纳税人识别号"
}
},
{
"bank_name": {
"name": "开户银行"
}
},
{
"bank_card_number": {
"name": "银行账号"
}
},
{
"address": {
"name": "注册地址"
}
},
{
"name": {
"name": "发票内容"
}
},
{
"money": {
"name": "开票金额"
}
},
{
"invoice_number": {
"name": "发票代码"
}
},
{
"remark": {
"name": "备注"
}
},
{
"create_time": {
"name": "申请时间"
}
},
{
"invoice_time": {
"name": "开票时间"
}
},
{
"is_invoice_name": {
"name": "开票状态"
}
}
]
}
]
页面效果:

在插件中创建监听器类
文件位置:
niucloud-addon/插件名称/src/main/java/com/niu/插件名称/listener/export/MallInvoiceExportDataListener.java

注册监听器使用 @EventCallback 注解
@EventCallback("mall")
实现 handleCallback() 方法处理数据,关键参考代码
public class MallInvoiceExportDataListener extends ExportDataEventDefiner {
private MemberMapper memberMapper;
private MallOrderMapper mallOrderMapper;
private InvoiceMapper invoiceMapper;
@Override
public ExportDataEventResult handleCallback(ExportDataEvent event) {
if (!"mall_invoice".equals(event.getType())) {
return new ExportDataEventResult();
}
QueryWrapper<Invoice> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("site_id", event.getSiteId())
.eq("status", InvoiceStatusEnum.OPEN.getStatus())
.orderByDesc("id");
JSONObject where = event.getWhere();
if (where != null) {
Object headerName = where.get("header_name");
if (ObjectUtil.isNotEmpty(headerName)) {
queryWrapper.like("header_name", headerName);
}
if ((where.get("create_time") instanceof JSONArray createTimes) && ObjectUtil.isNotEmpty(createTimes)) {
QueryMapperUtils.buildByTime(queryWrapper, "create_time", StringUtils.jsonArrayToStringArray(createTimes));
}
if ((where.get("invoice_time") instanceof JSONArray invoiceTimes) && ObjectUtil.isNotEmpty(invoiceTimes)) {
QueryMapperUtils.buildByTime(queryWrapper, "invoice_time", StringUtils.jsonArrayToStringArray(invoiceTimes));
}
}
List<Invoice> invoices;
PageParam pageParam = event.getPageParam();
if (pageParam.getPage() > 0 && pageParam.getLimit() > 0) {
invoices = invoiceMapper.selectPage(new Page<>(pageParam.getPage(), pageParam.getLimit()), queryWrapper).getRecords();
} else {
invoices = invoiceMapper.selectList(queryWrapper);
}
return exportData(invoices);
}
private ExportDataEventResult exportData(List<Invoice> invoices) {
ExportDataEventResult result = new ExportDataEventResult();
if (ObjectUtil.isEmpty(invoices)) {
return result;
}
Map<Integer, Member> memberMap = Collections.emptyMap();
Set<Integer> memberIds = CollStreamUtil.toSet(invoices, Invoice::getMemberId);
if (ObjectUtil.isNotEmpty(memberIds)) {
memberMap = memberMapper.selectBatchIds(memberIds).stream().collect(Collectors.toMap(Member::getMemberId, o -> o));
}
Map<Integer, MallOrder> orderMap = Collections.emptyMap();
Set<Integer> orderIds = CollStreamUtil.toSet(invoices, Invoice::getTradeId);
if (ObjectUtil.isNotEmpty(orderIds)) {
orderMap = mallOrderMapper.selectBatchIds(orderIds).stream().collect(Collectors.toMap(MallOrder::getOrderId, o -> o));
}
JSONArray jsonArray = new JSONArray();
for (Invoice invoice : invoices) {
JSONObject jsonObject = new JSONObject();
MallOrder order = orderMap.get(invoice.getTradeId());
Member member = memberMap.get(invoice.getMemberId());
jsonObject.set("order_no", Optional.ofNullable(order).map(o -> o.getOrderNo() + "\t").orElse(""))
.set("nickname", Optional.ofNullable(member).map(Member::getNickname).orElse(""))
.set("order_money", Optional.ofNullable(order).map(MallOrder::getOrderMoney).map(BigDecimal::toString).orElse(""))
.set("header_name", invoice.getHeaderName() + "\t")
.set("header_type_name", InvoiceHeaderTypeEnum.getNameByType(invoice.getHeaderType()))
.set("type_name", InvoiceTypeEnum.getNameByType(invoice.getType()))
.set("tax_number", invoice.getTaxNumber() + "\t")
.set("bank_name", invoice.getBankName())
.set("bank_card_number", invoice.getBankCardNumber() + "\t")
.set("address", invoice.getAddress())
.set("name", invoice.getName())
.set("money", invoice.getMoney())
.set("invoice_number", invoice.getInvoiceNumber() + "\t")
.set("remark", invoice.getRemark())
.set("create_time", DateUtils.timestampToString(invoice.getCreateTime()))
.set("invoice_time", DateUtils.timestampToString(invoice.getInvoiceTime()))
.set("is_invoice_name", ObjectUtil.equal(invoice.getStatus(), 1) ? "已开票" : "未开票");
jsonArray.add(jsonObject);
}
result.setResultData(jsonArray);
return result;
}
@Autowired
public void setMemberMapper(MemberMapper memberMapper) {
this.memberMapper = memberMapper;
}
@Autowired
public void setShopOrderMapper(MallOrderMapper mallOrderMapper) {
this.mallOrderMapper = mallOrderMapper;
}
@Autowired
public void setShopInvoiceMapper(InvoiceMapper mallInvoiceMapper) {
this.invoiceMapper = mallInvoiceMapper;
}
}
前端调用数据导出组件
以会员列表导出功能举例:
关键代码,引入数据导出组件:
show:控制显示隐藏
type:数据导出类型
searchParam:搜索条件
<export-sure ref="exportSureDialog" :show="flag" type="member" :searchParam="memberTableData.searchParam" @close="handleClose" />