From 2eb261814a2407b3481dfe7b995c58d413a18cff Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 20 十月 2026 16:28:17 +0800
Subject: [PATCH] feat(quality): 质量监督/质量监控流程对齐程序文件并完善导入
---
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java | 143 ++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 121 insertions(+), 22 deletions(-)
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
index 6219c17..87f9a83 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
@@ -56,6 +56,8 @@
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.Base64;
import java.util.HashMap;
import java.util.LinkedHashSet;
@@ -178,8 +180,8 @@
throw new ErrorException("鏈壘鍒拌鐩戠潱鍛橈細" + superviseDetails.getSupervisee());
}
superviseDetails.setSupervisedUserId(user.getId());
- // 鏍煎紡鍖栨椂闂�
- superviseDetails.setSuperviseTime(detailsUpload.getSuperviseTime());
+ // 缁熶竴鏃ユ湡鏍煎紡锛岄伩鍏� Excel 鎶� 2026-03-15 瀛樻垚 2026/3/15 鍚庢棤娉曡В鏋�
+ superviseDetails.setSuperviseTime(normalizeSuperviseTime(detailsUpload.getSuperviseTime()));
detailsUploadList.add(superviseDetails);
}
@@ -432,6 +434,59 @@
}
/**
+ * 缁熶竴鐩戠潱鏃ユ湡鏍煎紡涓� yyyy.M锛�
+ * 2026-03-15 / 2026/3/15 / 2026.3.15 / 2026骞�3鏈�15鏃� -> 2026.3锛�
+ * 宸茬粡鏄� 2026.3 鎴� "3鏈堛��12鏈�" 绛夊啓娉曚繚鎸佸師鏍枫��
+ */
+ private static String normalizeSuperviseTime(String superviseTime) {
+ if (StringUtils.isBlank(superviseTime)) {
+ return superviseTime;
+ }
+ String text = superviseTime.trim();
+ Matcher matcher = Pattern.compile("^(\\d{4})\\s*[./骞�-]\\s*(\\d{1,2})(?:\\s*[./鏈�-]\\s*(\\d{1,2})\\s*鏃�?)?$")
+ .matcher(text);
+ if (matcher.matches()) {
+ int month = Integer.parseInt(matcher.group(2));
+ if (month >= 1 && month <= 12) {
+ return matcher.group(1) + "." + month;
+ }
+ }
+ return text;
+ }
+
+ /**
+ * 瑙f瀽鐩戠潱鏃ユ湡瀵瑰簲鐨勫勾鏈堬紝鍏煎鍘嗗彶鏁版嵁涓殑瀹屾暣鏃ユ湡鍐欐硶銆�
+ */
+ private static YearMonth parseSuperviseYearMonth(String superviseTime, String fallbackYear) {
+ if (StringUtils.isNotBlank(superviseTime)) {
+ String first = superviseTime.split("[銆�,锛�;锛沒+")[0].trim();
+ Matcher fullDate = Pattern.compile("(\\d{4})\\s*[./骞�-]\\s*(\\d{1,2})").matcher(first);
+ if (fullDate.find()) {
+ int month = Integer.parseInt(fullDate.group(2));
+ if (month >= 1 && month <= 12) {
+ return YearMonth.of(Integer.parseInt(fullDate.group(1)), month);
+ }
+ }
+ // "3鏈堛��12鏈�" 杩欑被娌℃湁骞翠唤鐨勫啓娉曪紝浣跨敤璁″垝骞村害
+ Matcher monthOnly = Pattern.compile("^(\\d{1,2})").matcher(first);
+ if (monthOnly.find()) {
+ int month = Integer.parseInt(monthOnly.group(1));
+ if (month >= 1 && month <= 12) {
+ int year = LocalDate.now().getYear();
+ if (StringUtils.isNotBlank(fallbackYear)) {
+ Matcher yearMatcher = Pattern.compile("(\\d{4})").matcher(fallbackYear);
+ if (yearMatcher.find()) {
+ year = Integer.parseInt(yearMatcher.group(1));
+ }
+ }
+ return YearMonth.of(year, month);
+ }
+ }
+ }
+ return YearMonth.now();
+ }
+
+ /**
* 鐩戠潱棰戞: 鎸夌洃鐫f椂闂翠腑鐨勬湀浠戒釜鏁拌绠�, 濡� "2026.3" -> "1娆�/骞�", "3鏈堛��12鏈�" -> "2娆�/骞�"
*/
private static String buildSuperviseFrequency(String superviseTime) {
@@ -439,7 +494,7 @@
return "";
}
int count = 0;
- for (String part : superviseTime.split("[銆�,锛�;锛�/\\s]+")) {
+ for (String part : normalizeSuperviseTime(superviseTime).split("[銆�,锛�;锛�/\\s]+")) {
if (part.matches(".*\\d.*")) {
count++;
}
@@ -456,7 +511,7 @@
}
StringBuilder sb = new StringBuilder();
for (String part : superviseTime.split("[銆�,锛�;锛沒+")) {
- String s = part.trim();
+ String s = normalizeSuperviseTime(part.trim());
if (s.isEmpty()) {
continue;
}
@@ -491,9 +546,11 @@
if (detailsRecord == null) {
// 鏌ヨ璇︽儏淇℃伅
QualitySuperviseDetails qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
+ QualitySupervise qualitySupervise = baseMapper.selectById(qualitySuperviseDetails.getSuperviseId());
// 鏌ヨ涓婁竴涓湀绗竴鏉$殑璁板綍淇℃伅, 鍒ゆ柇琚洃鐫d汉鍘诲彟澶栦竴涓�
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M");
- YearMonth yearMonth = YearMonth.parse(qualitySuperviseDetails.getSuperviseTime(), formatter);
+ // 鐩戠潱鏃ユ湡鍏煎 2026.3 / 2026-03-15 / 2026/3/15 / 2026骞�3鏈�15鏃� 绛夊啓娉�
+ YearMonth yearMonth = parseSuperviseYearMonth(qualitySuperviseDetails.getSuperviseTime(),
+ qualitySupervise == null ? null : qualitySupervise.getSuperviseYear());
YearMonth previousYearMonth = yearMonth.minusMonths(1);
LocalDate startDate = previousYearMonth.atDay(1);
@@ -515,21 +572,17 @@
String supervisor = null;
- if (laseRecord != null) {
- // 鏌ヨ璁″垝鑾峰彇鍙︿竴涓洃鐫e憳
- QualitySupervise qualitySupervise = baseMapper.selectById(qualitySuperviseDetails.getSuperviseId());
- if (StringUtils.isNotBlank(qualitySupervise.getRecordUserIds())) {
- List<String> recordUserIds = StrUtil.split(qualitySupervise.getRecordUserIds(), ',');
- List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery()
- .in(User::getId, recordUserIds));
- if (CollectionUtils.isNotEmpty(users) && users.size() == 2) {
- // 鍒ゆ柇鏄惁涓�鏍�, 涓�鏍疯幏鍙栧彟澶栦竴涓�
- if (users.get(0).getName().equals(laseRecord.getSupervisor())) {
- supervisor = users.get(1).getName();
- } else {
- supervisor = users.get(0).getName();
- }
-
+ // 璁″垝鎸囧畾鐨勭洃鐫e憳锛氶娆″~鍐欐椂榛樿甯﹀嚭绗竴浣嶏紱鏈変笂鏈堣褰曟椂涓や綅鐩戠潱鍛樹氦鏇�
+ if (qualitySupervise != null && StringUtils.isNotBlank(qualitySupervise.getRecordUserIds())) {
+ List<String> recordUserIds = StrUtil.split(qualitySupervise.getRecordUserIds(), ',');
+ List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery()
+ .in(User::getId, recordUserIds));
+ if (CollectionUtils.isNotEmpty(users)) {
+ if (laseRecord != null && users.size() > 1
+ && users.get(0).getName().equals(laseRecord.getSupervisor())) {
+ supervisor = users.get(1).getName();
+ } else {
+ supervisor = users.get(0).getName();
}
}
}
@@ -643,6 +696,47 @@
}
/**
+ * 琚洃鐫d汉鍛樼‘璁ょ洃鐫h褰�(绋嬪簭4.2.5: 琚洃鐫e璞″鐩戠潱璁板綍鐪熷疄鎬ф彁鍑虹‘璁ゆ剰瑙�)
+ */
+ @Override
+ public boolean confirmSuperviseRecord(QualitySuperviseDetailsRecord input) {
+ if (input == null || input.getSuperviseDetailsId() == null) {
+ throw new ErrorException("缂哄皯鐩戠潱璇︾粏淇℃伅id");
+ }
+ QualitySuperviseDetailsRecord record = qualitySuperviseDetailsRecordMapper.selectOne(
+ Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
+ .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, input.getSuperviseDetailsId())
+ .last("limit 1"));
+ if (record == null) {
+ throw new ErrorException("鐩戠潱鍛樺皻鏈彁浜ょ洃鐫h褰曪紝鏃犳硶纭");
+ }
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ if (user == null) {
+ throw new ErrorException("褰撳墠鐢ㄦ埛涓嶅瓨鍦�");
+ }
+ // 鍙湁琚洃鐫d汉鍛樻湰浜烘墠鍙互纭
+ boolean isSupervisee = StrUtil.split(record.getTestMember(), '銆�').stream()
+ .map(String::trim)
+ .anyMatch(name -> name.equals(user.getName()));
+ if (!isSupervisee) {
+ QualitySuperviseDetails detail = qualitySuperviseDetailsMapper.selectById(input.getSuperviseDetailsId());
+ isSupervisee = detail != null && userId.equals(detail.getSupervisedUserId());
+ }
+ if (!isSupervisee) {
+ throw new ErrorException("鍙湁琚洃鐫d汉鍛樺彲浠ョ‘璁ょ洃鐫h褰�");
+ }
+ String opinion = StringUtils.isBlank(input.getConfirmOpinion())
+ ? "瀵圭洃鐫h褰曠湡瀹炴�ц〃绀鸿鍙��" : input.getConfirmOpinion().trim();
+ qualitySuperviseDetailsRecordMapper.update(null,
+ Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
+ .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsRecordId,
+ record.getSuperviseDetailsRecordId())
+ .set(QualitySuperviseDetailsRecord::getConfirmOpinion, opinion));
+ return true;
+ }
+
+ /**
* 瀵煎嚭鐩戠潱璁板綍琛�(鏃ュ父鐩戠潱妫�鏌ヨ褰曡〃)
* @param superviseDetailsId
* @param response
@@ -670,6 +764,11 @@
put("qualityUrl", signatureOrTransparent(recordDto.getRatifyUserId()));
put("qualityDateStr", recordDto.getRatifyTime() != null ?
recordDto.getRatifyTime().format(RECORD_DATE_FORMATTER) : "");
+ // 绋嬪簭4.2.5: 琚洃鐫d汉鍛樺鐩戠潱璁板綍鐪熷疄鎬х殑纭鎰忚, 鏈‘璁ゆ椂娌跨敤绾稿紶琛ㄧ殑榛樿琛ㄨ堪
+ put("confirmOpinionText", StringUtils.isNotBlank(recordDto.getConfirmOpinion())
+ ? recordDto.getConfirmOpinion() : "瀵圭洃鐫h褰曠湡瀹炴�ц〃绀鸿鍙��");
+ put("superviseMethodText", StringUtils.isNotBlank(recordDto.getSuperviseMethod())
+ ? recordDto.getSuperviseMethod() : "");
}});
try {
@@ -690,7 +789,7 @@
}
/**
- * 鐩戠潱鍐呭(9椤�, 鎸夌焊寮犺〃妯帓椤哄簭)
+ * 鐩戠潱鍐呭(9椤�, 涓庡彈鎺ц褰曡〃 LMSY-CX29-JL02 鐨勬í鎺掗『搴忋�佹枃瀛楀畬鍏ㄤ竴鑷�)
*/
private static final String[] SUPERVISE_CONTENT_ITEMS = {
"浜哄憳鎸佽瘉鍙婂煿璁�", "璁炬柦鍙婄幆澧冩潯浠�", "妫�娴嬫柟娉�",
--
Gitblit v1.9.3