This commit is contained in:
ran.shang
2025-06-11 09:42:13 +08:00
commit 7e38b8d971
1935 changed files with 132836 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
package com.newyetai.recruit.company.constant;
/**
* @description:
* @author: guixinman
* @create: 2023-02-27 14:29
**/
public interface CompanyConstants {
/**
* 岗位文件类型 1:图片 2:视频
*/
String COMPANY_FILE_TYPE_IMG = "1";
String COMPANY_FILE_TYPE_VIDEO = "2";
}

View File

@@ -0,0 +1,102 @@
package com.newyetai.recruit.company.controller;
import com.newyetai.common.AlitaResult;
import com.newyetai.common.validation.Create;
import com.newyetai.common.validation.Update;
import com.newyetai.recruit.company.dto.HrCompanyDTO;
import com.newyetai.recruit.company.dto.HrCompanyPageQueryDTO;
import com.newyetai.recruit.company.entity.HrCompany;
import com.newyetai.recruit.company.service.IHrCompanyService;
import com.newyetai.tkmybatis.pojo.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 招聘系统-企业管理 前端控制器
* </p>
*
* @author chenyun
* @since 2021-01-08
*/
@Api(tags = "企业管理信息")
@RestController
@RequestMapping("/company")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class HrCompanyController {
private final IHrCompanyService companyService;
/**
* 创建
*/
@PostMapping("/create")
@ApiOperation("创建企业信息")
public AlitaResult<Void> create(@Validated(Create.class) @RequestBody HrCompanyDTO hrCompanyDTO) {
companyService.create(hrCompanyDTO);
return AlitaResult.success();
}
/**
* 修改
*/
@PutMapping("/update")
@ApiOperation("修改企业信息")
public AlitaResult<Integer> update(
@Validated(Update.class) @RequestBody HrCompanyDTO hrCompanyDTO) {
return AlitaResult.success(companyService.update(hrCompanyDTO));
}
/**
* 详情
*/
@GetMapping("/detail")
@ApiOperation("企业信息详情")
public AlitaResult<HrCompanyDTO> detail(HrCompanyDTO hrCompanyDTO) {
return AlitaResult.success(companyService.detail(hrCompanyDTO));
}
/**
* 分页查询
*/
@GetMapping("/page")
@ApiOperation("分页查询")
public AlitaResult<Page<HrCompanyDTO>> page(@Validated HrCompanyPageQueryDTO queryDTO) {
queryDTO.check();
companyService.page(queryDTO);
return AlitaResult.success(queryDTO.getPageResult());
}
/**
* 不分页查询
*/
@GetMapping("/list")
@ApiOperation("不分页查询")
public AlitaResult<List<HrCompanyDTO>> list(@Validated HrCompanyPageQueryDTO queryDTO) {
queryDTO.check();
return AlitaResult.success(companyService.list(queryDTO));
}
@GetMapping("/export")
@ApiOperation("导出")
public void export(@Validated HrCompanyPageQueryDTO queryDTO) {
queryDTO.check();
companyService.export(queryDTO);
}
@GetMapping("/{id}")
@ApiOperation("查询单个")
public AlitaResult<HrCompany> findById(@PathVariable("id") Long id) {
return AlitaResult.success(companyService.findById(id));
}
}

View File

@@ -0,0 +1,25 @@
package com.newyetai.recruit.company.dao;
import com.newyetai.recruit.company.dto.HrCompanyDTO;
import com.newyetai.recruit.company.dto.HrCompanyPageQueryDTO;
import com.newyetai.recruit.company.entity.HrCompany;
import com.newyetai.tkmybatis.mybatis.MyMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* <p>
* 招聘系统-企业信息表 Mapper 接口
* </p>
*
* @author chenyun
* @since 2021-01-08
*/
@Mapper
public interface HrCompanyMapper extends MyMapper<HrCompany> {
List<HrCompanyDTO> page(HrCompanyPageQueryDTO hrCompanyPageQueryDTO);
}

View File

@@ -0,0 +1,88 @@
package com.newyetai.recruit.company.dto;
import com.newyetai.common.dto.BaseDTO;
import com.newyetai.common.validation.Create;
import com.newyetai.common.validation.Update;
import org.hibernate.validator.constraints.Length;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotNull;
/**
* 人力资源公司dto
*
* @author Carlye
* @date 2021/01/08
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("招聘系统客户信息DTO")
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class HrCompanyDTO extends BaseDTO {
private static final long serialVersionUID = -2216352275325005059L;
@ApiModelProperty("机构ID")
private Long orgId;
@ApiModelProperty("统一社会信用代码")
private String creditCode;
@ApiModelProperty("企业LOGO FileRecord")
private String companyLogo;
@ApiModelProperty("名称")
@NotNull(message = "名称不能为空", groups = {Create.class, Update.class})
@Length(max = 32,message = "名称超长", groups = {Create.class, Update.class})
private String companyName;
@ApiModelProperty("机构名称")
private String orgName;
@ApiModelProperty("联系人")
@Length(max = 20,message = "联系人长度超长", groups = {Create.class, Update.class})
private String contactPerson;
@Length(max = 50,message = "联系方式长度超长", groups = {Create.class, Update.class})
@ApiModelProperty("联系方式")
private String contactWay;
@Length(max = 100,message = "企业简介长度超长", groups = {Create.class, Update.class})
@ApiModelProperty("公司简介")
private String companyProfile;
@ApiModelProperty("公司描述")
private String companyDescription;
@ApiModelProperty("行业 (数据字典)")
private String companyIndustry;
@ApiModelProperty("规模 (数据字典)")
private String companySize;
@ApiModelProperty("公司注册地址")
@Length(max = 32,message = "企业地址长度超长", groups = {Create.class, Update.class})
private String companyRegisterAddress;
@ApiModelProperty("省份 (数据字典)")
private Integer province;
@ApiModelProperty("市 (数据字典)")
private Integer city;
@ApiModelProperty("区 (数据字典)")
private Integer district;
/**
* 类型(数据字典 1.客户 2.供应商)
*/
@NotNull(message = "类型不能为空", groups = {Create.class, Update.class})
private String companyType;
}

View File

@@ -0,0 +1,54 @@
package com.newyetai.recruit.company.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 15:03
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class HrCompanyExportDTO implements Serializable {
@ExcelProperty("名称")
@ApiModelProperty("名称")
private String companyName;
@ExcelProperty("行业")
@ApiModelProperty("行业 (数据字典)")
private String companyIndustry;
@ExcelProperty("规模")
@ApiModelProperty("规模 (数据字典)")
private String companySize;
@ExcelProperty("联系人")
@ApiModelProperty("联系人")
private String contactPerson;
@ExcelProperty("联系方式")
@ApiModelProperty("联系方式")
private String contactWay;
@ExcelProperty("公司简介")
@ApiModelProperty("公司简介")
private String companyProfile;
@ExcelProperty("公司描述")
@ApiModelProperty("公司描述")
private String companyDescription;
@ExcelProperty("创建时间")
private String createTime;
}

View File

@@ -0,0 +1,113 @@
package com.newyetai.recruit.company.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.newyetai.common.dto.PageQueryDTO;
import com.newyetai.common.exception.BusinessException;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.NotNull;
/**
* 人力资源公司dto
*
* @author Carlye
* @date 2021/01/08
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("招聘系统客户信息DTO")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class HrCompanyPageQueryDTO extends PageQueryDTO<HrCompanyDTO> {
private static final long serialVersionUID = -2216352275325005059L;
private Long id;
@ApiModelProperty("机构ID")
private Long orgId;
@ApiModelProperty("统一社会信用代码")
private String creditCode;
@ApiModelProperty("企业LOGO FileRecord")
private String companyLogo;
@ApiModelProperty("公司名称")
private String companyName;
@ApiModelProperty("联系人")
private String contactPerson;
@ApiModelProperty("联系方式")
private String contactWay;
@ApiModelProperty("公司简介")
private String companyProfile;
@ApiModelProperty("公司描述")
private String companyDescription;
@ApiModelProperty("行业 (数据字典)")
private String companyIndustry;
@ApiModelProperty("规模 (数据字典)")
private String companySize;
@ApiModelProperty("公司注册地址")
private String companyRegisterAddress;
@ApiModelProperty("省份 (数据字典)")
private Integer province;
@ApiModelProperty("市 (数据字典)")
private Integer city;
@ApiModelProperty("区 (数据字典)")
private Integer district;
/**
* 类型(数据字典 1.客户 2.供应商)
*/
private String companyType;
private List<String> companyTypes;
@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;
public void check(){
if (StringUtils.isBlank(companyType) && CollectionUtils.isEmpty(companyTypes)) {
throw new BusinessException("请选择类型");
}
}
}

View File

@@ -0,0 +1,102 @@
package com.newyetai.recruit.company.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.newyetai.common.entity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* <p>
* 招聘系统-企业信息表
* </p>
*
* @author chenyun
* @since 2021-01-08
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "hr_company")
@Builder
public class HrCompany extends BaseEntity {
private static final long serialVersionUID = -7847448702358215622L;
/**
* 机构ID
*/
private Long orgId;
/**
* 统一社会信用代码
*/
private String creditCode;
/**
* 企业LOGO FileRecord
*/
private String companyLogo;
/**
* 公司名称
*/
private String companyName;
/**
* 联系人(负责人)
*/
private String contactPerson;
/**
* 联系方式
*/
private String contactWay;
/**
* 公司简介
*/
private String companyProfile;
/**
* 公司描述
*/
private String companyDescription;
/**
* 行业 (数据字典)
*/
private String companyIndustry;
/**
* 规模 (数据字典)
*/
private String companySize;
/**
* 公司注册地址
*/
private String companyRegisterAddress;
/**
* 省份 (数据字典)
*/
private Integer province;
/**
* 市 (数据字典)
*/
private Integer city;
/**
* 区 (数据字典)
*/
private Integer district;
/**
* 类型(数据字典 1.客户 2.供应商)
*/
private String companyType;
}

View File

@@ -0,0 +1,28 @@
package com.newyetai.recruit.company.enums;
public enum HrCompanyEnum {
KH("1","客户"),
GYS("2","供应商"),
SELF("3", "机构本身"),
;
private String type;
/**
* 类型描述
*/
private String desc;
HrCompanyEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
}

View File

@@ -0,0 +1,62 @@
<?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.company.dao.HrCompanyMapper">
<sql id="orgRelationTail">
(select org_id
from uc_org_relation
where deleted = 0
and platform_code = 13
<if test='parentOrgId != null'>
and FIND_IN_SET(#{parentOrgId}, path)
</if>
<if test='orgId != null'>
and FIND_IN_SET(#{orgId}, path)
</if>
)
</sql>
<select id="page" resultType="com.newyetai.recruit.company.dto.HrCompanyDTO">
select hc.*,o.org_name
from hr_company hc
left join xs_org o on o.id = hc.org_id and o.deleted = 0
where hc.deleted = 0
<if test='id != null'>
AND hc.id = #{id}
</if>
<if test='orgId != null'>
AND hc.org_id = #{orgId}
</if>
<if test='companyName != null and companyName.trim() != ""'>
<bind name="companyNameLike" value="'%' + companyName + '%'"/>
AND hc.company_name like #{companyNameLike}
</if>
<if test='companySize != null and companySize.trim() != ""'>
AND hc.company_size = #{companySize}
</if>
<if test='contactPerson != null and contactPerson.trim() != ""'>
AND hc.contact_person = #{contactPerson}
</if>
<if test='companyIndustry != null and companyIndustry.trim() != ""'>
AND hc.company_industry = #{companyIndustry}
</if>
<if test='createTimeStart != null'>
AND hc.create_time &gt;= #{createTimeStart}
</if>
<if test='createTimeEnd != null'>
AND hc.create_time &lt;= #{createTimeEnd}
</if>
<if test='companyType != null and companyType.trim() != ""'>
AND hc.company_type = #{companyType}
</if>
<if test="companyTypes != null and companyTypes.size()>0">
AND hc.company_type in
<foreach collection="companyTypes" open="(" separator="," close=")" item="item">
#{item}
</foreach>
</if>
order by hc.company_type desc, hc.id desc
</select>
</mapper>

View File

@@ -0,0 +1,23 @@
package com.newyetai.recruit.company.mapstruct;
import com.newyetai.recruit.company.dto.HrCompanyDTO;
import com.newyetai.recruit.company.entity.HrCompany;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* dto-entity
*
* @author sr on 2019-12-17
*/
@Mapper
public interface HrCompanyMapMapper {
HrCompanyMapMapper INSTANCE = Mappers.getMapper(HrCompanyMapMapper.class);
HrCompanyDTO exchange(HrCompany company);
HrCompany exchange(HrCompanyDTO hrCompanyDTO);
}

View File

@@ -0,0 +1,64 @@
package com.newyetai.recruit.company.service;
import com.newyetai.recruit.company.dto.HrCompanyDTO;
import com.newyetai.recruit.company.dto.HrCompanyPageQueryDTO;
import com.newyetai.recruit.company.entity.HrCompany;
import java.util.List;
/**
* <p>
* 招聘系统-客户信息表 服务类
* </p>
*
* @author chenyun
* @since 2021-01-08
*/
public interface IHrCompanyService {
/**
* 创建
*
* @param hrCompanyDTO 人力资源公司dto
* @return {@link HrCompanyDTO}
* @throws RuntimeException 运行时异常
*/
void create(HrCompanyDTO hrCompanyDTO);
/**
* 更新
*
* @param hrCompanyDTO 人力资源公司dto
* @return {@link HrCompanyDTO}
* @throws RuntimeException 运行时异常
*/
Integer update(HrCompanyDTO hrCompanyDTO);
/**
* 细节
*
* @param hrCompanyDTO 人力资源公司dto
* @return {@link HrCompanyDTO}
*/
HrCompanyDTO detail(HrCompanyDTO hrCompanyDTO);
/**
* 分页查询
*
* @param pageQueryDTO 页面查询dto
* @return {@link List< HrCompanyDTO >}
*/
List<HrCompanyDTO> page(HrCompanyPageQueryDTO pageQueryDTO);
void export(HrCompanyPageQueryDTO pageQueryDTO);
/**
* 不分页查询
*/
List<HrCompanyDTO> list(HrCompanyPageQueryDTO pageQueryDTO);
HrCompany findById(Long id);
HrCompanyDTO find(HrCompanyPageQueryDTO pageQueryDTO);
}

View File

@@ -0,0 +1,226 @@
package com.newyetai.recruit.company.service.impl;
import com.google.common.collect.Lists;
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.UserContextHolder;
import com.newyetai.recruit.company.dao.HrCompanyMapper;
import com.newyetai.recruit.company.dto.HrCompanyDTO;
import com.newyetai.recruit.company.dto.HrCompanyExportDTO;
import com.newyetai.recruit.company.dto.HrCompanyPageQueryDTO;
import com.newyetai.recruit.company.entity.HrCompany;
import com.newyetai.recruit.company.enums.HrCompanyEnum;
import com.newyetai.recruit.company.mapstruct.HrCompanyMapMapper;
import com.newyetai.recruit.company.service.IHrCompanyService;
import com.newyetai.component.dict.util.DictUtils;
import cn.hutool.core.date.DateUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 招聘系统-企业信息表 服务实现类
*/
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class HrCompanyServiceImpl implements IHrCompanyService {
private final HrCompanyMapper hrCompanyMapper;
@Override
public void create(HrCompanyDTO hrCompanyDTO) {
List<HrCompany> HrCompanyList = hrCompanyMapper.selectList(new LambdaQueryWrapper<HrCompany>()
.eq(HrCompany::getOrgId, UserContextHolder.getLoginOrgId())
.eq(HrCompany::getCompanyName, hrCompanyDTO.getCompanyName())
.eq(HrCompany::getCompanyType, hrCompanyDTO.getCompanyType())
.eq(HrCompany::getDeleted, false)
);
if (CollectionUtils.isNotEmpty(HrCompanyList)) {
throw new BusinessException("名称重复");
}
HrCompany HrCompany = HrCompanyMapMapper.INSTANCE.exchange(hrCompanyDTO);
HrCompany.setOrgId(UserContextHolder.getLoginOrgId());
hrCompanyMapper.saveEntity(HrCompany, UserContextHolder.getLoginUserId());
}
@Override
public Integer update(HrCompanyDTO hrCompanyDTO) {
HrCompany hrCompany = hrCompanyMapper.selectOne(new LambdaQueryWrapper<HrCompany>()
.eq(HrCompany::getId, hrCompanyDTO.getId())
.eq(HrCompany::getDeleted, false));
Assert.notNull(hrCompany, "未查询到要修改的数据");
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
Assert.isTrue(hrCompany.getOrgId().equals(UserContextHolder.getExistLoginOrgId()), "未查询到要修改的数据");
}
List<HrCompany> HrCompanyList = hrCompanyMapper.selectList(new LambdaQueryWrapper<HrCompany>()
.eq(HrCompany::getOrgId, hrCompany.getOrgId())
.eq(HrCompany::getCompanyName, hrCompanyDTO.getCompanyName())
.eq(HrCompany::getCompanyType, hrCompanyDTO.getCompanyType())
.notIn(HrCompany::getId, hrCompanyDTO.getId())
.eq(HrCompany::getDeleted, false)
);
if (CollectionUtils.isNotEmpty(HrCompanyList)) {
throw new BusinessException("名称重复");
}
HrCompany HrCompany = HrCompanyMapMapper.INSTANCE.exchange(hrCompanyDTO);
HrCompany.setOrgId(hrCompany.getOrgId());
return hrCompanyMapper.updateEntity(HrCompany, UserContextHolder.getLoginUserId());
}
@Override
public HrCompanyDTO detail(HrCompanyDTO hrCompanyDTO) {
return HrCompanyMapMapper.INSTANCE.exchange(hrCompanyMapper.getById(hrCompanyDTO.getId()));
}
@Override
public List<HrCompanyDTO> page(HrCompanyPageQueryDTO pageQueryDTO) {
if (pageQueryDTO.getOrgId() == null) {
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
pageQueryDTO.setOrgId(UserContextHolder.getLoginOrgId());
}
}
return hrCompanyMapper.page(pageQueryDTO);
}
@Override
public void export(HrCompanyPageQueryDTO pageQueryDTO) {
boolean flag = true;
Integer pageNo = 1;
Integer pageSize = 100;
List<HrCompanyDTO> listAll = new ArrayList<>();
while (flag) {
pageQueryDTO.setPageNo(pageNo);
pageQueryDTO.setPageSize(pageSize);
List<HrCompanyDTO> list = this.page(pageQueryDTO);
if (org.springframework.util.CollectionUtils.isEmpty(list)) {
flag = false;
continue;
}
if (list.size() < pageSize) {
flag = false;
}
pageNo = pageNo + 1;
listAll.addAll(list);
}
List<HrCompanyExportDTO> collect = listAll.stream().map(dto -> {
HrCompanyExportDTO companyExportDTO = new HrCompanyExportDTO();
BeanUtils.copyProperties(dto, companyExportDTO);
companyExportDTO.setCreateTime(DateUtil.format(dto.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
companyExportDTO.setCompanyIndustry(DictUtils.getCodeNameMap("industry_type").get(dto.getCompanyIndustry()));
companyExportDTO.setCompanySize(DictUtils.getCodeNameMap("company_size").get(dto.getCompanySize()));
return companyExportDTO;
}).collect(Collectors.toList());
if (org.springframework.util.CollectionUtils.isEmpty(collect)) {
return;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String fileName;
if (pageQueryDTO.getCompanyType().equals(HrCompanyEnum.KH.getType())) {
fileName = HrCompanyEnum.KH.getDesc() + "明细导出" + "(" + formatter.format(LocalDateTime.now()) + ")";
} else {
fileName = HrCompanyEnum.GYS.getDesc() + "明细导出" + "(" + formatter.format(LocalDateTime.now()) + ")";
}
ExportHeadInfoDTO infoDTO = ExportHeadInfoDTO.builder()
.fileName(fileName)
.build();
List<ExportHeadDetailInfoDTO> heads = infoDTO.getHeads();
List<List> datas = Lists.newArrayList();
if (pageQueryDTO.getCompanyType().equals(HrCompanyEnum.KH.getType())) {
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 (HrCompanyExportDTO dto : collect) {
List objects = Lists.newArrayList();
datas.add(objects);
objects.add(dto.getCompanyName());
objects.add(dto.getCompanyIndustry());
objects.add(dto.getCompanySize());
objects.add(dto.getContactPerson());
objects.add(dto.getContactWay());
objects.add(dto.getCreateTime());
}
} else {
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 (HrCompanyExportDTO dto : collect) {
List objects = Lists.newArrayList();
datas.add(objects);
objects.add(dto.getCompanyName());
objects.add(dto.getCompanySize());
objects.add(dto.getContactPerson());
objects.add(dto.getContactWay());
objects.add(dto.getCreateTime());
}
}
infoDTO.setDatas(datas);
ExcelUtil.dynamicExportTemplate(infoDTO);
}
@Override
public List<HrCompanyDTO> list(HrCompanyPageQueryDTO pageQueryDTO) {
pageQueryDTO.disablePage();
return this.page(pageQueryDTO);
}
@Override
public HrCompany findById(Long id) {
Assert.notNull(id, "id不能为空");
LambdaQueryWrapper<HrCompany> queryWrapper = new LambdaQueryWrapper<HrCompany>()
.eq(HrCompany::getId, id)
.eq(HrCompany::getDeleted, false);
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
queryWrapper.eq(HrCompany::getOrgId, UserContextHolder.getLoginOrgId());
}
HrCompany hrCompany = hrCompanyMapper.selectOne(queryWrapper);
return hrCompany;
}
@Override
public HrCompanyDTO find(HrCompanyPageQueryDTO pageQueryDTO) {
pageQueryDTO.disablePage();
List<HrCompanyDTO> hrCompanyDTOS = this.page(pageQueryDTO);
if (CollectionUtils.isEmpty(hrCompanyDTOS)) {
return null;
}
return hrCompanyDTOS.get(0);
}
}

View File

@@ -0,0 +1,67 @@
package com.newyetai.recruit.device.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.device.dto.*;
import com.newyetai.recruit.device.service.DeviceService;
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 2025-01-14
*/
@Api(tags = "设备")
@RestController
@RequestMapping("/device/")
public class DeviceController {
@Autowired
private DeviceService deviceService;
@PostMapping("create")
@ApiOperation("设备-创建")
public AlitaResult<DeviceDTO> create(@RequestBody @Validated DeviceOperatorDTO operatorDTO) {
return AlitaResult.success(deviceService.create(operatorDTO));
}
@PutMapping("modify")
@ApiOperation("设备-修改")
public AlitaResult<DeviceDTO> modify(@RequestBody DeviceOperatorDTO operatorDTO) {
return AlitaResult.success(deviceService.modify(operatorDTO));
}
@DeleteMapping("{id}")
@ApiOperation("设备-删除")
public AlitaResult<DeviceDTO> delete(@PathVariable("id") Long id) {
return AlitaResult.success(deviceService.delete(id));
}
@GetMapping("{id}")
@ApiOperation("设备-查询单个")
public AlitaResult<DeviceDTO> findById(@PathVariable("id") Long id) {
return AlitaResult.success(deviceService.findById(id));
}
@GetMapping("list")
@ApiOperation("设备-列表查询")
public AlitaResult<List<DeviceDTO>> list(DeviceQueryDTO queryDTO) {
return AlitaResult.success(deviceService.list(queryDTO));
}
@GetMapping("page")
@ApiOperation("设备-分页查询")
public AlitaResult<Page<DeviceDTO>> page(DevicePageQueryDTO queryDTO) {
deviceService.page(queryDTO);
return AlitaResult.success(queryDTO.getPageResult());
}
}

View File

@@ -0,0 +1,28 @@
package com.newyetai.recruit.device.convert;
import com.newyetai.recruit.device.entity.Device;
import com.newyetai.recruit.device.dto.DeviceDTO;
import com.newyetai.recruit.device.dto.DeviceOperatorDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@Mapper
public interface DeviceConvert {
DeviceConvert INSTANCE = Mappers.getMapper(DeviceConvert.class);
Device convert(DeviceDTO dto);
DeviceDTO convert(Device entity);
Device convert(DeviceOperatorDTO dto);
}

View File

@@ -0,0 +1,26 @@
package com.newyetai.recruit.device.dao;
import com.newyetai.tkmybatis.mybatis.MyMapper;
import com.newyetai.recruit.device.entity.Device;
import com.newyetai.recruit.device.dto.DeviceDTO;
import com.newyetai.recruit.device.dto.DeviceQueryDTO;
import com.newyetai.recruit.device.dto.DevicePageQueryDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@Mapper
public interface DeviceMapper extends MyMapper<Device> {
List<DeviceDTO> page(@Param("param") DevicePageQueryDTO queryDTO);
List<DeviceDTO> list(@Param("param") DeviceQueryDTO queryDTO);
}

View File

@@ -0,0 +1,38 @@
package com.newyetai.recruit.device.dto;
import com.newyetai.common.dto.BaseDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.SuperBuilder;
import java.math.BigDecimal;
import java.util.Date;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@ApiModel("设备")
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class DeviceDTO extends BaseDTO {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private String code;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("场所地址")
private String address;
private String geocoderJson;
}

View File

@@ -0,0 +1,59 @@
package com.newyetai.recruit.device.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
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.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@ApiModel("设备")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeviceOperatorDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@Length(max = 128,message = "编号长度超长")
@NotBlank(message = "请输入编号")
@ApiModelProperty("编号")
private String code;
@Length(max = 64,message = "名称长度超长")
@NotBlank(message = "请输入名称")
@ApiModelProperty("名称")
private String name;
@Length(max = 255,message = "场所地址长度超长")
@NotBlank(message = "请输入场所地址")
@ApiModelProperty("场所地址")
private String address;
private String geocoderJson;
}

View File

@@ -0,0 +1,75 @@
package com.newyetai.recruit.device.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.math.BigDecimal;
import java.util.Date;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@ApiModel("设备")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class DevicePageQueryDTO extends PageQueryDTO<DeviceDTO> {
private static final long serialVersionUID = 1L;
private Long id;
private Long notId;
@ApiModelProperty("编号")
private String code;
@ApiModelProperty("名称 (模糊匹配)")
private String nameLike;
private String name;
@ApiModelProperty("场所地址")
private String address;
private String addressLike;
private String geocoderJson;
@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;
}

View File

@@ -0,0 +1,76 @@
package com.newyetai.recruit.device.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.math.BigDecimal;
import java.util.Date;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@ApiModel("设备")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DeviceQueryDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Long notId;
@ApiModelProperty("编号")
private String code;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("名称 (模糊匹配)")
private String nameLike;
@ApiModelProperty("场所地址")
private String address;
private String addressLike;
private String geocoderJson;
@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;
}

View File

@@ -0,0 +1,37 @@
package com.newyetai.recruit.device.entity;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import java.math.BigDecimal;
import com.newyetai.common.entity.BaseEntity;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@TableName(value = "hr_device")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class Device extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 编号
*/
private String code;
/**
* 名称
*/
private String name;
/**
* 场所地址
*/
private String address;
private String geocoderJson;
}

View File

@@ -0,0 +1,58 @@
<?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.device.dao.DeviceMapper">
<select id="list" resultType="com.newyetai.recruit.device.dto.DeviceDTO">
SELECT t.*
<include refid="queryFromSql"></include>
</select>
<select id="page" resultType="com.newyetai.recruit.device.dto.DeviceDTO">
SELECT t.*
<include refid="queryFromSql"></include>
</select>
<sql id="queryFromSql">
FROM
hr_device t
WHERE t.deleted = 0
<if test='param.id != null'>
AND t.id = #{param.id}
</if>
<if test='param.notId != null'>
AND t.id <![CDATA[ <> ]]> #{param.notId}
</if>
<if test='param.code != null and param.code.trim() != ""'>
AND t.code = #{param.code}
</if>
<if test='param.name != null and param.name.trim() != ""'>
AND t.name = #{param.name}
</if>
<if test='param.nameLike != null and param.nameLike.trim() != ""'>
<bind name="nameLike" value="'%' + param.nameLike + '%'"/>
AND t.name like #{nameLike}
</if>
<if test='param.address != null and param.address.trim() != ""'>
AND t.address = #{param.address}
</if>
<if test='param.addressLike != null and param.addressLike.trim() != ""'>
<bind name="addressLike" value="'%' + param.addressLike + '%'"/>
AND t.address like #{addressLike}
</if>
<if test='param.createTimeStart != null'>
AND t.create_time &gt;= #{param.createTimeStart}
</if>
<if test='param.createTimeEnd != null'>
AND t.create_time &lt;= #{param.createTimeEnd}
</if>
<if test='param.updateTimeStart != null'>
AND t.update_time &gt;= #{param.updateTimeStart}
</if>
<if test='param.updateTimeEnd != null'>
AND t.update_time &lt;= #{param.updateTimeEnd}
</if>
ORDER BY t.id DESC
</sql>
</mapper>

View File

@@ -0,0 +1,68 @@
package com.newyetai.recruit.device.service;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.groups.Default;
import java.util.List;
import com.newyetai.recruit.device.dto.*;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@Validated(Default.class)
public interface DeviceService {
/**
* 设备 - 创建
*
* @param operatorDto 操作dto
* @return {@link DeviceDTO}
*/
DeviceDTO create(@Valid DeviceOperatorDTO operatorDto);
/**
* 设备 - 修改
*
* @param operatorDto 操作dto
* @return {@link DeviceDTO}
*/
DeviceDTO modify(@Valid DeviceOperatorDTO operatorDto);
/**
* 设备 - 删除
*
* @param id id
* @return {@link DeviceDTO}
*/
DeviceDTO delete(Long id);
/**
* 设备 - 根据ID查询单个
*
* @param id id
* @return {@link DeviceDTO}
*/
DeviceDTO findById(Long id);
/**
* 设备 - 列表查询
*
* @param queryDTO 列表查询dto
* @return {@link List}<{@link DeviceDTO}>
*/
List<DeviceDTO> list(DeviceQueryDTO queryDTO);
/**
* 设备 - 分页查询
*
* @param queryDTO 分页查询dto
* @return {@link DeviceDTO}
*/
List<DeviceDTO> page(DevicePageQueryDTO queryDTO);
}

View File

@@ -0,0 +1,154 @@
package com.newyetai.recruit.device.service.impl;
import lombok.extern.slf4j.Slf4j;
import com.newyetai.common.AlitaResult;
import com.newyetai.common.exception.BusinessException;
import com.newyetai.common.util.JsonUtils;
import com.newyetai.recruit.device.convert.DeviceConvert;
import com.newyetai.recruit.device.entity.Device;
import com.newyetai.recruit.device.dto.*;
import com.newyetai.recruit.device.dao.DeviceMapper;
import com.newyetai.recruit.device.service.DeviceService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.newyetai.common.util.UserContextHolder;
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 javax.annotation.Resource;
import java.util.*;
/**
* 设备
*
* @author guixinman
* @since 1.0.0 2025-01-14
*/
@Slf4j
@Service
public class DeviceServiceImpl implements DeviceService {
@Resource
private DeviceMapper deviceMapper;
@Autowired
private TencentMapContext tencentMapContext;
@Override
public DeviceDTO create(DeviceOperatorDTO operatorDto) {
List<DeviceDTO> deviceDTOList = this.list(DeviceQueryDTO.builder().code(operatorDto.getCode()).name(operatorDto.getName()).build());
if (CollectionUtils.isNotEmpty(deviceDTOList)) {
throw new BusinessException("该设备编码已存在");
}
AlitaResult<TencentMapGeocoderResDTO> alitaResult = tencentMapContext.webServiceGeocoder(TencentMapGeocoderReqDTO.builder()
.address(operatorDto.getAddress())
.build());
if (Boolean.TRUE.equals(alitaResult.getSuccess())) {
TencentMapGeocoderResDTO resultData = alitaResult.getData();
TencentMapGeocoderResDTO.TencentMapGeocoderLocationResDTO location = resultData.getLocation();
TencentMapGeocoderResDTO.TencentMapGeocoderAddressComponentsDTO address_components = resultData.getAddress_components();
TencentMapGeocoderResDTO.TencentMapGeocoderAdInfo ad_info = resultData.getAd_info();
if (Objects.nonNull(location)) {
TencentMapLocationV1IpResDTO tencentMapLocationV1IpResDTO = new TencentMapLocationV1IpResDTO();
tencentMapLocationV1IpResDTO.setLocation(TencentMapLocationV1IpResDTO.TencentMapLocationDTO.builder().lat(location.getLat()).lng(location.getLng()).build());
tencentMapLocationV1IpResDTO.setAd_info(TencentMapLocationV1IpResDTO.TencentMapLocationAdInfoDTO.builder()
.province(address_components.getProvince())
.city(address_components.getCity())
.district(address_components.getDistrict())
.adcode(ad_info.getAdcode())
.build());
operatorDto.setGeocoderJson(JsonUtils.toJsonString(tencentMapLocationV1IpResDTO));
}
}
Device device = DeviceConvert.INSTANCE.convert(operatorDto);
deviceMapper.saveEntity(device);
return DeviceConvert.INSTANCE.convert(device);
}
@Override
public DeviceDTO modify(DeviceOperatorDTO operatorDto) {
List<DeviceDTO> deviceDTOList = this.list(DeviceQueryDTO.builder().notId(operatorDto.getId()).name(operatorDto.getName()).build());
if (CollectionUtils.isNotEmpty(deviceDTOList)) {
throw new BusinessException("该设备编码已存在");
}
DeviceDTO deviceDto = this.findById(operatorDto.getId());
if (Objects.isNull(deviceDto)) {
return null;
}
if (!StringUtils.equals(operatorDto.getAddress(), deviceDto.getAddress())) {
AlitaResult<TencentMapGeocoderResDTO> alitaResult = tencentMapContext.webServiceGeocoder(TencentMapGeocoderReqDTO.builder()
.address(operatorDto.getAddress())
.build());
if (Boolean.TRUE.equals(alitaResult.getSuccess())) {
TencentMapGeocoderResDTO resultData = alitaResult.getData();
TencentMapGeocoderResDTO.TencentMapGeocoderLocationResDTO location = resultData.getLocation();
TencentMapGeocoderResDTO.TencentMapGeocoderAddressComponentsDTO address_components = resultData.getAddress_components();
TencentMapGeocoderResDTO.TencentMapGeocoderAdInfo ad_info = resultData.getAd_info();
if (Objects.nonNull(location)) {
TencentMapLocationV1IpResDTO tencentMapLocationV1IpResDTO = new TencentMapLocationV1IpResDTO();
tencentMapLocationV1IpResDTO.setLocation(TencentMapLocationV1IpResDTO.TencentMapLocationDTO.builder().lat(location.getLat()).lng(location.getLng()).build());
tencentMapLocationV1IpResDTO.setAd_info(TencentMapLocationV1IpResDTO.TencentMapLocationAdInfoDTO.builder()
.province(address_components.getProvince())
.city(address_components.getCity())
.district(address_components.getDistrict())
.adcode(ad_info.getAdcode())
.build());
operatorDto.setGeocoderJson(JsonUtils.toJsonString(tencentMapLocationV1IpResDTO));
}
}
}
Device device = DeviceConvert.INSTANCE.convert(operatorDto);
device.setCode(null);
deviceMapper.updateEntitySelective(device);
return this.findById(operatorDto.getId());
}
@Override
public DeviceDTO delete(Long id) {
DeviceDTO deviceDto = this.findById(id);
if (Objects.isNull(deviceDto)) {
return null;
}
Device device = Device.builder().build();
device.setId(id);
deviceMapper.deleteEntity(device, UserContextHolder.getLoginUserId());
return deviceDto;
}
@Override
public DeviceDTO findById(Long id) {
Device device = deviceMapper.getById(id);
if (Objects.isNull(device)) {
return null;
}
return DeviceConvert.INSTANCE.convert(device);
}
@Override
public List<DeviceDTO> list(DeviceQueryDTO queryDTO) {
return deviceMapper.list(queryDTO);
}
@Override
public List<DeviceDTO> page(DevicePageQueryDTO queryDTO) {
return deviceMapper.page(queryDTO);
}
}

View File

@@ -0,0 +1,71 @@
package com.newyetai.recruit.eventtrack.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.eventtrack.dto.*;
import com.newyetai.recruit.eventtrack.service.EventTrackService;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@Api(tags = " 埋点")
@RestController
@RequestMapping("/event_track")
public class EventTrackController {
@Autowired
private EventTrackService eventTrackService;
@PostMapping("/create")
@ApiOperation(" 埋点-创建")
public AlitaResult<EventTrackDTO> create(@RequestBody EventTrackOperatorDTO operatorDTO) {
return AlitaResult.success(eventTrackService.create(operatorDTO));
}
@PutMapping("/modify")
@ApiOperation(" 埋点-修改")
public AlitaResult<EventTrackDTO> modify(@RequestBody EventTrackOperatorDTO operatorDTO) {
return AlitaResult.success(eventTrackService.modify(operatorDTO));
}
@DeleteMapping("{id}")
@ApiOperation(" 埋点-删除")
public AlitaResult<EventTrackDTO> delete(@PathVariable("id") Long id) {
return AlitaResult.success(eventTrackService.delete(id));
}
@GetMapping("{id}")
@ApiOperation(" 埋点-查询单个")
public AlitaResult<EventTrackDTO> findById(@PathVariable("id") Long id) {
return AlitaResult.success(eventTrackService.findById(id));
}
@GetMapping("list")
@ApiOperation(" 埋点-列表查询")
public AlitaResult<List<EventTrackDTO>> list(EventTrackQueryDTO queryDTO) {
return AlitaResult.success(eventTrackService.list(queryDTO));
}
@GetMapping("page")
@ApiOperation(" 埋点-分页查询")
public AlitaResult<Page<EventTrackDTO>> page(EventTrackPageQueryDTO queryDTO) {
eventTrackService.page(queryDTO);
return AlitaResult.success(queryDTO.getPageResult());
}
@GetMapping("statistics")
public AlitaResult<List<EventTrackStatisticsResDTO>> statistics(EventTrackStatisticsQueryDTO queryDTO) {
return AlitaResult.success(eventTrackService.statistics(queryDTO));
}
}

View File

@@ -0,0 +1,28 @@
package com.newyetai.recruit.eventtrack.convert;
import com.newyetai.recruit.eventtrack.entity.EventTrack;
import com.newyetai.recruit.eventtrack.dto.EventTrackDTO;
import com.newyetai.recruit.eventtrack.dto.EventTrackOperatorDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@Mapper
public interface EventTrackConvert {
EventTrackConvert INSTANCE = Mappers.getMapper(EventTrackConvert.class);
EventTrack convert(EventTrackDTO dto);
EventTrackDTO convert(EventTrack entity);
EventTrack convert(EventTrackOperatorDTO dto);
}

View File

@@ -0,0 +1,30 @@
package com.newyetai.recruit.eventtrack.dao;
import com.newyetai.recruit.eventtrack.dto.EventTrackStatisticsQueryDTO;
import com.newyetai.recruit.eventtrack.dto.EventTrackStatisticsResDTO;
import com.newyetai.tkmybatis.mybatis.MyMapper;
import com.newyetai.recruit.eventtrack.entity.EventTrack;
import com.newyetai.recruit.eventtrack.dto.EventTrackDTO;
import com.newyetai.recruit.eventtrack.dto.EventTrackQueryDTO;
import com.newyetai.recruit.eventtrack.dto.EventTrackPageQueryDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@Mapper
public interface EventTrackMapper extends MyMapper<EventTrack> {
List<EventTrackDTO> page(@Param("param") EventTrackPageQueryDTO queryDTO);
List<EventTrackDTO> list(@Param("param") EventTrackQueryDTO queryDTO);
List<EventTrackStatisticsResDTO> statistics(@Param("param") EventTrackStatisticsQueryDTO queryDTO);
}

View File

@@ -0,0 +1,37 @@
package com.newyetai.recruit.eventtrack.dto;
import com.newyetai.common.dto.BaseDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.SuperBuilder;
import java.util.Date;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@ApiModel(" 埋点")
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class EventTrackDTO extends BaseDTO {
private static final long serialVersionUID = 1L;
@ApiModelProperty("设备编号")
private String deviceCode;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("类型")
private String type;
}

View File

@@ -0,0 +1,36 @@
package com.newyetai.recruit.eventtrack.dto;
import java.io.Serializable;
import lombok.Data;
/**
* @description:
* @author: guixinman
* @create: 2025-01-23 16:43
**/
@Data
public class EventTrackMachineReqDTO implements Serializable {
/**
* 机器编号
*/
private String deviceCode;
/**
*
*/
private String name;
private String address;
/**
* 日期
*/
private String createDate;
/**
* 当日使用人数
*/
private Long userNumber;
}

View File

@@ -0,0 +1,48 @@
package com.newyetai.recruit.eventtrack.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.util.Date;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@ApiModel(" 埋点")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EventTrackOperatorDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty("设备编号")
private String deviceCode;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("类型")
private String type;
}

View File

@@ -0,0 +1,66 @@
package com.newyetai.recruit.eventtrack.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;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@ApiModel(" 埋点")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class EventTrackPageQueryDTO extends PageQueryDTO<EventTrackDTO> {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty("设备编号")
private String deviceCode;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("类型")
private String type;
@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;
}

View File

@@ -0,0 +1,66 @@
package com.newyetai.recruit.eventtrack.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 2025-01-22
*/
@ApiModel(" 埋点")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EventTrackQueryDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty("设备编号")
private String deviceCode;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("类型")
private String type;
@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;
}

View File

@@ -0,0 +1,25 @@
package com.newyetai.recruit.eventtrack.dto;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* @description:
* @author: guixinman
* @create: 2025-01-23 16:04
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EventTrackStatisticsQueryDTO implements Serializable {
private String createTimeStart;
private String createTimeEnd;
}

View File

@@ -0,0 +1,21 @@
package com.newyetai.recruit.eventtrack.dto;
import java.io.Serializable;
import lombok.Data;
/**
* @description: 埋点分组DTO
* @author: guixinman
* @create: 2025-01-23 15:59
**/
@Data
public class EventTrackStatisticsResDTO implements Serializable {
private String deviceCode;
private Long userId;
private String type;
private String name;
private String address;
private String createDate;
private Long userNumber;
}

View File

@@ -0,0 +1,39 @@
package com.newyetai.recruit.eventtrack.entity;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import java.util.Date;
import com.newyetai.common.entity.BaseEntity;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@TableName(value = "hr_event_track")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class EventTrack extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 设备编号
*/
private String deviceCode;
/**
* 用户id
*/
private Long userId;
/**
* 类型
*/
private String type;
}

View File

@@ -0,0 +1,89 @@
package com.newyetai.recruit.eventtrack.job;
import com.newyetai.common.util.JsonUtils;
import com.newyetai.recruit.eventtrack.dto.EventTrackMachineReqDTO;
import com.newyetai.recruit.eventtrack.dto.EventTrackStatisticsQueryDTO;
import com.newyetai.recruit.eventtrack.dto.EventTrackStatisticsResDTO;
import com.newyetai.recruit.eventtrack.service.EventTrackService;
import com.newyetai.sdk.common.dto.DefaultSdkInvokeLogDTO;
import com.newyetai.sdk.common.util.HttpUtils;
import com.newyetai.sdk.tencent.map.dto.TencentMapBaseResDTO;
import com.newyetai.sdk.tencent.map.dto.TencentWsDistanceV1MatrixResDTO;
import com.newyetai.security.util.MockUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpRequest;
import lombok.extern.slf4j.Slf4j;
/**
* @description: 埋点job
* @author: guixinman
* @create: 2025-01-23 14:54
**/
@Slf4j
@Component
public class EventTrackJob {
@Autowired
private RestTemplate restTemplate;
@Autowired
private EventTrackService eventTrackService;
@Scheduled(cron = "0 0/30 * * * *")
public void statistics() {
String createTimeStart = DateUtil.format(DateUtil.beginOfDay(DateUtil.yesterday()), "yyyy-MM-dd HH:mm:ss");
String createTimeEnd = DateUtil.format(DateUtil.endOfDay(DateUtil.yesterday()), "yyyy-MM-dd HH:mm:ss");
log.info("埋点数据推送宝就业后台 ======开始");
MockUtils.mockPlatUser();
try {
List<EventTrackStatisticsResDTO> statistics = eventTrackService.statistics(EventTrackStatisticsQueryDTO.builder().createTimeStart(createTimeStart).createTimeEnd(createTimeEnd).build());
List<EventTrackMachineReqDTO> machineReqDTOList = new ArrayList();
for (EventTrackStatisticsResDTO statistic : statistics) {
EventTrackMachineReqDTO machineReqDTO = new EventTrackMachineReqDTO();
BeanUtils.copyProperties(statistic,machineReqDTO);
machineReqDTOList.add(machineReqDTO);
}
String result = null;
if (CollectionUtils.isNotEmpty(machineReqDTOList)) {
try {
result = HttpRequest.post("https://baoanhr-1gj59gl3122cad49-1331397164.ap-shanghai.app.tcloudbase.com/v1/api/machine")
.header("Content-Type", "application/json") // 必须声明 JSON 格式
.body(JsonUtils.toJsonString(machineReqDTOList))
.timeout(5000)
.execute()
.body();
} catch (Exception e) {
log.error("EventTrackJob invoke:{} error:{}",JsonUtils.toJsonString(machineReqDTOList),
e);
} finally {
log.info("EventTrackJob invoke:{}",
JsonUtils
.toJsonString(
DefaultSdkInvokeLogDTO.builder().requestData(machineReqDTOList).responseData(result)
.build()));
}
}
} catch (Exception e) {
log.error(e.getMessage());
}
log.info("埋点数据推送宝就业后台 ======结束");
}
}

View File

@@ -0,0 +1,68 @@
<?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.eventtrack.dao.EventTrackMapper">
<select id="list" resultType="com.newyetai.recruit.eventtrack.dto.EventTrackDTO">
SELECT t.*
<include refid="queryFromSql"></include>
</select>
<select id="page" resultType="com.newyetai.recruit.eventtrack.dto.EventTrackDTO">
SELECT t.*
<include refid="queryFromSql"></include>
</select>
<select id="statistics"
resultType="com.newyetai.recruit.eventtrack.dto.EventTrackStatisticsResDTO">
select a.device_code,
a."user_id",
a."type",
b."name",
b.address,
DATE_FORMAT(a.create_time, '%Y-%m-%d') as createDate,
count(a.id) as userNumber
from hr_event_track a
left join hr_device b on a."device_code" = b."code" and b."deleted" = 0
where a."deleted" = 0
<if test='param.createTimeStart != null'>
AND a.create_time &gt;= #{param.createTimeStart}
</if>
<if test='param.createTimeEnd != null'>
AND a.create_time &lt;= #{param.createTimeEnd}
</if>
group by a."device_code",DATE_FORMAT(a.create_time, '%Y-%m-%d')
</select>
<sql id="queryFromSql">
FROM
hr_event_track t
WHERE t.deleted = 0
<if test='param.id != null'>
AND t.id = #{param.id}
</if>
<if test='param.deviceCode != null and param.deviceCode.trim() != ""'>
AND t.device_code = #{param.deviceCode}
</if>
<if test='param.userId != null'>
AND t.user_id = #{param.userId}
</if>
<if test='param.type != null and param.type.trim() != ""'>
AND t.type = #{param.type}
</if>
<if test='param.createTimeStart != null'>
AND t.create_time &gt;= #{param.createTimeStart}
</if>
<if test='param.createTimeEnd != null'>
AND t.create_time &lt;= #{param.createTimeEnd}
</if>
<if test='param.updateTimeStart != null'>
AND t.update_time &gt;= #{param.updateTimeStart}
</if>
<if test='param.updateTimeEnd != null'>
AND t.update_time &lt;= #{param.updateTimeEnd}
</if>
ORDER BY t.id DESC
</sql>
</mapper>

View File

@@ -0,0 +1,76 @@
package com.newyetai.recruit.eventtrack.service;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.groups.Default;
import java.util.List;
import com.newyetai.recruit.eventtrack.dto.*;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@Validated(Default.class)
public interface EventTrackService {
/**
* 埋点 - 创建
*
* @param operatorDto 操作dto
* @return {@link EventTrackDTO}
*/
EventTrackDTO create(@Valid EventTrackOperatorDTO operatorDto);
/**
* 埋点 - 修改
*
* @param operatorDto 操作dto
* @return {@link EventTrackDTO}
*/
EventTrackDTO modify(@Valid EventTrackOperatorDTO operatorDto);
/**
* 埋点 - 删除
*
* @param id id
* @return {@link EventTrackDTO}
*/
EventTrackDTO delete(Long id);
/**
* 埋点 - 根据ID查询单个
*
* @param id id
* @return {@link EventTrackDTO}
*/
EventTrackDTO findById(Long id);
/**
* 埋点 - 列表查询
*
* @param queryDTO 列表查询dto
* @return {@link List}<{@link EventTrackDTO}>
*/
List<EventTrackDTO> list(EventTrackQueryDTO queryDTO);
/**
* 埋点 - 分页查询
*
* @param queryDTO 分页查询dto
* @return {@link EventTrackDTO}
*/
List<EventTrackDTO> page(EventTrackPageQueryDTO queryDTO);
/**
* @description: 按日统计
* @return:
* @author: guixinman
* @param:
*/
List<EventTrackStatisticsResDTO> statistics(EventTrackStatisticsQueryDTO queryDTO);
}

View File

@@ -0,0 +1,89 @@
package com.newyetai.recruit.eventtrack.service.impl;
import lombok.extern.slf4j.Slf4j;
import com.newyetai.common.util.JsonUtils;
import com.newyetai.recruit.eventtrack.convert.EventTrackConvert;
import com.newyetai.recruit.eventtrack.entity.EventTrack;
import com.newyetai.recruit.eventtrack.dto.*;
import com.newyetai.recruit.eventtrack.dao.EventTrackMapper;
import com.newyetai.recruit.eventtrack.service.EventTrackService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.newyetai.common.util.UserContextHolder;
import com.newyetai.sdk.tencent.map.dto.TencentMapLocationV1IpResDTO;
import javax.annotation.Resource;
import java.util.*;
/**
* 埋点
*
* @author guixinman
* @since 1.0.0 2025-01-22
*/
@Slf4j
@Service
public class EventTrackServiceImpl implements EventTrackService {
@Resource
private EventTrackMapper eventTrackMapper;
@Override
public EventTrackDTO create(EventTrackOperatorDTO operatorDto) {
EventTrack eventTrack = EventTrackConvert.INSTANCE.convert(operatorDto);
eventTrackMapper.saveEntity(eventTrack);
return EventTrackConvert.INSTANCE.convert(eventTrack);
}
@Override
public EventTrackDTO modify(EventTrackOperatorDTO operatorDto) {
EventTrackDTO eventTrackDto = this.findById(operatorDto.getId());
if (Objects.isNull(eventTrackDto)) {
return null;
}
EventTrack eventTrack = EventTrackConvert.INSTANCE.convert(operatorDto);
eventTrackMapper.updateEntitySelective(eventTrack);
return this.findById(operatorDto.getId());
}
@Override
public EventTrackDTO delete(Long id) {
EventTrackDTO eventTrackDto = this.findById(id);
if (Objects.isNull(eventTrackDto)) {
return null;
}
EventTrack eventTrack = EventTrack.builder().build();
eventTrack.setId(id);
eventTrackMapper.deleteEntity(eventTrack, UserContextHolder.getLoginUserId());
return eventTrackDto;
}
@Override
public EventTrackDTO findById(Long id) {
EventTrack eventTrack = eventTrackMapper.getById(id);
if (Objects.isNull(eventTrack)) {
return null;
}
return EventTrackConvert.INSTANCE.convert(eventTrack);
}
@Override
public List<EventTrackDTO> list(EventTrackQueryDTO queryDTO) {
return eventTrackMapper.list(queryDTO);
}
@Override
public List<EventTrackDTO> page(EventTrackPageQueryDTO queryDTO) {
return eventTrackMapper.page(queryDTO);
}
@Override
public List<EventTrackStatisticsResDTO> statistics(EventTrackStatisticsQueryDTO queryDTO) {
List<EventTrackStatisticsResDTO> statisticList = eventTrackMapper.statistics(queryDTO);
return statisticList;
}
}

View File

@@ -0,0 +1,76 @@
package com.newyetai.recruit.jobhelp.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.newyetai.common.AlitaResult;
import com.newyetai.common.validation.Create;
import com.newyetai.common.validation.Update;
import com.newyetai.tkmybatis.pojo.Page;
import com.newyetai.recruit.jobhelp.dto.*;
import com.newyetai.recruit.jobhelp.service.JobHelpService;
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-17
*/
@Api(tags = "就业帮扶")
@RestController
@RequestMapping("/jobhelp")
public class JobHelpController {
@Autowired
private JobHelpService jobHelpService;
@PostMapping("/create")
@ApiOperation("就业帮扶-创建")
public AlitaResult<JobHelpDTO> create(@RequestBody @Validated(value = Create.class) JobHelpOperatorDTO operatorDTO) {
return AlitaResult.success(jobHelpService.create(operatorDTO));
}
@PutMapping("/modify")
@ApiOperation("就业帮扶-修改")
public AlitaResult<JobHelpDTO> modify(@RequestBody @Validated(value = Update.class) JobHelpOperatorDTO operatorDTO) {
return AlitaResult.success(jobHelpService.modify(operatorDTO));
}
@DeleteMapping("/{id}")
@ApiOperation("就业帮扶-删除")
public AlitaResult<JobHelpDTO> delete(@PathVariable("id") Long id) {
return AlitaResult.success(jobHelpService.delete(id));
}
@GetMapping("/{id}")
@ApiOperation("就业帮扶-查询单个")
public AlitaResult<JobHelpDTO> findById(@PathVariable("id") Long id) {
return AlitaResult.success(jobHelpService.findById(id));
}
@GetMapping("/list")
@ApiOperation("就业帮扶-列表查询")
public AlitaResult<List<JobHelpDTO>> list(JobHelpQueryDTO queryDTO) {
return AlitaResult.success(jobHelpService.list(queryDTO));
}
@GetMapping("/page")
@ApiOperation("就业帮扶-分页查询")
public AlitaResult<Page<JobHelpDTO>> page(JobHelpPageQueryDTO queryDTO) {
jobHelpService.page(queryDTO);
return AlitaResult.success(queryDTO.getPageResult());
}
@GetMapping("/user_page")
@ApiOperation("就业帮扶-分页查询")
public AlitaResult<Page<JobHelpDTO>> userPage(JobHelpPageQueryDTO queryDTO) {
jobHelpService.userPage(queryDTO);
return AlitaResult.success(queryDTO.getPageResult());
}
}

View File

@@ -0,0 +1,26 @@
package com.newyetai.recruit.jobhelp.convert;
import com.newyetai.recruit.jobhelp.entity.JobHelp;
import com.newyetai.recruit.jobhelp.dto.JobHelpDTO;
import com.newyetai.recruit.jobhelp.dto.JobHelpOperatorDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 就业帮扶
*
* @author guixinman
* @since 1.0.0 2024-04-17
*/
@Mapper
public interface JobHelpConvert {
JobHelpConvert INSTANCE = Mappers.getMapper(JobHelpConvert.class);
JobHelp convert(JobHelpDTO dto);
JobHelpDTO convert(JobHelp entity);
JobHelp convert(JobHelpOperatorDTO dto);
}

View File

@@ -0,0 +1,26 @@
package com.newyetai.recruit.jobhelp.dao;
import com.newyetai.tkmybatis.mybatis.MyMapper;
import com.newyetai.recruit.jobhelp.entity.JobHelp;
import com.newyetai.recruit.jobhelp.dto.JobHelpDTO;
import com.newyetai.recruit.jobhelp.dto.JobHelpQueryDTO;
import com.newyetai.recruit.jobhelp.dto.JobHelpPageQueryDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 就业帮扶
*
* @author guixinman
* @since 1.0.0 2024-04-17
*/
@Mapper
public interface JobHelpMapper extends MyMapper<JobHelp> {
List<JobHelpDTO> page(@Param("param") JobHelpPageQueryDTO queryDTO);
List<JobHelpDTO> list(@Param("param") JobHelpQueryDTO queryDTO);
}

View File

@@ -0,0 +1,51 @@
package com.newyetai.recruit.jobhelp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.newyetai.common.dto.BaseDTO;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.SuperBuilder;
import java.util.Date;
/**
* 就业帮扶
*
* @author guixinman
* @since 1.0.0 2024-04-17
*/
@ApiModel("就业帮扶")
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class JobHelpDTO extends BaseDTO {
private static final long serialVersionUID = 1L;
private Long userId;
@ApiModelProperty("问题")
private String question;
@ApiModelProperty("状态:1、待回复 2、已回复")
private String status;
@ApiModelProperty("回答")
private String answer;
@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 answerTime;
private String nickname;
private String phone;
}

View File

@@ -0,0 +1,62 @@
package com.newyetai.recruit.jobhelp.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.newyetai.common.validation.Create;
import com.newyetai.common.validation.Update;
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.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* 就业帮扶
*
* @author guixinman
* @since 1.0.0 2024-04-17
*/
@ApiModel("就业帮扶")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class JobHelpOperatorDTO implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "参数缺失",groups = Update.class)
private Long id;
private Long userId;
@Length(max = 512,message = "问题描述超长了",groups = Create.class)
@NotBlank(message = "请输入问题描述",groups = Create.class)
@ApiModelProperty("问题")
private String question;
@ApiModelProperty("状态:1、待回复 2、已回复")
private String status;
@NotBlank(message = "请输入回复内容",groups = Update.class)
@ApiModelProperty("回答")
private String answer;
@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 answerTime;
}

View File

@@ -0,0 +1,71 @@
package com.newyetai.recruit.jobhelp.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-17
*/
@ApiModel("就业帮扶")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class JobHelpPageQueryDTO extends PageQueryDTO<JobHelpDTO> {
private static final long serialVersionUID = 1L;
private Long id;
private Long userId;
@ApiModelProperty("问题")
private String question;
@ApiModelProperty("状态:1、待回复 2、已回复")
private String status;
@ApiModelProperty("回答")
private String answer;
@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 answerTime;
@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;
}

View File

@@ -0,0 +1,71 @@
package com.newyetai.recruit.jobhelp.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-17
*/
@ApiModel("就业帮扶")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class JobHelpQueryDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Long userId;
@ApiModelProperty("问题")
private String question;
@ApiModelProperty("状态:1、待回复 2、已回复")
private String status;
@ApiModelProperty("回答")
private String answer;
@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 answerTime;
@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;
}

View File

@@ -0,0 +1,48 @@
package com.newyetai.recruit.jobhelp.entity;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import java.util.Date;
import com.newyetai.common.entity.BaseEntity;
/**
* 就业帮扶
*
* @author guixinman
* @since 1.0.0 2024-04-17
*/
@TableName(value = "hr_job_help")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class JobHelp extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
*
*/
private Long userId;
/**
* 问题
*/
private String question;
/**
* 状态:1、待回复 2、已回复
*/
private String status;
/**
* 回答
*/
private String answer;
/**
* 回复时间
*/
private Date answerTime;
}

View File

@@ -0,0 +1,27 @@
package com.newyetai.recruit.jobhelp.enums;
public enum JobHelpStatusEnum {
INIT("1", "待回复"),
ANSWER("2", "已回复")
;
private String status;
/**
* 类型描述
*/
private String desc;
JobHelpStatusEnum(String status, String desc) {
this.status = status;
this.desc = desc;
}
public String getStatus() {
return status;
}
public String getDesc() {
return desc;
}
}

View File

@@ -0,0 +1,69 @@
<?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.jobhelp.dao.JobHelpMapper">
<select id="list" resultType="com.newyetai.recruit.jobhelp.dto.JobHelpDTO">
SELECT t.*
<include refid="queryFromSql"></include>
</select>
<select id="page" resultType="com.newyetai.recruit.jobhelp.dto.JobHelpDTO">
SELECT t.*,u.nickname,u.phone
FROM
hr_job_help t
LEFT JOIN uc_user u ON t.user_id = u.id AND u.deleted = 0
WHERE t.deleted = 0
<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.createTimeStart != null'>
AND t.create_time &gt;= #{param.createTimeStart}
</if>
<if test='param.createTimeEnd != null'>
AND t.create_time &lt;= #{param.createTimeEnd}
</if>
ORDER BY t.id DESC
</select>
<sql id="queryFromSql">
FROM
hr_job_help t
WHERE t.deleted = 0
<if test='param.id != null'>
AND t.id = #{param.id}
</if>
<if test='param.userId != null'>
AND t.user_id = #{param.userId}
</if>
<if test='param.question != null and param.question.trim() != ""'>
AND t.question = #{param.question}
</if>
<if test='param.status != null and param.status.trim() != ""'>
AND t.status = #{param.status}
</if>
<if test='param.answer != null and param.answer.trim() != ""'>
AND t.answer = #{param.answer}
</if>
<if test='param.answerTime != null'>
AND t.answer_time = #{param.answerTime}
</if>
<if test='param.createTimeStart != null'>
AND t.create_time &gt;= #{param.createTimeStart}
</if>
<if test='param.createTimeEnd != null'>
AND t.create_time &lt;= #{param.createTimeEnd}
</if>
<if test='param.updateTimeStart != null'>
AND t.update_time &gt;= #{param.updateTimeStart}
</if>
<if test='param.updateTimeEnd != null'>
AND t.update_time &lt;= #{param.updateTimeEnd}
</if>
ORDER BY t.id DESC
</sql>
</mapper>

View File

@@ -0,0 +1,70 @@
package com.newyetai.recruit.jobhelp.service;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.groups.Default;
import java.util.List;
import com.newyetai.recruit.jobhelp.dto.*;
/**
* 就业帮扶
*
* @author guixinman
* @since 1.0.0 2024-04-17
*/
@Validated(Default.class)
public interface JobHelpService {
/**
* 就业帮扶 - 创建
*
* @param operatorDto 操作dto
* @return {@link JobHelpDTO}
*/
JobHelpDTO create(@Valid JobHelpOperatorDTO operatorDto);
/**
* 就业帮扶 - 修改
*
* @param operatorDto 操作dto
* @return {@link JobHelpDTO}
*/
JobHelpDTO modify(@Valid JobHelpOperatorDTO operatorDto);
/**
* 就业帮扶 - 删除
*
* @param id id
* @return {@link JobHelpDTO}
*/
JobHelpDTO delete(Long id);
/**
* 就业帮扶 - 根据ID查询单个
*
* @param id id
* @return {@link JobHelpDTO}
*/
JobHelpDTO findById(Long id);
/**
* 就业帮扶 - 列表查询
*
* @param queryDTO 列表查询dto
* @return {@link List}<{@link JobHelpDTO}>
*/
List<JobHelpDTO> list(JobHelpQueryDTO queryDTO);
/**
* 就业帮扶 - 分页查询
*
* @param queryDTO 分页查询dto
* @return {@link JobHelpDTO}
*/
List<JobHelpDTO> page(JobHelpPageQueryDTO queryDTO);
List<JobHelpDTO> userPage(JobHelpPageQueryDTO queryDTO);
}

View File

@@ -0,0 +1,106 @@
package com.newyetai.recruit.jobhelp.service.impl;
import lombok.extern.slf4j.Slf4j;
import com.newyetai.common.constant.CommonConstants;
import com.newyetai.common.exception.BusinessException;
import com.newyetai.common.util.SensitiveWordUtils;
import com.newyetai.recruit.jobhelp.convert.JobHelpConvert;
import com.newyetai.recruit.jobhelp.entity.JobHelp;
import com.newyetai.recruit.jobhelp.dto.*;
import com.newyetai.recruit.jobhelp.dao.JobHelpMapper;
import com.newyetai.recruit.jobhelp.enums.JobHelpStatusEnum;
import com.newyetai.recruit.jobhelp.service.JobHelpService;
import org.springframework.stereotype.Service;
import com.newyetai.common.util.UserContextHolder;
import com.newyetai.usercenter.enums.OrgTypeEnum;
import javax.annotation.Resource;
import java.util.*;
/**
* 就业帮扶
*
* @author guixinman
* @since 1.0.0 2024-04-17
*/
@Slf4j
@Service
public class JobHelpServiceImpl implements JobHelpService {
@Resource
private JobHelpMapper jobHelpMapper;
@Override
public JobHelpDTO create(JobHelpOperatorDTO operatorDto) {
if (!SensitiveWordUtils.check(operatorDto.getQuestion())) {
throw new BusinessException("非法问题描述");
}
Long userId = UserContextHolder.getExistLoginUserId();
operatorDto.setUserId(userId);
operatorDto.setStatus(JobHelpStatusEnum.INIT.getStatus());
JobHelp jobHelp = JobHelpConvert.INSTANCE.convert(operatorDto);
jobHelpMapper.saveEntity(jobHelp);
return JobHelpConvert.INSTANCE.convert(jobHelp);
}
@Override
public JobHelpDTO modify(JobHelpOperatorDTO operatorDto) {
JobHelpDTO jobHelpDto = this.findById(operatorDto.getId());
if (Objects.isNull(jobHelpDto)) {
return null;
}
JobHelp jobHelp = new JobHelp();
jobHelp.setId(operatorDto.getId());
jobHelp.setAnswer(operatorDto.getAnswer());
jobHelp.setAnswerTime(new Date());
jobHelp.setStatus(JobHelpStatusEnum.ANSWER.getStatus());
jobHelpMapper.updateEntitySelective(jobHelp);
return this.findById(operatorDto.getId());
}
@Override
public JobHelpDTO delete(Long id) {
JobHelpDTO jobHelpDto = this.findById(id);
if (Objects.isNull(jobHelpDto)) {
return null;
}
JobHelp jobHelp = JobHelp.builder().build();
jobHelp.setId(id);
jobHelpMapper.deleteEntity(jobHelp, UserContextHolder.getLoginUserId());
return jobHelpDto;
}
@Override
public JobHelpDTO findById(Long id) {
JobHelp jobHelp = jobHelpMapper.getById(id);
if (Objects.isNull(jobHelp)) {
return null;
}
return JobHelpConvert.INSTANCE.convert(jobHelp);
}
@Override
public List<JobHelpDTO> list(JobHelpQueryDTO queryDTO) {
return jobHelpMapper.list(queryDTO);
}
@Override
public List<JobHelpDTO> page(JobHelpPageQueryDTO queryDTO) {
if (OrgTypeEnum.ORG_TYPE_PLATFORM.getType().equals(UserContextHolder.getOrgType()) || OrgTypeEnum.ORG_TYPE_GOV.getType().equals(UserContextHolder.getOrgType()) ) {
return jobHelpMapper.page(queryDTO);
}else {
return new ArrayList<>();
}
}
@Override
public List<JobHelpDTO> userPage(JobHelpPageQueryDTO queryDTO) {
queryDTO.setUserId(UserContextHolder.getExistLoginUserId());
return jobHelpMapper.page(queryDTO);
}
}

View File

@@ -0,0 +1,89 @@
package com.newyetai.recruit.orgapply.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.newyetai.common.AlitaResult;
import com.newyetai.recruit.orgapply.entity.OrgApply;
import com.newyetai.tkmybatis.pojo.Page;
import com.newyetai.recruit.orgapply.dto.*;
import com.newyetai.recruit.orgapply.service.OrgApplyService;
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-08
*/
@Api(tags = "入驻申请表")
@RestController
public class OrgApplyController {
@Autowired
private OrgApplyService orgApplyService;
@PostMapping("/anon/org_apply/create")
@ApiOperation("入驻申请表-创建")
public AlitaResult<OrgApplyDTO> create(@RequestBody @Validated OrgApplyOperatorDTO operatorDTO) {
return AlitaResult.success(orgApplyService.create(operatorDTO));
}
@PostMapping("/org_apply/modify")
@ApiOperation("入驻申请表-修改")
public AlitaResult<OrgApplyDTO> modify(@RequestBody OrgApplyOperatorDTO operatorDTO) {
return AlitaResult.success(orgApplyService.modify(operatorDTO));
}
@DeleteMapping("/org_apply/{id}")
@ApiOperation("入驻申请表-删除")
public AlitaResult<OrgApplyDTO> delete(@PathVariable("id") Long id) {
return AlitaResult.success(orgApplyService.delete(id));
}
@GetMapping("/org_apply/{id}")
@ApiOperation("入驻申请表-查询单个")
public AlitaResult<OrgApplyDTO> findById(@PathVariable("id") Long id) {
return AlitaResult.success(orgApplyService.findById(id));
}
@GetMapping("/org_apply/list")
@ApiOperation("入驻申请表-列表查询")
public AlitaResult<List<OrgApplyDTO>> list(OrgApplyQueryDTO queryDTO) {
return AlitaResult.success(orgApplyService.list(queryDTO));
}
@GetMapping("/org_apply/page")
@ApiOperation("入驻申请表-分页查询")
public AlitaResult<Page<OrgApplyDTO>> page(OrgApplyPageQueryDTO queryDTO) {
orgApplyService.page(queryDTO);
return AlitaResult.success(queryDTO.getPageResult());
}
@PostMapping("/org_apply/approve")
@ApiOperation("审批")
public AlitaResult<Void> approve(@RequestBody @Validated OrgApplyApproveDTO applyApproveDTO) {
orgApplyService.approve(applyApproveDTO);
return AlitaResult.success();
}
@ApiOperation("查看审批单")
@GetMapping("/anon/org_apply/getInfo")
public AlitaResult<List<OrgApply>> getInfoByPhone(@RequestParam("phone") String phone) {
List<OrgApply> infoByPhone = orgApplyService.getInfoByPhone(phone);
return AlitaResult.success(infoByPhone);
}
@ApiOperation("分享")
@GetMapping("/org_apply/user/share")
public AlitaResult<String> share(){
return AlitaResult.success(orgApplyService.share());
}
}

View File

@@ -0,0 +1,26 @@
package com.newyetai.recruit.orgapply.convert;
import com.newyetai.recruit.orgapply.entity.OrgApply;
import com.newyetai.recruit.orgapply.dto.OrgApplyDTO;
import com.newyetai.recruit.orgapply.dto.OrgApplyOperatorDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 入驻申请表
*
* @author guixinman
* @since 1.0.0 2024-04-08
*/
@Mapper
public interface OrgApplyConvert {
OrgApplyConvert INSTANCE = Mappers.getMapper(OrgApplyConvert.class);
OrgApply convert(OrgApplyDTO dto);
OrgApplyDTO convert(OrgApply entity);
OrgApply convert(OrgApplyOperatorDTO dto);
}

View File

@@ -0,0 +1,28 @@
package com.newyetai.recruit.orgapply.dao;
import com.newyetai.tkmybatis.mybatis.MyMapper;
import com.newyetai.recruit.orgapply.entity.OrgApply;
import com.newyetai.recruit.orgapply.dto.OrgApplyDTO;
import com.newyetai.recruit.orgapply.dto.OrgApplyQueryDTO;
import com.newyetai.recruit.orgapply.dto.OrgApplyPageQueryDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 入驻申请表
*
* @author guixinman
* @since 1.0.0 2024-04-08
*/
@Mapper
public interface OrgApplyMapper extends MyMapper<OrgApply> {
List<OrgApplyDTO> page(@Param("param") OrgApplyPageQueryDTO queryDTO);
List<OrgApplyDTO> list(@Param("param") OrgApplyQueryDTO queryDTO);
int approve(@Param("id") Long id, @Param("oldStatus") String oldStatus, @Param("newStatus") String newStatus, @Param("cause") String cause, @Param("operateUserId") Long operateUserId);
}

View File

@@ -0,0 +1,24 @@
package com.newyetai.recruit.orgapply.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
* @description: 入驻审批
* @author: guixinman
* @create: 2024-04-08 14:55
**/
@Data
public class OrgApplyApproveDTO implements Serializable {
@NotNull(message = "请选择要处理的数据")
private Long id;
@NotNull(message = "请选择状态")
private String status;
private String cause;
}

View File

@@ -0,0 +1,81 @@
package com.newyetai.recruit.orgapply.dto;
import com.newyetai.common.dto.BaseDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.SuperBuilder;
/**
* 入驻申请表
*
* @author guixinman
* @since 1.0.0 2024-04-08
*/
@ApiModel("入驻申请表")
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class OrgApplyDTO extends BaseDTO {
private static final long serialVersionUID = 1L;
@ApiModelProperty("统一社会信用代码")
private String creditCode;
@ApiModelProperty("公司名称")
private String companyName;
@ApiModelProperty("企业所在地")
private String areaCode;
private String areaCodeName;
@ApiModelProperty("邀请人")
private Long inviterUserId;
@ApiModelProperty("邀请机构")
private Long inviterOrgId;
private String inviterOrgName;
@ApiModelProperty("企业联系手机")
private String phone;
@ApiModelProperty("企业类型")
private String companyType;
@ApiModelProperty("状态 1:待处理 2:已通过 3:已驳回")
private String status;
@ApiModelProperty("营业执照")
private String businessLicenseCode;
/**
* 原因
*/
private String cause;
/**
* 招聘岗位类型
*/
private String recruitPositionType;
private String recruitPositionTypeName;
/**
* 注册地址
*/
private String registeredAddress;
/**
* 企业所在地:文本
*/
private String addressName;
@ApiModelProperty("管理员姓名")
private String realName;
}

View File

@@ -0,0 +1,23 @@
package com.newyetai.recruit.orgapply.dto;
import java.io.Serializable;
import lombok.Data;
/**
* @description: 入驻邀请人dto
* @author: guixinman
* @create: 2024-04-10 17:16
**/
@Data
public class OrgApplyInviterDTO implements Serializable {
/**
* 邀请人
*/
private Long inviterUserId;
/**
* 邀请机构
*/
private Long inviterOrgId;
}

View File

@@ -0,0 +1,94 @@
package com.newyetai.recruit.orgapply.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.validator.constraints.Length;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 入驻申请表
*
* @author guixinman
* @since 1.0.0 2024-04-08
*/
@ApiModel("入驻申请表")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrgApplyOperatorDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@Length(max = 64,message = "统一社会信用代码超长了")
@ApiModelProperty("统一社会信用代码")
private String creditCode;
@NotBlank(message = "企业名称不能为空")
@Length(max = 32,message = "企业名称超长了")
@ApiModelProperty("公司名称")
private String companyName;
@Length(max = 50,message = "企业所在地超长了")
@ApiModelProperty("企业所在地")
private String areaCode;
@ApiModelProperty("邀请人")
private Long inviterUserId;
@ApiModelProperty("邀请机构")
private Long inviterOrgId;
@NotBlank(message = "企业联系手机不能为空")
@Length(max = 20,message = "企业联系手机超长了")
@ApiModelProperty("企业联系手机")
private String phone;
@NotBlank(message = "管理员姓名不能为空")
@ApiModelProperty("管理员姓名")
private String realName;
@NotNull(message = "企业类型不能为空")
@ApiModelProperty("企业类型")
private String companyType;
@ApiModelProperty("状态 1:待处理 2:已通过 3:已驳回")
private String status;
@NotBlank(message = "营业执照不能为空")
@ApiModelProperty("营业执照")
private String businessLicenseCode;
private String uniqueCode;
private String smsCode;
/**
* 招聘岗位类型
*/
private String recruitPositionType;
/**
* 注册地址
*/
@Length(max = 128,message = "注册地址超长了")
@NotBlank(message = "企业注册地址不能为空")
private String registeredAddress;
/**
* 企业所在地:文本
*/
@Length(max = 128,message = "企业所在地超长了")
private String addressName;
}

View File

@@ -0,0 +1,82 @@
package com.newyetai.recruit.orgapply.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-08
*/
@ApiModel("入驻申请表")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class OrgApplyPageQueryDTO extends PageQueryDTO<OrgApplyDTO> {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty("统一社会信用代码")
private String creditCode;
@ApiModelProperty("公司名称 (模糊匹配)")
private String companyNameLike;
@ApiModelProperty("企业所在地")
private String areaCode;
@ApiModelProperty("邀请人")
private Long inviterUserId;
@ApiModelProperty("邀请机构")
private Long inviterOrgId;
@ApiModelProperty("企业联系手机")
private String phone;
@ApiModelProperty("企业类型")
private String companyType;
@ApiModelProperty("状态 1:待处理 2:已通过 3:已驳回")
private String status;
@ApiModelProperty("营业执照")
private String businessLicenseCode;
@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;
}

View File

@@ -0,0 +1,82 @@
package com.newyetai.recruit.orgapply.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-08
*/
@ApiModel("入驻申请表")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrgApplyQueryDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty("统一社会信用代码")
private String creditCode;
@ApiModelProperty("公司名称 (模糊匹配)")
private String companyNameLike;
@ApiModelProperty("企业所在地")
private String areaCode;
@ApiModelProperty("邀请人")
private Long inviterUserId;
@ApiModelProperty("邀请机构")
private Long inviterOrgId;
@ApiModelProperty("企业联系手机")
private String phone;
@ApiModelProperty("企业类型")
private String companyType;
@ApiModelProperty("状态 1:待处理 2:已通过 3:已驳回")
private String status;
@ApiModelProperty("营业执照")
private String businessLicenseCode;
@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;
}

View File

@@ -0,0 +1,85 @@
package com.newyetai.recruit.orgapply.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.SuperBuilder;
import com.baomidou.mybatisplus.annotation.*;
import com.newyetai.common.entity.BaseEntity;
/**
* 入驻申请表
*
* @author guixinman
* @since 1.0.0 2024-04-08
*/
@TableName(value = "org_apply")
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class OrgApply extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 统一社会信用代码
*/
private String creditCode;
/**
* 公司名称
*/
private String companyName;
/**
* 企业所在地
*/
private String areaCode;
/**
* 邀请人
*/
private Long inviterUserId;
/**
* 邀请机构
*/
private Long inviterOrgId;
/**
* 企业联系手机
*/
private String phone;
/**
* 企业类型
*/
private String companyType;
/**
* 状态 1:待处理 2:已通过 3:已驳回
*/
private String status;
/**
* 营业执照
*/
private String businessLicenseCode;
/**
* 原因
*/
private String cause;
/**
* 招聘岗位类型
*/
private String recruitPositionType;
/**
* 注册地址
*/
private String registeredAddress;
/**
* 企业所在地:文本
*/
private String addressName;
@ApiModelProperty("管理员姓名")
private String realName;
}

View File

@@ -0,0 +1,28 @@
package com.newyetai.recruit.orgapply.enums;
public enum OrgApplyEnum {
INIT("1","待处理"),
SUCCESS("2","已通过"),
REJECT("3","已驳回")
;
private String status;
/**
* 类型描述
*/
private String desc;
OrgApplyEnum(String status, String desc) {
this.status = status;
this.desc = desc;
}
public String getStatus() {
return status;
}
public String getDesc() {
return desc;
}
}

View File

@@ -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.orgapply.dao.OrgApplyMapper">
<update id="approve">
update org_apply set status = #{newStatus}, cause=#{cause}, update_by = #{operateUserId}, update_time = now() where id = #{id} and status = #{oldStatus}
</update>
<select id="list" resultType="com.newyetai.recruit.orgapply.dto.OrgApplyDTO">
SELECT t.*
<include refid="queryFromSql"></include>
</select>
<select id="page" resultType="com.newyetai.recruit.orgapply.dto.OrgApplyDTO">
SELECT
t.*,
xo.org_name inviterOrgName,concat(xd3.name,xd2.name,xd1.name) areaCodeName
FROM
org_apply t
LEFT JOIN xs_org xo ON t.inviter_org_id = xo.id AND xo.deleted = 0
left join xs_district xd1 on t.area_code = xd1.code
left join xs_district xd2 on xd1.parent_id = xd2.id
left join xs_district xd3 on xd2.parent_id = xd3.id
WHERE t.deleted = 0
<if test='param.companyNameLike != null and param.companyNameLike.trim() != ""'>
<bind name="companyNameLike" value="'%' + param.companyNameLike + '%'"/>
AND t.company_name like #{companyNameLike}
</if>
<if test='param.creditCode != null and param.creditCode.trim() != ""'>
AND t.credit_code = #{param.creditCode}
</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 &gt;= #{param.createTimeStart}
</if>
<if test='param.createTimeEnd != null'>
AND t.create_time &lt;= #{param.createTimeEnd}
</if>
<if test='param.inviterOrgId != null'>
AND t.inviter_org_id = #{param.inviterOrgId}
</if>
ORDER BY t.id DESC
</select>
<sql id="queryFromSql">
FROM
org_apply t
WHERE t.deleted = 0
<if test='param.id != null'>
AND t.id = #{param.id}
</if>
<if test='param.creditCode != null and param.creditCode.trim() != ""'>
AND t.credit_code = #{param.creditCode}
</if>
<if test='param.companyNameLike != null and param.companyNameLike.trim() != ""'>
<bind name="companyNameLike" value="'%' + param.companyNameLike + '%'"/>
AND t.company_name like #{companyNameLike}
</if>
<if test='param.areaCode != null and param.areaCode.trim() != ""'>
AND t.area_code = #{param.areaCode}
</if>
<if test='param.inviterUserId != null'>
AND t.inviter_user_id = #{param.inviterUserId}
</if>
<if test='param.inviterOrgId != null'>
AND t.inviter_org_id = #{param.inviterOrgId}
</if>
<if test='param.phone != null and param.phone.trim() != ""'>
AND t.phone = #{param.phone}
</if>
<if test='param.companyType != null'>
AND t.company_type = #{param.companyType}
</if>
<if test='param.status != null'>
AND t.status = #{param.status}
</if>
<if test='param.businessLicenseCode != null and param.businessLicenseCode.trim() != ""'>
AND t.business_license_code = #{param.businessLicenseCode}
</if>
<if test='param.createTimeStart != null'>
AND t.create_time &gt;= #{param.createTimeStart}
</if>
<if test='param.createTimeEnd != null'>
AND t.create_time &lt;= #{param.createTimeEnd}
</if>
<if test='param.updateTimeStart != null'>
AND t.update_time &gt;= #{param.updateTimeStart}
</if>
<if test='param.updateTimeEnd != null'>
AND t.update_time &lt;= #{param.updateTimeEnd}
</if>
ORDER BY t.id DESC
</sql>
</mapper>

View File

@@ -0,0 +1,88 @@
package com.newyetai.recruit.orgapply.service;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.groups.Default;
import java.util.List;
import com.newyetai.recruit.orgapply.dto.*;
import com.newyetai.recruit.orgapply.entity.OrgApply;
/**
* 入驻申请表
*
* @author guixinman
* @since 1.0.0 2024-04-08
*/
@Validated(Default.class)
public interface OrgApplyService {
/**
* 入驻申请表 - 创建
*
* @param operatorDto 操作dto
* @return {@link OrgApplyDTO}
*/
OrgApplyDTO create(@Valid OrgApplyOperatorDTO operatorDto);
/**
* 入驻申请表 - 修改
*
* @param operatorDto 操作dto
* @return {@link OrgApplyDTO}
*/
OrgApplyDTO modify(@Valid OrgApplyOperatorDTO operatorDto);
/**
* 入驻申请表 - 删除
*
* @param id id
* @return {@link OrgApplyDTO}
*/
OrgApplyDTO delete(Long id);
/**
* 入驻申请表 - 根据ID查询单个
*
* @param id id
* @return {@link OrgApplyDTO}
*/
OrgApplyDTO findById(Long id);
/**
* 入驻申请表 - 列表查询
*
* @param queryDTO 列表查询dto
* @return {@link List}<{@link OrgApplyDTO}>
*/
List<OrgApplyDTO> list(OrgApplyQueryDTO queryDTO);
/**
* 入驻申请表 - 分页查询
*
* @param queryDTO 分页查询dto
* @return {@link OrgApplyDTO}
*/
List<OrgApplyDTO> page(OrgApplyPageQueryDTO queryDTO);
/**
* @description: 审批
* @return:
* @author: guixinman
* @param:
*/
void approve(OrgApplyApproveDTO orgApplyApproveDTO);
/**
* @description: 根据手机号获取 入驻申请单
* @return:
* @author: guixinman
* @param:
*/
List<OrgApply> getInfoByPhone(String phone);
String share();
}

View File

@@ -0,0 +1,297 @@
package com.newyetai.recruit.orgapply.service.impl;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.newyetai.common.constant.CommonConstants;
import com.newyetai.common.exception.BusinessException;
import com.newyetai.common.exception.util.Assert;
import com.newyetai.common.function.TransactionAfterCommit;
import com.newyetai.component.dict.util.DictUtils;
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.orgapply.convert.OrgApplyConvert;
import com.newyetai.recruit.orgapply.entity.OrgApply;
import com.newyetai.recruit.orgapply.dto.*;
import com.newyetai.recruit.orgapply.dao.OrgApplyMapper;
import com.newyetai.recruit.orgapply.enums.OrgApplyEnum;
import com.newyetai.recruit.orgapply.service.OrgApplyService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
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.security.expection.BadLoginException;
import com.newyetai.usercenter.common.dto.SlickParamCreateDTO;
import com.newyetai.usercenter.common.service.SlickParamService;
import com.newyetai.usercenter.enums.OrgTypeEnum;
import com.newyetai.usercenter.enums.SmsTemplateCodeEnum;
import com.newyetai.usercenter.org.dto.OrgCreateDTO;
import com.newyetai.usercenter.org.service.OrgService;
import com.newyetai.usercenter.user.dto.UserRegisterCodeInfoDTO;
import com.newyetai.usercenter.user.phone.constant.PhoneCodeProviderEnum;
import com.newyetai.usercenter.user.phone.dto.PhoneCodeDTO;
import com.newyetai.usercenter.user.phone.dto.SmsSimpleSendDTO;
import com.newyetai.usercenter.user.phone.dto.SmsSimpleSendDetailDTO;
import com.newyetai.usercenter.user.phone.provider.simple.ISimpleSms;
import com.newyetai.usercenter.user.phone.util.PhoneCodeUtils;
import javax.annotation.Resource;
import java.util.*;
/**
* 入驻申请表
*
* @author guixinman
* @since 1.0.0 2024-04-08
*/
@Slf4j
@Service
public class OrgApplyServiceImpl implements OrgApplyService {
@Resource
private OrgApplyMapper orgApplyMapper;
@Autowired
private ISimpleSms simpleSms;
@Autowired
private SlickParamService slickParamService;
@Autowired
private OrgService orgService;
@Autowired
private ConfigService configService;
/**
* @description: 企业名称 + 手机号只能申请一次,不能重复申请,驳回后可以重新提交
* @return:
* @author: guixinman
* @param:
*/
@AutoUnLock
@Override
public OrgApplyDTO create(OrgApplyOperatorDTO operatorDto) {
Assert.isTrue(
RedissonUtils.tryLockAutomatically(
LockDTO.builder()
.tryLockWaitTime(0L)
.lockTimeout(60 * 5L)
.methodName("org_apply:create")
.arg(operatorDto.getCompanyName())
.arg(operatorDto.getPhone())
.build()
),
"请稍后再试");
String inviterOrgId = configService.getConfigValue("org_apply_inviter_org_id", CommonConstants.PLATFORM_ORG_ID, true);
operatorDto.setInviterOrgId(Long.parseLong(inviterOrgId));
//取消验证码
/*boolean match = PhoneCodeUtils.match(PhoneCodeDTO.builder().phone(operatorDto.getPhone())
.code(operatorDto.getSmsCode())
.providerType(PhoneCodeProviderEnum.ORG_APPLY.getType()).build());
Assert.isTrue(match, new BadLoginException("验证码错误"));*/
Map<String, String> companyTypeMap = DictUtils.getCodeNameMap("company_type");
Assert.notNull(companyTypeMap.get(operatorDto.getCompanyType()),"企业类型错误");
Map<String, String> recruitPositionTypeMap = DictUtils.getCodeNameMap("recruit_position_type");
Assert.notNull(recruitPositionTypeMap.get(operatorDto.getRecruitPositionType()),"招聘岗位类型错误");
List<OrgApply> orgApplys = orgApplyMapper.selectList(new LambdaQueryWrapper<OrgApply>().eq(OrgApply::getDeleted, false).in(OrgApply::getStatus, OrgApplyEnum.INIT.getStatus(), OrgApplyEnum.SUCCESS.getStatus()).eq(OrgApply::getCompanyName, operatorDto.getCompanyName()).eq(OrgApply::getPhone, operatorDto.getPhone()));
if (CollectionUtils.isNotEmpty(orgApplys)) {
throw new BusinessException("(企业名称 + 手机号)已存在入驻申请,请勿重复提交!");
}
OrgApply orgApply = OrgApplyConvert.INSTANCE.convert(operatorDto);
orgApply.setStatus(OrgApplyEnum.INIT.getStatus());
if (StringUtils.isNotBlank(operatorDto.getUniqueCode())) {
OrgApplyInviterDTO orgApplyInviterDTO = slickParamService.parseCode(operatorDto.getUniqueCode(), OrgApplyInviterDTO.class);
orgApply.setInviterOrgId(orgApplyInviterDTO.getInviterOrgId());
orgApply.setInviterUserId(orgApplyInviterDTO.getInviterUserId());
}else {
Assert.notNull(operatorDto.getInviterOrgId(),"请选择邀请机构");
orgApply.setInviterOrgId(operatorDto.getInviterOrgId());
}
orgApplyMapper.saveEntity(orgApply);
return OrgApplyConvert.INSTANCE.convert(orgApply);
}
@Override
public OrgApplyDTO modify(OrgApplyOperatorDTO operatorDto) {
OrgApplyDTO orgApplyDto = this.findById(operatorDto.getId());
if (Objects.isNull(orgApplyDto)) {
return null;
}
OrgApply orgApply = OrgApplyConvert.INSTANCE.convert(operatorDto);
orgApplyMapper.updateEntitySelective(orgApply);
return this.findById(operatorDto.getId());
}
@Override
public OrgApplyDTO delete(Long id) {
OrgApplyDTO orgApplyDto = this.findById(id);
if (Objects.isNull(orgApplyDto)) {
return null;
}
OrgApply orgApply = OrgApply.builder().build();
orgApply.setId(id);
orgApplyMapper.deleteEntity(orgApply, UserContextHolder.getLoginUserId());
return orgApplyDto;
}
@Override
public OrgApplyDTO findById(Long id) {
OrgApply orgApply = orgApplyMapper.getById(id);
if (Objects.isNull(orgApply)) {
return null;
}
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
Assert.isTrue(orgApply.getInviterOrgId().equals(UserContextHolder.getExistLoginOrgId()),"未查询到数据");
}
return OrgApplyConvert.INSTANCE.convert(orgApply);
}
@Override
public List<OrgApplyDTO> list(OrgApplyQueryDTO queryDTO) {
return orgApplyMapper.list(queryDTO);
}
@Override
public List<OrgApplyDTO> page(OrgApplyPageQueryDTO queryDTO) {
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
queryDTO.setInviterOrgId(UserContextHolder.getExistLoginOrgId());
}
List<OrgApplyDTO> list = orgApplyMapper.page(queryDTO);
for (OrgApplyDTO orgApplyDTO : list) {
orgApplyDTO.setRecruitPositionTypeName(DictUtils.getCodeNameMap("recruit_position_type").get(orgApplyDTO.getRecruitPositionType()));
}
return list;
}
@AutoUnLock
@Transactional(rollbackFor = Exception.class)
@Override
public void approve(OrgApplyApproveDTO orgApplyApproveDTO) {
LambdaQueryWrapper<OrgApply> queryWrapper = new LambdaQueryWrapper<OrgApply>()
.eq(OrgApply::getDeleted, false)
.eq(OrgApply::getId, orgApplyApproveDTO.getId());
if (!CommonConstants.PLATFORM_ORG_ID.equals(UserContextHolder.getExistLoginOrgId())) {
queryWrapper.eq(OrgApply::getInviterOrgId, UserContextHolder.getExistLoginOrgId());
}
OrgApply orgApply = orgApplyMapper.selectOne(queryWrapper);
Assert.notNull(orgApply, "未查询到数据");
if (!orgApply.getStatus().equals(OrgApplyEnum.INIT.getStatus())) {
throw new BusinessException("正在处理中...请稍后再试!");
}
Assert.isTrue(
RedissonUtils.tryLockAutomatically(
LockDTO.builder()
.tryLockWaitTime(0L)
.lockTimeout(60 * 5L)
.methodName("org_apply:approve")
.arg(String.valueOf(orgApplyApproveDTO.getId()))
.build()
),
"正在处理中,请稍后再试");
if (orgApplyApproveDTO.getStatus().equals(OrgApplyEnum.REJECT.getStatus())) {
Assert.isTrue(StringUtils.isNotBlank(orgApplyApproveDTO.getCause()), "请输入驳回原因");
}
int rows = orgApplyMapper.approve(orgApplyApproveDTO.getId(), OrgApplyEnum.INIT.getStatus(), orgApplyApproveDTO.getStatus(), orgApplyApproveDTO.getCause(), UserContextHolder.getExistLoginUserId());
if (rows != 1) {
throw new BusinessException("审批失败,请稍后再试!");
}
SmsSimpleSendDTO sendDTO = new SmsSimpleSendDTO();
if (orgApplyApproveDTO.getStatus().equals(OrgApplyEnum.REJECT.getStatus())) {
/*//是驳回 短信通知联系人审核结果
sendDTO.setTemplateCode(SmsTemplateCodeEnum.ORG_APPLY_REJECT.getTemplateCodeKey());
List<SmsSimpleSendDetailDTO> detailDTOS = Lists.newArrayList();
sendDTO.setDetailDTOS(detailDTOS);
Map<String, Object> params = Maps.newHashMap();
params.put("companyName", orgApply.getCompanyName());
detailDTOS.add(SmsSimpleSendDetailDTO.builder()
.phone(orgApply.getPhone())
.parameters(params)
.build());
TransactionAfterCommit.doSomeThingAfterCommit(()->{
simpleSms.send(sendDTO);
});*/
} else if (orgApplyApproveDTO.getStatus().equals(OrgApplyEnum.SUCCESS.getStatus())) {
//审核通过了根据提交的企业信息去创建对应的机构
OrgCreateDTO orgCreateDTO = OrgCreateDTO.builder()
.type(orgApply.getCompanyType())
.orgName(orgApply.getCompanyName())
.phone(orgApply.getPhone())
.creditCode(orgApply.getCreditCode())
.addressCode(orgApply.getAreaCode())
.addressName(orgApply.getAddressName())
.parentId(orgApply.getInviterOrgId())
.recruitPositionType(orgApply.getRecruitPositionType())
.businessLicense(orgApply.getBusinessLicenseCode())
.registeredAddress(orgApply.getRegisteredAddress())
.realName(orgApply.getRealName())
.build();
orgService.create(orgCreateDTO);
/*sendDTO.setTemplateCode(SmsTemplateCodeEnum.ORG_APPLY_SUCCESS.getTemplateCodeKey());
List<SmsSimpleSendDetailDTO> detailDTOS = Lists.newArrayList();
sendDTO.setDetailDTOS(detailDTOS);
Map<String, Object> params = Maps.newHashMap();
params.put("companyName", orgApply.getCompanyName());
detailDTOS.add(SmsSimpleSendDetailDTO.builder()
.phone(orgApply.getPhone())
.parameters(params)
.build());
TransactionAfterCommit.doSomeThingAfterCommit(()->{
simpleSms.send(sendDTO);
});*/
}
}
@Override
public List<OrgApply> getInfoByPhone(String phone) {
/*boolean match = PhoneCodeUtils.match(PhoneCodeDTO.builder().phone(phone)
.code(code)
.providerType(PhoneCodeProviderEnum.GET_ORG_APPLY.getType()).build());
Assert.isTrue(match, new BadLoginException("验证码错误"));*/
List<OrgApply> orgApplyList = orgApplyMapper.selectList(new LambdaQueryWrapper<OrgApply>().eq(OrgApply::getPhone, phone).eq(OrgApply::getDeleted, false));
return orgApplyList;
}
@Override
public String share() {
Assert.isTrue(StringUtils.equals(OrgTypeEnum.ORG_TYPE_GOV.getType(),UserContextHolder.getOrgType()),"没有操作权限");
UserRegisterCodeInfoDTO codeDTO = UserRegisterCodeInfoDTO.builder()
.inviterId(UserContextHolder.getLoginUserId())
.inviterOrgId(UserContextHolder.getExistLoginOrgId())
.build();
return slickParamService.create(SlickParamCreateDTO.builder().paramData(codeDTO).build())
.getUniqueCode();
}
}

View File

@@ -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";
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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));
}
}

View File

@@ -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();
}
}

View File

@@ -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));
}
}

View File

@@ -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));
}
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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> {
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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));
}
}
}

View File

@@ -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 {
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

Some files were not shown because too many files have changed in this diff Show More