package com.controller; // 导入用于格式化日期的类 import java.text.SimpleDateFormat; // 导入用于创建动态数组的类 import java.util.ArrayList; // 导入用于操作数组的工具类 import java.util.Arrays; // 导入用于处理日期和时间的类 import java.util.Calendar; // 导入用于存储键值对的接口 import java.util.Map; // 导入 HashMap 类,用于实现 Map 接口 import java.util.HashMap; // 导入用于遍历集合的接口 import java.util.Iterator; // 导入用于表示日期和时间的类 import java.util.Date; // 导入用于创建列表的接口 import java.util.List; // 导入用于处理 HTTP 请求的类 import javax.servlet.http.HttpServletRequest; // 导入自定义的验证工具类 import com.utils.ValidatorUtils; // 导入 Apache Commons Lang 库中的字符串处理工具类 import org.apache.commons.lang3.StringUtils; // 导入 Spring 框架的自动注入注解 import org.springframework.beans.factory.annotation.Autowired; // 导入 Spring 框架的日期格式化注解 import org.springframework.format.annotation.DateTimeFormat; // 导入 Spring 框架的路径变量注解 import org.springframework.web.bind.annotation.PathVariable; // 导入 Spring 框架的请求体注解 import org.springframework.web.bind.annotation.RequestBody; // 导入 Spring 框架的请求映射注解 import org.springframework.web.bind.annotation.RequestMapping; // 导入 Spring 框架的请求参数注解 import org.springframework.web.bind.annotation.RequestParam; // 导入 Spring 框架的 REST 控制器注解 import org.springframework.web.bind.annotation.RestController; // 导入 MyBatis-Plus 的实体包装器类 import com.baomidou.mybatisplus.mapper.EntityWrapper; // 导入 MyBatis-Plus 的包装器接口 import com.baomidou.mybatisplus.mapper.Wrapper; // 导入自定义的忽略认证注解 import com.annotation.IgnoreAuth; // 导入购买的课程实体类 import com.entity.GoumaidekechengEntity; // 导入购买的课程视图类 import com.entity.view.GoumaidekechengView; // 导入购买的课程服务类 import com.service.GoumaidekechengService; // 导入令牌服务类 import com.service.TokenService; // 导入分页工具类 import com.utils.PageUtils; // 导入自定义的响应类 import com.utils.R; // 导入 MD5 加密工具类 import com.utils.MD5Util; // 导入 MyBatis-Plus 工具类 import com.utils.MPUtil; // 导入通用工具类 import com.utils.CommonUtil; /** * 购买的课程 * 后端接口 * @author * @email * @date 2021-05-09 15:46:14 */ // 声明为 REST 控制器,用于处理 HTTP 请求 @RestController // 映射请求路径,所有以 /goumaidekecheng 开头的请求由该控制器处理 @RequestMapping("/goumaidekecheng") public class GoumaidekechengController { // 自动注入购买的课程服务类实例 @Autowired private GoumaidekechengService goumaidekechengService; /** * 后端列表(分页查询) */ // 映射请求路径 /goumaidekecheng/page @RequestMapping("/page") // 处理后端分页查询请求,参数包括查询条件、实体对象、HTTP 请求 public R page(@RequestParam Map params, GoumaidekechengEntity goumaidekecheng, HttpServletRequest request) { // 从会话中获取表名(判断用户类型) String tableName = request.getSession().getAttribute("tableName").toString(); // 如果表名是 "yonghu"(用户表) if (tableName.equals("yonghu")) { // 设置查询条件:用户账号为当前登录用户的用户名 goumaidekecheng.setYonghuzhanghao((String) request.getSession().getAttribute("username")); } // 创建实体包装器,用于构建查询条件 EntityWrapper ew = new EntityWrapper(); // 调用服务类的分页查询方法,包含排序、范围查询、模糊查询处理 PageUtils page = goumaidekechengService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, goumaidekecheng), params), params)); // 返回成功响应,携带分页数据 return R.ok().put("data", page); } /** * 前端列表(分页查询) */ // 映射请求路径 /goumaidekecheng/list @RequestMapping("/list") // 处理前端分页查询请求,参数包括查询条件、实体对象、HTTP 请求 public R list(@RequestParam Map params, GoumaidekechengEntity goumaidekecheng, HttpServletRequest request) { // 创建实体包装器,用于构建查询条件 EntityWrapper ew = new EntityWrapper(); // 调用服务类的分页查询方法,包含排序、范围查询、模糊查询处理 PageUtils page = goumaidekechengService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, goumaidekecheng), params), params)); // 返回成功响应,携带分页数据 return R.ok().put("data", page); } /** * 列表(不分页,全量查询) */ // 映射请求路径 /goumaidekecheng/lists @RequestMapping("/lists") // 处理全量查询请求,参数为实体对象 public R list(GoumaidekechengEntity goumaidekecheng) { // 创建实体包装器 EntityWrapper ew = new EntityWrapper(); // 设置查询条件:所有字段与实体对象相等(前缀为 "goumaidekecheng") ew.allEq(MPUtil.allEQMapPre(goumaidekecheng, "goumaidekecheng")); // 返回成功响应,携带查询结果(视图列表) return R.ok().put("data", goumaidekechengService.selectListView(ew)); } /** * 查询(单个对象) */ // 映射请求路径 /goumaidekecheng/query @RequestMapping("/query") // 处理单个对象查询请求,参数为实体对象 public R query(GoumaidekechengEntity goumaidekecheng) { // 创建实体包装器 EntityWrapper ew = new EntityWrapper(); // 设置查询条件:所有字段与实体对象相等(前缀为 "goumaidekecheng") ew.allEq(MPUtil.allEQMapPre(goumaidekecheng, "goumaidekecheng")); // 调用服务类的视图查询方法 GoumaidekechengView goumaidekechengView = goumaidekechengService.selectView(ew); // 返回成功响应,携带查询结果和提示信息 return R.ok("查询购买的课程成功").put("data", goumaidekechengView); } /** * 后端详情(根据 ID 查询) */ // 映射请求路径 /goumaidekecheng/info/{id} @RequestMapping("/info/{id}") // 处理详情查询请求,参数为路径中的 ID public R info(@PathVariable("id") Long id) { // 根据 ID 直接查询实体对象 GoumaidekechengEntity goumaidekecheng = goumaidekechengService.selectById(id); // 返回成功响应,携带查询到的实体数据 return R.ok().put("data", goumaidekecheng); } /** * 前端详情(根据 ID 查询) */ // 映射请求路径 /goumaidekecheng/detail/{id} @RequestMapping("/detail/{id}") // 处理详情查询请求,参数为路径中的 ID(前端调用) public R detail(@PathVariable("id") Long id) { // 根据 ID 直接查询实体对象 GoumaidekechengEntity goumaidekecheng = goumaidekechengService.selectById(id); // 返回成功响应,携带查询到的实体数据 return R.ok().put("data", goumaidekecheng); } /** * 后端保存(新增数据) */ // 映射请求路径 /goumaidekecheng/save @RequestMapping("/save") // 处理后端新增请求,请求体为实体对象,携带 HTTP 请求 public R save(@RequestBody GoumaidekechengEntity goumaidekecheng, HttpServletRequest request) { // 生成唯一 ID(时间戳 + 随机数) goumaidekecheng.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue()); // 实体验证(注释,未启用) //ValidatorUtils.validateEntity(goumaidekecheng); // 调用服务类的插入方法 goumaidekechengService.insert(goumaidekecheng); // 返回成功响应 return R.ok(); } /** * 前端保存(新增数据) */ // 映射请求路径 /goumaidekecheng/add @RequestMapping("/add") // 处理前端新增请求,请求体为实体对象,携带 HTTP 请求 public R add(@RequestBody GoumaidekechengEntity goumaidekecheng, HttpServletRequest request) { // 生成唯一 ID(时间戳 + 随机数) goumaidekecheng.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue()); // 实体验证(注释,未启用) //ValidatorUtils.validateEntity(goumaidekecheng); // 调用服务类的插入方法 goumaidekechengService.insert(goumaidekecheng); // 返回成功响应 return R.ok(); } /** * 修改(更新数据) */ // 映射请求路径 /goumaidekecheng/update @RequestMapping("/update") // 处理修改请求,请求体为实体对象,携带 HTTP 请求 public R update(@RequestBody GoumaidekechengEntity goumaidekecheng, HttpServletRequest request) { // 实体验证(注释,未启用) //ValidatorUtils.validateEntity(goumaidekecheng); // 调用服务类的更新方法(根据 ID 全量更新) goumaidekechengService.updateById(goumaidekecheng); // 全部更新 // 返回成功响应 return R.ok(); } /** * 删除(批量删除) */ // 映射请求路径 /goumaidekecheng/delete @RequestMapping("/delete") // 处理删除请求,请求体为 ID 数组 public R delete(@RequestBody Long[] ids) { // 调用服务类的批量删除方法(根据 ID 列表) goumaidekechengService.deleteBatchIds(Arrays.asList(ids)); // 返回成功响应 return R.ok(); } /** * 提醒接口(统计符合条件的记录数) */ // 映射请求路径 /goumaidekecheng/remind/{columnName}/{type} @RequestMapping("/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")) { // 创建日期格式化对象(yyyy-MM-dd 格式) 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")); } // 根据表名判断是否添加用户账号条件(用户表场景) String tableName = request.getSession().getAttribute("tableName").toString(); if (tableName.equals("yonghu")) { wrapper.eq("yonghuzhanghao", (String) request.getSession().getAttribute("username")); } // 调用服务类统计符合条件的记录数 int count = goumaidekechengService.selectCount(wrapper); // 返回成功响应,携带统计结果 return R.ok().put("count", count); } }