pull/3/head
wangxin 3 months ago
parent 2545d38280
commit dc7542bc88

@ -35,297 +35,407 @@ import com.alibaba.fastjson.*;
/**
*
*
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/fangjian")
* @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;
//级联表service
// 自动注入YonghuService可能是与用户相关的服务也许用于处理房间信息和用户信息之间的关联等级联操作从名字推测“Yonghu”可能表示“用户”
@Autowired
private YonghuService yonghuService;
/**
*
*/
*
*
*
* @param params Map
* @param request HttpServletRequest
* @return RPageUtils
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
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,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
// 此处条件永远为假,应该是预留的一个逻辑分支,暂时不会进入该分支执行
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);
//字典表数据转换
List<FangjianView> list =(List<FangjianView>)page.getList();
for(FangjianView c:list){
//修改对应字典表字段
// 获取分页结果中的房间信息列表转换为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 RFangjianView
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),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){
//entity转view
// 如果查询到了房间实体信息
if (fangjian!= null) {
// 创建一个FangjianView对象用于存放转换后的房间信息以便返回给前端展示更合适的数据格式
FangjianView view = new FangjianView();
BeanUtils.copyProperties( fangjian , view );//把实体数据重构到view中
// 使用Spring的BeanUtils工具类将房间实体对象中的属性值复制到视图对象中实现对象属性的转换
BeanUtils.copyProperties(fangjian, view);
//修改对应字典表字段
// 调用DictionaryService的dictionaryConvert方法对视图对象中的相关字段进行字典表数据转换使其展示更友好的格式
dictionaryService.dictionaryConvert(view, request);
// 返回操作成功的结果信息,并将包含转换后数据的视图对象放入返回数据中
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
} else {
// 如果没有查询到对应的房间信息,则返回错误结果信息,提示“查不到数据”
return R.error(511, "查不到数据");
}
}
/**
*
*/
*
*
*
* @param fangjian FangjianEntity@RequestBodyJSONJava
* @param request HttpServletRequest使
* @return R
*/
@RequestMapping("/save")
public R save(@RequestBody FangjianEntity fangjian, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,fangjian:{}",this.getClass().getName(),fangjian.toString());
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,"永远不会进入");
// 此处条件永远为假,应该是预留的一个逻辑分支,暂时不会进入该分支执行
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())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
.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){
// 如果不存在相同数据的记录
if (fangjianEntity == null) {
// 设置房间的点击次数初始值为1
fangjian.setFangjianClicknum(1);
// 设置房间的创建时间为当前时间
fangjian.setCreateTime(new Date());
// 调用FangjianService的insert方法将房间信息保存到数据库中
fangjianService.insert(fangjian);
// 返回操作成功的结果信息
return R.ok();
}else {
return R.error(511,"表中有相同数据");
} else {
// 如果已存在相同数据的记录,则返回错误结果信息,提示“表中有相同数据”
return R.error(511, "表中有相同数据");
}
}
/**
*
*/
*
*
*
* @param fangjian FangjianEntity
* @param request HttpServletRequest使
* @return R
*/
@RequestMapping("/update")
public R update(@RequestBody FangjianEntity fangjian, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,fangjian:{}",this.getClass().getName(),fangjian.toString());
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,"永远不会进入");
//根据字段查询是否有相同数据
//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())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
.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);
if("".equals(fangjian.getFangjianPhoto()) || "null".equals(fangjian.getFangjianPhoto())){
fangjian.setFangjianPhoto(null);
// 如果房间图片相关字段为空字符串或“null”字符串则将房间图片字段设置为null可能是为了在数据库中正确处理空值情况
if ("".equals(fangjian.getFangjianPhoto()) || "null".equals(fangjian.getFangjianPhoto())) {
fangjian.setFangjianPhoto(null);
}
if(fangjianEntity==null){
fangjianService.updateById(fangjian);//根据id更新
// 如果不存在相同数据的其他记录
if (fangjianEntity == null) {
// 调用FangjianService的updateById方法根据传入的房间信息对象的ID更新对应的房间信息到数据库中
fangjianService.updateById(fangjian);
// 返回操作成功的结果信息
return R.ok();
}else {
return R.error(511,"表中有相同数据");
} else {
// 如果存在相同数据的其他记录,则返回错误结果信息,提示“表中有相同数据”
return R.error(511, "表中有相同数据");
}
}
/**
*
*/
*
* ID
*
* @param ids ID
* @return R
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
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 HttpServletRequestID
* @return R
*/
@RequestMapping("/batchInsert")
public R save( String fileName, HttpServletRequest request){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
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 {
List<FangjianEntity> fangjianList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
// 创建一个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{
// 如果文件名中没有点,即没有后缀
if (lastIndexOf == -1) {
// 返回错误结果信息,提示“该文件没有后缀”
return R.error(511, "该文件没有后缀");
} else {
// 获取文件名的后缀部分(从最后一个点开始截取后面的字符串)
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
// 如果后缀不是“.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()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
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.setFangjianName(data.get(0)); //房间名称 要改的
// fangjianEntity.setFangjianPhoto("");//详情和图片
// fangjianEntity.setFangjianTese(data.get(0)); //房间特色 要改的
// fangjianEntity.setFangjianPeizhi(data.get(0)); //房间配置 要改的
// fangjianEntity.setFangjianShangpin(data.get(0)); //提供的商品 要改的
// fangjianEntity.setFangjianFuwu(data.get(0)); //提供的服务 要改的
// fangjianEntity.setFangjianMoney(data.get(0)); //价格(天) 要改的
// fangjianEntity.setFangjianTypes(Integer.valueOf(data.get(0))); //房间类型 要改的
// fangjianEntity.setFangjianNumber(Integer.valueOf(data.get(0))); //房间剩余数量 要改的
// fangjianEntity.setFangjianClicknum(Integer.valueOf(data.get(0))); //点击次数 要改的
// fangjianEntity.setFangjianContent("");//详情和图片
// fangjianEntity.setCreateTime(date);//时间
// 以下这几行代码原本是用于设置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的实现逻辑可能后续要补充完整
//把要查询是否重复的字段放入map中
}
//查询是否重复
// 调用fangjianService的insertBatch方法批量插入fangjianList中的房间数据到数据库中
fangjianService.insertBatch(fangjianList);
// 如果批量插入成功,返回成功的响应给前端
return R.ok();
}
} catch(Exception e){
// 如果在上述操作过程中出现异常,打印异常堆栈信息方便排查问题
e.printStackTrace();
// 返回一个错误信息给前端错误码是511提示批量插入数据异常并告知联系管理员
return R.error(511, "批量插入数据异常,请联系管理员");
}
}
}catch (Exception e){
e.printStackTrace();
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
/**
*
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
// 没有指定排序字段就默认id倒序
if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
params.put("orderBy","id");
}
PageUtils page = fangjianService.queryPage(params);
//字典表数据转换
List<FangjianView> list =(List<FangjianView>)page.getList();
for(FangjianView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
return R.ok().put("data", page);
}
/**
*
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
FangjianEntity fangjian = fangjianService.selectById(id);
if(fangjian !=null){
//点击数量加1
fangjian.setFangjianClicknum(fangjian.getFangjianClicknum()+1);
fangjianService.updateById(fangjian);
//entity转view
FangjianView view = new FangjianView();
BeanUtils.copyProperties( fangjian , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
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("/add")
public R add(@RequestBody FangjianEntity fangjian, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,fangjian:{}",this.getClass().getName(),fangjian.toString());
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())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
FangjianEntity fangjianEntity = fangjianService.selectOne(queryWrapper);
if(fangjianEntity==null){
fangjian.setCreateTime(new Date());
fangjianService.insert(fangjian);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
*
*/
// 前端详情相关的方法,通过@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, "表中有相同数据");
}
}
}

@ -1,4 +1,3 @@
package com.controller;
import java.io.File;
@ -35,203 +34,281 @@ import com.alibaba.fastjson.*;
/**
* /
*
* @author
* @email
*/
* @author
* @email
*/
// 表明这是一个RESTful风格的控制器组合了 @Controller 和 @ResponseBody 注解的功能返回的数据直接以JSON等格式响应给客户端
@RestController
// 标识这是一个Spring管理的Bean是一个控制器类
@Controller
// 定义该控制器处理的基础请求路径
@RequestMapping("/fangjianLiuyan")
public class FangjianLiuyanController {
// 创建一个日志记录器对象,用于记录该类相关操作的日志信息,方便调试和排查问题,日志级别等配置通常在项目的日志配置文件中设置
private static final Logger logger = LoggerFactory.getLogger(FangjianLiuyanController.class);
// 使用Spring的依赖注入自动装配FangjianLiuyanService方便在该控制器中调用其相关业务逻辑方法
@Autowired
private FangjianLiuyanService fangjianLiuyanService;
// 使用Spring的依赖注入自动装配TokenService可能用于处理用户认证相关的令牌操作等具体看该服务的实际功能
@Autowired
private TokenService tokenService;
// 使用Spring的依赖注入自动装配DictionaryService用于字典表相关的数据转换操作比如将字典表中的编码转换为对应的文字描述等
@Autowired
private DictionaryService dictionaryService;
//级联表service
// 使用Spring的依赖注入自动装配FangjianService用于和房间相关的业务逻辑操作比如查询房间信息等可能是级联表相关的服务调用
@Autowired
private FangjianService fangjianService;
// 使用Spring的依赖注入自动装配YonghuService用于和用户相关的业务逻辑操作比如查询用户信息等可能是级联表相关的服务调用
@Autowired
private YonghuService yonghuService;
/**
*
*/
*
* /
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的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,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
// 此处条件永远为假,所以下面的代码块永远不会执行,可能是预留的逻辑或者后续需要修改调整的地方
if (false)
return R.error(511, "永不会进入");
// 如果用户角色是"用户"则将当前登录用户的ID设置到查询参数中可能用于查询该用户相关的评论/投诉信息,限制查询范围
else if ("用户".equals(role))
params.put("yonghuId", request.getSession().getAttribute("userId"));
// 判断传入的参数中是否指定了排序字段如果没有指定即获取到的orderBy参数为空字符串
if (params.get("orderBy") == null || params.get("orderBy") == "") {
// 就默认按照id字段倒序排序将orderBy参数设置为id
params.put("orderBy", "id");
}
// 调用fangjianLiuyanService的queryPage方法根据传入的参数查询并获取分页数据存放在PageUtils对象中
PageUtils page = fangjianLiuyanService.queryPage(params);
//字典表数据转换
List<FangjianLiuyanView> list =(List<FangjianLiuyanView>)page.getList();
for(FangjianLiuyanView c:list){
//修改对应字典表字段
// 获取分页数据中的数据列表这里强制转换为List<FangjianLiuyanView>类型,这些视图对象可能是用于在后端展示或者传递给前端的评论/投诉相关视图数据
List<FangjianLiuyanView> list = (List<FangjianLiuyanView>) page.getList();
for (FangjianLiuyanView c : list) {
// 循环调用dictionaryService的dictionaryConvert方法用于对每个FangjianLiuyanView对象中的对应字典表字段进行转换比如将字典编码转换为对应的文字描述等传入当前的HttpServletRequest对象可能是用于获取一些上下文相关信息等
dictionaryService.dictionaryConvert(c, request);
}
// 返回成功的响应给前端并将包含处理好的分页数据的PageUtils对象放入响应中前端可以根据此数据进行展示等操作
return R.ok().put("data", page);
}
/**
*
*/
*
* /ID
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
public R info(@PathVariable("id") Long id, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的info方法所在的类名以及传入的评论/投诉ID参数方便调试查看请求参数情况
logger.debug("info方法:,,Controller:{},,id:{}", this.getClass().getName(), id);
// 调用fangjianLiuyanService的selectById方法根据传入的评论/投诉ID从数据库中查询对应的FangjianLiuyanEntity对象代表评论/投诉实体数据)
FangjianLiuyanEntity fangjianLiuyan = fangjianLiuyanService.selectById(id);
if(fangjianLiuyan !=null){
//entity转view
if (fangjianLiuyan!= null) {
// 创建一个FangjianLiuyanView对象用于将从数据库查询到的FangjianLiuyanEntity实体数据转换为适合前端展示的视图数据格式
FangjianLiuyanView view = new FangjianLiuyanView();
BeanUtils.copyProperties( fangjianLiuyan , view );//把实体数据重构到view中
// 使用BeanUtils工具类的copyProperties方法将fangjianLiuyan对象的属性值复制到view对象中实现实体数据到视图数据的转换前提是FangjianLiuyanEntity和FangjianLiuyanView的属性有对应关系
BeanUtils.copyProperties(fangjianLiuyan, view);
// 以下是处理级联表相关的数据,获取评论/投诉对应的房间信息并添加到视图对象中排除一些不需要的字段如id、创建时间等字段
// 调用fangjianService的selectById方法根据评论/投诉实体中关联的房间ID获取对应的FangjianEntity对象代表房间实体数据
FangjianEntity fangjian = fangjianService.selectById(fangjianLiuyan.getFangjianId());
if (fangjian!= null) {
// 使用BeanUtils工具类的copyProperties方法将fangjian对象的部分属性值复制到view对象中排除指定的字段把级联的房间数据添加到视图中
BeanUtils.copyProperties(fangjian, view, new String[]{"id", "createTime", "insertTime", "updateTime"});
// 设置视图对象中的房间ID确保房间ID能正确传递给前端展示或者后续使用
view.setFangjianId(fangjian.getId());
}
//级联表
FangjianEntity fangjian = fangjianService.selectById(fangjianLiuyan.getFangjianId());
if(fangjian != null){
BeanUtils.copyProperties( fangjian , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setFangjianId(fangjian.getId());
}
//级联表
YonghuEntity yonghu = yonghuService.selectById(fangjianLiuyan.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
// 以下是处理级联表相关的数据,获取评论/投诉对应的用户信息并添加到视图对象中排除一些不需要的字段如id、创建时间等字段
// 调用yonghuService的selectById方法根据评论/投诉实体中关联的用户ID获取对应的YonghuEntity对象代表用户实体数据
YonghuEntity yonghu = yonghuService.selectById(fangjianLiuyan.getYonghuId());
if (yonghu!= null) {
// 使用BeanUtils工具类的copyProperties方法将yonghu对象的部分属性值复制到view对象中排除指定的字段把级联的用户数据添加到视图中
BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createTime", "insertTime", "updateTime"});
// 设置视图对象中的用户ID确保用户ID能正确传递给前端展示或者后续使用
view.setYonghuId(yonghu.getId());
}
// 调用dictionaryService的dictionaryConvert方法对转换后的FangjianLiuyanView对象中的对应字典表字段进行转换类似前面page方法中的转换操作传入当前的HttpServletRequest对象用于获取上下文相关信息等
dictionaryService.dictionaryConvert(view, request);
// 返回成功的响应给前端,并将包含处理好的评论/投诉详情视图数据的FangjianLiuyanView对象放入响应中前端可以据此展示详细信息
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
} else {
// 如果根据传入的ID没有查询到对应的评论/投诉数据返回一个错误信息给前端错误码是511提示查不到数据
return R.error(511, "查不到数据");
}
}
/**
*
*/
*
* /
*/
@RequestMapping("/save")
public R save(@RequestBody FangjianLiuyanEntity fangjianLiuyan, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,fangjianLiuyan:{}",this.getClass().getName(),fangjianLiuyan.toString());
public R save(@RequestBody FangjianLiuyanEntity fangjianLiuyan, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的save方法所在的类名以及传入的FangjianLiuyanEntity对象信息将对象转为字符串格式记录方便调试查看请求数据情况
logger.debug("save方法:,,Controller:{},,fangjianLiuyan:{}", this.getClass().getName(), fangjianLiuyan.toString());
// 从当前请求的会话中获取用户角色信息,并转换为字符串类型,可能用于后续根据不同角色进行不同的数据处理逻辑判断
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("用户".equals(role))
// 此处条件永远为假,所以下面的代码块永远不会执行,可能是预留的逻辑或者后续需要修改调整的地方
if (false)
return R.error(511, "永远不会进入");
// 如果用户角色是"用户"则将当前登录用户的ID设置到评论/投诉实体对象中,关联该评论/投诉与当前用户
else if ("用户".equals(role))
fangjianLiuyan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
// 设置评论/投诉信息的插入时间为当前系统时间,用于记录该评论/投诉的创建时间
fangjianLiuyan.setInsertTime(new Date());
// 设置评论/投诉信息的创建时间为当前系统时间,与插入时间可能在业务上表示不同含义(具体看业务需求)
fangjianLiuyan.setCreateTime(new Date());
// 调用fangjianLiuyanService的insert方法将当前的FangjianLiuyanEntity对象插入到数据库中
fangjianLiuyanService.insert(fangjianLiuyan);
// 如果插入成功,返回成功的响应给前端
return R.ok();
}
/**
*
*/
*
* /
*/
@RequestMapping("/update")
public R update(@RequestBody FangjianLiuyanEntity fangjianLiuyan, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,fangjianLiuyan:{}",this.getClass().getName(),fangjianLiuyan.toString());
public R update(@RequestBody FangjianLiuyanEntity fangjianLiuyan, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的update方法所在的类名以及传入的FangjianLiuyanEntity对象信息将对象转为字符串格式记录方便调试查看请求数据情况
logger.debug("update方法:,,Controller:{},,fangjianLiuyan:{}", this.getClass().getName(), fangjianLiuyan.toString());
// 从当前请求的会话中获取用户角色信息,并转换为字符串类型,可能用于后续根据不同角色进行不同的数据处理逻辑判断(当前部分代码被注释掉了,可能是之前的逻辑或者后续需要调整补充的地方)
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("用户".equals(role))
// if (false)
// return R.error(511, "永远不会进入");
// else if ("用户".equals(role))
// fangjianLiuyan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//根据字段查询是否有相同数据
// 根据字段查询是否有相同数据这里构建了一个EntityWrapper对象用于设置查询条件目前只设置了id为0的条件可能需要根据实际业务修改正确的判断重复数据的条件
Wrapper<FangjianLiuyanEntity> queryWrapper = new EntityWrapper<FangjianLiuyanEntity>()
.eq("id",0)
;
.eq("id", 0);
logger.info("sql语句:"+queryWrapper.getSqlSegment());
// 记录构建好的查询语句对应的SQL片段信息方便调试查看具体的查询条件
logger.info("sql语句:" + queryWrapper.getSqlSegment());
// 调用fangjianLiuyanService的selectOne方法根据构建好的查询条件从数据库中查询是否存在满足条件的FangjianLiuyanEntity对象即是否存在相同数据的记录当前条件可能不准确需完善
FangjianLiuyanEntity fangjianLiuyanEntity = fangjianLiuyanService.selectOne(queryWrapper);
// 设置评论/投诉信息的更新时间为当前系统时间,用于记录该评论/投诉的最后更新时间
fangjianLiuyan.setUpdateTime(new Date());
if(fangjianLiuyanEntity==null){
fangjianLiuyanService.updateById(fangjianLiuyan);//根据id更新
if (fangjianLiuyanEntity == null) {
// 如果查询结果为null表示不存在相同数据的记录调用fangjianLiuyanService的updateById方法根据传入的评论/投诉实体对象的ID更新数据库中的对应记录
fangjianLiuyanService.updateById(fangjianLiuyan);
// 如果更新成功,返回成功的响应给前端
return R.ok();
}else {
return R.error(511,"表中有相同数据");
} else {
// 如果查询到了相同数据的记录返回一个错误信息给前端错误码是511提示表中有相同数据
return R.error(511, "表中有相同数据");
}
}
/**
*
*/
*
* /ID/
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
public R delete(@RequestBody Integer[] ids) {
// 记录debug级别的日志信息记录当前执行的delete方法所在的类名以及传入的评论/投诉ID数组信息将数组转为字符串格式记录方便调试查看请求参数情况
logger.debug("delete:,,Controller:{},,ids:{}", this.getClass().getName(), ids.toString());
// 调用fangjianLiuyanService的deleteBatchIds方法传入要删除的评论/投诉ID列表批量删除数据库中对应的记录
fangjianLiuyanService.deleteBatchIds(Arrays.asList(ids));
// 如果删除成功,返回成功的响应给前端
return R.ok();
}
/**
*
* /Excel.xls
*/
@RequestMapping("/batchInsert")
public R save( String fileName, HttpServletRequest request){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
public R save(String fileName, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的batchInsert方法所在的类名以及传入的文件名参数方便调试查看请求参数情况
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}", this.getClass().getName(), fileName);
// 从当前请求的会话中获取当前登录用户的ID并转换为Integer类型可能用于关联上传的评论/投诉信息与当前用户
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 {
List<FangjianLiuyanEntity> fangjianLiuyanList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
// 创建一个列表用于存放从文件中读取并解析后要批量插入的FangjianLiuyanEntity对象代表房间评论/投诉实体数据)
List<FangjianLiuyanEntity> fangjianLiuyanList = 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{
if (lastIndexOf == -1) {
// 如果没有找到点即没有后缀名返回一个错误信息给前端错误码是511提示该文件没有后缀
return R.error(511, "该文件没有后缀");
} else {
// 获取文件名中最后一个点(.)之后的后缀部分,用于后续判断文件类型是否符合要求
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
// 判断后缀名是否不等于 ".xls",如果不是该后缀的文件,说明不符合当前方法支持的文件类型要求
if (!".xls".equals(suffix)) {
// 返回一个错误信息给前端错误码是511并提示只支持后缀为xls的excel文件告知前端操作不符合要求
return R.error(511, "只支持后缀为xls的excel文件");
} else {
// 通过当前类的类加载器获取指定文件(位于 "static/upload/" 目录下文件名由传入的fileName指定的资源路径返回一个URL对象
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);
// 根据获取到的URL对象对应的文件路径创建一个File对象用于后续判断文件是否存在以及读取文件内容等操作
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
// 判断该文件是否不存在,如果不存在,则执行下面的返回错误信息的逻辑
if (!file.exists()) {
// 返回一个错误信息给前端错误码是511提示找不到上传文件并告知前端联系管理员来解决该问题
return R.error(511, "找不到上传文件,请联系管理员");
} else {
// 调用PoiUtil工具类的poiImport方法传入文件的路径读取该.xls文件内容返回的数据结构是一个嵌套的List外层List表示行内层List的每个元素表示每行中的单元格数据存放在dataList中
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());
// 删除dataList中的第一行数据通常是因为第一行可能是标题行、提示信息之类的内容在后续将数据转换为实体对象时不需要这一行数据
dataList.remove(0);
// 遍历dataList中剩余的每一行数据每一行数据也是一个List<String>类型,表示该行各个单元格的数据)
for (List<String> data : dataList) {
// 创建一个FangjianLiuyanEntity对象用于将从Excel文件中读取到的每行数据转换为对应的实体对象后续可插入到数据库中
FangjianLiuyanEntity fangjianLiuyanEntity = new FangjianLiuyanEntity();
// fangjianLiuyanEntity.setFangjianId(Integer.valueOf(data.get(0))); //房间 要改的
// fangjianLiuyanEntity.setYonghuId(Integer.valueOf(data.get(0))); //用户 要改的
// fangjianLiuyanEntity.setFangjianLiuyanText(data.get(0)); //评论/投诉内容 要改的
// fangjianLiuyanEntity.setReplyText(data.get(0)); //回复内容 要改的
// fangjianLiuyanEntity.setInsertTime(date);//时间
// fangjianLiuyanEntity.setUpdateTime(sdf.parse(data.get(0))); //回复时间 要改的
// fangjianLiuyanEntity.setCreateTime(date);//时间
// 以下这几行代码原本是用于设置FangjianLiuyanEntity对象的各个属性值但目前都是设置为固定值或者取了错误的数据索引都取的data.get(0)后续应该根据实际Excel文件中数据的列顺序修改正确的获取数据的索引和赋值逻辑
// 设置房间ID此处应该根据实际Excel文件中房间ID所在列的索引来获取正确的值当前写法有误都取的data.get(0)),要改的
fangjianLiuyanEntity.setFangjianId(Integer.valueOf(data.get(0)));
// 设置用户ID同样这里取值有误取的data.get(0)应该按实际Excel文件中用户ID所在列来获取对应数据要改的
fangjianLiuyanEntity.setYonghuId(Integer.valueOf(data.get(0)));
// 设置评论/投诉内容也是错误的取值方式取的data.get(0)),需要改成对应正确的数据获取逻辑,要改的
fangjianLiuyanEntity.setFangjianLiuyanText(data.get(0));
// 设置回复内容同样取值错误取的data.get(0)后续要根据实际Excel文件中回复内容所在列来获取数据要改的
fangjianLiuyanEntity.setReplyText(data.get(0));
// 设置插入时间将前面获取的当前系统时间date设置为该评论/投诉信息的插入时间,用于记录插入数据库的时间点
fangjianLiuyanEntity.setInsertTime(date);
// 设置更新时间通过SimpleDateFormat对象sdf将Excel文件中对应列的数据当前取值错误应该按正确列索引获取且要保证数据格式符合解析要求解析为Date类型后设置为更新时间要改的
fangjianLiuyanEntity.setUpdateTime(sdf.parse(data.get(0)));
// 设置创建时间将前面获取的当前系统时间date设置为该评论/投诉信息的创建时间,用于记录该信息创建的时间点
fangjianLiuyanEntity.setCreateTime(date);
// 将设置好属性的FangjianLiuyanEntity对象添加到fangjianLiuyanList列表中后续将批量插入这些对象到数据库
fangjianLiuyanList.add(fangjianLiuyanEntity);
// 把要查询是否重复的字段放入seachFields这个Map中代码中此处未看到具体放入map的实现逻辑可能后续要补充完整比如根据业务需求确定哪些字段用于判断重复以及如何组织这些字段数据放入map等
//把要查询是否重复的字段放入map中
}
//查询是否重复
// 调用fangjianLiuyanService的insertBatch方法将fangjianLiuyanList中的多个FangjianLiuyanEntity对象批量插入到数据库中实现批量保存评论/投诉信息的功能
fangjianLiuyanService.insertBatch(fangjianLiuyanList);
// 如果批量插入操作成功,返回一个表示成功的响应给前端,告知前端数据已成功插入
return R.ok();
}
}
} catch (Exception e) {
// 如果在上述文件读取、数据处理或者批量插入等操作过程中出现异常,打印异常堆栈信息,方便开发人员排查问题所在,定位错误原因
e.printStackTrace();
// 返回一个错误信息给前端错误码是511提示批量插入数据异常并告知前端联系管理员来处理该异常情况
return R.error(511, "批量插入数据异常,请联系管理员");
}
}catch (Exception e){
e.printStackTrace();
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
@ -241,70 +318,92 @@ public class FangjianLiuyanController {
/**
*
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
// 没有指定排序字段就默认id倒序
if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
params.put("orderBy","id");
// 前端列表相关的方法,被标注了 @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");
}
// 调用fangjianLiuyanService的queryPage方法根据传入的参数查询并获取分页数据存放在PageUtils对象中该对象包含了分页相关的各种信息以及实际的数据列表等
PageUtils page = fangjianLiuyanService.queryPage(params);
// 获取分页数据中的数据列表这里强制转换为List<FangjianLiuyanView>类型,这些视图对象是适合前端展示的评论/投诉相关数据格式,可能经过了一定的数据处理和转换
List<FangjianLiuyanView> list = (List<FangjianLiuyanView>) page.getList();
for (FangjianLiuyanView c : list) {
// 循环调用dictionaryService的dictionaryConvert方法用于对每个FangjianLiuyanView对象中的对应字典表字段进行转换比如将字典编码转换为对应的文字描述等传入当前的HttpServletRequest对象可能是用于获取一些上下文相关信息等确保前端展示的数据是友好可读的格式
dictionaryService.dictionaryConvert(c, request);
}
// 返回成功的响应给前端并将包含处理好的分页数据的PageUtils对象放入响应中前端可以根据此数据进行展示等操作例如在页面上分页展示评论/投诉列表信息
return R.ok().put("data", page);
}
PageUtils page = fangjianLiuyanService.queryPage(params);
//字典表数据转换
List<FangjianLiuyanView> list =(List<FangjianLiuyanView>)page.getList();
for(FangjianLiuyanView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
return R.ok().put("data", page);
}
/**
*
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
FangjianLiuyanEntity fangjianLiuyan = fangjianLiuyanService.selectById(id);
if(fangjianLiuyan !=null){
//entity转view
// 前端详情相关的方法,通过@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);
// 调用fangjianLiuyanService的selectById方法根据传入的评论/投诉ID从数据库中查询对应的FangjianLiuyanEntity对象代表评论/投诉实体数据)
FangjianLiuyanEntity fangjianLiuyan = fangjianLiuyanService.selectById(id);
if (fangjianLiuyan!= null) {
// 创建一个FangjianLiuyanView对象用于将从数据库查询到的FangjianLiuyanEntity实体数据转换为适合前端展示的视图数据格式
FangjianLiuyanView view = new FangjianLiuyanView();
BeanUtils.copyProperties( fangjianLiuyan , view );//把实体数据重构到view中
// 使用BeanUtils工具类的copyProperties方法将fangjianLiuyan对象的属性值复制到view对象中实现实体数据到视图数据的转换前提是FangjianLiuyanEntity和FangjianLiuyanView的属性有对应关系
BeanUtils.copyProperties(fangjianLiuyan, view);
//级联表
FangjianEntity fangjian = fangjianService.selectById(fangjianLiuyan.getFangjianId());
if(fangjian != null){
BeanUtils.copyProperties( fangjian , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
// 以下是处理级联表相关的数据,获取评论/投诉对应的房间信息并添加到视图对象中排除一些不需要的字段如id、创建时间等字段
// 调用fangjianService的selectById方法根据评论/投诉实体中关联的房间ID获取对应的FangjianEntity对象代表房间实体数据
FangjianEntity fangjian = fangjianService.selectById(fangjianLiuyan.getFangjianId());
if (fangjian!= null) {
// 使用BeanUtils工具类的copyProperties方法将fangjian对象的部分属性值复制到view对象中排除指定的字段把级联的房间数据添加到视图中确保传递给前端的房间相关数据是符合需求且不冗余的
BeanUtils.copyProperties(fangjian, view, new String[]{"id", "createDate"});
// 设置视图对象中的房间ID保证前端能正确获取和展示关联的房间ID信息
view.setFangjianId(fangjian.getId());
}
//级联表
YonghuEntity yonghu = yonghuService.selectById(fangjianLiuyan.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
// 以下是处理级联表相关的数据,获取评论/投诉对应的用户信息并添加到视图对象中排除一些不需要的字段如id、创建时间等字段
// 调用yonghuService的selectById方法根据评论/投诉实体中关联的用户ID获取对应的YonghuEntity对象代表用户实体数据
YonghuEntity yonghu = yonghuService.selectById(fangjianLiuyan.getYonghuId());
if (yonghu!= null) {
// 使用BeanUtils工具类的copyProperties方法将yonghu对象的部分属性值复制到view对象中排除指定的字段把级联的用户数据添加到视图中确保传递给前端的用户相关数据是符合需求且不冗余的
BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createDate"});
// 设置视图对象中的用户ID保证前端能正确获取和展示关联的用户ID信息
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
// 调用dictionaryService的dictionaryConvert方法对转换后的FangjianLiuyanView对象中的对应字典表字段进行转换类似前面list方法中的转换操作传入当前的HttpServletRequest对象用于获取上下文相关信息等使前端展示的数据更友好可读
dictionaryService.dictionaryConvert(view, request);
// 返回成功的响应给前端,并将包含处理好的评论/投诉详情视图数据的FangjianLiuyanView对象放入响应中前端可以据此展示详细的评论/投诉信息
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
} else {
// 如果根据传入的ID没有查询到对应的评论/投诉数据返回一个错误信息给前端错误码是511提示查不到数据告知前端请求的详情数据不存在
return R.error(511, "查不到数据");
}
}
}
/**
*
*/
@RequestMapping("/add")
public R add(@RequestBody FangjianLiuyanEntity fangjianLiuyan, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,fangjianLiuyan:{}",this.getClass().getName(),fangjianLiuyan.toString());
fangjianLiuyan.setInsertTime(new Date());
fangjianLiuyan.setCreateTime(new Date());
fangjianLiuyanService.insert(fangjianLiuyan);
return R.ok();
// 前端保存相关的方法,通过@RequestMapping("/add")指定了该方法处理的请求路径为 /add并且使用@RequestBody注解表示接收前端传来的JSON格式的请求体数据并将其转换为FangjianLiuyanEntity对象用于保存新的房间评论/投诉信息到数据库中
@RequestMapping("/add")
public R add(@RequestBody FangjianLiuyanEntity fangjianLiuyan, HttpServletRequest request) {
// 使用日志记录器记录debug级别的日志信息记录当前执行的add方法所在的类名以及传入的FangjianLiuyanEntity对象信息将对象转为字符串格式记录方便调试查看请求数据情况
logger.debug("add方法:,,Controller:{},,fangjianLiuyan:{}", this.getClass().getName(), fangjianLiuyan.toString());
// 设置评论/投诉信息的插入时间为当前系统时间,用于记录该评论/投诉的创建时间,确定其插入数据库时的时间点
fangjianLiuyan.setInsertTime(new Date());
// 设置评论/投诉信息的创建时间为当前系统时间,与插入时间在业务上可能有不同含义(具体看业务需求),这里统一设置为当前时间
fangjianLiuyan.setCreateTime(new Date());
// 调用fangjianLiuyanService的insert方法将当前的FangjianLiuyanEntity对象插入到数据库中实现保存新评论/投诉信息的功能
fangjianLiuyanService.insert(fangjianLiuyan);
// 如果插入操作成功,返回一个表示成功的响应给前端,告知前端数据已成功保存
return R.ok();
}
}

@ -1,4 +1,3 @@
package com.controller;
import java.io.File;
@ -35,377 +34,499 @@ import com.alibaba.fastjson.*;
/**
*
*
* @author
* @email
*/
* @author
* @email
*/
// 结合了 @Controller 和 @ResponseBody 的功能表明这是一个RESTful风格的控制器返回的数据会直接转换为JSON等格式响应给客户端
@RestController
// 标识这是一个Spring管理的Bean是一个控制器类
@Controller
// 定义该控制器处理的基础请求路径,所有该控制器下的接口路径都以此为前缀
@RequestMapping("/fangjianOrder")
public class FangjianOrderController {
// 创建一个日志记录器对象,用于记录该类相关操作的日志信息,方便后续调试和排查问题,日志级别等配置通常在项目的日志配置文件中设置
private static final Logger logger = LoggerFactory.getLogger(FangjianOrderController.class);
// 使用Spring的依赖注入自动装配FangjianOrderService方便在该控制器中调用其提供的与房间预约相关的业务逻辑方法
@Autowired
private FangjianOrderService fangjianOrderService;
// 使用Spring的依赖注入自动装配TokenService可能用于处理用户认证相关的令牌操作等具体功能需看该服务的实际实现
@Autowired
private TokenService tokenService;
// 使用Spring的依赖注入自动装配DictionaryService用于对字典表相关的数据进行转换操作比如将字典表中的编码转换为对应的文字描述等方便前端展示友好的数据格式
@Autowired
private DictionaryService dictionaryService;
//级联表service
// 使用Spring的依赖注入自动装配FangjianService用于和房间相关的业务逻辑操作例如查询房间详细信息等在处理级联表数据或者关联房间信息时会用到属于级联表相关的服务调用
@Autowired
private FangjianService fangjianService;
// 使用Spring的依赖注入自动装配YonghuService用于和用户相关的业务逻辑操作例如查询用户信息等在处理级联表数据或者关联用户信息时会用到属于级联表相关的服务调用
@Autowired
private YonghuService yonghuService;
/**
*
*/
*
*
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的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,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
// 此处条件永远为假,所以下面的代码块永远不会执行,可能是预留的逻辑或者后续需要修改调整的地方
if (false)
return R.error(511, "永不会进入");
// 如果用户角色是"用户"则将当前登录用户的ID设置到查询参数中可能用于查询该用户相关的房间预约信息限制查询范围
else if ("用户".equals(role))
params.put("yonghuId", request.getSession().getAttribute("userId"));
// 判断传入的参数中是否指定了排序字段如果没有指定即获取到的orderBy参数为空字符串
if (params.get("orderBy") == null || params.get("orderBy") == "") {
// 就默认按照id字段倒序排序将orderBy参数设置为id确定返回数据的默认排序规则
params.put("orderBy", "id");
}
// 调用fangjianOrderService的queryPage方法根据传入的参数查询并获取分页数据存放在PageUtils对象中该对象包含了分页相关的各种信息以及实际的数据列表等
PageUtils page = fangjianOrderService.queryPage(params);
//字典表数据转换
List<FangjianOrderView> list =(List<FangjianOrderView>)page.getList();
for(FangjianOrderView c:list){
//修改对应字典表字段
// 获取分页数据中的数据列表这里强制转换为List<FangjianOrderView>类型,这些视图对象是适合前端展示的房间预约相关数据格式,可能经过了一定的数据处理和转换
List<FangjianOrderView> list = (List<FangjianOrderView>) page.getList();
for (FangjianOrderView c : list) {
// 循环调用dictionaryService的dictionaryConvert方法用于对每个FangjianOrderView对象中的对应字典表字段进行转换比如将字典编码转换为对应的文字描述等传入当前的HttpServletRequest对象可能是用于获取一些上下文相关信息等确保前端展示的数据是友好可读的格式
dictionaryService.dictionaryConvert(c, request);
}
// 返回成功的响应给前端并将包含处理好的分页数据的PageUtils对象放入响应中前端可以根据此数据进行展示等操作例如在页面上分页展示房间预约列表信息
return R.ok().put("data", page);
}
/**
*
*/
*
* ID
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
public R info(@PathVariable("id") Long id, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的info方法所在的类名以及传入的房间预约ID参数方便调试查看请求参数情况
logger.debug("info方法:,,Controller:{},,id:{}", this.getClass().getName(), id);
// 调用fangjianOrderService的selectById方法根据传入的房间预约ID从数据库中查询对应的FangjianOrderEntity对象代表房间预约实体数据
FangjianOrderEntity fangjianOrder = fangjianOrderService.selectById(id);
if(fangjianOrder !=null){
//entity转view
if (fangjianOrder != null) {
// 创建一个FangjianOrderView对象用于将从数据库查询到的FangjianOrderEntity实体数据转换为适合前端展示的视图数据格式
FangjianOrderView view = new FangjianOrderView();
BeanUtils.copyProperties( fangjianOrder , view );//把实体数据重构到view中
// 使用BeanUtils工具类的copyProperties方法将fangjianOrder对象的属性值复制到view对象中实现实体数据到视图数据的转换前提是FangjianOrderEntity和FangjianOrderView的属性有对应关系
BeanUtils.copyProperties(fangjianOrder, view);
// 以下是处理级联表相关的数据获取房间预约对应的房间信息并添加到视图对象中排除一些不需要的字段如id、创建时间等字段
// 调用fangjianService的selectById方法根据房间预约实体中关联的房间ID获取对应的FangjianEntity对象代表房间实体数据
FangjianEntity fangjian = fangjianService.selectById(fangjianOrder.getFangjianId());
if (fangjian != null) {
// 使用BeanUtils工具类的copyProperties方法将fangjian对象的部分属性值复制到view对象中排除指定的字段把级联的房间数据添加到视图中确保传递给前端的房间相关数据是符合需求且不冗余的
BeanUtils.copyProperties(fangjian, view, new String[]{"id", "createTime", "insertTime", "updateTime"});
// 设置视图对象中的房间ID保证前端能正确获取和展示关联的房间ID信息
view.setFangjianId(fangjian.getId());
}
//级联表
FangjianEntity fangjian = fangjianService.selectById(fangjianOrder.getFangjianId());
if(fangjian != null){
BeanUtils.copyProperties( fangjian , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setFangjianId(fangjian.getId());
}
//级联表
YonghuEntity yonghu = yonghuService.selectById(fangjianOrder.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
// 以下是处理级联表相关的数据获取房间预约对应的用户信息并添加到视图对象中排除一些不需要的字段如id、创建时间等字段
// 调用yonghuService的selectById方法根据房间预约实体中关联的用户ID获取对应的YonghuEntity对象代表用户实体数据
YonghuEntity yonghu = yonghuService.selectById(fangjianOrder.getYonghuId());
if (yonghu != null) {
// 使用BeanUtils工具类的copyProperties方法将yonghu对象的部分属性值复制到view对象中排除指定的字段把级联的用户数据添加到视图中确保传递给前端的用户相关数据是符合需求且不冗余的
BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createTime", "insertTime", "updateTime"});
// 设置视图对象中的用户ID保证前端能正确获取和展示关联的用户ID信息
view.setYonghuId(yonghu.getId());
}
// 调用dictionaryService的dictionaryConvert方法对转换后的FangjianOrderView对象中的对应字典表字段进行转换类似前面page方法中的转换操作传入当前的HttpServletRequest对象用于获取上下文相关信息等使前端展示的数据更友好可读
dictionaryService.dictionaryConvert(view, request);
// 返回成功的响应给前端并将包含处理好的房间预约详情视图数据的FangjianOrderView对象放入响应中前端可以据此展示详细的房间预约信息
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
} else {
// 如果根据传入的ID没有查询到对应的房间预约数据返回一个错误信息给前端错误码是511提示查不到数据告知前端请求的详情数据不存在
return R.error(511, "查不到数据");
}
}
/**
*
*/
*
*
*/
@RequestMapping("/save")
public R save(@RequestBody FangjianOrderEntity fangjianOrder, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,fangjianOrder:{}",this.getClass().getName(),fangjianOrder.toString());
public R save(@RequestBody FangjianOrderEntity fangjianOrder, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的save方法所在的类名以及传入的FangjianOrderEntity对象信息将对象转为字符串格式记录方便调试查看请求数据情况
logger.debug("save方法:,,Controller:{},,fangjianOrder:{}", this.getClass().getName(), fangjianOrder.toString());
// 从当前请求的会话中获取用户角色信息,并转换为字符串类型,可能用于后续根据不同角色进行不同的数据处理逻辑判断
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("用户".equals(role))
// 此处条件永远为假,所以下面的代码块永远不会执行,可能是预留的逻辑或者后续需要修改调整的地方
if (false)
return R.error(511, "永远不会进入");
// 如果用户角色是"用户"则将当前登录用户的ID设置到房间预约实体对象中关联该房间预约与当前用户
else if ("用户".equals(role))
fangjianOrder.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
// 设置房间预约信息的创建时间为当前系统时间,用于记录该房间预约的创建时间点
fangjianOrder.setCreateTime(new Date());
// 调用fangjianOrderService的insert方法将当前的FangjianOrderEntity对象插入到数据库中实现保存新房间预约信息的功能
fangjianOrderService.insert(fangjianOrder);
// 如果插入操作成功,返回一个表示成功的响应给前端,告知前端数据已成功保存
return R.ok();
}
/**
*
*/
*
*
*/
@RequestMapping("/update")
public R update(@RequestBody FangjianOrderEntity fangjianOrder, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,fangjianOrder:{}",this.getClass().getName(),fangjianOrder.toString());
public R update(@RequestBody FangjianOrderEntity fangjianOrder, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的update方法所在的类名以及传入的FangjianOrderEntity对象信息将对象转为字符串格式记录方便调试查看请求数据情况
logger.debug("update方法:,,Controller:{},,fangjianOrder:{}", this.getClass().getName(), fangjianOrder.toString());
// 从当前请求的会话中获取用户角色信息,并转换为字符串类型,可能用于后续根据不同角色进行不同的数据处理逻辑判断(当前部分代码被注释掉了,可能是之前的逻辑或者后续需要调整补充的地方)
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("用户".equals(role))
// if (false)
// return R.error(511, "永远不会进入");
// else if ("用户".equals(role))
// fangjianOrder.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//根据字段查询是否有相同数据
// 根据字段查询是否有相同数据这里构建了一个EntityWrapper对象用于设置查询条件目前只设置了id为0的条件可能需要根据实际业务修改正确的判断重复数据的条件
Wrapper<FangjianOrderEntity> queryWrapper = new EntityWrapper<FangjianOrderEntity>()
.eq("id",0)
;
.eq("id", 0);
logger.info("sql语句:"+queryWrapper.getSqlSegment());
// 记录构建好的查询语句对应的SQL片段信息方便调试查看具体的查询条件
logger.info("sql语句:" + queryWrapper.getSqlSegment());
// 调用fangjianOrderService的selectOne方法根据构建好的查询条件从数据库中查询是否存在满足条件的FangjianOrderEntity对象即是否存在相同数据的记录当前条件可能不准确需完善
FangjianOrderEntity fangjianOrderEntity = fangjianOrderService.selectOne(queryWrapper);
if(fangjianOrderEntity==null){
fangjianOrderService.updateById(fangjianOrder);//根据id更新
if (fangjianOrderEntity == null) {
// 如果查询结果为null表示不存在相同数据的记录调用fangjianOrderService的updateById方法根据传入的房间预约实体对象的ID更新数据库中的对应记录
fangjianOrderService.updateById(fangjianOrder);
// 如果更新操作成功,返回一个表示成功的响应给前端,告知前端数据已成功更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
} else {
// 如果查询到了相同数据的记录返回一个错误信息给前端错误码是511提示表中有相同数据告知前端更新操作因数据重复而失败
return R.error(511, "表中有相同数据");
}
}
/**
*
*/
*
* ID
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
public R delete(@RequestBody Integer[] ids) {
// 记录debug级别的日志信息记录当前执行的delete方法所在的类名以及传入的房间预约ID数组信息将数组转为字符串格式记录方便调试查看请求参数情况
logger.debug("delete:,,Controller:{},,ids:{}", this.getClass().getName(), ids.toString());
// 调用fangjianOrderService的deleteBatchIds方法传入要删除的房间预约ID列表批量删除数据库中对应的记录
fangjianOrderService.deleteBatchIds(Arrays.asList(ids));
// 如果删除操作成功,返回一个表示成功的响应给前端,告知前端数据已成功删除
return R.ok();
}
/**
*
* Excel.xls
*/
@RequestMapping("/batchInsert")
public R save( String fileName, HttpServletRequest request){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
public R save(String fileName, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的batchInsert方法所在的类名以及传入的文件名参数方便调试查看请求参数情况
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}", this.getClass().getName(), fileName);
// 从当前请求的会话中获取当前登录用户的ID并转换为Integer类型可能用于关联上传的房间预约信息与当前用户
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 {
List<FangjianOrderEntity> fangjianOrderList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
// 创建一个列表用于存放从文件中读取并解析后要批量插入的FangjianOrderEntity对象代表房间预约实体数据
List<FangjianOrderEntity> fangjianOrderList = 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{
if (lastIndexOf == -1) {
// 如果文件名没有后缀返回一个错误响应给前端错误码为511并提示“该文件没有后缀”告知前端上传的文件不符合要求
return R.error(511, "该文件没有后缀");
} else {
// 获取文件名中从最后一个点(.)开始到结尾的字符串,即文件后缀名
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
// 判断后缀名是否不等于 ".xls",如果不是 ".xls" 后缀的文件,说明不符合当前方法支持的文件类型要求
if (!".xls".equals(suffix)) {
// 返回一个错误信息给前端错误码是511并提示“只支持后缀为xls的excel文件”告知前端上传的文件格式不正确
return R.error(511, "只支持后缀为xls的excel文件");
} else {
// 通过当前类的类加载器获取指定文件(位于 "static/upload/" 目录下文件名由传入的fileName指定的资源路径返回一个URL对象
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);
// 根据获取到的URL对象对应的文件路径创建一个File对象用于后续判断文件是否存在以及读取文件内容等操作
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
// 判断该文件是否不存在,如果不存在,则执行下面的返回错误信息的逻辑
if (!file.exists()) {
// 返回一个错误信息给前端错误码是511提示“找不到上传文件请联系管理员”告知前端文件未找到需要联系管理员解决
return R.error(511, "找不到上传文件,请联系管理员");
} else {
// 调用PoiUtil工具类的poiImport方法传入文件的路径读取该.xls文件内容返回的数据结构是一个嵌套的List外层List表示行内层List的每个元素表示每行中的单元格数据存放在dataList中
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());
// 删除dataList中的第一行数据通常是因为第一行可能是标题行、提示信息之类的内容在后续将数据转换为实体对象时不需要这一行数据
dataList.remove(0);
// 遍历dataList中剩余的每一行数据每一行数据也是一个List<String>类型,表示该行各个单元格的数据)
for (List<String> data : dataList) {
// 创建一个FangjianOrderEntity对象用于将从Excel文件中读取到的每行数据转换为对应的实体对象后续可插入到数据库中
FangjianOrderEntity fangjianOrderEntity = new FangjianOrderEntity();
// fangjianOrderEntity.setFangjianId(Integer.valueOf(data.get(0))); //房间 要改的
// fangjianOrderEntity.setYonghuId(Integer.valueOf(data.get(0))); //用户 要改的
// fangjianOrderEntity.setFangjianOrderTime(sdf.parse(data.get(0))); //预约日期 要改的
// fangjianOrderEntity.setFangjianOrderText(data.get(0)); //预约备注 要改的
// fangjianOrderEntity.setFangjianOrderTypes(Integer.valueOf(data.get(0))); //订单状态 要改的
// fangjianOrderEntity.setCreateTime(date);//时间
// 以下这几行代码原本是用于设置FangjianOrderEntity对象的各个属性值但目前都是设置为固定值或者取了错误的数据索引都取的data.get(0)后续应该根据实际Excel文件中数据的列顺序修改正确的获取数据的索引和赋值逻辑
// 设置房间ID此处应该根据实际Excel文件中房间ID所在列的索引来获取正确的值当前写法有误都取的data.get(0)),要改的
fangjianOrderEntity.setFangjianId(Integer.valueOf(data.get(0)));
// 设置用户ID同样这里取值有误取的data.get(0)应该按实际Excel文件中用户ID所在列来获取对应数据要改的
fangjianOrderEntity.setYonghuId(Integer.valueOf(data.get(0)));
// 设置预约日期通过SimpleDateFormat对象sdf将Excel文件中对应列的数据当前取值错误应该按正确列索引获取且要保证数据格式符合解析要求解析为Date类型后设置为预约日期要改的
fangjianOrderEntity.setFangjianOrderTime(sdf.parse(data.get(0)));
// 设置预约备注也是错误的取值方式取的data.get(0)),需要改成对应正确的数据获取逻辑,要改的
fangjianOrderEntity.setFangjianOrderText(data.get(0));
// 设置订单状态将Excel文件中对应列的数据转换为Integer类型后设置为订单状态当前取值错误应按正确列索引获取要改的
fangjianOrderEntity.setFangjianOrderTypes(Integer.valueOf(data.get(0)));
// 设置创建时间将前面获取的当前系统时间date设置为该房间预约信息的创建时间用于记录创建的时间点
fangjianOrderEntity.setCreateTime(date);
// 将设置好属性的FangjianOrderEntity对象添加到fangjianOrderList列表中后续将批量插入这些对象到数据库
fangjianOrderList.add(fangjianOrderEntity);
// 把要查询是否重复的字段放入seachFields这个Map中代码中此处未看到具体放入map的实现逻辑可能后续要补充完整比如根据业务需求确定哪些字段用于判断重复以及如何组织这些字段数据放入map等
//把要查询是否重复的字段放入map中
}
//查询是否重复
// 调用fangjianOrderService的insertBatch方法将fangjianOrderList中的多个FangjianOrderEntity对象批量插入到数据库中实现批量保存房间预约信息的功能
fangjianOrderService.insertBatch(fangjianOrderList);
// 如果批量插入操作成功,返回一个表示成功的响应给前端,告知前端数据已成功插入
return R.ok();
}
}
}
}catch (Exception e){
} catch (Exception e) {
// 如果在上述文件读取、数据处理或者批量插入等操作过程中出现异常,打印异常堆栈信息,方便开发人员排查问题所在,定位错误原因
e.printStackTrace();
return R.error(511,"批量插入数据异常,请联系管理员");
// 返回一个错误信息给前端错误码是511提示“批量插入数据异常请联系管理员”告知前端出现异常情况需要联系管理员处理
return R.error(511, "批量插入数据异常,请联系管理员");
}
}
/**
*
*/
*
* @IgnoreAuth
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
// 没有指定排序字段就默认id倒序
if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
params.put("orderBy","id");
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");
}
// 调用fangjianOrderService的queryPage方法根据传入的参数查询并获取分页数据存放在PageUtils对象中该对象包含了分页相关的各种信息以及实际的数据列表等
PageUtils page = fangjianOrderService.queryPage(params);
//字典表数据转换
List<FangjianOrderView> list =(List<FangjianOrderView>)page.getList();
for(FangjianOrderView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
// 获取分页数据中的数据列表这里强制转换为List<FangjianOrderView>类型,这些视图对象是适合前端展示的房间预约相关数据格式,可能经过了一定的数据处理和转换
List<FangjianOrderView> list = (List<FangjianOrderView>) page.getList();
for (FangjianOrderView c : list) {
// 循环调用dictionaryService的dictionaryConvert方法用于对每个FangjianOrderView对象中的对应字典表字段进行转换比如将字典编码转换为对应的文字描述等传入当前的HttpServletRequest对象可能是用于获取一些上下文相关信息等确保前端展示的数据是友好可读的格式
dictionaryService.dictionaryConvert(c, request);
}
// 返回成功的响应给前端并将包含处理好的分页数据的PageUtils对象放入响应中前端可以根据此数据进行展示等操作例如在页面上分页展示房间预约列表信息
return R.ok().put("data", page);
}
/**
*
*/
*
* ID
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
public R detail(@PathVariable("id") Long id, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的detail方法所在的类名以及传入的房间预约ID参数方便调试查看请求参数情况
logger.debug("detail方法:,,Controller:{},,id:{}", this.getClass().getName(), id);
// 调用fangjianOrderService的selectById方法根据传入的房间预约ID从数据库中查询对应的FangjianOrderEntity对象代表房间预约实体数据
FangjianOrderEntity fangjianOrder = fangjianOrderService.selectById(id);
if(fangjianOrder !=null){
//entity转view
FangjianOrderView view = new FangjianOrderView();
BeanUtils.copyProperties( fangjianOrder , view );//把实体数据重构到view中
if (fangjianOrder != null) {
// 创建一个FangjianOrderView对象用于将从数据库查询到的FangjianOrderEntity实体数据转换为适合前端展示的视图数据格式
FangjianOrderView view = new FangjianOrderView();
// 使用BeanUtils工具类的copyProperties方法将fangjianOrder对象的属性值复制到view对象中实现实体数据到视图数据的转换前提是FangjianOrderEntity和FangjianOrderView的属性有对应关系
BeanUtils.copyProperties(fangjianOrder, view);
// 以下是处理级联表相关的数据获取房间预约对应的房间信息并添加到视图对象中排除一些不需要的字段如id、创建时间等字段
// 调用fangjianService的selectById方法根据房间预约实体中关联的房间ID获取对应的FangjianEntity对象代表房间实体数据
FangjianEntity fangjian = fangjianService.selectById(fangjianOrder.getFangjianId());
if (fangjian != null) {
// 使用BeanUtils工具类的copyProperties方法将fangjian对象的部分属性值复制到view对象中排除指定的字段把级联的房间数据添加到视图中确保传递给前端的房间相关数据是符合需求且不冗余的
BeanUtils.copyProperties(fangjian, view, new String[]{"id", "createDate"});
// 设置视图对象中的房间ID保证前端能正确获取和展示关联的房间ID信息
view.setFangjianId(fangjian.getId());
}
//级联表
FangjianEntity fangjian = fangjianService.selectById(fangjianOrder.getFangjianId());
if(fangjian != null){
BeanUtils.copyProperties( fangjian , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setFangjianId(fangjian.getId());
}
//级联表
YonghuEntity yonghu = yonghuService.selectById(fangjianOrder.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
// 以下是处理级联表相关的数据获取房间预约对应的用户信息并添加到视图对象中排除一些不需要的字段如id、创建时间等字段
// 调用yonghuService的selectById方法根据房间预约实体中关联的用户ID获取对应的YonghuEntity对象代表用户实体数据
YonghuEntity yonghu = yonghuService.selectById(fangjianOrder.getYonghuId());
if (yonghu != null) {
// 使用BeanUtils工具类的copyProperties方法将yonghu对象的部分属性值复制到view对象中排除指定的字段把级联的用户数据添加到视图中确保传递给前端的用户相关数据是符合需求且不冗余的
BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createDate"});
// 设置视图对象中的用户ID保证前端能正确获取和展示关联的用户ID信息
view.setYonghuId(yonghu.getId());
}
}
// 调用dictionaryService的dictionaryConvert方法对转换后的FangjianOrderView对象中的对应字典表字段进行转换类似前面list方法中的转换操作传入当前的HttpServletRequest对象用于获取上下文相关信息等使前端展示的数据更友好可读
dictionaryService.dictionaryConvert(view, request);
// 返回成功的响应给前端并将包含处理好的房间预约详情视图数据的FangjianOrderView对象放入响应中前端可以据此展示详细的房间预约信息
return R.ok().put("data", view);
} else {
// 如果根据传入的ID没有查询到对应的房间预约数据返回一个错误信息给前端错误码是511提示“查不到数据”告知前端请求的详情数据不存在
return R.error(511, "查不到数据");
}
}
/**
*
*/
*
*
*/
@RequestMapping("/add")
public R add(@RequestBody FangjianOrderEntity fangjianOrder, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,fangjianOrder:{}",this.getClass().getName(),fangjianOrder.toString());
FangjianEntity fangjianEntity = fangjianService.selectById(fangjianOrder.getFangjianId());
if(fangjianEntity == null){
return R.error(511,"查不到该房间信息");
}
// Double fangjianNewMoney = fangjianEntity.getFangjianMoney();
public R add(@RequestBody FangjianOrderEntity fangjianOrder, HttpServletRequest request) {
// 记录debug级别的日志信息记录当前执行的add方法所在的类名以及传入的FangjianOrderEntity对象信息将对象转为字符串格式记录方便调试查看请求数据情况
logger.debug("add方法:,,Controller:{},,fangjianOrder:{}", this.getClass().getName(), fangjianOrder.toString());
// 根据传入的房间预约信息中的房间ID调用fangjianService的selectById方法查询对应的FangjianEntity对象代表房间实体数据用于后续判断房间是否存在以及获取房间价格等操作
FangjianEntity fangjianEntity = fangjianService.selectById(fangjianOrder.getFangjianId());
if (fangjianEntity == null) {
// 如果没有查询到对应的房间信息返回一个错误信息给前端错误码是511提示“查不到该房间信息”告知前端房间不存在无法进行预约操作
return R.error(511, "查不到该房间信息");
}
// 以下这行代码被注释掉了,原本可能是用于获取房间的新价格(具体用途需结合业务逻辑确定),目前代码中未使用该变量
// Double fangjianNewMoney = fangjianEntity.getFangjianMoney();
if(false){
}
// 此处条件永远为假,可能是预留的逻辑或者后续需要修改调整的地方,目前没有实际执行的代码块
if (false) {
}
//计算所获得积分
Double buyJifen =0.0;
Integer userId = (Integer) request.getSession().getAttribute("userId");
YonghuEntity yonghuEntity = yonghuService.selectById(userId);
if(yonghuEntity == null)
return R.error(511,"用户不能为空");
if(yonghuEntity.getNewMoney() == null)
return R.error(511,"用户金额不能为空");
double balance = yonghuEntity.getNewMoney() - fangjianEntity.getFangjianMoney()*1;//余额
if(balance<0)
return R.error(511,"余额不够支付");
fangjianOrder.setFangjianOrderTypes(1); //设置订单状态为已支付
fangjianOrder.setYonghuId(userId); //设置订单支付人id
fangjianOrder.setCreateTime(new Date());
fangjianOrderService.insert(fangjianOrder);//新增订单
yonghuEntity.setNewMoney(balance);//设置金额
yonghuService.updateById(yonghuEntity);
return R.ok();
// 初始化用于存储所获得积分的变量初始值设为0.0,后续可能根据业务规则计算实际获得的积分(目前代码中计算逻辑部分可能还不完善)
Double buyJifen = 0.0;
// 从当前请求的会话中获取当前登录用户的ID并转换为Integer类型用于后续关联房间预约信息与当前用户以及获取用户相关信息等操作
Integer userId = (Integer) request.getSession().getAttribute("userId");
// 根据获取到的用户ID调用yonghuService的selectById方法查询对应的YonghuEntity对象代表用户实体数据用于后续判断用户是否存在以及获取用户金额等操作
YonghuEntity yonghuEntity = yonghuService.selectById(userId);
if (yonghuEntity == null) {
// 如果没有查询到对应的用户信息返回一个错误信息给前端错误码是511提示“用户不能为空”告知前端需要先登录用户或者用户信息不存在无法进行预约操作
return R.error(511, "用户不能为空");
}
if (yonghuEntity.getNewMoney() == null) {
// 如果用户的金额信息为空返回一个错误信息给前端错误码是511提示“用户金额不能为空”告知前端无法进行金额相关的业务操作如判断余额是否足够等
return R.error(511, "用户金额不能为空");
}
// 计算用户余额用用户当前的金额yonghuEntity.getNewMoney()减去房间的价格fangjianEntity.getFangjianMoney() * 1这里乘以1可能表示按原价计算具体看业务需求得到支付后的余额
double balance = yonghuEntity.getNewMoney() - fangjianEntity.getFangjianMoney() * 1;
if (balance < 0) {
// 如果余额小于0说明用户余额不够支付房间费用返回一个错误信息给前端错误码是511提示“余额不够支付”告知前端无法完成预约操作
return R.error(511, "余额不够支付");
}
// 设置房间预约信息的订单状态为已支付可能在业务中用1表示已支付状态更新房间预约实体对象中的订单状态字段
fangjianOrder.setFangjianOrderTypes(1);
// 设置房间预约信息的用户ID为当前登录用户的ID将预约信息与当前用户关联起来更新房间预约实体对象中的用户ID字段
fangjianOrder.setYonghuId(userId);
// 设置房间预约信息的创建时间为当前系统时间,用于记录该房间预约的创建时间点,更新房间预约实体对象中的创建时间字段
fangjianOrder.setCreateTime(new Date());
// 调用fangjianOrderService的insert方法将当前的FangjianOrderEntity对象插入到数据库中实现保存新房间预约信息的功能
fangjianOrderService.insert(fangjianOrder);
// 更新用户的金额信息将用户的金额设置为支付后的余额通过调用yonghuService的updateById方法更新数据库中对应的用户信息记录
yonghuEntity.setNewMoney(balance);
yonghuService.updateById(yonghuEntity);
// 如果整个保存操作(包括预约信息插入和用户信息更新)成功,返回一个表示成功的响应给前端,告知前端房间预约操作已成功完成
return R.ok();
}
/**
* 退
*/
* 退
* ID退退
*/
@RequestMapping("/refund")
public R refund(Integer id, HttpServletRequest request){
logger.debug("refund方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
public R refund(Integer id, HttpServletRequest request) {
// 记录debug级别的日志信息输出当前执行的"refund"方法所在的类名以及传入的房间预约ID参数方便后续调试时查看具体的调用情况和参数值
logger.debug("refund方法:,,Controller:{},,id:{}", this.getClass().getName(), id);
// 从当前请求的会话中获取用户角色信息,并转换为字符串类型,不过从后续代码来看,暂时没有基于这个角色信息做进一步的业务逻辑处理(可能是预留的功能或者后续待完善的部分)
String role = String.valueOf(request.getSession().getAttribute("role"));
FangjianOrderEntity fangjianOrder = fangjianOrderService.selectById(id);
Integer buyNumber = 1;
Integer fangjianOrderPaymentTypes = 1;
Integer fangjianId = fangjianOrder.getFangjianId();
if(fangjianId == null)
return R.error(511,"查不到该房间信息");
FangjianEntity fangjianEntity = fangjianService.selectById(fangjianId);
if(fangjianEntity == null)
return R.error(511,"查不到该房间信息");
Double fangjianNewMoney = fangjianEntity.getFangjianMoney();
if(fangjianNewMoney == null)
return R.error(511,"房间信息价格不能为空");
Integer userId = (Integer) request.getSession().getAttribute("userId");
YonghuEntity yonghuEntity = yonghuService.selectById(userId);
if(yonghuEntity == null)
return R.error(511,"用户不能为空");
if(yonghuEntity.getNewMoney() == null)
return R.error(511,"用户金额不能为空");
Double zhekou = 1.0;
//判断是什么支付方式 1代表余额 2代表积分
if(fangjianOrderPaymentTypes == 1){//余额支付
//计算金额
Double money = fangjianEntity.getFangjianMoney() * buyNumber * zhekou;
//计算所获得积分
Double buyJifen = 0.0;
yonghuEntity.setNewMoney(yonghuEntity.getNewMoney() + money); //设置金额
}
// 根据传入的房间预约ID调用fangjianOrderService的selectById方法从数据库中查询对应的FangjianOrderEntity对象代表该房间预约的实体数据用于后续获取该预约的相关信息进行退款相关逻辑处理
FangjianOrderEntity fangjianOrder = fangjianOrderService.selectById(id);
// 初始化购买数量变量这里设置为1可能表示此次退款操作对应的购买数量具体含义需结合业务场景确定也许后续会根据实际业务修改这个值
Integer buyNumber = 1;
// 定义并初始化房间预约支付方式类型变量这里设置为1根据后续代码注释可知1代表余额支付方式可能在业务中有多种支付方式通过这个变量来区分
Integer fangjianOrderPaymentTypes = 1;
// 获取房间预约对应的房间ID从前面查询到的FangjianOrderEntity对象中获取关联的房间ID用于后续查询房间详细信息等操作
Integer fangjianId = fangjianOrder.getFangjianId();
// 判断房间ID是否为null如果是null说明没有找到对应的房间信息返回一个错误信息给前端错误码是511并提示“查不到该房间信息”告知前端无法进行退款操作因为找不到对应的房间记录
if (fangjianId == null)
return R.error(511, "查不到该房间信息");
// 根据获取到的房间ID调用fangjianService的selectById方法从数据库中查询对应的FangjianEntity对象代表房间实体数据用于获取房间的价格等信息进行退款金额计算等操作
FangjianEntity fangjianEntity = fangjianService.selectById(fangjianId);
// 判断房间实体对象是否为null如果是null说明没有查询到对应的房间信息返回一个错误信息给前端错误码是511并提示“查不到该房间信息”告知前端无法进行退款操作因为房间信息不存在
if (fangjianEntity == null)
return R.error(511, "查不到该房间信息");
// 获取房间的价格信息从FangjianEntity对象中获取房间的金额可能表示房间的费用等具体含义看业务定义用于后续退款金额计算等操作
Double fangjianNewMoney = fangjianEntity.getFangjianMoney();
// 判断房间价格是否为null如果是null说明房间价格信息缺失返回一个错误信息给前端错误码是511并提示“房间信息价格不能为空”告知前端无法进行退款金额相关的计算操作因为缺少房间价格数据
if (fangjianNewMemory == null)
return R.error(511, "房间信息价格不能为空");
// 从当前请求的会话中获取当前登录用户的ID并转换为Integer类型用于后续关联退款操作与当前用户以及获取用户相关信息等操作
Integer userId = (Integer) request.getSession().getAttribute("userId");
// 根据获取到的用户ID调用yonghuService的selectById方法从数据库中查询对应的YonghuEntity对象代表用户实体数据用于获取用户的金额等信息进行退款后金额更新等操作
YonghuEntity yonghuEntity = yonghuService.selectById(userId);
// 判断用户实体对象是否为null如果是null说明没有查询到对应的用户信息返回一个错误信息给前端错误码是511并提示“用户不能为空”告知前端无法进行退款操作因为用户信息不存在
if (yonghuEntity == null)
return R.error(511, "用户不能为空");
// 判断用户的金额信息是否为null如果是null说明用户金额信息缺失返回一个错误信息给前端错误码是511并提示“用户金额不能为空”告知前端无法进行退款后金额更新等操作因为缺少用户金额数据
if (yonghuEntity.getNewMoney() == null)
return R.error(511, "用户金额不能为空");
// 定义并初始化折扣变量这里设置为1.0,表示没有折扣(具体折扣相关逻辑可能根据业务需求后续完善,也许不同情况会有不同的折扣值)
Double zhekou = 1.0;
// 判断房间预约的支付方式类型如果是1根据前面定义代表余额支付方式则进入以下余额支付的退款相关逻辑处理
if (fangjianOrderPaymentTypes == 1) {
// 计算退款金额根据房间价格fangjianEntity.getFangjianMoney()、购买数量buyNumber以及折扣zhekou相乘计算得出应退款的金额这里目前只是简单的乘法计算实际业务中可能会更复杂比如涉及不同的计价规则等
Double money = fangjianEntity.getFangjianMoney() * buyNumber * zhekou;
// 初始化用于存储所获得积分的变量这里设置为0.0,可能在业务中有根据退款操作获取积分的规则(目前代码中计算逻辑部分可能还不完善,只是简单赋值)
Double buyJifen = 0.0;
// 更新用户的金额信息将用户当前的金额yonghuEntity.getNewMoney()加上计算得出的退款金额money实现把退款金额退还到用户账户余额中的操作通过调用yonghuService的updateById方法后续会更新数据库中对应的用户信息记录
yonghuEntity.setNewMoney(yonghuEntity.getNewMoney() + money);
}
fangjianOrder.setFangjianOrderTypes(2);//设置订单状态为退款
fangjianOrderService.updateById(fangjianOrder);//根据id更新
yonghuService.updateById(yonghuEntity);//更新用户信息
fangjianService.updateById(fangjianEntity);//更新订单中房间信息的信息
return R.ok();
// 设置房间预约信息的订单状态为退款可能在业务中用2表示退款状态更新房间预约实体对象中的订单状态字段用于标记该订单已进入退款状态
fangjianOrder.setFangjianOrderTypes(2);
// 调用fangjianOrderService的updateById方法根据传入的房间预约实体对象包含已更新的订单状态等信息的ID更新数据库中的对应记录将订单状态修改为退款状态保存到数据库中
fangjianOrderService.updateById(fangjianOrder);
// 调用yonghuService的updateById方法根据传入的用户实体对象包含已更新的金额等信息更新数据库中的对应用户记录将用户信息更新保存到数据库中比如更新用户余额等信息
yonghuService.updateById(yonghuEntity);
// 调用fangjianService的updateById方法根据传入的房间实体对象虽然代码中目前没有对房间实体对象做额外修改也许后续会有相关逻辑完善更新数据库中的对应房间记录将房间相关信息更新保存到数据库中
fangjianService.updateById(fangjianEntity);
// 如果整个退款操作(包括订单状态更新、用户信息更新、房间信息更新等)成功,返回一个表示成功的响应给前端,告知前端退款操作已成功完成
return R.ok();
}
/**
*
* ID3
*/
@RequestMapping("/deliver")
public R deliver(Integer id ){
logger.debug("refund:,,Controller:{},,ids:{}",this.getClass().getName(),id.toString());
FangjianOrderEntity fangjianOrderEntity = new FangjianOrderEntity();;
public R deliver(Integer id) {
// 记录debug级别的日志信息输出当前执行的"deliver"方法所在的类名以及传入的房间预约ID参数方便后续调试时查看具体的调用情况和参数值不过这里日志输出的方法名有误应该是"deliver"而不是"refund"(可能是代码书写小失误)
logger.debug("refund:,,Controller:{},,ids:{}", this.getClass().getName(), id.toString());
// 创建一个FangjianOrderEntity对象用于后续设置要更新的房间预约相关信息这里先初始化一个空对象
FangjianOrderEntity fangjianOrderEntity = new FangjianOrderEntity();
// 设置FangjianOrderEntity对象的ID为传入的房间预约ID用于确定要更新的是哪条房间预约记录
fangjianOrderEntity.setId(id);
// 设置FangjianOrderEntity对象的订单状态为已发货状态这里假设业务中用3表示发货状态具体看业务定义准备更新该订单的状态信息到数据库中
fangjianOrderEntity.setFangjianOrderTypes(3);
boolean b = fangjianOrderService.updateById( fangjianOrderEntity);
if(!b){
// 调用fangjianOrderService的updateById方法根据设置好的FangjianOrderEntity对象包含要更新的ID和订单状态信息更新数据库中的对应记录返回一个布尔值表示更新操作是否成功
boolean b = fangjianOrderService.updateById(fangjianOrderEntity);
// 判断更新操作是否失败如果b为false说明更新数据库记录时出现问题返回一个错误信息给前端提示“操作出错”告知前端发货操作未能成功执行
if (!b) {
return R.error("操作出错");
}
// 如果更新操作成功,返回一个表示成功的响应给前端,告知前端发货操作已成功完成
return R.ok();
}
}
}

@ -1,343 +1,374 @@
package com.entity;
// 导入MyBatis Plus中用于标识主键的注解通过设置其type属性可以指定主键的生成策略例如这里设置为IdType.AUTO表示自动增长
import com.baomidou.mybatisplus.annotations.TableId;
// 导入MyBatis Plus中用于指定实体类对应的数据库表名的注解使得框架能将该实体类与数据库中的相应表进行关联操作
import com.baomidou.mybatisplus.annotations.TableName;
// 导入用于验证字段不能为空的注解,确保对应属性在使用时有值,常用于参数校验场景,比如在接收前端传入的数据时验证是否符合要求
import javax.validation.constraints.NotBlank;
// 导入用于验证集合类型字段不能为空的注解强调对应的集合属性不能为null且不能是空集合常用于对列表等数据结构的校验
import javax.validation.constraints.NotEmpty;
// 导入用于验证基本数据类型字段不能为空的注解,保证对应属性有具体的非空值,防止出现空指针等问题
import javax.validation.constraints.NotNull;
// 导入Jackson框架的注解用于指定在序列化和反序列化过程中忽略某些属性常用于处理一些不需要展示或者不需要参与数据交互的属性
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
// 导入用于处理Java反射机制中方法调用异常的相关类在使用反射相关操作时可能会抛出此类异常需要进行捕获处理以保证程序稳定运行
import java.lang.reflect.InvocationTargetException;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化方便在网络传输、持久化存储等场景下对该类的实例进行操作例如在前后端数据交互或者保存对象状态到文件等情况中使用
import java.io.Serializable;
// 导入Java中的日期类用于处理可能涉及到的创建时间等日期相关属性便于记录实体对象在数据库中的创建时间等信息
import java.util.Date;
// 导入Java的集合类框架中的List接口虽然在当前代码中未看到明显使用场景但可能用于后续扩展该实体类与其他集合类型数据的关联比如房间关联的多个评论列表等情况
import java.util.List;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时按照指定格式进行转换处理使日期数据的格式符合业务要求
import org.springframework.format.annotation.DateTimeFormat;
// 导入Jackson框架的另一个注解用于在序列化和反序列化日期类型数据时按照指定的格式如这里配置的"yyyy-MM-dd HH:mm:ss")进行处理,确保日期格式的一致性和准确性
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Apache Commons BeanUtils工具类其提供了方便的方法来进行Java对象之间属性的复制操作在本类的构造函数中会使用它来进行属性赋值操作
import org.apache.commons.beanutils.BeanUtils;
// 导入MyBatis Plus中用于标识字段与数据库表字段映射关系的注解同时可以设置一些额外属性如这里的fill属性用于指定字段在插入或更新时的自动填充策略
import com.baomidou.mybatisplus.annotations.TableField;
// 导入MyBatis Plus中用于定义字段填充策略的枚举类型这里使用的FieldFill.INSERT表示在插入数据时自动填充指定字段常用于创建时间等字段的自动赋值
import com.baomidou.mybatisplus.enums.FieldFill;
// 导入MyBatis Plus中用于定义主键生成类型的枚举类型之前提到的IdType.AUTO就是其中一种表示自动增长的类型
import com.baomidou.mybatisplus.enums.IdType;
/**
*
* "fangjian"访gettersetterSerializable便使
*
* @author
* @email
* @author // 此处应该填写作者相关信息,可能是开发人员的姓名等,但代码中未明确给出具体值
* @email // 同样,此处应该填写作者的邮箱信息,代码中也未给出具体内容,用于标识代码的归属或者方便联系作者等用途
*/
@TableName("fangjian")
public class FangjianEntity<T> implements Serializable {
// 定义一个序列化版本号用于在序列化和反序列化过程中保证版本的兼容性当类的结构发生变化如添加、删除字段等可以通过修改这个版本号来避免反序列化出错初始值设为1L在类相对稳定的情况下一般不需要改动
private static final long serialVersionUID = 1L;
// 默认构造函数用于创建FangjianEntity类的实例对象在一些情况下比如通过反射等方式创建对象时可能会用到它会创建一个默认状态的对象实例各个属性会使用其对应类型的默认值初始化如基本数据类型的默认初始值等
public FangjianEntity() {
public FangjianEntity() {
}
public FangjianEntity(T t) {
try {
BeanUtils.copyProperties(this, t);
} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 构造函数接收一个泛型类型参数t用于将传入的对象其类型由泛型T指定的属性值复制到当前FangjianEntity对象中通过BeanUtils工具类来实现属性复制方便基于已有的同类型或者兼容类型的数据构建FangjianEntity对象不过在复制过程中可能会抛出异常所以进行了异常捕获处理
public FangjianEntity(T t) {
try {
// 使用BeanUtils的copyProperties方法将t对象的属性值复制到当前对象this实现属性的赋值操作但该方法可能会抛出IllegalAccessException访问权限异常和InvocationTargetException方法调用异常所以需要进行异常捕获处理
BeanUtils.copyProperties(this, t);
} catch (IllegalAccessException | InvocationTargetException e) {
// 如果在属性复制过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,确定是哪里出现了访问权限问题或者方法调用出错等情况
e.printStackTrace();
}
}
/**
*
* @TableIdIdType.AUTO@TableField"id"
*/
@TableId(type = IdType.AUTO)
@TableField(value = "id")
private Integer id;
/**
*
* "标准间""豪华套房"@TableField"fangjian_name"便
*/
@TableField(value = "fangjian_name")
private String fangjianName;
/**
*
* @TableField"fangjian_photo"便
*/
@TableField(value = "fangjian_photo")
private String fangjianPhoto;
/**
*
* "海景房""主题房"@TableField"fangjian_tese"使
*/
@TableField(value = "fangjian_tese")
private String fangjianTese;
/**
*
* "有电视、空调、独立卫生间"@TableField"fangjian_peizhi"便
*/
@TableField(value = "fangjian_peizhi")
private String fangjianPeizhi;
/**
*
* "提供免费的矿泉水、洗漱用品"@TableField"fangjian_shangpin"
*/
@TableField(value = "fangjian_shangpin")
private String fangjianShangpin;
/**
*
* "包含早餐服务""提供免费的客房清洁服务"@TableField"fangjian_fuwu"便
*/
@TableField(value = "fangjian_fuwu")
private String fangjianFuwu;
/**
*
* @TableField"fangjian_money"使便
*/
@TableField(value = "fangjian_money")
private Double fangjianMoney;
/**
*
* 12@TableField"fangjian_types"便
*/
@TableField(value = "fangjian_types")
private Integer fangjianTypes;
/**
*
* @TableField"fangjian_number"便
*/
@TableField(value = "fangjian_number")
private Integer fangjianNumber;
/**
*
* @TableField"fangjian_clicknum"便
*/
@TableField(value = "fangjian_clicknum")
private Integer fangjianClicknum;
/**
*
* @TableField"fangjian_content"使便使
*/
@TableField(value = "fangjian_content")
private String fangjianContent;
/**
*
* @JsonFormat"yyyy-MM-dd HH:mm:ss""GMT+8"@DateTimeFormat@TableFieldFieldFill.INSERT便
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "create_time",fill = FieldFill.INSERT)
@JsonFormat(locale = "zh", timezone = "GMT + 8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
*
*/
*
* JavaBeansetterid
*/
public Integer getId() {
return id;
}
/**
*
*/
/**
*
* JavaBean访getterid
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
*/
*
* fangjianNameJavaBeansetter
*/
public String getFangjianName() {
return fangjianName;
}
/**
*
*/
/**
*
* JavaBean访getterfangjianName
*/
public void setFangjianName(String fangjianName) {
this.fangjianName = fangjianName;
}
/**
*
*/
*
* fangjianPhotoJavaBeansetter
*/
public String getFangjianPhoto() {
return fangjianPhoto;
}
/**
*
*/
/**
*
* JavaBean访getterfangjianPhoto便
*/
public void setFangjianPhoto(String fangjianPhoto) {
this.fangjianPhoto = fangjianPhoto;
}
/**
*
*/
*
* fangjianTeseJavaBeansetter
*/
public String getFangjianTese() {
return fangjianTese;
}
/**
*
*/
/**
*
* JavaBean访getterfangjianTese便
*/
public void setFangjianTese(String fangjianTese) {
this.fangjianTese = fangjianTese;
}
/**
*
*/
*
* JavaBeanfangjianPeizhisetter
*/
public String getFangjianPeizhi() {
return fangjianPeizhi;
}
/**
*
*/
/**
*
* JavaBean访fangjianPeizhi便
*/
public void setFangjianPeizhi(String fangjianPeizhi) {
this.fangjianPeizhi = fangjianPeizhi;
}
/**
*
* fangjianShangpinJavaBeansetter /**
*
*/
// 获取:提供的商品
// 按照JavaBean规范定义的访问器getter方法用于获取提供的商品fangjianShangpin属性的值。
// 外部代码(例如在前端展示房间详情页面,需要告知用户该房间原本为住客提供哪些商品的相关业务逻辑代码中)可以调用这个方法,获取当前对象注明的房间提供的商品信息,像房间是否提供免费的矿泉水、洗漱用品等内容,便于在前端展示给用户知晓,从而帮助用户更好地理解房间相关情况。
public String getFangjianShangpin() {
return fangjianShangpin;
}
/**
*
*/
// 设置:提供的商品
// 这是遵循JavaBean规范定义的用于设置提供的商品fangjianShangpin属性值的方法属于属性修改器setter方法。
// 外部代码在有新增商品种类、修改已提供商品的相关描述(比如商品品牌更换等情况)等业务场景下,需要更新房间提供商品的相关描述内容时,可以调用这个方法,传入对应的字符串内容作为新的商品描述信息,以此来更新该属性的值,确保前端展示的房间提供商品信息是最新且准确的。
public void setFangjianShangpin(String fangjianShangpin) {
this.fangjianShangpin = fangjianShangpin;
}
/**
*
*/
// 获取:提供的服务
// 依据JavaBean规范定义的访问器getter方法用于获取提供的服务fangjianFuwu属性的值。
// 外部代码(在前端展示房间信息时,为了让用户从服务角度更好地理解相关房间情况,需要获取房间配套提供的服务项目信息的相关业务逻辑代码中)可以调用这个方法,获取当前对象列出的房间提供的服务信息,例如房间是否包含早餐服务、有没有免费的客房清洁服务等内容,方便在前端展示给用户,辅助用户从服务方面去理解房间相关情况。
public String getFangjianFuwu() {
return fangjianFuwu;
}
/**
*
*/
// 设置:提供的服务
// 定义了设置提供的服务fangjianFuwu属性值的方法遵循JavaBean规范里的属性修改器setter规则。
// 外部代码在业务运营过程中,当对房间配套的服务项目进行调整(比如新增了某项服务,或者取消了原有的某项服务等情况),或者根据业务需求修改服务介绍的相关文本(比如对服务内容描述进行优化等)时,可以调用这个方法,传入新的描述房间提供服务的字符串内容,来更新该属性的值,保证前端展示的房间提供服务信息与实际情况一致。
public void setFangjianFuwu(String fangjianFuwu) {
this.fangjianFuwu = fangjianFuwu;
}
/**
*
*/
// 获取:价格(天)
// 按照JavaBean规范定义的访问器getter方法用于获取价格fangjianMoney属性的值该价格指的是房间每天的出租价格。
// 外部代码(比如在前端展示房间信息时,为了让用户从性价比等角度综合考虑相关房间情况,需要获取房间价格信息的相关业务逻辑代码中)可以调用这个方法,获取当前对象对应的房间每天的出租价格信息,方便在前端展示给用户查看,使得用户能够结合价格情况以及房间的其他配置、服务等信息,来全面评估房间是否符合自己的需求,比如判断价格是否符合自己的预算等。
public Double getFangjianMoney() {
return fangjianMoney;
}
/**
*
*/
// 设置:价格(天)
// 定义了设置价格fangjianMoney属性值的方法遵循JavaBean规范里的属性修改器setter规则用于设置房间每天的出租价格。
// 外部代码在诸如酒店进行价格调整(根据市场行情、淡旺季等因素改变房间价格),或者根据不同的业务场景(比如针对特定客户群体设置优惠价格等情况)设定价格时,可以调用这个方法,传入相应的价格数值,以此来更新该属性的值,确保前端展示的房间价格信息是准确且符合实际业务设定的。
public void setFangjianMoney(Double fangjianMoney) {
this.fangjianMoney = fangjianMoney;
}
/**
*
*/
// 获取:房间类型
// 此为按照JavaBean规范定义的访问器getter方法用于获取房间类型fangjianTypes属性的值这里的房间类型通常是通过特定的标识如数字、代码等方式来区分不同种类的房间。
// 外部代码在前端展示房间信息时为了便于进行房间分类展示以及方便用户根据房型对房间进行分类查看和理解的相关业务逻辑代码中可以调用这个方法获取当前对象表示的房间类型信息例如用1表示单人间2表示双人间等便于前端根据不同的房型分类展示对应的房间信息使用户能够更高效地查找和查看自己关注的房型相关信息。
public Integer getFangjianTypes() {
return fangjianTypes;
}
/**
*
*/
// 设置:房间类型
// 这是遵循JavaBean规范定义的用于设置房间类型fangjianTypes属性值的方法属于属性修改器setter方法用于设置房间的类型标识。
// 外部代码在诸如酒店新增了一种房型,需要对其设定相应的类型标识,或者根据业务运营需要对已有的房间分类进行修改(比如重新调整房型分类标准等情况)时,可以调用这个方法,传入对应的房间类型标识数值,来更新该属性的值,保证前端展示的房间类型信息与实际的房型分类情况相符。
public void setFangjianTypes(Integer fangjianTypes) {
this.fangjianTypes = fangjianTypes;
}
/**
*
*/
// 获取:房间剩余数量
// 按照JavaBean规范定义的访问器getter方法用于获取房间剩余数量fangjianNumber属性的值该属性记录的是当前房间还可预订的剩余数量。
// 外部代码(在前端展示房间信息时,为了展示房间的热门程度等相关背景信息,让用户了解房间的预订余量情况的相关业务逻辑代码中)可以调用这个方法,获取当前对象记录的房间可预订剩余数量信息,例如剩余数量少可能意味着房间比较热门,用户可以结合这个信息以及其他房间相关情况,来综合考虑是否预订该房间等情况。
public Integer getFangjianNumber() {
return fangjianNumber;
}
/**
*
*/
// 设置:房间剩余数量
// 这是遵循JavaBean规范定义的用于设置房间剩余数量fangjianNumber属性值的方法属于属性修改器setter方法用于设置房间剩余可预订的数量。
// 外部代码在出现诸如有新预订、取消预订等操作后(这些操作会导致房间剩余可预订数量发生变化),需要更新相应数值,使前端展示的信息保持准确时,可以调用这个方法,传入新的剩余数量数值,来更新该属性的值,保证前端展示的房间剩余数量信息与实际可预订情况相符。
public void setFangjianNumber(Integer fangjianNumber) {
this.fangjianNumber = fangjianNumber;
}
/**
*
*/
// 获取:点击次数
// 依据JavaBean规范定义的访问器getter方法用于获取房间的点击次数属性fangjianClicknum的值点击次数用于统计房间信息被查看的次数。
// 外部代码(比如展示房间相关信息的业务逻辑代码或者前端交互代码等,特别是在需要呈现房间受关注程度相关情况的场景下)可以调用这个方法,来获取当前对象所代表的房间被查看的次数信息,以便根据点击次数情况进行相应的展示(比如在前端页面展示房间的热门程度排序等)或业务处理(比如基于点击次数分析房间的受欢迎程度等),辅助用户了解该房间的关注度情况。
public Integer getFangjianClicknum() {
return fangjianClicknum;
}
/**
*
*/
// 设置:点击次数
// 这是遵循JavaBean规范定义的修改器setter方法用于设置房间的点击次数属性fangjianClicknum的值。
// 外部代码在需要更新房间的点击次数信息时(例如每次有用户查看房间详情页面后,按照业务逻辑通常会对点击次数进行累加更新等情况),可以调用这个方法,传入相应的整数值(一般是在原有的点击次数基础上进行增加等操作)来改变该属性的值,确保点击次数数据能准确反映房间被查看的实际情况。
public void setFangjianClicknum(Integer fangjianClicknum) {
this.fangjianClicknum = fangjianClicknum;
}
/**
*
*/
// 获取:房间详情
// 按照JavaBean的属性访问器规范定义的方法用于获取房间详情属性fangjianContent的值该属性存储的是关于房间更全面、详细的描述信息。
// 外部代码(在展示房间相关信息时,为了同时向用户呈现房间的详细情况,帮助用户更好地理解房间的具体情况的相关业务逻辑代码中)可以调用这个方法,获取到像房间布局、面积大小、装修风格等更全面的介绍内容,使得用户在考虑预订等操作时能结合房间详情信息,更深入地了解具体情况,比如判断房间是否满足自己对住宿环境等方面的需求。
public String getFangjianContent() {
return fangjianContent;
}
/**
*
*/
// 设置:房间详情
// 遵循JavaBean规范的属性修改器方法用于设置房间详情属性fangjianContent的值。
// 当需要更新房间的详细描述信息时(比如完善房间介绍、修改房间详情中的部分内容等业务场景,例如酒店重新装修后需要更新房间布局、风格等相关描述信息),外部代码可以调用这个方法,传入新的字符串内容来更新该属性的值,确保房间详情信息的准确性和及时性,使前端展示给用户的房间详情与实际情况一致。
public void setFangjianContent(String fangjianContent) {
this.fangjianContent = fangjianContent;
}
/**
*
*/
// 获取:创建时间
// 这是按照JavaBean规范定义的访问器getter方法用于获取创建时间createTime属性的值该属性用于记录房间信息在数据库中首次创建的时间。
// 外部代码(例如在进行数据统计分析,查看房间信息的创建时间分布情况,或者在一些业务逻辑中需要根据创建时间来判断房间相关业务的先后顺序等场景下)可以调用这个方法,获取当前对象对应的房间创建时间信息,方便进行后续的业务处理和分析。
public Date getCreateTime() {
return createTime;
}
/**
*
*/
// 设置:创建时间
// 定义了设置创建时间createTime属性值的方法遵循JavaBean规范里的属性修改器setter规则用于设置房间信息在数据库中首次创建的时间值。
// 不过通常情况下,由于该属性在代码中设置了自动填充(通过@TableField(value = "create_time", fill = FieldFill.INSERT)注解指定在插入数据时自动填充当前时间),所以外部代码直接调用这个方法来设置创建时间的情况相对较少,更多是由框架在合适的时机自动赋值,但在某些特殊业务场景下(比如数据迁移、数据修复等情况)可能会用到手动设置创建时间的操作。
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
// 重写了toString()方法用于返回一个包含FangjianEntity类所有属性信息的字符串表示形式。
// 当需要将FangjianEntity对象以字符串形式展示比如在调试过程中打印对象信息、在日志中记录对象内容等场景会自动调用这个方法返回的字符串格式如"Fangjian{" + "id=" + id +...}",方便开发人员直观地查看对象各个属性的具体值情况。
@Override
public String toString() {
return "Fangjian{" +
"id=" + id +
", fangjianName=" + fangjianName +
", fangjianPhoto=" + fangjianPhoto +
", fangjianTese=" + fangjianTese +
", fangjianPeizhi=" + fangjianPeizhi +
", fangjianShangpin=" + fangjianShangpin +
", fangjianFuwu=" + fangjianFuwu +
", fangjianMoney=" + fangjianMoney +
", fangjianTypes=" + fangjianTypes +
", fangjianNumber=" + fangjianNumber +
", fangjianClicknum=" + fangjianClicknum +
", fangjianContent=" + fangjianContent +
", createTime=" + createTime +
"}";
}
}
"id=" + id +
", fangjianName=" + fangjianName +
", fangjianPhoto=" + fangjianPhoto +
", fangjianTese=" + fangjianTese +
", fangjianPeizhi=" + fangjianPeizhi +
", fangjianShangpin=" + fangjianShangpin +
", fangjianFuwu=" + fangjianFuwu +
", fangjianMoney=" + fangjianMoney +
", fangjianTypes=" + fangjianTypes +
", fangjianNumber=" + fangjianNumber +
", fangjianClicknum=" + fangjianClicknum +
", fangjianContent=" + fangjianContent +
", createTime=" + createTime +
"}";
}

@ -1,237 +1,266 @@
package com.entity;
// 导入MyBatis Plus中用于标识主键的注解通过设置其type属性可以指定主键的生成策略这里设置为IdType.AUTO表示主键为自动增长类型
import com.baomidou.mybatisplus.annotations.TableId;
// 导入MyBatis Plus中用于指定实体类对应的数据库表名的注解使得框架能将该实体类与数据库中的相应表进行关联操作此处表明该类对应数据库中的"fangjian_liuyan"表
import com.baomidou.mybatisplus.annotations.TableName;
// 导入用于验证字段不能为空的注解,确保对应属性在使用时有值,常用于参数校验场景,比如在接收前端传入的数据时验证是否符合要求,这里强调对应属性不能为空白(包含空字符串、空格等情况)
import javax.validation.constraints.NotBlank;
// 导入用于验证集合类型字段不能为空的注解强调对应的集合属性不能为null且不能是空集合常用于对列表等数据结构的校验不过在当前类中暂时未看到明显相关使用场景
import javax.validation.constraints.NotEmpty;
// 导入用于验证基本数据类型字段不能为空的注解,保证对应属性有具体的非空值,防止出现空指针等问题,用于确保基本数据类型属性有实际值
import javax.validation.constraints.NotNull;
// 导入Jackson框架的注解用于指定在序列化和反序列化过程中忽略某些属性常用于处理一些不需要展示或者不需要参与数据交互的属性不过此处未明确配置忽略的属性列表
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
// 导入用于处理Java反射机制中方法调用异常的相关类在使用反射相关操作如通过BeanUtils复制属性时可能会抛出此类异常需要进行捕获处理以保证程序稳定运行
import java.lang.reflect.InvocationTargetException;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化方便在网络传输、持久化存储等场景下对该类的实例进行操作例如在前后端数据交互或者保存对象状态到文件等情况中使用
import java.io.Serializable;
// 导入Java中的日期类用于处理评论/投诉相关的时间属性,如评论/投诉时间、回复时间、创建时间等,方便记录对应操作发生的具体时间点
import java.util.Date;
// 导入Java的集合类框架中的List接口虽然在当前代码中未看到明显使用场景但可能用于后续扩展该实体类与其他集合类型数据的关联比如可能关联多条相关回复记录等情况
import java.util.List;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时按照指定格式进行转换处理使日期数据的格式符合业务要求
import org.springframework.format.annotation.DateTimeFormat;
// 导入Jackson框架的另一个注解用于在序列化和反序列化日期类型数据时按照指定的格式如这里配置的"yyyy-MM-dd HH:mm:ss")进行处理,确保日期格式的一致性和准确性
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Apache Commons BeanUtils工具类其提供了方便的方法来进行Java对象之间属性的复制操作在本类的构造函数中会使用它来进行属性赋值操作将传入对象的属性复制到当前对象中
import org.apache.commons.beanutils.BeanUtils;
// 导入MyBatis Plus中用于标识字段与数据库表字段映射关系的注解同时可以设置一些额外属性如这里的fill属性用于指定字段在插入或更新时的自动填充策略
import com.baomidou.mybatisplus.annotations.TableField;
// 导入MyBatis Plus中用于定义字段填充策略的枚举类型此处使用的FieldFill.INSERT表示在插入数据时自动填充指定字段常用于创建时间等字段的自动赋值FieldFill.UPDATE表示在更新数据时自动填充指定字段
import com.baomidou.mybatisplus.enums.FieldFill;
// 导入MyBatis Plus中用于定义主键生成类型的枚举类型之前提到的IdType.AUTO就是其中一种表示自动增长的类型
import com.baomidou.mybatisplus.enums.IdType;
/**
* /
* "fangjian_liuyan"/访gettersetterSerializable便使
*
* @author
* @email
* @author // 此处应该填写作者相关信息,可能是开发人员的姓名等,但代码中未明确给出具体值
* @email // 同样,此处应该填写作者的邮箱信息,代码中也未给出具体内容,用于标识代码的归属或者方便联系作者等用途
*/
@TableName("fangjian_liuyan")
public class FangjianLiuyanEntity<T> implements Serializable {
// 定义一个序列化版本号用于在序列化和反序列化过程中保证版本的兼容性当类的结构发生变化如添加、删除字段等可以通过修改这个版本号来避免反序列化出错初始值设为1L在类相对稳定的情况下一般不需要改动
private static final long serialVersionUID = 1L;
// 默认构造函数用于创建FangjianLiuyanEntity类的实例对象在一些情况下比如通过反射等方式创建对象时可能会用到它会创建一个默认状态的对象实例各个属性会使用其对应类型的默认值初始化如基本数据类型的默认初始值等
public FangjianLiuyanEntity() {
public FangjianLiuyanEntity() {
}
public FangjianLiuyanEntity(T t) {
try {
BeanUtils.copyProperties(this, t);
} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 构造函数接收一个泛型类型参数t用于将传入的对象其类型由泛型T指定的属性值复制到当前FangjianLiuyanEntity对象中通过BeanUtils工具类来实现属性复制方便基于已有的同类型或者兼容类型的数据构建FangjianLiuyanEntity对象不过在复制过程中可能会抛出异常所以进行了异常捕获处理
public FangjianLiuyanEntity(T t) {
try {
// 使用BeanUtils的copyProperties方法将t对象的属性值复制到当前对象this实现属性的赋值操作但该方法可能会抛出IllegalAccessException访问权限异常和InvocationTargetException方法调用异常所以需要进行异常捕获处理
BeanUtils.copyProperties(this, t);
} catch (IllegalAccessException | InvocationTargetException e) {
// 如果在属性复制过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,确定是哪里出现了访问权限问题或者方法调用出错等情况
e.printStackTrace();
}
}
/**
*
* /@TableIdIdType.AUTO@TableField"id"便
*/
@TableId(type = IdType.AUTO)
@TableField(value = "id")
private Integer id;
/**
*
* @TableField"fangjian_id"/
*/
@TableField(value = "fangjian_id")
private Integer fangjianId;
/**
*
* /@TableField"yonghu_id"便便/
*/
@TableField(value = "yonghu_id")
private Integer yonghuId;
/**
* /
* @TableField"fangjian_liuyan_text"使/便
*/
@TableField(value = "fangjian_liuyan_text")
private String fangjianLiuyanText;
/**
*
* /@TableField"reply_text"便
*/
@TableField(value = "reply_text")
private String replyText;
/**
* /
* /@JsonFormat"yyyy-MM-dd HH:mm:ss""GMT+8"@DateTimeFormat@TableFieldFieldFill.INSERT/便/
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "insert_time",fill = FieldFill.INSERT)
@JsonFormat(locale = "zh", timezone = "GMT + 8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "insert_time", fill = FieldFill.INSERT)
private Date insertTime;
/**
*
* /@JsonFormat@DateTimeFormat@TableFieldFieldFill.UPDATE便便
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "update_time",fill = FieldFill.UPDATE)
@JsonFormat(locale = "zh", timezone = "GMT + 8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
/**
*
* /@TableFieldFieldFill.INSERT便/
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "create_time",fill = FieldFill.INSERT)
@JsonFormat(locale = "zh", timezone = "GMT + 8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
*
*/
*
* JavaBeansetterid/
*/
public Integer getId() {
return id;
}
/**
*
*/
/**
*
* JavaBean访getterid/
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
*/
*
* fangjianIdJavaBeansetter/
*/
public Integer getFangjianId() {
return fangjianId;
}
/**
*
*/
/**
*
* JavaBean访getterfangjianId/便
*/
public void setFangjianId(Integer fangjianId) {
this.fangjianId = fangjianId;
}
/**
*
*/
*
* yonghuIdJavaBeansetter/
*/
public Integer getYonghuId() {
return yonghuId;
}
/**
*
*/
/**
*
* JavaBean访getteryonghuId//便
*/
public void setYonghuId(Integer yonghuId) {
this.yonghuId = yonghuId;
}
/**
* /
*/
* /
* /fangjianLiuyanTextJavaBeansetter///
*/
public String getFangjianLiuyanText() {
return fangjianLiuyanText;
}
/**
* /
*/
/**
* /
* JavaBean访getter/fangjianLiuyanText//便
*/
public void setFangjianLiuyanText(String fangjianLiuyanText) {
this.fangjianLiuyanText = fangjianLiuyanText;
}
/**
*
*/
*
* JavaBeanreplyTextsetter
*/
public String getReplyText() {
return replyText;
}
/**
*
*/
/**
*
* JavaBean访getterreplyText/便
*/
public void setReplyText(String replyText) {
this.replyText = replyText;
}
/**
* /
*/
* /
* /insertTimeJavaBeansetterDate
*/
public Date getInsertTime() {
return insertTime;
}
/**
* /
*/
/**
* /
* JavaBean访getter/insertTime///便
*/
public void setInsertTime(Date insertTime) {
this.insertTime = insertTime;
}
/**
*
*/
// 获取:回复时间
// 按照JavaBean规范定义的访问器getter方法用于获取回复时间updateTime属性的值。
// 外部代码(比如在展示房间评论/投诉相关信息时,需要呈现针对该评论/投诉的回复具体是何时做出的相关业务逻辑代码中,或者在分析回复及时性等业务场景下)可以调用这个方法,获取当前对象记录的回复操作发生的时间信息,方便进行展示以及后续的时间相关分析,例如查看回复是否及时等情况。
public Date getUpdateTime() {
return updateTime;
}
/**
*
*/
// 设置:回复时间
// 定义了设置回复时间updateTime属性值的方法遵循JavaBean规范里的属性修改器setter规则。
// 通常情况下,该属性会通过框架在更新数据(例如添加或修改回复内容时)自动填充当前时间(通过@TableField(value = "update_time", fill = FieldFill.UPDATE)注解配置实现自动填充不过在一些特殊业务场景下比如数据迁移、时间数据修复等情况外部代码如负责数据维护相关的业务逻辑代码可以调用这个方法传入相应的Date类型的时间对象来更新该属性的值确保回复时间记录的准确性。
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
/**
*
*/
// 获取:创建时间
// 这是按照JavaBean规范定义的访问器getter方法用于获取创建时间createTime属性的值该属性用于记录这条房间评论/投诉记录在数据库中首次被创建的时间点。
// 外部代码(例如在进行数据统计分析,查看不同时间段内房间评论/投诉记录的创建数量变化情况,或者在一些业务逻辑中需要根据创建时间来判断相关业务的先后顺序等场景下)可以调用这个方法,获取当前对象对应的创建时间信息,方便进行后续的业务处理和分析操作。
public Date getCreateTime() {
return createTime;
}
/**
*
*/
// 设置:创建时间
// 遵循JavaBean规范里的属性修改器setter规则定义的方法用于设置房间评论/投诉记录的创建时间createTime属性值。
// 一般来说,该属性会在插入数据时由框架自动填充当前时间(通过@TableField(value = "create_time", fill = FieldFill.INSERT)注解配置实现自动填充不过在特定的业务需求场景下比如数据迁移、历史数据修复等外部代码例如负责数据处理的相关业务逻辑代码可以调用这个方法传入对应的Date类型的时间对象来改变该属性的值以保证创建时间数据的准确性和符合实际业务要求。
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
// 重写了toString()方法用于返回一个包含FangjianLiuyanEntity类所有属性信息的字符串表示形式。
// 当需要将FangjianLiuyanEntity对象以字符串形式展示比如在调试过程中打印对象信息、在日志中记录对象内容等场景会自动调用这个方法按照指定的格式如"FangjianLiuyan{" + "id=" + id +...}")返回包含各个属性值的字符串,方便开发人员直观地查看对象各个属性的具体值情况,有助于快速定位和排查对象数据相关的问题。
@Override
public String toString() {
return "FangjianLiuyan{" +
"id=" + id +
", fangjianId=" + fangjianId +
", yonghuId=" + yonghuId +
", fangjianLiuyanText=" + fangjianLiuyanText +
", replyText=" + replyText +
", insertTime=" + insertTime +
", updateTime=" + updateTime +
", createTime=" + createTime +
"}";
}
}
"id=" + id +
", fangjianId=" + fangjianId +
", yonghuId=" + yonghuId +
", fangjianLiuyanText=" + fangjianLiuyanText +
", replyText=" + replyText +
", insertTime=" + insertTime +
", updateTime=" + updateTime +
", createTime=" + createTime +
"}";
}

@ -1,213 +1,248 @@
package com.entity;
// 导入MyBatis Plus中用于标识主键的注解通过设置其type属性可以指定主键的生成策略这里设置为IdType.AUTO表示主键是自动增长类型方便数据库为每条记录自动分配唯一的标识符
import com.baomidou.mybatisplus.annotations.TableId;
// 导入MyBatis Plus中用于指定实体类对应的数据库表名的注解使得框架能将该实体类与数据库中的相应表进行关联操作此处表明该类对应数据库中的"fangjian_order"表,即房间预约相关的数据表
import com.baomidou.mybatisplus.annotations.TableName;
// 导入用于验证字段不能为空的注解,确保对应属性在使用时有值,常用于参数校验场景,比如在接收前端传入的数据时验证是否符合要求,防止出现空值导致后续业务逻辑出错
import javax.validation.constraints.NotBlank;
// 导入用于验证集合类型字段不能为空的注解强调对应的集合属性不能为null且不能是空集合不过在当前类中暂时未看到明显与之相关的使用场景更多是针对集合属性的校验保障
import javax.validation.constraints.NotEmpty;
// 导入用于验证基本数据类型字段不能为空的注解,保证对应属性有具体的非空值,避免因基本数据类型属性为空引发空指针等异常情况,保障业务逻辑的正常执行
import javax.validation.constraints.NotNull;
// 导入Jackson框架的注解用于指定在序列化和反序列化过程中忽略某些属性常用于处理一些不需要展示或者不需要参与数据交互的属性可根据业务需求灵活配置忽略的属性列表但此处未明确具体要忽略的属性
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
// 导入用于处理Java反射机制中方法调用异常的相关类在使用反射相关操作比如通过BeanUtils进行属性复制时可能会抛出此类异常所以需要进行捕获处理以保证程序稳定运行避免因异常导致程序崩溃
import java.lang.reflect.InvocationTargetException;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化方便在网络传输、持久化存储等场景下对该类的实例进行操作例如在前后端数据交互或者保存对象状态到文件等情况中使用确保数据能以合适的方式进行传递和保存
import java.io.Serializable;
// 导入Java中的日期类用于处理与房间预约相关的各种时间属性如预约日期、创建时间等方便准确记录和操作不同时间节点的信息满足业务对时间数据的需求
import java.util.Date;
// 导入Java的集合类框架中的List接口虽然在当前代码中未看到明显使用场景但可能用于后续扩展该实体类与其他集合类型数据的关联比如可能关联多条同房间不同时间段的预约记录等情况
import java.util.List;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时按照指定格式进行转换处理使日期数据的格式符合业务要求确保数据在交互过程中的格式一致性和准确性
import org.springframework.format.annotation.DateTimeFormat;
// 导入Jackson框架的另一个注解用于在序列化和反序列化日期类型数据时按照指定的格式如这里配置的不同格式有的是"yyyy-MM-dd"用于预约日期,有的是"yyyy-MM-dd HH:mm:ss"用于创建时间等)进行处理,保证日期数据在不同操作中的格式规范统一
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Apache Commons BeanUtils工具类其提供了方便的方法来进行Java对象之间属性的复制操作在本类的构造函数中会使用它来进行属性赋值操作将传入对象的属性复制到当前对象中实现对象间属性值的快速传递
import org.apache.commons.beanutils.BeanUtils;
// 导入MyBatis Plus中用于标识字段与数据库表字段映射关系的注解同时可以设置一些额外属性如这里的fill属性用于指定字段在插入或更新时的自动填充策略便于在数据库操作时自动处理一些字段值的赋值情况
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.enums.FieldFill;
// 导入MyBatis Plus中用于定义字段填充策略的枚举类型此处使用的FieldFill.INSERT表示在插入数据时自动填充指定字段常用于创建时间等字段的自动赋值方便记录关键时间信息
import com.baomidou.myatisplus.enums.FieldFill;
// 导入MyBatis Plus中用于定义主键生成类型的枚举类型之前提到的IdType.AUTO就是其中一种表示自动增长的类型清晰定义主键的生成规则
import com.baomidou.mybatisplus.enums.IdType;
/**
*
* "fangjian_order"访gettersetterSerializable便使
*
* @author
* @email
* @author // 此处应该填写作者相关信息,可能是开发人员的姓名等,但代码中未明确给出具体值,用于标识代码的创作者
* @email // 同样,此处应该填写作者的邮箱信息,代码中也未给出具体内容,可用于方便联系作者或者明确代码归属等用途
*/
@TableName("fangjian_order")
public class FangjianOrderEntity<T> implements Serializable {
// 定义一个序列化版本号用于在序列化和反序列化过程中保证版本的兼容性当类的结构发生变化如添加、删除字段等可以通过修改这个版本号来避免反序列化出错初始值设为1L在类相对稳定的情况下一般不需要改动维持对象序列化的稳定性
private static final long serialVersionUID = 1L;
// 默认构造函数用于创建FangjianOrderEntity类的实例对象在一些情况下比如通过反射等方式创建对象时可能会用到它会创建一个默认状态的对象实例各个属性会使用其对应类型的默认值初始化如基本数据类型的默认初始值等为对象的创建提供一种基础方式
public FangjianOrderEntity() {
public FangjianOrderEntity() {
}
public FangjianOrderEntity(T t) {
try {
BeanUtils.copyProperties(this, t);
} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 构造函数接收一个泛型类型参数t用于将传入的对象其类型由泛型T指定的属性值复制到当前FangjianOrderEntity对象中通过BeanUtils工具类来实现属性复制方便基于已有的同类型或者兼容类型的数据构建FangjianOrderEntity对象不过在复制过程中可能会抛出异常所以进行了异常捕获处理保障属性复制操作的稳定性
public FangjianOrderEntity(T t) {
try {
// 使用BeanUtils的copyProperties方法将t对象的属性值复制到当前对象this实现属性的赋值操作但该方法可能会抛出IllegalAccessException访问权限异常和InvocationTargetException方法调用异常所以需要进行异常捕获处理确保属性复制过程遇到问题能妥善处理
BeanUtils.copyProperties(this, t);
} catch (IllegalAccessException | InvocationTargetException e) {
// 如果在属性复制过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,确定是哪里出现了访问权限问题或者方法调用出错等情况,辅助定位和解决异常
e.printStackTrace();
}
}
/**
*
* @TableIdIdType.AUTO@TableField"id"便
*/
@TableId(type = IdType.AUTO)
@TableField(value = "id")
private Integer id;
/**
*
* @TableField"fangjian_id"
*/
@TableField(value = "fangjian_id")
private Integer fangjianId;
/**
*
* @TableField"yonghu_id"便便
*/
@TableField(value = "yonghu_id")
private Integer yonghuId;
/**
*
* @JsonFormat"yyyy-MM-dd""GMT+8"@DateTimeFormat@TableField"fangjian_order_time"使便
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
@DateTimeFormat
@JsonFormat(locale = "zh", timezone = "GMT + 8", pattern = "yyyy-MM-dd")
@DateTimeFormat
@TableField(value = "fangjian_order_time")
private Date fangjianOrderTime;
/**
*
* @TableField"fangjian_order_text"便
*/
@TableField(value = "fangjian_order_text")
private String fangjianOrderText;
/**
*
* @TableField"fangjian_order_types"便便
*/
@TableField(value = "fangjian_order_types")
private Integer fangjianOrderTypes;
/**
*
* @JsonFormat"yyyy-MM-dd HH:mm:ss""GMT+8"@DateTimeFormat@TableFieldFieldFill.INSERT便便
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "create_time",fill = FieldFill.INSERT)
@JsonFormat(locale = "zh", timezone = "GMT + 8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
*
*/
*
* JavaBeansetterid
*/
public Integer getId() {
return id;
}
/**
*
*/
/**
*
* JavaBean访getterid便使
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
*/
*
* fangjianIdJavaBeansetter
*/
public Integer getFangjianId() {
return fangjianId;
}
/**
*
*/
/**
*
* JavaBean访getterfangjianId便
*/
public void setFangjianId(Integer fangjianId) {
this.fangjianId = fangjianId;
}
/**
*
*/
*
* yonghuIdJavaBeansetter
*/
public Integer getYonghuId() {
return yonghuId;
}
/**
*
*/
/**
*
* JavaBean访getteryonghuId便
*/
public void setYonghuId(Integer yonghuId) {
this.yonghuId = yonghuId;
}
/**
*
*/
*
* fangjianOrderTimeJavaBeansetterDate
*/
public Date getFangjianOrderTime() {
return fangjianOrderTime;
}
/**
*
*/
/**
*
* JavaBean访getterfangjianOrderTime便
*/
public void setFangjianOrderTime(Date fangjianOrderTime) {
this.fangjianOrderTime = fangjianOrderTime;
}
/**
*
*/
*
* JavaBeanfangjianOrderTextsetter便
*/
public String getFangjianOrderText() {
return fangjianOrderText;
}
/**
*
*/
/**
*
* JavaBean访getterfangjianOrderText便使
*/
public void setFangjianOrderText(String fangjianOrderText) {
this.fangjianOrderText = fangjianOrderText;
}
/**
*
*/
*
* fangjianOrderTypesJavaBeansetter
* 便
*/
public Integer getFangjianOrderTypes() {
// 按照JavaBean规范定义的访问器getter方法用于获取订单状态fangjianOrderTypes属性的值。
// 外部代码(例如在展示预约订单详情页面,需要告知用户当前订单处于何种状态,或者在业务逻辑中根据订单状态决定下一步操作,像已支付状态则安排后续入住流程等相关业务逻辑代码中)可以调用这个方法,获取当前对象记录的订单状态信息,方便进行展示以及后续的业务处理操作。
return fangjianOrderTypes;
}
/**
*
*/
*
*/
public void setFangjianOrderTypes(Integer fangjianOrderTypes) {
// 将传入的参数值代表新的订单状态的整数值赋值给当前对象的fangjianOrderTypes属性完成对订单状态属性值的更新操作。
// 这样就能使订单状态在业务流程变化时及时得到准确修改,保证整个预约业务系统中订单状态信息的准确性和时效性,以便后续各环节能依据正确的状态进行相应处理。
this.fangjianOrderTypes = fangjianOrderTypes;
}
/**
*
*/
*
* JavaBeansettercreateTime
* @TableField(value = "create_time", fill = FieldFill.INSERT)Date
*/
public Date getCreateTime() {
// 按照JavaBean规范定义的访问器getter方法用于获取创建时间createTime属性的值该属性用于记录这条房间预约记录在数据库中首次被创建的时间点。
// 外部代码(例如在进行数据统计分析,查看不同时间段内房间预约记录的创建数量变化情况,或者在一些业务逻辑中需要根据创建时间来判断相关业务的先后顺序等场景下)可以调用这个方法,获取当前对象对应的创建时间信息,方便进行后续的业务处理和分析操作。
return createTime;
}
/**
*
*/
*
*/
public void setCreateTime(Date createTime) {
// 将传入的Date类型的时间对象赋值给当前对象的createTime属性完成对创建时间属性值的更新操作。
// 主要用于特殊业务场景下对创建时间的手动调整,确保其能准确反映预约记录真实的创建时间情况,保障基于创建时间相关的业务逻辑和数据分析的准确性。
this.createTime = createTime;
}
@Override
public String toString() {
// 重写了toString()方法用于返回一个包含FangjianOrderEntity类所有属性信息的字符串表示形式。
// 当需要将FangjianOrderEntity对象以字符串形式展示比如在调试过程中打印对象信息、在日志中记录对象内容等场景会自动调用这个方法按照指定的格式如"FangjianOrder{" + "id=" + id +...}")返回包含各个属性值的字符串,方便开发人员直观地查看对象各个属性的具体值情况,有助于快速定位和排查对象数据相关的问题。
return "FangjianOrder{" +
"id=" + id +
", fangjianId=" + fangjianId +
", yonghuId=" + yonghuId +
", fangjianOrderTime=" + fangjianOrderTime +
", fangjianOrderText=" + fangjianOrderText +
", fangjianOrderTypes=" + fangjianOrderTypes +
", createTime=" + createTime +
"}";
}
}
"id=" + id +
", fangjianId=" + fangjianId +
", yonghuId=" + yonghuId +
", fangjianOrderTime=" + fangjianOrderTime +
", fangjianOrderText=" + fangjianOrderText +
", fangjianOrderTypes=" + fangjianOrderTypes +
", createTime=" + createTime +
"}";
}

@ -1,191 +1,209 @@
package com.entity.model;
// 导入房间评论/投诉对应的实体类,可能在后续代码中会基于这个实体类进行一些关联操作或者属性继承等(具体看业务需求)
import com.entity.FangjianLiuyanEntity;
// 导入MyBatis Plus的注解用于指定该实体类对应的数据库表名方便在数据持久化操作时进行表名的映射
import com.baomidou.mybatisplus.annotations.TableName;
// 导入Jackson框架的注解用于在序列化和反序列化日期类型数据时按照指定的格式进行处理这里指定了中文环境"zh")、东八区时区("GMT+8")以及具体的日期时间格式("yyyy-MM-dd HH:mm:ss"
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Java中的日期类用于表示日期时间相关的属性比如评论/投诉时间、回复时间、创建时间等
import java.util.Date;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时进行格式转换的配置通常和 @JsonFormat 配合使用来处理日期相关的输入输出格式)
import org.springframework.format.annotation.DateTimeFormat;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化方便在网络传输、持久化存储等场景中使用
import java.io.Serializable;
/**
* /
*
* entity
* entity
* ModelAndView model
* /便
*/
public class FangjianLiuyanModel implements Serializable {
// 定义一个序列化版本号,用于在序列化和反序列化过程中保证版本的兼容性,当类的结构发生变化时(如添加、删除字段等),可以通过修改这个版本号来避免反序列化出错
private static final long serialVersionUID = 1L;
/**
*
* /ID/
*/
private Integer id;
/**
*
* IDID
*/
private Integer fangjianId;
/**
*
* /IDID
*/
private Integer yonghuId;
/**
* /
*
*/
private String fangjianLiuyanText;
/**
*
* /
*/
private String replyText;
/**
* /
* / @JsonFormat @DateTimeFormat
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date insertTime;
/**
*
* /便使
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date updateTime;
/**
*
* /
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date createTime;
/**
*
*/
*
* idJavaBean访getter
*/
public Integer getId() {
return id;
}
/**
*
*/
*
* idJavaBeansetter
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
*/
*
* fangjianId便
*/
public Integer getFangjianId() {
return fangjianId;
}
/**
*
*/
*
* fangjianId/ID
*/
public void setFangjianId(Integer fangjianId) {
this.fangjianId = fangjianId;
}
/**
*
*/
*
* yonghuId便
*/
public Integer getYonghuId() {
return yonghuId;
}
/**
*
*/
*
* yonghuId/
*/
public void setYonghuId(Integer yonghuId) {
this.yonghuId = yonghuId;
}
/**
* /
*/
* /
* /fangjianLiuyanText使
*/
public String getFangjianLiuyanText() {
return fangjianLiuyanText;
}
/**
* /
*/
* /
* /fangjianLiuyanText/
*/
public void setFangjianLiuyanText(String fangjianLiuyanText) {
this.fangjianLiuyanText = fangjianLiuyanText;
}
/**
*
*/
*
* replyText/使
*/
public String getReplyText() {
return replyText;
}
/**
*
*/
*
* replyText/
*/
public void setReplyText(String replyText) {
this.replyText = replyText;
}
/**
* /
*/
* /
* /insertTime/使
*/
public Date getInsertTime() {
return insertTime;
}
/**
* /
*/
* /
* /insertTime//
*/
public void setInsertTime(Date insertTime) {
this.insertTime = insertTime;
}
/**
*
*/
*
* updateTime/
*/
public Date getUpdateTime() {
return updateTime;
}
/**
*
*/
*
* updateTime/
*/
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
/**
*
*/
*
* createTime/使
*/
public Date getCreateTime() {
return createTime;
}
/**
*
*/
*
* createTime
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
}

@ -1,287 +1,319 @@
package com.entity.model;
// 导入房间实体类,可能后续会基于该实体类与本模型类进行关联操作,比如获取房间的其他详细信息等(具体取决于业务逻辑)
import com.entity.FangjianEntity;
// 导入MyBatis Plus的注解用于指定该实体类对应的数据库表名方便在数据持久化操作时进行表名的映射使得在与数据库交互时能准确地找到对应的表来执行增删改查等操作
import com.baomidou.mybatisplus.annotations.TableName;
// 导入Jackson框架的注解用于在序列化将对象转换为便于存储或传输的字节流等形式和反序列化将字节流等还原为对象日期类型数据时按照指定的格式进行处理这里指定了符合中文习惯的环境"zh")、东八区时区("GMT+8")以及具体的日期时间格式("yyyy-MM-dd HH:mm:ss"),确保日期数据在不同场景下格式统一且符合业务需求
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Java中的日期类用于表示创建时间这个日期时间相关的属性方便记录和操作房间信息记录创建的具体时间点
import java.util.Date;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时进行格式转换的配置通常和 @JsonFormat 配合使用来处理日期相关的输入输出格式,保证数据交互过程中日期格式的一致性)
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化这样在网络传输例如在分布式系统中不同服务间传递数据、持久化存储如保存到文件或数据库等场景下该类的对象能够正常使用
import java.io.Serializable;
/**
*
*
* entity
* entity
* ModelAndView model
* JavaBean便访
*/
public class FangjianModel implements Serializable {
// 定义一个序列化版本号用于在序列化和反序列化过程中保证版本的兼容性当类的结构发生变化时如添加、删除字段等可以通过修改这个版本号来避免反序列化出错初始值设为1L在类结构稳定的情况下通常不需要改动
private static final long serialVersionUID = 1L;
/**
*
* ID
*/
private Integer id;
/**
*
* 便便
*/
private String fangjianName;
/**
*
* 便
*/
private String fangjianPhoto;
/**
*
*
*/
private String fangjianTese;
/**
*
* 便使
*/
private String fangjianPeizhi;
/**
*
*
*/
private String fangjianShangpin;
/**
*
*
*/
private String fangjianFuwu;
/**
*
* 便宿
*/
private Double fangjianMoney;
/**
*
* 12便宿
*/
private Integer fangjianTypes;
/**
*
*
*/
private Integer fangjianNumber;
/**
*
*
*/
private Integer fangjianClicknum;
/**
*
*
*/
private String fangjianContent;
/**
* show1 show2 photoShow
* @JsonFormat @DateTimeFormat show1show2photoShow
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date createTime;
/**
*
*/
*
* idJavaBean访getter便使
*/
public Integer getId() {
return id;
}
/**
*
*/
*
* idJavaBeansetter
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
*/
*
* fangjianNameJavaBean访便使
*/
public String getFangjianName() {
return fangjianName;
}
/**
*
*/
*
* fangjianNameJavaBean
*/
public void setFangjianName(String fangjianName) {
this.fangjianName = fangjianName;
}
/**
*
*/
*
* fangjianPhotoJavaBean访
*/
public String getFangjianPhoto() {
return fangjianPhoto;
}
/**
*
*/
*
* fangjianPhotoJavaBean
*/
public void setFangjianPhoto(String fangjianPhoto) {
this.fangjianPhoto = fangjianPhoto;
}
/**
*
*/
*
* fangjianTeseJavaBean访
*/
public String getFangjianTese() {
return fangjianTese;
}
/**
*
*/
*
* fangjianTeseJavaBean
*/
public void setFangjianTese(String fangjianTese) {
this.fangjianTese = fangjianTese;
}
/**
*
*/
*
* fangjianPeizhiJavaBean访便便
*/
public String getFangjianPeizhi() {
return fangjianPeizhi;
}
/**
*
*/
*
* fangjianPeizhiJavaBean
*/
public void setFangjianPeizhi(String fangjianPeizhi) {
this.fangjianPeizhi = fangjianPeizhi;
}
/**
*
*/
*
* fangjianShangpinJavaBean访
*/
public String getFangjianShangpin() {
return fangjianShangpin;
}
/**
*
*/
*
* fangjianShangpinJavaBean
*/
public void setFangjianShangpin(String fangjianShangpin) {
this.fangjianShangpin = fangjianShangpin;
}
/**
*
*/
*
* fangjianFuwuJavaBean访
*/
public String getFangjianFuwu() {
return fangjianFuwu;
}
/**
*
*/
*
* fangjianFuwuJavaBean
*/
public void setFangjianFuwu(String fangjianFuwu) {
this.fangjianFuwu = fangjianFuwu;
}
/**
*
*/
*
* fangjianMoneyJavaBean访便宿
*/
public Double getFangjianMoney() {
return fangjianMoney;
}
/**
*
*/
*
* fangjianMoneyJavaBean
*/
public void setFangjianMoney(Double fangjianMoney) {
this.fangjianMoney = fangjianMoney;
}
/**
*
*/
*
* fangjianTypesJavaBean访便便宿
*/
public Integer getFangjianTypes() {
return fangjianTypes;
}
/**
*
*/
*
* fangjianTypesJavaBean
*/
public void setFangjianTypes(Integer fangjianTypes) {
this.fangjianTypes = fangjianTypes;
}
/**
*
*/
*
* fangjianNumberJavaBean访
*/
public Integer getFangjianNumber() {
return fangjianNumber;
}
/**
*
*/
*
* fangjianNumberJavaBean
*/
public void setFangjianNumber(Integer fangjianNumber) {
this.fangjianNumber = fangjianNumber;
}
/**
*
*/
public Integer getFangjianClicknum() {
return fangjianClicknum;
}
/**
*
* fangjianClicknum
*/
public Integer getFangjianClicknum() {
return fangjianClicknum;
}
/**
*
*/
*
* fangjianClicknum
*/
public void setFangjianClicknum(Integer fangjianClicknum) {
this.fangjianClicknum = fangjianClicknum;
}
/**
*
*/
*
* fangjianContent
*/
public String getFangjianContent() {
return fangjianContent;
}
/**
*
*/
*
* fangjianContent
*/
public void setFangjianContent(String fangjianContent) {
this.fangjianContent = fangjianContent;
}
/**
* show1 show2 photoShow
*/
* show1 show2 photoShow
* createTimeshow1show2photoShow
*/
public Date getCreateTime() {
return createTime;
}
/**
* show1 show2 photoShow
*/
* show1 show2 photoShow
* createTime
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
}

@ -1,169 +1,216 @@
package com.entity.model;
// 导入房间预约对应的实体类FangjianOrderEntity可能后续会基于这个实体类进行一些拓展或者关联操作例如在某些业务逻辑中需要获取实体类中的其他属性或方法等
// 比如可能基于FangjianOrderEntity中的一些通用属性进行复用或者在复杂业务场景下调用其相关业务方法来完善房间预约功能相关逻辑。
import com.entity.FangjianOrderEntity;
// 导入MyBatis Plus的注解用于指定该实体类对应的数据库表名方便在进行数据库操作如数据持久化、查询等能准确地将实体类与数据库表进行映射
// 通过这个注解MyBatis Plus框架就能知道该实体类对应数据库中的哪张表确保数据操作的准确性避免操作到错误的表。
import com.baomidou.mybatisplus.annotations.TableName;
// 导入Jackson框架的注解用于在序列化将对象转换为字节流等形式以便存储或传输和反序列化将字节流等转换回对象日期类型数据时按照指定的格式中文环境、东八区时区以及具体的日期时间格式进行处理
// 这样在将该实体类对象传输(比如通过网络发送给其他服务或者前端)或者从存储中读取还原对象时,日期类型的属性能够以正确的格式呈现和解析,保证数据的一致性和正确性。
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Java中的日期类用于表示像预约日期、创建时间等与时间相关的属性这些属性在业务中需要精确地记录具体的时间点
// 方便后续基于时间进行各种业务判断、统计以及展示等操作,例如判断预约是否过期、统计每天的预约量等。
import java.util.Date;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时进行格式转换的配置常和 @JsonFormat 注解配合使用,确保日期数据在不同交互场景下格式统一
// 比如前端传入的日期格式可能不规范,通过这个注解可以将其转换为符合后端业务要求的格式,同时返回给前端时也能以统一的格式展示,提升数据交互的兼容性和准确性。
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化使得该类的实例能够在网络传输、持久化存储等场景中正常使用比如在分布式系统中传递该对象或者将其保存到文件等情况
// 遵循这个接口规范,对象就能在不同的运行环境和存储场景下顺利转换和传递,保障系统间数据交互的可行性。
import java.io.Serializable;
/**
*
*
* entity
* entity
* ModelAndView model
* JavaBean便访
*/
public class FangjianOrderModel implements Serializable {
// 定义一个序列化版本号用于在序列化和反序列化过程中保证版本的兼容性。当类的结构发生变化比如添加、删除字段等情况可以通过修改这个版本号来避免反序列化出现错误初始值设为1L在类结构稳定时通常不需要改动。
// 它就像是类的一个版本标识,在对象序列化存储后,如果类结构改变了,通过调整这个版本号来提示反序列化机制进行相应的兼容处理,确保数据能正确还原。
private static final long serialVersionUID = 1L;
/**
*
* 便
*
*/
private Integer id;
/**
*
* ID
* ID
*/
private Integer fangjianId;
/**
*
* ID
* ID
*/
private Integer yonghuId;
/**
*
* @JsonFormat @DateTimeFormat "yyyy-MM-dd HH:mm:ss"
* 便使
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date fangjianOrderTime;
/**
*
* 便
*
*/
private String fangjianOrderText;
/**
*
* 1234退便便
*
*/
private Integer fangjianOrderTypes;
/**
*
* @JsonFormat @DateTimeFormat
*
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date createTime;
/**
*
*/
*
* idJavaBean访getter便使
*
*/
public Integer getId() {
return id;
}
/**
*
*/
*
* idJavaBeansetter
*
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
*/
*
* fangjianIdJavaBean访
* IDID
*/
public Integer getFangjianId() {
return fangjianId;
}
/**
*
*/
*
* fangjianIdJavaBeanID
* ABIDBID
*/
public void setFangjianId(Integer fangjianId) {
this.fangjianId = fangjianId;
}
/**
*
*/
*
* yonghuIdJavaBean访
* IDID
*/
public Integer getYonghuId() {
return yonghuId;
}
/**
*
*/
*
* yonghuIdJavaBeanID
* ABIDBID
*/
public void setYonghuId(Integer yonghuId) {
this.yonghuId = yonghuId;
}
/**
*
*/
*
* fangjianOrderTimeJavaBean访
* 退
*/
public Date getFangjianOrderTime() {
return fangjianOrderTime;
}
/**
*
*/
*
* fangjianOrderTimeJavaBean
*
*/
public void setFangjianOrderTime(Date fangjianOrderTime) {
this.fangjianOrderTime = fangjianOrderTime;
}
/**
*
*/
*
* fangjianOrderTextJavaBean访便
*
*/
public String getFangjianOrderText() {
return fangjianOrderText;
}
/**
*
*/
*
* fangjianOrderTextJavaBean
* 便
*/
public void setFangjianOrderText(String fangjianOrderText) {
this.fangjianOrderText = fangjianOrderText;
}
/**
*
*/
*
* fangjianOrderTypesJavaBean访便
*
*/
public Integer getFangjianOrderTypes() {
return fangjianOrderTypes;
}
/**
*
*/
*
* fangjianOrderTypesJavaBean
*
*/
public void setFangjianOrderTypes(Integer fangjianOrderTypes) {
this.fangjianOrderTypes = fangjianOrderTypes;
}
/**
*
*/
*
* createTimeJavaBean访
*
*/
public Date getCreateTime() {
return createTime;
}
/**
*
*/
// 设置:创建时间
// 定义了设置 `createTime` 属性值的方法遵循JavaBean的属性修改器setter规范。
// 外部代码(例如在业务逻辑层进行数据处理,或者在与数据库交互的相关代码中)可以调用这个方法,为当前 `FangjianOrderModel` 对象的 `createTime` 属性赋予具体的日期时间值。
// 例如在初次向数据库插入一条新的房间预约记录时,通常会获取当前系统时间,并通过调用这个方法将获取到的时间值传递进来,以此准确记录该房间预约记录创建的时间点,保证数据的完整性以及后续基于时间相关的业务逻辑(如按照创建时间排序、统计不同时间段的预约数量等)能够正确执行。
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
}

@ -1,378 +1,418 @@
package com.entity.view;
// 导入房间评论/投诉对应的实体类,可能后续会基于这个实体类进行一些属性的继承或者数据的关联操作等,以构建视图实体类所需的数据内容
// 例如可能继承实体类中的部分基础属性,或者通过关联操作获取实体类中与评论/投诉相关联的其他有用数据,丰富视图类展示的信息。
import com.entity.FangjianLiuyanEntity;
// 导入MyBatis Plus的注解用于指定该实体类对应的数据库表名方便在数据持久化操作等场景下进行表名的映射关联
// 这样在与数据库进行交互(如插入、查询、更新、删除数据等操作)时,框架能准确知道该视图类对应数据库中的哪张表,确保数据操作的准确性。
import com.baomidou.mybatisplus.annotations.TableName;
// 导入Apache Commons BeanUtils工具类用于方便地进行Java对象之间属性的复制操作在构造函数中会使用它来复制相关实体类的属性到当前视图类中
// 避免手动逐个设置属性值的繁琐过程,提高代码的复用性和开发效率,使得基于已有实体对象构建视图对象时更加便捷。
import org.apache.commons.beanutils.BeanUtils;
// 导入异常处理相关的类用于捕获在使用BeanUtils进行属性复制操作时可能抛出的异常保证程序的稳定性避免因异常导致程序崩溃
// 因为BeanUtils的copyProperties方法在一些情况下如属性的访问权限问题、源对象或目标对象的方法调用出现错误等可能会抛出异常通过捕获这些异常可以进行相应的处理如记录日志、提示错误信息等
import java.lang.reflect.InvocationTargetException;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时进行格式转换的配置通常和其他日期处理注解配合使用
// 确保前端传入的日期数据能被后端正确解析并转换为合适的格式进行处理,同时向前端返回的日期数据格式也符合前端展示的要求,增强数据交互的兼容性。
import org.springframework.format.annotation.DateTimeFormat;
// 导入Jackson框架的注解用于在序列化和反序列化日期类型数据时按照指定的格式进行处理保证日期数据在传输和存储过程中的格式一致性
// 例如在将对象转换为JSON格式传输序列化或者从JSON数据还原为对象反序列化日期属性能够按照设定的格式如指定的时区、日期时间格式等进行正确处理避免出现日期格式错乱的问题。
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化方便在网络传输、持久化存储等场景中使用该类的实例对象
// 比如在分布式系统中,需要将该视图类的对象通过网络发送给其他服务进行处理,或者将对象保存到文件、数据库等存储介质中时,序列化和反序列化机制就能正常工作。
import java.io.Serializable;
// 导入Java中的日期类用于处理可能涉及到的日期相关属性虽然在当前代码片段中未明确看到使用场景但作为通用的日期处理类引入
// 以备后续在业务逻辑扩展或者其他相关功能开发中,如果需要记录与房间评论/投诉相关的时间信息(如评论时间、投诉处理时间等)时可以直接使用该类来表示日期数据。
import java.util.Date;
/**
* /
*
* 使
* FangjianLiuyanEntity/访gettersetter便
*
*/
@TableName("fangjian_liuyan")
public class FangjianLiuyanView extends FangjianLiuyanEntity implements Serializable {
private static final long serialVersionUID = 1L;
//级联表 fangjian
/**
*
*/
private String fangjianName;
/**
*
*/
private String fangjianPhoto;
/**
*
*/
private String fangjianTese;
/**
*
*/
private String fangjianPeizhi;
/**
*
*/
private String fangjianShangpin;
/**
*
*/
private String fangjianFuwu;
/**
*
*/
private Double fangjianMoney;
/**
*
*/
private Integer fangjianTypes;
/**
*
*/
private String fangjianValue;
/**
*
*/
private Integer fangjianNumber;
/**
*
*/
private Integer fangjianClicknum;
/**
*
*/
private String fangjianContent;
//级联表 yonghu
/**
*
*/
private String yonghuName;
/**
*
*/
private String yonghuPhoto;
/**
*
*/
private String yonghuPhone;
/**
*
*/
private String yonghuEmail;
/**
*
*/
private Double newMoney;
/**
*
*/
private Integer yonghuDelete;
// 定义一个序列化版本号用于在序列化和反序列化过程中保证版本的兼容性当类的结构发生变化时如添加、删除字段等可以通过修改这个版本号来避免反序列化出错初始值设为1L在类相对稳定的情况下一般不需要改动
// 它类似于一个标识,在对象进行序列化存储后,如果类的结构发生了改变(比如添加了新属性、修改了属性类型等),反序列化时会根据这个版本号来判断是否能够正确还原对象,若版本号不匹配可能会导致反序列化失败,通过手动修改它可以尝试进行兼容处理。
private static final long serialVersionUID = 1L;
// 以下是级联表 fangjian 相关的属性定义,用于存储房间的各种详细信息,方便在展示房间评论/投诉信息时,同时向前端提供对应的房间具体情况,增强信息的完整性和展示效果
// 房间名称
// 用于存储房间的具体名称,方便用户更直观地识别和区分不同的房间,例如“标准间”“豪华套房”等,在前端展示评论/投诉信息时可一并展示房间名称,让用户清楚是针对哪个房间的反馈
// 这样用户在查看评论或投诉内容时,能快速了解所涉及的具体房间,有助于更好地理解反馈的针对性和关联性。
private String fangjianName;
// 房间图片
// 用于存储房间相关图片的路径或者图片的标识信息(具体取决于业务中图片存储和引用的方式),以便在前端展示房间外观、内部布置等图片信息,结合评论/投诉内容能让用户更全面了解房间情况
// 例如,若评论提到房间的装修风格,同时展示房间的图片可以让用户更直观地感受装修的实际效果,增强对评论/投诉内容的理解。
private String fangjianPhoto;
// 房间特色
// 用于描述房间具有的独特特点,比如“海景房”的海景特色、“主题房”的主题特色等,在展示评论/投诉时展示房间特色有助于用户更好地理解反馈背景
// 比如用户投诉房间的海景视野不好,知道这是海景房这个特色后,就能更清楚问题所在以及影响的程度等情况。
private String fangjianTese;
// 房间配置
// 用于列举房间内配备的各种设施设备等信息,像“有电视、空调、独立卫生间”等,使前端能展示房间的硬件配置情况,辅助用户了解评论/投诉所涉及的房间设施相关内容
// 如果评论提到房间内某个设施出现故障等问题,通过展示房间配置信息,用户能明确知道是哪种设施出了状况,便于后续的处理和理解。
private String fangjianPeizhi;
// 提供的商品
// 用于说明房间为住客额外提供的商品信息,例如“提供免费的矿泉水、洗漱用品”等,在展示评论/投诉信息时告知用户房间原本提供的商品情况,便于更好地理解反馈内容
// 例如用户投诉没有提供应有的免费矿泉水,通过展示提供的商品信息就能直观判断是否确实存在该问题。
private String fangjianShangpin;
// 提供的服务
// 用于介绍房间配套提供的服务项目,比如“包含早餐服务”“提供免费的客房清洁服务”等,让前端能展示房间配套的服务内容,帮助用户从服务角度理解评论/投诉相关情况
// 比如用户投诉客房清洁服务不及时,知道房间有该项服务后,就能更准确地评估问题的合理性以及影响程度等。
private String fangjianFuwu;
// 价格(天)
// 用于存储房间每天的出租价格,方便用户了解住宿该房间的费用情况,在展示评论/投诉时展示价格信息可让用户从性价比等角度综合考虑相关反馈
// 例如用户评论房间价格过高,通过展示价格信息,其他用户可以结合房间配置、服务等情况来判断这个价格是否确实不合理,从更全面的角度看待评论内容。
private Double fangjianMoney;
// 房间类型
// 用于区分不同种类的房间可能通过数字或其他编码方式对应不同的房型分类例如1表示单人间2表示双人间等便于前端进行房间分类展示以及用户根据房型对评论/投诉进行分类查看和理解
// 不同房型的特点和用户期望可能不同,这样分类展示能让用户更方便地筛选和查看与自己关注的房型相关的评论/投诉内容,提高信息查找的效率。
private Integer fangjianTypes;
// 房间类型的值
// 可能用于存储房间类型对应的更具体的描述性值(比如房间类型代码对应的具体文字描述等),方便在前端更友好地展示房间类型相关信息,辅助用户理解评论/投诉涉及的房间类型情况
// 例如对于一些复杂的房型分类,仅用数字或代码表示不够直观,通过这个具体描述性值(如“豪华海景双人房”等)能让用户更清晰地知晓房型情况,更好地理解相关评论/投诉。
private String fangjianValue;
// 房间剩余数量
// 用于记录当前房间还可预订的剩余数量,实时反映房间的预订余量情况,在展示评论/投诉时展示剩余数量可让用户了解房间的热门程度等相关背景信息
// 如果一个房间剩余数量很少但评论较多,可能说明该房间比较热门,用户可以从这个角度进一步思考评论内容的参考价值等。
private Integer fangjianNumber;
// 点击次数
// 用于统计房间信息被查看的次数,可用于分析房间的受欢迎程度等,在展示评论/投诉时展示点击次数能让用户知晓房间的关注度情况,辅助理解反馈的重要性等
// 一般来说,点击次数高的房间关注度高,其评论/投诉可能更受关注,用户可以根据这个关注度情况来判断评论/投诉内容的影响力和参考价值。
private Integer fangjianClicknum;
// 房间详情
// 用于存储更详细的关于房间的描述信息,可能包含房间的布局、面积大小、装修风格等更全面的介绍内容,在前端展示评论/投诉时一并展示详细内容能让用户更深入了解房间情况及反馈背景
// 例如用户投诉房间空间小,通过查看房间详情里的面积大小等信息,能更准确地判断这个投诉是否合理,帮助用户更全面地理解评论/投诉的具体情况。
private String fangjianContent;
// 以下是级联表 yonghu 相关的属性定义,用于存储发表评论/投诉的用户的各种详细信息,方便在展示房间评论/投诉信息时,同时向前端提供对应的用户具体情况,增强信息的完整性和展示效果
// 用户姓名
// 用于存储发表评论/投诉的用户的姓名,方便在前端展示评论/投诉信息时明确反馈者身份,增强信息的可读性和关联性
// 知道是谁发表的评论/投诉,能让其他用户更直观地判断反馈的可信度以及可能的针对性等情况,使信息展示更人性化。
private String yonghuName;
// 头像
// 用于存储用户的头像相关信息(比如头像图片的路径或者标识等),以便在前端展示用户头像,使展示的评论/投诉信息更具个性化和直观性
// 展示头像可以让用户界面更生动,同时也有助于用户快速识别不同的反馈者,增强信息展示的辨识度。
private String yonghuPhoto;
// 手机号
// 用于存储用户的手机号码,可能在某些业务场景下(如需要联系用户核实评论/投诉内容等)会用到该信息,同时在前端展示也能增加用户信息的完整性
// 虽然一般不会直接在前端完全展示手机号,但在特定情况下(如管理员有相应权限查看并联系用户),手机号信息的存在能确保业务流程的连贯性,方便进行相关操作。
private String yonghuPhone;
// 电子邮箱
// 用于存储用户的电子邮箱地址,同样在一些业务相关操作(如发送反馈处理结果等)或者增强前端展示信息完整性方面有作用
// 比如后台处理完评论/投诉后,可以通过电子邮箱向用户发送处理结果通知,完善了整个业务的信息交互环节。
private String yonghuEmail;
// 余额
// 用于存储用户账户的余额信息,虽然在房间评论/投诉场景下可能关联性不是特别紧密,但作为用户的整体信息一部分,在一些综合业务展示场景下可能会涉及到
// 例如在展示用户的综合账户情况或者涉及到一些与消费、优惠等相关联且和余额有关的业务拓展场景下,余额信息可能会一同展示出来。
private Double newMoney;
// 假删
// 可能用于表示用户是否被标记为假删除状态(具体含义需结合业务逻辑确定),在前端展示用户相关信息时可体现该状态情况
// 比如在一些数据管理场景下,用户可能只是被标记为假删除(并非真正从系统中删除),在前端展示相关信息时显示这个状态可以让管理员等清楚用户数据的实际处理情况。
private Integer yonghuDelete;
// 默认构造函数用于创建FangjianLiuyanView类的实例对象在一些情况下比如通过反射等方式创建对象时可能会用到
// 当使用某些框架或机制需要创建该类的对象,但又没有明确的参数传入时,就会调用这个默认构造函数来创建一个默认初始化的对象实例。
public FangjianLiuyanView() {
}
// 构造函数接收一个FangjianLiuyanEntity对象作为参数用于将传入的实体类对象的属性值复制到当前视图类对象中通过BeanUtils工具类来实现属性复制方便基于已有的实体数据构建视图对象
// 这种方式可以复用已有的实体类数据,快速构建出符合前端展示需求的视图对象,避免重复设置各个属性值,提高了代码的复用性和开发效率。
public FangjianLiuyanView(FangjianLiuyanEntity fangjianLiuyanEntity) {
try {
// 使用BeanUtils的copyProperties方法将fangjianLiuyanEntity对象的属性值复制到当前对象this实现属性的赋值操作但该方法可能会抛出IllegalAccessException访问权限异常和InvocationTargetException方法调用异常所以需要进行异常捕获处理
// 因为在复制属性过程中,可能存在源对象的某些属性没有对应的访问权限(如私有属性且没有提供合适的访问方法等情况),或者在调用属性的 setter 方法时出现异常(比如 setter 方法内部逻辑错误等),都可能导致这两个异常被抛出。
BeanUtils.copyProperties(this, fangjianLiuyanEntity);
} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block
// 如果在属性复制过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,确定是哪里出现了访问权限问题或者方法调用出错等情况
// 通过查看堆栈信息,可以追溯到具体是哪个属性的复制出现了问题,有助于快速定位和修复代码中的错误。
e.printStackTrace();
}
}
// 以下是级联表 fangjian 相关属性的访问器getter和修改器setter方法定义遵循JavaBean规范方便外部代码获取和设置这些属性的值用于数据的传递和操作
// 获取: 房间名称
// 定义了获取房间名称fangjianName属性值的方法外部代码可以通过调用这个方法获取该对象对应的房间名称信息便于在前端展示房间评论/投诉信息时展示对应的房间名称
// 例如在前端页面的评论/投诉详情展示模块中,通过调用这个方法获取房间名称并展示在相应位置,让用户清楚反馈对应的具体房间。
public String getFangjianName() {
return fangjianName;
}
// 设置: 房间名称
// 定义了设置房间名称fangjianName属性值的方法外部代码可以通过调用这个方法为该对象设置房间的名称例如在从数据库查询数据构建视图对象后根据实际情况更新房间名称等场景下使用
// 比如数据库中房间名称有更新,通过调用这个方法可以将新的房间名称设置到视图对象中,确保前端展示的信息是最新的。
public void setFangjianName(String fangjianName) {
this.fangjianName = fangjianName;
}
// 获取: 房间图片
// 定义了获取房间图片fangjianPhoto属性值的方法外部代码可以通过调用这个方法获取该对象关联的房间图片相关信息用于在前端展示房间评论/投诉时展示相应的房间图片内容
// 在前端页面渲染评论/投诉信息时,可以调用这个方法获取图片信息并展示出来,让用户更直观地看到房间的样子,辅助理解评论/投诉内容。
public String getFangjianPhoto() {
return fangjianPhoto;
}
// 设置: 房间图片
// 定义了设置房间图片fangjianPhoto属性值的方法外部代码可以通过调用这个方法为该对象设置房间图片的相关信息比如在更新房间图片信息或者根据不同业务场景设置图片路径等情况时使用
// 例如房间重新上传了新的宣传图片,通过调用这个方法可以更新视图对象中的图片信息,使前端展示的图片是最新的。
public void setFangjianPhoto(String fangjianPhoto) {
this.fangjianPhoto = fangjianPhoto;
}
// 获取: 房间特色
// 这是按照JavaBean规范定义的访问器getter方法用于获取房间特色fangjianTese属性的值。
// 外部代码(例如在构建前端页面展示房间评论/投诉相关信息的业务逻辑中,或者处理数据展示交互的代码等)可以调用这个方法,获取当前对象所代表房间具备的特色信息,然后将其展示给用户,帮助用户更好地理解该房间在评论/投诉中所涉及的相关背景情况,比如房间具有的独特卖点或者与众不同之处等内容。
public String getFangjianTese() {
return fangjianTese;
}
// 设置: 房间特色
// 定义了设置房间特色fangjianTese属性值的方法遵循JavaBean规范中的属性修改器setter方法定义。
// 外部代码在需要对房间特色的描述内容进行更新时(比如酒店对房间进行了新的装修,增添了新的特色元素,需要完善房间信息;或者根据业务运营需求,对房间特色介绍文案进行调整修改等情况),可以调用这个方法,传入相应的字符串内容作为新的房间特色描述,以此来改变该属性的值,确保在前端展示给用户的房间特色信息是准确且符合实际情况的。
public void setFangjianTese(String fangjianTese) {
this.fangjianTese = fangjianTese;
}
// 获取: 房间配置
// 按照JavaBean的属性访问器规范定义的方法用于获取房间配置fangjianPeizhi属性的值。
// 外部代码(像是在前端展示房间评论/投诉信息时,需要呈现房间内部配备的设施设备等具体情况的相关代码逻辑中)可以调用此方法,获取到当前对象记录的房间内的硬件配置信息,例如房间里有哪些电器、家具等设施配备情况,方便在前端页面展示给用户,辅助用户更清晰地理解评论/投诉中涉及到的关于房间设施方面的相关内容,比如用户投诉某个设施不好用,通过查看配置信息能更明确具体是哪项设施的问题。
public String getFangjianPeizhi() {
return fangjianPeizhi;
}
// 设置: 房间配置
// 这是遵循JavaBean规范定义的用于设置房间配置fangjianPeizhi属性值的方法属于属性修改器setter方法。
// 外部代码在出现诸如房间设施配备发生变化(比如新添加了某种设施设备,或者原有的设施被更换等更新房间设施配备情况),或者根据实际的业务场景需要对已记录的配置信息文本进行修改(比如纠正之前配置信息录入的错误等)时,可以调用这个方法,传入新的描述房间配置的字符串内容,来更新该属性的值,保证前端展示的房间配置信息与实际情况相符。
public void setFangjianPeizhi(String fangjianPeizhi) {
this.fangjianPeizhi = fangjianPeizhi;
}
// 获取: 提供的商品
// 依据JavaBean规范定义的访问器getter方法用于获取提供的商品fangjianShangpin属性的值。
// 外部代码(例如在前端展示房间评论/投诉详情页面,需要告知用户该房间原本为住客提供哪些商品的相关业务逻辑代码中)可以调用这个方法,获取当前对象注明的房间提供的商品信息,像房间是否提供免费的矿泉水、洗漱用品等内容,便于在前端展示给用户知晓,从而帮助用户更好地理解评论/投诉中涉及到的与房间提供商品相关的情况,比如用户投诉没收到应有的商品,通过查看提供的商品信息就能判断是否合理。
public String getFangjianShangpin() {
return fangjianShangpin;
}
// 设置: 提供的商品
// 定义了设置提供的商品fangjianShangpin属性值的方法遵循JavaBean规范里的属性修改器setter规则。
// 外部代码在有新增商品种类、修改已提供商品的相关描述(比如商品品牌更换等情况)等业务场景下,需要更新房间提供商品的相关描述内容时,可以调用这个方法,传入对应的字符串内容,以此来更新该属性的值,确保前端展示的房间提供商品信息是最新且准确的。
public void setFangjianShangpin(String fangjianShangpin) {
this.fangjianShangpin = fangjianShangpin;
}
// 获取: 提供的服务
// 按照JavaBean规范定义的访问器getter方法用于获取提供的服务fangjianFuwu属性的值。
// 外部代码(在前端展示房间评论/投诉信息时,为了让用户从服务角度更好地理解相关反馈情况,需要获取房间配套提供的服务项目信息的相关代码逻辑中)可以调用这个方法,获取当前对象列出的房间提供的服务信息,例如房间是否包含早餐服务、有没有免费的客房清洁服务等内容,方便在前端展示给用户,辅助用户从服务方面去理解评论/投诉所涉及的相关情况,比如用户投诉服务不到位,通过查看提供的服务信息能更清楚具体是哪项服务出现了问题。
public String getFangjianFuwu() {
return fangjianFuwu;
}
// 设置: 提供的服务
// 这是遵循JavaBean规范定义的用于设置提供的服务fangjianFuwu属性值的方法属于属性修改器setter方法。
// 外部代码在业务运营过程中,当对房间配套的服务项目进行调整(比如新增了某项服务,或者取消了原有的某项服务等情况),或者根据业务需求修改服务介绍的相关文本(比如对服务内容描述进行优化等)时,可以调用这个方法,传入新的描述房间提供服务的字符串内容,来更新该属性的值,保证前端展示的房间提供服务信息与实际情况一致。
public void setFangjianFuwu(String fangjianFuwu) {
this.fangjianFuwu = fangjianFuwu;
}
// 获取: 价格(天)
// 按照JavaBean规范定义的访问器getter方法用于获取价格fangjianMoney属性的值该价格指的是房间每天的出租价格。
// 外部代码(比如在前端展示房间评论/投诉信息时,为了让用户从性价比等角度综合考虑相关反馈,需要获取房间价格信息的相关业务逻辑代码中)可以调用这个方法,获取当前对象对应的房间每天的出租价格信息,方便在前端展示给用户查看,使得用户能够结合价格情况以及房间的其他配置、服务等信息,来全面评估评论/投诉内容中关于价格方面的合理性等情况,比如用户评价价格过高,通过展示价格信息,其他用户可以对比判断是否确实如此。
public Double getFangjianMoney() {
return fangjianMoney;
}
// 设置: 价格(天)
// 定义了设置价格fangjianMoney属性值的方法遵循JavaBean规范里的属性修改器setter规则用于设置房间每天的出租价格。
// 外部代码在诸如酒店进行价格调整(根据市场行情、淡旺季等因素改变房间价格),或者根据不同的业务场景(比如针对特定客户群体设置优惠价格等情况)设定价格时,可以调用这个方法,传入相应的价格数值,以此来更新该属性的值,确保前端展示的房间价格信息是准确且符合实际业务设定的。
public void setFangjianMoney(Double fangjianMoney) {
this.fangjianMoney = fangjianMoney;
}
// 获取: 房间类型
// 依据JavaBean规范定义的访问器getter方法用于获取房间类型fangjianTypes属性的值这里的房间类型通常是通过特定的标识如数字、代码等方式来区分不同种类的房间。
// 外部代码(在前端展示房间评论/投诉信息时,为了便于进行房间分类展示,以及方便用户根据房型对评论/投诉进行分类查看和理解的相关业务逻辑代码中可以调用这个方法获取当前对象表示的房间类型信息例如用1表示单人间2表示双人间等便于前端根据不同的房型分类展示对应的评论/投诉内容,使用户能够更高效地查找和查看自己关注的房型相关的反馈信息。
public Integer getFangjianTypes() {
return fangjianTypes;
}
// 设置: 房间类型
// 这是遵循JavaBean规范定义的用于设置房间类型fangjianTypes属性值的方法属于属性修改器setter方法用于设置房间的类型标识。
// 外部代码在诸如酒店新增了一种房型,需要对其设定相应的类型标识,或者根据业务运营需要对已有的房间分类进行修改(比如重新调整房型分类标准等情况)时,可以调用这个方法,传入对应的房间类型标识数值,来更新该属性的值,保证前端展示的房间类型信息与实际的房型分类情况相符。
public void setFangjianTypes(Integer fangjianTypes) {
this.fangjianTypes = fangjianTypes;
}
// 获取: 房间类型的值
// 按照JavaBean规范定义的访问器getter方法用于获取房间类型的值fangjianValue属性的值该属性存储的是房间类型对应的更具体的描述性值比如房间类型代码对应的具体文字描述等内容
// 外部代码(在前端展示房间评论/投诉信息时,为了更友好、直观地展示房间类型相关信息,辅助用户更好地理解评论/投诉涉及的房间类型情况的相关业务逻辑代码中可以调用这个方法获取当前对象存储的房间类型对应的具体描述性值例如对于“2”这个房间类型标识对应的具体描述性值可能是“豪华海景双人房”这样能让用户更清晰地知晓房型情况更准确地理解相关评论/投诉内容。
public String getFangjianValue() {
return fangjianValue;
}
//级联表的get和set fangjian
/**
*
*/
public String getFangjianName() {
return fangjianName;
}
/**
*
*/
public void setFangjianName(String fangjianName) {
this.fangjianName = fangjianName;
}
/**
*
*/
public String getFangjianPhoto() {
return fangjianPhoto;
}
/**
*
*/
public void setFangjianPhoto(String fangjianPhoto) {
this.fangjianPhoto = fangjianPhoto;
}
/**
*
*/
public String getFangjianTese() {
return fangjianTese;
}
/**
*
*/
public void setFangjianTese(String fangjianTese) {
this.fangjianTese = fangjianTese;
}
/**
*
*/
public String getFangjianPeizhi() {
return fangjianPeizhi;
}
/**
*
*/
public void setFangjianPeizhi(String fangjianPeizhi) {
this.fangjianPeizhi = fangjianPeizhi;
}
/**
*
*/
public String getFangjianShangpin() {
return fangjianShangpin;
}
/**
*
*/
public void setFangjianShangpin(String fangjianShangpin) {
this.fangjianShangpin = fangjianShangpin;
}
/**
*
*/
public String getFangjianFuwu() {
return fangjianFuwu;
}
/**
*
*/
public void setFangjianFuwu(String fangjianFuwu) {
this.fangjianFuwu = fangjianFuwu;
}
/**
*
*/
public Double getFangjianMoney() {
return fangjianMoney;
}
/**
*
*/
public void setFangjianMoney(Double fangjianMoney) {
this.fangjianMoney = fangjianMoney;
}
/**
*
*/
public Integer getFangjianTypes() {
return fangjianTypes;
}
/**
*
*/
public void setFangjianTypes(Integer fangjianTypes) {
this.fangjianTypes = fangjianTypes;
}
/**
*
*/
public String getFangjianValue() {
return fangjianValue;
}
/**
*
*/
public void setFangjianValue(String fangjianValue) {
this.fangjianValue = fangjianValue;
}
/**
*
*/
public Integer getFangjianNumber() {
return fangjianNumber;
}
/**
*
*/
public void setFangjianNumber(Integer fangjianNumber) {
this.fangjianNumber = fangjianNumber;
}
/**
*
*/
public Integer getFangjianClicknum() {
return fangjianClicknum;
}
/**
*
*/
public void setFangjianClicknum(Integer fangjianClicknum) {
this.fangjianClicknum = fangjianClicknum;
}
/**
*
*/
public String getFangjianContent() {
return fangjianContent;
}
/**
*
*/
public void setFangjianContent(String fangjianContent) {
this.fangjianContent = fangjianContent;
}
//级联表的get和set yonghu
/**
*
*/
public String getYonghuName() {
return yonghuName;
}
/**
*
*/
public void setYonghuName(String yonghuName) {
this.yonghuName = yonghuName;
}
/**
*
*/
public String getYonghuPhoto() {
return yonghuPhoto;
}
/**
*
*/
public void setYonghuPhoto(String yonghuPhoto) {
this.yonghuPhoto = yonghuPhoto;
}
/**
*
*/
public String getYonghuPhone() {
return yonghuPhone;
}
/**
*
*/
public void setYonghuPhone(String yonghuPhone) {
this.yonghuPhone = yonghuPhone;
}
/**
*
*/
public String getYonghuEmail() {
return yonghuEmail;
}
/**
*
*/
public void setYonghuEmail(String yonghuEmail) {
this.yonghuEmail = yonghuEmail;
}
/**
*
*/
public Double getNewMoney() {
return newMoney;
}
/**
*
*/
public void setNewMoney(Double newMoney) {
this.newMoney = newMoney;
}
/**
*
*/
public Integer getYonghuDelete() {
return yonghuDelete;
}
/**
*
*/
public void setYonghuDelete(Integer yonghuDelete) {
this.yonghuDelete = yonghuDelete;
}
// 设置: 房间类型的值
// 定义了设置房间类型的值fangjianValue属性值的方法遵循JavaBean规范里的属性修改器setter规则用于设置房间类型对应的具体描述性值。
// 外部代码在诸如更新房间类型对应的文字描述(比如对房型的命名进行优化、修改,使其更符合实际情况或者更通俗易懂等情况)时,可以调用这个方法,传入新的描述性字符串内容,以此来更新该属性的值,确保前端展示的房间类型具体描述信息是准确且易于用户理解的。
public void setFangjianValue(String fangjianValue) {
this.fangjianValue = fangjianValue;
}
// 获取: 房间剩余数量
// 依据JavaBean规范定义的访问器getter方法用于获取房间剩余数量fangjianNumber属性的值该属性记录的是当前房间还可预订的剩余数量。
// 外部代码(在前端展示房间评论/投诉信息时,为了展示房间的热门程度等相关背景信息,让用户了解房间的预订余量情况的相关业务逻辑代码中)可以调用这个方法,获取当前对象记录的房间可预订剩余数量信息,例如剩余数量少可能意味着房间比较热门,用户可以结合这个信息以及评论/投诉内容,从不同角度来综合考虑相关反馈的参考价值等情况。
public Integer getFangjianNumber() {
return fangjianNumber;
}
}
// 设置: 房间剩余数量
// 这是遵循JavaBean规范定义的用于设置房间剩余数量fangjianNumber属性值的方法属于属性修改器setter方法用于设置房间剩余可预订的数量。
// 外部代码在出现诸如有新预订、取消预订等操作后(这些操作会导致房间剩余可预订数量发生变化),需要更新相应数值,使前端展示的信息保持准确时,可以调用这个方法,传入新的剩余数量数值,来更新该属性的值,保证前端展示的房间剩余数量信息与实际可预订情况相符。
public void setFangjianNumber(Integer fangjianNumber) {
this.fangjianNumber = fangjianNumber;
}
// 获取: 点击次数
// 此方法是按照JavaBean规范定义的访问器getter方法用于获取房间的点击次数属性fangjianClicknum的值点击次数用于统计房间信息被查看的次数。
// 外部代码(比如展示房间相关信息的业务逻辑代码或者前端交互代码等,特别是在需要呈现房间受关注程度相关情况的场景下)可以调用这个方法,来获取当前对象所代表的房间被查看的次数信息,以便根据点击次数情况进行相应的展示(比如在前端页面展示房间的热门程度排序等)或业务处理(比如基于点击次数分析房间的受欢迎程度等)。
public Integer getFangjianClicknum() {
return fangjianClicknum;
}
// 设置: 点击次数
// 这是遵循JavaBean规范定义的修改器setter方法用于设置房间的点击次数属性fangjianClicknum的值。
// 外部代码在需要更新房间的点击次数信息时(例如每次有用户查看房间详情页面后,按照业务逻辑通常会对点击次数进行累加更新等情况),可以调用这个方法,传入相应的整数值(一般是在原有的点击次数基础上进行增加等操作)来改变该属性的值,确保点击次数数据能准确反映房间被查看的实际情况。
public void setFangjianClicknum(Integer fangjianClicknum) {
this.fangjianClicknum = fangjianClicknum;
}
// 获取: 房间详情
// 按照JavaBean的属性访问器规范定义的方法用于获取房间详情属性fangjianContent的值该属性存储的是关于房间更全面、详细的描述信息。
// 外部代码(在展示房间相关的评论/投诉信息时,为了同时向用户呈现房间的详细情况,帮助用户更好地理解评论/投诉的背景的相关业务逻辑代码中)可以调用这个方法,获取到像房间布局、面积大小、装修风格等更全面的介绍内容,使得用户在查看评论/投诉时能结合房间详情信息,更深入地了解具体情况,比如用户投诉房间空间小,通过查看房间详情里的面积大小等信息,就能更准确地判断这个投诉是否合理。
public String getFangjianContent() {
return fangjianContent;
}
// 设置: 房间详情
// 遵循JavaBean规范的属性修改器方法用于设置房间详情属性fangjianContent的值。
// 当需要更新房间的详细描述信息时(比如完善房间介绍、修改房间详情中的部分内容等业务场景,例如酒店重新装修后需要更新房间布局、风格等相关描述信息),外部代码可以调用这个方法,传入新的字符串内容来更新该属性的值,确保房间详情信息的准确性和及时性,使前端展示给用户的房间详情与实际情况一致。
public void setFangjianContent(String fangjianContent) {
this.fangjianContent = fangjianContent;
}
// 以下是级联表 yonghu 的相关get和set方法部分用于对与用户相关的各个属性进行访问和修改操作方便在处理房间评论/投诉相关业务时,获取和更新对应的用户信息。
// 获取: 用户姓名
// 按照JavaBean规范定义的访问器方法用于获取用户姓名属性yonghuName的值该属性存储的是发表评论/投诉的用户的姓名。
// 在展示房间评论/投诉信息时,通过调用这个方法可以获取发表该评论/投诉的用户的姓名,从而明确反馈者身份,增强信息展示的完整性和可读性,方便前端进行相应的展示处理,比如在前端页面评论/投诉详情区域展示用户姓名,让其他用户能清楚知道是谁发表的反馈内容,提高信息的可信度和关联性。
public String getYonghuName() {
return yonghuName;
}
// 设置: 用户姓名
// 遵循JavaBean规范的修改器方法用于设置用户姓名属性yonghuName的值。
// 例如在从数据库查询到用户信息并构建当前视图对象后,若发现用户姓名需要更新(如用户修改了昵称等情况),外部代码可以调用这个方法传入新的姓名值来更新该属性,确保前端展示的用户姓名信息是最新且准确的,符合用户实际情况。
public void setYonghuName(String yonghuName) {
this.yonghuName = yonghuName;
}
// 获取: 头像
// 这是用于获取用户头像属性yonghuPhoto值的访问器方法符合JavaBean规范该属性存储的是用户头像相关的信息比如头像图片的路径或者标识等内容
// 外部代码调用它可以获取到用户头像相关的信息,便于在前端展示评论/投诉信息时同时展示用户头像,使展示效果更具个性化和直观性,比如在前端页面评论/投诉展示区域旁边展示用户头像图片,让用户界面更生动形象,也有助于用户快速识别不同的反馈者,增强信息展示的辨识度。
public String getYonghuPhoto() {
return yonghuPhoto;
}
// 设置: 头像
// 按照JavaBean的属性修改器规范定义的方法用于设置用户头像属性yonghuPhoto的值。
// 当用户更新了头像信息(比如更换了头像图片)后,外部代码可以调用这个方法,传入新的头像相关信息(如更新后的图片路径等)来更新该属性的值,保证前端展示的头像信息是最新的,与用户实际的头像情况相符。
public void setYonghuPhoto(String yonghuPhoto) {
this.yonghuPhoto = yonghuPhoto;
}
// 获取: 手机号
// 这是按照JavaBean规范定义的访问器getter方法用于获取用户手机号属性yonghuPhone的值。
// 外部代码(比如在涉及到需要获取用户联系方式相关的业务逻辑中,像后台管理员在特定情况下需要联系用户核实评论/投诉内容,或者系统要向用户发送重要通知等场景下对应的代码部分)可以调用这个方法,获取到当前对象所关联用户的手机号码信息,以便进行后续相应的操作,不过出于隐私保护,通常不会随意将手机号展示给所有用户,只是在有对应权限和必要的业务场景下使用该信息。
public String getYonghuPhone() {
return yonghuPhone;
}
// 设置: 手机号
// 遵循JavaBean规范定义的用于设置用户手机号属性yonghuPhone值的修改器setter方法。
// 当用户的手机号码发生了变更(例如用户更换了新的手机号码,在前端进行相应手机号修改操作并提交到后端后),外部代码(如处理用户信息更新的业务逻辑代码)可以调用这个方法,传入新的手机号作为参数,来更新该属性的值,以此保证在系统中存储以及后续使用的用户手机号信息是准确无误的,与用户实际的联系方式保持一致。
public void setYonghuPhone(String yonghuPhone) {
this.yonghuPhone = yonghuPhone;
}
// 获取: 电子邮箱
// 按照JavaBean规范定义的访问器方法用于获取用户电子邮箱属性yonghuEmail的值。
// 外部代码(在业务流程中,像是后台业务逻辑里需要向用户发送反馈处理结果,或者要与用户进行一些关于评论/投诉相关的沟通、发送系统通知等通过邮件形式交互的业务场景对应的代码部分)调用该方法后,能够获取到当前对象所关联用户的电子邮箱地址,从而可以利用这个邮箱地址进行邮件的发送操作,同时也有助于完善前端展示的用户信息内容,尽管不一定直接展示邮箱地址给所有用户,但它作为用户信息的一部分能让整体信息更加完整。
public String getYonghuEmail() {
return yonghuEmail;
}
// 设置: 电子邮箱
// 遵循JavaBean规范的修改器方法用于设置用户电子邮箱属性yonghuEmail的值。
// 当用户更新了自己的电子邮箱地址(比如用户在个人信息设置页面修改了邮箱,相关操作请求传递到后端)后,外部代码(例如负责处理用户信息修改保存的业务逻辑代码)可以调用这个方法,传入新的邮箱地址作为参数,来更新该属性的值,确保在后续的各种业务操作(如发送邮件等)中使用的邮箱信息是最新且准确的,符合用户实际的邮箱设置情况。
public void setYonghuEmail(String yonghuEmail) {
this.yonghuEmail = yonghuEmail;
}
// 获取: 余额
// 这是用于获取用户余额属性newMoney值的访问器getter方法符合JavaBean规范。
// 外部代码(在一些综合业务展示页面(比如展示用户的综合账户信息详情时),或者涉及到用户资金相关的扩展业务场景(如判断用户是否满足某些优惠活动条件、分析用户消费能力等情况对应的业务逻辑代码)中)调用它可以获取到用户账户的余额信息,虽然在房间评论/投诉的主要业务场景下,余额信息关联性可能不是特别紧密,但在更全面的业务范畴内,该信息可能会起到一定的作用,有助于对用户进行更全面的了解和相关业务分析。
public Double getNewMoney() {
return newMoney;
}
// 设置: 余额
// 按照JavaBean的属性修改器规范定义的方法用于设置用户余额属性newMoney的值。
// 例如在用户进行了充值、消费等操作(比如用户通过线上支付渠道进行充值,或者在酒店内使用房间相关服务产生消费等情况发生后,对应的业务逻辑处理代码)导致余额发生变化后,外部代码可以调用这个方法,传入新的余额数值作为参数,来更新该属性的值,以此保证系统中记录的用户余额信息始终是准确的,能够真实反映用户账户的资金情况。
public void setNewMoney(Double newMoney) {
this.newMoney = newMoney;
}
// 获取: 假删
// 此为获取用户假删属性yonghuDelete值的访问器getter方法遵循JavaBean规范。
// 该属性可能用于表示用户是否被标记为假删除状态(具体含义需结合业务逻辑确定,比如可能是在数据管理过程中,为了保留用户数据但又暂时不让其在某些常规展示场景下出现等情况而设置的一种特殊状态标识),外部代码(比如在前端展示用户相关信息时,需要根据用户状态进行不同展示效果处理的业务逻辑代码)调用这个方法可以获取到这个状态信息,以便在前端展示用户相关信息时体现该状态情况,让管理员或者相关人员清楚了解用户数据的实际处理状态。
public Integer getYonghuDelete() {
return yonghuDelete;
}
// 设置: 假删
// 遵循JavaBean规范定义的用于设置用户假删属性yonghuDelete值的修改器setter方法。
// 当用户的假删状态发生变化比如从正常状态变为假删除状态可能是因为某些业务规则触发如用户长时间未活跃等情况需要将其标记为假删除或者反之从假删除状态恢复为正常状态例如用户重新激活账号等情况外部代码如负责处理用户状态变更的业务逻辑代码可以调用这个方法传入相应的整数值通常是代表不同状态的特定数值如0表示正常1表示假删除等具体看业务定义来更新该属性的值确保用户的假删状态在系统中能准确记录和体现。
public void setYonghuDelete(Integer yonghuDelete) {
this.yonghuDelete = yonghuDelete;
}
}

@ -1,394 +1,460 @@
package com.entity.view;
// 导入房间预约对应的实体类,后续可能基于该实体类进行属性继承、数据关联等操作,以构建适合后端返回给前端展示的视图实体类所需的数据内容
import com.entity.FangjianOrderEntity;
// 导入MyBatis Plus的注解用于指定该实体类对应的数据库表名方便在与数据库进行数据持久化操作如查询、插入、更新、删除等时进行表名的映射关联
import com.baomidou.mybatisplus.annotations.TableName;
// 导入Apache Commons BeanUtils工具类用于方便地进行Java对象之间属性的复制操作在构造函数中会使用它来将相关实体类的属性复制到当前视图类中
import org.apache.commons.beanutils.BeanUtils;
// 导入异常处理相关的类用于捕获在使用BeanUtils进行属性复制操作时可能抛出的异常保证程序的稳定性避免因异常导致程序崩溃
import java.lang.reflect.InvocationTargetException;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时进行格式转换的配置通常和其他日期处理注解配合使用
import org.springframework.format.annotation.DateTimeFormat;
// 导入Jackson框架的注解用于在序列化和反序列化日期类型数据时按照指定的格式进行处理保证日期数据在传输和存储过程中的格式一致性
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化方便在网络传输、持久化存储等场景中使用该类的实例对象
import java.io.Serializable;
// 导入Java中的日期类用于处理可能涉及到的日期相关属性虽然在当前代码片段中未明确看到使用场景但作为通用的日期处理类引入
import java.util.Date;
/**
*
*
* 使
* FangjianOrderEntity访gettersetter便
*/
@TableName("fangjian_order")
public class FangjianOrderView extends FangjianOrderEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
private String fangjianOrderValue;
//级联表 fangjian
/**
*
*/
private String fangjianName;
/**
*
*/
private String fangjianPhoto;
/**
*
*/
private String fangjianTese;
/**
*
*/
private String fangjianPeizhi;
/**
*
*/
private String fangjianShangpin;
/**
*
*/
private String fangjianFuwu;
/**
*
*/
private Double fangjianMoney;
/**
*
*/
private Integer fangjianTypes;
/**
*
*/
private String fangjianValue;
/**
*
*/
private Integer fangjianNumber;
/**
*
*/
private Integer fangjianClicknum;
/**
*
*/
private String fangjianContent;
//级联表 yonghu
/**
*
*/
private String yonghuName;
/**
*
*/
private String yonghuPhoto;
/**
*
*/
private String yonghuPhone;
/**
*
*/
private String yonghuEmail;
/**
*
*/
private Double newMoney;
/**
*
*/
private Integer yonghuDelete;
// 定义一个序列化版本号用于在序列化和反序列化过程中保证版本的兼容性当类的结构发生变化时如添加、删除字段等可以通过修改这个版本号来避免反序列化出错初始值设为1L在类相对稳定的情况下一般不需要改动
private static final long serialVersionUID = 1L;
/**
*
* 便
*/
private String fangjianOrderValue;
// 级联表 fangjian相关属性定义用于存储房间的各种详细信息方便在展示房间预约信息时同时向前端提供对应的房间具体情况增强信息的完整性和展示效果
/**
*
* 便
*/
private String fangjianName;
/**
*
* 便
*/
private String fangjianPhoto;
/**
*
*
*/
private String fangjianTese;
/**
*
* 使
*/
private String fangjianPeizhi;
/**
*
* 便
*/
private String fangjianShangpin;
/**
*
*
*/
private String fangjianFuwu;
/**
*
* 便宿
*/
private Double fangjianMoney;
/**
*
* 12便
*/
private Integer fangjianTypes;
/**
*
* 便
*/
private String fangjianValue;
/**
*
*
*/
private Integer fangjianNumber;
/**
*
*
*/
private Integer fangjianClicknum;
/**
*
*
*/
private String fangjianContent;
// 级联表 yonghu相关属性定义用于存储进行房间预约的用户的各种详细信息方便在展示房间预约信息时同时向前端提供对应的用户具体情况增强信息的完整性和展示效果
/**
*
* 便
*/
private String yonghuName;
/**
*
* 便使
*/
private String yonghuPhoto;
/**
*
*
*/
private String yonghuPhone;
/**
*
*
*/
private String yonghuEmail;
/**
*
*
*/
private Double newMoney;
/**
*
*
*/
private Integer yonghuDelete;
// 默认构造函数用于创建FangjianOrderView类的实例对象在一些情况下比如通过反射等方式创建对象时可能会用到
public FangjianOrderView() {
}
// 构造函数接收一个FangjianOrderEntity对象作为参数用于将传入的实体类对象的属性值复制到当前视图类对象中通过BeanUtils工具类来实现属性复制方便基于已有的实体数据构建视图对象
public FangjianOrderView(FangjianOrderEntity fangjianOrderEntity) {
try {
// 使用BeanUtils的copyProperties方法将fangjianOrderEntity对象的属性值复制到当前对象this实现属性的赋值操作但该方法可能会抛出IllegalAccessException访问权限异常和InvocationTargetException方法调用异常所以需要进行异常捕获处理
BeanUtils.copyProperties(this, fangjianOrderEntity);
} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block
// 如果在属性复制过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,确定是哪里出现了访问权限问题或者方法调用出错等情况
e.printStackTrace();
}
}
/**
*
* JavaBean访getterfangjianOrderValue
* 便
*/
public String getFangjianOrderValue() {
return fangjianOrderValue;
}
/**
*
* fangjianOrderValueJavaBeansetter
*
*/
public void setFangjianOrderValue(String fangjianOrderValue) {
this.fangjianOrderValue = fangjianOrderValue;
}
// 级联表的get和set fangjian
/**
*
* JavaBean访getterfangjianName
*
*/
public String getFangjianName() {
return fangjianName;
}
/**
*
* fangjianNameJavaBeansetter
*
*/
public void setFangjianName(String fangjianName) {
this.fangjianName = fangjianName;
}
/**
*
* JavaBean访getterfangjianPhoto
* 便使
*/
public String getFangjianPhoto() {
return fangjianPhoto;
}
/**
*
*/
public String getFangjianOrderValue() {
return fangjianOrderValue;
}
/**
*
*/
public void setFangjianOrderValue(String fangjianOrderValue) {
this.fangjianOrderValue = fangjianOrderValue;
}
//级联表的get和set fangjian
/**
*
*/
public String getFangjianName() {
return fangjianName;
}
/**
*
*/
public void setFangjianName(String fangjianName) {
this.fangjianName = fangjianName;
}
/**
*
*/
public String getFangjianPhoto() {
return fangjianPhoto;
}
/**
*
*/
public void setFangjianPhoto(String fangjianPhoto) {
this.fangjianPhoto = fangjianPhoto;
}
/**
*
*/
public String getFangjianTese() {
return fangjianTese;
}
/**
*
*/
public void setFangjianTese(String fangjianTese) {
this.fangjianTese = fangjianTese;
}
/**
*
*/
public String getFangjianPeizhi() {
return fangjianPeizhi;
}
/**
*
*/
public void setFangjianPeizhi(String fangjianPeizhi) {
this.fangjianPeizhi = fangjianPeizhi;
}
/**
*
*/
public String getFangjianShangpin() {
return fangjianShangpin;
}
/**
*
*/
public void setFangjianShangpin(String fangjianShangpin) {
this.fangjianShangpin = fangjianShangpin;
}
/**
*
*/
public String getFangjianFuwu() {
return fangjianFuwu;
}
/**
*
*/
public void setFangjianFuwu(String fangjianFuwu) {
this.fangjianFuwu = fangjianFuwu;
}
/**
*
*/
public Double getFangjianMoney() {
return fangjianMoney;
}
/**
*
*/
public void setFangjianMoney(Double fangjianMoney) {
this.fangjianMoney = fangjianMoney;
}
/**
*
*/
public Integer getFangjianTypes() {
return fangjianTypes;
}
/**
*
*/
public void setFangjianTypes(Integer fangjianTypes) {
this.fangjianTypes = fangjianTypes;
}
/**
*
*/
public String getFangjianValue() {
return fangjianValue;
}
/**
*
*/
public void setFangjianValue(String fangjianValue) {
this.fangjianValue = fangjianValue;
}
/**
*
*/
public Integer getFangjianNumber() {
return fangjianNumber;
}
/**
*
*/
public void setFangjianNumber(Integer fangjianNumber) {
this.fangjianNumber = fangjianNumber;
}
/**
*
*/
public Integer getFangjianClicknum() {
return fangjianClicknum;
}
/**
*
*/
public void setFangjianClicknum(Integer fangjianClicknum) {
this.fangjianClicknum = fangjianClicknum;
}
/**
*
*/
public String getFangjianContent() {
return fangjianContent;
}
/**
*
*/
public void setFangjianContent(String fangjianContent) {
this.fangjianContent = fangjianContent;
}
//级联表的get和set yonghu
/**
*
*/
public String getYonghuName() {
return yonghuName;
}
/**
*
*/
public void setYonghuName(String yonghuName) {
this.yonghuName = yonghuName;
}
/**
*
*/
public String getYonghuPhoto() {
return yonghuPhoto;
}
/**
*
*/
public void setYonghuPhoto(String yonghuPhoto) {
this.yonghuPhoto = yonghuPhoto;
}
/**
*
*/
public String getYonghuPhone() {
return yonghuPhone;
}
/**
*
*/
public void setYonghuPhone(String yonghuPhone) {
this.yonghuPhone = yonghuPhone;
}
/**
*
*/
public String getYonghuEmail() {
return yonghuEmail;
}
/**
*
*/
public void setYonghuEmail(String yonghuEmail) {
this.yonghuEmail = yonghuEmail;
}
/**
*
*/
public Double getNewMoney() {
return newMoney;
}
/**
*
*/
public void setNewMoney(Double newMoney) {
this.newMoney = newMoney;
}
/**
*
*/
public Integer getYonghuDelete() {
return yonghuDelete;
}
/**
*
*/
public void setYonghuDelete(Integer yonghuDelete) {
this.yonghuDelete = yonghuDelete;
}
/**
*
* JavaBeanfangjianPhotosetter
*
*/
public void setFangjianPhoto(String fangjianPhoto) {
this.fangjianPhoto = fangjianPhoto;
}
/**
*
* JavaBean访getterfangjianTese
* 便
*/
public String getFangjianTese() {
return fangjianTese;
}
/**
*
* fangjianTeseJavaBeansetter
*
*/
public void setFangjianTese(String fangjianTese) {
this.fangjianTese = fangjianTese;
}
/**
*
* JavaBean访fangjianPeizhi
* 便
*/
public String getFangjianPeizhi() {
return fangjianPeizhi;
}
/**
*
* JavaBeanfangjianPeizhisetter
*
*/
public void setFangjianPeizhi(String fangjianPeizhi) {
this.fangjianPeizhi = fangjianPeizhi;
}
/**
*
* JavaBean访getterfangjianShangpin
* 便
*/
public String getFangjianShangpin() {
return fangjianShangpin;
}
// 设置: 提供的商品
// 这是遵循JavaBean规范定义的用于设置提供的商品fangjianShangpin属性值的方法属于属性修改器setter方法。
// 外部代码在有新增商品种类、修改已提供商品的相关描述(比如商品品牌更换等情况)等业务场景下,需要更新房间提供商品的相关描述内容时,可以调用这个方法,传入对应的字符串内容作为新的商品描述信息,以此来更新该属性的值,确保前端展示的房间提供商品信息是最新且准确的。
public void setFangjianShangpin(String fangjianShangpin) {
this.fangjianShangpin = fangjianShangpin;
}
// 获取: 提供的服务
// 按照JavaBean规范定义的访问器getter方法用于获取提供的服务fangjianFuwu属性的值。
// 外部代码(在前端展示房间预约信息时,为了让用户从服务角度更好地理解相关预约情况,需要获取房间配套提供的服务项目信息的相关业务逻辑代码中)可以调用这个方法,获取当前对象列出的房间提供的服务信息,例如房间是否包含早餐服务、有没有免费的客房清洁服务等内容,方便在前端展示给用户,辅助用户从服务方面去理解房间预约所涉及的相关情况,比如是否满足自己对服务的期望等。
public String getFangjianFuwu() {
return fangjianFuwu;
}
// 设置: 提供的服务
// 定义了设置提供的服务fangjianFuwu属性值的方法遵循JavaBean规范里的属性修改器setter规则。
// 外部代码在业务运营过程中,当对房间配套的服务项目进行调整(比如新增了某项服务,或者取消了原有的某项服务等情况),或者根据业务需求修改服务介绍的相关文本(比如对服务内容描述进行优化等)时,可以调用这个方法,传入新的描述房间提供服务的字符串内容,来更新该属性的值,保证前端展示的房间提供服务信息与实际情况一致。
public void setFangjianFuwu(String fangjianFuwu) {
this.fangjianFuwu = fangjianFuwu;
}
// 获取: 价格(天)
// 按照JavaBean规范定义的访问器getter方法用于获取价格fangjianMoney属性的值该价格指的是房间每天的出租价格。
// 外部代码(比如在前端展示房间预约信息时,为了让用户从性价比等角度综合考虑相关预约情况,需要获取房间价格信息的相关业务逻辑代码中)可以调用这个方法,获取当前对象对应的房间每天的出租价格信息,方便在前端展示给用户查看,使得用户能够结合价格情况以及房间的其他配置、服务等信息,来全面评估预约该房间是否合适,比如判断价格是否符合自己的预算等。
public Double getFangjianMoney() {
return fangjianMoney;
}
// 设置: 价格(天)
// 定义了设置价格fangjianMoney属性值的方法遵循JavaBean规范里的属性修改器setter规则用于设置房间每天的出租价格。
// 外部代码在诸如酒店进行价格调整(根据市场行情、淡旺季等因素改变房间价格),或者根据不同的业务场景(比如针对特定客户群体设置优惠价格等情况)设定价格时,可以调用这个方法,传入相应的价格数值,以此来更新该属性的值,确保前端展示的房间价格信息是准确且符合实际业务设定的。
public void setFangjianMoney(Double fangjianMoney) {
this.fangjianMoney = fangjianMoney;
}
// 获取: 房间类型
// 依据JavaBean规范定义的访问器getter方法用于获取房间类型fangjianTypes属性的值这里的房间类型通常是通过特定的标识如数字、代码等方式来区分不同种类的房间。
// 外部代码在前端展示房间预约信息时为了便于进行房间分类展示以及方便用户根据房型对预约进行分类查看和理解的相关业务逻辑代码中可以调用这个方法获取当前对象表示的房间类型信息例如用1表示单人间2表示双人间等便于前端根据不同的房型分类展示对应的预约内容使用户能够更高效地查找和查看自己关注的房型相关的预约信息。
public Integer getFangjianTypes() {
return fangjianTypes;
}
// 设置: 房间类型
// 这是遵循JavaBean规范定义的用于设置房间类型fangjianTypes属性值的方法属于属性修改器setter方法用于设置房间的类型标识。
// 外部代码在诸如酒店新增了一种房型,需要对其设定相应的类型标识,或者根据业务运营需要对已有的房间分类进行修改(比如重新调整房型分类标准等情况)时,可以调用这个方法,传入对应的房间类型标识数值,来更新该属性的值,保证前端展示的房间类型信息与实际的房型分类情况相符。
public void setFangjianTypes(Integer fangjianTypes) {
this.fangjianTypes = fangjianTypes;
}
// 获取: 房间类型的值
// 按照JavaBean规范定义的访问器getter方法用于获取房间类型的值fangjianValue属性的值该属性存储的是房间类型对应的更具体的描述性值比如房间类型代码对应的具体文字描述等内容
// 外部代码在前端展示房间预约信息时为了更友好、直观地展示房间类型相关信息辅助用户更好地理解预约涉及的房间类型情况的相关业务逻辑代码中可以调用这个方法获取当前对象存储的房间类型对应的具体描述性值例如对于“2”这个房间类型标识对应的具体描述性值可能是“豪华海景双人房”这样能让用户更清晰地知晓房型情况更准确地理解相关预约内容。
public String getFangjianValue() {
return fangjianValue;
}
// 设置: 房间类型的值
// 定义了设置房间类型的值fangjianValue属性值的方法遵循JavaBean规范里的属性修改器setter规则用于设置房间类型对应的具体描述性值。
// 外部代码在诸如更新房间类型对应的文字描述(比如对房型的命名进行优化、修改,使其更符合实际情况或者更通俗易懂等情况)时,可以调用这个方法,传入新的描述性字符串内容,以此来更新该属性的值,确保前端展示的房间类型具体描述信息是准确且易于用户理解的。
public void setFangjianValue(String fangjianValue) {
this.fangjianValue = fangjianValue;
}
// 获取: 房间剩余数量
// 依据JavaBean规范定义的访问器getter方法用于获取房间剩余数量fangjianNumber属性的值该属性记录的是当前房间还可预订的剩余数量。
// 外部代码(在前端展示房间预约信息时,为了展示房间的热门程度等相关背景信息,让用户了解房间的预订余量情况的相关业务逻辑代码中)可以调用这个方法,获取当前对象记录的房间可预订剩余数量信息,例如剩余数量少可能意味着房间比较热门,用户可以结合这个信息以及其他房间相关情况,来综合考虑是否进行预约等情况。
public Integer getFangjianNumber() {
return fangjianNumber;
}
// 设置: 房间剩余数量
// 这是遵循JavaBean规范定义的用于设置房间剩余数量fangjianNumber属性值的方法属于属性修改器setter方法用于设置房间剩余可预订的数量。
// 外部代码在出现诸如有新预订、取消预订等操作后(这些操作会导致房间剩余可预订数量发生变化),需要更新相应数值,使前端展示的信息保持准确时,可以调用这个方法,传入新的剩余数量数值,来更新该属性的值,保证前端展示的房间剩余数量信息与实际可预订情况相符。
public void setFangjianNumber(Integer fangjianNumber) {
this.fangjianNumber = fangjianNumber;
}
// 获取: 点击次数
// 此方法是按照JavaBean规范定义的访问器getter方法用于获取房间的点击次数属性fangjianClicknum的值点击次数用于统计房间信息被查看的次数。
// 外部代码(比如展示房间相关信息的业务逻辑代码或者前端交互代码等,特别是在需要呈现房间受关注程度相关情况的场景下)可以调用这个方法,来获取当前对象所代表的房间被查看的次数信息,以便根据点击次数情况进行相应的展示(比如在前端页面展示房间的热门程度排序等)或业务处理(比如基于点击次数分析房间的受欢迎程度等),辅助用户了解该房间的关注度情况,进而考虑是否预约该房间。
public Integer getFangjianClicknum() {
return fangjianClicknum;
}
// 设置: 点击次数
// 这是遵循JavaBean规范定义的修改器setter方法用于设置房间的点击次数属性fangjianClicknum的值。
// 外部代码在需要更新房间的点击次数信息时(例如每次有用户查看房间详情页面后,按照业务逻辑通常会对点击次数进行累加更新等情况),可以调用这个方法,传入相应的整数值(一般是在原有的点击次数基础上进行增加等操作)来改变该属性的值,确保点击次数数据能准确反映房间被查看的实际情况。
public void setFangjianClicknum(Integer fangjianClicknum) {
this.fangjianClicknum = fangjianClicknum;
}
// 获取: 房间详情
// 按照JavaBean的属性访问器规范定义的方法用于获取房间详情属性fangjianContent的值该属性存储的是关于房间更全面、详细的描述信息。
// 外部代码(在展示房间相关的预约信息时,为了同时向用户呈现房间的详细情况,帮助用户更好地理解预约的背景的相关业务逻辑代码中)可以调用这个方法,获取到像房间布局、面积大小、装修风格等更全面的介绍内容,使得用户在进行预约操作时能结合房间详情信息,更深入地了解具体情况,比如判断房间是否满足自己对住宿环境等方面的需求。
public String getFangjianContent() {
return fangjianContent;
}
// 设置: 房间详情
// 遵循JavaBean规范的属性修改器方法用于设置房间详情属性fangjianContent的值。
// 当需要更新房间的详细描述信息时(比如完善房间介绍、修改房间详情中的部分内容等业务场景,例如酒店重新装修后需要更新房间布局、风格等相关描述信息),外部代码可以调用这个方法,传入新的字符串内容来更新该属性的值,确保房间详情信息的准确性和及时性,使前端展示给用户的房间详情与实际情况一致。
public void setFangjianContent(String fangjianContent) {
this.fangjianContent = fangjianContent;
}
// 级联表的get和set yonghu
// 获取: 用户姓名
// 按照JavaBean规范定义的访问器方法用于获取用户姓名属性yonghuName的值该属性存储的是进行房间预约的用户的姓名。
// 在展示房间预约信息时,通过调用这个方法可以获取进行预约操作的用户的姓名,从而明确预约者身份,增强信息展示的完整性和可读性,方便前端进行相应的展示处理,比如在前端页面预约详情区域展示用户姓名,让其他用户能清楚知道是谁进行的预约,提高信息的可信度和关联性。
public String getYonghuName() {
return yonghuName;
}
// 设置: 用户姓名
// 遵循JavaBean规范的修改器方法用于设置用户姓名属性yonghuName的值。
// 例如在从数据库查询到用户信息并构建当前视图对象后,若发现用户姓名需要更新(如用户修改了昵称等情况),外部代码可以调用这个方法传入新的姓名值来更新该属性,确保前端展示的用户姓名信息是最新且准确的,符合用户实际情况。
public void setYonghuName(String yonghuName) {
this.yonghuName = yonghuName;
}
// 获取: 头像
// 这是用于获取用户头像属性yonghuPhoto值的访问器方法符合JavaBean规范该属性存储的是用户头像相关的信息比如头像图片的路径或者标识等内容
// 外部代码调用它可以获取到用户头像相关的信息,便于在前端展示房间预约信息时同时展示用户头像,使展示效果更具个性化和直观性,比如在前端页面预约展示区域旁边展示用户头像图片,让用户界面更生动形象,也有助于用户快速识别不同的预约者,增强信息展示的辨识度。
public String getYonghuPhoto() {
return yonghuPhoto;
}
// 设置: 头像
// 按照JavaBean的属性修改器规范定义的方法用于设置用户头像属性yonghuPhoto的值。
// 当用户更新了头像信息(比如更换了头像图片)后,外部代码可以调用这个方法,传入新的头像相关信息(如更新后的图片路径等)来更新该属性的值,保证前端展示的头像信息是最新的,与用户实际的头像情况相符。
public void setYonghuPhoto(String yonghuPhoto) {
this.yonghuPhoto = yonghuPhoto;
}
// 获取: 手机号
// 此为获取用户手机号属性yonghuPhone值的访问器方法遵循JavaBean规范该属性存储的是用户的手机号码信息。
// 外部代码通过调用这个方法可以获取到用户的手机号码信息,在一些业务场景下(比如需要联系用户确认预约信息、进行预约相关通知等情况)可能会用到该手机号信息,同时也能增加前端展示用户信息的完整性,不过出于隐私保护,一般不会直接完全展示手机号给所有用户,可能只有特定权限的人员(如管理员等)在必要时可见。
public String getYonghuPhone() {
return yonghuPhone;
}
// 设置: 手机号
// 遵循JavaBean规范定义的用于设置用户手机号属性yonghuPhone值的修改器方法。
// 若用户的手机号码发生了变更,外部代码(如处理用户信息更新的业务逻辑代码)可以调用这个方法,传入新的手机号作为参数,来更新该属性的值,以此保证在系统中存储以及后续使用的用户手机号信息是准确无误的,与用户实际的联系方式保持一致。
public void setYonghuPhone(String yonghuPhone) {
this.yonghuPhone = yonghuPhone;
}
// 获取: 电子邮箱
// 按照JavaBean规范定义的访问器方法用于获取用户电子邮箱属性yonghuEmail的值。
// 外部代码调用该方法可以获取用户的电子邮箱地址,在业务中可能用于发送预约确认、提醒等邮件,或者处理预约变更等情况与用户沟通等通过邮件形式交互的业务场景,也有助于完善前端展示的用户信息内容,尽管不一定直接展示邮箱地址给所有用户,但它作为用户信息的一部分能让整体信息更加完整。
public String getYonghuEmail() {
return yonghuEmail;
}
// 设置: 电子邮箱
// 遵循JavaBean规范的修改器方法用于设置用户电子邮箱属性yonghuEmail的值。
// 当用户更新了自己的电子邮箱地址(比如用户在个人信息设置页面修改了邮箱,相关操作请求传递到后端)后,外部代码(例如负责处理用户信息修改保存的业务逻辑代码)可以调用这个方法,传入新的邮箱地址作为参数,来更新该属性的值,确保在后续的各种业务操作(如发送邮件等)中使用的邮箱信息是最新且准确的,符合用户实际的邮箱设置情况。
public void setYonghuEmail(String yonghuEmail) {
this.yonghuEmail = yonghuEmail;
}
// 获取: 余额
// 这是用于获取用户余额属性newMoney值的访问器getter方法符合JavaBean规范。
// 外部代码(在一些综合业务展示页面(比如展示用户的综合账户信息详情时),或者涉及到用户资金相关的扩展业务场景(如判断用户是否满足某些优惠活动条件、分析用户消费能力等情况对应的业务逻辑代码)中)调用它可以获取到用户账户的余额信息,虽然在房间预约的主要业务场景下,余额信息关联性可能不是特别紧密,但在更全面的业务范畴内,该信息可能会起到一定的作用,有助于对用户进行更全面的了解和相关业务分析。
public Double getNewMoney() {
return newMoney;
}
// 设置: 余额
// 按照JavaBean的属性修改器规范定义的方法用于设置用户余额属性newMoney的值。
// 例如在用户进行了充值、消费等操作(比如用户通过线上支付渠道进行充值,或者在酒店内使用房间相关服务产生消费等情况发生后,对应的业务逻辑处理代码)导致余额发生变化后,外部代码可以调用这个方法,传入新的余额数值作为参数,来更新该属性的值,以此保证系统中记录的用户余额信息始终是准确的,能够真实反映用户账户的资金情况。
public void setNewMoney(Double newMoney) {
this.newMoney = newMoney;
}
// 获取: 假删
// 此为获取用户假删属性yonghuDelete值的访问器getter方法遵循JavaBean规范。
// 该属性可能用于表示用户是否被标记为假删除状态(具体含义需结合业务逻辑确定,比如可能是在数据管理过程中,为了保留用户数据但又暂时不让其在某些常规展示场景下出现等情况而设置的一种特殊状态标识),外部代码(比如在前端展示用户相关信息时,需要根据用户状态进行不同展示效果处理的业务逻辑代码)调用这个方法可以获取到这个状态信息,以便在前端展示用户相关信息时体现该状态情况,让管理员或者相关人员清楚了解用户数据的实际处理状态。
public Integer getYonghuDelete() {
return yonghuDelete;
}
// 设置: 假删
// 遵循JavaBean规范定义的用于设置用户假删属性yonghuDelete值的修改器setter方法。
// 当用户的假删状态发生变化比如从正常状态变为假删除状态可能是因为某些业务规则触发如用户长时间未活跃等情况需要将其标记为假删除或者反之从假删除状态恢复为正常状态例如用户重新激活账号等情况外部代码如负责处理用户状态变更的业务逻辑代码可以调用这个方法传入相应的整数值通常是代表不同状态的特定数值如0表示正常1表示假删除等具体看业务定义来更新该属性的值确保用户的假删状态在系统中能准确记录和体现使得系统对用户数据的处理状态与实际业务情况相符。
public void setYonghuDelete(Integer yonghuDelete) {
// 将传入的参数值赋值给当前对象的yonghuDelete属性完成对用户假删属性值的更新操作
this.yonghuDelete = yonghuDelete;
}
}
// 最后的右花括号用于结束FangjianOrderView类的定义表示该类的代码块范围到此结束
}

@ -1,65 +1,73 @@
package com.entity.view;
// 导入房间实体类FangjianEntity该类可能包含了与房间相关的基础属性及对应的数据库操作逻辑等
// 这里的FangjianView类会基于它来扩展或调整相关属性以满足后端返回给前端视图展示的需求
import com.entity.FangjianEntity;
// 导入MyBatis Plus的注解用于指定该实体类对应的数据库表名使得在与数据库交互时框架能准确地知道该类关联的是哪张数据表
import com.baomidou.mybatisplus.annotations.TableName;
// 导入Apache Commons BeanUtils工具类其提供了方便的方法来进行Java对象之间属性的复制操作
// 本类中会使用它来将FangjianEntity对象的属性复制到FangjianView对象中
import org.apache.commons.beanutils.BeanUtils;
// 导入异常处理相关的类用于捕获在使用BeanUtils进行属性复制操作时可能抛出的异常保证程序在出现异常情况时也能稳定运行避免因异常导致程序崩溃
import java.lang.reflect.InvocationTargetException;
// 导入Spring框架的日期格式化注解用于在接收前端传入的日期参数或者向前端返回日期数据时按照指定格式进行转换处理使日期数据的格式符合业务要求
import org.springframework.format.annotation.DateTimeFormat;
// 导入Jackson框架的注解用于在序列化和反序列化日期类型数据时控制其格式确保在数据传输和存储过程中日期格式的一致性与准确性
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Java的序列化接口表明该类的对象可以被序列化和反序列化方便在网络传输、持久化存储等场景下对该类的实例进行操作比如在前后端数据交互或者保存对象状态到文件等情况中使用
import java.io.Serializable;
// 导入Java中的日期类用于处理可能涉及到的日期相关属性虽然在当前代码片段中未明确看到使用场景但作为通用的日期处理类引入以备后续业务扩展可能会用到
import java.util.Date;
/**
*
*
* 使
* FangjianEntity
* Serializable
*/
@TableName("fangjian")
public class FangjianView extends FangjianEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
private String fangjianValue;
// 定义一个序列化版本号用于在序列化和反序列化过程中保证版本的兼容性当类的结构发生变化如添加、删除字段等可以通过修改这个版本号来避免反序列化出错初始值设为1L在类相对稳定的情况下一般不需要改动
private static final long serialVersionUID = 1L;
/**
*
* 便
*/
private String fangjianValue;
// 默认构造函数用于创建FangjianView类的实例对象在一些情况下比如通过反射等方式创建对象时可能会用到它会创建一个默认状态的对象实例
public FangjianView() {
}
// 构造函数接收一个FangjianEntity对象作为参数用于将传入的实体类对象的属性值复制到当前视图类对象中通过BeanUtils工具类来实现属性复制方便基于已有的实体数据构建视图对象
public FangjianView(FangjianEntity fangjianEntity) {
try {
// 使用BeanUtils的copyProperties方法将fangjianEntity对象的属性值复制到当前对象this实现属性的赋值操作但该方法可能会抛出IllegalAccessException访问权限异常和InvocationTargetException方法调用异常所以需要进行异常捕获处理
BeanUtils.copyProperties(this, fangjianEntity);
} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block
// 如果在属性复制过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,确定是哪里出现了访问权限问题或者方法调用出错等情况
e.printStackTrace();
}
}
/**
*
* JavaBean访getterfangjianValue
* 便
*/
public String getFangjianValue() {
return fangjianValue;
}
/**
*
*/
public String getFangjianValue() {
return fangjianValue;
}
/**
*
*/
public void setFangjianValue(String fangjianValue) {
this.fangjianValue = fangjianValue;
}
}
/**
*
* fangjianValueJavaBeansetter
* 使
*/
public void setFangjianValue(String fangjianValue) {
this.fangjianValue = fangjianValue;
}
}

@ -1,19 +1,31 @@
package com.service;
// 导入MyBatis Plus中定义的服务层接口基础类IService接口提供了一系列通用的数据库操作方法如增删改查等基础操作的定义
// 这里让FangjianLiuyanService接口继承它意味着FangjianLiuyanService可以直接使用或重写这些通用方法以满足房间评论/投诉相关业务逻辑中的数据库操作需求
import com.baomidou.mybatisplus.service.IService;
// 导入自定义的工具类,用于处理分页相关的功能,比如构建分页查询的参数、获取分页结果等操作,方便在查询房间评论/投诉数据时实现分页展示效果
import com.utils.PageUtils;
// 导入房间评论/投诉对应的实体类,该实体类包含了房间评论/投诉相关的各种属性信息,服务层接口中的方法操作基本都是围绕这个实体类对应的数据库表记录来进行的
import com.entity.FangjianLiuyanEntity;
// 导入Java中的Map接口用于存储键值对形式的查询参数在查询房间评论/投诉数据时可以通过Map来传递各种不同的查询条件如按用户ID查询、按时间范围查询等灵活性较高
import java.util.Map;
// 导入用于处理HTTP请求相关的类在服务层的方法中可能会根据请求对象获取一些额外的信息比如从请求头获取用户信息等虽然当前代码中未体现明显使用场景但预留了使用的可能性辅助业务逻辑处理
import javax.servlet.http.HttpServletRequest;
/**
* /
* /IService
* /便/
*/
public interface FangjianLiuyanService extends IService<FangjianLiuyanEntity> {
/**
* @param params
* @return
*/
PageUtils queryPage(Map<String, Object> params);
* @param params
* Map"user_id"ID"start_time""end_time"
* ID
*
* @return
* PageUtils/便
*/
PageUtils queryPage(Map<String, Object> params);
}

@ -1,19 +1,30 @@
package com.service;
// 导入MyBatis Plus中定义的服务层接口基础类IService接口提供了如增删改查等一系列通用的数据库操作方法的定义
// 此处让FangjianOrderService接口继承它意味着FangjianOrderService接口能借助这些已定义好的通用操作同时也可根据房间预约业务的特殊需求去拓展或重写相关方法方便与数据库进行交互来处理房间预约相关的数据操作。
import com.baomidou.mybatisplus.service.IService;
// 导入自定义的工具类,用于处理分页相关的功能,比如组织分页查询所需的参数、整合分页查询后的结果等,目的是在对房间预约信息进行查询时,能够按照分页的形式来展示和处理数据,提升用户查看数据的体验以及方便数据管理。
import com.utils.PageUtils;
// 导入房间预约对应的实体类FangjianOrderEntity类包含了房间预约业务中涉及的各项关键属性如预约房间的ID、预约用户的ID、预约时间等服务层接口里的各种方法操作基本都是围绕这个实体类所对应的数据库表记录来展开的。
import com.entity.FangjianOrderEntity;
// 导入Java中的Map接口通过它可以创建键值对形式的对象用于存储各种查询参数。在查询房间预约信息时可将不同的查询条件例如按照预约日期范围查询键可以是“start_date”和“end_date”对应的值就是具体的日期范围或者按照用户ID查询键为“user_id”值就是具体的用户ID数值等以键值对形式放入Map中传递给查询方法使得查询条件的传递更加灵活多样。
import java.util.Map;
// 导入用于处理HTTP请求相关的类在实际的业务场景中服务层的方法可能会依据HTTP请求对象获取一些额外有用的信息比如从请求头里获取用户的登录状态、权限信息等来辅助判断能否进行相关预约操作等虽然当前代码里没体现出明显使用场景但预留了这样的扩展可能性以便更好地处理业务逻辑。
import javax.servlet.http.HttpServletRequest;
/**
*
* IServiceIService便
*/
public interface FangjianOrderService extends IService<FangjianOrderEntity> {
/**
* @param params
* @return
*/
PageUtils queryPage(Map<String, Object> params);
* @param params
* paramsMaproom_idorder_status
*
*
* @return
* PageUtilsFangjianOrderEntity便
*/
PageUtils queryPage(Map<String, Object> params);
}

@ -1,19 +1,35 @@
package com.service;
// 导入MyBatis Plus中定义的服务层接口基础类。IService接口提供了一系列通用的数据库操作方法定义例如常见的增删改查等操作方法的规范
// 此处让FangjianService接口继承它意味着FangjianService可以复用这些通用的数据库操作逻辑同时也能够根据房间信息业务特有的需求去扩展或者重写相应的方法方便与数据库进行交互处理和房间信息相关的数据操作。
import com.baomidou.mybatisplus.service.IService;
// 导入自定义的工具类,主要用于处理分页相关功能,像构建分页查询所需的参数、整合分页查询后得到的结果数据等操作,
// 其目的是在对房间信息进行查询时,能够按照分页的形式来展示和处理数据,便于前端更好地展示大量的房间信息,也方便用户查看不同页面的内容,提升交互体验。
import com.utils.PageUtils;
// 导入房间信息对应的实体类FangjianEntity类包含了描述房间各种属性的字段例如房间名称、房间图片、价格、配置等信息
// 服务层接口中的各个方法基本都是围绕这个实体类所对应的数据库表记录来开展操作的,例如查询、更新房间信息等都是针对这些实体数据进行。
import com.entity.FangjianEntity;
// 导入Java中的Map接口它可以用来存储键值对形式的数据在这里用于存放各种查询参数。比如可以通过键值对来表示不同的查询条件像以"room_type"为键,对应的房型值为值来查询特定房型的房间;或者以"price_min"和"price_max"为键,分别存放价格区间的最小值和最大值来查询符合价格范围的房间等,使得查询条件的设置更加灵活多样。
import java.util.Map;
// 导入用于处理HTTP请求相关的类虽然在当前代码中没有明显体现出具体使用场景但在实际的业务逻辑中服务层的方法可能会依据HTTP请求对象获取一些额外的有用信息
// 例如从请求头中获取用户的权限信息,以此判断用户是否有权限查询某些房间信息;或者获取用户的地理位置信息,来推荐距离较近的房间等,为业务处理提供更多的辅助信息。
import javax.servlet.http.HttpServletRequest;
/**
*
* IServiceIService
* 便
*/
public interface FangjianService extends IService<FangjianEntity> {
/**
* @param params
* @return
*/
PageUtils queryPage(Map<String, Object> params);
* @param params
* paramsMaproom_namecreate_time_startcreate_time_end
* room_name
*
* @return
* PageUtilsFangjianEntity
* 便便
*/
PageUtils queryPage(Map<String, Object> params);
}
Loading…
Cancel
Save