StaffLeaveEventConsumer.java 2.15 KB
package cn.fw.dalaran.server.rocketMQ;

import cn.fw.dalaran.common.constants.Constants;
import cn.fw.dalaran.domain.db.Account;
import cn.fw.dalaran.service.data.AccountService;
import cn.fw.ehr.sdk.api.mq.StaffLeaveEvent;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @author wmy3969
 * @version 1.0
 * @date 2022/03/14 14:04
 * @Description 员工离职消息队列消息监听, 删除员工自媒体账号
 */
@Slf4j
@Component
@RequiredArgsConstructor
@RocketMQMessageListener(
        topic = StaffLeaveEvent.TOPIC,
        consumerGroup = Constants.APPLICATION_NAME + "-" + StaffLeaveEvent.TOPIC)
public class StaffLeaveEventConsumer implements RocketMQListener<StaffLeaveEvent> {

    private final AccountService accountService;

    /**
     * 员工离职, 删除员工自媒体账号
     *
     * @param staffLeaveEvent 封装了员工离职信息
     */
    @Override
    public void onMessage(StaffLeaveEvent staffLeaveEvent) {
        log.info("收到员工离职消息 message:{}", JSON.toJSONString(staffLeaveEvent));
        try {
            Long staffId = staffLeaveEvent.getId();// 获取该职工的id
            boolean result = false;
            int tryCount = 0;
            while (!result && tryCount < 3) {
                result = accountService.lambdaUpdate()
                        .eq(Account::getUserId, staffId)
                        .set(Account::getValid, 0)
                        .set(Account::getAffirm, 0)
                        .set(Account::getYn, 0)
                        .set(Account::getAccountStatus, -1)
                        .set(Account::getLeaveTime, new Date())
                        .update();
                if (!result)
                    Thread.sleep(3000);
                tryCount++;
            }
        } catch (Exception e) {
            log.error("处理员工离职消息发生异常 message:{}", JSON.toJSONString(staffLeaveEvent), e);
        }
    }
}