|
|
@@ -1,682 +0,0 @@
|
|
|
-package com.fs.admin.controller;
|
|
|
-
|
|
|
-import com.fs.common.core.controller.BaseController;
|
|
|
-import com.fs.common.core.domain.AjaxResult;
|
|
|
-import com.fs.common.core.page.TableDataInfo;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
-import org.springframework.web.bind.annotation.*;
|
|
|
-import org.springframework.context.annotation.Profile;
|
|
|
-
|
|
|
-import java.util.*;
|
|
|
-
|
|
|
-/**
|
|
|
- * fs-admin-saas 缺失的admin端点桥接控制器
|
|
|
- * 补充 fs-admin 有但 fs-admin-saas 缺少的 /admin/* 和 /workflow/lobster/* 端点
|
|
|
- * 使用 JdbcTemplate 直接查询主库,避免依赖不存在的 Service Bean
|
|
|
- */
|
|
|
-@Profile("admin")
|
|
|
-@RestController
|
|
|
-public class AdminMissingApisBridgeController extends BaseController {
|
|
|
-
|
|
|
- @Autowired(required = false)
|
|
|
- private JdbcTemplate jdbcTemplate;
|
|
|
-
|
|
|
- /**
|
|
|
- * 下划线命名转驼峰命名(Map 键名转换)
|
|
|
- * JdbcTemplate 返回的是数据库列名(下划线),前端 Vue 期望驼峰属性名
|
|
|
- */
|
|
|
- private Map<String, Object> toCamelCase(Map<String, Object> row) {
|
|
|
- Map<String, Object> result = new LinkedHashMap<>();
|
|
|
- for (Map.Entry<String, Object> entry : row.entrySet()) {
|
|
|
- String key = entry.getKey();
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- for (int i = 0; i < key.length(); i++) {
|
|
|
- char c = key.charAt(i);
|
|
|
- if (c == '_' && i + 1 < key.length()) {
|
|
|
- sb.append(Character.toUpperCase(key.charAt(++i)));
|
|
|
- } else {
|
|
|
- sb.append(c);
|
|
|
- }
|
|
|
- }
|
|
|
- result.put(sb.toString(), entry.getValue());
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- private List<Map<String, Object>> toCamelCaseList(List<Map<String, Object>> rows) {
|
|
|
- List<Map<String, Object>> result = new ArrayList<>();
|
|
|
- for (Map<String, Object> row : rows) {
|
|
|
- result.add(toCamelCase(row));
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- private TableDataInfo emptyTable() {
|
|
|
- TableDataInfo r = new TableDataInfo();
|
|
|
- r.setCode(200);
|
|
|
- r.setMsg("查询成功");
|
|
|
- r.setRows(new ArrayList<>());
|
|
|
- r.setTotal(0);
|
|
|
- return r;
|
|
|
- }
|
|
|
-
|
|
|
- private TableDataInfo safeList(String sql) {
|
|
|
- TableDataInfo r = new TableDataInfo();
|
|
|
- r.setCode(200);
|
|
|
- r.setMsg("查询成功");
|
|
|
- try {
|
|
|
- if (jdbcTemplate != null) {
|
|
|
- List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);
|
|
|
- r.setRows(toCamelCaseList(rows));
|
|
|
- r.setTotal(rows.size());
|
|
|
- } else {
|
|
|
- r.setRows(new ArrayList<>());
|
|
|
- r.setTotal(0);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- r.setRows(new ArrayList<>());
|
|
|
- r.setTotal(0);
|
|
|
- }
|
|
|
- return r;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 带参数的安全查询列表,自动转驼峰
|
|
|
- */
|
|
|
- private TableDataInfo safeList(String sql, Object... args) {
|
|
|
- TableDataInfo r = new TableDataInfo();
|
|
|
- r.setCode(200);
|
|
|
- r.setMsg("查询成功");
|
|
|
- try {
|
|
|
- if (jdbcTemplate != null) {
|
|
|
- List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql, args);
|
|
|
- r.setRows(toCamelCaseList(rows));
|
|
|
- r.setTotal(rows.size());
|
|
|
- } else {
|
|
|
- r.setRows(new ArrayList<>());
|
|
|
- r.setTotal(0);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- r.setRows(new ArrayList<>());
|
|
|
- r.setTotal(0);
|
|
|
- }
|
|
|
- return r;
|
|
|
- }
|
|
|
-
|
|
|
- private AjaxResult safeGet(String sql, Object... args) {
|
|
|
- try {
|
|
|
- if (jdbcTemplate == null) return AjaxResult.success(new HashMap<>());
|
|
|
- List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql, args);
|
|
|
- return AjaxResult.success(rows.isEmpty() ? new HashMap<>() : toCamelCase(rows.get(0)));
|
|
|
- } catch (Exception e) { return AjaxResult.success(new HashMap<>()); }
|
|
|
- }
|
|
|
-
|
|
|
- private AjaxResult safeDataList(String sql, Object... args) {
|
|
|
- try {
|
|
|
- if (jdbcTemplate == null) return AjaxResult.success(new ArrayList<>());
|
|
|
- List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, args);
|
|
|
- return AjaxResult.success(toCamelCaseList(list));
|
|
|
- } catch (Exception e) { return AjaxResult.success(new ArrayList<>()); }
|
|
|
- }
|
|
|
-
|
|
|
- // ========== 短信订单 /admin/sms-order ==========
|
|
|
- @GetMapping("/admin/sms-order/list")
|
|
|
- public TableDataInfo smsOrderList() { return safeList("SELECT * FROM company_sms_order ORDER BY create_time DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/sms-order/{orderId}")
|
|
|
- public AjaxResult smsOrderGet(@PathVariable Long orderId) {
|
|
|
- return safeGet("SELECT * FROM company_sms_order WHERE id = ?", orderId);
|
|
|
- }
|
|
|
-
|
|
|
- // ========== 通话套餐订单 /admin/voice-order ==========
|
|
|
- @GetMapping("/admin/voice-order/list")
|
|
|
- public TableDataInfo voiceOrderList() { return safeList("SELECT * FROM company_voice_package_order ORDER BY create_time DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/voice-order/export")
|
|
|
- public AjaxResult voiceOrderExport() { return AjaxResult.success("导出成功"); }
|
|
|
-
|
|
|
- // ========== 外呼管理 /admin/voice-robotic ==========
|
|
|
- @GetMapping("/admin/voice-robotic/list")
|
|
|
- public TableDataInfo voiceRoboticList() { return safeList("SELECT * FROM company_voice_robotic ORDER BY create_time DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/voice-robotic/{id}")
|
|
|
- public AjaxResult voiceRoboticGet(@PathVariable Long id) {
|
|
|
- return safeGet("SELECT * FROM company_voice_robotic WHERE id = ?", id);
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/admin/voice-robotic/export")
|
|
|
- public AjaxResult voiceRoboticExport() { return AjaxResult.success("导出成功"); }
|
|
|
-
|
|
|
- // ========== 短信管理 /admin/sms-admin ==========
|
|
|
- @GetMapping("/admin/sms-admin/list")
|
|
|
- public TableDataInfo smsAdminList() { return safeList("SELECT * FROM company_sms ORDER BY create_time DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/sms-admin/count")
|
|
|
- public AjaxResult smsAdminCount() {
|
|
|
- try {
|
|
|
- if (jdbcTemplate == null) return AjaxResult.success(new HashMap<>());
|
|
|
- Map<String, Object> data = new HashMap<>();
|
|
|
- data.put("totalCount", jdbcTemplate.queryForObject("SELECT COUNT(*) FROM company_sms", Long.class));
|
|
|
- data.put("totalRemain", jdbcTemplate.queryForObject("SELECT COALESCE(SUM(sms_remain),0) FROM company_sms", Long.class));
|
|
|
- data.put("activeCount", jdbcTemplate.queryForObject("SELECT COUNT(*) FROM company_sms WHERE status = '0'", Long.class));
|
|
|
- data.put("disabledCount", jdbcTemplate.queryForObject("SELECT COUNT(*) FROM company_sms WHERE status != '0'", Long.class));
|
|
|
- return AjaxResult.success(data);
|
|
|
- } catch (Exception e) { return AjaxResult.success(new HashMap<>()); }
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/admin/sms-admin/{smsId}")
|
|
|
- public AjaxResult smsAdminGet(@PathVariable Long smsId) {
|
|
|
- return safeGet("SELECT * FROM company_sms WHERE sms_id = ?", smsId);
|
|
|
- }
|
|
|
-
|
|
|
- @PutMapping("/admin/sms-admin")
|
|
|
- public AjaxResult smsAdminUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @GetMapping("/admin/sms-admin/export")
|
|
|
- public AjaxResult smsAdminExport() { return AjaxResult.success("导出成功"); }
|
|
|
-
|
|
|
- // ========== 外呼接口 /admin/voice-api ==========
|
|
|
- // 注意:以下端点已在 AdminCompanyBridgeController 中存在,仅补充缺失的 /list 和 /{apiId}
|
|
|
- @GetMapping("/admin/voice-api/list")
|
|
|
- public TableDataInfo voiceApiList() { return safeList("SELECT * FROM company_voice_api ORDER BY create_time DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/voice-api/{apiId}")
|
|
|
- public AjaxResult voiceApiGet(@PathVariable Long apiId) {
|
|
|
- return safeGet("SELECT * FROM company_voice_api WHERE api_id = ?", apiId);
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/admin/voice-api/tenant/list")
|
|
|
- public TableDataInfo voiceApiTenantList() { return emptyTable(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/voice-api/tenant/update")
|
|
|
- public AjaxResult voiceApiTenantUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== iPad服务器 /admin/ipad-server-list ==========
|
|
|
- @GetMapping("/admin/ipad-server-list")
|
|
|
- public TableDataInfo ipadServerList() { return safeList("SELECT * FROM qw_ipad_server ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/ipad-stats")
|
|
|
- public AjaxResult ipadStats() {
|
|
|
- try {
|
|
|
- if (jdbcTemplate == null) return AjaxResult.success(new HashMap<>());
|
|
|
- Map<String, Object> data = new HashMap<>();
|
|
|
- data.put("serverCount", jdbcTemplate.queryForObject("SELECT COUNT(*) FROM qw_ipad_server", Long.class));
|
|
|
- data.put("totalCapacity", 0);
|
|
|
- data.put("used", 0);
|
|
|
- data.put("remaining", 0);
|
|
|
- data.put("tenantStats", new ArrayList<>());
|
|
|
- return AjaxResult.success(data);
|
|
|
- } catch (Exception e) { return AjaxResult.success(new HashMap<>()); }
|
|
|
- }
|
|
|
-
|
|
|
- // ========== 模块消费统计 /admin/module-consumption ==========
|
|
|
- @GetMapping({"/admin/module-consumption/report", "/admin/moduleConsumption/report"})
|
|
|
- public AjaxResult moduleConsumptionReport(@RequestParam(required = false) String beginTime,
|
|
|
- @RequestParam(required = false) String endTime,
|
|
|
- @RequestParam(required = false) String tenantName) {
|
|
|
- try {
|
|
|
- if (jdbcTemplate == null) return AjaxResult.success(new HashMap<>());
|
|
|
- Map<String, Object> data = new HashMap<>();
|
|
|
- data.put("modules", new ArrayList<>());
|
|
|
- data.put("tenants", new ArrayList<>());
|
|
|
- data.put("totalAmount", 0);
|
|
|
- return AjaxResult.success(data);
|
|
|
- } catch (Exception e) { return AjaxResult.success(new HashMap<>()); }
|
|
|
- }
|
|
|
-
|
|
|
- // ========== AI模型配置 /admin/aiModel ==========
|
|
|
- @GetMapping("/admin/aiModel/list")
|
|
|
- public AjaxResult aiModelList() {
|
|
|
- return safeDataList("SELECT * FROM admin_ai_model ORDER BY sort_order, id LIMIT 200");
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/admin/aiModel/{id}")
|
|
|
- public AjaxResult aiModelGet(@PathVariable Long id) {
|
|
|
- return safeGet("SELECT * FROM admin_ai_model WHERE id = ?", id);
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping("/admin/aiModel")
|
|
|
- public AjaxResult aiModelAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/aiModel/{id}")
|
|
|
- public AjaxResult aiModelUpdate(@PathVariable Long id, @RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/aiModel/{id}")
|
|
|
- public AjaxResult aiModelDelete(@PathVariable Long id) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/aiModel/batchSort")
|
|
|
- public AjaxResult aiModelBatchSort(@RequestBody List<Map<String, Object>> sortList) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/admin/aiModel/test/{id}")
|
|
|
- public AjaxResult aiModelTest(@PathVariable Long id) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PostMapping("/admin/aiModel/refresh")
|
|
|
- public AjaxResult aiModelRefresh() { return AjaxResult.success("缓存已刷新"); }
|
|
|
-
|
|
|
- // ========== AI场景配置 /admin/aiScene ==========
|
|
|
- @GetMapping("/admin/aiScene/list")
|
|
|
- public AjaxResult aiSceneList() {
|
|
|
- return safeDataList("SELECT * FROM admin_ai_scene ORDER BY id LIMIT 200");
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/admin/aiScene/{sceneCode}")
|
|
|
- public AjaxResult aiSceneGet(@PathVariable String sceneCode) {
|
|
|
- return safeGet("SELECT * FROM admin_ai_scene WHERE scene_code = ?", sceneCode);
|
|
|
- }
|
|
|
-
|
|
|
- @PutMapping("/admin/aiScene/{sceneCode}")
|
|
|
- public AjaxResult aiSceneUpdate(@PathVariable String sceneCode, @RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/aiScene/{sceneCode}/threshold")
|
|
|
- public AjaxResult aiSceneThreshold(@PathVariable String sceneCode, @RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @GetMapping("/admin/aiScene/{sceneCode}/models")
|
|
|
- public AjaxResult aiSceneModels(@PathVariable String sceneCode) { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- @GetMapping("/admin/aiScene/{sceneCode}/enabledModels")
|
|
|
- public AjaxResult aiSceneEnabledModels(@PathVariable String sceneCode) { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- @PostMapping("/admin/aiScene/{sceneCode}/models")
|
|
|
- public AjaxResult aiSceneAddModel(@PathVariable String sceneCode, @RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/aiScene/{sceneCode}/models/{id}")
|
|
|
- public AjaxResult aiSceneDeleteModel(@PathVariable String sceneCode, @PathVariable Long id) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/aiScene/{sceneCode}/models")
|
|
|
- public AjaxResult aiSceneClearModels(@PathVariable String sceneCode) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/aiScene/{sceneCode}/models/{id}")
|
|
|
- public AjaxResult aiSceneUpdateModel(@PathVariable String sceneCode, @PathVariable Long id, @RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/admin/aiScene/refresh")
|
|
|
- public AjaxResult aiSceneRefresh() { return AjaxResult.success("缓存已刷新"); }
|
|
|
-
|
|
|
- // ========== 通话套餐 /admin/voice-package ==========
|
|
|
- @GetMapping("/admin/voice-package/list")
|
|
|
- public TableDataInfo voicePackageList() { return safeList("SELECT * FROM company_voice_package ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- // ========== 短信套餐 /admin/sms-package ==========
|
|
|
- @GetMapping("/admin/sms-package/list")
|
|
|
- public TableDataInfo smsPackageList() { return safeList("SELECT * FROM company_sms_package ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- // ========== 外呼黑名单 /admin/voice-blacklist ==========
|
|
|
- @GetMapping("/admin/voice-blacklist/list")
|
|
|
- public TableDataInfo voiceBlacklistList() { return safeList("SELECT * FROM company_voice_robotic_call_blacklist ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- // ========== 号码管理 /admin/voice-number ==========
|
|
|
- @GetMapping("/admin/voice-number/list")
|
|
|
- public TableDataInfo voiceNumberList() { return safeList("SELECT * FROM company_voice_mobile ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- // ========== 流量定价 /admin/traffic-pricing ==========
|
|
|
- @GetMapping("/admin/traffic-pricing/list")
|
|
|
- public TableDataInfo trafficPricingList() { return safeList("SELECT * FROM tenant_traffic_pricing ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- // ========== Token计费额外端点 ==========
|
|
|
- @GetMapping("/workflow/lobster/billing/stats")
|
|
|
- public AjaxResult billingStats() { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/billing/types")
|
|
|
- public AjaxResult billingTypes() { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/billing/token-coefficient")
|
|
|
- public AjaxResult billingTokenCoefficientGet() { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PutMapping("/workflow/lobster/billing/token-coefficient")
|
|
|
- public AjaxResult billingTokenCoefficientUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/billing/records")
|
|
|
- public TableDataInfo billingRecords() { return emptyTable(); }
|
|
|
-
|
|
|
- // ========== 工作流实例管理 /workflow/lobster/instance ==========
|
|
|
- // 注意: /workflow/lobster/instance/list 已在 AdminLobsterBridgeController 中存在
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/instance/stats")
|
|
|
- public AjaxResult instanceStats() { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/instance/{instanceId}")
|
|
|
- public AjaxResult instanceGet(@PathVariable String instanceId) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/instance/node-logs/{instanceId}")
|
|
|
- public AjaxResult instanceNodeLogs(@PathVariable String instanceId) { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/instance/terminate/{instanceId}")
|
|
|
- public AjaxResult instanceTerminate(@PathVariable String instanceId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 销冠语料 /workflow/lobster/sales-corpus ==========
|
|
|
- // 注意: /workflow/lobster/sales-corpus/list 已在 AdminLobsterBridgeController 中存在
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/sales-corpus/scenarios")
|
|
|
- public AjaxResult salesCorpusScenarios() { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/sales-corpus/import")
|
|
|
- public AjaxResult salesCorpusImport(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/sales-corpus/analyze")
|
|
|
- public AjaxResult salesCorpusAnalyze(@RequestBody Map<String, Object> data) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- // ========== 死信队列 /workflow/lobster/dead-letter ==========
|
|
|
- // 注意: /workflow/lobster/dead-letter/list 已在 AdminLobsterBridgeController 中存在
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/dead-letter/stats")
|
|
|
- public AjaxResult deadLetterStats() { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/dead-letter/retry-all")
|
|
|
- public AjaxResult deadLetterRetryAll() { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 事件审核 /workflow/lobster/event-audit ==========
|
|
|
- // 注意: /workflow/lobster/event-audit/list 已在 AdminLobsterBridgeController 中存在
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/event-audit/{id}")
|
|
|
- public AjaxResult eventAuditGet(@PathVariable Long id) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/event-audit/approve/{id}")
|
|
|
- public AjaxResult eventAuditApprove(@PathVariable Long id) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/event-audit/reject/{id}")
|
|
|
- public AjaxResult eventAuditReject(@PathVariable Long id, @RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 优化建议 /workflow/lobster/optimization ==========
|
|
|
- // 注意: /workflow/lobster/optimization/list 已在 AdminLobsterBridgeController 中存在
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/optimization/stats")
|
|
|
- public AjaxResult optimizationStats() { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/optimization/batch-audit")
|
|
|
- public AjaxResult optimizationBatchAudit(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== API注册 /workflow/lobster/api-registry ==========
|
|
|
- // 注意: /workflow/lobster/api-registry/list 已在 AdminLobsterBridgeController 中存在
|
|
|
-
|
|
|
- // ========== 提示词 /workflow/lobster/prompt ==========
|
|
|
- // 注意: /workflow/lobster/prompt/list 已在 AdminLobsterBridgeController 中存在
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/prompt/categories")
|
|
|
- public AjaxResult promptCategories() { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- // ========== 龙虾引擎管理端 ==========
|
|
|
- @GetMapping("/workflow/lobster-admin/companies")
|
|
|
- public AjaxResult lobsterAdminCompanies() {
|
|
|
- try {
|
|
|
- if (jdbcTemplate == null) return AjaxResult.success(new ArrayList<>());
|
|
|
- List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT id, tenant_name, tenant_code, status FROM tenant_info WHERE status = '0' ORDER BY id LIMIT 200");
|
|
|
- return AjaxResult.success(list);
|
|
|
- } catch (Exception e) { return AjaxResult.success(new ArrayList<>()); }
|
|
|
- }
|
|
|
-
|
|
|
- // ========== 坐席管理 /admin/voice-seat ==========
|
|
|
- @GetMapping("/admin/voice-seat/list")
|
|
|
- public TableDataInfo voiceSeatList() { return safeList("SELECT * FROM company_voice_caller ORDER BY calling_id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/voice-seat/{callerId}")
|
|
|
- public AjaxResult voiceSeatGet(@PathVariable Long callerId) {
|
|
|
- return safeGet("SELECT * FROM company_voice_caller WHERE calling_id = ?", callerId);
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping("/admin/voice-seat")
|
|
|
- public AjaxResult voiceSeatAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/voice-seat")
|
|
|
- public AjaxResult voiceSeatUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/voice-seat/{callerId}")
|
|
|
- public AjaxResult voiceSeatDelete(@PathVariable Long callerId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @GetMapping("/admin/voice-seat/export")
|
|
|
- public AjaxResult voiceSeatExport() { return AjaxResult.success("导出成功"); }
|
|
|
-
|
|
|
- // ========== 短信接口 /admin/smsApi ==========
|
|
|
- @GetMapping("/admin/smsApi/list")
|
|
|
- public TableDataInfo smsApiList() { return safeList("SELECT * FROM company_sms_api ORDER BY api_id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/smsApi/{apiId}")
|
|
|
- public AjaxResult smsApiGet(@PathVariable Long apiId) {
|
|
|
- return safeGet("SELECT * FROM company_sms_api WHERE api_id = ?", apiId);
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping("/admin/smsApi")
|
|
|
- public AjaxResult smsApiAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/smsApi")
|
|
|
- public AjaxResult smsApiUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/smsApi/{apiId}")
|
|
|
- public AjaxResult smsApiDelete(@PathVariable Long apiId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 短信接口租户绑定 /admin/smsApiTenant ==========
|
|
|
- @GetMapping("/admin/smsApiTenant/list")
|
|
|
- public TableDataInfo smsApiTenantList() { return safeList("SELECT * FROM company_sms_api_tenant ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/smsApiTenant/{id}")
|
|
|
- public AjaxResult smsApiTenantGet(@PathVariable Long id) {
|
|
|
- return safeGet("SELECT * FROM company_sms_api_tenant WHERE id = ?", id);
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/admin/smsApiTenant/byCompany/{companyId}")
|
|
|
- public TableDataInfo smsApiTenantByCompany(@PathVariable Long companyId) {
|
|
|
- return safeList("SELECT * FROM company_sms_api_tenant WHERE company_id = ? ORDER BY id DESC LIMIT 200", companyId);
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping("/admin/smsApiTenant")
|
|
|
- public AjaxResult smsApiTenantAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/smsApiTenant")
|
|
|
- public AjaxResult smsApiTenantUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/smsApiTenant/{id}")
|
|
|
- public AjaxResult smsApiTenantDelete(@PathVariable Long id) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 端口池 /admin/smsPort ==========
|
|
|
- // --- 端口 ---
|
|
|
- @GetMapping("/admin/smsPort/port/list")
|
|
|
- public TableDataInfo smsPortList() { return safeList("SELECT * FROM company_sms_port ORDER BY port_id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/smsPort/port/listByApi/{apiId}")
|
|
|
- public TableDataInfo smsPortByApi(@PathVariable Long apiId) {
|
|
|
- return safeList("SELECT * FROM company_sms_port WHERE api_id = ? ORDER BY port_id DESC LIMIT 200", apiId);
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping("/admin/smsPort/port")
|
|
|
- public AjaxResult smsPortAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/smsPort/port")
|
|
|
- public AjaxResult smsPortUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/smsPort/port/{portId}")
|
|
|
- public AjaxResult smsPortDelete(@PathVariable Long portId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // --- 端口分配 ---
|
|
|
- @GetMapping("/admin/smsPort/assign/list")
|
|
|
- public TableDataInfo smsPortAssignList() { return safeList("SELECT * FROM company_sms_port_assign ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @PostMapping("/admin/smsPort/assign")
|
|
|
- public AjaxResult smsPortAssignAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/smsPort/assign")
|
|
|
- public AjaxResult smsPortAssignUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/smsPort/assign/{id}")
|
|
|
- public AjaxResult smsPortAssignDelete(@PathVariable Long id) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // --- 设备管理 ---
|
|
|
- @GetMapping("/admin/smsPort/device/list")
|
|
|
- public TableDataInfo smsDeviceList() { return safeList("SELECT * FROM company_sms_device ORDER BY device_id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/smsPort/device/{deviceId}")
|
|
|
- public AjaxResult smsDeviceGet(@PathVariable Long deviceId) {
|
|
|
- return safeGet("SELECT * FROM company_sms_device WHERE device_id = ?", deviceId);
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping("/admin/smsPort/device")
|
|
|
- public AjaxResult smsDeviceAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/smsPort/device")
|
|
|
- public AjaxResult smsDeviceUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/smsPort/device/{deviceId}")
|
|
|
- public AjaxResult smsDeviceDelete(@PathVariable Long deviceId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/smsPort/device/assign")
|
|
|
- public AjaxResult smsDeviceAssign(@RequestParam Long deviceId, @RequestParam Long companyUserId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // --- 手机卡管理 ---
|
|
|
- @GetMapping("/admin/smsPort/card/list")
|
|
|
- public TableDataInfo smsCardList() { return safeList("SELECT * FROM company_sms_card ORDER BY card_id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/smsPort/card/{cardId}")
|
|
|
- public AjaxResult smsCardGet(@PathVariable Long cardId) {
|
|
|
- return safeGet("SELECT * FROM company_sms_card WHERE card_id = ?", cardId);
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping("/admin/smsPort/card")
|
|
|
- public AjaxResult smsCardAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/smsPort/card")
|
|
|
- public AjaxResult smsCardUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/smsPort/card/{cardId}")
|
|
|
- public AjaxResult smsCardDelete(@PathVariable Long cardId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // --- 中间件 ---
|
|
|
- @GetMapping("/admin/smsPort/middleware/list")
|
|
|
- public TableDataInfo smsMiddlewareList() { return safeList("SELECT * FROM company_sms_middleware ORDER BY id DESC LIMIT 200"); }
|
|
|
-
|
|
|
- @GetMapping("/admin/smsPort/middleware/byApi/{apiId}")
|
|
|
- public TableDataInfo smsMiddlewareByApi(@PathVariable Long apiId) {
|
|
|
- return safeList("SELECT * FROM company_sms_middleware WHERE api_id = ? ORDER BY id DESC LIMIT 200", apiId);
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping("/admin/smsPort/middleware")
|
|
|
- public AjaxResult smsMiddlewareAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/admin/smsPort/middleware")
|
|
|
- public AjaxResult smsMiddlewareUpdate(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/admin/smsPort/middleware/{id}")
|
|
|
- public AjaxResult smsMiddlewareDelete(@PathVariable Long id) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 外呼租户定价 /admin/voice-api/tenants ==========
|
|
|
- // 注意: /admin/voice-api/tenants/{apiId}, /admin/voice-api/apis/{companyId},
|
|
|
- // /admin/voice-api/assignTenants, /admin/voice-api/unassignTenant,
|
|
|
- // /admin/voice-api/tenantCount/{apiId} 已在 AdminCompanyBridgeController 中存在
|
|
|
-
|
|
|
- // ========== 引擎进化 /workflow/lobster/engine/evolution ==========
|
|
|
- @GetMapping("/workflow/lobster/engine/evolution/metrics")
|
|
|
- public AjaxResult evolutionMetrics() { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/engine/evolution/analyze")
|
|
|
- public AjaxResult evolutionAnalyze(@RequestParam(required = false) Long workflowId) { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/engine/evolution/apply")
|
|
|
- public AjaxResult evolutionApply(@RequestParam Long suggestionId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/engine/heartbeat/status")
|
|
|
- public AjaxResult heartbeatStatus(@RequestParam(required = false) String instanceId) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/engine/channels")
|
|
|
- public AjaxResult engineChannels() { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- // ========== 工作流类型 /workflow/lobster/types ==========
|
|
|
- @GetMapping("/workflow/lobster/types")
|
|
|
- public AjaxResult lobsterTypes() { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- // ========== 销冠语料补充端点 ==========
|
|
|
- @PostMapping("/workflow/lobster/sales-corpus/batch-import")
|
|
|
- public AjaxResult salesCorpusBatchImport(@RequestBody Map<String, Object> data) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/sales-corpus/dialog")
|
|
|
- public AjaxResult salesCorpusDialog(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 工作流执行 /workflow/lobster-exec ==========
|
|
|
- @GetMapping("/workflow/lobster-exec/instance/list")
|
|
|
- public TableDataInfo execInstanceList() { return emptyTable(); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster-exec/instance/{instanceId}")
|
|
|
- public AjaxResult execInstanceGet(@PathVariable String instanceId) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster-exec/node-logs/{instanceId}")
|
|
|
- public AjaxResult execNodeLogs(@PathVariable String instanceId) { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster-exec/start")
|
|
|
- public AjaxResult execStart() { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster-exec/next-node")
|
|
|
- public AjaxResult execNextNode() { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster-exec/pause/{instanceId}")
|
|
|
- public AjaxResult execPause(@PathVariable String instanceId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster-exec/resume/{instanceId}")
|
|
|
- public AjaxResult execResume(@PathVariable String instanceId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster-exec/terminate/{instanceId}")
|
|
|
- public AjaxResult execTerminate(@PathVariable String instanceId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster-exec/control-mode/{instanceId}")
|
|
|
- public AjaxResult execControlMode(@PathVariable String instanceId) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster-exec/control-mode/{instanceId}")
|
|
|
- public AjaxResult execSetControlMode(@PathVariable String instanceId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster-exec/complete-handoff/{instanceId}")
|
|
|
- public AjaxResult execCompleteHandoff(@PathVariable String instanceId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster-exec/compliance-rules")
|
|
|
- public AjaxResult execComplianceRules() { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster-exec/compliance-rule")
|
|
|
- public AjaxResult execAddComplianceRule(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/workflow/lobster-exec/compliance-rule/{id}")
|
|
|
- public AjaxResult execUpdateComplianceRule(@PathVariable Long id, @RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/workflow/lobster-exec/compliance-rule/{id}")
|
|
|
- public AjaxResult execDeleteComplianceRule(@PathVariable Long id) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 提示词补充端点 ==========
|
|
|
- @GetMapping("/workflow/lobster/prompt/{id}")
|
|
|
- public AjaxResult promptGet(@PathVariable Long id) { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/prompt")
|
|
|
- public AjaxResult promptAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PutMapping("/workflow/lobster/prompt/{id}")
|
|
|
- public AjaxResult promptUpdate(@PathVariable Long id, @RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @DeleteMapping("/workflow/lobster/prompt/{id}")
|
|
|
- public AjaxResult promptDelete(@PathVariable Long id) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/prompt/refresh-cache")
|
|
|
- public AjaxResult promptRefreshCache() { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== API注册补充端点 ==========
|
|
|
- @PostMapping("/workflow/lobster/api-registry")
|
|
|
- public AjaxResult apiRegistryAdd(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/api-registry/refresh")
|
|
|
- public AjaxResult apiRegistryRefresh() { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/api-registry/categories")
|
|
|
- public AjaxResult apiRegistryCategories() { return AjaxResult.success(new ArrayList<>()); }
|
|
|
-
|
|
|
- // ========== 优化建议补充端点 ==========
|
|
|
- @GetMapping("/workflow/lobster/optimization/pending-audit")
|
|
|
- public TableDataInfo optimizationPendingAudit() { return emptyTable(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/optimization/audit/{optimizationId}")
|
|
|
- public AjaxResult optimizationAudit(@PathVariable Long optimizationId) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/optimization/analyze")
|
|
|
- public AjaxResult optimizationAnalyze() { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @GetMapping("/workflow/lobster/optimization/config")
|
|
|
- public AjaxResult optimizationConfig() { return AjaxResult.success(new HashMap<>()); }
|
|
|
-
|
|
|
- @PostMapping("/workflow/lobster/optimization/config")
|
|
|
- public AjaxResult optimizationSetConfig(@RequestBody Map<String, Object> data) { return AjaxResult.success(); }
|
|
|
-
|
|
|
- // ========== 死信队列补充端点 ==========
|
|
|
- @GetMapping("/workflow/lobster/dead-letter/retry-all")
|
|
|
- public AjaxResult deadLetterRetryAllPost() { return AjaxResult.success(); }
|
|
|
-
|
|
|
-}
|