Browse Source

cirs include biz module

WangRuiLin 1 year ago
parent
commit
a9ff3db973
63 changed files with 7189 additions and 5 deletions
  1. 5 0
      cirs-admin/pom.xml
  2. 1 1
      cirs-admin/src/main/resources/application.yml
  3. 12 0
      cirs-biz/pom.xml
  4. 116 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TElecCompRecordController.java
  5. 123 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TElectronComponentController.java
  6. 104 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TEvaluationController.java
  7. 104 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TPageViewTimeController.java
  8. 129 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TVerificationTaskController.java
  9. 128 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TVerificationTaskDetailController.java
  10. 82 0
      cirs-biz/src/main/java/com/cirs/biz/domain/RecommendInfo.java
  11. 87 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TElecCompRecord.java
  12. 452 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TElectronComponent.java
  13. 98 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TEvaluation.java
  14. 84 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TPageViewTime.java
  15. 159 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TVerificationTask.java
  16. 196 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TVerificationTaskDetail.java
  17. 35 0
      cirs-biz/src/main/java/com/cirs/biz/domain/UseInfofromRecord.java
  18. 9 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/RecommendInfoMapper.java
  19. 67 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TElecCompRecordMapper.java
  20. 61 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TElectronComponentMapper.java
  21. 61 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TEvaluationMapper.java
  22. 61 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TPageViewTimeMapper.java
  23. 61 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TVerificationTaskDetailMapper.java
  24. 61 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TVerificationTaskMapper.java
  25. 64 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITElecCompRecordService.java
  26. 61 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITElectronComponentService.java
  27. 61 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITEvaluationService.java
  28. 61 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITPageViewTimeService.java
  29. 63 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITVerificationTaskDetailService.java
  30. 63 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITVerificationTaskService.java
  31. 106 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TElecCompRecordServiceImpl.java
  32. 96 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TElectronComponentServiceImpl.java
  33. 96 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TEvaluationServiceImpl.java
  34. 96 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TPageViewTimeServiceImpl.java
  35. 153 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TVerificationTaskDetailServiceImpl.java
  36. 152 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TVerificationTaskServiceImpl.java
  37. 19 0
      cirs-biz/src/main/resources/mapper/biz/RecommendInfoMapper.xml
  38. 97 0
      cirs-biz/src/main/resources/mapper/biz/TElecCompRecordMapper.xml
  39. 216 0
      cirs-biz/src/main/resources/mapper/biz/TElectronComponentMapper.xml
  40. 91 0
      cirs-biz/src/main/resources/mapper/biz/TEvaluationMapper.xml
  41. 86 0
      cirs-biz/src/main/resources/mapper/biz/TPageViewTimeMapper.xml
  42. 126 0
      cirs-biz/src/main/resources/mapper/biz/TVerificationTaskDetailMapper.xml
  43. 111 0
      cirs-biz/src/main/resources/mapper/biz/TVerificationTaskMapper.xml
  44. 1 1
      cirs-ui/.env.development
  45. 43 0
      cirs-ui/src/api/biz/component.js
  46. 44 0
      cirs-ui/src/api/biz/detail.js
  47. 44 0
      cirs-ui/src/api/biz/evaluation.js
  48. 45 0
      cirs-ui/src/api/biz/recommend.js
  49. 44 0
      cirs-ui/src/api/biz/record.js
  50. 44 0
      cirs-ui/src/api/biz/task.js
  51. 44 0
      cirs-ui/src/api/biz/time.js
  52. BIN
      cirs-ui/src/assets/images/R-C.jpg
  53. 639 0
      cirs-ui/src/views/biz/component/index.vue
  54. 466 0
      cirs-ui/src/views/biz/detail/index.vue
  55. 293 0
      cirs-ui/src/views/biz/evaluation/index.vue
  56. 345 0
      cirs-ui/src/views/biz/recommend/index.vue
  57. 291 0
      cirs-ui/src/views/biz/record/index.vue
  58. 441 0
      cirs-ui/src/views/biz/task/index.vue
  59. 282 0
      cirs-ui/src/views/biz/time/index.vue
  60. 1 1
      cirs-ui/src/views/login.vue
  61. 1 1
      cirs-ui/src/views/system/user/index.vue
  62. 6 0
      pom.xml
  63. 1 1
      sql/cirs_20230223.sql

+ 5 - 0
cirs-admin/pom.xml

@@ -61,6 +61,11 @@
             <artifactId>cirs-generator</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.cirs</groupId>
+            <artifactId>cirs-biz</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 1 - 1
cirs-admin/src/main/resources/application.yml

@@ -76,7 +76,7 @@ spring:
     # 数据库索引
     database: 0
     # 密码
-    password:
+    password: 123456
     # 连接超时时间
     timeout: 10s
     lettuce:

+ 12 - 0
cirs-biz/pom.xml

@@ -11,7 +11,19 @@
 
     <artifactId>cirs-biz</artifactId>
 
+    <description>
+        元器件系统模块
+    </description>
+
     <dependencies>
+
+        <!-- 通用工具-->
+        <dependency>
+            <groupId>com.cirs</groupId>
+            <artifactId>cirs-common</artifactId>
+        </dependency>
+
     </dependencies>
 
+
 </project>

+ 116 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TElecCompRecordController.java

@@ -0,0 +1,116 @@
+package com.cirs.biz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.cirs.common.annotation.Log;
+import com.cirs.common.core.controller.BaseController;
+import com.cirs.common.core.domain.AjaxResult;
+import com.cirs.common.enums.BusinessType;
+import com.cirs.biz.domain.TElecCompRecord;
+import com.cirs.biz.service.ITElecCompRecordService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+
+/**
+ * 元器件使用经历Controller
+ * 
+ * @author allen
+ * @date 2023-11-04
+ */
+@RestController
+@RequestMapping("/biz/record")
+public class TElecCompRecordController extends BaseController
+{
+    @Autowired
+    private ITElecCompRecordService tElecCompRecordService;
+
+    /**
+     * 查询元器件使用经历列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:record:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TElecCompRecord tElecCompRecord)
+    {
+        startPage();
+        List<TElecCompRecord> list = tElecCompRecordService.selectTElecCompRecordList(tElecCompRecord);
+//        System.out.println(list);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出元器件使用经历列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:record:export')")
+    @Log(title = "元器件使用经历", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TElecCompRecord tElecCompRecord)
+    {
+        List<TElecCompRecord> list = tElecCompRecordService.selectTElecCompRecordList(tElecCompRecord);
+        ExcelUtil<TElecCompRecord> util = new ExcelUtil<TElecCompRecord>(TElecCompRecord.class);
+        util.exportExcel(response, list, "元器件使用经历数据");
+    }
+
+    /**
+     * 获取元器件使用经历详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:record:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tElecCompRecordService.selectTElecCompRecordById(id));
+    }
+
+    /**
+     * 利用元器件编号获取元器件使用场景和使用日期 wangruilin
+     */
+    @PreAuthorize("@ss.hasPermi('biz:record:queryBycomponentId')")
+    @GetMapping(value = "/componentId/{componentId}")
+    public AjaxResult getBycomponentId(@PathVariable("componentId") Long componentId)
+    {
+//        System.out.println(tElecCompRecordService.getBycomponentId(componentId));
+        return success(tElecCompRecordService.getBycomponentId(componentId));
+    }
+
+    /**
+     * 新增元器件使用经历
+     */
+    @PreAuthorize("@ss.hasPermi('biz:record:add')")
+    @Log(title = "元器件使用经历", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TElecCompRecord tElecCompRecord)
+    {
+        return toAjax(tElecCompRecordService.insertTElecCompRecord(tElecCompRecord));
+    }
+
+    /**
+     * 修改元器件使用经历
+     */
+    @PreAuthorize("@ss.hasPermi('biz:record:edit')")
+    @Log(title = "元器件使用经历", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TElecCompRecord tElecCompRecord)
+    {
+        return toAjax(tElecCompRecordService.updateTElecCompRecord(tElecCompRecord));
+    }
+
+    /**
+     * 删除元器件使用经历
+     */
+    @PreAuthorize("@ss.hasPermi('biz:record:remove')")
+    @Log(title = "元器件使用经历", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tElecCompRecordService.deleteTElecCompRecordByIds(ids));
+    }
+}

+ 123 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TElectronComponentController.java

@@ -0,0 +1,123 @@
+package com.cirs.biz.controller;
+
+import java.util.List;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+import com.cirs.biz.domain.RecommendInfo;
+import com.cirs.biz.mapper.RecommendInfoMapper;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.cirs.common.annotation.Log;
+import com.cirs.common.core.controller.BaseController;
+import com.cirs.common.core.domain.AjaxResult;
+import com.cirs.common.enums.BusinessType;
+import com.cirs.biz.domain.TElectronComponent;
+import com.cirs.biz.service.ITElectronComponentService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+
+/**
+ * 元器件Controller
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@RestController
+@RequestMapping("/biz/component")
+public class TElectronComponentController extends BaseController
+{
+    @Autowired
+    private ITElectronComponentService tElectronComponentService;
+
+    @Resource
+    private RecommendInfoMapper recommendInfoMapper;
+
+    /**
+     * 查询元器件列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:component:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TElectronComponent tElectronComponent)
+    {
+        startPage();
+        List<TElectronComponent> list = tElectronComponentService.selectTElectronComponentList(tElectronComponent);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出元器件列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:component:export')")
+    @Log(title = "元器件", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TElectronComponent tElectronComponent)
+    {
+        List<TElectronComponent> list = tElectronComponentService.selectTElectronComponentList(tElectronComponent);
+        ExcelUtil<TElectronComponent> util = new ExcelUtil<TElectronComponent>(TElectronComponent.class);
+        util.exportExcel(response, list, "元器件数据");
+    }
+
+    /**
+     * 获取元器件详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:component:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tElectronComponentService.selectTElectronComponentById(id));
+    }
+
+    /**
+     * 获取查询的推荐 wangruilin
+     */
+    @PreAuthorize("@ss.hasPermi('biz:recommend:querylist')")
+    @GetMapping("/recommend/querylist")
+    public TableDataInfo querylist()
+    {
+        startPage();
+        List<RecommendInfo> list = recommendInfoMapper.RecommendQueryList();
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增元器件
+     */
+    @PreAuthorize("@ss.hasPermi('biz:component:add')")
+    @Log(title = "元器件", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TElectronComponent tElectronComponent)
+    {
+        return toAjax(tElectronComponentService.insertTElectronComponent(tElectronComponent));
+    }
+
+    /**
+     * 修改元器件
+     */
+    @PreAuthorize("@ss.hasPermi('biz:component:edit')")
+    @Log(title = "元器件", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TElectronComponent tElectronComponent)
+    {
+        return toAjax(tElectronComponentService.updateTElectronComponent(tElectronComponent));
+    }
+
+    /**
+     * 删除元器件
+     */
+    @PreAuthorize("@ss.hasPermi('biz:component:remove')")
+    @Log(title = "元器件", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tElectronComponentService.deleteTElectronComponentByIds(ids));
+    }
+}

+ 104 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TEvaluationController.java

@@ -0,0 +1,104 @@
+package com.cirs.biz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.cirs.common.annotation.Log;
+import com.cirs.common.core.controller.BaseController;
+import com.cirs.common.core.domain.AjaxResult;
+import com.cirs.common.enums.BusinessType;
+import com.cirs.biz.domain.TEvaluation;
+import com.cirs.biz.service.ITEvaluationService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+
+/**
+ * 评价Controller
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@RestController
+@RequestMapping("/biz/evaluation")
+public class TEvaluationController extends BaseController
+{
+    @Autowired
+    private ITEvaluationService tEvaluationService;
+
+    /**
+     * 查询评价列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:evaluation:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TEvaluation tEvaluation)
+    {
+        startPage();
+        List<TEvaluation> list = tEvaluationService.selectTEvaluationList(tEvaluation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出评价列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:evaluation:export')")
+    @Log(title = "评价", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TEvaluation tEvaluation)
+    {
+        List<TEvaluation> list = tEvaluationService.selectTEvaluationList(tEvaluation);
+        ExcelUtil<TEvaluation> util = new ExcelUtil<TEvaluation>(TEvaluation.class);
+        util.exportExcel(response, list, "评价数据");
+    }
+
+    /**
+     * 获取评价详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:evaluation:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tEvaluationService.selectTEvaluationById(id));
+    }
+
+    /**
+     * 新增评价
+     */
+    @PreAuthorize("@ss.hasPermi('biz:evaluation:add')")
+    @Log(title = "评价", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TEvaluation tEvaluation)
+    {
+        return toAjax(tEvaluationService.insertTEvaluation(tEvaluation));
+    }
+
+    /**
+     * 修改评价
+     */
+    @PreAuthorize("@ss.hasPermi('biz:evaluation:edit')")
+    @Log(title = "评价", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TEvaluation tEvaluation)
+    {
+        return toAjax(tEvaluationService.updateTEvaluation(tEvaluation));
+    }
+
+    /**
+     * 删除评价
+     */
+    @PreAuthorize("@ss.hasPermi('biz:evaluation:remove')")
+    @Log(title = "评价", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tEvaluationService.deleteTEvaluationByIds(ids));
+    }
+}

+ 104 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TPageViewTimeController.java

@@ -0,0 +1,104 @@
+package com.cirs.biz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.cirs.common.annotation.Log;
+import com.cirs.common.core.controller.BaseController;
+import com.cirs.common.core.domain.AjaxResult;
+import com.cirs.common.enums.BusinessType;
+import com.cirs.biz.domain.TPageViewTime;
+import com.cirs.biz.service.ITPageViewTimeService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+
+/**
+ * 页面浏览时长Controller
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@RestController
+@RequestMapping("/biz/time")
+public class TPageViewTimeController extends BaseController
+{
+    @Autowired
+    private ITPageViewTimeService tPageViewTimeService;
+
+    /**
+     * 查询页面浏览时长列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:time:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TPageViewTime tPageViewTime)
+    {
+        startPage();
+        List<TPageViewTime> list = tPageViewTimeService.selectTPageViewTimeList(tPageViewTime);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出页面浏览时长列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:time:export')")
+    @Log(title = "页面浏览时长", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TPageViewTime tPageViewTime)
+    {
+        List<TPageViewTime> list = tPageViewTimeService.selectTPageViewTimeList(tPageViewTime);
+        ExcelUtil<TPageViewTime> util = new ExcelUtil<TPageViewTime>(TPageViewTime.class);
+        util.exportExcel(response, list, "页面浏览时长数据");
+    }
+
+    /**
+     * 获取页面浏览时长详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:time:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tPageViewTimeService.selectTPageViewTimeById(id));
+    }
+
+    /**
+     * 新增元器件详情浏览时长 wangruilin
+     */
+    @PreAuthorize("@ss.hasPermi('biz:time:add')")
+    @Log(title = "页面浏览时长", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TPageViewTime tPageViewTime)
+    {
+        return toAjax(tPageViewTimeService.insertTPageViewTime(tPageViewTime));
+    }
+
+    /**
+     * 修改页面浏览时长
+     */
+    @PreAuthorize("@ss.hasPermi('biz:time:edit')")
+    @Log(title = "页面浏览时长", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TPageViewTime tPageViewTime)
+    {
+        return toAjax(tPageViewTimeService.updateTPageViewTime(tPageViewTime));
+    }
+
+    /**
+     * 删除页面浏览时长
+     */
+    @PreAuthorize("@ss.hasPermi('biz:time:remove')")
+    @Log(title = "页面浏览时长", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tPageViewTimeService.deleteTPageViewTimeByIds(ids));
+    }
+}

+ 129 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TVerificationTaskController.java

@@ -0,0 +1,129 @@
+package com.cirs.biz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.cirs.biz.domain.TEvaluation;
+import com.cirs.common.core.domain.entity.SysUser;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.cirs.common.annotation.Log;
+import com.cirs.common.core.controller.BaseController;
+import com.cirs.common.core.domain.AjaxResult;
+import com.cirs.common.enums.BusinessType;
+import com.cirs.biz.domain.TVerificationTask;
+import com.cirs.biz.service.ITVerificationTaskService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 验证任务Controller
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@RestController
+@RequestMapping("/biz/task")
+public class TVerificationTaskController extends BaseController
+{
+    @Autowired
+    private ITVerificationTaskService tVerificationTaskService;
+
+    /**
+     * 查询验证任务列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:task:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TVerificationTask tVerificationTask)
+    {
+        startPage();
+        List<TVerificationTask> list = tVerificationTaskService.selectTVerificationTaskList(tVerificationTask);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出验证任务列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:task:export')")
+    @Log(title = "验证任务", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TVerificationTask tVerificationTask)
+    {
+        List<TVerificationTask> list = tVerificationTaskService.selectTVerificationTaskList(tVerificationTask);
+        ExcelUtil<TVerificationTask> util = new ExcelUtil<TVerificationTask>(TVerificationTask.class);
+        util.exportExcel(response, list, "验证任务数据");
+    }
+
+    /**
+     * 获取验证任务详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:task:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tVerificationTaskService.selectTVerificationTaskById(id));
+    }
+
+    /**
+     * 新增验证任务
+     */
+    @PreAuthorize("@ss.hasPermi('biz:task:add')")
+    @Log(title = "验证任务", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TVerificationTask tVerificationTask)
+    {
+        return toAjax(tVerificationTaskService.insertTVerificationTask(tVerificationTask));
+    }
+
+    /**
+     * 修改验证任务
+     */
+    @PreAuthorize("@ss.hasPermi('biz:task:edit')")
+    @Log(title = "验证任务", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TVerificationTask tVerificationTask)
+    {
+        return toAjax(tVerificationTaskService.updateTVerificationTask(tVerificationTask));
+    }
+
+    /**
+     * 删除验证任务
+     */
+    @PreAuthorize("@ss.hasPermi('biz:task:remove')")
+    @Log(title = "验证任务", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tVerificationTaskService.deleteTVerificationTaskByIds(ids));
+    }
+
+    /**
+     * 导入验证任务 wangruilin
+     */
+    @PreAuthorize("@ss.hasPermi('biz:task:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<TVerificationTask> util = new ExcelUtil<TVerificationTask>(TVerificationTask.class);
+        List<TVerificationTask> taskList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = tVerificationTaskService.importTask(taskList, updateSupport, operName);
+        return success(message);
+    }
+
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<TVerificationTask> util = new ExcelUtil<TVerificationTask>(TVerificationTask.class);
+        util.importTemplateExcel(response, "任务数据");
+    }
+}

+ 128 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TVerificationTaskDetailController.java

@@ -0,0 +1,128 @@
+package com.cirs.biz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.cirs.biz.domain.TVerificationTask;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.cirs.common.annotation.Log;
+import com.cirs.common.core.controller.BaseController;
+import com.cirs.common.core.domain.AjaxResult;
+import com.cirs.common.enums.BusinessType;
+import com.cirs.biz.domain.TVerificationTaskDetail;
+import com.cirs.biz.service.ITVerificationTaskDetailService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 验证任务详情Controller
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@RestController
+@RequestMapping("/biz/detail")
+public class TVerificationTaskDetailController extends BaseController
+{
+    @Autowired
+    private ITVerificationTaskDetailService tVerificationTaskDetailService;
+
+    /**
+     * 查询验证任务详情列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:detail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TVerificationTaskDetail tVerificationTaskDetail)
+    {
+        startPage();
+        List<TVerificationTaskDetail> list = tVerificationTaskDetailService.selectTVerificationTaskDetailList(tVerificationTaskDetail);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出验证任务详情列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:detail:export')")
+    @Log(title = "验证任务详情", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TVerificationTaskDetail tVerificationTaskDetail)
+    {
+        List<TVerificationTaskDetail> list = tVerificationTaskDetailService.selectTVerificationTaskDetailList(tVerificationTaskDetail);
+        ExcelUtil<TVerificationTaskDetail> util = new ExcelUtil<TVerificationTaskDetail>(TVerificationTaskDetail.class);
+        util.exportExcel(response, list, "验证任务详情数据");
+    }
+
+    /**
+     * 获取验证任务详情详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:detail:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tVerificationTaskDetailService.selectTVerificationTaskDetailById(id));
+    }
+
+    /**
+     * 新增验证任务详情
+     */
+    @PreAuthorize("@ss.hasPermi('biz:detail:add')")
+    @Log(title = "验证任务详情", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TVerificationTaskDetail tVerificationTaskDetail)
+    {
+        return toAjax(tVerificationTaskDetailService.insertTVerificationTaskDetail(tVerificationTaskDetail));
+    }
+
+    /**
+     * 修改验证任务详情
+     */
+    @PreAuthorize("@ss.hasPermi('biz:detail:edit')")
+    @Log(title = "验证任务详情", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TVerificationTaskDetail tVerificationTaskDetail)
+    {
+        return toAjax(tVerificationTaskDetailService.updateTVerificationTaskDetail(tVerificationTaskDetail));
+    }
+
+    /**
+     * 删除验证任务详情
+     */
+    @PreAuthorize("@ss.hasPermi('biz:detail:remove')")
+    @Log(title = "验证任务详情", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tVerificationTaskDetailService.deleteTVerificationTaskDetailByIds(ids));
+    }
+
+    /**
+     * 导入验证任务detail wangruilin
+     */
+    @PreAuthorize("@ss.hasPermi('biz:detail:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<TVerificationTaskDetail> util = new ExcelUtil<TVerificationTaskDetail>(TVerificationTaskDetail.class);
+        List<TVerificationTaskDetail> taskDetailList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = tVerificationTaskDetailService.importTaskDetail(taskDetailList, updateSupport, operName);
+        return success(message);
+    }
+
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<TVerificationTaskDetail> util = new ExcelUtil<TVerificationTaskDetail>(TVerificationTaskDetail.class);
+        util.importTemplateExcel(response, "任务详情数据");
+    }
+}

+ 82 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/RecommendInfo.java

@@ -0,0 +1,82 @@
+package com.cirs.biz.domain;
+
+import com.cirs.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 查询推荐结果 recommendifo
+ *
+ * @author wangruilin
+ * @date 2023-11-04
+ */
+
+public class RecommendInfo {
+    @Excel(name="元器件id")
+    private Long id;
+    @Excel(name = "元器件规格")
+    private String componentModel;
+
+    @Excel(name = "元器件名称")
+    private String componentName;
+
+    @Excel(name = "国产替代型号")
+    private String replaceDomesticModel;
+
+//    @Excel(name="应用")//应用场景
+//    private List<String> applications;
+//
+//    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @Excel(name = "使用日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private List<Date> usedDates;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+
+    public String getComponentName()
+    {
+        return componentName;
+    }
+    public void setComponentName(String componentName)
+    {
+        this.componentName = componentName;
+    }
+
+    public String getComponentModel()
+    {
+        return componentModel;
+    }
+    public void setComponentModel(String componentModel) {
+        this.componentModel = componentModel;
+    }
+
+    public void setReplaceDomesticModel(String replaceDomesticModel)
+    {
+        this.replaceDomesticModel = replaceDomesticModel;
+    }
+
+    public String getReplaceDomesticModel()
+    {
+        return replaceDomesticModel;
+    }
+
+//    public void setApplications(List<String> applications)
+//    {
+//        this.applications = applications;
+//    }
+//
+//    public List<String> getApplications()
+//    {
+//        return applications;
+//    }
+
+}

+ 87 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TElecCompRecord.java

@@ -0,0 +1,87 @@
+package com.cirs.biz.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.cirs.common.annotation.Excel;
+import com.cirs.common.core.domain.BaseEntity;
+
+/**
+ * 元器件使用经历对象 t_elec_comp_record
+ * 
+ * @author allen
+ * @date 2023-11-04
+ */
+public class TElecCompRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 元器件名称 */
+    @Excel(name = "元器件名称")
+    private String componentId;
+
+    /** 使用场景 */
+    @Excel(name = "使用场景")
+    private String usedBy;
+
+    /** 使用日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "使用日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date usedDate;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setComponentId(String componentId) 
+    {
+        this.componentId = componentId;
+    }
+
+    public String getComponentId() 
+    {
+        return componentId;
+    }
+    public void setUsedBy(String usedBy) 
+    {
+        this.usedBy = usedBy;
+    }
+
+    public String getUsedBy() 
+    {
+        return usedBy;
+    }
+    public void setUsedDate(Date usedDate) 
+    {
+        this.usedDate = usedDate;
+    }
+
+    public Date getUsedDate() 
+    {
+        return usedDate;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("componentId", getComponentId())
+            .append("usedBy", getUsedBy())
+            .append("usedDate", getUsedDate())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 452 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TElectronComponent.java

@@ -0,0 +1,452 @@
+package com.cirs.biz.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.cirs.common.annotation.Excel;
+import com.cirs.common.core.domain.BaseEntity;
+
+/**
+ * 元器件对象 t_electron_component
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public class TElectronComponent extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 元器件名称 */
+    @Excel(name = "元器件名称")
+    private String componentName;
+
+    /** 生产厂家 */
+    @Excel(name = "生产厂家")
+    private String manufacturer;
+
+    /** 型号规格 */
+    @Excel(name = "型号规格")
+    private String componentModel;
+
+    /** 国产替代型号 */
+    @Excel(name = "国产替代型号")
+    private String replaceDomesticModel;
+
+    /** 质量等级(质量由优到劣为JYJCTJTJP) */
+    @Excel(name = "质量等级", readConverterExp = "质=量由优到劣为JYJCTJTJP")//质量最优
+    private String qualityGrade;
+
+    /** 供货周期(周) */
+    @Excel(name = "供货周期", readConverterExp = "周=")//供货周期最优
+    private BigDecimal deliveryCycle;
+
+    /** 供货量(个/年) */
+    @Excel(name = "供货量(个/年)")//供货量最优
+    private BigDecimal supplyQuantity;
+
+    /** 价格(元) */
+    @Excel(name = "价格", readConverterExp = "元=")//成本最优
+    private BigDecimal unitPrice;
+
+    /** ZZKK等级 */
+    @Excel(name = "ZZKK等级")
+    private String zzkkLevel;
+
+    /** 是否在优选目录内 */
+    @Excel(name = "是否在优选目录内")
+    private String inPreference;
+
+    /** 停产断档日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "停产断档日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date shutdownDate;
+
+    /** 封装形式 */
+    @Excel(name = "封装形式")
+    private String encapsulationMode;
+
+    /** 最大正向电流IFM(mA) */
+    @Excel(name = "最大正向电流IFM", readConverterExp = "m=A")
+    private BigDecimal paramIfm;
+
+    /** 最大反向工作电压VRRM(V) */
+    @Excel(name = "最大反向工作电压VRRM", readConverterExp = "V=")
+    private BigDecimal paramVrrm;
+
+    /** 最大浪涌电流IFSM(A) */
+    @Excel(name = "最大浪涌电流IFSM", readConverterExp = "A=")
+    private BigDecimal paramIfsm;
+
+    /** 稳压状态下的动态电阻ZZ(Ω) */
+    @Excel(name = "稳压状态下的动态电阻ZZ", readConverterExp = "Ω=")
+    private BigDecimal paramZz;
+
+    /** 最大额定功率PCM(mW) */
+    @Excel(name = "最大额定功率PCM", readConverterExp = "m=W")
+    private BigDecimal paramPcm;
+
+    /** 最大集电极电流ICM(mA) */
+    @Excel(name = "最大集电极电流ICM", readConverterExp = "m=A")
+    private BigDecimal paramIcm;
+
+    /** 最大集电极-基极电压VCBO(V) */
+    @Excel(name = "最大集电极-基极电压VCBO", readConverterExp = "V=")
+    private BigDecimal paramVcbo;
+
+    /** 集电极-发射极电压VCEO(V) */
+    @Excel(name = "集电极-发射极电压VCEO", readConverterExp = "V=")
+    private BigDecimal paramVceo;
+
+    /** 发射极-基极电压VEBO(V) */
+    @Excel(name = "发射极-基极电压VEBO", readConverterExp = "V=")
+    private BigDecimal paramVebo;
+
+    /** 漏源电压VDSS(V) */
+    @Excel(name = "漏源电压VDSS", readConverterExp = "V=")
+    private BigDecimal paramVdss;
+
+    /** 漏极直流电流ID(A) */
+    @Excel(name = "漏极直流电流ID", readConverterExp = "A=")
+    private BigDecimal paramId;
+
+    /** 漏-源通态电阻RDS(on)(mΩ) */
+    @Excel(name = "漏-源通态电阻RDS(on)", readConverterExp = "m=Ω")
+    private BigDecimal paramRdsOn;
+
+    /** 抗静电能力 */
+    @Excel(name = "抗静电能力")
+    private String antistaticCapacity;
+
+    /** 抗辐照能力 */
+    @Excel(name = "抗辐照能力")
+    private String radiationResistance;
+
+    /** 材料 */
+    @Excel(name = "材料")
+    private String materials;
+
+    /** 工艺 */
+    @Excel(name = "工艺")
+    private String craft;
+
+    /** 重量 */
+    @Excel(name = "重量")
+    private String weight;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setComponentName(String componentName) 
+    {
+        this.componentName = componentName;
+    }
+
+    public String getComponentName() 
+    {
+        return componentName;
+    }
+    public void setManufacturer(String manufacturer) 
+    {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getManufacturer() 
+    {
+        return manufacturer;
+    }
+    public void setComponentModel(String componentModel) 
+    {
+        this.componentModel = componentModel;
+    }
+
+    public String getComponentModel() 
+    {
+        return componentModel;
+    }
+    public void setReplaceDomesticModel(String replaceDomesticModel) 
+    {
+        this.replaceDomesticModel = replaceDomesticModel;
+    }
+
+    public String getReplaceDomesticModel() 
+    {
+        return replaceDomesticModel;
+    }
+    public void setQualityGrade(String qualityGrade) 
+    {
+        this.qualityGrade = qualityGrade;
+    }
+
+    public String getQualityGrade() 
+    {
+        return qualityGrade;
+    }
+    public void setDeliveryCycle(BigDecimal deliveryCycle) 
+    {
+        this.deliveryCycle = deliveryCycle;
+    }
+
+    public BigDecimal getDeliveryCycle() 
+    {
+        return deliveryCycle;
+    }
+    public void setSupplyQuantity(BigDecimal supplyQuantity) 
+    {
+        this.supplyQuantity = supplyQuantity;
+    }
+
+    public BigDecimal getSupplyQuantity() 
+    {
+        return supplyQuantity;
+    }
+    public void setUnitPrice(BigDecimal unitPrice) 
+    {
+        this.unitPrice = unitPrice;
+    }
+
+    public BigDecimal getUnitPrice() 
+    {
+        return unitPrice;
+    }
+    public void setZzkkLevel(String zzkkLevel) 
+    {
+        this.zzkkLevel = zzkkLevel;
+    }
+
+    public String getZzkkLevel() 
+    {
+        return zzkkLevel;
+    }
+    public void setInPreference(String inPreference) 
+    {
+        this.inPreference = inPreference;
+    }
+
+    public String getInPreference() 
+    {
+        return inPreference;
+    }
+    public void setShutdownDate(Date shutdownDate) 
+    {
+        this.shutdownDate = shutdownDate;
+    }
+
+    public Date getShutdownDate() 
+    {
+        return shutdownDate;
+    }
+    public void setEncapsulationMode(String encapsulationMode) 
+    {
+        this.encapsulationMode = encapsulationMode;
+    }
+
+    public String getEncapsulationMode() 
+    {
+        return encapsulationMode;
+    }
+    public void setParamIfm(BigDecimal paramIfm) 
+    {
+        this.paramIfm = paramIfm;
+    }
+
+    public BigDecimal getParamIfm() 
+    {
+        return paramIfm;
+    }
+    public void setParamVrrm(BigDecimal paramVrrm) 
+    {
+        this.paramVrrm = paramVrrm;
+    }
+
+    public BigDecimal getParamVrrm() 
+    {
+        return paramVrrm;
+    }
+    public void setParamIfsm(BigDecimal paramIfsm) 
+    {
+        this.paramIfsm = paramIfsm;
+    }
+
+    public BigDecimal getParamIfsm() 
+    {
+        return paramIfsm;
+    }
+    public void setParamZz(BigDecimal paramZz) 
+    {
+        this.paramZz = paramZz;
+    }
+
+    public BigDecimal getParamZz() 
+    {
+        return paramZz;
+    }
+    public void setParamPcm(BigDecimal paramPcm) 
+    {
+        this.paramPcm = paramPcm;
+    }
+
+    public BigDecimal getParamPcm() 
+    {
+        return paramPcm;
+    }
+    public void setParamIcm(BigDecimal paramIcm) 
+    {
+        this.paramIcm = paramIcm;
+    }
+
+    public BigDecimal getParamIcm() 
+    {
+        return paramIcm;
+    }
+    public void setParamVcbo(BigDecimal paramVcbo) 
+    {
+        this.paramVcbo = paramVcbo;
+    }
+
+    public BigDecimal getParamVcbo() 
+    {
+        return paramVcbo;
+    }
+    public void setParamVceo(BigDecimal paramVceo) 
+    {
+        this.paramVceo = paramVceo;
+    }
+
+    public BigDecimal getParamVceo() 
+    {
+        return paramVceo;
+    }
+    public void setParamVebo(BigDecimal paramVebo) 
+    {
+        this.paramVebo = paramVebo;
+    }
+
+    public BigDecimal getParamVebo() 
+    {
+        return paramVebo;
+    }
+    public void setParamVdss(BigDecimal paramVdss) 
+    {
+        this.paramVdss = paramVdss;
+    }
+
+    public BigDecimal getParamVdss() 
+    {
+        return paramVdss;
+    }
+    public void setParamId(BigDecimal paramId) 
+    {
+        this.paramId = paramId;
+    }
+
+    public BigDecimal getParamId() 
+    {
+        return paramId;
+    }
+    public void setParamRdsOn(BigDecimal paramRdsOn) 
+    {
+        this.paramRdsOn = paramRdsOn;
+    }
+
+    public BigDecimal getParamRdsOn() 
+    {
+        return paramRdsOn;
+    }
+    public void setAntistaticCapacity(String antistaticCapacity) 
+    {
+        this.antistaticCapacity = antistaticCapacity;
+    }
+
+    public String getAntistaticCapacity() 
+    {
+        return antistaticCapacity;
+    }
+    public void setRadiationResistance(String radiationResistance) 
+    {
+        this.radiationResistance = radiationResistance;
+    }
+
+    public String getRadiationResistance() 
+    {
+        return radiationResistance;
+    }
+    public void setMaterials(String materials) 
+    {
+        this.materials = materials;
+    }
+
+    public String getMaterials() 
+    {
+        return materials;
+    }
+    public void setCraft(String craft) 
+    {
+        this.craft = craft;
+    }
+
+    public String getCraft() 
+    {
+        return craft;
+    }
+    public void setWeight(String weight) 
+    {
+        this.weight = weight;
+    }
+
+    public String getWeight() 
+    {
+        return weight;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("componentName", getComponentName())
+            .append("manufacturer", getManufacturer())
+            .append("componentModel", getComponentModel())
+            .append("replaceDomesticModel", getReplaceDomesticModel())
+            .append("qualityGrade", getQualityGrade())
+            .append("deliveryCycle", getDeliveryCycle())
+            .append("supplyQuantity", getSupplyQuantity())
+            .append("unitPrice", getUnitPrice())
+            .append("zzkkLevel", getZzkkLevel())
+            .append("inPreference", getInPreference())
+            .append("shutdownDate", getShutdownDate())
+            .append("encapsulationMode", getEncapsulationMode())
+            .append("paramIfm", getParamIfm())
+            .append("paramVrrm", getParamVrrm())
+            .append("paramIfsm", getParamIfsm())
+            .append("paramZz", getParamZz())
+            .append("paramPcm", getParamPcm())
+            .append("paramIcm", getParamIcm())
+            .append("paramVcbo", getParamVcbo())
+            .append("paramVceo", getParamVceo())
+            .append("paramVebo", getParamVebo())
+            .append("paramVdss", getParamVdss())
+            .append("paramId", getParamId())
+            .append("paramRdsOn", getParamRdsOn())
+            .append("antistaticCapacity", getAntistaticCapacity())
+            .append("radiationResistance", getRadiationResistance())
+            .append("materials", getMaterials())
+            .append("craft", getCraft())
+            .append("weight", getWeight())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 98 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TEvaluation.java

@@ -0,0 +1,98 @@
+package com.cirs.biz.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.cirs.common.annotation.Excel;
+import com.cirs.common.core.domain.BaseEntity;
+
+/**
+ * 评价对象 t_evaluation
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public class TEvaluation extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 查询条件 */
+    @Excel(name = "查询条件")
+    private String searchCondition;
+
+    /** 元器件名称 */
+    @Excel(name = "元器件编号")
+    private String componentId;
+
+    /** 评分 */
+    @Excel(name = "评分")
+    private Integer mark;
+
+    /** 使用场景 */
+    @Excel(name = "使用场景")
+    private String usedBy;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setSearchCondition(String searchCondition) 
+    {
+        this.searchCondition = searchCondition;
+    }
+
+    public String getSearchCondition() 
+    {
+        return searchCondition;
+    }
+    public void setComponentId(String componentId) 
+    {
+        this.componentId = componentId;
+    }
+
+    public String getComponentId() 
+    {
+        return componentId;
+    }
+    public void setMark(Integer mark) 
+    {
+        this.mark = mark;
+    }
+
+    public Integer getMark() 
+    {
+        return mark;
+    }
+    public void setUsedBy(String usedBy) 
+    {
+        this.usedBy = usedBy;
+    }
+
+    public String getUsedBy() 
+    {
+        return usedBy;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("searchCondition", getSearchCondition())
+            .append("componentId", getComponentId())
+            .append("mark", getMark())
+            .append("usedBy", getUsedBy())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 84 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TPageViewTime.java

@@ -0,0 +1,84 @@
+package com.cirs.biz.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.cirs.common.annotation.Excel;
+import com.cirs.common.core.domain.BaseEntity;
+
+/**
+ * 页面浏览时长对象 t_page_view_time
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public class TPageViewTime extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 元器件名称 */
+    @Excel(name = "元器件编号")
+    private String componentId;
+
+    /** 浏览时长(s) */
+    @Excel(name = "浏览时长", readConverterExp = "s=")
+    private Long viewTime;
+
+    /** 使用场景 */
+    @Excel(name = "使用场景")
+    private String usedBy;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setComponentId(String componentId) 
+    {
+        this.componentId = componentId;
+    }
+
+    public String getComponentId() 
+    {
+        return componentId;
+    }
+    public void setViewTime(Long viewTime) 
+    {
+        this.viewTime = viewTime;
+    }
+
+    public Long getViewTime() 
+    {
+        return viewTime;
+    }
+    public void setUsedBy(String usedBy) 
+    {
+        this.usedBy = usedBy;
+    }
+
+    public String getUsedBy() 
+    {
+        return usedBy;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("componentId", getComponentId())
+            .append("viewTime", getViewTime())
+            .append("usedBy", getUsedBy())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 159 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TVerificationTask.java

@@ -0,0 +1,159 @@
+package com.cirs.biz.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.cirs.common.annotation.Excel;
+import com.cirs.common.core.domain.BaseEntity;
+
+/**
+ * 验证任务对象 t_verification_task
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public class TVerificationTask extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 任务名称 */
+    @Excel(name = "任务名称")
+    private String taskName;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String taskStatus;
+
+    /** 任务数 */
+    @Excel(name = "任务数")
+    private Long subtaskNum;
+
+    /** 开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+    /** 结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    /** 完成率 */
+    @Excel(name = "完成率")
+    private BigDecimal progress;
+
+    /** 准确率 */
+    @Excel(name = "准确率")
+    private String accuracyRate;
+
+    /** 召回率 */
+    @Excel(name = "召回率")
+    private String recallRate;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskName(String taskName) 
+    {
+        this.taskName = taskName;
+    }
+
+    public String getTaskName() 
+    {
+        return taskName;
+    }
+    public void setTaskStatus(String taskStatus) 
+    {
+        this.taskStatus = taskStatus;
+    }
+
+    public String getTaskStatus() 
+    {
+        return taskStatus;
+    }
+    public void setSubtaskNum(Long subtaskNum) 
+    {
+        this.subtaskNum = subtaskNum;
+    }
+
+    public Long getSubtaskNum() 
+    {
+        return subtaskNum;
+    }
+    public void setStartTime(Date startTime) 
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime() 
+    {
+        return startTime;
+    }
+    public void setEndTime(Date endTime) 
+    {
+        this.endTime = endTime;
+    }
+
+    public Date getEndTime() 
+    {
+        return endTime;
+    }
+    public void setProgress(BigDecimal progress) 
+    {
+        this.progress = progress;
+    }
+
+    public BigDecimal getProgress() 
+    {
+        return progress;
+    }
+    public void setAccuracyRate(String accuracyRate) 
+    {
+        this.accuracyRate = accuracyRate;
+    }
+
+    public String getAccuracyRate() 
+    {
+        return accuracyRate;
+    }
+    public void setRecallRate(String recallRate) 
+    {
+        this.recallRate = recallRate;
+    }
+
+    public String getRecallRate() 
+    {
+        return recallRate;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskName", getTaskName())
+            .append("taskStatus", getTaskStatus())
+            .append("subtaskNum", getSubtaskNum())
+            .append("startTime", getStartTime())
+            .append("endTime", getEndTime())
+            .append("progress", getProgress())
+            .append("accuracyRate", getAccuracyRate())
+            .append("recallRate", getRecallRate())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 196 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TVerificationTaskDetail.java

@@ -0,0 +1,196 @@
+package com.cirs.biz.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.cirs.common.annotation.Excel;
+import com.cirs.common.core.domain.BaseEntity;
+
+/**
+ * 验证任务详情对象 t_verification_task_detail
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public class TVerificationTaskDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 任务id */
+    @Excel(name = "任务id")
+    private String taskId;
+
+    /** 查询条件 */
+    @Excel(name = "查询条件")
+    private String searchCondition;
+
+    /** 标准结果1 */
+    @Excel(name = "标准结果1")
+    private String result1;
+
+    /** 标准结果2 */
+    @Excel(name = "标准结果2")
+    private String result2;
+
+    /** 标准结果3 */
+    @Excel(name = "标准结果3")
+    private String result3;
+
+    /** 标准结果4 */
+    @Excel(name = "标准结果4")
+    private String result4;
+
+    /** 标准结果5 */
+    @Excel(name = "标准结果5")
+    private String result5;
+
+    /** 计算结果1 */
+    @Excel(name = "计算结果1")
+    private String calculate1;
+
+    /** 计算结果2 */
+    @Excel(name = "计算结果2")
+    private String calculate2;
+
+    /** 计算结果3 */
+    @Excel(name = "计算结果3")
+    private String calculate3;
+
+    /** 召回率 */
+    @Excel(name = "召回率")
+    private String accuracy;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskId(String taskId) 
+    {
+        this.taskId = taskId;
+    }
+
+    public String getTaskId() 
+    {
+        return taskId;
+    }
+    public void setSearchCondition(String searchCondition) 
+    {
+        this.searchCondition = searchCondition;
+    }
+
+    public String getSearchCondition() 
+    {
+        return searchCondition;
+    }
+    public void setResult1(String result1) 
+    {
+        this.result1 = result1;
+    }
+
+    public String getResult1() 
+    {
+        return result1;
+    }
+    public void setResult2(String result2) 
+    {
+        this.result2 = result2;
+    }
+
+    public String getResult2() 
+    {
+        return result2;
+    }
+    public void setResult3(String result3) 
+    {
+        this.result3 = result3;
+    }
+
+    public String getResult3() 
+    {
+        return result3;
+    }
+    public void setResult4(String result4) 
+    {
+        this.result4 = result4;
+    }
+
+    public String getResult4() 
+    {
+        return result4;
+    }
+    public void setResult5(String result5) 
+    {
+        this.result5 = result5;
+    }
+
+    public String getResult5() 
+    {
+        return result5;
+    }
+    public void setCalculate1(String calculate1) 
+    {
+        this.calculate1 = calculate1;
+    }
+
+    public String getCalculate1() 
+    {
+        return calculate1;
+    }
+    public void setCalculate2(String calculate2) 
+    {
+        this.calculate2 = calculate2;
+    }
+
+    public String getCalculate2() 
+    {
+        return calculate2;
+    }
+    public void setCalculate3(String calculate3) 
+    {
+        this.calculate3 = calculate3;
+    }
+
+    public String getCalculate3() 
+    {
+        return calculate3;
+    }
+    public void setAccuracy(String accuracy) 
+    {
+        this.accuracy = accuracy;
+    }
+
+    public String getAccuracy() 
+    {
+        return accuracy;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskId", getTaskId())
+            .append("searchCondition", getSearchCondition())
+            .append("result1", getResult1())
+            .append("result2", getResult2())
+            .append("result3", getResult3())
+            .append("result4", getResult4())
+            .append("result5", getResult5())
+            .append("calculate1", getCalculate1())
+            .append("calculate2", getCalculate2())
+            .append("calculate3", getCalculate3())
+            .append("accuracy", getAccuracy())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 35 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/UseInfofromRecord.java

@@ -0,0 +1,35 @@
+package com.cirs.biz.domain;
+
+import com.cirs.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.util.Date;
+
+public class UseInfofromRecord {
+    @Excel(name = "使用场景")
+    private String usedBy;
+
+    /** 使用日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "使用日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date usedDate;
+
+    public void setUsedBy(String usedBy)
+    {
+        this.usedBy = usedBy;
+    }
+
+    public String getUsedBy()
+    {
+        return usedBy;
+    }
+    public void setUsedDate(Date usedDate)
+    {
+        this.usedDate = usedDate;
+    }
+
+    public Date getUsedDate()
+    {
+        return usedDate;
+    }
+}

+ 9 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/RecommendInfoMapper.java

@@ -0,0 +1,9 @@
+package com.cirs.biz.mapper;
+import com.cirs.biz.domain.RecommendInfo;
+import com.cirs.biz.domain.TElectronComponent;
+
+import java.util.List;
+public interface RecommendInfoMapper {
+
+    public List<RecommendInfo> RecommendQueryList();
+}

+ 67 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/TElecCompRecordMapper.java

@@ -0,0 +1,67 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TElecCompRecord;
+import com.cirs.biz.domain.UseInfofromRecord;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+/**
+ * 元器件使用经历Mapper接口
+ * 
+ * @author allen
+ * @date 2023-11-04
+ */
+public interface TElecCompRecordMapper 
+{
+    /**
+     * 查询元器件使用经历
+     * 
+     * @param id 元器件使用经历主键
+     * @return 元器件使用经历
+     */
+    public TElecCompRecord selectTElecCompRecordById(Long id);
+
+    /**
+     * 查询元器件使用经历列表
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 元器件使用经历集合
+     */
+    public List<TElecCompRecord> selectTElecCompRecordList(TElecCompRecord tElecCompRecord);
+
+    /**
+     * 新增元器件使用经历
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 结果
+     */
+    public int insertTElecCompRecord(TElecCompRecord tElecCompRecord);
+
+    /**
+     * 修改元器件使用经历
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 结果
+     */
+    public int updateTElecCompRecord(TElecCompRecord tElecCompRecord);
+
+    /**
+     * 删除元器件使用经历
+     * 
+     * @param id 元器件使用经历主键
+     * @return 结果
+     */
+    public int deleteTElecCompRecordById(Long id);
+
+    /**
+     * 批量删除元器件使用经历
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTElecCompRecordByIds(Long[] ids);
+
+
+    public List<UseInfofromRecord> getBycomponentId(Long componentId);
+}

+ 61 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/TElectronComponentMapper.java

@@ -0,0 +1,61 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TElectronComponent;
+
+/**
+ * 元器件Mapper接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface TElectronComponentMapper 
+{
+    /**
+     * 查询元器件
+     * 
+     * @param id 元器件主键
+     * @return 元器件
+     */
+    public TElectronComponent selectTElectronComponentById(Long id);
+
+    /**
+     * 查询元器件列表
+     * 
+     * @param tElectronComponent 元器件
+     * @return 元器件集合
+     */
+    public List<TElectronComponent> selectTElectronComponentList(TElectronComponent tElectronComponent);
+
+    /**
+     * 新增元器件
+     * 
+     * @param tElectronComponent 元器件
+     * @return 结果
+     */
+    public int insertTElectronComponent(TElectronComponent tElectronComponent);
+
+    /**
+     * 修改元器件
+     * 
+     * @param tElectronComponent 元器件
+     * @return 结果
+     */
+    public int updateTElectronComponent(TElectronComponent tElectronComponent);
+
+    /**
+     * 删除元器件
+     * 
+     * @param id 元器件主键
+     * @return 结果
+     */
+    public int deleteTElectronComponentById(Long id);
+
+    /**
+     * 批量删除元器件
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTElectronComponentByIds(Long[] ids);
+}

+ 61 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/TEvaluationMapper.java

@@ -0,0 +1,61 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TEvaluation;
+
+/**
+ * 评价Mapper接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface TEvaluationMapper 
+{
+    /**
+     * 查询评价
+     * 
+     * @param id 评价主键
+     * @return 评价
+     */
+    public TEvaluation selectTEvaluationById(Long id);
+
+    /**
+     * 查询评价列表
+     * 
+     * @param tEvaluation 评价
+     * @return 评价集合
+     */
+    public List<TEvaluation> selectTEvaluationList(TEvaluation tEvaluation);
+
+    /**
+     * 新增评价
+     * 
+     * @param tEvaluation 评价
+     * @return 结果
+     */
+    public int insertTEvaluation(TEvaluation tEvaluation);
+
+    /**
+     * 修改评价
+     * 
+     * @param tEvaluation 评价
+     * @return 结果
+     */
+    public int updateTEvaluation(TEvaluation tEvaluation);
+
+    /**
+     * 删除评价
+     * 
+     * @param id 评价主键
+     * @return 结果
+     */
+    public int deleteTEvaluationById(Long id);
+
+    /**
+     * 批量删除评价
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTEvaluationByIds(Long[] ids);
+}

+ 61 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/TPageViewTimeMapper.java

@@ -0,0 +1,61 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TPageViewTime;
+
+/**
+ * 页面浏览时长Mapper接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface TPageViewTimeMapper 
+{
+    /**
+     * 查询页面浏览时长
+     * 
+     * @param id 页面浏览时长主键
+     * @return 页面浏览时长
+     */
+    public TPageViewTime selectTPageViewTimeById(Long id);
+
+    /**
+     * 查询页面浏览时长列表
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 页面浏览时长集合
+     */
+    public List<TPageViewTime> selectTPageViewTimeList(TPageViewTime tPageViewTime);
+
+    /**
+     * 新增页面浏览时长
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 结果
+     */
+    public int insertTPageViewTime(TPageViewTime tPageViewTime);
+
+    /**
+     * 修改页面浏览时长
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 结果
+     */
+    public int updateTPageViewTime(TPageViewTime tPageViewTime);
+
+    /**
+     * 删除页面浏览时长
+     * 
+     * @param id 页面浏览时长主键
+     * @return 结果
+     */
+    public int deleteTPageViewTimeById(Long id);
+
+    /**
+     * 批量删除页面浏览时长
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTPageViewTimeByIds(Long[] ids);
+}

+ 61 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/TVerificationTaskDetailMapper.java

@@ -0,0 +1,61 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TVerificationTaskDetail;
+
+/**
+ * 验证任务详情Mapper接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface TVerificationTaskDetailMapper 
+{
+    /**
+     * 查询验证任务详情
+     * 
+     * @param id 验证任务详情主键
+     * @return 验证任务详情
+     */
+    public TVerificationTaskDetail selectTVerificationTaskDetailById(Long id);
+
+    /**
+     * 查询验证任务详情列表
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 验证任务详情集合
+     */
+    public List<TVerificationTaskDetail> selectTVerificationTaskDetailList(TVerificationTaskDetail tVerificationTaskDetail);
+
+    /**
+     * 新增验证任务详情
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 结果
+     */
+    public int insertTVerificationTaskDetail(TVerificationTaskDetail tVerificationTaskDetail);
+
+    /**
+     * 修改验证任务详情
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 结果
+     */
+    public int updateTVerificationTaskDetail(TVerificationTaskDetail tVerificationTaskDetail);
+
+    /**
+     * 删除验证任务详情
+     * 
+     * @param id 验证任务详情主键
+     * @return 结果
+     */
+    public int deleteTVerificationTaskDetailById(Long id);
+
+    /**
+     * 批量删除验证任务详情
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTVerificationTaskDetailByIds(Long[] ids);
+}

+ 61 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/TVerificationTaskMapper.java

@@ -0,0 +1,61 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TVerificationTask;
+
+/**
+ * 验证任务Mapper接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface TVerificationTaskMapper 
+{
+    /**
+     * 查询验证任务
+     * 
+     * @param id 验证任务主键
+     * @return 验证任务
+     */
+    public TVerificationTask selectTVerificationTaskById(Long id);
+
+    /**
+     * 查询验证任务列表
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 验证任务集合
+     */
+    public List<TVerificationTask> selectTVerificationTaskList(TVerificationTask tVerificationTask);
+
+    /**
+     * 新增验证任务
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 结果
+     */
+    public int insertTVerificationTask(TVerificationTask tVerificationTask);
+
+    /**
+     * 修改验证任务
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 结果
+     */
+    public int updateTVerificationTask(TVerificationTask tVerificationTask);
+
+    /**
+     * 删除验证任务
+     * 
+     * @param id 验证任务主键
+     * @return 结果
+     */
+    public int deleteTVerificationTaskById(Long id);
+
+    /**
+     * 批量删除验证任务
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTVerificationTaskByIds(Long[] ids);
+}

+ 64 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITElecCompRecordService.java

@@ -0,0 +1,64 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TElecCompRecord;
+import com.cirs.biz.domain.UseInfofromRecord;
+
+/**
+ * 元器件使用经历Service接口
+ * 
+ * @author allen
+ * @date 2023-11-04
+ */
+public interface ITElecCompRecordService 
+{
+    /**
+     * 查询元器件使用经历
+     * 
+     * @param id 元器件使用经历主键
+     * @return 元器件使用经历
+     */
+    public TElecCompRecord selectTElecCompRecordById(Long id);
+
+    /**
+     * 查询元器件使用经历列表
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 元器件使用经历集合
+     */
+    public List<TElecCompRecord> selectTElecCompRecordList(TElecCompRecord tElecCompRecord);
+
+    /**
+     * 新增元器件使用经历
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 结果
+     */
+    public int insertTElecCompRecord(TElecCompRecord tElecCompRecord);
+
+    /**
+     * 修改元器件使用经历
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 结果
+     */
+    public int updateTElecCompRecord(TElecCompRecord tElecCompRecord);
+
+    /**
+     * 批量删除元器件使用经历
+     * 
+     * @param ids 需要删除的元器件使用经历主键集合
+     * @return 结果
+     */
+    public int deleteTElecCompRecordByIds(Long[] ids);
+
+    /**
+     * 删除元器件使用经历信息
+     * 
+     * @param id 元器件使用经历主键
+     * @return 结果
+     */
+    public int deleteTElecCompRecordById(Long id);
+
+    public List<UseInfofromRecord> getBycomponentId(Long componentId);
+}

+ 61 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITElectronComponentService.java

@@ -0,0 +1,61 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TElectronComponent;
+
+/**
+ * 元器件Service接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface ITElectronComponentService 
+{
+    /**
+     * 查询元器件
+     * 
+     * @param id 元器件主键
+     * @return 元器件
+     */
+    public TElectronComponent selectTElectronComponentById(Long id);
+
+    /**
+     * 查询元器件列表
+     * 
+     * @param tElectronComponent 元器件
+     * @return 元器件集合
+     */
+    public List<TElectronComponent> selectTElectronComponentList(TElectronComponent tElectronComponent);
+
+    /**
+     * 新增元器件
+     * 
+     * @param tElectronComponent 元器件
+     * @return 结果
+     */
+    public int insertTElectronComponent(TElectronComponent tElectronComponent);
+
+    /**
+     * 修改元器件
+     * 
+     * @param tElectronComponent 元器件
+     * @return 结果
+     */
+    public int updateTElectronComponent(TElectronComponent tElectronComponent);
+
+    /**
+     * 批量删除元器件
+     * 
+     * @param ids 需要删除的元器件主键集合
+     * @return 结果
+     */
+    public int deleteTElectronComponentByIds(Long[] ids);
+
+    /**
+     * 删除元器件信息
+     * 
+     * @param id 元器件主键
+     * @return 结果
+     */
+    public int deleteTElectronComponentById(Long id);
+}

+ 61 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITEvaluationService.java

@@ -0,0 +1,61 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TEvaluation;
+
+/**
+ * 评价Service接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface ITEvaluationService 
+{
+    /**
+     * 查询评价
+     * 
+     * @param id 评价主键
+     * @return 评价
+     */
+    public TEvaluation selectTEvaluationById(Long id);
+
+    /**
+     * 查询评价列表
+     * 
+     * @param tEvaluation 评价
+     * @return 评价集合
+     */
+    public List<TEvaluation> selectTEvaluationList(TEvaluation tEvaluation);
+
+    /**
+     * 新增评价
+     * 
+     * @param tEvaluation 评价
+     * @return 结果
+     */
+    public int insertTEvaluation(TEvaluation tEvaluation);
+
+    /**
+     * 修改评价
+     * 
+     * @param tEvaluation 评价
+     * @return 结果
+     */
+    public int updateTEvaluation(TEvaluation tEvaluation);
+
+    /**
+     * 批量删除评价
+     * 
+     * @param ids 需要删除的评价主键集合
+     * @return 结果
+     */
+    public int deleteTEvaluationByIds(Long[] ids);
+
+    /**
+     * 删除评价信息
+     * 
+     * @param id 评价主键
+     * @return 结果
+     */
+    public int deleteTEvaluationById(Long id);
+}

+ 61 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITPageViewTimeService.java

@@ -0,0 +1,61 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TPageViewTime;
+
+/**
+ * 页面浏览时长Service接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface ITPageViewTimeService 
+{
+    /**
+     * 查询页面浏览时长
+     * 
+     * @param id 页面浏览时长主键
+     * @return 页面浏览时长
+     */
+    public TPageViewTime selectTPageViewTimeById(Long id);
+
+    /**
+     * 查询页面浏览时长列表
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 页面浏览时长集合
+     */
+    public List<TPageViewTime> selectTPageViewTimeList(TPageViewTime tPageViewTime);
+
+    /**
+     * 新增页面浏览时长
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 结果
+     */
+    public int insertTPageViewTime(TPageViewTime tPageViewTime);
+
+    /**
+     * 修改页面浏览时长
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 结果
+     */
+    public int updateTPageViewTime(TPageViewTime tPageViewTime);
+
+    /**
+     * 批量删除页面浏览时长
+     * 
+     * @param ids 需要删除的页面浏览时长主键集合
+     * @return 结果
+     */
+    public int deleteTPageViewTimeByIds(Long[] ids);
+
+    /**
+     * 删除页面浏览时长信息
+     * 
+     * @param id 页面浏览时长主键
+     * @return 结果
+     */
+    public int deleteTPageViewTimeById(Long id);
+}

+ 63 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITVerificationTaskDetailService.java

@@ -0,0 +1,63 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TVerificationTaskDetail;
+
+/**
+ * 验证任务详情Service接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface ITVerificationTaskDetailService 
+{
+    /**
+     * 查询验证任务详情
+     * 
+     * @param id 验证任务详情主键
+     * @return 验证任务详情
+     */
+    public TVerificationTaskDetail selectTVerificationTaskDetailById(Long id);
+
+    /**
+     * 查询验证任务详情列表
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 验证任务详情集合
+     */
+    public List<TVerificationTaskDetail> selectTVerificationTaskDetailList(TVerificationTaskDetail tVerificationTaskDetail);
+
+    /**
+     * 新增验证任务详情
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 结果
+     */
+    public int insertTVerificationTaskDetail(TVerificationTaskDetail tVerificationTaskDetail);
+
+    /**
+     * 修改验证任务详情
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 结果
+     */
+    public int updateTVerificationTaskDetail(TVerificationTaskDetail tVerificationTaskDetail);
+
+    /**
+     * 批量删除验证任务详情
+     * 
+     * @param ids 需要删除的验证任务详情主键集合
+     * @return 结果
+     */
+    public int deleteTVerificationTaskDetailByIds(Long[] ids);
+
+    /**
+     * 删除验证任务详情信息
+     * 
+     * @param id 验证任务详情主键
+     * @return 结果
+     */
+    public int deleteTVerificationTaskDetailById(Long id);
+
+    public String importTaskDetail(List<TVerificationTaskDetail> taskDetailList, boolean updateSupport, String operName);
+}

+ 63 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITVerificationTaskService.java

@@ -0,0 +1,63 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TVerificationTask;
+
+/**
+ * 验证任务Service接口
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+public interface ITVerificationTaskService 
+{
+    /**
+     * 查询验证任务
+     * 
+     * @param id 验证任务主键
+     * @return 验证任务
+     */
+    public TVerificationTask selectTVerificationTaskById(Long id);
+
+    /**
+     * 查询验证任务列表
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 验证任务集合
+     */
+    public List<TVerificationTask> selectTVerificationTaskList(TVerificationTask tVerificationTask);
+
+    /**
+     * 新增验证任务
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 结果
+     */
+    public int insertTVerificationTask(TVerificationTask tVerificationTask);
+
+    /**
+     * 修改验证任务
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 结果
+     */
+    public int updateTVerificationTask(TVerificationTask tVerificationTask);
+
+    /**
+     * 批量删除验证任务
+     * 
+     * @param ids 需要删除的验证任务主键集合
+     * @return 结果
+     */
+    public int deleteTVerificationTaskByIds(Long[] ids);
+
+    /**
+     * 删除验证任务信息
+     * 
+     * @param id 验证任务主键
+     * @return 结果
+     */
+    public int deleteTVerificationTaskById(Long id);
+
+    public String importTask(List<TVerificationTask> taskList, boolean updateSupport, String operName);
+}

+ 106 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TElecCompRecordServiceImpl.java

@@ -0,0 +1,106 @@
+package com.cirs.biz.service.impl;
+
+import java.util.List;
+
+import com.cirs.biz.domain.UseInfofromRecord;
+import com.cirs.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cirs.biz.mapper.TElecCompRecordMapper;
+import com.cirs.biz.domain.TElecCompRecord;
+import com.cirs.biz.service.ITElecCompRecordService;
+
+/**
+ * 元器件使用经历Service业务层处理
+ * 
+ * @author allen
+ * @date 2023-11-04
+ */
+@Service
+public class TElecCompRecordServiceImpl implements ITElecCompRecordService 
+{
+    @Autowired
+    private TElecCompRecordMapper tElecCompRecordMapper;
+
+    /**
+     * 查询元器件使用经历
+     * 
+     * @param id 元器件使用经历主键
+     * @return 元器件使用经历
+     */
+    @Override
+    public TElecCompRecord selectTElecCompRecordById(Long id)
+    {
+        return tElecCompRecordMapper.selectTElecCompRecordById(id);
+    }
+
+    /**
+     * 查询元器件使用经历列表
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 元器件使用经历
+     */
+    @Override
+    public List<TElecCompRecord> selectTElecCompRecordList(TElecCompRecord tElecCompRecord)
+    {
+        return tElecCompRecordMapper.selectTElecCompRecordList(tElecCompRecord);
+    }
+
+    /**
+     * 新增元器件使用经历
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 结果
+     */
+    @Override
+    public int insertTElecCompRecord(TElecCompRecord tElecCompRecord)
+    {
+        tElecCompRecord.setCreateTime(DateUtils.getNowDate());
+        return tElecCompRecordMapper.insertTElecCompRecord(tElecCompRecord);
+    }
+
+    /**
+     * 修改元器件使用经历
+     * 
+     * @param tElecCompRecord 元器件使用经历
+     * @return 结果
+     */
+    @Override
+    public int updateTElecCompRecord(TElecCompRecord tElecCompRecord)
+    {
+        tElecCompRecord.setUpdateTime(DateUtils.getNowDate());
+        return tElecCompRecordMapper.updateTElecCompRecord(tElecCompRecord);
+    }
+
+    /**
+     * 批量删除元器件使用经历
+     * 
+     * @param ids 需要删除的元器件使用经历主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTElecCompRecordByIds(Long[] ids)
+    {
+        return tElecCompRecordMapper.deleteTElecCompRecordByIds(ids);
+    }
+
+    /**
+     * 删除元器件使用经历信息
+     * 
+     * @param id 元器件使用经历主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTElecCompRecordById(Long id)
+    {
+        return tElecCompRecordMapper.deleteTElecCompRecordById(id);
+    }
+
+    /**
+     * 利用元器件编号获取元器件使用场景和使用日期 wangruilin
+     */
+    @Override
+    public List<UseInfofromRecord> getBycomponentId(Long componentId) {
+        return tElecCompRecordMapper.getBycomponentId(componentId);
+    }
+}

+ 96 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TElectronComponentServiceImpl.java

@@ -0,0 +1,96 @@
+package com.cirs.biz.service.impl;
+
+import java.util.List;
+import com.cirs.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cirs.biz.mapper.TElectronComponentMapper;
+import com.cirs.biz.domain.TElectronComponent;
+import com.cirs.biz.service.ITElectronComponentService;
+
+/**
+ * 元器件Service业务层处理
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@Service
+public class TElectronComponentServiceImpl implements ITElectronComponentService 
+{
+    @Autowired
+    private TElectronComponentMapper tElectronComponentMapper;
+
+    /**
+     * 查询元器件
+     * 
+     * @param id 元器件主键
+     * @return 元器件
+     */
+    @Override
+    public TElectronComponent selectTElectronComponentById(Long id)
+    {
+        return tElectronComponentMapper.selectTElectronComponentById(id);
+    }
+
+    /**
+     * 查询元器件列表
+     * 
+     * @param tElectronComponent 元器件
+     * @return 元器件
+     */
+    @Override
+    public List<TElectronComponent> selectTElectronComponentList(TElectronComponent tElectronComponent)
+    {
+        return tElectronComponentMapper.selectTElectronComponentList(tElectronComponent);
+    }
+
+    /**
+     * 新增元器件
+     * 
+     * @param tElectronComponent 元器件
+     * @return 结果
+     */
+    @Override
+    public int insertTElectronComponent(TElectronComponent tElectronComponent)
+    {
+        tElectronComponent.setCreateTime(DateUtils.getNowDate());
+        return tElectronComponentMapper.insertTElectronComponent(tElectronComponent);
+    }
+
+    /**
+     * 修改元器件
+     * 
+     * @param tElectronComponent 元器件
+     * @return 结果
+     */
+    @Override
+    public int updateTElectronComponent(TElectronComponent tElectronComponent)
+    {
+        tElectronComponent.setUpdateTime(DateUtils.getNowDate());
+        return tElectronComponentMapper.updateTElectronComponent(tElectronComponent);
+    }
+
+    /**
+     * 批量删除元器件
+     * 
+     * @param ids 需要删除的元器件主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTElectronComponentByIds(Long[] ids)
+    {
+        return tElectronComponentMapper.deleteTElectronComponentByIds(ids);
+    }
+
+    /**
+     * 删除元器件信息
+     * 
+     * @param id 元器件主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTElectronComponentById(Long id)
+    {
+        return tElectronComponentMapper.deleteTElectronComponentById(id);
+    }
+}

+ 96 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TEvaluationServiceImpl.java

@@ -0,0 +1,96 @@
+package com.cirs.biz.service.impl;
+
+import java.util.List;
+import com.cirs.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cirs.biz.mapper.TEvaluationMapper;
+import com.cirs.biz.domain.TEvaluation;
+import com.cirs.biz.service.ITEvaluationService;
+
+/**
+ * 评价Service业务层处理
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@Service
+public class TEvaluationServiceImpl implements ITEvaluationService 
+{
+    @Autowired
+    private TEvaluationMapper tEvaluationMapper;
+
+    /**
+     * 查询评价
+     * 
+     * @param id 评价主键
+     * @return 评价
+     */
+    @Override
+    public TEvaluation selectTEvaluationById(Long id)
+    {
+        return tEvaluationMapper.selectTEvaluationById(id);
+    }
+
+    /**
+     * 查询评价列表
+     * 
+     * @param tEvaluation 评价
+     * @return 评价
+     */
+    @Override
+    public List<TEvaluation> selectTEvaluationList(TEvaluation tEvaluation)
+    {
+        return tEvaluationMapper.selectTEvaluationList(tEvaluation);
+    }
+
+    /**
+     * 新增评价
+     * 
+     * @param tEvaluation 评价
+     * @return 结果
+     */
+    @Override
+    public int insertTEvaluation(TEvaluation tEvaluation)
+    {
+        tEvaluation.setCreateTime(DateUtils.getNowDate());
+        return tEvaluationMapper.insertTEvaluation(tEvaluation);
+    }
+
+    /**
+     * 修改评价
+     * 
+     * @param tEvaluation 评价
+     * @return 结果
+     */
+    @Override
+    public int updateTEvaluation(TEvaluation tEvaluation)
+    {
+        tEvaluation.setUpdateTime(DateUtils.getNowDate());
+        return tEvaluationMapper.updateTEvaluation(tEvaluation);
+    }
+
+    /**
+     * 批量删除评价
+     * 
+     * @param ids 需要删除的评价主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTEvaluationByIds(Long[] ids)
+    {
+        return tEvaluationMapper.deleteTEvaluationByIds(ids);
+    }
+
+    /**
+     * 删除评价信息
+     * 
+     * @param id 评价主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTEvaluationById(Long id)
+    {
+        return tEvaluationMapper.deleteTEvaluationById(id);
+    }
+}

+ 96 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TPageViewTimeServiceImpl.java

@@ -0,0 +1,96 @@
+package com.cirs.biz.service.impl;
+
+import java.util.List;
+import com.cirs.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cirs.biz.mapper.TPageViewTimeMapper;
+import com.cirs.biz.domain.TPageViewTime;
+import com.cirs.biz.service.ITPageViewTimeService;
+
+/**
+ * 页面浏览时长Service业务层处理
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@Service
+public class TPageViewTimeServiceImpl implements ITPageViewTimeService 
+{
+    @Autowired
+    private TPageViewTimeMapper tPageViewTimeMapper;
+
+    /**
+     * 查询页面浏览时长
+     * 
+     * @param id 页面浏览时长主键
+     * @return 页面浏览时长
+     */
+    @Override
+    public TPageViewTime selectTPageViewTimeById(Long id)
+    {
+        return tPageViewTimeMapper.selectTPageViewTimeById(id);
+    }
+
+    /**
+     * 查询页面浏览时长列表
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 页面浏览时长
+     */
+    @Override
+    public List<TPageViewTime> selectTPageViewTimeList(TPageViewTime tPageViewTime)
+    {
+        return tPageViewTimeMapper.selectTPageViewTimeList(tPageViewTime);
+    }
+
+    /**
+     * 新增页面浏览时长
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 结果
+     */
+    @Override
+    public int insertTPageViewTime(TPageViewTime tPageViewTime)
+    {
+        tPageViewTime.setCreateTime(DateUtils.getNowDate());
+        return tPageViewTimeMapper.insertTPageViewTime(tPageViewTime);
+    }
+
+    /**
+     * 修改页面浏览时长
+     * 
+     * @param tPageViewTime 页面浏览时长
+     * @return 结果
+     */
+    @Override
+    public int updateTPageViewTime(TPageViewTime tPageViewTime)
+    {
+        tPageViewTime.setUpdateTime(DateUtils.getNowDate());
+        return tPageViewTimeMapper.updateTPageViewTime(tPageViewTime);
+    }
+
+    /**
+     * 批量删除页面浏览时长
+     * 
+     * @param ids 需要删除的页面浏览时长主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTPageViewTimeByIds(Long[] ids)
+    {
+        return tPageViewTimeMapper.deleteTPageViewTimeByIds(ids);
+    }
+
+    /**
+     * 删除页面浏览时长信息
+     * 
+     * @param id 页面浏览时长主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTPageViewTimeById(Long id)
+    {
+        return tPageViewTimeMapper.deleteTPageViewTimeById(id);
+    }
+}

+ 153 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TVerificationTaskDetailServiceImpl.java

@@ -0,0 +1,153 @@
+package com.cirs.biz.service.impl;
+
+import java.util.List;
+
+import com.cirs.biz.domain.TVerificationTask;
+import com.cirs.common.exception.ServiceException;
+import com.cirs.common.utils.DateUtils;
+import com.cirs.common.utils.StringUtils;
+import com.cirs.common.utils.bean.BeanValidators;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cirs.biz.mapper.TVerificationTaskDetailMapper;
+import com.cirs.biz.domain.TVerificationTaskDetail;
+import com.cirs.biz.service.ITVerificationTaskDetailService;
+
+import javax.validation.Validator;
+
+/**
+ * 验证任务详情Service业务层处理
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@Service
+public class TVerificationTaskDetailServiceImpl implements ITVerificationTaskDetailService 
+{
+    private static final Logger log = LoggerFactory.getLogger(TVerificationTaskDetailServiceImpl.class);
+
+    @Autowired
+    private TVerificationTaskDetailMapper tVerificationTaskDetailMapper;
+
+    @Autowired
+    protected Validator validator;
+
+    /**
+     * 查询验证任务详情
+     * 
+     * @param id 验证任务详情主键
+     * @return 验证任务详情
+     */
+    @Override
+    public TVerificationTaskDetail selectTVerificationTaskDetailById(Long id)
+    {
+        return tVerificationTaskDetailMapper.selectTVerificationTaskDetailById(id);
+    }
+
+    /**
+     * 查询验证任务详情列表
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 验证任务详情
+     */
+    @Override
+    public List<TVerificationTaskDetail> selectTVerificationTaskDetailList(TVerificationTaskDetail tVerificationTaskDetail)
+    {
+        return tVerificationTaskDetailMapper.selectTVerificationTaskDetailList(tVerificationTaskDetail);
+    }
+
+    /**
+     * 新增验证任务详情
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 结果
+     */
+    @Override
+    public int insertTVerificationTaskDetail(TVerificationTaskDetail tVerificationTaskDetail)
+    {
+        tVerificationTaskDetail.setCreateTime(DateUtils.getNowDate());
+        return tVerificationTaskDetailMapper.insertTVerificationTaskDetail(tVerificationTaskDetail);
+    }
+
+    /**
+     * 修改验证任务详情
+     * 
+     * @param tVerificationTaskDetail 验证任务详情
+     * @return 结果
+     */
+    @Override
+    public int updateTVerificationTaskDetail(TVerificationTaskDetail tVerificationTaskDetail)
+    {
+        tVerificationTaskDetail.setUpdateTime(DateUtils.getNowDate());
+        return tVerificationTaskDetailMapper.updateTVerificationTaskDetail(tVerificationTaskDetail);
+    }
+
+    /**
+     * 批量删除验证任务详情
+     * 
+     * @param ids 需要删除的验证任务详情主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTVerificationTaskDetailByIds(Long[] ids)
+    {
+        return tVerificationTaskDetailMapper.deleteTVerificationTaskDetailByIds(ids);
+    }
+
+    /**
+     * 删除验证任务详情信息
+     * 
+     * @param id 验证任务详情主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTVerificationTaskDetailById(Long id)
+    {
+        return tVerificationTaskDetailMapper.deleteTVerificationTaskDetailById(id);
+    }
+
+    @Override
+    public String importTaskDetail(List<TVerificationTaskDetail> taskDetailList, boolean updateSupport, String operName) {
+        if (StringUtils.isNull(taskDetailList) || taskDetailList.size() == 0)
+        {
+            throw new ServiceException("导入任务数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+
+        for (TVerificationTaskDetail taskDetail : taskDetailList)
+        {
+            try
+            {
+
+                BeanValidators.validateWithException(validator, taskDetail);
+                taskDetail.setCreateBy(operName);
+                tVerificationTaskDetailMapper.insertTVerificationTaskDetail(taskDetail);
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、任务 " + taskDetail.getTaskId() + " 详情导入成功");
+
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、任务 " + taskDetail.getTaskId() + " 详情导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0)
+        {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        }
+        else
+        {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+}

+ 152 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TVerificationTaskServiceImpl.java

@@ -0,0 +1,152 @@
+package com.cirs.biz.service.impl;
+
+import java.util.List;
+
+import com.cirs.common.core.domain.entity.SysUser;
+import com.cirs.common.exception.ServiceException;
+import com.cirs.common.utils.DateUtils;
+import com.cirs.common.utils.SecurityUtils;
+import com.cirs.common.utils.StringUtils;
+import com.cirs.common.utils.bean.BeanValidators;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cirs.biz.mapper.TVerificationTaskMapper;
+import com.cirs.biz.domain.TVerificationTask;
+import com.cirs.biz.service.ITVerificationTaskService;
+
+import javax.validation.Validator;
+
+/**
+ * 验证任务Service业务层处理
+ * 
+ * @author allen
+ * @date 2023-11-03
+ */
+@Service
+public class TVerificationTaskServiceImpl implements ITVerificationTaskService 
+{
+    private static final Logger log = LoggerFactory.getLogger(TVerificationTaskServiceImpl.class);
+    @Autowired
+    private TVerificationTaskMapper tVerificationTaskMapper;
+
+    @Autowired
+    protected Validator validator;
+    /**
+     * 查询验证任务
+     * 
+     * @param id 验证任务主键
+     * @return 验证任务
+     */
+    @Override
+    public TVerificationTask selectTVerificationTaskById(Long id)
+    {
+        return tVerificationTaskMapper.selectTVerificationTaskById(id);
+    }
+
+    /**
+     * 查询验证任务列表
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 验证任务
+     */
+    @Override
+    public List<TVerificationTask> selectTVerificationTaskList(TVerificationTask tVerificationTask)
+    {
+        return tVerificationTaskMapper.selectTVerificationTaskList(tVerificationTask);
+    }
+
+    /**
+     * 新增验证任务
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 结果
+     */
+    @Override
+    public int insertTVerificationTask(TVerificationTask tVerificationTask)
+    {
+        tVerificationTask.setCreateTime(DateUtils.getNowDate());
+        return tVerificationTaskMapper.insertTVerificationTask(tVerificationTask);
+    }
+
+    /**
+     * 修改验证任务
+     * 
+     * @param tVerificationTask 验证任务
+     * @return 结果
+     */
+    @Override
+    public int updateTVerificationTask(TVerificationTask tVerificationTask)
+    {
+        tVerificationTask.setUpdateTime(DateUtils.getNowDate());
+        return tVerificationTaskMapper.updateTVerificationTask(tVerificationTask);
+    }
+
+    /**
+     * 批量删除验证任务
+     * 
+     * @param ids 需要删除的验证任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTVerificationTaskByIds(Long[] ids)
+    {
+        return tVerificationTaskMapper.deleteTVerificationTaskByIds(ids);
+    }
+
+    /**
+     * 删除验证任务信息
+     * 
+     * @param id 验证任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTVerificationTaskById(Long id)
+    {
+        return tVerificationTaskMapper.deleteTVerificationTaskById(id);
+    }
+
+    @Override
+    public String importTask(List<TVerificationTask> taskList, boolean updateSupport, String operName){
+        if (StringUtils.isNull(taskList) || taskList.size() == 0)
+        {
+            throw new ServiceException("导入任务数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+
+        for (TVerificationTask task : taskList)
+        {
+            try
+            {
+
+                BeanValidators.validateWithException(validator, task);
+                task.setCreateBy(operName);
+                tVerificationTaskMapper.insertTVerificationTask(task);
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、任务 " + task.getTaskName() + " 导入成功");
+
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、任务 " + task.getTaskName() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0)
+        {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        }
+        else
+        {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+}

+ 19 - 0
cirs-biz/src/main/resources/mapper/biz/RecommendInfoMapper.xml

@@ -0,0 +1,19 @@
+<?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="com.cirs.biz.mapper.RecommendInfoMapper">
+
+    <resultMap type="com.cirs.biz.domain.RecommendInfo" id="RecommendInfoResult">
+        <result property="id"    column="id"    />
+        <result property="componentName"    column="component_name"    />
+        <result property="componentModel"    column="component_model"    />
+        <result property="replaceDomesticModel"    column="replace_domestic_model"    />
+
+    </resultMap>
+    <select id="RecommendQueryList" resultMap="RecommendInfoResult">
+        select id,component_model,component_name,replace_domestic_model
+            from t_electron_component
+
+    </select>
+</mapper>

+ 97 - 0
cirs-biz/src/main/resources/mapper/biz/TElecCompRecordMapper.xml

@@ -0,0 +1,97 @@
+<?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="com.cirs.biz.mapper.TElecCompRecordMapper">
+    
+    <resultMap type="TElecCompRecord" id="TElecCompRecordResult">
+        <result property="id"    column="id"    />
+        <result property="componentId"    column="component_id"    />
+        <result property="usedBy"    column="used_by"    />
+        <result property="usedDate"    column="used_date"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+    <resultMap id="UseInfofromRecordResult" type="UseInfofromRecord">
+        <result property="usedBy"    column="used_by"    />
+        <result property="usedDate"    column="used_date"    />
+
+    </resultMap>
+    <sql id="selectTElecCompRecordVo">
+        select id, component_id, used_by, used_date, create_by, create_time, update_by, update_time, remark from t_elec_comp_record
+    </sql>
+
+    <select id="selectTElecCompRecordList" parameterType="TElecCompRecord" resultMap="TElecCompRecordResult">
+        <include refid="selectTElecCompRecordVo"/>
+        <where>  
+            <if test="componentId != null  and componentId != ''"> and component_id = #{componentId}</if>
+            <if test="usedBy != null  and usedBy != ''"> and used_by = #{usedBy}</if>
+            <if test="usedDate != null "> and used_date = #{usedDate}</if>
+        </where>
+    </select>
+    
+    <select id="selectTElecCompRecordById" parameterType="Long" resultMap="TElecCompRecordResult">
+        <include refid="selectTElecCompRecordVo"/>
+        where id = #{id}
+    </select>
+    <select id="getBycomponentId" resultType="com.cirs.biz.domain.UseInfofromRecord" resultMap="UseInfofromRecordResult">
+        select used_by,used_date from t_elec_comp_record
+            <where>
+                component_id = #{componentId}
+            </where>
+
+    </select>
+
+    <insert id="insertTElecCompRecord" parameterType="TElecCompRecord" useGeneratedKeys="true" keyProperty="id">
+        insert into t_elec_comp_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="componentId != null">component_id,</if>
+            <if test="usedBy != null">used_by,</if>
+            <if test="usedDate != null">used_date,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="componentId != null">#{componentId},</if>
+            <if test="usedBy != null">#{usedBy},</if>
+            <if test="usedDate != null">#{usedDate},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTElecCompRecord" parameterType="TElecCompRecord">
+        update t_elec_comp_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="componentId != null">component_id = #{componentId},</if>
+            <if test="usedBy != null">used_by = #{usedBy},</if>
+            <if test="usedDate != null">used_date = #{usedDate},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTElecCompRecordById" parameterType="Long">
+        delete from t_elec_comp_record where id = #{id}
+    </delete>
+
+    <delete id="deleteTElecCompRecordByIds" parameterType="String">
+        delete from t_elec_comp_record where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 216 - 0
cirs-biz/src/main/resources/mapper/biz/TElectronComponentMapper.xml

@@ -0,0 +1,216 @@
+<?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="com.cirs.biz.mapper.TElectronComponentMapper">
+    
+    <resultMap type="TElectronComponent" id="TElectronComponentResult">
+        <result property="id"    column="id"    />
+        <result property="componentName"    column="component_name"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="componentModel"    column="component_model"    />
+        <result property="replaceDomesticModel"    column="replace_domestic_model"    />
+        <result property="qualityGrade"    column="quality_grade"    />
+        <result property="deliveryCycle"    column="delivery_cycle"    />
+        <result property="supplyQuantity"    column="supply_quantity"    />
+        <result property="unitPrice"    column="unit_price"    />
+        <result property="zzkkLevel"    column="zzkk_level"    />
+        <result property="inPreference"    column="in_preference"    />
+        <result property="shutdownDate"    column="shutdown_date"    />
+        <result property="encapsulationMode"    column="encapsulation_mode"    />
+        <result property="paramIfm"    column="param_ifm"    />
+        <result property="paramVrrm"    column="param_vrrm"    />
+        <result property="paramIfsm"    column="param_ifsm"    />
+        <result property="paramZz"    column="param_zz"    />
+        <result property="paramPcm"    column="param_pcm"    />
+        <result property="paramIcm"    column="param_icm"    />
+        <result property="paramVcbo"    column="param_vcbo"    />
+        <result property="paramVceo"    column="param_vceo"    />
+        <result property="paramVebo"    column="param_vebo"    />
+        <result property="paramVdss"    column="param_vdss"    />
+        <result property="paramId"    column="param_id"    />
+        <result property="paramRdsOn"    column="param_RDS_on"    />
+        <result property="antistaticCapacity"    column="antistatic_capacity"    />
+        <result property="radiationResistance"    column="radiation_resistance"    />
+        <result property="materials"    column="materials"    />
+        <result property="craft"    column="craft"    />
+        <result property="weight"    column="weight"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectTElectronComponentVo">
+        select id, component_name, manufacturer, component_model, replace_domestic_model, quality_grade, delivery_cycle, supply_quantity, unit_price, zzkk_level, in_preference, shutdown_date, encapsulation_mode, param_ifm, param_vrrm, param_ifsm, param_zz, param_pcm, param_icm, param_vcbo, param_vceo, param_vebo, param_vdss, param_id, param_RDS_on, antistatic_capacity, radiation_resistance, materials, craft, weight, create_by, create_time, update_by, update_time, remark from t_electron_component
+    </sql>
+
+    <select id="selectTElectronComponentList" parameterType="TElectronComponent" resultMap="TElectronComponentResult">
+        <include refid="selectTElectronComponentVo"/>
+        <where>  
+            <if test="componentName != null  and componentName != ''"> and component_name like concat('%', #{componentName}, '%')</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer = #{manufacturer}</if>
+            <if test="componentModel != null  and componentModel != ''"> and component_model = #{componentModel}</if>
+            <if test="replaceDomesticModel != null  and replaceDomesticModel != ''"> and replace_domestic_model = #{replaceDomesticModel}</if>
+            <if test="qualityGrade != null  and qualityGrade != ''"> and quality_grade = #{qualityGrade}</if>
+            <if test="deliveryCycle != null "> and delivery_cycle = #{deliveryCycle}</if>
+            <if test="supplyQuantity != null "> and supply_quantity = #{supplyQuantity}</if>
+            <if test="unitPrice != null "> and unit_price = #{unitPrice}</if>
+            <if test="zzkkLevel != null  and zzkkLevel != ''"> and zzkk_level = #{zzkkLevel}</if>
+            <if test="inPreference != null  and inPreference != ''"> and in_preference = #{inPreference}</if>
+            <if test="shutdownDate != null "> and shutdown_date = #{shutdownDate}</if>
+            <if test="encapsulationMode != null  and encapsulationMode != ''"> and encapsulation_mode = #{encapsulationMode}</if>
+            <if test="paramIfm != null "> and param_ifm = #{paramIfm}</if>
+            <if test="paramVrrm != null "> and param_vrrm = #{paramVrrm}</if>
+            <if test="paramIfsm != null "> and param_ifsm = #{paramIfsm}</if>
+            <if test="paramZz != null "> and param_zz = #{paramZz}</if>
+            <if test="paramPcm != null "> and param_pcm = #{paramPcm}</if>
+            <if test="paramIcm != null "> and param_icm = #{paramIcm}</if>
+            <if test="paramVcbo != null "> and param_vcbo = #{paramVcbo}</if>
+            <if test="paramVceo != null "> and param_vceo = #{paramVceo}</if>
+            <if test="paramVebo != null "> and param_vebo = #{paramVebo}</if>
+            <if test="paramVdss != null "> and param_vdss = #{paramVdss}</if>
+            <if test="paramId != null "> and param_id = #{paramId}</if>
+            <if test="paramRdsOn != null "> and param_RDS_on = #{paramRdsOn}</if>
+            <if test="antistaticCapacity != null  and antistaticCapacity != ''"> and antistatic_capacity = #{antistaticCapacity}</if>
+            <if test="radiationResistance != null  and radiationResistance != ''"> and radiation_resistance = #{radiationResistance}</if>
+            <if test="materials != null  and materials != ''"> and materials = #{materials}</if>
+            <if test="craft != null  and craft != ''"> and craft = #{craft}</if>
+            <if test="weight != null  and weight != ''"> and weight = #{weight}</if>
+        </where>
+    </select>
+    
+    <select id="selectTElectronComponentById" parameterType="Long" resultMap="TElectronComponentResult">
+        <include refid="selectTElectronComponentVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTElectronComponent" parameterType="TElectronComponent" useGeneratedKeys="true" keyProperty="id">
+        insert into t_electron_component
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="componentName != null">component_name,</if>
+            <if test="manufacturer != null">manufacturer,</if>
+            <if test="componentModel != null">component_model,</if>
+            <if test="replaceDomesticModel != null">replace_domestic_model,</if>
+            <if test="qualityGrade != null">quality_grade,</if>
+            <if test="deliveryCycle != null">delivery_cycle,</if>
+            <if test="supplyQuantity != null">supply_quantity,</if>
+            <if test="unitPrice != null">unit_price,</if>
+            <if test="zzkkLevel != null">zzkk_level,</if>
+            <if test="inPreference != null">in_preference,</if>
+            <if test="shutdownDate != null">shutdown_date,</if>
+            <if test="encapsulationMode != null">encapsulation_mode,</if>
+            <if test="paramIfm != null">param_ifm,</if>
+            <if test="paramVrrm != null">param_vrrm,</if>
+            <if test="paramIfsm != null">param_ifsm,</if>
+            <if test="paramZz != null">param_zz,</if>
+            <if test="paramPcm != null">param_pcm,</if>
+            <if test="paramIcm != null">param_icm,</if>
+            <if test="paramVcbo != null">param_vcbo,</if>
+            <if test="paramVceo != null">param_vceo,</if>
+            <if test="paramVebo != null">param_vebo,</if>
+            <if test="paramVdss != null">param_vdss,</if>
+            <if test="paramId != null">param_id,</if>
+            <if test="paramRdsOn != null">param_RDS_on,</if>
+            <if test="antistaticCapacity != null">antistatic_capacity,</if>
+            <if test="radiationResistance != null">radiation_resistance,</if>
+            <if test="materials != null">materials,</if>
+            <if test="craft != null">craft,</if>
+            <if test="weight != null">weight,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="componentName != null">#{componentName},</if>
+            <if test="manufacturer != null">#{manufacturer},</if>
+            <if test="componentModel != null">#{componentModel},</if>
+            <if test="replaceDomesticModel != null">#{replaceDomesticModel},</if>
+            <if test="qualityGrade != null">#{qualityGrade},</if>
+            <if test="deliveryCycle != null">#{deliveryCycle},</if>
+            <if test="supplyQuantity != null">#{supplyQuantity},</if>
+            <if test="unitPrice != null">#{unitPrice},</if>
+            <if test="zzkkLevel != null">#{zzkkLevel},</if>
+            <if test="inPreference != null">#{inPreference},</if>
+            <if test="shutdownDate != null">#{shutdownDate},</if>
+            <if test="encapsulationMode != null">#{encapsulationMode},</if>
+            <if test="paramIfm != null">#{paramIfm},</if>
+            <if test="paramVrrm != null">#{paramVrrm},</if>
+            <if test="paramIfsm != null">#{paramIfsm},</if>
+            <if test="paramZz != null">#{paramZz},</if>
+            <if test="paramPcm != null">#{paramPcm},</if>
+            <if test="paramIcm != null">#{paramIcm},</if>
+            <if test="paramVcbo != null">#{paramVcbo},</if>
+            <if test="paramVceo != null">#{paramVceo},</if>
+            <if test="paramVebo != null">#{paramVebo},</if>
+            <if test="paramVdss != null">#{paramVdss},</if>
+            <if test="paramId != null">#{paramId},</if>
+            <if test="paramRdsOn != null">#{paramRdsOn},</if>
+            <if test="antistaticCapacity != null">#{antistaticCapacity},</if>
+            <if test="radiationResistance != null">#{radiationResistance},</if>
+            <if test="materials != null">#{materials},</if>
+            <if test="craft != null">#{craft},</if>
+            <if test="weight != null">#{weight},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTElectronComponent" parameterType="TElectronComponent">
+        update t_electron_component
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="componentName != null">component_name = #{componentName},</if>
+            <if test="manufacturer != null">manufacturer = #{manufacturer},</if>
+            <if test="componentModel != null">component_model = #{componentModel},</if>
+            <if test="replaceDomesticModel != null">replace_domestic_model = #{replaceDomesticModel},</if>
+            <if test="qualityGrade != null">quality_grade = #{qualityGrade},</if>
+            <if test="deliveryCycle != null">delivery_cycle = #{deliveryCycle},</if>
+            <if test="supplyQuantity != null">supply_quantity = #{supplyQuantity},</if>
+            <if test="unitPrice != null">unit_price = #{unitPrice},</if>
+            <if test="zzkkLevel != null">zzkk_level = #{zzkkLevel},</if>
+            <if test="inPreference != null">in_preference = #{inPreference},</if>
+            <if test="shutdownDate != null">shutdown_date = #{shutdownDate},</if>
+            <if test="encapsulationMode != null">encapsulation_mode = #{encapsulationMode},</if>
+            <if test="paramIfm != null">param_ifm = #{paramIfm},</if>
+            <if test="paramVrrm != null">param_vrrm = #{paramVrrm},</if>
+            <if test="paramIfsm != null">param_ifsm = #{paramIfsm},</if>
+            <if test="paramZz != null">param_zz = #{paramZz},</if>
+            <if test="paramPcm != null">param_pcm = #{paramPcm},</if>
+            <if test="paramIcm != null">param_icm = #{paramIcm},</if>
+            <if test="paramVcbo != null">param_vcbo = #{paramVcbo},</if>
+            <if test="paramVceo != null">param_vceo = #{paramVceo},</if>
+            <if test="paramVebo != null">param_vebo = #{paramVebo},</if>
+            <if test="paramVdss != null">param_vdss = #{paramVdss},</if>
+            <if test="paramId != null">param_id = #{paramId},</if>
+            <if test="paramRdsOn != null">param_RDS_on = #{paramRdsOn},</if>
+            <if test="antistaticCapacity != null">antistatic_capacity = #{antistaticCapacity},</if>
+            <if test="radiationResistance != null">radiation_resistance = #{radiationResistance},</if>
+            <if test="materials != null">materials = #{materials},</if>
+            <if test="craft != null">craft = #{craft},</if>
+            <if test="weight != null">weight = #{weight},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTElectronComponentById" parameterType="Long">
+        delete from t_electron_component where id = #{id}
+    </delete>
+
+    <delete id="deleteTElectronComponentByIds" parameterType="String">
+        delete from t_electron_component where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 91 - 0
cirs-biz/src/main/resources/mapper/biz/TEvaluationMapper.xml

@@ -0,0 +1,91 @@
+<?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="com.cirs.biz.mapper.TEvaluationMapper">
+    
+    <resultMap type="TEvaluation" id="TEvaluationResult">
+        <result property="id"    column="id"    />
+        <result property="searchCondition"    column="search_condition"    />
+        <result property="componentId"    column="component_id"    />
+        <result property="mark"    column="mark"    />
+        <result property="usedBy"    column="used_by"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectTEvaluationVo">
+        select id, search_condition, component_id, mark, used_by, create_by, create_time, update_by, update_time, remark from t_evaluation
+    </sql>
+
+    <select id="selectTEvaluationList" parameterType="TEvaluation" resultMap="TEvaluationResult">
+        <include refid="selectTEvaluationVo"/>
+        <where>  
+            <if test="searchCondition != null  and searchCondition != ''"> and search_condition = #{searchCondition}</if>
+            <if test="componentId != null  and componentId != ''"> and component_id = #{componentId}</if>
+            <if test="mark != null "> and mark = #{mark}</if>
+            <if test="usedBy != null  and usedBy != ''"> and used_by = #{usedBy}</if>
+        </where>
+    </select>
+    
+    <select id="selectTEvaluationById" parameterType="Long" resultMap="TEvaluationResult">
+        <include refid="selectTEvaluationVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTEvaluation" parameterType="TEvaluation" useGeneratedKeys="true" keyProperty="id">
+        insert into t_evaluation
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="searchCondition != null">search_condition,</if>
+            <if test="componentId != null">component_id,</if>
+            <if test="mark != null">mark,</if>
+            <if test="usedBy != null">used_by,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="searchCondition != null">#{searchCondition},</if>
+            <if test="componentId != null">#{componentId},</if>
+            <if test="mark != null">#{mark},</if>
+            <if test="usedBy != null">#{usedBy},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTEvaluation" parameterType="TEvaluation">
+        update t_evaluation
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="searchCondition != null">search_condition = #{searchCondition},</if>
+            <if test="componentId != null">component_id = #{componentId},</if>
+            <if test="mark != null">mark = #{mark},</if>
+            <if test="usedBy != null">used_by = #{usedBy},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTEvaluationById" parameterType="Long">
+        delete from t_evaluation where id = #{id}
+    </delete>
+
+    <delete id="deleteTEvaluationByIds" parameterType="String">
+        delete from t_evaluation where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 86 - 0
cirs-biz/src/main/resources/mapper/biz/TPageViewTimeMapper.xml

@@ -0,0 +1,86 @@
+<?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="com.cirs.biz.mapper.TPageViewTimeMapper">
+    
+    <resultMap type="TPageViewTime" id="TPageViewTimeResult">
+        <result property="id"    column="id"    />
+        <result property="componentId"    column="component_id"    />
+        <result property="viewTime"    column="view_time"    />
+        <result property="usedBy"    column="used_by"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectTPageViewTimeVo">
+        select id, component_id, view_time, used_by, create_by, create_time, update_by, update_time, remark from t_page_view_time
+    </sql>
+
+    <select id="selectTPageViewTimeList" parameterType="TPageViewTime" resultMap="TPageViewTimeResult">
+        <include refid="selectTPageViewTimeVo"/>
+        <where>  
+            <if test="componentId != null  and componentId != ''"> and component_id = #{componentId}</if>
+            <if test="viewTime != null "> and view_time = #{viewTime}</if>
+            <if test="usedBy != null  and usedBy != ''"> and used_by = #{usedBy}</if>
+        </where>
+    </select>
+    
+    <select id="selectTPageViewTimeById" parameterType="Long" resultMap="TPageViewTimeResult">
+        <include refid="selectTPageViewTimeVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTPageViewTime" parameterType="TPageViewTime" useGeneratedKeys="true" keyProperty="id">
+        insert into t_page_view_time
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="componentId != null">component_id,</if>
+            <if test="viewTime != null">view_time,</if>
+            <if test="usedBy != null">used_by,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="componentId != null">#{componentId},</if>
+            <if test="viewTime != null">#{viewTime},</if>
+            <if test="usedBy != null">#{usedBy},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTPageViewTime" parameterType="TPageViewTime">
+        update t_page_view_time
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="componentId != null">component_id = #{componentId},</if>
+            <if test="viewTime != null">view_time = #{viewTime},</if>
+            <if test="usedBy != null">used_by = #{usedBy},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTPageViewTimeById" parameterType="Long">
+        delete from t_page_view_time where id = #{id}
+    </delete>
+
+    <delete id="deleteTPageViewTimeByIds" parameterType="String">
+        delete from t_page_view_time where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 126 - 0
cirs-biz/src/main/resources/mapper/biz/TVerificationTaskDetailMapper.xml

@@ -0,0 +1,126 @@
+<?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="com.cirs.biz.mapper.TVerificationTaskDetailMapper">
+    
+    <resultMap type="TVerificationTaskDetail" id="TVerificationTaskDetailResult">
+        <result property="id"    column="id"    />
+        <result property="taskId"    column="task_id"    />
+        <result property="searchCondition"    column="search_condition"    />
+        <result property="result1"    column="result1"    />
+        <result property="result2"    column="result2"    />
+        <result property="result3"    column="result3"    />
+        <result property="result4"    column="result4"    />
+        <result property="result5"    column="result5"    />
+        <result property="calculate1"    column="calculate1"    />
+        <result property="calculate2"    column="calculate2"    />
+        <result property="calculate3"    column="calculate3"    />
+        <result property="accuracy"    column="accuracy"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectTVerificationTaskDetailVo">
+        select id, task_id, search_condition, result1, result2, result3, result4, result5, calculate1, calculate2, calculate3, accuracy, create_by, create_time, update_by, update_time, remark from t_verification_task_detail
+    </sql>
+
+    <select id="selectTVerificationTaskDetailList" parameterType="TVerificationTaskDetail" resultMap="TVerificationTaskDetailResult">
+        <include refid="selectTVerificationTaskDetailVo"/>
+        <where>  
+            <if test="taskId != null  and taskId != ''"> and task_id = #{taskId}</if>
+            <if test="searchCondition != null  and searchCondition != ''"> and search_condition = #{searchCondition}</if>
+            <if test="result1 != null  and result1 != ''"> and result1 = #{result1}</if>
+            <if test="result2 != null  and result2 != ''"> and result2 = #{result2}</if>
+            <if test="result3 != null  and result3 != ''"> and result3 = #{result3}</if>
+            <if test="result4 != null  and result4 != ''"> and result4 = #{result4}</if>
+            <if test="result5 != null  and result5 != ''"> and result5 = #{result5}</if>
+            <if test="calculate1 != null  and calculate1 != ''"> and calculate1 = #{calculate1}</if>
+            <if test="calculate2 != null  and calculate2 != ''"> and calculate2 = #{calculate2}</if>
+            <if test="calculate3 != null  and calculate3 != ''"> and calculate3 = #{calculate3}</if>
+            <if test="accuracy != null  and accuracy != ''"> and accuracy = #{accuracy}</if>
+        </where>
+    </select>
+    
+    <select id="selectTVerificationTaskDetailById" parameterType="Long" resultMap="TVerificationTaskDetailResult">
+        <include refid="selectTVerificationTaskDetailVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTVerificationTaskDetail" parameterType="TVerificationTaskDetail" useGeneratedKeys="true" keyProperty="id">
+        insert into t_verification_task_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskId != null">task_id,</if>
+            <if test="searchCondition != null">search_condition,</if>
+            <if test="result1 != null">result1,</if>
+            <if test="result2 != null">result2,</if>
+            <if test="result3 != null">result3,</if>
+            <if test="result4 != null">result4,</if>
+            <if test="result5 != null">result5,</if>
+            <if test="calculate1 != null">calculate1,</if>
+            <if test="calculate2 != null">calculate2,</if>
+            <if test="calculate3 != null">calculate3,</if>
+            <if test="accuracy != null">accuracy,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskId != null">#{taskId},</if>
+            <if test="searchCondition != null">#{searchCondition},</if>
+            <if test="result1 != null">#{result1},</if>
+            <if test="result2 != null">#{result2},</if>
+            <if test="result3 != null">#{result3},</if>
+            <if test="result4 != null">#{result4},</if>
+            <if test="result5 != null">#{result5},</if>
+            <if test="calculate1 != null">#{calculate1},</if>
+            <if test="calculate2 != null">#{calculate2},</if>
+            <if test="calculate3 != null">#{calculate3},</if>
+            <if test="accuracy != null">#{accuracy},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTVerificationTaskDetail" parameterType="TVerificationTaskDetail">
+        update t_verification_task_detail
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskId != null">task_id = #{taskId},</if>
+            <if test="searchCondition != null">search_condition = #{searchCondition},</if>
+            <if test="result1 != null">result1 = #{result1},</if>
+            <if test="result2 != null">result2 = #{result2},</if>
+            <if test="result3 != null">result3 = #{result3},</if>
+            <if test="result4 != null">result4 = #{result4},</if>
+            <if test="result5 != null">result5 = #{result5},</if>
+            <if test="calculate1 != null">calculate1 = #{calculate1},</if>
+            <if test="calculate2 != null">calculate2 = #{calculate2},</if>
+            <if test="calculate3 != null">calculate3 = #{calculate3},</if>
+            <if test="accuracy != null">accuracy = #{accuracy},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTVerificationTaskDetailById" parameterType="Long">
+        delete from t_verification_task_detail where id = #{id}
+    </delete>
+
+    <delete id="deleteTVerificationTaskDetailByIds" parameterType="String">
+        delete from t_verification_task_detail where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 111 - 0
cirs-biz/src/main/resources/mapper/biz/TVerificationTaskMapper.xml

@@ -0,0 +1,111 @@
+<?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="com.cirs.biz.mapper.TVerificationTaskMapper">
+    
+    <resultMap type="TVerificationTask" id="TVerificationTaskResult">
+        <result property="id"    column="id"    />
+        <result property="taskName"    column="task_name"    />
+        <result property="taskStatus"    column="task_status"    />
+        <result property="subtaskNum"    column="subtask_num"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="endTime"    column="end_time"    />
+        <result property="progress"    column="progress"    />
+        <result property="accuracyRate"    column="accuracy_rate"    />
+        <result property="recallRate"    column="recall_rate"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectTVerificationTaskVo">
+        select id, task_name, task_status, subtask_num, start_time, end_time, progress, accuracy_rate, recall_rate, create_by, create_time, update_by, update_time, remark from t_verification_task
+    </sql>
+
+    <select id="selectTVerificationTaskList" parameterType="TVerificationTask" resultMap="TVerificationTaskResult">
+        <include refid="selectTVerificationTaskVo"/>
+        <where>  
+            <if test="taskName != null  and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
+            <if test="taskStatus != null  and taskStatus != ''"> and task_status = #{taskStatus}</if>
+            <if test="subtaskNum != null "> and subtask_num = #{subtaskNum}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="progress != null "> and progress = #{progress}</if>
+            <if test="accuracyRate != null  and accuracyRate != ''"> and accuracy_rate = #{accuracyRate}</if>
+            <if test="recallRate != null  and recallRate != ''"> and recall_rate = #{recallRate}</if>
+        </where>
+    </select>
+    
+    <select id="selectTVerificationTaskById" parameterType="Long" resultMap="TVerificationTaskResult">
+        <include refid="selectTVerificationTaskVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTVerificationTask" parameterType="TVerificationTask" useGeneratedKeys="true" keyProperty="id">
+        insert into t_verification_task
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">task_name,</if>
+            <if test="taskStatus != null">task_status,</if>
+            <if test="subtaskNum != null">subtask_num,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="endTime != null">end_time,</if>
+            <if test="progress != null">progress,</if>
+            <if test="accuracyRate != null">accuracy_rate,</if>
+            <if test="recallRate != null">recall_rate,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">#{taskName},</if>
+            <if test="taskStatus != null">#{taskStatus},</if>
+            <if test="subtaskNum != null">#{subtaskNum},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="endTime != null">#{endTime},</if>
+            <if test="progress != null">#{progress},</if>
+            <if test="accuracyRate != null">#{accuracyRate},</if>
+            <if test="recallRate != null">#{recallRate},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTVerificationTask" parameterType="TVerificationTask">
+        update t_verification_task
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskName != null">task_name = #{taskName},</if>
+            <if test="taskStatus != null">task_status = #{taskStatus},</if>
+            <if test="subtaskNum != null">subtask_num = #{subtaskNum},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="progress != null">progress = #{progress},</if>
+            <if test="accuracyRate != null">accuracy_rate = #{accuracyRate},</if>
+            <if test="recallRate != null">recall_rate = #{recallRate},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTVerificationTaskById" parameterType="Long">
+        delete from t_verification_task where id = #{id}
+    </delete>
+
+    <delete id="deleteTVerificationTaskByIds" parameterType="String">
+        delete from t_verification_task where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 1 - 1
cirs-ui/.env.development

@@ -5,7 +5,7 @@ VUE_APP_TITLE = 元器件智能推荐系统
 ENV = 'development'
 
 # 元器件智能推荐系统/开发环境
-VUE_APP_BASE_API = '/dev-api'
+VUE_APP_BASE_API = 'http://localhost:8080'
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 43 - 0
cirs-ui/src/api/biz/component.js

@@ -0,0 +1,43 @@
+import request from '@/utils/request'
+// 查询元器件列表
+export function listComponent(query) {
+  return request({
+    url: '/biz/component/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询元器件详细
+export function getComponent(id) {
+  return request({
+    url: '/biz/component/' + id,
+    method: 'get'
+  })
+}
+
+// 新增元器件
+export function addComponent(data) {
+  return request({
+    url: '/biz/component',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改元器件
+export function updateComponent(data) {
+  return request({
+    url: '/biz/component',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除元器件
+export function delComponent(id) {
+  return request({
+    url: '/biz/component/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
cirs-ui/src/api/biz/detail.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询验证任务详情列表
+export function listDetail(query) {
+  return request({
+    url: '/biz/detail/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询验证任务详情详细
+export function getDetail(id) {
+  return request({
+    url: '/biz/detail/' + id,
+    method: 'get'
+  })
+}
+
+// 新增验证任务详情
+export function addDetail(data) {
+  return request({
+    url: '/biz/detail',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改验证任务详情
+export function updateDetail(data) {
+  return request({
+    url: '/biz/detail',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除验证任务详情
+export function delDetail(id) {
+  return request({
+    url: '/biz/detail/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
cirs-ui/src/api/biz/evaluation.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询评价列表
+export function listEvaluation(query) {
+  return request({
+    url: '/biz/evaluation/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询评价详细
+export function getEvaluation(id) {
+  return request({
+    url: '/biz/evaluation/' + id,
+    method: 'get'
+  })
+}
+
+// 新增评价
+export function addEvaluation(data) {
+  return request({
+    url: '/biz/evaluation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改评价
+export function updateEvaluation(data) {
+  return request({
+    url: '/biz/evaluation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除评价
+export function delEvaluation(id) {
+  return request({
+    url: '/biz/evaluation/' + id,
+    method: 'delete'
+  })
+}

+ 45 - 0
cirs-ui/src/api/biz/recommend.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+// 查询元器件列表
+export function RecommendlistComponent(query) {
+  return request({
+    url: '/biz/component/recommend/querylist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询元器件详细
+export function getComponent(id) {
+  return request({
+    url: '/biz/component/' + id,
+    method: 'get'
+  })
+}
+
+
+//查询元器件的使用场景和使用日期
+export function getBycomponentId(componentId) {
+  return request({
+    url: '/biz/record/componentId/' + componentId,
+    method: 'get'
+  })
+}
+
+//新增一条评分
+export function addEvaluation(data) {
+  return request({
+    url: '/biz/evaluation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 新增元器件详情浏览时长记录
+export function addTime(data) {
+  return request({
+    url: '/biz/time',
+    method: 'post',
+    data: data
+  })
+}

+ 44 - 0
cirs-ui/src/api/biz/record.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询元器件使用经历列表
+export function listRecord(query) {
+  return request({
+    url: '/biz/record/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询元器件使用经历详细
+export function getRecord(id) {
+  return request({
+    url: '/biz/record/' + id,
+    method: 'get'
+  })
+}
+
+// 新增元器件使用经历
+export function addRecord(data) {
+  return request({
+    url: '/biz/record',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改元器件使用经历
+export function updateRecord(data) {
+  return request({
+    url: '/biz/record',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除元器件使用经历
+export function delRecord(id) {
+  return request({
+    url: '/biz/record/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
cirs-ui/src/api/biz/task.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询验证任务列表
+export function listTask(query) {
+  return request({
+    url: '/biz/task/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询验证任务详细
+export function getTask(id) {
+  return request({
+    url: '/biz/task/' + id,
+    method: 'get'
+  })
+}
+
+// 新增验证任务
+export function addTask(data) {
+  return request({
+    url: '/biz/task',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改验证任务
+export function updateTask(data) {
+  return request({
+    url: '/biz/task',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除验证任务
+export function delTask(id) {
+  return request({
+    url: '/biz/task/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
cirs-ui/src/api/biz/time.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询页面浏览时长列表
+export function listTime(query) {
+  return request({
+    url: '/biz/time/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询页面浏览时长详细
+export function getTime(id) {
+  return request({
+    url: '/biz/time/' + id,
+    method: 'get'
+  })
+}
+
+// 新增页面浏览时长
+export function addTime(data) {
+  return request({
+    url: '/biz/time',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改页面浏览时长
+export function updateTime(data) {
+  return request({
+    url: '/biz/time',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除页面浏览时长
+export function delTime(id) {
+  return request({
+    url: '/biz/time/' + id,
+    method: 'delete'
+  })
+}

BIN
cirs-ui/src/assets/images/R-C.jpg


+ 639 - 0
cirs-ui/src/views/biz/component/index.vue

@@ -0,0 +1,639 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="元器件名称" prop="componentName">
+        <el-input
+          v-model="queryParams.componentName"
+          placeholder="请输入元器件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="生产厂家" prop="manufacturer">
+        <el-input
+          v-model="queryParams.manufacturer"
+          placeholder="请输入生产厂家"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="型号规格" prop="componentModel">
+        <el-input
+          v-model="queryParams.componentModel"
+          placeholder="请输入型号规格"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="国产替代型号" prop="replaceDomesticModel">
+        <el-input
+          v-model="queryParams.replaceDomesticModel"
+          placeholder="请输入国产替代型号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="质量等级" prop="qualityGrade">
+        <el-input
+          v-model="queryParams.qualityGrade"
+          placeholder="请输入质量等级"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="供货周期" prop="deliveryCycle">
+        <el-input
+          v-model="queryParams.deliveryCycle"
+          placeholder="请输入供货周期"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="供货量(个/年)" prop="supplyQuantity">
+        <el-input
+          v-model="queryParams.supplyQuantity"
+          placeholder="请输入供货量(个/年)"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="价格" prop="unitPrice">
+        <el-input
+          v-model="queryParams.unitPrice"
+          placeholder="请输入价格"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="ZZKK等级" prop="zzkkLevel">
+        <el-input
+          v-model="queryParams.zzkkLevel"
+          placeholder="请输入ZZKK等级"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否在优选目录内" prop="inPreference">
+        <el-input
+          v-model="queryParams.inPreference"
+          placeholder="请输入是否在优选目录内"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="停产断档日期" prop="shutdownDate">
+        <el-date-picker clearable
+          v-model="queryParams.shutdownDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择停产断档日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="封装形式" prop="encapsulationMode">
+        <el-input
+          v-model="queryParams.encapsulationMode"
+          placeholder="请输入封装形式"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最大正向电流IFM" prop="paramIfm">
+        <el-input
+          v-model="queryParams.paramIfm"
+          placeholder="请输入最大正向电流IFM"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最大反向工作电压VRRM" prop="paramVrrm">
+        <el-input
+          v-model="queryParams.paramVrrm"
+          placeholder="请输入最大反向工作电压VRRM"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最大浪涌电流IFSM" prop="paramIfsm">
+        <el-input
+          v-model="queryParams.paramIfsm"
+          placeholder="请输入最大浪涌电流IFSM"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="稳压状态下的动态电阻ZZ" prop="paramZz">
+        <el-input
+          v-model="queryParams.paramZz"
+          placeholder="请输入稳压状态下的动态电阻ZZ"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最大额定功率PCM" prop="paramPcm">
+        <el-input
+          v-model="queryParams.paramPcm"
+          placeholder="请输入最大额定功率PCM"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最大集电极电流ICM" prop="paramIcm">
+        <el-input
+          v-model="queryParams.paramIcm"
+          placeholder="请输入最大集电极电流ICM"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最大集电极-基极电压VCBO" prop="paramVcbo">
+        <el-input
+          v-model="queryParams.paramVcbo"
+          placeholder="请输入最大集电极-基极电压VCBO"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="集电极-发射极电压VCEO" prop="paramVceo">
+        <el-input
+          v-model="queryParams.paramVceo"
+          placeholder="请输入集电极-发射极电压VCEO"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发射极-基极电压VEBO" prop="paramVebo">
+        <el-input
+          v-model="queryParams.paramVebo"
+          placeholder="请输入发射极-基极电压VEBO"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="漏源电压VDSS" prop="paramVdss">
+        <el-input
+          v-model="queryParams.paramVdss"
+          placeholder="请输入漏源电压VDSS"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="漏极直流电流ID" prop="paramId">
+        <el-input
+          v-model="queryParams.paramId"
+          placeholder="请输入漏极直流电流ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="漏-源通态电阻RDS(on)" prop="paramRdsOn">
+        <el-input
+          v-model="queryParams.paramRdsOn"
+          placeholder="请输入漏-源通态电阻RDS(on)"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="抗静电能力" prop="antistaticCapacity">
+        <el-input
+          v-model="queryParams.antistaticCapacity"
+          placeholder="请输入抗静电能力"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="抗辐照能力" prop="radiationResistance">
+        <el-input
+          v-model="queryParams.radiationResistance"
+          placeholder="请输入抗辐照能力"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="重量" prop="weight">
+        <el-input
+          v-model="queryParams.weight"
+          placeholder="请输入重量"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:component:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:component:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:component:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:component:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="componentList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="元器件名称" align="center" prop="componentName" />
+      <el-table-column label="生产厂家" align="center" prop="manufacturer" />
+      <el-table-column label="型号规格" align="center" prop="componentModel" />
+      <el-table-column label="国产替代型号" align="center" prop="replaceDomesticModel" />
+      <el-table-column label="质量等级" align="center" prop="qualityGrade" />
+      <el-table-column label="供货周期" align="center" prop="deliveryCycle" />
+      <el-table-column label="供货量(个/年)" align="center" prop="supplyQuantity" />
+      <el-table-column label="价格" align="center" prop="unitPrice" />
+      <el-table-column label="ZZKK等级" align="center" prop="zzkkLevel" />
+      <el-table-column label="是否在优选目录内" align="center" prop="inPreference" />
+      <el-table-column label="停产断档日期" align="center" prop="shutdownDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.shutdownDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="封装形式" align="center" prop="encapsulationMode" />
+      <el-table-column label="最大正向电流IFM" align="center" prop="paramIfm" />
+      <el-table-column label="最大反向工作电压VRRM" align="center" prop="paramVrrm" />
+      <el-table-column label="最大浪涌电流IFSM" align="center" prop="paramIfsm" />
+      <el-table-column label="稳压状态下的动态电阻ZZ" align="center" prop="paramZz" />
+      <el-table-column label="最大额定功率PCM" align="center" prop="paramPcm" />
+      <el-table-column label="最大集电极电流ICM" align="center" prop="paramIcm" />
+      <el-table-column label="最大集电极-基极电压VCBO" align="center" prop="paramVcbo" />
+      <el-table-column label="集电极-发射极电压VCEO" align="center" prop="paramVceo" />
+      <el-table-column label="发射极-基极电压VEBO" align="center" prop="paramVebo" />
+      <el-table-column label="漏源电压VDSS" align="center" prop="paramVdss" />
+      <el-table-column label="漏极直流电流ID" align="center" prop="paramId" />
+      <el-table-column label="漏-源通态电阻RDS(on)" align="center" prop="paramRdsOn" />
+      <el-table-column label="抗静电能力" align="center" prop="antistaticCapacity" />
+      <el-table-column label="抗辐照能力" align="center" prop="radiationResistance" />
+      <el-table-column label="材料" align="center" prop="materials" />
+      <el-table-column label="工艺" align="center" prop="craft" />
+      <el-table-column label="重量" align="center" prop="weight" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:component:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:component:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改元器件对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="元器件名称" prop="componentName">
+          <el-input v-model="form.componentName" placeholder="请输入元器件名称" />
+        </el-form-item>
+        <el-form-item label="生产厂家" prop="manufacturer">
+          <el-input v-model="form.manufacturer" placeholder="请输入生产厂家" />
+        </el-form-item>
+        <el-form-item label="型号规格" prop="componentModel">
+          <el-input v-model="form.componentModel" placeholder="请输入型号规格" />
+        </el-form-item>
+        <el-form-item label="国产替代型号" prop="replaceDomesticModel">
+          <el-input v-model="form.replaceDomesticModel" placeholder="请输入国产替代型号" />
+        </el-form-item>
+        <el-form-item label="质量等级" prop="qualityGrade">
+          <el-input v-model="form.qualityGrade" placeholder="请输入质量等级" />
+        </el-form-item>
+        <el-form-item label="供货周期" prop="deliveryCycle">
+          <el-input v-model="form.deliveryCycle" placeholder="请输入供货周期" />
+        </el-form-item>
+        <el-form-item label="供货量(个/年)" prop="supplyQuantity">
+          <el-input v-model="form.supplyQuantity" placeholder="请输入供货量(个/年)" />
+        </el-form-item>
+        <el-form-item label="价格" prop="unitPrice">
+          <el-input v-model="form.unitPrice" placeholder="请输入价格" />
+        </el-form-item>
+        <el-form-item label="ZZKK等级" prop="zzkkLevel">
+          <el-input v-model="form.zzkkLevel" placeholder="请输入ZZKK等级" />
+        </el-form-item>
+        <el-form-item label="是否在优选目录内" prop="inPreference">
+          <el-input v-model="form.inPreference" placeholder="请输入是否在优选目录内" />
+        </el-form-item>
+        <el-form-item label="停产断档日期" prop="shutdownDate">
+          <el-date-picker clearable
+            v-model="form.shutdownDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择停产断档日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="封装形式" prop="encapsulationMode">
+          <el-input v-model="form.encapsulationMode" placeholder="请输入封装形式" />
+        </el-form-item>
+        <el-form-item label="最大正向电流IFM" prop="paramIfm">
+          <el-input v-model="form.paramIfm" placeholder="请输入最大正向电流IFM" />
+        </el-form-item>
+        <el-form-item label="最大反向工作电压VRRM" prop="paramVrrm">
+          <el-input v-model="form.paramVrrm" placeholder="请输入最大反向工作电压VRRM" />
+        </el-form-item>
+        <el-form-item label="最大浪涌电流IFSM" prop="paramIfsm">
+          <el-input v-model="form.paramIfsm" placeholder="请输入最大浪涌电流IFSM" />
+        </el-form-item>
+        <el-form-item label="稳压状态下的动态电阻ZZ" prop="paramZz">
+          <el-input v-model="form.paramZz" placeholder="请输入稳压状态下的动态电阻ZZ" />
+        </el-form-item>
+        <el-form-item label="最大额定功率PCM" prop="paramPcm">
+          <el-input v-model="form.paramPcm" placeholder="请输入最大额定功率PCM" />
+        </el-form-item>
+        <el-form-item label="最大集电极电流ICM" prop="paramIcm">
+          <el-input v-model="form.paramIcm" placeholder="请输入最大集电极电流ICM" />
+        </el-form-item>
+        <el-form-item label="最大集电极-基极电压VCBO" prop="paramVcbo">
+          <el-input v-model="form.paramVcbo" placeholder="请输入最大集电极-基极电压VCBO" />
+        </el-form-item>
+        <el-form-item label="集电极-发射极电压VCEO" prop="paramVceo">
+          <el-input v-model="form.paramVceo" placeholder="请输入集电极-发射极电压VCEO" />
+        </el-form-item>
+        <el-form-item label="发射极-基极电压VEBO" prop="paramVebo">
+          <el-input v-model="form.paramVebo" placeholder="请输入发射极-基极电压VEBO" />
+        </el-form-item>
+        <el-form-item label="漏源电压VDSS" prop="paramVdss">
+          <el-input v-model="form.paramVdss" placeholder="请输入漏源电压VDSS" />
+        </el-form-item>
+        <el-form-item label="漏极直流电流ID" prop="paramId">
+          <el-input v-model="form.paramId" placeholder="请输入漏极直流电流ID" />
+        </el-form-item>
+        <el-form-item label="漏-源通态电阻RDS(on)" prop="paramRdsOn">
+          <el-input v-model="form.paramRdsOn" placeholder="请输入漏-源通态电阻RDS(on)" />
+        </el-form-item>
+        <el-form-item label="抗静电能力" prop="antistaticCapacity">
+          <el-input v-model="form.antistaticCapacity" placeholder="请输入抗静电能力" />
+        </el-form-item>
+        <el-form-item label="抗辐照能力" prop="radiationResistance">
+          <el-input v-model="form.radiationResistance" placeholder="请输入抗辐照能力" />
+        </el-form-item>
+        <el-form-item label="材料" prop="materials">
+          <el-input v-model="form.materials" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="工艺" prop="craft">
+          <el-input v-model="form.craft" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="重量" prop="weight">
+          <el-input v-model="form.weight" placeholder="请输入重量" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listComponent, getComponent, delComponent, addComponent, updateComponent } from "@/api/biz/component";
+
+export default {
+  name: "Component",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 元器件表格数据
+      componentList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        componentName: null,
+        manufacturer: null,
+        componentModel: null,
+        replaceDomesticModel: null,
+        qualityGrade: null,
+        deliveryCycle: null,
+        supplyQuantity: null,
+        unitPrice: null,
+        zzkkLevel: null,
+        inPreference: null,
+        shutdownDate: null,
+        encapsulationMode: null,
+        paramIfm: null,
+        paramVrrm: null,
+        paramIfsm: null,
+        paramZz: null,
+        paramPcm: null,
+        paramIcm: null,
+        paramVcbo: null,
+        paramVceo: null,
+        paramVebo: null,
+        paramVdss: null,
+        paramId: null,
+        paramRdsOn: null,
+        antistaticCapacity: null,
+        radiationResistance: null,
+        materials: null,
+        craft: null,
+        weight: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询元器件列表 */
+    getList() {
+      this.loading = true;
+      listComponent(this.queryParams).then(response => {
+        this.componentList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        componentName: null,
+        manufacturer: null,
+        componentModel: null,
+        replaceDomesticModel: null,
+        qualityGrade: null,
+        deliveryCycle: null,
+        supplyQuantity: null,
+        unitPrice: null,
+        zzkkLevel: null,
+        inPreference: null,
+        shutdownDate: null,
+        encapsulationMode: null,
+        paramIfm: null,
+        paramVrrm: null,
+        paramIfsm: null,
+        paramZz: null,
+        paramPcm: null,
+        paramIcm: null,
+        paramVcbo: null,
+        paramVceo: null,
+        paramVebo: null,
+        paramVdss: null,
+        paramId: null,
+        paramRdsOn: null,
+        antistaticCapacity: null,
+        radiationResistance: null,
+        materials: null,
+        craft: null,
+        weight: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加元器件";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getComponent(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改元器件";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateComponent(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addComponent(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除元器件编号为"' + ids + '"的数据项?').then(function() {
+        return delComponent(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/component/export', {
+        ...this.queryParams
+      }, `component_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 466 - 0
cirs-ui/src/views/biz/detail/index.vue

@@ -0,0 +1,466 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="任务id" prop="taskId">
+        <el-input
+          v-model="queryParams.taskId"
+          placeholder="请输入任务id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="标准结果1" prop="result1">
+        <el-input
+          v-model="queryParams.result1"
+          placeholder="请输入标准结果1"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="标准结果2" prop="result2">
+        <el-input
+          v-model="queryParams.result2"
+          placeholder="请输入标准结果2"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="标准结果3" prop="result3">
+        <el-input
+          v-model="queryParams.result3"
+          placeholder="请输入标准结果3"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="标准结果4" prop="result4">
+        <el-input
+          v-model="queryParams.result4"
+          placeholder="请输入标准结果4"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="标准结果5" prop="result5">
+        <el-input
+          v-model="queryParams.result5"
+          placeholder="请输入标准结果5"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="计算结果1" prop="calculate1">
+        <el-input
+          v-model="queryParams.calculate1"
+          placeholder="请输入计算结果1"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="计算结果2" prop="calculate2">
+        <el-input
+          v-model="queryParams.calculate2"
+          placeholder="请输入计算结果2"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="计算结果3" prop="calculate3">
+        <el-input
+          v-model="queryParams.calculate3"
+          placeholder="请输入计算结果3"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="召回率" prop="accuracy">
+        <el-input
+          v-model="queryParams.accuracy"
+          placeholder="请输入召回率"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:detail:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:detail:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:detail:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['biz:detail:import']"
+        >导入</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:detail:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="detailList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="任务id" align="center" prop="taskId" />
+      <el-table-column label="查询条件" align="center" prop="searchCondition" />
+      <el-table-column label="标准结果1" align="center" prop="result1" />
+      <el-table-column label="标准结果2" align="center" prop="result2" />
+      <el-table-column label="标准结果3" align="center" prop="result3" />
+      <el-table-column label="标准结果4" align="center" prop="result4" />
+      <el-table-column label="标准结果5" align="center" prop="result5" />
+      <el-table-column label="计算结果1" align="center" prop="calculate1" />
+      <el-table-column label="计算结果2" align="center" prop="calculate2" />
+      <el-table-column label="计算结果3" align="center" prop="calculate3" />
+      <el-table-column label="召回率" align="center" prop="accuracy" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:detail:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:detail:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 任务详情导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 添加或修改验证任务详情对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="任务id" prop="taskId">
+          <el-input v-model="form.taskId" placeholder="请输入任务id" />
+        </el-form-item>
+        <el-form-item label="查询条件" prop="searchCondition">
+          <el-input v-model="form.searchCondition" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="标准结果1" prop="result1">
+          <el-input v-model="form.result1" placeholder="请输入标准结果1" />
+        </el-form-item>
+        <el-form-item label="标准结果2" prop="result2">
+          <el-input v-model="form.result2" placeholder="请输入标准结果2" />
+        </el-form-item>
+        <el-form-item label="标准结果3" prop="result3">
+          <el-input v-model="form.result3" placeholder="请输入标准结果3" />
+        </el-form-item>
+        <el-form-item label="标准结果4" prop="result4">
+          <el-input v-model="form.result4" placeholder="请输入标准结果4" />
+        </el-form-item>
+        <el-form-item label="标准结果5" prop="result5">
+          <el-input v-model="form.result5" placeholder="请输入标准结果5" />
+        </el-form-item>
+        <el-form-item label="计算结果1" prop="calculate1">
+          <el-input v-model="form.calculate1" placeholder="请输入计算结果1" />
+        </el-form-item>
+        <el-form-item label="计算结果2" prop="calculate2">
+          <el-input v-model="form.calculate2" placeholder="请输入计算结果2" />
+        </el-form-item>
+        <el-form-item label="计算结果3" prop="calculate3">
+          <el-input v-model="form.calculate3" placeholder="请输入计算结果3" />
+        </el-form-item>
+        <el-form-item label="召回率" prop="accuracy">
+          <el-input v-model="form.accuracy" placeholder="请输入召回率" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listDetail, getDetail, delDetail, addDetail, updateDetail } from "@/api/biz/detail";
+import { getToken } from "@/utils/auth";
+export default {
+  name: "Detail",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 验证任务详情表格数据
+      detailList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        taskId: null,
+        searchCondition: null,
+        result1: null,
+        result2: null,
+        result3: null,
+        result4: null,
+        result5: null,
+        calculate1: null,
+        calculate2: null,
+        calculate3: null,
+        accuracy: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+      // 导入参数
+      upload: {
+        // 是否显示弹出层(导入)
+        open: false,
+        // 弹出层标题(导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/biz/detail/importData"
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询验证任务详情列表 */
+    getList() {
+      this.loading = true;
+      listDetail(this.queryParams).then(response => {
+        this.detailList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskId: null,
+        searchCondition: null,
+        result1: null,
+        result2: null,
+        result3: null,
+        result4: null,
+        result5: null,
+        calculate1: null,
+        calculate2: null,
+        calculate3: null,
+        accuracy: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加验证任务详情";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getDetail(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改验证任务详情";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateDetail(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addDetail(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除验证任务详情编号为"' + ids + '"的数据项?').then(function() {
+        return delDetail(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/detail/export', {
+        ...this.queryParams
+      }, `detail_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "任务详情导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('biz/detail/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+// 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>

+ 293 - 0
cirs-ui/src/views/biz/evaluation/index.vue

@@ -0,0 +1,293 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="元器件名称" prop="componentId">
+        <el-input
+          v-model="queryParams.componentId"
+          placeholder="请输入元器件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="评分" prop="mark">
+        <el-input
+          v-model="queryParams.mark"
+          placeholder="请输入评分"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="使用场景" prop="usedBy">
+        <el-input
+          v-model="queryParams.usedBy"
+          placeholder="请输入使用场景"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:evaluation:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:evaluation:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:evaluation:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:evaluation:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="evaluationList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="查询条件" align="center" prop="searchCondition" />
+      <el-table-column label="元器件编号" align="center" prop="componentId" />
+      <el-table-column label="评分" align="center" prop="mark" />
+      <el-table-column label="使用场景" align="center" prop="usedBy" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:evaluation:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:evaluation:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改评价对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="查询条件" prop="searchCondition">
+          <el-input v-model="form.searchCondition" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="元器件名称" prop="componentId">
+          <el-input v-model="form.componentId" placeholder="请输入元器件名称" />
+        </el-form-item>
+        <el-form-item label="评分" prop="mark">
+          <el-input v-model="form.mark" placeholder="请输入评分" />
+        </el-form-item>
+        <el-form-item label="使用场景" prop="usedBy">
+          <el-input v-model="form.usedBy" placeholder="请输入使用场景" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listEvaluation, getEvaluation, delEvaluation, addEvaluation, updateEvaluation } from "@/api/biz/evaluation";
+
+export default {
+  name: "Evaluation",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 评价表格数据
+      evaluationList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        searchCondition: null,
+        componentId: null,
+        mark: null,
+        usedBy: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+
+
+
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询评价列表 */
+    getList() {
+      this.loading = true;
+      listEvaluation(this.queryParams).then(response => {
+        this.evaluationList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        searchCondition: null,
+        componentId: null,
+        mark: null,
+        usedBy: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加评价";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getEvaluation(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改评价";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateEvaluation(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEvaluation(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除评价编号为"' + ids + '"的数据项?').then(function() {
+        return delEvaluation(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/evaluation/export', {
+        ...this.queryParams
+      }, `evaluation_${new Date().getTime()}.xlsx`)
+    }
+
+
+  }
+};
+</script>

+ 345 - 0
cirs-ui/src/views/biz/recommend/index.vue

@@ -0,0 +1,345 @@
+<template>
+  <div class="app-container">
+    <div>
+    <el-select v-model="use_scene" placeholder="请选择">
+      <el-option
+        v-for="item in options"
+        :key="item.value"
+        :label="item.label"
+        :value="item.value">
+      </el-option>
+    </el-select>
+    <span>
+      <el-input placeholder="请输入查询条件" v-model="searchCondition" style="width:250px"/>
+      <el-button type="primary" @click="evaluation.searchCondition = searchCondition">推荐</el-button>
+    </span>
+    </div>
+    <el-table v-loading="loading" :data="componentList" >
+      <el-table-column label="型号规格" align="center" prop="componentModel" />
+      <el-table-column label="元器件名称" align="center" prop="componentName" />
+      <el-table-column label="国产替代型号" align="center" prop="replaceDomesticModel" />
+<!--      <el-table-column label="元器件应用" align="center" prop="applications"/>-->
+      <el-table-column label="元器件应用" align="center">
+        <template slot-scope="scope">
+          {{ truncatedApplications(scope.row.applications) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="相关推荐" align="center">
+        <span>1,2,3...</span>
+      </el-table-column>
+
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleDetail(scope.row)"
+            v-hasPermi="['biz:component:query']"
+          >查看详情<i class="el-icon-more"></i></el-button>
+
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-star-off"
+            @click="getevaluationdata(scope.row)"
+          >评分</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <el-dialog title="评分" :visible.sync="showevalatedialog" width="30%">
+      <el-rate
+        v-model="escore"
+        :show-score="true"
+        text-color="#ff9900"
+        >
+      </el-rate>
+      <el-input
+        type="textarea"
+        :rows="2"
+        placeholder="请输入备注"
+        v-model="eremark">
+      </el-input>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="showevalatedialog = false">取 消</el-button>
+        <el-button type="primary" @click="evaluate">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @close="closedialog">
+
+      <el-form  style="border:1px solid #C0C0C0;padding: 5px;margin: auto" ref="form" :model="form" :rules="rules" label-width="200px">
+        <h2><b>元器件基本信息</b></h2>
+        <el-form-item label="元器件名称" prop="componentName">
+          <el-input v-model="form.componentName" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="生产厂家" prop="manufacturer">
+          <el-input v-model="form.manufacturer" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="型号规格" prop="componentModel">
+          <el-input v-model="form.componentModel" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="国产替代型号" prop="replaceDomesticModel">
+          <el-input v-model="form.replaceDomesticModel" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="质量等级" prop="qualityGrade">
+          <el-input v-model="form.qualityGrade" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="供货周期" prop="deliveryCycle">
+          <el-input v-model="form.deliveryCycle" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="供货量(个/年)" prop="supplyQuantity">
+          <el-input v-model="form.supplyQuantity" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="价格" prop="unitPrice">
+          <el-input v-model="form.unitPrice" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="ZZKK等级" prop="zzkkLevel">
+          <el-input v-model="form.zzkkLevel" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="是否在优选目录内" prop="inPreference">
+          <el-input v-model="form.inPreference" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="停产断档日期" prop="shutdownDate">
+          <el-date-picker clearable
+                          v-model="form.shutdownDate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :disabled="true">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="封装形式" prop="encapsulationMode">
+          <el-input v-model="form.encapsulationMode" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="最大正向电流IFM" prop="paramIfm">
+          <el-input v-model="form.paramIfm" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="最大反向工作电压VRRM" prop="paramVrrm">
+          <el-input v-model="form.paramVrrm" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="最大浪涌电流IFSM" prop="paramIfsm">
+          <el-input v-model="form.paramIfsm" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="稳压状态下的动态电阻ZZ" prop="paramZz">
+          <el-input v-model="form.paramZz" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="最大额定功率PCM" prop="paramPcm">
+          <el-input v-model="form.paramPcm" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="最大集电极电流ICM" prop="paramIcm">
+          <el-input v-model="form.paramIcm" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="最大集电极-基极电压VCBO" prop="paramVcbo">
+          <el-input v-model="form.paramVcbo" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="集电极-发射极电压VCEO" prop="paramVceo">
+          <el-input v-model="form.paramVceo" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="发射极-基极电压VEBO" prop="paramVebo">
+          <el-input v-model="form.paramVebo" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="漏源电压VDSS" prop="paramVdss">
+          <el-input v-model="form.paramVdss" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="漏极直流电流ID" prop="paramId">
+          <el-input v-model="form.paramId" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="漏-源通态电阻RDS(on)" prop="paramRdsOn">
+          <el-input v-model="form.paramRdsOn" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="抗静电能力" prop="antistaticCapacity">
+          <el-input v-model="form.antistaticCapacity" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="抗辐照能力" prop="radiationResistance">
+          <el-input v-model="form.radiationResistance" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="材料" prop="materials">
+          <el-input v-model="form.materials" type="textarea" :disabled="true"/>
+        </el-form-item>
+        <el-form-item label="工艺" prop="craft">
+          <el-input v-model="form.craft" type="textarea" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="重量" prop="weight">
+          <el-input v-model="form.weight" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" :disabled="true" />
+        </el-form-item>
+      </el-form>
+
+
+      <el-table style="margin-top: 20px" :header-cell-style="{background:'#87CEEB',color:'#606266'}" :data="useInfoList">
+        <el-table-column label="应用场景" align="center" prop="usedBy" />
+        <el-table-column label="应用时间" align="center" prop="usedDate" />
+      </el-table>
+
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import { RecommendlistComponent,getComponent,getBycomponentId,addEvaluation,addTime } from "@/api/biz/recommend";
+
+export default {
+  name: "recommend",
+  data() {
+    return {
+      useInfoList:[],
+      eremark:'',//评分的备注
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 元器件数据
+      componentList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      searchCondition:'',
+      // 查询参数  元器件规格 元器件名称 国产替代型号 元器件应用 相关推荐 操作
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+
+
+      },
+      use_scene:'',
+      evaluation: {
+        id: null,
+        searchCondition: null,
+        componentId: null,
+        mark: null,
+        usedBy: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      },
+      escore:0,
+      showevalatedialog: false,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+      options:[
+        {
+          value: '质量最优',
+          label: '质量最优'
+        }, {
+          value: '成本最优',
+          label: '成本最优'
+        }, {
+          value: '供货周期最优',
+          label: '供货周期最优'
+        }, {
+          value: '供货量最优',
+          label: '供货量最优'
+        }
+      ],
+      currentTime:0,
+      startTime:0,
+      pageviewTime:{}
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    // 得到evaluation
+    getevaluationdata(row){
+      this.showevalatedialog=true
+      this.evaluation.componentId = row.id
+
+      this.evaluation.usedBy = row.applications.toString()
+
+    },
+
+    /** 查询元器件列表 */
+    getList() {
+      this.loading = true;
+      RecommendlistComponent(this.queryParams).then(response => {//queryParams中分页的信息应该是在session中保存,在请求的时候通过session封装到了pagedomain中了
+        this.componentList = response.rows;
+        let clist = response.rows;
+        for(let i=0; i< clist.length;i++){
+          getBycomponentId(clist[i].id).then(res=>{
+            // console.log(res.data)
+            let apps = []
+            for(let one of res.data){
+
+              apps.push(one.usedBy)
+            }
+            // console.log("apps:")
+            this.$set(this.componentList[i], 'applications', apps);
+            // this.componentList[i].applications = apps
+
+          })
+        }
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    //评分
+    evaluate(){
+      this.evaluation.mark = this.escore
+      this.evaluation.remark = this.eremark
+      addEvaluation(this.evaluation).then(response => {
+        this.$modal.msgSuccess("评分成功");
+
+        this.showevalatedialog = false
+      });
+    },
+
+    /** 搜索按钮操作 */
+    handleDetail(row) {
+      const id = row.id || this.ids
+      getComponent(id).then(response => {
+        this.form = response.data;
+        this.title = "元器件详情";
+
+      });
+      getBycomponentId(id).then(res=>{
+        this.useInfoList = res.data
+      })
+      this.open = true;
+      this.startTime = Date.now()
+      this.pageviewTime.componentId = row.id
+      this.pageviewTime.usedBy = row.applications.toString()
+    },
+    truncatedApplications(applications) {
+      if (applications && applications.length > 3) {
+        return applications.slice(0, 3).join(', ') + '...';
+      } else {
+        return applications.join(', ');
+      }
+    },
+    //监听元器件详情dialog关闭
+    closedialog(){
+      this.currentTime = Date.now()
+      this.pageviewTime.viewTime = this.currentTime - this.startTime
+      addTime(this.pageviewTime).then(res=>{
+        this.$modal.msgSuccess("详情浏览时间成功")
+      })
+      console.log("详情关闭")
+    }
+  }
+};
+</script>

+ 291 - 0
cirs-ui/src/views/biz/record/index.vue

@@ -0,0 +1,291 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="元器件编号" prop="componentId">
+        <el-input
+          v-model="queryParams.componentId"
+          placeholder="请输入元器件编号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="使用场景" prop="usedBy">
+        <el-input
+          v-model="queryParams.usedBy"
+          placeholder="请输入使用场景"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="使用日期" prop="usedDate">
+        <el-date-picker clearable
+          v-model="queryParams.usedDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择使用日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:record:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:record:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:record:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:record:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="recordList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="元器件编号" align="center" prop="componentId" />
+      <el-table-column label="使用场景" align="center" prop="usedBy" />
+      <el-table-column label="使用日期" align="center" prop="usedDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.usedDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:record:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:record:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改元器件使用经历对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="元器件编号" prop="componentId">
+          <el-input v-model="form.componentId" placeholder="请输入元器件编号" />
+        </el-form-item>
+        <el-form-item label="使用场景" prop="usedBy">
+          <el-input v-model="form.usedBy" placeholder="请输入使用场景" />
+        </el-form-item>
+        <el-form-item label="使用日期" prop="usedDate">
+          <el-date-picker clearable
+            v-model="form.usedDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择使用日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listRecord, getRecord, delRecord, addRecord, updateRecord } from "@/api/biz/record";
+
+export default {
+  name: "Record",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 元器件使用经历表格数据
+      recordList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        componentId: null,
+        usedBy: null,
+        usedDate: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询元器件使用经历列表 */
+    getList() {
+      this.loading = true;
+      listRecord(this.queryParams).then(response => {
+        this.recordList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        componentId: null,
+        usedBy: null,
+        usedDate: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加元器件使用经历";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getRecord(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改元器件使用经历";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateRecord(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addRecord(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除元器件使用经历编号为"' + ids + '"的数据项?').then(function() {
+        return delRecord(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/record/export', {
+        ...this.queryParams
+      }, `record_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 441 - 0
cirs-ui/src/views/biz/task/index.vue

@@ -0,0 +1,441 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="任务名称" prop="taskName">
+        <el-input
+          v-model="queryParams.taskName"
+          placeholder="请输入任务名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="任务数" prop="subtaskNum">
+        <el-input
+          v-model="queryParams.subtaskNum"
+          placeholder="请输入任务数"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="开始时间" prop="startTime">
+        <el-date-picker clearable
+          v-model="queryParams.startTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="结束时间" prop="endTime">
+        <el-date-picker clearable
+          v-model="queryParams.endTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="完成率" prop="progress">
+        <el-input
+          v-model="queryParams.progress"
+          placeholder="请输入完成率"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="准确率" prop="accuracyRate">
+        <el-input
+          v-model="queryParams.accuracyRate"
+          placeholder="请输入准确率"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="召回率" prop="recallRate">
+        <el-input
+          v-model="queryParams.recallRate"
+          placeholder="请输入召回率"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:task:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:task:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:task:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['biz:task:import']"
+        >导入</el-button>
+      </el-col>
+
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:task:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="taskList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="任务名称" align="center" prop="taskName" />
+      <el-table-column label="状态" align="center" prop="taskStatus" />
+      <el-table-column label="任务数" align="center" prop="subtaskNum" />
+      <el-table-column label="开始时间" align="center" prop="startTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结束时间" align="center" prop="endTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="完成率" align="center" prop="progress" />
+      <el-table-column label="准确率" align="center" prop="accuracyRate" />
+      <el-table-column label="召回率" align="center" prop="recallRate" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:task:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:task:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 任务导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 添加或修改验证任务对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="任务名称" prop="taskName">
+          <el-input v-model="form.taskName" placeholder="请输入任务名称" />
+        </el-form-item>
+        <el-form-item label="任务数" prop="subtaskNum">
+          <el-input v-model="form.subtaskNum" placeholder="请输入任务数" />
+        </el-form-item>
+        <el-form-item label="开始时间" prop="startTime">
+          <el-date-picker clearable
+            v-model="form.startTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择开始时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="结束时间" prop="endTime">
+          <el-date-picker clearable
+            v-model="form.endTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择结束时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="完成率" prop="progress">
+          <el-input v-model="form.progress" placeholder="请输入完成率" />
+        </el-form-item>
+        <el-form-item label="准确率" prop="accuracyRate">
+          <el-input v-model="form.accuracyRate" placeholder="请输入准确率" />
+        </el-form-item>
+        <el-form-item label="召回率" prop="recallRate">
+          <el-input v-model="form.recallRate" placeholder="请输入召回率" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listTask, getTask, delTask, addTask, updateTask } from "@/api/biz/task";
+import { getToken } from "@/utils/auth";
+export default {
+  name: "Task",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 验证任务表格数据
+      taskList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        taskName: null,
+        taskStatus: null,
+        subtaskNum: null,
+        startTime: null,
+        endTime: null,
+        progress: null,
+        accuracyRate: null,
+        recallRate: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+      // 导入参数
+      upload: {
+        // 是否显示弹出层(导入)
+        open: false,
+        // 弹出层标题(导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/biz/task/importData"
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询验证任务列表 */
+    getList() {
+      this.loading = true;
+      listTask(this.queryParams).then(response => {
+        this.taskList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskName: null,
+        taskStatus: null,
+        subtaskNum: null,
+        startTime: null,
+        endTime: null,
+        progress: null,
+        accuracyRate: null,
+        recallRate: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加验证任务";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getTask(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改验证任务";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTask(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addTask(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除验证任务编号为"' + ids + '"的数据项?').then(function() {
+        return delTask(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/task/export', {
+        ...this.queryParams
+      }, `task_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "任务导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('biz/task/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+     // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+// 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+
+  }
+};
+</script>

+ 282 - 0
cirs-ui/src/views/biz/time/index.vue

@@ -0,0 +1,282 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="元器件名称" prop="componentId">
+        <el-input
+          v-model="queryParams.componentId"
+          placeholder="请输入元器件名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="浏览时长(毫秒)" prop="viewTime">
+        <el-input
+          v-model="queryParams.viewTime"
+          placeholder="请输入浏览时长"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="使用场景" prop="usedBy">
+        <el-input
+          v-model="queryParams.usedBy"
+          placeholder="请输入使用场景"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:time:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:time:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:time:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:time:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="timeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="元器件名称" align="center" prop="componentId" />
+      <el-table-column label="浏览时长" align="center" prop="viewTime" />
+      <el-table-column label="使用场景" align="center" prop="usedBy" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:time:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:time:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改页面浏览时长对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="元器件名称" prop="componentId">
+          <el-input v-model="form.componentId" placeholder="请输入元器件名称" />
+        </el-form-item>
+        <el-form-item label="浏览时长" prop="viewTime">
+          <el-input v-model="form.viewTime" placeholder="请输入浏览时长" />
+        </el-form-item>
+        <el-form-item label="使用场景" prop="usedBy">
+          <el-input v-model="form.usedBy" placeholder="请输入使用场景" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listTime, getTime, delTime, addTime, updateTime } from "@/api/biz/time";
+
+export default {
+  name: "Time",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 页面浏览时长表格数据
+      timeList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        componentId: null,
+        viewTime: null,
+        usedBy: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询页面浏览时长列表 */
+    getList() {
+      this.loading = true;
+      listTime(this.queryParams).then(response => {
+        this.timeList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        componentId: null,
+        viewTime: null,
+        usedBy: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加页面浏览时长";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getTime(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改页面浏览时长";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTime(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addTime(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除页面浏览时长编号为"' + ids + '"的数据项?').then(function() {
+        return delTime(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/time/export', {
+        ...this.queryParams
+      }, `time_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 1 - 1
cirs-ui/src/views/login.vue

@@ -161,7 +161,7 @@ export default {
   justify-content: center;
   align-items: center;
   height: 100%;
-  background-image: url("../assets/images/login-background.jpg");
+  background-image: url("../assets/images/R-C.jpg");
   background-size: cover;
 }
 .title {

+ 1 - 1
cirs-ui/src/views/system/user/index.vue

@@ -667,4 +667,4 @@ export default {
     }
   }
 };
-</script>
+</script>

+ 6 - 0
pom.xml

@@ -170,6 +170,12 @@
                 <version>${cirs.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>com.cirs</groupId>
+                <artifactId>cirs-biz</artifactId>
+                <version>${cirs.version}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 

+ 1 - 1
sql/cirs_20230223.sql

@@ -748,7 +748,7 @@ CREATE TABLE t_elec_comp_record (
 	id BIGINT ( 20 ) NOT NULL auto_increment COMMENT '编号',
 	component_id VARCHAR ( 255 ) COMMENT '元器件名称',
 	used_by VARCHAR ( 255 ) COMMENT '使用场景',
-    used_date datetime ( 255 ) COMMENT '使用日期',
+    used_date datetime COMMENT '使用日期',
 	create_by VARCHAR ( 64 ) DEFAULT '' COMMENT '创建者',
 	create_time datetime COMMENT '创建时间',
 	update_by VARCHAR ( 64 ) DEFAULT '' COMMENT '更新者',