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.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.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; 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.mp.support.Condition; import com.qianwen.core.mp.support.Query; import com.qianwen.core.notify.template.TemplateProvider; 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.core.tool.tuple.NameValue; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.common.cache.RegionCache; import com.qianwen.smartman.modules.notify.convert.NotifyTemplateConvert; import com.qianwen.smartman.modules.notify.dto.NotifyTemplateDTO; import com.qianwen.smartman.modules.notify.dto.NotifyTemplateQueryDTO; import com.qianwen.smartman.modules.notify.dto.NotifyTemplateResponseDTO; import com.qianwen.smartman.modules.notify.entity.NotifyConfigEntity; import com.qianwen.smartman.modules.notify.entity.NotifyTemplateEntity; import com.qianwen.smartman.modules.notify.service.INotifyConfigService; import com.qianwen.smartman.modules.notify.service.INotifyTemplateService; import com.qianwen.smartman.modules.notify.wrapper.NotifyTemplateWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @ApiResource({"blade-notify/notifier/template"}) @Api(value = "消息通知模版", tags = {"消息通知模版"}) @RestController /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/notify/controller/NotifierTemplateController.class */ public class NotifierTemplateController extends BladeController { private final INotifyTemplateService templateService; private final INotifyConfigService notifyConfigService; private final List providers; public NotifierTemplateController(final INotifyTemplateService templateService, final INotifyConfigService notifyConfigService, final List providers) { this.templateService = templateService; this.notifyConfigService = notifyConfigService; this.providers = providers; } @ApiOperationSupport(order = 1) @GetResource({"/{type}/{provider}/config/metadata"}) @ApiOperation("获取指定类型和服务商所需模版配置定义") public R getAllTypes(@PathVariable("type") String type, @PathVariable("provider") String provider) { return R.data(this.templateService.getAllTypes(type, provider, this.providers)); } @ApiOperationSupport(order = 2) @PutResource @ApiOperation(value = "新增或修改", notes = "传入模板信息") public R submit(@Valid @RequestBody NotifyTemplateDTO notifyTemplateDTO, BladeUser bladeUser) { if (Func.isNotEmpty(notifyTemplateDTO.getId())) { CacheUtil.evict("blade:notify", "template:id:", notifyTemplateDTO.getId(), false); } NotifyTemplateEntity notifyTemplateEntity = NotifyTemplateConvert.INSTANCE.convertToEntity(notifyTemplateDTO.setTenantId(bladeUser.getTenantId())); this.templateService.saveOrUpdate(notifyTemplateEntity); return R.data(notifyTemplateEntity); } @ApiOperationSupport(order = 3) @DeleteResource({"/{id}"}) @ApiOperation(value = "删除", notes = "传入id") public R remove(@PathVariable("id") @ApiParam(value = "主键", required = true) String id, BladeUser bladeUser) { CacheUtil.evict("blade:notify", "template:id:", id, false); this.templateService.checkUsedByBusinessNotify(id); return R.status(this.templateService .remove(Wrappers.query().lambda() .eq(NotifyTemplateEntity::getId, id).eq(NotifyTemplateEntity::getTenantId, bladeUser.getTenantId()))); /* return R.status(this.templateService.remove((Wrapper) ((LambdaQueryWrapper) Wrappers.query().lambda().eq((v0) -> { return v0.getId(); }, id)).eq((v0) -> { return v0.getTenantId(); }, bladeUser.getTenantId())));*/ } @ApiOperationSupport(order = 4) @GetResource({"/list"}) @ApiOperation(value = "通知模板列表", notes = "传入模板") public R> configPageList(NotifyTemplateQueryDTO notifyTemplateQueryDTO, Query query, BladeUser bladeUser) { LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery() .eq(NotifyTemplateEntity::getTenantId, bladeUser.getTenantId()); /* Wrapper wrapper = (LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getTenantId(); }, bladeUser.getTenantId());*/ if (Func.isNotEmpty(notifyTemplateQueryDTO)) { lambdaQueryWrapper.like(Func.isNotEmpty(notifyTemplateQueryDTO.getName()), NotifyTemplateEntity::getName, notifyTemplateQueryDTO.getName()) .in(Func.isNotEmpty(notifyTemplateQueryDTO.getType()), NotifyTemplateEntity::getType, Arrays.asList(notifyTemplateQueryDTO.getType().split(","))) .eq(Func.isNotEmpty(notifyTemplateQueryDTO.getBusinessKey()), NotifyTemplateEntity::getBusiness, notifyTemplateQueryDTO.getBusinessKey()) .eq(Func.isNotEmpty(notifyTemplateQueryDTO.getProvider()), NotifyTemplateEntity::getProvider, notifyTemplateQueryDTO.getProvider()); /* wrapper.like(Func.isNotEmpty(notifyTemplateQueryDTO.getName()), (v0) -> { return v0.getName(); }, notifyTemplateQueryDTO.getName()).in(Func.isNotEmpty(notifyTemplateQueryDTO.getType()), (v0) -> { return v0.getType(); }, Arrays.asList(notifyTemplateQueryDTO.getType().split(","))).eq(Func.isNotEmpty(notifyTemplateQueryDTO.getBusinessKey()), (v0) -> { return v0.getBusiness(); }, notifyTemplateQueryDTO.getBusinessKey()).eq(Func.isNotEmpty(notifyTemplateQueryDTO.getProvider()), (v0) -> { return v0.getProvider(); }, notifyTemplateQueryDTO.getProvider());*/ } IPage list = this.templateService.page(Condition.getPage(query), lambdaQueryWrapper); return R.data(NotifyTemplateWrapper.build().pageVO(NotifyTemplateConvert.INSTANCE.convertToPage(list))); } @ApiOperationSupport(order = RegionCache.VILLAGE_LEVEL) @GetResource({"/detail/{templateId}"}) @ApiOperation(value = "详情", notes = "传入模板配置Id") public R detail(@PathVariable("templateId") String templateId) { NotifyTemplateEntity detail = (NotifyTemplateEntity) this.templateService.getById(templateId); return R.data(NotifyTemplateConvert.INSTANCE.convertToDto(detail)); } @ApiOperationSupport(order = 6) @GetResource({"/select"}) @ApiOperation(value = "业务通知可用的通知模板", notes = "传入通知类型") public R>> getCanUseNotifyConfig(@RequestParam(value = "notifyId", required = true) String notifyId, @RequestParam(value = "businessKey", required = true) String businessKey, BladeUser bladeUser) { List> result = new ArrayList<>(); NotifyConfigEntity notifyConfigEntity = (NotifyConfigEntity) this.notifyConfigService.getById(notifyId); if (Func.isNotEmpty(notifyConfigEntity)) { result = this.templateService.list(Wrappers.lambdaQuery() .in(NotifyTemplateEntity::getTenantId, Arrays.asList(new String[] { bladeUser.getTenantId(), "000000" })) .eq(NotifyTemplateEntity::getType, notifyConfigEntity.getType()) .eq(NotifyTemplateEntity::getBusiness, businessKey) .eq(NotifyTemplateEntity::getProvider, notifyConfigEntity.getProvider()) .select(NotifyTemplateEntity::getId, NotifyTemplateEntity::getName )) .stream().map(x -> new NameValue(x.getName(), x.getId().toString())).collect(Collectors.toList()); /* result = (List) this.templateService.list(((LambdaQueryWrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getTenantId(); }, Arrays.asList(bladeUser.getTenantId(), "000000"))).eq((v0) -> { return v0.getType(); }, notifyConfigEntity.getType())).eq((v0) -> { return v0.getBusiness(); }, businessKey)).eq((v0) -> { return v0.getProvider(); }, notifyConfigEntity.getProvider())).select(new SFunction[]{(v0) -> { return v0.getId(); }, (v0) -> { return v0.getName(); }})).stream().map(x -> { return new NameValue(x.getName(), x.getId().toString()); }).collect(Collectors.toList());*/ } return R.data(result); } }