07 微架构教务系统——讲师接口
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 微架构教务系统——讲师接口相关推荐
- 01 微架构教务系统——概览
前言 有幸得朋友邀请,在离职期间参加了广西南宁一家教育培训行业公司的教务系统研发,负责系统架构设计和服务端应用系统程序设计工作,经过3个月的加班加点,今天项目终于验收结项. 想起这几年从事的工作和开发 ...
- 03 微架构教务系统——课程创建接口、课程更新接口、课程删除接口
1.控制层:CourseController package cn.org.xcore.edusys.controller.course;import cn.org.xcore.edusys.comm ...
- 02 微架构教务系统——课程搜索接口
1.创建课程表 -- -- 表的结构 `course` --CREATE TABLE `course` (`id` int(11) NOT NULL COMMENT '自增主键',`name` var ...
- 08 微架构教务系统——公共模块接口
1.公共模块的用途 考虑到用户登录系统后,会受到权限规则的限制,类似获取系统菜单.系统通知.即时消息等接口,是所有用户都具备的功能,因此就将这部分的通用功能接口抽离出来放在公共模块中,用户只需登录成功 ...
- 10 微架构教务系统——用户登录、注销登录、学生注册接口
1.接口概览 2.控制器:LoginController package cn.org.xcore.edusys.controller;import cn.org.xcore.edusys.commo ...
- 06 微架构教务系统——学员搜索接口、学员档案添加接口、学员档案更新接口、学员档案删除接口
1.先看接口测试:基于PostMan 使用PostMan作为API接口调试工具,对学员模块的Restful接口进行测试,如下截图所示: 2.控制层代码:StudentController packag ...
- ARM 之十五 扫盲 ARM 架构、指令集、微架构、系统架构、ARM IP、授权方式
ARM 架构的 MCU 用了好多年,进一步对于 ARM 架构也或多或少的有了一些了解.之前都是遇到啥问题直接去官网找对应的手册,一直没有系统的总结一下.是时候总结一下,以便进行下一步学习了! 总的 ...
- 教务系统—课程表接口信息
教务系统->课程表@龙仔 登录 登录必须使用的接口信息: 学号: 学号属性:必填.真实.必须为相对应学校的学生学号. 密码: 密码属性:必填.与教务系统密码一致. 错误方式: 微信.微博.手机号 ...
- 浅谈【漏洞复现】泛微ecology OA系统某接口存在数据库配置信息泄露漏洞
目前 0x00 前言 0x01 漏洞简诉 0x02 漏洞分析 0x03 漏洞剖析 0x04 漏洞复现 0x05 复现那些泪水 0x06 复现总结 0x07 免责声明 0x00 前言 漏洞被曝光有几天时 ...
最新文章
- Flutter 导包 以及体验
- ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory
- 测试Live Writer
- 用java来实现验证码功能
- easyui datatable ajax 加载数据,ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询...
- golang 交叉编译总结
- 什么是系统架构?系统架构的特点分析!
- 如何禁用 macOS 更新通知?
- Docker配置国内加速器加速镜像下载的方法
- PHP get_class_methods函数用法
- python输出小数_python输出小数
- GIBIT墨水屏电子桌牌助力某银行无纸化办公会议系统
- 软考各高级、中级、初级官方高清晰PDF教材(更新3版教材与新增教材)
- windows命令 format的用法
- Tkinter模块GUI界面化编程实战(七)——人机对战五子棋(含超详解及完整源码、完整程序免费下载链接)
- 振作起来,开始认真搞了
- 如何改变pycharm的背景颜色
- Docker基础篇 - (六)Docker 网络Spring Boot微服务打包Docker镜像
- 前端传来的图片并保存_前端处理后端接口传递过来的图片文件
- <img> 的 title 和 alt 属性的区别
热门文章
- 透明代理解决方案(一)
- apollo配置中心的组件_如何使用Apollo的全新查询组件来管理本地状态
- javaweb day12
- 1049. 最后一块石头的重量 II
- linux服务开机启动chkconfig,Linux开机服务自启动之chkconfig命令详解
- js中event.timeStamp的用法
- 网页摘要优化:Description是什么意思和使用攻略
- 从零开始学androidTabHost标签组件.二十九.
- 以类的成员函数作为Windows callback函数
- OneNote无法在以下位置新建笔记本