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

diff --git a/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/CommonController.java b/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/CommonController.java
new file mode 100644
index 0000000..f9e4669
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/CommonController.java
@@ -0,0 +1,99 @@
+package jnpf.limsController;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jnpf.util.R;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+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.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * LIMS閫氱敤鎺ュ彛锛圝ava鐗圝NPF 6.1锛�
+ * 鎻愪緵鍛ㄦ湡銆佹棩鏈熺瓑閫氱敤鑳藉姏銆�
+ */
+@Slf4j
+@Tag(name = "LIMS閫氱敤鎺ュ彛", description = "鍛ㄦ湡銆佹棩鏈熺瓑閫氱敤鑳藉姏")
+@RestController
+@RequestMapping("/lims/common")
+public class CommonController {
+
+    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+    /**
+     * 鎸夊綋鍓嶆棩鏈熻绠楀懆鏈熷搴旀棩鏈熴��
+     *
+     * @param param 鍛ㄦ湡鍙傛暟
+     * @return 鍛ㄦ湡鏃ユ湡瀛楀吀
+     */
+    @Operation(summary = "璁$畻鍛ㄦ湡鏃ユ湡", description = "鏍规嵁鍛ㄦ湡鍗曚綅鍜屽懆鏈熸暟鍊硷紝鍩轰簬褰撳墠鏃ユ湡璁$畻鐩爣鏃ユ湡")
+    @PostMapping("/zhouqi/calculate")
+    public R<Map<String, String>> calculateZhouqi(@RequestBody ZhouqiCalculateParam param) {
+        if (param == null || param.getZhouqi() == null || param.getZhouqi().isEmpty()) {
+            return R.error("鍛ㄦ湡鍙傛暟zhouqi涓嶈兘涓虹┖");
+        }
+
+        LocalDate now = LocalDate.now();
+        Map<String, String> result = new LinkedHashMap<>();
+        for (ZhouqiItem item : param.getZhouqi()) {
+            if (item == null || isBlank(item.getKey()) || item.getValue() == null) {
+                return R.error("鍛ㄦ湡瀛愰」key鍜寁alue涓嶈兘涓虹┖");
+            }
+
+            try {
+                LocalDate calculateDate = calculateDate(now, item.getKey(), item.getValue());
+                result.put(item.getKey() + item.getValue(), calculateDate.format(DATE_FORMATTER));
+            } catch (IllegalArgumentException e) {
+                return R.error(e.getMessage());
+            }
+        }
+        return R.success("璁$畻鎴愬姛", result);
+    }
+
+    private LocalDate calculateDate(LocalDate baseDate, String key, Integer value) {
+        switch (key) {
+            case "day":
+                return baseDate.plusDays(value);
+            case "week":
+                return baseDate.plusWeeks(value);
+            case "month":
+                return baseDate.plusMonths(value);
+            case "quarter":
+                return baseDate.plusMonths(value * 3L);
+            case "year":
+                return baseDate.plusYears(value);
+            default:
+                throw new IllegalArgumentException("涓嶆敮鎸佺殑鍛ㄦ湡鍗曚綅: " + key);
+        }
+    }
+
+    private boolean isBlank(String value) {
+        return value == null || value.trim().isEmpty();
+    }
+
+    @Data
+    public static class ZhouqiCalculateParam {
+        private List<ZhouqiItem> zhouqi;
+    }
+
+    @Data
+    public static class ZhouqiItem {
+        /**
+         * 鍛ㄦ湡鍗曚綅锛歞ay-澶┿�亀eek-鍛ㄣ�乵onth-鏈堛�乹uarter-瀛e害銆亂ear-骞淬��
+         */
+        private String key;
+
+        /**
+         * 鍛ㄦ湡鏁板�笺��
+         */
+        private Integer value;
+    }
+}

--
Gitblit v1.8.0