liu
16 小时以前 a67dab8161c7428aa7cbd6f9051dd5ae77af4ed8
fix: 修复考勤异常并验证原材料销售审批
已添加1个文件
已修改1个文件
83 ■■■■■ 文件已修改
yudao-module-erp/src/test/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImplTest.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceExceptionSaveReqVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/test/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImplTest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package cn.iocoder.yudao.module.erp.service.sale;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOrderItemMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOrderMapper;
import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mdm.enums.MdmItemTypeEnum;
import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class ErpSaleOrderServiceImplTest {
    @Mock
    private ErpSaleOrderMapper saleOrderMapper;
    @Mock
    private ErpSaleOrderItemMapper saleOrderItemMapper;
    @Mock
    private MdmItemApi mdmItemApi;
    @Mock
    private MesProMpsApi mpsApi;
    @InjectMocks
    private ErpSaleOrderServiceImpl saleOrderService;
    @Test
    void updateSaleOrderStatus_materialItem_shouldApproveWithoutCreatingMps() {
        Long orderId = 1L;
        Long itemId = 10L;
        Long materialId = 20L;
        ErpSaleOrderDO order = ErpSaleOrderDO.builder()
                .id(orderId)
                .status(ErpAuditStatus.PROCESS.getStatus())
                .build();
        ErpSaleOrderItemDO orderItem = ErpSaleOrderItemDO.builder()
                .id(itemId)
                .orderId(orderId)
                .productId(materialId)
                .needProduction(1)
                .build();
        MdmItemRespDTO material = new MdmItemRespDTO();
        material.setId(materialId);
        material.setItemType(MdmItemTypeEnum.MATERIAL.getType());
        when(saleOrderMapper.selectById(orderId)).thenReturn(order);
        when(saleOrderMapper.updateByIdAndStatus(eq(orderId), eq(ErpAuditStatus.PROCESS.getStatus()),
                any(ErpSaleOrderDO.class))).thenReturn(1);
        when(saleOrderItemMapper.selectListByOrderId(orderId)).thenReturn(List.of(orderItem));
        when(mdmItemApi.getItem(materialId)).thenReturn(CommonResult.success(material));
        saleOrderService.updateSaleOrderStatus(orderId, ErpAuditStatus.APPROVE.getStatus());
        ArgumentCaptor<ErpSaleOrderItemDO> itemCaptor = ArgumentCaptor.forClass(ErpSaleOrderItemDO.class);
        verify(saleOrderItemMapper).updateById(itemCaptor.capture());
        assertEquals(itemId, itemCaptor.getValue().getId());
        assertEquals(0, itemCaptor.getValue().getNeedProduction());
        verify(mpsApi, never()).createMps(any());
    }
}
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceExceptionSaveReqVO.java
@@ -24,8 +24,7 @@
    @NotNull(message = "异常日期不能为空")
    private LocalDate exceptionDate;
    @Schema(description = "异常时间点", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-01-15 09:00:00")
    @NotNull(message = "异常时间点不能为空")
    @Schema(description = "异常时间点", example = "2024-01-15 09:00:00")
    private LocalDateTime exceptionTime;
    @Schema(description = "申请原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "忘记打卡")
@@ -38,4 +37,4 @@
    @Schema(description = "备注", example = "备注信息")
    private String remark;
}
}