From e89b46eccadc107be6b6cb54e7b257a8ccb8455e Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 12 Feb 2026 15:58:40 +0800
Subject: [PATCH] feat(ai): 添加AI产品题目任务详情功能

---
 src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java                       |    3 +
 src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java              |   12 +++++
 src/main/java/cc/mrbird/febs/ai/res/AdminQuestionInfoVo.java                                |   10 +++++
 src/main/java/cc/mrbird/febs/ai/mapper/AiProductQuestionMapper.java                         |    6 +++
 src/main/resources/mapper/modules/AiProductQuestionMapper.xml                               |    8 ++++
 src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java              |   11 +++++
 src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java |    6 +++
 src/main/java/cc/mrbird/febs/ai/entity/AiProductQuestionItem.java                           |    5 ++
 src/main/resources/templates/febs/views/modules/ai/productQuestion/jobInfoList.html         |   37 ++++++++++++++++++
 src/main/resources/templates/febs/views/modules/ai/productQuestion/jobList.html             |   18 +++++++++
 10 files changed, 115 insertions(+), 1 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java b/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java
index 4835f9f..2842b51 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java
@@ -67,6 +67,12 @@
         Map<String, Object> data = getDataTable(aiProductQuestionService.listJobInPage(dto, request));
         return new FebsResponse().success().data(data);
     }
+    @GetMapping("/jobChild")
+    public FebsResponse jobChild(QueryRequest request, AiProductQuestionJob dto, String jobId) {
+        dto.setId(jobId);
+        Map<String, Object> dataTable = getDataTable(aiProductQuestionService.jobChild(request, dto));
+        return new FebsResponse().success().data(dataTable);
+    }
 
     @GetMapping("changeState/{id}/{state}")
     @ControllerEndpoint(operation = "状态操作", exceptionMessage = "操作失败")
diff --git a/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java b/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java
index 564a4d4..9c4387d 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java
@@ -76,7 +76,17 @@
         return FebsUtil.view("modules/ai/productQuestion/info");
     }
 
-
+    /**
+     * @param id
+     * @param model
+     * @return
+     */
+    @GetMapping("jobInfoList/{id}")
+    @RequiresPermissions("jobInfoList:update")
+    public String jobInfoList(@PathVariable String id, Model model) {
+        model.addAttribute("jobId", id);
+        return FebsUtil.view("modules/ai/productQuestion/jobInfoList");
+    }
     @GetMapping("labelSet/{strIds}")
     @RequiresPermissions("productQuestionList:labelSet")
     public String vipLevelSetting(@PathVariable(value = "strIds") String strIds, Model model) {
diff --git a/src/main/java/cc/mrbird/febs/ai/entity/AiProductQuestionItem.java b/src/main/java/cc/mrbird/febs/ai/entity/AiProductQuestionItem.java
index cdc5ac9..b8fc185 100644
--- a/src/main/java/cc/mrbird/febs/ai/entity/AiProductQuestionItem.java
+++ b/src/main/java/cc/mrbird/febs/ai/entity/AiProductQuestionItem.java
@@ -30,6 +30,11 @@
     private String title;
 
     /**
+     * AI添加任务ID
+     */
+    private String jobId;
+
+    /**
      * 答案
      */
     private String answer;
diff --git a/src/main/java/cc/mrbird/febs/ai/mapper/AiProductQuestionMapper.java b/src/main/java/cc/mrbird/febs/ai/mapper/AiProductQuestionMapper.java
index faa313b..4b8637f 100644
--- a/src/main/java/cc/mrbird/febs/ai/mapper/AiProductQuestionMapper.java
+++ b/src/main/java/cc/mrbird/febs/ai/mapper/AiProductQuestionMapper.java
@@ -1,7 +1,12 @@
 package cc.mrbird.febs.ai.mapper;
 
 import cc.mrbird.febs.ai.entity.AiProductQuestion;
+import cc.mrbird.febs.ai.entity.AiProductQuestionJob;
+import cc.mrbird.febs.ai.res.AdminQuestionInfoVo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * AI产品题目 Mapper接口
@@ -11,4 +16,5 @@
  */
 public interface AiProductQuestionMapper extends BaseMapper<AiProductQuestion> {
 
+    IPage<AdminQuestionInfoVo> selectJobChildPage(Page<AdminQuestionInfoVo> page, @Param("record")AiProductQuestionJob dto);
 }
diff --git a/src/main/java/cc/mrbird/febs/ai/res/AdminQuestionInfoVo.java b/src/main/java/cc/mrbird/febs/ai/res/AdminQuestionInfoVo.java
new file mode 100644
index 0000000..69bf680
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/res/AdminQuestionInfoVo.java
@@ -0,0 +1,10 @@
+package cc.mrbird.febs.ai.res;
+
+import lombok.Data;
+
+@Data
+public class AdminQuestionInfoVo {
+
+    private String id;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java b/src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java
index 2176589..eae600d 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java
@@ -4,6 +4,7 @@
 import cc.mrbird.febs.ai.entity.AiProductQuestionJob;
 import cc.mrbird.febs.ai.entity.AiProductRole;
 import cc.mrbird.febs.ai.req.AiProductQuestionAiDto;
+import cc.mrbird.febs.ai.res.AdminQuestionInfoVo;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -66,4 +67,6 @@
     void exportNewProductQuestion(AiProductQuestion dto, HttpServletResponse response);
 
     FebsResponse importNewProductQuestion(MultipartFile file, String categoryId, String companyId, Integer difficulty);
+
+    IPage<AdminQuestionInfoVo> jobChild(QueryRequest request, AiProductQuestionJob dto);
 }
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java
index ec2e626..6a7d471 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java
@@ -4,6 +4,7 @@
 import cc.mrbird.febs.ai.mapper.AiProductQuestionJobMapper;
 import cc.mrbird.febs.ai.mapper.AiProductQuestionMapper;
 import cc.mrbird.febs.ai.req.AiProductQuestionAiDto;
+import cc.mrbird.febs.ai.res.AdminQuestionInfoVo;
 import cc.mrbird.febs.ai.service.AiProductCategoryService;
 import cc.mrbird.febs.ai.service.AiProductQuestionItemService;
 import cc.mrbird.febs.ai.service.AiProductQuestionService;
@@ -20,6 +21,7 @@
 import cc.mrbird.febs.mall.entity.MallMember;
 import cc.mrbird.febs.mall.entity.MallOrderInfo;
 import cc.mrbird.febs.mall.entity.MallOrderItem;
+import cc.mrbird.febs.mall.vo.AdminAgentMemberVo;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
@@ -48,6 +50,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -425,6 +428,7 @@
                         aiProductQuestionItem.setAnswer(answer.getStr("answer"));
                         aiProductQuestionItem.setCorrectAnswer(answer.getInt("type") == 2 ? 1 : 0);
                         aiProductQuestionItem.setAnswerAnalysis(answer.getStr("analysis"));
+                        aiProductQuestionItem.setJobId( id);
                         aiProductQuestionItem.setCreatedTime(createdTime);
                         aiProductQuestionItemService.getBaseMapper().insert(aiProductQuestionItem);
                     }
@@ -899,6 +903,13 @@
         }
     }
 
+    @Override
+    public IPage<AdminQuestionInfoVo> jobChild(QueryRequest request, AiProductQuestionJob dto) {
+
+        Page<AdminQuestionInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        return aiProductQuestionMapper.selectJobChildPage(page, dto);
+    }
+
     private void saveQuestionWithItems(AiProductQuestion question, List<AiProductQuestionItem> items) {
         // 保存题目(新增一次)
         this.save(question);
diff --git a/src/main/resources/mapper/modules/AiProductQuestionMapper.xml b/src/main/resources/mapper/modules/AiProductQuestionMapper.xml
index a00a1a1..7b84a99 100644
--- a/src/main/resources/mapper/modules/AiProductQuestionMapper.xml
+++ b/src/main/resources/mapper/modules/AiProductQuestionMapper.xml
@@ -1,4 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="cc.mrbird.febs.ai.mapper.AiProductQuestionMapper">
+
+    <select id="selectJobChildPage" resultType="cc.mrbird.febs.ai.res.AdminQuestionInfoVo">
+        select a.id
+        from ai_product_question_item a
+        where a.job_id = #{record.id}
+        ORDER BY a.title DESC
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/ai/productQuestion/jobInfoList.html b/src/main/resources/templates/febs/views/modules/ai/productQuestion/jobInfoList.html
new file mode 100644
index 0000000..d412c9d
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/ai/productQuestion/jobInfoList.html
@@ -0,0 +1,37 @@
+<div className="layui-fluid layui-anim febs-anim" id="febs-job-child" lay-title="全部成员">
+    <div className="layui-row febs-container">
+        <div className="layui-col-md12">
+            <div className="layui-card">
+                <div className="layui-card-body febs-table-full">
+                    <table lay-filter="jobChild" lay-data="{id: 'jobChild'}"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script data-th-inline="javascript" type="text/javascript">
+    layui.use(['jquery', 'form', 'table', 'febs'], function () {
+        var $ = layui.jquery,
+            febs = layui.febs,
+            form = layui.form,
+            table = layui.table,
+            $view = $('#febs-job-child'),
+            jobId = [[${jobId}]],  // 确保Thymeleaf传递正确
+            tableIns;
+
+        form.render();
+        initJobChildTable();
+
+        function initJobChildTable() {
+            tableIns = febs.table.init({
+                elem: $view.find('table'),
+                id: 'jobChild',
+                url: ctx + 'admin/productQuestion/jobChild?jobId=' + jobId,
+                cols: [[
+                    {field: 'id', title: 'ID', minWidth: 150, align: 'center'},
+                    // 添加更多列定义...
+                ]]
+            });
+        }
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/ai/productQuestion/jobList.html b/src/main/resources/templates/febs/views/modules/ai/productQuestion/jobList.html
index fff7f84..fe8b9a5 100644
--- a/src/main/resources/templates/febs/views/modules/ai/productQuestion/jobList.html
+++ b/src/main/resources/templates/febs/views/modules/ai/productQuestion/jobList.html
@@ -55,6 +55,10 @@
     </div>
 </script>
 
+<script type="text/html" id="productQuestionJobOption">
+    <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="jobInfoList:update" lay-event="productQuestionJobInfoEvent">详情</button>
+</script>
+
 <script type="text/html" id="difficultyFormat">
     {{# if(d.difficulty == 1) { }}
     <span>简单</span>
@@ -160,6 +164,19 @@
             });
         }
 
+        // 初始化表格操作栏各个按钮功能
+        table.on('tool(productQuestionJobTable)', function (obj) {
+            console.log("触发事件:", obj.event); // 调试信息
+            var data = obj.data,
+                layEvent = obj.event;
+            if (layEvent === 'productQuestionJobInfoEvent') {
+                console.log("触发事件-ID:", data.id)
+                febs.modal.open( '详情', 'modules/ai/productQuestion/jobInfoList/' + data.id, {
+                    maxmin: true,
+                });
+            }
+        });
+
         function initproductQuestionJobTable() {
             tableIns = febs.table.init({
                 elem: $view.find('table'),
@@ -169,6 +186,7 @@
                 defaultToolbar:[],
                 cols: [[
                     {type: 'checkbox'},
+                    {title: '操作', toolbar: '#productQuestionJobOption', minWidth: 200, align: 'center'},
                     {type: 'numbers', title: '', width: 80},
                     {field: 'title', title: '要求', minWidth: 100,align:'center'},
                     {field: 'questionCnt', title: '生成总数', minWidth: 100,align:'center'},

--
Gitblit v1.9.1