Java项目:SSM汽车保险车险理赔管理系统
作者主页:夜未央5788
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
项目介绍
本项目包含管理员、财务、用户、审核人员、外派人员等多种角色;
管理员角色包含以下功能:
管理员登陆,用户管理,理赔知识管理,理赔账单管理等功能。
财务角色包含以下功能:
财务登录,理赔发放等功能。
用户角色包含以下功能:
用户登录,我的保险,理赔知识查看,个人信息以及密码修改,提交的保单管理,理赔账单管理等功能。
审核人员角色包含以下功能:
事故认定审核,审核人员登录,理赔审核等功能。
外派人员角色包含以下功能:
外派人员登录,外派审核管理等功能。
PS:流程是用户提交理赔表单,审核人员审核,外派人员登录后认定结果,然后审核人员再次审核并给出赔偿金额,最后财务登录发放赔偿。
由于本程序规模不大,可供课程设计,毕业设计学习演示之用
环境需要
1.运行环境:java jdk 7; 注:本项目暂只支持jdk7,其它jdk版本暂不支持;。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.0;注:本项目暂只支持Tomcat 7.0,其它版本暂不支持;
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven项目:是;
技术栈
1. 后端:Spring+SpringMVC+Mybatis
2. 前端:JSP+CSS+JavaScript+jquery+bootstrap
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中db.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,输入localhost:8080/ssm_insurance_sys 登录
运行截图
管理员角色
财务角色
审核人员角色
外派人员角色
用户角色
代码相关
管理端控制器
@Controller
public class AdminController {@Autowiredprivate UserService userService;@Autowiredpublic CategoryService categoryService;@Autowiredpublic CategorySecondService categorySecondService;@Autowiredpublic ProductService productService;@Autowiredprivate OrderService orderService;@Autowiredprivate MessageService messageService;@RequestMapping("/admin/admin_findAll")public String admin_findAll(Model model, HttpServletRequest request) throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}List<User> userList = userService.admin_findAll();model.addAttribute("userList", userList);return "admin/user/list";}@RequestMapping("/admin/adminCategory_findAll")public String adminCategory_findAll(Model model, HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}List<Category> categoryList = categoryService.adminbFindCategory();/*for (Category category : categoryList) {System.out.println(category.getCname());}*/model.addAttribute("categoryList", categoryList);return "admin/category/list";}@RequestMapping("/admin/adminCategory_add")public String adminCategory_add(Model model,HttpServletRequest request) throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}
// List<Category> categoryList = categoryService.adminbFindCategory();
// model.addAttribute("categoryList", categoryList);return "admin/category/add";}@RequestMapping("/admin/adminCategory_save")public String adminCategory_save(@RequestParam String cname,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}Category addCategory = new Category();addCategory.setCname(cname);categoryService.addCategory(addCategory);return "redirect:/admin/adminCategory_findAll.action";}@RequestMapping("/admin/adminCategory_edit")public String adminCategory_delete(@RequestParam int cid, Model model,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}Category existCategory = categoryService.findCategory(cid);model.addAttribute("existCategory", existCategory);return "admin/category/edit";}@RequestMapping("/admin/adminCategory_update")public String adminCategory_update(@RequestParam int cid,@RequestParam String cname,HttpServletRequest request) {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}Category category = new Category();category.setCid(cid);category.setCname(cname);categoryService.adminCategory_update(category);return "redirect:/admin/adminCategory_findAll.action";}@RequestMapping("/admin/adminCategory_delete")public String adminCategory_delete(@RequestParam int cid,HttpServletRequest request) throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}categorySecondService.adminCategorySecond_deleteByCid(cid);categoryService.deleteCategoryByCid(cid);return "redirect:/admin/adminCategory_findAll.action";}// admin 的二级分类的管理@RequestMapping("/admin/adminCategorySecond_findAllByPage")public String adminCategorySecond_findAllByPage(@RequestParam int page,Model model,HttpServletRequest request) {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}PageBean<Categorysecond> csPageBean = categorySecondService.adminCategorySecond_findAllByPage(page);/*List<Categorysecond> list = csPageBean.getList();for (Categorysecond categorysecond : list) {System.out.println(categorysecond.getCsname());}*/model.addAttribute("csPageBean", csPageBean);return "admin/categorysecond/list";}@RequestMapping("admin/adminCategorySecond_addPage")public String adminCategorySecond_addPage(Model model,HttpServletRequest request) throws Exception{Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}List<Category> categoryList = categoryService.adminbFindCategory();model.addAttribute("categoryList", categoryList);return "admin/categorysecond/add";}@RequestMapping("admin/adminCategorySecond_save")public String adminCategorySecond_save(@RequestParam String csname,@RequestParam int cid,HttpServletRequest request) throws Exception{Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}Categorysecond categorysecond = new Categorysecond();categorysecond.setCsname(csname);categorysecond.setCid(cid);categorySecondService.adminCategorySecond_save(categorysecond);return "redirect:/admin/adminCategorySecond_findAllByPage.action?page=1";}@RequestMapping("admin/adminCategorySecond_edit")public String adminCategorySecond_edit(@RequestParam int csid,Model model,HttpServletRequest request) throws Exception{Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}Categorysecond findByCsid = categorySecondService.findByCsid(csid);model.addAttribute("findByCsid", findByCsid);return "admin/categorysecond/edit";}@RequestMapping("admin/adminCategorySecond_update")public String adminCategorySecond_update(@RequestParam String csname,@RequestParam int csid,HttpServletRequest request){Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}Categorysecond categorysecond = new Categorysecond();categorysecond.setCsname(csname);categorysecond.setCsid(csid);categorySecondService.adminCategorySecond_update(categorysecond);return "redirect:/admin/adminCategorySecond_findAllByPage.action?page=1";}@RequestMapping("admin/adminCategorySecond_delete")public String adminCategorySecond_delete(@RequestParam int csid,HttpServletRequest request) throws Exception{Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}categorySecondService.adminCategorySecond_delete(csid);return "redirect:/admin/adminCategorySecond_findAllByPage.action?page=1";}//admin的商品管理@RequestMapping("/admin/adminProduct_findAllByPage")public String adminProduct_findAllByPage(@RequestParam int page, Model model,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}PageBean<Product> allProPageBean = productService.findAllProduct(page);model.addAttribute("allProPageBean", allProPageBean);return "admin/product/list";}@RequestMapping("/admin/adminProduct_addPage")public String adminProduct_addPage(Model model,HttpServletRequest request) throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}//查询出所有的二级分类List<Categorysecond> cslist = categorySecondService.findAll();/*for (Categorysecond categorysecond : cslist) {System.out.println(categorysecond.getCsname());}*/model.addAttribute("cslist", cslist);return "admin/product/add";}@RequestMapping("/admin/adminProduct_save")public String adminProduct_save(Product product,HttpServletRequest request,MultipartFile file) throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}product.setPdate(new Date());
// 上传图片if (file != null) {String path = request.getServletContext().getRealPath("/products");String uploadFileName = file.getOriginalFilename();String fileName = UUIDUtiils.getUUID()+uploadFileName;File diskFile = new File(path + "//" + fileName);file.transferTo(diskFile);product.setImage("products/" + fileName);}System.out.println(product.getImage());productService.adminProduct_save(product);return "redirect:/admin/adminProduct_findAllByPage.action?page=1";}@RequestMapping("admin/adminProduct_deletecs")public String adminProduct_deletecs(@RequestParam int pid,HttpServletRequest request) throws Exception{Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}productService.adminProduct_deletecs(pid);return "redirect:/admin/adminProduct_findAllByPage.action?page=1";}/*** 编辑商品* * @param pid* @param model* @param request* @return* @throws Exception*/@RequestMapping("admin/adminProduct_edit")public String adminProduct_edit(@RequestParam int pid,Model model,HttpServletRequest request) throws Exception{Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}Product product = productService.finbProductByPid(pid);model.addAttribute("findByPid", product);//查询出所有的二级分类List<Categorysecond> cslist = categorySecondService.findAll();model.addAttribute("cslist", cslist);return "admin/product/edit";}@RequestMapping("/admin/adminProduct_update")public String adminProduct_update(Product product,HttpServletRequest request,MultipartFile file) throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}product.setPdate(new Date());
// 上传图片if (file != null) {String path = request.getServletContext().getRealPath("/products");String uploadFileName = file.getOriginalFilename();String fileName = UUIDUtiils.getUUID()+uploadFileName;File diskFile = new File(path + "//" + fileName);file.transferTo(diskFile);product.setImage("products/" + fileName);}productService.adminProduct_update(product);return "redirect:/admin/adminProduct_findAllByPage.action?page=1";}/** 订单管理模块 **/@RequestMapping("/admin/adminOrder_findAllByPage")public String adminOrder_findAllByPage(@RequestParam int page, Model model,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}PageBean<Orders> allProPageBean = orderService.findAllOrderByStateAndPage(page);model.addAttribute("pageBean", allProPageBean);return "admin/order/list";}//adminOrder_findByState@RequestMapping("/admin/adminOrder_findByState")public String adminOrder_findByState(@RequestParam int page,@RequestParam int state, Model model,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}PageBean<Orders> allProPageBean = orderService.findAllOrderByStateAndPage(state,page);model.addAttribute("pageBean", allProPageBean);return "admin/order/list";}//订单详情//adminOrder_findOrderItem@RequestMapping("/admin/adminOrder_findOrderItem")public String adminOrder_findOrderItem(@RequestParam int oid, Model model,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}Orders orderItems = orderService.findOrderByOid(oid);model.addAttribute("orderItems", orderItems);return "admin/order/list";}//更新订单状态@RequestMapping("/admin/adminOrder_updateState")public String adminOrder_updateState(@RequestParam int oid, @RequestParam int status, Model model,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}orderService.updateOrderStatus(oid, status);return "redirect:/admin/adminOrder_findAllByPage.action?page=1";}//后台留言管理 @RequestMapping("/admin/adminMessage_findAllByPage")public String adminMessage_findAllByPage(@RequestParam int page, Model model,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}PageBean<Message> pageBean = messageService.findAllMessageByPage(page);model.addAttribute("pageBean", pageBean);return "admin/message/list";}@RequestMapping("/admin/adminMessage_delete")public String adminOrder_updateState(@RequestParam int messageid, Model model,HttpServletRequest request)throws Exception {Adminuser adminuserLogin = (Adminuser) request.getSession().getAttribute("adminuserLogin");if(adminuserLogin==null){request.getSession().setAttribute("message","对不起您还没有登录");return "admin/index";}messageService.deleteMessage(messageid);return "redirect:/admin/adminMessage_findAllByPage.action?page=1";}}
登录控制器
@Controller
public class loginController {@Autowiredprivate UserService userService;@RequestMapping("login")public String login() {return "login";}// 用户登录@RequestMapping("/userLogin")public String userLogin(HttpServletRequest request,@RequestParam String checkImg, User user, Model model)throws zdyException, Exception {String sessionCode = (String) request.getSession().getAttribute("checkcode");if (!sessionCode.equalsIgnoreCase(checkImg)) {//model.addAttribute("message", "验证码输入错误请重新注册");//throw new zdyException("验证码输入错误请重新注册");request.getSession().setAttribute("message", "验证码输入错误请重新注册");return "redirect:login.action";}User loginUser = userService.loginFindByUnameAndPwd(user.getUsername(),user.getPassword());if (loginUser == null) {//model.addAttribute("message", "密码输入错误请重新登陆");request.getSession().setAttribute("message", "密码输入错误请重新登陆");//throw new zdyException("密码输入错误请重新登陆");return "redirect:login.action";}request.getSession().setAttribute("loginUser", loginUser);request.getSession().removeAttribute("message");return "redirect:index.action";}// 用户退出@RequestMapping("userLogout")public String userLogout(HttpServletRequest request,HttpServletResponse response, Model model) {request.getSession().removeAttribute("loginUser");response.setHeader("content-type", "text/html;charset=UTF-8");response.setHeader("refresh", "5;url=/shop/index.action");model.addAttribute("message", "退出成功,系统将在5秒之后跳转到首页......");return "msg";}//进入管理员页面@RequestMapping("/admin")public String AdminIndex(){return "admin/index";}//admin/adminUser_login.action//adminUser_login管理员登录@RequestMapping("/admin/adminUser_login")public String adminUser_login(HttpServletRequest request,Model model,@RequestParam String username,@RequestParam String password) throws Exception{Adminuser adminuserLogin = userService.adminUser_login(username,password);System.out.println(username);System.out.println(password);if(adminuserLogin == null){model.addAttribute("message", "改用户未被授予管理员身份!");return "admin/index";}request.getSession().setAttribute("adminuserLogin", adminuserLogin);
// model.addAttribute("adminuserLogin", adminuserLogin);return "admin/home";}}
注册控制器
@Controller
public class registController {@Autowiredprivate UserService userService;@RequestMapping("regist")public String regist() {return "regist";}@RequestMapping("/userRegist")public String userRegist(Model model, HttpServletRequest request,@Validated User user, BindingResult bindingResult,@RequestParam String checkImg) throws Exception {if (bindingResult.hasErrors()) {List<ObjectError> errors =bindingResult.getAllErrors();List<String> list = new ArrayList<>();for (ObjectError objectError : errors) {String str = new String(objectError.getDefaultMessage().getBytes("ISO-8859-1"), "gbk");list.add(str);}model.addAttribute("errors", list);return "regist";}// 查看验证码String sessionCode = (String) request.getSession().getAttribute("checkcode");
// System.out.println("adadadad" + sessionCode);if (!sessionCode.equalsIgnoreCase(checkImg)) {
// model.addAttribute("message", "验证码错误请重新注册");throw new zdyException("验证码错误请重新注册");}// 开始写入数据库userService.saveUser(user);//model.addAttribute("message", "注册成功请去邮箱激活");model.addAttribute("message", "注册成功请登录");return "msg";}@RequestMapping("/activeUser")public String activeUser(@RequestParam String code,Model model) throws zdyException,Exception {/** 根据传递激活码进行用户查询. 如果用户不为空: 修改用户状态 改为1 如果用户为空: 激活码被篡改了.*/User activeUser = userService.findByCode(code);if(activeUser==null){
// model.addAttribute("message", "激活码被篡改了,请重新注册");throw new zdyException("激活码被篡改了,请重新注册");}activeUser.setState(1);activeUser.setCode(null);userService.activeUser(activeUser);model.addAttribute("message", "激活码成功");return "msg";}
}
如果也想学习本系统,下面领取。关注并回复:124ssm
Java项目:SSM汽车保险车险理赔管理系统相关推荐
- 基于java平台的车险理赔管理系统
技术:Java.JSP等 摘要: 传统的车险理赔管理系统中,采用的是简单不安全,并且操作平台受到很大限制的系统,这种模式在业务需求上明显无法适应如今汽车保险复杂而细致的要求. 根据当前的保险行业情况, ...
- 基于java项目ssm二手书交易平台设计与实现(论文+程序设计源码+数据库文件)
1 绪论 4 1.1 项目开发背景 4 1.2 项目开发意义 5 1.3 项目主要的内容 5 2 相关技术介绍及系统环境开发条件 6 2.1相关技术介绍 6 2.2系统环境开发条件 7 3 系统的需求 ...
- 基于java(ssm)大学生社团管理系统源码成品(java毕业设计)
基于java(ssm)大学生社团管理系统 大学生社团管理系统是基于java编程语言,mysql数据库,ssm框架和idea工具开发,本系统分为学生,管理员,社团负责人三个角色,学生可以注册登陆系统,查 ...
- 基于java(ssm)个人健康管理系统
基于java(ssm)个人健康管理系统 健康管理系统是基于java编程语言,mysql数据库,ssm框架,idea开发工具进行开发,本设计主要分为用户,医师,管理员三个角色,其中用户的主要功能是注册, ...
- Java项目开发:学生社团管理系统
Java项目开发:学生社团管理系统 @author:Mr.Gu @date:2021/5/31 文章目录 Java项目开发:学生社团管理系统 项目需求 开发环境 项目效果 二.项目源码 1.创建登录J ...
- Java项目开发,学生信息管理系统
Java项目开发,学生信息管理系统 @author:Mr.Gu @date:2020/5/31 开发时间大二年级,数据结构综合实习 文章目录 Java项目开发,学生信息管理系统 开发效果 开发要求 开 ...
- Java项目实战(企业人事管理系统)-李兴华-专题视频课程
Java项目实战(企业人事管理系统)-7733人已学习 课程介绍 本课程主要为Java项目开发课程,在整体课程之中主要以一个实际的雇员信息管理项目为例,讲解了企业人事系统的基础开发,在 ...
- Java项目ssm企业工资管理系统源码
Java版ssm企业工资管理系统,源码免费分享,需要可私信. 项目技术:jsp+mysql+Spring+mybatis 运行环境:最好是java jdk 1.8,我们在这个平台上运行的.其他版本理论 ...
- Java项目:Springboot快递物流管理系统
作者主页:夜未央5788 简介:Java领域优质创作者.Java项目.学习资料.技术互助 文末获取源码 Express-System 使用 spring boot,基于 ssm 框架和 shiro 安 ...
最新文章
- 重大要素改变中的机会选择包括_财务人员专业胜任能力要素及框架
- 行业「趋轻」,尚美“共创品牌”推动酒店业进入春天
- bootstrap到底是用来做什么的(概念)
- C++为什么空格无法输出_OOP 面向对象编程:由 C 到 C++
- 如何设置Fedora默认从命令行启动?
- CCF202012-2 期末预测之最优阈值
- 如何更改应用路径_【电脑】实用技巧分享:如何更改电脑桌面路径?
- 远程注入利用远程线程直接注入
- 邮件管理数据库设计--MySQL
- 有趣的计算机黑科技,6个让你欲罢不能的电脑黑科技软件,我一定要分享出来!...
- html获取页面高度,js获取各种高度
- Word如何删除最后一页空白页的五种方法
- 微软「警告」员工不要在愚人节搞事情,为什么?
- 【股票】股票是什么?什么情况下股票会涨?
- 服务器无法远程的原因
- 固态硬盘(SSD) 和机 械硬盘(HDD) 优缺点比較
- c语言ATM机文件储存账号密码,C语言ATM(有文件输入输出).doc
- Tushare所有版块数据获取(python)
- 偶然发现的一篇文章 激励自己吧。
- Linux系统下的分区管理
热门文章
- adb 最大连接_如何通过雷电模拟器的 adb.exe 做QQ好友/微信匹配
- 使用java对ftp进行文件的上传下载demo
- Java死循环案例---模拟签到系统
- 视频AI智能分析流媒体服务器EasyAIFilter代码自定义视频AI智能分析过程的使用方法
- python基础教程——dict和se
- 这是基于HTML+CSS+JQ做的一款炫酷的旋转时钟网页代码
- 硬盘重新分区怎么操作?硬盘分区软件推荐
- 【翻译】Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks
- # PyTorch学习笔记(15)--神经网络模型训练实战
- NVIDIA Jetson AGX Xavier冰壶的跟踪与识别