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:[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等

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章