lizhenhao 2 rokov pred
rodič
commit
26f2be08cb
14 zmenil súbory, kde vykonal 862 pridanie a 1 odobranie
  1. 409 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/controller/JobPositionController.java
  2. 89 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/controller/PositionCategoryController.java
  3. 107 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/controller/PositionController.java
  4. 33 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/JobPositionService.java
  5. 16 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/PositionCategoryService.java
  6. 26 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/PositionService.java
  7. 72 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/dto/JobPositionDTO.java
  8. 28 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/dto/PositionCategoryDTO.java
  9. 38 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/dto/PositionDTO.java
  10. 15 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/mapstruct/JobPositionWrapper.java
  11. 13 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/mapstruct/PositionCategoryWrapper.java
  12. 15 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/mapstruct/PositionWrapper.java
  13. 1 1
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/projectRecords/controller/ProjectController.java
  14. BIN
      jeeplus-web/src/main/resources/dot/职位导入模板.xlsx

+ 409 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/controller/JobPositionController.java

@@ -0,0 +1,409 @@
+package com.jeeplus.test.jobPosion.controller;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.jeeplus.aop.demo.annotation.DemoMode;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.core.excel.ExcelOptions;
+import com.jeeplus.core.excel.ExportMode;
+import com.jeeplus.core.excel.utils.EasyPoiUtil;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.sys.domain.Office;
+import com.jeeplus.sys.service.OfficeService;
+import com.jeeplus.test.jobPosion.domain.JobPosition;
+import com.jeeplus.test.jobPosion.domain.Position;
+import com.jeeplus.test.jobPosion.service.JobPositionService;
+import com.jeeplus.test.jobPosion.service.PositionService;
+import com.jeeplus.test.jobPosion.service.dto.JobPositionDTO;
+import com.jeeplus.test.jobPosion.service.mapstruct.JobPositionWrapper;
+import com.jeeplus.test.projectRecords.constant.enums.ProjectStatusEnum;
+import com.jeeplus.test.projectRecords.constant.enums.ProjectTypeEnum;
+import com.jeeplus.test.projectRecords.constant.enums.YesOrNoEnum;
+import com.jeeplus.test.projectRecords.domain.Project;
+import com.jeeplus.test.projectRecords.service.dto.ProjectDTO;
+import com.jeeplus.test.projectRecords.service.mapstruct.ProjectWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import liquibase.pro.packaged.S;
+import org.apache.commons.lang3.time.DateUtils;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Type;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Api("职位管理")
+@RestController
+@RequestMapping(value = "/job/job_position")
+public class JobPositionController {
+
+    @Autowired
+    private JobPositionService jobPositionService;
+
+    @Autowired
+    private PositionService positionService;
+
+    @Autowired
+    private OfficeService officeService;
+
+    /**
+     * 查询职位列表
+     * @param jobPosition
+     * @param page
+     * @return
+     * @throws Exception
+     */
+    @ApiLog("查询职位列表")
+    @PreAuthorize("hasAuthority('job:job_position:list')")
+    @GetMapping("list")
+    public ResponseEntity<IPage<JobPosition>> data(JobPosition jobPosition, Page<JobPosition> page) throws Exception {
+        QueryWrapper<JobPosition> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( jobPosition, JobPosition.class );
+        IPage<JobPosition> result = jobPositionService.findList (page,queryWrapper);
+        return ResponseEntity.ok (result);
+    }
+
+    /**
+     * 查询职位数据
+     * @param id
+     * @return
+     */
+    @ApiLog("查询职位详情")
+    @PreAuthorize ("hasAnyAuthority('job:position:view','job:position:add','job:position:edit')")
+    @GetMapping("queryById")
+    public ResponseEntity queryById(@RequestParam("id") String id) {
+        JobPosition jobPosition = jobPositionService.getById ( id );
+        return ResponseEntity.ok (jobPosition);
+    }
+
+    /**
+     * 添加职位
+     * @param jobPositionDTO
+     * @return
+     */
+    @ApiLog("添加职位")
+    @PreAuthorize("hasAnyAuthority('job:job_position:save','job:job_position:edit')")
+    @PostMapping("save")
+    public ResponseEntity save(@Valid @RequestBody JobPositionDTO jobPositionDTO) {
+        JobPosition jobPosition = JobPositionWrapper.INSTANCE.toEntity(jobPositionDTO);
+        if(StrUtil.isEmpty(jobPosition.getId())){
+            jobPosition.setUseFlag("1");
+        }
+        jobPositionService.saveOrUpdate(jobPosition);
+        return ResponseEntity.ok ("保存职位成功");
+    }
+
+    /**
+     * 删除职位
+     * @param ids
+     * @return
+     */
+    @ApiLog("删除职位")
+    @PreAuthorize ("hasAuthority('job:job_position:del')")
+    @DeleteMapping("delete")
+    public ResponseEntity delete(String ids) {
+        String idArray[] =ids.split(",");
+        jobPositionService.removeByIds (Lists.newArrayList (idArray));
+        return ResponseEntity.ok ("删除职位成功");
+    }
+
+    /**
+     * 修改职位启动状态
+     * @param ids
+     * @return
+     */
+    @ApiLog("修改职位启动状态")
+    @PreAuthorize ("hasAnyAuthority('job:job_position:del','job:job_position:edit','job:job_position:add')")
+    @PostMapping("changeUseFlag/{useFlag}")
+    public ResponseEntity changeUseFlag(String ids,@PathVariable("useFlag") String useFlag) {
+        String idArray[] =ids.split(",");
+        ArrayList<String> strings = Lists.newArrayList(idArray);
+        jobPositionService.updateUseFlagById(strings,useFlag);
+        return ResponseEntity.ok ("修改职位状态成功");
+    }
+
+    /**
+     * 查询全部职务
+     * @return
+     */
+    @ApiLog("查询全部职务")
+    @PreAuthorize ("hasAnyAuthority('job:position:view','job:job_position:save','job:job_position:edit')")
+    @GetMapping("queryAllPosition")
+    public ResponseEntity<List<Position>> queryAllPosition() {
+        List<Position> result = positionService.list ();
+        return ResponseEntity.ok (result);
+    }
+
+    /**
+     * 查询全部部门
+     * @return
+     */
+    @ApiLog("查询全部部门")
+    @PreAuthorize ("hasAnyAuthority('job:job_position:view','job:job_position:save','job:job_position:edit')")
+    @GetMapping("queryAllOffice")
+    public ResponseEntity<List<Office>> queryAllOffice() {
+        QueryWrapper<Office> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("type","2");
+        List<Office> result = officeService.list (queryWrapper);
+        return ResponseEntity.ok (result);
+    }
+
+    /**
+     * 下载职位导入模板
+     *
+     * @param response
+     * @return
+     */
+    @GetMapping("import/template")
+    @PreAuthorize("hasAnyAuthority('job:job_position:export')")
+    @ApiOperation(value = "下载模板")
+    public void importFileTemplate(HttpServletResponse response, HttpServletRequest request) {
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/dot/职位导入模板.xlsx");
+            //强制下载不打开
+            response.setContentType("application/force-download");
+            OutputStream out = response.getOutputStream();
+            //使用URLEncoder来防止文件名乱码或者读取错误
+            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("job_position_template.xlsx", "UTF-8"));
+            int b = 0;
+            byte[] buffer = new byte[1000000];
+            while (b != -1) {
+                b = inputStream.read(buffer);
+                if (b != -1) out.write(buffer, 0, b);
+            }
+            inputStream.close();
+            out.close();
+            out.flush();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 导入职位数据
+     *
+     * @return
+     */
+    @DemoMode
+    @PreAuthorize("hasAnyAuthority('job:job_position:import')")
+    @PostMapping("import")
+    @ApiOperation(value = "导入职位数据excel")
+    public ResponseEntity importFile(MultipartFile file) throws IOException{
+
+        ArrayList<JobPosition> arrayList = new ArrayList<>();
+        HashMap<String,String> hashMap = new HashMap<>();
+
+        List<JobPositionDTO> listA = new ArrayList<>();
+        //获取职位sheet
+        listA = EasyPoiUtil.importSheetExcel(file, 0, 1, 0,1, JobPositionDTO.class);
+        //去除excel中的空行
+        listA = getExcelList(listA);
+        //导入前检测数据
+        String resultA = importDecide(listA, arrayList, hashMap);
+        if(StrUtil.isNotEmpty(resultA)){
+            //有返回值,说明导入的数据不正确。向用户抛提示
+            return ResponseEntity.badRequest().body  (resultA);
+        }
+        //判断文件中是否有重复的文号
+        if(hashMap.size() != listA.size()){
+            return ResponseEntity.badRequest().body  ("文件中存在重复的职位名称");
+        }
+        //导入数据
+        jobPositionService.saveBatch(arrayList);
+
+        return ResponseEntity.ok("已成功导入 " + arrayList.size() + " 条数据");
+    }
+
+    public String importDecide(List<JobPositionDTO> list, ArrayList<JobPosition> arrayList, HashMap<String,String> hashMap){
+        HashMap<String,String> noMap = new HashMap<>();
+        ArrayList<String> lists = new ArrayList<>();
+        for (JobPositionDTO jobPositionDTO : list) {
+            if(ObjectUtil.isEmpty(jobPositionDTO)){
+                continue;
+            }
+
+            if(StrUtil.isEmpty(jobPositionDTO.getName())){
+                return "文件中有职位为空,请重新填写";
+            }
+            if(StrUtil.isNotEmpty(jobPositionDTO.getName())){
+                JobPosition jobPosition = jobPositionService.getOne(new QueryWrapper<JobPosition>().eq("name", jobPositionDTO.getName()));
+                if(ObjectUtil.isNotEmpty(jobPosition)){
+                    return "文件中有职位已在系统中存在,请重新填写";
+                }
+            }
+            if(StrUtil.isNotEmpty(jobPositionDTO.getName())){
+                JobPosition jobPosition = jobPositionService.getOne(new QueryWrapper<JobPosition>().eq("no", jobPositionDTO.getNo()));
+                if(ObjectUtil.isNotEmpty(jobPosition)){
+                    return "文件中有职位编码已在系统中存在,请重新填写";
+                }
+            }
+            if(StrUtil.isNotEmpty(jobPositionDTO.getOfficeId())){
+                Office office = officeService.getOne(new QueryWrapper<Office>().eq("name", jobPositionDTO.getOfficeId()));
+                if(ObjectUtil.isNotEmpty(office)){
+                    jobPositionDTO.setOfficeId(office.getId());
+                }else{
+                    return "文件中有部门在系统中不存在,请重新填写";
+                }
+            }
+            if(StrUtil.isNotEmpty(jobPositionDTO.getPositionId())){
+                Position position = positionService.getOne(new QueryWrapper<Position>().eq("name", jobPositionDTO.getPositionId()));
+                if(ObjectUtil.isNotEmpty(position)){
+                    jobPositionDTO.setPositionId(position.getId());
+                }else{
+                    return "文件中有对应职务在系统中不存在,请重新填写";
+                }
+            }
+            if(StrUtil.isNotEmpty(jobPositionDTO.getStaffNums())){
+                if(isNumeric(jobPositionDTO.getStaffNums())==false){
+                    return "文件中有编制人数的格式填写不正确,请填写正整数或者不填写";
+                }else{
+                    int i = Integer.parseInt(jobPositionDTO.getStaffNums());
+                    jobPositionDTO.setStaffNum(i);
+                }
+            }
+
+            if(StrUtil.isNotEmpty(jobPositionDTO.getNo())){
+                noMap.put(jobPositionDTO.getNo(),null);
+                lists.add(jobPositionDTO.getNo());
+            }
+
+            //导入时,将状态设置为启用
+            jobPositionDTO.setUseFlag("1");
+
+            hashMap.put(jobPositionDTO.getName(),null);
+
+            JobPosition jobPosition = JobPositionWrapper.INSTANCE.toEntity(jobPositionDTO);
+            arrayList.add(jobPosition);
+        }
+        if(noMap.size()!=lists.size()){
+            return "文件中的职位编码有重复值,请重新填写";
+        }
+        return null;
+    }
+
+    public static boolean isNumeric(String str){
+        for (int i = str.length();--i>=0;){
+            if (!Character.isDigit(str.charAt(i))){
+                return false;
+            }
+        }
+        return true;
+    }
+    public ArrayList<JobPositionDTO> getExcelList(List<JobPositionDTO> list){
+
+        ArrayList<JobPositionDTO> jobPositionDTOS = new ArrayList<>();
+
+        list.stream().forEach(item->{
+            if(!objectCheckIsNull(item)){
+                jobPositionDTOS.add(item);
+            }
+        });
+
+        return jobPositionDTOS;
+    }
+
+    /**
+     * 检查一个对象的所有属性值是否都是null
+     * @param object
+     * @return
+     */
+    public boolean objectCheckIsNull(Object object) {
+        boolean flag = true; //定义返回结果,默认为true
+
+        if (Objects.isNull(object)) {
+            flag = true;
+        } else {
+            Class clazz = (Class) object.getClass(); // 得到类对象
+            Field fields[] = clazz.getDeclaredFields(); // 得到所有属性
+            for (Field field : fields) {
+                if("serialVersionUID".equals(field.getName())){
+                    continue;
+                }
+                field.setAccessible(true);
+                Object fieldValue = null;
+                try {
+                    fieldValue = field.get(object); //得到属性值
+                    Type fieldType = field.getGenericType();//得到属性类型
+                    String fieldName = field.getName(); // 得到属性名
+                } catch (Exception e){}
+                if (fieldValue != null) {  //只要有一个属性值不为null 就返回false 表示对象不为null
+                    flag = false;
+                    break;
+                }
+            }
+        }
+
+        return flag;
+    }
+
+    /**
+     * 导出职位数据
+     *
+     * @param jobPositionDTO
+     * @param page
+     * @param response
+     * @throws Exception
+     */
+    @ApiLog("导出职位数据")
+    @PreAuthorize("hasAnyAuthority('job:job_position:export')")
+    @GetMapping("export")
+    @ApiOperation(value = "导出职位excel")
+    public void exportFile(JobPositionDTO jobPositionDTO, Page <JobPositionDTO> page, ExcelOptions options, HttpServletResponse response) throws Exception {
+        String fileName = options.getFilename ( );
+        JobPosition jobPosition = JobPositionWrapper.INSTANCE.toEntity (jobPositionDTO);
+        QueryWrapper<JobPosition> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( jobPosition, JobPosition.class );
+        Page <JobPosition> jobPositionPage = pageAToPageB(page);
+        List <JobPosition> result = new ArrayList<>();
+        List <JobPositionDTO> jobPositionDTOList = new ArrayList<>();
+        if ( ExportMode.current.equals ( options.getMode ( ) ) ) {
+            result = jobPositionService.findList ( jobPositionPage, queryWrapper ).getRecords ( );
+        } else {
+            jobPositionPage.setSize ( -1 );
+            jobPositionPage.setCurrent ( 0 );
+            result = jobPositionService.findList ( jobPositionPage, queryWrapper ).getRecords ( );
+        }
+        result.stream().forEach(item->{
+            JobPositionDTO jobPositionDTO1 = JobPositionWrapper.INSTANCE.toDTO(item);
+            if(ObjectUtil.isNotEmpty(item.getStaffNum())){
+                jobPositionDTO1.setStaffNums(jobPositionDTO1.getStaffNum().toString());
+            }
+            jobPositionDTOList.add(jobPositionDTO1);
+        });
+
+
+        EasyPoiUtil.exportExcel ( jobPositionDTOList, null,  null, JobPositionDTO.class, fileName, response );
+
+    }
+    public Page<JobPosition> pageAToPageB(Page<JobPositionDTO> page){
+
+        Page<JobPosition> pageB = new Page<>();
+        pageB.setCurrent(page.getCurrent());
+        pageB.setSize(page.getSize());
+        pageB.setOrders(page.getOrders());
+
+        return pageB;
+    }
+
+}

+ 89 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/controller/PositionCategoryController.java

@@ -0,0 +1,89 @@
+package com.jeeplus.test.jobPosion.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.test.jobPosion.domain.PositionCategory;
+import com.jeeplus.test.jobPosion.service.PositionCategoryService;
+import com.jeeplus.test.jobPosion.service.dto.PositionCategoryDTO;
+import com.jeeplus.test.jobPosion.service.mapstruct.PositionCategoryWrapper;
+import com.jeeplus.test.projectRecords.domain.Project;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+@Api("职务分类管理")
+@RestController
+@RequestMapping(value = "/job/position_category")
+public class PositionCategoryController {
+
+    @Autowired
+    private PositionCategoryService positionCategoryService;
+
+    /**
+     * 查询职务分类列表
+     * @param positionCategory
+     * @param page
+     * @return
+     * @throws Exception
+     */
+    @ApiLog("查询职务分类列表")
+    @PreAuthorize("hasAuthority('job:position_category:list')")
+    @GetMapping("list")
+    public ResponseEntity<IPage<PositionCategory>> data(PositionCategory positionCategory, Page<PositionCategory> page) throws Exception {
+        QueryWrapper<PositionCategory> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( positionCategory, PositionCategory.class );
+        queryWrapper.orderByDesc("create_date");
+        IPage<PositionCategory> result = positionCategoryService.page (page,queryWrapper);
+        return ResponseEntity.ok (result);
+    }
+
+    /**
+     * 查询职务分类数据
+     * @param id
+     * @return
+     */
+    @ApiLog("查询职务分类详情")
+    @PreAuthorize ("hasAnyAuthority('job:position_category:view','job:position_category:add','job:position_category:edit')")
+    @GetMapping("queryById")
+    public ResponseEntity queryById(@RequestParam("id") String id) {
+        PositionCategory positionCategory = positionCategoryService.getById ( id );
+        return ResponseEntity.ok (positionCategory);
+    }
+
+    /**
+     * 添加职务分类
+     * @param positionCategoryDTO
+     * @return
+     */
+    @ApiLog("添加职务分类")
+    @PreAuthorize("hasAnyAuthority('job:position_category:save','job:position_category:edit')")
+    @PostMapping("save")
+    public ResponseEntity save(@Valid @RequestBody PositionCategoryDTO positionCategoryDTO) {
+        PositionCategory positionCategory = PositionCategoryWrapper.INSTANCE.toEntity(positionCategoryDTO);
+        positionCategoryService.saveOrUpdate(positionCategory);
+        return ResponseEntity.ok ("保存职务分类成功");
+    }
+
+    /**
+     * 删除职务分类
+     * @param ids
+     * @return
+     */
+    @ApiLog("删除职务分类")
+    @PreAuthorize ("hasAuthority('job:position_category:del')")
+    @DeleteMapping("delete")
+    public ResponseEntity delete(String ids) {
+        String idArray[] =ids.split(",");
+        positionCategoryService.removeByIds (Lists.newArrayList (idArray));
+        return ResponseEntity.ok ("删除职务分类成功");
+    }
+
+
+}

+ 107 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/controller/PositionController.java

@@ -0,0 +1,107 @@
+package com.jeeplus.test.jobPosion.controller;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.test.jobPosion.domain.Position;
+import com.jeeplus.test.jobPosion.domain.PositionCategory;
+import com.jeeplus.test.jobPosion.service.PositionCategoryService;
+import com.jeeplus.test.jobPosion.service.PositionService;
+import com.jeeplus.test.jobPosion.service.dto.PositionDTO;
+import com.jeeplus.test.jobPosion.service.mapstruct.PositionWrapper;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@Api("职务管理")
+@RestController
+@RequestMapping(value = "/job/position")
+public class PositionController {
+
+    @Autowired
+    private PositionService positionService;
+
+    @Autowired
+    private PositionCategoryService positionCategoryService;
+
+    /**
+     * 查询职务列表
+     * @param position
+     * @param page
+     * @return
+     * @throws Exception
+     */
+    @ApiLog("查询职务列表")
+    @PreAuthorize("hasAuthority('job:position:list')")
+    @GetMapping("list")
+    public ResponseEntity<IPage<Position>> data(Position position, Page<Position> page) throws Exception {
+        QueryWrapper<Position> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( position, Position.class );
+        IPage<Position> result = positionService.findList (page,queryWrapper);
+        return ResponseEntity.ok (result);
+    }
+
+    /**
+     * 查询职务数据
+     * @param id
+     * @return
+     */
+    @ApiLog("查询职务详情")
+    @PreAuthorize ("hasAnyAuthority('job:position:view','job:position:add','job:position:edit')")
+    @GetMapping("queryById")
+    public ResponseEntity queryById(@RequestParam("id") String id) {
+        Position position = positionService.getById ( id );
+        return ResponseEntity.ok (position);
+    }
+
+    /**
+     * 查询全部职务类型
+     * @return
+     */
+    @ApiLog("查询全部职务类型")
+    @PreAuthorize ("hasAnyAuthority('job:position:view','job:position:add','job:position:edit')")
+    @GetMapping("queryAllCategory")
+    public ResponseEntity<List<PositionCategory>> queryAllCategory() {
+        List<PositionCategory> list = positionCategoryService.list();
+        return ResponseEntity.ok (list);
+    }
+
+    /**
+     * 添加职务
+     * @param positionDTO
+     * @return
+     */
+    @ApiLog("添加职务")
+    @PreAuthorize("hasAnyAuthority('job:position:save','job:position:edit')")
+    @PostMapping("save")
+    public ResponseEntity save(@Valid @RequestBody PositionDTO positionDTO) {
+        Position position = PositionWrapper.INSTANCE.toEntity(positionDTO);
+        positionService.saveOrUpdate(position);
+        return ResponseEntity.ok ("保存职务分类成功");
+    }
+
+    /**
+     * 删除职务
+     * @param ids
+     * @return
+     */
+    @ApiLog("删除职务")
+    @PreAuthorize ("hasAuthority('job:position:del')")
+    @DeleteMapping("delete")
+    public ResponseEntity delete(String ids) {
+        String idArray[] =ids.split(",");
+        positionService.removeByIds (Lists.newArrayList (idArray));
+        return ResponseEntity.ok ("删除职务成功");
+    }
+
+
+}

+ 33 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/JobPositionService.java

@@ -0,0 +1,33 @@
+package com.jeeplus.test.jobPosion.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jeeplus.test.jobPosion.domain.JobPosition;
+import com.jeeplus.test.jobPosion.domain.Position;
+import com.jeeplus.test.jobPosion.mapper.JobPositionMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@Transactional
+public class JobPositionService extends ServiceImpl<JobPositionMapper, JobPosition> {
+
+    @Autowired
+    private JobPositionMapper jobPositionMapper;
+
+    public IPage<JobPosition> findList(Page<JobPosition> page, QueryWrapper<JobPosition> queryWrapper){
+        queryWrapper.eq("jp.del_flag","0");
+        return jobPositionMapper.findList(page,queryWrapper);
+    }
+
+    public void updateUseFlagById(List<String> ids, String useFlag){
+        jobPositionMapper.updateUseFlagById(ids,useFlag);
+    }
+}

+ 16 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/PositionCategoryService.java

@@ -0,0 +1,16 @@
+package com.jeeplus.test.jobPosion.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jeeplus.test.jobPosion.domain.PositionCategory;
+import com.jeeplus.test.jobPosion.mapper.PositionCategoryMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@Transactional
+public class PositionCategoryService extends ServiceImpl<PositionCategoryMapper, PositionCategory> {
+
+    @Autowired
+    private PositionCategoryMapper positionCategoryMapper;
+}

+ 26 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/PositionService.java

@@ -0,0 +1,26 @@
+package com.jeeplus.test.jobPosion.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jeeplus.test.jobPosion.domain.Position;
+import com.jeeplus.test.jobPosion.mapper.PositionMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@Transactional
+public class PositionService extends ServiceImpl<PositionMapper, Position> {
+
+    @Autowired
+    private PositionMapper positionMapper;
+
+    public IPage<Position> findList(Page<Position> page, QueryWrapper<Position> queryWrapper){
+        queryWrapper.eq("p.del_flag","0");
+        return positionMapper.findList(page, queryWrapper);
+    }
+}

+ 72 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/dto/JobPositionDTO.java

@@ -0,0 +1,72 @@
+package com.jeeplus.test.jobPosion.service.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * job_position
+ * @author 
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class JobPositionDTO extends BaseDTO {
+
+    /**
+     * 备注信息
+     */
+    private String remarks;
+
+    /**
+     * 职位名称
+     */
+    @Excel(name = "职位名称",width = 25)
+    private String name;
+
+    /**
+     * 职位编码
+     */
+    @Excel(name = "职位编码",width = 25)
+    private String no;
+
+    /**
+     * 所属部门
+     */
+    @Excel(name = "所属部门",width = 25)
+    private String officeId;
+
+    /**
+     * 编制人数
+     */
+    private Integer staffNum;
+
+    @Excel(name = "编制人数",width = 25)
+    private String staffNums;
+    /**
+     * 对应职务
+     */
+    @Excel(name = "对应职务",width = 25)
+    private String positionId;
+
+    /**
+     * 任职资格
+     */
+    @Excel(name = "任职资格",width = 25)
+    private String qualification;
+
+    /**
+     * 责任描述
+     */
+    @Excel(name = "责任描述",width = 25)
+    private String obligation;
+
+    /**
+     * 启用停用 1启用 2停用
+     */
+    private String useFlag;
+
+    private static final long serialVersionUID = 1L;
+}

+ 28 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/dto/PositionCategoryDTO.java

@@ -0,0 +1,28 @@
+package com.jeeplus.test.jobPosion.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * position_category
+ * @author 
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class PositionCategoryDTO extends BaseDTO {
+
+    /**
+     * 备注信息
+     */
+    private String remarks;
+
+    /**
+     * 职务分类名称
+     */
+    private String name;
+
+    private static final long serialVersionUID = 1L;
+}

+ 38 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/dto/PositionDTO.java

@@ -0,0 +1,38 @@
+package com.jeeplus.test.jobPosion.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * position
+ * @author 
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class PositionDTO extends BaseDTO {
+
+    /**
+     * 备注信息
+     */
+    private String remarks;
+
+    /**
+     * 职务名称
+     */
+    private String name;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 职务类型
+     */
+    private String categoryId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 15 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/mapstruct/JobPositionWrapper.java

@@ -0,0 +1,15 @@
+package com.jeeplus.test.jobPosion.service.mapstruct;
+
+import com.jeeplus.core.mapstruct.EntityWrapper;
+import com.jeeplus.test.jobPosion.domain.JobPosition;
+import com.jeeplus.test.jobPosion.service.dto.JobPositionDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {})
+public interface JobPositionWrapper extends EntityWrapper<JobPositionDTO, JobPosition>{
+
+        JobPositionWrapper INSTANCE = Mappers.getMapper(JobPositionWrapper.class);
+
+}

+ 13 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/mapstruct/PositionCategoryWrapper.java

@@ -0,0 +1,13 @@
+package com.jeeplus.test.jobPosion.service.mapstruct;
+
+import com.jeeplus.core.mapstruct.EntityWrapper;
+import com.jeeplus.test.jobPosion.domain.PositionCategory;
+import com.jeeplus.test.jobPosion.service.dto.PositionCategoryDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {})
+public interface PositionCategoryWrapper extends EntityWrapper<PositionCategoryDTO, PositionCategory> {
+    PositionCategoryWrapper INSTANCE = Mappers.getMapper(PositionCategoryWrapper.class);
+}

+ 15 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/service/mapstruct/PositionWrapper.java

@@ -0,0 +1,15 @@
+package com.jeeplus.test.jobPosion.service.mapstruct;
+
+import com.jeeplus.core.mapstruct.EntityWrapper;
+import com.jeeplus.test.jobPosion.domain.Position;
+import com.jeeplus.test.jobPosion.service.dto.PositionDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {})
+public interface PositionWrapper extends EntityWrapper<PositionDTO, Position> {
+
+    PositionWrapper INSTANCE = Mappers.getMapper(PositionWrapper.class);
+
+}

+ 1 - 1
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/projectRecords/controller/ProjectController.java

@@ -432,7 +432,7 @@ public class ProjectController {
 
 
     /**
-     * 导出用户数据
+     * 导出项目数据
      *
      * @param userProjectDTO
      * @param page

BIN
jeeplus-web/src/main/resources/dot/职位导入模板.xlsx