Fisheye: Tag 41137 refers to a dead (removed) revision in file `ssts-packing/src/test/java/com/forgon/disinfectsystem/packing/service/PackingManagerImplTest.java'. Fisheye: No comparison available. Pass `N' to diff? Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java =================================================================== diff -u -r41120 -r41137 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 41120) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 41137) @@ -426,16 +426,15 @@ HttpServletResponse response = StrutsParamUtils.getResponse(); String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", ""); Date date = StrutsParamUtils.getDatePraramValue("date", null, new SimpleDateFormat("yyyy-MM-dd")); - Long tousseAncestorID = StrutsParamUtils.getPraramLongValue("tousseAncestorID", null); + String tousseName = StrutsParamUtils.getPraramValue("tousseName", ""); JsonConfig config = new JsonConfig(); PropertyFilter propertyFilter = new JsonPropertyFilter(new String[] { "tasks", "recyclingRecord" }); config.setJsonPropertyFilter(propertyFilter); List vos = null; String message = ""; try { - SqlUtils.checkInputParam(taskGroup); - vos = packingManager.getReviewerVoAtToday(taskGroup, date, tousseAncestorID); + vos = packingManager.getReviewerVoAtToday(taskGroup, date, tousseName); } catch (SQLException e1) { e1.printStackTrace(); message = e1.getMessage(); Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r41120 -r41137 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 41120) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 41137) @@ -107,8 +107,8 @@ public List getReviewerVoAtToday(String taskGroup) throws SQLException; - public List getReviewerVoAtToday(String taskGroup, String date, Long tousseAncestorID) throws SQLException ; - public List getReviewerVoAtToday(String taskGroup, Date date, Long tousseAncestorID) + public List getReviewerVoAtToday(String taskGroup, String date, String tousseName) throws SQLException ; + public List getReviewerVoAtToday(String taskGroup, Date date, String tousseName) throws SQLException; public String loadTousseByPackingRecord(String packingRecordId); Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r41120 -r41137 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 41120) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 41137) @@ -766,18 +766,20 @@ } public List getReviewerVoAtToday(String taskGroup) throws SQLException { - return getReviewerVoAtToday(taskGroup, new Date(), null); + return getReviewerVoAtToday(taskGroup, new Date(), ""); } - public List getReviewerVoAtToday(String taskGroup, String date, Long tousseAncestorID) throws SQLException { + public List getReviewerVoAtToday(String taskGroup, String date, String tousseName) throws SQLException { Date d = DateTools.parseDateIfNotEmpty(date, new SimpleDateFormat("yyyy-MM-dd"), new Date()); - return getReviewerVoAtToday(taskGroup, d, tousseAncestorID); + return getReviewerVoAtToday(taskGroup, d, tousseName); } /** * 查询今天本组已审核的器械包(器械包、消毒物品、敷料包、外来器械包、外来器械拆分小包、自定义器械包、外部代理灭菌) */ @Override - public List getReviewerVoAtToday(String taskGroup, Date date, Long tousseAncestorID) + public List getReviewerVoAtToday(String taskGroup, Date date, String tousseName) throws SQLException { + SqlUtils.checkInputParam(taskGroup); + SqlUtils.checkInputParam(tousseName); String orgUnitCode = AcegiHelper.getLoginUser() .getOrgUnitCodingFromSupplyRoomConfig(); String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(date == null ? new Date() : date); @@ -799,8 +801,8 @@ if(StringUtils.isNotBlank(taskGroup)){ sql += " and t.taskGroup = '" + taskGroup + "' "; } - if(tousseAncestorID != null){ - sql += " and d.ancestorID=" + tousseAncestorID + " "; + if(StringUtils.isNotBlank(tousseName)){ + sql += " and d.name like '%" + tousseName + "%' "; } //外来器械包默认处理科室及任务组 JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = supplyRoomConfig.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(orgUnitCode); @@ -811,9 +813,9 @@ + "and i.reviewTime between "+dateQueryAdapter.dateConverAdapter2(startDateTime, fmt)+" and " + dateQueryAdapter.dateConverAdapter2(endDateTime, fmt) + " and i.orgUnitCoding = '" + orgUnitCode+ "' "; - - if(tousseAncestorID != null){ - sql += " and d.ancestorID=" + tousseAncestorID + " "; + + if(StringUtils.isNotBlank(tousseName)){ + sql += " and d.name like '%" + tousseName + "%' "; } } @@ -824,8 +826,8 @@ + "and i.reviewTime between "+dateQueryAdapter.dateConverAdapter2(startDateTime, fmt)+" and " + dateQueryAdapter.dateConverAdapter2(endDateTime, fmt) + " and i.orgUnitCoding = '" + orgUnitCode + "' "; - if(tousseAncestorID != null){ - sql += " and d.ancestorID=" + tousseAncestorID + " "; + if(StringUtils.isNotBlank(tousseName)){ + sql += " and d.name like '%" + tousseName + "%' "; } } sql += ") alias group by alias.name,alias.reviewer, alias.isTraceable"; Index: ssts-packing/src/test/java/com/forgon/disinfectsystem/packing/service/PackingManagerImplTest.java =================================================================== diff -u -r41120 -r41137 --- ssts-packing/src/test/java/com/forgon/disinfectsystem/packing/service/PackingManagerImplTest.java (.../PackingManagerImplTest.java) (revision 41120) +++ ssts-packing/src/test/java/com/forgon/disinfectsystem/packing/service/PackingManagerImplTest.java (.../PackingManagerGetReviewerVoAtTodayTest.java) (revision 41137) @@ -7,31 +7,31 @@ import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.packing.vo.ReviewerVo; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.SqlUtils; import net.sf.json.JSONObject; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.MockitoAnnotations; +import org.mockito.*; import java.sql.ResultSet; import java.sql.SQLException; +import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Collections; import java.util.Date; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; /** * PackingManagerImpl 单元测试类 */ -public class PackingManagerImplTest { +public class PackingManagerGetReviewerVoAtTodayTest { @InjectMocks + @Spy private PackingManagerImpl packingManager; @Mock @@ -47,23 +47,26 @@ private ResultSet resultSet; private AutoCloseable closeable; + private MockedStatic sqlUtil; private MockedStatic mockedAcegiHelper; @Before public void setUp() { closeable = MockitoAnnotations.openMocks(this); mockedAcegiHelper = mockStatic(AcegiHelper.class); + sqlUtil = mockStatic(SqlUtils.class); } @After public void tearDown() throws Exception { closeable.close(); mockedAcegiHelper.close(); + sqlUtil.close(); } /** * 测试用例:TC001 - 基础路径覆盖 - * 输入:taskGroup=null, date=null, tousseAncestorID=null + * 输入:taskGroup=null, date=null, tousseName=null * 预期:查询所有类型器械包的审核信息 */ @Test @@ -123,7 +126,7 @@ /** * 测试用例:TC002 - 任务组过滤 - * 输入:taskGroup="GROUP1", date=null, tousseAncestorID=null + * 输入:taskGroup="GROUP1", date=null, tousseName="" * 预期:查询指定任务组的器械包审核信息 */ @Test @@ -157,7 +160,7 @@ when(resultSet.getInt("amount")).thenReturn(3); // 执行测试 - List result = packingManager.getReviewerVoAtToday(taskGroup, (Date) null, null); + List result = packingManager.getReviewerVoAtToday(taskGroup, (Date) null, ""); // 验证结果 assertNotNull(result); @@ -168,6 +171,8 @@ assertEquals(Integer.valueOf(3), vo.getAmount()); // 验证调用 + sqlUtil.verify(() -> SqlUtils.checkInputParam(taskGroup)); + sqlUtil.verify(() -> SqlUtils.checkInputParam("")); mockedAcegiHelper.verify(AcegiHelper::getLoginUser); verify(supplyRoomConfigManager, times(1)).getSystemParamsObj(); verify(dateQueryAdapter, times(1)).dateConverAdapter2(startDateTime, fmt); @@ -186,7 +191,7 @@ /** * 测试用例:TC003 - 日期过滤 - * 输入:taskGroup=null, date=指定日期, tousseAncestorID=null + * 输入:taskGroup=null, date=指定日期, tousseName=null * 预期:查询指定日期的器械包审核信息 */ @Test @@ -247,7 +252,7 @@ /** * 测试用例:TC004 - 祖先ID过滤 - * 输入:taskGroup=null, date=null, tousseAncestorID=123L + * 输入:taskGroup=null, date=null, tousseName="械包" * 预期:查询指定祖先ID的器械包审核信息 */ @Test @@ -258,7 +263,7 @@ String startDateTime = currentDate + " 00:00:00"; String endDateTime = currentDate + " 23:59:59"; String fmt = "yyyy-MM-dd HH24:MI:SS"; - Long tousseAncestorID = 123L; + String tousseName = "械包"; LoginUserData loginUser = mock(LoginUserData.class); when(loginUser.getOrgUnitCodingFromSupplyRoomConfig()).thenReturn(orgUnitCode); @@ -279,7 +284,7 @@ when(resultSet.getInt("amount")).thenReturn(1); // 执行测试 - List result = packingManager.getReviewerVoAtToday(null, (Date) null, tousseAncestorID); + List result = packingManager.getReviewerVoAtToday(null, (Date) null, tousseName); // 验证结果 assertNotNull(result); @@ -290,6 +295,8 @@ assertEquals(Integer.valueOf(1), vo.getAmount()); // 验证调用 + sqlUtil.verify(() -> SqlUtils.checkInputParam(null)); + sqlUtil.verify(() -> SqlUtils.checkInputParam(tousseName)); mockedAcegiHelper.verify(AcegiHelper::getLoginUser); verify(supplyRoomConfigManager, times(1)).getSystemParamsObj(); verify(dateQueryAdapter, times(2)).dateConverAdapter2(startDateTime, fmt); @@ -298,6 +305,7 @@ verify(objectDao, data -> { String sql = data.getAllInvocations().get(0).getArgument(0); System.out.println(sql); + assertTrue(sql.contains("d.name like '%" +tousseName + "%'")); }).executeSql(anyString()); verify(resultSet, times(2)).next(); verify(resultSet, times(1)).getString("name"); @@ -308,7 +316,7 @@ /** * 测试用例:TC005 - 多条件组合过滤 - * 输入:taskGroup="GROUP1", date=指定日期, tousseAncestorID=123L + * 输入:taskGroup="GROUP1", date=指定日期, tousseName="包E" * 预期:查询指定任务组、日期和祖先ID的器械包审核信息 */ @Test @@ -321,7 +329,7 @@ String endDateTime = currentDate + " 23:59:59"; String fmt = "yyyy-MM-dd HH24:MI:SS"; String taskGroup = "GROUP1"; - Long tousseAncestorID = 123L; + String tousseName = "包E"; LoginUserData loginUser = mock(LoginUserData.class); when(loginUser.getOrgUnitCodingFromSupplyRoomConfig()).thenReturn(orgUnitCode); @@ -344,7 +352,7 @@ when(resultSet.getInt("amount")).thenReturn(4); // 执行测试 - List result = packingManager.getReviewerVoAtToday(taskGroup, specifiedDate, tousseAncestorID); + List result = packingManager.getReviewerVoAtToday(taskGroup, specifiedDate, tousseName); // 验证结果 assertNotNull(result); @@ -355,13 +363,16 @@ assertEquals(Integer.valueOf(4), vo.getAmount()); // 验证调用 + sqlUtil.verify(() -> SqlUtils.checkInputParam(taskGroup)); + sqlUtil.verify(() -> SqlUtils.checkInputParam(tousseName)); mockedAcegiHelper.verify(AcegiHelper::getLoginUser); verify(supplyRoomConfigManager, times(1)).getSystemParamsObj(); verify(dateQueryAdapter, times(2)).dateConverAdapter2(anyString(), anyString()); verify(objectDao, times(1)).executeSql(anyString()); verify(objectDao, data -> { String sql = data.getAllInvocations().get(0).getArgument(0); System.out.println(sql); + assertTrue(sql.contains("d.name like '%" +tousseName + "%'")); }).executeSql(anyString()); verify(resultSet, times(2)).next(); verify(resultSet, times(1)).getString("name"); @@ -431,7 +442,134 @@ } /** - * 测试用例:TC007 - 自定义器械包分支 + * 测试用例:TC007 - 外来器械分支 + * 输入:foreignTousseHandleDepartAndTaskGroupJsonobject!=null + * 预期:不查询外来器械相关数据 + */ + @Test + public void testGetReviewerVoAtToday_ForeignTousse() throws SQLException { + // 准备数据 + String orgUnitCode = "ORG001"; + String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + String startDateTime = currentDate + " 00:00:00"; + String endDateTime = currentDate + " 23:59:59"; + String fmt = "yyyy-MM-dd HH24:MI:SS"; + String taskGroup = "FOREIGN_GROUP"; + + LoginUserData loginUser = mock(LoginUserData.class); + when(loginUser.getOrgUnitCodingFromSupplyRoomConfig()).thenReturn(orgUnitCode); + + JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = new JSONObject(); + foreignTousseHandleDepartAndTaskGroupJsonobject.put("taskGroup", taskGroup); + SupplyRoomConfig supplyRoomConfig = mock(SupplyRoomConfig.class); + when(supplyRoomConfig.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(orgUnitCode)).thenReturn(foreignTousseHandleDepartAndTaskGroupJsonobject); + when(supplyRoomConfig.getCustomTousseDefaultTaskGroup()).thenReturn("CUSTOM_GROUP"); + + mockedAcegiHelper.when(AcegiHelper::getLoginUser).thenReturn(loginUser); + when(supplyRoomConfigManager.getSystemParamsObj()).thenReturn(supplyRoomConfig); + when(dateQueryAdapter.dateConverAdapter2(startDateTime, fmt)).thenReturn("TO_DATE('" + startDateTime + "', 'YYYY-MM-DD HH24:MI:SS')"); + when(dateQueryAdapter.dateConverAdapter2(endDateTime, fmt)).thenReturn("TO_DATE('" + endDateTime + "', 'YYYY-MM-DD HH24:MI:SS')"); + when(objectDao.executeSql(anyString())).thenReturn(resultSet); + + when(resultSet.next()).thenReturn(true).thenReturn(false); + when(resultSet.getString("name")).thenReturn("器械包F"); + when(resultSet.getString("reviewer")).thenReturn("审核人F"); + when(resultSet.getInt("amount")).thenReturn(6); + + // 执行测试 + List result = packingManager.getReviewerVoAtToday(taskGroup, (Date) null, null); + + // 验证结果 + assertNotNull(result); + assertEquals(1, result.size()); + ReviewerVo vo = result.get(0); + assertEquals("器械包F", vo.getTousseName()); + assertEquals("审核人F", vo.getReviewer()); + assertEquals(Integer.valueOf(6), vo.getAmount()); + + // 验证调用 + mockedAcegiHelper.verify(AcegiHelper::getLoginUser); + verify(supplyRoomConfigManager, times(1)).getSystemParamsObj(); + verify(dateQueryAdapter, times(2)).dateConverAdapter2(startDateTime, fmt); + verify(dateQueryAdapter, times(2)).dateConverAdapter2(endDateTime, fmt); + verify(objectDao, times(1)).executeSql(anyString()); + verify(objectDao, data -> { + String sql = data.getAllInvocations().get(0).getArgument(0); + System.out.println(sql); + }).executeSql(anyString()); + verify(resultSet, times(2)).next(); + verify(resultSet, times(1)).getString("name"); + verify(resultSet, times(1)).getString("reviewer"); + verify(resultSet, times(1)).getInt("amount"); + verify(resultSet).close(); + } + + /** + * 测试用例:TC008 - 外来器械分支。taskGroup为空,但是foreignTousseHandleDepartAndTaskGroupJsonobject非空 + * 输入:foreignTousseHandleDepartAndTaskGroupJsonobject!=null, taskGroup=null, tousseName="器械包" + * 预期:不查询外来器械相关数据 + */ + @Test + public void testGetReviewerVoAtToday_ForeignTousse_InputTaskGroupIsNull() throws SQLException { + // 准备数据 + String orgUnitCode = "ORG001"; + String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + String startDateTime = currentDate + " 00:00:00"; + String endDateTime = currentDate + " 23:59:59"; + String fmt = "yyyy-MM-dd HH24:MI:SS"; + String tousseName="器械包"; + + LoginUserData loginUser = mock(LoginUserData.class); + when(loginUser.getOrgUnitCodingFromSupplyRoomConfig()).thenReturn(orgUnitCode); + + JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = new JSONObject(); + foreignTousseHandleDepartAndTaskGroupJsonobject.put("taskGroup", "FOREIGN_GROUP"); + SupplyRoomConfig supplyRoomConfig = mock(SupplyRoomConfig.class); + when(supplyRoomConfig.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(orgUnitCode)).thenReturn(foreignTousseHandleDepartAndTaskGroupJsonobject); + when(supplyRoomConfig.getCustomTousseDefaultTaskGroup()).thenReturn("FOREIGN_GROUP"); + + mockedAcegiHelper.when(AcegiHelper::getLoginUser).thenReturn(loginUser); + when(supplyRoomConfigManager.getSystemParamsObj()).thenReturn(supplyRoomConfig); + when(dateQueryAdapter.dateConverAdapter2(startDateTime, fmt)).thenReturn("TO_DATE('" + startDateTime + "', 'YYYY-MM-DD HH24:MI:SS')"); + when(dateQueryAdapter.dateConverAdapter2(endDateTime, fmt)).thenReturn("TO_DATE('" + endDateTime + "', 'YYYY-MM-DD HH24:MI:SS')"); + when(objectDao.executeSql(anyString())).thenReturn(resultSet); + + when(resultSet.next()).thenReturn(true).thenReturn(false); + when(resultSet.getString("name")).thenReturn("器械包F"); + when(resultSet.getString("reviewer")).thenReturn("审核人F"); + when(resultSet.getInt("amount")).thenReturn(6); + + // 执行测试 + List result = packingManager.getReviewerVoAtToday(null, (Date) null, tousseName); + + // 验证结果 + assertNotNull(result); + assertEquals(1, result.size()); + ReviewerVo vo = result.get(0); + assertEquals("器械包F", vo.getTousseName()); + assertEquals("审核人F", vo.getReviewer()); + assertEquals(Integer.valueOf(6), vo.getAmount()); + + // 验证调用 + mockedAcegiHelper.verify(AcegiHelper::getLoginUser); + verify(supplyRoomConfigManager, times(1)).getSystemParamsObj(); + verify(dateQueryAdapter, times(3)).dateConverAdapter2(startDateTime, fmt); + verify(dateQueryAdapter, times(3)).dateConverAdapter2(endDateTime, fmt); + verify(objectDao, times(1)).executeSql(anyString()); + verify(objectDao, data -> { + String sql = data.getAllInvocations().get(0).getArgument(0); + System.out.println(sql); + assertTrue(sql.contains("d.name like '%" +tousseName + "%'")); + }).executeSql(anyString()); + verify(resultSet, times(2)).next(); + verify(resultSet, times(1)).getString("name"); + verify(resultSet, times(1)).getString("reviewer"); + verify(resultSet, times(1)).getInt("amount"); + verify(resultSet).close(); + } + + /** + * 测试用例:TC008 - 自定义器械包分支 * 输入:customTousseDefaultTaskGroup 匹配 * 预期:查询自定义器械包数据 */ @@ -490,4 +628,25 @@ verify(resultSet, times(1)).getInt("amount"); verify(resultSet).close(); } + + /** + * 下面是重载方法的测试 + */ + @Test + public void testOverloadOneParam() throws SQLException { + doReturn(Collections.emptyList()).when(packingManager).getReviewerVoAtToday(anyString(), any(Date.class), anyString()); + packingManager.getReviewerVoAtToday("TASK_GROUP"); + verify(packingManager, data -> { + Date d = data.getAllInvocations().get(1).getArgument(1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + assertEquals(sdf.format(new Date()), sdf.format(d)); + }).getReviewerVoAtToday(eq("TASK_GROUP"), any(Date.class), eq("")); + } + + @Test + public void testOverLoadThreeParam() throws SQLException, ParseException { + doReturn(Collections.emptyList()).when(packingManager).getReviewerVoAtToday(anyString(), any(Date.class), anyString()); + packingManager.getReviewerVoAtToday("", "2025-10-21","包1"); + verify(packingManager).getReviewerVoAtToday("", new SimpleDateFormat("yyyy-MM-dd").parse("2025-10-21"), "包1"); + } }