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-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/impl/DmsDanganXiaohuiShenqingTongguoServiceImpl.java | 122 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 122 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/impl/DmsDanganXiaohuiShenqingTongguoServiceImpl.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/impl/DmsDanganXiaohuiShenqingTongguoServiceImpl.java
new file mode 100644
index 0000000..f510313
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/impl/DmsDanganXiaohuiShenqingTongguoServiceImpl.java
@@ -0,0 +1,122 @@
+package jnpf.dmsService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import jnpf.dmsEntity.DmsDanganCundangShenqingDanganheEntity;
+import jnpf.dmsEntity.DmsDanganXiaohuiShenqingEntity;
+import jnpf.dmsEntity.DmsDanganXiaohuiShenqingZixiangEntity;
+import jnpf.dmsMapper.DmsDanganCundangShenqingDanganheMapper;
+import jnpf.dmsMapper.DmsDanganXiaohuiShenqingMapper;
+import jnpf.dmsMapper.DmsDanganXiaohuiShenqingZixiangMapper;
+import jnpf.dmsService.DmsDanganXiaohuiShenqingTongguoService;
+import jnpf.exception.DataException;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+@Service
+@RequiredArgsConstructor
+public class DmsDanganXiaohuiShenqingTongguoServiceImpl
+ implements DmsDanganXiaohuiShenqingTongguoService {
+
+ private final DmsDanganXiaohuiShenqingMapper shenqingMapper;
+ private final DmsDanganXiaohuiShenqingZixiangMapper zixiangMapper;
+ private final DmsDanganCundangShenqingDanganheMapper danganheMapper;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void tongguo(String flowId, String taskId) throws DataException {
+ String resolvedFlowId = requireValue(flowId, "娴佺▼ID(flow_id)");
+ String resolvedTaskId = requireValue(taskId, "娴佺▼浠诲姟ID(task_id)");
+
+ DmsDanganXiaohuiShenqingEntity shenqing = findApplication(resolvedFlowId, resolvedTaskId);
+ Set<String> danganheIds = findDanganheIds(shenqing.getId());
+ List<DmsDanganCundangShenqingDanganheEntity> danganheList = findSourceDanganhe(danganheIds);
+ ensureAssignable(danganheList, shenqing.getId());
+
+ LambdaUpdateWrapper<DmsDanganCundangShenqingDanganheEntity> update = new LambdaUpdateWrapper<>();
+ update.in(DmsDanganCundangShenqingDanganheEntity::getId, danganheIds)
+ .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark)
+ .and(wrapper -> wrapper.isNull(DmsDanganCundangShenqingDanganheEntity::getXiaohuiId)
+ .or()
+ .eq(DmsDanganCundangShenqingDanganheEntity::getXiaohuiId, shenqing.getId()))
+ .set(DmsDanganCundangShenqingDanganheEntity::getXiaohuiId, shenqing.getId());
+ if (danganheMapper.update(null, update) != danganheIds.size()) {
+ throw new DataException("妗f鐩掗攢姣佸叧鑱斿彂鐢熷苟鍙戝彉鏇达紝璇烽噸鏂板鐞�");
+ }
+ }
+
+ private DmsDanganXiaohuiShenqingEntity findApplication(String flowId, String taskId) throws DataException {
+ LambdaQueryWrapper<DmsDanganXiaohuiShenqingEntity> query = new LambdaQueryWrapper<>();
+ query.eq(DmsDanganXiaohuiShenqingEntity::getFlowId, flowId)
+ .eq(DmsDanganXiaohuiShenqingEntity::getFlowTaskId, taskId)
+ .isNull(DmsDanganXiaohuiShenqingEntity::getDeleteMark);
+ List<DmsDanganXiaohuiShenqingEntity> applications = shenqingMapper.selectList(query);
+ if (applications.isEmpty()) {
+ throw new DataException("鏈壘鍒版。妗堥攢姣佺敵璇凤細flow_id=" + flowId + ", task_id=" + taskId);
+ }
+ if (applications.size() > 1) {
+ throw new DataException("flow_id涓巘ask_id鍏宠仈浜嗗鏉℃。妗堥攢姣佺敵璇凤紝鏃犳硶纭閫氳繃璁板綍");
+ }
+ return applications.get(0);
+ }
+
+ private Set<String> findDanganheIds(String shenqingId) throws DataException {
+ LambdaQueryWrapper<DmsDanganXiaohuiShenqingZixiangEntity> query = new LambdaQueryWrapper<>();
+ query.eq(DmsDanganXiaohuiShenqingZixiangEntity::getForeignId, shenqingId)
+ .isNull(DmsDanganXiaohuiShenqingZixiangEntity::getDeleteMark);
+ List<DmsDanganXiaohuiShenqingZixiangEntity> details = zixiangMapper.selectList(query);
+ if (details.isEmpty()) {
+ throw new DataException("妗f閿�姣佺敵璇锋湭鍏宠仈妗f鐩掓槑缁嗭紝鏃犳硶閫氳繃");
+ }
+ Set<String> ids = new LinkedHashSet<>();
+ for (DmsDanganXiaohuiShenqingZixiangEntity detail : details) {
+ String danganheId = trimToEmpty(detail.getDanganheId());
+ if (danganheId.isEmpty()) {
+ throw new DataException("妗f閿�姣佺敵璇锋槑缁嗙己灏戞。妗堢洅ID(danganhe_id)");
+ }
+ if (!ids.add(danganheId)) {
+ throw new DataException("妗f閿�姣佺敵璇锋槑缁嗗寘鍚噸澶嶆。妗堢洅ID(danganhe_id)");
+ }
+ }
+ return ids;
+ }
+
+ private List<DmsDanganCundangShenqingDanganheEntity> findSourceDanganhe(Set<String> danganheIds)
+ throws DataException {
+ LambdaQueryWrapper<DmsDanganCundangShenqingDanganheEntity> query = new LambdaQueryWrapper<>();
+ query.in(DmsDanganCundangShenqingDanganheEntity::getId, danganheIds)
+ .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark);
+ List<DmsDanganCundangShenqingDanganheEntity> danganheList = danganheMapper.selectList(query);
+ if (danganheList.size() != danganheIds.size()) {
+ throw new DataException("瀛樺湪鏈壘鍒版垨宸插垹闄ょ殑妗f鐩掞紝鏃犳硶閫氳繃閿�姣佺敵璇�");
+ }
+ return danganheList;
+ }
+
+ private void ensureAssignable(List<DmsDanganCundangShenqingDanganheEntity> danganheList, String shenqingId)
+ throws DataException {
+ for (DmsDanganCundangShenqingDanganheEntity danganhe : danganheList) {
+ String currentXiaohuiId = trimToEmpty(danganhe.getXiaohuiId());
+ if (!currentXiaohuiId.isEmpty() && !shenqingId.equals(currentXiaohuiId)) {
+ throw new DataException("妗f鐩掑凡鍏宠仈鍏朵粬閿�姣佺敵璇凤紝鏃犳硶閲嶅閫氳繃");
+ }
+ }
+ }
+
+ private String requireValue(String value, String fieldName) throws DataException {
+ String resolved = trimToEmpty(value);
+ if (resolved.isEmpty()) {
+ throw new DataException(fieldName + "涓嶈兘涓虹┖");
+ }
+ return resolved;
+ }
+
+ private String trimToEmpty(String value) {
+ return value == null ? "" : value.trim();
+ }
+}
--
Gitblit v1.8.0