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-controller/src/main/java/jnpf/limsController/LimsQuyangController.java |  142 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 142 insertions(+), 0 deletions(-)

diff --git a/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsQuyangController.java b/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsQuyangController.java
new file mode 100644
index 0000000..5c7f2e7
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsQuyangController.java
@@ -0,0 +1,142 @@
+package jnpf.limsController;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jnpf.exception.DataException;
+import jnpf.limsEntity.BizStatus;
+import jnpf.limsEntity.LimsQingyandanEntity;
+import jnpf.limsEntity.LimsSignEntity;
+import jnpf.limsEntity.LimsSignUsageTarget;
+import jnpf.limsEntity.SignOpType;
+import jnpf.limsService.LimsQingyandanService;
+import jnpf.limsService.LimsSignService;
+import jnpf.util.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Collections;
+import java.util.Map;
+
+@Slf4j
+@Tag(name = "lims鍙栨牱鍗曟帴鍙�", description = "鍙栨牱 / 鍙栨牱閫�鍥�")
+@RestController
+@RequestMapping("/lims/biz")
+public class LimsQuyangController {
+
+    @Autowired
+    private LimsQingyandanService limsQingyandanService;
+    @Autowired
+    private LimsSignService limsSignService;
+
+    /**
+     * 鍙栨牱锛氬湪璇烽獙鍗曟湰琛屽啓鍏ュ彇鏍蜂俊鎭� + 鎺ㄨ繘鍙栨牱/鎺ユ牱鐘舵�侊紙鍚堝苟琛ㄥ悗鐩存帴鎿嶄綔 lims_qingyandan锛�
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Operation(summary = "鍙栨牱")
+    @PostMapping("/quyang/fetch")
+    public R<String> quyangFetch(@RequestBody LimsQingyandanEntity formData) {
+        if (formData.getId() == null || formData.getId().isEmpty()) {
+            return R.error("璇烽獙鍗旾D涓嶈兘涓虹┖");
+        }
+        // 鍚堝苟琛ㄥ悗鎵�鏈夐樁娈佃〃鍗曢兘甯﹁楠屽崟涓婚敭 id锛岀洿鎺ユ寜涓婚敭 get锛屾渶蹇笖鏃犳涔�
+        LimsQingyandanEntity qingyandan = limsQingyandanService.getById(formData.getId());
+        if (qingyandan == null) {
+            return R.error("璇烽獙鍗曟暟鎹笉瀛樺湪");
+        }
+        if (!BizStatus.PENDING_FETCH.getCode().equals(qingyandan.getQuyangStatus())) {
+            return R.error("鍙湁寰呭彇鏍风姸鎬佹墠鑳藉彇鏍�");
+        }
+
+        String signId = formData.getBizSign();
+        if (signId == null || signId.trim().isEmpty()) {
+            signId = qingyandan.getBizSign();
+        }
+        if (signId == null || signId.trim().isEmpty()) {
+            return R.error("璇锋坊鍔犵數瀛愮鍚�");
+        }
+        LimsSignEntity sign;
+        try {
+            sign = limsSignService.requireValidSign(
+                    signId.trim(), SignOpType.QUYANG_FETCH, qingyandan.getJianyanLiushuihao());
+        } catch (DataException e) {
+            return R.error(e.getMessage());
+        }
+        formData.setBizSign(signId.trim());
+        limsQingyandanService.fetch(qingyandan, formData);
+        LimsSignUsageTarget target = LimsSignUsageTarget.builder()
+                .targetTable("lims_qingyandan")
+                .targetId(qingyandan.getId())
+                .bizType("QUYANG")
+                .bizModule("LIMS-鍙栨牱")
+                .bizCode(qingyandan.getJianyanLiushuihao())
+                .build();
+        limsSignService.recordSignUsage(sign, SignOpType.QUYANG_FETCH,
+                Collections.singletonList(qingyandan.getId()), Collections.singletonList(target));
+        return R.success("鍙栨牱鎴愬姛");
+    }
+
+    /**
+     * 鍙栨牱鍗曟搷浣滐細閫�鍥炶楠屽崟
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Operation(summary = "鍙栨牱鍗曟搷浣滐紙閫�鍥烇級")
+    @PostMapping("/quyang/action")
+    public R<String> quyangAction(@RequestBody Map<String, String> params) {
+        String action = params.get("action");
+        String liushuihao = params.get("jianyan_liushuihao");
+        String tuihuiyuanyin = params.get("tuihuiyuanyin");
+        String bizSign = params.get("biz_sign");
+
+        if (liushuihao == null || liushuihao.isEmpty()) {
+            return R.error("妫�楠屾祦姘村彿涓嶈兘涓虹┖");
+        }
+
+        LimsQingyandanEntity qingyandan = limsQingyandanService.findByLiushuihao(liushuihao);
+        if (qingyandan == null) {
+            return R.error("璇烽獙鍗曟暟鎹笉瀛樺湪");
+        }
+
+        BizStatus currentStatus = BizStatus.fromCode(qingyandan.getBizStatus());
+
+        switch (action) {
+            case "reject":
+                if (currentStatus != BizStatus.PENDING_FETCH && currentStatus != BizStatus.CONFIRMED) {
+                    return R.error("鍙湁寰呭彇鏍风姸鎬佺殑璇烽獙鍗曟墠鑳介��鍥炰慨姝�");
+                }
+                if (bizSign == null || bizSign.isEmpty()) {
+                    return R.error("璇锋坊鍔犵數瀛愮鍚�");
+                }
+                if (tuihuiyuanyin == null || tuihuiyuanyin.isEmpty()) {
+                    return R.error("璇峰~鍐欓��鍥炲師鍥�");
+                }
+                LimsSignEntity sign;
+                try {
+                    sign = limsSignService.requireValidSign(bizSign, SignOpType.QUYANG_REJECT,
+                            qingyandan.getJianyanLiushuihao());
+                } catch (DataException e) {
+                    return R.error(e.getMessage());
+                }
+                if (!limsQingyandanService.reject(qingyandan, tuihuiyuanyin, bizSign)) {
+                    return R.error("褰撳墠璇烽獙鍗曠姸鎬佸凡鍙樻洿锛屾棤娉曢��鍥�");
+                }
+                LimsSignUsageTarget target = LimsSignUsageTarget.builder()
+                        .targetTable("lims_qingyandan")
+                        .targetId(qingyandan.getId())
+                        .bizType("QUYANG")
+                        .bizModule("LIMS-鍙栨牱")
+                        .bizCode(qingyandan.getJianyanLiushuihao())
+                        .build();
+                limsSignService.recordSignUsage(sign, SignOpType.QUYANG_REJECT,
+                        Collections.singletonList(qingyandan.getId()), Collections.singletonList(target));
+                return R.success("閫�鍥炰慨姝f垚鍔�");
+
+            default:
+                return R.error("涓嶆敮鎸佺殑鎿嶄綔: " + action);
+        }
+    }
+}

--
Gitblit v1.8.0