From 97ee5904ad00373cd60e1e12d26bad6b5cdb6b66 Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期五, 23 五月 2025 13:12:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java | 68 +++++++++++++++++++++++++--------
aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml | 22 +++++++++--
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireErrorMapper.xml | 14 +++++++
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireErrorMapper.java | 8 ++++
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java | 7 +++
5 files changed, 98 insertions(+), 21 deletions(-)
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java
index d2a255c..6dd1432 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipingRouteStatMapper.java
@@ -115,4 +115,11 @@
* @return 鍘熷缁熻鏁版嵁鍒楄〃
*/
public List<Map<String, Object>> selectRawStatData(Map<String, Object> params);
+
+ /**
+ * 鏌ヨ鎵�鏈夋墜宸ユ皵浣撳伐鍗曟暟鎹�
+ *
+ * @return 鎵�鏈夋墜宸ユ皵浣撳伐鍗曟暟鎹�
+ */
+ public List<Map<String, Object>> selectAllMoData();
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireErrorMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireErrorMapper.java
index dcc3134..f65cecb 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireErrorMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireErrorMapper.java
@@ -61,5 +61,13 @@
*/
public int deleteApsPlateStandardRequireErrorByIds(Long[] ids);
+ /**
+ * 鎵归噺鎻掑叆閽i噾鏍囧噯闇�姹傚紓甯镐俊鎭�
+ *
+ * @param errorList 闇�瑕佹彃鍏ョ殑寮傚父鏁版嵁闆嗗悎
+ * @return 缁撴灉
+ */
+ public int batchInsert(List<ApsPlateStandardRequireError> errorList);
+
int deleteLastPatch(String batchNumber);
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
index 99c75aa..ce61324 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
@@ -6,10 +6,12 @@
import com.aps.common.core.utils.uuid.IdUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.domain.*;
+import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireError;
import com.aps.core.mapper.*;
import com.aps.core.service.IApsGasMaterialUsageService;
import com.aps.core.service.IApsGasPipingRouteStatService;
import com.aps.core.service.IApsStandardProcessService;
+import com.aps.core.mapper.ApsPlateStandardRequireErrorMapper;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
@@ -58,6 +60,9 @@
@Autowired
private IApsStandardProcessService apsStandardProcessService;
+
+ @Autowired
+ private ApsPlateStandardRequireErrorMapper apsPlateStandardRequireErrorMapper;
/**
* 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻
@@ -1117,6 +1122,12 @@
// 澶勭悊鎵嬪伐姘斾綋宸ュ崟鏁版嵁 - 浣跨敤鑱斿悎鏌ヨ鑾峰彇鎵�鏈夌浉鍏虫暟鎹�
List<Map<String, Object>> moDataList = apsGasPipingRouteStatMapper.selectMoRouteData();
+ // 鑾峰彇鎵�鏈夌殑MO鏁版嵁锛岀敤浜庢鏌ュ摢浜汳O娌℃湁鍏宠仈鍒板伐鑹鸿矾绾�
+ List<Map<String, Object>> allMoData = apsGasPipingRouteStatMapper.selectAllMoData();
+
+ // 璁板綍宸插叧鑱斿伐鑹鸿矾绾跨殑MO缂栧彿
+ Set<String> processedMoSet = new HashSet<>();
+
// 鎸夊伐鍗曞彿鍒嗙粍锛屼究浜庡鐞嗗悓涓�宸ュ崟鐨勪笉鍚屽伐搴�
Map<String, List<Map<String, Object>>> moGroups = moDataList.stream()
.collect(Collectors.groupingBy(data -> data.get("work_order_no").toString()));
@@ -1124,6 +1135,9 @@
// 澶勭悊姣忎釜宸ュ崟鐨勫伐鑹鸿矾绾�
for (String workOrderNo : moGroups.keySet()) {
List<Map<String, Object>> workOrderData = moGroups.get(workOrderNo);
+
+ // 鏍囪璇ュ伐鍗曞凡澶勭悊
+ processedMoSet.add(workOrderNo);
// 鎸夊伐搴忓彿鎺掑簭
workOrderData.sort((a, b) -> {
@@ -1202,6 +1216,36 @@
statList.addAll(processList);
}
+ }
+
+ // 澶勭悊娌℃湁鍏宠仈鍒板伐鑹鸿矾绾跨殑MO鏁版嵁
+ List<ApsPlateStandardRequireError> errorList = new ArrayList<>();
+ for (Map<String, Object> moData : allMoData) {
+ String workOrderNo = moData.get("mo").toString();
+ // 濡傛灉璇ュ伐鍗曟病鏈夎澶勭悊杩囷紝璇存槑娌℃湁鍏宠仈鍒板伐鑹鸿矾绾�
+ if (!processedMoSet.contains(workOrderNo)) {
+ ApsPlateStandardRequireError error = ApsPlateStandardRequireError.builder()
+ .id(Long.valueOf(IdUtils.fastSimpleUUID().hashCode()))
+ .batchNumber(batchNumber)
+ .requireId(IdUtil.getSnowflakeNextId())
+ .docNum(workOrderNo)
+ .itemNum(moData.get("material_code").toString())
+ .orgCode(moData.get("factory").toString())
+ .message("鏍囧噯宸ヨ壓璺嚎涓嶅瓨鍦�")
+ .delFlag("0")
+ .build();
+
+ // 璁剧疆鍩虹被灞炴��
+ error.setCreateBy(SecurityUtils.getUsername());
+ error.setCreateTime(truncateToSeconds(DateUtils.getNowDate()));
+
+ errorList.add(error);
+ }
+ }
+
+ // 鎵归噺鎻掑叆寮傚父鏁版嵁
+ if (!errorList.isEmpty()) {
+ apsPlateStandardRequireErrorMapper.batchInsert(errorList);
}
// 鎵归噺鎻掑叆鏁版嵁
@@ -1458,26 +1502,15 @@
// 閬嶅巻鍘熷鏁版嵁锛屾寜澶氱淮搴﹀垎缁勮繘琛岃仛鍚�
for (Map<String, Object> data : rawData) {
- // 杩囨护宸ュ簭鍚嶇О涓虹┖鐨勬暟鎹�
- String processName = getStringValue(data, "processName");
- if (processName == null || processName.trim().isEmpty()) {
- log.warn("璺宠繃澶勭悊锛氬伐搴忓悕绉颁负绌�");
- continue;
- }
-
- // 杩囨护杞﹂棿涓虹┖鐨勬暟鎹�
- String workshop = getStringValue(data, "workshop");
- if (workshop == null || workshop.trim().isEmpty()) {
- log.warn("璺宠繃澶勭悊锛氳溅闂翠负绌猴紝宸ュ簭鍚嶇О={}", processName);
- continue;
- }
-
// 鑾峰彇琛屽垎缁勫瓧娈靛��
String rowGroupValue = getStringValue(data, rowGroupBy);
- if (rowGroupValue == null) {
- log.warn("璺宠繃澶勭悊锛歿} 瀛楁鍊间负null", rowGroupBy);
+ if (rowGroupValue == null || rowGroupValue.trim().isEmpty()) {
+ log.warn("璺宠繃澶勭悊锛歿} 瀛楁鍊间负绌�", rowGroupBy);
continue;
}
+
+ // 鑾峰彇宸ュ簭鍚嶇О锛堢敤浜庢棩蹇楀拰鍚庣画澶勭悊锛�
+ String processName = getStringValue(data, "processName");
// 澶勭悊寮�宸ユ棩鏈�
Date processPlanStartDay = (Date) data.get("processPlanStartDay");
@@ -1489,6 +1522,7 @@
// 鏋勫缓鍒嗙粍閿� - 鍩轰簬row鍒嗙粍瀛楁鍜屽彲閫夌殑鍏朵粬缁村害
String plant = getStringValue(data, "plant");
String major = getStringValue(data, "major");
+ String workshop = getStringValue(data, "workshop");
StringBuilder groupKeyBuilder = new StringBuilder(rowGroupValue);
@@ -1590,7 +1624,7 @@
rowEntry.put(rowGroupValue, rowDetail);
plantTable.add(rowEntry);
}
-
+
result.put("plantTable", plantTable);
result.put("timePoints", timePoints);
result.put("rowGroupBy", rowGroupBy);
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml
index 4b097a5..4789ec5 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipingRouteStatMapper.xml
@@ -261,13 +261,14 @@
l.route_name as process_name,
l.route_num as process_number,
l.standard_time,
- m.domain,
- s.work_shop as workshop
+ string_agg(DISTINCT m.domain, ';') as domain,
+ string_agg(DISTINCT s.work_shop, ';') as workshop
FROM aps_gas_pipeline_prediction p
JOIN aps_standard_process_route_header h ON p.material_code = h.item_code AND p.factory = h.org_code
JOIN aps_standard_process_route_line l ON h.route_id = l.route_id
LEFT JOIN aps_material_product_group_management m ON p.material_code = m.material_code AND p.factory = m.factory
LEFT JOIN aps_standard_process s ON l.route_name = s.process_name
+ GROUP BY p.id, p.material_code, p.factory, p.predict_quantity, p.predict_date, h.route_id, l.route_name, l.route_num, l.standard_time
ORDER BY p.material_code, l.route_num
</select>
@@ -283,12 +284,13 @@
r.process_name,
r.process_number,
r.standard_time,
- m.domain,
- s.work_shop as workshop
+ string_agg(DISTINCT m.domain, ';') as domain,
+ string_agg(DISTINCT s.work_shop, ';') as workshop
FROM aps_gas_pipeline_mo mo
JOIN aps_process_route r ON mo.mo = r.work_order_no
LEFT JOIN aps_material_product_group_management m ON mo.material_code = m.material_code AND mo.factory = m.factory
LEFT JOIN aps_standard_process s ON r.process_name = s.process_name
+ GROUP BY mo.id, mo.mo, mo.material_code, mo.factory, mo.quantity, mo.plan_end, r.process_name, r.process_number, r.standard_time
ORDER BY mo.mo, r.process_number
</select>
@@ -399,4 +401,16 @@
process_plan_start_day
</select>
+ <!-- 鏌ヨ鎵�鏈夋墜宸ユ皵浣撳伐鍗曟暟鎹� -->
+ <select id="selectAllMoData" resultType="java.util.Map">
+ SELECT
+ id,
+ mo,
+ factory,
+ material_code,
+ plan_end,
+ quantity
+ FROM aps_gas_pipeline_mo
+ </select>
+
</mapper>
\ No newline at end of file
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireErrorMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireErrorMapper.xml
index 5ab7280..5e8507f 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireErrorMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireErrorMapper.xml
@@ -107,4 +107,18 @@
set del_flag = '1'
where del_flag = '0' and batch_number != #{batchNumber}
</update>
+
+ <insert id="batchInsert" parameterType="java.util.List">
+ insert into aps_plate_standard_require_error(
+ id, batch_number, require_id, doc_num, item_num, org_code,
+ message, del_flag, create_by, create_time
+ ) values
+ <foreach collection="list" item="item" separator=",">
+ (
+ #{item.id}, #{item.batchNumber}, #{item.requireId}, #{item.docNum},
+ #{item.itemNum}, #{item.orgCode}, #{item.message}, #{item.delFlag},
+ #{item.createBy}, #{item.createTime}
+ )
+ </foreach>
+ </insert>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3