Pārlūkot izejas kodu

增加与ai大模型对话

wwh 2 nedēļas atpakaļ
vecāks
revīzija
56fc35c1cc

+ 21 - 1
huimv-employment/fe-api/src/main/java/com/huimv/employment/controller/mp/ConversationController.java

@@ -15,6 +15,8 @@ import com.huimv.employment.service.conversation.dto.ConversationMessagePageResp
15 15
 import com.huimv.employment.service.conversation.dto.ConversationSummaryResponse;
16 16
 import com.huimv.employment.service.draft.DraftService;
17 17
 import com.huimv.employment.service.draft.dto.McpDraftCalculateResponse;
18
+import com.huimv.employment.service.registration.RegistrationBatchService;
19
+import com.huimv.employment.service.registration.dto.RegistrationBatchDetailResponse;
18 20
 import io.swagger.v3.oas.annotations.Operation;
19 21
 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
20 22
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -57,15 +59,18 @@ public class ConversationController {
57 59
     private final ConversationChatService conversationChatService;
58 60
     private final ConversationMessageService conversationMessageService;
59 61
     private final DraftService draftService;
62
+    private final RegistrationBatchService registrationBatchService;
60 63
 
61 64
     public ConversationController(ConversationService conversationService,
62 65
                                   ConversationChatService conversationChatService,
63 66
                                   ConversationMessageService conversationMessageService,
64
-                                  DraftService draftService) {
67
+                                  DraftService draftService,
68
+                                  RegistrationBatchService registrationBatchService) {
65 69
         this.conversationService = conversationService;
66 70
         this.conversationChatService = conversationChatService;
67 71
         this.conversationMessageService = conversationMessageService;
68 72
         this.draftService = draftService;
73
+        this.registrationBatchService = registrationBatchService;
69 74
     }
70 75
 
71 76
     /**
@@ -126,6 +131,21 @@ public class ConversationController {
126 131
                 loginUser.getUserId(), conversationId));
127 132
     }
128 133
 
134
+    /**
135
+     * 查询指定会话下全部草稿的登记进度。
136
+     */
137
+    @GetMapping("/{id}/drafts/registration-progress")
138
+    @Operation(summary = "按会话查询全部草稿登记进度",
139
+            description = "返回该会话下已确认方案并建有登记批次的草稿进度列表;"
140
+                    + "每个元素结构与 GET /api/v1/mp/registration-batches?draft_id= 一致。"
141
+                    + "尚未确认方案、无批次的草稿自动跳过。仅可查询本企业用户自己的会话。")
142
+    public R<List<RegistrationBatchDetailResponse>> listDraftRegistrationProgress(
143
+            @PathVariable("id") Long conversationId) {
144
+        LoginUser loginUser = requireEnterprise();
145
+        return R.ok(registrationBatchService.listDetailsByConversation(
146
+                loginUser.getUserId(), conversationId));
147
+    }
148
+
129 149
     /**
130 150
      * 在已有会话内发起 AI 对话(SSE 流式,流结束后落库)。
131 151
      */

+ 34 - 0
huimv-employment/fe-service/src/main/java/com/huimv/employment/service/registration/RegistrationBatchService.java

@@ -17,6 +17,7 @@ import com.huimv.employment.dao.mapper.FeWorkerRegistrationMapper;
17 17
 import com.huimv.employment.dao.mapper.FeWorkflowDefinitionMapper;
18 18
 import com.huimv.employment.dao.mapper.FeWorkflowStepMapper;
19 19
 import com.huimv.employment.service.config.RegistrationQrProperties;
20
+import com.huimv.employment.service.conversation.ConversationService;
20 21
 import com.huimv.employment.service.enterprise.EnterpriseService;
21 22
 import com.huimv.employment.service.registration.dto.RegistrationBatchDetailResponse;
22 23
 import com.huimv.employment.service.registration.dto.RegistrationBatchProgressResponse;
@@ -76,6 +77,7 @@ public class RegistrationBatchService {
76 77
     private final FeWorkflowDefinitionMapper feWorkflowDefinitionMapper;
77 78
     private final FeWorkflowStepMapper feWorkflowStepMapper;
78 79
     private final EnterpriseService enterpriseService;
80
+    private final ConversationService conversationService;
79 81
     private final WeChatMiniAppService weChatMiniAppService;
80 82
     private final RegistrationQrProperties qrProperties;
81 83
 
@@ -86,6 +88,7 @@ public class RegistrationBatchService {
86 88
                                     FeWorkflowDefinitionMapper feWorkflowDefinitionMapper,
87 89
                                     FeWorkflowStepMapper feWorkflowStepMapper,
88 90
                                     EnterpriseService enterpriseService,
91
+                                    ConversationService conversationService,
89 92
                                     WeChatMiniAppService weChatMiniAppService,
90 93
                                     RegistrationQrProperties qrProperties) {
91 94
         this.feRegistrationBatchMapper = feRegistrationBatchMapper;
@@ -95,6 +98,7 @@ public class RegistrationBatchService {
95 98
         this.feWorkflowDefinitionMapper = feWorkflowDefinitionMapper;
96 99
         this.feWorkflowStepMapper = feWorkflowStepMapper;
97 100
         this.enterpriseService = enterpriseService;
101
+        this.conversationService = conversationService;
98 102
         this.weChatMiniAppService = weChatMiniAppService;
99 103
         this.qrProperties = qrProperties;
100 104
     }
@@ -180,6 +184,35 @@ public class RegistrationBatchService {
180 184
         return toDetailResponse(batch, order, draft);
181 185
     }
182 186
 
187
+    /**
188
+     * 按会话查询其下全部草稿的登记进度详情。
189
+     * <p>元素结构与 {@link #getDetailByDraftId} 相同;尚未确认方案、无批次的草稿跳过。</p>
190
+     */
191
+    public List<RegistrationBatchDetailResponse> listDetailsByConversation(Long userId, Long conversationId) {
192
+        conversationService.requireOwned(userId, conversationId);
193
+        FeEnterprise enterprise = enterpriseService.findEnterpriseByUserId(userId);
194
+        if (enterprise == null) {
195
+            throw new BizException(ErrorCode.NOT_FOUND, "企业信息不存在");
196
+        }
197
+        List<FeEmploymentDraft> drafts = feEmploymentDraftMapper.selectList(
198
+                new LambdaQueryWrapper<FeEmploymentDraft>()
199
+                        .eq(FeEmploymentDraft::getConversationId, conversationId)
200
+                        .eq(FeEmploymentDraft::getEnterpriseId, enterprise.getId())
201
+                        .orderByAsc(FeEmploymentDraft::getId));
202
+        List<RegistrationBatchDetailResponse> result = new ArrayList<>();
203
+        if (drafts == null || drafts.isEmpty()) {
204
+            return result;
205
+        }
206
+        for (FeEmploymentDraft draft : drafts) {
207
+            try {
208
+                result.add(getDetailByDraftId(userId, draft.getId()));
209
+            } catch (BizException ignored) {
210
+                // 未确认方案或无批次时跳过
211
+            }
212
+        }
213
+        return result;
214
+    }
215
+
183 216
     /**
184 217
      * 企业端登记进度详情:按批次主键 ID 或业务编号(如 bat_1)。
185 218
      */
@@ -215,6 +248,7 @@ public class RegistrationBatchService {
215 248
         String batchNo = batch.getBatchNo();
216 249
 
217 250
         RegistrationBatchDetailResponse response = new RegistrationBatchDetailResponse();
251
+        response.setDraftId(draft != null ? draft.getId() : order.getDraftId());
218 252
         response.setBatchId(batch.getId());
219 253
         response.setBatchNo(batchNo);
220 254
         response.setTitle(title);

+ 12 - 0
huimv-employment/fe-service/src/main/java/com/huimv/employment/service/registration/dto/RegistrationBatchDetailResponse.java

@@ -10,6 +10,10 @@ import java.util.List;
10 10
 @Schema(description = "登记批次详情(进度管理)")
11 11
 public class RegistrationBatchDetailResponse {
12 12
 
13
+    @JsonProperty("draft_id")
14
+    @Schema(description = "关联草稿 ID")
15
+    private Long draftId;
16
+
13 17
     @JsonProperty("batch_id")
14 18
     @Schema(description = "批次主键 ID")
15 19
     private Long batchId;
@@ -69,6 +73,14 @@ public class RegistrationBatchDetailResponse {
69 73
     @Schema(description = "人员列表")
70 74
     private List<RegistrationBatchWorkerItemResponse> workers = new ArrayList<>();
71 75
 
76
+    public Long getDraftId() {
77
+        return draftId;
78
+    }
79
+
80
+    public void setDraftId(Long draftId) {
81
+        this.draftId = draftId;
82
+    }
83
+
72 84
     public Long getBatchId() {
73 85
         return batchId;
74 86
     }