From 3471290659516cf21db3211a9053daff5f283e03 Mon Sep 17 00:00:00 2001
From: zhuguifei <312353457@qq.com>
Date: 星期五, 20 三月 2026 15:50:18 +0800
Subject: [PATCH] feat: 基础数据仪器管理、判定依据、判定依据明细

---
 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/qa/qm/service/impl/QmCheckitemServiceImpl.java |  188 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 188 insertions(+), 0 deletions(-)

diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/qa/qm/service/impl/QmCheckitemServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/qa/qm/service/impl/QmCheckitemServiceImpl.java
new file mode 100644
index 0000000..8ff9004
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/qa/qm/service/impl/QmCheckitemServiceImpl.java
@@ -0,0 +1,188 @@
+package org.dromara.qa.qm.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.qa.qm.domain.bo.QmCheckitemBo;
+import org.dromara.qa.qm.domain.vo.QmCheckitemVo;
+import org.dromara.qa.qm.domain.QmCheckitem;
+import org.dromara.qa.qm.mapper.QmCheckitemMapper;
+import org.dromara.qa.qm.service.IQmCheckitemService;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+import java.util.stream.Collectors;
+import java.util.HashMap; // 瀵煎叆 HashMap
+
+/**
+ * 瑙勭▼妫�楠岄」鐩甋ervice涓氬姟灞傚鐞�
+ *
+ * @author zhuguifei
+ * @date 2026-03-12
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class QmCheckitemServiceImpl implements IQmCheckitemService {
+
+    private final QmCheckitemMapper baseMapper;
+
+    /**
+     * 鏌ヨ瑙勭▼妫�楠岄」鐩�
+     *
+     * @param id 涓婚敭
+     * @return 瑙勭▼妫�楠岄」鐩�
+     */
+    @Override
+    public QmCheckitemVo queryById(String id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ瑙勭▼妫�楠岄」鐩垪琛�
+     *
+     * @param bo        鏌ヨ鏉′欢
+     * @param pageQuery 鍒嗛〉鍙傛暟
+     * @return 瑙勭▼妫�楠岄」鐩垎椤靛垪琛�
+     */
+    @Override
+    public TableDataInfo<QmCheckitemVo> queryPageList(QmCheckitemBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<QmCheckitem> lqw = buildQueryWrapper(bo);
+        Page<QmCheckitemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 鏌ヨ绗﹀悎鏉′欢鐨勮绋嬫楠岄」鐩垪琛�
+     *
+     * @param bo 鏌ヨ鏉′欢
+     * @return 瑙勭▼妫�楠岄」鐩垪琛�
+     */
+    @Override
+    public List<QmCheckitemVo> queryList(QmCheckitemBo bo) {
+        LambdaQueryWrapper<QmCheckitem> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    @Override
+    public List<QmCheckitemVo> queryTreeListByStdCode(String stdCode) {
+        List<QmCheckitemVo> roots = selectTreeNodes(stdCode, null);
+        for (QmCheckitemVo root : roots) {
+            List<QmCheckitemVo> children = selectTreeNodes(stdCode, root.getId());
+            for (QmCheckitemVo child : children) {
+                List<QmCheckitemVo> grandchildren = selectTreeNodes(stdCode, child.getId());
+                child.setChildren(grandchildren);
+            }
+            root.setChildren(children);
+        }
+        return roots;
+    }
+
+    @Override
+    public List<Map<String, String>> getRid(String stdCode) { // 淇敼杩斿洖绫诲瀷
+        if (StringUtils.isBlank(stdCode)) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<QmCheckitem> lqw = Wrappers.lambdaQuery();
+        lqw.select(QmCheckitem::getId, QmCheckitem::getItemName);
+        lqw.eq(QmCheckitem::getStdCode, stdCode);
+        lqw.eq(QmCheckitem::getIsmix, 1L);
+        lqw.eq(QmCheckitem::getEnable, 1L);
+        lqw.ne(QmCheckitem::getDel, 1L);
+        List<QmCheckitem> list = baseMapper.selectList(lqw);
+        return list.stream()
+            .map(item -> {
+                Map<String, String> map = new HashMap<>();
+                map.put("value", item.getId());
+                map.put("label", item.getItemName());
+                return map;
+            })
+            .collect(Collectors.toList());
+    }
+
+    private List<QmCheckitemVo> selectTreeNodes(String stdCode, String rid) {
+        if (StringUtils.isBlank(stdCode)) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<QmCheckitem> lqw = Wrappers.lambdaQuery();
+        lqw.eq(QmCheckitem::getStdCode, stdCode);
+        lqw.ne(QmCheckitem::getDel, 1L);
+        if (rid == null) {
+            lqw.isNull(QmCheckitem::getRid);
+        } else {
+            lqw.eq(QmCheckitem::getRid, rid);
+        }
+        lqw.orderByAsc(QmCheckitem::getId);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<QmCheckitem> buildQueryWrapper(QmCheckitemBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<QmCheckitem> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(QmCheckitem::getId);
+        lqw.like(StringUtils.isNotBlank(bo.getItemCode()), QmCheckitem::getItemCode, bo.getItemCode());
+        lqw.like(StringUtils.isNotBlank(bo.getItemName()), QmCheckitem::getItemName, bo.getItemName());
+        return lqw;
+    }
+
+    /**
+     * 鏂板瑙勭▼妫�楠岄」鐩�
+     *
+     * @param bo 瑙勭▼妫�楠岄」鐩�
+     * @return 鏄惁鏂板鎴愬姛
+     */
+    @Override
+    public Boolean insertByBo(QmCheckitemBo bo) {
+        QmCheckitem add = MapstructUtils.convert(bo, QmCheckitem.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 淇敼瑙勭▼妫�楠岄」鐩�
+     *
+     * @param bo 瑙勭▼妫�楠岄」鐩�
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    @Override
+    public Boolean updateByBo(QmCheckitemBo bo) {
+        QmCheckitem update = MapstructUtils.convert(bo, QmCheckitem.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     */
+    private void validEntityBeforeSave(QmCheckitem entity){
+        //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+    }
+
+    /**
+     * 鏍¢獙骞舵壒閲忓垹闄よ绋嬫楠岄」鐩俊鎭�
+     *
+     * @param ids     寰呭垹闄ょ殑涓婚敭闆嗗悎
+     * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+     * @return 鏄惁鍒犻櫎鎴愬姛
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

--
Gitblit v1.9.3