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); // 返回数量 } }