package com.controller; // 文件操作相关类 import java.io.File; // 高精度数学计算类 import java.math.BigDecimal; // 网络URL处理类 import java.net.URL; // 日期格式化类 import java.text.SimpleDateFormat; // FastJSON的JSON对象处理类 import com.alibaba.fastjson.JSONObject; // Java集合框架类 import java.util.*; // Spring Bean属性复制工具类 import org.springframework.beans.BeanUtils; // HTTP请求处理类 import javax.servlet.http.HttpServletRequest; // Spring Web上下文加载器 import org.springframework.web.context.ContextLoader; // Servlet上下文接口 import javax.servlet.ServletContext; // 自定义Token服务接口 import com.service.TokenService; // 自定义工具类包 import com.utils.*; // Java反射异常类 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 Web映射注解包 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; // FastJSON包 import com.alibaba.fastjson.*; //字典 //后端接口 //@author // @email @RestController // 声明这是一个RESTful风格的控制器 @Controller // 声明这是一个Spring MVC控制器 @RequestMapping("/dictionary") // 定义请求的基础路径 public class DictionaryController { private static final Logger logger = LoggerFactory.getLogger(DictionaryController.class); // 日志记录器 private static final String TABLE_NAME = "dictionary"; // 表名常量 @Autowired private DictionaryService dictionaryService; // 注入字典服务 @Autowired private TokenService tokenService; // 注入Token服务 @Autowired private ForumService forumService; // 注入健身论坛服务 @Autowired private JianshenkechengService jianshenkechengService; // 注入健身课程服务 @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") // 处理分页请求 @IgnoreAuth // 忽略鉴权 public R page(@RequestParam Map params, HttpServletRequest request){ logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params)); // 记录日志 CommonUtil.checkMap(params); // 检查参数 PageUtils page = dictionaryService.queryPage(params); // 调用服务查询分页数据 // 字典表数据转换 List list =(List)page.getList(); // 获取分页数据列表 for(DictionaryView 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); // 记录日志 DictionaryEntity dictionary = dictionaryService.selectById(id); // 根据ID查询字典数据 if(dictionary !=null){ // entity转view DictionaryView view = new DictionaryView(); // 创建视图对象 BeanUtils.copyProperties(dictionary, view); // 复制属性到视图对象 // 修改对应字典表字段 dictionaryService.dictionaryConvert(view, request); // 转换字典数据 return R.ok().put("data", view); // 返回成功响应和数据 }else { return R.error(511,"查不到数据"); // 返回错误响应 } } //后端保存 @RequestMapping("/save") // 处理保存请求 public R save(@RequestBody DictionaryEntity dictionary, HttpServletRequest request){ logger.debug("save方法:,,Controller:{},,dictionary:{}",this.getClass().getName(),dictionary.toString()); // 记录日志 String role = String.valueOf(request.getSession().getAttribute("role")); // 获取用户角色 if(false) return R.error(511,"永远不会进入"); // 模拟条件判断 Wrapper queryWrapper = new EntityWrapper() .eq("dic_code", dictionary.getDicCode()) // 构建查询条件 .eq("index_name", dictionary.getIndexName()); if(dictionary.getDicCode().contains("_erji_types")){ queryWrapper.eq("super_id",dictionary.getSuperId()); // 如果是二级类型,添加父ID条件 } logger.info("sql语句:"+queryWrapper.getSqlSegment()); // 记录SQL语句 DictionaryEntity dictionaryEntity = dictionaryService.selectOne(queryWrapper); // 查询是否已存在相同数据 if(dictionaryEntity==null){ dictionary.setCreateTime(new Date()); // 设置创建时间 dictionaryService.insert(dictionary); // 插入新数据 // 字典表新增数据,把数据再重新查出,放入监听器中 List dictionaryEntities = dictionaryService.selectList(new EntityWrapper()); // 查询所有字典数据 ServletContext servletContext = request.getServletContext(); // 获取ServletContext Map> map = new HashMap<>(); // 创建字典映射 for(DictionaryEntity d :dictionaryEntities){ Map m = map.get(d.getDicCode()); // 获取当前字典代码的映射 if(m ==null || m.isEmpty()){ m = new HashMap<>(); // 如果不存在则创建新映射 } m.put(d.getCodeIndex(),d.getIndexName()); // 添加编码和名称到映射 map.put(d.getDicCode(),m); // 将映射放入字典映射中 } servletContext.setAttribute("dictionaryMap",map); // 将字典映射存入ServletContext return R.ok(); // 返回成功响应 }else { return R.error(511,"表中有相同数据"); // 返回错误响应 } } //后端修改 @RequestMapping("/update") // 处理更新请求 public R update(@RequestBody DictionaryEntity dictionary, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException { logger.debug("update方法:,,Controller:{},,dictionary:{}",this.getClass().getName(),dictionary.toString()); // 记录日志 DictionaryEntity oldDictionaryEntity = dictionaryService.selectById(dictionary.getId()); // 查询原数据 String role = String.valueOf(request.getSession().getAttribute("role")); // 获取用户角色 // if(false) // return R.error(511,"永远不会进入"); dictionaryService.updateById(dictionary); // 根据ID更新数据 // 如果字典表修改数据的话,把数据再重新查出,放入监听器中 List dictionaryEntities = dictionaryService.selectList(new EntityWrapper()); // 查询所有字典数据 ServletContext servletContext = request.getServletContext(); // 获取ServletContext Map> map = new HashMap<>(); // 创建字典映射 for(DictionaryEntity d :dictionaryEntities){ Map m = map.get(d.getDicCode()); // 获取当前字典代码的映射 if(m ==null || m.isEmpty()){ m = new HashMap<>(); // 如果不存在则创建新映射 } m.put(d.getCodeIndex(),d.getIndexName()); // 添加编码和名称到映射 map.put(d.getDicCode(),m); // 将映射放入字典映射中 } servletContext.setAttribute("dictionaryMap",map); // 将字典映射存入ServletContext return R.ok(); // 返回成功响应 } //删除 @RequestMapping("/delete") // 处理删除请求 public R delete(@RequestBody Integer[] ids, HttpServletRequest request){ logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString()); // 记录日志 List oldDictionaryList =dictionaryService.selectBatchIds(Arrays.asList(ids)); // 查询要删除的数据 dictionaryService.deleteBatchIds(Arrays.asList(ids)); // 批量删除数据 return R.ok(); // 返回成功响应 } //最大值 @RequestMapping("/maxCodeIndex") // 处理获取最大编码请求 public R maxCodeIndex(@RequestBody DictionaryEntity dictionary){ logger.debug("maxCodeIndex:,,Controller:{},,dictionary:{}",this.getClass().getName(),dictionary.toString()); // 记录日志 List descs = new ArrayList<>(); // 创建排序字段列表 descs.add("code_index"); // 添加排序字段 Wrapper queryWrapper = new EntityWrapper() .eq("dic_code", dictionary.getDicCode()) // 构建查询条件 .orderDesc(descs); // 添加排序条件 logger.info("sql语句:"+queryWrapper.getSqlSegment()); // 记录SQL语句 List dictionaryEntityList = dictionaryService.selectList(queryWrapper); // 查询数据 if(dictionaryEntityList.size()>0 ){ return R.ok().put("maxCodeIndex",dictionaryEntityList.get(0).getCodeIndex()+1); // 返回最大编码加1 }else{ return R.ok().put("maxCodeIndex",1); // 返回默认值1 } } //批量上传 @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 dictionaryList = new ArrayList<>(); // 创建字典数据列表 Map> 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> dataList = PoiUtil.poiImport(file.getPath()); // 读取Excel文件 dataList.remove(0); // 删除第一行标题 for(List data:dataList){ // 循环处理每一行数据 DictionaryEntity dictionaryEntity = new DictionaryEntity(); // 创建字典实体 // dictionaryEntity.setDicCode(data.get(0)); // 设置字段代码(示例) // dictionaryEntity.setDicName(data.get(0)); // 设置字段名(示例) // dictionaryEntity.setCodeIndex(Integer.valueOf(data.get(0))); // 设置编码(示例) // dictionaryEntity.setIndexName(data.get(0)); // 设置编码名(示例) // dictionaryEntity.setSuperId(Integer.valueOf(data.get(0))); // 设置父ID(示例) // dictionaryEntity.setBeizhu(data.get(0)); // 设置备注(示例) // dictionaryEntity.setCreateTime(date); // 设置创建时间(示例) dictionaryList.add(dictionaryEntity); // 添加到列表 } dictionaryService.insertBatch(dictionaryList); // 批量插入数据 return R.ok(); // 返回成功响应 } } } }catch (Exception e){ e.printStackTrace(); // 打印异常堆栈 return R.error(511,"批量插入数据异常,请联系管理员"); // 返回错误响应 } } }