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:[email protected]
* @copyright 個人開發者李海林版權所有,產品詳情及技術服務請登錄官網查詢[http://www.x-core.org.cn]
* @create 2019-08-20 18:42
*/
@Api(tags = "03-講師模塊")
@RestController
@RequestMapping("/teacher")
public class TeacherController {
@Autowired
private TeacherService teacherService;
@Autowired
private DepartmentService departmentService;
@Autowired
private PositionService positionService;
@Autowired
private JobLevelService jobLevelService;
@Autowired
private ExecutorService executorService;
@Autowired
private TemplateEngine templateEngine;
@Autowired
private 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:[email protected]
* @copyright 個人開發者李海林版權所有,產品詳情及技術服務請登錄官網查詢[http://www.x-core.org.cn]
* @create 2019-08-22 21:05
*/
@Service
@Transactional
public class TeacherServiceImpl implements TeacherService {
@Autowired
private 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");
@Override
public List<Nation> getAllNationList() {
return extTeacherMapper.getAllNations();
}
@Override
public List<Politics> getAllPolitics() {
return extTeacherMapper.getAllPolitics();
}
@Override
public 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);
}
@Override
public Long getMaxWorkID() {
Long maxWorkID = extTeacherMapper.getMaxWorkID();
return maxWorkID == null ? 0 : maxWorkID;
}
@Override
public 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);
}
@Override
public 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);
}
@Override
public 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);
}
@Override
public boolean deleteTeacherById(String ids) {
String[] split = ids.split(",");
return extTeacherMapper.deleteEmpById(split) == split.length;
}
@Override
public List<Teacher> getAllTeachers() {
return extTeacherMapper.getEmployeeByPage(null, null, "", null, null, null, null, null, null, null, null);
}
@Override
public int addTeachers(List<Teacher> teachers) {
return extTeacherMapper.addEmps(teachers);
}
@Override
public 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:[email protected]
* @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等