|
@ -0,0 +1,215 @@
|
|
|
package com.yihu.jw.basic.redis.controler;
|
|
|
|
|
|
import com.yihu.ehr.constants.ApiVersion;
|
|
|
import com.yihu.ehr.constants.ServiceApi;
|
|
|
import com.yihu.jw.basic.redis.service.RedisMqChannelService;
|
|
|
import com.yihu.jw.basic.redis.service.RedisMqSubscriberService;
|
|
|
import com.yihu.jw.entity.ehr.redis.RedisMqChannel;
|
|
|
import com.yihu.jw.entity.ehr.redis.RedisMqSubscriber;
|
|
|
import com.yihu.jw.restmodel.ehr.redis.MRedisMqSubscriber;
|
|
|
import com.yihu.jw.restmodel.web.Envelop;
|
|
|
import com.yihu.jw.restmodel.web.ListEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.ObjEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.PageEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import io.swagger.annotations.ApiParam;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* Redis消息订阅者 接口
|
|
|
*
|
|
|
* @author 张进军
|
|
|
* @date 2017/11/13 15:14
|
|
|
*/
|
|
|
@RestController
|
|
|
@RequestMapping(value = ApiVersion.Version1_0)
|
|
|
@Api(description = "消息订阅者接口", tags = {"Redis消息发布订阅--消息订阅者接口"})
|
|
|
public class RedisMqSubscriberEndPoint extends EnvelopRestEndpoint {
|
|
|
|
|
|
@Autowired
|
|
|
private RedisMqSubscriberService redisMqSubscriberService;
|
|
|
@Autowired
|
|
|
private RedisMqChannelService redisMqChannelService;
|
|
|
@Autowired
|
|
|
private RedisMessageListenerContainer redisMessageListenerContainer;
|
|
|
|
|
|
@ApiOperation("根据ID获取消息订阅者")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.GetById, method = RequestMethod.GET)
|
|
|
public Envelop getById(
|
|
|
@ApiParam(name = "id", value = "主键", required = true)
|
|
|
@PathVariable(value = "id") Integer id) {
|
|
|
try {
|
|
|
MRedisMqSubscriber mRedisMqSubscriber = convertToModel(redisMqSubscriberService.getById(id), MRedisMqSubscriber.class);
|
|
|
return ObjEnvelop.getSuccess("成功获取消息订阅者",mRedisMqSubscriber);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return failed("获取消息订阅者发生异常");
|
|
|
}
|
|
|
|
|
|
@ApiOperation(value = "根据条件获取消息订阅者")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.Search, method = RequestMethod.GET)
|
|
|
public Envelop search(
|
|
|
@ApiParam(name = "fields", value = "返回的字段,为空则返回全部字段")
|
|
|
@RequestParam(value = "fields", required = false) String fields,
|
|
|
@ApiParam(name = "filters", value = "筛选条件")
|
|
|
@RequestParam(value = "filters", required = false) String filters,
|
|
|
@ApiParam(name = "sorts", value = "排序")
|
|
|
@RequestParam(value = "sorts", required = false) String sorts,
|
|
|
@ApiParam(name = "page", value = "页码", defaultValue = "1")
|
|
|
@RequestParam(value = "page", required = false) int page,
|
|
|
@ApiParam(name = "size", value = "分页大小", defaultValue = "15")
|
|
|
@RequestParam(value = "size", required = false) int size) {
|
|
|
try {
|
|
|
List<RedisMqSubscriber> list = redisMqSubscriberService.search(fields, filters, sorts, page, size);
|
|
|
long count = redisMqSubscriberService.getCount(filters);
|
|
|
List<MRedisMqSubscriber> mList = (List<MRedisMqSubscriber>) convertToModels(list, new ArrayList<MRedisMqSubscriber>(), MRedisMqSubscriber.class, fields);
|
|
|
return PageEnvelop.getSuccessListWithPage("成功获取消息订阅者列表",mList,page,size,count);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return failed("获取消息订阅者发生异常");
|
|
|
}
|
|
|
|
|
|
@ApiOperation(value = "获取消息订阅者列表,不分页")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.Prefix, method = RequestMethod.GET)
|
|
|
public Envelop getSubscriberList(
|
|
|
@ApiParam(name = "filters", value = "过滤器,为空检索所有条件", defaultValue = "")
|
|
|
@RequestParam(value = "filters") String filters) throws Exception {
|
|
|
List<RedisMqSubscriber> subscriberList = redisMqSubscriberService.search(filters);
|
|
|
List<MRedisMqSubscriber> list = convertToModels(subscriberList, new ArrayList<>(subscriberList.size()), MRedisMqSubscriber.class, "");
|
|
|
return ListEnvelop.getSuccess("查询成功",list);
|
|
|
}
|
|
|
|
|
|
@ApiOperation("新增消息订阅者")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.Save, method = RequestMethod.POST)
|
|
|
public Envelop add(
|
|
|
@ApiParam(value = "消息订阅者JSON", required = true)
|
|
|
@RequestBody String entityJson) {
|
|
|
try {
|
|
|
RedisMqSubscriber newEntity = objectMapper.readValue(entityJson, RedisMqSubscriber.class);
|
|
|
newEntity = redisMqSubscriberService.save(newEntity);
|
|
|
|
|
|
// 累计订阅者数
|
|
|
RedisMqChannel channel = redisMqChannelService.findByChannel(newEntity.getChannel());
|
|
|
channel.setSubscriberNum(channel.getSubscriberNum() + 1);
|
|
|
redisMqChannelService.save(channel);
|
|
|
|
|
|
MRedisMqSubscriber mRedisMqSubscriber = convertToModel(newEntity, MRedisMqSubscriber.class);
|
|
|
return ObjEnvelop.getSuccess("成功新增消息订阅者",mRedisMqSubscriber);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return failed("新增消息订阅者发生异常");
|
|
|
}
|
|
|
|
|
|
@ApiOperation("更新消息订阅者")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.Save, method = RequestMethod.PUT)
|
|
|
public Envelop update(
|
|
|
@ApiParam(value = "消息订阅者JSON", required = true)
|
|
|
@RequestBody String entityJson) {
|
|
|
try {
|
|
|
RedisMqSubscriber updateEntity = objectMapper.readValue(entityJson, RedisMqSubscriber.class);
|
|
|
updateEntity = redisMqSubscriberService.save(updateEntity);
|
|
|
|
|
|
MRedisMqSubscriber mRedisMqSubscriber = convertToModel(updateEntity, MRedisMqSubscriber.class);
|
|
|
return ObjEnvelop.getSuccess("成功更新消息订阅者",mRedisMqSubscriber);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return failed("更新消息订阅者发生异常");
|
|
|
}
|
|
|
|
|
|
@ApiOperation("删除消息订阅者")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.Delete, method = RequestMethod.DELETE)
|
|
|
public Envelop delete(
|
|
|
@ApiParam(name = "id", value = "消息订阅者ID", required = true)
|
|
|
@RequestParam(value = "id") Integer id) {
|
|
|
try {
|
|
|
RedisMqSubscriber subscriber = redisMqSubscriberService.getById(id);
|
|
|
redisMqSubscriberService.delete(id);
|
|
|
|
|
|
// 扣减订阅者数
|
|
|
RedisMqChannel channel = redisMqChannelService.findByChannel(subscriber.getChannel());
|
|
|
channel.setSubscriberNum(channel.getSubscriberNum() - 1);
|
|
|
redisMqChannelService.save(channel);
|
|
|
|
|
|
return Envelop.getSuccess("成功删除消息订阅者");
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return failed("删除消息订阅者发生异常");
|
|
|
}
|
|
|
|
|
|
@ApiOperation("验证指定消息队列中订阅者应用ID是否唯一")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.IsUniqueAppId, method = RequestMethod.GET)
|
|
|
public Envelop isUniqueAppId(
|
|
|
@ApiParam(name = "id", value = "消息订阅者ID", required = true)
|
|
|
@RequestParam(value = "id") Integer id,
|
|
|
@ApiParam(name = "channel", value = "消息队列编码", required = true)
|
|
|
@RequestParam(value = "channel") String channel,
|
|
|
@ApiParam(name = "appId", value = "消息订阅者应用ID", required = true)
|
|
|
@RequestParam(value = "appId") String appId) {
|
|
|
try {
|
|
|
boolean result = redisMqSubscriberService.isUniqueAppId(id, channel, appId);
|
|
|
if (!result) {
|
|
|
return failed("该指定消息队列中订阅者应用ID已被使用,请重新填写!");
|
|
|
}
|
|
|
return Envelop.getSuccess("应用ID是唯一");
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return failed("发生异常:");
|
|
|
}
|
|
|
|
|
|
@ApiOperation("验证指定消息队列中订阅者服务地址是否唯一")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.IsUniqueSubscribedUrl, method = RequestMethod.GET)
|
|
|
public Envelop isUniqueSubscribedUrl(
|
|
|
@ApiParam(name = "id", value = "消息订阅者ID", required = true)
|
|
|
@RequestParam(value = "id") Integer id,
|
|
|
@ApiParam(name = "channel", value = "消息队列编码", required = true)
|
|
|
@RequestParam(value = "channel") String channel,
|
|
|
@ApiParam(name = "subscriberUrl", value = "消息订阅者服务地址", required = true)
|
|
|
@RequestParam(value = "subscriberUrl") String subscriberUrl) {
|
|
|
try {
|
|
|
boolean result = redisMqSubscriberService.isUniqueSubscribedUrl(id, channel, subscriberUrl);
|
|
|
if (!result) {
|
|
|
return failed("该指定消息队列中订阅者服务地址已被使用,请重新填写!");
|
|
|
}
|
|
|
return Envelop.getSuccess("服务地址是唯一");
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return failed("发生异常:");
|
|
|
}
|
|
|
|
|
|
@ApiOperation("验证消息队列的订阅者服务地址是否存在")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.IsExist, method = RequestMethod.GET)
|
|
|
public Envelop isExist(
|
|
|
@ApiParam(name = "channel", value = "消息队列编码", required = true)
|
|
|
@RequestParam(value = "channel") String channel,
|
|
|
@ApiParam(name = "subscriber", value = "消息订阅者服务地址", required = true)
|
|
|
@RequestParam(value = "subscriber") String subscriber) {
|
|
|
return ObjEnvelop.getSuccess("验证成功",redisMqSubscriberService.isExist(channel, subscriber));
|
|
|
}
|
|
|
|
|
|
@ApiOperation("取消队列的订阅者")
|
|
|
@RequestMapping(value = ServiceApi.Redis.MqSubscriber.Unsubscribe, method = RequestMethod.POST)
|
|
|
public Envelop unsubscribe(
|
|
|
@ApiParam(name = "channel", value = "消息队列编码", required = true)
|
|
|
@RequestParam(value = "channel") String channel,
|
|
|
@ApiParam(name = "subscriber", value = "消息订阅者服务地址", required = false)
|
|
|
@RequestParam(value = "subscriber", required = false) String subscriber) {
|
|
|
redisMqSubscriberService.unsubscribe(channel, subscriber);
|
|
|
return Envelop.getSuccess("取消成功");
|
|
|
}
|
|
|
|
|
|
}
|