浏览代码

0507 预处理 双清单双清单详情 推荐

fuyanting 11 月之前
父节点
当前提交
22b1933aa4
共有 45 个文件被更改,包括 3526 次插入17 次删除
  1. 2 2
      cirs-admin/src/main/resources/application-druid.yml
  2. 1 1
      cirs-admin/src/main/resources/application.yml
  3. 27 3
      cirs-biz/src/main/java/com/cirs/biz/controller/SysTrainController.java
  4. 104 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TDataPreprocessingController.java
  5. 15 4
      cirs-biz/src/main/java/com/cirs/biz/controller/TElectronComponentController.java
  6. 1 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TEvaluationController.java
  7. 122 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TSqdController.java
  8. 132 0
      cirs-biz/src/main/java/com/cirs/biz/controller/TSqdDetailController.java
  9. 84 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TDataPreprocessing.java
  10. 7 6
      cirs-biz/src/main/java/com/cirs/biz/domain/TEvaluation.java
  11. 68 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TSqd.java
  12. 183 0
      cirs-biz/src/main/java/com/cirs/biz/domain/TSqdDetail.java
  13. 61 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TDataPreprocessingMapper.java
  14. 4 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TElectronComponentMapper.java
  15. 3 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TEvaluationMapper.java
  16. 80 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TSqdDetailMapper.java
  17. 61 0
      cirs-biz/src/main/java/com/cirs/biz/mapper/TSqdMapper.java
  18. 63 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITDataPreprocessingService.java
  19. 4 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITElectronComponentService.java
  20. 3 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITEvaluationService.java
  21. 77 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITSqdDetailService.java
  22. 64 0
      cirs-biz/src/main/java/com/cirs/biz/service/ITSqdService.java
  23. 96 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TDataPreprocessingServiceImpl.java
  24. 40 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TElectronComponentServiceImpl.java
  25. 5 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TEvaluationServiceImpl.java
  26. 112 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TSqdDetailServiceImpl.java
  27. 141 0
      cirs-biz/src/main/java/com/cirs/biz/service/impl/TSqdServiceImpl.java
  28. 1 0
      cirs-biz/src/main/resources/mapper/biz/RecommendInfoMapper.xml
  29. 86 0
      cirs-biz/src/main/resources/mapper/biz/TDataPreprocessingMapper.xml
  30. 51 0
      cirs-biz/src/main/resources/mapper/biz/TElectronComponentMapper.xml
  31. 21 1
      cirs-biz/src/main/resources/mapper/biz/TEvaluationMapper.xml
  32. 161 0
      cirs-biz/src/main/resources/mapper/biz/TSqdDetailMapper.xml
  33. 79 0
      cirs-biz/src/main/resources/mapper/biz/TSqdMapper.xml
  34. 10 0
      cirs-ui/src/api/biz/component.js
  35. 44 0
      cirs-ui/src/api/biz/preprocessing.js
  36. 44 0
      cirs-ui/src/api/biz/sqd.js
  37. 61 0
      cirs-ui/src/api/biz/sqddetail.js
  38. 173 0
      cirs-ui/src/components/EditTable/index.vue
  39. 266 0
      cirs-ui/src/views/biz/preprocessing/index.vue
  40. 487 0
      cirs-ui/src/views/biz/sqd/index.vue
  41. 383 0
      cirs-ui/src/views/biz/sqddetail/index.vue
  42. 1 0
      sql/cirs_20230223.sql
  43. 94 0
      sql/cirs_20230430.sql
  44. 2 0
      sql/cirs_20240428.sql
  45. 2 0
      sql/quartz.sql

+ 2 - 2
cirs-admin/src/main/resources/application-druid.yml

@@ -6,9 +6,9 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://47.108.150.237:3306/cirs?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                url: jdbc:mysql://localhost:3306/cirs?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                 username: root
-                password: w.cf123321
+                password: 090022@Fyt
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭

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

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

+ 27 - 3
cirs-biz/src/main/java/com/cirs/biz/controller/SysTrainController.java

@@ -1,7 +1,9 @@
 package com.cirs.biz.controller;
 
 import com.cirs.biz.DTO.ResponseDTO;
+import com.cirs.biz.domain.TEvaluation;
 import com.cirs.biz.service.ITElectronComponentService;
+import com.cirs.biz.service.ITEvaluationService;
 import com.cirs.common.utils.DictUtils;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.core.ParameterizedTypeReference;
@@ -49,6 +51,9 @@ public class SysTrainController extends BaseController
     @Autowired
     ITElectronComponentService electronComponentService;
 
+    @Autowired
+    ITEvaluationService itEvaluationService;
+
     // 创建 WebClient 对象
     private WebClient webClient = WebClient.builder()
 //            .baseUrl("http://jsonplaceholder.typicode.com")
@@ -222,8 +227,21 @@ public class SysTrainController extends BaseController
     @PreAuthorize("@ss.hasPermi('biz:train:recommend')")
     @PostMapping ("/recommend")
     public AjaxResult recommend(@RequestBody TrainReturn recommend_args) {
+        List<TElectronComponent> resultListend = new ArrayList<>();
+        TEvaluation tEvaluationpara = new TEvaluation();
+        tEvaluationpara.setCreateBy(getUsername());
+        tEvaluationpara.setMark(5);
+        tEvaluationpara.setUseScene(recommend_args.getUseScene());
+        tEvaluationpara.setSearchCondition(recommend_args.getSearchCondition());
+        List<Long> x = itEvaluationService.selectTEvaluationListbymark(tEvaluationpara);
+
+        for(Long conid:x){
+            TElectronComponent tElectronComponent = electronComponentService.selectTElectronComponentById(conid);
+            if(tElectronComponent!=null){
+                resultListend.add(tElectronComponent);
+            }
+        }
         try {
-
             String recommend_uri = DictUtils.getDictValue("biz_algorithm_config","recommend_uri");
             String model_path = DictUtils.getDictValue("biz_algorithm_config","model_path");
             Map<String, Object> objectMap = new HashMap<>();
@@ -281,21 +299,27 @@ public class SysTrainController extends BaseController
                             // 放入有数据的并且未添加的数据
                             if(idToCompMap.get(id) != null && !idSet.contains(id)){
                                 idSet.add(id);
-                                resultList.add(idToCompMap.get(id));
+                                resultListend.add(idToCompMap.get(id));
                             }
                         }
                     }
-                    return success(resultList);
+
                 } else {
                     return error("推荐元器件结果为空");
                 }
             } else {
                 return error("推荐元器件失败");
             }
+
+
+
         } catch (Exception e) {
             logger.error("推荐元器件失败", e);
             return error("推荐元器件失败");
         }
+
+
+        return success(resultListend);
     }
 
     @GetMapping("/getTraindataset")

+ 104 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TDataPreprocessingController.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.TDataPreprocessing;
+import com.cirs.biz.service.ITDataPreprocessingService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+
+/**
+ * 预处理Controller
+ * 
+ * @author fuyanting
+ * @date 2024-04-30
+ */
+@RestController
+@RequestMapping("/biz/preprocessing")
+public class TDataPreprocessingController extends BaseController
+{
+    @Autowired
+    private ITDataPreprocessingService tDataPreprocessingService;
+
+    /**
+     * 查询预处理列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessing:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TDataPreprocessing tDataPreprocessing)
+    {
+        startPage();
+        List<TDataPreprocessing> list = tDataPreprocessingService.selectTDataPreprocessingList(tDataPreprocessing);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出预处理列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessing:export')")
+    @Log(title = "预处理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TDataPreprocessing tDataPreprocessing)
+    {
+        List<TDataPreprocessing> list = tDataPreprocessingService.selectTDataPreprocessingList(tDataPreprocessing);
+        ExcelUtil<TDataPreprocessing> util = new ExcelUtil<TDataPreprocessing>(TDataPreprocessing.class);
+        util.exportExcel(response, list, "预处理数据");
+    }
+
+    /**
+     * 获取预处理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessing:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tDataPreprocessingService.selectTDataPreprocessingById(id));
+    }
+
+    /**
+     * 新增预处理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessing:add')")
+    @Log(title = "预处理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TDataPreprocessing tDataPreprocessing)
+    {
+        return toAjax(tDataPreprocessingService.insertTDataPreprocessing(tDataPreprocessing));
+    }
+
+    /**
+     * 修改预处理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessing:edit')")
+    @Log(title = "预处理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TDataPreprocessing tDataPreprocessing)
+    {
+        return toAjax(tDataPreprocessingService.updateTDataPreprocessing(tDataPreprocessing));
+    }
+
+    /**
+     * 删除预处理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessing:remove')")
+    @Log(title = "预处理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tDataPreprocessingService.deleteTDataPreprocessingByIds(ids));
+    }
+}

+ 15 - 4
cirs-biz/src/main/java/com/cirs/biz/controller/TElectronComponentController.java

@@ -1,8 +1,6 @@
 package com.cirs.biz.controller;
 
-import com.cirs.biz.domain.RecommendInfo;
-import com.cirs.biz.domain.TElectronComponent;
-import com.cirs.biz.domain.TrainReturn;
+import com.cirs.biz.domain.*;
 import com.cirs.biz.mapper.RecommendInfoMapper;
 import com.cirs.biz.service.ITElectronComponentService;
 import com.cirs.common.annotation.Log;
@@ -55,6 +53,19 @@ public class TElectronComponentController extends BaseController
         return tElectronComponentService.getAll();
     }
 
+
+    /**
+     * 查询SQD明细列表
+     */
+//    @PreAuthorize("@ss.hasPermi('biz::list')")
+    @PostMapping("/listpara")
+    public List<TSqdDetail> listby4para(@RequestBody TSqd tSqd)
+    {
+        return tElectronComponentService.selectTSqdDetailListby4para(tSqd.getSqddetaillist());
+    }
+
+
+
     /**
      * 导出元器件列表
      */
@@ -136,7 +147,6 @@ public class TElectronComponentController extends BaseController
     {
         ExcelUtil<TElectronComponent> util = new ExcelUtil<TElectronComponent>(TElectronComponent.class);
         List<TElectronComponent> componentList = util.importExcel(file.getInputStream());
-
         String operName = getUsername();
         String message = tElectronComponentService.importComponent(componentList, updateSupport, operName);
         return success(message);
@@ -151,6 +161,7 @@ public class TElectronComponentController extends BaseController
 
     @GetMapping("/getDetailById/{id}")
     public String getDetailById(@PathVariable Long id) {
+
         return tElectronComponentService.getDetailById(id);
     }
 

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

@@ -83,6 +83,7 @@ public class TEvaluationController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody TEvaluation tEvaluation)
     {
+        tEvaluation.setCreateBy(getUsername());
 //        redisCache.deleteObject("top10_components");
         return toAjax(tEvaluationService.insertTEvaluation(tEvaluation));
     }

+ 122 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TSqdController.java

@@ -0,0 +1,122 @@
+package com.cirs.biz.controller;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+
+import com.cirs.biz.domain.TSqdDetail;
+import com.cirs.biz.service.ITSqdDetailService;
+import org.apache.commons.collections4.CollectionUtils;
+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.TSqd;
+import com.cirs.biz.service.ITSqdService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+
+/**
+ * 双清单管理Controller
+ * 
+ * @author allen
+ * @date 2024-04-30
+ */
+@RestController
+@RequestMapping("/biz/sqd")
+public class TSqdController extends BaseController
+{
+    @Autowired
+    private ITSqdService tSqdService;
+
+    @Autowired
+    private ITSqdDetailService tSqdDetailService;
+
+
+    /**
+     * 查询双清单管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqd:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TSqd tSqd)
+    {
+        startPage();
+        List<TSqd> list = tSqdService.selectTSqdList(tSqd);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出双清单管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqd:export')")
+    @Log(title = "双清单管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TSqd tSqd)
+    {
+        List<TSqd> list = tSqdService.selectTSqdList(tSqd);
+        ExcelUtil<TSqd> util = new ExcelUtil<TSqd>(TSqd.class);
+        util.exportExcel(response, list, "双清单管理数据");
+    }
+
+    /**
+     * 获取双清单管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqd:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        List<TSqdDetail> detail = tSqdDetailService.selectTSqdDetailBySqdid(id);
+        TSqd sqd = tSqdService.selectTSqdById(id);
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("detail", detail);
+        resultMap.put("sqd", sqd);
+        return success(resultMap);
+    }
+
+    /**
+     * 新增双清单管理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqd:add')")
+    @Log(title = "双清单管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TSqd tSqd)
+    {
+        tSqd.setCreateBy(getUsername());
+        // 保存主记录
+        return toAjax(tSqdService.insertTSqd(tSqd));
+    }
+
+    /**
+     * 修改双清单管理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqd:edit')")
+    @Log(title = "双清单管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TSqd tSqd)
+    {
+        tSqd.setUpdateBy(getUsername());
+        return toAjax(tSqdService.updateTSqd(tSqd));
+    }
+
+    /**
+     * 删除双清单管理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqd:remove')")
+    @Log(title = "双清单管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tSqdService.deleteTSqdByIds(ids));
+    }
+}

+ 132 - 0
cirs-biz/src/main/java/com/cirs/biz/controller/TSqdDetailController.java

@@ -0,0 +1,132 @@
+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.TSqdDetail;
+import com.cirs.biz.service.ITSqdDetailService;
+import com.cirs.common.utils.poi.ExcelUtil;
+import com.cirs.common.core.page.TableDataInfo;
+
+/**
+ * SQD明细Controller
+ * 
+ * @author allen
+ * @date 2024-05-01
+ */
+@RestController
+@RequestMapping("/biz/sqddetail")
+public class TSqdDetailController extends BaseController
+{
+    @Autowired
+    private ITSqdDetailService tSqdDetailService;
+
+    /**
+     * 查询SQD明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqddetail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TSqdDetail tSqdDetail)
+    {
+        startPage();
+        List<TSqdDetail> list = tSqdDetailService.selectTSqdDetailList(tSqdDetail);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 导出SQD明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqddetail:export')")
+    @Log(title = "SQD明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TSqdDetail tSqdDetail)
+    {
+        List<TSqdDetail> list = tSqdDetailService.selectTSqdDetailList(tSqdDetail);
+        ExcelUtil<TSqdDetail> util = new ExcelUtil<TSqdDetail>(TSqdDetail.class);
+        util.exportExcel(response, list, "SQD明细数据");
+    }
+
+    /**
+     * 获取SQD明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqddetail:query')")
+    @GetMapping(value = "/sqdid/{sqdid}")
+    public AjaxResult getInfobysqd(@PathVariable("sqdid") Long sqdid)
+    {
+        return success(tSqdDetailService.selectTSqdDetailBySqdid(sqdid));
+    }
+
+
+    /**
+     * 获取SQD明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqddetail:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(tSqdDetailService.selectTSqdDetailById(id));
+    }
+
+        /**
+         * 新增SQD明细
+         */
+    @PreAuthorize("@ss.hasPermi('biz:sqddetail:add')")
+    @Log(title = "SQD明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TSqdDetail tSqdDetail)
+    {
+        return toAjax(tSqdDetailService.insertTSqdDetail(tSqdDetail));
+    }
+
+    /**
+     * 修改SQD明细
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqddetail:edit')")
+    @Log(title = "SQD明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TSqdDetail tSqdDetail)
+    {
+        return toAjax(tSqdDetailService.updateTSqdDetail(tSqdDetail));
+    }
+
+    /**
+     * 删除SQD明细
+     */
+    @PreAuthorize("@ss.hasPermi('biz:sqddetail:remove')")
+    @Log(title = "SQD明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tSqdDetailService.deleteTSqdDetailByIds(ids));
+    }
+
+
+    @GetMapping(value = "/sqddetailcount/{id}")
+    public boolean checktsExistence(@PathVariable("id") Long id)
+    {
+        int count = tSqdDetailService.getcountbysqdid(id);
+        return count>0;
+    }
+
+    @GetMapping(value = "/sqddetailexist/{id}")
+    public AjaxResult checktsExistence(@PathVariable("id") Long[] id)
+    {
+        return success(tSqdDetailService.getcountbysqdidoption(id));
+    }
+
+}
+

+ 84 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TDataPreprocessing.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_data_preprocessing
+ * 
+ * @author fuyanting
+ * @date 2024-04-30
+ */
+public class TDataPreprocessing extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String columnName;
+
+    /** 处理前 */
+    @Excel(name = "处理前")
+    private String beforeProcessing;
+
+    /** 处理后 */
+    @Excel(name = "处理后")
+    private String afterProcessing;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setColumnName(String columnName) 
+    {
+        this.columnName = columnName;
+    }
+
+    public String getColumnName() 
+    {
+        return columnName;
+    }
+    public void setBeforeProcessing(String beforeProcessing) 
+    {
+        this.beforeProcessing = beforeProcessing;
+    }
+
+    public String getBeforeProcessing() 
+    {
+        return beforeProcessing;
+    }
+    public void setAfterProcessing(String afterProcessing) 
+    {
+        this.afterProcessing = afterProcessing;
+    }
+
+    public String getAfterProcessing() 
+    {
+        return afterProcessing;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("columnName", getColumnName())
+            .append("beforeProcessing", getBeforeProcessing())
+            .append("afterProcessing", getAfterProcessing())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 7 - 6
cirs-biz/src/main/java/com/cirs/biz/domain/TEvaluation.java

@@ -34,17 +34,17 @@ public class TEvaluation extends BaseEntity
     @Excel(name = "应用设备")
     private String usedBy;
 
-    @Excel(name = "使用场景")
-    private String useScene;
 
-    public void setUseScene(String useScene){
-        this.useScene = useScene;
+    public String getUseScene() {
+        return useScene;
     }
 
-    public String getUseScene(){
-        return this.useScene;
+    public void setUseScene(String useScene) {
+        this.useScene = useScene;
     }
 
+    @Excel(name = "使用场景")
+    private String useScene;
     public void setId(Long id) 
     {
         this.id = id;
@@ -104,6 +104,7 @@ public class TEvaluation extends BaseEntity
             .append("updateBy", getUpdateBy())
             .append("updateTime", getUpdateTime())
             .append("remark", getRemark())
+                .append("usescene",getUseScene())
             .toString();
     }
 }

+ 68 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TSqd.java

@@ -0,0 +1,68 @@
+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;
+
+import java.util.List;
+
+/**
+ * 双清单管理对象 t_sqd
+ * 
+ * @author allen
+ * @date 2024-04-30
+ */
+public class TSqd extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 清单名称 */
+    @Excel(name = "清单名称")
+    private String sqdName;
+
+    private List<TSqdDetail> sqddetaillist;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setSqdName(String sqdName) 
+    {
+        this.sqdName = sqdName;
+    }
+
+    public String getSqdName() 
+    {
+        return sqdName;
+    }
+
+    // Getter和Setter
+    public List<TSqdDetail> getSqddetaillist() {
+        return sqddetaillist;
+    }
+
+    public void setSqddetaillist(List<TSqdDetail> sqddetaillist) {
+        this.sqddetaillist = sqddetaillist;
+    }
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("sqdName", getSqdName())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 183 - 0
cirs-biz/src/main/java/com/cirs/biz/domain/TSqdDetail.java

@@ -0,0 +1,183 @@
+package com.cirs.biz.domain;
+
+import java.math.BigDecimal;
+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;
+
+/**
+ * SQD明细对象 t_sqd_detail
+ * 
+ * @author allen
+ * @date 2024-05-01
+ */
+public class TSqdDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** sqd编号 */
+    @Excel(name = "sqd编号")
+    private Long sqdId;
+
+    /** 分类代码 */
+    @Excel(name = "分类代码")
+    private String componentCategoryCode;
+
+    /** 型号规格 */
+    @Excel(name = "型号规格")
+    private String componentModel;
+
+    /** 生产厂家 */
+    @Excel(name = "生产厂家")
+    private String manufacturer;
+
+    /** 质量等级 */
+    @Excel(name = "质量等级")
+    private String qualityGrade;
+
+    /** 封装形式 */
+    @Excel(name = "封装形式")
+    private String encapsulationMode;
+
+    /** ZZKK等级 */
+    @Excel(name = "ZZKK等级")
+    private String zzkkLevel;
+
+    /** 价格(元) */
+    @Excel(name = "价格", readConverterExp = "元=")
+    private BigDecimal unitPrice;
+
+    /** 供货周期(周) */
+    @Excel(name = "供货周期", readConverterExp = "周=")
+    private BigDecimal deliveryCycle;
+
+    /** WKB情况 */
+    @Excel(name = "WKB情况")
+    private String wkbInfo;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setSqdId(Long sqdId) 
+    {
+        this.sqdId = sqdId;
+    }
+
+    public Long getSqdId() 
+    {
+        return sqdId;
+    }
+    public void setComponentCategoryCode(String componentCategoryCode) 
+    {
+        this.componentCategoryCode = componentCategoryCode;
+    }
+
+    public String getComponentCategoryCode() 
+    {
+        return componentCategoryCode;
+    }
+    public void setComponentModel(String componentModel) 
+    {
+        this.componentModel = componentModel;
+    }
+
+    public String getComponentModel() 
+    {
+        return componentModel;
+    }
+    public void setManufacturer(String manufacturer) 
+    {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getManufacturer() 
+    {
+        return manufacturer;
+    }
+    public void setQualityGrade(String qualityGrade) 
+    {
+        this.qualityGrade = qualityGrade;
+    }
+
+    public String getQualityGrade() 
+    {
+        return qualityGrade;
+    }
+    public void setEncapsulationMode(String encapsulationMode) 
+    {
+        this.encapsulationMode = encapsulationMode;
+    }
+
+    public String getEncapsulationMode() 
+    {
+        return encapsulationMode;
+    }
+    public void setZzkkLevel(String zzkkLevel) 
+    {
+        this.zzkkLevel = zzkkLevel;
+    }
+
+    public String getZzkkLevel() 
+    {
+        return zzkkLevel;
+    }
+    public void setUnitPrice(BigDecimal unitPrice) 
+    {
+        this.unitPrice = unitPrice;
+    }
+
+    public BigDecimal getUnitPrice() 
+    {
+        return unitPrice;
+    }
+    public void setDeliveryCycle(BigDecimal deliveryCycle) 
+    {
+        this.deliveryCycle = deliveryCycle;
+    }
+
+    public BigDecimal getDeliveryCycle() 
+    {
+        return deliveryCycle;
+    }
+    public void setWkbInfo(String wkbInfo) 
+    {
+        this.wkbInfo = wkbInfo;
+    }
+
+    public String getWkbInfo() 
+    {
+        return wkbInfo;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("sqdId", getSqdId())
+            .append("componentCategoryCode", getComponentCategoryCode())
+            .append("componentModel", getComponentModel())
+            .append("manufacturer", getManufacturer())
+            .append("qualityGrade", getQualityGrade())
+            .append("encapsulationMode", getEncapsulationMode())
+            .append("zzkkLevel", getZzkkLevel())
+            .append("unitPrice", getUnitPrice())
+            .append("deliveryCycle", getDeliveryCycle())
+            .append("wkbInfo", getWkbInfo())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

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

@@ -0,0 +1,61 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TDataPreprocessing;
+
+/**
+ * 预处理Mapper接口
+ * 
+ * @author fuyanting
+ * @date 2024-04-30
+ */
+public interface TDataPreprocessingMapper 
+{
+    /**
+     * 查询预处理
+     * 
+     * @param id 预处理主键
+     * @return 预处理
+     */
+    public TDataPreprocessing selectTDataPreprocessingById(Long id);
+
+    /**
+     * 查询预处理列表
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 预处理集合
+     */
+    public List<TDataPreprocessing> selectTDataPreprocessingList(TDataPreprocessing tDataPreprocessing);
+
+    /**
+     * 新增预处理
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 结果
+     */
+    public int insertTDataPreprocessing(TDataPreprocessing tDataPreprocessing);
+
+    /**
+     * 修改预处理
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 结果
+     */
+    public int updateTDataPreprocessing(TDataPreprocessing tDataPreprocessing);
+
+    /**
+     * 删除预处理
+     * 
+     * @param id 预处理主键
+     * @return 结果
+     */
+    public int deleteTDataPreprocessingById(Long id);
+
+    /**
+     * 批量删除预处理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTDataPreprocessingByIds(Long[] ids);
+}

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

@@ -5,6 +5,7 @@ import java.util.Set;
 
 import com.cirs.biz.domain.ElectronComponent;
 import com.cirs.biz.domain.TElectronComponent;
+import com.cirs.biz.domain.TSqdDetail;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -23,6 +24,9 @@ public interface TElectronComponentMapper
      */
     public TElectronComponent selectTElectronComponentById(Long id);
 
+
+    public List<TSqdDetail> selectTSqdDetailListby4para(TSqdDetail tSqdDetail);
+
     /**
      * 查询元器件列表
      * 

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

@@ -30,6 +30,9 @@ public interface TEvaluationMapper
      */
     public List<TEvaluation> selectTEvaluationList(TEvaluation tEvaluation);
 
+
+
+    public List<Long> selectTEvaluationListbymark(TEvaluation tEvaluation);
     /**
      * 新增评价
      * 

+ 80 - 0
cirs-biz/src/main/java/com/cirs/biz/mapper/TSqdDetailMapper.java

@@ -0,0 +1,80 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TSqdDetail;
+
+/**
+ * SQD明细Mapper接口
+ * 
+ * @author allen
+ * @date 2024-05-01
+ */
+public interface TSqdDetailMapper 
+{
+    /**
+     * 查询SQD明细
+     * 
+     * @param id SQD明细主键
+     * @return SQD明细
+     */
+    public TSqdDetail selectTSqdDetailById(Long id);
+
+    /**
+     * 查询SQD明细列表
+     * 
+     * @param tSqdDetail SQD明细
+     * @return SQD明细集合
+     */
+    public List<TSqdDetail> selectTSqdDetailList(TSqdDetail tSqdDetail);
+
+
+
+
+    /**
+     * 查询SQD明细列表
+     *
+     * @param sqdid SQD编号
+     * @return SQD明细集合
+     */
+    public List<TSqdDetail> selectTSqdDetailBySqdid(Long sqdid);
+
+    /**
+     * 新增SQD明细
+     * 
+     * @param tSqdDetail SQD明细
+     * @return 结果
+     */
+    public int insertTSqdDetail(TSqdDetail tSqdDetail);
+
+    public int batchInsertTSqdDetail(List<TSqdDetail> sqddetaillist);
+
+    /**
+     * 修改SQD明细
+     * 
+     * @param tSqdDetail SQD明细
+     * @return 结果
+     */
+    public int updateTSqdDetail(TSqdDetail tSqdDetail);
+
+    /**
+     * 删除SQD明细
+     * 
+     * @param id SQD明细主键
+     * @return 结果
+     */
+    public int deleteTSqdDetailById(Long id);
+
+    /**
+     * 批量删除SQD明细
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTSqdDetailByIds(Long[] ids);
+
+
+
+    public int getcountbysqdid(Long sqdid);
+
+    public List getcountbysqdidoption(Long[] id);
+}

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

@@ -0,0 +1,61 @@
+package com.cirs.biz.mapper;
+
+import java.util.List;
+import com.cirs.biz.domain.TSqd;
+
+/**
+ * 双清单管理Mapper接口
+ * 
+ * @author allen
+ * @date 2024-04-30
+ */
+public interface TSqdMapper 
+{
+    /**
+     * 查询双清单管理
+     * 
+     * @param id 双清单管理主键
+     * @return 双清单管理
+     */
+    public TSqd selectTSqdById(Long id);
+
+    /**
+     * 查询双清单管理列表
+     * 
+     * @param tSqd 双清单管理
+     * @return 双清单管理集合
+     */
+    public List<TSqd> selectTSqdList(TSqd tSqd);
+
+    /**
+     * 新增双清单管理
+     * 
+     * @param tSqd 双清单管理
+     * @return 结果
+     */
+    public int insertTSqd(TSqd tSqd);
+
+    /**
+     * 修改双清单管理
+     * 
+     * @param tSqd 双清单管理
+     * @return 结果
+     */
+    public int updateTSqd(TSqd tSqd);
+
+    /**
+     * 删除双清单管理
+     * 
+     * @param id 双清单管理主键
+     * @return 结果
+     */
+    public int deleteTSqdById(Long id);
+
+    /**
+     * 批量删除双清单管理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTSqdByIds(Long[] ids);
+}

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

@@ -0,0 +1,63 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TDataPreprocessing;
+
+/**
+ * 预处理Service接口
+ * 
+ * @author fuyanting
+ * @date 2024-04-30
+ */
+public interface ITDataPreprocessingService 
+{
+    /**
+     * 查询预处理
+     * 
+     * @param id 预处理主键
+     * @return 预处理
+     */
+    public TDataPreprocessing selectTDataPreprocessingById(Long id);
+
+    /**
+     * 查询预处理列表
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 预处理集合
+     */
+    public List<TDataPreprocessing> selectTDataPreprocessingList(TDataPreprocessing tDataPreprocessing);
+
+    /**
+     * 新增预处理
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 结果
+     */
+    public int insertTDataPreprocessing(TDataPreprocessing tDataPreprocessing);
+
+    /**
+     * 修改预处理
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 结果
+     */
+    public int updateTDataPreprocessing(TDataPreprocessing tDataPreprocessing);
+
+    /**
+     * 批量删除预处理
+     * 
+     * @param ids 需要删除的预处理主键集合
+     * @return 结果
+     */
+    public int deleteTDataPreprocessingByIds(Long[] ids);
+
+    /**
+     * 删除预处理信息
+     * 
+     * @param id 预处理主键
+     * @return 结果
+     */
+    public int deleteTDataPreprocessingById(Long id);
+
+
+}

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

@@ -2,6 +2,7 @@ package com.cirs.biz.service;
 
 import java.util.List;
 import com.cirs.biz.domain.TElectronComponent;
+import com.cirs.biz.domain.TSqdDetail;
 import com.cirs.biz.domain.VerificationData;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,6 +22,9 @@ public interface ITElectronComponentService
      */
     public TElectronComponent selectTElectronComponentById(Long id);
 
+
+    public List<TSqdDetail>  selectTSqdDetailListby4para(List<TSqdDetail> tSqdDetaillist);
+
     /**
      * 查询元器件列表
      * 

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

@@ -29,6 +29,9 @@ public interface ITEvaluationService
      */
     public List<TEvaluation> selectTEvaluationList(TEvaluation tEvaluation);
 
+
+
+    public List<Long> selectTEvaluationListbymark(TEvaluation tEvaluation);
     /**
      * 新增评价
      * 

+ 77 - 0
cirs-biz/src/main/java/com/cirs/biz/service/ITSqdDetailService.java

@@ -0,0 +1,77 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TSqdDetail;
+
+/**
+ * SQD明细Service接口
+ * 
+ * @author allen
+ * @date 2024-05-01
+ */
+public interface ITSqdDetailService 
+{
+    /**
+     * 查询SQD明细
+     * 
+     * @param id SQD明细主键
+     * @return SQD明细
+     */
+    public TSqdDetail selectTSqdDetailById(Long id);
+
+    /**
+     * 查询SQD明细
+     *
+     * @param sqdid SQD明细主键
+     * @return SQD明细
+     */
+    public List<TSqdDetail> selectTSqdDetailBySqdid(Long sqdid);
+
+    /**
+     * 查询SQD明细列表
+     * 
+     * @param tSqdDetail SQD明细
+     * @return SQD明细集合
+     */
+    public List<TSqdDetail> selectTSqdDetailList(TSqdDetail tSqdDetail);
+
+
+
+    /**
+     * 新增SQD明细
+     * 
+     * @param tSqdDetail SQD明细
+     * @return 结果
+     */
+    public int insertTSqdDetail(TSqdDetail tSqdDetail);
+
+    /**
+     * 修改SQD明细
+     * 
+     * @param tSqdDetail SQD明细
+     * @return 结果
+     */
+    public int updateTSqdDetail(TSqdDetail tSqdDetail);
+
+    /**
+     * 批量删除SQD明细
+     * 
+     * @param ids 需要删除的SQD明细主键集合
+     * @return 结果
+     */
+    public int deleteTSqdDetailByIds(Long[] ids);
+
+    /**
+     * 删除SQD明细信息
+     * 
+     * @param id SQD明细主键
+     * @return 结果
+     */
+    public int deleteTSqdDetailById(Long id);
+
+    public int getcountbysqdid(Long sqdid);
+
+    public List getcountbysqdidoption(Long[] id);
+
+
+}

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

@@ -0,0 +1,64 @@
+package com.cirs.biz.service;
+
+import java.util.List;
+import com.cirs.biz.domain.TSqd;
+
+/**
+ * 双清单管理Service接口
+ * 
+ * @author allen
+ * @date 2024-04-30
+ */
+public interface ITSqdService 
+{
+    /**
+     * 查询双清单管理
+     * 
+     * @param id 双清单管理主键
+     * @return 双清单管理
+     */
+    public TSqd selectTSqdById(Long id);
+
+
+
+    /**
+     * 查询双清单管理列表
+     * 
+     * @param tSqd 双清单管理
+     * @return 双清单管理集合
+     */
+    public List<TSqd> selectTSqdList(TSqd tSqd);
+
+    /**
+     * 新增双清单管理
+     * 
+     * @param tSqd 双清单管理
+     * @return 结果
+     */
+    public int insertTSqd(TSqd tSqd);
+
+    /**
+     * 修改双清单管理
+     * 
+     * @param tSqd 双清单管理
+     * @return 结果
+     */
+    public int updateTSqd(TSqd tSqd);
+
+    /**
+     * 批量删除双清单管理
+     * 
+     * @param ids 需要删除的双清单管理主键集合
+     * @return 结果
+     */
+    public int deleteTSqdByIds(Long[] ids);
+
+    /**
+     * 删除双清单管理信息
+     * 
+     * @param id 双清单管理主键
+     * @return 结果
+     */
+    public int deleteTSqdById(Long id);
+
+}

+ 96 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TDataPreprocessingServiceImpl.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.TDataPreprocessingMapper;
+import com.cirs.biz.domain.TDataPreprocessing;
+import com.cirs.biz.service.ITDataPreprocessingService;
+
+/**
+ * 预处理Service业务层处理
+ * 
+ * @author fuyanting
+ * @date 2024-04-30
+ */
+@Service
+public class TDataPreprocessingServiceImpl implements ITDataPreprocessingService 
+{
+    @Autowired
+    private TDataPreprocessingMapper tDataPreprocessingMapper;
+
+    /**
+     * 查询预处理
+     * 
+     * @param id 预处理主键
+     * @return 预处理
+     */
+    @Override
+    public TDataPreprocessing selectTDataPreprocessingById(Long id)
+    {
+        return tDataPreprocessingMapper.selectTDataPreprocessingById(id);
+    }
+
+    /**
+     * 查询预处理列表
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 预处理
+     */
+    @Override
+    public List<TDataPreprocessing> selectTDataPreprocessingList(TDataPreprocessing tDataPreprocessing)
+    {
+        return tDataPreprocessingMapper.selectTDataPreprocessingList(tDataPreprocessing);
+    }
+
+    /**
+     * 新增预处理
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 结果
+     */
+    @Override
+    public int insertTDataPreprocessing(TDataPreprocessing tDataPreprocessing)
+    {
+        tDataPreprocessing.setCreateTime(DateUtils.getNowDate());
+        return tDataPreprocessingMapper.insertTDataPreprocessing(tDataPreprocessing);
+    }
+
+    /**
+     * 修改预处理
+     * 
+     * @param tDataPreprocessing 预处理
+     * @return 结果
+     */
+    @Override
+    public int updateTDataPreprocessing(TDataPreprocessing tDataPreprocessing)
+    {
+        tDataPreprocessing.setUpdateTime(DateUtils.getNowDate());
+        return tDataPreprocessingMapper.updateTDataPreprocessing(tDataPreprocessing);
+    }
+
+    /**
+     * 批量删除预处理
+     * 
+     * @param ids 需要删除的预处理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTDataPreprocessingByIds(Long[] ids)
+    {
+        return tDataPreprocessingMapper.deleteTDataPreprocessingByIds(ids);
+    }
+
+    /**
+     * 删除预处理信息
+     * 
+     * @param id 预处理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTDataPreprocessingById(Long id)
+    {
+        return tDataPreprocessingMapper.deleteTDataPreprocessingById(id);
+    }
+}

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

@@ -1,11 +1,15 @@
 package com.cirs.biz.service.impl;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+
 import java.util.List;
 import java.util.Set;
 
 import com.cirs.biz.domain.ElectronComponent;
+import com.cirs.biz.domain.TSqdDetail;
 import com.cirs.biz.domain.VerificationData;
+import com.cirs.common.core.page.TableDataInfo;
 import com.cirs.common.exception.ServiceException;
 import com.cirs.common.utils.DateUtils;
 import com.cirs.common.utils.StringUtils;
@@ -13,10 +17,12 @@ 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.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
 import com.cirs.biz.mapper.TElectronComponentMapper;
 import com.cirs.biz.domain.TElectronComponent;
 import com.cirs.biz.service.ITElectronComponentService;
+import org.springframework.web.bind.annotation.GetMapping;
 
 import javax.validation.Validator;
 
@@ -48,6 +54,40 @@ public class TElectronComponentServiceImpl implements ITElectronComponentService
         return tElectronComponentMapper.selectTElectronComponentById(id);
     }
 
+    @Override
+    public List<TSqdDetail> selectTSqdDetailListby4para(List<TSqdDetail> tSqdDetaillist) {
+        List<TSqdDetail> returntsqddetaillist = new ArrayList<>();
+        if (tSqdDetaillist != null && !tSqdDetaillist.isEmpty()) {
+            for (TSqdDetail tSqdDetail : tSqdDetaillist) {
+                List<TSqdDetail> resultList = tElectronComponentMapper.selectTSqdDetailListby4para(tSqdDetail);
+
+                if (resultList.isEmpty()) { // 如果查询结果为空,将传入的 tSqdDetail 放入返回列表
+                    returntsqddetaillist.add(tSqdDetail);
+                }
+                else {
+                    for (TSqdDetail result : resultList) {
+                        if (tSqdDetail.getId() != null) {
+                            result.setId(tSqdDetail.getId());
+                        } else {
+                            result.setId(null);
+                        }
+
+                        if (tSqdDetail.getSqdId() != null) {
+                            result.setSqdId(tSqdDetail.getSqdId());
+                        } else {
+                            result.setSqdId(null);
+                        }
+                    }
+                    returntsqddetaillist.addAll(resultList); // 累积结果
+                }
+            }
+        } else {
+            log.warn("The input list is null or empty, no operation performed.");
+        }
+        return returntsqddetaillist;
+    }
+
+
     /**
      * 查询元器件列表
      * 

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

@@ -47,6 +47,11 @@ public class TEvaluationServiceImpl implements ITEvaluationService
         return tEvaluationMapper.selectTEvaluationList(tEvaluation);
     }
 
+    @Override
+    public List<Long> selectTEvaluationListbymark(TEvaluation tEvaluation) {
+        return tEvaluationMapper.selectTEvaluationListbymark(tEvaluation);
+    }
+
     /**
      * 新增评价
      * 

+ 112 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TSqdDetailServiceImpl.java

@@ -0,0 +1,112 @@
+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.TSqdDetailMapper;
+import com.cirs.biz.domain.TSqdDetail;
+import com.cirs.biz.service.ITSqdDetailService;
+
+/**
+ * SQD明细Service业务层处理
+ * 
+ * @author allen
+ * @date 2024-05-01
+ */
+@Service
+public class TSqdDetailServiceImpl implements ITSqdDetailService 
+{
+    @Autowired
+    private TSqdDetailMapper tSqdDetailMapper;
+
+    /**
+     * 查询SQD明细
+     * 
+     * @param id SQD明细主键
+     * @return SQD明细
+     */
+    @Override
+    public TSqdDetail selectTSqdDetailById(Long id)
+    {
+        return tSqdDetailMapper.selectTSqdDetailById(id);
+    }
+
+    @Override
+    public List<TSqdDetail> selectTSqdDetailBySqdid(Long sqdid) {
+        return tSqdDetailMapper.selectTSqdDetailBySqdid(sqdid);
+    }
+
+    /**
+     * 查询SQD明细列表
+     * 
+     * @param tSqdDetail SQD明细
+     * @return SQD明细
+     */
+    @Override
+    public List<TSqdDetail> selectTSqdDetailList(TSqdDetail tSqdDetail)
+    {
+        return tSqdDetailMapper.selectTSqdDetailList(tSqdDetail);
+    }
+
+
+    /**
+     * 新增SQD明细
+     * 
+     * @param tSqdDetail SQD明细
+     * @return 结果
+     */
+    @Override
+    public int insertTSqdDetail(TSqdDetail tSqdDetail)
+    {
+        tSqdDetail.setCreateTime(DateUtils.getNowDate());
+        return tSqdDetailMapper.insertTSqdDetail(tSqdDetail);
+    }
+
+    /**
+     * 修改SQD明细
+     * 
+     * @param tSqdDetail SQD明细
+     * @return 结果
+     */
+    @Override
+    public int updateTSqdDetail(TSqdDetail tSqdDetail)
+    {
+        tSqdDetail.setUpdateTime(DateUtils.getNowDate());
+        return tSqdDetailMapper.updateTSqdDetail(tSqdDetail);
+    }
+
+    /**
+     * 批量删除SQD明细
+     * 
+     * @param ids 需要删除的SQD明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTSqdDetailByIds(Long[] ids)
+    {
+        return tSqdDetailMapper.deleteTSqdDetailByIds(ids);
+    }
+
+    /**
+     * 删除SQD明细信息
+     * 
+     * @param id SQD明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTSqdDetailById(Long id)
+    {
+        return tSqdDetailMapper.deleteTSqdDetailById(id);
+    }
+
+    @Override
+    public int getcountbysqdid(Long sqdid) {
+        return tSqdDetailMapper.getcountbysqdid(sqdid);
+    }
+
+    @Override
+    public List getcountbysqdidoption(Long[] id) {
+        return tSqdDetailMapper.getcountbysqdidoption(id);
+    }
+}

+ 141 - 0
cirs-biz/src/main/java/com/cirs/biz/service/impl/TSqdServiceImpl.java

@@ -0,0 +1,141 @@
+package com.cirs.biz.service.impl;
+
+import java.util.List;
+
+import com.cirs.biz.domain.TSqdDetail;
+import com.cirs.biz.mapper.TSqdDetailMapper;
+import com.cirs.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cirs.biz.mapper.TSqdMapper;
+import com.cirs.biz.domain.TSqd;
+import com.cirs.biz.service.ITSqdService;
+
+/**
+ * 双清单管理Service业务层处理
+ * 
+ * @author allen
+ * @date 2024-04-30
+ */
+@Service
+public class TSqdServiceImpl implements ITSqdService 
+{
+    @Autowired
+    private TSqdMapper tSqdMapper;
+
+    @Autowired
+    private TSqdDetailMapper tsqdDetailMapper;
+
+    /**
+     * 查询双清单管理
+     * 
+     * @param id 双清单管理主键
+     * @return 双清单管理
+     */
+    @Override
+    public TSqd selectTSqdById(Long id)
+    {
+        return tSqdMapper.selectTSqdById(id);
+    }
+
+    /**
+     * 查询双清单管理列表
+     * 
+     * @param tSqd 双清单管理
+     * @return 双清单管理
+     */
+    @Override
+    public List<TSqd> selectTSqdList(TSqd tSqd)
+    {
+        return tSqdMapper.selectTSqdList(tSqd);
+    }
+
+    /**
+     * 新增双清单管理
+     * 
+     * @param tSqd 双清单管理
+     * @return 结果
+     */
+    @Override
+    public int insertTSqd(TSqd tSqd) {
+        tSqd.setCreateTime(DateUtils.getNowDate());
+
+        // 插入主记录
+        int result = tSqdMapper.insertTSqd(tSqd);
+        if (result > 0) { // 确认主记录插入成功
+            long sqdid = tSqd.getId();
+            // 插入明细记录前检查集合是否非空
+            if (tSqd.getSqddetaillist() != null && !tSqd.getSqddetaillist().isEmpty()) {
+                // 设置每个TSqdDetail的sqdId
+                for (TSqdDetail detail : tSqd.getSqddetaillist()) {
+                    detail.setSqdId(sqdid); // 设置外键关联
+                }
+                // 批量插入明细记录
+                int detailResult = tsqdDetailMapper.batchInsertTSqdDetail(tSqd.getSqddetaillist());
+                if (detailResult > 0) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            } else {
+                return 1;
+            }
+        } else {
+            return 0;
+        }
+    }
+
+
+
+
+
+    /**
+     * 修改双清单管理
+     * 
+     * @param tSqd 双清单管理
+     * @return 结果
+     */
+    @Override
+    public int updateTSqd(TSqd tSqd)
+    {
+        tSqd.setUpdateTime(DateUtils.getNowDate());
+        System.out.println(tSqd.getSqddetaillist());
+        // 遍历 sqdDetailList
+        for (TSqdDetail detail : tSqd.getSqddetaillist()) {
+            if (detail.getId() != null) {
+                // 当 id 不为空时执行更新操作
+                tsqdDetailMapper.updateTSqdDetail(detail);
+            } else {
+                // 当 id 为空时执行增加操作
+                detail.setSqdId(tSqd.getId());
+                tsqdDetailMapper.insertTSqdDetail(detail);
+            }
+        }
+        return tSqdMapper.updateTSqd(tSqd);
+    }
+
+    /**
+     * 批量删除双清单管理
+     * 
+     * @param ids 需要删除的双清单管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTSqdByIds(Long[] ids)
+    {
+        return tSqdMapper.deleteTSqdByIds(ids);
+    }
+
+    /**
+     * 删除双清单管理信息
+     * 
+     * @param id 双清单管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTSqdById(Long id)
+    {
+        return tSqdMapper.deleteTSqdById(id);
+    }
+
+}

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

@@ -11,6 +11,7 @@
         <result property="replaceDomesticModel"    column="replace_domestic_model"    />
         <result property="qualityGrade"    column="quality_grade"    />
     </resultMap>
+
     <select id="RecommendQueryList" resultMap="RecommendInfoResult">
         select id,component_model,component_name,quality_grade,replace_domestic_model
         from t_electron_component where id in

+ 86 - 0
cirs-biz/src/main/resources/mapper/biz/TDataPreprocessingMapper.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.TDataPreprocessingMapper">
+    
+    <resultMap type="TDataPreprocessing" id="TDataPreprocessingResult">
+        <result property="id"    column="id"    />
+        <result property="columnName"    column="column_name"    />
+        <result property="beforeProcessing"    column="before_processing"    />
+        <result property="afterProcessing"    column="after_processing"    />
+        <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="selectTDataPreprocessingVo">
+        select id, column_name, before_processing, after_processing, create_by, create_time, update_by, update_time, remark from t_data_preprocessing
+    </sql>
+
+    <select id="selectTDataPreprocessingList" parameterType="TDataPreprocessing" resultMap="TDataPreprocessingResult">
+        <include refid="selectTDataPreprocessingVo"/>
+        <where>  
+            <if test="columnName != null  and columnName != ''"> and column_name like concat('%', #{columnName}, '%')</if>
+            <if test="beforeProcessing != null  and beforeProcessing != ''"> and before_processing = #{beforeProcessing}</if>
+            <if test="afterProcessing != null  and afterProcessing != ''"> and after_processing = #{afterProcessing}</if>
+        </where>
+    </select>
+    
+    <select id="selectTDataPreprocessingById" parameterType="Long" resultMap="TDataPreprocessingResult">
+        <include refid="selectTDataPreprocessingVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTDataPreprocessing" parameterType="TDataPreprocessing" useGeneratedKeys="true" keyProperty="id">
+        insert into t_data_preprocessing
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="columnName != null">column_name,</if>
+            <if test="beforeProcessing != null">before_processing,</if>
+            <if test="afterProcessing != null">after_processing,</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="columnName != null">#{columnName},</if>
+            <if test="beforeProcessing != null">#{beforeProcessing},</if>
+            <if test="afterProcessing != null">#{afterProcessing},</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="updateTDataPreprocessing" parameterType="TDataPreprocessing">
+        update t_data_preprocessing
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="columnName != null">column_name = #{columnName},</if>
+            <if test="beforeProcessing != null">before_processing = #{beforeProcessing},</if>
+            <if test="afterProcessing != null">after_processing = #{afterProcessing},</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="deleteTDataPreprocessingById" parameterType="Long">
+        delete from t_data_preprocessing where id = #{id}
+    </delete>
+
+    <delete id="deleteTDataPreprocessingByIds" parameterType="String">
+        delete from t_data_preprocessing where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

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

@@ -63,6 +63,54 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="remark"    column="remark"    />
     </resultMap>
 
+    <resultMap type="TSqdDetail" id="TSqdDetailResult">
+        <result property="componentCategoryCode"    column="component_category_code"    />
+        <result property="componentModel"    column="component_model"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="qualityGrade"    column="quality_grade"    />
+        <result property="encapsulationMode"    column="encapsulation_mode"    />
+        <result property="zzkkLevel"    column="zzkk_level"    />
+        <result property="unitPrice"    column="unit_price"    />
+        <result property="deliveryCycle"    column="delivery_cycle"    />
+        <result property="wkbInfo"    column="wkb_info"    />
+        <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>
+
+
+    <select id="selectTSqdDetailListby4para" parameterType="TSqdDetail" resultMap="TSqdDetailResult">
+        SELECT t_electron_component.*
+        FROM (
+        <include refid="selectTElectronComponentVo"/>
+        ) AS t_electron_component
+        LEFT JOIN t_data_preprocessing AS dp ON t_electron_component.manufacturer = dp.after_processing
+        <where>
+            <choose>
+            <!-- 如果任何一个参数为空,则不返回值 -->
+            <when test="manufacturer == null or manufacturer == '' or componentModel == null or componentModel == '' or qualityGrade == null or qualityGrade == '' or encapsulationMode == null or encapsulationMode == ''">
+                AND 1 = 0
+            </when>
+            <otherwise>
+                <if test="manufacturer != null and manufacturer != ''">
+                    and dp.before_processing = #{manufacturer}
+                </if>
+                <if test="componentModel != null and componentModel != ''">AND t_electron_component.component_model = #{componentModel}</if>
+                <if test="qualityGrade != null and qualityGrade != ''">AND t_electron_component.quality_grade = #{qualityGrade}</if>
+                <if test="encapsulationMode != null and encapsulationMode != ''">AND t_electron_component.encapsulation_mode = #{encapsulationMode}</if>
+                <!-- 如果四个参数都为空,则直接返回空结果集 -->
+            </otherwise>
+            </choose>
+        </where>
+    </select>
+
+
+
+
+
+
     <sql id="selectTElectronComponentVo">
         select id, component_category, component_category_code, component_name, manufacturer, component_model, replace_domestic_model, quality_grade, quality_problem, delivery_cycle, supply_quantity, unit_price, zzkk_level, wkb_info, in_preference, quality_inspection, shutdown_date, forbidden, app_validation_data, risk_evaluation_index, resistance_value, resistance_precision, resistance_temperature, resistance_power, encapsulation_mode, capacitance_value, capacitance_loss, temperature_coefficient, rated_voltage, inductance, quality_factor, dc_resistance, rated_current, 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, boundary_dimension, antistatic_capacity, radiation_resistance, materials, craft, weight, create_by, create_time, update_by, update_time, remark from t_electron_component
     </sql>
@@ -135,6 +183,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select component_model,quality_grade,component_name from t_electron_component where id = #{id}
     </select>
 
+
+
+
     <insert id="insertTElectronComponent" parameterType="TElectronComponent" useGeneratedKeys="true" keyProperty="id">
         insert into t_electron_component
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 21 - 1
cirs-biz/src/main/resources/mapper/biz/TEvaluationMapper.xml

@@ -32,7 +32,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="useScene != null and useScene != ''">and use_scene = #{useScene}</if>
         </where>
     </select>
-    
+
+
+
+    <select id="selectTEvaluationListbymark" parameterType="TEvaluation" resultType="java.lang.Long">
+        SELECT DISTINCT component_id
+        FROM (
+        SELECT component_id
+        FROM t_evaluation
+        <where>
+            <if test="searchCondition != null"> and search_condition = #{searchCondition}</if>
+            <if test="mark != null"> and mark = #{mark}</if>
+            <if test="createBy != null"> and create_by = #{createBy}</if>
+            <if test="useScene != null"> and use_scene = #{useScene}</if>
+        </where>
+        ORDER BY create_time DESC
+        )AS subquery
+
+    </select>
+
+
+
     <select id="selectTEvaluationById" parameterType="Long" resultMap="TEvaluationResult">
         <include refid="selectTEvaluationVo"/>
         where id = #{id}

+ 161 - 0
cirs-biz/src/main/resources/mapper/biz/TSqdDetailMapper.xml

@@ -0,0 +1,161 @@
+<?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.TSqdDetailMapper">
+    
+    <resultMap type="TSqdDetail" id="TSqdDetailResult">
+        <result property="id"    column="id"    />
+        <result property="sqdId"    column="sqd_id"    />
+        <result property="componentCategoryCode"    column="component_category_code"    />
+        <result property="componentModel"    column="component_model"    />
+        <result property="manufacturer"    column="manufacturer"    />
+        <result property="qualityGrade"    column="quality_grade"    />
+        <result property="encapsulationMode"    column="encapsulation_mode"    />
+        <result property="zzkkLevel"    column="zzkk_level"    />
+        <result property="unitPrice"    column="unit_price"    />
+        <result property="deliveryCycle"    column="delivery_cycle"    />
+        <result property="wkbInfo"    column="wkb_info"    />
+        <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="selectTSqdDetailVo">
+        select id, sqd_id, component_category_code, component_model, manufacturer, quality_grade, encapsulation_mode, zzkk_level, unit_price, delivery_cycle, wkb_info, create_by, create_time, update_by, update_time, remark from t_sqd_detail
+    </sql>
+
+    <select id="selectTSqdDetailList" parameterType="TSqdDetail" resultMap="TSqdDetailResult">
+        <include refid="selectTSqdDetailVo"/>
+        <where>  
+            <if test="sqdId != null "> and sqd_id = #{sqdId}</if>
+            <if test="componentCategoryCode != null  and componentCategoryCode != ''"> and component_category_code = #{componentCategoryCode}</if>
+            <if test="componentModel != null  and componentModel != ''"> and component_model = #{componentModel}</if>
+            <if test="manufacturer != null  and manufacturer != ''"> and manufacturer = #{manufacturer}</if>
+            <if test="qualityGrade != null  and qualityGrade != ''"> and quality_grade = #{qualityGrade}</if>
+            <if test="encapsulationMode != null  and encapsulationMode != ''"> and encapsulation_mode = #{encapsulationMode}</if>
+            <if test="zzkkLevel != null  and zzkkLevel != ''"> and zzkk_level = #{zzkkLevel}</if>
+            <if test="unitPrice != null "> and unit_price = #{unitPrice}</if>
+            <if test="deliveryCycle != null "> and delivery_cycle = #{deliveryCycle}</if>
+            <if test="wkbInfo != null  and wkbInfo != ''"> and wkb_info = #{wkbInfo}</if>
+        </where>
+    </select>
+
+
+
+    
+    <select id="selectTSqdDetailById" parameterType="Long" resultMap="TSqdDetailResult">
+        <include refid="selectTSqdDetailVo"/>
+        where id = #{id}
+    </select>
+
+
+    <select id="selectTSqdDetailBySqdid" parameterType="Long" resultMap="TSqdDetailResult">
+        <include refid="selectTSqdDetailVo"/>
+        where sqd_id = #{sqdId}
+    </select>
+    <insert id="insertTSqdDetail" parameterType="TSqdDetail" useGeneratedKeys="true" keyProperty="id">
+        insert into t_sqd_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="sqdId != null">sqd_id,</if>
+            <if test="componentCategoryCode != null">component_category_code,</if>
+            <if test="componentModel != null">component_model,</if>
+            <if test="manufacturer != null">manufacturer,</if>
+            <if test="qualityGrade != null">quality_grade,</if>
+            <if test="encapsulationMode != null">encapsulation_mode,</if>
+            <if test="zzkkLevel != null">zzkk_level,</if>
+            <if test="unitPrice != null">unit_price,</if>
+            <if test="deliveryCycle != null">delivery_cycle,</if>
+            <if test="wkbInfo != null">wkb_info,</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="sqdId != null">#{sqdId},</if>
+            <if test="componentCategoryCode != null">#{componentCategoryCode},</if>
+            <if test="componentModel != null">#{componentModel},</if>
+            <if test="manufacturer != null">#{manufacturer},</if>
+            <if test="qualityGrade != null">#{qualityGrade},</if>
+            <if test="encapsulationMode != null">#{encapsulationMode},</if>
+            <if test="zzkkLevel != null">#{zzkkLevel},</if>
+            <if test="unitPrice != null">#{unitPrice},</if>
+            <if test="deliveryCycle != null">#{deliveryCycle},</if>
+            <if test="wkbInfo != null">#{wkbInfo},</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>
+
+    <insert id="batchInsertTSqdDetail" parameterType="java.util.List">
+        INSERT INTO t_sqd_detail
+        (sqd_id, component_category_code, component_model, manufacturer, quality_grade, encapsulation_mode, zzkk_level, unit_price, delivery_cycle, wkb_info, create_by, create_time, update_by, update_time, remark)
+        VALUES
+        <foreach item="detail" collection="list" separator=",">
+            (#{detail.sqdId}, #{detail.componentCategoryCode}, #{detail.componentModel}, #{detail.manufacturer}, #{detail.qualityGrade}, #{detail.encapsulationMode}, #{detail.zzkkLevel}, #{detail.unitPrice}, #{detail.deliveryCycle}, #{detail.wkbInfo}, #{detail.createBy}, #{detail.createTime}, #{detail.updateBy}, #{detail.updateTime}, #{detail.remark})
+        </foreach>
+    </insert>
+
+
+    <update id="updateTSqdDetail" parameterType="TSqdDetail">
+        update t_sqd_detail
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="sqdId != null">sqd_id = #{sqdId},</if>
+            <if test="componentCategoryCode != null">component_category_code = #{componentCategoryCode},</if>
+            <if test="componentModel != null">component_model = #{componentModel},</if>
+            <if test="manufacturer != null">manufacturer = #{manufacturer},</if>
+            <if test="qualityGrade != null">quality_grade = #{qualityGrade},</if>
+            <if test="encapsulationMode != null">encapsulation_mode = #{encapsulationMode},</if>
+            <if test="zzkkLevel != null">zzkk_level = #{zzkkLevel},</if>
+            <if test="unitPrice != null">unit_price = #{unitPrice},</if>
+            <if test="deliveryCycle != null">delivery_cycle = #{deliveryCycle},</if>
+            <if test="wkbInfo != null">wkb_info = #{wkbInfo},</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="deleteTSqdDetailById" parameterType="Long">
+        delete from t_sqd_detail where id = #{id}
+    </delete>
+
+    <delete id="deleteTSqdDetailByIds" parameterType="String">
+        delete from t_sqd_detail where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+
+
+
+    <select id="getcountbysqdid" parameterType="Long" resultType="java.lang.Integer">
+        select count(*)
+        from t_sqd_detail
+        where t_sqd_detail.sqd_id = #{id}
+    </select>
+
+
+    <select id="getcountbysqdidoption" parameterType="String" resultType="Map">
+        select distinct sqd_id
+        from t_sqd_detail
+        where t_sqd_detail.sqd_id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        group by sqd_id
+        having count(0) > 0
+    </select>
+
+</mapper>

+ 79 - 0
cirs-biz/src/main/resources/mapper/biz/TSqdMapper.xml

@@ -0,0 +1,79 @@
+<?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.TSqdMapper">
+    
+    <resultMap type="TSqd" id="TSqdResult">
+        <result property="id"    column="id"    />
+        <result property="sqdName"    column="sqd_name"    />
+        <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="selectTSqdVo">
+        select id, sqd_name, create_by, create_time, update_by, update_time, remark from t_sqd
+    </sql>
+
+    <select id="selectTSqdList" parameterType="TSqd" resultMap="TSqdResult">
+        <include refid="selectTSqdVo"/>
+        <where>  
+            <if test="sqdName != null  and sqdName != ''"> and sqd_name like concat('%', #{sqdName}, '%')</if>
+        </where>
+    </select>
+    
+    <select id="selectTSqdById" parameterType="Long" resultMap="TSqdResult">
+        <include refid="selectTSqdVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTSqd" parameterType="TSqd" useGeneratedKeys="true" keyProperty="id">
+        insert into t_sqd
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="sqdName != null">sqd_name,</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="sqdName != null">#{sqdName},</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="updateTSqd" parameterType="TSqd">
+        update t_sqd
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="sqdName != null">sqd_name = #{sqdName},</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="deleteTSqdById" parameterType="Long">
+        delete from t_sqd where id = #{id}
+    </delete>
+
+    <delete id="deleteTSqdByIds" parameterType="String">
+        DELETE t_sqd_detail, t_sqd
+        FROM t_sqd
+        LEFT JOIN t_sqd_detail ON t_sqd_detail.sqd_id = t_sqd.id
+        where t_sqd.id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

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

@@ -8,6 +8,16 @@ export function listComponent(query) {
   })
 }
 
+
+
+export function listpara(data) {
+  return request({
+    url: '/biz/component/listpara',
+    method: 'post',
+    data: data
+  })
+}
+
 // 查询元器件详细
 export function getComponent(id) {
   return request({

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

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询预处理列表
+export function listPreprocessing(query) {
+  return request({
+    url: '/biz/preprocessing/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询预处理详细
+export function getPreprocessing(id) {
+  return request({
+    url: '/biz/preprocessing/' + id,
+    method: 'get'
+  })
+}
+
+// 新增预处理
+export function addPreprocessing(data) {
+  return request({
+    url: '/biz/preprocessing',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改预处理
+export function updatePreprocessing(data) {
+  return request({
+    url: '/biz/preprocessing',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除预处理
+export function delPreprocessing(id) {
+  return request({
+    url: '/biz/preprocessing/' + id,
+    method: 'delete'
+  })
+}

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

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询双清单管理列表
+export function listSqd(query) {
+  return request({
+    url: '/biz/sqd/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询双清单管理详细
+export function getSqd(id) {
+  return request({
+    url: '/biz/sqd/' + id,
+    method: 'get'
+  })
+}
+
+// 新增双清单管理
+export function addSqd(data) {
+  return request({
+    url: '/biz/sqd',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改双清单管理
+export function updateSqd(data) {
+  return request({
+    url: '/biz/sqd',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除双清单管理
+export function delSqd(id) {
+  return request({
+    url: '/biz/sqd/' + id,
+    method: 'delete'
+  })
+}

+ 61 - 0
cirs-ui/src/api/biz/sqddetail.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询SQD明细列表
+export function listSqddetail(query) {
+  return request({
+    url: '/biz/sqddetail/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询SQD明细详细
+export function getSqddetail(id) {
+  return request({
+    url: '/biz/sqddetail/' + id,
+    method: 'get'
+  })
+}
+
+// 查询SQD明细详细
+export function checkSqddetail(id) {
+  return request({
+    url: '/biz/sqddetail/sqddetailexist/' + id,
+    method: 'get'
+  })
+}
+
+
+// 查询SQD明细详细
+export function getSqddetailbysqdid(sqdid) {
+  return request({
+    url: '/biz/sqddetail/sqdid/' + sqdid,
+    method: 'get'
+  })
+}
+
+// 新增SQD明细
+export function addSqddetail(data) {
+  return request({
+    url: '/biz/sqddetail',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改SQD明细
+export function updateSqddetail(data) {
+  return request({
+    url: '/biz/sqddetail',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除SQD明细
+export function delSqddetail(id) {
+  return request({
+    url: '/biz/sqddetail/' + id,
+    method: 'delete'
+  })
+}

+ 173 - 0
cirs-ui/src/components/EditTable/index.vue

@@ -0,0 +1,173 @@
+<template>
+    <div id="edittable">
+        <div class="el-table-add-row" style="border: 1px solid #CCC; text-align: center; padding: 1px;  margin: 2px;" @click="addRow()"><span>+ 添加</span></div>
+        <el-table size="mini" :data="datainfos" border style="width: 100%" @cell-click="cellClick" :max-height="maxh">
+            <el-table-column type="index"></el-table-column>
+            <el-table-column v-for="(v,i) in columns" :prop="v.name" :label="v.label" :width="v.width">
+                <template slot-scope="scope">
+                    <span v-if="scope.row.isSet && edited">
+                        <el-input v-if="v.type == 'input'" @blur="saveData(scope.row)" size="mini" placeholder="请输入内容" v-model="scope.row[v.name]"></el-input>
+                        <el-select v-if="v.type == 'select'" @blur="saveData(scope.row)" size="mini" placeholder="请输入内容" v-model="scope.row[v.name]"><el-option v-for="opt in v.options" :key="opt.value" :label="opt.label" :value="opt.value"></el-option></el-select>
+                        <el-date-picker v-if="v.type == 'datePicker'" value-format="yyyy-MM-dd" @blur="saveData(scope.row)" size="mini" v-model="scope.row[v.name]" type="date" placeholder="选择日期"></el-date-picker>
+                        <el-time-picker v-if="v.type == 'timePicker'" @blur="saveData(scope.row)" size="mini" v-model="scope.row[v.name]" placeholder="选择时间"></el-time-picker>
+                        <el-switch v-if="v.type == 'switch' && edited" @change="saveData(scope.row)" v-model="scope.row[v.name]"></el-switch>
+                        <el-switch v-if="v.type == 'switch' && !edited" @change="saveData(scope.row)" v-model="scope.row[v.name]" disabled></el-switch>
+                        <el-radio v-if="v.type == 'radio' && edited" @change="saveData(scope.row)" v-model="scope.row[v.name]" v-for="(item, index) in v.items" :label="item">{{item}}</el-radio>
+                        <el-radio v-if="v.type == 'radio' && !edited" @change="saveData(scope.row)" v-model="scope.row[v.name]" v-for="(item, index) in v.items" :label="item" disabled>{{item}}</el-radio>
+                        <el-checkbox-group v-if="v.type == 'checkbox' && edited" @change="saveData(scope.row)" v-model="scope.row[v.name]"><el-checkbox  v-for="(item, index) in v.items" :label="item"></el-checkbox></el-checkbox-group>
+                        <el-checkbox-group v-if="v.type == 'checkbox' && edited" @change="saveData(scope.row)" v-model="scope.row[v.name]"><el-checkbox  v-for="(item, index) in v.items" :label="item" disabled></el-checkbox></el-checkbox-group>
+                    </span>
+                    <span v-else>
+                        <span v-if="v.type == 'switch' || v.type == 'radio' || v.type == 'checkbox'">
+                            <el-switch v-if="v.type == 'switch'" v-model="scope.row[v.name]" disabled></el-switch>
+                            <el-radio v-if="v.type == 'radio'" v-model="scope.row[v.name]" v-for="(item, index) in v.items" :label="item" disabled>{{item}}</el-radio>
+                            <el-checkbox-group v-if="v.type == 'checkbox'" v-model="scope.row[v.name]"><el-checkbox  v-for="(item, index) in v.items" :label="item" disabled></el-checkbox></el-checkbox-group>
+                        </span>
+                        <span v-else>
+                        {{scope.row[v.name]}}
+                        </span>
+                    </span>
+                </template>
+            </el-table-column>
+            <el-table-column label="操作" fixed="right">
+                <template slot-scope="scope">
+                    <span class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;" @click="pwdChange(scope.row,scope.$index,false)">
+                        删除
+                    </span>
+                </template>
+            </el-table-column>
+        </el-table>
+    </div>
+</template>
+<script>
+import { get, post } from "../../../api/axios";
+
+export default {
+    name: 'EditTable',
+    data() {
+        return {
+            sel : null,
+            datainfos : this.tableData,
+            datamodel : null,
+            edited: true,
+            maxh: 90
+        }
+    },
+    props: {
+        columns: Array,
+        tableData: Array,
+        isEdit: String,
+        maxheight: Number,
+        callback: Function
+    },
+    mounted() {
+        if(this.isEdit) {
+            this.edited = this.isEdit == 'true';
+        }
+        if(!this.maxheight) {
+            this.maxheight = 200;
+        }
+    },
+    methods: {
+        cellClick(row, column, cell, event) {
+            for(var i = 0; i < this.datainfos.length; i++) {
+                this.datainfos[i].isSet = false;
+            }
+            row.isSet = true;
+        },
+        saveData(row) {
+            //alert(JSON.stringify(this.datainfos));
+            row.isSet = false;
+            this.callback(this.datainfos);
+        },
+        //读取表格数据
+        readMasterUser() {
+            //根据实际情况,自己改下啊 
+            this.datainfos.map(i => {
+                i.id = generateId.get();//模拟后台插入成功后有了id
+                i.isSet = false;//给后台返回数据添加`isSet`标识
+                return i;
+            });
+        },
+        //添加账号
+        addRow() {
+            if(!this.datainfos) {
+                this.datainfos = [];
+            }
+            for(var i = 0; i < this.datainfos.length; i++) {
+                this.datainfos[i].isSet = false;
+            }
+            let j = {};
+            for(var i = 0; i < this.columns.length; i++) {
+                j[this.columns[i].name] = "";
+            }
+            j['isSet'] = true;
+            //{'name' : '', 'age' : 0, 'birthdate' : '', 'address' : '', isSet: false};
+            this.datainfos.push(j);
+            this.sel = JSON.parse(JSON.stringify(j));
+            if(45 * this.datainfos.length < this.maxheight) {
+                this.maxh += 45;
+            }
+        },
+        //修改
+        pwdChange(row, index, cg) {
+            this.callback(this.datainfos);
+            //是否是取消操作
+            if (!cg) {
+                if (!this.sel.id) this.datainfos.splice(index, 1);
+                return row.isSet = !row.isSet;
+            }
+            //提交数据
+            if (row.isSet) {
+                //项目是模拟请求操作  自己修改下
+                (function () {
+                    let data = JSON.parse(JSON.stringify(this.sel));
+                    for (let k in data) row[k] = data[k];
+                    this.$message({
+                        type: 'success',
+                        message: "保存成功!"
+                    });
+                    //然后这边重新读取表格数据
+                    this.readMasterUser();
+                    row.isSet = false;
+                })();
+            } else {
+                //this.sel = JSON.parse(JSON.stringify(row));
+                row.isSet = true;
+            }
+        }
+    },
+    created() {
+        var that = this;
+        for(var num = 0; num < that.columns.length; num++) {
+            if(that.columns[num].loadApi) {
+                var column = that.columns[num];
+                get(column.loadApi, {}, null, (response) => {
+                    if(column.type == 'select') {
+                        column['options'] = response.data;
+                    } else {
+                        column.items = response.data;
+                    }
+                });
+            }
+        }
+    }
+}
+</script>
+<style>
+.headerback {
+  background: #e8f4fd!important;
+}
+.tablebox {
+  width: 98%;
+  margin-left: 1%;
+  margin-top: 5px;
+}
+.tb-edit .input-box {
+   display: none
+}
+.tb-edit .current-cell .input-box {
+   display: block;
+   margin-left: -15px;
+}
+</style>

+ 266 - 0
cirs-ui/src/views/biz/preprocessing/index.vue

@@ -0,0 +1,266 @@
+<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="columnName">
+        <el-input
+          v-model="queryParams.columnName"
+          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:preprocessing: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:preprocessing: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:preprocessing: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:preprocessing:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="preprocessingList" @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="columnName" />
+      <el-table-column label="处理前" align="center" prop="beforeProcessing" />
+      <el-table-column label="处理后" align="center" prop="afterProcessing" />
+      <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:preprocessing:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:preprocessing: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="columnName">
+          <el-input v-model="form.columnName" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="处理前" prop="beforeProcessing">
+          <el-input v-model="form.beforeProcessing" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="处理后" prop="afterProcessing">
+          <el-input v-model="form.afterProcessing" type="textarea" 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 { listPreprocessing, getPreprocessing, delPreprocessing, addPreprocessing, updatePreprocessing } from "@/api/biz/preprocessing";
+
+export default {
+  name: "Preprocessing",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 预处理表格数据
+      preprocessingList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        columnName: null,
+        beforeProcessing: null,
+        afterProcessing: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询预处理列表 */
+    getList() {
+      this.loading = true;
+      listPreprocessing(this.queryParams).then(response => {
+        this.preprocessingList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        columnName: null,
+        beforeProcessing: null,
+        afterProcessing: 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
+      getPreprocessing(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) {
+            updatePreprocessing(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addPreprocessing(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 delPreprocessing(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/preprocessing/export', {
+        ...this.queryParams
+      }, `preprocessing_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 487 - 0
cirs-ui/src/views/biz/sqd/index.vue

@@ -0,0 +1,487 @@
+<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="sqd名称" prop="sqdName">
+        <el-input
+          v-model="queryParams.sqdName"
+          placeholder="请输入sqd名称"
+          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:sqd: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:sqd: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:sqd: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:sqd:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="sqdList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="sqd名称" align="center" prop="sqdName" />
+      <el-table-column label="创建者" align="center" prop="createBy" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="更新者" align="center" prop="updateBy" />
+      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.updateTime, '{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:sqd:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:sqd: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="1500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="sqd名称" prop="sqdName" >
+          <el-input v-model="form.sqdName" placeholder="请输入sqd名称" />
+        </el-form-item>
+        <el-button
+          type="primary"
+          size="mini"
+          icon="el-icon-circle-plus-outline"
+          @click="addRow()"
+          style="margin-bottom: 20px"
+          >新增一行</el-button
+        >
+      <el-table v-loading="loading" :data="form.sqddetaillist" @selection-change="handleSelectionChange" style="width: 1500px">
+        
+          <!-- <el-table-column label="编号" align="center" prop="id" /> -->
+          <el-table-column label="分类代码" align="center" prop="componentCategoryCode" style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.componentCategoryCode'"  style="display: flex; justify-content: center; ">
+              <el-input v-model="scope.row.componentCategoryCode"  clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          <el-table-column label="型号规格" align="center" prop="componentModel"  style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.componentModel'" :rules="[{ required: true, message: '请输入型号规格', trigger: 'blur' }]" style="display: flex; justify-content: center;">
+              <el-input v-model="scope.row.componentModel" clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          <el-table-column label="生产厂家" align="center" prop="manufacturer"  style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.manufacturer'" :rules="[{ required: true, message: '请输入生产厂家', trigger: 'blur' }]" style="display: flex; justify-content: center;">
+              <el-input v-model="scope.row.manufacturer"  clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          <el-table-column label="质量等级" align="center" prop="qualityGrade"   style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.qualityGrade'" :rules="[{ required: true, message: '请输入质量等级', trigger: 'blur' }]" style="display: flex; justify-content: center;">
+              <el-input v-model="scope.row.qualityGrade"  clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          <el-table-column label="封装形式" align="center" prop="encapsulationMode"   style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.encapsulationMode'" :rules="[{ required: true, message: '请输入封装形式', trigger: 'blur' }]" style="display: flex; justify-content: center;">
+              <el-input v-model="scope.row.encapsulationMode"  clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          <el-table-column label="ZZKK等级" align="center" prop="zzkkLevel"   style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.zzkkLevel'" style="display: flex; justify-content: center;">
+              <el-input v-model="scope.row.zzkkLevel"  clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          <el-table-column label="价格" align="center" prop="unitPrice"  style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.unitPrice'" style="display: flex; justify-content: center;">
+              <el-input v-model="scope.row.unitPrice"  clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          <el-table-column label="供货周期" align="center" prop="deliveryCycle"  style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.deliveryCycle'" style="display: flex; justify-content: center;">
+              <el-input v-model="scope.row.deliveryCycle" clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          <el-table-column label="WKB情况" align="center" prop="wkbInfo" style="width: 15%">
+            <template slot-scope="scope">
+            <el-form-item :prop="'sqddetaillist.' + scope.$index + '.wkbInfo'" style="display: flex; justify-content: center;">
+              <el-input v-model="scope.row.wkbInfo"  clearable size="mini" style="width: 100px; text-align: center; margin-right: 65px;"></el-input>
+            </el-form-item>
+          </template>
+          </el-table-column>
+          
+          <el-table-column label="操作" align="center">
+        <template slot-scope="scope">
+          <el-button
+            type="success"
+            icon="el-icon-plus"
+            circle
+            size="small"
+            @click="addRowIndex(scope.$index)"
+          ></el-button>
+          <el-button
+            type="danger"
+            icon="el-icon-minus"
+            circle
+            size="small"
+            @click="delRow(scope.$index)"
+          ></el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+      </el-form>
+      <div slot="footer" class="dialogbutton">
+        <div class="button-wrapper"> <!-- 新增的包装元素 -->
+      <el-button type="primary" @click="standard">标准化</el-button>
+      <el-button type="success" @click="submitForm">提交</el-button>
+      <el-button @click="cancel">返回</el-button>
+    </div>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import { listSqd, getSqd, delSqd, addSqd, updateSqd } from "@/api/biz/sqd";
+import {  delSqddetail,checkSqddetail } from "@/api/biz/sqddetail";
+
+import { listpara } from "@/api/biz/component";
+
+export default {
+  name: "Sqd",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 双清单管理表格数据
+      sqdList: [],
+      // 弹出层标题
+      title: "sqd新增/维护",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      sqdName:null,
+      sqddetaillist:[],
+      colNum: 0,
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        sqdName: null,
+      },
+      // 表单参数
+      form: {
+        sqdName:null,
+        sqddetaillist:[],
+      },
+      // 表单校验
+      rules: {
+        sqdName: [
+          { required: true, message: "sqd名称不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    addRow() {
+      const row = {
+        componentCategoryCode: "",
+        componentModel: "",
+        manufacturer: "",
+        qualityGrade: "",
+        encapsulationMode: "",
+        zzkkLevel: "",
+        unitPrice: "",
+        deliveryCycle: "",
+        wkbInfo: "",
+      };
+      this.form.sqddetaillist.push(row);
+    },
+     // 删除指定行
+     delRow(index) {
+      const id = this.form.sqddetaillist[index].id;
+      if (id !== null && id !== undefined && id !== '') {
+      this.$modal.confirm('该行在数据库中存在,请确认是否删除?').then(function() {
+        return delSqddetail(id);
+      }).then(() => {
+        this.form.sqddetaillist.splice(index, 1);
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+      } else {
+        this.form.sqddetaillist.splice(index, 1);
+      }
+    },
+    // 指定位置插入行
+    addRowIndex(index) {
+      const row = {
+        componentCategoryCode: "",
+        componentModel: "",
+        manufacturer: "",
+        qualityGrade: "",
+        encapsulationMode: "",
+        zzkkLevel: "",
+        unitPrice: "",
+        deliveryCycle: "",
+        wkbInfo: "",
+      };
+      this.form.sqddetaillist.splice(index + 1, 0, row);
+    },
+    /** 查询双清单管理列表 */
+    getList() {
+      this.loading = true;
+      listSqd(this.queryParams).then(response => {
+        this.sqdList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        sqdName:null,
+        sqddetaillist:[],
+        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;
+    },
+    getsqddetaillist(id){
+      const x = id;
+      getSqd(x).then(response => {
+        this.form.id = response.data.sqd.id;
+        this.form.sqdName = response.data.sqd.sqdName;
+        this.form.sqddetaillist = response.data.detail;
+        this.open = true;
+      });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getSqd(id).then(response => {
+        this.form.id = response.data.sqd.id;
+        this.form.sqdName = response.data.sqd.sqdName;
+        this.form.sqddetaillist = response.data.detail;
+        this.open = true;
+      });
+      // getSqddetailbysqdid(id).then(response =>{
+      //   this.form.sqddetaillist = response.data;
+      //   this.open = true;
+      // });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateSqd(this.form).then(response => {
+              console.log(this.form)
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSqd(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    standard(){
+      console.log(this.form.sqddetaillist) 
+      listpara(this.form).then(response => {
+        this.form.sqddetaillist = response
+     });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      checkSqddetail(ids).then(resp => 
+        {
+          if (resp.data && resp.data.length > 0){
+          let deid = resp.data.map(item => item.sqd_id).join(',');
+          if(resp.data.length > 0 && resp.data.length != ids.length && ids.length != undefined){
+            this.$modal.confirm('编号为"' + deid + '"的sqd表关联了sqd详细数据,确定是否删除编号为"' + ids + '"的数据项?').then(() => {
+              return delSqd(ids);
+            }).then(() => {
+                this.getList();
+                this.$modal.msgSuccess("删除成功");
+            }).catch(() => {});
+          }
+          else{
+            this.$modal.confirm('编号为"' + ids + '"的sqd表关联了sqd详情表,确定是否删除?').then(function(){
+              return delSqd(ids);
+            }).then(() => {
+              this.getList();
+              this.$modal.msgSuccess("删除成功");
+            }).catch(() => {});
+          }
+          
+            }
+            else{
+              this.$modal.confirm('是否确认删除sqd编号为"' + ids + '"的数据项?').then(function() {
+                return delSqd(ids);
+                }).then(() => {
+                  this.getList();
+                  this.$modal.msgSuccess("删除成功");
+                }).catch(() => {});
+      }     
+        });
+      // this.$modal.confirm('是否确认删sqd管理编号为"' + ids + '"的数据项?').then(function() {
+      //   return delSqd(ids);
+      // }).then(() => {
+      //   this.getList();
+      //   this.$modal.msgSuccess("删除成功");
+      // }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/sqd/export', {
+        ...this.queryParams
+      }, `sqd_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
+<style scoped>
+.dialogbutton {
+  display: flex;
+  justify-content: center; /* 保持按钮组居中 */
+  padding: 10px;
+  box-sizing: border-box;
+  width: 100%; /* 或根据需要调整,确保按钮组容器宽度合适 */
+}
+
+.button-wrapper { /* 新增的包装元素 */
+  display: flex;
+  gap: 70px; /* 利用gap属性为按钮添加间隔,适用于现代浏览器 */
+}
+
+/* 兼容性处理,如果需要支持不支持gap属性的浏览器 */
+.button-wrapper .el-button:not(:last-child) {
+  margin-right: 70px;
+}
+</style>

+ 383 - 0
cirs-ui/src/views/biz/sqddetail/index.vue

@@ -0,0 +1,383 @@
+<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="sqd编号" prop="sqdId">
+        <el-input
+          v-model="queryParams.sqdId"
+          placeholder="请输入sqd编号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="分类代码" prop="componentCategoryCode">
+        <el-input
+          v-model="queryParams.componentCategoryCode"
+          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="manufacturer">
+        <el-input
+          v-model="queryParams.manufacturer"
+          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="encapsulationMode">
+        <el-input
+          v-model="queryParams.encapsulationMode"
+          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="unitPrice">
+        <el-input
+          v-model="queryParams.unitPrice"
+          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="WKB情况" prop="wkbInfo">
+        <el-input
+          v-model="queryParams.wkbInfo"
+          placeholder="请输入WKB情况"
+          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:sqddetail: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:sqddetail: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:sqddetail: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:sqddetail:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="sqddetailList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="sqd编号" align="center" prop="sqdId" />
+      <el-table-column label="分类代码" align="center" prop="componentCategoryCode" />
+      <el-table-column label="型号规格" align="center" prop="componentModel" />
+      <el-table-column label="生产厂家" align="center" prop="manufacturer" />
+      <el-table-column label="质量等级" align="center" prop="qualityGrade" />
+      <el-table-column label="封装形式" align="center" prop="encapsulationMode" />
+      <el-table-column label="ZZKK等级" align="center" prop="zzkkLevel" />
+      <el-table-column label="价格" align="center" prop="unitPrice" />
+      <el-table-column label="供货周期" align="center" prop="deliveryCycle" />
+      <el-table-column label="WKB情况" align="center" prop="wkbInfo" />
+      <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:sqddetail:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:sqddetail: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"
+    />
+
+    <!-- 添加或修改SQD明细对话框 -->
+    <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="sqd编号" prop="sqdId">
+          <el-input v-model="form.sqdId" placeholder="请输入sqd编号" />
+        </el-form-item>
+        <el-form-item label="分类代码" prop="componentCategoryCode">
+          <el-input v-model="form.componentCategoryCode" 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="manufacturer">
+          <el-input v-model="form.manufacturer" 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="encapsulationMode">
+          <el-input v-model="form.encapsulationMode" 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="unitPrice">
+          <el-input v-model="form.unitPrice" placeholder="请输入价格" />
+        </el-form-item>
+        <el-form-item label="供货周期" prop="deliveryCycle">
+          <el-input v-model="form.deliveryCycle" placeholder="请输入供货周期" />
+        </el-form-item>
+        <el-form-item label="WKB情况" prop="wkbInfo">
+          <el-input v-model="form.wkbInfo" placeholder="请输入WKB情况" />
+        </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 { listSqddetail, getSqddetail, delSqddetail, addSqddetail, updateSqddetail,getSqddetailbysqdid } from "@/api/biz/sqddetail";
+
+export default {
+  name: "Sqddetail",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // SQD明细表格数据
+      sqddetailList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        sqdId: null,
+        componentCategoryCode: null,
+        componentModel: null,
+        manufacturer: null,
+        qualityGrade: null,
+        encapsulationMode: null,
+        zzkkLevel: null,
+        unitPrice: null,
+        deliveryCycle: null,
+        wkbInfo: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        sqdId: [
+          { required: true, message: "sqd编号不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询SQD明细列表 */
+    getList() {
+      this.loading = true;
+      listSqddetail(this.queryParams).then(response => {
+        this.sqddetailList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        sqdId: null,
+        componentCategoryCode: null,
+        componentModel: null,
+        manufacturer: null,
+        qualityGrade: null,
+        encapsulationMode: null,
+        zzkkLevel: null,
+        unitPrice: null,
+        deliveryCycle: null,
+        wkbInfo: 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 = "添加SQD明细";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getSqddetail(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改SQD明细";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateSqddetail(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSqddetail(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除SQD明细编号为"' + ids + '"的数据项?').then(function() {
+        return delSqddetail(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/sqddetail/export', {
+        ...this.queryParams
+      }, `sqddetail_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 1 - 0
sql/cirs_20230223.sql

@@ -1,3 +1,4 @@
+USE cirs;
 -- ----------------------------
 -- 1、部门表
 -- ----------------------------

+ 94 - 0
sql/cirs_20230430.sql

@@ -0,0 +1,94 @@
+use cirs;
+-- 菜单 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('预处理', '0', '1', 'preprocessing', 'biz/preprocessing/index', 1, 0, 'C', '0', '0', 'biz:preprocessing:list', '#', 'admin', sysdate(), '', null, '预处理菜单');
+
+-- 按钮父菜单ID
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 按钮 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('预处理查询', @parentId, '1',  '#', '', 1, 0, 'F', '0', '0', 'biz:preprocessing:query',        '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('预处理新增', @parentId, '2',  '#', '', 1, 0, 'F', '0', '0', 'biz:preprocessing:add',          '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('预处理修改', @parentId, '3',  '#', '', 1, 0, 'F', '0', '0', 'biz:preprocessing:edit',         '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('预处理删除', @parentId, '4',  '#', '', 1, 0, 'F', '0', '0', 'biz:preprocessing:remove',       '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('预处理导出', @parentId, '5',  '#', '', 1, 0, 'F', '0', '0', 'biz:preprocessing:export',       '#', 'admin', sysdate(), '', null, '');
+
+ALTER TABLE t_data_preprocessing MODIFY COLUMN column_name VARCHAR(255);
+
+INSERT INTO `t_data_preprocessing` VALUES (1, 'manufacturer', '济半所', '济南半导体元件实验所', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (2, 'manufacturer', '济半', '济南半导体元件实验所', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (3, 'manufacturer', '济南半导体元件实验所', '济南半导体元件实验所', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (4, 'manufacturer', '北京七一八友晟电子有限公司', '北京七一八友晟电子有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (5, 'manufacturer', '友晟', '北京七一八友晟电子有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (6, 'manufacturer', '718友晟', '北京七一八友晟电子有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (7, 'manufacturer', '友晟电子', '北京七一八友晟电子有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (8, 'manufacturer', '北京718友晟电子', '北京七一八友晟电子有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (9, 'manufacturer', '北京元六鸿远电子科技股份有限公司', '北京元六鸿远电子科技股份有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (10, 'manufacturer', '元六', '北京元六鸿远电子科技股份有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (11, 'manufacturer', '元六鸿远', '北京元六鸿远电子科技股份有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (12, 'manufacturer', '北京元六', '北京元六鸿远电子科技股份有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (13, 'manufacturer', '北京元六鸿远', '北京元六鸿远电子科技股份有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (14, 'manufacturer', '元六鸿远电子', '北京元六鸿远电子科技股份有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (15, 'manufacturer', '深圳振华富电子有限公司', '深圳振华富电子有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (16, 'manufacturer', '振华富', '深圳振华富电子有限公司', '', NULL, '', NULL, NULL);
+INSERT INTO `t_data_preprocessing` VALUES (17, 'manufacturer', '振华富电子', '深圳振华富电子有限公司', '', NULL, '', NULL, NULL);
+
+
+
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('双清单管理', '0', '1', 'sqd', 'biz/sqd/index', 1, 0, 'C', '0', '0', 'biz:sqd:list', '#', 'admin', sysdate(), '', null, '双清单管理菜单');
+
+-- 按钮父菜单ID
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 按钮 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('双清单管理查询', @parentId, '1',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqd:query',        '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('双清单管理新增', @parentId, '2',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqd:add',          '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('双清单管理修改', @parentId, '3',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqd:edit',         '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('双清单管理删除', @parentId, '4',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqd:remove',       '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('双清单管理导出', @parentId, '5',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqd:export',       '#', 'admin', sysdate(), '', null, '');
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('SQD明细', '0', '1', 'sqddetail', 'biz/sqddetail/index', 1, 0, 'C', '0', '0', 'biz:sqddetail:list', '#', 'admin', sysdate(), '', null, 'SQD明细菜单');
+
+-- 按钮父菜单ID
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 按钮 SQL
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('SQD明细查询', @parentId, '1',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqddetail:query',        '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('SQD明细新增', @parentId, '2',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqddetail:add',          '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('SQD明细修改', @parentId, '3',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqddetail:edit',         '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('SQD明细删除', @parentId, '4',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqddetail:remove',       '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('SQD明细导出', @parentId, '5',  '#', '', 1, 0, 'F', '0', '0', 'biz:sqddetail:export',       '#', 'admin', sysdate(), '', null, '');

+ 2 - 0
sql/cirs_20240428.sql

@@ -14,6 +14,8 @@
  Date: 28/04/2024 16:01:56
 */
 
+USE cirs;
+
 SET NAMES utf8mb4;
 SET FOREIGN_KEY_CHECKS = 0;
 

+ 2 - 0
sql/quartz.sql

@@ -1,3 +1,5 @@
+use cirs;
+
 DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
 DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
 DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;