From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsSxtKanbanServiceImpl.java |  151 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 151 insertions(+), 0 deletions(-)

diff --git a/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsSxtKanbanServiceImpl.java b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsSxtKanbanServiceImpl.java
new file mode 100644
index 0000000..e042186
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsSxtKanbanServiceImpl.java
@@ -0,0 +1,151 @@
+package jnpf.limsService.impl;
+
+import jnpf.audit.sdk.annotation.AuditLog;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import jnpf.base.UserInfo;
+import jnpf.limsEntity.LimsSxtKanbanItemVo;
+import jnpf.limsEntity.LimsSxtKanbanOptionsVo;
+import jnpf.limsEntity.LimsSxtKanbanRowVo;
+import jnpf.limsEntity.LimsSxtQuyangJihuaRenwuEntity;
+import jnpf.limsMapper.LimsSxtKanbanMapper;
+import jnpf.limsMapper.LimsSxtQuyangJihuaRenwuMapper;
+import jnpf.limsService.LimsSxtKanbanService;
+import jnpf.limsService.LimsSxtQuyangJihuaRenwuService;
+import jnpf.limsService.support.LimsSxtQuyangJihuaRenwuStatus;
+import jnpf.util.UserProvider;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 姘寸郴缁熻鍒掔湅鏉胯璇诲彇褰撳墠鏈夋晥鐐逛綅锛屾棩鍘嗛」璇诲彇 Renwu 鍘嗗彶蹇収銆�
+ */
+@Service
+public class LimsSxtKanbanServiceImpl implements LimsSxtKanbanService {
+
+    @Autowired
+    private LimsSxtKanbanMapper kanbanMapper;
+    @Autowired
+    private LimsSxtQuyangJihuaRenwuMapper renwuMapper;
+    @Autowired
+    private LimsSxtQuyangJihuaRenwuService renwuService;
+
+    @Override
+    public LimsSxtKanbanOptionsVo listKanbanOptions(String yangpinLeixing, String suoshuChejian,
+                                                     String quyangDidian) {
+        String tenantId = dangqianZuhuId();
+        LimsSxtKanbanOptionsVo result = new LimsSxtKanbanOptionsVo();
+        result.setYangpinLeixingList(kanbanMapper.selectSampleTypes(tenantId));
+        if (!StringUtils.hasText(yangpinLeixing)) {
+            return result;
+        }
+        result.setChejianList(kanbanMapper.selectWorkshops(tenantId, yangpinLeixing));
+        if (!StringUtils.hasText(suoshuChejian)) {
+            return result;
+        }
+        result.setQuyangDidianList(kanbanMapper.selectPlaces(tenantId, yangpinLeixing, suoshuChejian));
+        if (!StringUtils.hasText(quyangDidian)) {
+            return result;
+        }
+        result.setQuyangdianList(kanbanMapper.selectPoints(
+                tenantId, yangpinLeixing, suoshuChejian, quyangDidian));
+        return result;
+    }
+
+    @Override
+    public List<LimsSxtKanbanRowVo> listKanbanRows(String yangpinLeixing, String suoshuChejian,
+                                                    String quyangDidian, String quyangdianBianhao) {
+        return kanbanMapper.selectRows(dangqianZuhuId(), yangpinLeixing, suoshuChejian,
+                quyangDidian, quyangdianBianhao);
+    }
+
+    @Override
+    public List<LimsSxtKanbanItemVo> listKanbanItems(LocalDate kaishiRiqi, LocalDate jieshuRiqi,
+                                                      String yangpinLeixing, String suoshuChejian,
+                                                      String quyangDidian, String quyangdianBianhao) {
+        if (kaishiRiqi == null || jieshuRiqi == null || kaishiRiqi.isAfter(jieshuRiqi)) {
+            throw new jnpf.exception.DataException("鏃ユ湡鑼冨洿涓嶆纭�");
+        }
+        List<LimsSxtKanbanItemVo> result = new ArrayList<>();
+        for (LimsSxtQuyangJihuaRenwuEntity renwu : chaxunRenwu(
+                kaishiRiqi, jieshuRiqi, yangpinLeixing, suoshuChejian, quyangDidian, quyangdianBianhao)) {
+            result.add(toItem(renwu));
+        }
+        return result;
+    }
+
+    @Override
+    @AuditLog(action = "DELETE", label = "鍙栨秷姘寸郴缁熸湭鏉ヨ鍒掍换鍔�", bizType = "SXT",
+            bizCodeExpr = "#renwuId", bizCodeRequired = false,
+            targetTable = "lims_sxt_quyang_jihua_renwu", targetIdExpr = "#renwuId",
+            diff = true, entityClass = LimsSxtQuyangJihuaRenwuEntity.class)
+    public void quxiaoWeilaiRenwu(String renwuId) {
+        renwuService.quxiaoWeishengchengWeilaiRenwu(renwuId, dangqianZuhuId(), "manual_cancelled");
+    }
+
+    private List<LimsSxtQuyangJihuaRenwuEntity> chaxunRenwu(LocalDate kaishiRiqi, LocalDate jieshuRiqi,
+                                                              String yangpinLeixing, String suoshuChejian,
+                                                              String quyangDidian, String quyangdianBianhao) {
+        QueryWrapper<LimsSxtQuyangJihuaRenwuEntity> query = new QueryWrapper<>();
+        query.eq("f_tenant_id", dangqianZuhuId()).eq("f_delete_mark", 0)
+                .ge(kaishiRiqi != null, "jihua_riqi", kaishiRiqi)
+                .le(jieshuRiqi != null, "jihua_riqi", jieshuRiqi)
+                .eq(StringUtils.hasText(yangpinLeixing), "yangpin_leixing", yangpinLeixing)
+                .eq(StringUtils.hasText(suoshuChejian), "suoshu_chejian_id", suoshuChejian)
+                .eq(StringUtils.hasText(quyangDidian), "quyang_didian", quyangDidian)
+                .eq(StringUtils.hasText(quyangdianBianhao), "quyangdian_bianhao", quyangdianBianhao)
+                .notIn("renwu_zhuangtai", LimsSxtQuyangJihuaRenwuStatus.CANCELLED,
+                        LimsSxtQuyangJihuaRenwuStatus.INVALIDATED)
+                .orderByAsc("yangpin_leixing", "suoshu_chejian", "quyang_didian", "quyangdian_bianhao", "jihua_riqi");
+        return renwuMapper.selectList(query);
+    }
+
+    private LimsSxtKanbanRowVo toRow(LimsSxtQuyangJihuaRenwuEntity renwu) {
+        LimsSxtKanbanRowVo row = new LimsSxtKanbanRowVo();
+        row.setQuyangdianId(renwu.getQuyangdianId());
+        row.setYangpinLeixing(renwu.getYangpinLeixing());
+        row.setYangpinLeixingMingcheng(renwu.getYangpinLeixingMingcheng());
+        row.setSuoshuChejian(renwu.getSuoshuChejian());
+        row.setQuyangDidian(renwu.getQuyangDidian());
+        row.setQuyangdianBianhao(renwu.getQuyangdianBianhao());
+        return row;
+    }
+
+    private LimsSxtKanbanItemVo toItem(LimsSxtQuyangJihuaRenwuEntity renwu) {
+        LimsSxtKanbanItemVo item = new LimsSxtKanbanItemVo();
+        BeanUtils.copyProperties(toRow(renwu), item);
+        item.setRenwuId(renwu.getId());
+        item.setJihuaId(renwu.getJihuaId());
+        item.setJihuaMingcheng(renwu.getJihuaMingcheng());
+        item.setJihuaRiqi(renwu.getJihuaRiqi());
+        item.setRenwuZhuangtai(renwu.getRenwuZhuangtai());
+        item.setRenwuZhuangtaiYuanyinDaima(renwu.getRenwuZhuangtaiYuanyinDaima());
+        item.setRenwuZhuangtaiYuanyin(renwu.getRenwuZhuangtaiYuanyin());
+        item.setJianyanXiangmu(renwu.getJianyanXiangmu());
+        item.setJianyanXiangmuMingcheng(renwu.getJianyanXiangmuMingcheng());
+        item.setQingyandanId(renwu.getQingyandanId());
+        item.setQingyandanLiushuihao(renwu.getQingyandanLiushuihao());
+        item.setQingyandanZhuangtai(renwu.getQingyandanZhuangtai());
+        item.setCanDelete(isKeQuxiao(renwu));
+        return item;
+    }
+
+    private boolean isKeQuxiao(LimsSxtQuyangJihuaRenwuEntity renwu) {
+        LocalDate jihuaRiqi = renwu.getJihuaRiqi().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        return jihuaRiqi.isAfter(LocalDate.now()) && !StringUtils.hasText(renwu.getQingyandanId())
+                && (LimsSxtQuyangJihuaRenwuStatus.PENDING.equals(renwu.getRenwuZhuangtai())
+                || LimsSxtQuyangJihuaRenwuStatus.BLOCKED_CONFIG_INVALID.equals(renwu.getRenwuZhuangtai()));
+    }
+
+    private String dangqianZuhuId() {
+        UserInfo user = UserProvider.getUser();
+        return user == null || !StringUtils.hasText(user.getTenantId()) ? "0" : user.getTenantId();
+    }
+}

--
Gitblit v1.8.0