job51-gitlab-cr-node-jt-1 2.5.5 → 2.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/index.js +2 -2
  2. package/package.json +1 -1
  3. package/diff +0 -636
  4. package/log.txt +0 -1817
package/index.js CHANGED
@@ -81,7 +81,7 @@ class GitLabCodeReviewer {
81
81
  debugLog(`========== Diff Block ${blockIndex} 开始 ==========`);
82
82
  debugLog(`文件路径:${diffObject.new_path || diffObject.old_path}`);
83
83
  debugLog(`line_info: old_start=${diffObject.line_info?.old_start}, old_count=${diffObject.line_info?.old_count}, new_start=${diffObject.line_info?.new_start}, new_count=${diffObject.line_info?.new_count}`);
84
- debugLog(`diff 内容:${diffObject.diff}`);
84
+ debugLog(`diff 内容预览(前 500 字符):${diffObject.diff?.substring(0, 500)}`);
85
85
  debugLog(`========== Diff Block ${blockIndex} 结束 ==========`);
86
86
 
87
87
  // 构造包含元数据的 diff 内容
@@ -210,7 +210,7 @@ ${diffObject.diff}`;
210
210
 
211
211
  // 打印报告内容前 500 字符(避免过长)
212
212
  const reportPreview = claudeResult?.length > 500 ? claudeResult.substring(0, 500) + '...' : claudeResult;
213
- debugLog(`AI 审核报告内容预览:${claudeResult}`);
213
+ debugLog(`AI 审核报告内容预览:${reportPreview}`);
214
214
 
215
215
  // 使用正则提取 LINE_INFO 内容(支持换行)
216
216
  const lineInfoMatch = claudeResult?.match(/<LINE_INFO>\s*\[([^\]]*)\]\s*<\/LINE_INFO>/);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job51-gitlab-cr-node-jt-1",
3
- "version": "2.5.5",
3
+ "version": "2.5.6",
4
4
  "description": "GitLab merge request code review tool with AI-powered analysis and project context support",
5
5
  "main": "index.js",
6
6
  "bin": {
package/diff DELETED
@@ -1,636 +0,0 @@
1
- diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
2
- index e3829e9ad..92d19ba89 100644
3
- --- a/.gitlab-ci.yml
4
- +++ b/.gitlab-ci.yml
5
- @@ -1,4 +1,30 @@
6
- -include:
7
- - - project: 'linton.cao/ai-public-templates'
8
- - file: '/code-review/gitlab-ci.yml'
9
- - ref: main
10
-
11
- +stages:
12
- + - ai
13
- +ai:
14
- + stage: ai
15
- + # 调整规则以适应您想要触发作业的方式:
16
- + # - 手动运行
17
- + # - 合并请求事件
18
- + # - 当评论包含 '@claude' 时的 web/API 触发
19
- + rules:
20
- + - if: '$CI_PIPELINE_SOURCE == "web"'
21
- + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
22
- + variables:
23
- + GIT_STRATEGY: fetch
24
- + script:
25
- + - echo "Running AI code review for merge request $CI_MERGE_REQUEST_IID"
26
- + - echo "Project ID $CI_PROJECT_ID"
27
- + - echo "MR IID $CI_MERGE_REQUEST_IID"
28
- + - echo "API URL $CI_API_V4_URL"
29
- + # 构建 API URL
30
- + - API_URL="$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/changes"
31
- + - >
32
- + curl --header "PRIVATE-TOKEN: glpat-gYMwUhqyCcH8UUZ8xykA"
33
- + "$API_URL" > mr_changes.json
34
- + - cat mr_changes.json
35
- + - >
36
- + claude
37
- + -p "请分析以下合并请求的代码变更并提供代码审查反馈。特别关注潜在的错误、代码质量、最佳实践和安全问题。变更详情: $(cat mr_changes.json)"
38
- + --permission-mode acceptEdits
39
- + --allowedTools "Bash(*) Read(*) Edit(*) Write(*) mcp__gitlab"
40
- + --debug
41
-
42
- diff --git a/51job-dev-boot-bbs/pom.xml b/51job-dev-boot-bbs/pom.xml
43
- index c63beac38..6be1ef1e0 100644
44
- --- a/51job-dev-boot-bbs/pom.xml
45
- +++ b/51job-dev-boot-bbs/pom.xml
46
- @@ -103,7 +103,7 @@
47
- <dependency>
48
- <groupId>org.jsoup</groupId>
49
- <artifactId>jsoup</artifactId>
50
- - <version>1.14.6</version>
51
- + <version>1.14.3</version>
52
- </dependency>
53
-
54
- <!-- 引入es -->
55
- diff --git a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/client/feign/UserTaskClient.java b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/client/feign/UserTaskClient.java
56
- deleted file mode 100644
57
- index ced593c06..000000000
58
- --- a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/client/feign/UserTaskClient.java
59
- +++ /dev/null
60
- @@ -1,49 +0,0 @@
61
- -package com.job51.dev.bbs.client.feign;
62
- -
63
- -import com.job51.dev.bbs.entity.dto.UserTaskPop;
64
- -import com.job51.dev.common.entity.dto.Result;
65
- -import org.springframework.cloud.openfeign.FeignClient;
66
- -import org.springframework.web.bind.annotation.GetMapping;
67
- -import org.springframework.web.bind.annotation.PathVariable;
68
- -import org.springframework.web.bind.annotation.PostMapping;
69
- -import org.springframework.web.bind.annotation.RequestBody;
70
- -import org.springframework.web.bind.annotation.RequestParam;
71
- -
72
- -import java.util.List;
73
- -
74
- -/**
75
- - * 用户任务API
76
- - */
77
- -@FeignClient(value = "51job-user-task-v1", contextId = "51job-user-task")
78
- -public interface UserTaskClient {
79
- -
80
- - /**
81
- - * 获取用户是否展示任务模块
82
- - *
83
- - * @param accountId 用户id
84
- - * @return 是否展示:true-展示,false-不展示,默认false
85
- - */
86
- - @GetMapping("/inner/user-task" + "/user-task/module-control/{accountId}")
87
- - Result<Boolean> userTaskModuleControl(@PathVariable Long accountId);
88
- -
89
- -
90
- - /**
91
- - * 获取第一个 未完成的 有弹窗的 任务信息
92
- - *
93
- - * @param accountId 用户id
94
- - * @return 用户弹窗信息
95
- - */
96
- - @GetMapping("/inner/user-task" + "/user-task/pop/{accountId}")
97
- - Result<UserTaskPop> getUserTaskPop(@PathVariable Long accountId);
98
- -
99
- - /**
100
- - * 判断当前用户是否为对应任务目标人群
101
- - *
102
- - * @param accountId 用户id
103
- - * @param actionType 任务类型
104
- - * @return Boolean
105
- - */
106
- - @GetMapping("/inner/user-task" + "/user-task/target-people")
107
- - Result<Boolean> isTargetPeople(@RequestParam Long accountId, @RequestParam String actionType);
108
- -
109
- -}
110
-
111
- diff --git a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/controller/TestMultiIssuesController.java b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/controller/TestMultiIssuesController.java
112
- deleted file mode 100644
113
- index 9b31b0d75..000000000
114
- --- a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/controller/TestMultiIssuesController.java
115
- +++ /dev/null
116
- @@ -1,72 +0,0 @@
117
- -package com.job51.dev.bbs.controller;
118
- -
119
- -import com.job51.dev.bbs.service.ForumService;
120
- -import com.job51.dev.bbs.service.PostService;
121
- -import com.job51.dev.bbs.service.UserService;
122
- -import org.springframework.beans.factory.annotation.Autowired;
123
- -import org.springframework.web.bind.annotation.*;
124
- -
125
- -/**
126
- - * 测试多问题 diff 场景的 Controller
127
- - * 用于测试 AI 代码审查在同一个 diff 块中检测多个问题的场景
128
- - */
129
- -@RestController
130
- -@RequestMapping("/api/test")
131
- -public class TestMultiIssuesController {
132
- -
133
- - @Autowired
134
- - private ForumService forumService;
135
- -
136
- - @Autowired
137
- - private PostService postService;
138
- -
139
- - @Autowired
140
- - private UserService userService;
141
- -
142
- - /**
143
- - * 测试接口 - 包含多个空指针风险问题
144
- - * 这些问题都在同一个 diff 块中,用于测试多问题评论发布
145
- - */
146
- - @GetMapping("/forum/data")
147
- - public Object getForumData(@RequestParam String forumId,
148
- - @RequestParam String userId,
149
- - @RequestParam String postId) {
150
- - // 问题 1: forumService 可能为 null(未判空)
151
- - Object forumInfo = forumService.getForumInfo(forumId);
152
- -
153
- - // 问题 2: postService 可能为 null(未判空)
154
- - Object postDetail = postService.getPostDetail(postId);
155
- -
156
- - // 问题 3: userService 可能为 null(未判空)
157
- - Object userInfo = userService.getUserInfo(userId);
158
- -
159
- - // 问题 4: 链式调用未判空 - forumInfo 可能为 null
160
- - String forumName = forumInfo.toString();
161
- -
162
- - // 问题 5: 链式调用未判空 - postDetail 可能为 null
163
- - Integer postCount = postDetail.hashCode();
164
- -
165
- - return new Object() {
166
- - public String forumName = forumName;
167
- - public Integer postCount = postCount;
168
- - public Object userInfo = userInfo;
169
- - };
170
- - }
171
- -
172
- - /**
173
- - * 另一个测试接口 - 更多空指针场景
174
- - */
175
- - @PostMapping("/post/create")
176
- - public Object createPost(@RequestBody Object postData) {
177
- - // 问题 6: postData 未判空
178
- - String title = postData.toString();
179
- -
180
- - // 问题 7: forumService 可能为 null
181
- - Object result = forumService.createPost(title);
182
- -
183
- - // 问题 8: result 可能为 null
184
- - Boolean success = result.equals(true);
185
- -
186
- - return success;
187
- - }
188
- -}
189
- diff --git a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/controller/open/UserController.java b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/controller/open/UserController.java
190
- index b3b20455c..b1d8c318c 100644
191
- --- a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/controller/open/UserController.java
192
- +++ b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/controller/open/UserController.java
193
- @@ -2,11 +2,7 @@ package com.job51.dev.bbs.controller.open;
194
-
195
- import com.job51.dev.bbs.entity.Base64DecodeMultipartFile;
196
- import com.job51.dev.bbs.entity.dto.UserDTO;
197
- -import com.job51.dev.bbs.entity.query.*;
198
- -import com.job51.dev.bbs.entity.vo.PagesListVO;
199
- -import com.job51.dev.bbs.entity.vo.UserDetailInfoVO;
200
- -import com.job51.dev.bbs.entity.vo.UserInfoVO;
201
- -import com.job51.dev.bbs.entity.vo.VestUserVO;
202
- +import com.job51.dev.bbs.entity.query.UserQuery;
203
- import com.job51.dev.bbs.entity.vo.UserVO;
204
- import com.job51.dev.bbs.enums.DefaultAvatarEnum;
205
- import com.job51.dev.bbs.exception.BbsBusinessException;
206
- @@ -46,7 +42,6 @@ import static com.job51.dev.bbs.constant.BbsConstant.*;
207
- public class UserController {
208
- private static final String API_PREFIX = "/open/bbs/users";
209
- private static final String API_NOAUTH_PREFIX = "/open/noauth/bbs/users";
210
- - private static final String ADMIN_API_PREFIX = "/admin/bbs/users";
211
-
212
- @Resource
213
- private WordFilterUtils wordFilterUtils;
214
- @@ -202,161 +197,6 @@ public class UserController {
215
- }
216
- }
217
-
218
- - /**
219
- - * 网关登录
220
- - * @param loginQuery 登录参数
221
- - * @return 用户信息
222
- - */
223
- - @PostMapping(API_NOAUTH_PREFIX + "/login")
224
- - public Result<UserDTO> login(@RequestBody LoginQuery loginQuery) {
225
- - return Result.success(userService.login(loginQuery));
226
- - }
227
- -
228
- - /**
229
- - * 根据用户 ID 获取用户信息
230
- - * @param userId 用户 id
231
- - * @return 用户信息
232
- - */
233
- - @GetMapping(API_NOAUTH_PREFIX + "/{userId}/info")
234
- - public Result<UserDTO> getUserInfo(@PathVariable Long userId) {
235
- - return Result.success(userService.getUserInfo(userId));
236
- - }
237
- -
238
- - /**
239
- - * 上传头像,并返回头像的访问链接
240
- - * @param image 头像
241
- - * @return 头像的访问链接
242
- - */
243
- - @PostMapping(value = API_PREFIX + "/avatar/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
244
- - public Result<String> uploadAvatar(@RequestPart("image") MultipartFile image) {
245
- - return Result.success(userService.uploadAvatar(image));
246
- - }
247
- -
248
- - /**
249
- - * 同步用户简历信息
250
- - * @param userId 用户 id
251
- - * @return 用户信息
252
- - */
253
- - @PostMapping(API_PREFIX + "/sync/{userId}")
254
- - public Result<UserDTO> syncUserInfo(@PathVariable Long userId) {
255
- - return Result.success(userService.syncUserInfo(userId));
256
- - }
257
- -
258
- - /**
259
- - * 注销 bbs 账号
260
- - * @param foreignId 其他系统的用户 id
261
- - * @param fromDomain 来源
262
- - * @return 是否成功
263
- - */
264
- - @PostMapping(API_PREFIX + "/logoff")
265
- - public Result<Boolean> logoff(@RequestParam Long foreignId, @RequestParam String fromDomain) {
266
- - return Result.success(userService.logoff(foreignId, fromDomain));
267
- - }
268
- -
269
- - /**
270
- - * 用户信息全量导入 redis
271
- - * @return 结果
272
- - */
273
- - @PostMapping(ADMIN_API_PREFIX + "/redis/push")
274
- - public Result<String> pushAllInfoToRedis() {
275
- - return Result.success(userService.pushAllInfoToRedis());
276
- - }
277
- -
278
- - /**
279
- - * 用户信息增量导入 redis
280
- - * @return 结果
281
- - */
282
- - @PostMapping(ADMIN_API_PREFIX + "/redis/increment")
283
- - public Result<String> incrementPushInfoToRedis() {
284
- - return Result.success(userService.incrementPushInfoToRedis());
285
- - }
286
- -
287
- - // ==================== 后台管理接口 ====================
288
- -
289
- - /**
290
- - * 创建马甲号
291
- - * @param query 入参
292
- - * @param adminId 管理员 ID
293
- - * @return 是否成功
294
- - */
295
- - @PostMapping(ADMIN_API_PREFIX + "/vest")
296
- - public Result<Boolean> addVest(@RequestBody VestAddQuery query, @RequestParam String adminId) {
297
- - return Result.success(userService.addVest(query, adminId));
298
- - }
299
- -
300
- - /**
301
- - * 马甲号列表
302
- - * @param query 查询参数
303
- - * @return 马甲号列表
304
- - */
305
- - @GetMapping(ADMIN_API_PREFIX + "/vest")
306
- - public Result<PagesListVO<VestUserVO>> indexVest(VestUserQuery query) {
307
- - return Result.success(userService.indexVest(query));
308
- - }
309
- -
310
- - /**
311
- - * 马甲号详情
312
- - * @param id 马甲号 ID
313
- - * @return 马甲号详情
314
- - */
315
- - @GetMapping(ADMIN_API_PREFIX + "/vest/{id}")
316
- - public Result<VestUserVO> showVest(@PathVariable Long id) {
317
- - return Result.success(userService.showVest(id));
318
- - }
319
- -
320
- - /**
321
- - * 编辑马甲号
322
- - * @param query 入参
323
- - * @param adminId 管理员 ID
324
- - * @return 是否成功
325
- - */
326
- - @PutMapping(ADMIN_API_PREFIX + "/vest")
327
- - public Result<Boolean> editVest(@RequestBody VestEditQuery query, @RequestParam String adminId) {
328
- - return Result.success(userService.editVest(query, adminId));
329
- - }
330
- -
331
- - /**
332
- - * 用户管理列表
333
- - * @param query 查询参数
334
- - * @return 用户列表
335
- - */
336
- - @GetMapping(ADMIN_API_PREFIX)
337
- - public Result<PagesListVO<UserInfoVO>> indexUser(UserInfoQuery query) {
338
- - return Result.success(userService.indexUser(query));
339
- - }
340
- -
341
- - /**
342
- - * 后台 - 用户详情
343
- - * @param id 用户 ID
344
- - * @return 用户详情
345
- - */
346
- - @GetMapping(ADMIN_API_PREFIX + "/{id}")
347
- - public Result<UserDetailInfoVO> show(@PathVariable Long id) {
348
- - return Result.success(userService.show(id));
349
- - }
350
- -
351
- - /**
352
- - * 内部调用,查询用户详情
353
- - * @param foreignId bbs 外部 id
354
- - * @param fromDomain 来源
355
- - * @return 用户详情
356
- - */
357
- - @GetMapping(ADMIN_API_PREFIX + "/detail")
358
- - public Result<UserDTO> show(@RequestParam String foreignId, @RequestParam String fromDomain) {
359
- - return Result.success(userService.show(foreignId, fromDomain));
360
- - }
361
- -
362
- - /**
363
- - * 用户封禁
364
- - * @param adminId 管理员邮箱
365
- - * @param query 入参
366
- - * @return 是否成功
367
- - */
368
- - @PostMapping(ADMIN_API_PREFIX + "/ban")
369
- - public Result<Boolean> banUser(@RequestParam String adminId, @RequestBody BanUserQuery query) {
370
- - return Result.success(userService.banUser(adminId, query));
371
- - }
372
- -
373
- private Boolean isDefaultNickname(String nickname, Integer foreignType) {
374
- String regex;
375
- if (FOREIGN_TYPE_YJS.contains(foreignType)) {
376
- diff --git a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/entity/dto/UserTaskPop.java b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/entity/dto/UserTaskPop.java
377
- deleted file mode 100644
378
- index 0884e34f8..000000000
379
- --- a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/entity/dto/UserTaskPop.java
380
- +++ /dev/null
381
- @@ -1,48 +0,0 @@
382
- -package com.job51.dev.bbs.entity.dto;
383
- -
384
- -import lombok.AllArgsConstructor;
385
- -import lombok.Builder;
386
- -import lombok.Data;
387
- -import lombok.NoArgsConstructor;
388
- -
389
- -import java.io.Serializable;
390
- -
391
- -/**
392
- - * @author jingtao
393
- - * @version V1.0
394
- - * @date 2026/3/25
395
- - **/
396
- -@Data
397
- -@Builder
398
- -@NoArgsConstructor
399
- -@AllArgsConstructor
400
- -public class UserTaskPop implements Serializable {
401
- - /**
402
- - * 任务ID
403
- - */
404
- - private Long taskId;
405
- - /**
406
- - * 任务动作类型
407
- - */
408
- - private String actionType;
409
- - /**
410
- - * 任务code
411
- - *
412
- - * @link com.job51.boot.user.task.biz.model.vo.UserTaskVO#code
413
- - */
414
- - private String contentId;
415
- - /**
416
- - * 任务名
417
- - *
418
- - * @link com.job51.boot.user.task.biz.model.vo.UserTaskVO#name
419
- - */
420
- - private String popupContent;
421
- - /**
422
- - * 跳转连接
423
- - */
424
- - private String jumpUrl;
425
- - /**
426
- - * (弹窗)图片连接
427
- - */
428
- - private String imgUrl;
429
- -}
430
-
431
- diff --git a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/sdk/UserTaskSDK.java b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/sdk/UserTaskSDK.java
432
- deleted file mode 100644
433
- index 731ba220a..000000000
434
- --- a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/sdk/UserTaskSDK.java
435
- +++ /dev/null
436
- @@ -1,29 +0,0 @@
437
- -package com.job51.dev.bbs.sdk;
438
- -
439
- -import com.job51.dev.bbs.client.feign.UserTaskClient;
440
- -import com.job51.dev.bbs.entity.dto.UserTaskPop;
441
- -import com.job51.dev.common.entity.dto.Result;
442
- -import org.springframework.stereotype.Component;
443
- -
444
- -import javax.annotation.Resource;
445
- -
446
- -/**
447
- - * @author jingtao
448
- - * @version V1.0
449
- - * @date 2026/3/25
450
- - **/
451
- -@Component
452
- -public class UserTaskSDK {
453
- -
454
- -
455
- - @Resource
456
- - private UserTaskClient userTaskClient;
457
- -
458
- - public UserTaskPop userTaskModuleControl(Long accountId) {
459
- - Result<UserTaskPop> userTaskPop = userTaskClient.getUserTaskPop(accountId);
460
- - if (userTaskPop.requestSucceeded() && userTaskPop.getResultbody() != null) {
461
- - return userTaskPop.getResultbody();
462
- - }
463
- - return null;
464
- - }
465
- -}
466
-
467
- diff --git a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/service/impl/ForumCategoryForumServiceImpl.java b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/service/impl/ForumCategoryForumServiceImpl.java
468
- index a4ac26619..e64cd4e8d 100644
469
- --- a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/service/impl/ForumCategoryForumServiceImpl.java
470
- +++ b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/service/impl/ForumCategoryForumServiceImpl.java
471
- @@ -4,11 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
472
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
473
- import com.job51.dev.bbs.entity.bo.ForumCategory;
474
- import com.job51.dev.bbs.entity.bo.ForumCategoryForum;
475
- -import com.job51.dev.bbs.entity.dto.UserTaskPop;
476
- import com.job51.dev.bbs.mapper.ForumCategoryForumMapper;
477
- -import com.job51.dev.bbs.sdk.UserTaskSDK;
478
- import com.job51.dev.bbs.service.IForumCategoryForumService;
479
- -import lombok.extern.slf4j.Slf4j;
480
- import org.springframework.stereotype.Service;
481
- import org.springframework.util.CollectionUtils;
482
-
483
- @@ -19,16 +16,12 @@ import java.util.List;
484
- * @author pengtao.lv
485
- * @since 2022/11/23
486
- */
487
- -@Slf4j
488
- @Service
489
- public class ForumCategoryForumServiceImpl extends ServiceImpl<ForumCategoryForumMapper, ForumCategoryForum>
490
- implements IForumCategoryForumService {
491
- @Resource
492
- private ForumCategoryForumMapper forumCategoryForumMapper;
493
-
494
- - @Resource
495
- - private UserTaskSDK userTaskSDK;
496
- -
497
- @Override
498
- public List<ForumCategory> getForumCategoryListByForumId(Long forumId) {
499
- return forumCategoryForumMapper.getForumCategoryListByForumId(forumId);
500
- @@ -36,10 +29,6 @@ public class ForumCategoryForumServiceImpl extends ServiceImpl<ForumCategoryForu
501
-
502
- @Override
503
- public Long getNewForumCategoryByForumId(Long forumId) {
504
- - UserTaskPop userTaskPop = userTaskSDK.userTaskModuleControl(forumId);
505
- - if (userTaskPop != null && userTaskPop.getContentId() != null){
506
- - return Long.parseLong(userTaskPop.getContentId());
507
- - }
508
- LambdaQueryWrapper<ForumCategoryForum> queryWrapper = new LambdaQueryWrapper<>();
509
- queryWrapper.select(ForumCategoryForum::getForumCategoryId);
510
- queryWrapper.eq(ForumCategoryForum::getForumId, forumId);
511
- diff --git a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/service/impl/TestMultiIssuesService.java b/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/service/impl/TestMultiIssuesService.java
512
- deleted file mode 100644
513
- index 2d5b09bfb..000000000
514
- --- a/51job-dev-boot-bbs/src/main/java/com/job51/dev/bbs/service/impl/TestMultiIssuesService.java
515
- +++ /dev/null
516
- @@ -1,75 +0,0 @@
517
- -package com.job51.dev.bbs.service.impl;
518
- -
519
- -import com.job51.dev.bbs.mapper.ForumMapper;
520
- -import com.job51.dev.bbs.mapper.PostMapper;
521
- -import com.job51.dev.bbs.mapper.UserMapper;
522
- -import org.springframework.beans.factory.annotation.Autowired;
523
- -import org.springframework.stereotype.Service;
524
- -
525
- -import java.util.List;
526
- -import java.util.Map;
527
- -
528
- -/**
529
- - * 测试多问题 diff 场景的 Service
530
- - * 用于测试 AI 代码审查在同一个 diff 块中检测多个问题的场景
531
- - */
532
- -@Service
533
- -public class TestMultiIssuesService {
534
- -
535
- - @Autowired
536
- - private ForumMapper forumMapper;
537
- -
538
- - @Autowired
539
- - private PostMapper postMapper;
540
- -
541
- - @Autowired
542
- - private UserMapper userMapper;
543
- -
544
- - /**
545
- - * 测试方法 - 包含多个空指针风险问题
546
- - */
547
- - public Map<String, Object> getTestData(String forumId, String userId) {
548
- - // 问题 1: forumMapper 可能为 null
549
- - Object forum = forumMapper.selectById(forumId);
550
- -
551
- - // 问题 2: 链式调用 - forum 可能为 null
552
- - String forumName = forum.toString();
553
- -
554
- - // 问题 3: userMapper 可能为 null
555
- - Object user = userMapper.selectById(userId);
556
- -
557
- - // 问题 4: 链式调用 - user 可能为 null
558
- - String userName = user.toString();
559
- -
560
- - // 问题 5: postMapper 可能为 null
561
- - List<Object> posts = postMapper.selectByForumId(forumId);
562
- -
563
- - // 问题 6: 集合未判空直接访问
564
- - Object firstPost = posts.get(0);
565
- -
566
- - return new java.util.HashMap<String, Object>() {{
567
- - put("forumName", forumName);
568
- - put("userName", userName);
569
- - put("firstPost", firstPost);
570
- - }};
571
- - }
572
- -
573
- - /**
574
- - * 测试方法 2 - 更多空指针场景
575
- - */
576
- - public Object processData(Object inputData) {
577
- - // 问题 7: inputData 未判空
578
- - String dataStr = inputData.toString();
579
- -
580
- - // 问题 8: 链式调用未判空
581
- - Integer dataLen = dataStr.length();
582
- -
583
- - // 问题 9: forumMapper 可能为 null
584
- - Integer count = forumMapper.countAll();
585
- -
586
- - // 问题 10: 自动拆箱可能 NPE
587
- - boolean isPositive = count > 0;
588
- -
589
- - return isPositive ? dataLen : -1;
590
- - }
591
- -}
592
- diff --git a/51job-dev-boot-subscribe/src/main/java/com/job51/dev/subscribe/service/impl/UserSubscribeInfoServiceImpl.java b/51job-dev-boot-subscribe/src/main/java/com/job51/dev/subscribe/service/impl/UserSubscribeInfoServiceImpl.java
593
- index b68722c12..99c04c5f0 100644
594
- --- a/51job-dev-boot-subscribe/src/main/java/com/job51/dev/subscribe/service/impl/UserSubscribeInfoServiceImpl.java
595
- +++ b/51job-dev-boot-subscribe/src/main/java/com/job51/dev/subscribe/service/impl/UserSubscribeInfoServiceImpl.java
596
- @@ -167,6 +167,7 @@ public class UserSubscribeInfoServiceImpl extends ServiceImpl<UserSubscribeInfoM
597
- List<UserSubscribeInfo> addList = new ArrayList<>();
598
-
599
- for (SubjectSubscribeAddQuery item : query.getItems()) {
600
- + UserSubscribeInfo subscribeInfo = new UserSubscribeInfo();
601
-
602
- //验证一遍专区id
603
- List<ActivityZoneDTO> activityZoneList = activityZoneService.getActivityZoneDataByIdList(Collections.singletonList(item.getSubjectId()));
604
- @@ -186,7 +187,7 @@ public class UserSubscribeInfoServiceImpl extends ServiceImpl<UserSubscribeInfoM
605
- continue;
606
- }
607
-
608
- - UserSubscribeInfo subscribeInfo = new UserSubscribeInfo();
609
- +
610
- subscribeInfo.setAccountId(accountId);
611
- subscribeInfo.setSubscribeType(SubscribeEnum.SUBJECT_SUBSCRIBE.getSubscribeType());
612
- subscribeInfo.setSubjectId(item.getSubjectId());
613
- (END)
614
- //验证一遍专区id
615
- List<ActivityZoneDTO> activityZoneList = activityZoneService.getActivityZoneDataByIdList(Collections.singletonList(item.getSubjectId()));
616
- @@ -186,7 +187,7 @@ public class UserSubscribeInfoServiceImpl extends ServiceImpl<UserSubscribeInfoM
617
- continue;
618
- }
619
-
620
- - UserSubscribeInfo subscribeInfo = new UserSubscribeInfo();
621
- +
622
- subscribeInfo.setAccountId(accountId);
623
- subscribeInfo.setSubscribeType(SubscribeEnum.SUBJECT_SUBSCRIBE.getSubscribeType());
624
- subscribeInfo.setSubjectId(item.getSubjectId());
625
- (END)
626
- //验证一遍专区id
627
- List<ActivityZoneDTO> activityZoneList = activityZoneService.getActivityZoneDataByIdList(Collections.singletonList(item.getSubjectId()));
628
- @@ -186,7 +187,7 @@ public class UserSubscribeInfoServiceImpl extends ServiceImpl<UserSubscribeInfoM
629
- continue;
630
- }
631
-
632
- - UserSubscribeInfo subscribeInfo = new UserSubscribeInfo();
633
- +
634
- subscribeInfo.setAccountId(accountId);
635
- subscribeInfo.setSubscribeType(SubscribeEnum.SUBJECT_SUBSCRIBE.getSubscribeType());
636
- subscribeInfo.setSubjectId(item.getSubjectId());