From 04914a9997afbbead6f8adbb9d9c40e05b2edbd1 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期三, 17 十二月 2025 17:04:34 +0800
Subject: [PATCH] 修复调用导入工程失败 重复保存;修复分批出片逻辑
---
mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java | 201 +++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 189 insertions(+), 12 deletions(-)
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java b/mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java
index cee3a46..191d48c 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java
@@ -1,17 +1,19 @@
package com.mes.device.controller;
+import com.mes.device.entity.EngineeringSequence;
+import com.mes.device.entity.GlassInfo;
+import com.mes.device.service.EngineeringSequenceService;
import com.mes.device.service.GlassInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* @author :huang
@@ -25,22 +27,26 @@
public class GlassInfoImportController {
private final GlassInfoService glassInfoService;
+ private final EngineeringSequenceService engineeringSequenceService;
private final RestTemplate restTemplate = new RestTemplate();
- @Value("${mes.engineering.import-url}")
- private String mesEngineeringImportUrl;
/**
* 瀵煎叆宸ョ▼
* 鍓嶇鍏ュ弬绀轰緥锛�
* {
* "excelRows": [
- * {"glassId":"GL001","width":"1000","height":"2000","thickness":"5","quantity":"2","orderNumber":"NG25082101","filmsId":"鐧界幓"}
+ * {"glassId":"GL001","width":"1000","height":"2000","thickness":"5","quantity":"2","flowCardId":"NG25082101","filmsId":"鐧界幓"}
* ]
* }
*/
@PostMapping("/importExcel")
public ResponseEntity<?> importEngineer(@RequestBody Map<String, Object> body) {
+ // 鍒濆鍖栬繑鍥炵粨鏋滃拰鍏抽敭鏍囪
+ Map<String, Object> errorResponse = new HashMap<>();
+ boolean mesSuccess = false;
+ String engineeringId = null;
+ // 1. 鏍¢獙
Object rowsObj = body.get("excelRows");
if (!(rowsObj instanceof List)) {
return ResponseEntity.badRequest().body("excelRows 蹇呴』鏄暟缁�");
@@ -51,15 +57,186 @@
return ResponseEntity.badRequest().body("excelRows 涓嶈兘涓虹┖");
}
- Map<String, Object> payload = glassInfoService.buildEngineerImportPayload(excelRows);
- log.info("鏋勫缓鐨� MES 瀵煎叆鏁版嵁: {}", payload);
+ try {
+ // 2. 鏋勫缓MES瀵煎叆鏁版嵁
+ Map<String, Object> payload = glassInfoService.buildEngineerImportPayload(excelRows);
+ log.info("鏋勫缓鐨� MES 瀵煎叆鏁版嵁: {}", payload);
- try {
+ // 3. 鎻愬彇宸ョ▼鍙�
+ engineeringId = (String) payload.get("engineerId");
+ if (engineeringId == null || engineeringId.isEmpty()) {
+ @SuppressWarnings("unchecked")
+ List<Map<String, Object>> glassInfoList = (List<Map<String, Object>>) payload.get("glassInfolList");
+ if (glassInfoList != null && !glassInfoList.isEmpty()) {
+ Object firstEngineerId = glassInfoList.get(0).get("engineerId");
+ if (firstEngineerId != null) {
+ engineeringId = firstEngineerId.toString();
+ }
+ }
+ }
+
+ // 4. 璋冪敤MES鎺ュ彛
+ String mesEngineeringImportUrl = glassInfoService.getMesEngineeringImportUrl();
ResponseEntity<Map> mesResp = restTemplate.postForEntity(mesEngineeringImportUrl, payload, Map.class);
- return ResponseEntity.status(mesResp.getStatusCode()).body(mesResp.getBody());
+ Map<String, Object> mesBody = mesResp.getBody();
+
+ // 5. 妫�鏌ES鍝嶅簲鏄惁鐪熸鎴愬姛锛堜紭鍖栧悗鐨勫垽鏂�昏緫锛屽鍔犲紓甯告崟鑾凤級
+ if (mesResp.getStatusCode().is2xxSuccessful() && mesBody != null) {
+ Object codeObj = mesBody.get("code");
+ if (codeObj != null) {
+ try {
+ // 瀹夊叏杞崲code涓烘暣鏁帮紝閬垮厤绫诲瀷杞崲寮傚父
+ int code = codeObj instanceof Number ? ((Number) codeObj).intValue() :
+ Integer.parseInt(String.valueOf(codeObj).trim());
+ // MES鎴愬姛閫氬父杩斿洖code=200鎴�0
+ mesSuccess = (code == 200 || code == 0);
+ } catch (NumberFormatException e) {
+ log.warn("MES鍝嶅簲code瀛楁涓嶆槸鏈夋晥鏁板瓧锛歿}", codeObj, e);
+ }
+ } else {
+ // 娌℃湁code瀛楁锛岃涓篐TTP 2xx灏辨槸鎴愬姛
+ mesSuccess = true;
+ }
+ } else {
+ // HTTP鐘舵�佺爜涓嶆槸2xx鎴栧搷搴斾綋涓虹┖锛岃涓哄け璐�
+ mesSuccess = false;
+ log.warn("MES鎺ュ彛杩斿洖闈�2xx鐘舵�佺爜鎴栫┖鍝嶅簲浣擄紝鐘舵�佺爜锛歿}", mesResp.getStatusCode());
+ }
+
+ // 6. 鍙湁MES瀵煎叆鐪熸鎴愬姛涓斿伐绋嬪彿涓嶄负绌烘椂锛屾墠淇濆瓨鍒版湰鍦版暟鎹簱
+ if (mesSuccess && engineeringId != null && !engineeringId.isEmpty()) {
+ // 鍏堜繚瀛樺伐绋嬪彿
+ engineeringSequenceService.saveEngineeringId(new Date(), engineeringId);
+ // 鍐嶄繚瀛樼幓鐠冧俊鎭�
+ glassInfoService.saveGlassInfosFromExcel(excelRows, engineeringId);
+ log.info("MES瀵煎叆鎴愬姛锛屽凡淇濆瓨宸ョ▼鍙峰拰鐜荤拑淇℃伅鍒版湰鍦版暟鎹簱锛屽伐绋嬪彿: {}", engineeringId);
+ } else {
+ log.warn("MES瀵煎叆鏈垚鍔燂紝涓嶄繚瀛樺伐绋嬪彿鍜岀幓鐠冧俊鎭埌鏈湴鏁版嵁搴�: engineeringId={}, mesSuccess={}", engineeringId, mesSuccess);
+ }
+
+ // 7. 杩斿洖MES鐨勫搷搴�
+ return ResponseEntity.status(mesResp.getStatusCode()).body(mesBody);
+ } catch (org.springframework.web.client.ResourceAccessException e) {
+ // 杩炴帴瓒呮椂鎴栨棤娉曡繛鎺�
+ log.error("杞彂 MES 瀵煎叆鎺ュ彛澶辫触锛堣繛鎺ラ棶棰橈級 url={}, error={}", glassInfoService.getMesEngineeringImportUrl(), e.getMessage(), e);
+ errorResponse.put("code", 500);
+ errorResponse.put("message", "鏃犳硶杩炴帴鍒� MES 鎺ュ彛锛岃妫�鏌ョ綉缁滆繛鎺ユ垨鑱旂郴绠$悊鍛�");
+ errorResponse.put("data", false);
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
} catch (Exception e) {
- log.error("杞彂 MES 瀵煎叆鎺ュ彛澶辫触 url={}, error={}", mesEngineeringImportUrl, e.getMessage(), e);
- return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("杞彂 MES 澶辫触: " + e.getMessage());
+ // 鍏朵粬寮傚父
+ log.error("杞彂 MES 瀵煎叆鎺ュ彛澶辫触 url={}, error={}", glassInfoService.getMesEngineeringImportUrl(), e.getMessage(), e);
+ errorResponse.put("code", 500);
+ errorResponse.put("message", "杞彂 MES 澶辫触: " + e.getMessage());
+ errorResponse.put("data", false);
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
+ }
+ }
+
+ /**
+ * 鏌ヨ鎵�鏈夊伐绋嬪彿鍒楄〃
+ */
+ @GetMapping("/engineering/list")
+ public ResponseEntity<?> getEngineeringList() {
+ try {
+ List<EngineeringSequence> list = engineeringSequenceService.list();
+ List<Map<String, Object>> result = list.stream()
+ .map(seq -> {
+ Map<String, Object> map = new LinkedHashMap<>();
+ map.put("engineeringId", seq.getEngineeringId());
+ map.put("date", seq.getDate());
+ map.put("sequence", seq.getSequence());
+ return map;
+ })
+ .sorted(Comparator.comparing(
+ (Map<String, Object> map) -> (Date) map.get("date"),
+ Comparator.nullsLast(Comparator.reverseOrder())
+ ).thenComparing(
+ map -> (Integer) map.get("sequence"),
+ Comparator.nullsLast(Comparator.reverseOrder())
+ ))
+ .collect(Collectors.toList());
+ return ResponseEntity.ok(result);
+ } catch (Exception e) {
+ log.error("鏌ヨ宸ョ▼鍙峰垪琛ㄥけ璐�", e);
+ Map<String, Object> errorResponse = new HashMap<>();
+ errorResponse.put("code", 500);
+ errorResponse.put("message", "鏌ヨ宸ョ▼鍙峰垪琛ㄥけ璐�: " + e.getMessage());
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
+ }
+ }
+
+ /**
+ * 鏍规嵁宸ョ▼鍙锋煡璇㈠搴旂殑鐜荤拑ID鍒楄〃
+ */
+ @GetMapping("/engineering/{engineeringId}/glassIds")
+ public ResponseEntity<?> getGlassIdsByEngineeringId(@PathVariable String engineeringId) {
+ try {
+ List<GlassInfo> glassInfos = glassInfoService.getGlassInfosByEngineeringId(engineeringId);
+ List<String> glassIds = glassInfos.stream()
+ .map(GlassInfo::getGlassId)
+ .filter(id -> id != null && !id.trim().isEmpty())
+ .collect(Collectors.toList());
+
+ Map<String, Object> result = new HashMap<>();
+ result.put("engineeringId", engineeringId);
+ result.put("glassIds", glassIds);
+ result.put("count", glassIds.size());
+
+ return ResponseEntity.ok(result);
+ } catch (Exception e) {
+ log.error("鏍规嵁宸ョ▼鍙锋煡璇㈢幓鐠僆D鍒楄〃澶辫触: engineeringId={}", engineeringId, e);
+ Map<String, Object> errorResponse = new HashMap<>();
+ errorResponse.put("code", 500);
+ errorResponse.put("message", "鏌ヨ鐜荤拑ID鍒楄〃澶辫触: " + e.getMessage());
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
+ }
+ }
+
+ /**
+ * 鍒犻櫎宸ョ▼鍙峰強鍏跺叧鑱旂殑鐜荤拑淇℃伅
+ */
+ @DeleteMapping("/engineering/{engineeringId}")
+ public ResponseEntity<?> deleteEngineering(@PathVariable String engineeringId) {
+ try {
+ // 1. 鍒犻櫎glass_info琛ㄤ腑瀵瑰簲宸ョ▼鍙风殑鐜荤拑淇℃伅
+ int deletedGlassCount = glassInfoService.deleteGlassInfosByEngineeringId(engineeringId);
+
+ // 2. 鍒犻櫎engineering_sequence琛ㄤ腑鐨勫伐绋嬪彿璁板綍锛堥�昏緫鍒犻櫎锛�
+ EngineeringSequence sequence = engineeringSequenceService.getOne(
+ new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<EngineeringSequence>()
+ .eq(EngineeringSequence::getEngineeringId, engineeringId)
+ .eq(EngineeringSequence::getIsDeleted, 0) // 鍙煡璇㈡湭鍒犻櫎鐨勮褰�
+ .last("LIMIT 1")
+ );
+
+ boolean deletedSequence = false;
+ if (sequence != null) {
+ // removeById 浼氳嚜鍔ㄤ娇鐢ㄩ�昏緫鍒犻櫎锛堝洜涓哄疄浣撶被鏈� @TableLogic 娉ㄨВ锛�
+ deletedSequence = engineeringSequenceService.removeById(sequence.getId());
+ log.info("宸插垹闄ゅ伐绋嬪彿璁板綍: engineeringId={}, sequenceId={}", engineeringId, sequence.getId());
+ } else {
+ log.warn("鏈壘鍒板伐绋嬪彿璁板綍: engineeringId={}", engineeringId);
+ }
+
+ Map<String, Object> result = new HashMap<>();
+ result.put("engineeringId", engineeringId);
+ result.put("deletedGlassCount", deletedGlassCount);
+ result.put("deletedSequence", deletedSequence);
+ result.put("success", true);
+ result.put("message", String.format("宸插垹闄ゅ伐绋嬪彿 %s锛屽叡鍒犻櫎 %d 鏉$幓鐠冧俊鎭�", engineeringId, deletedGlassCount));
+
+ log.info("鍒犻櫎宸ョ▼鍙锋垚鍔�: engineeringId={}, deletedGlassCount={}, deletedSequence={}",
+ engineeringId, deletedGlassCount, deletedSequence);
+
+ return ResponseEntity.ok(result);
+ } catch (Exception e) {
+ log.error("鍒犻櫎宸ョ▼鍙峰け璐�: engineeringId={}", engineeringId, e);
+ Map<String, Object> errorResponse = new HashMap<>();
+ errorResponse.put("code", 500);
+ errorResponse.put("message", "鍒犻櫎宸ョ▼鍙峰け璐�: " + e.getMessage());
+ errorResponse.put("success", false);
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
}
}
}
--
Gitblit v1.8.0