Просмотр исходного кода

chore: auto bump version and changelog [skip ci]

iwt 2 месяцев назад
Родитель
Сommit
27548ee7d8

+ 0 - 193
cfc-backend/src/test/java/com/etotem/cfc/integration/FamilyMembersControllerTest.java

@@ -1,193 +0,0 @@
-package com.etotem.cfc.controller.family;
-
-import com.etotem.cfc.common.Result;
-import com.etotem.cfc.dto.AddFamilyMemberDTO;
-import com.etotem.cfc.dto.FamilyMemberVO;
-import com.etotem.cfc.dto.SwitchMemberVO;
-import com.etotem.cfc.service.FamilyMemberService;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-/**
- * 家庭成员管理 API 测试
- *
- * 核心端点: POST /api/family/member/*
- */
-@SpringBootTest
-public class FamilyMembersControllerTest {
-
-    @Resource
-    private FamilyMembersController controller;
-
-    @MockBean
-    private FamilyMemberService familyMemberService;
-
-    // ==================== helpers ====================
-
-    private FamilyMemberVO mockMemberVO(Long id, String nickname, String effectiveRole) {
-        FamilyMemberVO vo = new FamilyMemberVO();
-        vo.setId(id);
-        vo.setNickname(nickname);
-        vo.setEffectiveRole(effectiveRole);
-        return vo;
-    }
-
-    private AddFamilyMemberDTO mockAddDTO(String nickname, String generationLevel) {
-        AddFamilyMemberDTO dto = new AddFamilyMemberDTO();
-        dto.setNickname(nickname);
-        dto.setGenerationLevel(generationLevel);
-        dto.setRelativeMemberId(1L);
-        return dto;
-    }
-
-    // ==================== addMember ====================
-
-    @Test
-    public void addMember_Success() {
-        Long userId = 1L;
-        AddFamilyMemberDTO dto = mockAddDTO("小明", "child");
-
-        when(familyMemberService.addMember(eq(userId), any(AddFamilyMemberDTO.class)))
-            .thenReturn(mockMemberVO(100L, "小明", "child"));
-
-        Result<FamilyMemberVO> result = controller.addMember(dto, userId);
-        assertEquals(200, result.getCode());
-        assertEquals("小明", result.getData().getNickname());
-    }
-
-    @Test
-    public void addMember_NotLoggedIn() {
-        Long userId = null;
-        AddFamilyMemberDTO dto = mockAddDTO("小明", "child");
-
-        Result<FamilyMemberVO> result = controller.addMember(dto, userId);
-        assertEquals(500, result.getCode());
-        assertTrue(result.getMessage().contains("请先登录"));
-    }
-
-    @Test
-    public void addMember_IllegalArgument() {
-        Long userId = 1L;
-        AddFamilyMemberDTO dto = mockAddDTO("", "");
-
-        when(familyMemberService.addMember(eq(userId), any(AddFamilyMemberDTO.class)))
-            .thenThrow(new IllegalArgumentException("辈分等级不能为空"));
-
-        Result<FamilyMemberVO> result = controller.addMember(dto, userId);
-        assertEquals(500, result.getCode());
-        assertTrue(result.getMessage().contains("辈分等级不能为空"));
-    }
-
-    // ==================== listMembers ====================
-
-    @Test
-    public void listMembers_Success() {
-        Long userId = 1L;
-        List<FamilyMemberVO> members = Arrays.asList(
-            mockMemberVO(1L, "爸爸", "parent"),
-            mockMemberVO(2L, "妈妈", "parent")
-        );
-
-        when(familyMemberService.listMembers(userId)).thenReturn(members);
-
-        Result<List<FamilyMemberVO>> result = controller.listMembers(userId);
-        assertEquals(200, result.getCode());
-        assertEquals(2, result.getData().size());
-    }
-
-    @Test
-    public void listMembers_NotLoggedIn() {
-        Long userId = null;
-        Result<List<FamilyMemberVO>> result = controller.listMembers(userId);
-        assertEquals(500, result.getCode());
-    }
-
-    // ==================== switchToMember ====================
-
-    @Test
-    public void switchToMember_Success() {
-        Long userId = 1L;
-        Map<String, Object> body = new HashMap<>();
-        body.put("memberId", 2L);
-
-        SwitchMemberVO vo = new SwitchMemberVO();
-        vo.setMemberId(2L);
-        vo.setNickname("小明");
-        when(familyMemberService.switchToMember(userId, 2L)).thenReturn(vo);
-
-        Result<SwitchMemberVO> result = controller.switchToMember(body, userId);
-        assertEquals(200, result.getCode());
-        assertEquals(2L, result.getData().getMemberId().longValue());
-    }
-
-    @Test
-    public void switchToMember_MissingMemberId() {
-        Long userId = 1L;
-        Map<String, Object> body = new HashMap<>();
-
-        Result<SwitchMemberVO> result = controller.switchToMember(body, userId);
-        assertEquals(500, result.getCode());
-        assertTrue(result.getMessage().contains("缺少成员ID"));
-    }
-
-    // ==================== kickMember ====================
-
-    @Test
-    public void kickMember_Success() {
-        Long userId = 1L;
-        Map<String, Long> body = new HashMap<>();
-        body.put("memberId", 3L);
-
-        doNothing().when(familyMemberService).kickMember(userId, 3L);
-
-        Result<String> result = controller.kickMember(body, userId);
-        assertEquals(200, result.getCode());
-        assertTrue(result.getData().contains("踢出成功"));
-    }
-
-    @Test
-    public void kickMember_MissingMemberId() {
-        Long userId = 1L;
-        Map<String, Long> body = new HashMap<>();
-
-        Result<String> result = controller.kickMember(body, userId);
-        assertEquals(500, result.getCode());
-        assertTrue(result.getMessage().contains("缺少成员ID"));
-    }
-
-    // ==================== updateMember ====================
-
-    @Test
-    public void updateMember_Success() {
-        Long userId = 1L;
-        Map<String, Object> body = new HashMap<>();
-        body.put("memberId", 5L);
-        body.put("nickname", "新名字");
-
-        when(familyMemberService.updateMember(eq(userId), eq(5L), any(AddFamilyMemberDTO.class)))
-            .thenReturn(mockMemberVO(5L, "新名字", "parent"));
-
-        Result<FamilyMemberVO> result = controller.updateMember(body, userId);
-        assertEquals(200, result.getCode());
-        assertEquals("新名字", result.getData().getNickname());
-    }
-
-    @Test
-    public void updateMember_MissingMemberId() {
-        Long userId = 1L;
-        Map<String, Object> body = new HashMap<>();
-
-        Result<FamilyMemberVO> result = controller.updateMember(body, userId);
-        assertEquals(500, result.getCode());
-        assertTrue(result.getMessage().contains("缺少成员ID"));
-    }
-
-}

+ 0 - 297
cfc-backend/src/test/java/com/etotem/cfc/integration/ProductPurchaseFlowTest.java

@@ -1,297 +0,0 @@
-package com.etotem.cfc.integration;
-
-import com.etotem.cfc.common.Result;
-import com.etotem.cfc.controller.product.ProductOrderController;
-import com.etotem.cfc.dto.CreateProductOrderDTO;
-import com.etotem.cfc.dto.ProductOrderDTO;
-import com.etotem.cfc.service.ProductOrderService;
-import com.etotem.cfc.service.PaymentService;
-import org.junit.jupiter.api.*;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-/**
- * ================================================================
- * 场景:商品购买支付全流程
- * ================================================================
- * 用户故事:作为家长,我希望在商城购买孩子的用品,
- *           完成支付后等待商品配送到家。
- *
- * 流程步骤:
- *   1. 家长浏览商品列表,选择商品
- *   2. 家长创建商品订单
- *   3. 家长选择支付方式并完成支付
- *   4. 服务商发货,填写物流信息
- *   5. 家长确认收货,订单完成
- *   6. 如有问题,家长申请退款
- *
- * 关键里程碑:
- *   - [Milestone-1] 订单创建成功,获得订单号
- *   - [Milestone-2] 支付成功,订单状态变更为"已支付"
- *   - [Milestone-3] 服务商发货,订单状态变更为"已发货"
- *   - [Milestone-4] 家长确认收货,订单完成
- *   - [Milestone-5] 退款申请提交成功
- * ================================================================
- */
-@SpringBootTest
-public class ProductPurchaseFlowTest {
-
-    @Resource
-    private ProductOrderController orderController;
-
-    @MockBean
-    private ProductOrderService orderService;
-
-    @MockBean
-    private PaymentService paymentService;
-
-    // ========== 测试数据 ==========
-
-    private static final Long USER_ID = 1001L;
-    private static final String ORDER_NO = "PRD20260628001";
-    private static final String TRACKING_NO = "SF1234567890";
-    private static final String EXPRESS_COMPANY = "顺丰速运";
-
-    // ========== 场景1:创建商品订单 ==========
-
-    /**
-     * 场景:家长选购商品后创建订单
-     * 角色:家长
-     * 触发条件:点击"立即购买"或"加入购物车结算"
-     */
-    @Test
-    @DisplayName("[场景1] 创建商品订单 - 期望订单创建成功")
-    void parentCreatesOrder_Success() {
-        // === Given:家长选择了商品 ===
-        CreateProductOrderDTO dto = new CreateProductOrderDTO();
-        dto.setProductId(1L);
-        dto.setQuantity(2);
-
-        ProductOrderDTO mockOrder = createProductOrder(ORDER_NO, "pending");
-        when(orderService.create(any(CreateProductOrderDTO.class), eq(USER_ID)))
-                .thenReturn(Result.success(mockOrder));
-
-        // === When:提交订单创建 ===
-        Result<ProductOrderDTO> result = orderController.create(dto, USER_ID);
-
-        // === Then:Milestone-1 - 订单创建成功 ===
-        assertEquals(200, result.getCode());
-        assertNotNull(result.getData());
-        assertEquals(ORDER_NO, result.getData().getOrderNo());
-        assertEquals("pending", result.getData().getStatus());
-        verify(orderService).create(any(CreateProductOrderDTO.class), eq(USER_ID));
-    }
-
-    // ========== 场景2:支付订单 ==========
-
-    /**
-     * 场景:家长选择微信支付完成订单支付
-     * 角色:家长
-     * 触发条件:点击"去支付"并选择支付方式
-     */
-    @Test
-    @DisplayName("[场景2] 支付商品订单 - 期望支付成功")
-    void parentPaysOrder_Success() {
-        // === Given:存在待支付订单 ===
-        Map<String, Object> payRequest = new HashMap<>();
-        payRequest.put("orderNo", ORDER_NO);
-
-        Map<String, Object> mockPayResult = new HashMap<>();
-        mockPayResult.put("orderNo", ORDER_NO);
-        mockPayResult.put("payTime", new Date());
-        mockPayResult.put("status", "paid");
-
-        when(orderService.pay(eq(ORDER_NO), eq(USER_ID))).thenReturn(Result.success(mockPayResult));
-
-        // === When:家长完成支付 ===
-        Result<Map<String, Object>> result = orderController.pay(payRequest, USER_ID);
-
-        // === Then:Milestone-2 - 支付成功 ===
-        assertEquals(200, result.getCode());
-        assertEquals("paid", result.getData().get("status"));
-        verify(orderService).pay(eq(ORDER_NO), eq(USER_ID));
-    }
-
-    // ========== 场景3:服务商发货 ==========
-
-    /**
-     * 场景:服务商收到订单后发货,填写物流信息
-     * 角色:服务商/供应商
-     * 触发条件:商家点击"发货"并填写物流单号
-     */
-    @Test
-    @DisplayName("[场景3] 服务商发货 - 期望订单状态更新为已发货")
-    void vendorShipsOrder_Success() {
-        // === Given:商家需要发货 ===
-        Map<String, Object> shipRequest = new HashMap<>();
-        shipRequest.put("orderNo", ORDER_NO);
-        shipRequest.put("trackingNumber", TRACKING_NO);
-        shipRequest.put("expressCompany", EXPRESS_COMPANY);
-
-        when(orderService.ship(eq(ORDER_NO), eq(TRACKING_NO), eq(EXPRESS_COMPANY)))
-                .thenReturn(Result.success("发货成功"));
-
-        // === When:服务商发货 ===
-        Result<String> result = orderController.ship(shipRequest);
-
-        // === Then:Milestone-3 - 发货成功 ===
-        assertEquals(200, result.getCode());
-        assertEquals("发货成功", result.getData());
-        verify(orderService).ship(eq(ORDER_NO), eq(TRACKING_NO), eq(EXPRESS_COMPANY));
-    }
-
-    // ========== 场景4:家长确认收货 ==========
-
-    /**
-     * 场景:家长收到商品后确认收货
-     * 角色:家长
-     * 触发条件:确认收到商品无误
-     */
-    @Test
-    @DisplayName("[场景4] 家长确认收货 - 期望订单完成")
-    void parentConfirmsReceive_Success() {
-        // === Given:家长已收到商品 ===
-        Map<String, Object> confirmRequest = new HashMap<>();
-        confirmRequest.put("orderNo", ORDER_NO);
-
-        when(orderService.confirmReceive(eq(ORDER_NO), eq(USER_ID)))
-                .thenReturn(Result.success("确认收货成功"));
-
-        // === When:家长点击"确认收货" ===
-        Result<String> result = orderController.confirm(confirmRequest, USER_ID);
-
-        // === Then:Milestone-4 - 订单完成 ===
-        assertEquals(200, result.getCode());
-        assertEquals("确认收货成功", result.getData());
-        verify(orderService).confirmReceive(eq(ORDER_NO), eq(USER_ID));
-    }
-
-    // ========== 场景5:申请退款 ==========
-
-    /**
-     * 场景:家长发现问题,申请退款
-     * 角色:家长
-     * 触发条件:点击"申请退款"并填写原因
-     */
-    @Test
-    @DisplayName("[场景5] 申请退款 - 期望退款申请提交成功")
-    void parentAppliesRefund_Success() {
-        // === Given:需要申请退款 ===
-        Map<String, Object> refundRequest = new HashMap<>();
-        refundRequest.put("orderNo", ORDER_NO);
-        refundRequest.put("reason", "商品与描述不符");
-
-        when(orderService.applyRefund(eq(ORDER_NO), eq(USER_ID), eq("商品与描述不符")))
-                .thenReturn(Result.success("退款申请已提交"));
-
-        // === When:提交退款申请 ===
-        Result<String> result = orderController.applyRefund(refundRequest, USER_ID);
-
-        // === Then:Milestone-5 - 退款申请成功 ===
-        assertEquals(200, result.getCode());
-        assertEquals("退款申请已提交", result.getData());
-        verify(orderService).applyRefund(eq(ORDER_NO), eq(USER_ID), eq("商品与描述不符"));
-    }
-
-    // ========== 场景6:取消未支付订单 ==========
-
-    /**
-     * 场景:家长改变主意,取消未支付的订单
-     * 角色:家长
-     * 触发条件:点击"取消订单"
-     */
-    @Test
-    @DisplayName("[场景6] 取消未支付订单 - 期望订单关闭")
-    void parentCancelsOrder_Success() {
-        // === Given:订单未支付 ===
-        Map<String, Object> cancelRequest = new HashMap<>();
-        cancelRequest.put("orderNo", ORDER_NO);
-
-        when(orderService.cancel(eq(ORDER_NO), eq(USER_ID)))
-                .thenReturn(Result.success("订单已取消"));
-
-        // === When:取消订单 ===
-        Result<String> result = orderController.cancel(cancelRequest, USER_ID);
-
-        // === Then:订单关闭 ===
-        assertEquals(200, result.getCode());
-        assertEquals("订单已取消", result.getData());
-    }
-
-    // ========== 场景7:查看我的订单列表 ==========
-
-    /**
-     * 场景:家长查看自己的订单列表
-     * 角色:家长
-     * 触发条件:进入"我的订单"页面
-     */
-    @Test
-    @DisplayName("[场景7] 查看我的订单列表 - 期望返回订单列表")
-    void parentViewsMyOrders_Success() {
-        // === Given:用户有多个订单 ===
-        Map<String, Object> listRequest = new HashMap<>();
-        listRequest.put("status", "all");
-
-        List<ProductOrderDTO> mockOrders = Arrays.asList(
-                createProductOrder("ORD001", "completed"),
-                createProductOrder("ORD002", "paid"),
-                createProductOrder("ORD003", "pending")
-        );
-
-        when(orderService.myOrders(eq(USER_ID), eq("all"))).thenReturn(Result.success(mockOrders));
-
-        // === When:请求订单列表 ===
-        Result<List<ProductOrderDTO>> result = orderController.myOrders(listRequest, USER_ID);
-
-        // === Then:返回订单列表 ===
-        assertEquals(200, result.getCode());
-        assertNotNull(result.getData());
-        assertEquals(3, result.getData().size());
-    }
-
-    // ========== 场景8:查看订单详情 ==========
-
-    /**
-     * 场景:家长查看具体订单的详细信息
-     * 角色:家长
-     * 触发条件:点击某个订单查看详情
-     */
-    @Test
-    @DisplayName("[场景8] 查看订单详情 - 期望返回完整订单信息")
-    void parentViewsOrderDetail_Success() {
-        // === Given:订单存在 ===
-        Map<String, Object> detailRequest = new HashMap<>();
-        detailRequest.put("orderNo", ORDER_NO);
-
-        ProductOrderDTO mockDetail = createProductOrder(ORDER_NO, "paid");
-
-        when(orderService.detail(eq(ORDER_NO), eq(USER_ID))).thenReturn(Result.success(mockDetail));
-
-        // === When:请求订单详情 ===
-        Result<ProductOrderDTO> result = orderController.detail(detailRequest, USER_ID);
-
-        // === Then:返回完整订单信息 ===
-        assertEquals(200, result.getCode());
-        assertNotNull(result.getData());
-        assertEquals(ORDER_NO, result.getData().getOrderNo());
-    }
-
-    // ========== Helper Methods ==========
-
-    private ProductOrderDTO createProductOrder(String orderNo, String status) {
-        ProductOrderDTO order = new ProductOrderDTO();
-        order.setOrderNo(orderNo);
-        order.setStatus(status);
-        order.setTotalAmount(29900);
-        order.setProductName("儿童科学实验套装");
-        order.setQuantity(1);
-        return order;
-    }
-}

+ 0 - 121
cfc-backend/src/test/java/com/etotem/cfc/integration/service/FamilyMemberServiceCouponTest.java

@@ -1,121 +0,0 @@
-package com.etotem.cfc.service;
-
-import com.etotem.cfc.dto.AddFamilyMemberDTO;
-import com.etotem.cfc.entity.Family;
-import com.etotem.cfc.entity.FamilyMember;
-import com.etotem.cfc.entity.User;
-import com.etotem.cfc.mapper.FamilyMapper;
-import com.etotem.cfc.mapper.FamilyMemberLogMapper;
-import com.etotem.cfc.mapper.FamilyMemberMapper;
-import com.etotem.cfc.mapper.UserMapper;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-/**
- * FamilyMemberService.addMember POPULATION 发券单元测试(无 SpringBootTest,避免 MySQL 连接)
- * - 成员有账号(手机号匹配):券发到成员自己账户
- * - 成员无账号:券发到家庭创建者账户
- */
-public class FamilyMemberServiceCouponTest {
-
-    @Mock
-    private FamilyMemberMapper familyMemberMapper;
-
-    @Mock
-    private UserMapper userMapper;
-
-    @Mock
-    private FamilyMapper familyMapper;
-
-    @Mock
-    private FamilyMemberLogMapper familyMemberLogMapper;
-
-    @Mock
-    private FamilyRelationshipService familyRelationshipService;
-
-    @Mock
-    private SystemConfigService systemConfigService;
-
-    @Mock
-    private CouponService couponService;
-
-    @InjectMocks
-    private FamilyMemberService familyMemberService;
-
-    @BeforeEach
-    public void setup() {
-        MockitoAnnotations.openMocks(this);
-    }
-
-    private User user(Long id, Long familyId) {
-        User u = new User();
-        u.setId(id);
-        u.setFamilyId(familyId);
-        return u;
-    }
-
-    private AddFamilyMemberDTO dto(String nickname, String phone) {
-        AddFamilyMemberDTO d = new AddFamilyMemberDTO();
-        d.setNickname(nickname);
-        d.setGenerationLevel("child");
-        d.setPhone(phone);
-        return d;
-    }
-
-    private void stubInsertBackfillsId(Long memberId) {
-        doAnswer(inv -> {
-            FamilyMember m = inv.getArgument(0);
-            m.setId(memberId);
-            return 1;
-        }).when(familyMemberMapper).insert(any(FamilyMember.class));
-    }
-
-    @Test
-    public void addMember_withMatchedUser_grantsCouponToMemberSelf() {
-        when(userMapper.selectById(1001L)).thenReturn(user(1001L, 3001L));
-        User matchedUser = user(5001L, 3001L);
-        when(userMapper.selectOne(any())).thenReturn(matchedUser);
-        stubInsertBackfillsId(2001L);
-
-        familyMemberService.addMember(1001L, dto("王小明", "13800000000"));
-
-        verify(couponService).grantPopulationCoupons(eq(5001L), eq(2001L));
-    }
-
-    @Test
-    public void addMember_withoutPhone_grantsCouponToFamilyCreator() {
-        when(userMapper.selectById(1001L)).thenReturn(user(1001L, 3001L));
-        Family family = new Family();
-        family.setId(3001L);
-        family.setCreatorId(1001L);
-        when(familyMapper.selectById(3001L)).thenReturn(family);
-        stubInsertBackfillsId(2001L);
-
-        familyMemberService.addMember(1001L, dto("王小明", null));
-
-        verify(couponService).grantPopulationCoupons(eq(1001L), eq(2001L));
-    }
-
-    @Test
-    public void addMember_returnsMemberVO() {
-        when(userMapper.selectById(1001L)).thenReturn(user(1001L, 3001L));
-        stubInsertBackfillsId(2001L);
-
-        com.etotem.cfc.dto.FamilyMemberVO vo = familyMemberService.addMember(1001L, dto("王小明", null));
-
-        assertNotNull(vo);
-        assertEquals(Long.valueOf(2001L), vo.getId());
-        assertEquals("王小明", vo.getNickname());
-    }
-}

+ 0 - 166
cfc-backend/src/test/java/com/etotem/cfc/integration/service/ProductOrderServiceTest.java

@@ -1,166 +0,0 @@
-package com.etotem.cfc.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.etotem.cfc.common.Result;
-import com.etotem.cfc.dto.ChildInfoDTO;
-import com.etotem.cfc.entity.Product;
-import com.etotem.cfc.entity.ProductOrder;
-import com.etotem.cfc.entity.User;
-import com.etotem.cfc.mapper.ProductMapper;
-import com.etotem.cfc.mapper.ProductOrderMapper;
-import com.etotem.cfc.mapper.UserMapper;
-import com.etotem.cfc.service.CommissionService;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-@SpringBootTest
-public class ProductOrderServiceTest {
-
-    @Resource
-    private ProductOrderService productOrderService;
-
-    @MockBean
-    private ProductOrderMapper orderMapper;
-
-    @MockBean
-    private ProductMapper productMapper;
-
-    @MockBean
-    private UserMapper userMapper;
-
-    @MockBean
-    private CommissionService commissionService;
-
-    @MockBean
-    private EnergyService energyService;
-
-    @MockBean
-    private UserService userService;
-
-    private ProductOrder pendingOrder(String orderNo, Long buyerId) {
-        ProductOrder order = new ProductOrder();
-        order.setId(1L);
-        order.setOrderNo(orderNo);
-        order.setBuyerId(buyerId);
-        order.setStatus("pending");
-        order.setTotalAmount(19900);
-        order.setProductId(10L);
-        order.setCreatedAt(new Date());
-        order.setUpdatedAt(new Date());
-        return order;
-    }
-
-    @Test
-    void handlePaymentSuccess_updatesOrderStatus() {
-        String orderNo = "ORDER_TEST_001";
-        String transactionId = "TXN_12345";
-        ProductOrder order = pendingOrder(orderNo, 100L);
-
-        when(orderMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(order);
-
-        Result<String> result = productOrderService.handlePaymentSuccess(orderNo, transactionId);
-
-        assertEquals(200, result.getCode());
-        assertEquals("支付成功", result.getData());
-        verify(orderMapper).updateById(order);
-        assertEquals("paid", order.getStatus());
-        assertEquals(transactionId, order.getTransactionId());
-        assertNotNull(order.getPaidAt());
-    }
-
-    @Test
-    void handlePaymentSuccess_returnsError_whenOrderNotFound() {
-        when(orderMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(null);
-
-        Result<String> result = productOrderService.handlePaymentSuccess("NON_EXISTENT", "TXN_1");
-
-        assertEquals(500, result.getCode());
-        assertEquals("订单不存在", result.getMessage());
-    }
-
-    @Test
-    void handlePaymentSuccess_skips_whenOrderNotPending() {
-        ProductOrder order = pendingOrder("ORDER_TEST_002", 100L);
-        order.setStatus("paid");
-
-        when(orderMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(order);
-
-        Result<String> result = productOrderService.handlePaymentSuccess("ORDER_TEST_002", "TXN_2");
-
-        assertEquals(200, result.getCode());
-        assertEquals("订单状态非待支付,跳过", result.getData());
-        verify(orderMapper, never()).updateById(any());
-    }
-
-    @Test
-    void handlePaymentSuccess_settlesCommission() {
-        ProductOrder order = pendingOrder("ORDER_COMMISSION_TEST", 200L);
-        when(orderMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(order);
-
-        productOrderService.handlePaymentSuccess("ORDER_COMMISSION_TEST", "TXN_3");
-
-        verify(commissionService).settle(eq(order.getId()), eq("product"),
-            eq(order.getBuyerId()), eq(order.getTotalAmount()), eq(order.getProductId()));
-    }
-
-    @Test
-    void handlePaymentSuccess_awardsEnergy_toChildUser() {
-        ProductOrder order = pendingOrder("ORDER_CHILD_TEST", 300L);
-        when(orderMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(order);
-
-        User childUser = new User();
-        childUser.setId(300L);
-        childUser.setRole("child");
-        when(userMapper.selectById(300L)).thenReturn(childUser);
-
-        productOrderService.handlePaymentSuccess("ORDER_CHILD_TEST", "TXN_4");
-
-        verify(energyService).awardEnergy(eq(300L), eq("product"),
-            eq(order.getId()), eq(order.getTotalAmount()), eq("商品购买能量奖励"), eq(30));
-    }
-
-    @Test
-    void handlePaymentSuccess_awardsEnergy_toFirstChild_ofParentUser() {
-        ProductOrder order = pendingOrder("ORDER_PARENT_TEST", 400L);
-        when(orderMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(order);
-
-        User parentUser = new User();
-        parentUser.setId(400L);
-        parentUser.setRole("parent");
-        when(userMapper.selectById(400L)).thenReturn(parentUser);
-
-        ChildInfoDTO child = new ChildInfoDTO();
-        child.setId(401L);
-        child.setNickname("孩子");
-        when(userService.getChildren(400L)).thenReturn(Collections.singletonList(child));
-
-        productOrderService.handlePaymentSuccess("ORDER_PARENT_TEST", "TXN_5");
-
-        verify(energyService).awardEnergy(eq(401L), eq("product"),
-            eq(order.getId()), eq(order.getTotalAmount()), eq("商品购买能量奖励"), eq(30));
-    }
-
-    @Test
-    void handlePaymentSuccess_noEnergyAward_whenNoChild() {
-        ProductOrder order = pendingOrder("ORDER_NO_CHILD", 500L);
-        when(orderMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(order);
-
-        User parentUser = new User();
-        parentUser.setId(500L);
-        parentUser.setRole("parent");
-        when(userMapper.selectById(500L)).thenReturn(parentUser);
-        when(userService.getChildren(500L)).thenReturn(Collections.emptyList());
-
-        productOrderService.handlePaymentSuccess("ORDER_NO_CHILD", "TXN_6");
-
-        verify(energyService, never()).awardEnergy(anyLong(), anyString(), anyLong(), anyInt(), anyString(), anyInt());
-    }
-}

+ 0 - 400
cfc-backend/src/test/java/com/etotem/cfc/integration/service/VirtualPayServiceTest.java

@@ -1,400 +0,0 @@
-package com.etotem.cfc.service;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-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 com.alibaba.fastjson.JSON;
-import com.etotem.cfc.common.HmacSignUtil;
-import com.etotem.cfc.dto.VirtualPayParamsDTO;
-import com.etotem.cfc.entity.AssessmentOrder;
-import com.etotem.cfc.entity.MemberSubscriptionOrder;
-import com.etotem.cfc.entity.PaymentOrder;
-import com.etotem.cfc.entity.VirtualGoodsConfig;
-
-@ExtendWith(MockitoExtension.class)
-class VirtualPayServiceTest {
-
-    @Mock
-    private AssessmentOrderService assessmentOrderService;
-
-    @Mock
-    private MembershipService membershipService;
-
-    @Mock
-    private MemberSubscriptionService memberSubscriptionService;
-
-    @Mock
-    private VirtualGoodsConfigService virtualGoodsConfigService;
-
-    @Mock
-    private WechatService wechatService;
-
-    @InjectMocks
-    private VirtualPayService virtualPayService;
-
-    @Test
-    void hmacSha256Hex_matchesRfc4231TestVector() {
-        // RFC 4231 Test Case 2 标准测试向量
-        String actual = HmacSignUtil.hmacSha256Hex("Jefe", "what do ya want for nothing?");
-        assertEquals("5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843", actual);
-    }
-
-    @Test
-    void generatePayParams_returnsCompleteDto() throws Exception {
-        // 纯单测环境不注入 Spring @Value,通过反射填充配置字段
-        setField("offerId", "1450607643");
-        setField("appKey", "test_app_key");
-        setField("env", 0);
-
-        VirtualGoodsConfig config = new VirtualGoodsConfig();
-        config.setProductId("offer_1001");
-
-        VirtualPayParamsDTO dto = virtualPayService.generatePayParams(
-                config, "A20260802001", 9900, "五维测评·基础版", "ASSESSMENT_PACKAGE:1", "test_session_key");
-
-        assertNotNull(dto);
-        assertNotNull(dto.getOrderInfo());
-        assertEquals("1450607643", dto.getOrderInfo().get("offerId"));
-        assertEquals(1, dto.getOrderInfo().get("buyQuantity"));
-        assertEquals(0, dto.getOrderInfo().get("env"));
-        assertEquals("CNY", dto.getOrderInfo().get("currencyType"));
-        assertEquals("offer_1001", dto.getOrderInfo().get("productId"));
-        assertEquals(9900, dto.getOrderInfo().get("goodsPrice"));
-        assertEquals("A20260802001", dto.getOrderInfo().get("outTradeNo"));
-        assertEquals("ASSESSMENT_PACKAGE:1", dto.getOrderInfo().get("attach"));
-        assertEquals(0, dto.getEnv());
-        assertEquals("HMAC-SHA256", dto.getSignType());
-        assertNotNull(dto.getExtInfo());
-        assertNotNull(dto.getSign());
-        assertFalse(dto.getSign().isEmpty());
-        assertNotNull(dto.getSignature());
-        assertFalse(dto.getSignature().isEmpty());
-        // 双签名值不同(paySig 用 appKey、signature 用 sessionKey)
-        org.junit.jupiter.api.Assertions.assertNotEquals(dto.getSign(), dto.getSignature());
-    }
-
-    @Test
-    void handleDeliverNotify_assessmentPrefixRoutesToHandleVirtualPaySuccess() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("OutTradeNo", "A20260802001");
-        payload.put("TransactionId", "WX1234567890");
-
-        Map<String, Object> result = virtualPayService.handleDeliverNotify(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        assertEquals("success", result.get("ErrMsg"));
-        verify(assessmentOrderService, times(1)).handleVirtualPaySuccess("A20260802001", "WX1234567890");
-    }
-
-    @Test
-    void handleDeliverNotify_missingOutTradeNoReturnsAck() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("TransactionId", "WX1234567890");
-
-        Map<String, Object> result = virtualPayService.handleDeliverNotify(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        verify(assessmentOrderService, times(0)).paySuccess(org.mockito.ArgumentMatchers.any(),
-                org.mockito.ArgumentMatchers.any(), org.mockito.ArgumentMatchers.any());
-    }
-
-    @Test
-    void handleRefundNotify_assessmentPrefixCallsRefundOrder() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("OutTradeNo", "A20260802001");
-
-        Map<String, Object> result = virtualPayService.handleRefundNotify(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        assertEquals("success", result.get("ErrMsg"));
-        verify(assessmentOrderService, times(1)).refundOrder("A20260802001");
-    }
-
-    @Test
-    void generatePayParams_signsOfficialJsonSignData() throws Exception {
-        // 对照官方签名规则:
-        //   signData  = orderInfo 的 JSON 串(camelCase 官方字段、插入序,与前端 JSON.stringify 逐字节一致)
-        //   paySig    = hmacSha256Hex(appKey, "requestVirtualPayment&" + signData)
-        //   signature = hmacSha256Hex(sessionKey, signData)
-        setField("offerId", "1450607643");
-        setField("appKey", "test_app_key");
-        setField("env", 0);
-
-        VirtualGoodsConfig config = new VirtualGoodsConfig();
-        config.setProductId("offer_1001");
-
-        VirtualPayParamsDTO dto = virtualPayService.generatePayParams(
-                config, "A20260802001", 9900, "五维测评·基础版", "ASSESSMENT_PACKAGE:1", "test_session_key");
-
-        // 期望 signData:官方 camelCase 字段、插入序序列化(锁定格式,防回归到旧字典序拼接)
-        String expectedSignData = "{\"offerId\":\"1450607643\",\"buyQuantity\":1,\"env\":0,"
-                + "\"currencyType\":\"CNY\",\"productId\":\"offer_1001\",\"goodsPrice\":9900,"
-                + "\"outTradeNo\":\"A20260802001\",\"attach\":\"ASSESSMENT_PACKAGE:1\"}";
-        assertEquals(expectedSignData, JSON.toJSONString(dto.getOrderInfo()));
-        // paySig / signature 均基于同一 JSON 串(与前端实际发送的 signData 逐字节一致)
-        assertEquals(HmacSignUtil.hmacSha256Hex("test_app_key", "requestVirtualPayment&" + expectedSignData), dto.getSign());
-        assertEquals(HmacSignUtil.hmacSha256Hex("test_session_key", expectedSignData), dto.getSignature());
-    }
-
-    @Test
-    void handleDeliverNotify_membershipPrefixRoutesToProcessPaymentCallback() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("OutTradeNo", "ORD20260802001");
-        payload.put("TransactionId", "WX1234567890");
-
-        Map<String, Object> result = virtualPayService.handleDeliverNotify(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        assertEquals("success", result.get("ErrMsg"));
-        verify(membershipService, times(1)).processPaymentCallback("ORD20260802001", "WX1234567890", "virtual");
-    }
-
-    @Test
-    void generateMembershipPayParams_returnsDtoForConfiguredLevel() throws Exception {
-        setField("offerId", "1450607643");
-        setField("appKey", "test_app_key");
-        setField("env", 0);
-
-        PaymentOrder order = new PaymentOrder();
-        order.setOrderNo("ORD20260802001");
-        order.setLevelCode("FAMILY");
-        order.setAmount(131400);
-        order.setStatus("pending");
-        when(membershipService.getByOrderNo("ORD20260802001")).thenReturn(order);
-
-        VirtualGoodsConfig config = new VirtualGoodsConfig();
-        config.setProductId("offer_m1");
-        config.setGoodsName("家庭会员年卡");
-        when(virtualGoodsConfigService.getEnabled("MEMBERSHIP", "FAMILY")).thenReturn(config);
-
-        VirtualPayParamsDTO dto = virtualPayService.generateMembershipPayParams("ORD20260802001", "test_session_key");
-
-        assertNotNull(dto);
-        assertEquals("1450607643", dto.getOrderInfo().get("offerId"));
-        assertEquals("offer_m1", dto.getOrderInfo().get("productId"));
-        assertEquals(131400, dto.getOrderInfo().get("goodsPrice"));
-        assertEquals("ORD20260802001", dto.getOrderInfo().get("outTradeNo"));
-        assertEquals("membership:FAMILY", dto.getOrderInfo().get("attach"));
-    }
-
-    @Test
-    void generateMembershipPayParams_returnsNullWhenConfigMissing() {
-        PaymentOrder order = new PaymentOrder();
-        order.setOrderNo("ORD20260802002");
-        order.setLevelCode("PREMIUM");
-        order.setAmount(1316800);
-        order.setStatus("pending");
-        when(membershipService.getByOrderNo("ORD20260802002")).thenReturn(order);
-        when(virtualGoodsConfigService.getEnabled("MEMBERSHIP", "PREMIUM")).thenReturn(null);
-
-        assertNull(virtualPayService.generateMembershipPayParams("ORD20260802002", "test_session_key"));
-    }
-
-    @Test
-    void handleDeliverNotify_subscriptionPrefixRoutesToActivateSubscription() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("OutTradeNo", "SUB20260802001");
-        payload.put("TransactionId", "WX1234567890");
-
-        MemberSubscriptionOrder order = new MemberSubscriptionOrder();
-        order.setOrderNo("SUB20260802001");
-        order.setFamilyId(1L);
-        order.setLevel("L1");
-        order.setAmount(36500);
-        order.setStatus("pending");
-        when(memberSubscriptionService.getByOrderNo("SUB20260802001")).thenReturn(order);
-
-        Map<String, Object> result = virtualPayService.handleDeliverNotify(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        assertEquals("success", result.get("ErrMsg"));
-        verify(memberSubscriptionService, times(1))
-                .activateSubscription(1L, "L1", 36500, "virtual", "WX1234567890", "SUB20260802001");
-    }
-
-    @Test
-    void generateSubscriptionPayParams_returnsDtoForConfiguredLevel() throws Exception {
-        setField("offerId", "1450607643");
-        setField("appKey", "test_app_key");
-        setField("env", 0);
-
-        MemberSubscriptionOrder order = new MemberSubscriptionOrder();
-        order.setOrderNo("SUB20260802001");
-        order.setLevel("L1");
-        order.setAmount(36500);
-        order.setStatus("pending");
-        when(memberSubscriptionService.getByOrderNo("SUB20260802001")).thenReturn(order);
-
-        VirtualGoodsConfig config = new VirtualGoodsConfig();
-        config.setProductId("offer_sub_l1");
-        config.setGoodsName("一生一世L1");
-        when(virtualGoodsConfigService.getEnabled("SUBSCRIPTION", "L1")).thenReturn(config);
-
-        VirtualPayParamsDTO dto = virtualPayService.generateSubscriptionPayParams("SUB20260802001", "test_session_key");
-
-        assertNotNull(dto);
-        assertEquals("1450607643", dto.getOrderInfo().get("offerId"));
-        assertEquals("offer_sub_l1", dto.getOrderInfo().get("productId"));
-        assertEquals(36500, dto.getOrderInfo().get("goodsPrice"));
-        assertEquals("SUB20260802001", dto.getOrderInfo().get("outTradeNo"));
-        assertEquals("subscription:L1", dto.getOrderInfo().get("attach"));
-    }
-
-    @Test
-    void generateSubscriptionPayParams_returnsNullWhenConfigMissing() {
-        MemberSubscriptionOrder order = new MemberSubscriptionOrder();
-        order.setOrderNo("SUB20260802002");
-        order.setLevel("L2");
-        order.setAmount(131400);
-        order.setStatus("pending");
-        when(memberSubscriptionService.getByOrderNo("SUB20260802002")).thenReturn(order);
-        when(virtualGoodsConfigService.getEnabled("SUBSCRIPTION", "L2")).thenReturn(null);
-
-        assertNull(virtualPayService.generateSubscriptionPayParams("SUB20260802002", "test_session_key"));
-    }
-
-    @Test
-    void queryOrder_testModeReturnsUnpaidWithoutHttp() throws Exception {
-        setField("testMode", true);
-        setField("env", 0);
-        VirtualPayService.QueryOrderResult result = virtualPayService.queryOrder("A20260802001", "test_openid");
-        assertNotNull(result);
-        assertFalse(result.paid);
-        assertEquals(1, result.status);
-        // 测试模式不触发 HTTP(wechatService 未被调用)
-        verify(wechatService, times(0)).getAccessToken();
-    }
-
-    @Test
-    void queryOrder_buildsPaySigWithUriAndRawBody() throws Exception {
-        // 对照官方规则: pay_sig = hmacSha256Hex(appKey, "/xpay/query_order&" + post_body)
-        setField("appKey", "test_app_key");
-        setField("env", 0);
-        // 验证签名拼接规则:uri 前缀 + 原始 body(与 generatePayParams 的 buildSignData 不同!)
-        String postBody = JSON.toJSONString(new LinkedHashMap<String, Object>() {{
-            put("openid", "test_openid");
-            put("env", 0);
-            put("order_id", "A20260802001");
-            put("wx_order_id", "");
-        }});
-        String expectedPaySig = HmacSignUtil.hmacSha256Hex("test_app_key", "/xpay/query_order&" + postBody);
-        // package-private buildQueryOrderPaySig 直接断言签名构建逻辑
-        assertEquals(expectedPaySig, virtualPayService.buildQueryOrderPaySig(postBody));
-    }
-
-    @Test
-    void handleRefundNotify_membershipPrefixCallsRefundByOrderNo() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("OutTradeNo", "ORD20260804001");
-
-        Map<String, Object> result = virtualPayService.handleRefundNotify(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        assertEquals("success", result.get("ErrMsg"));
-        verify(membershipService, times(1)).refundByOrderNo("ORD20260804001");
-    }
-
-    @Test
-    void handleIosRefundQuery_paidOrderWithoutDeliveryAgreesRefund() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("pay_order_id", "ORD20260804001");
-        payload.put("refund_request_reason", "UNINTENDED_PURCHASE");
-        payload.put("provide_status", "0");
-
-        PaymentOrder order = new PaymentOrder();
-        order.setOrderNo("ORD20260804001");
-        order.setLevelCode("FAMILY");
-        order.setStatus("paid");
-        when(membershipService.getByOrderNo("ORD20260804001")).thenReturn(order);
-
-        Map<String, Object> result = virtualPayService.handleIosRefundQuery(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        assertNotNull(result.get("IosRefundQueryResponse"));
-        @SuppressWarnings("unchecked")
-        Map<String, Object> resp = (Map<String, Object>) result.get("IosRefundQueryResponse");
-        assertEquals(0, resp.get("result_code"));  // 建议退款
-        assertEquals("同意退款", resp.get("result_info"));
-        assertNotNull(resp.get("evidence"));
-    }
-
-    @Test
-    void handleIosRefundQuery_deliveredOrderRefusesRefund() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("pay_order_id", "A20260804001");
-        payload.put("provide_status", "1");
-
-        AssessmentOrder order = new AssessmentOrder();
-        order.setOrderNo("A20260804001");
-        order.setStatus("paid");
-        when(assessmentOrderService.getByOrderNo("A20260804001")).thenReturn(order);
-
-        Map<String, Object> result = virtualPayService.handleIosRefundQuery(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        @SuppressWarnings("unchecked")
-        Map<String, Object> resp = (Map<String, Object>) result.get("IosRefundQueryResponse");
-        assertEquals(1, resp.get("result_code"));  // 拒绝退款
-        assertEquals("拒绝退款", resp.get("result_info"));
-    }
-
-    @Test
-    void handleIosRefundQuery_unknownOrderRefusesRefund() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("pay_order_id", "ORD_NONEXIST");
-        payload.put("provide_status", "0");
-
-        when(membershipService.getByOrderNo("ORD_NONEXIST")).thenReturn(null);
-
-        Map<String, Object> result = virtualPayService.handleIosRefundQuery(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        @SuppressWarnings("unchecked")
-        Map<String, Object> resp = (Map<String, Object>) result.get("IosRefundQueryResponse");
-        assertEquals(1, resp.get("result_code"));  // 拒绝退款
-        assertTrue(resp.get("evidence").toString().contains("订单不存在"));
-    }
-
-    @Test
-    void handleIosRefundQuery_alreadyRefundedAgreesRefund() {
-        Map<String, Object> payload = new HashMap<>();
-        payload.put("pay_order_id", "SUB20260804001");
-        payload.put("provide_status", "1");
-
-        MemberSubscriptionOrder order = new MemberSubscriptionOrder();
-        order.setOrderNo("SUB20260804001");
-        order.setStatus("refunded");
-        when(memberSubscriptionService.getByOrderNo("SUB20260804001")).thenReturn(order);
-
-        Map<String, Object> result = virtualPayService.handleIosRefundQuery(payload);
-
-        assertEquals(0, result.get("ErrCode"));
-        @SuppressWarnings("unchecked")
-        Map<String, Object> resp = (Map<String, Object>) result.get("IosRefundQueryResponse");
-        assertEquals(0, resp.get("result_code"));  // 建议退款(已退款)
-        assertTrue(resp.get("evidence").toString().contains("已退款"));
-    }
-
-    private void setField(String name, Object value) throws Exception {
-        Field field = VirtualPayService.class.getDeclaredField(name);
-        field.setAccessible(true);
-        field.set(virtualPayService, value);
-    }
-}

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-009f40aa7dfb6a2efbc5c1ec013bde8603f08845
+f0641c8a35b4bf5b9c4897e649428ceff386b198

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1243",
+  "version": "1.0.1244",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cfc-web",
-      "version": "1.0.1243",
+      "version": "1.0.1244",
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",