员工入职机构

This commit is contained in:
1378012178@qq.com 2025-09-11 08:58:58 +08:00
parent d1acb58d7e
commit 44accb2336
12 changed files with 116 additions and 17 deletions

View File

@ -8,7 +8,7 @@ import java.util.List;
public interface EmployeesOrgLocalApi { public interface EmployeesOrgLocalApi {
String apply(EmployeesApplyEntity dto); String apply(EmployeesApplyEntity dto);
List<EmployeesOrgApiEntity> queryAll(String orgCodes); List<EmployeesOrgApiEntity> queryAll(String orgCodes,String openId);
String canApply(String employeeId, String orgCode); String canApply(String employeeId, String orgCode);
} }

View File

@ -49,4 +49,6 @@ public class EmployeesOrgApiEntity implements Serializable {
private String status; private String status;
/**审核备注*/ /**审核备注*/
private String auditContent; private String auditContent;
/**是否为被邀请 0被邀请 1主动申请*/
private java.lang.String isInvited;
} }

View File

@ -14,4 +14,6 @@ public class EmployeesApiEntity {
private java.lang.String izOnline; private java.lang.String izOnline;
/**冻结状态 0未冻结 1冻结*/ /**冻结状态 0未冻结 1冻结*/
private java.lang.String izFreeze; private java.lang.String izFreeze;
/**是否为被邀请 0被邀请 1主动申请*/
private java.lang.String isInvited;
} }

View File

@ -178,6 +178,8 @@ public class OrgAllInfoApiEntity implements Serializable {
private String izOnline; private String izOnline;
/** 是否冻结 0是1否*/ /** 是否冻结 0是1否*/
private String izFreeze; private String izFreeze;
/**是否为被邀请 0被邀请 1主动申请*/
private java.lang.String isInvited;
/** 入职时间*/ /** 入职时间*/
private String entryTime; private String entryTime;
/**申请日期*/ /**申请日期*/

View File

@ -88,4 +88,12 @@ public class EmployeesOrg implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "入职时间") @ApiModelProperty(value = "入职时间")
private java.util.Date entryTime; private java.util.Date entryTime;
/**是否历史数据 0历史 1非历史*/
@Excel(name = "是否历史数据", width = 15)
@ApiModelProperty(value = "是否历史数据")
private java.lang.String izHistory;
/**是否为被邀请 0被邀请 1主动申请*/
@Excel(name = "是否为被邀请", width = 15)
@ApiModelProperty(value = "是否为被邀请")
private java.lang.String isInvited;
} }

View File

@ -2,6 +2,7 @@ package com.nu.modules.employees.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.nu.entity.EmployeesApplyEntity; import com.nu.entity.EmployeesApplyEntity;
import com.nu.modules.EmployessInfo.api.EmployeesOrgLocalApi; import com.nu.modules.EmployessInfo.api.EmployeesOrgLocalApi;
import com.nu.modules.EmployessInfo.entity.EmployeesOrgApiEntity; import com.nu.modules.EmployessInfo.entity.EmployeesOrgApiEntity;
@ -25,6 +26,14 @@ public class EmployeesOrgServiceImpl extends ServiceImpl<EmployeesOrgMapper, Emp
@Override @Override
public String apply(EmployeesApplyEntity dto) { public String apply(EmployeesApplyEntity dto) {
//先将旧数据置为历史状态
UpdateWrapper<EmployeesOrg> uw = new UpdateWrapper<>();
uw.eq("employees_id",dto.getEmployeeId());
uw.eq("org_code",dto.getOrgCode());
EmployeesOrg udto = new EmployeesOrg();
udto.setIzHistory("0");
baseMapper.update(udto,uw);
EmployeesOrg employeesOrg = new EmployeesOrg(); EmployeesOrg employeesOrg = new EmployeesOrg();
employeesOrg.setOpenId(dto.getOpenId()); employeesOrg.setOpenId(dto.getOpenId());
employeesOrg.setEmployeesId(dto.getEmployeeId()); employeesOrg.setEmployeesId(dto.getEmployeeId());
@ -32,14 +41,17 @@ public class EmployeesOrgServiceImpl extends ServiceImpl<EmployeesOrgMapper, Emp
employeesOrg.setStatus("1"); employeesOrg.setStatus("1");
employeesOrg.setIzOnline("1"); employeesOrg.setIzOnline("1");
employeesOrg.setIzFreeze("0"); employeesOrg.setIzFreeze("0");
employeesOrg.setIsInvited("1");
baseMapper.insert(employeesOrg); baseMapper.insert(employeesOrg);
return employeesOrg.getId(); return employeesOrg.getId();
} }
@Override @Override
public List<EmployeesOrgApiEntity> queryAll(String orgCodes) { public List<EmployeesOrgApiEntity> queryAll(String orgCodes,String openId) {
QueryWrapper<EmployeesOrg> qw = new QueryWrapper<>(); QueryWrapper<EmployeesOrg> qw = new QueryWrapper<>();
qw.in("org_code", orgCodes.split(",")); qw.in("org_code", orgCodes.split(","));
qw.eq("open_id",openId);
qw.eq("iz_history","1");
List<EmployeesOrg> list = baseMapper.selectList(qw); List<EmployeesOrg> list = baseMapper.selectList(qw);
List<EmployeesOrgApiEntity> result = BeanUtil.copyToList(list, EmployeesOrgApiEntity.class); List<EmployeesOrgApiEntity> result = BeanUtil.copyToList(list, EmployeesOrgApiEntity.class);
return result; return result;
@ -50,6 +62,7 @@ public class EmployeesOrgServiceImpl extends ServiceImpl<EmployeesOrgMapper, Emp
QueryWrapper<EmployeesOrg> qw = new QueryWrapper<>(); QueryWrapper<EmployeesOrg> qw = new QueryWrapper<>();
qw.eq("employees_id", employeeId); qw.eq("employees_id", employeeId);
qw.eq("org_code",orgCode); qw.eq("org_code",orgCode);
qw.eq("iz_history","1");
EmployeesOrg employeesOrg = baseMapper.selectOne(qw); EmployeesOrg employeesOrg = baseMapper.selectOne(qw);
if(employeesOrg != null ){ if(employeesOrg != null ){
if("1".equals(employeesOrg.getStatus())){ if("1".equals(employeesOrg.getStatus())){

View File

@ -177,6 +177,8 @@ public class OrgAllInfo implements Serializable {
private String izOnline; private String izOnline;
/** 是否冻结 0是1否*/ /** 是否冻结 0是1否*/
private String izFreeze; private String izFreeze;
/**是否为被邀请 0被邀请 1主动申请*/
private java.lang.String isInvited;
/** 入职时间*/ /** 入职时间*/
private String entryTime; private String entryTime;
/**申请日期*/ /**申请日期*/

View File

@ -83,6 +83,7 @@
eo.status AS applyStatus, eo.status AS applyStatus,
eo.iz_online, eo.iz_online,
eo.iz_freeze, eo.iz_freeze,
eo.iz_invited,
eo.entry_time, eo.entry_time,
eo.create_time AS apply_time, eo.create_time AS apply_time,
eo.update_time AS audit_time eo.update_time AS audit_time
@ -93,8 +94,12 @@
o.status = '2' o.status = '2'
and d.del_flag = '0' and d.del_flag = '0'
AND eo.open_id = #{openId} AND eo.open_id = #{openId}
AND eo.iz_history = '1'
<if test="status != null and status != ''"> <if test="status != null and status != ''">
and eo.status = #{status} and eo.status in
<foreach collection="status.split(',')" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if> </if>
</where> </where>
<choose> <choose>
@ -102,7 +107,14 @@
ORDER BY (d.org_code + 0) ASC ORDER BY (d.org_code + 0) ASC
</when> </when>
<otherwise> <otherwise>
ORDER BY eo.create_time DESC ORDER BY
CASE eo.status
WHEN '2' THEN 1
WHEN '1' THEN 2
WHEN '3' THEN 3
ELSE 4
END,
eo.create_time DESC
</otherwise> </otherwise>
</choose> </choose>

View File

@ -1,17 +1,21 @@
package com.nu.mq.employees.listener; package com.nu.mq.employees.listener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.nu.dto.EmployeesApplyMQDto;
import com.nu.dto.EmployeesStatusMQDto; import com.nu.dto.EmployeesStatusMQDto;
import com.nu.modules.employees.entity.EmployeesOrg; import com.nu.modules.employees.entity.EmployeesOrg;
import com.nu.modules.employees.entity.NuEmployeesAdvisoryInfo; import com.nu.modules.employees.entity.NuEmployeesAdvisoryInfo;
import com.nu.modules.employees.service.IEmployeesOrgService; import com.nu.modules.employees.service.IEmployeesOrgService;
import com.nu.modules.employees.service.INuEmployeesAdvisoryInfoService; import com.nu.modules.employees.service.INuEmployeesAdvisoryInfoService;
import com.nu.utils.RabbitMQUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes; import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange; import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue; import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding; import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -23,10 +27,13 @@ public class EmployeesMQListener {
private IEmployeesOrgService employeesOrgService; private IEmployeesOrgService employeesOrgService;
@Autowired @Autowired
private INuEmployeesAdvisoryInfoService employeesAdvisoryInfoService; private INuEmployeesAdvisoryInfoService employeesAdvisoryInfoService;
@Autowired
private RabbitMQUtil rabbitMQUtil;
/** /**
* 员工-机构关系状态调整 * 员工-机构关系状态调整
* 只修改审核状态审核备注 * 只修改审核状态审核备注
*
* @param dto * @param dto
*/ */
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.auditstatus.sync", durable = "true"), @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.auditstatus.sync", durable = "true"),
@ -36,7 +43,7 @@ public class EmployeesMQListener {
EmployeesOrg employeesOrg = new EmployeesOrg(); EmployeesOrg employeesOrg = new EmployeesOrg();
employeesOrg.setStatus(dto.getAuditStatus()); employeesOrg.setStatus(dto.getAuditStatus());
employeesOrg.setAuditContent(dto.getAuditContent()); employeesOrg.setAuditContent(dto.getAuditContent());
if("2".equals(dto.getAuditStatus())){ if ("2".equals(dto.getAuditStatus())) {
employeesOrg.setEntryTime(dto.getEntryTime());//审批通过的话将入职时间设置进去 employeesOrg.setEntryTime(dto.getEntryTime());//审批通过的话将入职时间设置进去
//修改员工注册表的入驻状态 //修改员工注册表的入驻状态
NuEmployeesAdvisoryInfo employeesAd = new NuEmployeesAdvisoryInfo(); NuEmployeesAdvisoryInfo employeesAd = new NuEmployeesAdvisoryInfo();
@ -45,14 +52,16 @@ public class EmployeesMQListener {
employeesAdvisoryInfoService.updateById(employeesAd); employeesAdvisoryInfoService.updateById(employeesAd);
} }
UpdateWrapper<EmployeesOrg> uw = new UpdateWrapper<>(); UpdateWrapper<EmployeesOrg> uw = new UpdateWrapper<>();
uw.eq("employees_id",dto.getEmployeeId()); uw.eq("employees_id", dto.getEmployeeId());
uw.eq("org_code",dto.getOrgCode()); uw.eq("org_code", dto.getOrgCode());
employeesOrgService.update(employeesOrg,uw); uw.eq("iz_history", "1");
employeesOrgService.update(employeesOrg, uw);
} }
/** /**
* 员工-机构关系状态调整 * 员工-机构关系状态调整
* 只修改在线状态 * 只修改在线状态
*
* @param dto * @param dto
*/ */
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.onlinestatus.sync", durable = "true"), @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.onlinestatus.sync", durable = "true"),
@ -62,14 +71,16 @@ public class EmployeesMQListener {
EmployeesOrg employeesOrg = new EmployeesOrg(); EmployeesOrg employeesOrg = new EmployeesOrg();
employeesOrg.setIzOnline(dto.getIzOnline()); employeesOrg.setIzOnline(dto.getIzOnline());
UpdateWrapper<EmployeesOrg> uw = new UpdateWrapper<>(); UpdateWrapper<EmployeesOrg> uw = new UpdateWrapper<>();
uw.eq("employees_id",dto.getEmployeeId()); uw.eq("employees_id", dto.getEmployeeId());
uw.eq("org_code",dto.getOrgCode()); uw.eq("org_code", dto.getOrgCode());
employeesOrgService.update(employeesOrg,uw); uw.eq("iz_history", "1");
employeesOrgService.update(employeesOrg, uw);
} }
/** /**
* 员工-机构关系状态调整 * 员工-机构关系状态调整
* 只修改冻结状态 * 只修改冻结状态
*
* @param dto * @param dto
*/ */
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.freezestatus.sync", durable = "true"), @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.freezestatus.sync", durable = "true"),
@ -79,9 +90,49 @@ public class EmployeesMQListener {
EmployeesOrg employeesOrg = new EmployeesOrg(); EmployeesOrg employeesOrg = new EmployeesOrg();
employeesOrg.setIzFreeze(dto.getIzFreeze()); employeesOrg.setIzFreeze(dto.getIzFreeze());
UpdateWrapper<EmployeesOrg> uw = new UpdateWrapper<>(); UpdateWrapper<EmployeesOrg> uw = new UpdateWrapper<>();
uw.eq("employees_id",dto.getEmployeeId()); uw.eq("employees_id", dto.getEmployeeId());
uw.eq("org_code",dto.getOrgCode()); uw.eq("org_code", dto.getOrgCode());
employeesOrgService.update(employeesOrg,uw); uw.eq("iz_history", "1");
employeesOrgService.update(employeesOrg, uw);
} }
/**
* 机构邀请员工
*
* @param dto
*/
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employees.invide", durable = "true"),
exchange = @Exchange(name = "hldy.employees", type = ExchangeTypes.DIRECT),
key = "hldy.employees.invide"), errorHandler = "employeesMQErrorHandler")
public void handleInvided(EmployeesApplyMQDto dto) {
//先查询此人是否已经提交了申请信息 出现问题概率可能在1-2秒内同时申请与邀请 如果网络不好则大幅增加时长
QueryWrapper<EmployeesOrg> qw = new QueryWrapper<>();
qw.eq("employees_id", dto.getEmployeeId());
qw.eq("org_code", dto.getOrgCode());
qw.eq("iz_history", "1");
EmployeesOrg one = employeesOrgService.getOne(qw);
if (one != null) {
rabbitMQUtil.sendToExchange("hldy.employees", dto.getOrgCode()+ "employees.cannotinvided", dto);
return;
}
//先把之前的数据都改为历史数据
UpdateWrapper<EmployeesOrg> uw = new UpdateWrapper<>();
uw.eq("employees_id", dto.getEmployeeId());
uw.eq("org_code", dto.getOrgCode());
EmployeesOrg udto = new EmployeesOrg();
udto.setIzHistory("0");
employeesOrgService.update(udto, uw);
//向员工-机构关系表插数据
EmployeesOrg employeesOrg = new EmployeesOrg();
employeesOrg.setOpenId(dto.getOpenId());
employeesOrg.setEmployeesId(dto.getEmployeeId());
employeesOrg.setOrgCode(dto.getOrgCode());
employeesOrg.setStatus("1");
employeesOrg.setIzOnline("1");
employeesOrg.setIzFreeze("0");
employeesOrg.setIsInvited("0");
employeesOrgService.save(employeesOrg);
}
} }

View File

@ -1,7 +1,6 @@
package com.nu.modules.wechat.employess.api; package com.nu.modules.wechat.employess.api;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.nu.dto.EmployeesApplyMQDto; import com.nu.dto.EmployeesApplyMQDto;
import com.nu.entity.EmployeesApplyEntity; import com.nu.entity.EmployeesApplyEntity;
@ -70,7 +69,8 @@ public class EmployessApplyApi {
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "8") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "8") Integer pageSize,
@RequestParam(value = "orgCode", defaultValue = "", required = false) String orgCode, @RequestParam(value = "orgCode", defaultValue = "", required = false) String orgCode,
@RequestParam(value = "title", defaultValue = "", required = false) String title) { @RequestParam(value = "title", defaultValue = "", required = false) String title,
@RequestParam(value = "openId") String openId) {
IPage<OrgAllInfoApiEntity> result = orgApplyInfoApi.queryOrgAllInfo(pageNo, pageSize, orgCode, title); IPage<OrgAllInfoApiEntity> result = orgApplyInfoApi.queryOrgAllInfo(pageNo, pageSize, orgCode, title);
List<OrgAllInfoApiEntity> sourceRecords = result.getRecords(); List<OrgAllInfoApiEntity> sourceRecords = result.getRecords();
if (sourceRecords == null || sourceRecords.size() <= 0) { if (sourceRecords == null || sourceRecords.size() <= 0) {
@ -85,7 +85,7 @@ public class EmployessApplyApi {
if (orgCodes.endsWith(",")) { if (orgCodes.endsWith(",")) {
orgCodes.substring(0, orgCodes.length() - 2); orgCodes.substring(0, orgCodes.length() - 2);
} }
List<EmployeesOrgApiEntity> employeesOrgList = employeesOrgLocalApi.queryAll(orgCodes); List<EmployeesOrgApiEntity> employeesOrgList = employeesOrgLocalApi.queryAll(orgCodes,openId);
if (employeesOrgList != null && employeesOrgList.size() > 0) { if (employeesOrgList != null && employeesOrgList.size() > 0) {
employeesOrgList.stream().forEach(eo -> { employeesOrgList.stream().forEach(eo -> {
EmployeesApiEntity en = new EmployeesApiEntity(); EmployeesApiEntity en = new EmployeesApiEntity();
@ -93,6 +93,7 @@ public class EmployessApplyApi {
en.setAuditContent(eo.getAuditContent()); en.setAuditContent(eo.getAuditContent());
en.setIzOnline(eo.getIzOnline()); en.setIzOnline(eo.getIzOnline());
en.setIzFreeze(eo.getIzFreeze()); en.setIzFreeze(eo.getIzFreeze());
en.setIsInvited(eo.getIsInvited());
sourceRecords.get(indexMap.get(eo.getOrgCode())).setEmployeesApiEntity(en); sourceRecords.get(indexMap.get(eo.getOrgCode())).setEmployeesApiEntity(en);
}); });
result.setRecords(sourceRecords); result.setRecords(sourceRecords);

View File

@ -29,4 +29,6 @@ public class EmployeesStatusMQDto implements Serializable {
private String orgCode; private String orgCode;
/**入职时间*/ /**入职时间*/
private Date entryTime; private Date entryTime;
/**openId*/
private Date openId;
} }

View File

@ -1,6 +1,8 @@
package com.nu.entity; package com.nu.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -32,6 +34,8 @@ public class EmployeesApplyEntity implements Serializable {
/**联系电话*/ /**联系电话*/
private String tel; private String tel;
/**出生日期*/ /**出生日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy年MM月dd日")
@DateTimeFormat(pattern = "yyyy年MM月dd日")
private Date dateOfBirth; private Date dateOfBirth;
/**婚否*/ /**婚否*/
private String marriedOrNot; private String marriedOrNot;