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 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 list = (List) 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 queryWrapper = new EntityWrapper() .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 queryWrapper = new EntityWrapper() .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 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 jiankangjiaoyuList = new ArrayList<>(); // 创建一个Map,用于存储要查询的字段 Map> 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> dataList = PoiUtil.poiImport(file.getPath()); // 删除第一行数据,因为第一行通常是表头 dataList.remove(0); // 遍历数据列表 for (List 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 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 list = (List) 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 queryWrapper = new EntityWrapper() .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, "表中有相同数据"); } } }