From ae4599cd9af3aedb6f355b2d2296af30314750c8 Mon Sep 17 00:00:00 2001 From: Doghole Date: Mon, 8 Jun 2026 17:40:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E2=80=9C=E6=B8=85=E9=99=A4=E9=BB=98=E8=AE=A4?= =?UTF-8?q?IpInfo=E7=BC=93=E5=AD=98=E2=80=9D=E7=9A=84=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E5=9C=A8=E4=BF=AE=E6=94=B9=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=90=8E=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annotation/ResponseDecodeExtension.java | 11 ++-- .../manage/ProxySettingControllerV1.java | 50 +++++++++++-------- .../emoney/entity/sqlite/ProxySetting.java | 19 ++++--- .../emoney/entity/sqlite/RequestInfo.java | 16 +++--- .../emoney/entity/sqlite/StrategyAndPool.java | 13 +++-- .../service/sqlite/ProxySettingService.java | 16 +++--- 6 files changed, 75 insertions(+), 50 deletions(-) diff --git a/src/main/java/quant/rich/emoney/annotation/ResponseDecodeExtension.java b/src/main/java/quant/rich/emoney/annotation/ResponseDecodeExtension.java index 247b9a0..24cc825 100644 --- a/src/main/java/quant/rich/emoney/annotation/ResponseDecodeExtension.java +++ b/src/main/java/quant/rich/emoney/annotation/ResponseDecodeExtension.java @@ -8,7 +8,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; /** - * 注解在方法上以获取对 EmoneyProtocol 的额外操作 + * 注解在方法上以获取对 Emoney Protocol 的额外操作 *

* 目前方法必须是受 spring 管理类下的公共成员方法,且接受参数为单参数 JsonNode. *

@@ -21,18 +21,15 @@ import java.lang.annotation.Target; @Target(METHOD) public @interface ResponseDecodeExtension { /** - * 指定的 protocolId - * @return + * @return 指定的 protocolId */ String protocolId(); /** - * inspect 的排序 - * @return + * @return inspect 的排序 */ int order() default -1; /** - * 是否在模拟客户端请求和返回时启用, 默认 true - * @return + * @return 是否在模拟客户端请求和返回时启用, 默认 true */ boolean client() default true; } diff --git a/src/main/java/quant/rich/emoney/controller/manage/ProxySettingControllerV1.java b/src/main/java/quant/rich/emoney/controller/manage/ProxySettingControllerV1.java index 6e73a3b..53e561e 100644 --- a/src/main/java/quant/rich/emoney/controller/manage/ProxySettingControllerV1.java +++ b/src/main/java/quant/rich/emoney/controller/manage/ProxySettingControllerV1.java @@ -47,23 +47,31 @@ public class ProxySettingControllerV1 extends UpdateBoolServiceController save(@RequestBody ProxySetting proxySetting) { - return super.save(proxySetting); - } - - @PostMapping("/delete") - @ResponseBody - public R delete(String id) { - return super.delete(id); - } + @PostMapping("/save") + @ResponseBody + public R save(@RequestBody ProxySetting proxySetting) { + R result = super.save(proxySetting); + proxySettingService.clearIpInfoCache(); + return result; + } + + @PostMapping("/delete") + @ResponseBody + public R delete(String id) { + R result = super.delete(id); + proxySettingService.clearIpInfoCache(); + return result; + } - @Override - protected - R updateBool(String id, String field, Boolean value) { - return super.updateBool(id, field, value); - } + @Override + protected + R updateBool(String id, String field, Boolean value) { + R result = super.updateBool(id, field, value); + if ("isDefault".equals(field)) { + proxySettingService.clearIpInfoCache(); + } + return result; + } @PostMapping("/batchOp") @ResponseBody @@ -79,10 +87,12 @@ public class ProxySettingControllerV1 extends UpdateBoolServiceController result = R.judge( + proxySettingService.removeBatchByIds(idArray)); + proxySettingService.clearIpInfoCache(); + return result; + } LambdaUpdateWrapper uw = new LambdaUpdateWrapper<>(); uw.in(ProxySetting::getId, idArray); diff --git a/src/main/java/quant/rich/emoney/entity/sqlite/ProxySetting.java b/src/main/java/quant/rich/emoney/entity/sqlite/ProxySetting.java index 992e30f..ba9fba0 100644 --- a/src/main/java/quant/rich/emoney/entity/sqlite/ProxySetting.java +++ b/src/main/java/quant/rich/emoney/entity/sqlite/ProxySetting.java @@ -13,12 +13,19 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.annotation.Nonnull; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; -import quant.rich.emoney.validator.ProxySettingValid; - -@Data -@Accessors(chain = true) -@NoArgsConstructor +import lombok.experimental.Accessors; +import quant.rich.emoney.validator.ProxySettingValid; + +/** + * 平台代理配置。 + *

+ * SQLite 表 proxy_setting 使用触发器维护默认代理的一致性:新增或更新 is_default = 1 + * 时会把其他记录置为非默认;不允许把最后一条默认代理改为非默认,也不允许删除默认代理。 + * 这部分约束不在 Java 代码里重复实现,调整表结构或导入数据时需要同步检查触发器。 + */ +@Data +@Accessors(chain = true) +@NoArgsConstructor @TableName(value = "proxy_setting", autoResultMap = true) @ProxySettingValid public class ProxySetting { diff --git a/src/main/java/quant/rich/emoney/entity/sqlite/RequestInfo.java b/src/main/java/quant/rich/emoney/entity/sqlite/RequestInfo.java index 7da1d92..0205eaa 100644 --- a/src/main/java/quant/rich/emoney/entity/sqlite/RequestInfo.java +++ b/src/main/java/quant/rich/emoney/entity/sqlite/RequestInfo.java @@ -30,12 +30,16 @@ import quant.rich.emoney.validator.RequestInfoValid; /** * 用于配置请求时的请求行为,一般而言,请求头与安卓系统的信息有关(build.prop) * 虽然部分请求对应服务器可能不进行审核,但合理的请求头能尽可能模仿真机行为,避免风险 - * @see DeviceInfoConfig - * @see AndroidSdkLevelConfig - * @see ChromeVersionsConfig - */ -@Data -@EqualsAndHashCode(callSuper=false) + * @see DeviceInfoConfig + * @see AndroidSdkLevelConfig + * @see ChromeVersionsConfig + *

+ * SQLite 表 request_info 使用触发器维护默认请求配置的一致性:新增或更新 is_default = 1 + * 时会把其他记录置为非默认;不允许把最后一条默认请求配置改为非默认,也不允许删除默认请求配置。 + * 这部分约束不在 Java 代码里重复实现,调整表结构或导入数据时需要同步检查触发器。 + */ +@Data +@EqualsAndHashCode(callSuper=false) @Accessors(chain = true) @Slf4j @RequestInfoValid diff --git a/src/main/java/quant/rich/emoney/entity/sqlite/StrategyAndPool.java b/src/main/java/quant/rich/emoney/entity/sqlite/StrategyAndPool.java index 5f5e78d..86f283b 100644 --- a/src/main/java/quant/rich/emoney/entity/sqlite/StrategyAndPool.java +++ b/src/main/java/quant/rich/emoney/entity/sqlite/StrategyAndPool.java @@ -9,11 +9,14 @@ import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; -/** - * 益盟策略和策略池 - */ -@Data -@Accessors(chain=true) +/** + * 益盟策略和策略池 + *

+ * SQLite 表 strategy_and_pool 对 pool_id 设置了 UNIQUE_POOL_ID 唯一约束,并使用 + * ON CONFLICT REPLACE。重复写入同一 pool_id 时会由 SQLite 替换旧记录。 + */ +@Data +@Accessors(chain=true) @TableName(value="strategy_and_pool") @ToString public class StrategyAndPool implements Comparable { diff --git a/src/main/java/quant/rich/emoney/service/sqlite/ProxySettingService.java b/src/main/java/quant/rich/emoney/service/sqlite/ProxySettingService.java index 4955dca..14902d1 100644 --- a/src/main/java/quant/rich/emoney/service/sqlite/ProxySettingService.java +++ b/src/main/java/quant/rich/emoney/service/sqlite/ProxySettingService.java @@ -36,9 +36,13 @@ public class ProxySettingService extends SqliteServiceImpl