(笔记)当界面需求较少时直接在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.MM
    private 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;
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金融科技赋能城商行,深度推动普惠金融发展

一、引言 在金融科技(FinTech)的浪潮下,普惠金融的理念得以迅速普及与实践。城市商业银行(城商行)作为地方金融的重要组成部分,在金融科技的助力下,不断推动普惠金融的深入发展。本文将详细探讨金融科技如何助力城商行推动普惠金融,并结合具体案例进行详尽分析。 二、…

【Qt】win10,QTableWidget表头下无分隔线的问题

1. 现象 2. 原因 win10系统的UI样式默认是这样的。 3. 解决 - 方法1 //横向表头ui->table->horizontalHeader()->setStyleSheet("QHeaderView::section{""border-top:0px solid #E5E5E5;""border-left:0px solid #E5E5E5;""bord…

修改缓存供应商--EhCache

除了我们默认的缓存形式simlpe之外, 我们其实还有许多其他种类的缓存供应 Ehcache就是其中的一种形式 Ehcache在SpringBoot当中的使用: 其实跟我们之前整合第三方的资源是一样的形式 1>导入依赖: <!-- 更换缓存, 将默认使用的 Simple 更换为Ehcache--> <depe…

现代密码学-基础

安全业务 保密业务&#xff1a;数据加密 认证业务&#xff1a;保证通信真实性 完整性业务&#xff1a;保证所接收的消息未经复制、插入、篡改、重排或重放 不可否认业务&#xff1a;防止通信双方的某一方对所发消息的否认 访问控制&#xff1a;防止对网络资源的非授权访问&…

2024年5月架构试题

2024年5月份架构师考试真题完整版 截至2024-5-28 19:24:14已全部收录完成 共75道选择题&#xff0c;5道案例题&#xff0c;4道论文题。题目顺序不分先后。 全网最全的2024年5月份架构师考试真题回忆版&#xff0c;包含答案和解析。 选择题 计算机基础 操作系统调度算法 选先来先…

Swift 中 @preconcurrency 修饰符使用浅谈

概述 Swift 6.0 与我们越来越近了&#xff0c;如何将旧范儿的并发代码装换为严格遵守 Swift 6.0 并发模型&#xff08; Strict Concurrency&#xff09;的新代码&#xff0c;这往往使得秃头码农们又要多抓掉几根头发了。 所以&#xff0c;为了最大限度的保持新旧两个并发世界暂…

Paddle实现单目标检测

单目标检测 单目标检测&#xff08;Single Object Detection&#xff09;是人工智能领域中的一个重要研究方向&#xff0c;旨在通过计算机视觉技术&#xff0c;识别和定位图像中的特定目标物体。单目标检测可以应用于各种场景&#xff0c;如智能监控、自动驾驶、医疗影像分析等…

玩转Linux进度条

准备工作&#xff1a; 一.关于缓冲区 首先&#xff0c;咱们先来一段有意思的代码&#xff1a; #include<stdio.h> #include<unistd.h> int main() {printf("you can see me");sleep(5);} 你可以在你的本地运行一下&#xff0c;这里我告诉大家运行结果…

android睡眠分期图

一、效果图 做医疗类项目&#xff0c;经常会遇到做各种图表&#xff0c;本文做的睡眠分期图。 二、代码 引入用到的库 api joda-time:joda-time:2.10.1 调用代码 /*** 睡眠* 分期*/private SleepChartAdapter mAdapter;private SleepChartAttrs mAttrs;private List<SleepI…

d2-crud-plus 使用小技巧(六)—— 表单下拉选择 行样式 溢出时显示异常优化

问题 vue2 elementUI d2-crud-plus&#xff0c;数据类型为select时&#xff0c;行样式显示为tag样式&#xff0c;但是如果选择内容过长就会出现下面这种bug&#xff0c;显然用户体验不够友好。 期望 代码 js export const crudOptions (vm) > {return {...columns:…

成功解决“ModuleNotFoundError: No Module Named Pycocotools”错误的全面指南

成功解决“ModuleNotFoundError: No Module Named Pycocotools”错误的全面指南 在Python的数据科学、计算机视觉和机器学习项目中&#xff0c;经常需要用到各种工具和库来加速开发过程。其中&#xff0c;pycocotools 是一个专门用于处理 COCO 数据集的库&#xff0c;它提供了多…

2024年Google算法更新打击低质量(如AI生成)内容后,英文SEO优化人员该如何调整谷歌SEO优化策略?

3月5日&#xff0c;谷歌发布了2024年的首次算法更新。与以往更新不同&#xff0c;本次更新更加复杂&#xff0c;这次更新旨在提高搜索结果的质量和相关性&#xff0c;可能对外贸网站排名和流量产生显著影响。也将产生更大的网站数据波动。但在担心自己的网站数据受到影响之前&a…

Django 里的增删改查

下面是步骤 先更新 urls.py 来添加新的url from django.contrib import admin from django.urls import path from app01 import viewsurlpatterns [path(demo/, views.demo), ]在 models.py 里创建表 from django.db import models# Create your models here. class UserI…

毫米级精度3D人脸扫描设备,助推打造元宇宙虚拟分身

在元宇宙中&#xff0c;虚拟分身对应的是一个三维模型&#xff0c;数字化的过程则是三维重建过程&#xff0c;通过3D人脸扫描可以通过多相机同步采集人脸部&#xff0c;可快速、准确地重建出真人地脸部模型及贴图&#xff0c;通过3D人脸扫描设备可快速重建出高逼真的虚拟分身。…

BioTech - 使用 Kubeflow 多机多卡 运行 高精度蛋白质结构的迭代预测

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/139418138 核心逻辑,参考:使用 循环(Recycle)迭代的蛋白质结构预测 获取 高精度结构 Kubeflow 是一个开源的 Kubernetes 原生框架,专注于简化、可移植和可…

【反悔贪心】算法讲解

目录 cf865D 环形喂猪 建筑抢修 cf865D 思路&#xff1a; 我们贪心的原则是尽可能的多卖&#xff0c;而且尽可能的卖的多。 整体的贪心思路就是能卖就卖&#xff0c;卖完后放入堆中&#xff08;以便反悔&#xff09;&#xff0c;先不考虑能卖多少&#xff0c;因为堆是按照价…

02--nginx代理缓存

前言&#xff1a;比较常用的用法反向代理&#xff0c;和缓存的一些操作&#xff0c;用虚拟环境复刻出来&#xff0c;里面参数不用详细记录&#xff0c;用作复习&#xff0c;使用时直接查找即可。环境搭建过程参考前一篇文章nginx基础。 1、基础环境 IP角色作用192.168.189.143…

AWR设置工程仿真频率、原理图仿真频率、默认单位

AWR设置工程仿真频率、原理图仿真频率、默认单位 生活不易&#xff0c;喵喵叹气。马上就要上班了&#xff0c;公司的ADS的版权紧缺&#xff0c;主要用的软件都是NI 的AWR&#xff0c;只能趁着现在没事做先学习一下子了&#xff0c;希望不要裁我。 最近稍微学习了一下AWR这个软…

参加质量源于设计QbD培训能学到什么

近年来&#xff0c;产品质量已经成为了企业能否立足市场的关键。因此&#xff0c;质量源于设计&#xff08;QbD&#xff09;的理念应运而生&#xff0c;它强调在产品开发初期就注重质量设计&#xff0c;以最大限度地降低潜在风险&#xff0c;提高产品的稳定性和可靠性。参加质量…

诺亚财富——财富管理行业的进化逻辑

詹姆斯•卡斯的著作《有限与无限的游戏》中&#xff0c;传递出这样一种观点&#xff1a; “有限的游戏&#xff0c;其目的在于赢得胜利&#xff1b;无限的游戏&#xff0c;却旨在让游戏永远进行下去。有限的游戏在边界内玩&#xff0c;无限的游戏玩的就是边界。” 在商业社会…