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/DmsDanganCundangJieshouServiceImpl.java |  147 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 147 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/impl/DmsDanganCundangJieshouServiceImpl.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/impl/DmsDanganCundangJieshouServiceImpl.java
new file mode 100644
index 0000000..aaccfb2
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/impl/DmsDanganCundangJieshouServiceImpl.java
@@ -0,0 +1,147 @@
+package jnpf.dmsService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import jnpf.dmsEntity.DmsDanganCundangShenqingEntity;
+import jnpf.dmsEntity.DmsDanganCundangShenqingDanganheEntity;
+import jnpf.dmsEntity.form.DmsDanganCundangJieshouDanganheForm;
+import jnpf.dmsEntity.form.DmsDanganCundangJieshouForm;
+import jnpf.dmsMapper.DmsDanganCundangShenqingDanganheMapper;
+import jnpf.dmsMapper.DmsDanganCundangShenqingMapper;
+import jnpf.dmsService.DmsDanganCundangJieshouService;
+import jnpf.exception.DataException;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+@Service
+@RequiredArgsConstructor
+public class DmsDanganCundangJieshouServiceImpl implements DmsDanganCundangJieshouService {
+
+    private final DmsDanganCundangShenqingDanganheMapper danganheMapper;
+    private final DmsDanganCundangShenqingMapper shenqingMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void jieshou(DmsDanganCundangJieshouForm form) throws DataException {
+        if (form == null) {
+            throw new DataException("妗f瀛樻。鎺ユ敹鍙傛暟涓嶈兘涓虹┖");
+        }
+        Set<String> danganheIds = resolveDanganheIds(form.getDanganheXinxi());
+        String jieshouRen = requireValue(form.getBizUserId(), "鎺ユ敹浜�(biz_user_id)");
+        String yijiaoRen = requireValue(form.getBizReviewUser(), "绉讳氦浜�(biz_review_user)");
+        String bizSign = requireValue(form.getBizSign(), "鎺ユ敹绛惧悕(biz_sign)");
+        String bizReviewSign = requireValue(form.getBizReviewSign(), "绉讳氦绛惧悕(biz_review_sign)");
+
+        LambdaQueryWrapper<DmsDanganCundangShenqingDanganheEntity> existingQuery = new LambdaQueryWrapper<>();
+        existingQuery.in(DmsDanganCundangShenqingDanganheEntity::getId, danganheIds)
+                .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark);
+        List<DmsDanganCundangShenqingDanganheEntity> danganheList = danganheMapper.selectList(existingQuery);
+        if (danganheList.size() != danganheIds.size()) {
+            throw new DataException("瀛樺湪鏈壘鍒版垨宸插垹闄ょ殑妗f鐩掕褰曪紝鏃犳硶鎺ユ敹");
+        }
+        for (DmsDanganCundangShenqingDanganheEntity danganhe : danganheList) {
+            if (!trimToEmpty(danganhe.getJieshouRen()).isEmpty()) {
+                throw new DataException("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�");
+            }
+        }
+
+        Date receivedAt = new Date();
+        LambdaUpdateWrapper<DmsDanganCundangShenqingDanganheEntity> update = new LambdaUpdateWrapper<>();
+        update.in(DmsDanganCundangShenqingDanganheEntity::getId, danganheIds)
+                .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark)
+                .and(wrapper -> wrapper.isNull(DmsDanganCundangShenqingDanganheEntity::getJieshouRen)
+                        .or()
+                        .eq(DmsDanganCundangShenqingDanganheEntity::getJieshouRen, ""))
+                .set(DmsDanganCundangShenqingDanganheEntity::getJieshouRen, jieshouRen)
+                .set(DmsDanganCundangShenqingDanganheEntity::getYijiaoRen, yijiaoRen)
+                .set(DmsDanganCundangShenqingDanganheEntity::getBizSign, bizSign)
+                .set(DmsDanganCundangShenqingDanganheEntity::getBizReviewSign, bizReviewSign)
+                .set(DmsDanganCundangShenqingDanganheEntity::getJieshouRiqi, receivedAt);
+        if (danganheMapper.update(null, update) != danganheIds.size()) {
+            throw new DataException("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�");
+        }
+    }
+
+    @Override
+    @Transactional(readOnly = true)
+    public DmsDanganCundangShenqingDanganheEntity check(String danganheBianhao) throws DataException {
+        String queryValue = requireValue(danganheBianhao, "妗f鐩掔紪鍙�(danganhe_bianhao)");
+        LambdaQueryWrapper<DmsDanganCundangShenqingDanganheEntity> danganheQuery = new LambdaQueryWrapper<>();
+        danganheQuery.and(wrapper -> wrapper
+                        .eq(DmsDanganCundangShenqingDanganheEntity::getDanganheBianhao, queryValue)
+                        .or()
+                        .eq(DmsDanganCundangShenqingDanganheEntity::getId, queryValue))
+                .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark);
+        List<DmsDanganCundangShenqingDanganheEntity> danganheList = danganheMapper.selectList(danganheQuery);
+        if (danganheList.isEmpty()) {
+            throw new DataException("鏈壘鍒板搴旂殑妗f鐩掕褰�");
+        }
+        if (danganheList.size() > 1) {
+            throw new DataException("妗f鐩掔紪鍙峰搴斿鏉¤褰曪紝璇蜂娇鐢ㄦ。妗堢洅ID鏍¢獙");
+        }
+
+        DmsDanganCundangShenqingDanganheEntity danganhe = danganheList.get(0);
+        String shenqingId = trimToEmpty(danganhe.getForeignId());
+        if (shenqingId.isEmpty()) {
+            throw new DataException("妗f鐩掓湭鍏宠仈瀛樻。鐢宠锛屾棤娉曟帴鏀�");
+        }
+        LambdaQueryWrapper<DmsDanganCundangShenqingEntity> shenqingQuery = new LambdaQueryWrapper<>();
+        shenqingQuery.eq(DmsDanganCundangShenqingEntity::getId, shenqingId)
+                .isNull(DmsDanganCundangShenqingEntity::getDeleteMark);
+        DmsDanganCundangShenqingEntity shenqing = shenqingMapper.selectOne(shenqingQuery);
+        if (shenqing == null) {
+            throw new DataException("鏈壘鍒版。妗堢洅鍏宠仈鐨勫瓨妗g敵璇�");
+        }
+        if (!Integer.valueOf(2).equals(shenqing.getFlowState())) {
+            throw new DataException("妗f瀛樻。鐢宠灏氭湭瀹℃壒閫氳繃锛屾棤娉曟帴鏀�");
+        }
+        if (!trimToEmpty(danganhe.getJieshouRen()).isEmpty()) {
+            throw new DataException("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�");
+        }
+        return danganhe;
+    }
+
+    private Set<String> resolveDanganheIds(List<DmsDanganCundangJieshouDanganheForm> danganheXinxi)
+            throws DataException {
+        if (danganheXinxi == null || danganheXinxi.isEmpty()) {
+            throw new DataException("妗f鐩掍俊鎭�(danganhe_xinxi)涓嶈兘涓虹┖");
+        }
+        Set<String> ids = new LinkedHashSet<>();
+        for (DmsDanganCundangJieshouDanganheForm danganhe : danganheXinxi) {
+            if (danganhe == null) {
+                throw new DataException("妗f鐩掍俊鎭腑涓嶈兘鍖呭惈绌鸿褰�");
+            }
+            String id = trimToEmpty(danganhe.getId());
+            String fId = trimToEmpty(danganhe.getFId());
+            if (id.isEmpty() && fId.isEmpty()) {
+                throw new DataException("妗f鐩掕褰曠殑id鎴杅_id涓嶈兘涓虹┖");
+            }
+            if (!id.isEmpty() && !fId.isEmpty() && !id.equals(fId)) {
+                throw new DataException("妗f鐩掕褰曠殑id涓巉_id涓嶄竴鑷�");
+            }
+            ids.add(id.isEmpty() ? fId : id);
+        }
+        if (ids.size() != danganheXinxi.size()) {
+            throw new DataException("妗f鐩掍俊鎭腑涓嶈兘鍖呭惈閲嶅璁板綍");
+        }
+        return ids;
+    }
+
+    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