(笔记)当界面需求较少时直接在DTO类中写逻辑,省去service层

 需求:开发月度报表、总报表、折线图

像这种,就简单加三个查询,我个人认为可以直接省去service层代码,只使用controller层和mapper层即可。虽说三层架构的初衷也是为了解耦,但是这种只有查询的代码完全可以省去中间两个文件。

/*** @Description 采购组织、负责人查询实体类* @Author jink* @Date 2024/5/9 16:31*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OrgDTO {//采购部门private String departname;//接受到前端的时间数组private String[] time;//起始时间private String begin;//结束时间private String end;//负责人private String user;//1:月份查询 0:其他private Short flag;

以上是基础的字段,现在需求,根据报表的结构分为三种不同的情况:

1:月度表,默认查询近一年的数据,如果有查询条件则按照查询条件,以月份维度进行查询

2:总表,按照月为单位查询,查起始月份1号至终点月份31号

3:折线图,默认查询近十二个月,以日期维度进行查询

由于我是全栈,所以前后端都是我做(╯︿╰),为了省力气,我直接用的同一个时间范围查询器,虽然在前端我已经将回传的格式转换为yyyy-MM格式,但是由于后端的查询逻辑需要的格式都不相同,例如因为月度表由于需要以yyyy.MM格式在前端展示,因此在分组时我就已经将时间format成了yyyy.MM的格式了,因此查询需要yyyy.mm的格式,但是其他两个又不需要这样的操作,因此做了不同的判断。话不多说,直接贴代码,此文章仅作为一种省力气的不规范模式进行编写,不建议参考,但是这又何尝不是工厂模式的体现。

/*** @Description 采购组织、负责人查询实体类* @Author jink* @Date 2024/5/9 16:31*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OrgDTO {//采购部门private String departname;//接受到前端的时间数组private String[] time;//起始时间private String begin;//结束时间private String end;//负责人private String user;//1:月份查询 0:其他private Short flag;//统一时间查询的格式为:yyyy.MMprivate final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy.MM");public String getBegin() {try {switch (this.flag) {case 0: {if (this.time.length > 0 && this.time[0] != null) {return this.time[0].split("-")[0] + "." + this.time[0].split("-")[1];} else {return LocalDate.now().minusMonths(12).toString().split("-")[0] + "." + LocalDate.now().minusMonths(12).toString().split("-")[1];}}case 1: {if (this.time.length > 0 && this.time[0] != null) {return time[0];} else {return LocalDate.now().minusMonths(12).toString().split("-")[0] + "." + LocalDate.now().minusMonths(12).toString().split("-")[1] + ".01";}}case 2: {if (this.time.length > 0 && this.time[0] != null) {return time[0];}}}return begin;} catch (Exception e) {return begin;}}public String getEnd() {try {switch (this.flag) {case 0: {if (this.time.length > 0 && this.time[1] != null) {return this.time[1].split("-")[0] + "." + this.time[1].split("-")[1];} else {return LocalDate.now().toString().split("-")[0] + "." + LocalDate.now().toString().split("-")[1];}}case 1: {if (this.time.length > 0 && this.time[1] != null) {return time[1];} else {return LocalDate.now().toString().split("-")[0] + "." + LocalDate.now().toString().split("-")[1] + ".31";}}case 2: {if (this.time.length > 0 && this.time[1] != null) {return time[1];}}}return end;} catch (Exception e) {return end;}}
}

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

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

相关文章

【iOS】Runtime

文章目录 前言一、Runtime简介二、NSObject库起源isaisa_t结构体cache_t的具体实现class_data_bits_t的具体实现 三、[self class] 与 [super class]四、消息发送与转发五、Runtime应用场景 前言 之前分part学习了Runtime的内容,但是没有系统的总结,这篇…

集成接口的方法

集成接口的方法 目录概述需求:集成接口的方法1. 使用API(Application Programming Interface):2. 使用消息队列:3. 使用ETL(Extract, Transform, Load)工具:4. 使用Web服务&#xff…

网络工程师----第四十七天

1、请简述super vlan和sub vlan的区别? 2、请简述mux vlan 中不同vlan的特点? 3、请基于工作原理简述GVRP协议中三种接口模式的特点? 4、请简述STP的选举过程? 5、两台交换机在不增加成本的情况下为提高链路带宽和可靠性采用链路聚…

【Linux】CPU当前频率及调整CPU频率操作

CPU的governor(调频)策略 governor(调频)策略,linux内核一共有5种调频策略: performance-最高性能,直接使用最高频率,不考虑耗电; interactive-一开始直接使用最高频率,然后根据CPU负载慢慢降低&#xf…

【TB作品】MSP430F5529单片机,火灾报警器,DS18B20温度显示,温控风扇

功能 这段代码是一个基于msp430微控制器的嵌入式系统程序,主要实现了以下功能: 初始化和配置: 初始化了OLED显示屏、DS18B20温度传感器、火焰传感器、风扇(通过PWM控制)和蜂鸣器。设置了CPU时钟源和分频,以…

网络原理——HTTP/HTTPS ---- HTTPS

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 目录 HTTPS加密与解密HTTPS的工作流程使用对称密钥来加密使用非对称密钥 来对 对称密钥进行加密第三方公证总结 HTTPS https本质上就是在http的基础之上 增加了加密层,抛开加密层之后,剩下的部…

号称超级增程电动,领克07EM-P带来技术变革?

近年来,自主品牌在新能源汽车领域百花齐放,尤其是在混合动力市场上,比亚迪的DM-i技术引领了风潮,秦L的一经亮相,整个车圈都沸腾了,“超级混动”的概念深入人心。 各大自主品牌都有了自己的混动平台和技术。…

使用import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 创建模块后,就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码,这可以使用import语句实现。im…

步进电机双闭环细分控制(matlab仿真)内含课设等参考文件

1.1 步进电机工作原理 步进电机是一种用电脉冲进行控制,将电脉冲信号转换成相位移的电机,其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比,每一个脉冲信号可使步进电机旋转一个固定的角度。脉冲的数量决定了旋转的总角度,脉…

System-Verilog

实验报告:使用SystemVerilog在DE2-115开发板上重新设计Verilog练习项目 实验目的 通过学习和掌握SystemVerilog的基本语法,重新设计之前在Verilog中实现的练习项目,如流水灯、全加器、VGA显示和超声波测距,并完成相应的testbenc…

(ICLR,2024)HarMA:高效的协同迁移学习与模态对齐遥感技术

文章目录 相关资料摘要引言方法多模态门控适配器目标函数 实验 相关资料 论文:Efficient Remote Sensing with Harmonized Transfer Learning and Modality Alignment 代码:https://github.com/seekerhuang/HarMA 摘要 随着视觉和语言预训练&#xf…

seRsync + Rsync 实时同步

文章目录 1,结构图2,节点A2.1 安装rsync2.2 安装seRsync2.3, 创建seRsync的守护进程用systemd管理并启动2.4,上传rsync.pass密码文件到配置文件目录:/etc/2.5 ,重新加载systemd,启动sersyncd守护…

gdb调试常见指令

quit:退出gdb list/l:l 文件名:行号/函数名,l 行号/函数名 b:b 文件名:行号/函数名,b 行号/函数名 info/i: info b d:d 断电编号 disable/enable 断电编号:使能(关闭&#xff0…

React路由学习

官方文档:https://reactrouter.com/en/main 学习时以Tutorial(教程)为主 一、创建项目 //创建项目 npm create vitelatest [项目名] -- --template react//安装react-router cd [项目名] npm i react-router-dom localforage match-sorter…

AI电销机器人和传统人工销售相比到底厉害在哪里?

传统的电销模式存在成本高、管理难、招人难、转化低的问题。近几年,随着人工智能技术的兴起,电销行业也加入了人工智能的赛道。电话机器人是自动执行工作的机器装置。它既可以接受人类指挥,又可以运行预先编排的程序,也可以根据以…

容器编排技术:现状、应用与未来

在当今的软件开发和运维中,容器技术已经成为一个核心组成部分。容器不仅改变了应用程序的开发、测试和部署方式,还推动了整个软件生命周期管理的革新。而容器编排技术作为容器管理和自动化的重要工具,进一步提升了容器的使用效率和灵活性。 …

从关键新闻和最新技术看AI行业发展(2024.5.20-6.2第二十四期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习💪 欢迎大家关注Rocky的公众号&…

L4-118 均是素数(C++,多种方法)

在给定的区间 [m,n] 内&#xff0c;是否存在素数 p、q、r&#xff08;p<q<r&#xff09;&#xff0c;使得 pqr、qrp、rpq 均是素数&#xff1f; 输入格式&#xff1a; 输入给出区间的两个端点 0<m<n≤1000&#xff0c;其间以空格分隔。 输出格式&#xff1a; 在…

使用Xshell一键在多个会话中执行多个命令

背景 平时在工作中经常通过ssh远程操作Linux&#xff0c;由于我们负责的服务部署在超过5台服务器&#xff08;相同的代码及路径&#xff09;&#xff0c;每次发布后执行重启都得重复操作5次关闭、检查、启动、查看日志&#xff0c;特别繁琐。 后来发现Xshell 7可以录制脚本&am…

大模型时代的具身智能系列专题(十一)

UMass Amherst 淦创团队 淦创是马萨诸塞大学阿默斯特分校的一名教员&#xff0c;也是麻省理工学院- ibm沃森人工智能实验室的研究经理。在麻省理工学院博士后期间&#xff0c;和Antonio Torralba教授、Daniela Rus教授和Josh Tenenbaum教授一起工作。在此之前&#xff0c;在清…