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

2024-06-04 08:36

本文主要是介绍(笔记)当界面需求较少时直接在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;}}
}

这篇关于(笔记)当界面需求较少时直接在DTO类中写逻辑,省去service层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029581

相关文章

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个