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/LimsShebeiYiqiController.java | 356 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 356 insertions(+), 0 deletions(-)
diff --git a/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsShebeiYiqiController.java b/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsShebeiYiqiController.java
new file mode 100644
index 0000000..18cad13
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsShebeiYiqiController.java
@@ -0,0 +1,356 @@
+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.LimsShebeiYiqiJiaozhunNeibuParam;
+import jnpf.limsEntity.LimsShebeiYiqiJiaozhunWaibuParam;
+import jnpf.limsEntity.LimsShebeiYiqiPeijianGenghuanParam;
+import jnpf.limsEntity.LimsShebeiYiqiWeibaoParam;
+import jnpf.limsService.LimsShebeiYiqiXinxiService;
+import jnpf.limsService.LimsShebeiYiqiJiaozhunNeibuService;
+import jnpf.limsService.LimsShebeiYiqiJiaozhunWaibuService;
+import jnpf.limsService.LimsShebeiYiqiPeijianGenghuanService;
+import jnpf.limsService.LimsShebeiYiqiQijuBaofeiService;
+import jnpf.limsService.LimsShebeiYiqiWeibaoService;
+import jnpf.util.R;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.Array;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+@Slf4j
+@Tag(name = "lims璁惧浠櫒鎺ュ彛", description = "璁惧浠櫒涓氬姟鎿嶄綔")
+@RestController
+@RequestMapping("/lims/biz/shebei/yiqi")
+public class LimsShebeiYiqiController {
+
+ @Autowired
+ private LimsShebeiYiqiXinxiService limsShebeiYiqiXinxiService;
+
+ @Autowired
+ private LimsShebeiYiqiJiaozhunWaibuService limsShebeiYiqiJiaozhunWaibuService;
+
+ @Autowired
+ private LimsShebeiYiqiJiaozhunNeibuService limsShebeiYiqiJiaozhunNeibuService;
+
+ @Autowired
+ private LimsShebeiYiqiQijuBaofeiService limsShebeiYiqiQijuBaofeiService;
+
+ @Autowired
+ private LimsShebeiYiqiWeibaoService limsShebeiYiqiWeibaoService;
+
+ @Autowired
+ private LimsShebeiYiqiPeijianGenghuanService limsShebeiYiqiPeijianGenghuanService;
+
+ /**
+ * 浠櫒鎶ュ簾锛氭寜浠櫒淇℃伅 f_id 灏� biz_status 鏇存柊涓� yibaofei銆�
+ */
+ @Operation(summary = "浠櫒鎶ュ簾")
+ @PostMapping("/baofei")
+ public R<String> baofei(@RequestBody(required = false) Map<String, Object> formData,
+ @RequestParam(value = "yiqi_id", required = false) String yiqiId) {
+ String resolvedYiqiId = resolveYiqiId(formData, yiqiId);
+ try {
+ limsShebeiYiqiXinxiService.baofei(resolvedYiqiId);
+ return R.success("鎶ュ簾鎴愬姛");
+ } catch (DataException e) {
+ log.warn("浠櫒鎶ュ簾澶辫触锛歽iqiId={}, msg={}", resolvedYiqiId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 灏嗗閮ㄦ牎鍑嗚褰曞悓姝ュ埌鍏宠仈鐨勮閲忓櫒鍏枫��
+ */
+ @Operation(summary = "鍚屾澶栭儴鏍″噯缁撴灉")
+ @PostMapping("/jiaozhun/waibu")
+ public R<String> syncWaibuJiaozhun(@RequestBody LimsShebeiYiqiJiaozhunWaibuParam param) {
+ String jiaozhunId = param == null ? "" : param.getJiaozhunId();
+ try {
+ limsShebeiYiqiJiaozhunWaibuService.syncToQiju(jiaozhunId);
+ return R.success("澶栭儴鏍″噯缁撴灉鍚屾鎴愬姛");
+ } catch (DataException e) {
+ log.warn("鍚屾澶栭儴鏍″噯缁撴灉澶辫触锛歫iaozhunId={}, msg={}", jiaozhunId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 灏嗙淮淇濊褰曞悓姝ュ埌鍏宠仈鐨勭淮淇濆瓙椤广��
+ */
+ @Operation(summary = "鍚屾浠櫒缁翠繚瀛愰」")
+ @PostMapping("/weibao/sync")
+ public R<String> syncWeibao(@RequestBody LimsShebeiYiqiWeibaoParam param) {
+ String weibaoId = param == null ? "" : param.getWeibaoId();
+ try {
+ int count = limsShebeiYiqiWeibaoService.syncToZixiang(weibaoId);
+ return R.success("缁翠繚瀛愰」鍚屾鎴愬姛锛屽叡" + count + "鏉�");
+ } catch (DataException e) {
+ log.warn("鍚屾浠櫒缁翠繚瀛愰」澶辫触锛歸eibaoId={}, msg={}", weibaoId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 灏嗛厤浠舵洿鎹㈣褰曞悓姝ュ埌鍏宠仈鐨勯厤浠舵洿鎹㈠瓙椤广��
+ */
+ @Operation(summary = "鍚屾浠櫒閰嶄欢鏇存崲瀛愰」")
+ @PostMapping("/peijian/genghuan/sync")
+ public R<String> syncPeijianGenghuan(@RequestBody LimsShebeiYiqiPeijianGenghuanParam param) {
+ String genghuanId = param == null ? "" : param.getGenghuanId();
+ try {
+ int count = limsShebeiYiqiPeijianGenghuanService.syncToZixiang(genghuanId);
+ return R.success("閰嶄欢鏇存崲瀛愰」鍚屾鎴愬姛锛屽叡" + count + "鏉�");
+ } catch (DataException e) {
+ log.warn("鍚屾浠櫒閰嶄欢鏇存崲瀛愰」澶辫触锛歡enghuanId={}, msg={}", genghuanId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 灏嗘祦绋嬪叧鑱旂殑鍐呴儴鏍″噯璁板綍鍚屾鍒板叧鑱旂殑璁¢噺鍣ㄥ叿銆�
+ */
+ @Operation(summary = "鍚屾鍐呴儴鏍″噯缁撴灉")
+ @PostMapping("/jiaozhun/neibu")
+ public R<String> syncNeibuJiaozhun(@RequestBody LimsShebeiYiqiJiaozhunNeibuParam param) {
+ String flowId = param == null ? "" : param.getFlowId();
+ String taskId = param == null ? "" : param.getTaskId();
+ try {
+ limsShebeiYiqiJiaozhunNeibuService.syncToQiju(flowId, taskId);
+ return R.success("鍐呴儴鏍″噯缁撴灉鍚屾鎴愬姛");
+ } catch (DataException e) {
+ log.warn("鍚屾鍐呴儴鏍″噯缁撴灉澶辫触锛歠lowId={}, taskId={}, msg={}", flowId, taskId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 鏍规嵁娴佺▼鍏宠仈鐨勫櫒鍏锋姤搴熺敵璇凤紝灏嗗搴旇閲忓櫒鍏锋爣璁颁负宸叉姤搴熴��
+ */
+ @Operation(summary = "鍣ㄥ叿鎶ュ簾")
+ @PostMapping("/qiju/baofei")
+ public R<String> baofeiQiju(@RequestBody(required = false) Map<String, Object> formData,
+ @RequestParam(value = "flow_id", required = false) String flowId,
+ @RequestParam(value = "task_id", required = false) String taskId) {
+ String resolvedFlowId = resolveParam(formData, flowId, "flow_id", "flowId");
+ String resolvedTaskId = resolveParam(formData, taskId, "task_id", "taskId");
+ try {
+ limsShebeiYiqiQijuBaofeiService.baofeiQiju(resolvedFlowId, resolvedTaskId);
+ return R.success("鍣ㄥ叿鎶ュ簾鎴愬姛");
+ } catch (DataException e) {
+ log.warn("鍣ㄥ叿鎶ュ簾澶辫触锛歠lowId={}, taskId={}, msg={}",
+ resolvedFlowId, resolvedTaskId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 浠櫒鎵归噺鍚敤锛氭寜浠櫒淇℃伅 f_id 鎵归噺灏� xingneng_zhuangtai 鏇存柊涓� zhunyong銆�
+ */
+ @Operation(summary = "浠櫒鎵归噺鍚敤")
+ @PostMapping("/qiyong")
+ public R<Map<String, Object>> qiyong(@RequestBody(required = false) Map<String, Object> formData,
+ @RequestParam(value = "yiqi_ids", required = false) String yiqiIds) {
+ List<String> resolvedYiqiIds = resolveYiqiIds(formData, yiqiIds);
+ try {
+ int count = limsShebeiYiqiXinxiService.qiyong(resolvedYiqiIds);
+ Map<String, Object> data = new java.util.HashMap<>(2);
+ data.put("yiqi_ids", resolvedYiqiIds);
+ data.put("count", count);
+ return R.success("鍚敤鎴愬姛", data);
+ } catch (DataException e) {
+ log.warn("浠櫒鎵归噺鍚敤澶辫触锛歽iqiIds={}, msg={}", resolvedYiqiIds, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 鏍¢獙浠櫒褰撳ぉ鏄惁宸插畬鎴愭牎鍑嗐��
+ */
+ @Operation(summary = "鏍¢獙浠櫒褰撳ぉ鏍″噯鐘舵��")
+ @PostMapping("/jiaoyan/check")
+ public R<String> check(@RequestBody(required = false) Map<String, Object> formData,
+ @RequestParam(value = "yiqi_id", required = false) String yiqiId,
+ @RequestParam(value = "jiaoyan_shijian", required = false) String jiaoyanShijian) {
+ String resolvedYiqiId = resolveYiqiId(formData, yiqiId);
+ try {
+ LocalDateTime resolvedJiaoyanShijian = resolveJiaoyanShijian(formData, jiaoyanShijian);
+ limsShebeiYiqiXinxiService.checkTodayJiaoyan(resolvedYiqiId, resolvedJiaoyanShijian);
+ return R.success("鏍¢獙閫氳繃");
+ } catch (DataException e) {
+ log.warn("浠櫒鏍″噯鏍¢獙澶辫触锛歽iqiId={}, msg={}", resolvedYiqiId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 鏍¢獙浠櫒鏄惁婊¤冻浣跨敤鏉′欢銆�
+ */
+ @Operation(summary = "鏍¢獙浠櫒浣跨敤鐘舵��")
+ @PostMapping("/shiyong/check")
+ public R<String> checkShiyong(@RequestBody(required = false) Map<String, Object> formData,
+ @RequestParam(value = "yiqi_id", required = false) String yiqiId) {
+ String resolvedYiqiId = resolveYiqiId(formData, yiqiId);
+ try {
+ limsShebeiYiqiXinxiService.checkShiyong(resolvedYiqiId);
+ return R.success("鏍¢獙閫氳繃");
+ } catch (DataException e) {
+ log.warn("浠櫒浣跨敤鏍¢獙澶辫触锛歽iqiId={}, msg={}", resolvedYiqiId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 纭浠櫒楠岃瘉锛屽苟灏嗛獙璇佺粨鏋滃悓姝ュ埌鍏宠仈浠櫒淇℃伅銆�
+ */
+ @Operation(summary = "纭浠櫒楠岃瘉")
+ @PostMapping("/yanzheng/confirm")
+ public R<String> confirmYanzheng(@RequestBody(required = false) Map<String, Object> formData) {
+ String yanzhengId = resolveParam(formData, null, "yanzheng_id", "yanzhengId");
+ try {
+ limsShebeiYiqiXinxiService.confirmYanzheng(yanzhengId);
+ return R.success("浠櫒楠岃瘉纭鎴愬姛");
+ } catch (DataException e) {
+ log.warn("纭浠櫒楠岃瘉澶辫触锛歽anzhengId={}, msg={}", yanzhengId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 纭浠櫒璁¢噺锛屽苟灏嗚閲忕粨鏋滃悓姝ュ埌鍏宠仈浠櫒淇℃伅銆�
+ */
+ @Operation(summary = "纭浠櫒璁¢噺")
+ @PostMapping("/jiliang/confirm")
+ public R<String> confirmJiliang(@RequestBody(required = false) Map<String, Object> formData) {
+ String jiliangId = resolveParam(formData, null, "jiliang_id", "jiliangId");
+ try {
+ limsShebeiYiqiXinxiService.confirmJiliang(jiliangId);
+ return R.success("浠櫒璁¢噺纭鎴愬姛");
+ } catch (DataException e) {
+ log.warn("纭浠櫒璁¢噺澶辫触锛歫iliangId={}, msg={}", jiliangId, e.getMessage());
+ return R.error(e.getMessage());
+ }
+ }
+
+ private String resolveYiqiId(Map<String, Object> formData, String yiqiId) {
+ String value = trimToEmpty(yiqiId);
+ if (!value.isEmpty()) {
+ return value;
+ }
+ if (formData == null) {
+ return "";
+ }
+ Object raw = formData.get("yiqi_id");
+ if (raw == null) {
+ raw = formData.get("yiqiId");
+ }
+ return raw == null ? "" : trimToEmpty(String.valueOf(raw));
+ }
+
+ private String resolveParam(Map<String, Object> formData, String requestParam,
+ String snakeCaseKey, String camelCaseKey) {
+ String value = trimToEmpty(requestParam);
+ if (!value.isEmpty() || formData == null) {
+ return value;
+ }
+ Object raw = formData.get(snakeCaseKey);
+ if (raw == null) {
+ raw = formData.get(camelCaseKey);
+ }
+ return raw == null ? "" : trimToEmpty(String.valueOf(raw));
+ }
+
+ private LocalDateTime resolveJiaoyanShijian(Map<String, Object> formData, String jiaoyanShijian) throws DataException {
+ Object raw = trimToEmpty(jiaoyanShijian);
+ if (raw.toString().isEmpty() && formData != null) {
+ raw = formData.get("jiaoyan_shijian");
+ if (raw == null) {
+ raw = formData.get("jiaoyanShijian");
+ }
+ }
+ if (raw == null || trimToEmpty(String.valueOf(raw)).isEmpty()) {
+ throw new DataException("鏍″噯鏃堕棿(jiaoyan_shijian)涓嶈兘涓虹┖");
+ }
+
+ String value = trimToEmpty(String.valueOf(raw));
+ try {
+ if (value.matches("^-?\\d{1,17}$")) {
+ return LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.parseLong(value)), ZoneId.systemDefault());
+ }
+ if (value.length() == 10) {
+ return LocalDate.parse(value, DateTimeFormatter.ISO_LOCAL_DATE).atStartOfDay();
+ }
+ try {
+ return LocalDateTime.parse(value, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
+ } catch (DateTimeParseException ignored) {
+ return LocalDateTime.parse(value, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+ }
+ } catch (DateTimeParseException | NumberFormatException e) {
+ throw new DataException("鏍″噯鏃堕棿(jiaoyan_shijian)鏍煎紡涓嶆纭�");
+ }
+ }
+
+ private List<String> resolveYiqiIds(Map<String, Object> formData, String yiqiIds) {
+ Set<String> ids = new LinkedHashSet<>();
+ addIds(ids, yiqiIds);
+ if (formData != null) {
+ Object raw = formData.get("yiqi_ids");
+ if (raw == null) {
+ raw = formData.get("yiqiIds");
+ }
+ addIds(ids, raw);
+ }
+ return new ArrayList<>(ids);
+ }
+
+ private void addIds(Set<String> ids, Object raw) {
+ if (raw == null) {
+ return;
+ }
+ if (raw instanceof Iterable) {
+ for (Object item : (Iterable<?>) raw) {
+ addIds(ids, item);
+ }
+ return;
+ }
+ if (raw.getClass().isArray()) {
+ int length = Array.getLength(raw);
+ for (int i = 0; i < length; i++) {
+ addIds(ids, Array.get(raw, i));
+ }
+ return;
+ }
+ String value = trimToEmpty(String.valueOf(raw));
+ if (value.isEmpty()) {
+ return;
+ }
+ String[] splitIds = value.split(",");
+ for (String splitId : splitIds) {
+ String id = trimToEmpty(splitId);
+ if (!id.isEmpty()) {
+ ids.add(id);
+ }
+ }
+ }
+
+ private String trimToEmpty(String value) {
+ return value == null ? "" : value.trim();
+ }
+}
--
Gitblit v1.8.0