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.
test/src/main/java/com/controller/JiankangjiaoyuController.java

437 lines
21 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;
// 导入文件操作相关类
import java.io.File;
// 导入用于高精度计算的类
import java.math.BigDecimal;
// 导入用于处理URL的类
import java.net.URL;
// 导入用于日期格式化的类
import java.text.SimpleDateFormat;
// 导入阿里巴巴的JSON对象类
import com.alibaba.fastjson.JSONObject;
// 导入常用的集合类
import java.util.*;
// 导入Spring的Bean属性复制工具类
import org.springframework.beans.BeanUtils;
// 导入Servlet请求相关类
import javax.servlet.http.HttpServletRequest;
// 导入Spring的上下文加载器类
import org.springframework.web.context.ContextLoader;
// 导入Servlet上下文类
import javax.servlet.ServletContext;
// 导入令牌服务类
import com.service.TokenService;
// 导入自定义工具类
import com.utils.*;
// 导入反射调用异常类
import java.lang.reflect.InvocationTargetException;
// 导入字典服务类
import com.service.DictionaryService;
// 导入Apache Commons提供的字符串工具类
import org.apache.commons.lang3.StringUtils;
// 导入自定义的忽略权限注解类
import com.annotation.IgnoreAuth;
// 导入日志记录器接口
import org.slf4j.Logger;
// 导入日志记录器工厂类
import org.slf4j.LoggerFactory;
// 导入Spring的自动注入注解
import org.springframework.beans.factory.annotation.Autowired;
// 导入Spring的控制器注解
import org.springframework.stereotype.Controller;
// 导入Spring的请求映射注解
import org.springframework.web.bind.annotation.*;
// 导入MyBatis-Plus的实体包装器类
import com.baomidou.mybatisplus.mapper.EntityWrapper;
// 导入MyBatis-Plus的查询包装器接口
import com.baomidou.mybatisplus.mapper.Wrapper;
// 导入自定义的实体类
import com.entity.*;
// 导入自定义的视图类
import com.entity.view.*;
// 导入自定义的服务类
import com.service.*;
// 导入自定义的分页工具类
import com.utils.PageUtils;
// 导入自定义的响应结果类
import com.utils.R;
// 导入阿里巴巴的JSON工具类
import com.alibaba.fastjson.*;
/**
* 健康教育
* 后端接口
* @author
* @email
*/
// 声明该类为RESTful控制器用于处理HTTP请求并返回JSON数据
@RestController
// 声明该类为Spring MVC控制器
@Controller
// 映射请求路径,所有以/jiankangjiaoyu开头的请求都会由该控制器处理
@RequestMapping("/jiankangjiaoyu")
public class JiankangjiaoyuController {
// 日志记录器,用于记录当前控制器类的日志信息
private static final Logger logger = LoggerFactory.getLogger(JiankangjiaoyuController.class);
// 自动注入健康教育服务类,用于处理健康教育相关业务逻辑
@Autowired
private JiankangjiaoyuService jiankangjiaoyuService;
// 自动注入令牌服务类
@Autowired
private TokenService tokenService;
// 自动注入字典服务类,用于字典表数据转换
@Autowired
private DictionaryService dictionaryService;
// 级联表service自动注入用户服务类
@Autowired
private YonghuService yonghuService;
// 级联表service自动注入医生服务类
@Autowired
private YishengService yishengService;
/**
* 后端列表
*/
// 映射/page请求路径支持GET请求用于获取健康教育信息的分页列表
@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"));
// 此条件永远为false注释掉的代码表示永远不会进入该分支
if (false)
return R.error(511, "永不会进入");
// 如果用户角色为"用户"
else if ("用户".equals(role))
// 在请求参数中添加用户id
params.put("yonghuId", request.getSession().getAttribute("userId"));
// 如果用户角色为"医生"
else if ("医生".equals(role))
// 在请求参数中添加医生id
params.put("yishengId", request.getSession().getAttribute("userId"));
// 设置查询条件限定健康教育未被删除逻辑删除字段值为1
params.put("jiankangjiaoyuDeleteStart", 1);
params.put("jiankangjiaoyuDeleteEnd", 1);
// 如果请求参数中没有指定排序字段则默认按id排序
if (params.get("orderBy") == null || params.get("orderBy") == "") {
params.put("orderBy", "id");
}
// 调用健康教育服务的queryPage方法根据请求参数进行分页查询
PageUtils page = jiankangjiaoyuService.queryPage(params);
// 将分页结果中的列表转换为健康教育视图列表
List<JiankangjiaoyuView> list = (List<JiankangjiaoyuView>) page.getList();
// 遍历健康教育视图列表
for (JiankangjiaoyuView c : list) {
// 调用字典服务的dictionaryConvert方法修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
// 返回成功响应,并将分页查询结果放入响应数据中
return R.ok().put("data", page);
}
/**
* 后端详情
*/
// 映射/info/{id}请求路径支持GET请求{id}为路径变量用于获取指定id的健康教育信息详情
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request) {
// 记录方法调用日志包含控制器类名和请求的id
logger.debug("info方法:,,Controller:{},,id:{}", this.getClass().getName(), id);
// 调用健康教育服务的selectById方法根据id查询健康教育实体
JiankangjiaoyuEntity jiankangjiaoyu = jiankangjiaoyuService.selectById(id);
// 如果查询到健康教育实体
if (jiankangjiaoyu != null) {
// 创建健康教育视图对象
JiankangjiaoyuView view = new JiankangjiaoyuView();
// 使用BeanUtils将健康教育实体的属性复制到健康教育视图中
BeanUtils.copyProperties(jiankangjiaoyu, view);
// 调用字典服务的dictionaryConvert方法修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
// 返回成功响应,并将健康教育视图对象放入响应数据中
return R.ok().put("data", view);
} else {
// 如果未查询到数据返回错误响应错误码为511
return R.error(511, "查不到数据");
}
}
/**
* 后端保存
*/
// 映射/save请求路径支持POST请求用于保存新的健康教育信息
@RequestMapping("/save")
public R save(@RequestBody JiankangjiaoyuEntity jiankangjiaoyu, HttpServletRequest request) {
// 记录方法调用日志,包含控制器类名和要保存的健康教育实体信息
logger.debug("save方法:,,Controller:{},,jiankangjiaoyu:{}", this.getClass().getName(), jiankangjiaoyu.toString());
// 从请求会话中获取用户角色
String role = String.valueOf(request.getSession().getAttribute("role"));
// 此条件永远为false注释掉的代码表示永远不会进入该分支
if (false)
return R.error(511, "永远不会进入");
// 创建查询包装器,用于构建查询条件,检查是否存在相同的健康教育信息
Wrapper<JiankangjiaoyuEntity> queryWrapper = new EntityWrapper<JiankangjiaoyuEntity>()
.eq("jiankangjiaoyu_name", jiankangjiaoyu.getJiankangjiaoyuName())
.eq("jiankangjiaoyu_types", jiankangjiaoyu.getJiankangjiaoyuTypes())
.eq("jiankangjiaoyu_delete", jiankangjiaoyu.getJiankangjiaoyuDelete());
// 记录生成的SQL查询语句
logger.info("sql语句:" + queryWrapper.getSqlSegment());
// 调用健康教育服务的selectOne方法根据查询条件查询是否存在相同数据
JiankangjiaoyuEntity jiankangjiaoyuEntity = jiankangjiaoyuService.selectOne(queryWrapper);
// 如果未查询到相同数据
if (jiankangjiaoyuEntity == null) {
// 设置插入时间为当前时间
jiankangjiaoyu.setInsertTime(new Date());
// 设置逻辑删除字段为1表示未删除
jiankangjiaoyu.setJiankangjiaoyuDelete(1);
// 设置创建时间为当前时间
jiankangjiaoyu.setCreateTime(new Date());
// 调用健康教育服务的insert方法将健康教育实体插入数据库
jiankangjiaoyuService.insert(jiankangjiaoyu);
// 返回成功响应
return R.ok();
} else {
// 如果查询到相同数据返回错误响应错误码为511
return R.error(511, "表中有相同数据");
}
}
/**
* 后端修改
*/
// 映射/update请求路径支持POST请求用于修改已有的健康教育信息
@RequestMapping("/update")
public R update(@RequestBody JiankangjiaoyuEntity jiankangjiaoyu, HttpServletRequest request) {
// 记录方法调用日志,包含控制器类名和要修改的健康教育实体信息
logger.debug("update方法:,,Controller:{},,jiankangjiaoyu:{}", this.getClass().getName(), jiankangjiaoyu.toString());
// 从请求会话中获取用户角色
String role = String.valueOf(request.getSession().getAttribute("role"));
// 此条件注释掉,表示永远不会进入该分支
// if (false)
// return R.error(511, "永远不会进入");
// 创建查询包装器,用于构建查询条件,排除当前要修改的记录,检查是否存在相同的健康教育信息
Wrapper<JiankangjiaoyuEntity> queryWrapper = new EntityWrapper<JiankangjiaoyuEntity>()
.notIn("id", jiankangjiaoyu.getId())
.andNew()
.eq("jiankangjiaoyu_name", jiankangjiaoyu.getJiankangjiaoyuName())
.eq("jiankangjiaoyu_types", jiankangjiaoyu.getJiankangjiaoyuTypes())
.eq("jiankangjiaoyu_delete", jiankangjiaoyu.getJiankangjiaoyuDelete());
// 记录生成的SQL查询语句
logger.info("sql语句:" + queryWrapper.getSqlSegment());
// 调用健康教育服务的selectOne方法根据查询条件查询是否存在相同数据
JiankangjiaoyuEntity jiankangjiaoyuEntity = jiankangjiaoyuService.selectOne(queryWrapper);
// 如果健康教育照片字段为空字符串或"null"则将其设置为null
if ("".equals(jiankangjiaoyu.getJiankangjiaoyuPhoto()) || "null".equals(jiankangjiaoyu.getJiankangjiaoyuPhoto())) {
jiankangjiaoyu.setJiankangjiaoyuPhoto(null);
}
// 如果未查询到相同数据
if (jiankangjiaoyuEntity == null) {
// 调用健康教育服务的updateById方法根据id更新健康教育实体
jiankangjiaoyuService.updateById(jiankangjiaoyu);
// 返回成功响应
return R.ok();
} else {
// 如果查询到相同数据返回错误响应错误码为511
return R.error(511, "表中有相同数据");
}
}
/**
* 删除
*/
// 映射/delete请求路径支持POST请求用于删除健康教育信息逻辑删除
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids) {
// 记录方法调用日志包含控制器类名和要删除的记录id数组
logger.debug("delete:,,Controller:{},,ids:{}", this.getClass().getName(), ids.toString());
// 创建一个ArrayList用于存储要更新的健康教育实体
ArrayList<JiankangjiaoyuEntity> list = new ArrayList<>();
// 遍历要删除的记录id数组
for (Integer id : ids) {
// 创建一个新的健康教育实体
JiankangjiaoyuEntity jiankangjiaoyuEntity = new JiankangjiaoyuEntity();
// 设置健康教育实体的id
jiankangjiaoyuEntity.setId(id);
// 设置逻辑删除字段为2表示已删除
jiankangjiaoyuEntity.setJiankangjiaoyuDelete(2);
// 将健康教育实体添加到列表中
list.add(jiankangjiaoyuEntity);
}
// 如果列表不为空
if (list != null && list.size() > 0) {
// 调用健康教育服务的updateBatchById方法批量更新健康教育实体
jiankangjiaoyuService.updateBatchById(list);
}
// 返回成功响应
return R.ok();
}
/**
* 批量上传
*/
// 映射/batchInsert请求路径支持POST请求用于批量上传健康教育信息
@RequestMapping("/batchInsert")
public R save(String fileName) {
// 记录方法调用日志,包含控制器类名和文件名
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}", this.getClass().getName(), fileName);
try {
// 创建一个列表,用于存储要上传的健康教育实体
List<JiankangjiaoyuEntity> jiankangjiaoyuList = new ArrayList<>();
// 创建一个Map用于存储要查询的字段
Map<String, List<String>> seachFields = new HashMap<>();
// 获取当前时间
Date date = new Date();
// 获取文件名中最后一个点的索引
int lastIndexOf = fileName.lastIndexOf(".");
// 如果文件名中没有点返回错误响应错误码为511
if (lastIndexOf == -1) {
return R.error(511, "该文件没有后缀");
} else {
// 获取文件后缀
String suffix = fileName.substring(lastIndexOf);
// 如果文件后缀不是.xls返回错误响应错误码为511
if (!".xls".equals(suffix)) {
return R.error(511, "只支持后缀为xls的excel文件");
} else {
// 获取文件的URL
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);
// 创建文件对象
File file = new File(resource.getFile());
// 如果文件不存在返回错误响应错误码为511
if (!file.exists()) {
return R.error(511, "找不到上传文件,请联系管理员");
} else {
// 使用PoiUtil工具类读取xls文件的数据
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());
// 删除第一行数据,因为第一行通常是表头
dataList.remove(0);
// 遍历数据列表
for (List<String> data : dataList) {
// 创建一个新的健康教育实体
JiankangjiaoyuEntity jiankangjiaoyuEntity = new JiankangjiaoyuEntity();
// 以下代码注释掉,表示需要根据实际情况修改字段赋值
// jiankangjiaoyuEntity.setJiankangjiaoyuName(data.get(0)); //健康教育标题 要改的
// jiankangjiaoyuEntity.setJiankangjiaoyuTypes(Integer.valueOf(data.get(0))); //健康教育类型 要改的
// jiankangjiaoyuEntity.setJiankangjiaoyuPhoto("");//照片
// jiankangjiaoyuEntity.setInsertTime(date);//时间
// jiankangjiaoyuEntity.setJiankangjiaoyuContent("");//照片
// jiankangjiaoyuEntity.setJiankangjiaoyuDelete(1);//逻辑删除字段
// jiankangjiaoyuEntity.setCreateTime(date);//时间
// 将健康教育实体添加到上传列表中
jiankangjiaoyuList.add(jiankangjiaoyuEntity);
// 把要查询是否重复的字段放入map中
}
// 调用健康教育服务的insertBatch方法批量插入健康教育实体
jiankangjiaoyuService.insertBatch(jiankangjiaoyuList);
// 返回成功响应
return R.ok();
}
}
}
} catch (Exception e) {
// 如果发生异常返回错误响应错误码为511
return R.error(511, "批量插入数据异常,请联系管理员");
}
}
/**
* 前端列表
*/
// 映射/list请求路径支持GET请求用于前端获取健康教育信息的分页列表忽略权限验证
@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");
}
// 调用健康教育服务的queryPage方法根据请求参数进行分页查询
PageUtils page = jiankangjiaoyuService.queryPage(params);
// 将分页结果中的列表转换为健康教育视图列表
List<JiankangjiaoyuView> list = (List<JiankangjiaoyuView>) page.getList();
// 遍历健康教育视图列表
for (JiankangjiaoyuView c : list)
// 调用字典服务的dictionaryConvert方法修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
// 返回成功响应,并将分页查询结果放入响应数据中
return R.ok().put("data", page);
}
/**
* 前端详情
*/
// 映射/detail/{id}请求路径支持GET请求{id}为路径变量用于前端获取指定id的健康教育信息详情
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request) {
// 记录方法调用日志包含控制器类名和请求的id
logger.debug("detail方法:,,Controller:{},,id:{}", this.getClass().getName(), id);
// 调用健康教育服务的selectById方法根据id查询健康教育实体
JiankangjiaoyuEntity jiankangjiaoyu = jiankangjiaoyuService.selectById(id);
// 如果查询到健康教育实体
if (jiankangjiaoyu != null) {
// 创建健康教育视图对象
JiankangjiaoyuView view = new JiankangjiaoyuView();
// 使用BeanUtils将健康教育实体的属性复制到健康教育视图中
BeanUtils.copyProperties(jiankangjiaoyu, view);
// 调用字典服务的dictionaryConvert方法修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
// 返回成功响应,并将健康教育视图对象放入响应数据中
return R.ok().put("data", view);
} else {
// 如果未查询到数据返回错误响应错误码为511
return R.error(511, "查不到数据");
}
}
/**
* 前端保存
*/
// 映射/add请求路径支持POST请求用于前端保存新的健康教育信息
@RequestMapping("/add")
public R add(@RequestBody JiankangjiaoyuEntity jiankangjiaoyu, HttpServletRequest request) {
// 记录方法调用日志,包含控制器类名和要保存的健康教育实体信息
logger.debug("add方法:,,Controller:{},,jiankangjiaoyu:{}", this.getClass().getName(), jiankangjiaoyu.toString());
// 创建查询包装器,用于构建查询条件,检查是否存在相同的健康教育信息
Wrapper<JiankangjiaoyuEntity> queryWrapper = new EntityWrapper<JiankangjiaoyuEntity>()
.eq("jiankangjiaoyu_name", jiankangjiaoyu.getJiankangjiaoyuName())
.eq("jiankangjiaoyu_types", jiankangjiaoyu.getJiankangjiaoyuTypes())
.eq("jiankangjiaoyu_delete", jiankangjiaoyu.getJiankangjiaoyuDelete());
// 记录生成的SQL查询语句
logger.info("sql语句:" + queryWrapper.getSqlSegment());
// 调用健康教育服务的selectOne方法根据查询条件查询是否存在相同数据
JiankangjiaoyuEntity jiankangjiaoyuEntity = jiankangjiaoyuService.selectOne(queryWrapper);
// 如果未查询到相同数据
if (jiankangjiaoyuEntity == null) {
// 设置插入时间为当前时间
jiankangjiaoyu.setInsertTime(new Date());
// 设置逻辑删除字段为1表示未删除
jiankangjiaoyu.setJiankangjiaoyuDelete(1);
// 设置创建时间为当前时间
jiankangjiaoyu.setCreateTime(new Date());
// 调用健康教育服务的insert方法将健康教育实体插入数据库
jiankangjiaoyuService.insert(jiankangjiaoyu);
// 返回成功响应
return R.ok();
} else {
// 如果查询到相同数据返回错误响应错误码为511
return R.error(511, "表中有相同数据");
}
}
}