package com.highdatas.mdm.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.highdatas.mdm.entity.*;
import com.highdatas.mdm.mapper.MasterAuthorSubscribeMapper;
import com.highdatas.mdm.pojo.ActivitiStatus;
import com.highdatas.mdm.service.*;
import com.highdatas.mdm.util.Constant;
import com.highdatas.mdm.util.DbUtils;
import com.highdatas.mdm.util.pool.MqEntity;
import com.highdatas.mdm.util.pool.MqMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author kimi
* @since 2020-04-20
*/
@Service
@Slf4j
public class MasterAuthorSubscribeServiceImpl extends ServiceImpl implements IMasterAuthorSubscribeService {
@Autowired
IMasterAuthorService masterAuthorService;
@Autowired
IMaintainFieldService maintainFieldService;
@Autowired
ISysFieldService fieldService;
@Autowired
IMenuMappingService menuMappingService;
@Autowired
IMaintainService maintainService;
@Autowired
DispenseService dispenseService;
@Autowired
IMasterAuthorSubscribeService masterAuthorSubscribeService;
/**
*
* @description: 生成版本的需要检测哪些需要自动注册
* @param status 流程状态
* @param maintainId 数据版本id
* @return:
*
*/
@Override
public void dealFlow(String maintainId, ActivitiStatus status) {
try {
if (!ActivitiStatus.open.equals(status)) {
return;
}
Maintain maintain = maintainService.selectById(maintainId);
SysMenu menuByTableName = menuMappingService.getMenuByTableName(maintain.getTableName());
MaintainField maintainFieldByMaintain = fieldService.getMaintainFieldByMaintain(maintainId);
Set userIdList = new HashSet<>();
Set allUser = DbUtils.getAllUser();
for (TUser user : allUser) {
List userAuthor = masterAuthorService.getUserAuthor(user.getUserId(), null);
List authorMaintainFieldList = userAuthor.stream()
.filter(masterAuthor -> menuByTableName.getId().equalsIgnoreCase(masterAuthor.getMenuId()))
.collect(Collectors.toList());
int count = authorMaintainFieldList.size();
if (count == 0) {
continue;
}
for (MasterAuthor masterAuthor : authorMaintainFieldList) {
String maintainFieldId = masterAuthor.getMaintainFieldId();
if (maintainFieldId.equalsIgnoreCase(Constant.All) || maintainFieldId.equalsIgnoreCase(maintainFieldByMaintain.getId())) {
userIdList.add(user.getUserId());
}
}
}
log.info("已订阅用户数" + userIdList.size() + " 主题:" + menuByTableName.getName());
for (String userId : userIdList) {
int i = masterAuthorSubscribeService.selectCount(new EntityWrapper().eq("user_id", userId).eq("menu_id", menuByTableName.getId()));
if (i == 0) {
continue;
}
log.info("已订阅用户" + userId + " 主题:" + menuByTableName.getName());
MqEntity mqEntity = new MqEntity();
mqEntity.setUserId(userId);
mqEntity.setIncrement(true);
mqEntity.setMsgTopicName(Constant.Master);
mqEntity.setType(Constant.Master);
mqEntity.setDataId(menuByTableName.getId());
mqEntity.setMaintainId(maintainId);
mqEntity.setMsgTagName(menuByTableName.getId());
MqEntity.MsgBodyBean msgBody = mqEntity.getMsgBody();
msgBody.setVersion(maintainId);
mqEntity.setMsgKey(DbUtils.getUUID(16));
MqMessage mqMessage = new MqMessage(mqEntity);
dispenseService.pushActiveMq(mqMessage);
}
}
catch (Exception e){
e.printStackTrace();
}
}
}