init
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
package com.newyetai.recruit.position.constant;
|
||||
|
||||
/**
|
||||
* 职位类型常量
|
||||
*
|
||||
* @author Carlye
|
||||
* @date 2022/01/24
|
||||
*/
|
||||
public interface PositionConstants {
|
||||
|
||||
String POSITION_TYPE_CACHE = "ptc";
|
||||
|
||||
|
||||
/**
|
||||
* 工作性质 0:不限 1:兼职 2:全职
|
||||
*/
|
||||
Integer JOB_CATEGORY_ALL = 0;
|
||||
Integer JOB_CATEGORY_PART = 1;
|
||||
/**
|
||||
* 工作性质完全
|
||||
*/
|
||||
Integer JOB_CATEGORY_FULL = 2;
|
||||
|
||||
/**
|
||||
* 结算类型 1日结 2周结 3月结 4完工结
|
||||
*/
|
||||
Integer SETTLEMENT_TYPE_DAY = 1;
|
||||
Integer SETTLEMENT_TYPE_WEEK = 2;
|
||||
Integer SETTLEMENT_TYPE_MONTH = 3;
|
||||
Integer SETTLEMENT_TYPE_END = 4;
|
||||
|
||||
/**
|
||||
* 岗位文件类型 1:图片 2:视频
|
||||
*/
|
||||
String POSITION_FILE_TYPE_IMG = "1";
|
||||
String POSITION_FILE_TYPE_VIDEO = "2";
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.newyetai.recruit.position.controller;
|
||||
|
||||
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.recruit.position.dto.PositionFileDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionFilePageQueryDTO;
|
||||
import com.newyetai.recruit.position.entity.PositionFile;
|
||||
import com.newyetai.recruit.position.service.PositionFileService;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@Api(tags = "岗位附件")
|
||||
@RestController
|
||||
@RequestMapping("/position/file")
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class HrPositionFileController {
|
||||
|
||||
|
||||
private final PositionFileService positionFileService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("分页查询岗位文件")
|
||||
public AlitaResult<Page<PositionFileDTO>> filePage(PositionFilePageQueryDTO queryDTO) {
|
||||
positionFileService.filePage(queryDTO);
|
||||
return AlitaResult.success(queryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("创建岗位文件信息")
|
||||
public AlitaResult<PositionFile> create(@RequestBody PositionFileDTO queryDTO) {
|
||||
return AlitaResult.success(positionFileService.create(queryDTO));
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@ApiOperation("修改岗位文件信息")
|
||||
public AlitaResult<Void> update(@RequestBody PositionFileDTO queryDTO) {
|
||||
positionFileService.update(queryDTO);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete/{id}")
|
||||
@ApiOperation("根据文件Id删除企业文件信息")
|
||||
public AlitaResult<Void> delete(@PathVariable("id") Long id) {
|
||||
positionFileService.delete(id);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
@PutMapping("/setDefault/{id}")
|
||||
@ApiOperation("设置为默认")
|
||||
public AlitaResult<Void> setDefault(@PathVariable("id") Long id) {
|
||||
positionFileService.setDefault(id);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.newyetai.recruit.position.controller;
|
||||
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.recruit.position.dto.PositionAddressDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAddressOperatorDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAddressQueryDTO;
|
||||
import com.newyetai.recruit.position.service.PositionAddressService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位地址信息表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@Api(tags = "岗位地址信息")
|
||||
@RestController
|
||||
@RequestMapping("/hr/position/address")
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class PositionAddressController {
|
||||
|
||||
private final PositionAddressService positionAddressService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("新增岗位地址")
|
||||
public AlitaResult<Long> create(@RequestBody PositionAddressOperatorDTO queryDTO) {
|
||||
return AlitaResult.success(positionAddressService.createOrUpdate(queryDTO));
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@ApiOperation("修改岗位地址")
|
||||
public AlitaResult<Long> update(@RequestBody PositionAddressOperatorDTO queryDTO) {
|
||||
return AlitaResult.success(positionAddressService.createOrUpdate(queryDTO));
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@ApiOperation("岗位地址列表")
|
||||
public AlitaResult<List<PositionAddressDTO>> positionList(PositionAddressQueryDTO queryDTO) {
|
||||
return AlitaResult.success(positionAddressService.list(queryDTO));
|
||||
}
|
||||
|
||||
@ApiOperation("删除岗位地址")
|
||||
@DeleteMapping("/delete/{id}")
|
||||
public AlitaResult<Void> delete(@PathVariable("id") Long id) {
|
||||
positionAddressService.delete(id);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
package com.newyetai.recruit.position.controller;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
import com.newyetai.recruit.position.service.PositionAuditService;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@Api(tags = "岗位审核表")
|
||||
@RestController
|
||||
@RequestMapping("/position/audit")
|
||||
public class PositionAuditController {
|
||||
|
||||
@Autowired
|
||||
private PositionAuditService positionAuditService;
|
||||
|
||||
@PostMapping("/position_create")
|
||||
@ApiOperation("岗位审核表-创建")
|
||||
public AlitaResult<PositionNewDTO> positionCreate(@RequestBody @Validated PositionNewOperatorDTO operatorDTO) {
|
||||
return AlitaResult.success(positionAuditService.positionCreate(operatorDTO));
|
||||
}
|
||||
|
||||
@PutMapping("/position_modify")
|
||||
@ApiOperation("岗位审核表-修改")
|
||||
public AlitaResult<Void> positionModify(@RequestBody @Validated PositionNewOperatorDTO operatorDTO) {
|
||||
positionAuditService.positionModify(operatorDTO);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
@GetMapping("/position_find/{id}")
|
||||
@ApiOperation("岗位审核表-查询单个")
|
||||
public AlitaResult<PositionNewDTO> positionFindById(@PathVariable("id") Long id) {
|
||||
return AlitaResult.success(positionAuditService.positionFindById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: PC端 岗位列表分页查询
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
@GetMapping("/position_page")
|
||||
@ApiOperation("岗位-分页查询")
|
||||
public AlitaResult<Page<PositionNewDTO>> positionPage(PositionNewPageQueryDTO queryDTO) {
|
||||
positionAuditService.positionPage(queryDTO);
|
||||
return AlitaResult.success(queryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/position_export")
|
||||
@ApiOperation("岗位信息表-导出")
|
||||
public void positionExport(PositionNewPageQueryDTO queryDTO) {
|
||||
positionAuditService.export(queryDTO);
|
||||
}
|
||||
|
||||
@PutMapping("/position_modify_status")
|
||||
@ApiOperation("岗位信息表开启或者关闭招聘")
|
||||
public AlitaResult<Void> positionModifyStatus(@RequestParam("ids") Set<Long> ids, @RequestParam("status") String status) {
|
||||
positionAuditService.positionModifyStatus(ids, status);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制
|
||||
*/
|
||||
@GetMapping("/position_copy/{id}")
|
||||
public AlitaResult<Long> positionCopy(@PathVariable("id") Long id){
|
||||
return AlitaResult.success(positionAuditService.positionCopy(id));
|
||||
}
|
||||
|
||||
@GetMapping("list")
|
||||
@ApiOperation("岗位审核表-列表查询")
|
||||
public AlitaResult<List<PositionAuditDTO>> list(PositionAuditQueryDTO queryDTO) {
|
||||
return AlitaResult.success(positionAuditService.list(queryDTO));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("岗位审核表-分页查询")
|
||||
public AlitaResult<Page<PositionAuditDTO>> page(PositionAuditPageQueryDTO queryDTO) {
|
||||
positionAuditService.page(queryDTO);
|
||||
return AlitaResult.success(queryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
@ApiOperation("岗位审核信息表-查询单个")
|
||||
public AlitaResult<PositionAuditDTO> findById(@PathVariable("id") Long id) {
|
||||
return AlitaResult.success(positionAuditService.findById(id));
|
||||
}
|
||||
|
||||
@PostMapping("")
|
||||
@ApiOperation("审核")
|
||||
public AlitaResult<Void> audit(@RequestBody @Validated PositionAuditReqDTO reqDTO) {
|
||||
positionAuditService.audit(reqDTO);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.newyetai.recruit.position.controller;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
import com.newyetai.recruit.position.service.PositionService;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@Api(tags = "岗位信息表;岗位信息表")
|
||||
@RestController
|
||||
@RequestMapping("/position")
|
||||
public class PositionController {
|
||||
|
||||
@Autowired
|
||||
private PositionService positionService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("岗位信息表;岗位信息表-创建")
|
||||
public AlitaResult<PositionDTO> create(@RequestBody @Validated PositionOperatorDTO operatorDTO) {
|
||||
return AlitaResult.success(positionService.create(operatorDTO));
|
||||
}
|
||||
|
||||
@PutMapping("/modify")
|
||||
@ApiOperation("岗位信息表;岗位信息表-修改")
|
||||
public AlitaResult<PositionDTO> modify(@RequestBody @Validated PositionOperatorDTO operatorDTO) {
|
||||
return AlitaResult.success(positionService.modify(operatorDTO));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@ApiOperation("岗位信息表;岗位信息表-删除")
|
||||
public AlitaResult<PositionDTO> delete(@PathVariable("id") Long id) {
|
||||
return AlitaResult.success(positionService.delete(id));
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
@ApiOperation("岗位信息表;岗位信息表-查询单个")
|
||||
public AlitaResult<PositionDTO> findById(@PathVariable("id") Long id) {
|
||||
return AlitaResult.success(positionService.findById(id));
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@ApiOperation("岗位信息表;岗位信息表-列表查询")
|
||||
public AlitaResult<List<PositionDTO>> list(PositionPageQueryDTO queryDTO) {
|
||||
return AlitaResult.success(positionService.list(queryDTO));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("岗位信息表;岗位信息表-分页查询")
|
||||
public AlitaResult<Page<PositionDTO>> page(PositionPageQueryDTO queryDTO) {
|
||||
positionService.page(queryDTO);
|
||||
return AlitaResult.success(queryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/export")
|
||||
@ApiOperation("岗位信息表;岗位信息表-导出")
|
||||
public void export(PositionPageQueryDTO queryDTO) {
|
||||
positionService.export(queryDTO);
|
||||
}
|
||||
|
||||
@PutMapping("/modify_status")
|
||||
@ApiOperation("岗位信息表开启或者关闭招聘")
|
||||
public AlitaResult<Void> modifyStatus(@RequestBody PositionOperatorDTO dto){
|
||||
positionService.modifyStatus(dto);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
@GetMapping("/template")
|
||||
@ApiOperation("岗位 - 模板下载")
|
||||
public void template() {
|
||||
positionService.template();
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制
|
||||
*/
|
||||
@GetMapping("/copy/{id}")
|
||||
public AlitaResult<Long> copy(@PathVariable("id") Long id){
|
||||
return AlitaResult.success(positionService.copy(id));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package com.newyetai.recruit.position.controller;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
import com.newyetai.recruit.position.service.PositionRegistrationService;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
@Api(tags = "岗位报名信息表")
|
||||
@RestController
|
||||
@RequestMapping("/position_registration")
|
||||
@Slf4j
|
||||
public class PositionRegistrationController {
|
||||
|
||||
@Autowired
|
||||
private PositionRegistrationService positionRegistrationService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("岗位报名信息表-创建")
|
||||
public AlitaResult<String> create(@RequestBody @Validated PositionRegistrationOperatorDTO operatorDTO) {
|
||||
if (CollectionUtils.isEmpty(operatorDTO.getUserIds())) {
|
||||
throw new BusinessException("缺失参数");
|
||||
}
|
||||
int successrows = operatorDTO.getUserIds().size();
|
||||
for (Long userId : operatorDTO.getUserIds()) {
|
||||
try {
|
||||
operatorDTO.setUserId(userId);
|
||||
positionRegistrationService.create(operatorDTO);
|
||||
} catch (Exception e) {
|
||||
successrows = successrows - 1;
|
||||
log.error(String.format("用户id:%s 操作加入招聘失败,失败原因:%s",userId,e.getMessage()));
|
||||
}
|
||||
}
|
||||
return AlitaResult.success(String.format("成功数: %s条,失败数: %s条", successrows, operatorDTO.getUserIds().size() - successrows));
|
||||
}
|
||||
|
||||
@PutMapping("/modify")
|
||||
@ApiOperation("岗位报名信息表-修改")
|
||||
public AlitaResult<PositionRegistrationDTO> modify(@RequestBody PositionRegistrationOperatorDTO operatorDTO) {
|
||||
return AlitaResult.success(positionRegistrationService.modify(operatorDTO));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@ApiOperation("岗位报名信息表-删除")
|
||||
public AlitaResult<PositionRegistrationDTO> delete(@PathVariable("id") Long id) {
|
||||
return AlitaResult.success(positionRegistrationService.delete(id));
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
@ApiOperation("岗位报名信息表-查询单个")
|
||||
public AlitaResult<PositionRegistrationDTO> findById(@PathVariable("id") Long id, @RequestParam("childrenOrgAll") Boolean childrenOrgAll) {
|
||||
return AlitaResult.success(positionRegistrationService.findByIdAndChildrenOrgAll(id,childrenOrgAll));
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@ApiOperation("岗位报名信息表-列表查询")
|
||||
public AlitaResult<List<PositionRegistrationDTO>> list(PositionRegistrationPageQueryDTO queryDTO) {
|
||||
return AlitaResult.success(positionRegistrationService.list(queryDTO));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("岗位报名信息表-分页查询")
|
||||
public AlitaResult<Page<PositionRegistrationDTO>> page(PositionRegistrationPageQueryDTO queryDTO) {
|
||||
positionRegistrationService.page(queryDTO);
|
||||
return AlitaResult.success(queryDTO.getPageResult());
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: 用户端报名岗位
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
@PostMapping("/user_create")
|
||||
public AlitaResult<Void> userCreate(@RequestBody @Validated UserPositionRegistrationDTO dto) {
|
||||
positionRegistrationService.userCreate(dto);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/invite")
|
||||
@ApiOperation("岗位报名信息表-邀约面试")
|
||||
public AlitaResult<String> invite(@RequestBody PositionRegistrationOperatorDTO operatorDTO) {
|
||||
if (CollectionUtils.isEmpty(operatorDTO.getIds())) {
|
||||
throw new BusinessException("缺失参数");
|
||||
}
|
||||
int successrows = operatorDTO.getIds().size();
|
||||
for (Long id : operatorDTO.getIds()) {
|
||||
try {
|
||||
operatorDTO.setId(id);
|
||||
positionRegistrationService.invite(operatorDTO);
|
||||
} catch (Exception e) {
|
||||
successrows = successrows - 1;
|
||||
log.error(String.format("邀约面试id:%s 操作邀约面试,失败原因:%s",id,e.getMessage()));
|
||||
}
|
||||
}
|
||||
return AlitaResult.success(String.format("成功数: %s条,失败数: %s条", successrows, operatorDTO.getIds().size() - successrows));
|
||||
}
|
||||
|
||||
@PostMapping("/termination")
|
||||
@ApiOperation("岗位报名信息表-结束招聘")
|
||||
public AlitaResult<String> termination(@RequestBody PositionRegistrationOperatorDTO operatorDTO) {
|
||||
if (CollectionUtils.isEmpty(operatorDTO.getIds())) {
|
||||
throw new BusinessException("缺失参数");
|
||||
}
|
||||
int successrows = operatorDTO.getIds().size();
|
||||
for (Long id : operatorDTO.getIds()) {
|
||||
try {
|
||||
operatorDTO.setId(id);
|
||||
positionRegistrationService.termination(operatorDTO);
|
||||
} catch (Exception e) {
|
||||
successrows = successrows - 1;
|
||||
log.error(String.format("结束招聘id:%s 操作结束招聘,失败原因:%s",id,e.getMessage()));
|
||||
}
|
||||
}
|
||||
return AlitaResult.success(String.format("成功数: %s条,失败数: %s条", successrows, operatorDTO.getIds().size() - successrows));
|
||||
}
|
||||
|
||||
@PostMapping("/fulfillInterview")
|
||||
@ApiOperation("岗位报名信息表-完成面试")
|
||||
public AlitaResult<String> fulfillInterview(@RequestBody PositionRegistrationOperatorDTO operatorDTO) {
|
||||
if (CollectionUtils.isEmpty(operatorDTO.getIds())) {
|
||||
throw new BusinessException("缺失参数");
|
||||
}
|
||||
int successrows = operatorDTO.getIds().size();
|
||||
for (Long id : operatorDTO.getIds()) {
|
||||
try {
|
||||
operatorDTO.setId(id);
|
||||
positionRegistrationService.fulfillInterview(operatorDTO);
|
||||
} catch (Exception e) {
|
||||
successrows = successrows - 1;
|
||||
log.error(String.format("完成面试id:%s 操作完成面试,失败原因:%s",id,e.getMessage()));
|
||||
}
|
||||
}
|
||||
return AlitaResult.success(String.format("成功数: %s条,失败数: %s条", successrows, operatorDTO.getIds().size() - successrows));
|
||||
}
|
||||
|
||||
@PostMapping("/onTheJob")
|
||||
@ApiOperation("岗位报名信息表-入职")
|
||||
public AlitaResult<Void> onTheJob(@RequestBody @Validated OnTheJobDTO dto) {
|
||||
positionRegistrationService.onTheJob(dto);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/resigned")
|
||||
@ApiOperation("岗位报名信息表-离职")
|
||||
public AlitaResult<Void> resigned(@RequestBody @Validated ResignedDTO dto) {
|
||||
positionRegistrationService.resigned(dto);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
@GetMapping("/export")
|
||||
@ApiOperation("岗位报名信息表-导出")
|
||||
public void export(PositionRegistrationPageQueryDTO queryDTO) {
|
||||
positionRegistrationService.export(queryDTO);
|
||||
}
|
||||
|
||||
@GetMapping("/userPage")
|
||||
@ApiOperation("岗位报名信息表-用户端分页查询")
|
||||
public AlitaResult<Page<UserPositionRegistrationResDTO>> userPage(UserPositionRegistrationPageQueryDTO queryDTO) {
|
||||
positionRegistrationService.userPage(queryDTO);
|
||||
return AlitaResult.success(queryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/user_cancel")
|
||||
@ApiOperation("岗位报名信息表-用户端取消报名")
|
||||
public AlitaResult<Void> cancel(@RequestParam("positionId") Long positionId) {
|
||||
positionRegistrationService.cancel(positionId);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
|
||||
@ApiOperation("查看")
|
||||
@PutMapping("/show")
|
||||
public AlitaResult<Void> show(@RequestParam("id") Long id){
|
||||
positionRegistrationService.show(id);
|
||||
return AlitaResult.success();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.newyetai.recruit.position.controller;
|
||||
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.recruit.position.dto.PositionTypeDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionTypeQueryDTO;
|
||||
import com.newyetai.recruit.position.service.PositionTypeService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位信息表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@Api(tags = "岗位类型信息")
|
||||
@RestController
|
||||
@RequestMapping("/anon/hr/position/type")
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class PositionTypeController {
|
||||
|
||||
private final PositionTypeService positionTypeService;
|
||||
|
||||
@GetMapping("/tree")
|
||||
@ApiOperation("岗位类型树形列表")
|
||||
public AlitaResult<List<PositionTypeDTO>> positionList(PositionTypeQueryDTO queryDTO) {
|
||||
return AlitaResult.success(positionTypeService.query(queryDTO));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.newyetai.recruit.position.controller;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.recruit.position.dto.PositionDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionPageQueryDTO;
|
||||
import com.newyetai.recruit.position.service.PositionService;
|
||||
import com.newyetai.security.util.MockUtils;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @description: 用户端岗位信息查询
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-18 15:48
|
||||
**/
|
||||
@Api(tags = "岗位信息表;岗位信息表")
|
||||
@RestController
|
||||
public class UserPositionController {
|
||||
|
||||
@Autowired
|
||||
private PositionService positionService;
|
||||
|
||||
|
||||
@GetMapping("/anon/user/position/page")
|
||||
@ApiOperation("岗位信息表;岗位信息表-分页查询")
|
||||
public AlitaResult<Page<PositionDTO>> page(PositionPageQueryDTO queryDTO) {
|
||||
positionService.userPage(queryDTO);
|
||||
return AlitaResult.success(queryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/anon/tencent_map/user/position/page")
|
||||
@ApiOperation("岗位信息腾讯地图-分页查询")
|
||||
public AlitaResult<List<PositionDTO>> tencentMapUserPage(PositionPageQueryDTO queryDTO) {
|
||||
return AlitaResult.success(positionService.tencentMapUserPage(queryDTO));
|
||||
}
|
||||
|
||||
@GetMapping("/anon/user/position/{id}")
|
||||
@ApiOperation("岗位信息表;岗位信息表-查询单个")
|
||||
public AlitaResult<PositionDTO> userFindById(@PathVariable("id") Long id) {
|
||||
return AlitaResult.success(positionService.userFindById(id));
|
||||
}
|
||||
|
||||
@GetMapping("/user/position/personPostMatching")
|
||||
@ApiOperation("人岗匹配")
|
||||
public AlitaResult<List<PositionDTO>> personPostMatching(@RequestParam("id") Long id) {
|
||||
return AlitaResult.success(positionService.personPostMatching(id));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.newyetai.recruit.position.convert;
|
||||
|
||||
import com.newyetai.recruit.position.entity.ImportDetailPosition;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionOperatorDTO;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
@Mapper
|
||||
public interface ImportDetailPositionConvert {
|
||||
ImportDetailPositionConvert INSTANCE = Mappers.getMapper(ImportDetailPositionConvert.class);
|
||||
|
||||
ImportDetailPosition convert(ImportDetailPositionDTO dto);
|
||||
|
||||
ImportDetailPositionDTO convert(ImportDetailPosition entity);
|
||||
|
||||
ImportDetailPosition convert(ImportDetailPositionOperatorDTO dto);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.newyetai.recruit.position.convert;
|
||||
|
||||
import com.newyetai.recruit.position.dto.PositionDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionNewDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionOperatorDTO;
|
||||
import com.newyetai.recruit.position.entity.PositionAudit;
|
||||
import com.newyetai.recruit.position.dto.PositionAuditDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAuditOperatorDTO;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@Mapper
|
||||
public interface PositionAuditConvert {
|
||||
PositionAuditConvert INSTANCE = Mappers.getMapper(PositionAuditConvert.class);
|
||||
|
||||
PositionAudit convert(PositionAuditDTO dto);
|
||||
|
||||
PositionAuditDTO convert(PositionAudit entity);
|
||||
|
||||
PositionAudit convert(PositionAuditOperatorDTO dto);
|
||||
|
||||
PositionNewDTO convert(PositionOperatorDTO dto);
|
||||
|
||||
PositionNewDTO convert(PositionDTO dto);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.newyetai.recruit.position.convert;
|
||||
|
||||
import com.newyetai.recruit.position.entity.Position;
|
||||
import com.newyetai.recruit.position.dto.PositionDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionOperatorDTO;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@Mapper
|
||||
public interface PositionConvert {
|
||||
PositionConvert INSTANCE = Mappers.getMapper(PositionConvert.class);
|
||||
|
||||
Position convert(PositionDTO dto);
|
||||
|
||||
PositionDTO convert(Position entity);
|
||||
|
||||
Position convert(PositionOperatorDTO dto);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.newyetai.recruit.position.convert;
|
||||
|
||||
import com.newyetai.recruit.position.entity.PositionRegistration;
|
||||
import com.newyetai.recruit.position.dto.PositionRegistrationDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionRegistrationOperatorDTO;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
@Mapper
|
||||
public interface PositionRegistrationConvert {
|
||||
PositionRegistrationConvert INSTANCE = Mappers.getMapper(PositionRegistrationConvert.class);
|
||||
|
||||
PositionRegistration convert(PositionRegistrationDTO dto);
|
||||
|
||||
PositionRegistrationDTO convert(PositionRegistration entity);
|
||||
|
||||
PositionRegistration convert(PositionRegistrationOperatorDTO dto);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.newyetai.recruit.position.dao;
|
||||
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.recruit.position.entity.ImportDetailPosition;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionQueryDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionPageQueryDTO;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
@Mapper
|
||||
public interface ImportDetailPositionMapper extends MyMapper<ImportDetailPosition> {
|
||||
|
||||
List<ImportDetailPositionDTO> page(@Param("param") ImportDetailPositionPageQueryDTO queryDTO);
|
||||
|
||||
List<ImportDetailPositionDTO> list(@Param("param") ImportDetailPositionQueryDTO queryDTO);
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.newyetai.recruit.position.dao;
|
||||
|
||||
|
||||
import com.newyetai.recruit.position.entity.PositionAddress;
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
|
||||
|
||||
/**
|
||||
* 位置地址映射器
|
||||
*
|
||||
* @author Carlye
|
||||
* @date 2022/03/29
|
||||
*/
|
||||
public interface PositionAddressMapper extends MyMapper<PositionAddress> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.newyetai.recruit.position.dao;
|
||||
|
||||
import com.newyetai.recruit.position.dto.PositionAuditReqDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionNewDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionNewPageQueryDTO;
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.recruit.position.entity.PositionAudit;
|
||||
import com.newyetai.recruit.position.dto.PositionAuditDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAuditQueryDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAuditPageQueryDTO;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@Mapper
|
||||
public interface PositionAuditMapper extends MyMapper<PositionAudit> {
|
||||
|
||||
List<PositionAuditDTO> page(@Param("param") PositionAuditPageQueryDTO queryDTO);
|
||||
|
||||
List<PositionAuditDTO> list(@Param("param") PositionAuditQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* @description: 岗位分页查询
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
List<PositionNewDTO> positionPage(@Param("param") PositionNewPageQueryDTO queryDTO);
|
||||
|
||||
int modifyById(@Param("param") PositionAudit positionAudit);
|
||||
|
||||
int audit(@Param("param") PositionAuditReqDTO reqDTO);
|
||||
|
||||
/**
|
||||
* @description: 根据岗位id获取审核表id
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
Long getIdByPositionId(@Param("positionId") Long positionId);
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.newyetai.recruit.position.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.newyetai.recruit.position.dto.PositionFileDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionFilePageQueryDTO;
|
||||
import com.newyetai.recruit.position.entity.PositionFile;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 用户岗位访问记录表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Carlye
|
||||
* @since 2021-01-21
|
||||
*/
|
||||
@Mapper
|
||||
public interface PositionFileMapper extends BaseMapper<PositionFile> {
|
||||
|
||||
|
||||
List<PositionFileDTO> filePage(PositionFilePageQueryDTO queryDTO);
|
||||
|
||||
void setDefault(@Param("positionId") Long positionId, @Param("id") Long id);
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.newyetai.recruit.position.dao;
|
||||
|
||||
import com.newyetai.recruit.position.dto.PersonPostMatchingQueryDTO;
|
||||
import com.newyetai.recruit.statistics.dto.StatisticsBaseDTO;
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.recruit.position.entity.Position;
|
||||
import com.newyetai.recruit.position.dto.PositionDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionPageQueryDTO;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@Mapper
|
||||
public interface PositionMapper extends MyMapper<Position> {
|
||||
|
||||
List<PositionDTO> page(@Param("param") PositionPageQueryDTO queryDTO);
|
||||
|
||||
|
||||
List<PositionDTO> userPage(@Param("param") PositionPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 岗位类型分组求数量
|
||||
*/
|
||||
List<StatisticsBaseDTO> positionTypeGroupMap(@Param("recruitPositionType") String recruitPositionType);
|
||||
|
||||
List<PositionDTO> personPostMatching(@Param("param") PersonPostMatchingQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 岗位过期
|
||||
*/
|
||||
void positionExpiry();
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.newyetai.recruit.position.dao;
|
||||
|
||||
import com.newyetai.recruit.position.dto.UserPositionRegistrationPageQueryDTO;
|
||||
import com.newyetai.recruit.position.dto.UserPositionRegistrationResDTO;
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.recruit.position.entity.PositionRegistration;
|
||||
import com.newyetai.recruit.position.dto.PositionRegistrationDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionRegistrationPageQueryDTO;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
@Mapper
|
||||
public interface PositionRegistrationMapper extends MyMapper<PositionRegistration> {
|
||||
|
||||
List<PositionRegistrationDTO> page(@Param("param") PositionRegistrationPageQueryDTO queryDTO);
|
||||
|
||||
long updateStatus(@Param("param") PositionRegistration positionRegistration, @Param("oldStatus") String oldStatus);
|
||||
|
||||
List<UserPositionRegistrationResDTO> userPage(@Param("param") UserPositionRegistrationPageQueryDTO queryDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.newyetai.recruit.position.dao;
|
||||
|
||||
|
||||
import com.newyetai.recruit.position.dto.PositionTypeDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionTypeQueryDTO;
|
||||
import com.newyetai.recruit.position.entity.PositionType;
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 用户岗位访问记录表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Carlye
|
||||
* @since 2021-01-21
|
||||
*/
|
||||
@Mapper
|
||||
public interface PositionTypeMapper extends MyMapper<PositionType> {
|
||||
|
||||
List<PositionTypeDTO> queryByDto(PositionTypeQueryDTO queryDTO);
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.component.commonimport.dto.ImportDetailSuperDTO;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
@ApiModel("岗位导入")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ImportDetailPositionDTO extends ImportDetailSuperDTO {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("导入任务ID")
|
||||
private Long mainId;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("模板全量数据")
|
||||
private String dataJson;
|
||||
|
||||
@ApiModelProperty("用工企业ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
private String companyName;
|
||||
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
/**
|
||||
* 岗位性质 数据字典
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionTypeName;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("明细状态")
|
||||
private Integer detailStatus;
|
||||
|
||||
@ApiModelProperty("失败原因")
|
||||
private String failReason;
|
||||
|
||||
@ApiModelProperty("外部生成明细id")
|
||||
private Long extraDetailId;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
private String endTime;
|
||||
|
||||
public void appendFailMsg(String msg) {
|
||||
if (StrUtil.isEmpty(msg)) {
|
||||
return;
|
||||
}
|
||||
if (StrUtil.isEmpty(getFailReason())) {
|
||||
setFailReason(msg);
|
||||
} else {
|
||||
setFailReason(String.join(",", getFailReason(), msg));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.component.commonimport.dto.ImportExecuteSuperDTO;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description: 确定导入DTO
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-12 10:25
|
||||
**/
|
||||
@Data
|
||||
public class ImportDetailPositionExecuteDTO extends ImportExecuteSuperDTO {
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: guixinman
|
||||
* @create: 2024-06-12 13:57
|
||||
**/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ImportDetailPositionExportDTO implements Serializable {
|
||||
|
||||
@ExcelProperty("用工企业")
|
||||
private String companyName;
|
||||
|
||||
@ExcelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ExcelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ExcelProperty("招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ExcelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
/**
|
||||
* 岗位性质 数据字典
|
||||
*/
|
||||
@ExcelProperty("岗位性质")
|
||||
private String recruitPositionType;
|
||||
|
||||
@ExcelProperty("岗位类型")
|
||||
private String positionTypeName;
|
||||
|
||||
@ExcelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
@ExcelProperty("薪资下限")
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
@ExcelProperty("薪资上限")
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
@ExcelProperty("薪资类型")
|
||||
private String salaryType;
|
||||
|
||||
@ExcelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ExcelProperty("性别")
|
||||
private String sexRequire;
|
||||
|
||||
@ExcelProperty("年龄(下限)")
|
||||
private Integer ageLow;
|
||||
|
||||
@ExcelProperty("年龄(上限)")
|
||||
private Integer ageUp;
|
||||
|
||||
@ExcelProperty("学历")
|
||||
private String educationRequire;
|
||||
|
||||
@ExcelProperty("经验")
|
||||
private String experienceRequire;
|
||||
|
||||
@ExcelProperty("证件")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ExcelProperty("其他")
|
||||
private String otherRequire;
|
||||
|
||||
@ExcelProperty("工作")
|
||||
private String jobContent;
|
||||
|
||||
@ExcelProperty("有效期截止时间")
|
||||
private String endTime;
|
||||
|
||||
@ExcelProperty("失败原因")
|
||||
private String failReason;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.newyetai.component.commonimport.service.IImportDetailForm;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description: 岗位导入dto
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-12 10:26
|
||||
**/
|
||||
@Data
|
||||
public class ImportDetailPositionListenerDTO implements IImportDetailForm {
|
||||
|
||||
@ApiModelProperty("用工企业")
|
||||
private String companyName;
|
||||
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
/**
|
||||
* 岗位性质 数据字典
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionTypeName;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
@ApiModelProperty("薪资下限")
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
@ApiModelProperty("薪资上限")
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
@ApiModelProperty("薪资类型")
|
||||
private String salaryType;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("年龄(下限)")
|
||||
private Integer ageLow;
|
||||
|
||||
@ApiModelProperty("年龄(上限)")
|
||||
private Integer ageUp;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
private String endTime;
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
@ApiModel("岗位导入")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ImportDetailPositionOperatorDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("导入任务ID")
|
||||
private Long mainId;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("模板全量数据")
|
||||
private String dataJson;
|
||||
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
/**
|
||||
* 岗位性质 数据字典
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private Integer sexRequire;
|
||||
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private Integer educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("明细状态")
|
||||
private Integer detailStatus;
|
||||
|
||||
@ApiModelProperty("失败原因")
|
||||
private String failReason;
|
||||
|
||||
@ApiModelProperty("外部生成明细id")
|
||||
private Long extraDetailId;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
private Date endTime;
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
|
||||
@ApiModel("岗位导入")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ImportDetailPositionPageQueryDTO extends PageQueryDTO<ImportDetailPositionDTO> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("导入任务ID")
|
||||
private Long mainId;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("模板全量数据")
|
||||
private String dataJson;
|
||||
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位名称 (模糊匹配)")
|
||||
private String positionNameLike;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
/**
|
||||
* 岗位性质 数据字典
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private Integer sexRequire;
|
||||
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private Integer educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("明细状态")
|
||||
private Integer detailStatus;
|
||||
|
||||
@ApiModelProperty("失败原因")
|
||||
private String failReason;
|
||||
|
||||
@ApiModelProperty("外部生成明细id")
|
||||
private Long extraDetailId;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("创建时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeStart;
|
||||
|
||||
@ApiModelProperty("创建时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeEnd;
|
||||
|
||||
@ApiModelProperty("更新时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeStart;
|
||||
|
||||
@ApiModelProperty("更新时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeEnd;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
@ApiModel("岗位导入")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ImportDetailPositionQueryDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("导入任务ID")
|
||||
private Long mainId;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("模板全量数据")
|
||||
private String dataJson;
|
||||
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位名称 (模糊匹配)")
|
||||
private String positionNameLike;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
/**
|
||||
* 岗位性质 数据字典
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private Integer sexRequire;
|
||||
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private Integer educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("明细状态")
|
||||
private Integer detailStatus;
|
||||
|
||||
@ApiModelProperty("失败原因")
|
||||
private String failReason;
|
||||
|
||||
@ApiModelProperty("外部生成明细id")
|
||||
private Long extraDetailId;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("创建时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeStart;
|
||||
|
||||
@ApiModelProperty("创建时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeEnd;
|
||||
|
||||
@ApiModelProperty("更新时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeStart;
|
||||
|
||||
@ApiModelProperty("更新时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeEnd;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description: 入职DTO
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-16 14:47
|
||||
**/
|
||||
@Data
|
||||
public class OnTheJobDTO implements Serializable {
|
||||
|
||||
|
||||
@NotNull(message = "入职时间不能为空")
|
||||
@ApiModelProperty("入职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date inductionTime;
|
||||
|
||||
@NotNull(message = "明细数据不能为空")
|
||||
private List<@Valid OnTheJobDetailDTO> detailDTOS;
|
||||
|
||||
@Data
|
||||
public static class OnTheJobDetailDTO {
|
||||
|
||||
@NotNull(message = "请选择数据")
|
||||
private Long id;
|
||||
|
||||
@NotNull(message = "入职薪水不能为空")
|
||||
@ApiModelProperty("入职薪水")
|
||||
private BigDecimal salary;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: guixinman
|
||||
* @create: 2024-09-11 16:51
|
||||
**/
|
||||
@ApiModel("人岗匹配")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class PersonPostMatchingQueryDTO extends PageQueryDTO<PositionDTO> {
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private String sexRequire;
|
||||
|
||||
/**
|
||||
* 年龄
|
||||
*/
|
||||
private Integer age;
|
||||
|
||||
/**
|
||||
* 学历
|
||||
*/
|
||||
private String educationRequire;
|
||||
|
||||
/**
|
||||
* 薪水
|
||||
*/
|
||||
private BigDecimal salary;
|
||||
|
||||
/**
|
||||
* 岗位类型
|
||||
*/
|
||||
private String positionType;
|
||||
private String positionNameLike;
|
||||
|
||||
/**
|
||||
* 工作地
|
||||
*/
|
||||
private String detailAddressLike;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位地址信息表
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ApiModel("招聘系统岗位地址信息DTO")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionAddressDTO extends BaseDTO {
|
||||
|
||||
private static final long serialVersionUID = -350362178226190054L;
|
||||
|
||||
@ApiModelProperty("岗位ID")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("区域编码")
|
||||
private String districtCode;
|
||||
|
||||
@ApiModelProperty("区域名称")
|
||||
private String districtName;
|
||||
|
||||
@ApiModelProperty("详细地址")
|
||||
private String detailAddress;
|
||||
|
||||
@ApiModelProperty("经度")
|
||||
private BigDecimal longitude;
|
||||
|
||||
@ApiModelProperty("纬度")
|
||||
private BigDecimal latitude;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位地址信息表
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ApiModel("招聘系统岗位地址信息 - 创建DTO")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionAddressOperatorDTO extends BaseDTO {
|
||||
|
||||
private static final long serialVersionUID = -350362178226190054L;
|
||||
|
||||
@ApiModelProperty("企业ID")
|
||||
@NotNull(message = "企业ID不能为空")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("区域编码")
|
||||
// @NotEmpty(message = "区域编码不能为空")
|
||||
private String districtCode;
|
||||
|
||||
@ApiModelProperty("区域名称")
|
||||
// @NotEmpty(message = "区域名称不能为空")
|
||||
private String districtName;
|
||||
|
||||
@ApiModelProperty("详细地址")
|
||||
@NotEmpty(message = "详细地址不能为空")
|
||||
private String detailAddress;
|
||||
|
||||
@ApiModelProperty("经度")
|
||||
// @NotEmpty(message = "经度不能为空")
|
||||
private BigDecimal longitude;
|
||||
|
||||
@ApiModelProperty("纬度")
|
||||
// @NotEmpty(message = "纬度不能为空")
|
||||
private BigDecimal latitude;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位地址信息表
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@ApiModel("招聘系统岗位地址信息 - 查询DTO")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionAddressQueryDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -6376035694183055706L;
|
||||
|
||||
@ApiModelProperty("岗位ID")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("ID集合")
|
||||
private Set<Long> ids;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@ApiModel("岗位审核表")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionAuditDTO extends BaseDTO {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long positionId;
|
||||
|
||||
private Long orgId;
|
||||
|
||||
private String orgName;
|
||||
|
||||
@ApiModelProperty("hr_company主键")
|
||||
private Long companyId;
|
||||
|
||||
private String companyName;
|
||||
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
private String positionTypeName;
|
||||
|
||||
@ApiModelProperty("工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
private Long addressId;
|
||||
|
||||
@ApiModelProperty("招聘岗位类型数据字典")
|
||||
private String recruitPositionType;
|
||||
|
||||
@ApiModelProperty("审核状态 1:待审核 2.审核成功 3.审核失败")
|
||||
private String auditStatus;
|
||||
|
||||
@ApiModelProperty("审核失败原因")
|
||||
private String auditFailMsg;
|
||||
|
||||
@ApiModelProperty("版本号")
|
||||
private Integer version;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String detailAddress;
|
||||
|
||||
private String fileJson;
|
||||
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
private String salaryStr;
|
||||
|
||||
private String ageStr;
|
||||
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
public String getSalaryStr() {
|
||||
String salary = "";
|
||||
if (Objects.nonNull(this.getSalaryUp()) && Objects.nonNull(this.getSalaryLow())) {
|
||||
salary = String.format("%s~%s元/%s", this.getSalaryLow(), this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
if (this.getSalaryLow().compareTo(this.getSalaryUp()) == 0) {
|
||||
salary = String.format("%s元/%s", this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
}
|
||||
} else if (Objects.nonNull(this.getSalaryLow()) && Objects.isNull(this.getSalaryUp())) {
|
||||
salary = String.format("%s元/%s", this.getSalaryLow(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
} else if (Objects.isNull(this.getSalaryLow()) && Objects.nonNull(this.getSalaryUp())) {
|
||||
salary = String.format("%s元/%s", this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
} else if (Objects.isNull(this.getSalaryLow()) && Objects.isNull(this.getSalaryUp())) {
|
||||
salary = "薪资面议";
|
||||
}
|
||||
return salary;
|
||||
}
|
||||
|
||||
public String getAgeStr() {
|
||||
String age = "";
|
||||
if (Objects.nonNull(this.getAgeLow()) && Objects.nonNull(this.getAgeUp())) {
|
||||
age = String.format("%s至%s岁", this.getAgeLow(), this.getAgeUp());
|
||||
if (this.getAgeLow().intValue() == this.getAgeUp().intValue()) {
|
||||
age = String.format("%s岁", this.getAgeUp());
|
||||
}
|
||||
} else if (Objects.nonNull(this.getAgeLow()) && Objects.isNull(this.getAgeUp())) {
|
||||
age = String.format("%s岁以上", this.getAgeLow());
|
||||
} else if (Objects.isNull(this.getAgeLow()) && Objects.nonNull(this.getAgeUp())) {
|
||||
age = String.format("18至%s岁", this.getAgeUp());
|
||||
} else if (Objects.isNull(this.getAgeLow()) && Objects.isNull(this.getAgeUp())) {
|
||||
age = "18岁以上";
|
||||
}
|
||||
return age;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@ApiModel("岗位审核表")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionAuditOperatorDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long positionId;
|
||||
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("hr_company主键")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
@ApiModelProperty("工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
private Long addressId;
|
||||
|
||||
@ApiModelProperty("招聘岗位类型数据字典")
|
||||
private String recruitPositionType;
|
||||
|
||||
@ApiModelProperty("审核状态 1:待审核 2.审核成功 3.审核失败")
|
||||
private String auditStatus;
|
||||
|
||||
@ApiModelProperty("审核失败原因")
|
||||
private String auditFailMsg;
|
||||
|
||||
@ApiModelProperty("版本号")
|
||||
private Integer version;
|
||||
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
|
||||
@ApiModel("岗位审核表")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionAuditPageQueryDTO extends PageQueryDTO<PositionAuditDTO> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long positionId;
|
||||
|
||||
private Long orgId;
|
||||
|
||||
private Set<Long> orgIds;
|
||||
|
||||
private String orgNameLike;
|
||||
|
||||
@ApiModelProperty("hr_company主键")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位名称 (模糊匹配)")
|
||||
private String positionNameLike;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
@ApiModelProperty("工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
private Long addressId;
|
||||
|
||||
@ApiModelProperty("招聘岗位类型数据字典")
|
||||
private String recruitPositionType;
|
||||
|
||||
@ApiModelProperty("审核状态 1:待审核 2.审核成功 3.审核失败")
|
||||
private String auditStatus;
|
||||
|
||||
@ApiModelProperty("审核失败原因")
|
||||
private String auditFailMsg;
|
||||
|
||||
@ApiModelProperty("版本号")
|
||||
private Integer version;
|
||||
|
||||
@ApiModelProperty("创建时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeStart;
|
||||
|
||||
@ApiModelProperty("创建时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeEnd;
|
||||
|
||||
@ApiModelProperty("更新时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeStart;
|
||||
|
||||
@ApiModelProperty("更新时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeEnd;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@ApiModel("岗位审核表")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class PositionAuditQueryDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long positionId;
|
||||
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("hr_company主键")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位名称 (模糊匹配)")
|
||||
private String positionNameLike;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
@ApiModelProperty("工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
private Long addressId;
|
||||
|
||||
@ApiModelProperty("招聘岗位类型数据字典")
|
||||
private String recruitPositionType;
|
||||
|
||||
@ApiModelProperty("审核状态 1:待审核 2.审核成功 3.审核失败")
|
||||
private String auditStatus;
|
||||
|
||||
@ApiModelProperty("审核失败原因")
|
||||
private String auditFailMsg;
|
||||
|
||||
@ApiModelProperty("版本号")
|
||||
private Integer version;
|
||||
|
||||
@ApiModelProperty("创建时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeStart;
|
||||
|
||||
@ApiModelProperty("创建时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeEnd;
|
||||
|
||||
@ApiModelProperty("更新时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeStart;
|
||||
|
||||
@ApiModelProperty("更新时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeEnd;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: guixinman
|
||||
* @create: 2024-07-05 15:39
|
||||
**/
|
||||
@Data
|
||||
public class PositionAuditReqDTO implements Serializable {
|
||||
|
||||
@NotNull(message = "id不能为空")
|
||||
private Long id;
|
||||
|
||||
@NotBlank(message = "请选择审核状态")
|
||||
@ApiModelProperty("审核状态 1:待审核 2.审核成功 3.审核失败")
|
||||
private String auditStatus;
|
||||
|
||||
@ApiModelProperty("审核失败原因")
|
||||
private String auditFailMsg;
|
||||
|
||||
@NotNull(message = "版本号不能为空")
|
||||
private Integer version;
|
||||
|
||||
private Long updateBy;
|
||||
|
||||
}
|
||||
248
src/main/java/com/newyetai/recruit/position/dto/PositionDTO.java
Normal file
248
src/main/java/com/newyetai/recruit/position/dto/PositionDTO.java
Normal file
@@ -0,0 +1,248 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@ApiModel("岗位信息表;岗位信息表")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionDTO extends BaseDTO {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
private String companyName;
|
||||
|
||||
@ApiModelProperty("岗位状态:1:开启 2:关闭")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
private String positionTypeName;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
@ApiModelProperty("工作性质;工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
private String companyLogo;
|
||||
|
||||
@ApiModelProperty("招聘负责人名称")
|
||||
private String recruitUserRealName;
|
||||
|
||||
private String recruitUserAvatar;
|
||||
|
||||
private String recruitUserPhone;
|
||||
|
||||
private String positionFileCode;
|
||||
|
||||
private String companyRegisterAddress;
|
||||
|
||||
private List<PositionFileDTO> positionFileDTOS;
|
||||
|
||||
@ApiModelProperty("状态:1已报名、2待面试、3面试不通过、4待入职、5已入职、 6已离职、 7结束招聘")
|
||||
private String positionRegistrationStatus;
|
||||
/**
|
||||
* 是否收藏
|
||||
*/
|
||||
private Boolean isCollection;
|
||||
|
||||
@ApiModelProperty("工作地址id")
|
||||
private Long addressId;
|
||||
|
||||
/**
|
||||
* 区域编码(31)
|
||||
*/
|
||||
private String districtCode;
|
||||
|
||||
/**
|
||||
* 区域名称 (上海市)
|
||||
*/
|
||||
private String districtName;
|
||||
|
||||
/**
|
||||
* 详细地址 (浦东新区黄金大厦B座)
|
||||
*/
|
||||
private String detailAddress;
|
||||
/**
|
||||
* 经度
|
||||
*/
|
||||
private BigDecimal longitude;
|
||||
/**
|
||||
* 纬度
|
||||
*/
|
||||
private BigDecimal latitude;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
private String recruitPositionTypeName;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
|
||||
private String salaryStr;
|
||||
|
||||
private String ageStr;
|
||||
|
||||
private Boolean show;
|
||||
|
||||
@ApiModelProperty("报名时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date positionRegistrationCreateTime;
|
||||
|
||||
@ApiModelProperty("面试时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date interviewTime;
|
||||
|
||||
@ApiModelProperty("面试地点")
|
||||
private String interviewLocation;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("入职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date inductionTime;
|
||||
|
||||
@ApiModelProperty("入职薪资")
|
||||
private BigDecimal positionRegistrationSalary;
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
* 米
|
||||
*/
|
||||
private Long distance;
|
||||
|
||||
public String getSalaryStr() {
|
||||
String salary = "";
|
||||
if (Objects.nonNull(this.getSalaryUp()) && Objects.nonNull(this.getSalaryLow())) {
|
||||
salary = String.format("%s~%s元/%s", this.getSalaryLow(), this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
if (this.getSalaryLow().compareTo(this.getSalaryUp()) == 0) {
|
||||
salary = String.format("%s元/%s", this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
}
|
||||
} else if (Objects.nonNull(this.getSalaryLow()) && Objects.isNull(this.getSalaryUp())) {
|
||||
salary = String.format("%s元/%s", this.getSalaryLow(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
} else if (Objects.isNull(this.getSalaryLow()) && Objects.nonNull(this.getSalaryUp())) {
|
||||
salary = String.format("%s元/%s", this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
} else if (Objects.isNull(this.getSalaryLow()) && Objects.isNull(this.getSalaryUp())) {
|
||||
salary = "薪资面议";
|
||||
}
|
||||
return salary;
|
||||
}
|
||||
|
||||
public String getAgeStr() {
|
||||
String age = "";
|
||||
if (Objects.nonNull(this.getAgeLow()) && Objects.nonNull(this.getAgeUp())) {
|
||||
age = String.format("%s至%s岁", this.getAgeLow(), this.getAgeUp());
|
||||
if (this.getAgeLow().intValue() == this.getAgeUp().intValue()) {
|
||||
age = String.format("%s岁", this.getAgeUp());
|
||||
}
|
||||
} else if (Objects.nonNull(this.getAgeLow()) && Objects.isNull(this.getAgeUp())) {
|
||||
age = String.format("%s岁以上", this.getAgeLow());
|
||||
} else if (Objects.isNull(this.getAgeLow()) && Objects.nonNull(this.getAgeUp())) {
|
||||
age = String.format("18至%s岁", this.getAgeUp());
|
||||
} else if (Objects.isNull(this.getAgeLow()) && Objects.isNull(this.getAgeUp())) {
|
||||
age = "18岁以上";
|
||||
}
|
||||
return age;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-11 17:04
|
||||
**/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionExportDTO implements Serializable {
|
||||
|
||||
@ExcelProperty("招聘岗位类型")
|
||||
@ApiModelProperty("招聘岗位类型")
|
||||
private String recruitPositionTypeName;
|
||||
|
||||
@ExcelProperty("岗位名称")
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ExcelProperty("用工企业")
|
||||
@ApiModelProperty("用工企业")
|
||||
private String companyName;
|
||||
|
||||
@ExcelProperty("岗位状态")
|
||||
@ApiModelProperty("岗位状态:1:开启 2:关闭")
|
||||
private String status;
|
||||
|
||||
@ExcelProperty("招聘人数")
|
||||
@ApiModelProperty("招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ExcelProperty("综合薪资")
|
||||
@ApiModelProperty("综合薪资")
|
||||
private String salary;
|
||||
|
||||
@ExcelProperty("工作地址")
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("创建时间")
|
||||
@ExcelProperty("创建时间")
|
||||
private String createTime;
|
||||
|
||||
@ApiModelProperty("有效期截止时间")
|
||||
@ExcelProperty("有效期截止时间")
|
||||
private String endTime;
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位文件
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@ApiModel("招聘系统岗位文件DTO")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionFileDTO implements Serializable {
|
||||
|
||||
|
||||
private static final long serialVersionUID = 8851173648134487125L;
|
||||
|
||||
@ApiModelProperty("主键")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("文件名称")
|
||||
private String fileName;
|
||||
|
||||
@ApiModelProperty("文件编码")
|
||||
private String fileCode;
|
||||
|
||||
@ApiModelProperty("文件后缀")
|
||||
private String fileSuffix;
|
||||
|
||||
@ApiModelProperty("文件描述")
|
||||
private String description;
|
||||
|
||||
@ApiModelProperty("文件类型")
|
||||
private String fileType;
|
||||
|
||||
@ApiModelProperty("默认显示")
|
||||
private Boolean defaultShow;
|
||||
|
||||
@ApiModelProperty("排序")
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty("岗位ID")
|
||||
private Long positionId;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位相关分页请求DTO
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ApiModel("招聘系统岗位相关分页查询DTO")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionFilePageQueryDTO extends PageQueryDTO<PositionFileDTO> {
|
||||
|
||||
private static final long serialVersionUID = -6211701785572927530L;
|
||||
|
||||
@ApiModelProperty("岗位ID")
|
||||
private Long positionId;
|
||||
|
||||
@ApiModelProperty("文件类型")
|
||||
private String fileType;
|
||||
}
|
||||
@@ -0,0 +1,237 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@ApiModel("岗位信息表;岗位信息表")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionNewDTO extends BaseDTO {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
private String companyName;
|
||||
|
||||
@ApiModelProperty("岗位状态:1:开启 2:关闭")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
private String positionTypeName;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
@ApiModelProperty("工作性质;工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
private String companyLogo;
|
||||
|
||||
@ApiModelProperty("招聘负责人名称")
|
||||
private String recruitUserRealName;
|
||||
|
||||
private String recruitUserAvatar;
|
||||
|
||||
private String recruitUserPhone;
|
||||
|
||||
private String positionFileCode;
|
||||
|
||||
private String companyRegisterAddress;
|
||||
|
||||
private List<PositionFileDTO> positionFileDTOS;
|
||||
|
||||
@ApiModelProperty("状态:1已报名、2待面试、3面试不通过、4待入职、5已入职、 6已离职、 7结束招聘")
|
||||
private String positionRegistrationStatus;
|
||||
/**
|
||||
* 是否收藏
|
||||
*/
|
||||
private Boolean isCollection;
|
||||
|
||||
@ApiModelProperty("工作地址id")
|
||||
private Long addressId;
|
||||
|
||||
/**
|
||||
* 区域编码(31)
|
||||
*/
|
||||
private String districtCode;
|
||||
|
||||
/**
|
||||
* 区域名称 (上海市)
|
||||
*/
|
||||
private String districtName;
|
||||
|
||||
/**
|
||||
* 详细地址 (浦东新区黄金大厦B座)
|
||||
*/
|
||||
private String detailAddress;
|
||||
/**
|
||||
* 经度
|
||||
*/
|
||||
private BigDecimal longitude;
|
||||
/**
|
||||
* 纬度
|
||||
*/
|
||||
private BigDecimal latitude;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
private String recruitPositionTypeName;
|
||||
|
||||
private Long positionAuditId;
|
||||
|
||||
/**
|
||||
* 审核状态 1:待审核 2.审核成功 3.审核失败
|
||||
*/
|
||||
private String auditStatus;
|
||||
|
||||
@ApiModelProperty("审核失败原因")
|
||||
private String auditFailMsg;
|
||||
|
||||
private Integer version;
|
||||
|
||||
/**
|
||||
* 岗位相册json
|
||||
*/
|
||||
private String fileJson;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
|
||||
private String salaryStr;
|
||||
|
||||
private String ageStr;
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
public String getSalaryStr() {
|
||||
String salary = "";
|
||||
if (Objects.nonNull(this.getSalaryUp()) && Objects.nonNull(this.getSalaryLow())) {
|
||||
salary = String.format("%s~%s元/%s", this.getSalaryLow(), this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
if (this.getSalaryLow().compareTo(this.getSalaryUp()) == 0) {
|
||||
salary = String.format("%s元/%s", this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
}
|
||||
} else if (Objects.nonNull(this.getSalaryLow()) && Objects.isNull(this.getSalaryUp())) {
|
||||
salary = String.format("%s元/%s", this.getSalaryLow(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
} else if (Objects.isNull(this.getSalaryLow()) && Objects.nonNull(this.getSalaryUp())) {
|
||||
salary = String.format("%s元/%s", this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
} else if (Objects.isNull(this.getSalaryLow()) && Objects.isNull(this.getSalaryUp())) {
|
||||
salary = "薪资面议";
|
||||
}
|
||||
return salary;
|
||||
}
|
||||
|
||||
public String getAgeStr() {
|
||||
String age = "";
|
||||
if (Objects.nonNull(this.getAgeLow()) && Objects.nonNull(this.getAgeUp())) {
|
||||
age = String.format("%s至%s岁", this.getAgeLow(), this.getAgeUp());
|
||||
if (this.getAgeLow().intValue() == this.getAgeUp().intValue()) {
|
||||
age = String.format("%s岁", this.getAgeUp());
|
||||
}
|
||||
} else if (Objects.nonNull(this.getAgeLow()) && Objects.isNull(this.getAgeUp())) {
|
||||
age = String.format("%s岁以上", this.getAgeLow());
|
||||
} else if (Objects.isNull(this.getAgeLow()) && Objects.nonNull(this.getAgeUp())) {
|
||||
age = String.format("18至%s岁", this.getAgeUp());
|
||||
} else if (Objects.isNull(this.getAgeLow()) && Objects.isNull(this.getAgeUp())) {
|
||||
age = "18岁以上";
|
||||
}
|
||||
return age;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.common.annotation.trimAndUpper.TrimAndUpper;
|
||||
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: guixinman
|
||||
* @create: 2024-07-08 10:18
|
||||
**/
|
||||
@ApiModel("岗位审核表")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionNewOperatorDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
//开启招聘 关闭招聘用
|
||||
private Set<Long> ids;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@NotNull(message = "请选择用工企业")
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位状态:1:开启 2:关闭")
|
||||
private String status;
|
||||
|
||||
@Length(max = 50,message = "岗位名称超长")
|
||||
@TrimAndUpper(value = TrimAndUpper.ExecuteType.TRIM)
|
||||
@NotBlank(message = "岗位名称不能为空")
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@Length(max = 255,message = "招聘标题超长")
|
||||
@TrimAndUpper(value = TrimAndUpper.ExecuteType.TRIM)
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
/**
|
||||
* 岗位标签
|
||||
*/
|
||||
@Length(max = 512,message = "岗位标签超长")
|
||||
private String positionTag;
|
||||
|
||||
@ApiModelProperty("工作性质;工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@Max(value = 30000,message = "岗位招聘人数超长")
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@Length(max = 255,message = "工作地址超长")
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@Length(max = 32,message = "发薪日超长")
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@Length(max = 2,message = "性别要求超长")
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@Length(max = 32,message = "学历要求超长")
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@Length(max = 32,message = "经验要求超长")
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@Length(max = 32,message = "证件要求超长")
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@Length(max = 32,message = "其他要求超长")
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
private Long addressId;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
@Length(max = 2,message = "招聘岗位类型超长")
|
||||
@NotBlank(message = "请选择招聘岗位类型")
|
||||
private String recruitPositionType;
|
||||
|
||||
private Long positionAuditId;
|
||||
|
||||
/**
|
||||
* 版本号
|
||||
*/
|
||||
private Integer version;
|
||||
|
||||
|
||||
/**
|
||||
* 岗位相册json
|
||||
*/
|
||||
private String fileJson;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@NotNull(message = "有效期截止日期不能为空")
|
||||
private Date endTime;
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
|
||||
@ApiModel("岗位信息表;岗位信息表")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionNewPageQueryDTO extends PageQueryDTO<PositionNewDTO> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private List<Long> ids;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位状态:1:开启 2:关闭")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("岗位名称 (模糊匹配)")
|
||||
private String positionNameLike;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
private String recruitTitleLike;
|
||||
|
||||
private String positionTagLike;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
@ApiModelProperty("工作性质;工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("创建时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeStart;
|
||||
|
||||
@ApiModelProperty("创建时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeEnd;
|
||||
|
||||
@ApiModelProperty("更新时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeStart;
|
||||
|
||||
@ApiModelProperty("更新时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeEnd;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
private String recruitPositionTypeName;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.common.annotation.trimAndUpper.TrimAndUpper;
|
||||
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@ApiModel("岗位信息表;岗位信息表")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionOperatorDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
//开启招聘 关闭招聘用
|
||||
private Set<Long> ids;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@NotNull(message = "请选择用工企业")
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位状态:1:开启 2:关闭")
|
||||
private String status;
|
||||
|
||||
@Length(max = 50,message = "岗位名称超长")
|
||||
@TrimAndUpper(value = TrimAndUpper.ExecuteType.TRIM)
|
||||
@NotBlank(message = "岗位名称不能为空")
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@Length(max = 255,message = "招聘标题超长")
|
||||
@TrimAndUpper(value = TrimAndUpper.ExecuteType.TRIM)
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
/**
|
||||
* 岗位标签
|
||||
*/
|
||||
@Length(max = 512,message = "岗位标签超长")
|
||||
private String positionTag;
|
||||
|
||||
@ApiModelProperty("工作性质;工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@Max(value = 30000,message = "岗位招聘人数超长")
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@Length(max = 255,message = "工作地址超长")
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@Length(max = 32,message = "发薪日超长")
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@Length(max = 2,message = "性别要求超长")
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@Length(max = 32,message = "学历要求超长")
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@Length(max = 32,message = "经验要求超长")
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@Length(max = 32,message = "证件要求超长")
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@Length(max = 32,message = "其他要求超长")
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
private Long addressId;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
@Length(max = 2,message = "招聘岗位类型超长")
|
||||
@NotBlank(message = "请选择招聘岗位类型")
|
||||
private String recruitPositionType;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
@Min(value = 18,message = "年龄下限不低于18周岁")
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
|
||||
@ApiModel("岗位信息表;岗位信息表")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionPageQueryDTO extends PageQueryDTO<PositionDTO> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private List<Long> ids;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位状态:1:开启 2:关闭")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("岗位名称 (模糊匹配)")
|
||||
private String positionNameLike;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
private String recruitTitleLike;
|
||||
|
||||
private String positionTagLike;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
@ApiModelProperty("工作性质;工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("创建时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeStart;
|
||||
|
||||
@ApiModelProperty("创建时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeEnd;
|
||||
|
||||
@ApiModelProperty("更新时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeStart;
|
||||
|
||||
@ApiModelProperty("更新时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeEnd;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
private String recruitPositionTypeName;
|
||||
|
||||
/**
|
||||
* 查询sql是否判断 有效期
|
||||
*/
|
||||
@Builder.Default
|
||||
private Boolean useEndTime = Boolean.TRUE;
|
||||
|
||||
/**
|
||||
* 经度
|
||||
*/
|
||||
private BigDecimal longitude;
|
||||
/**
|
||||
* 纬度
|
||||
*/
|
||||
private BigDecimal latitude;
|
||||
|
||||
/**
|
||||
* 千米
|
||||
*/
|
||||
private int radius;
|
||||
|
||||
private BigDecimal minX;
|
||||
|
||||
private BigDecimal maxX;
|
||||
|
||||
private BigDecimal minY;
|
||||
|
||||
private BigDecimal maxY;
|
||||
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
private BigDecimal salaryLow;
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@ApiModel("岗位信息表;岗位信息表")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class PositionQueryDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("机构ID")
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("公司ID ;hr_company")
|
||||
private Long companyId;
|
||||
|
||||
@ApiModelProperty("岗位状态:1:开启 2:关闭")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("岗位名称 (模糊匹配)")
|
||||
private String positionNameLike;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionType;
|
||||
|
||||
@ApiModelProperty("工作性质;工作性质 1:短工 2:全职")
|
||||
private String jobCategory;
|
||||
|
||||
@ApiModelProperty("岗位招聘人数")
|
||||
private Integer positionNumber;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private Long recruitUserId;
|
||||
|
||||
@ApiModelProperty("发薪日")
|
||||
private String payDate;
|
||||
|
||||
@ApiModelProperty("性别要求")
|
||||
private String sexRequire;
|
||||
|
||||
@ApiModelProperty("学历要求")
|
||||
private String educationRequire;
|
||||
|
||||
@ApiModelProperty("经验要求")
|
||||
private String experienceRequire;
|
||||
|
||||
@ApiModelProperty("证件要求")
|
||||
private String certificatesRequire;
|
||||
|
||||
@ApiModelProperty("其他要求")
|
||||
private String otherRequire;
|
||||
|
||||
@ApiModelProperty("工作内容")
|
||||
private String jobContent;
|
||||
|
||||
@ApiModelProperty("创建时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeStart;
|
||||
|
||||
@ApiModelProperty("创建时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeEnd;
|
||||
|
||||
@ApiModelProperty("更新时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeStart;
|
||||
|
||||
@ApiModelProperty("更新时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeEnd;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
import com.newyetai.common.util.IdcardUtils;
|
||||
import com.newyetai.recruit.user.dto.JobExpectDTO;
|
||||
import com.newyetai.recruit.user.dto.UserCertificateDTO;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
@ApiModel("岗位报名信息表")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionRegistrationDTO extends BaseDTO {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("岗位ID")
|
||||
private Long positionId;
|
||||
|
||||
@ApiModelProperty("用户ID ")
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty("状态:1已报名、2待面试、3面试不通过、4待入职、5已入职、 6已离职、 7结束招聘")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("面试时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date interviewTime;
|
||||
|
||||
@ApiModelProperty("面试地点")
|
||||
private String interviewLocation;
|
||||
|
||||
@ApiModelProperty("入职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date inductionTime;
|
||||
|
||||
@ApiModelProperty("离职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date quitTime;
|
||||
|
||||
@ApiModelProperty("终止时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date terminationTime;
|
||||
|
||||
@ApiModelProperty("入职薪水")
|
||||
private BigDecimal salary;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
private String positionName;
|
||||
|
||||
private Long companyId;
|
||||
|
||||
private String companyName;
|
||||
|
||||
private String realName;
|
||||
|
||||
private String cardNo;
|
||||
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 招聘专员
|
||||
*/
|
||||
private String recruitUserName;
|
||||
|
||||
@ApiModelProperty("性别")
|
||||
private String gender;
|
||||
|
||||
@ApiModelProperty("年龄")
|
||||
private Integer age;
|
||||
|
||||
@ApiModelProperty("所在城市")
|
||||
private String cityCode;
|
||||
|
||||
private String cityCodeName;
|
||||
|
||||
@ApiModelProperty("简历")
|
||||
private String resumeFileCode;
|
||||
|
||||
@ApiModelProperty("求职期望")
|
||||
private List<JobExpectDTO> jobExpectDTOList;
|
||||
|
||||
@ApiModelProperty("证书")
|
||||
private List<UserCertificateDTO> userCertificateDTOList;
|
||||
|
||||
private Boolean show;
|
||||
|
||||
@ApiModelProperty("所属街道名称")
|
||||
private String streetName;
|
||||
|
||||
@ApiModelProperty("发布机构名称")
|
||||
private String publishOrgName;
|
||||
|
||||
public void setCardNo(String cardNo) {
|
||||
this.setAge(IdcardUtils.getAgeByIDNumber(cardNo));
|
||||
this.setGender(IdcardUtils.judgeGender(cardNo));
|
||||
this.cardNo = cardNo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @description: 招聘管理导出dto(全部)
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-16 17:17
|
||||
**/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionRegistrationExportDTO implements Serializable {
|
||||
|
||||
@ExcelProperty("岗位名称")
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("姓名")
|
||||
@ExcelProperty("姓名")
|
||||
private String realName;
|
||||
|
||||
@ApiModelProperty("性别")
|
||||
@ExcelProperty("性别")
|
||||
private String gender;
|
||||
|
||||
@ApiModelProperty("年龄")
|
||||
@ExcelProperty("年龄")
|
||||
private Integer age;
|
||||
|
||||
@ApiModelProperty("手机号")
|
||||
@ExcelProperty("手机号")
|
||||
private String phone;
|
||||
|
||||
@ApiModelProperty("身份证号")
|
||||
@ExcelProperty("身份证号")
|
||||
private String cardNo;
|
||||
|
||||
@ExcelProperty("用工企业")
|
||||
@ApiModelProperty("用工企业")
|
||||
private String companyName;
|
||||
|
||||
@ExcelProperty("招聘状态")
|
||||
@ApiModelProperty("招聘状态")
|
||||
private String status;
|
||||
|
||||
@ExcelProperty("所属街道")
|
||||
@ApiModelProperty("所属街道名称")
|
||||
private String streetName;
|
||||
|
||||
@ExcelProperty("发布机构")
|
||||
@ApiModelProperty("发布机构名称")
|
||||
private String publishOrgName;
|
||||
|
||||
@ExcelProperty("面试时间")
|
||||
@ApiModelProperty("面试时间")
|
||||
private String interviewTime;
|
||||
|
||||
@ExcelProperty("面试地点")
|
||||
@ApiModelProperty("面试地点")
|
||||
private String interviewLocation;
|
||||
|
||||
@ExcelProperty("入职薪资")
|
||||
@ApiModelProperty("入职薪资")
|
||||
private BigDecimal salary;
|
||||
|
||||
@ApiModelProperty("报名时间")
|
||||
@ExcelProperty("报名时间")
|
||||
private String createTime;
|
||||
|
||||
@ApiModelProperty("入职时间")
|
||||
@ExcelProperty("入职时间")
|
||||
private String inductionTime;
|
||||
|
||||
@ApiModelProperty("离职时间")
|
||||
@ExcelProperty("离职时间")
|
||||
private String quitTime;
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
@ApiModel("岗位报名信息表")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionRegistrationOperatorDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private Set<Long> ids;
|
||||
|
||||
private Set<Long> userIds;
|
||||
|
||||
@NotNull(message = "请选择岗位")
|
||||
@ApiModelProperty("岗位ID")
|
||||
private Long positionId;
|
||||
|
||||
@ApiModelProperty("用户ID ")
|
||||
private Long userId;
|
||||
|
||||
@NotNull(message = "请选择招聘状态")
|
||||
@ApiModelProperty("状态:1已报名、2待面试、3面试不通过、4待入职、5已入职、 6已离职、 7结束招聘")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("面试时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date interviewTime;
|
||||
|
||||
@Length(max = 100,message = "面试地点长度超过最大限制")
|
||||
@ApiModelProperty("面试地点")
|
||||
private String interviewLocation;
|
||||
|
||||
@ApiModelProperty("入职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date inductionTime;
|
||||
|
||||
@ApiModelProperty("离职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date quitTime;
|
||||
|
||||
@ApiModelProperty("终止时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date terminationTime;
|
||||
|
||||
@ApiModelProperty("入职薪水")
|
||||
private BigDecimal salary;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
private Boolean show;
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
|
||||
@ApiModel("岗位报名信息表")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionRegistrationPageQueryDTO extends PageQueryDTO<PositionRegistrationDTO> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long orgId;
|
||||
|
||||
@ApiModelProperty("发布机构id")
|
||||
private Long publishOrgId;
|
||||
|
||||
@ApiModelProperty("所属街道机构id")
|
||||
private Long queryStreetOrgId;
|
||||
|
||||
@ApiModelProperty("所属街道机构子级orgids")
|
||||
private Set<Long> queryStreetChildrenAllOrgIds;
|
||||
|
||||
private Set<Long> orgIds;
|
||||
|
||||
@ApiModelProperty("岗位ID")
|
||||
private Long positionId;
|
||||
|
||||
@ApiModelProperty("用户ID ")
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty("状态:1已报名、2待面试、3面试不通过、4待入职、5已入职、 6已离职、 7结束招聘")
|
||||
private String status;
|
||||
|
||||
private List<String> statusList;
|
||||
|
||||
@ApiModelProperty("面试时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date interviewTime;
|
||||
|
||||
@ApiModelProperty("入职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date inductionTime;
|
||||
|
||||
@ApiModelProperty("离职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date quitTime;
|
||||
|
||||
@ApiModelProperty("终止时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date terminationTime;
|
||||
|
||||
@ApiModelProperty("入职薪水")
|
||||
private BigDecimal salary;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("创建时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeStart;
|
||||
|
||||
@ApiModelProperty("创建时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTimeEnd;
|
||||
|
||||
@ApiModelProperty("更新时间起,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeStart;
|
||||
|
||||
@ApiModelProperty("更新时间止,格式 (yyyy-MM-dd HH:mm:ss)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date updateTimeEnd;
|
||||
|
||||
/**
|
||||
* 用工企业id
|
||||
**/
|
||||
private Long companyId;
|
||||
/**
|
||||
* 姓名
|
||||
**/
|
||||
private String realNameLike;
|
||||
|
||||
private Set<String> realNames;
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
**/
|
||||
private String phoneLike;
|
||||
|
||||
private Set<String> phones;
|
||||
/**
|
||||
* 身份证
|
||||
**/
|
||||
private String cardNoLike;
|
||||
|
||||
private Set<String> cardNos;
|
||||
|
||||
private Boolean show;
|
||||
|
||||
/**
|
||||
* 是否查看自己+子级orgId
|
||||
*/
|
||||
private Boolean childrenOrgAll;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
import com.newyetai.common.util.TreeNode;
|
||||
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 用户岗位类型
|
||||
* </p>
|
||||
*
|
||||
* @author Carlye
|
||||
* @since 2021-01-21
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionTypeDTO extends BaseDTO implements TreeNode<Long, PositionTypeDTO> {
|
||||
|
||||
private static final long serialVersionUID = 2154317236704975221L;
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 文件编码
|
||||
*/
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 岗位ID
|
||||
*/
|
||||
private Long parentId;
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
private List<PositionTypeDTO> childrenSet;
|
||||
|
||||
public List<PositionTypeDTO> getChildrenSet() {
|
||||
if (Objects.isNull(childrenSet)) {
|
||||
childrenSet = Lists.newArrayList();
|
||||
}
|
||||
return childrenSet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addChildren(PositionTypeDTO node) {
|
||||
getChildrenSet().add(node);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制,不复制子元素
|
||||
*
|
||||
* @return {@link PositionTypeDTO}
|
||||
*/
|
||||
public PositionTypeDTO copy() {
|
||||
PositionTypeDTO positionTypeDTO = new PositionTypeDTO();
|
||||
positionTypeDTO.setCode(code);
|
||||
positionTypeDTO.setName(name);
|
||||
positionTypeDTO.setParentId(parentId);
|
||||
return positionTypeDTO;
|
||||
}
|
||||
|
||||
public static PositionTypeDTO search(PositionTypeDTO parent, PositionTypeQueryDTO queryDTO) {
|
||||
String name = parent.getName();
|
||||
String code = parent.getCode();
|
||||
List<PositionTypeDTO> childrenSet = parent.getChildrenSet();
|
||||
if ((StringUtils.isNotEmpty(queryDTO.getNameLike()) && StringUtils.contains(name, queryDTO.getNameLike())) || (CollUtil.isNotEmpty(queryDTO.getTypeCodes()) && queryDTO.getTypeCodes().contains(code))) {
|
||||
if (CollUtil.isNotEmpty(childrenSet)) {
|
||||
parent.setChildrenSet(null);
|
||||
}
|
||||
return parent;
|
||||
} else {
|
||||
if (CollUtil.isNotEmpty(childrenSet)) {
|
||||
List<PositionTypeDTO> collect = childrenSet.stream().map(child -> search(child, queryDTO))
|
||||
.filter(Objects::nonNull).collect(
|
||||
Collectors.toList());
|
||||
if (CollUtil.isEmpty(collect)) {
|
||||
return null;
|
||||
}
|
||||
parent.setChildrenSet(collect);
|
||||
return parent;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 用户岗位类型 - 查询DTO
|
||||
* </p>
|
||||
*
|
||||
* @author Carlye
|
||||
* @since 2021-01-21
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PositionTypeQueryDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -618123250962943084L;
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
private String nameLike;
|
||||
|
||||
/**
|
||||
* 类型编码
|
||||
*/
|
||||
private Set<String> typeCodes;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description: 离职dto
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-16 15:17
|
||||
**/
|
||||
@Data
|
||||
public class ResignedDTO implements Serializable {
|
||||
|
||||
@NotNull(message = "请选择离职时间")
|
||||
@ApiModelProperty("离职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date quitTime;
|
||||
|
||||
@NotNull(message = "请选择数据")
|
||||
private Set<Long> ids;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description: 用户端报名岗位
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-15 16:29
|
||||
**/
|
||||
@Data
|
||||
public class UserPositionRegistrationDTO implements Serializable {
|
||||
|
||||
@NotNull(message = "请选择岗位")
|
||||
private Long positionId;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @description: 用户端查询我的报名
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-19 09:31
|
||||
**/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class UserPositionRegistrationPageQueryDTO extends PageQueryDTO<UserPositionRegistrationResDTO> {
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty("状态:1已报名、2待面试、3面试不通过、4待入职、5已入职、 6已离职、 7结束招聘")
|
||||
private String status;
|
||||
|
||||
private Long positionId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
package com.newyetai.recruit.position.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description: 用户端我的报名
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-19 09:26
|
||||
**/
|
||||
@Data
|
||||
public class UserPositionRegistrationResDTO implements Serializable {
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long positionId;
|
||||
|
||||
@ApiModelProperty("岗位名称")
|
||||
private String positionName;
|
||||
|
||||
@ApiModelProperty("招聘标题")
|
||||
private String recruitTitle;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
@ApiModelProperty("工作地址")
|
||||
private String positionAddress;
|
||||
|
||||
@ApiModelProperty("招聘专员")
|
||||
private String recruitUserName;
|
||||
|
||||
private String companyName;
|
||||
|
||||
private String companyLogo;
|
||||
|
||||
private String positionFileCode;
|
||||
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("报名时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty("面试时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date interviewTime;
|
||||
|
||||
@ApiModelProperty("面试地点")
|
||||
private String interviewLocation;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("入职时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date inductionTime;
|
||||
|
||||
@ApiModelProperty("入职薪资")
|
||||
private BigDecimal salary;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
private String recruitPositionTypeName;
|
||||
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
|
||||
private String salaryStr;
|
||||
|
||||
private Boolean show;
|
||||
|
||||
/**
|
||||
* 详细地址
|
||||
*/
|
||||
private String detailAddress;
|
||||
public String getSalaryStr() {
|
||||
String salary = "";
|
||||
if (Objects.nonNull(this.getSalaryUp()) && Objects.nonNull(this.getSalaryLow())) {
|
||||
salary = String.format("%s~%s元/%s", this.getSalaryLow(), this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
if (this.getSalaryLow().compareTo(this.getSalaryUp()) == 0) {
|
||||
salary = String.format("%s元/%s", this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
}
|
||||
} else if (Objects.nonNull(this.getSalaryLow()) && Objects.isNull(this.getSalaryUp())) {
|
||||
salary = String.format("%s元/%s", this.getSalaryLow(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
} else if (Objects.isNull(this.getSalaryLow()) && Objects.nonNull(this.getSalaryUp())) {
|
||||
salary = String.format("%s元/%s", this.getSalaryUp(), DictUtils.getCodeNameMap("salary_type").get(String.valueOf(this.getSalaryType())));
|
||||
} else if (Objects.isNull(this.getSalaryLow()) && Objects.isNull(this.getSalaryUp())) {
|
||||
salary = "薪资面议";
|
||||
}
|
||||
return salary;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
package com.newyetai.recruit.position.entity;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
@TableName(value = "hr_import_detail_position")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ImportDetailPosition extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 导入任务ID
|
||||
*/
|
||||
private Long mainId;
|
||||
/**
|
||||
* 机构ID
|
||||
*/
|
||||
private Long orgId;
|
||||
/**
|
||||
* 模板全量数据
|
||||
*/
|
||||
private String dataJson;
|
||||
/**
|
||||
* 公司ID ;hr_company
|
||||
*/
|
||||
private Long companyId;
|
||||
/**
|
||||
* 岗位名称
|
||||
*/
|
||||
private String positionName;
|
||||
/**
|
||||
* 招聘标题
|
||||
*/
|
||||
private String recruitTitle;
|
||||
/**
|
||||
* 岗位招聘人数
|
||||
*/
|
||||
private Integer positionNumber;
|
||||
/**
|
||||
* 工作地址
|
||||
*/
|
||||
private String positionAddress;
|
||||
/**
|
||||
* 岗位性质 数据字典
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
/**
|
||||
* 发薪日
|
||||
*/
|
||||
private String payDate;
|
||||
/**
|
||||
* 性别要求
|
||||
*/
|
||||
private String sexRequire;
|
||||
/**
|
||||
* 学历要求
|
||||
*/
|
||||
private String educationRequire;
|
||||
/**
|
||||
* 经验要求
|
||||
*/
|
||||
private String experienceRequire;
|
||||
/**
|
||||
* 证件要求
|
||||
*/
|
||||
private String certificatesRequire;
|
||||
/**
|
||||
* 其他要求
|
||||
*/
|
||||
private String otherRequire;
|
||||
/**
|
||||
* 工作内容
|
||||
*/
|
||||
private String jobContent;
|
||||
/**
|
||||
* 明细状态
|
||||
*/
|
||||
private Integer detailStatus;
|
||||
/**
|
||||
* 失败原因
|
||||
*/
|
||||
private String failReason;
|
||||
/**
|
||||
* 外部生成明细id
|
||||
*/
|
||||
private Long extraDetailId;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("岗位类型")
|
||||
private String positionTypeName;
|
||||
|
||||
@ApiModelProperty("岗位标签")
|
||||
private String positionTag;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
private Date endTime;
|
||||
}
|
||||
142
src/main/java/com/newyetai/recruit/position/entity/Position.java
Normal file
142
src/main/java/com/newyetai/recruit/position/entity/Position.java
Normal file
@@ -0,0 +1,142 @@
|
||||
package com.newyetai.recruit.position.entity;
|
||||
|
||||
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@TableName(value = "hr_position")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class Position extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 机构ID
|
||||
*/
|
||||
private Long orgId;
|
||||
/**
|
||||
* 公司ID ;hr_company
|
||||
*/
|
||||
private Long companyId;
|
||||
/**
|
||||
* 岗位状态:1:开启 2:关闭
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 岗位名称
|
||||
*/
|
||||
private String positionName;
|
||||
/**
|
||||
* 招聘标题
|
||||
*/
|
||||
private String recruitTitle;
|
||||
/**
|
||||
* 岗位类型
|
||||
*/
|
||||
private String positionType;
|
||||
/**
|
||||
* 岗位标签
|
||||
*/
|
||||
private String positionTag;
|
||||
/**
|
||||
* 工作性质;工作性质 1:短工 2:全职
|
||||
*/
|
||||
private String jobCategory;
|
||||
/**
|
||||
* 岗位招聘人数
|
||||
*/
|
||||
private Integer positionNumber;
|
||||
/**
|
||||
* 工作地址
|
||||
*/
|
||||
private String positionAddress;
|
||||
/**
|
||||
* 招聘专员
|
||||
*/
|
||||
private Long recruitUserId;
|
||||
|
||||
/**
|
||||
* 发薪日
|
||||
*/
|
||||
private String payDate;
|
||||
/**
|
||||
* 性别要求
|
||||
*/
|
||||
private String sexRequire;
|
||||
|
||||
/**
|
||||
* 学历要求
|
||||
*/
|
||||
private String educationRequire;
|
||||
/**
|
||||
* 经验要求
|
||||
*/
|
||||
private String experienceRequire;
|
||||
/**
|
||||
* 证件要求
|
||||
*/
|
||||
private String certificatesRequire;
|
||||
/**
|
||||
* 其他要求
|
||||
*/
|
||||
private String otherRequire;
|
||||
/**
|
||||
* 工作内容
|
||||
*/
|
||||
private String jobContent;
|
||||
|
||||
private Long addressId;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
private Date endTime;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.newyetai.recruit.position.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
|
||||
/**
|
||||
* 岗位地址
|
||||
*
|
||||
* @author Carlye
|
||||
* @date 2022/03/29
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
@TableName(value = "hr_position_address")
|
||||
public class PositionAddress extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = -4055388034868470586L;
|
||||
/**
|
||||
* 公司ID
|
||||
*/
|
||||
private Long companyId;
|
||||
|
||||
/**
|
||||
* 区域编码(31)
|
||||
*/
|
||||
private String districtCode;
|
||||
|
||||
/**
|
||||
* 区域名称 (上海市)
|
||||
*/
|
||||
private String districtName;
|
||||
/**
|
||||
* 详细地址 (浦东新区黄金大厦B座)
|
||||
*/
|
||||
private String detailAddress;
|
||||
/**
|
||||
* 经度
|
||||
*/
|
||||
private BigDecimal longitude;
|
||||
/**
|
||||
* 纬度
|
||||
*/
|
||||
private BigDecimal latitude;
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
package com.newyetai.recruit.position.entity;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@TableName(value = "hr_position_audit")
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PositionAudit extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long positionId;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long orgId;
|
||||
/**
|
||||
* hr_company主键
|
||||
*/
|
||||
private Long companyId;
|
||||
|
||||
/**
|
||||
* 岗位名称
|
||||
*/
|
||||
private String positionName;
|
||||
/**
|
||||
* 招聘标题
|
||||
*/
|
||||
private String recruitTitle;
|
||||
/**
|
||||
* 岗位类型
|
||||
*/
|
||||
private String positionType;
|
||||
/**
|
||||
* 工作性质 1:短工 2:全职
|
||||
*/
|
||||
private String jobCategory;
|
||||
/**
|
||||
* 岗位招聘人数
|
||||
*/
|
||||
private Integer positionNumber;
|
||||
/**
|
||||
* 工作地址
|
||||
*/
|
||||
private String positionAddress;
|
||||
/**
|
||||
* 招聘专员
|
||||
*/
|
||||
private Long recruitUserId;
|
||||
|
||||
/**
|
||||
* 发薪日
|
||||
*/
|
||||
private String payDate;
|
||||
/**
|
||||
* 性别要求
|
||||
*/
|
||||
private String sexRequire;
|
||||
|
||||
/**
|
||||
* 学历要求
|
||||
*/
|
||||
private String educationRequire;
|
||||
/**
|
||||
* 经验要求
|
||||
*/
|
||||
private String experienceRequire;
|
||||
/**
|
||||
* 证件要求
|
||||
*/
|
||||
private String certificatesRequire;
|
||||
/**
|
||||
* 其他要求
|
||||
*/
|
||||
private String otherRequire;
|
||||
/**
|
||||
* 工作内容
|
||||
*/
|
||||
private String jobContent;
|
||||
/**
|
||||
* 岗位标签
|
||||
*/
|
||||
private String positionTag;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long addressId;
|
||||
/**
|
||||
* 招聘岗位类型数据字典
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
/**
|
||||
* 审核状态 1:待审核 2.审核成功 3.审核失败
|
||||
*/
|
||||
private String auditStatus;
|
||||
/**
|
||||
* 审核失败原因
|
||||
*/
|
||||
private String auditFailMsg;
|
||||
/**
|
||||
* 版本号
|
||||
*/
|
||||
private Integer version;
|
||||
|
||||
/**
|
||||
* 岗位相册json
|
||||
*/
|
||||
private String fileJson;
|
||||
|
||||
/**
|
||||
* 年龄上限
|
||||
*/
|
||||
private Integer ageUp;
|
||||
|
||||
/**
|
||||
* 年龄下限
|
||||
*/
|
||||
private Integer ageLow;
|
||||
|
||||
/**
|
||||
* 薪资上限
|
||||
*/
|
||||
private BigDecimal salaryUp;
|
||||
|
||||
/**
|
||||
* 薪资下限
|
||||
*/
|
||||
private BigDecimal salaryLow;
|
||||
|
||||
/**
|
||||
* 薪资类型
|
||||
*/
|
||||
private String salaryType;
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
private Date endTime;
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.newyetai.recruit.position.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 用户岗位 文件
|
||||
* </p>
|
||||
*
|
||||
* @author Carlye
|
||||
* @since 2021-01-21
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
@TableName("hr_position_file")
|
||||
public class PositionFile extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = -1475024067817143931L;
|
||||
/**
|
||||
* 岗位ID
|
||||
*/
|
||||
private Long positionId;
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
private String fileName;
|
||||
|
||||
/**
|
||||
* 文件编码
|
||||
*/
|
||||
private String fileCode;
|
||||
|
||||
/**
|
||||
* 文件后缀
|
||||
*/
|
||||
private String fileSuffix;
|
||||
|
||||
/**
|
||||
* 默认显示
|
||||
*/
|
||||
private Boolean defaultShow;
|
||||
|
||||
/**
|
||||
* 文件类型
|
||||
*/
|
||||
private String fileType;
|
||||
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private String description;
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.newyetai.recruit.position.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
import com.newyetai.component.action.annotation.ActionField;
|
||||
import com.newyetai.component.action.annotation.ActionModel;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
@TableName(value = "hr_position_registration")
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ActionModel(type = "hr_position_registration")
|
||||
public class PositionRegistration extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 岗位ID
|
||||
*/
|
||||
private Long positionId;
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private Long userId;
|
||||
/**
|
||||
* 状态:1已报名、2待面试、3面试不通过、4待入职、5已入职、 6已离职、 7结束招聘
|
||||
*/
|
||||
@ActionField(alias = "报名状态", dictCode = "position_registration_status")
|
||||
private String status;
|
||||
/**
|
||||
* 面试时间
|
||||
*/
|
||||
private Date interviewTime;
|
||||
|
||||
@ApiModelProperty("面试地点")
|
||||
private String interviewLocation;
|
||||
|
||||
/**
|
||||
* 入职时间
|
||||
*/
|
||||
private Date inductionTime;
|
||||
/**
|
||||
* 离职时间
|
||||
*/
|
||||
private Date quitTime;
|
||||
/**
|
||||
* 终止时间
|
||||
*/
|
||||
private Date terminationTime;
|
||||
/**
|
||||
* 入职薪水
|
||||
*/
|
||||
private BigDecimal salary;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
private Boolean show;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.newyetai.recruit.position.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 用户岗位类型
|
||||
* </p>
|
||||
*
|
||||
* @author Carlye
|
||||
* @since 2021-01-21
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
@TableName(value = "hr_position_type")
|
||||
public class PositionType extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 2154317236704975221L;
|
||||
/**
|
||||
* 岗位ID
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 文件编码
|
||||
*/
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 全名
|
||||
*/
|
||||
private String fullName;
|
||||
|
||||
/**
|
||||
* 完成code
|
||||
*/
|
||||
private String fullCode;
|
||||
|
||||
/**
|
||||
* 招聘岗位类型
|
||||
*/
|
||||
private String recruitPositionType;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.newyetai.recruit.position.enums;
|
||||
|
||||
public enum PositionAuditStatusEnum {
|
||||
|
||||
INIT("1", "待审核"),
|
||||
SUCCESS("2", "审核成功"),
|
||||
FAIL("3", "审核失败");
|
||||
|
||||
private String status;
|
||||
/**
|
||||
* 类型描述
|
||||
*/
|
||||
private String desc;
|
||||
|
||||
|
||||
PositionAuditStatusEnum(String status, String desc) {
|
||||
this.status = status;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.newyetai.recruit.position.enums;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
|
||||
public enum PositionRegistrationStatusEnum {
|
||||
ALREADY_REGISTERED("1", "已报名"),
|
||||
WAIT_FOR_AN_INTERVIEW("2", "待面试"),
|
||||
FAIL_THE_INTERVIEW("3", "面试不通过"),
|
||||
TO_BE_HIRED("4", "待入职"),
|
||||
ON_THE_JOB("5", "已入职"),
|
||||
RESIGNED("6", "已离职"),
|
||||
TERMINATION("7", "结束招聘"),
|
||||
CANCEL("8", "取消报名")
|
||||
;
|
||||
|
||||
private String status;
|
||||
/**
|
||||
* 类型描述
|
||||
*/
|
||||
private String desc;
|
||||
|
||||
|
||||
PositionRegistrationStatusEnum(String status, String desc) {
|
||||
this.status = status;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public static PositionRegistrationStatusEnum find(String status){
|
||||
if (Objects.isNull(status)){
|
||||
return null;
|
||||
}
|
||||
return Arrays.stream(PositionRegistrationStatusEnum.values()).filter(e->e.getStatus().equals(status)).findFirst().orElse(null);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.newyetai.recruit.position.enums;
|
||||
|
||||
public enum PositionStatusEnum {
|
||||
OPEN("1", "开启"),
|
||||
CLOSE("2", "关闭")
|
||||
;
|
||||
|
||||
private String status;
|
||||
/**
|
||||
* 类型描述
|
||||
*/
|
||||
private String desc;
|
||||
|
||||
|
||||
PositionStatusEnum(String status, String desc) {
|
||||
this.status = status;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.newyetai.recruit.position.job;
|
||||
|
||||
import com.newyetai.recruit.position.dto.PositionDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionPageQueryDTO;
|
||||
import com.newyetai.recruit.position.enums.PositionStatusEnum;
|
||||
import com.newyetai.recruit.position.service.PositionService;
|
||||
import com.newyetai.security.util.MockUtils;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @description: 岗位失效Job
|
||||
* @author: guixinman
|
||||
* @create: 2024-11-12 16:23
|
||||
**/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class PositionExpiryJob {
|
||||
|
||||
@Autowired
|
||||
private PositionService positionService;
|
||||
|
||||
@Scheduled(cron = "01 10 00 * * ?")
|
||||
public void statistics() {
|
||||
|
||||
log.info("岗位有效期检测 ======开始");
|
||||
MockUtils.mockPlatUser();
|
||||
try {
|
||||
positionService.positionExpiry();
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
|
||||
log.info("岗位有效期检测 ======结束");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.newyetai.recruit.position.dao.ImportDetailPositionMapper">
|
||||
|
||||
<select id="list" resultType="com.newyetai.recruit.position.dto.ImportDetailPositionDTO">
|
||||
SELECT t.*,hc.company_name
|
||||
<include refid="queryFromSql"></include>
|
||||
</select>
|
||||
|
||||
<select id="page" resultType="com.newyetai.recruit.position.dto.ImportDetailPositionDTO">
|
||||
SELECT t.*,hc.company_name
|
||||
<include refid="queryFromSql"></include>
|
||||
</select>
|
||||
|
||||
<sql id="queryFromSql">
|
||||
FROM
|
||||
hr_import_detail_position t
|
||||
LEFT JOIN hr_company hc ON t.company_id = hc.id AND hc.deleted = 0
|
||||
WHERE t.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
AND t.id = #{param.id}
|
||||
</if>
|
||||
<if test='param.mainId != null'>
|
||||
AND t.main_id = #{param.mainId}
|
||||
</if>
|
||||
<if test='param.orgId != null'>
|
||||
AND t.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test='param.dataJson != null and param.dataJson.trim() != ""'>
|
||||
AND t.data_json = #{param.dataJson}
|
||||
</if>
|
||||
<if test='param.companyId != null'>
|
||||
AND t.company_id = #{param.companyId}
|
||||
</if>
|
||||
<if test='param.positionNameLike != null and param.positionNameLike.trim() != ""'>
|
||||
<bind name="positionNameLike" value="'%' + param.positionNameLike + '%'"/>
|
||||
AND t.position_name like #{positionNameLike}
|
||||
</if>
|
||||
<if test='param.recruitTitle != null and param.recruitTitle.trim() != ""'>
|
||||
AND t.recruit_title = #{param.recruitTitle}
|
||||
</if>
|
||||
<if test='param.positionNumber != null'>
|
||||
AND t.position_number = #{param.positionNumber}
|
||||
</if>
|
||||
<if test='param.positionAddress != null and param.positionAddress.trim() != ""'>
|
||||
AND t.position_address = #{param.positionAddress}
|
||||
</if>
|
||||
<if test='param.payDate != null and param.payDate.trim() != ""'>
|
||||
AND t.pay_date = #{param.payDate}
|
||||
</if>
|
||||
<if test='param.sexRequire != null'>
|
||||
AND t.sex_require = #{param.sexRequire}
|
||||
</if>
|
||||
<if test='param.educationRequire != null'>
|
||||
AND t.education_require = #{param.educationRequire}
|
||||
</if>
|
||||
<if test='param.experienceRequire != null and param.experienceRequire.trim() != ""'>
|
||||
AND t.experience_require = #{param.experienceRequire}
|
||||
</if>
|
||||
<if test='param.certificatesRequire != null and param.certificatesRequire.trim() != ""'>
|
||||
AND t.certificates_require = #{param.certificatesRequire}
|
||||
</if>
|
||||
<if test='param.otherRequire != null and param.otherRequire.trim() != ""'>
|
||||
AND t.other_require = #{param.otherRequire}
|
||||
</if>
|
||||
<if test='param.jobContent != null and param.jobContent.trim() != ""'>
|
||||
AND t.job_content = #{param.jobContent}
|
||||
</if>
|
||||
<if test='param.detailStatus != null'>
|
||||
AND t.detail_status = #{param.detailStatus}
|
||||
</if>
|
||||
<if test='param.failReason != null and param.failReason.trim() != ""'>
|
||||
AND t.fail_reason = #{param.failReason}
|
||||
</if>
|
||||
<if test='param.extraDetailId != null'>
|
||||
AND t.extra_detail_id = #{param.extraDetailId}
|
||||
</if>
|
||||
<if test='param.remark != null and param.remark.trim() != ""'>
|
||||
AND t.remark = #{param.remark}
|
||||
</if>
|
||||
<if test='param.createTimeStart != null'>
|
||||
AND t.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test='param.createTimeEnd != null'>
|
||||
AND t.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
<if test='param.updateTimeStart != null'>
|
||||
AND t.update_time >= #{param.updateTimeStart}
|
||||
</if>
|
||||
<if test='param.updateTimeEnd != null'>
|
||||
AND t.update_time <= #{param.updateTimeEnd}
|
||||
</if>
|
||||
ORDER BY t.id DESC
|
||||
</sql>
|
||||
</mapper>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.newyetai.recruit.position.dao.PositionAddressMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,292 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.newyetai.recruit.position.dao.PositionAuditMapper">
|
||||
|
||||
<update id="modifyById">
|
||||
update hr_position_audit
|
||||
set company_id = #{param.companyId},
|
||||
position_name = #{param.positionName},
|
||||
recruit_title = #{param.recruitTitle},
|
||||
position_type = #{param.positionType},
|
||||
job_category = #{param.jobCategory},
|
||||
position_number = #{param.positionNumber},
|
||||
position_address = #{param.positionAddress},
|
||||
recruit_user_id = #{param.recruitUserId},
|
||||
pay_date = #{param.payDate},
|
||||
sex_require = #{param.sexRequire},
|
||||
education_require = #{param.educationRequire},
|
||||
experience_require = #{param.experienceRequire},
|
||||
certificates_require = #{param.certificatesRequire},
|
||||
other_require = #{param.otherRequire},
|
||||
job_content = #{param.jobContent},
|
||||
position_tag = #{param.positionTag},
|
||||
address_id = #{param.addressId},
|
||||
recruit_position_type = #{param.recruitPositionType},
|
||||
file_json = #{param.fileJson},
|
||||
age_up = #{param.ageUp},
|
||||
age_low = #{param.ageLow},
|
||||
salary_up = #{param.salaryUp},
|
||||
salary_low = #{param.salaryLow},
|
||||
salary_type = #{param.salaryType},
|
||||
<if test="param.auditStatus != null">
|
||||
audit_status = #{param.auditStatus},
|
||||
</if>
|
||||
version = version + 1,
|
||||
update_by = #{param.updateBy},
|
||||
update_time = now()
|
||||
where id = #{param.id} and position_id = #{param.positionId} and deleted = 0 and version =
|
||||
#{param.version} and audit_status = 1
|
||||
|
||||
</update>
|
||||
|
||||
<select id="list" resultType="com.newyetai.recruit.position.dto.PositionAuditDTO">
|
||||
SELECT t.*
|
||||
<include refid="queryFromSql"></include>
|
||||
</select>
|
||||
|
||||
<select id="page" resultType="com.newyetai.recruit.position.dto.PositionAuditDTO">
|
||||
SELECT a.*,
|
||||
c.company_name,
|
||||
pa.detail_address,
|
||||
pa.district_code,
|
||||
pt.name positionTypeName,
|
||||
xo.org_name
|
||||
FROM hr_position_audit a
|
||||
INNER JOIN (SELECT max(id) id
|
||||
FROM hr_position_audit
|
||||
WHERE deleted = 0
|
||||
GROUP BY position_id) b ON a.id = b.id
|
||||
LEFT JOIN hr_company c ON a.company_id = c.id AND c.deleted = 0
|
||||
LEFT JOIN hr_position_address pa ON a.address_id = pa.id AND pa.deleted = 0
|
||||
LEFT JOIN hr_position_type pt ON a.position_type = pt.code AND pt.deleted = 0
|
||||
LEFT JOIN xs_org xo ON a.org_id = xo.id AND xo.deleted = 0
|
||||
WHERE a.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
AND a.id = #{param.id}
|
||||
</if>
|
||||
<if test='param.orgId != null'>
|
||||
AND a.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test="param.orgIds != null and param.orgIds.size() != 0">
|
||||
AND a.org_id IN
|
||||
<foreach collection="param.orgIds" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test='param.orgNameLike != null and param.orgNameLike.trim() != ""'>
|
||||
<bind name="orgNameLike" value="'%' + param.orgNameLike + '%'"/>
|
||||
AND xo.org_name like #{orgNameLike}
|
||||
</if>
|
||||
<if test='param.companyId != null'>
|
||||
AND a.company_id = #{param.companyId}
|
||||
</if>
|
||||
<if test='param.positionNameLike != null and param.positionNameLike.trim() != ""'>
|
||||
<bind name="positionNameLike" value="'%' + param.positionNameLike + '%'"/>
|
||||
AND a.position_name like #{positionNameLike}
|
||||
</if>
|
||||
<if test='param.createTimeStart != null'>
|
||||
AND a.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test='param.createTimeEnd != null'>
|
||||
AND a.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
<if test='param.recruitPositionType != null and param.recruitPositionType.trim() != ""'>
|
||||
AND a.recruit_position_type = #{param.recruitPositionType}
|
||||
</if>
|
||||
<if test='param.auditStatus != null and param.auditStatus.trim() != ""'>
|
||||
AND a.audit_status = #{param.auditStatus}
|
||||
</if>
|
||||
ORDER BY a.id DESC
|
||||
</select>
|
||||
|
||||
<select id="positionPage" resultType="com.newyetai.recruit.position.dto.PositionNewDTO">
|
||||
SELECT
|
||||
a.id,
|
||||
b.id positionAuditId,
|
||||
b.company_id,
|
||||
a.status,
|
||||
b.position_name,
|
||||
b.recruit_title,
|
||||
b.position_type,
|
||||
b.job_category,
|
||||
b.position_number,
|
||||
b.position_address,
|
||||
b.recruit_user_id,
|
||||
b.pay_date,
|
||||
b.sex_require,
|
||||
b.education_require,
|
||||
b.experience_require,
|
||||
b.certificates_require,
|
||||
b.other_require,
|
||||
b.job_content,
|
||||
b.position_tag,
|
||||
b.address_id,
|
||||
b.recruit_position_type,
|
||||
b.version,
|
||||
b.audit_status,
|
||||
b.audit_fail_msg,
|
||||
b.file_json,
|
||||
b.age_up,
|
||||
b.age_low,
|
||||
b.salary_up,
|
||||
b.salary_low,
|
||||
b.salary_type,
|
||||
b.create_time,
|
||||
b.org_id,
|
||||
c.company_name,
|
||||
pa.detail_address,
|
||||
pa.district_code,
|
||||
pt.name positionTypeName,
|
||||
b.end_time
|
||||
FROM
|
||||
hr_position a
|
||||
INNER JOIN hr_position_audit b ON a.id = b.position_id AND b.deleted = 0 AND b.id = ( SELECT max( id ) FROM hr_position_audit WHERE deleted = 0 AND a.id = position_id )
|
||||
LEFT JOIN hr_company c ON b.company_id = c.id AND c.deleted = 0
|
||||
LEFT JOIN hr_position_address pa ON b.address_id = pa.id AND pa.deleted = 0
|
||||
LEFT JOIN hr_position_type pt ON b.position_type = pt.code AND pt.deleted = 0
|
||||
WHERE
|
||||
a.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
AND a.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.ids != null and param.ids.size()>0">
|
||||
AND a.id in
|
||||
<foreach collection="param.ids" open="(" separator="," close=")" item="id">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test='param.companyId != null'>
|
||||
AND b.company_id = #{param.companyId}
|
||||
</if>
|
||||
<if test='param.orgId != null'>
|
||||
AND b.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test='param.positionNameLike != null and param.positionNameLike.trim() != ""'>
|
||||
<bind name="positionNameLike" value="'%' + param.positionNameLike + '%'"/>
|
||||
AND b.position_name like #{positionNameLike}
|
||||
</if>
|
||||
<if test='param.status != null and param.status.trim() != ""'>
|
||||
AND a.status = #{param.status}
|
||||
</if>
|
||||
<if test='param.createTimeStart != null'>
|
||||
AND b.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test='param.createTimeEnd != null'>
|
||||
AND b.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
ORDER BY b.create_time DESC, b.position_id DESC
|
||||
</select>
|
||||
|
||||
<update id="audit">
|
||||
update hr_position_audit
|
||||
set version = version + 1,
|
||||
update_by = #{param.updateBy},
|
||||
update_time = now(),
|
||||
audit_status = #{param.auditStatus},
|
||||
audit_fail_msg = #{param.auditFailMsg}
|
||||
where deleted = 0
|
||||
and id = #{param.id}
|
||||
and version = #{param.version}
|
||||
</update>
|
||||
|
||||
<select id="getIdByPositionId" resultType="java.lang.Long">
|
||||
SELECT max(id) id FROM hr_position_audit WHERE deleted = 0 and position_id = #{positionId} GROUP BY position_id
|
||||
</select>
|
||||
|
||||
<sql id="queryFromSql">
|
||||
FROM
|
||||
hr_position_audit t
|
||||
WHERE t.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
AND t.id = #{param.id}
|
||||
</if>
|
||||
<if test='param.positionId != null'>
|
||||
AND t.position_id = #{param.positionId}
|
||||
</if>
|
||||
<if test='param.orgId != null'>
|
||||
AND t.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test='param.companyId != null'>
|
||||
AND t.company_id = #{param.companyId}
|
||||
</if>
|
||||
<if test='param.status != null and param.status.trim() != ""'>
|
||||
AND t.status = #{param.status}
|
||||
</if>
|
||||
<if test='param.positionNameLike != null and param.positionNameLike.trim() != ""'>
|
||||
<bind name="positionNameLike" value="'%' + param.positionNameLike + '%'"/>
|
||||
AND t.position_name like #{positionNameLike}
|
||||
</if>
|
||||
<if test='param.recruitTitle != null and param.recruitTitle.trim() != ""'>
|
||||
AND t.recruit_title = #{param.recruitTitle}
|
||||
</if>
|
||||
<if test='param.positionType != null and param.positionType.trim() != ""'>
|
||||
AND t.position_type = #{param.positionType}
|
||||
</if>
|
||||
<if test='param.jobCategory != null and param.jobCategory.trim() != ""'>
|
||||
AND t.job_category = #{param.jobCategory}
|
||||
</if>
|
||||
<if test='param.positionNumber != null'>
|
||||
AND t.position_number = #{param.positionNumber}
|
||||
</if>
|
||||
<if test='param.positionAddress != null and param.positionAddress.trim() != ""'>
|
||||
AND t.position_address = #{param.positionAddress}
|
||||
</if>
|
||||
<if test='param.recruitUserId != null'>
|
||||
AND t.recruit_user_id = #{param.recruitUserId}
|
||||
</if>
|
||||
<if test='param.payDate != null and param.payDate.trim() != ""'>
|
||||
AND t.pay_date = #{param.payDate}
|
||||
</if>
|
||||
<if test='param.sexRequire != null and param.sexRequire.trim() != ""'>
|
||||
AND t.sex_require = #{param.sexRequire}
|
||||
</if>
|
||||
<if test='param.educationRequire != null and param.educationRequire.trim() != ""'>
|
||||
AND t.education_require = #{param.educationRequire}
|
||||
</if>
|
||||
<if test='param.experienceRequire != null and param.experienceRequire.trim() != ""'>
|
||||
AND t.experience_require = #{param.experienceRequire}
|
||||
</if>
|
||||
<if test='param.certificatesRequire != null and param.certificatesRequire.trim() != ""'>
|
||||
AND t.certificates_require = #{param.certificatesRequire}
|
||||
</if>
|
||||
<if test='param.otherRequire != null and param.otherRequire.trim() != ""'>
|
||||
AND t.other_require = #{param.otherRequire}
|
||||
</if>
|
||||
<if test='param.jobContent != null and param.jobContent.trim() != ""'>
|
||||
AND t.job_content = #{param.jobContent}
|
||||
</if>
|
||||
<if test='param.positionTag != null and param.positionTag.trim() != ""'>
|
||||
AND t.position_tag = #{param.positionTag}
|
||||
</if>
|
||||
<if test='param.addressId != null'>
|
||||
AND t.address_id = #{param.addressId}
|
||||
</if>
|
||||
<if test='param.recruitPositionType != null and param.recruitPositionType.trim() != ""'>
|
||||
AND t.recruit_position_type = #{param.recruitPositionType}
|
||||
</if>
|
||||
<if test='param.auditStatus != null and param.auditStatus.trim() != ""'>
|
||||
AND t.audit_status = #{param.auditStatus}
|
||||
</if>
|
||||
<if test='param.auditFailMsg != null and param.auditFailMsg.trim() != ""'>
|
||||
AND t.audit_fail_msg = #{param.auditFailMsg}
|
||||
</if>
|
||||
<if test='param.version != null'>
|
||||
AND t.version = #{param.version}
|
||||
</if>
|
||||
<if test='param.createTimeStart != null'>
|
||||
AND t.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test='param.createTimeEnd != null'>
|
||||
AND t.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
<if test='param.updateTimeStart != null'>
|
||||
AND t.update_time >= #{param.updateTimeStart}
|
||||
</if>
|
||||
<if test='param.updateTimeEnd != null'>
|
||||
AND t.update_time <= #{param.updateTimeEnd}
|
||||
</if>
|
||||
ORDER BY t.id DESC
|
||||
</sql>
|
||||
</mapper>
|
||||
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.newyetai.recruit.position.dao.PositionFileMapper">
|
||||
<update id="setDefault">
|
||||
UPDATE hr_position_file
|
||||
SET default_show =
|
||||
CASE
|
||||
|
||||
WHEN default_show = 1 THEN
|
||||
0
|
||||
ELSE 1
|
||||
END,
|
||||
update_time = NOW()
|
||||
WHERE deleted = 0
|
||||
AND file_type = '1'
|
||||
AND position_id = #{positionId}
|
||||
AND (
|
||||
id = #{id}
|
||||
OR default_show = 1)
|
||||
</update>
|
||||
|
||||
<select id="filePage" resultType="com.newyetai.recruit.position.dto.PositionFileDTO">
|
||||
SELECT
|
||||
pf.*
|
||||
FROM
|
||||
hr_position_file pf
|
||||
WHERE
|
||||
pf.deleted = 0 AND pf.position_id = #{positionId}
|
||||
<if test='fileType != null and fileType != 0'>
|
||||
and file_type = #{fileType}
|
||||
</if>
|
||||
ORDER BY pf.sort DESC
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,303 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.newyetai.recruit.position.dao.PositionMapper">
|
||||
<update id="positionExpiry">
|
||||
update hr_position set status = 2, "update_by" = 1, "update_time" = now() where "deleted" = 0 and status = 1 and "end_time" <= now()
|
||||
</update>
|
||||
|
||||
|
||||
<select id="page" resultType="com.newyetai.recruit.position.dto.PositionDTO">
|
||||
SELECT
|
||||
t.*,
|
||||
c.company_name,
|
||||
pa.detail_address,
|
||||
pa.district_code,
|
||||
pt.name positionTypeName
|
||||
FROM
|
||||
hr_position t
|
||||
LEFT JOIN hr_company c ON t.company_id = c.id AND c.deleted = 0
|
||||
LEFT JOIN hr_position_address pa ON t.address_id = pa.id AND pa.deleted = 0
|
||||
LEFT JOIN hr_position_type pt ON t.position_type = pt.code AND pt.deleted = 0
|
||||
WHERE t.deleted = 0
|
||||
|
||||
<if test='param.id != null'>
|
||||
AND t.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.ids != null and param.ids.size()>0">
|
||||
AND t.id in
|
||||
<foreach collection="param.ids" open="(" separator="," close=")" item="id">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test='param.companyId != null'>
|
||||
AND t.company_id = #{param.companyId}
|
||||
</if>
|
||||
<if test='param.orgId != null'>
|
||||
AND t.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test='param.positionNameLike != null and param.positionNameLike.trim() != ""'>
|
||||
<bind name="positionNameLike" value="'%' + param.positionNameLike + '%'"/>
|
||||
AND t.position_name like #{positionNameLike}
|
||||
</if>
|
||||
<if test='param.status != null and param.status.trim() != ""'>
|
||||
AND t.status = #{param.status}
|
||||
</if>
|
||||
<if test='param.createTimeStart != null'>
|
||||
AND t.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test='param.createTimeEnd != null'>
|
||||
AND t.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
ORDER BY t.create_time DESC, t.id DESC
|
||||
</select>
|
||||
|
||||
<select id="userPage" resultType="com.newyetai.recruit.position.dto.PositionDTO">
|
||||
SELECT
|
||||
t.*,
|
||||
c.company_name,
|
||||
c.company_logo,
|
||||
u.real_name recruitUserRealName,
|
||||
u.avatar recruitUserAvatar,
|
||||
u.phone recruitUserPhone,
|
||||
pf.file_code positionFileCode,
|
||||
c.company_register_address,
|
||||
pa.district_code,
|
||||
pa.district_name,
|
||||
pa.detail_address,
|
||||
pa.longitude,
|
||||
pa.latitude
|
||||
FROM
|
||||
hr_position t
|
||||
LEFT JOIN hr_company c ON t.company_id = c.id AND c.deleted = 0
|
||||
LEFT JOIN uc_user u ON t.recruit_user_id = u.id AND u.deleted = 0
|
||||
LEFT JOIN hr_position_file pf ON t.id = pf.position_id AND pf.default_show = 1 AND pf.deleted = 0
|
||||
LEFT JOIN hr_position_address pa ON t.address_id = pa.id AND pa.deleted = 0
|
||||
WHERE t.deleted = 0 and t.status = 1
|
||||
<if test='param.useEndTime != null and param.useEndTime == 1'>
|
||||
AND t.end_time >= now()
|
||||
</if>
|
||||
|
||||
<if test='param.recruitTitleLike != null and param.recruitTitleLike.trim() != ""'>
|
||||
<bind name="recruitTitleLike" value="'%' + param.recruitTitleLike + '%'"/>
|
||||
AND t.recruit_title like #{recruitTitleLike}
|
||||
</if>
|
||||
<if test='param.id != null'>
|
||||
AND t.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.ids != null and param.ids.size()>0">
|
||||
AND t.id in
|
||||
<foreach collection="param.ids" open="(" separator="," close=")" item="id">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test='param.companyId != null'>
|
||||
AND t.company_id = #{param.companyId}
|
||||
</if>
|
||||
<if test='param.orgId != null'>
|
||||
AND t.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test='param.positionNameLike != null and param.positionNameLike.trim() != ""'>
|
||||
<bind name="positionNameLike" value="'%' + param.positionNameLike + '%'"/>
|
||||
AND t.position_name like #{positionNameLike}
|
||||
</if>
|
||||
<if test='param.positionTagLike != null and param.positionTagLike.trim() != ""'>
|
||||
<bind name="positionTagLike" value="'%' + param.positionTagLike + '%'"/>
|
||||
AND t.position_tag like #{positionTagLike}
|
||||
</if>
|
||||
<if test='param.createTimeStart != null'>
|
||||
AND t.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test='param.createTimeEnd != null'>
|
||||
AND t.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
<if test='param.recruitPositionType != null and param.recruitPositionType.trim() != ""'>
|
||||
AND t.recruit_position_type = #{param.recruitPositionType}
|
||||
</if>
|
||||
<if test='param.positionType != null and param.positionType.trim() != ""'>
|
||||
AND t.position_type = #{param.positionType}
|
||||
</if>
|
||||
<if test='param.minX != null and param.maxX != null and param.minY != null and param.maxY != null'>
|
||||
AND (pa.longitude BETWEEN #{param.minX} AND #{param.maxX}) AND (pa.latitude BETWEEN #{param.minY} and #{param.maxY})
|
||||
</if>
|
||||
<if test="param.educationRequire != null">
|
||||
AND t.education_require = #{param.educationRequire}
|
||||
</if>
|
||||
<if test='param.salaryUp != null'>
|
||||
AND t.salary_up <= #{param.salaryUp}
|
||||
</if>
|
||||
<if test='param.salaryLow != null'>
|
||||
AND t.salary_low >= #{param.salaryLow}
|
||||
</if>
|
||||
ORDER BY t.create_time DESC, t.id DESC
|
||||
</select>
|
||||
|
||||
<select id="positionTypeGroupMap" resultType="com.newyetai.recruit.statistics.dto.StatisticsBaseDTO">
|
||||
SELECT substring(position_type,0,2) name, count(*) valueCount
|
||||
from hr_position
|
||||
where deleted = 0 and position_type is not null and position_type != ''
|
||||
<if test="recruitPositionType != null and recruitPositionType != '' ">
|
||||
and recruit_position_type = #{recruitPositionType}
|
||||
</if>
|
||||
group by substring(position_type,0,2)
|
||||
</select>
|
||||
|
||||
<select id="personPostMatching"
|
||||
resultType="com.newyetai.recruit.position.dto.PositionDTO">
|
||||
SELECT
|
||||
p.*,
|
||||
c.company_name,
|
||||
c.company_logo,
|
||||
u.real_name recruitUserRealName,
|
||||
u.avatar recruitUserAvatar,
|
||||
u.phone recruitUserPhone,
|
||||
pf.file_code positionFileCode,
|
||||
c.company_register_address,
|
||||
pa.district_code,
|
||||
pa.district_name,
|
||||
pa.detail_address,
|
||||
pa.longitude,
|
||||
pa.latitude
|
||||
FROM
|
||||
hr_position p
|
||||
LEFT JOIN hr_company c ON p.company_id = c.id AND c.deleted = 0
|
||||
LEFT JOIN uc_user u ON p.recruit_user_id = u.id AND u.deleted = 0
|
||||
LEFT JOIN hr_position_file pf ON p.id = pf.position_id AND pf.default_show = 1 AND pf.deleted = 0
|
||||
LEFT JOIN hr_position_address pa ON p.address_id = pa.id AND pa.deleted = 0
|
||||
WHERE
|
||||
p.deleted = 0 and p.status = 1 and p.end_time >= now()
|
||||
<if test="param.positionType != null and param.positionType != '' ">
|
||||
AND p.position_type LIKE CONCAT('%',#{param.positionType},'%')
|
||||
</if>
|
||||
|
||||
<if test="param.positionNameLike != null and param.positionNameLike != '' ">
|
||||
AND p.position_name LIKE CONCAT('%',#{param.positionNameLike},'%')
|
||||
</if>
|
||||
<if test="param.detailAddressLike != null and param.detailAddressLike != '' ">
|
||||
AND pa.detail_address LIKE CONCAT('%',#{param.detailAddressLike},'%')
|
||||
</if>
|
||||
|
||||
<if test="param.sexRequire != null and param.sexRequire != '' ">
|
||||
AND ( p.sex_require = #{param.sexRequire} OR p.sex_require = '3' )
|
||||
</if>
|
||||
<if test="param.age != null">
|
||||
AND
|
||||
IF
|
||||
(
|
||||
p.age_low IS NOT NULL AND p.age_up IS NOT NULL,
|
||||
p.age_up <![CDATA[ >= ]]> #{param.age} AND p.age_low <![CDATA[ <= ]]> #{param.age},
|
||||
IF
|
||||
(
|
||||
p.age_low IS NOT NULL AND p.age_up IS NULL,
|
||||
p.age_low <![CDATA[ <= ]]> #{param.age},
|
||||
IF ( p.age_low IS NULL AND p.age_up IS NOT NULL,
|
||||
p.age_up >= #{param.age},
|
||||
IF
|
||||
(
|
||||
p.age_low IS NULL AND p.age_up IS NULL, 1 = 1, 1 = 0
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
</if>
|
||||
<if test="param.educationRequire != null and param.educationRequire != '' ">
|
||||
AND ( p.education_require = #{param.educationRequire} OR p.education_require IS NULL )
|
||||
</if>
|
||||
<if test="param.salary != null">
|
||||
AND
|
||||
IF
|
||||
(
|
||||
p.salary_up IS NOT NULL AND p.salary_low IS NOT NULL,
|
||||
( (p.salary_up <![CDATA[ >= ]]> #{param.salary} AND p.salary_low <![CDATA[ <= ]]> #{param.salary}) OR p.salary_low <![CDATA[ >= ]]> #{param.salary} ),
|
||||
IF
|
||||
(
|
||||
p.salary_low IS NOT NULL AND p.salary_up IS NULL,
|
||||
1 = 1,
|
||||
IF
|
||||
(
|
||||
p.salary_low IS NULL AND p.salary_up IS NOT NULL,
|
||||
p.salary_up >= #{param.salary},
|
||||
IF
|
||||
(
|
||||
p.salary_low IS NULL AND p.salary_up IS NULL, 1 = 1, 1 = 0
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
</if>
|
||||
ORDER BY p.create_time DESC, p.id DESC
|
||||
</select>
|
||||
|
||||
<sql id="queryFromSql">
|
||||
FROM
|
||||
hr_position t
|
||||
WHERE t.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
AND t.id = #{param.id}
|
||||
</if>
|
||||
<if test='param.orgId != null'>
|
||||
AND t.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test='param.companyId != null'>
|
||||
AND t.company_id = #{param.companyId}
|
||||
</if>
|
||||
<if test='param.status != null'>
|
||||
AND t.status = #{param.status}
|
||||
</if>
|
||||
<if test='param.positionNameLike != null and param.positionNameLike.trim() != ""'>
|
||||
<bind name="positionNameLike" value="'%' + param.positionNameLike + '%'"/>
|
||||
AND t.position_name like #{positionNameLike}
|
||||
</if>
|
||||
<if test='param.recruitTitle != null and param.recruitTitle.trim() != ""'>
|
||||
AND t.recruit_title = #{param.recruitTitle}
|
||||
</if>
|
||||
<if test='param.positionType != null'>
|
||||
AND t.position_type = #{param.positionType}
|
||||
</if>
|
||||
<if test='param.jobCategory != null'>
|
||||
AND t.job_category = #{param.jobCategory}
|
||||
</if>
|
||||
<if test='param.positionNumber != null'>
|
||||
AND t.position_number = #{param.positionNumber}
|
||||
</if>
|
||||
<if test='param.positionAddress != null and param.positionAddress.trim() != ""'>
|
||||
AND t.position_address = #{param.positionAddress}
|
||||
</if>
|
||||
<if test='param.recruitUserId != null'>
|
||||
AND t.recruit_user_id = #{param.recruitUserId}
|
||||
</if>
|
||||
<if test='param.payDate != null and param.payDate.trim() != ""'>
|
||||
AND t.pay_date = #{param.payDate}
|
||||
</if>
|
||||
<if test='param.educationRequire != null'>
|
||||
AND t.education_require = #{param.educationRequire}
|
||||
</if>
|
||||
<if test='param.experienceRequire != null and param.experienceRequire.trim() != ""'>
|
||||
AND t.experience_require = #{param.experienceRequire}
|
||||
</if>
|
||||
<if test='param.certificatesRequire != null and param.certificatesRequire.trim() != ""'>
|
||||
AND t.certificates_require = #{param.certificatesRequire}
|
||||
</if>
|
||||
<if test='param.otherRequire != null and param.otherRequire.trim() != ""'>
|
||||
AND t.other_require = #{param.otherRequire}
|
||||
</if>
|
||||
<if test='param.jobContent != null and param.jobContent.trim() != ""'>
|
||||
AND t.job_content = #{param.jobContent}
|
||||
</if>
|
||||
<if test='param.createTimeStart != null'>
|
||||
AND t.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test='param.createTimeEnd != null'>
|
||||
AND t.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
<if test='param.updateTimeStart != null'>
|
||||
AND t.update_time >= #{param.updateTimeStart}
|
||||
</if>
|
||||
<if test='param.updateTimeEnd != null'>
|
||||
AND t.update_time <= #{param.updateTimeEnd}
|
||||
</if>
|
||||
ORDER BY t.id DESC
|
||||
</sql>
|
||||
</mapper>
|
||||
@@ -0,0 +1,239 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.newyetai.recruit.position.dao.PositionRegistrationMapper">
|
||||
<update id="updateStatus">
|
||||
update hr_position_registration
|
||||
set status = #{param.status},update_time = now(),update_by = #{param.updateBy}
|
||||
<if test="param.interviewTime != null">
|
||||
,interview_time = #{param.interviewTime}
|
||||
</if>
|
||||
<if test="param.interviewLocation != null and param.interviewLocation != '' ">
|
||||
,interview_location = #{param.interviewLocation}
|
||||
</if>
|
||||
<if test="param.inductionTime != null">
|
||||
,induction_time = #{param.inductionTime}
|
||||
</if>
|
||||
<if test="param.quitTime != null">
|
||||
,quit_time = #{param.quitTime}
|
||||
</if>
|
||||
<if test="param.terminationTime != null">
|
||||
,termination_time = #{param.terminationTime}
|
||||
</if>
|
||||
<if test="param.salary != null">
|
||||
,salary = #{param.salary}
|
||||
</if>
|
||||
<if test="param.remark != null and param.remark != '' ">
|
||||
,remark = #{param.remark}
|
||||
</if>
|
||||
where
|
||||
id = #{param.id}
|
||||
<if test="oldStatus != null and oldStatus != '' ">
|
||||
and status = #{oldStatus}
|
||||
</if>
|
||||
|
||||
</update>
|
||||
|
||||
<select id="page" resultType="com.newyetai.recruit.position.dto.PositionRegistrationDTO">
|
||||
SELECT t.*,
|
||||
p.position_name,
|
||||
p.company_id,
|
||||
c.company_name,
|
||||
u.real_name,
|
||||
u.card_no,
|
||||
u.phone,
|
||||
uu.real_name as recruitUserName,
|
||||
xo.org_name as publishOrgName,
|
||||
xo1.org_name as streetName
|
||||
FROM
|
||||
hr_position_registration t
|
||||
LEFT JOIN hr_position p ON t.position_id = p.id AND p.deleted = 0
|
||||
LEFT JOIN uc_user u ON t.user_id = u.id AND u.deleted = 0
|
||||
LEFT JOIN uc_user uu ON p.recruit_user_id = uu.id AND uu.deleted = 0
|
||||
LEFT JOIN hr_company c ON p.company_id = c.id AND c.deleted = 0
|
||||
LEFT JOIN xs_org xo ON c.org_id = xo.id AND xo.deleted = 0
|
||||
LEFT JOIN xs_org xo1 ON xo1.id = xo.parent_id AND xo1.deleted = 0
|
||||
WHERE t.deleted = 0 and t.status <![CDATA[ <> ]]> 8
|
||||
<if test='param.id != null'>
|
||||
AND t.id = #{param.id}
|
||||
</if>
|
||||
<if test='param.orgId != null'>
|
||||
AND p.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test="param.orgIds != null and param.orgIds.size() != 0">
|
||||
AND p.org_id in
|
||||
<foreach collection="param.orgIds" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.queryStreetChildrenAllOrgIds != null and param.queryStreetChildrenAllOrgIds.size() != 0">
|
||||
AND xo1.id in
|
||||
<foreach collection="param.queryStreetChildrenAllOrgIds" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test='param.publishOrgId != null'>
|
||||
AND xo.id = #{param.publishOrgId}
|
||||
</if>
|
||||
<if test='param.companyId != null'>
|
||||
AND p.company_id = #{param.companyId}
|
||||
</if>
|
||||
<if test='param.positionId != null'>
|
||||
AND t.position_id = #{param.positionId}
|
||||
</if>
|
||||
<if test='param.realNameLike != null and param.realNameLike.trim() != ""'>
|
||||
<bind name="realNameLike" value="'%' + param.realNameLike + '%'"/>
|
||||
AND u.real_name like #{realNameLike}
|
||||
</if>
|
||||
<if test="param.realNames != null and param.realNames.size() != 0">
|
||||
AND u.real_name in
|
||||
<foreach collection="param.realNames" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test='param.phoneLike != null and param.phoneLike.trim() != ""'>
|
||||
<bind name="phoneLike" value="'%' + param.phoneLike + '%'"/>
|
||||
AND u.phone like #{phoneLike}
|
||||
</if>
|
||||
<if test="param.phones != null and param.phones.size() != 0">
|
||||
AND u.phone in
|
||||
<foreach collection="param.phones" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test='param.cardNoLike != null and param.cardNoLike.trim() != ""'>
|
||||
<bind name="cardNoLike" value="'%' + param.cardNoLike + '%'"/>
|
||||
AND u.card_no like #{cardNoLike}
|
||||
</if>
|
||||
<if test="param.cardNos != null and param.cardNos.size() != 0">
|
||||
AND u.card_no in
|
||||
<foreach collection="param.cardNos" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test='param.status != null and param.status.trim() != ""'>
|
||||
AND t.status = #{param.status}
|
||||
</if>
|
||||
<if test="param.statusList != null and param.statusList.size() != 0">
|
||||
AND t.status in
|
||||
<foreach collection="param.statusList" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<choose>
|
||||
<when test="param.statusList != null and param.statusList.size() != 0">
|
||||
<choose>
|
||||
<when test='param.statusList.contains("1")'>
|
||||
ORDER BY t.create_time DESC,t.id DESC
|
||||
</when>
|
||||
<when test='param.statusList.contains("2") or param.statusList.contains("3") or param.statusList.contains("4")'>
|
||||
ORDER BY t.update_time DESC,t.id DESC
|
||||
</when>
|
||||
<when test='param.statusList.contains("5")'>
|
||||
ORDER BY t.induction_time DESC,t.id DESC
|
||||
</when>
|
||||
</choose>
|
||||
</when>
|
||||
<otherwise>
|
||||
ORDER BY t.update_time DESC,t.id DESC
|
||||
</otherwise>
|
||||
</choose>
|
||||
|
||||
</select>
|
||||
|
||||
<select id="userPage"
|
||||
resultType="com.newyetai.recruit.position.dto.UserPositionRegistrationResDTO">
|
||||
SELECT t.id,
|
||||
p.id positionId,
|
||||
p.position_name,
|
||||
p.recruit_title,
|
||||
p.position_tag,
|
||||
p.salary_up,
|
||||
p.salary_low,
|
||||
p.salary_type,
|
||||
p.position_address,
|
||||
p.recruit_position_type,
|
||||
c.company_name,
|
||||
c.company_logo,
|
||||
uu.real_name as recruitUserName,
|
||||
pf.file_code positionFileCode,
|
||||
t.status,
|
||||
t.create_time,
|
||||
t.interview_time,
|
||||
t.interview_location,
|
||||
t.remark,
|
||||
t.induction_time,
|
||||
t.salary,
|
||||
t.show,
|
||||
pa.detail_address
|
||||
FROM
|
||||
hr_position_registration t
|
||||
LEFT JOIN hr_position p ON t.position_id = p.id AND p.deleted = 0
|
||||
LEFT JOIN uc_user uu ON p.recruit_user_id = uu.id AND uu.deleted = 0
|
||||
LEFT JOIN hr_company c ON p.company_id = c.id AND c.deleted = 0
|
||||
LEFT JOIN hr_position_file pf ON t.position_id = pf.position_id AND pf.default_show = 1 AND pf.deleted = 0
|
||||
LEFT JOIN hr_position_address pa ON p.address_id = pa.id AND pa.deleted = 0
|
||||
WHERE t.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
AND t.id = #{param.id}
|
||||
</if>
|
||||
AND t.user_id = #{param.userId}
|
||||
<if test='param.status != null and param.status.trim() != ""'>
|
||||
AND t.status = #{param.status}
|
||||
</if>
|
||||
<if test='param.positionId != null'>
|
||||
AND t.position_id = #{param.positionId}
|
||||
</if>
|
||||
ORDER BY t.id DESC
|
||||
</select>
|
||||
|
||||
<sql id="queryFromSql">
|
||||
FROM
|
||||
hr_position_registration t
|
||||
WHERE t.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
AND t.id = #{param.id}
|
||||
</if>
|
||||
<if test='param.positionId != null'>
|
||||
AND t.position_id = #{param.positionId}
|
||||
</if>
|
||||
<if test='param.userId != null'>
|
||||
AND t.user_id = #{param.userId}
|
||||
</if>
|
||||
<if test='param.status != null and param.status.trim() != ""'>
|
||||
AND t.status = #{param.status}
|
||||
</if>
|
||||
<if test='param.interviewTime != null'>
|
||||
AND t.interview_time = #{param.interviewTime}
|
||||
</if>
|
||||
<if test='param.inductionTime != null'>
|
||||
AND t.induction_time = #{param.inductionTime}
|
||||
</if>
|
||||
<if test='param.quitTime != null'>
|
||||
AND t.quit_time = #{param.quitTime}
|
||||
</if>
|
||||
<if test='param.terminationTime != null'>
|
||||
AND t.termination_time = #{param.terminationTime}
|
||||
</if>
|
||||
<if test='param.salary != null'>
|
||||
AND t.salary = #{param.salary}
|
||||
</if>
|
||||
<if test='param.remark != null and param.remark.trim() != ""'>
|
||||
AND t.remark = #{param.remark}
|
||||
</if>
|
||||
<if test='param.createTimeStart != null'>
|
||||
AND t.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test='param.createTimeEnd != null'>
|
||||
AND t.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
<if test='param.updateTimeStart != null'>
|
||||
AND t.update_time >= #{param.updateTimeStart}
|
||||
</if>
|
||||
<if test='param.updateTimeEnd != null'>
|
||||
AND t.update_time <= #{param.updateTimeEnd}
|
||||
</if>
|
||||
ORDER BY t.id DESC
|
||||
</sql>
|
||||
</mapper>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.newyetai.recruit.position.dao.PositionTypeMapper">
|
||||
|
||||
|
||||
<select id="queryByDto"
|
||||
resultType="com.newyetai.recruit.position.dto.PositionTypeDTO">
|
||||
SELECT pt.id,
|
||||
pt.name,
|
||||
pt.code,
|
||||
ifnull(pt.parent_id, 0) parent_id
|
||||
FROM hr_position_type pt
|
||||
WHERE pt.deleted = 0
|
||||
<if test="recruitPositionType != null and recruitPositionType != '' ">
|
||||
and pt.recruit_position_type = #{recruitPositionType}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.newyetai.recruit.position.service;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.groups.Default;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
@Validated(Default.class)
|
||||
public interface ImportDetailPositionService {
|
||||
|
||||
/**
|
||||
* 岗位导入 - 创建
|
||||
*
|
||||
* @param operatorDto 操作dto
|
||||
* @return {@link ImportDetailPositionDTO}
|
||||
*/
|
||||
ImportDetailPositionDTO create(@Valid ImportDetailPositionOperatorDTO operatorDto);
|
||||
|
||||
/**
|
||||
* 岗位导入 - 修改
|
||||
*
|
||||
* @param operatorDto 操作dto
|
||||
* @return {@link ImportDetailPositionDTO}
|
||||
*/
|
||||
ImportDetailPositionDTO modify(@Valid ImportDetailPositionOperatorDTO operatorDto);
|
||||
|
||||
/**
|
||||
* 岗位导入 - 删除
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link ImportDetailPositionDTO}
|
||||
*/
|
||||
ImportDetailPositionDTO delete(Long id);
|
||||
|
||||
/**
|
||||
* 岗位导入 - 根据ID查询单个
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link ImportDetailPositionDTO}
|
||||
*/
|
||||
ImportDetailPositionDTO findById(Long id);
|
||||
|
||||
/**
|
||||
* 岗位导入 - 列表查询
|
||||
*
|
||||
* @param queryDTO 列表查询dto
|
||||
* @return {@link List}<{@link ImportDetailPositionDTO}>
|
||||
*/
|
||||
List<ImportDetailPositionDTO> list(ImportDetailPositionQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 岗位导入 - 分页查询
|
||||
*
|
||||
* @param queryDTO 分页查询dto
|
||||
* @return {@link ImportDetailPositionDTO}
|
||||
*/
|
||||
List<ImportDetailPositionDTO> page(ImportDetailPositionPageQueryDTO queryDTO);
|
||||
|
||||
void batchCreate(List<ImportDetailPositionDTO> importDetailPositionDTOS);
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.newyetai.recruit.position.service;
|
||||
|
||||
|
||||
|
||||
import com.newyetai.recruit.position.dto.PositionAddressDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAddressOperatorDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAddressQueryDTO;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.groups.Default;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位报名信息表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@Validated(Default.class)
|
||||
public interface PositionAddressService {
|
||||
|
||||
|
||||
/**
|
||||
* 创建或更新
|
||||
*
|
||||
* @param operatorDTO 运营商dto
|
||||
* @return {@link Long}
|
||||
*/
|
||||
Long createOrUpdate(@Valid PositionAddressOperatorDTO operatorDTO);
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*
|
||||
* @param queryDTO 查询dto
|
||||
* @return {@link List}<{@link PositionAddressDTO}>
|
||||
*/
|
||||
List<PositionAddressDTO> list(PositionAddressQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param id id
|
||||
*/
|
||||
void delete(Long id);
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.newyetai.recruit.position.service;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.groups.Default;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@Validated(Default.class)
|
||||
public interface PositionAuditService {
|
||||
|
||||
/**
|
||||
* 岗位审核表 - 创建
|
||||
*
|
||||
* @param operatorDto 操作dto
|
||||
* @return {@link PositionAuditDTO}
|
||||
*/
|
||||
PositionNewDTO positionCreate(@Valid PositionNewOperatorDTO operatorDto);
|
||||
|
||||
/**
|
||||
* 岗位审核表 - 修改
|
||||
*
|
||||
* @param operatorDto 操作dto
|
||||
* @return {@link PositionAuditDTO}
|
||||
*/
|
||||
void positionModify(@Valid PositionNewOperatorDTO operatorDto);
|
||||
|
||||
|
||||
/**
|
||||
* 岗位审核表 - 根据ID查询单个
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link PositionAuditDTO}
|
||||
*/
|
||||
PositionNewDTO positionFindById(Long id);
|
||||
|
||||
/**
|
||||
* 岗位审核表 - 列表查询
|
||||
*
|
||||
* @param queryDTO 列表查询dto
|
||||
* @return {@link List}<{@link PositionAuditDTO}>
|
||||
*/
|
||||
List<PositionAuditDTO> list(PositionAuditQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 岗位审核表 - 分页查询
|
||||
*
|
||||
* @param queryDTO 分页查询dto
|
||||
* @return {@link PositionAuditDTO}
|
||||
*/
|
||||
List<PositionAuditDTO> page(PositionAuditPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 岗位审核表 - 分页查询
|
||||
*
|
||||
* @param queryDTO 分页查询dto
|
||||
* @return {@link PositionAuditDTO}
|
||||
*/
|
||||
List<PositionNewDTO> positionPage(PositionNewPageQueryDTO queryDTO);
|
||||
|
||||
void export(PositionNewPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* @description: 审核
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void audit(PositionAuditReqDTO reqDTO);
|
||||
|
||||
|
||||
PositionAuditDTO findById(Long id);
|
||||
|
||||
/**
|
||||
* @description: 开启招聘关闭招聘
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void positionModifyStatus(Set<Long> ids, String status);
|
||||
|
||||
/**
|
||||
* @description: 复制岗位
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
Long positionCopy(Long id);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.newyetai.recruit.position.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.newyetai.recruit.position.dto.PositionFileDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionFilePageQueryDTO;
|
||||
import com.newyetai.recruit.position.entity.PositionFile;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.validation.groups.Default;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位报名信息表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@Validated(Default.class)
|
||||
public interface PositionFileService extends IService<PositionFile> {
|
||||
|
||||
/**
|
||||
* 岗位文件列表
|
||||
*
|
||||
* @param queryDTO 查询dto
|
||||
* @return {@link List}<{@link PositionFileDTO}>
|
||||
*/
|
||||
List<PositionFileDTO> filePage(PositionFilePageQueryDTO queryDTO);
|
||||
|
||||
PositionFile create(PositionFileDTO queryDTO);
|
||||
|
||||
void update(PositionFileDTO dto);
|
||||
|
||||
void delete(Long id);
|
||||
void deleteByPositionId(Long positionId);
|
||||
|
||||
/**
|
||||
* 设置默认展示 (封面)
|
||||
*
|
||||
* @param id id
|
||||
*/
|
||||
void setDefault(Long id);
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
package com.newyetai.recruit.position.service;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.groups.Default;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
@Validated(Default.class)
|
||||
public interface PositionRegistrationService {
|
||||
|
||||
/**
|
||||
* 岗位报名信息表 - 创建
|
||||
*
|
||||
* @param operatorDto 操作dto
|
||||
* @return {@link PositionRegistrationDTO}
|
||||
*/
|
||||
PositionRegistrationDTO create(@Valid PositionRegistrationOperatorDTO operatorDto);
|
||||
|
||||
/**
|
||||
* 岗位报名信息表 - 修改
|
||||
*
|
||||
* @param operatorDto 操作dto
|
||||
* @return {@link PositionRegistrationDTO}
|
||||
*/
|
||||
PositionRegistrationDTO modify(@Valid PositionRegistrationOperatorDTO operatorDto);
|
||||
|
||||
/**
|
||||
* 岗位报名信息表 - 删除
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link PositionRegistrationDTO}
|
||||
*/
|
||||
PositionRegistrationDTO delete(Long id);
|
||||
|
||||
/**
|
||||
* 岗位报名信息表 - 根据ID查询单个
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link PositionRegistrationDTO}
|
||||
*/
|
||||
PositionRegistrationDTO findById(Long id);
|
||||
PositionRegistrationDTO findByIdAndChildrenOrgAll(Long id, Boolean childrenOrgAll);
|
||||
|
||||
|
||||
/**
|
||||
* 岗位报名信息表 - 列表查询
|
||||
*
|
||||
* @param queryDTO 列表查询dto
|
||||
* @return {@link List}<{@link PositionRegistrationDTO}>
|
||||
*/
|
||||
List<PositionRegistrationDTO> list(PositionRegistrationPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 岗位报名信息表 - 分页查询
|
||||
*
|
||||
* @param queryDTO 分页查询dto
|
||||
* @return {@link PositionRegistrationDTO}
|
||||
*/
|
||||
List<PositionRegistrationDTO> page(PositionRegistrationPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* @description: 用户端报名岗位
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void userCreate(UserPositionRegistrationDTO dto);
|
||||
|
||||
/**
|
||||
* @description: 邀约面试
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void invite(PositionRegistrationOperatorDTO operatorDTO);
|
||||
|
||||
/**
|
||||
* @description: 结束招聘
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void termination(PositionRegistrationOperatorDTO operatorDTO);
|
||||
|
||||
/**
|
||||
* @description: 完成面试
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void fulfillInterview(PositionRegistrationOperatorDTO operatorDTO);
|
||||
|
||||
/**
|
||||
* @description: 入职
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void onTheJob(OnTheJobDTO dto);
|
||||
|
||||
/**
|
||||
* @description: 离职
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void resigned(ResignedDTO dto);
|
||||
|
||||
void export(PositionRegistrationPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* @description: 用户端查看我的报名
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
List<UserPositionRegistrationResDTO> userPage(UserPositionRegistrationPageQueryDTO queryDTO);
|
||||
|
||||
void cancel(Long positionId);
|
||||
|
||||
/**
|
||||
* @description: 查看
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void show(Long id);
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.newyetai.recruit.position.service;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.groups.Default;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@Validated(Default.class)
|
||||
public interface PositionService {
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表 - 创建
|
||||
*
|
||||
* @param operatorDto 操作dto
|
||||
* @return {@link PositionDTO}
|
||||
*/
|
||||
PositionDTO create(@Valid PositionOperatorDTO operatorDto);
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表 - 修改
|
||||
*
|
||||
* @param operatorDto 操作dto
|
||||
* @return {@link PositionDTO}
|
||||
*/
|
||||
PositionDTO modify(@Valid PositionOperatorDTO operatorDto);
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表 - 删除
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link PositionDTO}
|
||||
*/
|
||||
PositionDTO delete(Long id);
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表 - 根据ID查询单个
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link PositionDTO}
|
||||
*/
|
||||
PositionDTO findById(Long id);
|
||||
|
||||
PositionDTO userFindById(Long id);
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表 - 列表查询
|
||||
*
|
||||
* @param queryDTO 列表查询dto
|
||||
* @return {@link List}<{@link PositionDTO}>
|
||||
*/
|
||||
List<PositionDTO> list(PositionPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表 - 分页查询
|
||||
*
|
||||
* @param queryDTO 分页查询dto
|
||||
* @return {@link PositionDTO}
|
||||
*/
|
||||
List<PositionDTO> page(PositionPageQueryDTO queryDTO);
|
||||
List<PositionDTO> userPage(PositionPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* @description: 岗位信息腾讯地图-分页查询"
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
List<PositionDTO> tencentMapUserPage(PositionPageQueryDTO queryDTO);
|
||||
|
||||
void export(PositionPageQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* @description: 开启或者关闭招聘
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
void modifyStatus(PositionOperatorDTO dto);
|
||||
|
||||
void template();
|
||||
|
||||
Long copy(Long id);
|
||||
|
||||
/**
|
||||
* @description: 人岗匹配
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
List<PositionDTO> personPostMatching(Long id);
|
||||
|
||||
void positionExpiry();
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.newyetai.recruit.position.service;
|
||||
|
||||
|
||||
|
||||
import com.newyetai.recruit.position.dto.PositionTypeDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionTypeQueryDTO;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.validation.groups.Default;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 招聘系统-岗位报名信息表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author chenyun
|
||||
* @since 2021-01-08
|
||||
*/
|
||||
@Validated(Default.class)
|
||||
public interface PositionTypeService {
|
||||
|
||||
/**
|
||||
* 批量创建
|
||||
*
|
||||
* @param positionTypeDTOS 位置式dto
|
||||
* @return {@link List}<{@link PositionTypeDTO}>
|
||||
*/
|
||||
List<PositionTypeDTO> batchCreate(List<PositionTypeDTO> positionTypeDTOS);
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param queryDTO 查询dto
|
||||
* @return {@link List}<{@link PositionTypeDTO}>
|
||||
*/
|
||||
List<PositionTypeDTO> query(PositionTypeQueryDTO queryDTO);
|
||||
}
|
||||
@@ -0,0 +1,567 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.common.dto.ExportHeadDetailInfoDTO;
|
||||
import com.newyetai.common.dto.ExportHeadInfoDTO;
|
||||
import com.newyetai.common.easyexcel.ExcelUtil;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.component.commonimport.constant.ImportDetailStatusEnum;
|
||||
import com.newyetai.component.commonimport.constant.ImportStatusEnum;
|
||||
import com.newyetai.component.commonimport.constant.ImportTypeEnum;
|
||||
import com.newyetai.component.commonimport.dto.ImportDetailPageDTO;
|
||||
import com.newyetai.component.commonimport.dto.ImportMainDTO;
|
||||
import com.newyetai.component.commonimport.dto.ImportMainQueryDTO;
|
||||
import com.newyetai.component.commonimport.dto.ImportMainUpdateDTO;
|
||||
import com.newyetai.component.commonimport.service.ImportMainService;
|
||||
import com.newyetai.component.commonimport.service.impl.AbstractCommonImportProvider;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
import com.newyetai.component.file.entity.FileRecord;
|
||||
import com.newyetai.component.file.service.FileRecordService;
|
||||
import com.newyetai.recruit.company.dto.HrCompanyDTO;
|
||||
import com.newyetai.recruit.company.dto.HrCompanyPageQueryDTO;
|
||||
import com.newyetai.recruit.company.enums.HrCompanyEnum;
|
||||
import com.newyetai.recruit.company.service.IHrCompanyService;
|
||||
import com.newyetai.recruit.position.dao.PositionAddressMapper;
|
||||
import com.newyetai.recruit.position.dao.PositionMapper;
|
||||
import com.newyetai.recruit.position.dao.PositionTypeMapper;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionExecuteDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionExportDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionListenerDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionOperatorDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionPageQueryDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionNewDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionNewOperatorDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionOperatorDTO;
|
||||
import com.newyetai.recruit.position.entity.Position;
|
||||
import com.newyetai.recruit.position.entity.PositionAddress;
|
||||
import com.newyetai.recruit.position.entity.PositionType;
|
||||
import com.newyetai.recruit.position.service.ImportDetailPositionService;
|
||||
import com.newyetai.recruit.position.service.PositionAuditService;
|
||||
import com.newyetai.sdk.tencent.map.TencentMapContext;
|
||||
import com.newyetai.sdk.tencent.map.dto.TencentMapGeocoderReqDTO;
|
||||
import com.newyetai.sdk.tencent.map.dto.TencentMapGeocoderResDTO;
|
||||
import com.newyetai.sdk.tencent.map.dto.TencentMapLocationV1IpResDTO;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.usercenter.org.dao.OrgMapper;
|
||||
import com.newyetai.usercenter.org.entity.Org;
|
||||
import com.newyetai.usercenter.org.enums.RecruitPositionTypeEnum;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @description: admin导入岗位
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-11 17:45
|
||||
**/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ImportDetailPositionAdminProvider extends AbstractCommonImportProvider<ImportDetailPositionExecuteDTO, ImportDetailPositionDTO, ImportDetailPositionListenerDTO> {
|
||||
|
||||
@Autowired
|
||||
private ImportDetailPositionService importDetailPositionService;
|
||||
|
||||
@Autowired
|
||||
private ImportMainService importMainService;
|
||||
|
||||
@Autowired
|
||||
private FileRecordService fileRecordService;
|
||||
|
||||
@Autowired
|
||||
private IHrCompanyService hrCompanyService;
|
||||
|
||||
@Autowired
|
||||
private PositionAuditService positionAuditService;
|
||||
|
||||
@Resource
|
||||
private PositionMapper positionMapper;
|
||||
|
||||
@Resource
|
||||
private PositionTypeMapper positionTypeMapper;
|
||||
|
||||
@Resource
|
||||
private PositionAddressMapper positionAddressMapper;
|
||||
|
||||
@Resource
|
||||
private OrgMapper orgMapper;
|
||||
|
||||
@Autowired
|
||||
private TencentMapContext tencentMapContext;
|
||||
|
||||
public ImportDetailPositionAdminProvider(ImportMainService imprImportMainService) {
|
||||
super(imprImportMainService);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return ImportTypeEnum.ADMIN_POSITION.getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<ImportDetailPositionDTO> pageDetail(ImportDetailPageDTO importDetailPageDTO) {
|
||||
ImportDetailPositionPageQueryDTO queryDTO = new ImportDetailPositionPageQueryDTO();
|
||||
BeanUtils.copyProperties(importDetailPageDTO, queryDTO);
|
||||
importDetailPositionService.page(queryDTO);
|
||||
return queryDTO.getPageResult();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void importDetailExport(ImportDetailPageDTO importDetailPageDTO) {
|
||||
ImportDetailPositionPageQueryDTO queryDTO = new ImportDetailPositionPageQueryDTO();
|
||||
BeanUtils.copyProperties(importDetailPageDTO, queryDTO);
|
||||
queryDTO.disablePage();
|
||||
List<ImportDetailPositionDTO> list = importDetailPositionService.page(queryDTO);
|
||||
|
||||
List<ImportDetailPositionExportDTO> exportDTOList = list.stream().map(dto -> {
|
||||
ImportDetailPositionExportDTO importDetailPositionExportDTO = JsonUtils.toObject(dto.getDataJson(), ImportDetailPositionExportDTO.class);
|
||||
importDetailPositionExportDTO.setRemark(dto.getRemark());
|
||||
importDetailPositionExportDTO.setFailReason(dto.getFailReason());
|
||||
return importDetailPositionExportDTO;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(exportDTOList)) {
|
||||
return;
|
||||
}
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
String commonImportDetailStatus = DictUtils.getCodeNameMap("common_import_detail_status").get(String.valueOf(importDetailPageDTO.getDetailStatus()));
|
||||
|
||||
String fileName = "岗位导入" + (StringUtils.isNotBlank(commonImportDetailStatus) ? commonImportDetailStatus : "") + "明细导出" + "(" + formatter.format(LocalDateTime.now()) + ")";
|
||||
|
||||
ExportHeadInfoDTO infoDTO = ExportHeadInfoDTO.builder()
|
||||
.fileName(fileName)
|
||||
.build();
|
||||
List<ExportHeadDetailInfoDTO> heads = infoDTO.getHeads();
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("用工企业").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位名称").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘标题").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘人数").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作地址").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位性质").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位类型").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位标签").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("薪资下限").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("薪资上限").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("薪资类型").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("发薪日").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("性别").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("年龄(下限)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("年龄(上限)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("学历").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("经验").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("证件").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("其他").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作内容").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("有效期截止时间").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("失败原因").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("备注").build());
|
||||
|
||||
List<List> datas = Lists.newArrayList();
|
||||
for (ImportDetailPositionExportDTO dto : exportDTOList) {
|
||||
List objects = Lists.newArrayList();
|
||||
datas.add(objects);
|
||||
objects.add(dto.getCompanyName());
|
||||
objects.add(dto.getPositionName());
|
||||
objects.add(dto.getRecruitTitle());
|
||||
objects.add(dto.getPositionNumber());
|
||||
objects.add(dto.getPositionAddress());
|
||||
objects.add(dto.getRecruitPositionType());
|
||||
objects.add(dto.getPositionTypeName());
|
||||
objects.add(dto.getPositionTag());
|
||||
objects.add(dto.getSalaryLow());
|
||||
objects.add(dto.getSalaryUp());
|
||||
objects.add(dto.getSalaryType());
|
||||
objects.add(dto.getPayDate());
|
||||
objects.add(dto.getSexRequire());
|
||||
objects.add(dto.getAgeLow());
|
||||
objects.add(dto.getAgeUp());
|
||||
objects.add(dto.getEducationRequire());
|
||||
objects.add(dto.getExperienceRequire());
|
||||
objects.add(dto.getCertificatesRequire());
|
||||
objects.add(dto.getOtherRequire());
|
||||
objects.add(dto.getJobContent());
|
||||
objects.add(dto.getEndTime());
|
||||
objects.add(dto.getFailReason());
|
||||
objects.add(dto.getRemark());
|
||||
|
||||
}
|
||||
infoDTO.setDatas(datas);
|
||||
|
||||
ExcelUtil.dynamicExportTemplate(infoDTO);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ImportDetailPositionListenerDTO> analy(Long mainId) {
|
||||
// 解析文件+明细
|
||||
ImportMainDTO importMainDTO = importMainService.find(ImportMainQueryDTO.builder().id(mainId).build());
|
||||
Assert.notNull(importMainDTO, "未查询到导入的数据");
|
||||
|
||||
FileRecord fileRecord;
|
||||
try {
|
||||
fileRecord = fileRecordService.find(FileRecord.builder().fileCode(importMainDTO.getFileCode()).build());
|
||||
} catch (Exception e) {
|
||||
log.info("导入文件异常,", e);
|
||||
fileRecord = null;
|
||||
}
|
||||
Assert.notNull(fileRecord, "上传文件不存在");
|
||||
try (InputStream is = fileRecordService.getFile(importMainDTO.getFileCode())) {
|
||||
ImportPositionExcelListener listener = new ImportPositionExcelListener();
|
||||
ExcelReaderBuilder reader = EasyExcel.read(is, ImportDetailPositionListenerDTO.class, listener);
|
||||
reader.sheet().doRead();
|
||||
List<ImportDetailPositionListenerDTO> dtos = listener.getDtos();
|
||||
Assert.isTrue(!dtos.isEmpty(), "导入文件无有效数据");
|
||||
return dtos;
|
||||
} catch (Exception e) {
|
||||
throw new BusinessException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void checkAndSave(Long mainId, List<ImportDetailPositionListenerDTO> detailCreateDtos) {
|
||||
//更改状态为校验中
|
||||
ImportMainUpdateDTO updateDto = ImportMainUpdateDTO.builder().id(mainId)
|
||||
.oldStatusSet(Sets.newHashSet(ImportStatusEnum.INIT.getStatus()))
|
||||
.newStatus(ImportStatusEnum.CHECKING.getStatus())
|
||||
.build();
|
||||
importMainService.modify(updateDto);
|
||||
|
||||
List<ImportDetailPositionDTO> importDetailPositionDTOS = new ArrayList<>();
|
||||
|
||||
//存储用工企业+岗位名称。用于校验 导入的数据中有没有重复的
|
||||
List<String> companyIdPositionNames = new ArrayList<>();
|
||||
|
||||
for (ImportDetailPositionListenerDTO importDetailPositionListenerDTO : detailCreateDtos) {
|
||||
ImportDetailPositionDTO importDetailPositionDTO = new ImportDetailPositionDTO();
|
||||
|
||||
this.checkAndFill(importDetailPositionDTO, importDetailPositionListenerDTO);
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getFailReason())) {
|
||||
if (companyIdPositionNames.contains(StringUtils.join(importDetailPositionListenerDTO.getCompanyName(), importDetailPositionListenerDTO.getPositionName()))) {
|
||||
importDetailPositionDTO.appendFailMsg("用工企业+岗位名称出现多次");
|
||||
}
|
||||
//存储用工企业+岗位名称
|
||||
companyIdPositionNames.add(StringUtils.join(importDetailPositionListenerDTO.getCompanyName(), importDetailPositionListenerDTO.getPositionName()));
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getFailReason())) {
|
||||
importDetailPositionDTO.setDetailStatus(ImportDetailStatusEnum.CHECK_FAIL.getStatus());
|
||||
} else {
|
||||
importDetailPositionDTO.setDetailStatus(ImportDetailStatusEnum.CHECK_SUCCESS.getStatus());
|
||||
}
|
||||
importDetailPositionDTO.setMainId(mainId);
|
||||
importDetailPositionDTOS.add(importDetailPositionDTO);
|
||||
}
|
||||
importDetailPositionService.batchCreate(importDetailPositionDTOS);
|
||||
super.finishCheck(mainId, importDetailPositionDTOS);
|
||||
}
|
||||
|
||||
private void checkAndFill(ImportDetailPositionDTO importDetailPositionDTO, ImportDetailPositionListenerDTO importDetailPositionListenerDTO) {
|
||||
BeanUtils.copyProperties(importDetailPositionListenerDTO, importDetailPositionDTO);
|
||||
importDetailPositionDTO.setDataJson(JsonUtils.toJsonString(importDetailPositionListenerDTO));
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getPositionName())) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位名称不能为空");
|
||||
} else if (importDetailPositionDTO.getPositionName().length() > 50) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位名称超过最大限制长度");
|
||||
importDetailPositionDTO.setPositionName(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionListenerDTO.getCompanyName())) {
|
||||
importDetailPositionDTO.appendFailMsg("用工企业不能为空");
|
||||
} else {
|
||||
HrCompanyDTO hrCompanyDTO = hrCompanyService.find(HrCompanyPageQueryDTO.builder().companyTypes(Arrays.asList(HrCompanyEnum.SELF.getType())).companyName(importDetailPositionListenerDTO.getCompanyName()).build());
|
||||
if (Objects.isNull(hrCompanyDTO)) {
|
||||
importDetailPositionDTO.appendFailMsg("未查询到对应的用工企业");
|
||||
} else {
|
||||
importDetailPositionDTO.setCompanyId(hrCompanyDTO.getId());
|
||||
importDetailPositionDTO.setOrgId(hrCompanyDTO.getOrgId());
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getPositionName())) {
|
||||
//当前机构下,相同的用工企业,不能存在相同的岗位名称
|
||||
List<Position> positions = positionMapper.selectList(new LambdaQueryWrapper<Position>()
|
||||
.eq(Position::getCompanyId, importDetailPositionDTO.getCompanyId())
|
||||
.eq(Position::getOrgId, hrCompanyDTO.getOrgId())
|
||||
.eq(Position::getPositionName, importDetailPositionDTO.getPositionName())
|
||||
);
|
||||
if (CollectionUtils.isNotEmpty(positions)) {
|
||||
importDetailPositionDTO.appendFailMsg("该用工企业已存在相同的岗位名称");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getRecruitTitle())) {
|
||||
importDetailPositionDTO.appendFailMsg("招聘标题不能为空");
|
||||
} else if (importDetailPositionDTO.getRecruitTitle().length() > 255) {
|
||||
importDetailPositionDTO.appendFailMsg("招聘标题超过最大限制长度");
|
||||
importDetailPositionDTO.setRecruitTitle(null);
|
||||
}
|
||||
|
||||
if (!Objects.isNull(importDetailPositionDTO.getPositionNumber()) && importDetailPositionDTO.getPositionNumber() > 30000) {
|
||||
importDetailPositionDTO.appendFailMsg("招聘人数超过最大限制");
|
||||
importDetailPositionDTO.setPositionNumber(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getPositionAddress())) {
|
||||
importDetailPositionDTO.appendFailMsg("工作地址不能为空");
|
||||
} else if (importDetailPositionDTO.getPositionAddress().length() > 255) {
|
||||
importDetailPositionDTO.appendFailMsg("工作地址超过最大限制长度");
|
||||
importDetailPositionDTO.setPositionAddress(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getRecruitPositionType())) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位性质不能为空");
|
||||
} else {
|
||||
String recruitPositionTypeCode = DictUtils.getNameCodeMap("recruit_position_type").get(importDetailPositionDTO.getRecruitPositionType());
|
||||
if (StringUtils.isBlank(recruitPositionTypeCode)) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位性质有误,请重新操作");
|
||||
importDetailPositionDTO.setRecruitPositionType(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setRecruitPositionType(recruitPositionTypeCode);
|
||||
if (Objects.nonNull(importDetailPositionDTO.getOrgId())) {
|
||||
Org org = orgMapper.selectOne(new LambdaQueryWrapper<Org>().eq(Org::getDeleted, false).eq(Org::getId, importDetailPositionDTO.getOrgId()));
|
||||
//判断招聘岗位类型权限
|
||||
if (!org.getRecruitPositionType().equals(RecruitPositionTypeEnum.ODD_JOB_OR_GENERAL_WORKER.getType())) {
|
||||
if (!StringUtils.equals(org.getRecruitPositionType(), importDetailPositionDTO.getRecruitPositionType())) {
|
||||
if (StringUtils.equals(org.getRecruitPositionType(), RecruitPositionTypeEnum.ODD_JOB.getType())) {
|
||||
importDetailPositionDTO.appendFailMsg("当前企业仅支持维护零工性质岗位。");
|
||||
importDetailPositionDTO.setRecruitPositionType(null);
|
||||
}
|
||||
if (StringUtils.equals(org.getRecruitPositionType(), RecruitPositionTypeEnum.GENERAL_WORKER.getType())) {
|
||||
importDetailPositionDTO.appendFailMsg("当前企业仅支持维护普工性质岗位。");
|
||||
importDetailPositionDTO.setRecruitPositionType(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getPositionTypeName())) {
|
||||
if (importDetailPositionDTO.getPositionTypeName().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位类型超过最大限制长度");
|
||||
importDetailPositionDTO.setPositionTypeName(null);
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getPositionTag()) && importDetailPositionDTO.getPositionTag().length() > 512) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位标签超过最大限制长度");
|
||||
importDetailPositionDTO.setPositionTag(null);
|
||||
}
|
||||
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getPayDate()) && importDetailPositionDTO.getPayDate().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("发薪日超过最大限制长度");
|
||||
importDetailPositionDTO.setPayDate(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getSexRequire())) {
|
||||
importDetailPositionDTO.appendFailMsg("性别不能为空");
|
||||
} else {
|
||||
if (importDetailPositionDTO.getSexRequire().length() > 2) {
|
||||
importDetailPositionDTO.appendFailMsg("性别超过最大限制长度");
|
||||
importDetailPositionDTO.setSexRequire(null);
|
||||
}else {
|
||||
String gender = DictUtils.getNameCodeMap("gender_require").get(importDetailPositionDTO.getSexRequire());
|
||||
if (StringUtils.isBlank(gender)) {
|
||||
importDetailPositionDTO.appendFailMsg("性别有误,请重新操作");
|
||||
importDetailPositionDTO.setSexRequire(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setSexRequire(gender);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getEducationRequire())) {
|
||||
importDetailPositionDTO.appendFailMsg("学历不能为空");
|
||||
} else {
|
||||
if (importDetailPositionDTO.getEducationRequire().length() > 64) {
|
||||
importDetailPositionDTO.appendFailMsg("学历超过最大限制长度");
|
||||
importDetailPositionDTO.setEducationRequire(null);
|
||||
} else {
|
||||
String educationCode = DictUtils.getNameCodeMap("education").get(importDetailPositionDTO.getEducationRequire());
|
||||
if (StringUtils.isBlank(educationCode)) {
|
||||
importDetailPositionDTO.appendFailMsg("学历有误,请重新操作");
|
||||
importDetailPositionDTO.setEducationRequire(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setEducationRequire(educationCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getExperienceRequire())) {
|
||||
importDetailPositionDTO.appendFailMsg("经验不能为空");
|
||||
} else {
|
||||
if (importDetailPositionDTO.getExperienceRequire().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("经验超过最大限制长度");
|
||||
importDetailPositionDTO.setExperienceRequire(null);
|
||||
}else {
|
||||
String experienceCode = DictUtils.getNameCodeMap("RECRUIT_WORK_YEAR").get(importDetailPositionDTO.getExperienceRequire());
|
||||
if (StringUtils.isBlank(experienceCode)) {
|
||||
importDetailPositionDTO.appendFailMsg("经验有误,请重新操作");
|
||||
importDetailPositionDTO.setExperienceRequire(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setExperienceRequire(experienceCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getCertificatesRequire()) && importDetailPositionDTO.getCertificatesRequire().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("证件超过最大限制长度");
|
||||
importDetailPositionDTO.setCertificatesRequire(null);
|
||||
}
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getOtherRequire()) && importDetailPositionDTO.getOtherRequire().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("其它超过最大限制长度");
|
||||
importDetailPositionDTO.setOtherRequire(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getJobContent())) {
|
||||
importDetailPositionDTO.appendFailMsg("工作内容不能为空");
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getSalaryType())) {
|
||||
String salaryTypeCode = DictUtils.getNameCodeMap("salary_type").get(importDetailPositionDTO.getSalaryType());
|
||||
if (StringUtils.isBlank(salaryTypeCode)) {
|
||||
importDetailPositionDTO.appendFailMsg("薪资类型有误,请重新操作");
|
||||
importDetailPositionDTO.setSalaryType(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setSalaryType(salaryTypeCode);
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getEndTime())) {
|
||||
importDetailPositionDTO.appendFailMsg("有效期截止时间不能为空");
|
||||
}else {
|
||||
try {
|
||||
if (DateUtil.endOfDay(DateUtil.parse(importDetailPositionDTO.getEndTime())).getTime() <= DateUtil.endOfDay(new Date()).getTime()) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位有效期不能小于等于当前日期");
|
||||
}
|
||||
importDetailPositionDTO.setEndTime(DateUtil.format(DateUtil.endOfDay(DateUtil.parse(importDetailPositionDTO.getEndTime())),"yyyy-MM-dd HH:mm:ss"));
|
||||
}catch (Exception e) {
|
||||
importDetailPositionDTO.appendFailMsg("有效期截止时间格式不正确");
|
||||
importDetailPositionDTO.setEndTime(null);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public Long execute(ImportDetailPositionExecuteDTO executeDto) {
|
||||
Long mainId = executeDto.getMainId();
|
||||
Assert.notNull(mainId, "参数异常");
|
||||
|
||||
ImportMainDTO importMainDTO = importMainService.find(ImportMainQueryDTO.builder().id(mainId).build());
|
||||
Assert.notNull(importMainDTO, "未查询到导入数据");
|
||||
|
||||
ImportDetailPositionPageQueryDTO queryDTO = new ImportDetailPositionPageQueryDTO();
|
||||
queryDTO.disablePage();
|
||||
queryDTO.setMainId(mainId);
|
||||
queryDTO.setDetailStatus(ImportDetailStatusEnum.CHECK_SUCCESS.getStatus());
|
||||
List<ImportDetailPositionDTO> importDetailPositionDTOS = importDetailPositionService.page(queryDTO);
|
||||
if (CollectionUtils.isEmpty(importDetailPositionDTOS)) {
|
||||
throw new BusinessException("未查询到成功的明细数据");
|
||||
}
|
||||
|
||||
for (ImportDetailPositionDTO importDetailPositionDTO : importDetailPositionDTOS) {
|
||||
PositionOperatorDTO position = new PositionOperatorDTO();
|
||||
BeanUtils.copyProperties(importDetailPositionDTO, position);
|
||||
position.setEndTime(DateUtil.parse(importDetailPositionDTO.getEndTime()));
|
||||
//工作地址匹配当前用工企业下的工作地址,有就用,没有就创建一个, 地图控件要是返回多条记录,取第一个。
|
||||
//先直接创建。后续接了地图在改
|
||||
|
||||
List<PositionAddress> positionAddressList = positionAddressMapper.selectList(new LambdaQueryWrapper<PositionAddress>()
|
||||
.eq(PositionAddress::getDeleted, false)
|
||||
.eq(PositionAddress::getCompanyId, importDetailPositionDTO.getCompanyId())
|
||||
.eq(PositionAddress::getDetailAddress, importDetailPositionDTO.getPositionAddress())
|
||||
);
|
||||
if (CollectionUtils.isEmpty(positionAddressList)) {
|
||||
PositionAddress positionAddress = new PositionAddress();
|
||||
positionAddress.setCompanyId(importDetailPositionDTO.getCompanyId());
|
||||
positionAddress.setDetailAddress(importDetailPositionDTO.getPositionAddress());
|
||||
|
||||
AlitaResult<TencentMapGeocoderResDTO> alitaResult = tencentMapContext.webServiceGeocoder(TencentMapGeocoderReqDTO.builder()
|
||||
.address(importDetailPositionDTO.getPositionAddress())
|
||||
.build());
|
||||
|
||||
if (Boolean.TRUE.equals(alitaResult.getSuccess())) {
|
||||
TencentMapGeocoderResDTO resultData = alitaResult.getData();
|
||||
TencentMapGeocoderResDTO.TencentMapGeocoderLocationResDTO location = resultData.getLocation();
|
||||
if (Objects.nonNull(location)) {
|
||||
positionAddress.setLatitude(location.getLat());
|
||||
positionAddress.setLongitude(location.getLng());
|
||||
}
|
||||
}
|
||||
positionAddressMapper.saveEntity(positionAddress);
|
||||
position.setAddressId(positionAddress.getId());
|
||||
} else {
|
||||
position.setAddressId(positionAddressList.get(0).getId());
|
||||
}
|
||||
|
||||
|
||||
//岗位类型 名称匹配,存code, 匹配不到就不存此字段
|
||||
List<PositionType> positionTypeList = positionTypeMapper.selectList(new LambdaQueryWrapper<PositionType>().eq(PositionType::getDeleted, false).eq(PositionType::getName, importDetailPositionDTO.getPositionTypeName()));
|
||||
if (CollectionUtils.isNotEmpty(positionTypeList)) {
|
||||
position.setPositionType(positionTypeList.get(0).getCode());
|
||||
}
|
||||
|
||||
//工作性质:短工、全职、实习
|
||||
//岗位性质:零工、普通岗
|
||||
//招聘岗位类型:零工、普通岗、零工+普通岗
|
||||
if (StringUtils.isNotBlank(position.getRecruitPositionType())) {
|
||||
String jobCategory = null;
|
||||
switch (position.getRecruitPositionType()) {
|
||||
case "1":
|
||||
jobCategory = "2";
|
||||
break;
|
||||
case "2":
|
||||
jobCategory = "1";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
position.setJobCategory(jobCategory);
|
||||
}
|
||||
PositionNewOperatorDTO positionNewOperatorDTO = new PositionNewOperatorDTO();
|
||||
BeanUtils.copyProperties(position, positionNewOperatorDTO);
|
||||
PositionNewDTO positionNewDTO = positionAuditService.positionCreate(positionNewOperatorDTO);
|
||||
ImportDetailPositionOperatorDTO updateImportDetailPositionDTO = new ImportDetailPositionOperatorDTO();
|
||||
BeanUtils.copyProperties(importDetailPositionDTO, updateImportDetailPositionDTO);
|
||||
updateImportDetailPositionDTO.setExtraDetailId(positionNewDTO.getId());
|
||||
updateImportDetailPositionDTO.setEndTime(DateUtil.parse(importDetailPositionDTO.getEndTime()));
|
||||
importDetailPositionService.modify(updateImportDetailPositionDTO);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,550 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.common.dto.ExportHeadDetailInfoDTO;
|
||||
import com.newyetai.common.dto.ExportHeadInfoDTO;
|
||||
import com.newyetai.common.easyexcel.ExcelUtil;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
import com.newyetai.recruit.company.dto.HrCompanyDTO;
|
||||
import com.newyetai.recruit.company.dto.HrCompanyPageQueryDTO;
|
||||
import com.newyetai.recruit.company.enums.HrCompanyEnum;
|
||||
import com.newyetai.recruit.company.service.IHrCompanyService;
|
||||
import com.newyetai.component.commonimport.constant.ImportDetailStatusEnum;
|
||||
import com.newyetai.component.commonimport.constant.ImportStatusEnum;
|
||||
import com.newyetai.component.commonimport.constant.ImportTypeEnum;
|
||||
import com.newyetai.component.commonimport.dto.ImportDetailPageDTO;
|
||||
import com.newyetai.component.commonimport.dto.ImportMainDTO;
|
||||
import com.newyetai.component.commonimport.dto.ImportMainQueryDTO;
|
||||
import com.newyetai.component.commonimport.dto.ImportMainUpdateDTO;
|
||||
import com.newyetai.component.commonimport.service.ImportMainService;
|
||||
import com.newyetai.component.commonimport.service.impl.AbstractCommonImportProvider;
|
||||
import com.newyetai.component.file.entity.FileRecord;
|
||||
import com.newyetai.component.file.service.FileRecordService;
|
||||
import com.newyetai.recruit.position.dao.PositionAddressMapper;
|
||||
import com.newyetai.recruit.position.dao.PositionMapper;
|
||||
import com.newyetai.recruit.position.dao.PositionTypeMapper;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionExecuteDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionExportDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionListenerDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionOperatorDTO;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionPageQueryDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionExportDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionNewDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionNewOperatorDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionOperatorDTO;
|
||||
import com.newyetai.recruit.position.entity.Position;
|
||||
import com.newyetai.recruit.position.entity.PositionAddress;
|
||||
import com.newyetai.recruit.position.entity.PositionType;
|
||||
import com.newyetai.recruit.position.service.ImportDetailPositionService;
|
||||
import com.newyetai.recruit.position.service.PositionAuditService;
|
||||
import com.newyetai.recruit.position.service.PositionService;
|
||||
import com.newyetai.recruit.talent.dto.ImportDetailTalentPageQueryDTO;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.usercenter.org.dao.OrgMapper;
|
||||
import com.newyetai.usercenter.org.entity.Org;
|
||||
import com.newyetai.usercenter.org.enums.RecruitPositionTypeEnum;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-11 17:45
|
||||
**/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ImportDetailPositionProvider extends AbstractCommonImportProvider<ImportDetailPositionExecuteDTO, ImportDetailPositionDTO, ImportDetailPositionListenerDTO> {
|
||||
|
||||
@Autowired
|
||||
private ImportDetailPositionService importDetailPositionService;
|
||||
|
||||
@Autowired
|
||||
private ImportMainService importMainService;
|
||||
|
||||
@Autowired
|
||||
private FileRecordService fileRecordService;
|
||||
|
||||
@Autowired
|
||||
private IHrCompanyService hrCompanyService;
|
||||
|
||||
@Autowired
|
||||
private PositionAuditService positionAuditService;
|
||||
|
||||
@Resource
|
||||
private PositionMapper positionMapper;
|
||||
|
||||
@Resource
|
||||
private PositionTypeMapper positionTypeMapper;
|
||||
|
||||
@Resource
|
||||
private PositionAddressMapper positionAddressMapper;
|
||||
|
||||
@Resource
|
||||
private OrgMapper orgMapper;
|
||||
|
||||
|
||||
public ImportDetailPositionProvider(ImportMainService imprImportMainService) {
|
||||
super(imprImportMainService);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return ImportTypeEnum.POSITION.getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<ImportDetailPositionDTO> pageDetail(ImportDetailPageDTO importDetailPageDTO) {
|
||||
ImportDetailPositionPageQueryDTO queryDTO = new ImportDetailPositionPageQueryDTO();
|
||||
BeanUtils.copyProperties(importDetailPageDTO, queryDTO);
|
||||
importDetailPositionService.page(queryDTO);
|
||||
return queryDTO.getPageResult();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void importDetailExport(ImportDetailPageDTO importDetailPageDTO) {
|
||||
ImportDetailPositionPageQueryDTO queryDTO = new ImportDetailPositionPageQueryDTO();
|
||||
BeanUtils.copyProperties(importDetailPageDTO, queryDTO);
|
||||
queryDTO.disablePage();
|
||||
List<ImportDetailPositionDTO> list = importDetailPositionService.page(queryDTO);
|
||||
|
||||
List<ImportDetailPositionExportDTO> exportDTOList = list.stream().map(dto -> {
|
||||
ImportDetailPositionExportDTO importDetailPositionExportDTO = JsonUtils.toObject(dto.getDataJson(), ImportDetailPositionExportDTO.class);
|
||||
importDetailPositionExportDTO.setRemark(dto.getRemark());
|
||||
importDetailPositionExportDTO.setFailReason(dto.getFailReason());
|
||||
return importDetailPositionExportDTO;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(exportDTOList)) {
|
||||
return;
|
||||
}
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
String commonImportDetailStatus = DictUtils.getCodeNameMap("common_import_detail_status").get(String.valueOf(importDetailPageDTO.getDetailStatus()));
|
||||
|
||||
String fileName = "岗位导入" + (StringUtils.isNotBlank(commonImportDetailStatus) ? commonImportDetailStatus : "") + "明细导出" + "(" + formatter.format(LocalDateTime.now()) + ")";
|
||||
|
||||
ExportHeadInfoDTO infoDTO = ExportHeadInfoDTO.builder()
|
||||
.fileName(fileName)
|
||||
.build();
|
||||
List<ExportHeadDetailInfoDTO> heads = infoDTO.getHeads();
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("用工企业").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位名称").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘标题").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘人数").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作地址").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位性质").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位类型").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位标签").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("薪资下限").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("薪资上限").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("薪资类型").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("发薪日").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("性别").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("年龄(下限)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("年龄(上限)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("学历").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("经验").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("证件").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("其他").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作内容").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("失败原因").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("备注").build());
|
||||
|
||||
List<List> datas = Lists.newArrayList();
|
||||
for (ImportDetailPositionExportDTO dto : exportDTOList) {
|
||||
List objects = Lists.newArrayList();
|
||||
datas.add(objects);
|
||||
objects.add(dto.getCompanyName());
|
||||
objects.add(dto.getPositionName());
|
||||
objects.add(dto.getRecruitTitle());
|
||||
objects.add(dto.getPositionNumber());
|
||||
objects.add(dto.getPositionAddress());
|
||||
objects.add(dto.getRecruitPositionType());
|
||||
objects.add(dto.getPositionTypeName());
|
||||
objects.add(dto.getPositionTag());
|
||||
objects.add(dto.getSalaryLow());
|
||||
objects.add(dto.getSalaryUp());
|
||||
objects.add(dto.getSalaryType());
|
||||
objects.add(dto.getPayDate());
|
||||
objects.add(dto.getSexRequire());
|
||||
objects.add(dto.getAgeLow());
|
||||
objects.add(dto.getAgeUp());
|
||||
objects.add(dto.getEducationRequire());
|
||||
objects.add(dto.getExperienceRequire());
|
||||
objects.add(dto.getCertificatesRequire());
|
||||
objects.add(dto.getOtherRequire());
|
||||
objects.add(dto.getJobContent());
|
||||
objects.add(dto.getFailReason());
|
||||
objects.add(dto.getRemark());
|
||||
|
||||
}
|
||||
infoDTO.setDatas(datas);
|
||||
|
||||
ExcelUtil.dynamicExportTemplate(infoDTO);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ImportDetailPositionListenerDTO> analy(Long mainId) {
|
||||
// 解析文件+明细
|
||||
ImportMainDTO importMainDTO = importMainService.find(ImportMainQueryDTO.builder().id(mainId).build());
|
||||
Assert.notNull(importMainDTO, "未查询到导入的数据");
|
||||
|
||||
FileRecord fileRecord;
|
||||
try {
|
||||
fileRecord = fileRecordService.find(FileRecord.builder().fileCode(importMainDTO.getFileCode()).build());
|
||||
} catch (Exception e) {
|
||||
log.info("导入文件异常,", e);
|
||||
fileRecord = null;
|
||||
}
|
||||
Assert.notNull(fileRecord, "上传文件不存在");
|
||||
try (InputStream is = fileRecordService.getFile(importMainDTO.getFileCode())) {
|
||||
ImportPositionExcelListener listener = new ImportPositionExcelListener();
|
||||
ExcelReaderBuilder reader = EasyExcel.read(is, ImportDetailPositionListenerDTO.class, listener);
|
||||
reader.sheet().doRead();
|
||||
List<ImportDetailPositionListenerDTO> dtos = listener.getDtos();
|
||||
Assert.isTrue(!dtos.isEmpty(), "导入文件无有效数据");
|
||||
return dtos;
|
||||
} catch (Exception e) {
|
||||
throw new BusinessException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void checkAndSave(Long mainId, List<ImportDetailPositionListenerDTO> detailCreateDtos) {
|
||||
//更改状态为校验中
|
||||
ImportMainUpdateDTO updateDto = ImportMainUpdateDTO.builder().id(mainId)
|
||||
.oldStatusSet(Sets.newHashSet(ImportStatusEnum.INIT.getStatus()))
|
||||
.newStatus(ImportStatusEnum.CHECKING.getStatus())
|
||||
.build();
|
||||
importMainService.modify(updateDto);
|
||||
|
||||
List<ImportDetailPositionDTO> importDetailPositionDTOS = new ArrayList<>();
|
||||
|
||||
//存储用工企业+岗位名称。用于校验 导入的数据中有没有重复的
|
||||
List<String> companyIdPositionNames = new ArrayList<>();
|
||||
|
||||
for (ImportDetailPositionListenerDTO importDetailPositionListenerDTO : detailCreateDtos) {
|
||||
ImportDetailPositionDTO importDetailPositionDTO = new ImportDetailPositionDTO();
|
||||
|
||||
this.checkAndFill(importDetailPositionDTO, importDetailPositionListenerDTO);
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getFailReason())) {
|
||||
if (companyIdPositionNames.contains(StringUtils.join(importDetailPositionListenerDTO.getCompanyName(), importDetailPositionListenerDTO.getPositionName()))) {
|
||||
importDetailPositionDTO.appendFailMsg("用工企业+岗位名称出现多次");
|
||||
}
|
||||
//存储用工企业+岗位名称
|
||||
companyIdPositionNames.add(StringUtils.join(importDetailPositionListenerDTO.getCompanyName(), importDetailPositionListenerDTO.getPositionName()));
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getFailReason())) {
|
||||
importDetailPositionDTO.setDetailStatus(ImportDetailStatusEnum.CHECK_FAIL.getStatus());
|
||||
} else {
|
||||
importDetailPositionDTO.setDetailStatus(ImportDetailStatusEnum.CHECK_SUCCESS.getStatus());
|
||||
}
|
||||
importDetailPositionDTO.setMainId(mainId);
|
||||
importDetailPositionDTO.setOrgId(UserContextHolder.getExistLoginOrgId());
|
||||
importDetailPositionDTOS.add(importDetailPositionDTO);
|
||||
}
|
||||
importDetailPositionService.batchCreate(importDetailPositionDTOS);
|
||||
super.finishCheck(mainId, importDetailPositionDTOS);
|
||||
}
|
||||
|
||||
private void checkAndFill(ImportDetailPositionDTO importDetailPositionDTO, ImportDetailPositionListenerDTO importDetailPositionListenerDTO) {
|
||||
BeanUtils.copyProperties(importDetailPositionListenerDTO, importDetailPositionDTO);
|
||||
importDetailPositionDTO.setDataJson(JsonUtils.toJsonString(importDetailPositionListenerDTO));
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getPositionName())) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位名称不能为空");
|
||||
} else if (importDetailPositionDTO.getPositionName().length() > 50) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位名称超过最大限制长度");
|
||||
importDetailPositionDTO.setPositionName(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionListenerDTO.getCompanyName())) {
|
||||
importDetailPositionDTO.appendFailMsg("用工企业不能为空");
|
||||
} else {
|
||||
HrCompanyDTO hrCompanyDTO = hrCompanyService.find(HrCompanyPageQueryDTO.builder().orgId(UserContextHolder.getExistLoginOrgId()).companyTypes(Arrays.asList(HrCompanyEnum.KH.getType(), HrCompanyEnum.SELF.getType())).companyName(importDetailPositionListenerDTO.getCompanyName()).build());
|
||||
if (Objects.isNull(hrCompanyDTO)) {
|
||||
importDetailPositionDTO.appendFailMsg("未查询到对应的用工企业");
|
||||
} else {
|
||||
importDetailPositionDTO.setCompanyId(hrCompanyDTO.getId());
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getPositionName())) {
|
||||
//当前机构下,相同的用工企业,不能存在相同的岗位名称
|
||||
List<Position> positions = positionMapper.selectList(new LambdaQueryWrapper<Position>()
|
||||
.eq(Position::getCompanyId, importDetailPositionDTO.getCompanyId())
|
||||
.eq(Position::getOrgId, UserContextHolder.getExistLoginOrgId())
|
||||
.eq(Position::getPositionName, importDetailPositionDTO.getPositionName())
|
||||
);
|
||||
if (CollectionUtils.isNotEmpty(positions)) {
|
||||
importDetailPositionDTO.appendFailMsg("该用工企业已存在相同的岗位名称");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getRecruitTitle())) {
|
||||
importDetailPositionDTO.appendFailMsg("招聘标题不能为空");
|
||||
} else if (importDetailPositionDTO.getRecruitTitle().length() > 255) {
|
||||
importDetailPositionDTO.appendFailMsg("招聘标题超过最大限制长度");
|
||||
importDetailPositionDTO.setRecruitTitle(null);
|
||||
}
|
||||
|
||||
if (!Objects.isNull(importDetailPositionDTO.getPositionNumber()) && importDetailPositionDTO.getPositionNumber() > 30000) {
|
||||
importDetailPositionDTO.appendFailMsg("招聘人数超过最大限制");
|
||||
importDetailPositionDTO.setPositionNumber(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getPositionAddress())) {
|
||||
importDetailPositionDTO.appendFailMsg("工作地址不能为空");
|
||||
} else if (importDetailPositionDTO.getPositionAddress().length() > 255) {
|
||||
importDetailPositionDTO.appendFailMsg("工作地址超过最大限制长度");
|
||||
importDetailPositionDTO.setPositionAddress(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getRecruitPositionType())) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位性质不能为空");
|
||||
} else {
|
||||
String recruitPositionTypeCode = DictUtils.getNameCodeMap("recruit_position_type").get(importDetailPositionDTO.getRecruitPositionType());
|
||||
if (StringUtils.isBlank(recruitPositionTypeCode)) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位性质有误,请重新操作");
|
||||
importDetailPositionDTO.setRecruitPositionType(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setRecruitPositionType(recruitPositionTypeCode);
|
||||
|
||||
Org org = orgMapper.selectOne(new LambdaQueryWrapper<Org>().eq(Org::getDeleted, false).eq(Org::getId, UserContextHolder.getExistLoginOrgId()));
|
||||
|
||||
//判断招聘岗位类型权限
|
||||
if (!org.getRecruitPositionType().equals(RecruitPositionTypeEnum.ODD_JOB_OR_GENERAL_WORKER.getType())) {
|
||||
if (!StringUtils.equals(org.getRecruitPositionType(), importDetailPositionDTO.getRecruitPositionType())) {
|
||||
if (StringUtils.equals(org.getRecruitPositionType(), RecruitPositionTypeEnum.ODD_JOB.getType())) {
|
||||
importDetailPositionDTO.appendFailMsg("当前企业仅支持维护零工性质岗位。");
|
||||
importDetailPositionDTO.setRecruitPositionType(null);
|
||||
}
|
||||
if (StringUtils.equals(org.getRecruitPositionType(), RecruitPositionTypeEnum.GENERAL_WORKER.getType())) {
|
||||
importDetailPositionDTO.appendFailMsg("当前企业仅支持维护普工性质岗位。");
|
||||
importDetailPositionDTO.setRecruitPositionType(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getPositionTypeName())) {
|
||||
if (importDetailPositionDTO.getPositionTypeName().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位类型超过最大限制长度");
|
||||
importDetailPositionDTO.setPositionTypeName(null);
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getPositionTag()) && importDetailPositionDTO.getPositionTag().length() > 512) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位标签超过最大限制长度");
|
||||
importDetailPositionDTO.setPositionTag(null);
|
||||
}
|
||||
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getPayDate()) && importDetailPositionDTO.getPayDate().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("发薪日超过最大限制长度");
|
||||
importDetailPositionDTO.setPayDate(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getSexRequire())) {
|
||||
importDetailPositionDTO.appendFailMsg("性别不能为空");
|
||||
} else {
|
||||
if (importDetailPositionDTO.getSexRequire().length() > 2) {
|
||||
importDetailPositionDTO.appendFailMsg("性别超过最大限制长度");
|
||||
importDetailPositionDTO.setSexRequire(null);
|
||||
}else {
|
||||
String gender = DictUtils.getNameCodeMap("gender_require").get(importDetailPositionDTO.getSexRequire());
|
||||
if (StringUtils.isBlank(gender)) {
|
||||
importDetailPositionDTO.appendFailMsg("性别有误,请重新操作");
|
||||
importDetailPositionDTO.setSexRequire(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setSexRequire(gender);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getEducationRequire())) {
|
||||
importDetailPositionDTO.appendFailMsg("学历不能为空");
|
||||
} else {
|
||||
if (importDetailPositionDTO.getEducationRequire().length() > 64) {
|
||||
importDetailPositionDTO.appendFailMsg("学历超过最大限制长度");
|
||||
importDetailPositionDTO.setEducationRequire(null);
|
||||
} else {
|
||||
String educationCode = DictUtils.getNameCodeMap("education").get(importDetailPositionDTO.getEducationRequire());
|
||||
if (StringUtils.isBlank(educationCode)) {
|
||||
importDetailPositionDTO.appendFailMsg("学历有误,请重新操作");
|
||||
importDetailPositionDTO.setEducationRequire(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setEducationRequire(educationCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getExperienceRequire())) {
|
||||
importDetailPositionDTO.appendFailMsg("经验不能为空");
|
||||
} else {
|
||||
if (importDetailPositionDTO.getExperienceRequire().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("经验超过最大限制长度");
|
||||
importDetailPositionDTO.setExperienceRequire(null);
|
||||
}else {
|
||||
String experienceCode = DictUtils.getNameCodeMap("RECRUIT_WORK_YEAR").get(importDetailPositionDTO.getExperienceRequire());
|
||||
if (StringUtils.isBlank(experienceCode)) {
|
||||
importDetailPositionDTO.appendFailMsg("经验有误,请重新操作");
|
||||
importDetailPositionDTO.setExperienceRequire(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setExperienceRequire(experienceCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getCertificatesRequire()) && importDetailPositionDTO.getCertificatesRequire().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("证件超过最大限制长度");
|
||||
importDetailPositionDTO.setCertificatesRequire(null);
|
||||
}
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getOtherRequire()) && importDetailPositionDTO.getOtherRequire().length() > 32) {
|
||||
importDetailPositionDTO.appendFailMsg("其它超过最大限制长度");
|
||||
importDetailPositionDTO.setOtherRequire(null);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getJobContent())) {
|
||||
importDetailPositionDTO.appendFailMsg("工作内容不能为空");
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(importDetailPositionDTO.getSalaryType())) {
|
||||
String salaryTypeCode = DictUtils.getNameCodeMap("salary_type").get(importDetailPositionDTO.getSalaryType());
|
||||
if (StringUtils.isBlank(salaryTypeCode)) {
|
||||
importDetailPositionDTO.appendFailMsg("薪资类型有误,请重新操作");
|
||||
importDetailPositionDTO.setSalaryType(null);
|
||||
} else {
|
||||
importDetailPositionDTO.setSalaryType(salaryTypeCode);
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(importDetailPositionDTO.getEndTime())) {
|
||||
importDetailPositionDTO.appendFailMsg("有效期截止时间不能为空");
|
||||
}else {
|
||||
try {
|
||||
if (DateUtil.endOfDay(DateUtil.parse(importDetailPositionDTO.getEndTime())).getTime() <= DateUtil.endOfDay(new Date()).getTime()) {
|
||||
importDetailPositionDTO.appendFailMsg("岗位有效期不能小于等于当前日期");
|
||||
}
|
||||
importDetailPositionDTO.setEndTime(DateUtil.format(DateUtil.endOfDay(DateUtil.parse(importDetailPositionDTO.getEndTime())),"yyyy-MM-dd HH:mm:ss"));
|
||||
}catch (Exception e) {
|
||||
importDetailPositionDTO.appendFailMsg("有效期截止时间格式不正确");
|
||||
importDetailPositionDTO.setEndTime(null);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public Long execute(ImportDetailPositionExecuteDTO executeDto) {
|
||||
Long mainId = executeDto.getMainId();
|
||||
Assert.notNull(mainId, "参数异常");
|
||||
|
||||
ImportMainDTO importMainDTO = importMainService.find(ImportMainQueryDTO.builder().id(mainId).build());
|
||||
Assert.notNull(importMainDTO, "未查询到导入数据");
|
||||
|
||||
ImportDetailPositionPageQueryDTO queryDTO = new ImportDetailPositionPageQueryDTO();
|
||||
queryDTO.disablePage();
|
||||
queryDTO.setMainId(mainId);
|
||||
queryDTO.setDetailStatus(ImportDetailStatusEnum.CHECK_SUCCESS.getStatus());
|
||||
List<ImportDetailPositionDTO> importDetailPositionDTOS = importDetailPositionService.page(queryDTO);
|
||||
if (CollectionUtils.isEmpty(importDetailPositionDTOS)) {
|
||||
throw new BusinessException("未查询到成功的明细数据");
|
||||
}
|
||||
|
||||
for (ImportDetailPositionDTO importDetailPositionDTO : importDetailPositionDTOS) {
|
||||
PositionOperatorDTO position = new PositionOperatorDTO();
|
||||
BeanUtils.copyProperties(importDetailPositionDTO, position);
|
||||
position.setEndTime(DateUtil.parse(importDetailPositionDTO.getEndTime()));
|
||||
//工作地址匹配当前用工企业下的工作地址,有就用,没有就创建一个, 地图控件要是返回多条记录,取第一个。
|
||||
//先直接创建。后续接了地图在改
|
||||
|
||||
List<PositionAddress> positionAddressList = positionAddressMapper.selectList(new LambdaQueryWrapper<PositionAddress>()
|
||||
.eq(PositionAddress::getDeleted, false)
|
||||
.eq(PositionAddress::getCompanyId, importDetailPositionDTO.getCompanyId())
|
||||
.eq(PositionAddress::getDetailAddress, importDetailPositionDTO.getPositionAddress())
|
||||
);
|
||||
if (CollectionUtils.isEmpty(positionAddressList)) {
|
||||
PositionAddress positionAddress = new PositionAddress();
|
||||
positionAddress.setCompanyId(importDetailPositionDTO.getCompanyId());
|
||||
positionAddress.setDetailAddress(importDetailPositionDTO.getPositionAddress());
|
||||
positionAddressMapper.saveEntity(positionAddress);
|
||||
position.setAddressId(positionAddress.getId());
|
||||
} else {
|
||||
position.setAddressId(positionAddressList.get(0).getId());
|
||||
}
|
||||
|
||||
|
||||
//岗位类型 名称匹配,存code, 匹配不到就不存此字段
|
||||
List<PositionType> positionTypeList = positionTypeMapper.selectList(new LambdaQueryWrapper<PositionType>().eq(PositionType::getDeleted, false).eq(PositionType::getName, importDetailPositionDTO.getPositionTypeName()));
|
||||
if (CollectionUtils.isNotEmpty(positionTypeList)) {
|
||||
position.setPositionType(positionTypeList.get(0).getCode());
|
||||
}
|
||||
|
||||
//工作性质:短工、全职、实习
|
||||
//岗位性质:零工、普通岗
|
||||
//招聘岗位类型:零工、普通岗、零工+普通岗
|
||||
if (StringUtils.isNotBlank(position.getRecruitPositionType())) {
|
||||
String jobCategory = null;
|
||||
switch (position.getRecruitPositionType()) {
|
||||
case "1":
|
||||
jobCategory = "2";
|
||||
break;
|
||||
case "2":
|
||||
jobCategory = "1";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
position.setJobCategory(jobCategory);
|
||||
}
|
||||
PositionNewOperatorDTO positionNewOperatorDTO = new PositionNewOperatorDTO();
|
||||
BeanUtils.copyProperties(position, positionNewOperatorDTO);
|
||||
PositionNewDTO positionNewDTO = positionAuditService.positionCreate(positionNewOperatorDTO);
|
||||
ImportDetailPositionOperatorDTO updateImportDetailPositionDTO = new ImportDetailPositionOperatorDTO();
|
||||
BeanUtils.copyProperties(importDetailPositionDTO, updateImportDetailPositionDTO);
|
||||
updateImportDetailPositionDTO.setEndTime(DateUtil.parse(importDetailPositionDTO.getEndTime()));
|
||||
updateImportDetailPositionDTO.setExtraDetailId(positionNewDTO.getId());
|
||||
importDetailPositionService.modify(updateImportDetailPositionDTO);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import com.newyetai.component.commonimport.constant.ImportDetailStatusEnum;
|
||||
import com.newyetai.recruit.position.convert.ImportDetailPositionConvert;
|
||||
import com.newyetai.recruit.position.entity.ImportDetailPosition;
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
import com.newyetai.recruit.position.dao.ImportDetailPositionMapper;
|
||||
import com.newyetai.recruit.position.service.ImportDetailPositionService;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 岗位导入
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-12
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ImportDetailPositionServiceImpl implements ImportDetailPositionService {
|
||||
|
||||
@Resource
|
||||
private ImportDetailPositionMapper importDetailPositionMapper;
|
||||
|
||||
@Override
|
||||
public ImportDetailPositionDTO create(ImportDetailPositionOperatorDTO operatorDto) {
|
||||
ImportDetailPosition importDetailPosition = ImportDetailPositionConvert.INSTANCE.convert(operatorDto);
|
||||
importDetailPositionMapper.saveEntity(importDetailPosition);
|
||||
return ImportDetailPositionConvert.INSTANCE.convert(importDetailPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImportDetailPositionDTO modify(ImportDetailPositionOperatorDTO operatorDto) {
|
||||
ImportDetailPositionDTO importDetailPositionDto = this.findById(operatorDto.getId());
|
||||
if (Objects.isNull(importDetailPositionDto)) {
|
||||
return null;
|
||||
}
|
||||
ImportDetailPosition importDetailPosition = ImportDetailPositionConvert.INSTANCE.convert(operatorDto);
|
||||
importDetailPositionMapper.updateEntity(importDetailPosition);
|
||||
return this.findById(operatorDto.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImportDetailPositionDTO delete(Long id) {
|
||||
ImportDetailPositionDTO importDetailPositionDto = this.findById(id);
|
||||
if (Objects.isNull(importDetailPositionDto)) {
|
||||
return null;
|
||||
}
|
||||
ImportDetailPosition importDetailPosition = ImportDetailPosition.builder().build();
|
||||
importDetailPosition.setId(id);
|
||||
importDetailPositionMapper.deleteEntity(importDetailPosition, UserContextHolder.getLoginUserId());
|
||||
return importDetailPositionDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImportDetailPositionDTO findById(Long id) {
|
||||
ImportDetailPosition importDetailPosition = importDetailPositionMapper.getById(id);
|
||||
if (Objects.isNull(importDetailPosition)) {
|
||||
return null;
|
||||
}
|
||||
return ImportDetailPositionConvert.INSTANCE.convert(importDetailPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ImportDetailPositionDTO> list(ImportDetailPositionQueryDTO queryDTO) {
|
||||
return importDetailPositionMapper.list(queryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ImportDetailPositionDTO> page(ImportDetailPositionPageQueryDTO queryDTO) {
|
||||
return importDetailPositionMapper.page(queryDTO);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void batchCreate(List<ImportDetailPositionDTO> importDetailPositionDTOS) {
|
||||
if (CollectionUtils.isEmpty(importDetailPositionDTOS)) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<ImportDetailPosition> importDetailPositions= importDetailPositionDTOS.stream().map(dto -> {
|
||||
ImportDetailPosition importDetailPosition = new ImportDetailPosition();
|
||||
BeanUtils.copyProperties(dto, importDetailPosition);
|
||||
if (ImportDetailStatusEnum.CHECK_SUCCESS.getStatus().intValue() == dto.getDetailStatus().intValue()) {
|
||||
importDetailPosition.setEndTime(DateUtil.parse(dto.getEndTime()));
|
||||
}
|
||||
return importDetailPosition;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
importDetailPositionMapper.saveEntites(importDetailPositions);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.event.AnalysisEventListener;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.recruit.position.dto.ImportDetailPositionListenerDTO;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @description: 岗位导入
|
||||
* @author: guixinman
|
||||
* @create: 2024-04-09 16:49
|
||||
**/
|
||||
public class ImportPositionExcelListener extends AnalysisEventListener<ImportDetailPositionListenerDTO> {
|
||||
|
||||
private List<ImportDetailPositionListenerDTO> dtos;
|
||||
private Map<Integer, String> headMap = new HashMap<>();
|
||||
|
||||
public ImportPositionExcelListener() {
|
||||
this.dtos = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(ImportDetailPositionListenerDTO data, AnalysisContext context) {
|
||||
dtos.add(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invokeHeadMap(Map headMap, AnalysisContext context) {
|
||||
this.headMap = headMap;
|
||||
if (headMap.isEmpty()) {
|
||||
throw new BusinessException("导入模板表头有误");
|
||||
}
|
||||
//姓名、身份证号、发放金额、备注
|
||||
if (headMap.size() != 21) {
|
||||
throw new BusinessException("导入模板表头有误");
|
||||
}
|
||||
Assert.isTrue(headMap.get(0).toString().contains("用工企业"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(1).toString().contains("岗位名称"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(2).toString().contains("招聘标题"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(3).toString().contains("招聘人数"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(4).toString().contains("工作地址"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(5).toString().contains("岗位性质"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(6).toString().contains("岗位类型"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(7).toString().contains("岗位标签"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(8).toString().contains("薪资下限"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(9).toString().contains("薪资上限"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(10).toString().contains("薪资类型"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(11).toString().contains("发薪日"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(12).toString().contains("性别"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(13).toString().contains("年龄(下限)"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(14).toString().contains("年龄(上限)"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(15).toString().contains("学历"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(16).toString().contains("经验"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(17).toString().contains("证件"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(18).toString().contains("其他"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(19).toString().contains("工作内容"), "导入模板表头有误");
|
||||
Assert.isTrue(headMap.get(20).toString().contains("有效期截止时间"), "导入模板表头有误");
|
||||
|
||||
}
|
||||
|
||||
public List<ImportDetailPositionListenerDTO> getDtos() {
|
||||
return dtos;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.SensitiveWordUtils;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.recruit.position.dao.PositionAddressMapper;
|
||||
import com.newyetai.recruit.position.dto.PositionAddressDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAddressOperatorDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionAddressQueryDTO;
|
||||
import com.newyetai.recruit.position.entity.PositionAddress;
|
||||
import com.newyetai.recruit.position.service.PositionAddressService;
|
||||
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PositionAddressServiceImpl implements PositionAddressService {
|
||||
|
||||
@Resource
|
||||
private PositionAddressMapper positionAddressMapper;
|
||||
|
||||
@Override
|
||||
public Long createOrUpdate(PositionAddressOperatorDTO operatorDTO) {
|
||||
if (!SensitiveWordUtils.check(operatorDTO.getDetailAddress())) {
|
||||
throw new BusinessException("非法详细地址");
|
||||
}
|
||||
|
||||
Long id = operatorDTO.getId();
|
||||
if (Objects.isNull(id)) {
|
||||
PositionAddress positionAddress = new PositionAddress();
|
||||
BeanUtils.copyProperties(operatorDTO, positionAddress);
|
||||
|
||||
positionAddressMapper.saveEntity(positionAddress);
|
||||
return positionAddress.getId();
|
||||
} else {
|
||||
PositionAddress positionAddress = positionAddressMapper.getById(operatorDTO.getId());
|
||||
Assert.notNull(positionAddress, "地址信息不存在");
|
||||
PositionAddress positionAddressUpdate = new PositionAddress();
|
||||
BeanUtils.copyProperties(operatorDTO, positionAddressUpdate);
|
||||
positionAddressUpdate.setId(positionAddress.getId());
|
||||
positionAddressUpdate.setUpdateBy(UserContextHolder.getExistLoginUserId());
|
||||
positionAddressUpdate.setUpdateTime(new Date());
|
||||
positionAddressMapper.updateEntitySelective(positionAddressUpdate);
|
||||
return positionAddress.getId();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionAddressDTO> list(PositionAddressQueryDTO queryDTO) {
|
||||
LambdaQueryWrapper<PositionAddress> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(PositionAddress::getDeleted, false);
|
||||
|
||||
|
||||
if (Objects.nonNull(queryDTO.getCompanyId())) {
|
||||
lambdaQueryWrapper.eq(PositionAddress::getCompanyId, queryDTO.getCompanyId());
|
||||
}
|
||||
if (CollUtil.isNotEmpty(queryDTO.getIds())) {
|
||||
lambdaQueryWrapper.in(PositionAddress::getId, queryDTO.getIds());
|
||||
}
|
||||
|
||||
List<PositionAddress> positionAddresses = positionAddressMapper.selectList(lambdaQueryWrapper);
|
||||
if (CollUtil.isNotEmpty(positionAddresses)) {
|
||||
return positionAddresses.stream().map(positionAddress -> {
|
||||
PositionAddressDTO positionAddressDTO = new PositionAddressDTO();
|
||||
BeanUtils.copyProperties(positionAddress, positionAddressDTO);
|
||||
return positionAddressDTO;
|
||||
}).collect(
|
||||
Collectors.toList());
|
||||
}
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(Long id) {
|
||||
PositionAddress positionAddress = positionAddressMapper.getById(id);
|
||||
if (Objects.nonNull(positionAddress)) {
|
||||
PositionAddress deletePositionAddress = new PositionAddress();
|
||||
deletePositionAddress.setId(id);
|
||||
positionAddressMapper.deleteEntity(deletePositionAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,485 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.common.dto.ExportHeadDetailInfoDTO;
|
||||
import com.newyetai.common.dto.ExportHeadInfoDTO;
|
||||
import com.newyetai.common.easyexcel.ExcelUtil;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.common.util.SensitiveWordUtils;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
import com.newyetai.config.entity.Config;
|
||||
import com.newyetai.config.service.ConfigService;
|
||||
import com.newyetai.frame.redis.aop.annotation.AutoUnLock;
|
||||
import com.newyetai.frame.redis.dto.LockDTO;
|
||||
import com.newyetai.frame.redis.redisson.RedissonUtils;
|
||||
import com.newyetai.recruit.company.dto.HrCompanyPageQueryDTO;
|
||||
import com.newyetai.recruit.company.enums.HrCompanyEnum;
|
||||
import com.newyetai.recruit.company.service.IHrCompanyService;
|
||||
import com.newyetai.recruit.position.convert.PositionAuditConvert;
|
||||
import com.newyetai.recruit.position.dao.PositionMapper;
|
||||
import com.newyetai.recruit.position.entity.Position;
|
||||
import com.newyetai.recruit.position.entity.PositionAudit;
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
import com.newyetai.recruit.position.dao.PositionAuditMapper;
|
||||
import com.newyetai.recruit.position.enums.PositionAuditStatusEnum;
|
||||
import com.newyetai.recruit.position.enums.PositionStatusEnum;
|
||||
import com.newyetai.recruit.position.service.PositionAuditService;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.aop.framework.AopContext;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.recruit.position.service.PositionFileService;
|
||||
import com.newyetai.recruit.position.service.PositionService;
|
||||
import com.newyetai.usercenter.org.service.OrgService;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 岗位审核表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-07-05
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PositionAuditServiceImpl implements PositionAuditService {
|
||||
|
||||
@Resource
|
||||
private PositionAuditMapper positionAuditMapper;
|
||||
|
||||
@Autowired
|
||||
private PositionService positionService;
|
||||
|
||||
@Autowired
|
||||
private ConfigService configService;
|
||||
|
||||
@Resource
|
||||
private PositionMapper positionMapper;
|
||||
|
||||
@Autowired
|
||||
private PositionFileService positionFileService;
|
||||
|
||||
@Autowired
|
||||
private IHrCompanyService hrCompanyService;
|
||||
|
||||
@Autowired
|
||||
private OrgService orgService;
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public PositionNewDTO positionCreate(PositionNewOperatorDTO operatorDto) {
|
||||
//校验 敏感词 and 其他
|
||||
this.check(operatorDto);
|
||||
|
||||
PositionOperatorDTO positionOperatorDTO = new PositionOperatorDTO();
|
||||
BeanUtils.copyProperties(operatorDto, positionOperatorDTO);
|
||||
positionOperatorDTO.setStatus(PositionStatusEnum.CLOSE.getStatus());
|
||||
PositionDTO positionDTO = positionService.create(positionOperatorDTO);
|
||||
|
||||
PositionAudit positionAudit = new PositionAudit();
|
||||
BeanUtils.copyProperties(positionDTO, positionAudit);
|
||||
positionAudit.setId(null);
|
||||
positionAudit.setPositionId(positionDTO.getId());
|
||||
positionAudit.setVersion(1);
|
||||
|
||||
Config config = configService.getConfig("position_audit_enable", CommonConstants.PLATFORM_ORG_ID, true);
|
||||
if (Objects.nonNull(config)) {
|
||||
positionAudit.setAuditStatus(PositionAuditStatusEnum.INIT.getStatus());
|
||||
} else {
|
||||
BeanUtils.copyProperties(positionDTO, positionOperatorDTO);
|
||||
|
||||
positionAudit.setAuditStatus(PositionAuditStatusEnum.SUCCESS.getStatus());
|
||||
//需要修改岗位表 审核通过会更新岗位表。
|
||||
positionOperatorDTO.setStatus(PositionStatusEnum.OPEN.getStatus());
|
||||
positionDTO.setStatus(PositionStatusEnum.OPEN.getStatus());
|
||||
positionOperatorDTO.setId(positionDTO.getId());
|
||||
positionService.modify(positionOperatorDTO);
|
||||
}
|
||||
|
||||
positionAuditMapper.saveEntity(positionAudit);
|
||||
return PositionAuditConvert.INSTANCE.convert(positionDTO);
|
||||
}
|
||||
|
||||
private void check(PositionNewOperatorDTO operatorDto) {
|
||||
if (Objects.nonNull(operatorDto.getEndTime())) {
|
||||
Assert.isTrue(! (DateUtil.endOfDay(operatorDto.getEndTime()).getTime() <= DateUtil.endOfDay(new Date()).getTime()),"岗位有效期不能小于等于当前日期");
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (!SensitiveWordUtils.check(operatorDto.getPositionName())) {
|
||||
sb.append("非法岗位名称");
|
||||
}
|
||||
if (!SensitiveWordUtils.check(operatorDto.getRecruitTitle())) {
|
||||
sb.append("非法招聘标题");
|
||||
}
|
||||
if (!SensitiveWordUtils.check(operatorDto.getPositionTag())) {
|
||||
sb.append("非法岗位标签");
|
||||
}
|
||||
if (!SensitiveWordUtils.check(operatorDto.getPayDate())) {
|
||||
sb.append("非法发薪日");
|
||||
}
|
||||
if (!SensitiveWordUtils.check(operatorDto.getOtherRequire())) {
|
||||
sb.append("非法其他");
|
||||
}
|
||||
if (!SensitiveWordUtils.check(operatorDto.getJobContent())) {
|
||||
sb.append("非法工作内容");
|
||||
}
|
||||
if (StringUtils.isNotBlank(sb.toString())) {
|
||||
throw new BusinessException(sb.toString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: 具体看禅道需求
|
||||
* @return:
|
||||
* @author: guixinman
|
||||
* @param:
|
||||
*/
|
||||
@AutoUnLock
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void positionModify(PositionNewOperatorDTO operatorDto) {
|
||||
Assert.notNull(operatorDto.getId(), "岗位id不能为空");
|
||||
Assert.notNull(operatorDto.getPositionAuditId(), "审核id不能为空");
|
||||
Assert.notNull(operatorDto.getVersion(), "版本号不能为空");
|
||||
//校验敏感词
|
||||
this.check(operatorDto);
|
||||
|
||||
//对审核表id加锁
|
||||
Assert.isTrue(
|
||||
RedissonUtils.tryLockAutomatically(
|
||||
LockDTO.builder()
|
||||
.tryLockWaitTime(0L)
|
||||
.lockTimeout(60 * 5L)
|
||||
.arg(operatorDto.getPositionAuditId() + "")
|
||||
.methodName("position:audit:modify")
|
||||
.build()
|
||||
),
|
||||
"岗位编辑正在处理, 请稍后再试");
|
||||
|
||||
PositionDTO positionDto = positionService.findById(operatorDto.getId());
|
||||
if (Objects.isNull(positionDto)) {
|
||||
throw new BusinessException("未查询到对应岗位数据");
|
||||
}
|
||||
//因为admin能修改。所以orgId取岗位表的orgId
|
||||
operatorDto.setOrgId(positionDto.getOrgId());
|
||||
|
||||
Assert.notNull(hrCompanyService.find(HrCompanyPageQueryDTO.builder().id(operatorDto.getCompanyId()).companyTypes(Arrays.asList(HrCompanyEnum.KH.getType(), HrCompanyEnum.SELF.getType())).orgId(positionDto.getOrgId()).build()), "未查询到用工企业");
|
||||
List<Position> positions = positionMapper.selectList(new LambdaQueryWrapper<Position>()
|
||||
.eq(Position::getCompanyId, operatorDto.getCompanyId())
|
||||
.eq(Position::getOrgId, positionDto.getOrgId())
|
||||
.eq(Position::getPositionName, operatorDto.getPositionName())
|
||||
.notIn(Position::getId, operatorDto.getId())
|
||||
);
|
||||
if (CollectionUtils.isNotEmpty(positions)) {
|
||||
throw new BusinessException("该用工企业已存在相同的岗位名称,添加失败");
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<PositionAudit> queryWrapper = new LambdaQueryWrapper<PositionAudit>().eq(PositionAudit::getDeleted, 0)
|
||||
.eq(PositionAudit::getId, operatorDto.getPositionAuditId());
|
||||
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
|
||||
queryWrapper.eq(PositionAudit::getOrgId, UserContextHolder.getExistLoginOrgId());
|
||||
}
|
||||
PositionAudit positionAuditOld = positionAuditMapper.selectOne(queryWrapper);
|
||||
Assert.notNull(positionAuditOld, "网络异常,请刷新页面重试");
|
||||
|
||||
Long positionAuditId = positionAuditMapper.getIdByPositionId(operatorDto.getId());
|
||||
Assert.notNull(positionAuditId, "网络异常,请刷新页面重试");
|
||||
Assert.isTrue(positionAuditId == operatorDto.getPositionAuditId().longValue(), "该页面信息已被变更,请刷新页面重试!");
|
||||
|
||||
/*
|
||||
* 修改岗位先进审核表。审核通过后反向更新岗位表。
|
||||
* 1.如果审核状态是 成功or失败。就新增一条 审核表的记录(看配置对应的状态)
|
||||
2.如果审核状态是 待审核 ,就修改审核表的记录,如果配置是不审核就修改审核状态是 成功
|
||||
*/
|
||||
PositionAudit positionAudit = new PositionAudit();
|
||||
BeanUtils.copyProperties(operatorDto, positionAudit);
|
||||
positionAudit.setId(operatorDto.getPositionAuditId());
|
||||
positionAudit.setPositionId(operatorDto.getId());
|
||||
Config config = configService.getConfig("position_audit_enable", CommonConstants.PLATFORM_ORG_ID, true);
|
||||
if (Objects.isNull(config)) {
|
||||
positionAudit.setAuditStatus(PositionAuditStatusEnum.SUCCESS.getStatus());
|
||||
//需要修改岗位表 审核通过会更新岗位表。主要是要 更新时间,H5用的
|
||||
PositionOperatorDTO positionOperatorDTO = new PositionOperatorDTO();
|
||||
BeanUtils.copyProperties(operatorDto, positionOperatorDTO);
|
||||
positionOperatorDTO.setStatus(PositionStatusEnum.OPEN.getStatus());
|
||||
positionService.modify(positionOperatorDTO);
|
||||
|
||||
//先删除岗位相册
|
||||
positionFileService.deleteByPositionId(operatorDto.getId());
|
||||
if (StringUtils.isNotBlank(operatorDto.getFileJson())) {
|
||||
List<PositionFileDTO> positionFileDTOS = JsonUtils.toList(operatorDto.getFileJson(), PositionFileDTO.class);
|
||||
for (PositionFileDTO positionFileDTO : positionFileDTOS) {
|
||||
positionFileDTO.setId(null);
|
||||
positionFileDTO.setPositionId(operatorDto.getId());
|
||||
positionFileService.create(positionFileDTO);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
positionAudit.setAuditStatus(PositionAuditStatusEnum.INIT.getStatus());
|
||||
}
|
||||
|
||||
if (PositionAuditStatusEnum.INIT.getStatus().equals(positionAuditOld.getAuditStatus())) {
|
||||
positionAudit.setUpdateBy(UserContextHolder.getExistLoginUserId());
|
||||
int row = positionAuditMapper.modifyById(positionAudit);
|
||||
if (row == 0) {
|
||||
PositionAudit positionAudit1 = positionAuditMapper.selectOne(queryWrapper);
|
||||
if (!PositionAuditStatusEnum.INIT.getStatus().equals(positionAudit1.getAuditStatus())) {
|
||||
positionAudit.setVersion(1);
|
||||
positionAuditMapper.saveEntity(positionAudit);
|
||||
} else {
|
||||
if (operatorDto.getVersion().intValue() != positionAudit1.getVersion().intValue()) {
|
||||
throw new BusinessException("该页面信息已被变更,请刷新页面重试!");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
positionAudit.setVersion(1);
|
||||
positionAuditMapper.saveEntity(positionAudit);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public PositionNewDTO positionFindById(Long id) {
|
||||
Assert.notNull(id, "参数缺失");
|
||||
|
||||
PositionNewPageQueryDTO queryDTO = new PositionNewPageQueryDTO();
|
||||
queryDTO.disablePage();
|
||||
queryDTO.setId(id);
|
||||
List<PositionNewDTO> list = this.positionPage(queryDTO);
|
||||
return CollectionUtils.isNotEmpty(list) ? list.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionAuditDTO> list(PositionAuditQueryDTO queryDTO) {
|
||||
return positionAuditMapper.list(queryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionAuditDTO> page(PositionAuditPageQueryDTO queryDTO) {
|
||||
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
|
||||
if (Objects.isNull(queryDTO.getOrgId())) {
|
||||
queryDTO.setOrgIds(orgService.childrenOrgIdList(UserContextHolder.getLoginOrgId()));
|
||||
}
|
||||
}
|
||||
return positionAuditMapper.page(queryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionNewDTO> positionPage(PositionNewPageQueryDTO queryDTO) {
|
||||
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
|
||||
queryDTO.setOrgId(UserContextHolder.getExistLoginOrgId());
|
||||
}
|
||||
List<PositionNewDTO> list = positionAuditMapper.positionPage(queryDTO);
|
||||
for (PositionNewDTO positionNewDTO : list) {
|
||||
positionNewDTO.setRecruitPositionTypeName(DictUtils.getCodeNameMap("recruit_position_type").get(positionNewDTO.getRecruitPositionType()));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void export(PositionNewPageQueryDTO queryDTO) {
|
||||
boolean flag = true;
|
||||
Integer pageNo = 1;
|
||||
Integer pageSize = 100;
|
||||
|
||||
List<PositionNewDTO> listAll = new ArrayList<>();
|
||||
|
||||
while (flag) {
|
||||
queryDTO.setPageNo(pageNo);
|
||||
queryDTO.setPageSize(pageSize);
|
||||
List<PositionNewDTO> list = this.positionPage(queryDTO);
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(list)) {
|
||||
flag = false;
|
||||
continue;
|
||||
}
|
||||
if (list.size() < pageSize) {
|
||||
flag = false;
|
||||
}
|
||||
pageNo = pageNo + 1;
|
||||
listAll.addAll(list);
|
||||
}
|
||||
List<PositionExportDTO> collect = listAll.stream().map(dto -> {
|
||||
PositionExportDTO exportDTO = new PositionExportDTO();
|
||||
BeanUtils.copyProperties(dto, exportDTO);
|
||||
exportDTO.setCreateTime(DateUtil.format(dto.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||
exportDTO.setEndTime(DateUtil.format(dto.getEndTime(), "yyyy-MM-dd"));
|
||||
exportDTO.setStatus(DictUtils.getCodeNameMap("position_status").get(String.valueOf(dto.getStatus())));
|
||||
exportDTO.setSalary(dto.getSalaryStr());
|
||||
return exportDTO;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(collect)) {
|
||||
return;
|
||||
}
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
String fileName = "岗位明细导出" + "(" + formatter.format(LocalDateTime.now()) + ")";
|
||||
|
||||
ExportHeadInfoDTO infoDTO = ExportHeadInfoDTO.builder()
|
||||
.fileName(fileName)
|
||||
.build();
|
||||
List<ExportHeadDetailInfoDTO> heads = infoDTO.getHeads();
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘岗位类型").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位名称").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("用工企业").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位状态").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘人数").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("综合薪资").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作地址").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("创建时间").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("有效期截止时间").build());
|
||||
|
||||
List<List> datas = Lists.newArrayList();
|
||||
for (PositionExportDTO dto : collect) {
|
||||
List objects = Lists.newArrayList();
|
||||
datas.add(objects);
|
||||
objects.add(dto.getRecruitPositionTypeName());
|
||||
objects.add(dto.getPositionName());
|
||||
objects.add(dto.getCompanyName());
|
||||
objects.add(dto.getStatus());
|
||||
objects.add(dto.getPositionNumber());
|
||||
objects.add(dto.getSalary());
|
||||
objects.add(dto.getPositionAddress());
|
||||
objects.add(dto.getCreateTime());
|
||||
objects.add(dto.getEndTime());
|
||||
}
|
||||
infoDTO.setDatas(datas);
|
||||
|
||||
ExcelUtil.dynamicExportTemplate(infoDTO);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void audit(PositionAuditReqDTO reqDTO) {
|
||||
LambdaQueryWrapper<PositionAudit> queryWrapper = new LambdaQueryWrapper<PositionAudit>()
|
||||
.eq(PositionAudit::getDeleted, false)
|
||||
.eq(PositionAudit::getId, reqDTO.getId())
|
||||
.eq(PositionAudit::getVersion, reqDTO.getVersion());
|
||||
|
||||
PositionAudit positionAudit = positionAuditMapper.selectOne(queryWrapper);
|
||||
if (Objects.isNull(positionAudit)) {
|
||||
throw new BusinessException("岗位信息已更新,请刷新页面重新审核。");
|
||||
}
|
||||
reqDTO.setUpdateBy(UserContextHolder.getExistLoginUserId());
|
||||
int row = positionAuditMapper.audit(reqDTO);
|
||||
if (row == 0) {
|
||||
throw new BusinessException("岗位信息已更新,请刷新页面重新审核。");
|
||||
}
|
||||
|
||||
if (PositionAuditStatusEnum.SUCCESS.getStatus().equals(reqDTO.getAuditStatus())) {
|
||||
//需要修改岗位表 审核通过会更新岗位表。H5用的
|
||||
PositionOperatorDTO positionOperatorDTO = new PositionOperatorDTO();
|
||||
BeanUtils.copyProperties(positionAudit, positionOperatorDTO);
|
||||
positionOperatorDTO.setStatus(PositionStatusEnum.OPEN.getStatus());
|
||||
positionOperatorDTO.setId(positionAudit.getPositionId());
|
||||
positionService.modify(positionOperatorDTO);
|
||||
|
||||
//先删除岗位相册
|
||||
positionFileService.deleteByPositionId(positionAudit.getPositionId());
|
||||
if (StringUtils.isNotBlank(positionAudit.getFileJson())) {
|
||||
List<PositionFileDTO> positionFileDTOS = JSONUtil.toList(positionAudit.getFileJson(), PositionFileDTO.class);
|
||||
for (PositionFileDTO positionFileDTO : positionFileDTOS) {
|
||||
positionFileDTO.setId(null);
|
||||
positionFileDTO.setPositionId(positionAudit.getPositionId());
|
||||
positionFileService.create(positionFileDTO);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionAuditDTO findById(Long id) {
|
||||
Assert.notNull(id, "参数缺失");
|
||||
PositionAuditPageQueryDTO queryDTO = new PositionAuditPageQueryDTO();
|
||||
queryDTO.disablePage();
|
||||
queryDTO.setId(id);
|
||||
List<PositionAuditDTO> list = this.page(queryDTO);
|
||||
return CollectionUtils.isNotEmpty(list) ? list.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void positionModifyStatus(Set<Long> ids, String status) {
|
||||
LambdaQueryWrapper<Position> queryWrapper = new LambdaQueryWrapper<Position>()
|
||||
.in(Position::getId, ids)
|
||||
.eq(Position::getDeleted, false);
|
||||
|
||||
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
|
||||
queryWrapper.eq(Position::getOrgId, UserContextHolder.getExistLoginOrgId());
|
||||
}
|
||||
|
||||
Integer count = positionMapper.selectCount(queryWrapper);
|
||||
Assert.isTrue(count == ids.size(), "网络异常,请刷新后再试");
|
||||
|
||||
List<Position> positions = new ArrayList<>();
|
||||
for (Long id : ids) {
|
||||
if (PositionStatusEnum.OPEN.getStatus().equals(status)) {
|
||||
Integer positionAuditCount = positionAuditMapper.selectCount(new LambdaQueryWrapper<PositionAudit>()
|
||||
.eq(PositionAudit::getDeleted, false)
|
||||
.eq(PositionAudit::getAuditStatus, PositionAuditStatusEnum.SUCCESS.getStatus())
|
||||
.eq(PositionAudit::getPositionId, id)
|
||||
);
|
||||
if (positionAuditCount != null && positionAuditCount >= 1) {
|
||||
Position positionOld = positionMapper.selectById(id);
|
||||
if (Objects.nonNull(positionOld) && Objects.nonNull(positionOld.getEndTime())) {
|
||||
Assert.isTrue(! (DateUtil.endOfDay(positionOld.getEndTime()).getTime() <= DateUtil.endOfDay(new Date()).getTime()),"岗位有效期不能小于等于当前日期");
|
||||
}
|
||||
Position position = new Position();
|
||||
position.setId(id);
|
||||
position.setStatus(status);
|
||||
positions.add(position);
|
||||
}
|
||||
} else {
|
||||
Position position = new Position();
|
||||
position.setId(id);
|
||||
position.setStatus(status);
|
||||
positions.add(position);
|
||||
}
|
||||
}
|
||||
positionMapper.updateEntitysSelective(positions, UserContextHolder.getExistLoginUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long positionCopy(Long id) {
|
||||
PositionNewDTO oldPositionDTO = this.positionFindById(id);
|
||||
if (Objects.isNull(oldPositionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
PositionNewOperatorDTO positionNewOperatorDTO = new PositionNewOperatorDTO();
|
||||
BeanUtils.copyProperties(oldPositionDTO, positionNewOperatorDTO);
|
||||
positionNewOperatorDTO.setPositionName(String.format("%s复制%s", RandomUtil.randomString(3), StringUtils.substring(oldPositionDTO.getPositionName(), 0, 45)));
|
||||
PositionNewDTO positionNewDTO = ((PositionAuditServiceImpl) AopContext.currentProxy()).positionCreate(positionNewOperatorDTO);
|
||||
|
||||
List<PositionFileDTO> oldPositionFileDTOS = positionFileService.filePage(PositionFilePageQueryDTO.builder().positionId(id).build());
|
||||
for (PositionFileDTO oldPositionFileDTO : oldPositionFileDTOS) {
|
||||
PositionFileDTO positionFileDTO = new PositionFileDTO();
|
||||
BeanUtils.copyProperties(oldPositionFileDTO, positionFileDTO);
|
||||
positionFileDTO.setPositionId(positionNewDTO.getId());
|
||||
positionFileService.create(positionFileDTO);
|
||||
}
|
||||
return positionNewDTO.getId();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.recruit.position.constant.PositionConstants;
|
||||
import com.newyetai.recruit.position.dao.PositionFileMapper;
|
||||
import com.newyetai.recruit.position.dto.PositionFileDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionFilePageQueryDTO;
|
||||
import com.newyetai.recruit.position.entity.PositionFile;
|
||||
import com.newyetai.recruit.position.service.PositionFileService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class PositionFileServiceImpl extends ServiceImpl<PositionFileMapper, PositionFile> implements PositionFileService {
|
||||
|
||||
|
||||
@Override
|
||||
public List<PositionFileDTO> filePage(PositionFilePageQueryDTO queryDTO) {
|
||||
return getBaseMapper().filePage(queryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionFile create(PositionFileDTO queryDTO) {
|
||||
List<PositionFileDTO> fileList = filePage(PositionFilePageQueryDTO.builder()
|
||||
.positionId(queryDTO.getPositionId())
|
||||
.fileType(queryDTO.getFileType()).build());
|
||||
|
||||
int maxFileOrder = 0;
|
||||
if (fileList.size() > 0) {
|
||||
maxFileOrder = fileList.stream().mapToInt(PositionFileDTO::getSort).max().getAsInt();
|
||||
}
|
||||
|
||||
PositionFile file = JsonUtils.toObject(JsonUtils.toJsonString(queryDTO), PositionFile.class);
|
||||
file.setSort(maxFileOrder);
|
||||
Assert.isTrue(save(file), queryDTO.getFileName() + "保存失败!");
|
||||
return file;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(PositionFileDTO dto) {
|
||||
PositionFile file = JsonUtils.toObject(JsonUtils.toJsonString(dto), PositionFile.class);
|
||||
Assert.isTrue(updateById(file), dto.getFileName() + "更新失败!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(Long id) {
|
||||
PositionFile file = getBaseMapper().selectById(id);
|
||||
file.setDeleted(true);
|
||||
Assert.notNull(file, "未找到要删除的文件信息");
|
||||
Assert.isTrue(updateById(file), "删除失败!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByPositionId(Long positionId) {
|
||||
PositionFile positionFile = new PositionFile();
|
||||
positionFile.setDeleted(true);
|
||||
positionFile.setUpdateBy(UserContextHolder.getExistLoginUserId());
|
||||
positionFile.setUpdateTime(new Date());
|
||||
getBaseMapper().update(positionFile,new LambdaQueryWrapper<PositionFile>().eq(PositionFile::getDeleted,false).eq(PositionFile::getPositionId,positionId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefault(Long id) {
|
||||
PositionFile file = getOne(Wrappers.<PositionFile>lambdaQuery()
|
||||
.eq(PositionFile::getDeleted, false)
|
||||
.eq(PositionFile::getId, id)
|
||||
);
|
||||
Assert.notNull(file, "文件不存在");
|
||||
String fileType = file.getFileType();
|
||||
Assert.isTrue(StrUtil.equals(fileType, PositionConstants.POSITION_FILE_TYPE_IMG), "只支持设置图片");
|
||||
getBaseMapper().setDefault(file.getPositionId(), file.getId());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,648 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.common.dto.ExportHeadDetailInfoDTO;
|
||||
import com.newyetai.common.dto.ExportHeadInfoDTO;
|
||||
import com.newyetai.common.easyexcel.ExcelUtil;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.component.action.util.ActionUtils;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
import com.newyetai.frame.redis.aop.annotation.AutoUnLock;
|
||||
import com.newyetai.frame.redis.dto.LockDTO;
|
||||
import com.newyetai.frame.redis.redisson.RedissonUtils;
|
||||
import com.newyetai.recruit.company.dao.HrCompanyMapper;
|
||||
import com.newyetai.recruit.company.entity.HrCompany;
|
||||
import com.newyetai.recruit.company.enums.HrCompanyEnum;
|
||||
import com.newyetai.recruit.position.convert.PositionRegistrationConvert;
|
||||
import com.newyetai.recruit.position.entity.PositionRegistration;
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
import com.newyetai.recruit.position.dao.PositionRegistrationMapper;
|
||||
import com.newyetai.recruit.position.enums.PositionRegistrationStatusEnum;
|
||||
import com.newyetai.recruit.position.enums.PositionStatusEnum;
|
||||
import com.newyetai.recruit.position.service.PositionRegistrationService;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.recruit.position.service.PositionService;
|
||||
import com.newyetai.recruit.talent.entity.Talent;
|
||||
import com.newyetai.recruit.talent.service.TalentService;
|
||||
import com.newyetai.recruit.user.dto.JobExpectQueryDTO;
|
||||
import com.newyetai.recruit.user.dto.ResumeDTO;
|
||||
import com.newyetai.recruit.user.dto.ResumeQueryDTO;
|
||||
import com.newyetai.recruit.user.dto.UserCertificateQueryDTO;
|
||||
import com.newyetai.recruit.user.service.JobExpectService;
|
||||
import com.newyetai.recruit.user.service.ResumeService;
|
||||
import com.newyetai.recruit.user.service.UserCertificateService;
|
||||
import com.newyetai.usercenter.enums.OrgTypeEnum;
|
||||
import com.newyetai.usercenter.org.dto.OrgDTO;
|
||||
import com.newyetai.usercenter.org.dto.OrgQueryDTO;
|
||||
import com.newyetai.usercenter.org.service.OrgService;
|
||||
import com.newyetai.usercenter.user.dto.UserDTO;
|
||||
import com.newyetai.usercenter.user.service.UserService;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 岗位报名信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-15
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PositionRegistrationServiceImpl implements PositionRegistrationService {
|
||||
|
||||
@Resource
|
||||
private PositionRegistrationMapper positionRegistrationMapper;
|
||||
|
||||
@Autowired
|
||||
private PositionService positionService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private TalentService talentService;
|
||||
|
||||
@Autowired
|
||||
private UserCertificateService userCertificateService;
|
||||
@Autowired
|
||||
private JobExpectService jobExpectService;
|
||||
|
||||
@Autowired
|
||||
private ResumeService resumeService;
|
||||
|
||||
@Resource
|
||||
private HrCompanyMapper hrCompanyMapper;
|
||||
|
||||
@Autowired
|
||||
private OrgService orgService;
|
||||
|
||||
|
||||
@AutoUnLock
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public PositionRegistrationDTO create(PositionRegistrationOperatorDTO operatorDto) {
|
||||
|
||||
Assert.isTrue(
|
||||
RedissonUtils.tryLockAutomatically(
|
||||
LockDTO.builder()
|
||||
.tryLockWaitTime(0L)
|
||||
.lockTimeout(60 * 5L)
|
||||
.methodName("positionRegistration:create")
|
||||
.arg(String.valueOf(operatorDto.getUserId()))
|
||||
.arg(String.valueOf(operatorDto.getPositionId()))
|
||||
.build()
|
||||
),
|
||||
"请稍后再试");
|
||||
|
||||
UserDTO userDTO = userService.get(operatorDto.getUserId());
|
||||
Assert.notNull(userDTO, "用户不存在");
|
||||
Assert.notNull(PositionRegistrationStatusEnum.find(operatorDto.getStatus()), "请选择正确的招聘状态");
|
||||
|
||||
PositionDTO positionDTO = positionService.findById(operatorDto.getPositionId());
|
||||
if (Objects.isNull(positionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
if (Objects.nonNull(positionDTO.getEndTime())) {
|
||||
Assert.isTrue(DateUtil.endOfDay(positionDTO.getEndTime()).getTime() >= new Date().getTime(), "岗位已失效,禁止报名");
|
||||
}
|
||||
|
||||
Assert.isTrue(PositionStatusEnum.OPEN.getStatus().equals(positionDTO.getStatus()), "岗位未开启");
|
||||
|
||||
Integer count = positionRegistrationMapper.selectCount(new LambdaQueryWrapper<PositionRegistration>()
|
||||
.eq(PositionRegistration::getDeleted, false)
|
||||
.eq(PositionRegistration::getUserId, operatorDto.getUserId())
|
||||
.eq(PositionRegistration::getPositionId, operatorDto.getPositionId())
|
||||
.notIn(PositionRegistration::getStatus, Arrays.asList(PositionRegistrationStatusEnum.CANCEL.getStatus(), PositionRegistrationStatusEnum.RESIGNED.getStatus(), PositionRegistrationStatusEnum.TERMINATION.getStatus()))
|
||||
);
|
||||
if (count > 0) {
|
||||
throw new BusinessException("请勿报名相同岗位");
|
||||
}
|
||||
|
||||
PositionRegistration positionRegistration = PositionRegistrationConvert.INSTANCE.convert(operatorDto);
|
||||
positionRegistrationMapper.saveEntity(positionRegistration);
|
||||
return PositionRegistrationConvert.INSTANCE.convert(positionRegistration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionRegistrationDTO modify(PositionRegistrationOperatorDTO operatorDto) {
|
||||
PositionRegistrationDTO positionRegistrationDto = this.findById(operatorDto.getId());
|
||||
if (Objects.isNull(positionRegistrationDto)) {
|
||||
return null;
|
||||
}
|
||||
PositionRegistration positionRegistration = PositionRegistrationConvert.INSTANCE.convert(operatorDto);
|
||||
positionRegistrationMapper.updateEntity(positionRegistration);
|
||||
return this.findById(operatorDto.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionRegistrationDTO delete(Long id) {
|
||||
PositionRegistrationDTO positionRegistrationDto = this.findById(id);
|
||||
if (Objects.isNull(positionRegistrationDto)) {
|
||||
return null;
|
||||
}
|
||||
PositionRegistration positionRegistration = PositionRegistration.builder().build();
|
||||
positionRegistration.setId(id);
|
||||
positionRegistrationMapper.deleteEntity(positionRegistration, UserContextHolder.getLoginUserId());
|
||||
return positionRegistrationDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionRegistrationDTO findById(Long id) {
|
||||
Assert.notNull(id, "参数缺失");
|
||||
PositionRegistrationPageQueryDTO queryDTO = new PositionRegistrationPageQueryDTO();
|
||||
queryDTO.setId(id);
|
||||
List<PositionRegistrationDTO> list = this.page(queryDTO);
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return null;
|
||||
}
|
||||
PositionRegistrationDTO positionRegistrationDTO = list.get(0);
|
||||
positionRegistrationDTO.setUserCertificateDTOList(userCertificateService.list(UserCertificateQueryDTO.builder().userId(positionRegistrationDTO.getUserId()).build()));
|
||||
positionRegistrationDTO.setJobExpectDTOList(jobExpectService.list(JobExpectQueryDTO.builder().userId(positionRegistrationDTO.getUserId()).build()));
|
||||
List<ResumeDTO> resumeDTOList = resumeService.list(ResumeQueryDTO.builder().userId(positionRegistrationDTO.getUserId()).build());
|
||||
if (CollectionUtils.isNotEmpty(resumeDTOList)) {
|
||||
positionRegistrationDTO.setCityCode(resumeDTOList.get(0).getCityCode());
|
||||
positionRegistrationDTO.setCityCodeName(resumeDTOList.get(0).getCityCodeName());
|
||||
positionRegistrationDTO.setResumeFileCode(resumeDTOList.get(0).getFileCode());
|
||||
}
|
||||
return positionRegistrationDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionRegistrationDTO findByIdAndChildrenOrgAll(Long id, Boolean childrenOrgAll) {
|
||||
Assert.notNull(id, "参数缺失");
|
||||
PositionRegistrationPageQueryDTO queryDTO = new PositionRegistrationPageQueryDTO();
|
||||
queryDTO.setId(id);
|
||||
queryDTO.setChildrenOrgAll(childrenOrgAll);
|
||||
List<PositionRegistrationDTO> list = this.page(queryDTO);
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return null;
|
||||
}
|
||||
PositionRegistrationDTO positionRegistrationDTO = list.get(0);
|
||||
positionRegistrationDTO.setUserCertificateDTOList(userCertificateService.list(UserCertificateQueryDTO.builder().userId(positionRegistrationDTO.getUserId()).build()));
|
||||
positionRegistrationDTO.setJobExpectDTOList(jobExpectService.list(JobExpectQueryDTO.builder().userId(positionRegistrationDTO.getUserId()).build()));
|
||||
List<ResumeDTO> resumeDTOList = resumeService.list(ResumeQueryDTO.builder().userId(positionRegistrationDTO.getUserId()).build());
|
||||
if (CollectionUtils.isNotEmpty(resumeDTOList)) {
|
||||
positionRegistrationDTO.setCityCode(resumeDTOList.get(0).getCityCode());
|
||||
positionRegistrationDTO.setCityCodeName(resumeDTOList.get(0).getCityCodeName());
|
||||
positionRegistrationDTO.setResumeFileCode(resumeDTOList.get(0).getFileCode());
|
||||
}
|
||||
return positionRegistrationDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionRegistrationDTO> list(PositionRegistrationPageQueryDTO queryDTO) {
|
||||
queryDTO.disablePage();
|
||||
return this.page(queryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionRegistrationDTO> page(PositionRegistrationPageQueryDTO queryDTO) {
|
||||
queryDTO.setOrgId(null);
|
||||
|
||||
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
|
||||
//如果是 数据管理页面进来 这个参数就是true
|
||||
if (Boolean.TRUE.equals(queryDTO.getChildrenOrgAll())) {
|
||||
//查自己和下级机构
|
||||
queryDTO.setOrgIds(orgService.childrenOrgIdList(UserContextHolder.getExistLoginOrgId()));
|
||||
} else {
|
||||
queryDTO.setOrgId(UserContextHolder.getExistLoginOrgId());
|
||||
}
|
||||
}
|
||||
//如果是 数据管理页面进来 这个参数就是true
|
||||
if (Boolean.TRUE.equals(queryDTO.getChildrenOrgAll())) {
|
||||
//如果前端给了指定 就按指定的(政府机构)
|
||||
if (Objects.nonNull(queryDTO.getQueryStreetOrgId())) {
|
||||
//选定一个政府机构,找出这个政府机构下所有的用工\服务机构,在列出这些用工\服务机构的报名记录
|
||||
Set<Long> orgIdList = orgService.childrenOrgIdList(queryDTO.getQueryStreetOrgId());
|
||||
if (CollectionUtils.isEmpty(orgIdList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
Set<Long> finalOrgIds = orgService.list(OrgQueryDTO.builder().orgIds(orgIdList).types(Sets.newHashSet(OrgTypeEnum.ORG_TYPE_SIMPLE.getType(), OrgTypeEnum.ORG_TYPE_HR.getType())).build())
|
||||
.stream().map(orgDTOs -> orgDTOs.getId()).collect(Collectors.toSet());
|
||||
if (CollectionUtils.isEmpty(finalOrgIds)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
//所属街道所有子级的机构id
|
||||
queryDTO.setQueryStreetChildrenAllOrgIds(finalOrgIds);
|
||||
}
|
||||
}
|
||||
|
||||
List<PositionRegistrationDTO> page = positionRegistrationMapper.page(queryDTO);
|
||||
return page;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@AutoUnLock
|
||||
@Override
|
||||
public void userCreate(UserPositionRegistrationDTO dto) {
|
||||
Assert.isTrue(
|
||||
RedissonUtils.tryLockAutomatically(
|
||||
LockDTO.builder()
|
||||
.tryLockWaitTime(0L)
|
||||
.lockTimeout(60 * 5L)
|
||||
.methodName("positionRegistration:create")
|
||||
.arg(String.valueOf(UserContextHolder.getExistLoginUserId()))
|
||||
.arg(String.valueOf(dto.getPositionId()))
|
||||
.build()
|
||||
),
|
||||
"请稍后再试");
|
||||
|
||||
PositionDTO positionDTO = positionService.findById(dto.getPositionId());
|
||||
if (Objects.isNull(positionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
Assert.isTrue(PositionStatusEnum.OPEN.getStatus().equals(positionDTO.getStatus()), "岗位未开启");
|
||||
if (Objects.nonNull(positionDTO.getEndTime())) {
|
||||
Assert.isTrue(DateUtil.endOfDay(positionDTO.getEndTime()).getTime() >= new Date().getTime(), "岗位已失效,禁止报名");
|
||||
}
|
||||
Integer count = positionRegistrationMapper.selectCount(new LambdaQueryWrapper<PositionRegistration>()
|
||||
.eq(PositionRegistration::getDeleted, false)
|
||||
.eq(PositionRegistration::getUserId, UserContextHolder.getExistLoginUserId())
|
||||
.eq(PositionRegistration::getPositionId, dto.getPositionId())
|
||||
.notIn(PositionRegistration::getStatus, Arrays.asList(PositionRegistrationStatusEnum.CANCEL.getStatus(), PositionRegistrationStatusEnum.RESIGNED.getStatus(), PositionRegistrationStatusEnum.TERMINATION.getStatus()))
|
||||
);
|
||||
if (count > 0) {
|
||||
throw new BusinessException("请勿报名相同岗位");
|
||||
}
|
||||
PositionRegistration positionRegistration = new PositionRegistration();
|
||||
positionRegistration.setUserId(UserContextHolder.getExistLoginUserId());
|
||||
positionRegistration.setPositionId(dto.getPositionId());
|
||||
positionRegistration.setStatus(PositionRegistrationStatusEnum.ALREADY_REGISTERED.getStatus());
|
||||
positionRegistrationMapper.saveEntity(positionRegistration);
|
||||
|
||||
HrCompany hrCompany = hrCompanyMapper.selectOne(new LambdaQueryWrapper<HrCompany>().eq(HrCompany::getDeleted, false).eq(HrCompany::getOrgId, positionDTO.getOrgId()).eq(HrCompany::getCompanyType, HrCompanyEnum.SELF.getType()));
|
||||
Assert.notNull(hrCompany, "数据异常,报名失败");
|
||||
|
||||
Talent talent = new Talent();
|
||||
talent.setOrgId(positionDTO.getOrgId());
|
||||
talent.setUserId(UserContextHolder.getExistLoginUserId());
|
||||
talent.setCompanyId(hrCompany.getId());
|
||||
talentService.importCreate(talent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invite(PositionRegistrationOperatorDTO operatorDTO) {
|
||||
Assert.notNull(operatorDTO.getId(), "id不能为空");
|
||||
if (StringUtils.isNotBlank(operatorDTO.getInterviewLocation())) {
|
||||
Assert.isTrue(!(operatorDTO.getInterviewLocation().length() > 100), "面试地点长度超限");
|
||||
}
|
||||
|
||||
PositionRegistrationDTO positionRegistrationDTO = this.findById(operatorDTO.getId());
|
||||
Assert.notNull(positionRegistrationDTO, "未查询到数据");
|
||||
Assert.isTrue(PositionRegistrationStatusEnum.ALREADY_REGISTERED.getStatus().equals(positionRegistrationDTO.getStatus()), "已报名状态才能邀约面试");
|
||||
|
||||
PositionDTO positionDTO = positionService.findById(positionRegistrationDTO.getPositionId());
|
||||
if (Objects.isNull(positionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
|
||||
PositionRegistration positionRegistration = new PositionRegistration();
|
||||
positionRegistration.setId(operatorDTO.getId());
|
||||
positionRegistration.setStatus(PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus());
|
||||
positionRegistration.setInterviewTime(operatorDTO.getInterviewTime());
|
||||
positionRegistration.setInterviewLocation(operatorDTO.getInterviewLocation());
|
||||
positionRegistration.setUpdateBy(UserContextHolder.getLoginUserId());
|
||||
long row = positionRegistrationMapper.updateStatus(positionRegistration, PositionRegistrationStatusEnum.ALREADY_REGISTERED.getStatus());
|
||||
Assert.isTrue(row == 1, "邀约面试失败,状态已被变更,请刷新页面重试");
|
||||
|
||||
ActionUtils.diff(operatorDTO.getId(), PositionRegistration.builder().status(PositionRegistrationStatusEnum.ALREADY_REGISTERED.getStatus()).build()
|
||||
, PositionRegistration.builder().status(PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus()).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void termination(PositionRegistrationOperatorDTO operatorDTO) {
|
||||
Assert.notNull(operatorDTO.getId(), "id不能为空");
|
||||
|
||||
PositionRegistrationDTO positionRegistrationDTO = this.findById(operatorDTO.getId());
|
||||
Assert.notNull(positionRegistrationDTO, "未查询到数据");
|
||||
|
||||
PositionDTO positionDTO = positionService.findById(positionRegistrationDTO.getPositionId());
|
||||
if (Objects.isNull(positionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
|
||||
PositionRegistration positionRegistration = new PositionRegistration();
|
||||
positionRegistration.setId(operatorDTO.getId());
|
||||
positionRegistration.setStatus(PositionRegistrationStatusEnum.TERMINATION.getStatus());
|
||||
positionRegistration.setTerminationTime(new Date());
|
||||
positionRegistration.setUpdateBy(UserContextHolder.getLoginUserId());
|
||||
positionRegistrationMapper.updateStatus(positionRegistration, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fulfillInterview(PositionRegistrationOperatorDTO operatorDTO) {
|
||||
Assert.notNull(operatorDTO.getId(), "id不能为空");
|
||||
Assert.notNull(operatorDTO.getStatus(), "状态不能为空");
|
||||
if (!(PositionRegistrationStatusEnum.FAIL_THE_INTERVIEW.getStatus().equals(operatorDTO.getStatus()) || PositionRegistrationStatusEnum.TO_BE_HIRED.getStatus().equals(operatorDTO.getStatus()))) {
|
||||
throw new BusinessException("请选择正确的面试结果");
|
||||
}
|
||||
|
||||
PositionRegistrationDTO positionRegistrationDTO = this.findById(operatorDTO.getId());
|
||||
Assert.notNull(positionRegistrationDTO, "未查询到数据");
|
||||
|
||||
PositionDTO positionDTO = positionService.findById(positionRegistrationDTO.getPositionId());
|
||||
if (Objects.isNull(positionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
|
||||
PositionRegistration positionRegistration = new PositionRegistration();
|
||||
positionRegistration.setId(operatorDTO.getId());
|
||||
positionRegistration.setStatus(operatorDTO.getStatus());
|
||||
positionRegistration.setInductionTime(operatorDTO.getInductionTime());
|
||||
positionRegistration.setUpdateBy(UserContextHolder.getLoginUserId());
|
||||
positionRegistration.setRemark(operatorDTO.getRemark());
|
||||
long row = positionRegistrationMapper.updateStatus(positionRegistration, PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus());
|
||||
Assert.isTrue(row == 1, "完成面试失败,状态已被变更,请刷新页面重试");
|
||||
|
||||
ActionUtils.diff(operatorDTO.getId(), PositionRegistration.builder().status(PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus()).build()
|
||||
, PositionRegistration.builder().status(operatorDTO.getStatus()).build());
|
||||
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void onTheJob(OnTheJobDTO dto) {
|
||||
for (OnTheJobDTO.OnTheJobDetailDTO detailDTO : dto.getDetailDTOS()) {
|
||||
PositionRegistrationDTO positionRegistrationDTO = this.findById(detailDTO.getId());
|
||||
Assert.notNull(positionRegistrationDTO, "未查询到数据");
|
||||
|
||||
PositionDTO positionDTO = positionService.findById(positionRegistrationDTO.getPositionId());
|
||||
if (Objects.isNull(positionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
|
||||
|
||||
PositionRegistration positionRegistration = new PositionRegistration();
|
||||
positionRegistration.setId(detailDTO.getId());
|
||||
positionRegistration.setInductionTime(dto.getInductionTime());
|
||||
positionRegistration.setSalary(detailDTO.getSalary());
|
||||
positionRegistration.setStatus(PositionRegistrationStatusEnum.ON_THE_JOB.getStatus());
|
||||
positionRegistration.setUpdateBy(UserContextHolder.getLoginUserId());
|
||||
long row = positionRegistrationMapper.updateStatus(positionRegistration, PositionRegistrationStatusEnum.TO_BE_HIRED.getStatus());
|
||||
Assert.isTrue(row == 1, "入职失败,状态已被变更,请刷新页面重试");
|
||||
|
||||
ActionUtils.diff(detailDTO.getId(), PositionRegistration.builder().status(PositionRegistrationStatusEnum.TO_BE_HIRED.getStatus()).build()
|
||||
, PositionRegistration.builder().status(PositionRegistrationStatusEnum.ON_THE_JOB.getStatus()).build());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void resigned(ResignedDTO dto) {
|
||||
for (Long id : dto.getIds()) {
|
||||
PositionRegistrationDTO positionRegistrationDTO = this.findById(id);
|
||||
Assert.notNull(positionRegistrationDTO, "未查询到数据");
|
||||
|
||||
PositionDTO positionDTO = positionService.findById(positionRegistrationDTO.getPositionId());
|
||||
if (Objects.isNull(positionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
|
||||
PositionRegistration positionRegistration = new PositionRegistration();
|
||||
positionRegistration.setId(id);
|
||||
positionRegistration.setQuitTime(dto.getQuitTime());
|
||||
positionRegistration.setStatus(PositionRegistrationStatusEnum.RESIGNED.getStatus());
|
||||
positionRegistration.setUpdateBy(UserContextHolder.getLoginUserId());
|
||||
long row = positionRegistrationMapper.updateStatus(positionRegistration, PositionRegistrationStatusEnum.ON_THE_JOB.getStatus());
|
||||
Assert.isTrue(row == 1, "离职失败,状态已被变更,请刷新页面重试");
|
||||
|
||||
ActionUtils.diff(id, PositionRegistration.builder().status(PositionRegistrationStatusEnum.ON_THE_JOB.getStatus()).build()
|
||||
, PositionRegistration.builder().status(PositionRegistrationStatusEnum.RESIGNED.getStatus()).build());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void export(PositionRegistrationPageQueryDTO queryDTO) {
|
||||
boolean flag = true;
|
||||
Integer pageNo = 1;
|
||||
Integer pageSize = 100;
|
||||
|
||||
List<PositionRegistrationDTO> listAll = new ArrayList<>();
|
||||
|
||||
while (flag) {
|
||||
queryDTO.setPageNo(pageNo);
|
||||
queryDTO.setPageSize(pageSize);
|
||||
List<PositionRegistrationDTO> list = this.page(queryDTO);
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(list)) {
|
||||
flag = false;
|
||||
continue;
|
||||
}
|
||||
if (list.size() < pageSize) {
|
||||
flag = false;
|
||||
}
|
||||
pageNo = pageNo + 1;
|
||||
listAll.addAll(list);
|
||||
}
|
||||
List<PositionRegistrationExportDTO> collect = listAll.stream().map(dto -> {
|
||||
PositionRegistrationExportDTO exportDTO = new PositionRegistrationExportDTO();
|
||||
BeanUtils.copyProperties(dto, exportDTO);
|
||||
exportDTO.setInterviewTime(DateUtil.format(dto.getInterviewTime(), "yyyy-MM-dd"));
|
||||
exportDTO.setCreateTime(DateUtil.format(dto.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||
exportDTO.setInductionTime(DateUtil.format(dto.getInductionTime(), "yyyy-MM-dd"));
|
||||
exportDTO.setQuitTime(DateUtil.format(dto.getQuitTime(), "yyyy-MM-dd"));
|
||||
exportDTO.setStatus(DictUtils.getCodeNameMap("position_registration_status").get(String.valueOf(dto.getStatus())));
|
||||
return exportDTO;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(collect)) {
|
||||
return;
|
||||
}
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
String fileName = "招聘明细导出" + "(" + formatter.format(LocalDateTime.now()) + ")";
|
||||
|
||||
ExportHeadInfoDTO infoDTO = ExportHeadInfoDTO.builder()
|
||||
.fileName(fileName)
|
||||
.build();
|
||||
List<ExportHeadDetailInfoDTO> heads = infoDTO.getHeads();
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位名称").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("姓名").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("性别").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("年龄").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("手机号").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("身份证号").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("用工企业").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘状态").build());
|
||||
|
||||
if (Boolean.TRUE.equals(queryDTO.getChildrenOrgAll())) {
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("发布机构").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("所属街镇").build());
|
||||
}
|
||||
|
||||
List<List> datas = Lists.newArrayList();
|
||||
|
||||
//全部
|
||||
if (CollectionUtils.isEmpty(queryDTO.getStatusList())) {
|
||||
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("面试时间").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("面试地点").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("入职薪资").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("报名时间").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("入职日期").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("最后工作日").build());
|
||||
for (PositionRegistrationExportDTO dto : collect) {
|
||||
List objects = Lists.newArrayList();
|
||||
datas.add(objects);
|
||||
objects.add(dto.getPositionName());
|
||||
objects.add(dto.getRealName());
|
||||
objects.add(dto.getGender());
|
||||
objects.add(dto.getAge());
|
||||
objects.add(dto.getPhone());
|
||||
objects.add(dto.getCardNo());
|
||||
objects.add(dto.getCompanyName());
|
||||
objects.add(dto.getStatus());
|
||||
if (Boolean.TRUE.equals(queryDTO.getChildrenOrgAll())) {
|
||||
objects.add(dto.getPublishOrgName());
|
||||
objects.add(dto.getStreetName());
|
||||
}
|
||||
objects.add(dto.getInterviewTime());
|
||||
objects.add(dto.getInterviewLocation());
|
||||
objects.add(dto.getSalary());
|
||||
objects.add(dto.getCreateTime());
|
||||
objects.add(dto.getInductionTime());
|
||||
objects.add(dto.getQuitTime());
|
||||
}
|
||||
} else if (queryDTO.getStatusList().contains(PositionRegistrationStatusEnum.ALREADY_REGISTERED.getStatus())) {
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("报名时间").build());
|
||||
for (PositionRegistrationExportDTO dto : collect) {
|
||||
List objects = Lists.newArrayList();
|
||||
datas.add(objects);
|
||||
objects.add(dto.getPositionName());
|
||||
objects.add(dto.getRealName());
|
||||
objects.add(dto.getGender());
|
||||
objects.add(dto.getAge());
|
||||
objects.add(dto.getPhone());
|
||||
objects.add(dto.getCardNo());
|
||||
objects.add(dto.getCompanyName());
|
||||
objects.add(dto.getStatus());
|
||||
if (Boolean.TRUE.equals(queryDTO.getChildrenOrgAll())) {
|
||||
objects.add(dto.getPublishOrgName());
|
||||
objects.add(dto.getStreetName());
|
||||
}
|
||||
objects.add(dto.getCreateTime());
|
||||
}
|
||||
} else if (queryDTO.getStatusList().containsAll(Arrays.asList(
|
||||
PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus(),
|
||||
PositionRegistrationStatusEnum.FAIL_THE_INTERVIEW.getStatus(),
|
||||
PositionRegistrationStatusEnum.TO_BE_HIRED.getStatus()
|
||||
))) {
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("报名时间").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("面试时间").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("面试地点").build());
|
||||
|
||||
for (PositionRegistrationExportDTO dto : collect) {
|
||||
List objects = Lists.newArrayList();
|
||||
datas.add(objects);
|
||||
objects.add(dto.getPositionName());
|
||||
objects.add(dto.getRealName());
|
||||
objects.add(dto.getGender());
|
||||
objects.add(dto.getAge());
|
||||
objects.add(dto.getPhone());
|
||||
objects.add(dto.getCardNo());
|
||||
objects.add(dto.getCompanyName());
|
||||
objects.add(dto.getStatus());
|
||||
if (Boolean.TRUE.equals(queryDTO.getChildrenOrgAll())) {
|
||||
objects.add(dto.getPublishOrgName());
|
||||
objects.add(dto.getStreetName());
|
||||
}
|
||||
objects.add(dto.getCreateTime());
|
||||
objects.add(dto.getInterviewTime());
|
||||
objects.add(dto.getInterviewLocation());
|
||||
}
|
||||
} else if (queryDTO.getStatusList().contains(PositionRegistrationStatusEnum.ON_THE_JOB.getStatus())) {
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("入职薪资").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("报名时间").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("面试时间").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("入职日期").build());
|
||||
for (PositionRegistrationExportDTO dto : collect) {
|
||||
List objects = Lists.newArrayList();
|
||||
datas.add(objects);
|
||||
objects.add(dto.getPositionName());
|
||||
objects.add(dto.getRealName());
|
||||
objects.add(dto.getGender());
|
||||
objects.add(dto.getAge());
|
||||
objects.add(dto.getPhone());
|
||||
objects.add(dto.getCardNo());
|
||||
objects.add(dto.getCompanyName());
|
||||
objects.add(dto.getStatus());
|
||||
if (Boolean.TRUE.equals(queryDTO.getChildrenOrgAll())) {
|
||||
objects.add(dto.getPublishOrgName());
|
||||
objects.add(dto.getStreetName());
|
||||
}
|
||||
objects.add(dto.getSalary());
|
||||
objects.add(dto.getCreateTime());
|
||||
objects.add(dto.getInterviewTime());
|
||||
objects.add(dto.getInductionTime());
|
||||
}
|
||||
}
|
||||
|
||||
infoDTO.setDatas(datas);
|
||||
ExcelUtil.dynamicExportTemplate(infoDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPositionRegistrationResDTO> userPage(UserPositionRegistrationPageQueryDTO queryDTO) {
|
||||
queryDTO.setUserId(UserContextHolder.getExistLoginUserId());
|
||||
List<UserPositionRegistrationResDTO> list = positionRegistrationMapper.userPage(queryDTO);
|
||||
for (UserPositionRegistrationResDTO userPositionRegistrationResDTO : list) {
|
||||
userPositionRegistrationResDTO.setRecruitPositionTypeName(DictUtils.getCodeNameMap("recruit_position_type").get(userPositionRegistrationResDTO.getRecruitPositionType()));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(Long positionId) {
|
||||
List<UserPositionRegistrationResDTO> userPositionRegistrationResDTOS = positionRegistrationMapper.userPage(UserPositionRegistrationPageQueryDTO.builder().positionId(positionId).userId(UserContextHolder.getExistLoginUserId()).build());
|
||||
if (CollectionUtils.isEmpty(userPositionRegistrationResDTOS)) {
|
||||
throw new BusinessException("暂无可取消的报名记录");
|
||||
}
|
||||
UserPositionRegistrationResDTO userPositionRegistrationResDTO = userPositionRegistrationResDTOS.get(0);
|
||||
if (StringUtils.equals(PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus(), userPositionRegistrationResDTO.getStatus())) {
|
||||
throw new BusinessException("您在该岗位处于【待面试】状态,无法取消报名。");
|
||||
} else if (StringUtils.equals(PositionRegistrationStatusEnum.TO_BE_HIRED.getStatus(), userPositionRegistrationResDTO.getStatus())) {
|
||||
throw new BusinessException("您在该岗位处于【待入职】状态,无法取消报名。");
|
||||
} else if (StringUtils.equals(PositionRegistrationStatusEnum.ON_THE_JOB.getStatus(), userPositionRegistrationResDTO.getStatus())) {
|
||||
throw new BusinessException("您在该岗位处于【已入职】状态,无法取消报名。");
|
||||
}
|
||||
positionRegistrationMapper.updateStatus(PositionRegistration.builder().id(userPositionRegistrationResDTO.getId()).status(PositionRegistrationStatusEnum.CANCEL.getStatus()).build(), PositionRegistrationStatusEnum.ALREADY_REGISTERED.getStatus());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show(Long id) {
|
||||
PositionRegistrationDTO positionRegistrationDTO = this.findById(id);
|
||||
if (Objects.isNull(positionRegistrationDTO)) {
|
||||
return;
|
||||
}
|
||||
if (Boolean.TRUE.equals(positionRegistrationDTO.getShow())) {
|
||||
return;
|
||||
}
|
||||
PositionRegistration positionRegistration = new PositionRegistration();
|
||||
positionRegistration.setId(id);
|
||||
positionRegistration.setShow(true);
|
||||
positionRegistrationMapper.updateEntitySelective(positionRegistration);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,577 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.common.dto.ExportHeadDetailInfoDTO;
|
||||
import com.newyetai.common.dto.ExportHeadInfoDTO;
|
||||
import com.newyetai.common.easyexcel.ExcelUtil;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.recruit.company.dto.HrCompanyDTO;
|
||||
import com.newyetai.recruit.company.dto.HrCompanyPageQueryDTO;
|
||||
import com.newyetai.recruit.company.enums.HrCompanyEnum;
|
||||
import com.newyetai.recruit.company.service.IHrCompanyService;
|
||||
import com.newyetai.component.dict.util.DictUtils;
|
||||
import com.newyetai.recruit.position.convert.PositionConvert;
|
||||
import com.newyetai.recruit.position.dao.PositionRegistrationMapper;
|
||||
import com.newyetai.recruit.position.entity.Position;
|
||||
import com.newyetai.recruit.position.dto.*;
|
||||
import com.newyetai.recruit.position.dao.PositionMapper;
|
||||
import com.newyetai.recruit.position.enums.PositionStatusEnum;
|
||||
import com.newyetai.recruit.position.service.PositionFileService;
|
||||
import com.newyetai.recruit.position.service.PositionService;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.aop.framework.AopContext;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.recruit.user.dao.UserCollectionMapper;
|
||||
import com.newyetai.recruit.user.dto.JobExpectDTO;
|
||||
import com.newyetai.recruit.user.dto.JobExpectQueryDTO;
|
||||
import com.newyetai.recruit.user.dto.ResumeDTO;
|
||||
import com.newyetai.recruit.user.entity.UserCollection;
|
||||
import com.newyetai.recruit.user.service.JobExpectService;
|
||||
import com.newyetai.recruit.user.service.ResumeService;
|
||||
import com.newyetai.sdk.tencent.map.TencentMapContext;
|
||||
import com.newyetai.sdk.tencent.map.dto.TencentMapBaseResDTO;
|
||||
import com.newyetai.sdk.tencent.map.dto.TencentWsDistanceV1MatrixElementsResDTO;
|
||||
import com.newyetai.sdk.tencent.map.dto.TencentMapWsDistanceV1MatrixReqDTO;
|
||||
import com.newyetai.sdk.tencent.map.dto.TencentWsDistanceV1MatrixResDTO;
|
||||
import com.newyetai.sdk.tencent.map.dto.TencentWsDistanceV1MatrixElementsRowResDTO;
|
||||
import com.newyetai.usercenter.org.dao.OrgMapper;
|
||||
import com.newyetai.usercenter.org.entity.Org;
|
||||
import com.newyetai.usercenter.org.enums.RecruitPositionTypeEnum;
|
||||
import com.newyetai.usercenter.user.dto.UserDTO;
|
||||
import com.newyetai.usercenter.user.service.UserService;
|
||||
import com.spatial4j.core.context.SpatialContext;
|
||||
import com.spatial4j.core.distance.DistanceUtils;
|
||||
import com.spatial4j.core.shape.Rectangle;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 岗位信息表;岗位信息表
|
||||
*
|
||||
* @author guixinman
|
||||
* @since 1.0.0 2024-04-11
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PositionServiceImpl implements PositionService {
|
||||
|
||||
@Resource
|
||||
private PositionMapper positionMapper;
|
||||
|
||||
@Autowired
|
||||
private IHrCompanyService hrCompanyService;
|
||||
|
||||
@Autowired
|
||||
private PositionFileService positionFileService;
|
||||
|
||||
@Resource
|
||||
private PositionRegistrationMapper positionRegistrationMapper;
|
||||
|
||||
@Resource
|
||||
private UserCollectionMapper userCollectionMapper;
|
||||
|
||||
@Resource
|
||||
private OrgMapper orgMapper;
|
||||
|
||||
@Autowired
|
||||
private JobExpectService jobExpectService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private ResumeService resumeService;
|
||||
|
||||
@Autowired
|
||||
private TencentMapContext tencentMapContext;
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public PositionDTO create(PositionOperatorDTO operatorDto) {
|
||||
Long orgId = UserContextHolder.getExistLoginOrgId();
|
||||
if (Objects.nonNull(operatorDto.getOrgId())) {
|
||||
orgId = operatorDto.getOrgId();
|
||||
}
|
||||
if (Objects.nonNull(operatorDto.getEndTime())) {
|
||||
Assert.isTrue(! (DateUtil.endOfDay(operatorDto.getEndTime()).getTime() <= DateUtil.endOfDay(new Date()).getTime()),"岗位有效期不能小于等于当前日期");
|
||||
}
|
||||
Org org = orgMapper.selectOne(new LambdaQueryWrapper<Org>().eq(Org::getDeleted, false).eq(Org::getId, orgId));
|
||||
if (Objects.isNull(org)) {
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
|
||||
//判断招聘岗位类型权限
|
||||
if (!org.getRecruitPositionType().equals(RecruitPositionTypeEnum.ODD_JOB_OR_GENERAL_WORKER.getType())) {
|
||||
if (!StringUtils.equals(org.getRecruitPositionType(), operatorDto.getRecruitPositionType())) {
|
||||
if (StringUtils.equals(org.getRecruitPositionType(), RecruitPositionTypeEnum.ODD_JOB.getType())) {
|
||||
throw new BusinessException("当前企业仅支持维护零工性质岗位。");
|
||||
}
|
||||
if (StringUtils.equals(org.getRecruitPositionType(), RecruitPositionTypeEnum.GENERAL_WORKER.getType())) {
|
||||
throw new BusinessException("当前企业仅支持维护普工性质岗位。");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//当前机构下,相同的用工企业,不能存在相同的岗位名称
|
||||
Assert.notNull(hrCompanyService.find(HrCompanyPageQueryDTO.builder().id(operatorDto.getCompanyId()).orgId(orgId).companyTypes(Arrays.asList(HrCompanyEnum.KH.getType(), HrCompanyEnum.SELF.getType())).build()), "未查询到用工企业");
|
||||
|
||||
List<Position> positions = positionMapper.selectList(new LambdaQueryWrapper<Position>()
|
||||
.eq(Position::getCompanyId, operatorDto.getCompanyId())
|
||||
.eq(Position::getOrgId, orgId)
|
||||
.eq(Position::getPositionName, operatorDto.getPositionName())
|
||||
);
|
||||
if (CollectionUtils.isNotEmpty(positions)) {
|
||||
throw new BusinessException("该用工企业已存在相同的岗位名称,添加失败");
|
||||
}
|
||||
|
||||
Position position = PositionConvert.INSTANCE.convert(operatorDto);
|
||||
position.setOrgId(orgId);
|
||||
if (Objects.isNull(operatorDto.getStatus())) {
|
||||
position.setStatus(PositionStatusEnum.OPEN.getStatus());
|
||||
}
|
||||
positionMapper.saveEntity(position);
|
||||
return PositionConvert.INSTANCE.convert(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionDTO modify(PositionOperatorDTO operatorDto) {
|
||||
Assert.notNull(operatorDto.getId(), "岗位id缺失");
|
||||
|
||||
Position positionDto = positionMapper.selectById(operatorDto.getId());
|
||||
if (Objects.isNull(positionDto)) {
|
||||
throw new BusinessException("未查询到对应数据");
|
||||
}
|
||||
if (Objects.nonNull(operatorDto.getEndTime())) {
|
||||
Assert.isTrue(! (DateUtil.endOfDay(operatorDto.getEndTime()).getTime() <= DateUtil.endOfDay(new Date()).getTime()),"岗位有效期不能小于等于当前日期");
|
||||
}
|
||||
Assert.notNull(hrCompanyService.find(HrCompanyPageQueryDTO.builder().id(operatorDto.getCompanyId()).companyTypes(Arrays.asList(HrCompanyEnum.KH.getType(), HrCompanyEnum.SELF.getType())).orgId(positionDto.getOrgId()).build()), "未查询到用工企业");
|
||||
List<Position> positions = positionMapper.selectList(new LambdaQueryWrapper<Position>()
|
||||
.eq(Position::getCompanyId, operatorDto.getCompanyId())
|
||||
.eq(Position::getOrgId, positionDto.getOrgId())
|
||||
.eq(Position::getPositionName, operatorDto.getPositionName())
|
||||
.notIn(Position::getId, operatorDto.getId())
|
||||
);
|
||||
if (CollectionUtils.isNotEmpty(positions)) {
|
||||
throw new BusinessException("该用工企业已存在相同的岗位名称,添加失败");
|
||||
}
|
||||
|
||||
Position position = PositionConvert.INSTANCE.convert(operatorDto);
|
||||
//不能修改
|
||||
position.setRecruitPositionType(positionDto.getRecruitPositionType());
|
||||
positionMapper.updateEntity(position);
|
||||
return this.findById(operatorDto.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionDTO delete(Long id) {
|
||||
PositionDTO positionDto = this.findById(id);
|
||||
if (Objects.isNull(positionDto)) {
|
||||
return null;
|
||||
}
|
||||
Position position = Position.builder().build();
|
||||
position.setId(id);
|
||||
positionMapper.deleteEntity(position, UserContextHolder.getLoginUserId());
|
||||
return positionDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionDTO findById(Long id) {
|
||||
Assert.notNull(id, "参数缺失");
|
||||
|
||||
PositionPageQueryDTO queryDTO = new PositionPageQueryDTO();
|
||||
queryDTO.disablePage();
|
||||
queryDTO.setId(id);
|
||||
List<PositionDTO> list = this.page(queryDTO);
|
||||
return CollectionUtils.isNotEmpty(list) ? list.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionDTO userFindById(Long id) {
|
||||
Assert.notNull(id, "id不能为空");
|
||||
|
||||
PositionPageQueryDTO queryDTO = new PositionPageQueryDTO();
|
||||
queryDTO.disablePage();
|
||||
queryDTO.setId(id);
|
||||
queryDTO.setUseEndTime(false);
|
||||
List<PositionDTO> list = this.userPage(queryDTO);
|
||||
if (CollectionUtils.isNotEmpty(list)) {
|
||||
PositionDTO positionDTO = list.get(0);
|
||||
List<PositionFileDTO> positionFileDTOS = positionFileService.filePage(PositionFilePageQueryDTO.builder().positionId(positionDTO.getId()).build());
|
||||
positionDTO.setPositionFileDTOS(positionFileDTOS);
|
||||
|
||||
if (Objects.nonNull(UserContextHolder.getLoginUserId())) {
|
||||
List<UserPositionRegistrationResDTO> userPositionRegistrationResDTOS = positionRegistrationMapper.userPage(UserPositionRegistrationPageQueryDTO.builder().userId(UserContextHolder.getExistLoginUserId()).positionId(positionDTO.getId()).build());
|
||||
if (CollectionUtils.isNotEmpty(userPositionRegistrationResDTOS)) {
|
||||
positionDTO.setPositionRegistrationStatus(userPositionRegistrationResDTOS.get(0).getStatus());
|
||||
positionDTO.setShow(userPositionRegistrationResDTOS.get(0).getShow());
|
||||
positionDTO.setPositionRegistrationCreateTime(userPositionRegistrationResDTOS.get(0).getCreateTime());
|
||||
positionDTO.setInterviewTime(userPositionRegistrationResDTOS.get(0).getInterviewTime());
|
||||
positionDTO.setInterviewLocation(userPositionRegistrationResDTOS.get(0).getInterviewLocation());
|
||||
positionDTO.setRemark(userPositionRegistrationResDTOS.get(0).getRemark());
|
||||
positionDTO.setInductionTime(userPositionRegistrationResDTOS.get(0).getInductionTime());
|
||||
positionDTO.setPositionRegistrationSalary(userPositionRegistrationResDTOS.get(0).getSalary());
|
||||
}
|
||||
LambdaQueryWrapper<UserCollection> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(UserCollection::getUserId, UserContextHolder.getExistLoginUserId());
|
||||
queryWrapper.eq(UserCollection::getDeleted, false);
|
||||
queryWrapper.eq(UserCollection::getPostId, positionDTO.getId());
|
||||
Integer count = userCollectionMapper.selectCount(queryWrapper);
|
||||
positionDTO.setIsCollection(true);
|
||||
if (count == 0) {
|
||||
positionDTO.setIsCollection(false);
|
||||
}
|
||||
}
|
||||
|
||||
return positionDTO;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionDTO> list(PositionPageQueryDTO queryDTO) {
|
||||
queryDTO.disablePage();
|
||||
return this.page(queryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionDTO> page(PositionPageQueryDTO queryDTO) {
|
||||
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
|
||||
queryDTO.setOrgId(UserContextHolder.getExistLoginOrgId());
|
||||
}
|
||||
List<PositionDTO> list = positionMapper.page(queryDTO);
|
||||
for (PositionDTO positionDTO : list) {
|
||||
positionDTO.setRecruitPositionTypeName(DictUtils.getCodeNameMap("recruit_position_type").get(positionDTO.getRecruitPositionType()));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionDTO> userPage(PositionPageQueryDTO queryDTO) {
|
||||
List<PositionDTO> list = positionMapper.userPage(queryDTO);
|
||||
for (PositionDTO positionDTO : list) {
|
||||
positionDTO.setRecruitPositionTypeName(DictUtils.getCodeNameMap("recruit_position_type").get(positionDTO.getRecruitPositionType()));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionDTO> tencentMapUserPage(PositionPageQueryDTO queryDTO) {
|
||||
if (Objects.nonNull(queryDTO.getLongitude()) && Objects.nonNull(queryDTO.getLatitude())) {
|
||||
// 移动设备经纬度
|
||||
double lon = Double.parseDouble(String.valueOf(queryDTO.getLongitude()));
|
||||
double lat = Double.parseDouble(String.valueOf(queryDTO.getLatitude()));
|
||||
// 千米
|
||||
int radius = queryDTO.getRadius();
|
||||
try {
|
||||
SpatialContext geo = SpatialContext.GEO;
|
||||
Rectangle rectangle = geo.getDistCalc().calcBoxByDistFromPt(
|
||||
geo.makePoint(lon, lat), radius * DistanceUtils.KM_TO_DEG, geo, null);
|
||||
|
||||
queryDTO.setMinX(new BigDecimal(String.valueOf(rectangle.getMinX())));
|
||||
queryDTO.setMaxX(new BigDecimal(String.valueOf(rectangle.getMaxX())));
|
||||
queryDTO.setMinY(new BigDecimal(String.valueOf(rectangle.getMinY())));
|
||||
queryDTO.setMaxY(new BigDecimal(String.valueOf(rectangle.getMaxY())));
|
||||
}catch (Exception e) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
StringBuilder to = new StringBuilder();
|
||||
List<PositionDTO> list = positionMapper.userPage(queryDTO);
|
||||
|
||||
//填充距离的对象集合
|
||||
List<PositionDTO> temp = new ArrayList<>();
|
||||
//岗位列表
|
||||
List<PositionDTO> positionDTOResultList = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
PositionDTO positionDTO = list.get(i);
|
||||
positionDTO.setRecruitPositionTypeName(DictUtils.getCodeNameMap("recruit_position_type").get(positionDTO.getRecruitPositionType()));
|
||||
if (Objects.nonNull(positionDTO.getLongitude()) && Objects.nonNull(positionDTO.getLatitude())) {
|
||||
to.append(positionDTO.getLatitude().toPlainString() + "," + positionDTO.getLongitude().toPlainString());
|
||||
to.append(";");
|
||||
temp.add(positionDTO);
|
||||
}
|
||||
}
|
||||
|
||||
if (Objects.nonNull(queryDTO.getLongitude()) && Objects.nonNull(queryDTO.getLatitude()) && temp.size() > 0) {
|
||||
if (to.length() >= 2 && to.charAt(to.length() - 1) == ';') {
|
||||
to.deleteCharAt(to.length() - 1);
|
||||
}
|
||||
AlitaResult<TencentWsDistanceV1MatrixResDTO> walkingRes = tencentMapContext.wsDistanceV1MatrixReqDTO(TencentMapWsDistanceV1MatrixReqDTO.builder()
|
||||
.from(queryDTO.getLatitude().toPlainString() + "," + queryDTO.getLongitude().toPlainString())
|
||||
.to(to.toString())
|
||||
.mode("walking")
|
||||
.build());
|
||||
if (Boolean.TRUE.equals(walkingRes.getSuccess())) {
|
||||
if (Objects.nonNull(walkingRes.getData())) {
|
||||
TencentWsDistanceV1MatrixResDTO result = walkingRes.getData();
|
||||
List<TencentWsDistanceV1MatrixElementsRowResDTO> rows = result.getRows();
|
||||
List<TencentWsDistanceV1MatrixElementsResDTO> elements = rows.get(0).getElements();
|
||||
for (int i = 0; i < temp.size(); i++) {
|
||||
PositionDTO positionDTOTemp = temp.get(i);
|
||||
PositionDTO positionDTOFinal = list.stream().filter(positionDTO -> positionDTO.getId().longValue() == positionDTOTemp.getId().longValue()).findFirst().orElse(null);
|
||||
positionDTOFinal.setDistance(elements.get(i).getDistance());
|
||||
if (positionDTOFinal.getDistance().longValue() <= Long.valueOf(queryDTO.getRadius()*1000).longValue()) {
|
||||
positionDTOResultList.add(positionDTOFinal);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return positionDTOResultList.stream().sorted(Comparator.comparingLong(PositionDTO::getDistance)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void export(PositionPageQueryDTO queryDTO) {
|
||||
boolean flag = true;
|
||||
Integer pageNo = 1;
|
||||
Integer pageSize = 100;
|
||||
|
||||
List<PositionDTO> listAll = new ArrayList<>();
|
||||
|
||||
while (flag) {
|
||||
queryDTO.setPageNo(pageNo);
|
||||
queryDTO.setPageSize(pageSize);
|
||||
List<PositionDTO> list = this.page(queryDTO);
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(list)) {
|
||||
flag = false;
|
||||
continue;
|
||||
}
|
||||
if (list.size() < pageSize) {
|
||||
flag = false;
|
||||
}
|
||||
pageNo = pageNo + 1;
|
||||
listAll.addAll(list);
|
||||
}
|
||||
List<PositionExportDTO> collect = listAll.stream().map(dto -> {
|
||||
PositionExportDTO exportDTO = new PositionExportDTO();
|
||||
BeanUtils.copyProperties(dto, exportDTO);
|
||||
exportDTO.setCreateTime(DateUtil.format(dto.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||
exportDTO.setStatus(DictUtils.getCodeNameMap("position_status").get(String.valueOf(dto.getStatus())));
|
||||
exportDTO.setSalary(dto.getSalaryStr());
|
||||
return exportDTO;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(collect)) {
|
||||
return;
|
||||
}
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
String fileName = "岗位明细导出" + "(" + formatter.format(LocalDateTime.now()) + ")";
|
||||
|
||||
ExportHeadInfoDTO infoDTO = ExportHeadInfoDTO.builder()
|
||||
.fileName(fileName)
|
||||
.build();
|
||||
List<ExportHeadDetailInfoDTO> heads = infoDTO.getHeads();
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘岗位类型").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位名称").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("用工企业").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位状态").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘人数").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("综合薪资").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作地址").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("创建时间").build());
|
||||
|
||||
List<List> datas = Lists.newArrayList();
|
||||
for (PositionExportDTO dto : collect) {
|
||||
List objects = Lists.newArrayList();
|
||||
datas.add(objects);
|
||||
objects.add(dto.getRecruitPositionTypeName());
|
||||
objects.add(dto.getPositionName());
|
||||
objects.add(dto.getCompanyName());
|
||||
objects.add(dto.getStatus());
|
||||
objects.add(dto.getPositionNumber());
|
||||
objects.add(dto.getSalary());
|
||||
objects.add(dto.getPositionAddress());
|
||||
objects.add(dto.getCreateTime());
|
||||
}
|
||||
infoDTO.setDatas(datas);
|
||||
|
||||
ExcelUtil.dynamicExportTemplate(infoDTO);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void modifyStatus(PositionOperatorDTO dto) {
|
||||
if (CollectionUtils.isEmpty(dto.getIds())) {
|
||||
throw new BusinessException("请选择数据");
|
||||
}
|
||||
Assert.notNull(dto.getStatus(), "请选择状态");
|
||||
LambdaQueryWrapper<Position> queryWrapper = new LambdaQueryWrapper<Position>()
|
||||
.in(Position::getId, dto.getIds())
|
||||
.eq(Position::getDeleted, false);
|
||||
|
||||
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
|
||||
queryWrapper.eq(Position::getOrgId, UserContextHolder.getExistLoginOrgId());
|
||||
}
|
||||
|
||||
Integer count = positionMapper.selectCount(queryWrapper);
|
||||
Assert.isTrue(count == dto.getIds().size(), "网络异常,请刷新后再试");
|
||||
|
||||
List<Position> positions = new ArrayList<>();
|
||||
for (Long id : dto.getIds()) {
|
||||
Position position = new Position();
|
||||
position.setId(id);
|
||||
position.setStatus(dto.getStatus());
|
||||
positions.add(position);
|
||||
}
|
||||
positionMapper.updateEntitysSelective(positions, UserContextHolder.getExistLoginUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void template() {
|
||||
ExportHeadInfoDTO infoDTO = ExportHeadInfoDTO.builder()
|
||||
.fileName("岗位导入模板")
|
||||
.build();
|
||||
List<ExportHeadDetailInfoDTO> heads = infoDTO.getHeads();
|
||||
|
||||
List<String> companyNameList = Optional.ofNullable(hrCompanyService.list(HrCompanyPageQueryDTO.builder().companyTypes(Arrays.asList(HrCompanyEnum.KH.getType(), HrCompanyEnum.SELF.getType())).build()))
|
||||
.map(list -> list.stream().map(HrCompanyDTO::getCompanyName).collect(Collectors.toList()))
|
||||
.orElse(new ArrayList<>());
|
||||
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("用工企业(必填)").explicitList(companyNameList).build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位名称(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘标题(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("招聘人数").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作地址(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作性质(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位类型").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("岗位标签").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("综合薪资(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("发薪日").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("性别(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("年龄(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("学历(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("经验(必填)").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("证件").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("其它").build());
|
||||
heads.add(ExportHeadDetailInfoDTO.builder().head("工作内容(必填)").build());
|
||||
|
||||
ExcelUtil.dynamicExportTemplate(infoDTO);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public Long copy(Long id) {
|
||||
PositionDTO oldPositionDTO = this.findById(id);
|
||||
if (Objects.isNull(oldPositionDTO)) {
|
||||
throw new BusinessException("未查询到岗位信息");
|
||||
}
|
||||
PositionOperatorDTO positionOperatorDTO = new PositionOperatorDTO();
|
||||
BeanUtils.copyProperties(oldPositionDTO, positionOperatorDTO);
|
||||
positionOperatorDTO.setPositionName(String.format("%s复制%s", RandomUtil.randomString(3), StringUtils.substring(oldPositionDTO.getPositionName(), 0, 45)));
|
||||
PositionDTO newPosition = ((PositionServiceImpl) AopContext.currentProxy()).create(positionOperatorDTO);
|
||||
|
||||
List<PositionFileDTO> oldPositionFileDTOS = positionFileService.filePage(PositionFilePageQueryDTO.builder().positionId(id).build());
|
||||
for (PositionFileDTO oldPositionFileDTO : oldPositionFileDTOS) {
|
||||
PositionFileDTO positionFileDTO = new PositionFileDTO();
|
||||
BeanUtils.copyProperties(oldPositionFileDTO, positionFileDTO);
|
||||
positionFileDTO.setPositionId(newPosition.getId());
|
||||
positionFileService.create(positionFileDTO);
|
||||
}
|
||||
return newPosition.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionDTO> personPostMatching(Long id) {
|
||||
JobExpectDTO jobExpectDTO = jobExpectService.find(JobExpectQueryDTO.builder().id(id).userId(UserContextHolder.getLoginUserId()).build());
|
||||
if (Objects.isNull(jobExpectDTO)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
UserDTO userDTO = userService.get(UserContextHolder.getExistLoginUserId());
|
||||
ResumeDTO resumeDTO = Optional.ofNullable(resumeService.userFind()).orElse(new ResumeDTO());
|
||||
|
||||
PersonPostMatchingQueryDTO queryDTO = new PersonPostMatchingQueryDTO();
|
||||
queryDTO.setPageNo(1);
|
||||
queryDTO.setPageSize(100);
|
||||
|
||||
queryDTO.setPositionNameLike(jobExpectDTO.getPositionName());
|
||||
queryDTO.setPositionType(jobExpectDTO.getTypeCode());
|
||||
queryDTO.setDetailAddressLike(jobExpectDTO.getExpectCityName());
|
||||
queryDTO.setSalary(jobExpectDTO.getExpectSalary());
|
||||
queryDTO.setSexRequire(Objects.isNull(userDTO.getGender()) ? null : String.valueOf(userDTO.getGender()));
|
||||
queryDTO.setAge(Objects.isNull(userDTO.getBirthday()) ? null : DateUtil.ageOfNow(userDTO.getBirthday()));
|
||||
queryDTO.setEducationRequire(resumeDTO.getEducation());
|
||||
List<PositionDTO> positionDTOS = positionMapper.personPostMatching(queryDTO);
|
||||
|
||||
if (CollectionUtils.isEmpty(positionDTOS)) {
|
||||
//岗位类型> 工作地 > 学历 / 年龄 / 薪酬 / 性别 / 经验 从右往左递减吧
|
||||
//岗位名称> 岗位类型> 工作地 > 学历 / 年龄 / 薪酬 / 性别 / 经验
|
||||
for (int i = 2; i <= 7; i++) {
|
||||
if (i == 2) {
|
||||
queryDTO.setSexRequire(null);
|
||||
positionDTOS = positionMapper.personPostMatching(queryDTO);
|
||||
if (CollectionUtils.isNotEmpty(positionDTOS)) {
|
||||
break;
|
||||
}
|
||||
} else if (i == 3) {
|
||||
queryDTO.setSalary(null);
|
||||
positionDTOS = positionMapper.personPostMatching(queryDTO);
|
||||
if (CollectionUtils.isNotEmpty(positionDTOS)) {
|
||||
break;
|
||||
}
|
||||
} else if (i == 4) {
|
||||
queryDTO.setAge(null);
|
||||
positionDTOS = positionMapper.personPostMatching(queryDTO);
|
||||
if (CollectionUtils.isNotEmpty(positionDTOS)) {
|
||||
break;
|
||||
}
|
||||
} else if (i == 5) {
|
||||
queryDTO.setEducationRequire(null);
|
||||
positionDTOS = positionMapper.personPostMatching(queryDTO);
|
||||
if (CollectionUtils.isNotEmpty(positionDTOS)) {
|
||||
break;
|
||||
}
|
||||
} else if (i == 6) {
|
||||
queryDTO.setDetailAddressLike(null);
|
||||
positionDTOS = positionMapper.personPostMatching(queryDTO);
|
||||
if (CollectionUtils.isNotEmpty(positionDTOS)) {
|
||||
break;
|
||||
}
|
||||
} else if (i == 7) {
|
||||
queryDTO.setPositionType(null);
|
||||
positionDTOS = positionMapper.personPostMatching(queryDTO);
|
||||
if (CollectionUtils.isNotEmpty(positionDTOS)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (PositionDTO positionDTO : positionDTOS) {
|
||||
positionDTO.setRecruitPositionTypeName(DictUtils.getCodeNameMap("recruit_position_type").get(positionDTO.getRecruitPositionType()));
|
||||
}
|
||||
return positionDTOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void positionExpiry() {
|
||||
positionMapper.positionExpiry();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.newyetai.recruit.position.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
|
||||
import com.newyetai.common.util.TreeHelper;
|
||||
import com.newyetai.recruit.position.dao.PositionTypeMapper;
|
||||
import com.newyetai.recruit.position.dto.PositionTypeDTO;
|
||||
import com.newyetai.recruit.position.dto.PositionTypeQueryDTO;
|
||||
import com.newyetai.recruit.position.service.PositionTypeService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class PositionTypeServiceImpl implements PositionTypeService {
|
||||
|
||||
@Autowired
|
||||
private RedisTemplate redisTemplate;
|
||||
|
||||
@Resource
|
||||
private PositionTypeMapper positionTypeMapper;
|
||||
|
||||
private Long maxFirst = 1L;
|
||||
private Map<Long, Long> maxSecond = Maps.newConcurrentMap();
|
||||
private Map<Long, Long> maxThree = Maps.newConcurrentMap();
|
||||
|
||||
@Override
|
||||
public List<PositionTypeDTO> batchCreate(List<PositionTypeDTO> positionTypeDTOS) {
|
||||
// List<PositionTypeDTO> allCreateTypes = needCreate(positionTypeDTOS);
|
||||
// //select db
|
||||
// List<PositionTypeDTO> currentTypes = Lists.newArrayList();
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionTypeDTO> query(PositionTypeQueryDTO queryDTO) {
|
||||
List<PositionTypeDTO> types = positionTypeMapper.queryByDto(queryDTO);
|
||||
List<PositionTypeDTO> positionTypeDTOS = TreeHelper.buildTree(0L, types);
|
||||
String nameLike = queryDTO.getNameLike();
|
||||
if (StrUtil.isNotEmpty(nameLike)) {
|
||||
List<PositionTypeDTO> typesTemp = Lists.newLinkedList();
|
||||
for (PositionTypeDTO type : positionTypeDTOS) {
|
||||
if (handler(queryDTO, type)) {
|
||||
typesTemp.add(type);
|
||||
}
|
||||
}
|
||||
positionTypeDTOS = typesTemp;
|
||||
}
|
||||
return positionTypeDTOS;
|
||||
}
|
||||
|
||||
public Boolean handler(PositionTypeQueryDTO queryDTO, PositionTypeDTO type) {
|
||||
Boolean contain = Boolean.FALSE;
|
||||
String nameLike = queryDTO.getNameLike();
|
||||
if (StrUtil.containsIgnoreCase(type.getName(), nameLike)) {
|
||||
contain = Boolean.TRUE;
|
||||
}
|
||||
List<PositionTypeDTO> childrenSet = type.getChildrenSet();
|
||||
if (CollUtil.isNotEmpty(childrenSet)) {
|
||||
List<PositionTypeDTO> typesTemp = Lists.newLinkedList();
|
||||
for (PositionTypeDTO positionTypeDTO : childrenSet) {
|
||||
Boolean handler = handler(queryDTO, positionTypeDTO);
|
||||
contain |= handler;
|
||||
if (handler) {
|
||||
typesTemp.add(positionTypeDTO);
|
||||
}
|
||||
}
|
||||
type.setChildrenSet(typesTemp);
|
||||
}
|
||||
return contain;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user