diff --git a/DictionaryController.java b/DictionaryController.java new file mode 100644 index 0000000..68ff4e7 --- /dev/null +++ b/DictionaryController.java @@ -0,0 +1,285 @@ +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,"批量插入数据异常,请联系管理员"); // 返回错误响应 + } + } +}