利用视图实现复杂查询

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


利用视图实现复杂查询

在这里插入图片描述

需求:需要对Excel表中导入的四列进行,精准查询(搜索符合这四列的数据),并提供预览后下载功能

实现:创建视图表将四个字段合并存储在一个字段中,搜索的时候搜索合并后视图字段,通过主键查询原表中的数据

创建一个名为 AuthCodeView 的视图。视图是一个虚拟表,它基于现有的表(在这里是 transaction_order 表)的查询结果而创建;视图可以简化复杂的查询操作,并提供一个方便的方式来访问和处理数据

transaction_order 表中的数据进行处理和格式化,生成一个新的列 authcode_splice,并将其与 unique_id 列一起包含在视图中:authcode_splice 列是通过连接 auth_codetrade_currencytrade_amountcreate_at 列的值,并使用连字符 - 进行分隔而得到

CREATE VIEW AuthCodeView AS 
SELECT CONCAT(auth_code,'-',trade_currency,'-',ROUND(trade_amount,2),'-',TO_CHAR(create_at,'YYYY/MM/DD')) AS authcode_splice, unique_id
FROM transaction_order;

Preview

  • Controller
    @PostMapping("authCodePreview")@ApiOperation("Auth Code 预览")public Result<List<AuthCodeResultPreview>> authCodePreview(@RequestParam(name = "file", required = false) MultipartFile file) {return Result.succ(chargebackWarnService.authCodeUploadFile(file).getPreviewList());}
  • Service
 public AuthCodeUpload authCodeUploadFile(MultipartFile file) {if (file == null) {throw new ManageException("上传文件不能为空");}StringJoiner joiner = new StringJoiner("<br/>");AuthCodeUpload res = new AuthCodeUpload();List<AuthCodeResultPreview> previewSuccess = new ArrayList<>();List<AuthCodeResultPreview> previewError = new ArrayList<>();List<AuthCodeFile> list;try {@Cleanup InputStream inputStream = file.getInputStream();String filename = file.getOriginalFilename().toLowerCase();if (!(filename.contains("auth") && filename.contains("code"))) {throw new ManageException("请传入正确的Auth Code文件上传模板");}list = analysisAuthCodeFile(AuthCodeFile.class, inputStream);for (AuthCodeFile bean : list) {AuthCodeResultPreview preview;if (bean.isError()) {joiner.add(bean.getIndex() + ": " + bean.getErrorMessage());preview = new AuthCodeResultPreview(bean.getIndex(), bean.getErrorMessage());previewError.add(preview);} else {preview = new AuthCodeResultPreview(bean.getIndex(), bean.getOrder(), bean.getAuthCode());previewSuccess.add(preview);}}} catch (IOException e) {e.printStackTrace();}//文件内包含错误信息时只展示错误条数, 全部正确时展示所有,并返回总数据条数if (previewError.isEmpty()) {res.setPreviewList(previewSuccess);res.setTotal(previewSuccess.size());} else {res.setPreviewList(previewError);res.setTotal(previewError.size());}res.setMessage(joiner.toString());return res;}
    public <T extends AuthCodeFile> List<AuthCodeFile> analysisAuthCodeFile(Class<T> clazz, InputStream is) {List<T> list = ExcelTools.excelToList(clazz, is);if (list.isEmpty()) {throw new ManageException("文件内不包含Auth Code信息, 请传入正确文件进行导入");}List<AuthCodeFile> files = new ArrayList<>();//拼接四个字段进行视图查询List<String> searchCondition = list.stream().map(bean -> (bean.getAuthCode() == null ? "" : bean.getAuthCode()) + "-" + (bean.getTradeCurrency() == null ? "" : bean.getTradeCurrency()) + "-" + (bean.getTradeAmount() == null ? "" : bean.getTradeAmount()) + "-" + (bean.getCreateAt() == null ? "" : bean.getCreateAt())).distinct().collect(Collectors.toList());//查询符合要求的UniqueIdList<String> uniqueIdList = orderRepo.listByAuthCodeSplice(searchCondition);//根据符合要求的UniqueId获取列表List<TransactionOrder> orderList = uniqueIdList.isEmpty() ? new ArrayList<>() : orderRepo.listByUniqueIds(uniqueIdList);for (int i = 0; i < searchCondition.size(); i++) {String currentAuthCode = searchCondition.get(i).split("-")[0];T bean = list.get(i);try {List<TransactionOrder> collectOrders = orderList.stream().filter(order -> order.getAuthCode().equals(currentAuthCode)).collect(Collectors.toList());//如果当前AuthCode没有订单if (collectOrders.isEmpty()) {bean.setAuthCode(currentAuthCode);bean.setOrder(null);bean.setIndex(i + 1);files.add(bean);}//如果当前AuthCode有订单显示到预览界面for (TransactionOrder order : collectOrders) {AuthCodeFile authCodeFile = new AuthCodeFile(bean.getAuthCode(), bean.getTradeCurrency(), bean.getTradeAmount(), bean.getCreateAt(), bean.isError(), bean.getErrorMessage(), i + 1, order);files.add(authCodeFile);}} catch (Exception e) {files.add(new AuthCodeFile(i + 1, e.getMessage()));}}return files;}

Download

  • Controller
@PostMapping("authCodeDownload")
@ApiOperation("Auth Code 下载")
public void authCodeUpload(HttpServletResponse response, @RequestBody AuthCodeDownloadRequest request) throws IOException {chargebackWarnService.authCodeDownload(response, request.getList());
}
  • Service
  public void authCodeDownload(HttpServletResponse response, List<String> list) throws IOException {HashSet<String> stringSet = new LinkedHashSet<>(list);List<String> codeList = new ArrayList<>(stringSet);List<AuthCodeResultDownload> downloadList =  orderRepo.getListByAuthCode(codeList);List<AuthCodeResultDownload> downloadSortList = new ArrayList<>();for (String code : codeList){for (AuthCodeResultDownload download : downloadList){if (download.getAuthCode().equals(code)) {downloadSortList.add(download);}}}ExcelTools.download(response, AuthCodeResultDownload.class, downloadSortList, "AuthCodeDownload");}

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/252035.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot154基于Spring Boot智能无人仓库管理

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

Vue3.0(二):Vue组件化基础 - 脚手架

Vue组件化基础 - 脚手架 Vue的组件化 我们在处理一些任务量比较庞大的工作时候&#xff0c;会将工作内容进行拆分&#xff0c;分步骤完成 而组件化的思想正式如此&#xff0c;对于一个庞大的项目&#xff0c;我们可以将其拆分成一个个的小功能&#xff0c;分步骤进行实现 组…

Intellij IDEA各种调试+开发中常见bug

Intellij IDEA中使用好Debug&#xff0c;主要包括如下内容&#xff1a; 一、Debug开篇 ①、以Debug模式启动服务&#xff0c;左边的一个按钮则是以Run模式启动。在开发中&#xff0c;我一般会直接启动Debug模式&#xff0c;方便随时调试代码。 ②、断点&#xff1a;在左边行…

docker重建镜像

DockerFile如下&#xff1a; FROM k8s-registry.qhtx.local/base/centos7-jdk8-haitong0704RUN yum -y update && yum install -y python3-devel && yum install -y python36 RUN mv /usr/bin/python /usr/bin/python_old RUN ln -s /usr/bin/python3 /usr/bi…

windows安装Visual Studio Code,配置C/C++运行环境(亲测可行)

一.下载 Visual Studio Code https://code.visualstudio.com/ 二.安装 选择想要安装的位置: 后面的点击下一步即可。 三.下载编译器MinGW vscode只是写代码的工具&#xff0c;使用编译器才能编译写的C/C程序&#xff0c;将它转为可执行文件。 MinGW下载链接&#xff1a;…

Linux(一)

介绍 常见的操作系统(windows、IOS、Android、MacOS, Linux, Unix)&#xff1b; Linux是一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发已经得到业界的认可&#xff1b;【免费只是说linux的内核免费】 目前很多企业级的项目(c/c/php/python/java/go)都会…

免费的hyper-v虚机添加U盘的二种方法

windows集成了hyper-v&#xff0c;hyper-v可以安装linux&#xff0c;windows等虚机&#xff0c;基本可以满足工作&#xff0c;实验之需。但是不少人反映hyper-v不方便连接U盘&#xff0c;这样子文件传输不是很方便。 网上有方法说在虚机设置中添加磁盘&#xff0c;首先到物理机…

图数据库(neo4j)在工业控制中的应用

最近看到国外发表的一篇文章&#xff0c;提到将OPC UA 模型映射到neo4j图模型数据库中&#xff0c;通过GraphQL 访问效率很高&#xff0c;顿时感觉自己眼睛一亮&#xff0c;这是一个好主意。 图模型 事物的模型中&#xff0c;除了它自身的某些特征之外&#xff0c;还包括它与其…

kubectl命令

kubenetes部署服务的流程 以部署一个nginx服务来说明kubernetes系统各个组件调用关系&#xff1a; 1. 首先要明确&#xff0c;一旦kubernetes环境启动之后&#xff0c;master和node都会将自身的信息存储到etcd数据库中 2. 一个nginx服务的安装请求会首先被发送到master节点的ap…

世界各国都在追求“主权人工智能能力”,国家级人工智能硬件需求将剧增

NVIDIA的CEO黄仁勋最近在接受媒体采访时指出&#xff0c;世界各国都打算在本国内建立和运行自主的人工智能基础设施&#xff0c;这将全面带动NVIDIA硬件产品需求的飙升。黄仁勋表示&#xff0c;包括印度、日本、法国和加拿大在内的国家政府都在讨论投资“国家主权人工智能能力”…

利用jmeter完成简单的压力测试

Jmeter是一个非常好用的压力测试工具。Jmeter用来做轻量级的压力测试&#xff0c;非常合适&#xff0c;只需要十几分钟&#xff0c;就能把压力测试需要的脚本写好。 1、什么是压力测试 顾名思义&#xff1a;压力测试&#xff0c;就是 被测试的系统&#xff0c;在一定的访问压…

从小白到入门webrtc音视频通话

0. 写在前面 先会骑车&#xff0c;再研究为什么这么骑&#xff0c;才是我认为学习技术的思路&#xff0c;底部付了demo例子&#xff0c;根据例子上面的介绍即可运行。 1. 音视频通话要用到的技术简介 websocket 介绍&#xff1a;1. 服务器可以向浏览器推送信息&#xff1b;2…

Java SWT Composite 绘画

Java SWT Composite 绘画 1 Java SWT2 Java 图形框架 AWT、Swing、SWT、JavaFX2.1 Java AWT (Abstract Window Toolkit)2.2 Java Swing2.3 Java SWT (Standard Widget Toolkit)2.4 Java JavaFX 3 比较和总结 1 Java SWT Java SWT&#xff08;Standard Widget Toolkit&#xff…

Yarn常见问题处理

任务出现container OOM异常导致作业失败 原因 Container内存不足或者作业数据倾斜 解决方案 检查Container相关参数,判断是否设置过小(低于4GB)。如果Container小于4GB,优先考虑调大当前作业container大小,如果是Tez任务,还需要同步调整以下参数 # tez container size…

STM32--SPI通信协议(1)SPI基础知识总结

前言 I2C (Inter-Integrated Circuit)和SPI (Serial Peripheral Interface)是两种常见的串行通信协议&#xff0c;用于连接集成电路芯片之间的通信&#xff0c;选择I2C或SPI取决于具体的应用需求。如果需要较高的传输速度和简单的接口&#xff0c;可以选择SPI。如果需要连接多…

探索设计模式的魅力:从单一继承到组合模式-软件设计的演变与未来

设计模式专栏&#xff1a;http://t.csdnimg.cn/nolNS 在面对层次结构和树状数据结构的软件设计任务时&#xff0c;我们如何优雅地处理单个对象与组合对象的一致性问题&#xff1f;组合模式&#xff08;Composite Pattern&#xff09;为此提供了一种简洁高效的解决方案。通过本…

记录下ibus-libpinyin输入法的重新安装

目前的版本为: 首先把现在的ibus-libpinyin卸了 sudo apt-get --purge remove ibus-libpinyin sudo apt-get autoremove 安装教程请参考 Installation libpinyin/ibus-libpinyin Wiki GitHub yilai sudo apt install pkg-config sudo apt-get install libglib2.0-de…

CSS要点总结

一、CSS 快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 快速入门</title><!-- 解读1. 在 head 标签内&#xff0c;出现了 <style type"text/css"></style…

初探unity中的ECS

ECS是一种软件架构模式&#xff0c;就像MVC一样。ECS最早在游戏《守望先锋》中提及到的相关链接。ECS具体是指实体&#xff08;entity&#xff09;、 组件&#xff08;component&#xff09;和系统&#xff08;system&#xff09;&#xff1a; 实体&#xff1a;实体是一个ID&a…

从源代码看Chrome 版本号

一直以来都是用Chrome 浏览器&#xff0c;但是看到Chrome 点分4 组数据的表达方式&#xff0c;总是感觉怪怪的&#xff0c;遂深入源代码了解她的版本号具体表示的内容 chrome 浏览器中显示的版本号 源代码中的版本号标识 版本号文件位于 chrome/VERSION &#xff0c; 看到源代…