Browse Source

chore: auto bump version and changelog [skip ci]

iwt 2 months ago
parent
commit
a3a1289c59

+ 192 - 0
cfc-backend/src/test/java/com/etotem/cfc/service/MembershipPaySwitchTest.java

@@ -0,0 +1,192 @@
+package com.etotem.cfc.service;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
+
+import com.etotem.cfc.dto.VirtualPayParamsDTO;
+import com.etotem.cfc.entity.MembershipLevel;
+import com.etotem.cfc.entity.PaymentOrder;
+import com.etotem.cfc.mapper.*;
+import com.etotem.cfc.entity.Family;
+import com.etotem.cfc.entity.User;
+
+@MockitoSettings(strictness = Strictness.LENIENT)
+@ExtendWith(MockitoExtension.class)
+class MembershipPaySwitchTest {
+
+    @InjectMocks
+    private MembershipService membershipService;
+
+    @Mock private MembershipLevelMapper levelMapper;
+    @Mock private FamilyMembershipMapper membershipMapper;
+    @Mock private FamilyMapper familyMapper;
+    @Mock private UserMapper userMapper;
+    @Mock private PaymentOrderMapper paymentOrderMapper;
+    @Mock private CommissionService commissionService;
+    @Mock private SysConfigService sysConfigService;
+    @Mock private MemberUpgradeRecordMapper memberUpgradeRecordMapper;
+    @Mock private MembershipBenefitsMapper benefitsMapper;
+    @Mock private CouponService couponService;
+    @Mock private TrialMembershipMapper trialMembershipMapper;
+    @Mock private VirtualGoodsConfigService virtualGoodsConfigService;
+    @Mock private VirtualPayService virtualPayService;
+    @Mock private PaymentService paymentService;
+
+    // --- 虚拟支付开启(默认) ---
+
+    @Test
+    void createOrderWithPayType_virtualEnabled_returnsVirtualPayType() {
+        when(sysConfigService.getValue("member_pay_virtual_enabled")).thenReturn("1");
+        when(sysConfigService.getValue("member_fee_family")).thenReturn("131400");
+        when(levelMapper.selectOne(any())).thenReturn(buildLevel("FAMILY", 131400, null, null));
+        when(paymentOrderMapper.selectCount(any())).thenReturn(0L);
+        when(couponService.apply(anyLong(), anyLong(), anyString(), anyInt())).thenReturn(null);
+        when(paymentOrderMapper.insert(any())).thenReturn(1);
+
+        VirtualPayParamsDTO mockDto = new VirtualPayParamsDTO();
+        mockDto.setOrderInfo(new HashMap<>());
+        mockDto.setSign("mock-sign");
+        mockDto.setSignature("mock-sig");
+        when(virtualPayService.generateMembershipPayParams(anyString(), anyString())).thenReturn(mockDto);
+
+        User user = new User();
+        user.setFamilyId(1L);
+        when(userMapper.selectById(1L)).thenReturn(user);
+
+        Map<String, Object> result = membershipService.createOrderWithPayType(
+                1L, 1L, "FAMILY", "pay", "yearly", null, "mockSessionKey", null);
+
+        assertNotNull(result);
+        assertEquals("virtual", result.get("payType"));
+        assertEquals("ORD", result.get("orderNo") != null ? result.get("orderNo").toString().substring(0, 3) : "");
+        assertNotNull(result.get("orderInfo"));
+        assertNotNull(result.get("sign"));
+    }
+
+    // --- 虚拟支付关闭 ---
+
+    @Test
+    void createOrderWithPayType_virtualDisabled_returnsWechatPayType() {
+        when(sysConfigService.getValue("member_pay_virtual_enabled")).thenReturn("0");
+        when(sysConfigService.getValue("member_fee_family")).thenReturn("131400");
+        when(levelMapper.selectOne(any())).thenReturn(buildLevel("FAMILY", 131400, null, null));
+        when(paymentOrderMapper.selectCount(any())).thenReturn(0L);
+        when(couponService.apply(anyLong(), anyLong(), anyString(), anyInt())).thenReturn(null);
+        when(paymentOrderMapper.insert(any())).thenReturn(1);
+
+        Map<String, Object> mockWechatParams = new HashMap<>();
+        mockWechatParams.put("appId", "wx5ba8038ef16fb245");
+        mockWechatParams.put("timeStamp", "1724900000");
+        mockWechatParams.put("package", "prepay_id=wx_mock");
+        when(paymentService.createWechatPrepay(anyString(), anyString(), anyInt(), anyString()))
+                .thenReturn(mockWechatParams);
+
+        User user = new User();
+        user.setFamilyId(1L);
+        when(userMapper.selectById(1L)).thenReturn(user);
+
+        Map<String, Object> result = membershipService.createOrderWithPayType(
+                1L, 1L, "FAMILY", "pay", "yearly", null, "mockSessionKey", "mockOpenid");
+
+        assertNotNull(result);
+        assertEquals("wechat", result.get("payType"));
+        assertNotNull(result.get("wechatPayParams"));
+    }
+
+    @Test
+    void createOrderWithPayType_virtualDisabled_noSplit() {
+        when(sysConfigService.getValue("member_pay_virtual_enabled")).thenReturn("0");
+        when(sysConfigService.getValue("member_fee_family")).thenReturn("131400");
+        when(levelMapper.selectOne(any())).thenReturn(buildLevel("FAMILY", 131400, null, null));
+        when(paymentOrderMapper.selectCount(any())).thenReturn(0L);
+        when(couponService.apply(anyLong(), anyLong(), anyString(), anyInt())).thenReturn(null);
+        when(paymentOrderMapper.insert(any())).thenReturn(1);
+
+        Map<String, Object> mockWechatParams = new HashMap<>();
+        mockWechatParams.put("package", "prepay_id=wx_mock");
+        when(paymentService.createWechatPrepay(anyString(), anyString(), anyInt(), anyString()))
+                .thenReturn(mockWechatParams);
+
+        User user = new User();
+        user.setFamilyId(1L);
+        when(userMapper.selectById(1L)).thenReturn(user);
+
+        Map<String, Object> result = membershipService.createOrderWithPayType(
+                1L, 1L, "FAMILY", "pay", "yearly", null, "mockSessionKey", "mockOpenid");
+
+        assertNotNull(result);
+        assertEquals("wechat", result.get("payType"));
+        assertNull(result.get("groupNo"));
+        assertEquals(1, result.get("totalPeriods"));
+    }
+
+    // --- trial 路径 ---
+
+    @Test
+    void createOrderWithPayType_trial_returnsNone() {
+        when(sysConfigService.getValue("member_pay_virtual_enabled")).thenReturn("1");
+        when(sysConfigService.getValue("member_fee_family")).thenReturn("131400");
+        when(levelMapper.selectOne(any())).thenReturn(buildLevel("FAMILY", 131400, null, null));
+        when(paymentOrderMapper.selectCount(any())).thenReturn(0L);
+        when(paymentOrderMapper.insert(any())).thenReturn(1);
+
+        User user = new User();
+        user.setFamilyId(1L);
+        when(userMapper.selectById(1L)).thenReturn(user);
+
+        Family family = new Family();
+        family.setId(1L);
+        when(familyMapper.selectById(1L)).thenReturn(family);
+
+        Map<String, Object> result = membershipService.createOrderWithPayType(
+                1L, 1L, "FAMILY", "trial", null, null, "mockSessionKey", null);
+
+        assertNotNull(result);
+        assertEquals("none", result.get("payType"));
+    }
+
+    // --- 道具未配置 ---
+
+    @Test
+    void createOrderWithPayType_virtualEnabled_configMissing_returnsNull() {
+        when(sysConfigService.getValue("member_pay_virtual_enabled")).thenReturn("1");
+        when(sysConfigService.getValue("member_fee_family")).thenReturn("131400");
+        when(levelMapper.selectOne(any())).thenReturn(buildLevel("FAMILY", 131400, null, null));
+        when(paymentOrderMapper.selectCount(any())).thenReturn(0L);
+        when(couponService.apply(anyLong(), anyLong(), anyString(), anyInt())).thenReturn(null);
+        when(paymentOrderMapper.insert(any())).thenReturn(1);
+        when(virtualPayService.generateMembershipPayParams(anyString(), anyString())).thenReturn(null);
+
+        User user = new User();
+        user.setFamilyId(1L);
+        when(userMapper.selectById(1L)).thenReturn(user);
+
+        Map<String, Object> result = membershipService.createOrderWithPayType(
+                1L, 1L, "FAMILY", "pay", "yearly", null, "mockSessionKey", null);
+
+        assertNull(result);
+    }
+
+    // --- 辅助方法 ---
+
+    private MembershipLevel buildLevel(String code, int yearly, Integer monthly, Integer quarterly) {
+        MembershipLevel level = new MembershipLevel();
+        level.setLevelCode(code);
+        level.setPriceYearly(yearly);
+        level.setPriceMonthly(monthly);
+        level.setPriceQuarterly(quarterly);
+        return level;
+    }
+}

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-f0641c8a35b4bf5b9c4897e649428ceff386b198
+8f70508fa5c630306366ac40ed01ab534c465c69

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1244",
+  "version": "1.0.1245",
   "private": true,
   "scripts": {
     "dev": "vue-cli-service serve",

+ 16 - 0
cfc-web/public/CHANGELOG-v1.0.md

@@ -4,6 +4,22 @@
 
 ---
 
+## v1.0.1245 (2026-08-29)
+
+### Bug 修复
+- Native支付关联买家userId + 恢复公告列表接口
+
+### 其他
+- - NoticeController: 恢复 /api/notices/list 接口(原410废弃)
+- 
+
+### 新功能
+- 数字能量计算器 NumSoulCalculator + 单元测试
+- 先天画像Mapper和DTO
+- 先天画像3个实体类(来源权重/报告缓存/数字能量配置)
+- 迁移270-272 创建先天画像三张新表(来源权重/报告缓存/数字能量配置)
+
+
 ## v1.0.1244 (2026-08-29)
 
 ### Bug 修复

+ 17 - 1
cfc-web/public/CHANGELOG.md

@@ -1,6 +1,6 @@
 # 更新日志
 
-> 当前版本: v1.0.1244
+> 当前版本: v1.0.1245
 
 ## 历史版本
 
@@ -8,6 +8,22 @@
 
 ---
 
+## v1.0.1245 (2026-08-29)
+
+### Bug 修复
+- Native支付关联买家userId + 恢复公告列表接口
+
+### 其他
+- - NoticeController: 恢复 /api/notices/list 接口(原410废弃)
+- 
+
+### 新功能
+- 数字能量计算器 NumSoulCalculator + 单元测试
+- 先天画像Mapper和DTO
+- 先天画像3个实体类(来源权重/报告缓存/数字能量配置)
+- 迁移270-272 创建先天画像三张新表(来源权重/报告缓存/数字能量配置)
+
+
 ## v1.0.1244 (2026-08-29)
 
 ### Bug 修复