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/test/java/jnpf/dmsService/DmsDanganCundangJieshouServiceTest.java |  201 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 201 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganCundangJieshouServiceTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganCundangJieshouServiceTest.java
new file mode 100644
index 0000000..0ec2108
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganCundangJieshouServiceTest.java
@@ -0,0 +1,201 @@
+package jnpf.dmsService;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+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.impl.DmsDanganCundangJieshouServiceImpl;
+import jnpf.exception.DataException;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.mockito.ArgumentCaptor;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.apache.ibatis.session.Configuration;
+
+import java.util.Arrays;
+import java.util.Date;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DmsDanganCundangJieshouServiceTest {
+
+    @BeforeEach
+    void setUp() {
+        if (TableInfoHelper.getTableInfo(DmsDanganCundangShenqingDanganheEntity.class) == null) {
+            TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""),
+                    DmsDanganCundangShenqingDanganheEntity.class);
+        }
+        if (TableInfoHelper.getTableInfo(DmsDanganCundangShenqingEntity.class) == null) {
+            TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""),
+                    DmsDanganCundangShenqingEntity.class);
+        }
+    }
+
+    @Test
+    void receivesEveryRequestedDanganheInOneConditionalUpdate() throws Exception {
+        DmsDanganCundangShenqingDanganheMapper mapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+        when(mapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null), danganhe("box-2", "")));
+        when(mapper.update(isNull(), any())).thenReturn(2);
+        DmsDanganCundangJieshouService service = service(mapper);
+
+        service.jieshou(form(item("box-1", "box-1"), item("box-2", "box-2")));
+
+        ArgumentCaptor<Wrapper<DmsDanganCundangShenqingDanganheEntity>> captor = ArgumentCaptor.forClass(Wrapper.class);
+        verify(mapper).update(isNull(), captor.capture());
+        com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?> update =
+                (com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?>) captor.getValue();
+        String sqlSet = update.getSqlSet();
+        assertTrue(sqlSet.contains("jieshou_ren"));
+        assertTrue(sqlSet.contains("yijiao_ren"));
+        assertTrue(sqlSet.contains("biz_sign"));
+        assertTrue(sqlSet.contains("biz_review_sign"));
+        assertTrue(sqlSet.contains("jieshou_riqi"));
+        assertTrue(update.getParamNameValuePairs().containsValue("receiver-1"));
+        assertTrue(update.getParamNameValuePairs().containsValue("reviewer-1"));
+        assertTrue(update.getParamNameValuePairs().containsValue("sign-1"));
+        assertTrue(update.getParamNameValuePairs().containsValue("review-sign-1"));
+        assertNotNull(update.getParamNameValuePairs().values().stream()
+                .filter(Date.class::isInstance)
+                .findFirst()
+                .orElse(null));
+    }
+
+    @Test
+    void rejectsWhenAnyDanganheHasAlreadyBeenReceived() {
+        DmsDanganCundangShenqingDanganheMapper mapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+        when(mapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null), danganhe("box-2", "receiver-0")));
+        DmsDanganCundangJieshouService service = service(mapper);
+
+        DataException error = assertThrows(DataException.class,
+                () -> service.jieshou(form(item("box-1", "box-1"), item("box-2", "box-2"))));
+
+        assertEquals("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�", error.getMessage());
+        verify(mapper, never()).update(any(), any());
+    }
+
+    @Test
+    void rollsBackWhenAnotherRequestReceivesARecordBeforeTheUpdate() {
+        DmsDanganCundangShenqingDanganheMapper mapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+        when(mapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null), danganhe("box-2", null)));
+        when(mapper.update(isNull(), any())).thenReturn(1);
+        DmsDanganCundangJieshouService service = service(mapper);
+
+        DataException error = assertThrows(DataException.class,
+                () -> service.jieshou(form(item("box-1", "box-1"), item("box-2", "box-2"))));
+
+        assertEquals("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�", error.getMessage());
+    }
+
+    @Test
+    void checkSucceedsForAnApprovedUnreceivedDanganhe() throws Exception {
+        DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+        DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class);
+        when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null, "shenqing-1")));
+        when(shenqingMapper.selectOne(any())).thenReturn(shenqing("shenqing-1", 2));
+        DmsDanganCundangJieshouService service = new DmsDanganCundangJieshouServiceImpl(
+                danganheMapper, shenqingMapper);
+
+        DmsDanganCundangShenqingDanganheEntity result = service.check("box-1");
+
+        assertEquals("box-1", result.getId());
+        verify(danganheMapper).selectList(any());
+        verify(shenqingMapper).selectOne(any());
+    }
+
+    @Test
+    void checkRejectsUnknownDanganheBeforeCheckingApplication() {
+        DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+        DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class);
+        when(danganheMapper.selectList(any())).thenReturn(Arrays.asList());
+        DmsDanganCundangJieshouService service = new DmsDanganCundangJieshouServiceImpl(
+                danganheMapper, shenqingMapper);
+
+        DataException error = assertThrows(DataException.class, () -> service.check("missing-box"));
+
+        assertEquals("鏈壘鍒板搴旂殑妗f鐩掕褰�", error.getMessage());
+        verify(shenqingMapper, never()).selectOne(any());
+    }
+
+    @Test
+    void checkRejectsApplicationThatHasNotPassed() {
+        DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+        DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class);
+        when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null, "shenqing-1")));
+        when(shenqingMapper.selectOne(any())).thenReturn(shenqing("shenqing-1", 1));
+        DmsDanganCundangJieshouService service = new DmsDanganCundangJieshouServiceImpl(
+                danganheMapper, shenqingMapper);
+
+        DataException error = assertThrows(DataException.class, () -> service.check("box-1"));
+
+        assertEquals("妗f瀛樻。鐢宠灏氭湭瀹℃壒閫氳繃锛屾棤娉曟帴鏀�", error.getMessage());
+    }
+
+    @Test
+    void checkRejectsDanganheThatHasAlreadyBeenReceived() {
+        DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+        DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class);
+        when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", "receiver-0", "shenqing-1")));
+        when(shenqingMapper.selectOne(any())).thenReturn(shenqing("shenqing-1", 2));
+        DmsDanganCundangJieshouService service = new DmsDanganCundangJieshouServiceImpl(
+                danganheMapper, shenqingMapper);
+
+        DataException error = assertThrows(DataException.class, () -> service.check("box-1"));
+
+        assertEquals("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�", error.getMessage());
+    }
+
+    private DmsDanganCundangJieshouService service(DmsDanganCundangShenqingDanganheMapper danganheMapper) {
+        return new DmsDanganCundangJieshouServiceImpl(danganheMapper,
+                mock(DmsDanganCundangShenqingMapper.class));
+    }
+
+    private DmsDanganCundangJieshouForm form(DmsDanganCundangJieshouDanganheForm... danganhe) {
+        DmsDanganCundangJieshouForm form = new DmsDanganCundangJieshouForm();
+        form.setDanganheXinxi(Arrays.asList(danganhe));
+        form.setBizUserId("receiver-1");
+        form.setBizReviewUser("reviewer-1");
+        form.setBizSign("sign-1");
+        form.setBizReviewSign("review-sign-1");
+        return form;
+    }
+
+    private DmsDanganCundangJieshouDanganheForm item(String id, String fId) {
+        DmsDanganCundangJieshouDanganheForm item = new DmsDanganCundangJieshouDanganheForm();
+        item.setId(id);
+        item.setFId(fId);
+        return item;
+    }
+
+    private DmsDanganCundangShenqingDanganheEntity danganhe(String id, String jieshouRen) {
+        return danganhe(id, jieshouRen, null);
+    }
+
+    private DmsDanganCundangShenqingDanganheEntity danganhe(String id, String jieshouRen, String foreignId) {
+        DmsDanganCundangShenqingDanganheEntity result = new DmsDanganCundangShenqingDanganheEntity();
+        result.setId(id);
+        result.setJieshouRen(jieshouRen);
+        result.setForeignId(foreignId);
+        result.setJieshouRiqi(new Date());
+        return result;
+    }
+
+    private DmsDanganCundangShenqingEntity shenqing(String id, Integer flowState) {
+        DmsDanganCundangShenqingEntity result = new DmsDanganCundangShenqingEntity();
+        result.setId(id);
+        result.setFlowState(flowState);
+        return result;
+    }
+}

--
Gitblit v1.8.0