You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
homestay/minsu/minsuguanliw/src/main/java/com/controller/FangjianController.java

441 lines
31 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.controller;
import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;
import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;
/**
* 房间信息
* 后端接口
* @author [作者姓名,此处未给出具体值]
* @email [作者邮箱,此处未给出具体值]
*/
@RestController // 表明这个类是一个基于RESTful风格的控制器返回的数据会直接以JSON等格式响应给客户端无需额外配置视图解析器等
@Controller // 标识这是一个Spring MVC的控制器类
@RequestMapping("/fangjian") // 定义该控制器类的基础请求路径,所有该类下的接口路径都以此为前缀
public class FangjianController {
// 创建一个日志记录器对象,用于记录该类中的相关操作日志,方便调试和问题排查
private static final Logger logger = LoggerFactory.getLogger(FangjianController.class);
// 自动注入FangjianService用于处理与房间相关的业务逻辑比如查询、保存、更新等操作
@Autowired
private FangjianService fangjianService;
// 自动注入TokenService可能用于处理用户认证相关的令牌操作具体功能需看该服务的实现
@Autowired
private TokenService tokenService;
// 自动注入DictionaryService大概率用于对字典表数据进行转换等相关操作比如将某些字段值转换为更友好的展示形式
@Autowired
private DictionaryService dictionaryService;
// 自动注入YonghuService可能是与用户相关的服务也许用于处理房间信息和用户信息之间的关联等级联操作从名字推测“Yonghu”可能表示“用户”
@Autowired
private YonghuService yonghuService;
/**
* 后端列表
* 用于获取房间信息列表,支持分页、排序以及根据用户角色添加特定查询条件等功能
*
* @param params 包含查询参数的Map例如分页参数、排序字段、筛选条件等
* @param request HttpServletRequest对象用于获取会话中的用户相关信息等
* @return 返回一个R类型的对象包含操作结果信息以及查询到的房间信息列表数据封装在PageUtils中
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request) {
// 记录page方法的调试日志输出控制器类名和传入的查询参数信息将参数转换为JSON字符串格式记录
logger.debug("page方法:,,Controller:{},,params:{}", this.getClass().getName(), JSONObject.toJSONString(params));
// 从会话中获取用户角色信息,并转换为字符串类型
String role = String.valueOf(request.getSession().getAttribute("role"));
// 此处条件永远为假,应该是预留的一个逻辑分支,暂时不会进入该分支执行
if (false)
return R.error(511, "永不会进入");
// 如果用户角色是“用户”则在查询参数中添加当前用户的ID可能用于筛选该用户相关的房间信息
else if ("用户".equals(role))
params.put("yonghuId", request.getSession().getAttribute("userId"));
// 如果没有指定排序字段则默认按照“id”字段进行排序
if (params.get("orderBy") == null || params.get("orderBy") == "") {
params.put("orderBy", "id");
}
// 调用FangjianService的queryPage方法根据传入的参数查询房间信息列表并返回分页结果封装在PageUtils对象中
PageUtils page = fangjianService.queryPage(params);
// 获取分页结果中的房间信息列表转换为FangjianView类型的列表准备进行字典表数据转换操作
List<FangjianView> list = (List<FangjianView>) page.getList();
// 遍历房间信息列表,对每个房间信息对象进行字典表数据转换操作
for (FangjianView c : list) {
// 调用DictionaryService的dictionaryConvert方法根据请求信息对房间信息对象中的相关字段进行字典表数据转换
dictionaryService.dictionaryConvert(c, request);
}
// 返回操作成功的结果信息,并将包含转换后数据的分页结果放入返回数据中
return R.ok().put("data", page);
}
/**
* 后端详情
* 根据传入的房间ID获取具体的房间详细信息包括将实体对象转换为视图对象以及字典表数据转换等操作
*
* @param id 要查询的房间ID
* @param request HttpServletRequest对象用于获取会话信息等可能在字典表数据转换中会用到
* @return 返回一个R类型的对象包含操作结果信息以及查询到的房间详细信息封装在FangjianView对象中
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request) {
// 记录info方法的调试日志输出控制器类名和要查询的房间ID信息
logger.debug("info方法:,,Controller:{},,id:{}", this.getClass().getName(), id);
// 调用FangjianService的selectById方法根据传入的ID查询房间实体信息
FangjianEntity fangjian = fangjianService.selectById(id);
// 如果查询到了房间实体信息
if (fangjian!= null) {
// 创建一个FangjianView对象用于存放转换后的房间信息以便返回给前端展示更合适的数据格式
FangjianView view = new FangjianView();
// 使用Spring的BeanUtils工具类将房间实体对象中的属性值复制到视图对象中实现对象属性的转换
BeanUtils.copyProperties(fangjian, view);
// 调用DictionaryService的dictionaryConvert方法对视图对象中的相关字段进行字典表数据转换使其展示更友好的格式
dictionaryService.dictionaryConvert(view, request);
// 返回操作成功的结果信息,并将包含转换后数据的视图对象放入返回数据中
return R.ok().put("data", view);
} else {
// 如果没有查询到对应的房间信息,则返回错误结果信息,提示“查不到数据”
return R.error(511, "查不到数据");
}
}
/**
* 后端保存
* 用于保存新的房间信息到数据库,在保存前会先检查是否已有相同数据存在
*
* @param fangjian 包含房间信息的FangjianEntity对象通过请求体传入@RequestBody注解表示接收JSON格式的请求体数据并转换为对应的Java对象
* @param request HttpServletRequest对象用于获取会话中的用户角色等信息此处暂未看到具体使用场景但可能后续会扩展相关逻辑
* @return 返回一个R类型的对象保存成功返回操作成功信息若已有相同数据则返回错误信息提示“表中有相同数据”
*/
@RequestMapping("/save")
public R save(@RequestBody FangjianEntity fangjian, HttpServletRequest request) {
// 记录save方法的调试日志输出控制器类名和要保存的房间信息对象的字符串表示调用toString方法
logger.debug("save方法:,,Controller:{},,fangjian:{}", this.getClass().getName(), fangjian.toString());
// 从会话中获取用户角色信息,并转换为字符串类型
String role = String.valueOf(request.getSession().getAttribute("role"));
// 此处条件永远为假,应该是预留的一个逻辑分支,暂时不会进入该分支执行
if (false)
return R.error(511, "永远不会进入");
// 创建一个EntityWrapper对象用于构建数据库查询条件此处构建了一系列基于房间信息各个字段的相等条件用于查询是否已存在相同数据的记录
Wrapper<FangjianEntity> queryWrapper = new EntityWrapper<FangjianEntity>()
.eq("fangjian_name", fangjian.getFangjianName())
.eq("fangjian_tese", fangjian.getFangjianTese())
.eq("fangjian_peizhi", fangjian.getFangjianPeizhi())
.eq("fangjian_shangpin", fangjian.getFangjianShangpin())
.eq("fangjian_fuwu", fangjian.getFangjianFuwu())
.eq("fangjian_types", fangjian.getFangjianTypes())
.eq("fangjian_number", fangjian.getFangjianNumber())
.eq("fangjian_clicknum", fangjian.getFangjianClicknum());
// 记录构建的查询条件对应的SQL语句片段方便调试查看查询条件是否正确
logger.info("sql语句:" + queryWrapper.getSqlSegment());
// 调用FangjianService的selectOne方法根据构建的查询条件查询是否已存在相同数据的房间记录
FangjianEntity fangjianEntity = fangjianService.selectOne(queryWrapper);
// 如果不存在相同数据的记录
if (fangjianEntity == null) {
// 设置房间的点击次数初始值为1
fangjian.setFangjianClicknum(1);
// 设置房间的创建时间为当前时间
fangjian.setCreateTime(new Date());
// 调用FangjianService的insert方法将房间信息保存到数据库中
fangjianService.insert(fangjian);
// 返回操作成功的结果信息
return R.ok();
} else {
// 如果已存在相同数据的记录,则返回错误结果信息,提示“表中有相同数据”
return R.error(511, "表中有相同数据");
}
}
/**
* 后端修改
* 用于更新已存在的房间信息,更新前会检查是否存在除自身外相同数据的记录,并可处理房间图片相关字段为空的情况
*
* @param fangjian 包含更新后的房间信息的FangjianEntity对象通过请求体传入
* @param request HttpServletRequest对象用于获取会话信息等此处暂未看到具体使用场景但可能后续会扩展相关逻辑
* @return 返回一个R类型的对象更新成功返回操作成功信息若存在相同数据则返回错误信息提示“表中有相同数据”
*/
@RequestMapping("/update")
public R update(@RequestBody FangjianEntity fangjian, HttpServletRequest request) {
// 记录update方法的调试日志输出控制器类名和要更新的房间信息对象的字符串表示
logger.debug("update方法:,,Controller:{},,fangjian:{}", this.getClass().getName(), fangjian.toString());
// 从会话中获取用户角色信息,并转换为字符串类型
String role = String.valueOf(request.getSession().getAttribute("role"));
//if (false)
//return R.error(511, "永远不会进入");
// 创建一个EntityWrapper对象用于构建数据库查询条件此处构建了一系列基于房间信息各个字段的相等条件同时排除自身通过notIn条件排除传入的房间ID用于查询是否已存在相同数据的其他记录
Wrapper<FangjianEntity> queryWrapper = new EntityWrapper<FangjianEntity>()
.notIn("id", fangjian.getId())
.andNew()
.eq("fangjian_name", fangjian.getFangjianName())
.eq("fangjian_tese", fangjian.getFangjianTese())
.eq("fangjian_peizhi", fangjian.getFangjianPeizhi())
.eq("fangjian_shangpin", fangjian.getFangjianShangpin())
.eq("fangjian_fuwu", fangjian.getFangjianFuwu())
.eq("fangjian_types", fangjian.getFangjianTypes())
.eq("fangjian_number", fangjian.getFangjianNumber())
.eq("fangjian_clicknum", fangjian.getFangjianClicknum());
// 记录构建的查询条件对应的SQL语句片段方便调试查看查询条件是否正确
logger.info("sql语句:" + queryWrapper.getSqlSegment());
// 调用FangjianService的selectOne方法根据构建的查询条件查询是否已存在相同数据的其他房间记录
FangjianEntity fangjianEntity = fangjianService.selectOne(queryWrapper);
// 如果房间图片相关字段为空字符串或“null”字符串则将房间图片字段设置为null可能是为了在数据库中正确处理空值情况
if ("".equals(fangjian.getFangjianPhoto()) || "null".equals(fangjian.getFangjianPhoto())) {
fangjian.setFangjianPhoto(null);
}
// 如果不存在相同数据的其他记录
if (fangjianEntity == null) {
// 调用FangjianService的updateById方法根据传入的房间信息对象的ID更新对应的房间信息到数据库中
fangjianService.updateById(fangjian);
// 返回操作成功的结果信息
return R.ok();
} else {
// 如果存在相同数据的其他记录,则返回错误结果信息,提示“表中有相同数据”
return R.error(511, "表中有相同数据");
}
}
/**
* 删除
* 根据传入的房间ID数组批量删除对应的房间信息记录
*
* @param ids 包含要删除的房间ID的整数数组通过请求体传入
* @return 返回一个R类型的对象表示操作结果信息删除成功返回操作成功信息
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids) {
// 记录delete方法的调试日志输出控制器类名和要删除的房间ID数组的字符串表示
logger.debug("delete:,,Controller:{},,ids:{}", this.getClass().getName(), ids.toString());
// 调用FangjianService的deleteBatchIds方法传入要删除的房间ID列表批量删除对应的房间信息记录
fangjianService.deleteBatchIds(Arrays.asList(ids));
// 返回操作成功的结果信息
return R.ok();
}
/**
* 批量上传
* 用于从指定的Excel文件仅支持后缀为.xls的文件中读取房间信息数据并批量插入到数据库中同时会进行一些数据格式校验和异常处理
*
* @param fileName 要上传的文件名,从请求参数中获取
* @param request HttpServletRequest对象用于获取当前用户的ID等信息可能用于关联插入的房间信息与用户信息
* @return 返回一个R类型的对象表示操作结果信息成功返回操作成功信息若出现异常则返回相应的错误提示信息
*/
@RequestMapping("/batchInsert")
public R save(String fileName, HttpServletRequest request) {
// 记录batchInsert方法的调试日志输出控制器类名和要上传的文件名信息
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}", this.getClass().getName(), fileName);
// 从会话中获取当前用户的ID并转换为整数类型先将获取到的属性值转换为字符串再转换为整数
Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
// 创建一个SimpleDateFormat对象用于格式化日期此处指定日期格式为“yyyy-MM-dd HH:mm:ss”
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
// 创建一个FangjianEntity类型的列表用于存放从Excel文件中读取并解析后的房间信息对象准备批量插入到数据库中
List<FangjianEntity> fangjianList = new ArrayList<>();
// 创建一个Map对象用于存放要查询是否重复的字段信息具体使用方式需看后续代码逻辑此处从变量名推测是这个用途
Map<String, List<String>> seachFields = new HashMap<>();
// 获取当前系统时间,可能用于设置房间信息的创建时间等字段(虽然当前代码中未看到完整使用场景)
Date date = new Date();
// 获取文件名中最后一个点(.)的索引位置,用于判断文件后缀
int lastIndexOf = fileName.lastIndexOf(".");
// 如果文件名中没有点,即没有后缀
if (lastIndexOf == -1) {
// 返回错误结果信息,提示“该文件没有后缀”
return R.error(511, "该文件没有后缀");
} else {
// 获取文件名的后缀部分(从最后一个点开始截取后面的字符串)
String suffix = fileName.substring(lastIndexOf);
// 如果后缀不是“.xls”说明文件格式不符合要求
if (!".xls".equals(suffix)) {
// 返回错误结果信息提示“只支持后缀为xls的excel文件”
return R.error(511, "只支持后缀为xls的excel文件");
} else {
// 通过类加载器获取指定文件名对应的文件资源路径并转换为URL对象
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);
// 创建一个File对象参数是通过resource.getFile()获取的文件路径,这里可能是用于后续判断文件是否存在等操作
File file = new File(resource.getFile());
if (!file.exists()) {
// 如果文件不存在返回一个错误信息给前端错误码是511提示找不到上传文件并告知联系管理员
return R.error(511, "找不到上传文件,请联系管理员");
} else {
// 通过PoiUtil工具类的poiImport方法读取指定路径的xls文件将读取到的数据存放在List<List<String>>类型的dataList中
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());
// 删除dataList中的第一行数据因为第一行可能是提示信息之类的在后续处理中不需要
dataList.remove(0);
for (List<String> data : dataList) {
// 循环处理dataList中每一行的数据每一行数据也是一个List<String>
FangjianEntity fangjianEntity = new FangjianEntity();
// 以下这几行代码原本是用于设置FangjianEntity对象的各个属性值但目前都是设置为固定值或者取了错误的数据索引都取的data.get(0)),后续应该根据实际需求修改正确的获取数据的索引和赋值逻辑
// 设置房间名称此处应该根据实际表格数据的对应列索引来获取正确的值当前写法有误都取的data.get(0)),要改的
fangjianEntity.setFangjianName(data.get(0));
// 设置房间图片,暂时设置为空字符串,可能后续需要完善获取图片的逻辑,比如从文件中读取或者根据路径获取等,详情和图片相关
fangjianEntity.setFangjianPhoto("");
// 设置房间特色同样这里取值有误取的data.get(0)),应该按实际情况修改获取对应列数据的索引,要改的
fangjianEntity.setFangjianTese(data.get(0));
// 设置房间配置取值也存在问题取的data.get(0)),需按正确的表格列索引来获取对应数据,要改的
fangjianEntity.setFangjianPeizhi(data.get(0));
// 设置提供的商品此处也是错误的取值方式取的data.get(0)),需要改成对应正确的数据获取逻辑,要改的
fangjianEntity.setFangjianShangpin(data.get(0));
// 设置提供的服务同样是取值错误取的data.get(0)),后续要根据实际情况修改,要改的
fangjianEntity.setFangjianFuwu(data.get(0));
// 设置价格错误的取值取的data.get(0)),要按照实际价格所在的表格列来获取数据,要改的
fangjianEntity.setFangjianMoney(data.get(0));
// 设置房间类型将表格中对应列的数据转换为Integer类型并设置但当前取值有误取的data.get(0)),要修改为正确的索引获取数据,要改的
fangjianEntity.setFangjianTypes(Integer.valueOf(data.get(0)));
// 设置房间剩余数量把表格对应列数据转成Integer后设置不过当前取值不对取的data.get(0)),需改成正确的索引获取,要改的
fangjianEntity.setFangjianNumber(Integer.valueOf(data.get(0)));
// 设置点击次数将表格对应列数据转为Integer后设置目前取值错误取的data.get(0)),要按正确的方式获取数据,要改的
fangjianEntity.setFangjianClicknum(Integer.valueOf(data.get(0)));
// 设置房间详情,暂时设置为空字符串,详情和图片相关,可能后续要完善获取详情内容的逻辑
fangjianEntity.setFangjianContent("");
// 设置创建时间这里假设date变量在外部已经正确初始化用于记录该房间数据的创建时间
fangjianEntity.setCreateTime(date);
fangjianList.add(fangjianEntity);
// 把要查询是否重复的字段放入map中代码中此处未看到具体放入map的实现逻辑可能后续要补充完整
}
// 调用fangjianService的insertBatch方法批量插入fangjianList中的房间数据到数据库中
fangjianService.insertBatch(fangjianList);
// 如果批量插入成功,返回成功的响应给前端
return R.ok();
}
} catch(Exception e){
// 如果在上述操作过程中出现异常,打印异常堆栈信息方便排查问题
e.printStackTrace();
// 返回一个错误信息给前端错误码是511提示批量插入数据异常并告知联系管理员
return R.error(511, "批量插入数据异常,请联系管理员");
}
}
/**
* 前端列表
*/
// 前端列表相关的方法,被标注了 @IgnoreAuth 表示这个方法不需要进行权限认证,通过@RequestMapping("/list")指定了该方法处理的请求路径为 /list
@IgnoreAuth
@RequestMapping("/list")
public R list (@RequestParam Map < String, Object > params, HttpServletRequest request){
// 使用日志记录器记录debug级别的日志信息记录当前执行的list方法所在的类名以及传入的参数信息将参数转为JSON字符串格式记录
logger.debug("list方法:,,Controller:{},,params:{}", this.getClass().getName(), JSONObject.toJSONString(params));
// 判断传入的参数中是否指定了排序字段如果没有指定即获取到的orderBy参数为空字符串
if (StringUtil.isEmpty(String.valueOf(params.get("orderBy")))) {
// 就默认按照id字段倒序排序将orderBy参数设置为id
params.put("orderBy", "id");
}
// 调用fangjianService的queryPage方法根据传入的参数查询并获取分页数据存放在PageUtils对象中
PageUtils page = fangjianService.queryPage(params);
// 获取分页数据中的数据列表这里强制转换为List<FangjianView>类型,假设这个列表中的数据是需要展示在前端的房间相关视图数据
List<FangjianView> list = (List<FangjianView>) page.getList();
for (FangjianView c : list)
// 循环调用dictionaryService的dictionaryConvert方法用于对每个FangjianView对象中的对应字典表字段进行转换可能是将字典表中的编码转换为对应的文字描述等操作传入当前的HttpServletRequest对象可能是用于获取一些上下文相关信息等
dictionaryService.dictionaryConvert(c, request);
// 返回成功的响应给前端并将包含处理好的分页数据的PageUtils对象放入响应中前端可以根据此数据进行展示等操作
return R.ok().put("data", page);
}
/**
* 前端详情
*/
// 前端详情相关的方法,通过@RequestMapping("/detail/{id}")指定了该方法处理的请求路径为 /detail/{id},其中{id}是一个路径变量,表示要查询详情的房间的唯一标识
@RequestMapping("/detail/{id}")
public R detail (@PathVariable("id") Long id, HttpServletRequest request){
// 使用日志记录器记录debug级别的日志信息记录当前执行的detail方法所在的类名以及传入的房间id参数
logger.debug("detail方法:,,Controller:{},,id:{}", this.getClass().getName(), id);
// 调用fangjianService的selectById方法根据传入的房间id从数据库中查询对应的FangjianEntity对象代表房间实体数据
FangjianEntity fangjian = fangjianService.selectById(id);
if (fangjian != null) {
// 如果查询到了对应的房间数据将该房间的点击次数加1用于记录该房间被查看的次数统计
fangjian.setFangjianClicknum(fangjian.getFangjianClicknum() + 1);
// 调用fangjianService的updateById方法将更新后的房间数据点击次数已加1更新到数据库中
fangjianService.updateById(fangjian);
// 创建一个FangjianView对象用于将从数据库查询到的FangjianEntity实体数据转换为适合前端展示的视图数据格式
FangjianView view = new FangjianView();
// 使用BeanUtils工具类的copyProperties方法将fangjian对象的属性值复制到view对象中实现实体数据到视图数据的转换前提是FangjianEntity和FangjianView的属性有对应关系
BeanUtils.copyProperties(fangjian, view);
// 调用dictionaryService的dictionaryConvert方法对转换后的FangjianView对象中的对应字典表字段进行转换类似前面list方法中的转换操作传入当前的HttpServletRequest对象用于获取上下文相关信息等
dictionaryService.dictionaryConvert(view, request);
// 返回成功的响应给前端并将包含处理好的房间详情视图数据的FangjianView对象放入响应中前端可以据此展示房间详情信息
return R.ok().put("data", view);
} else {
// 如果根据传入的id没有查询到对应的房间数据返回一个错误信息给前端错误码是511提示查不到数据
return R.error(511, "查不到数据");
}
}
/**
* 前端保存
*/
// 前端保存相关的方法,通过@RequestMapping("/add")指定了该方法处理的请求路径为 /add并且使用@RequestBody注解表示接收前端传来的JSON格式的请求体数据并将其转换为FangjianEntity对象
@RequestMapping("/add")
public R add (@RequestBody FangjianEntity fangjian, HttpServletRequest request){
// 使用日志记录器记录debug级别的日志信息记录当前执行的add方法所在的类名以及传入的FangjianEntity对象信息将对象转为字符串格式记录
logger.debug("add方法:,,Controller:{},,fangjian:{}", this.getClass().getName(), fangjian.toString());
// 创建一个EntityWrapper对象用于构建数据库查询的条件这里根据FangjianEntity对象的多个属性房间名称、特色、配置等来构建相等条件的查询语句用于查询数据库中是否已经存在相同数据的记录
Wrapper<FangjianEntity> queryWrapper = new EntityWrapper<FangjianEntity>()
.eq("fangjian_name", fangjian.getFangjianName())
.eq("fangjian_tese", fangjian.getFangjianTese())
.eq("fangjian_peizhi", fangjian.getFangjianPeizhi())
.eq("fangjian_shangpin", fangjian.getFangjianShangpin())
.eq("fangjian_fuwu", fangjian.getFangjianFuwu())
.eq("fangjian_types", fangjian.getFangjianTypes())
.eq("fangjian_number", fangjian.getFangjianNumber())
.eq("fangjian_clicknum", fangjian.getFangjianClicknum());
// 记录构建好的查询语句对应的SQL片段信息方便调试查看具体的查询条件
logger.info("sql语句:" + queryWrapper.getSqlSegment());
// 调用fangjianService的selectOne方法根据构建好的查询条件从数据库中查询是否存在满足条件的FangjianEntity对象即是否存在相同数据的记录
FangjianEntity fangjianEntity = fangjianService.selectOne(queryWrapper);
if (fangjianEntity == null) {
// 如果查询结果为null表示数据库中不存在相同数据的记录设置当前要保存的FangjianEntity对象的创建时间为当前系统时间new Date()获取当前时间)
fangjian.setCreateTime(new Date());
// 调用fangjianService的insert方法将当前的FangjianEntity对象插入到数据库中
fangjianService.insert(fangjian);
// 如果插入成功,返回成功的响应给前端
return R.ok();
} else {
// 如果查询到了相同数据的记录返回一个错误信息给前端错误码是511提示表中有相同数据
return R.error(511, "表中有相同数据");
}
}
}