You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gym/JianshenkechengController.java

389 lines
23 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.controller; // 声明包路径表示该文件位于com.controller包下
import java.io.File; // 导入文件操作类
import java.math.BigDecimal; // 导入高精度数学计算类
import java.net.URL; // 导入网络URL处理类
import java.text.SimpleDateFormat; // 导入日期格式化类
import com.alibaba.fastjson.JSONObject; // 导入FastJSON的JSON对象类
import java.util.*; // 导入Java常用工具类集合、日期等
import org.springframework.beans.BeanUtils; // 导入Spring Bean属性复制工具类
import javax.servlet.http.HttpServletRequest; // 导入HTTP请求处理类
import org.springframework.web.context.ContextLoader; // 导入Spring上下文加载器
import javax.servlet.ServletContext; // 导入Servlet上下文接口
import com.service.TokenService; // 导入自定义的Token服务类
import com.utils.*; // 导入自定义工具类
import java.lang.reflect.InvocationTargetException; // 导入反射异常类
import com.service.DictionaryService; // 导入自定义的字典服务类
import org.apache.commons.lang3.StringUtils; // 导入Apache字符串工具类
import com.annotation.IgnoreAuth; // 导入自定义的忽略认证注解
import org.slf4j.Logger; // 导入日志接口
import org.slf4j.LoggerFactory; // 导入日志工厂类
import org.springframework.beans.factory.annotation.Autowired; // 导入Spring自动注入注解
import org.springframework.stereotype.Controller; // 导入Spring控制器注解
import org.springframework.web.bind.annotation.*; // 导入Spring Web注解
import com.baomidou.mybatisplus.mapper.EntityWrapper; // 导入MyBatis Plus查询条件构造器
import com.baomidou.mybatisplus.mapper.Wrapper; // 导入MyBatis Plus包装器接口
import com.entity.*; // 导入实体类
import com.entity.view.*; // 导入视图实体类
import com.service.*; // 导入服务类
import com.utils.PageUtils; // 导入分页工具类
import com.utils.R; // 导入统一返回结果类
import com.alibaba.fastjson.*; // 导入FastJSON相关类
// 健身课程
//后端接口
//@author
//@email
@RestController // 标识为RESTful控制器
@Controller // 标识为Spring控制器
@RequestMapping("/jianshenkecheng") // 定义请求映射路径
public class JianshenkechengController {
private static final Logger logger = LoggerFactory.getLogger(JianshenkechengController.class); // 日志记录器
private static final String TABLE_NAME = "jianshenkecheng"; // 数据库表名
@Autowired
private JianshenkechengService jianshenkechengService; // 健身课程服务
@Autowired
private TokenService tokenService; // Token服务
@Autowired
private DictionaryService dictionaryService; // 字典服务
@Autowired
private ForumService forumService; // 健身论坛服务
@Autowired
private JianshenkechengCollectionService jianshenkechengCollectionService; // 课程收藏服务
@Autowired
private JianshenkechengLiuyanService jianshenkechengLiuyanService; // 课程留言服务
@Autowired
private JiaolianService jiaolianService; // 教练服务
@Autowired
private JiaolianYuyueService jiaolianYuyueService; // 教练预约申请服务
@Autowired
private NewsService newsService; // 健身资讯服务
@Autowired
private SingleSeachService singleSeachService; // 单页数据服务
@Autowired
private YonghuService yonghuService; // 用户服务
@Autowired
private UsersService usersService; // 管理员服务
//后端列表
@RequestMapping("/page") // 处理分页请求
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
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")); // 如果是用户角色添加用户ID参数
else if("教练".equals(role))
params.put("jiaolianId",request.getSession().getAttribute("userId")); // 如果是教练角色添加教练ID参数
params.put("dataDeleteStart",1);params.put("dataDeleteEnd",1); // 设置逻辑删除参数
CommonUtil.checkMap(params); // 检查参数
PageUtils page = jianshenkechengService.queryPage(params); // 查询分页数据
// 字典表数据转换
List<JianshenkechengView> list =(List<JianshenkechengView>)page.getList();
for(JianshenkechengView c:list){
// 修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page); // 返回分页数据
}
//后端详情
@RequestMapping("/info/{id}") // 处理详情请求
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id); // 记录日志
JianshenkechengEntity jianshenkecheng = jianshenkechengService.selectById(id); // 根据ID查询健身课程
if(jianshenkecheng !=null){
// entity转view
JianshenkechengView view = new JianshenkechengView();
BeanUtils.copyProperties( jianshenkecheng , view ); // 把实体数据重构到view中
// 级联表 教练
JiaolianEntity jiaolian = jiaolianService.selectById(jianshenkecheng.getJiaolianId());
if(jiaolian != null){
BeanUtils.copyProperties( jiaolian , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney", "jiaolianId"}); // 把级联的数据添加到view中,并排除id和创建时间字段
view.setJiaolianId(jiaolian.getId());
}
// 修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view); // 返回详情数据
}else {
return R.error(511,"查不到数据"); // 查询不到数据返回错误
}
}
//后端保存
@RequestMapping("/save") // 处理保存请求
public R save(@RequestBody JianshenkechengEntity jianshenkecheng, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,jianshenkecheng:{}",this.getClass().getName(),jianshenkecheng.toString()); // 记录日志
String role = String.valueOf(request.getSession().getAttribute("role")); // 获取用户角色
if(false)
return R.error(511,"永远不会进入"); // 永远不会执行的代码
else if("教练".equals(role))
jianshenkecheng.setJiaolianId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")))); // 如果是教练角色设置教练ID
Wrapper<JianshenkechengEntity> queryWrapper = new EntityWrapper<JianshenkechengEntity>()
.eq("jiaolian_id", jianshenkecheng.getJiaolianId()) // 教练ID
.eq("jianshenkecheng_name", jianshenkecheng.getJianshenkechengName()) // 课程名称
.eq("jianshenkecheng_video", jianshenkecheng.getJianshenkechengVideo()) // 课程视频
.eq("zan_number", jianshenkecheng.getZanNumber()) // 赞数
.eq("cai_number", jianshenkecheng.getCaiNumber()) // 踩数
.eq("jianshenkecheng_types", jianshenkecheng.getJianshenkechengTypes()) // 课程类型
.eq("data_delete", 1) // 逻辑删除字段
;
logger.info("sql语句:"+queryWrapper.getSqlSegment()); // 记录SQL语句
JianshenkechengEntity jianshenkechengEntity = jianshenkechengService.selectOne(queryWrapper); // 查询是否已存在相同数据
if(jianshenkechengEntity==null){
jianshenkecheng.setZanNumber(1); // 设置默认赞数
jianshenkecheng.setCaiNumber(1); // 设置默认踩数
jianshenkecheng.setJianshenkechengClicknum(1); // 设置默认点击量
jianshenkecheng.setDataDelete(1); // 设置逻辑删除状态
jianshenkecheng.setInsertTime(new Date()); // 设置插入时间
jianshenkecheng.setCreateTime(new Date()); // 设置创建时间
jianshenkechengService.insert(jianshenkecheng); // 插入新数据
return R.ok(); // 返回成功
}else {
return R.error(511,"表中有相同数据"); // 数据已存在返回错误
}
}
//后端修改
@RequestMapping("/update") // 处理更新请求
public R update(@RequestBody JianshenkechengEntity jianshenkecheng, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
logger.debug("update方法:,,Controller:{},,jianshenkecheng:{}",this.getClass().getName(),jianshenkecheng.toString()); // 记录日志
JianshenkechengEntity oldJianshenkechengEntity = jianshenkechengService.selectById(jianshenkecheng.getId()); // 查询原先数据
if("".equals(jianshenkecheng.getJianshenkechengPhoto()) || "null".equals(jianshenkecheng.getJianshenkechengPhoto())){
jianshenkecheng.setJianshenkechengPhoto(null); // 处理空图片路径
}
if("".equals(jianshenkecheng.getJianshenkechengVideo()) || "null".equals(jianshenkecheng.getJianshenkechengVideo())){
jianshenkecheng.setJianshenkechengVideo(null); // 处理空视频路径
}
if("".equals(jianshenkecheng.getJianshenkechengContent()) || "null".equals(jianshenkecheng.getJianshenkechengContent())){
jianshenkecheng.setJianshenkechengContent(null); // 处理空内容
}
jianshenkechengService.updateById(jianshenkecheng); // 根据ID更新数据
return R.ok(); // 返回成功
}
//删除
@RequestMapping("/delete") // 处理删除请求
public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString()); // 记录日志
List<JianshenkechengEntity> oldJianshenkechengList =jianshenkechengService.selectBatchIds(Arrays.asList(ids)); // 查询要删除的数据
ArrayList<JianshenkechengEntity> list = new ArrayList<>(); // 创建更新列表
for(Integer id:ids){
JianshenkechengEntity jianshenkechengEntity = new JianshenkechengEntity();
jianshenkechengEntity.setId(id);
jianshenkechengEntity.setDataDelete(2); // 设置逻辑删除状态为已删除
list.add(jianshenkechengEntity); // 添加到更新列表
}
if(list != null && list.size() >0){
jianshenkechengService.updateBatchById(list); // 批量更新删除状态
}
return R.ok(); // 返回成功
}
//批量上传
@RequestMapping("/batchInsert") // 处理批量上传请求
public R save( String fileName, HttpServletRequest request){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName); // 记录日志
Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))); // 获取用户ID
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 创建日期格式化对象
try {
List<JianshenkechengEntity> jianshenkechengList = new ArrayList<>(); // 创建健身课程列表
Map<String, List<String>> seachFields= new HashMap<>(); // 创建查询字段映射
Date date = new Date(); // 当前时间
int lastIndexOf = fileName.lastIndexOf("."); // 获取文件后缀位置
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); // 获取文件路径
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){
// 循环处理每行数据
JianshenkechengEntity jianshenkechengEntity = new JianshenkechengEntity();
jianshenkechengList.add(jianshenkechengEntity); // 添加到列表
}
// 批量插入数据
jianshenkechengService.insertBatch(jianshenkechengList);
return R.ok(); // 返回成功
}
}
}
}catch (Exception e){
e.printStackTrace(); // 打印异常堆栈
return R.error(511,"批量插入数据异常,请联系管理员"); // 异常处理
}
}
//个性推荐
@IgnoreAuth // 忽略认证
@RequestMapping("/gexingtuijian") // 处理个性推荐请求
public R gexingtuijian(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("gexingtuijian方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params)); // 记录日志
CommonUtil.checkMap(params); // 检查参数
List<JianshenkechengView> returnJianshenkechengViewList = new ArrayList<>(); // 创建返回课程列表
//查看收藏
Map<String, Object> params1 = new HashMap<>(params);params1.put("sort","id");params1.put("yonghuId",request.getSession().getAttribute("userId")); // 设置收藏查询参数
params1.put("shangxiaTypes",1); // 上架状态
params1.put("jianshenkechengYesnoTypes",2); // 审核通过状态
PageUtils pageUtils = jianshenkechengCollectionService.queryPage(params1); // 查询收藏分页数据
List<JianshenkechengCollectionView> collectionViewsList =(List<JianshenkechengCollectionView>)pageUtils.getList(); // 获取收藏列表
Map<Integer,Integer> typeMap=new HashMap<>(); // 创建课程类型统计Map
for(JianshenkechengCollectionView collectionView:collectionViewsList){
Integer jianshenkechengTypes = collectionView.getJianshenkechengTypes(); // 获取课程类型
if(typeMap.containsKey(jianshenkechengTypes)){
typeMap.put(jianshenkechengTypes,typeMap.get(jianshenkechengTypes)+1); // 统计类型数量
}else{
typeMap.put(jianshenkechengTypes,1); // 初始化类型数量
}
}
List<Integer> typeList = new ArrayList<>(); // 创建排序后的类型列表
typeMap.entrySet().stream().sorted((o1, o2) -> o2.getValue() - o1.getValue()).forEach(e -> typeList.add(e.getKey())); // 按数量从多到少排序
Integer limit = Integer.valueOf(String.valueOf(params.get("limit"))); // 获取推荐数量限制
for(Integer type:typeList){
Map<String, Object> params2 = new HashMap<>(params);params2.put("jianshenkechengTypes",type); // 设置类型查询参数
params2.put("shangxiaTypes",1); // 上架状态
params2.put("jianshenkechengYesnoTypes",2); // 审核通过状态
PageUtils pageUtils1 = jianshenkechengService.queryPage(params2); // 查询课程分页数据
List<JianshenkechengView> jianshenkechengViewList =(List<JianshenkechengView>)pageUtils1.getList(); // 获取课程列表
returnJianshenkechengViewList.addAll(jianshenkechengViewList); // 添加到返回列表
if(returnJianshenkechengViewList.size()>= limit) break; // 达到推荐数量限制时跳出循环
}
params.put("shangxiaTypes",1); // 设置上架状态
params.put("jianshenkechengYesnoTypes",2); // 设置审核通过状态
//正常查询出来商品,用于补全推荐缺少的数据
PageUtils page = jianshenkechengService.queryPage(params); // 查询课程分页数据
if(returnJianshenkechengViewList.size()<limit){ // 如果推荐数量不足
int toAddNum = limit - returnJianshenkechengViewList.size(); // 计算需要补充的数量
List<JianshenkechengView> jianshenkechengViewList =(List<JianshenkechengView>)page.getList(); // 获取课程列表
for(JianshenkechengView jianshenkechengView:jianshenkechengViewList){
Boolean addFlag = true;
for(JianshenkechengView returnJianshenkechengView:returnJianshenkechengViewList){
if(returnJianshenkechengView.getId().intValue() ==jianshenkechengView.getId().intValue()) addFlag=false; // 已存在的课程不再添加
}
if(addFlag){
toAddNum=toAddNum-1;
returnJianshenkechengViewList.add(jianshenkechengView); // 添加到返回列表
if(toAddNum==0) break; // 补充足够数量后跳出循环
}
}
}else {
returnJianshenkechengViewList = returnJianshenkechengViewList.subList(0, limit); // 截取指定数量的推荐课程
}
for(JianshenkechengView c:returnJianshenkechengViewList)
dictionaryService.dictionaryConvert(c, request); // 转换字典字段
page.setList(returnJianshenkechengViewList); // 设置返回列表
return R.ok().put("data", page); // 返回推荐数据
}
//前端列表
@IgnoreAuth // 忽略认证
@RequestMapping("/list") // 处理列表请求
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params)); // 记录日志
CommonUtil.checkMap(params); // 检查参数
PageUtils page = jianshenkechengService.queryPage(params); // 查询分页数据
// 字典表数据转换
List<JianshenkechengView> list =(List<JianshenkechengView>)page.getList();
for(JianshenkechengView c:list)
dictionaryService.dictionaryConvert(c, request); // 转换字典字段
return R.ok().put("data", page); // 返回分页数据
}
//前端详情
@RequestMapping("/detail/{id}") // 处理详情请求
public R detail(@PathVariable("id") Integer id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id); // 记录日志
JianshenkechengEntity jianshenkecheng = jianshenkechengService.selectById(id); // 根据ID查询课程
if(jianshenkecheng !=null){
//点击数量加1
jianshenkecheng.setJianshenkechengClicknum(jianshenkecheng.getJianshenkechengClicknum()+1); // 增加点击量
jianshenkechengService.updateById(jianshenkecheng); // 更新课程
//entity转view
JianshenkechengView view = new JianshenkechengView();
BeanUtils.copyProperties( jianshenkecheng , view ); // 把实体数据重构到view中
//级联表
JiaolianEntity jiaolian = jiaolianService.selectById(jianshenkecheng.getJiaolianId()); // 查询关联教练
if(jiaolian != null){
BeanUtils.copyProperties( jiaolian , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney", "jiaolianId"}); // 把级联的数据添加到view中,并排除id和创建时间字段
view.setJiaolianId(jiaolian.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request); // 转换字典字段
return R.ok().put("data", view); // 返回详情数据
}else {
return R.error(511,"查不到数据"); // 查询不到数据返回错误
}
}
//前端保存
@RequestMapping("/add") // 处理添加请求
public R add(@RequestBody JianshenkechengEntity jianshenkecheng, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,jianshenkecheng:{}",this.getClass().getName(),jianshenkecheng.toString()); // 记录日志
Wrapper<JianshenkechengEntity> queryWrapper = new EntityWrapper<JianshenkechengEntity>()
.eq("jiaolian_id", jianshenkecheng.getJiaolianId()) // 教练ID
.eq("jianshenkecheng_name", jianshenkecheng.getJianshenkechengName()) // 课程名称
.eq("jianshenkecheng_video", jianshenkecheng.getJianshenkechengVideo()) // 课程视频
.eq("zan_number", jianshenkecheng.getZanNumber()) // 赞数
.eq("cai_number", jianshenkecheng.getCaiNumber()) // 踩数
.eq("jianshenkecheng_types", jianshenkecheng.getJianshenkechengTypes()) // 课程类型
.eq("jianshenkecheng_clicknum", jianshenkecheng.getJianshenkechengClicknum()) // 点击量
.eq("data_delete", jianshenkecheng.getDataDelete()) // 逻辑删除状态
;
logger.info("sql语句:"+queryWrapper.getSqlSegment()); // 记录SQL语句
JianshenkechengEntity jianshenkechengEntity = jianshenkechengService.selectOne(queryWrapper); // 查询是否已存在相同数据
if(jianshenkechengEntity==null){
jianshenkecheng.setZanNumber(1); // 设置默认赞数
jianshenkecheng.setCaiNumber(1); // 设置默认踩数
jianshenkecheng.setJianshenkechengClicknum(1); // 设置默认点击量
jianshenkecheng.setDataDelete(1); // 设置逻辑删除状态
jianshenkecheng.setInsertTime(new Date()); // 设置插入时间
jianshenkecheng.setCreateTime(new Date()); // 设置创建时间
jianshenkechengService.insert(jianshenkecheng); // 插入新数据
return R.ok(); // 返回成功
}else {
return R.error(511,"表中有相同数据"); // 数据已存在返回错误
}
}
}