stjdydayou 4 tahun lalu
induk
melakukan
0a2be204fc

+ 138 - 112
src/main/java/com/zhiqiyun/open/mvc/controller/AppKeyInfoController.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dliyun.oap.framework.security.algorithm.Rsa;
+import com.dliyun.oap.framework.service.RouterService;
+import com.dliyun.oap.framework.service.ServiceMethodHandler;
 import com.zhiqiyun.open.annotation.Permission;
 import com.zhiqiyun.open.core.enmus.YN;
 import com.zhiqiyun.open.core.models.app.ApiRequestLog;
@@ -26,122 +28,146 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/appKey")
 public class AppKeyInfoController {
 
-    @Autowired
-    private AppKeyInfoService appKeyInfoService;
-
-    @Autowired
-    private SequenceService sequenceService;
-
-    @Autowired
-    private ApiRequestLogService apiRequestLogService;
-
-    @Permission(value = "app.key.find", tags = "查询AppKey")
-    @PostMapping("/findPage")
-    public Result findPage(@RequestBody QueryAppKeyInfoParams params) {
-
-        QueryWrapper<AppKeyInfo> queryWrapper = new QueryWrapper<>();
-        if (params.getId() != null) {
-            queryWrapper.eq("id", params.getId());
-        }
-        if (params.getIsEnable() != null) {
-            queryWrapper.eq("is_enable", params.getIsEnable());
-        }
-        if (StringUtils.isNotBlank(params.getRemark())) {
-            queryWrapper.like("remark", params.getRemark());
-        }
-
-        Page<AppKeyInfo> page = params.getPage();
-        page.addOrder(OrderItem.desc("created_time"));
-
-        Page<AppKeyInfo> resultData = this.appKeyInfoService.page(page, queryWrapper);
-
-        return Result.instance(Result.Code.SUCCESS).setData(resultData);
-    }
-
-    @Permission(value = "app.key.find", tags = "Api调用日志查询")
-    @PostMapping("/findRequestLogsPage")
-    public Result findRequestLogsPage(@RequestBody QueryApiRequestLogParams params) {
-
-        QueryWrapper<ApiRequestLog> queryWrapper = new QueryWrapper<>();
-        if (StringUtils.isNotBlank(params.getAppKey())) {
-            queryWrapper.eq("app_key", params.getAppKey());
-        }
-        if (StringUtils.isNotBlank(params.getMethod())) {
-            queryWrapper.eq("method", params.getMethod());
-        }
-        if (StringUtils.isNotBlank(params.getVersion())) {
-            queryWrapper.eq("version", params.getVersion());
-        }
-        if (StringUtils.isNotBlank(params.getClientIp())) {
-            queryWrapper.eq("client_ip", params.getClientIp());
-        }
-        if (params.getServiceBeginTime() != null) {
-            queryWrapper.between("service_begin_time", params.getServiceBeginTime().getStatDate(), params.getServiceBeginTime().getEndDate());
-        }
-
-
-        Page<ApiRequestLog> page = params.getPage();
-        page.addOrder(OrderItem.desc("service_begin_time"));
-
-        Page<ApiRequestLog> resultData = this.apiRequestLogService.page(page, queryWrapper);
-
-        return Result.instance(Result.Code.SUCCESS).setData(resultData);
-    }
-
-    @Permission(value = "app.key.add", tags = "新建AppKey")
-    @PostMapping("/save")
-    public Result save(@Valid @RequestBody SaveAppKeyInfoParam param) throws Exception {
-
-        AppKeyInfo appKeyInfo = new AppKeyInfo();
-        BeanUtils.copyProperties(param, appKeyInfo);
-
-        Long id = this.sequenceService.nextId();
-        appKeyInfo.setId(id);
-        Rsa.RsaKeys rsaKeys = Rsa.genKeyPair();
-        appKeyInfo.setPublicKey(rsaKeys.getPublicKey());
-        appKeyInfo.setPrivateKey(rsaKeys.getPrivateKey());
-        appKeyInfo.setCreatedTime(DateUtil.current());
-        appKeyInfo.setIsEnable(YN.Y);
-        this.appKeyInfoService.save(appKeyInfo);
-
-        return Result.instance(Result.Code.MESSAGE_SUCCESS);
-    }
-
-    @Permission(value = "app.key.edit", tags = "更新AppKey")
-    @PostMapping("/updateById")
-    public Result updateById(Long id, @Valid @RequestBody SaveAppKeyInfoParam param) {
-        AppKeyInfo appKeyInfo = new AppKeyInfo();
-        BeanUtils.copyProperties(param, appKeyInfo);
-        appKeyInfo.setId(id);
-        this.appKeyInfoService.refreshCache(id.toString());
-        this.appKeyInfoService.updateById(appKeyInfo);
-
-        return Result.instance(Result.Code.MESSAGE_SUCCESS);
-    }
-
-    @Permission(value = "app.key.disable", tags = "禁用AppKey")
-    @PostMapping("/disableByIds")
-    public Result disableByIds(@RequestBody List<Long> ids) {
-        UpdateWrapper<AppKeyInfo> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.in("id", ids);
-        updateWrapper.set("is_enable", YN.N);
-        this.appKeyInfoService.update(updateWrapper);
-        return Result.instance(Result.Code.MESSAGE_SUCCESS);
-    }
-
-    @Permission(value = "app.key.enable", tags = "启用AppKey")
-    @PostMapping("/enableByIds")
-    public Result enableByIds(@RequestBody List<Long> ids) {
-        UpdateWrapper<AppKeyInfo> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.in("id", ids);
-        updateWrapper.set("is_enable", YN.Y);
-        this.appKeyInfoService.update(updateWrapper);
-        return Result.instance(Result.Code.MESSAGE_SUCCESS);
-    }
+	@Autowired
+	private AppKeyInfoService appKeyInfoService;
+
+	@Autowired
+	private SequenceService sequenceService;
+
+	@Autowired
+	private ApiRequestLogService apiRequestLogService;
+
+	@Autowired
+	private RouterService routerService;
+
+	@Permission(value = "app.key.find", tags = "查询AppKey")
+	@PostMapping("/findPage")
+	public Result findPage(@RequestBody QueryAppKeyInfoParams params) {
+
+		QueryWrapper<AppKeyInfo> queryWrapper = new QueryWrapper<>();
+		if (params.getId() != null) {
+			queryWrapper.eq("id", params.getId());
+		}
+		if (params.getIsEnable() != null) {
+			queryWrapper.eq("is_enable", params.getIsEnable());
+		}
+		if (StringUtils.isNotBlank(params.getRemark())) {
+			queryWrapper.like("remark", params.getRemark());
+		}
+
+		Page<AppKeyInfo> page = params.getPage();
+		page.addOrder(OrderItem.desc("created_time"));
+
+		Page<AppKeyInfo> resultData = this.appKeyInfoService.page(page, queryWrapper);
+
+		return Result.instance(Result.Code.SUCCESS).setData(resultData);
+	}
+
+	@Permission(value = "app.key.find", tags = "Api调用日志查询")
+	@PostMapping("/findRequestLogsPage")
+	public Result findRequestLogsPage(@RequestBody QueryApiRequestLogParams params) {
+
+		QueryWrapper<ApiRequestLog> queryWrapper = new QueryWrapper<>();
+		if (StringUtils.isNotBlank(params.getAppKey())) {
+			queryWrapper.eq("app_key", params.getAppKey());
+		}
+		if (StringUtils.isNotBlank(params.getMethod())) {
+			queryWrapper.eq("method", params.getMethod());
+		}
+		if (StringUtils.isNotBlank(params.getVersion())) {
+			queryWrapper.eq("version", params.getVersion());
+		}
+		if (StringUtils.isNotBlank(params.getClientIp())) {
+			queryWrapper.eq("client_ip", params.getClientIp());
+		}
+		if (params.getServiceBeginTime() != null) {
+			queryWrapper.between("service_begin_time", params.getServiceBeginTime().getStatDate(), params.getServiceBeginTime().getEndDate());
+		}
+
+
+		Page<ApiRequestLog> page = params.getPage();
+		page.addOrder(OrderItem.desc("service_begin_time"));
+
+		Page<ApiRequestLog> resultData = this.apiRequestLogService.page(page, queryWrapper);
+
+		return Result.instance(Result.Code.SUCCESS).setData(resultData);
+	}
+
+	@Permission(value = "app.key.add", tags = "新建AppKey")
+	@PostMapping("/save")
+	public Result save(@Valid @RequestBody SaveAppKeyInfoParam param) throws Exception {
+
+		Map<String, ServiceMethodHandler> serviceMethodHandlerMap = this.routerService.getOapContext().getAllServiceMethodHandlers();
+
+		List<String> listAllServices = new ArrayList<>();
+		for (ServiceMethodHandler handler : serviceMethodHandlerMap.values()) {
+			listAllServices.add(String.format("%s:%s", handler.getServiceMethodDefinition().getMethod(), handler.getServiceMethodDefinition().getVersion()));
+		}
+
+		AppKeyInfo appKeyInfo = new AppKeyInfo();
+		BeanUtils.copyProperties(param, appKeyInfo);
+
+		Long id = this.sequenceService.nextId();
+		appKeyInfo.setId(id);
+		Rsa.RsaKeys rsaKeys = Rsa.genKeyPair();
+		appKeyInfo.setPublicKey(rsaKeys.getPublicKey());
+		appKeyInfo.setPrivateKey(rsaKeys.getPrivateKey());
+		appKeyInfo.setCreatedTime(DateUtil.current());
+		appKeyInfo.setIsEnable(YN.Y);
+		appKeyInfo.getPermissions().removeIf(permission -> !listAllServices.contains(permission));
+
+
+		this.appKeyInfoService.save(appKeyInfo);
+
+		return Result.instance(Result.Code.MESSAGE_SUCCESS);
+	}
+
+	@Permission(value = "app.key.edit", tags = "更新AppKey")
+	@PostMapping("/updateById")
+	public Result updateById(Long id, @Valid @RequestBody SaveAppKeyInfoParam param) {
+		Map<String, ServiceMethodHandler> serviceMethodHandlerMap = this.routerService.getOapContext().getAllServiceMethodHandlers();
+
+		List<String> listAllServices = new ArrayList<>();
+		for (ServiceMethodHandler handler : serviceMethodHandlerMap.values()) {
+			listAllServices.add(String.format("%s:%s", handler.getServiceMethodDefinition().getMethod(), handler.getServiceMethodDefinition().getVersion()));
+		}
+
+		AppKeyInfo appKeyInfo = new AppKeyInfo();
+		BeanUtils.copyProperties(param, appKeyInfo);
+		appKeyInfo.setId(id);
+		appKeyInfo.getPermissions().removeIf(permission -> !listAllServices.contains(permission));
+		this.appKeyInfoService.refreshCache(id.toString());
+		this.appKeyInfoService.updateById(appKeyInfo);
+
+
+		return Result.instance(Result.Code.MESSAGE_SUCCESS);
+	}
+
+	@Permission(value = "app.key.disable", tags = "禁用AppKey")
+	@PostMapping("/disableByIds")
+	public Result disableByIds(@RequestBody List<Long> ids) {
+		UpdateWrapper<AppKeyInfo> updateWrapper = new UpdateWrapper<>();
+		updateWrapper.in("id", ids);
+		updateWrapper.set("is_enable", YN.N);
+		this.appKeyInfoService.update(updateWrapper);
+		return Result.instance(Result.Code.MESSAGE_SUCCESS);
+	}
+
+	@Permission(value = "app.key.enable", tags = "启用AppKey")
+	@PostMapping("/enableByIds")
+	public Result enableByIds(@RequestBody List<Long> ids) {
+		UpdateWrapper<AppKeyInfo> updateWrapper = new UpdateWrapper<>();
+		updateWrapper.in("id", ids);
+		updateWrapper.set("is_enable", YN.Y);
+		this.appKeyInfoService.update(updateWrapper);
+		return Result.instance(Result.Code.MESSAGE_SUCCESS);
+	}
 }