diff --git a/ForumController.java b/ForumController.java new file mode 100644 index 0000000..8761cb3 --- /dev/null +++ b/ForumController.java @@ -0,0 +1,283 @@ +package com.controller; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.text.ParseException; // 导入解析异常 +import java.util.ArrayList; +import java.util.Arrays; // 导入Arrays工具类 +import java.util.Calendar; +import java.util.Map; // 导入Map接口 +import java.util.HashMap; +import java.util.Iterator; // 导入迭代器接口 +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletRequest; // 导入Servlet请求类 +import java.io.IOException; + +import com.utils.ValidatorUtils; // 导入验证工具类 +import org.apache.commons.lang3.StringUtils; // 导入Apache Commons Lang的StringUtils类,用于字符串操作 +import org.springframework.beans.factory.annotation.Autowired; // 导入Spring的依赖注入注解 +import org.springframework.transaction.annotation.Transactional; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.PathVariable; // 导入路径变量注解 +import org.springframework.web.bind.annotation.RequestBody; // 导入请求体注解 +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.mapper.Wrapper; +import com.annotation.IgnoreAuth; + +import com.entity.ForumEntity; // 导入论坛实体类 +import com.entity.view.ForumView; // 导入论坛视图类 + +import com.service.ForumService; // 导入论坛服务类 +import com.service.TokenService; +import com.utils.PageUtils; // 导入分页工具类 +import com.utils.R; +import com.utils.MD5Util; +import com.utils.MPUtil; // 导入MyBatis-Plus工具类 +import com.utils.CommonUtil; + +/** + * 论坛表 + * 后端接口 + * @author + * @email + * @date 2023-02-21 09:46:06 + */ +@RestController // 标记该类为REST控制器 +@RequestMapping("/forum") +public class ForumController { + @Autowired + private ForumService forumService; // 注入论坛服务 + + /** + * 后端列表 + * @param params 请求参数 + * @param forum 论坛实体 + * @param request HttpServletRequest对象 + * @return 论坛列表分页数据 + */ + @RequestMapping("/page") // 映射请求路径为"/page" + public R page(@RequestParam Map params, ForumEntity forum, HttpServletRequest request) { + // 如果当前用户不是管理员,则设置用户ID + if (!request.getSession().getAttribute("role").toString().equals("管理员")) { + forum.setUserid((Long) request.getSession().getAttribute("userId")); + } + + EntityWrapper ew = new EntityWrapper(); + // 查询论坛列表分页数据 + PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params)); + request.setAttribute("data", page); // 将数据设置到请求属性中 + return R.ok().put("data", page); + } + + /** + * 前端列表 + * @param params 请求参数 + * @param forum 论坛实体 + * @param request HttpServletRequest对象 + * @return 论坛列表分页数据 + */ + @RequestMapping("/list") // 映射请求路径为"/list" + public R list(@RequestParam Map params, ForumEntity forum, HttpServletRequest request) { + // 如果当前用户不是管理员,则设置用户ID + if (!request.getSession().getAttribute("role").toString().equals("管理员")) { + forum.setUserid((Long) request.getSession().getAttribute("userId")); + } + + EntityWrapper ew = new EntityWrapper(); + // 查询论坛列表分页数据 + PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params)); + request.setAttribute("data", page); // 将数据设置到请求属性中 + return R.ok().put("data", page); + } + + /** + * 允许匿名访问的列表 + * @param params 请求参数 + * @param forum 论坛实体 + * @param request HttpServletRequest对象 + * @return 论坛列表分页数据 + */ + @IgnoreAuth // 忽略身份验证 + @RequestMapping("/flist") // 映射请求路径为"/flist" + public R flist(@RequestParam Map params, ForumEntity forum, HttpServletRequest request) { + EntityWrapper ew = new EntityWrapper(); + // 查询论坛列表分页数据 + PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params)); + return R.ok().put("data", page); + } + + /** + * 查询论坛信息 + * @param forum 论坛实体 + * @return 论坛信息 + */ + @RequestMapping("/query") // 映射请求路径为"/query" + public R query(ForumEntity forum) { + EntityWrapper ew = new EntityWrapper(); + ew.allEq(MPUtil.allEQMapPre(forum, "forum")); // 构建查询条件 + ForumView forumView = forumService.selectView(ew); // 查询论坛视图 + return R.ok("查询论坛表成功").put("data", forumView); + } + + /** + * 获取后端论坛详情 + * @param id 论坛ID + * @return 论坛信息 + */ + @RequestMapping("/info/{id}") // 映射请求路径为"/info/{id}" + public R info(@PathVariable("id") Long id) { + ForumEntity forum = forumService.selectById(id); // 根据ID查询论坛 + return R.ok().put("data", forum); + } + + /** + * 获取前端论坛详情 + * @param id 论坛ID + * @return 论坛信息 + */ + @IgnoreAuth // 忽略身份验证 + @RequestMapping("/detail/{id}") // 映射请求路径为"/detail/{id}" + public R detail(@PathVariable("id") Long id) { + ForumEntity forum = forumService.selectById(id); // 根据ID查询论坛 + return R.ok().put("data", forum); + } + + /** + * 获取论坛及其子项 + * @param id 论坛ID + * @return 论坛信息及子项 + */ + @IgnoreAuth // 忽略身份验证 + @RequestMapping("/list/{id}") // 映射请求路径为"/list/{id}" + public R list(@PathVariable("id") String id) { + ForumEntity forum = forumService.selectById(id); // 根据ID查询论坛 + getChilds(forum); // 获取子项 + return R.ok().put("data", forum); // 返回论坛信息及子项 + } + + /** + * 递归获取子项 + * @param forum 论坛实体 + * @return 具有子项的论坛 + */ + private ForumEntity getChilds(ForumEntity forum) { + List childs = new ArrayList(); + childs = forumService.selectList(new EntityWrapper().eq("parentid", forum.getId())); // 根据父ID查询子项 + if (childs == null || childs.size() == 0) { + return null; // 如果没有子项,则返回null + } + forum.setChilds(childs); // 设置子项 + for (ForumEntity forumEntity : childs) { + getChilds(forumEntity); // 递归获取每个子项的子项 + } + return forum; // 返回具有子项的论坛 + } + + /** + * 后端保存论坛信息 + * @param forum 论坛实体 + * @param request HttpServletRequest对象 + * @return 保存结果 + */ + @RequestMapping("/save") // 映射请求路径为"/save" + public R save(@RequestBody ForumEntity forum, HttpServletRequest request) { + forum.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue()); // 生成唯一ID + // ValidatorUtils.validateEntity(forum); // 验证实体(可选择启用) + forum.setUserid((Long) request.getSession().getAttribute("userId")); // 设置用户ID + forumService.insert(forum); // 保存论坛信息 + return R.ok(); + } + + /** + * 前端保存论坛信息 + * @param forum 论坛实体 + * @param request HttpServletRequest对象 + * @return 保存结果 + */ + @RequestMapping("/add") // 映射请求路径为"/add" + public R add(@RequestBody ForumEntity forum, HttpServletRequest request) { + forum.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue()); // 生成唯一ID + // ValidatorUtils.validateEntity(forum); // 验证实体(可选择启用) + forum.setUserid((Long) request.getSession().getAttribute("userId")); // 设置用户ID + forumService.insert(forum); // 保存论坛信息 + return R.ok(); + } + + /** + * 修改论坛信息 + * @param forum 论坛实体 + * @param request HttpServletRequest对象 + * @return 修改结果 + */ + @RequestMapping("/update") // 映射请求路径为"/update" + @Transactional // 开启事务 + public R update(@RequestBody ForumEntity forum, HttpServletRequest request) { + // ValidatorUtils.validateEntity(forum); // 验证实体(可选择启用) + forumService.updateById(forum); // 更新论坛信息 + return R.ok(); + } + + /** + * 删除论坛 + * @param ids 论坛ID数组 + * @return 删除结果 + */ + @RequestMapping("/delete") // 映射请求路径为"/delete" + public R delete(@RequestBody Long[] ids) { + forumService.deleteBatchIds(Arrays.asList(ids)); // 批量删除论坛 + return R.ok(); + } + + /** + * 提醒接口 + * @param columnName 列名 + * @param type 类型 + * @param map 查询参数 + * @param request HttpServletRequest对象 + * @return 提醒数量 + */ + @RequestMapping("/remind/{columnName}/{type}") // 映射请求路径为"/remind/{columnName}/{type}" + public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, + @PathVariable("type") String type, @RequestParam Map map) { + map.put("column", columnName); // 将列名放入请求参数 + map.put("type", type); // 将类型放入请求参数 + + // 如果类型为2,进行日期提醒处理 + if (type.equals("2")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar c = Calendar.getInstance(); + Date remindStartDate = null; + Date remindEndDate = null; + if (map.get("remindstart") != null) { + Integer remindStart = Integer.parseInt(map.get("remindstart").toString()); + c.setTime(new Date()); + c.add(Calendar.DAY_OF_MONTH, remindStart); // 加上提醒天数 + remindStartDate = c.getTime(); + map.put("remindstart", sdf.format(remindStartDate)); // 格式化日期并放入请求参数 + } + if (map.get("remindend") != null) { + Integer remindEnd = Integer.parseInt(map.get("remindend").toString()); + c.setTime(new Date()); + c.add(Calendar.DAY_OF_MONTH, remindEnd); // 加上提醒天数 + remindEndDate = c.getTime(); + map.put("remindend", sdf.format(remindEndDate)); // 格式化日期并放入请求参数 + } + } + + // 构建查询条件 + Wrapper wrapper = new EntityWrapper(); + if (map.get("remindstart") != null) { + wrapper.ge(columnName, map.get("remindstart")); // 大于等于开始日期 + } + if (map.get("remindend") != null) { + wrapper.le(columnName, map.get("remindend")); // 小于等于结束日期 + } + + int count = forumService.selectCount(wrapper); // 查询数量 + return R.ok().put("count", count); // 返回数量 + } +}