package com.qianwen.smartman.modules.notify.controller; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import javax.validation.Valid; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.qianwen.core.boot.ctrl.BladeController; import com.qianwen.core.cache.utils.CacheUtil; import com.qianwen.core.notify.notifier.NotifierProvider; import com.qianwen.core.scanner.modular.annotation.DeleteResource; import com.qianwen.core.scanner.modular.annotation.GetResource; import com.qianwen.core.scanner.modular.annotation.PutResource; import com.qianwen.core.scanner.modular.stereotype.ApiResource; import com.qianwen.core.secure.BladeUser; import com.qianwen.core.tool.api.R; import com.qianwen.core.tool.metadata.ConfigMetadata; import com.qianwen.smartman.common.cache.RegionCache; import com.qianwen.smartman.modules.notify.convert.NotifyConfigConvert; import com.qianwen.smartman.modules.notify.dto.NotifyConfigDTO; import com.qianwen.smartman.modules.notify.dto.NotifyTypeInfo; import com.qianwen.smartman.modules.notify.dto.ProviderInfo; import com.qianwen.smartman.modules.notify.entity.NotifyConfigEntity; import com.qianwen.smartman.modules.notify.service.INotifyConfigService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @ApiResource({"blade-notify/notifier/config"}) @Api(value = "通知配置管理", tags = {"通知配置管理"}) @RestController /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/notify/controller/NotifierConfigController.class */ public class NotifierConfigController extends BladeController { private final INotifyConfigService notifyConfigService; private final List providers; public NotifierConfigController(final INotifyConfigService notifyConfigService, final List providers) { this.notifyConfigService = notifyConfigService; this.providers = providers; } @ApiOperationSupport(order = 1) @GetResource({"/{type}/{provider}/metadata"}) @ApiOperation(value = "获取指定类型和服务商所需配置定义", notes = "获取指定类型和服务商所需配置定义") public R getAllTypes(@PathVariable("type") @ApiParam(value = "通知类型ID", required = true) String type, @PathVariable("provider") @ApiParam(value = "服务商ID", required = true) String provider) { return R.data(this.notifyConfigService.getMetadataByTypeAndProvider(type, provider)); } @ApiOperationSupport(order = 2) @GetResource({"/types"}) @ApiOperation("获取平台支持的通知类型") public R> getAllNotifyTypes() { return R.data(this.notifyConfigService.getAllNotifyType()); } @ApiOperationSupport(order = 3) @GetResource({"/type/{type}/providers"}) @ApiOperation("获取支持的服务商") public R> getTypeProviders(@PathVariable("type") @ApiParam(value = "通知类型ID类型标识", required = true) String type) { return R.data(this.providers.stream().filter(provider -> { return provider.getType().getId().equals(type); }).map(ProviderInfo::of).collect(Collectors.toList())); } @ApiOperationSupport(order = 4) @PutResource @ApiOperation(value = "新增或修改", notes = "传入通知配置") public R submit(@Valid @RequestBody NotifyConfigDTO notifyConfigDTO, BladeUser bladeUser) { return R.data(this.notifyConfigService.saveOrUpdateConfig(NotifyConfigConvert.INSTANCE.convertToEntity(notifyConfigDTO.setTenantId(bladeUser.getTenantId())))); } @ApiOperationSupport(order = RegionCache.VILLAGE_LEVEL) @DeleteResource({"/{id}"}) @ApiOperation(value = "删除", notes = "传入id,只允许租户所有的配置删除") public R remove(@PathVariable("id") @ApiParam(value = "主键", required = true) String id, BladeUser bladeUser) { CacheUtil.evict("blade:notify", "notifier:id:", id, false); this.notifyConfigService.checkUsedByBusinessNotify(id); return R.status(this.notifyConfigService.remove(Wrappers.query().lambda() .eq(NotifyConfigEntity::getId, id).eq(NotifyConfigEntity::getTenantId, bladeUser.getTenantId()))); /* return R.status(this.notifyConfigService.remove((Wrapper) ((LambdaQueryWrapper) Wrappers.query().lambda().eq((v0) -> { return v0.getId(); }, id)).eq((v0) -> { return v0.getTenantId(); }, bladeUser.getTenantId())));*/ } @ApiOperationSupport(order = 7) @GetResource({"/available"}) @ApiOperation(value = "业务通知可选的通知配置", notes = "传入通知类型") public R> getAvailableNotifyConfig(@RequestParam String notifyType, BladeUser bladeUser) { List tenantIds = new ArrayList<>(Arrays.asList(bladeUser.getTenantId())); List result = this.notifyConfigService.list(Wrappers.lambdaQuery() .in(NotifyConfigEntity::getTenantId, tenantIds) .eq(NotifyConfigEntity::getType, notifyType) .select(NotifyConfigEntity::getId, NotifyConfigEntity::getName, NotifyConfigEntity::getProvider)); /* List result = this.notifyConfigService.list(((LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getTenantId(); }, tenantIds)).eq((v0) -> { return v0.getType(); }, notifyType)).select(new SFunction[]{(v0) -> { return v0.getId(); }, (v0) -> { return v0.getName(); }, (v0) -> { return v0.getProvider(); }}));*/ return R.data(NotifyConfigConvert.INSTANCE.convertToDTOList(result)); } @ApiOperationSupport(order = 8) @GetResource({"/detail/{configId}"}) @ApiOperation(value = "详情", notes = "传入通知配置Id") public R detail(@PathVariable("configId") String configId) { NotifyConfigEntity detail = (NotifyConfigEntity) this.notifyConfigService.getById(configId); return R.data(NotifyConfigConvert.INSTANCE.convertToDto(detail)); } @ApiOperationSupport(order = 10) @GetMapping({"/service-list"}) @ApiOperation("服务配置列表") public R> getServiceList() { return R.data(this.notifyConfigService.getServiceList()); } }