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