导入人员岗位+技能、婚姻枚举

develop-QA
qinyulong 3 months ago
parent 24ed89e377
commit 92572cd398
  1. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/PostHandleEntity.java
  2. 57
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MarriageEnum.java
  3. 58
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/SkillEnum.java
  4. 130
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/PostHandleImport.java
  5. 45
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/PostHandleController.java
  6. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/IPostHandleService.java
  7. 113
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/PostHandleServiceImpl.java
  8. BIN
      blade-service/blade-desk/src/main/resources/Excel/jobTransfer/岗位处理导入模板下载.xls

@ -104,7 +104,7 @@ public class PostHandleEntity extends BaseEntity {
/**
* 用工类型
*/
@Schema(description = "用工类型")
@Schema(description = "用工类型(1实习工,2正式工)")
private Short staffType;
/**
* 参加工作时间

@ -0,0 +1,57 @@
package org.springblade.desk.jobTransfer.pojo.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringPool;
import java.util.Arrays;
/**
* 婚姻枚举
*
* @author qyl
* @date 2026-01-09
*/
@Getter
@AllArgsConstructor
public enum MarriageEnum {
EMPTY(StringPool.EMPTY, ""),
/**
* 状态枚举
*/
MARRIED("已婚", "1"),
SPINSTERHOOD("未婚", "0"),
;
final String name;
final String code;
/**
* 匹配枚举值
*
* @param name 名称
* @return
*/
public static MarriageEnum of(String name) {
return Arrays.stream(MarriageEnum.values())
.filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
.findFirst()
// 在没有找到匹配项时返回默认值
.orElse(MarriageEnum.EMPTY);
}
/**
* 根据值获取名称
*
* @param code
* @return
*/
public static String getName(String code) {
MarriageEnum item = Arrays.stream(MarriageEnum.values())
.filter(enumItem -> enumItem.getCode().equalsIgnoreCase(code))
.findFirst()
.orElse(null);
return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
}
}

@ -0,0 +1,58 @@
package org.springblade.desk.jobTransfer.pojo.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringPool;
import java.util.Arrays;
/**
* 技能等级枚举
*
* @author qyl
* @date 2026-01-09
*/
@Getter
@AllArgsConstructor
public enum SkillEnum {
EMPTY(StringPool.EMPTY, -1),
/**
* 状态枚举
*/
MIDDLE_RANK("中级", 1),
SENIOR("高级", 2),
ARTIFICER("技师", 3),
;
final String name;
final Integer code;
/**
* 匹配枚举值
*
* @param name 名称
* @return
*/
public static SkillEnum of(String name) {
return Arrays.stream(SkillEnum.values())
.filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
.findFirst()
// 在没有找到匹配项时返回默认值
.orElse(SkillEnum.EMPTY);
}
/**
* 根据值获取名称
*
* @param code
* @return
*/
public static String getName(int code) {
SkillEnum item = Arrays.stream(SkillEnum.values())
.filter(enumItem -> enumItem.getCode() == code)
.findFirst()
.orElse(null);
return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
}
}

@ -0,0 +1,130 @@
package org.springblade.desk.jobTransfer.pojo.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.util.Date;
/**
* 岗位处理导入
*
* @author qyl
* @since 2026-01-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PostHandleImport extends BaseEntity {
/**
* 用户code
*/
@ExcelProperty(index = 0)
private String code;
/**
* 名称
*/
@ExcelProperty(index = 1)
private String name;
/**
* 民族
*/
@ExcelProperty(index = 2)
private String nation;
/**
* 年龄
*/
@ExcelProperty(index = 3)
private Short age;
/**
* 身份证号码
*/
@ExcelProperty(index = 4)
private String idCard;
/**
* 籍贯
*/
@ExcelProperty(index = 5)
private String nativePlace;
/**
* 所属岗位
*/
@ExcelProperty(index = 6)
private String station;
/**
* 出生日期
*/
@ExcelProperty(index = 7)
@DateTimeFormat("yyyy/MM/dd")
private Date dataBirth;
/**
* 政治面貌
*/
@ExcelProperty(index = 8)
private String face;
/**
* 婚姻状态(0未婚1已婚)
*/
@ExcelProperty(index = 9)
private String marriageName;
/**
* 毕业院校
*/
@ExcelProperty(index = 10)
private String school;
/**
* 所学专业
*/
@ExcelProperty(index = 11)
private String major;
/**
* 最高学历
*/
@ExcelProperty(index = 12)
private String education;
/**
* 毕业时间
*/
@ExcelProperty(index = 13)
@DateTimeFormat("yyyy/MM/dd")
private Date endDate;
/**
* 用工类型
*/
@ExcelProperty(index = 14)
private String staffTypeName;
/**
* 参加工作时间
*/
@ExcelProperty(index = 15)
@DateTimeFormat("yyyy/MM/dd")
private Date joinJobDate;
/**
* 技能等级
*/
@ExcelProperty(index = 16)
private String skillName;
/**
* 任现职时间
*/
@ExcelProperty(index = 17)
@DateTimeFormat("yyyy/MM/dd")
private Date inJobDate;
/**
* 合同到期
*/
@ExcelProperty(index = 18)
@DateTimeFormat("yyyy/MM/dd")
private Date conExpDate;
/**
* 家庭住址
*/
@ExcelProperty(index = 19)
private String address;
}

@ -1,7 +1,5 @@
package org.springblade.desk.jobTransfer.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Schema;
@ -18,8 +16,13 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.jobTransfer.pojo.excel.PostHandleExcel;
import org.springblade.desk.jobTransfer.pojo.excel.PostHandleImport;
import org.springblade.desk.jobTransfer.pojo.request.PostHandleQuery;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -30,12 +33,13 @@ import org.springblade.desk.jobTransfer.service.IPostHandleService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import java.util.Map;
import java.util.List;
import java.util.stream.Collectors;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
/**
* 岗位处理 控制器
@ -147,7 +151,7 @@ public class PostHandleController extends BladeController {
* @return
*/
@PostMapping("/JobTransferPlan")
@ApiOperationSupport(order = 8)
@ApiOperationSupport(order = 9)
@Operation(summary = "批量转岗计划", description = "传入ids")
public R JobTransferPlan(@Parameter(description = "主键集合", required = true) @RequestParam String ids,
@Parameter(description = "培训师id", required = true) @RequestParam Long teacherId,
@ -166,7 +170,7 @@ public class PostHandleController extends BladeController {
* @return
*/
@PostMapping("/layoffPlan")
@ApiOperationSupport(order = 8)
@ApiOperationSupport(order = 10)
@Operation(summary = "批量下岗计划", description = "传入ids")
public R layoffPlan(@Parameter(description = "主键集合", required = true) @RequestParam String ids,
@Parameter(description = "培训师id", required = true) @RequestParam Long teacherId,
@ -180,7 +184,7 @@ public class PostHandleController extends BladeController {
*/
@IsAdmin
@GetMapping("/export-postHandle")
@ApiOperationSupport(order = 9)
@ApiOperationSupport(order = 11)
@Operation(summary = "导出数据", description = "传入postHandle")
public void exportPostHandle(@Parameter(hidden = true) @RequestParam Map<String, Object> postHandle, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<PostHandleEntity> queryWrapper = Condition.getQueryWrapper(postHandle, PostHandleEntity.class);
@ -192,4 +196,33 @@ public class PostHandleController extends BladeController {
ExcelUtil.export(response, "岗位处理数据" + DateUtil.time(), "岗位处理数据表", list, PostHandleExcel.class);
}
/**
* 下载Excel模板
*/
@GetMapping("/downloadExcelTemplate")
@ApiOperationSupport(order = 12)
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<Resource> downloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/jobTransfer/岗位处理导入模板下载.xls",
"岗位处理导入模板下载.xls");
}
/**
* 导入Excel
*/
@PostMapping("/importExcel")
@ApiOperationSupport(order = 13)
@Operation(summary = "导入Excel", description = "MultipartFile")
public R importExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<PostHandleImport> importList = ExcelUtil.read(
file, 0, 1, PostHandleImport.class
);
return postHandleService.saveExcelData(importList);
}
}

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.springblade.core.tool.api.R;
import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
import org.springblade.desk.jobTransfer.pojo.excel.PostHandleExcel;
import org.springblade.desk.jobTransfer.pojo.excel.PostHandleImport;
import org.springblade.desk.jobTransfer.pojo.request.PostHandleQuery;
import org.springblade.desk.jobTransfer.pojo.vo.PostHandleVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -74,4 +75,11 @@ public interface IPostHandleService extends BaseService<PostHandleEntity> {
*/
R layoffPlan(List<Long> ids, Long teacherId, String teacherName, Long trainingPlanId);
/**
* 导入Excel
*
* @param postHandleEntityList
* @return
*/
R saveExcelData(List<PostHandleImport> postHandleEntityList);
}

@ -1,18 +1,23 @@
package org.springblade.desk.jobTransfer.service.impl;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import jakarta.annotation.Resource;
import org.springblade.core.tool.api.R;
import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
import org.springblade.desk.jobTransfer.pojo.enums.PostHandleStatusEnum;
import org.springblade.desk.jobTransfer.pojo.enums.StaffTypeEnum;
import org.springblade.desk.jobTransfer.pojo.enums.TrainingStatusEnum;
import org.springblade.desk.jobTransfer.pojo.enums.*;
import org.springblade.desk.jobTransfer.pojo.excel.PostHandleExcel;
import org.springblade.desk.jobTransfer.pojo.excel.PostHandleImport;
import org.springblade.desk.jobTransfer.pojo.request.PostHandleQuery;
import org.springblade.desk.jobTransfer.pojo.vo.PostHandleVO;
import org.springblade.desk.jobTransfer.mapper.PostHandleMapper;
import org.springblade.desk.jobTransfer.service.ICultivateDetailService;
import org.springblade.desk.jobTransfer.service.IPostHandleService;
import org.springblade.system.cache.SysCache;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.User;
import org.springblade.system.pojo.entity.UserInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
@ -20,9 +25,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 岗位处理 服务实现类
@ -33,7 +37,7 @@ import java.util.List;
@Service
public class PostHandleServiceImpl extends BaseServiceImpl<PostHandleMapper, PostHandleEntity> implements IPostHandleService {
@Autowired
@Resource
private ICultivateDetailService iCultivateDetailService;
@Override
@ -102,7 +106,7 @@ public class PostHandleServiceImpl extends BaseServiceImpl<PostHandleMapper, Pos
}
boolean save = this.save(postHandleEntity);
//实习工自动创建一条培训计划
createPlan(postHandleEntity);
createPlan(Arrays.asList(postHandleEntity));
return R.status(save);
}
}
@ -189,18 +193,93 @@ public class PostHandleServiceImpl extends BaseServiceImpl<PostHandleMapper, Pos
return R.status(saveResult, "操作成功");
}
@Override
@Transactional(rollbackFor = Exception.class)
public R saveExcelData(List<PostHandleImport> postHandleImports) {
//检查导入的集合postHandleImports,不允许用户code重复
Set<String> importedCodes = new HashSet<>();
Set<String> duplicateCodes = postHandleImports.stream()
.map(PostHandleImport::getCode) // 假设PostHandleImport有getCode方法
.filter(code -> !importedCodes.add(code)) // 如果add失败,说明已存在,即重复
.collect(Collectors.toSet());
if (!duplicateCodes.isEmpty()) {
// 存在重复的用户code,返回错误信息。假设R是统一的返回结果类
return R.fail("导入数据中存在重复的工号:" + duplicateCodes);
}
List<PostHandleEntity> list = postHandleImports.stream().map(this::convertSingle).collect(Collectors.toList());
//获取全部用户id,对比PostHandleEntity已有数据,不允许重复添加
List<Long> ids = list.stream().map(PostHandleEntity::getUserId)
.collect(Collectors.toList());
Long existCount = this.lambdaQuery()
.in(PostHandleEntity::getUserId, ids)
.eq(PostHandleEntity::getIsDeleted, 0)
.count();
if (existCount > 0) {
return R.fail("用户已存在岗位处理记录,不允许重复添加");
}
boolean saved = this.saveBatch(list);
if (!saved) {
return R.fail("操作失败");
}
try {
createPlan(list); // 确保此方法中的异常能传播出来
} catch (Exception e) {
// 由于配置了 rollbackFor = Exception.class,异常抛出后事务将回滚
throw new RuntimeException("创建培训计划失败,数据已回滚", e);
}
return R.status(saved);
}
/**
* 转换单个对象
*/
private PostHandleEntity convertSingle(PostHandleImport excel) {
PostHandleEntity entity = new PostHandleEntity();
// 核心:属性拷贝,两个类的字段名和类型必须一致
BeanUtils.copyProperties(excel, entity);
// 对于字段名不完全一致或有特殊处理的字段,可以在此手动设置
//用工类型
entity.setStaffType(StaffTypeEnum.of(excel.getStaffTypeName()).getCode().shortValue());
//用户及部门
UserInfo userByCode = UserCache.getUserByCode(excel.getCode());
if (userByCode == null || userByCode.getUser() == null) {
//报错并提示
throw new IllegalArgumentException("工号 '" + excel.getCode() + "' 在系统中不存在,请检查数据准确性");
}
entity.setUserId(userByCode.getUser().getId());
entity.setName(userByCode.getUser().getRealName());
entity.setDeptId(Long.valueOf(userByCode.getUser().getDeptId()));
//技能等级
entity.setSkill(SkillEnum.of(excel.getSkillName()).getCode().shortValue());
//婚姻状态
entity.setMarriage(MarriageEnum.of(excel.getMarriageName()).getCode().toString());
// 如果是正式工状态为正常
if (entity.getStaffType() == StaffTypeEnum.FORMAL.getCode().shortValue()) {
entity.setPhStatus(PostHandleStatusEnum.NORMALITY.getCode().shortValue());
} else {
entity.setPhStatus(PostHandleStatusEnum.IN_PRACTICE.getCode().shortValue());
}
return entity;
}
/**
* 实习工自动创建一条培训计划
*
* @param postHandleEntity
* @param postHandleEntitys
*/
public void createPlan(PostHandleEntity postHandleEntity) {
if (postHandleEntity.getStaffType() == StaffTypeEnum.of("实习工").getCode().shortValue()) {
CultivateDetailEntity cultivateDetailEntity = new CultivateDetailEntity();
cultivateDetailEntity.setPhId(postHandleEntity.getId());
cultivateDetailEntity.setType((short) 1);
cultivateDetailEntity.setCaStatus(TrainingStatusEnum.of("未配置").getCode().shortValue());
iCultivateDetailService.save(cultivateDetailEntity);
}
public void createPlan(List<PostHandleEntity> postHandleEntitys) {
//新增实习工时,为其创建一条培训计划
List<CultivateDetailEntity> cultivateDetailEntities = postHandleEntitys.stream()
.filter(entity -> entity.getStaffType() == StaffTypeEnum.FIELD_WORK.getCode().shortValue())
.map(fieldWork -> {
CultivateDetailEntity detailEntity = new CultivateDetailEntity();
detailEntity.setPhId(fieldWork.getId());
detailEntity.setType((short) 1);
detailEntity.setCaStatus(TrainingStatusEnum.NOT_CONFIGURED.getCode().shortValue());
return detailEntity;
})
.collect(Collectors.toList());
iCultivateDetailService.saveBatch(cultivateDetailEntities);
}
}

Loading…
Cancel
Save