package com.qianwen.smartman.modules.notify.service.impl;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.stream.Collectors;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.qianwen.core.context.task.TaskExecutionContext;
|
import com.qianwen.core.context.task.TaskExecutorTypeEnum;
|
import com.qianwen.core.notify.DefaultNotifyType;
|
import com.qianwen.core.notify.executor.INotifyTaskService;
|
import com.qianwen.core.notify.executor.NotifyDirectSendInfo;
|
import com.qianwen.core.notify.executor.NotifyExecutionContext;
|
import com.qianwen.core.notify.executor.RuleNotifierProperties;
|
import com.qianwen.core.tool.utils.BeanUtil;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.smartman.modules.cps.service.IEmployeeService;
|
import com.qianwen.smartman.modules.notify.convert.BusinessNotifyConvert;
|
import com.qianwen.smartman.modules.notify.dto.BusinessNotifyDTO;
|
import com.qianwen.smartman.modules.notify.dto.NotifyUserDTO;
|
import com.qianwen.smartman.modules.notify.entity.BusinessNotify;
|
import com.qianwen.smartman.modules.notify.mapper.BusinessNotifyMapper;
|
import com.qianwen.smartman.modules.notify.service.IBusinessNotifyService;
|
import com.qianwen.smartman.modules.system.service.IUserOauthService;
|
import com.qianwen.smartman.modules.system.service.IUserService;
|
|
@Service
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/notify/service/impl/NotifyTaskServiceImpl.class */
|
public class NotifyTaskServiceImpl implements INotifyTaskService {
|
private static final Logger log = LoggerFactory.getLogger(NotifyTaskServiceImpl.class);
|
private final IBusinessNotifyService businessNotifyService;
|
private final BusinessNotifyMapper businessNotifyMapper;
|
private final IUserService userService;
|
private final IUserOauthService userOauthService;
|
private final IEmployeeService employeeService;
|
|
|
public NotifyTaskServiceImpl(final IBusinessNotifyService businessNotifyService, final BusinessNotifyMapper businessNotifyMapper, final IUserService userService, final IUserOauthService userOauthService, final IEmployeeService employeeService) {
|
this.businessNotifyService = businessNotifyService;
|
this.businessNotifyMapper = businessNotifyMapper;
|
this.userService = userService;
|
this.userOauthService = userOauthService;
|
this.employeeService = employeeService;
|
}
|
|
private List<NotifyUserDTO> getNotifySubscriberList(List<String> notifySubscriberList, TaskExecutorTypeEnum taskExecutorTypeEnum) {
|
List<NotifyUserDTO> result;
|
//没问题了,根据使用的service判断
|
switch (taskExecutorTypeEnum) {
|
case EMPLOYEE://gui: email
|
result = this.employeeService.getNotifySubscriberList(notifySubscriberList);
|
break;
|
default:
|
result = this.userService.getNotifySubscriberList(notifySubscriberList);
|
}
|
|
/*
|
switch (AnonymousClass1.$SwitchMap$org$springblade$core$context$task$TaskExecutorTypeEnum[taskExecutorTypeEnum.ordinal()]) {
|
case 1:
|
result = this.employeeService.getNotifySubscriberList(notifySubscriberList);
|
break;
|
case 2:
|
default:
|
result = this.userService.getNotifySubscriberList(notifySubscriberList);
|
break;
|
}*/
|
return result;
|
}
|
|
public List<String> getNotifiedPartyList(String tenantId, String businessKey, String defaultNotifyType, List<String> notifySubscriberList, TaskExecutorTypeEnum taskExecutorTypeEnum) {
|
List<String> result = new ArrayList<>();
|
if (Func.isNotEmpty(notifySubscriberList)) {
|
List<NotifyUserDTO> notifyUserDTOS = getNotifySubscriberList(notifySubscriberList, taskExecutorTypeEnum);
|
switch (DefaultNotifyType.of(defaultNotifyType)) {
|
case email:
|
result.addAll(notifyUserDTOS.stream().map(NotifyUserDTO::getEmail).filter(Func::isNotEmpty).collect(Collectors.toList()));
|
break;
|
case sms:
|
result.addAll(notifyUserDTOS.stream().map(NotifyUserDTO::getPhone).filter(Func::isNotEmpty).collect(Collectors.toList()));
|
break;
|
case weiXinMini:
|
result.addAll(notifyUserDTOS.stream().map(NotifyUserDTO::getWeiXinMiniUserId).filter(Func::isNotEmpty).collect(Collectors.toList()));
|
case internalMessage:
|
default:
|
result.addAll(notifyUserDTOS.stream().map(NotifyUserDTO::getUserId).map(Func::toStr).collect(Collectors.toList()));
|
break;
|
}
|
/*
|
switch (AnonymousClass1.$SwitchMap$org$springblade$core$notify$DefaultNotifyType[DefaultNotifyType.of(defaultNotifyType).ordinal()]) {
|
case 1:
|
result.addAll((Collection) notifyUserDTOS.stream().map((v0) -> {
|
return v0.getEmail();
|
}).filter((v0) -> {
|
return Func.isNotEmpty(v0);
|
}).collect(Collectors.toList()));
|
break;
|
case 2:
|
result.addAll((Collection) notifyUserDTOS.stream().map((v0) -> {
|
return v0.getPhone();
|
}).filter((v0) -> {
|
return Func.isNotEmpty(v0);
|
}).collect(Collectors.toList()));
|
break;
|
case 3:
|
result.addAll((Collection) notifyUserDTOS.stream().map((v0) -> {
|
return v0.getWeiXinMiniUserId();
|
}).filter((v0) -> {
|
return Func.isNotEmpty(v0);
|
}).collect(Collectors.toList()));
|
case 4:
|
result.addAll((Collection) notifyUserDTOS.stream().map((v0) -> {
|
return v0.getUserId();
|
}).map((v0) -> {
|
return Func.toStr(v0);
|
}).collect(Collectors.toList()));
|
break;
|
}*/
|
}
|
result.removeAll(Collections.singleton(null));
|
return result;
|
}
|
|
public List<NotifyExecutionContext> createNotifyExecutionContext(TaskExecutionContext taskExecutionContext) {
|
List<NotifyExecutionContext> result = new CopyOnWriteArrayList<>();
|
List<BusinessNotifyDTO> finallyBusiness = BusinessNotifyConvert.INSTANCE.convertToDTOList(this.businessNotifyService
|
.list(Wrappers.<BusinessNotify>query().lambda()
|
.eq(BusinessNotify::getBusinessKey, taskExecutionContext.getBusiness())
|
.eq(BusinessNotify::getTenantId, taskExecutionContext.getTenantId())));
|
/*
|
List<BusinessNotifyDTO> finallyBusiness = BusinessNotifyConvert.INSTANCE.convertToDTOList(this.businessNotifyService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.query().lambda().eq((v0) -> {
|
return v0.getBusinessKey();
|
}, taskExecutionContext.getBusiness())).eq((v0) -> {
|
return v0.getTenantId();
|
}, taskExecutionContext.getTenantId())));*/
|
if (Func.isNotEmpty(finallyBusiness)) {
|
finallyBusiness.forEach(notify -> {
|
List<String> notifiedPartys = getNotifiedPartyList(taskExecutionContext.getTenantId(), taskExecutionContext.getBusiness(), notify.getNotifyType(), taskExecutionContext.getRelatedPersonals(), taskExecutionContext.getTaskExecutorTypeEnum());
|
Object sendInfo = taskExecutionContext.getExtendInfo().get("notify_direct_address");
|
if (Func.isNotEmpty(sendInfo)) {
|
List<NotifyDirectSendInfo> sendInfoList = new ArrayList<>();
|
List<Map<String, Object>> data = (List<Map<String, Object>>)sendInfo;
|
//List<Map<String, Object>> data = sendInfo;
|
data.forEach(x -> {
|
NotifyDirectSendInfo notifyDirectSendInfo = (NotifyDirectSendInfo) BeanUtil.toBean(x, NotifyDirectSendInfo.class);
|
notifyDirectSendInfo.setNotifyType(DefaultNotifyType.of(x.get("notifyType").toString()));
|
sendInfoList.add(notifyDirectSendInfo);
|
});
|
(sendInfoList.stream().filter(x2 -> {
|
return notify.getNotifyType().equals(x2.getNotifyType().getId());
|
}).collect(Collectors.toList())).forEach(x3 -> {
|
notifiedPartys.addAll(x3.getDirectSendAddress());
|
});
|
}
|
if (Func.isNotEmpty(notifiedPartys)) {
|
NotifyExecutionContext notifyExecutionContext = new NotifyExecutionContext();
|
notifyExecutionContext.setContextId(taskExecutionContext.getContextId());
|
notifyExecutionContext.setTenantId(taskExecutionContext.getTenantId());
|
notifyExecutionContext.setData(taskExecutionContext.getData() != null ? taskExecutionContext.getData() : new HashMap());
|
notifyExecutionContext.setNotifiedParty(notifiedPartys);
|
RuleNotifierProperties ruleNotifierProperties = new RuleNotifierProperties().setNotifierId(notify.getNotifyId()).setNotifyType(DefaultNotifyType.of(notify.getNotifyType())).setTemplateId(notify.getNotifyTemplateId());
|
notifyExecutionContext.setConfiguration(ruleNotifierProperties);
|
result.add(notifyExecutionContext);
|
}
|
});
|
}
|
return result;
|
}
|
}
|