package com.shiep.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.shiep.dao.IUserDao;
import com.shiep.entity.*;
import com.shiep.mapper.*;
import com.shiep.service.IAnimalSearchService;
import com.shiep.vo.*;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class AnimalSearchServiceImpl implements IAnimalSearchService {
@Resource
private IAnimalSearchMapper animalSearchMapper;
@Resource
private IUserDao userDao;
@Resource
private ILocationDao locationDao;
@Resource
private IAnimalCategoryDetailsMapper animalCategoryDetailsMapper;
@Resource
private IPhotoAnimalSearchMapper photoAnimalSearchMapper;
@Resource
private ICountyMapper countyMapper;
@Resource
private IAnimalSearchCommentMapper animalSearchCommentMapper;
@Resource
private IUserMapper userMapper;
@Override
public boolean saveAnimalSearch(AnimalSearch animalSearch) {
if (animalSearch == null) {
return false;
}
return this.animalSearchMapper.insert(animalSearch) > 0;
}
@Override
public List<AnimalSearchVo> queryAll(
Long cityId, Integer categoryId, Long countyId, Integer searchAnimal) {
List<AnimalSearch> animalSearches = null;
// 1、)什么都不做 首先必须处理的是cityId 如果为null 查询所有adopt
if (cityId == null) {
QueryWrapper<AnimalSearch> qw = new QueryWrapper<>();
// 没有被删除 并且审核通过的
qw.lambda().eq(AnimalSearch::getDeleteStatus, 0).eq(AnimalSearch::getVerifyStatus, 1);
animalSearches = this.animalSearchMapper.selectList(qw);
List<AnimalSearchVo> animalSearchVos = this.getAnimalSearchVo(animalSearches);
return animalSearchVos;
}
// 2、) 选择地区后:其他都为null
if (cityId != null && (categoryId == null || categoryId == 0) && countyId == null && searchAnimal == null) {
// 首先根据cityId查询出所有的县区id
QueryWrapper<County> qwCounty = new QueryWrapper<>();
qwCounty.lambda().eq(County::getCityId, cityId);
List<County> counties = this.countyMapper.selectList(qwCounty);
List<Long> countyIds = counties.stream().map(County::getId).collect(Collectors.toList());
if (countyIds.isEmpty()) {
return new ArrayList<>();
}
// 查找
QueryWrapper<AnimalSearch> qw = new QueryWrapper<>();
qw.lambda().eq(AnimalSearch::getDeleteStatus, 0).eq(AnimalSearch::getVerifyStatus, 1)
.in(AnimalSearch::getCountyId, countyIds);
animalSearches = this.animalSearchMapper.selectList(qw);
List<AnimalSearchVo> AnimalSearchVos = this.getAnimalSearchVo(animalSearches);
return AnimalSearchVos;
}
// 3、) 选择了具体的县区
if (cityId != null && (categoryId == null || categoryId == 0) && countyId != null && searchAnimal == null) {
QueryWrapper<AnimalSearch> qw = new QueryWrapper<>();
// 没有被删除 并且审核通过的 h有具体县区
qw.lambda().eq(AnimalSearch::getDeleteStatus, 0).eq(AnimalSearch::getVerifyStatus, 1)
.eq(AnimalSearch::getCountyId, countyId);
animalSearches = this.animalSearchMapper.selectList(qw);
List<AnimalSearchVo> animalSearchVos = this.getAnimalSearchVo(animalSearches);
return animalSearchVos;
}
// 4、)选择了宠类
if (cityId != null && categoryId != null && countyId == null && searchAnimal == null) {
// 首先根据cityId查询出所有的县区id
QueryWrapper<County> qwCounty = new QueryWrapper<>();
qwCounty.lambda().eq(County::getCityId, cityId);
List<County> counties = this.countyMapper.selectList(qwCounty);
List<Long> countyIds = counties.stream().map(County::getId).collect(Collectors.toList());
if (countyIds.isEmpty()) {
return new ArrayList<>();
}
// 其次根据宠类ID选择出具体的宠类id
QueryWrapper<AnimalCategoryDetails> qwCategory = new QueryWrapper<>();
qwCategory.lambda().eq(AnimalCategoryDetails::getCategoryId, categoryId);
List<AnimalCategoryDetails> details = this.animalCategoryDetailsMapper.selectList(qwCategory);
List<Integer> detailsIds = details.stream().map(AnimalCategoryDetails::getId).collect(Collectors.toList());
// 查找
// 记住,mybatisPlus 在查询来的集合为null的前提下 不会组装in的SQL,所以,所有的in我们要自己判断一下
if (detailsIds.isEmpty()) {
return new ArrayList<>();
}
QueryWrapper<AnimalSearch> qw = new QueryWrapper<>();
qw.lambda().eq(AnimalSearch::getDeleteStatus, 0).eq(AnimalSearch::getVerifyStatus, 1)
.in(AnimalSearch::getCountyId, countyIds).in(AnimalSearch::getCategoryId, detailsIds);
animalSearches = this.animalSearchMapper.selectList(qw);
List<AnimalSearchVo> animalSearchVos = this.getAnimalSearchVo(animalSearches);
return animalSearchVos;
}
// 5、)选择了搜索类型 --宠物、主人
if (cityId != null && (categoryId == null || categoryId == 0) && countyId == null && searchAnimal != null) {
// 首先根据cityId查询出所有的县区id
QueryWrapper<County> qwCounty = new QueryWrapper<>();
qwCounty.lambda().eq(County::getCityId, cityId);
List<County> counties = this.countyMapper.selectList(qwCounty);
List<Long> countyIds = counties.stream().map(County::getId).collect(Collectors.toList());
if (countyIds.isEmpty()) {
return new ArrayList<>();
}
// 查找
QueryWrapper<AnimalSearch> qw = new QueryWrapper<>();
qw.lambda().eq(AnimalSearch::getDeleteStatus, 0).eq(AnimalSearch::getVerifyStatus, 1)
.in(AnimalSearch::getCountyId, countyIds).eq(AnimalSearch::getSearchAnimal, searchAnimal);
animalSearches = this.animalSearchMapper.selectList(qw);
List<AnimalSearchVo> animalSearchVos = this.getAnimalSearchVo(animalSearches);
return animalSearchVos;
}
// 6、)选了具体的县区+宠类
if (cityId != null && categoryId != null && countyId != null && searchAnimal == null) {
// 先根据宠类ID选择出具体的宠类id
QueryWrapper<AnimalCategoryDetails> qwCategory = new QueryWrapper<>();
qwCategory.lambda().eq(AnimalCategoryDetails::getCategoryId, categoryId);
List<AnimalCategoryDetails> details = this.animalCategoryDetailsMapper.selectList(qwCategory);
List<Integer> detailsIds = details.stream().map(AnimalCategoryDetails::getId).collect(Collectors.toList());
if (detailsIds.isEmpty()) {
return new ArrayList<>();
}
QueryWrapper<AnimalSearch> qw = new QueryWrapper<>();
// 没有被删除 并且审核通过的 h有具体县区 + 宠类
qw.lambda().eq(AnimalSearch::getDeleteStatus, 0).eq(AnimalSearch::getVerifyStatus, 1)
.eq(AnimalSearch::getCountyId, countyId).in(AnimalSearch::getCategoryId, detailsIds);
animalSearches = this.animalSearchMapper.selectList(qw);
List<AnimalSearchVo> animal
我的毕业设计是一个前端和后端分离的项目,由前端门户系统和后端管理系统组


我的毕业设计是一个前端和后端分离的项目,由前端门户系统和后端管理系统组成。基于Vue的前端.js、Element UI、Axios等实现页面的构建和请求的发送,后端基于SpringBoot、MyBatis 在当今快速发展的信息技术领域,前端和后端分离的架构模式已经成为一种主流的设计思路。它将传统的全栈开发模式分离为前端和后端两个独立的开发部分,前端主要负责用户界面的展示和与用户的交互,而后端则主要负责业务逻辑的处理、数据的存储和系统的稳定运行。我的毕业设计正是基于这种架构模式,构建了一个完整的前端门户系统和后端管理系统。 前端部分是整个系统面向用户的第一界面。本设计采用了Vue.js框架,Vue.js是一个轻量级、模块化的前端JavaScript框架,能够高效地构建单页应用(SPA)。它以数据驱动和组件化的思想改变了我们传统的开发模式,使得开发和维护变得更加简单高效。Element UI作为一套基于Vue 2.0的桌面端组件库,提供了丰富的界面组件,使得开发者能够快速搭建界面布局,提高开发效率。Axios是一个基于Promise的HTTP客户端,适用于浏览器和node.js中,用于从前端发送HTTP请求到后端API,其易于使用的API和灵活的配置选项使得其成为了前端与后端通信的首选库。 后端管理系统是整个项目的核心,它处理所有业务逻辑和数据管理的任务。本设计后端使用了SpringBoot框架,SpringBoot是一个能够快速开发独立的、生产级别的基于Spring框架的应用程序的开源Java库。它的目标是简化Spring应用的初始搭建以及开发过程,通过默认配置即可快速启动项目。MyBatis是一个支持定制化SQL、存储过程以及高级映射的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。这样的组合使得后端开发更为高效,同时保证了系统的性能和稳定性。 整个项目通过前端和后端的分离,不仅使得前后端开发更加独立、并行化,同时也利于分工合作和系统的维护升级。此外,由于前端和后端的分离,也更容易实现服务的水平扩展,以及应对高并发场景。 毕业设计的题目可能涉及到“StrayAnimals-master”,这很可能是一个关于流浪动物管理系统的后端模块。系统可能提供了对流浪动物信息的录入、查询、统计等后端服务,这也进一步说明了后端管理系统在处理具体业务时的灵活性和可扩展性。 本项目的设计和实现,不仅让我对现代前后端分离的开发模式有了更深入的理解,也使我在实际开发中积累了宝贵的经验。通过这个项目,我学会了如何运用Vue.js和SpringBoot等现代Web开发技术,以及如何在实际工作中解决遇到的技术难题。更为重要的是,我意识到了团队协作的重要性,以及在项目开发中保持代码质量和遵守开发规范的必要性。 我的毕业设计是一个结合现代前端和后端技术的项目,它不仅展示了如何构建一个完整的Web应用,同时也反映了在实际开发中所面临的技术挑战和解决方案。通过这个项目,我不仅提高了解决实际问题的能力,也为未来的职业生涯奠定了坚实的基础。
































































































































- 1
- 2
- 3
- 4
- 5
- 6
- 11

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 1123
- 资源: 5294
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 三菱FX3U与欧姆龙E5CC温控器基于Modbus RTU的远程+本地通讯控制系统设计
- 工业自动化领域WinCC报表功能详解:日报表、月报表、年报表与自由时段报表的应用与实现
- MATLAB/Simulink仿真:交直流微电网中光伏、蓄电池、风机的并离网切换与虚拟同步发电机技术
- 西门子SMART200 PLC与电子天平自由口通讯程序详解及实战案例
- 西门子1200 PLC V15版多设备协同控制:步进电机、变频器与TCP/IP通讯应用实例
- QT(C++)权限管理平台源码解析:涵盖用户、角色、权限、菜单、日志管理等功能
- 西门子PLC浆料输送搅拌系统:模拟量控制与梯形图编程详解
- LabVIEW实现485标准Modbus通信的变频器测控系统及其应用
- 自动化控制领域:西门子200SMART PLC+三菱变频器+威纶通触摸屏的液体配料合成设备程序详解
- LS-DYNA霍普金森压杆SHPB动态劈裂仿真k文件详解及优化技巧
- 信号处理领域中小波降噪、小波包降噪与滤波降噪的Python实现及应用场景
- 西门子PLC模拟量滤波程序:适用于1200与1500系列的多功能信号处理功能块
- 纯电动车续驶里程的Simulink建模:基于PI控制的工况跟随与二阶RC电池模型
- 基于多种策略改进的黏菌优化算法SMA:实现快速收敛与高精度优化
- 基于二阶RC模型的磷酸铁锂电池参数在线辨识及其Matlab实现
- 西门子PLC200smart RS485轮询与步进轴控制在产品测试机中的应用


