1、讲师接口概览

2、使用Swagger测试接口

3、控制层:TeacherController

package cn.org.xcore.edusys.controller.teacher;import cn.org.xcore.edusys.db.ext.model.Teacher;
import cn.org.xcore.edusys.db.ext.model.Position;
import cn.org.xcore.edusys.common.bean.ApiResponse;
import cn.org.xcore.edusys.common.EmailRunnable;
import cn.org.xcore.edusys.common.poi.PoiUtils;
import cn.org.xcore.edusys.service.TeacherService;
import cn.org.xcore.edusys.service.impl.DepartmentService;
import cn.org.xcore.edusys.service.impl.JobLevelService;
import cn.org.xcore.edusys.service.impl.PositionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.thymeleaf.TemplateEngine;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;/*** @author 李海林 手机:13802780104|微信:lihailin9073|Email:767679879@qq.com* @copyright 个人开发者李海林版权所有,产品详情及技术服务请登录官网查询[http://www.x-core.org.cn]* @create 2019-08-20 18:42*/
@Api(tags = "03-讲师模块")
@RestController
@RequestMapping("/teacher")
public class TeacherController {@Autowiredprivate TeacherService teacherService;@Autowiredprivate DepartmentService departmentService;@Autowiredprivate PositionService positionService;@Autowiredprivate JobLevelService jobLevelService;@Autowiredprivate ExecutorService executorService;@Autowiredprivate TemplateEngine templateEngine;@Autowiredprivate JavaMailSender javaMailSender;@ApiOperation("获取民族列表")@GetMapping("/get_nation_list")public Map<String, Object> getNationList() {Map<String, Object> map = new HashMap<>();map.put("nations", teacherService.getAllNationList());map.put("politics", teacherService.getAllPolitics());map.put("deps", departmentService.getDepByPid(-1L));map.put("positions", positionService.getAllPos());map.put("joblevels", jobLevelService.getAllJobLevels());map.put("workID", String.format("%08d", teacherService.getMaxWorkID() + 1));return map;}@ApiOperation("获取讲师工号ID")@GetMapping("/get_max_work_id")public String getMaxWorkId() {return String.format("%08d", teacherService.getMaxWorkID() + 1);}@ApiOperation("新增讲师档案")@PostMapping("/add")public ApiResponse addTeacher(Teacher teacher) {if (teacherService.addTeacher(teacher) == 1) {List<Position> allPos = positionService.getAllPos();for (Position allPo : allPos) {if (allPo.getId() == teacher.getPosId()) {teacher.setPosName(allPo.getName());}}executorService.execute(new EmailRunnable(teacher, javaMailSender, templateEngine));return ApiResponse.success("添加成功!");}return ApiResponse.error("添加失败!");}@ApiOperation("更新讲师档案")@PutMapping("/update")public ApiResponse updateTeacher(Teacher teacher) {if (teacherService.updateTeacher(teacher) == 1) {return ApiResponse.success("更新成功!");}return ApiResponse.error("更新失败!");}@ApiOperation("注销讲师档案")@DeleteMapping("/del/{ids}")public ApiResponse deleteTeacherById(@PathVariable String ids) {if (teacherService.deleteTeacherById(ids)) {return ApiResponse.success("删除成功!");}return ApiResponse.error("删除失败!");}@ApiOperation("搜索讲师档案")@GetMapping("/search")public Map<String, Object> search(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer size, @RequestParam(defaultValue = "") String keywords,Long politicId, Long nationId, Long posId, Long jobLevelId, String engageForm, Long departmentId, String beginDateScope) {Map<String, Object> map = new HashMap<>();List<Teacher> teacherByPage = teacherService.search(page, size, keywords, politicId, nationId, posId, jobLevelId, engageForm, departmentId, beginDateScope);Long count = teacherService.getCountByKeywords(keywords, politicId, nationId, posId, jobLevelId, engageForm, departmentId, beginDateScope);map.put("teacherList", teacherByPage);map.put("count", count);return map;}@ApiOperation("导出讲师档案")@GetMapping("/export")public ResponseEntity<byte[]> export() {return PoiUtils.exportTeacher2Excel(teacherService.getAllTeachers());}@ApiOperation("导入讲师档案")@PostMapping("/import")public ApiResponse imports(MultipartFile file) {List<Teacher> teachers = PoiUtils.importTeacher(file, teacherService.getAllNationList(), teacherService.getAllPolitics(), departmentService.getAllDeps(), positionService.getAllPos(), jobLevelService.getAllJobLevels());if (teacherService.addTeachers(teachers) == teachers.size()) {return ApiResponse.success("导入成功!");}return ApiResponse.error("导入失败!");}
}

4、服务层:TeacherService、TeacherServiceImpl

(1)讲师服务接口

package cn.org.xcore.edusys.service.impl;import cn.org.xcore.edusys.db.ext.model.Teacher;
import cn.org.xcore.edusys.db.ext.model.Nation;
import cn.org.xcore.edusys.db.ext.model.Politics;
import cn.org.xcore.edusys.db.ext.mapper.ExtTeacherMapper;
import cn.org.xcore.edusys.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;/*** 讲师服务** @author 李海林 手机:13802780104|微信:lihailin9073|Email:767679879@qq.com* @copyright 个人开发者李海林版权所有,产品详情及技术服务请登录官网查询[http://www.x-core.org.cn]* @create 2019-08-22 21:05*/
@Service
@Transactional
public class TeacherServiceImpl implements TeacherService {@Autowiredprivate ExtTeacherMapper extTeacherMapper;private SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");private SimpleDateFormat monthFormat = new SimpleDateFormat("MM");private SimpleDateFormat birthdayFormat = new SimpleDateFormat("yyyy-MM-dd");private DecimalFormat decimalFormat = new DecimalFormat("##.00");@Overridepublic List<Nation> getAllNationList() {return extTeacherMapper.getAllNations();}@Overridepublic List<Politics> getAllPolitics() {return extTeacherMapper.getAllPolitics();}@Overridepublic int addTeacher(Teacher teacher) {Date beginContract = teacher.getBeginContract();Date endContract = teacher.getEndContract();Double contractTerm = (Double.parseDouble(yearFormat.format(endContract)) - Double.parseDouble(yearFormat.format(beginContract))) * 12 + Double.parseDouble(monthFormat.format(endContract)) - Double.parseDouble(monthFormat.format(beginContract));teacher.setContractTerm(Double.parseDouble(decimalFormat.format(contractTerm / 12)));return extTeacherMapper.addEmp(teacher);}@Overridepublic Long getMaxWorkID() {Long maxWorkID = extTeacherMapper.getMaxWorkID();return maxWorkID == null ? 0 : maxWorkID;}@Overridepublic List<Teacher> search(Integer page, Integer size, String keywords, Long politicId, Long nationId, Long posId, Long jobLevelId, String engageForm, Long departmentId, String beginDateScope) {int start = (page - 1) * size;Date startBeginDate = null;Date endBeginDate = null;if (beginDateScope != null && beginDateScope.contains(",")) {try {String[] split = beginDateScope.split(",");startBeginDate = birthdayFormat.parse(split[0]);endBeginDate = birthdayFormat.parse(split[1]);} catch (ParseException e) {}}return extTeacherMapper.getEmployeeByPage(start, size, keywords, politicId, nationId, posId, jobLevelId, engageForm, departmentId, startBeginDate, endBeginDate);}@Overridepublic Long getCountByKeywords(String keywords, Long politicId, Long nationId, Long posId, Long jobLevelId, String engageForm, Long departmentId, String beginDateScope) {Date startBeginDate = null;Date endBeginDate = null;if (beginDateScope != null && beginDateScope.contains(",")) {try {String[] split = beginDateScope.split(",");startBeginDate = birthdayFormat.parse(split[0]);endBeginDate = birthdayFormat.parse(split[1]);} catch (ParseException e) {}}return extTeacherMapper.getCountByKeywords(keywords, politicId, nationId, posId, jobLevelId, engageForm, departmentId, startBeginDate, endBeginDate);}@Overridepublic int updateTeacher(Teacher teacher) {Date beginContract = teacher.getBeginContract();Date endContract = teacher.getEndContract();Double contractTerm = (Double.parseDouble(yearFormat.format(endContract)) - Double.parseDouble(yearFormat.format(beginContract))) * 12 + Double.parseDouble(monthFormat.format(endContract)) - Double.parseDouble(monthFormat.format(beginContract));teacher.setContractTerm(Double.parseDouble(decimalFormat.format(contractTerm / 12)));return extTeacherMapper.updateEmp(teacher);}@Overridepublic boolean deleteTeacherById(String ids) {String[] split = ids.split(",");return extTeacherMapper.deleteEmpById(split) == split.length;}@Overridepublic List<Teacher> getAllTeachers() {return extTeacherMapper.getEmployeeByPage(null, null, "", null, null, null, null, null, null, null, null);}@Overridepublic int addTeachers(List<Teacher> teachers) {return extTeacherMapper.addEmps(teachers);}@Overridepublic List<Teacher> getTeachersByPageShort(Integer page, Integer size) {int start = (page - 1) * size;return extTeacherMapper.getEmployeeByPageShort(start,size);}
}

(2)讲师服务

package cn.org.xcore.edusys.service;import cn.org.xcore.edusys.db.ext.model.Teacher;
import cn.org.xcore.edusys.db.ext.model.Nation;
import cn.org.xcore.edusys.db.ext.model.Politics;import java.util.List;/*** 讲师服务接口** @author 李海林 手机:13802780104|微信:lihailin9073|Email:767679879@qq.com* @copyright 个人开发者李海林版权所有,产品详情及技术服务请登录官网查询[http://www.x-core.org.cn]* @create 2019-08-22 21:00*/
public interface TeacherService {/*** 获取民族清单* @return 返回民族清单列表*/List<Nation> getAllNationList();/*** 获取政治面貌清单* @return 返回政治面貌清单列表*/List<Politics> getAllPolitics();/*** 新增讲师档案* @param teacher 讲师Teacher对象* @return*/int addTeacher(Teacher teacher);/*** 获取讲师工号ID* @return*/Long getMaxWorkID();/*** 搜索讲师档案* @param page 页码* @param size 页大小* @param keywords 关键词* @param politicId 政治面貌* @param nationId 民族* @param posId 职位* @param jobLevelId 职称* @param engageForm * @param departmentId 部门* @param beginDateScope 入职日期* @return*/List<Teacher> search(Integer page, Integer size, String keywords, Long politicId, Long nationId, Long posId, Long jobLevelId, String engageForm, Long departmentId, String beginDateScope);/*** 获取讲师档案搜索记录总数* @param keywords* @param politicId* @param nationId* @param posId* @param jobLevelId* @param engageForm* @param departmentId* @param beginDateScope* @return*/Long getCountByKeywords(String keywords, Long politicId, Long nationId, Long posId, Long jobLevelId, String engageForm, Long departmentId, String beginDateScope);/*** 更新讲师档案* @param teacher 讲师Teacher对象* @return*/int updateTeacher(Teacher teacher);/*** 删除讲师档案* @param ids 被删除档案的ID清单* @return*/boolean deleteTeacherById(String ids);/*** 获取全部讲师档案数据* @return*/List<Teacher> getAllTeachers();/*** 批量添加讲师档案* @param teachers 讲师Teacher对象列表* @return*/int addTeachers(List<Teacher> teachers);/*** 分页获取讲师档案* @param page 页码* @param size 页大小* @return*/List<Teacher> getTeachersByPageShort(Integer page, Integer size);}

5、数据层:通过MyBatis Generator自动生成

上图箭头指向位置的代码模块,即是通过MyBatis Generator生成的数据层代码,讲师接口依赖于该数据层。

6、数据表:teacher、nation、region、position、title等

07 微架构教务系统——讲师接口相关推荐

  1. 01 微架构教务系统——概览

    前言 有幸得朋友邀请,在离职期间参加了广西南宁一家教育培训行业公司的教务系统研发,负责系统架构设计和服务端应用系统程序设计工作,经过3个月的加班加点,今天项目终于验收结项. 想起这几年从事的工作和开发 ...

  2. 03 微架构教务系统——课程创建接口、课程更新接口、课程删除接口

    1.控制层:CourseController package cn.org.xcore.edusys.controller.course;import cn.org.xcore.edusys.comm ...

  3. 02 微架构教务系统——课程搜索接口

    1.创建课程表 -- -- 表的结构 `course` --CREATE TABLE `course` (`id` int(11) NOT NULL COMMENT '自增主键',`name` var ...

  4. 08 微架构教务系统——公共模块接口

    1.公共模块的用途 考虑到用户登录系统后,会受到权限规则的限制,类似获取系统菜单.系统通知.即时消息等接口,是所有用户都具备的功能,因此就将这部分的通用功能接口抽离出来放在公共模块中,用户只需登录成功 ...

  5. 10 微架构教务系统——用户登录、注销登录、学生注册接口

    1.接口概览 2.控制器:LoginController package cn.org.xcore.edusys.controller;import cn.org.xcore.edusys.commo ...

  6. 06 微架构教务系统——学员搜索接口、学员档案添加接口、学员档案更新接口、学员档案删除接口

    1.先看接口测试:基于PostMan 使用PostMan作为API接口调试工具,对学员模块的Restful接口进行测试,如下截图所示: 2.控制层代码:StudentController packag ...

  7. ARM 之十五 扫盲 ARM 架构、指令集、微架构、系统架构、ARM IP、授权方式

      ARM 架构的 MCU 用了好多年,进一步对于 ARM 架构也或多或少的有了一些了解.之前都是遇到啥问题直接去官网找对应的手册,一直没有系统的总结一下.是时候总结一下,以便进行下一步学习了! 总的 ...

  8. 教务系统—课程表接口信息

    教务系统->课程表@龙仔 登录 登录必须使用的接口信息: 学号: 学号属性:必填.真实.必须为相对应学校的学生学号. 密码: 密码属性:必填.与教务系统密码一致. 错误方式: 微信.微博.手机号 ...

  9. 浅谈【漏洞复现】泛微ecology OA系统某接口存在数据库配置信息泄露漏洞

    目前 0x00 前言 0x01 漏洞简诉 0x02 漏洞分析 0x03 漏洞剖析 0x04 漏洞复现 0x05 复现那些泪水 0x06 复现总结 0x07 免责声明 0x00 前言 漏洞被曝光有几天时 ...

最新文章

  1. Flutter 导包 以及体验
  2. ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory
  3. 测试Live Writer
  4. 用java来实现验证码功能
  5. easyui datatable ajax 加载数据,ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询...
  6. golang 交叉编译总结
  7. 什么是系统架构?系统架构的特点分析!
  8. 如何禁用 macOS 更新通知?
  9. Docker配置国内加速器加速镜像下载的方法
  10. PHP get_class_methods函数用法
  11. python输出小数_python输出小数
  12. GIBIT墨水屏电子桌牌助力某银行无纸化办公会议系统
  13. 软考各高级、中级、初级官方高清晰PDF教材(更新3版教材与新增教材)
  14. windows命令 format的用法
  15. Tkinter模块GUI界面化编程实战(七)——人机对战五子棋(含超详解及完整源码、完整程序免费下载链接)
  16. 振作起来,开始认真搞了
  17. 如何改变pycharm的背景颜色
  18. Docker基础篇 - (六)Docker 网络Spring Boot微服务打包Docker镜像
  19. 前端传来的图片并保存_前端处理后端接口传递过来的图片文件
  20. <img> 的 title 和 alt 属性的区别

热门文章

  1. 透明代理解决方案(一)
  2. apollo配置中心的组件_如何使用Apollo的全新查询组件来管理本地状态
  3. javaweb day12
  4. 1049. 最后一块石头的重量 II
  5. linux服务开机启动chkconfig,Linux开机服务自启动之chkconfig命令详解
  6. js中event.timeStamp的用法
  7. 网页摘要优化:Description是什么意思和使用攻略
  8. 从零开始学androidTabHost标签组件.二十九.
  9. 以类的成员函数作为Windows callback函数
  10. OneNote无法在以下位置新建笔记本