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/LimsSignController.java |  139 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 139 insertions(+), 0 deletions(-)

diff --git a/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsSignController.java b/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsSignController.java
new file mode 100644
index 0000000..184a5c1
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsSignController.java
@@ -0,0 +1,139 @@
+package jnpf.limsController;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jnpf.base.UserInfo;
+import jnpf.exception.DataException;
+import jnpf.limsEntity.LimsModifySignPasswordParam;
+import jnpf.limsEntity.LimsSignEntity;
+import jnpf.limsEntity.LimsSignVerifyParam;
+import jnpf.limsService.LimsSignService;
+import jnpf.util.R;
+import jnpf.util.UserProvider;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+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.HashMap;
+import java.util.Map;
+
+/**
+ * LIMS 鐢靛瓙绛惧悕鎺ュ彛銆�
+ */
+@Slf4j
+@Tag(name = "lims鐢靛瓙绛惧悕", description = "绛惧悕鏍¢獙 + 绛惧悕瀵嗙爜鎵归噺鍒濆鍖�")
+@RestController
+@RequestMapping("/lims/biz/sign")
+public class LimsSignController {
+
+    @Autowired
+    private LimsSignService limsSignService;
+
+    /**
+     * 鏍¢獙璐︽埛 + 绛惧悕瀵嗙爜锛岄�氳繃鍚庤惤 lims_sign 涓�鏉★紝杩斿洖涓婚敭浣滀负 biz_sign 缁欏墠绔��
+     *
+     * <p>璇锋眰浣擄紙snake_case锛夛細
+     * <pre>
+     * {
+     *   "data_id": "&lt;涓氬姟涓婚敭锛屽彲绌�&gt;",
+     *   "op_type": "baogao_reject",
+     *   "account_name": "admin",
+     *   "password": "123456",
+     *   "note": "閫�鍥炲師鍥� / 鎿嶄綔璇存槑",
+     *   "meta_data": "璋冪敤鏂逛笟鍔″厓鏁版嵁"
+     * }
+     * </pre>
+     *
+     * <p>鍝嶅簲锛�
+     * <pre>{ "data": { "biz_sign": "&lt;lims_sign.f_id&gt;" } }</pre>
+     */
+    @Operation(summary = "鐢靛瓙绛惧悕鏍¢獙")
+    @PostMapping("/verify")
+    public R<Map<String, String>> verify(@RequestBody LimsSignVerifyParam param) {
+        try {
+            String signId = limsSignService.verifyAndRecord(param);
+            Map<String, String> data = new HashMap<>();
+            data.put("biz_sign", signId);
+            return R.success("绛惧悕鎴愬姛", data);
+        } catch (DataException e) {
+            return R.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏍¢獙鎸囧畾鐢ㄦ埛璐︽埛 + 绛惧悕瀵嗙爜锛岄�氳繃鍚庤惤 lims_sign 涓�鏉°��
+     *
+     * <p>涓� /verify 鐨勫樊寮傦細
+     * <ul>
+     *   <li>allow_self 涓嶄负 yes 鏃讹紝account_name 涓嶅厑璁镐负褰撳墠鐧诲綍鐢ㄦ埛</li>
+     *   <li>鍝嶅簲棰濆杩斿洖 biz_user_id锛屽嵆涓嬪彂绛惧悕璐︽埛瀵瑰簲鐨勭敤鎴� id</li>
+     * </ul>
+     */
+    @Operation(summary = "鎸囧畾鐢ㄦ埛鐢靛瓙绛惧悕鏍¢獙")
+    @PostMapping("/verify_user")
+    public R<Map<String, String>> verifyUser(@RequestBody LimsSignVerifyParam param) {
+        try {
+            LimsSignEntity sign = limsSignService.verifyUserAndRecord(param);
+            Map<String, String> data = new HashMap<>();
+            data.put("biz_sign", sign.getId());
+            data.put("biz_user_id", sign.getCreatorUserId());
+            return R.success("绛惧悕鎴愬姛", data);
+        } catch (DataException e) {
+            return R.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 褰撳墠鐧诲綍鐢ㄦ埛淇敼 / 鍒濆鍖栬嚜宸辩殑绛惧悕瀵嗙爜銆�
+     *
+     * <p>璇锋眰浣擄紙snake_case锛夛細
+     * <pre>
+     * {
+     *   "account_password": "&lt;Md5(璐︽埛鐧诲綍瀵嗙爜鏄庢枃)&gt;",
+     *   "password": "&lt;鏂扮鍚嶅瘑鐮佹槑鏂�&gt;",
+     *   "repeat_password": "&lt;閲嶅鏂扮鍚嶅瘑鐮�&gt;",
+     *   "code": "&lt;鍥惧舰楠岃瘉鐮�&gt;",
+     *   "timestamp": "&lt;鍥惧舰楠岃瘉鐮� redis key&gt;"
+     * }
+     * </pre>
+     *
+     * <p>鏍¢獙椤哄簭瑙� {@link LimsSignService#modifySignPassword}锛氬厛楠岃瘉鐮� 鈫� 璐︽埛瀵嗙爜 鈫� 鏂板瘑鐮佷竴鑷存�с��
+     */
+    @Operation(summary = "淇敼 / 鍒濆鍖栫鍚嶅瘑鐮�")
+    @PostMapping("/modify-password")
+    public R<Object> modifyPassword(@RequestBody LimsModifySignPasswordParam param) {
+        try {
+            limsSignService.modifySignPassword(param);
+            return R.success("绛惧悕瀵嗙爜淇敼鎴愬姛", null);
+        } catch (DataException e) {
+            return R.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 缁欐墍鏈夋湭杞垹 base_user 鎵归噺鍒濆鍖栫鍚嶅瘑鐮� = "123456"銆�
+     * 宸叉湁璁板綍璺宠繃锛涘箓绛夊彲閲嶅璋冦�備粎 admin 鍙皟銆�
+     *
+     * <p>鍝嶅簲锛�
+     * <pre>{ "data": { "inserted": 240, "skipped": 4 } }</pre>
+     */
+    @Operation(summary = "鎵归噺鍒濆鍖栫鍚嶅瘑鐮侊紙admin锛�")
+    @PostMapping("/init-all")
+    public R<Map<String, Integer>> initAll() {
+        UserInfo userInfo = UserProvider.getUser();
+        if (userInfo == null) {
+            return R.error("褰撳墠鏈櫥褰�");
+        }
+        if (!userInfo.getIsAdministrator()) {
+            return R.error("浠呯鐞嗗憳鍙墽琛屾壒閲忓垵濮嬪寲");
+        }
+        int[] result = limsSignService.initAllUsers();
+        Map<String, Integer> data = new HashMap<>();
+        data.put("inserted", result[0]);
+        data.put("skipped", result[1]);
+        return R.success("鍒濆鍖栧畬鎴�", data);
+    }
+}

--
Gitblit v1.8.0