From 56afee0386cde6a920fa6509c394430d0733225b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=87=AA=E8=BE=BE?= <980324341@qq.com> Date: Wed, 2 Sep 2026 03:24:23 +0800 Subject: [PATCH] =?UTF-8?q?task-124:=20@Transactional=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=AE=A1=E8=AE=A1=E6=B8=85=E5=8D=95=EF=BC=88147=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95/30=20=E6=A8=A1=E5=9D=97=E6=89=AB=E6=8F=8F=E5=99=A8=20?= =?UTF-8?q?+=2013=20=E6=9D=A1=E6=B5=8B=E8=AF=95=20+=20=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E5=BF=AB=E7=85=A7=EF=BC=8C=E4=B8=8D=E6=94=B9=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend-java/scripts/test_tx_audit.py | 204 ++ backend-java/scripts/tx_audit.py | 220 ++ backend-java/scripts/tx_report.json | 3186 +++++++++++++++++++++++++ 3 files changed, 3610 insertions(+) create mode 100644 backend-java/scripts/test_tx_audit.py create mode 100644 backend-java/scripts/tx_audit.py create mode 100644 backend-java/scripts/tx_report.json diff --git a/backend-java/scripts/test_tx_audit.py b/backend-java/scripts/test_tx_audit.py new file mode 100644 index 00000000..a2dbe2cb --- /dev/null +++ b/backend-java/scripts/test_tx_audit.py @@ -0,0 +1,204 @@ +"""task-124 @Transactional 方法审计清单测试。 + +对应 plan 07 任务 124 的 8 条用例 + 2 条补强: +1. test_audit_covers_all_modules 覆盖全部业务模块 +2. test_audit_classification 分类完整(必须/可移出) +3. test_audit_result_endpoints /result 相关方法都在清单 +4. test_audit_python_facing Python 回调相关标记 +5. test_audit_priority_order 按收益排序 +6. test_audit_no_code_change 本任务零代码变更 +7. test_audit_documented 文档产出 +8. test_audit_repeatable 可重复执行 +9. test_audit_detects_tx_method 识别 @Transactional 方法 +10. test_audit_classifies_movable 事务内可移出段分类 +""" + +from __future__ import annotations + +import json +import subprocess +import unittest +from pathlib import Path + +from tx_audit import MODULES_ROOT, scan_modules, scan_text + +SCRIPTS_DIR = Path(__file__).resolve().parent +REPO_ROOT = SCRIPTS_DIR.parent.parent +DOC_PATH = REPO_ROOT / "backend-java" / "docs" / "transaction-boundary-audit.md" + +FIXTURE_TX = """package com.example; +@Service +public class DemoService { + @Transactional + public boolean submitResult(Long taskId, List rows) { + List items = rows.stream() + .map(row -> toVo(row)) + .collect(Collectors.toList()); + int updated = fileResultMapper.update(null, new LambdaUpdateWrapper() + .eq(FileResultEntity::getId, taskId) + .set(FileResultEntity::getStatus, "SUCCESS")); + log.info("submitted taskId={} count={}", taskId, items.size()); + Files.deleteIfExists(Path.of("/tmp/task-" + taskId)); + return updated > 0; + } + + public void noTxMethod(Long id) { + fileTaskMapper.selectById(id); + } +} +""" + +FIXTURE_WRITE_ONLY = """package com.example; +@Service +public class DemoService { + @Transactional + public int markFailed(Long id) { + return fileTaskMapper.update(null, new LambdaUpdateWrapper() + .eq(FileTaskEntity::getId, id) + .set(FileTaskEntity::getStatus, "FAILED")); + } +} +""" + +FIXTURE_LOCK = """package com.example; +@Service +public class DemoService { + @Transactional + public void finalizeTask(Long taskId) { + TaskDistributedLockService.LockHandle handle = acquireTaskLock("MODULE", taskId); + if (handle == null) { + return; + } + try (handle) { + taskMapper.update(null, new LambdaUpdateWrapper() + .eq(TaskFileEntity::getId, taskId)); + } + } +} +""" + +FIXTURE_PLAIN = """package com.example; +@Service +public class DemoService { + public int sum(List nums) { + return nums.stream().mapToInt(Integer::intValue).sum(); + } +} +""" + + +class TxAuditDetectTest(unittest.TestCase): + def test_audit_detects_tx_method(self): + findings = scan_text(FIXTURE_TX, "DemoService.java") + self.assertEqual(len(findings), 1) + self.assertEqual(findings[0]["method"], "submitResult") + self.assertFalse(findings[0]["class_level"]) + + def test_audit_classifies_movable(self): + findings = scan_text(FIXTURE_TX, "DemoService.java") + self.assertEqual(len(findings), 1) + movable = findings[0]["movable"] + self.assertIn("compute", movable) + self.assertIn("assembly", movable) + self.assertIn("log", movable) + self.assertIn("cleanup", movable) + self.assertIn("write", findings[0]["must_stay"]) + self.assertGreater(findings[0]["priority"], 0) + + def test_audit_no_tx_not_reported(self): + self.assertEqual(len(scan_text(FIXTURE_PLAIN, "Plain.java")), 0) + + def test_audit_write_only_no_movable(self): + findings = scan_text(FIXTURE_WRITE_ONLY, "DemoService.java") + self.assertEqual(len(findings), 1) + self.assertIn("write", findings[0]["must_stay"]) + self.assertEqual(findings[0]["movable"], []) + + def test_audit_lock_flagged_must_stay(self): + findings = scan_text(FIXTURE_LOCK, "DemoService.java") + self.assertEqual(len(findings), 1) + self.assertIn("lock", findings[0]["must_stay"]) + + +class TxAuditCoverageTest(unittest.TestCase): + def test_audit_covers_all_modules(self): + report = scan_modules(MODULES_ROOT) + self.assertGreaterEqual(report.scanned_files, 600) + self.assertGreater(len(report.findings), 50) + modules = {f["module"] for f in report.findings} + self.assertGreaterEqual(len(modules), 15) + + def test_audit_classification(self): + for finding in scan_modules(MODULES_ROOT).findings: + self.assertIn("must_stay", finding) + self.assertIn("movable", finding) + self.assertIsInstance(finding["must_stay"], list) + self.assertIsInstance(finding["movable"], list) + + def test_audit_result_endpoints(self): + report = scan_modules(MODULES_ROOT) + result_methods = [ + f + for f in report.findings + if "result" in f["method"].lower() or "submit" in f["method"].lower() + ] + self.assertGreater( + len(result_methods), 0, "应找到 /result 相关 @Transactional 方法" + ) + modules_with_result = {f["module"] for f in result_methods} + self.assertGreaterEqual(len(modules_with_result), 3) + + def test_audit_python_facing(self): + report = scan_modules(MODULES_ROOT) + flagged = [f for f in report.findings if f["python_facing"]] + self.assertGreater(len(flagged), 0, "应标记 Python 回调相关方法") + for f in flagged: + name = f["method"].lower() + self.assertTrue( + any( + k in name + for k in ( + "result", + "submit", + "upload", + "chunk", + "done", + "ack", + "report", + ) + ), + f"python_facing 标记与命名不符: {f['method']}", + ) + + def test_audit_priority_order(self): + findings = scan_modules(MODULES_ROOT).findings + priorities = [f["priority"] for f in findings] + self.assertEqual(priorities, sorted(priorities, reverse=True)) + + def test_audit_repeatable(self): + first = scan_modules(MODULES_ROOT).to_dict() + second = scan_modules(MODULES_ROOT).to_dict() + self.assertEqual( + json.dumps(first, sort_keys=True), json.dumps(second, sort_keys=True) + ) + + def test_audit_documented(self): + self.assertTrue(DOC_PATH.is_file(), f"audit doc missing: {DOC_PATH}") + text = DOC_PATH.read_text(encoding="utf-8") + self.assertIn("事务", text) + self.assertIn("必须", text) + self.assertIn("可移出", text) + + def test_audit_no_code_change(self): + changed = subprocess.run( + ["git", "diff", "--name-only", "HEAD", "--", "backend-java/src"], + cwd=REPO_ROOT, + capture_output=True, + text=True, + check=True, + ).stdout.strip() + self.assertEqual(changed, "", f"生产代码被改动: {changed}") + + +if __name__ == "__main__": + unittest.main() diff --git a/backend-java/scripts/tx_audit.py b/backend-java/scripts/tx_audit.py new file mode 100644 index 00000000..1f14f10f --- /dev/null +++ b/backend-java/scripts/tx_audit.py @@ -0,0 +1,220 @@ +"""task-124 @Transactional 方法审计清单工具。 + +对 backend-java modules 下的 Java 源码做机械化扫描:定位全部方法级 +@Transactional 注解,按方法体内容分类事务内代码段——必须事务内(落库写/状态/锁) +与可移出(纯计算/DTO 组装/日志/临时文件清理),标记 Python 回调相关方法, +按可移出收益排序,产出审计清单供 plan 07 的任务 125-131 事务收缩参考。 +本工具只读,不改任何代码。 +""" + +from __future__ import annotations + +import argparse +import json +import re +import sys +from dataclasses import dataclass, field +from pathlib import Path + +from n1_scan import _match_span, _strip_comments + +MODULES_ROOT = ( + Path(__file__).resolve().parent.parent / "src/main/java/com/nanri/aiimage/modules" +) + +TX_RE = re.compile(r"@Transactional\b") +METHOD_RE = re.compile( + r"\s*(?:(?:public|protected|private)\s+)?" + r"(?:[\w<>,.?\[\] ]+[\s])?(\w+)\s*\(" +) +PYTHON_FACING_RE = re.compile(r"(?i)(result|submit|upload|chunk|done|ack|report)") + +WRITE_RE = re.compile( + r"\.(insert|update|deleteById|deleteBatchIds|removeById|removeByIds|remove\b|" + r"save|saveBatch|saveOrUpdate|updateById|insertOrUpdate|updateBatchById)\s*\(" +) +LOCK_RE = re.compile(r"acquireTaskLock|\.tryLock\(|LockHandle|taskLockHandle") +CLEANUP_RE = re.compile( + r"Files\.(delete|deleteIfExists|move)|deleteIfExists\(|" + r"tempDir|tempFile|temp-dir|cleanupTemp|deleteTemp|临时文件" +) +COMPUTE_RE = re.compile( + r"\.stream\(\)|\.map\(|\.collect\(|\.filter\(|\.reduce\(|\.sorted\(|" + r"Collectors\.|computeIfAbsent|\.distinct\(|\.flatMap\(|\.peek\(" +) +ASSEMBLY_RE = re.compile( + r"build\w*(Vo|VO|Dto|DTO)|toVo\(|toEntity\(|convert\w*\(|assemble\w*\(|" + r"new \w+(Vo|VO|Dto|DTO)\b" +) +LOG_RE = re.compile(r"log\.(info|warn|debug|error|trace)\s*\(") + + +def _match_body_span(text: str, open_pos: int) -> int | None: + """从 { 出发,返回匹配的 } 偏移(含)。 + + 圆括号深度同步跟踪:lambda/方法调用内的 { } 不计入方法体层级, + 方法体的闭合 } 总是在圆括号外层(paren == 0)首次归零时命中。 + """ + depth = 0 + paren = 0 + for i in range(open_pos, len(text)): + c = text[i] + if c == "(": + paren += 1 + elif c == ")": + paren -= 1 + elif c == "{" and paren == 0: + depth += 1 + elif c == "}" and paren == 0: + depth -= 1 + if depth == 0: + return i + return None + + +def _count_hits(pattern: re.Pattern[str], text: str) -> int: + return len(pattern.findall(text)) + + +def scan_text(text: str, filename: str = "fixture.java") -> list[dict]: + """扫描单份 Java 源码,返回 @Transactional 方法审计条目(按收益降序)。""" + stripped = _strip_comments(text) + findings: list[dict] = [] + pos = 0 + while True: + tx_match = TX_RE.search(stripped, pos) + if not tx_match: + break + anno_end = tx_match.end() + if stripped[anno_end : anno_end + 1] == "(": + close = _match_span(stripped, anno_end) + if close is None: + pos = tx_match.end() + continue + anno_end = close + 1 + method_match = METHOD_RE.search(stripped, anno_end) + if not method_match: + pos = tx_match.end() + continue + method_name = method_match.group(1) + paren_pos = method_match.end() - 1 + close_paren = _match_span(stripped, paren_pos) + if close_paren is None: + pos = method_match.end() + continue + body_start = close_paren + 1 + while body_start < len(stripped) and stripped[body_start].isspace(): + body_start += 1 + if body_start >= len(stripped) or stripped[body_start] != "{": + # 抽象方法/接口声明无方法体,跳过 + pos = method_match.end() + continue + body_end = _match_body_span(stripped, body_start) + if body_end is None: + pos = method_match.end() + continue + body = stripped[body_start + 1 : body_end] + + must_stay: list[str] = [] + counts: dict[str, int] = {} + if _count_hits(WRITE_RE, body) > 0: + must_stay.append("write") + counts["write"] = _count_hits(WRITE_RE, body) + if _count_hits(LOCK_RE, body) > 0: + must_stay.append("lock") + counts["lock"] = _count_hits(LOCK_RE, body) + + movable: list[str] = [] + for key, pattern in ( + ("compute", COMPUTE_RE), + ("assembly", ASSEMBLY_RE), + ("cleanup", CLEANUP_RE), + ("log", LOG_RE), + ): + hits = _count_hits(pattern, body) + counts[key] = hits + if hits > 0: + movable.append(key) + + priority = sum( + counts.get(key, 0) for key in ("compute", "assembly", "cleanup", "log") + ) + findings.append( + { + "file": filename, + "line": _line_of(text, tx_match.start()), + "method": method_name, + "signature": " ".join( + stripped[method_match.start() : close_paren].split() + )[:100], + "class_level": False, + "python_facing": bool(PYTHON_FACING_RE.search(method_name)), + "must_stay": must_stay, + "movable": movable, + "counts": counts, + "priority": priority, + } + ) + pos = body_end + 1 + + findings.sort(key=lambda f: (-f["priority"], f["line"])) + return findings + + +def _line_of(text: str, offset: int) -> int: + return text.count("\n", 0, offset) + 1 + + +@dataclass +class Report: + scanned_files: int = 0 + modules: list[str] = field(default_factory=list) + findings: list[dict] = field(default_factory=list) + + def to_dict(self) -> dict: + return { + "scanned_files": self.scanned_files, + "modules": self.modules, + "findings": self.findings, + } + + +def scan_modules(root: Path) -> Report: + """扫描 modules 根目录下全部 Java 文件,产出 @Transactional 审计报告。""" + report = Report() + module_set: set[str] = set() + for java_file in sorted(root.rglob("*.java")): + report.scanned_files += 1 + rel = java_file.relative_to(root) + module_set.add(rel.parts[0]) + for finding in scan_text(java_file.read_text(encoding="utf-8"), str(rel)): + finding["module"] = rel.parts[0] + report.findings.append(finding) + report.findings.sort(key=lambda f: (-f["priority"], f["file"], f["line"])) + report.modules = sorted(module_set) + return report + + +def main() -> None: + parser = argparse.ArgumentParser(description="@Transactional 方法审计") + parser.add_argument("--json", help="输出 JSON 报告路径(默认 stdout)") + args = parser.parse_args() + + report = scan_modules(MODULES_ROOT) + payload = report.to_dict() + if args.json: + Path(args.json).write_text( + json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8" + ) + else: + print(json.dumps(payload, ensure_ascii=False, indent=2)) + print( + f"scanned {report.scanned_files} files, " + f"{len(report.findings)} @Transactional methods " + f"across {len(report.modules)} modules", + file=sys.stderr, + ) + + +if __name__ == "__main__": + main() diff --git a/backend-java/scripts/tx_report.json b/backend-java/scripts/tx_report.json new file mode 100644 index 00000000..ae655ce3 --- /dev/null +++ b/backend-java/scripts/tx_report.json @@ -0,0 +1,3186 @@ +{ + "scanned_files": 640, + "modules": [ + "admin", + "appearancepatent", + "auth", + "brand", + "collectdata", + "convert", + "debug", + "dedupe", + "deletebrand", + "digitalhuman", + "file", + "filetemplate", + "imagehistory", + "imagevideo", + "invalidasin", + "patroldelete", + "permission", + "pricetrack", + "productcategory", + "productrisk", + "publish", + "queryasin", + "shopdatacrawl", + "shopkey", + "shopmatch", + "similarasin", + "split", + "task", + "withdraw", + "ziniao" + ], + "findings": [ + { + "file": "digitalhuman\\service\\DigitalHumanVersionService.java", + "line": 38, + "method": "uploadVersion", + "signature": "public DigitalHumanVersionVo uploadVersion(String version, MultipartFile file, String changelog, Str", + "class_level": false, + "python_facing": true, + "must_stay": [ + "write" + ], + "movable": [ + "assembly", + "cleanup", + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 12, + "log": 8 + }, + "priority": 21, + "module": "digitalhuman" + }, + { + "file": "shopdatacrawl\\service\\ShopDataCrawlTaskService.java", + "line": 677, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [ + "compute" + ], + "counts": { + "write": 1, + "lock": 2, + "compute": 12, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 12, + "module": "shopdatacrawl" + }, + { + "file": "pricetrack\\service\\PriceTrackLoopRunService.java", + "line": 85, + "method": "dispatchNext", + "signature": "public PriceTrackLoopRunDispatchVo dispatchNext(Long loopRunId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [ + "assembly" + ], + "counts": { + "compute": 0, + "assembly": 9, + "cleanup": 0, + "log": 0 + }, + "priority": 9, + "module": "pricetrack" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 333, + "method": "updateUserColumnPermissions", + "signature": "public void updateUserColumnPermissions(AdminUserEntity operator, Long userId, UserColumnPermissionU", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "compute" + ], + "counts": { + "write": 1, + "compute": 8, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 8, + "module": "permission" + }, + { + "file": "deletebrand\\service\\DeleteBrandRunService.java", + "line": 1285, + "method": "submitResult", + "signature": "public void submitResult(Long taskId, DeleteBrandSubmitResultRequest request", + "class_level": false, + "python_facing": true, + "must_stay": [ + "write", + "lock" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 6 + }, + "priority": 6, + "module": "deletebrand" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 233, + "method": "updateImageVideoDataPermissionUsers", + "signature": "public int updateImageVideoDataPermissionUsers(AdminUserEntity operator, List userIds", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "compute" + ], + "counts": { + "write": 1, + "compute": 5, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 5, + "module": "permission" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 273, + "method": "updateShopDataCrawlDataPermissionUsers", + "signature": "public int updateShopDataCrawlDataPermissionUsers(AdminUserEntity operator, List userIds", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "compute" + ], + "counts": { + "write": 1, + "compute": 5, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 5, + "module": "permission" + }, + { + "file": "task\\service\\TaskFileJobService.java", + "line": 244, + "method": "resetStuckRunningJobsDetailed", + "signature": "public StuckJobResetResult resetStuckRunningJobsDetailed(int stuckMinutes, int limit", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "compute" + ], + "counts": { + "write": 3, + "compute": 5, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 5, + "module": "task" + }, + { + "file": "shopkey\\service\\ShopCredentialCheckService.java", + "line": 45, + "method": "create", + "signature": "public ShopCredentialCheckVo create(String shopName", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly", + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 2, + "cleanup": 0, + "log": 1 + }, + "priority": 3, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopCredentialCheckService.java", + "line": 71, + "method": "claimForClient", + "signature": "public ShopCredentialCheckClaimVo claimForClient(String clientHost", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly", + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 2 + }, + "priority": 3, + "module": "shopkey" + }, + { + "file": "shopmatch\\service\\ShopMatchTaskService.java", + "line": 423, + "method": "createTask", + "signature": "public ShopMatchCreateTaskVo createTask(ShopMatchCreateTaskRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "compute", + "assembly" + ], + "counts": { + "write": 2, + "compute": 2, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 3, + "module": "shopmatch" + }, + { + "file": "pricetrack\\service\\PriceTrackService.java", + "line": 70, + "method": "addCandidate", + "signature": "public PriceTrackCandidateVo addCandidate(PriceTrackCandidateAddRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 2, + "cleanup": 0, + "log": 0 + }, + "priority": 2, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackTaskService.java", + "line": 438, + "method": "createTask", + "signature": "public PriceTrackCreateTaskVo createTask(PriceTrackCreateTaskRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly", + "log" + ], + "counts": { + "write": 3, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 1 + }, + "priority": 2, + "module": "pricetrack" + }, + { + "file": "productrisk\\service\\ProductRiskResolveService.java", + "line": 68, + "method": "addCandidate", + "signature": "public ProductRiskCandidateVo addCandidate(ProductRiskCandidateAddRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 2, + "cleanup": 0, + "log": 0 + }, + "priority": 2, + "module": "productrisk" + }, + { + "file": "shopdatacrawl\\service\\ShopDataCrawlResolveService.java", + "line": 77, + "method": "addCandidate", + "signature": "public ProductRiskCandidateVo addCandidate(ProductRiskCandidateAddRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 2, + "cleanup": 0, + "log": 0 + }, + "priority": 2, + "module": "shopdatacrawl" + }, + { + "file": "shopkey\\service\\ShopCredentialCheckService.java", + "line": 106, + "method": "report", + "signature": "public void report(Long id, ShopCredentialCheckReportRequest request", + "class_level": false, + "python_facing": true, + "must_stay": [ + "write" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 2 + }, + "priority": 2, + "module": "shopkey" + }, + { + "file": "shopmatch\\service\\ShopMatchResolveService.java", + "line": 62, + "method": "addCandidate", + "signature": "public ProductRiskCandidateVo addCandidate(ProductRiskCandidateAddRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 2, + "cleanup": 0, + "log": 0 + }, + "priority": 2, + "module": "shopmatch" + }, + { + "file": "shopmatch\\service\\ShopMatchTaskService.java", + "line": 504, + "method": "activateTask", + "signature": "public void activateTask(Long taskId, Long userId, Integer stageIndex", + "class_level": false, + "python_facing": false, + "must_stay": [ + "lock" + ], + "movable": [ + "log" + ], + "counts": { + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 2 + }, + "priority": 2, + "module": "shopmatch" + }, + { + "file": "ziniao\\memory\\service\\ZiniaoMemoryStoreService.java", + "line": 109, + "method": "put", + "signature": "public void put(String cacheType, String cacheKey, Object payload, Duration ttl", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "log" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 2 + }, + "priority": 2, + "module": "ziniao" + }, + { + "file": "collectdata\\service\\CollectDataService.java", + "line": 1315, + "method": "saveCountryPreference", + "signature": "public CollectDataCountryPreferenceVo saveCountryPreference(CollectDataCountryPreferenceSaveRequest ", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "collectdata" + }, + { + "file": "convert\\service\\ConvertTemplateService.java", + "line": 43, + "method": "importTemplate", + "signature": "public ConvertTemplateVo importTemplate(ConvertTemplateImportRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "convert" + }, + { + "file": "deletebrand\\service\\DeleteBrandTaskStorageService.java", + "line": 41, + "method": "saveParsedPayload", + "signature": "public void saveParsedPayload(Long taskId, Map parsedPayloadB", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "log" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 1 + }, + "priority": 1, + "module": "deletebrand" + }, + { + "file": "digitalhuman\\service\\DigitalHumanVersionService.java", + "line": 141, + "method": "releaseVersion", + "signature": "public DigitalHumanVersionVo releaseVersion(String version", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "digitalhuman" + }, + { + "file": "digitalhuman\\service\\DigitalHumanVersionService.java", + "line": 163, + "method": "setLatest", + "signature": "public DigitalHumanVersionVo setLatest(String version", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "digitalhuman" + }, + { + "file": "digitalhuman\\service\\DigitalHumanVersionService.java", + "line": 190, + "method": "deleteVersion", + "signature": "public void deleteVersion(String version", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 1 + }, + "priority": 1, + "module": "digitalhuman" + }, + { + "file": "patroldelete\\service\\PatrolDeleteTaskService.java", + "line": 277, + "method": "createTask", + "signature": "public PatrolDeleteCreateTaskVo createTask(PatrolDeleteCreateTaskRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "patroldelete" + }, + { + "file": "patroldelete\\service\\PatrolDeleteTaskService.java", + "line": 470, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 1 + }, + "priority": 1, + "module": "patroldelete" + }, + { + "file": "pricetrack\\service\\PriceTrackLoopRunService.java", + "line": 47, + "method": "createLoopRun", + "signature": "public PriceTrackLoopRunVo createLoopRun(PriceTrackLoopRunCreateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackLoopRunService.java", + "line": 137, + "method": "childFinished", + "signature": "public PriceTrackLoopRunVo childFinished(Long loopRunId, Long userId, PriceTrackLoopRunChildFinished", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [ + "assembly" + ], + "counts": { + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackLoopRunService.java", + "line": 144, + "method": "requestStop", + "signature": "public PriceTrackLoopRunVo requestStop(Long loopRunId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackLoopRunService.java", + "line": 157, + "method": "bindChildTask", + "signature": "public void bindChildTask(Long loopRunId, Long childTaskId, Integer roundIndex, Integer shopIndex", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 1 + }, + "priority": 1, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackService.java", + "line": 186, + "method": "saveCountryPreference", + "signature": "public PriceTrackCountryPreferenceVo saveCountryPreference(PriceTrackCountryPreferenceSaveRequest re", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackTaskService.java", + "line": 288, + "method": "markDispatchFailed", + "signature": "public void markDispatchFailed(Long taskId, Long userId, String errorMessage", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 1 + }, + "priority": 1, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackTaskService.java", + "line": 328, + "method": "deletePendingShopResult", + "signature": "public PriceTrackPendingDeleteVo deletePendingShopResult(Long userId, String shopName", + "class_level": false, + "python_facing": true, + "must_stay": [ + "write", + "lock" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "pricetrack" + }, + { + "file": "productrisk\\service\\ProductRiskResolveService.java", + "line": 167, + "method": "saveCountryPreference", + "signature": "public ProductRiskCountryPreferenceVo saveCountryPreference(ProductRiskCountryPreferenceSaveRequest ", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "productrisk" + }, + { + "file": "productrisk\\service\\ProductRiskTaskService.java", + "line": 296, + "method": "deletePendingShopResult", + "signature": "public ProductRiskPendingDeleteVo deletePendingShopResult(Long userId, String shopName", + "class_level": false, + "python_facing": true, + "must_stay": [ + "write", + "lock" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "productrisk" + }, + { + "file": "productrisk\\service\\ProductRiskTaskService.java", + "line": 487, + "method": "createTask", + "signature": "public ProductRiskCreateTaskVo createTask(ProductRiskCreateTaskRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 3, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "productrisk" + }, + { + "file": "publish\\service\\PublishTaskService.java", + "line": 538, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 1 + }, + "priority": 1, + "module": "publish" + }, + { + "file": "queryasin\\service\\QueryAsinTaskService.java", + "line": 264, + "method": "createTask", + "signature": "public QueryAsinCreateTaskVo createTask(QueryAsinCreateTaskRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "queryasin" + }, + { + "file": "shopdatacrawl\\service\\ShopDataCrawlResolveService.java", + "line": 191, + "method": "saveCountryPreference", + "signature": "public ProductRiskCountryPreferenceVo saveCountryPreference(ProductRiskCountryPreferenceSaveRequest ", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "shopdatacrawl" + }, + { + "file": "shopdatacrawl\\service\\ShopDataCrawlTaskService.java", + "line": 430, + "method": "createTask", + "signature": "public ShopDataCrawlCreateTaskVo createTask(ShopDataCrawlCreateTaskRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "shopdatacrawl" + }, + { + "file": "shopkey\\service\\ShopManageGroupService.java", + "line": 124, + "method": "create", + "signature": "public ShopManageGroupItemVo create(ShopManageGroupCreateRequest request, Long operatorId, boolean s", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopManageGroupService.java", + "line": 139, + "method": "update", + "signature": "public ShopManageGroupItemVo update(Long id, Long operatorId, boolean superAdmin, ShopManageGroupUpd", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "shopkey" + }, + { + "file": "shopmatch\\service\\ShopMatchResolveService.java", + "line": 163, + "method": "saveCountryPreference", + "signature": "public ProductRiskCountryPreferenceVo saveCountryPreference(ProductRiskCountryPreferenceSaveRequest ", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "shopmatch" + }, + { + "file": "withdraw\\service\\WithdrawResolveService.java", + "line": 49, + "method": "addCandidate", + "signature": "public ProductRiskCandidateVo addCandidate(ProductRiskCandidateAddRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "withdraw" + }, + { + "file": "withdraw\\service\\WithdrawTaskService.java", + "line": 164, + "method": "createTask", + "signature": "public WithdrawCreateTaskVo createTask(WithdrawCreateTaskRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "assembly" + ], + "counts": { + "write": 2, + "compute": 0, + "assembly": 1, + "cleanup": 0, + "log": 0 + }, + "priority": 1, + "module": "withdraw" + }, + { + "file": "ziniao\\memory\\service\\ZiniaoMemoryStoreService.java", + "line": 154, + "method": "delete", + "signature": "public void delete(String cacheType, String cacheKey", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 1 + }, + "priority": 1, + "module": "ziniao" + }, + { + "file": "ziniao\\memory\\service\\ZiniaoMemoryStoreService.java", + "line": 191, + "method": "updateStaleMarks", + "signature": "public int updateStaleMarks(List rows", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [ + "log" + ], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 1 + }, + "priority": 1, + "module": "ziniao" + }, + { + "file": "admin\\service\\AdminUserService.java", + "line": 104, + "method": "createUser", + "signature": "public Long createUser(AdminUserEntity currentUser, AdminUserCreateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "admin" + }, + { + "file": "admin\\service\\AdminUserService.java", + "line": 162, + "method": "updateUser", + "signature": "public void updateUser(AdminUserEntity currentUser, Long uid, AdminUserUpdateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "admin" + }, + { + "file": "appearancepatent\\service\\AppearancePatentTaskService.java", + "line": 265, + "method": "activateTask", + "signature": "public void activateTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "appearancepatent" + }, + { + "file": "appearancepatent\\service\\AppearancePatentTaskService.java", + "line": 502, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "appearancepatent" + }, + { + "file": "brand\\service\\BrandTaskStorageService.java", + "line": 39, + "method": "saveParsedPayload", + "signature": "public void saveParsedPayload(Long taskId, List payload", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "brand" + }, + { + "file": "brand\\service\\BrandTaskStorageService.java", + "line": 111, + "method": "storeChunk", + "signature": "public ChunkStoreResult storeChunk(Long taskId, BrandCrawlResultFileDto file", + "class_level": false, + "python_facing": true, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "brand" + }, + { + "file": "brand\\service\\BrandTaskStorageService.java", + "line": 223, + "method": "refreshFileAggregate", + "signature": "public ChunkStoreResult refreshFileAggregate(Long taskId, String fileUrl", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "brand" + }, + { + "file": "brand\\service\\BrandTaskStorageService.java", + "line": 239, + "method": "deleteTaskData", + "signature": "public void deleteTaskData(Long taskId", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "brand" + }, + { + "file": "collectdata\\service\\CollectDataService.java", + "line": 365, + "method": "activateTask", + "signature": "public void activateTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "collectdata" + }, + { + "file": "collectdata\\service\\CollectDataService.java", + "line": 376, + "method": "failTask", + "signature": "public void failTask(Long taskId, Long userId, String error", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "collectdata" + }, + { + "file": "collectdata\\service\\CollectDataService.java", + "line": 398, + "method": "updateProgress", + "signature": "public void updateProgress(Long taskId, TaskHeartbeatRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "collectdata" + }, + { + "file": "collectdata\\service\\CollectDataService.java", + "line": 1243, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "collectdata" + }, + { + "file": "convert\\service\\ConvertTemplateService.java", + "line": 67, + "method": "setDefaultTemplate", + "signature": "public void setDefaultTemplate(String templateCode", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "convert" + }, + { + "file": "convert\\service\\ConvertTemplateService.java", + "line": 78, + "method": "deleteTemplate", + "signature": "public void deleteTemplate(String templateCode", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "convert" + }, + { + "file": "dedupe\\service\\DedupeTotalDataService.java", + "line": 357, + "method": "create", + "signature": "public DedupeTotalDataItemVo create(DedupeTotalDataCreateRequest request, Long operatorId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "dedupe" + }, + { + "file": "dedupe\\service\\DedupeTotalDataService.java", + "line": 915, + "method": "update", + "signature": "public DedupeTotalDataItemVo update(Long id, DedupeTotalDataUpdateRequest request, Long operatorId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "dedupe" + }, + { + "file": "dedupe\\service\\DedupeTotalDataService.java", + "line": 928, + "method": "delete", + "signature": "public void delete(Long id, Long operatorId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "dedupe" + }, + { + "file": "deletebrand\\service\\DeleteBrandTaskStorageService.java", + "line": 144, + "method": "storeResultChunkIfChanged", + "signature": "public boolean storeResultChunkIfChanged(Long taskId, String scopeKey, Integer chunkIndex, DeleteBra", + "class_level": false, + "python_facing": true, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 3, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "deletebrand" + }, + { + "file": "deletebrand\\service\\DeleteBrandTaskStorageService.java", + "line": 255, + "method": "deleteTaskData", + "signature": "public void deleteTaskData(Long taskId", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "deletebrand" + }, + { + "file": "imagevideo\\service\\ImageVideoSecretService.java", + "line": 35, + "method": "save", + "signature": "public ImageVideoSecretStatusVo save(ImageVideoSecretSaveRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "imagevideo" + }, + { + "file": "invalidasin\\service\\InvalidAsinDataService.java", + "line": 79, + "method": "create", + "signature": "public InvalidAsinDataItemVo create(InvalidAsinDataCreateRequest request, Long operatorId, boolean s", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "invalidasin" + }, + { + "file": "invalidasin\\service\\InvalidAsinDataService.java", + "line": 94, + "method": "update", + "signature": "public InvalidAsinDataItemVo update(Long id, InvalidAsinDataUpdateRequest request, Long operatorId, ", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "invalidasin" + }, + { + "file": "invalidasin\\service\\InvalidAsinDataService.java", + "line": 119, + "method": "delete", + "signature": "public void delete(Long id, Long operatorId, boolean superAdmin", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "invalidasin" + }, + { + "file": "patroldelete\\service\\PatrolDeleteResolveService.java", + "line": 113, + "method": "deleteCandidate", + "signature": "public void deleteCandidate(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "patroldelete" + }, + { + "file": "patroldelete\\service\\PatrolDeleteResolveService.java", + "line": 165, + "method": "addCondition", + "signature": "public PatrolDeleteConditionVo addCondition(PatrolDeleteConditionAddRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "patroldelete" + }, + { + "file": "patroldelete\\service\\PatrolDeleteResolveService.java", + "line": 188, + "method": "deleteCondition", + "signature": "public void deleteCondition(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "patroldelete" + }, + { + "file": "patroldelete\\service\\PatrolDeleteTaskService.java", + "line": 502, + "method": "deleteHistory", + "signature": "public void deleteHistory(Long resultId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 2, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "patroldelete" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 61, + "method": "create", + "signature": "public PermissionMenuItemVo create(PermissionMenuCreateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "permission" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 67, + "method": "create", + "signature": "public PermissionMenuItemVo create(AdminUserEntity operator, PermissionMenuCreateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "permission" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 93, + "method": "update", + "signature": "public PermissionMenuItemVo update(Long id, PermissionMenuUpdateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "permission" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 99, + "method": "update", + "signature": "public PermissionMenuItemVo update(AdminUserEntity operator, Long id, PermissionMenuUpdateRequest re", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "permission" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 126, + "method": "delete", + "signature": "public void delete(Long id", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "permission" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 135, + "method": "delete", + "signature": "public void delete(AdminUserEntity operator, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "permission" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 315, + "method": "updateUserColumnPermissions", + "signature": "public void updateUserColumnPermissions(Long userId, UserColumnPermissionUpdateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "permission" + }, + { + "file": "permission\\service\\PermissionMenuService.java", + "line": 325, + "method": "updateUserColumnPermissions", + "signature": "public void updateUserColumnPermissions(AdminUserEntity operator, Long userId, UserColumnPermissionU", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "permission" + }, + { + "file": "pricetrack\\service\\PriceTrackLoopRunService.java", + "line": 182, + "method": "syncLoopRunAfterChildTerminal", + "signature": "public void syncLoopRunAfterChildTerminal(Long childTaskId", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackLoopRunService.java", + "line": 190, + "method": "syncLoopRunAfterChildRemoved", + "signature": "public void syncLoopRunAfterChildRemoved(Long childTaskId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackService.java", + "line": 117, + "method": "deleteCandidate", + "signature": "public void deleteCandidate(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackTaskService.java", + "line": 249, + "method": "deleteHistory", + "signature": "public void deleteHistory(Long resultId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 2, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "pricetrack" + }, + { + "file": "pricetrack\\service\\PriceTrackTaskService.java", + "line": 271, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "pricetrack" + }, + { + "file": "productcategory\\service\\ProductCategoryService.java", + "line": 86, + "method": "create", + "signature": "public ProductCategoryItemVo create(ProductCategorySaveRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "productcategory" + }, + { + "file": "productcategory\\service\\ProductCategoryService.java", + "line": 104, + "method": "update", + "signature": "public ProductCategoryItemVo update(Long id, ProductCategorySaveRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "productcategory" + }, + { + "file": "productcategory\\service\\ProductCategoryService.java", + "line": 120, + "method": "delete", + "signature": "public void delete(Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "productcategory" + }, + { + "file": "productrisk\\service\\ProductRiskResolveService.java", + "line": 111, + "method": "deleteCandidate", + "signature": "public void deleteCandidate(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "productrisk" + }, + { + "file": "productrisk\\service\\ProductRiskTaskService.java", + "line": 245, + "method": "deleteHistory", + "signature": "public void deleteHistory(Long resultId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 2, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "productrisk" + }, + { + "file": "productrisk\\service\\ProductRiskTaskService.java", + "line": 273, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "productrisk" + }, + { + "file": "queryasin\\service\\QueryAsinResolveService.java", + "line": 115, + "method": "deleteCandidate", + "signature": "public void deleteCandidate(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "queryasin" + }, + { + "file": "queryasin\\service\\QueryAsinTaskService.java", + "line": 467, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "queryasin" + }, + { + "file": "queryasin\\service\\QueryAsinTaskService.java", + "line": 483, + "method": "deleteHistory", + "signature": "public void deleteHistory(Long resultId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 2, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "queryasin" + }, + { + "file": "shopdatacrawl\\service\\ShopDataCrawlResolveService.java", + "line": 121, + "method": "deleteCandidate", + "signature": "public void deleteCandidate(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopdatacrawl" + }, + { + "file": "shopdatacrawl\\service\\ShopDataCrawlTaskService.java", + "line": 734, + "method": "deleteHistory", + "signature": "public void deleteHistory(Long resultId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "lock" + ], + "movable": [], + "counts": { + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopdatacrawl" + }, + { + "file": "shopdatacrawl\\service\\ShopDataCrawlTaskService.java", + "line": 760, + "method": "deleteAdminHistory", + "signature": "public void deleteAdminHistory(Long resultId", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopdatacrawl" + }, + { + "file": "shopkey\\service\\QueryAsinService.java", + "line": 214, + "method": "createOrUpdate", + "signature": "public QueryAsinItemVo createOrUpdate(QueryAsinCreateRequest request, Long operatorId, boolean super", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\QueryAsinService.java", + "line": 238, + "method": "deleteCountry", + "signature": "public void deleteCountry(Long id, String country, Long operatorId, boolean superAdmin", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\QueryAsinService.java", + "line": 250, + "method": "updateCountry", + "signature": "public QueryAsinItemVo updateCountry(Long id, String country, String asin, Long operatorId, boolean ", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopKeyService.java", + "line": 50, + "method": "create", + "signature": "public ShopKeyItemVo create(ShopKeyCreateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopKeyService.java", + "line": 67, + "method": "update", + "signature": "public ShopKeyItemVo update(Long id, ShopKeyUpdateRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopKeyService.java", + "line": 89, + "method": "delete", + "signature": "public void delete(Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopManageGroupService.java", + "line": 151, + "method": "delete", + "signature": "public void delete(Long id, Long operatorId, boolean superAdmin", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopManageService.java", + "line": 94, + "method": "create", + "signature": "public ShopManageItemVo create(ShopManageCreateRequest request, Long operatorId, boolean superAdmin", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopManageService.java", + "line": 116, + "method": "update", + "signature": "public ShopManageItemVo update(Long id, Long operatorId, boolean superAdmin, ShopManageUpdateRequest", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\ShopManageService.java", + "line": 139, + "method": "delete", + "signature": "public void delete(Long id, Long operatorId, boolean superAdmin", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\SkipPriceAsinService.java", + "line": 269, + "method": "create", + "signature": "public SkipPriceAsinItemVo create(SkipPriceAsinCreateRequest request, Long operatorId, boolean super", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\SkipPriceAsinService.java", + "line": 306, + "method": "deleteCountry", + "signature": "public void deleteCountry(Long id, String country, Long operatorId, boolean superAdmin", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\SkipPriceAsinService.java", + "line": 319, + "method": "updateCountry", + "signature": "public SkipPriceAsinItemVo updateCountry(Long id, String country, String asin, BigDecimal minimumPri", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopkey\\service\\SkipPriceAsinService.java", + "line": 1367, + "method": "removeByShopCountryAndAsin", + "signature": "public boolean removeByShopCountryAndAsin(String shopName, String country, String asin", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopkey" + }, + { + "file": "shopmatch\\service\\ShopMatchResolveService.java", + "line": 108, + "method": "deleteCandidate", + "signature": "public void deleteCandidate(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopmatch" + }, + { + "file": "shopmatch\\service\\ShopMatchTaskService.java", + "line": 279, + "method": "deleteHistory", + "signature": "public void deleteHistory(Long resultId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 2, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopmatch" + }, + { + "file": "shopmatch\\service\\ShopMatchTaskService.java", + "line": 303, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopmatch" + }, + { + "file": "shopmatch\\service\\ShopMatchTaskService.java", + "line": 555, + "method": "completeStage", + "signature": "public void completeStage(Long taskId, Long userId, ShopMatchStageCompleteRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "shopmatch" + }, + { + "file": "similarasin\\service\\SimilarAsinTaskService.java", + "line": 400, + "method": "addFilterCondition", + "signature": "public SimilarAsinFilterConditionVo addFilterCondition(SimilarAsinFilterConditionAddRequest request", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "similarasin" + }, + { + "file": "similarasin\\service\\SimilarAsinTaskService.java", + "line": 439, + "method": "deleteFilterCondition", + "signature": "public void deleteFilterCondition(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "similarasin" + }, + { + "file": "similarasin\\service\\SimilarAsinTaskService.java", + "line": 597, + "method": "activateTask", + "signature": "public void activateTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 1, + "lock": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "similarasin" + }, + { + "file": "similarasin\\service\\SimilarAsinTaskService.java", + "line": 2237, + "method": "handleResultFileJobFailure", + "signature": "public void handleResultFileJobFailure(TaskFileJobEntity job, String message", + "class_level": false, + "python_facing": true, + "must_stay": [ + "lock" + ], + "movable": [], + "counts": { + "lock": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "similarasin" + }, + { + "file": "task\\service\\TaskFileJobService.java", + "line": 217, + "method": "retry", + "signature": "public boolean retry(Long jobId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskFileJobService.java", + "line": 239, + "method": "resetStuckRunningJobs", + "signature": "public int resetStuckRunningJobs(int stuckMinutes, int limit", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskFileJobService.java", + "line": 461, + "method": "requeue", + "signature": "public boolean requeue(Long jobId, String message", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskFileJobService.java", + "line": 659, + "method": "deleteTaskJobs", + "signature": "public void deleteTaskJobs(Long taskId, String moduleType", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskFileJobService.java", + "line": 669, + "method": "deleteResultJobs", + "signature": "public void deleteResultJobs(Long taskId, String moduleType, Long resultId", + "class_level": false, + "python_facing": true, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskProgressSnapshotService.java", + "line": 33, + "method": "save", + "signature": "public void save(Long taskId, String moduleType, String status, int totalCount, int successCount, in", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskProgressSnapshotService.java", + "line": 149, + "method": "delete", + "signature": "public void delete(Long taskId, String moduleType", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskResultItemService.java", + "line": 97, + "method": "deleteResultItem", + "signature": "public void deleteResultItem(Long taskId, String moduleType, Long resultId", + "class_level": false, + "python_facing": true, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskResultItemService.java", + "line": 118, + "method": "deleteResultItemRowsOnly", + "signature": "public void deleteResultItemRowsOnly(Long taskId, String moduleType, Long resultId", + "class_level": false, + "python_facing": true, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskResultItemService.java", + "line": 129, + "method": "deleteTaskItems", + "signature": "public void deleteTaskItems(Long taskId, String moduleType", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskResultItemService.java", + "line": 148, + "method": "deleteTaskItemsRowsOnly", + "signature": "public void deleteTaskItemsRowsOnly(Long taskId, String moduleType", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskResultPayloadService.java", + "line": 92, + "method": "deleteLatest", + "signature": "public void deleteLatest(Long taskId, String moduleType, String scopeKey", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskScopePayloadStorageService.java", + "line": 175, + "method": "removeScopePayload", + "signature": "public void removeScopePayload(Long taskId, String moduleType, String scopeKey", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskScopePayloadStorageService.java", + "line": 218, + "method": "deleteTaskScopePayloads", + "signature": "public void deleteTaskScopePayloads(Long taskId, String moduleType", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskScopePayloadStorageService.java", + "line": 245, + "method": "deleteTaskScopePayloadRowsOnly", + "signature": "public void deleteTaskScopePayloadRowsOnly(Long taskId, String moduleType", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskScopePayloadStorageService.java", + "line": 255, + "method": "saveParsedPayloadMap", + "signature": "public void saveParsedPayloadMap(Long taskId, String moduleType, Map payloadByScope", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "task\\service\\TaskScopePayloadStorageService.java", + "line": 331, + "method": "recoverBufferedScopePayload", + "signature": "public boolean recoverBufferedScopePayload(Long taskId, String moduleType, String scopeHash", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "task" + }, + { + "file": "withdraw\\service\\WithdrawResolveService.java", + "line": 84, + "method": "deleteCandidate", + "signature": "public void deleteCandidate(Long userId, Long id", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "withdraw" + }, + { + "file": "withdraw\\service\\WithdrawResolveService.java", + "line": 97, + "method": "deleteCandidatesByShopNames", + "signature": "public void deleteCandidatesByShopNames(Long userId, List shopNames", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "withdraw" + }, + { + "file": "withdraw\\service\\WithdrawTaskService.java", + "line": 352, + "method": "deleteTask", + "signature": "public void deleteTask(Long taskId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 1, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "withdraw" + }, + { + "file": "withdraw\\service\\WithdrawTaskService.java", + "line": 371, + "method": "deleteHistory", + "signature": "public void deleteHistory(Long resultId, Long userId", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write", + "lock" + ], + "movable": [], + "counts": { + "write": 2, + "lock": 2, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "withdraw" + }, + { + "file": "ziniao\\memory\\service\\ZiniaoMemoryStoreService.java", + "line": 168, + "method": "deleteByType", + "signature": "public int deleteByType(String cacheType, int limit", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "ziniao" + }, + { + "file": "ziniao\\memory\\service\\ZiniaoMemoryStoreService.java", + "line": 215, + "method": "touchExpiryBatch", + "signature": "public void touchExpiryBatch(List rows, Duration ttl", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "ziniao" + }, + { + "file": "ziniao\\memory\\service\\ZiniaoMemoryStoreService.java", + "line": 235, + "method": "deleteAllByType", + "signature": "public int deleteAllByType(String cacheType", + "class_level": false, + "python_facing": false, + "must_stay": [], + "movable": [], + "counts": { + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "ziniao" + }, + { + "file": "ziniao\\memory\\service\\ZiniaoMemoryStoreService.java", + "line": 242, + "method": "deleteExpired", + "signature": "public int deleteExpired(int limit", + "class_level": false, + "python_facing": false, + "must_stay": [ + "write" + ], + "movable": [], + "counts": { + "write": 1, + "compute": 0, + "assembly": 0, + "cleanup": 0, + "log": 0 + }, + "priority": 0, + "module": "ziniao" + } + ] +} \ No newline at end of file