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 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 list = (List) 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 queryWrapper = new EntityWrapper() .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 queryWrapper = new EntityWrapper() .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 fangjianList = new ArrayList<>(); // 创建一个Map对象,用于存放要查询是否重复的字段信息(具体使用方式需看后续代码逻辑,此处从变量名推测是这个用途) Map> 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>类型的dataList中 List> dataList = PoiUtil.poiImport(file.getPath()); // 删除dataList中的第一行数据,因为第一行可能是提示信息之类的,在后续处理中不需要 dataList.remove(0); for (List data : dataList) { // 循环处理dataList中每一行的数据(每一行数据也是一个List) 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类型,假设这个列表中的数据是需要展示在前端的房间相关视图数据 List list = (List) 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 queryWrapper = new EntityWrapper() .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, "表中有相同数据"); } } }