diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/employees/entity/NuEmployeesAdvisoryInfo.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/employees/entity/NuEmployeesAdvisoryInfo.java index 934aa31..f07e0c3 100644 --- a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/employees/entity/NuEmployeesAdvisoryInfo.java +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/employees/entity/NuEmployeesAdvisoryInfo.java @@ -274,4 +274,13 @@ public class NuEmployeesAdvisoryInfo implements Serializable { //信息修改状态 空:没提交过修改 1修改申请中 2通过 3驳回*/ @TableField(exist = false) private String modifyState; + + private String lastLoginOrg;//最近一次登录机构编码 + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date lastLoginTime;//最近上一次登录时间 + + private String izInit;//是否需要员工初始化 0否 1是 + } diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/listener/EmployeesMQListener.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/listener/EmployeesMQListener.java index 33ff41b..5145ead 100644 --- a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/listener/EmployeesMQListener.java +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/employees/listener/EmployeesMQListener.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.google.common.collect.Maps; import com.nu.dto.EmployeesApplyMQDto; import com.nu.dto.EmployeesStatusMQDto; +import com.nu.dto.SysUserMQDto; import com.nu.entity.WxNoticeEntity; import com.nu.enums.WxClientType; import com.nu.modules.employees.entity.EmployeesOrg; @@ -26,6 +27,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Date; import java.util.List; import java.util.Map; @@ -45,7 +47,7 @@ public class EmployeesMQListener { private ISysBaseAPI sysBaseAPI; /** - * 员工-机构关系状态调整 + * 员工-机构关系状态调整,并判断是否初始化账号 * 只修改审核状态、审核备注 * * @param dto @@ -72,8 +74,166 @@ public class EmployeesMQListener { uw.eq("org_code", dto.getOrgCode()); uw.eq("iz_history", "1"); employeesOrgService.update(employeesOrg, uw); + + //审批通过,判断是否需要通知业务系统初始化登录账户。需要初始化则直接通知;不需要初始化则需要从已存在的业务系统中获取账号信息,并将账号信息通知给此审批的业务系统 + if ("2".equals(dto.getAuditStatus())) { + NuEmployeesAdvisoryInfo employeesAd = employeesAdvisoryInfoService.getById(dto.getEmployeeId()); + if(employeesAd.getIzInit().equals("1")){ + //需要初始化,直接通知审批业务系统进行初始化 + SysUserMQDto sysUserMQDto = new SysUserMQDto(); + sysUserMQDto.setEmployeeId(dto.getEmployeeId()); + sysUserMQDto.setIzInit("1"); + sysUserMQDto.setIzInitPassword("0");//不需要更新其他业务平台密码 + rabbitMQUtil.sendToExchange("hldy.employees", dto.getOrgCode() + ".employees.initsysuser", sysUserMQDto); + }else{ + long diffInMillis = Math.abs((new Date()).getTime() - employeesAd.getLastLoginTime().getTime()); + // 30天的毫秒数(近似值) + long oneMonthInMillis = 30L * 24 * 60 * 60 * 1000; + if(diffInMillis > oneMonthInMillis){ + //最近登录时间大于30天,也需要初始化 + SysUserMQDto sysUserMQDto = new SysUserMQDto(); + sysUserMQDto.setEmployeeId(dto.getEmployeeId()); + sysUserMQDto.setIzInit("1"); + sysUserMQDto.setIzInitPassword("1");//需要更新其他业务平台密码 + rabbitMQUtil.sendToExchange("hldy.employees", dto.getOrgCode() + ".employees.initsysuser", sysUserMQDto); + }else{ + UpdateWrapper uwOrg = new UpdateWrapper<>(); + uwOrg.eq("employees_id", dto.getEmployeeId()); + uwOrg.eq("status", "2");//审批通过 + uwOrg.eq("iz_history", "1");//非历史 + uwOrg.eq("iz_freeze", "0");//未冻结 + uwOrg.eq("org_code", employeesAd.getLastLoginOrg());//机构 + EmployeesOrg empOrg = employeesOrgService.getOne(uwOrg); + if(empOrg!=null){ + //不需要初始化,发送MQ从原业务系统获取账号信息,MQ收到账号信息后再通知给审批业务系统 + SysUserMQDto sysUserMQDto = new SysUserMQDto(); + sysUserMQDto.setEmployeeId(dto.getEmployeeId()); + sysUserMQDto.setTargetOrgCode(dto.getOrgCode()); + rabbitMQUtil.sendToExchange("hldy.employees", employeesAd.getLastLoginOrg() + ".employees.sysuser.info", sysUserMQDto); + }else{ + //原账号冻结,也需要初始化 + SysUserMQDto sysUserMQDto = new SysUserMQDto(); + sysUserMQDto.setEmployeeId(dto.getEmployeeId()); + sysUserMQDto.setIzInit("1"); + sysUserMQDto.setIzInitPassword("1");//需要更新其他业务平台密码 + rabbitMQUtil.sendToExchange("hldy.employees", dto.getOrgCode() + ".employees.initsysuser", sysUserMQDto); + } + } + } + } } + /** + * 修改员工账户最近一次登录信息 + * + * @param dto + */ + @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.lastlogin", durable = "true"), + exchange = @Exchange(name = "hldy.employees", type = ExchangeTypes.DIRECT), + key = "hldy.employeesorg.lastlogin"), errorHandler = "employeesMQErrorHandler") + public void handleEmpLastLogin(SysUserMQDto dto) { + NuEmployeesAdvisoryInfo employeesAd = new NuEmployeesAdvisoryInfo(); + employeesAd.setId(dto.getEmployeeId()); + employeesAd.setIzInit("0"); + employeesAd.setLastLoginOrg(dto.getOrgCode()); + employeesAd.setLastLoginTime(new Date()); + employeesAdvisoryInfoService.updateById(employeesAd); + } + + /** + * 员工账户密码同步 + * + * @param dto + */ + @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "hldy.employeesorg.sysuser.sync", durable = "true"), + exchange = @Exchange(name = "hldy.employees", type = ExchangeTypes.DIRECT), + key = "hldy.employeesorg.sysuser.sync"), errorHandler = "employeesMQErrorHandler") + public void handleSysuserPwd(SysUserMQDto dto) { + UpdateWrapper uw = new UpdateWrapper<>(); + uw.eq("employees_id", dto.getEmployeeId()); + uw.eq("status", "2");//审批通过 + uw.eq("iz_history", "1");//非历史 + uw.eq("iz_freeze", "0");//未冻结 + List list = employeesOrgService.list(uw); + if(list.size()>0){ + for(int i=0;i oneMonthInMillis){ + //最近登录时间大于30天,也需要初始化 + SysUserMQDto sysUserMQDto = new SysUserMQDto(); + sysUserMQDto.setEmployeeId(dto.getEmployeeId()); + sysUserMQDto.setIzInit("1"); + sysUserMQDto.setIzInitPassword("1");//需要更新其他业务平台密码 + rabbitMQUtil.sendToExchange("hldy.employees", dto.getOrgCode() + ".employees.initsysuser", sysUserMQDto); + }else{ + UpdateWrapper uwOrg = new UpdateWrapper<>(); + uwOrg.eq("employees_id", dto.getEmployeeId()); + uwOrg.eq("status", "2");//审批通过 + uwOrg.eq("iz_history", "1");//非历史 + uwOrg.eq("iz_freeze", "0");//未冻结 + uwOrg.eq("org_code", employeesAd.getLastLoginOrg());//机构 + EmployeesOrg empOrg = employeesOrgService.getOne(uwOrg); + if(empOrg!=null){ + //不需要初始化,发送MQ从原业务系统获取账号信息,MQ收到账号信息后再通知给审批业务系统 + SysUserMQDto sysUserMQDto = new SysUserMQDto(); + sysUserMQDto.setEmployeeId(dto.getEmployeeId()); + sysUserMQDto.setTargetOrgCode(dto.getOrgCode()); + rabbitMQUtil.sendToExchange("hldy.employees", employeesAd.getLastLoginOrg() + ".employees.sysuser.info", sysUserMQDto); + }else{ + //原账号冻结,也需要初始化 + SysUserMQDto sysUserMQDto = new SysUserMQDto(); + sysUserMQDto.setEmployeeId(dto.getEmployeeId()); + sysUserMQDto.setIzInit("1"); + sysUserMQDto.setIzInitPassword("1");//需要更新其他业务平台密码 + rabbitMQUtil.sendToExchange("hldy.employees", dto.getOrgCode() + ".employees.initsysuser", sysUserMQDto); + } + } + } + + } + + /** * 员工-机构关系状态调整 * 只修改在线状态 diff --git a/nursing-unit-common/src/main/java/com/nu/dto/SysUserMQDto.java b/nursing-unit-common/src/main/java/com/nu/dto/SysUserMQDto.java new file mode 100644 index 0000000..8ab0880 --- /dev/null +++ b/nursing-unit-common/src/main/java/com/nu/dto/SysUserMQDto.java @@ -0,0 +1,107 @@ +package com.nu.dto; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 用户表 + *

+ * + * @Author scott + * @since 2018-12-20 + */ +@Data +public class SysUserMQDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private String id; + + /** + * 员工Id + */ + private String employeeId; + + /** + * 登录账号 + */ + private String username; + + /** + * 真实姓名 + */ + private String realname; + + /** + * 密码 + */ + private String password; + + /** + * md5密码盐 + */ + private String salt; + + /** + * 头像 + */ + private String avatar; + + /** + * 生日 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date birthday; + + /** + * 性别(1:男 2:女) + */ + private Integer sex; + + /** + * 电子邮件 + */ + private String email; + + /** + * 电话 + */ + private String phone; + + /** + * 结构编码 + */ + private String orgCode; + + /** + * 目的结构编码 + */ + private String targetOrgCode; + + /** + * 状态(1:正常 2:冻结 ) + */ + private Integer status; + + /** + * 删除状态(0,正常,1已删除) + */ + private Integer delFlag; + + /** + * 是否需要初始化(0,否,1是) + */ + private String izInit; + + /** + * 是否需要初始化密码(0,否,1是) + */ + private String izInitPassword; + +}