云
2026-10-29 0a2206a53d5889b6095f4819c263be858d86ca91
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package cn.iocoder.yudao.module.mes.service.wm.returnsales;
 
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderItemRespDTO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLineSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesDetailMapper;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
 
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
 
class ReturnSalesManualBatchReelTest {
    @Test void manualBatchRequiresMatchingReelAndCompletedShipment() {
        var service = new MesWmReturnSalesLineServiceImpl();
        var returns = mock(MesWmReturnSalesService.class);
        var items = mock(MesMdmItemService.class);
        var batches = mock(MesWmBatchService.class);
        var orders = mock(ErpSaleOrderApi.class);
        var shipments = mock(MesWmProductSalesDetailMapper.class);
        ReflectionTestUtils.setField(service, "returnSalesService", returns);
        ReflectionTestUtils.setField(service, "mdmItemService", items);
        ReflectionTestUtils.setField(service, "batchService", batches);
        ReflectionTestUtils.setField(service, "saleOrderApi", orders);
        ReflectionTestUtils.setField(service, "productSalesDetailMapper", shipments);
        var order = new MesWmReturnSalesDO().setSaleOrderId(5L).setClientId(9L).setSalesOrderCode("SO");
        when(returns.validateReturnSalesExistsAndPrepare(1L)).thenReturn(order);
        when(items.validateItemExistsAndEnable(2L)).thenReturn(new MesMdmItemDO());
        var batch = MesWmBatchDO.builder().id(3L).itemId(2L).code("B").reelNo("PHCS").build();
        when(batches.validateBatchExists(3L, 2L)).thenReturn(batch);
        var item = new ErpSaleOrderItemRespDTO().setProductId(2L).setReelNo("PHCS");
        when(orders.getSaleOrderItemList(5L)).thenReturn(CommonResult.success(List.of(item)));
        var req = new MesWmReturnSalesLineSaveReqVO().setReturnId(1L).setItemId(2L).setBatchId(3L);
        assertThrows(RuntimeException.class, () -> ReflectionTestUtils.invokeMethod(service, "validateLineSaveData", req));
        when(shipments.countFinishedSaleBatch(eq(5L), eq(2L), eq(3L), anyInt())).thenReturn(1L);
        assertDoesNotThrow(() -> ReflectionTestUtils.invokeMethod(service, "validateLineSaveData", req));
        assertEquals("B", req.getBatchCode());
        batch.setReelNo("OTHER");
        assertThrows(RuntimeException.class, () -> ReflectionTestUtils.invokeMethod(service, "validateLineSaveData", req));
    }
}