feat(ops): refactor-order-operations

This commit is contained in:
lzh
2026-01-19 13:32:23 +08:00
parent 5419a949d4
commit 568d37a0be
31 changed files with 2806 additions and 1456 deletions

View File

@@ -0,0 +1,203 @@
package com.viewsh.module.ops.environment.service.cleanorder;
import com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderDO;
import com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderCleanExtDO;
import com.viewsh.module.ops.dal.mysql.workorder.OpsOrderCleanExtMapper;
import com.viewsh.module.ops.enums.PriorityEnum;
import com.viewsh.module.ops.enums.WorkOrderStatusEnum;
import com.viewsh.module.ops.service.OrderDetailVO;
import com.viewsh.module.ops.service.OrderSummaryVO;
import org.junit.jupiter.api.BeforeEach;
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 java.time.LocalDateTime;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* 保洁工单扩展查询处理器测试
*
* @author lzh
*/
@ExtendWith(MockitoExtension.class)
class CleanOrderExtQueryHandlerTest {
@Mock
private OpsOrderCleanExtMapper cleanExtMapper;
@InjectMocks
private CleanOrderExtQueryHandler handler;
private OpsOrderDO testOrder;
private OpsOrderCleanExtDO testCleanExt;
@BeforeEach
void setUp() {
// 初始化测试工单
testOrder = OpsOrderDO.builder()
.id(1L)
.orderCode("CLEAN-20250119-0001")
.orderType("CLEAN")
.status(WorkOrderStatusEnum.PENDING.getStatus())
.title("2楼电梯厅保洁")
.priority(PriorityEnum.P2.getPriority())
.areaId(100L)
.location("2楼电梯厅")
.createTime(LocalDateTime.now())
.build();
// 初始化测试扩展信息
testCleanExt = OpsOrderCleanExtDO.builder()
.id(1L)
.opsOrderId(1L)
.isAuto(1)
.expectedDuration(30)
.cleaningType("DEEP")
.difficultyLevel(3)
.arrivedTime(LocalDateTime.now().minusHours(1))
.completedTime(LocalDateTime.now())
.totalPauseSeconds(120)
.build();
}
@Test
void testSupports_ReturnsTrueForClean() {
// When & Then
assertTrue(handler.supports("CLEAN"));
}
@Test
void testSupports_ReturnsFalseForOtherTypes() {
// When & Then
assertFalse(handler.supports("SECURITY"));
assertFalse(handler.supports("FACILITIES"));
assertFalse(handler.supports("SERVICE"));
assertFalse(handler.supports(null));
}
@Test
void testEnrichWithExtInfo_ExistingExt_FillsExtInfo() {
// Given
when(cleanExtMapper.selectByOpsOrderId(1L)).thenReturn(testCleanExt);
OrderSummaryVO vo = OrderSummaryVO.builder()
.id(1L)
.orderCode("CLEAN-20250119-0001")
.orderType("CLEAN")
.build();
// When
handler.enrichWithExtInfo(vo, 1L);
// Then
assertNotNull(vo.getExtInfo());
assertEquals(true, vo.getExtInfo().get("isAuto"));
assertEquals(30, vo.getExtInfo().get("expectedDuration"));
assertEquals("DEEP", vo.getExtInfo().get("cleaningType"));
assertEquals(3, vo.getExtInfo().get("difficultyLevel"));
assertNotNull(vo.getExtInfo().get("arrivedTime"));
assertNotNull(vo.getExtInfo().get("completedTime"));
assertEquals(120, vo.getExtInfo().get("totalPauseSeconds"));
}
@Test
void testEnrichWithExtInfo_NoExistingExt_EmptyExtInfo() {
// Given
when(cleanExtMapper.selectByOpsOrderId(1L)).thenReturn(null);
OrderSummaryVO vo = OrderSummaryVO.builder()
.id(1L)
.orderCode("CLEAN-20250119-0001")
.orderType("CLEAN")
.build();
// When
handler.enrichWithExtInfo(vo, 1L);
// Then
assertNotNull(vo.getExtInfo());
assertTrue(vo.getExtInfo().isEmpty());
}
@Test
void testEnrichWithExtInfo_IsAutoZero_FillsAsFalse() {
// Given
testCleanExt.setIsAuto(0);
when(cleanExtMapper.selectByOpsOrderId(1L)).thenReturn(testCleanExt);
OrderSummaryVO vo = OrderSummaryVO.builder()
.id(1L)
.orderCode("CLEAN-20250119-0001")
.orderType("CLEAN")
.build();
// When
handler.enrichWithExtInfo(vo, 1L);
// Then
assertEquals(false, vo.getExtInfo().get("isAuto"));
}
@Test
void testBuildDetailVO_ExistingExt_ReturnsDetailedVO() {
// Given
when(cleanExtMapper.selectByOpsOrderId(1L)).thenReturn(testCleanExt);
// When
OrderDetailVO vo = handler.buildDetailVO(testOrder);
// Then: 验证基础字段
assertEquals(1L, vo.getId());
assertEquals("CLEAN-20250119-0001", vo.getOrderCode());
assertEquals("CLEAN", vo.getOrderType());
assertEquals("2楼电梯厅保洁", vo.getTitle());
assertEquals(PriorityEnum.P2.getPriority(), vo.getPriority());
assertEquals(WorkOrderStatusEnum.PENDING.getStatus(), vo.getStatus());
assertEquals(100L, vo.getAreaId());
assertEquals("2楼电梯厅", vo.getLocation());
// 验证扩展字段
assertNotNull(vo.getExtInfo());
assertEquals(true, vo.getExtInfo().get("isAuto"));
assertEquals(30, vo.getExtInfo().get("expectedDuration"));
assertEquals("DEEP", vo.getExtInfo().get("cleaningType"));
assertEquals(3, vo.getExtInfo().get("difficultyLevel"));
}
@Test
void testBuildDetailVO_NoExistingExt_ReturnsVOWithEmptyExtInfo() {
// Given
when(cleanExtMapper.selectByOpsOrderId(1L)).thenReturn(null);
// When
OrderDetailVO vo = handler.buildDetailVO(testOrder);
// Then: 基础字段仍然存在
assertEquals(1L, vo.getId());
assertEquals("CLEAN-20250119-0001", vo.getOrderCode());
// 扩展信息为空Map
assertNotNull(vo.getExtInfo());
assertTrue(vo.getExtInfo().isEmpty());
}
@Test
void testBuildDetailVO_IncludesAllExtFields() {
// Given
testCleanExt.setPauseStartTime(LocalDateTime.now().minusMinutes(30));
testCleanExt.setPauseEndTime(LocalDateTime.now().minusMinutes(28));
when(cleanExtMapper.selectByOpsOrderId(1L)).thenReturn(testCleanExt);
// When
OrderDetailVO vo = handler.buildDetailVO(testOrder);
// Then: 验证所有扩展字段都被包含
assertNotNull(vo.getExtInfo().get("arrivedTime"));
assertNotNull(vo.getExtInfo().get("completedTime"));
assertNotNull(vo.getExtInfo().get("pauseStartTime"));
assertNotNull(vo.getExtInfo().get("pauseEndTime"));
assertNotNull(vo.getExtInfo().get("totalPauseSeconds"));
}
}