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