|
@@ -2,6 +2,7 @@ package com.malk.service.workhours;
|
|
|
|
|
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
|
|
+import com.malk.server.common.McException;
|
|
|
import com.malk.server.dingtalk.DDR_New;
|
|
import com.malk.server.dingtalk.DDR_New;
|
|
|
import com.malk.server.workhours.TimeCardApprovalStartRequest;
|
|
import com.malk.server.workhours.TimeCardApprovalStartRequest;
|
|
|
import com.malk.server.workhours.WHConf;
|
|
import com.malk.server.workhours.WHConf;
|
|
@@ -84,12 +85,13 @@ class ReSubmitApprovalServiceTest {
|
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ attachOpenMonth(service);
|
|
|
|
|
|
|
|
TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
|
request.setFormUuid("FORM-APPROVAL");
|
|
request.setFormUuid("FORM-APPROVAL");
|
|
|
request.setProcessCode("PROCESS-APPROVAL");
|
|
request.setProcessCode("PROCESS-APPROVAL");
|
|
|
request.setDeptId("dept-request");
|
|
request.setDeptId("dept-request");
|
|
|
- request.setFormDataJson("{\"textField_test\":\"value\"}");
|
|
|
|
|
|
|
+ request.setFormDataJson("{\"textField_mmd2lv0y\":\"202609\",\"textField_test\":\"value\"}");
|
|
|
|
|
|
|
|
assertTrue(service.startApproval(request));
|
|
assertTrue(service.startApproval(request));
|
|
|
|
|
|
|
@@ -116,16 +118,17 @@ class ReSubmitApprovalServiceTest {
|
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ attachOpenMonth(service);
|
|
|
TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
|
request.setFormUuid("FORM-APPROVAL");
|
|
request.setFormUuid("FORM-APPROVAL");
|
|
|
request.setProcessCode("PROCESS-APPROVAL");
|
|
request.setProcessCode("PROCESS-APPROVAL");
|
|
|
- request.setFormDataJson("{\"textField_test\":\"same-hours\"}");
|
|
|
|
|
|
|
+ request.setFormDataJson("{\"textField_mmd2lv0y\":\"202609\",\"textField_test\":\"same-hours\"}");
|
|
|
|
|
|
|
|
assertTrue(service.startApproval(request));
|
|
assertTrue(service.startApproval(request));
|
|
|
assertTrue(service.startApproval(request));
|
|
assertTrue(service.startApproval(request));
|
|
|
verify(ydClient, times(1)).operateData(any(YDParam.class), eq(YDConf.FORM_OPERATION.start));
|
|
verify(ydClient, times(1)).operateData(any(YDParam.class), eq(YDConf.FORM_OPERATION.start));
|
|
|
|
|
|
|
|
- request.setFormDataJson("{\"textField_test\":\"changed-hours\"}");
|
|
|
|
|
|
|
+ request.setFormDataJson("{\"textField_mmd2lv0y\":\"202609\",\"textField_test\":\"changed-hours\"}");
|
|
|
assertTrue(service.startApproval(request));
|
|
assertTrue(service.startApproval(request));
|
|
|
verify(ydClient, times(2)).operateData(any(YDParam.class), eq(YDConf.FORM_OPERATION.start));
|
|
verify(ydClient, times(2)).operateData(any(YDParam.class), eq(YDConf.FORM_OPERATION.start));
|
|
|
}
|
|
}
|
|
@@ -150,10 +153,11 @@ class ReSubmitApprovalServiceTest {
|
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ attachOpenMonth(service);
|
|
|
TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
|
request.setFormUuid("FORM-APPROVAL");
|
|
request.setFormUuid("FORM-APPROVAL");
|
|
|
request.setProcessCode("PROCESS-APPROVAL");
|
|
request.setProcessCode("PROCESS-APPROVAL");
|
|
|
- request.setFormDataJson("{\"textField_test\":\"same-hours\"}");
|
|
|
|
|
|
|
+ request.setFormDataJson("{\"textField_mmd2lv0y\":\"202609\",\"textField_test\":\"same-hours\"}");
|
|
|
|
|
|
|
|
CompletableFuture<Boolean> first = CompletableFuture.supplyAsync(() -> service.startApproval(request));
|
|
CompletableFuture<Boolean> first = CompletableFuture.supplyAsync(() -> service.startApproval(request));
|
|
|
try {
|
|
try {
|
|
@@ -166,6 +170,57 @@ class ReSubmitApprovalServiceTest {
|
|
|
verify(ydClient, times(1)).operateData(any(YDParam.class), eq(YDConf.FORM_OPERATION.start));
|
|
verify(ydClient, times(1)).operateData(any(YDParam.class), eq(YDConf.FORM_OPERATION.start));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void shouldBlockNewApprovalAndResubmitWhileMonthIsLocked() {
|
|
|
|
|
+ YDClient ydClient = mock(YDClient.class);
|
|
|
|
|
+ MonthClosingService monthClosingService = mock(MonthClosingService.class);
|
|
|
|
|
+ when(monthClosingService.isLocked("202609")).thenReturn(true);
|
|
|
|
|
+ WHConf whConf = new WHConf();
|
|
|
|
|
+ whConf.setFormUuidApproval("FORM-APPROVAL");
|
|
|
|
|
+ whConf.setApprovalProcessCode("PROCESS-APPROVAL");
|
|
|
|
|
+ whConf.setApprovalOriginatorUserId("system-user");
|
|
|
|
|
+ ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
|
|
+ ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
|
|
+ ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ ReflectionTestUtils.setField(service, "monthClosingService", monthClosingService);
|
|
|
|
|
+
|
|
|
|
|
+ TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
|
|
|
+ request.setFormUuid("FORM-APPROVAL");
|
|
|
|
|
+ request.setProcessCode("PROCESS-APPROVAL");
|
|
|
|
|
+ request.setFormDataJson("{\"textField_mmd2lv0y\":\"202609\"}");
|
|
|
|
|
+
|
|
|
|
|
+ assertThrows(McException.class, () -> service.startApproval(request));
|
|
|
|
|
+ assertThrows(McException.class, () -> service.resubmit("202609", "user-1", false));
|
|
|
|
|
+ verifyNoInteractions(ydClient);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void shouldBlockRepairApprovalBySubmitMonthWhileSourceMonthIsOpen() {
|
|
|
|
|
+ YDClient ydClient = mock(YDClient.class);
|
|
|
|
|
+ MonthClosingService monthClosingService = mock(MonthClosingService.class);
|
|
|
|
|
+ when(monthClosingService.isLocked("202609")).thenReturn(true);
|
|
|
|
|
+ WHConf whConf = new WHConf();
|
|
|
|
|
+ whConf.setFormUuidApproval("FORM-APPROVAL");
|
|
|
|
|
+ whConf.setApprovalProcessCode("PROCESS-APPROVAL");
|
|
|
|
|
+ whConf.setApprovalOriginatorUserId("system-user");
|
|
|
|
|
+ whConf.setApprovalFillTypeField("radioField_fill_type");
|
|
|
|
|
+ whConf.setApprovalRepairSubmitDateField("dateField_repair_submit");
|
|
|
|
|
+ ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
|
|
+ ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
|
|
+ ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ ReflectionTestUtils.setField(service, "monthClosingService", monthClosingService);
|
|
|
|
|
+
|
|
|
|
|
+ TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
|
|
|
+ request.setFormUuid("FORM-APPROVAL");
|
|
|
|
|
+ request.setProcessCode("PROCESS-APPROVAL");
|
|
|
|
|
+ request.setFormDataJson("{\"textField_mmd2lv0y\":\"202608\",\"radioField_fill_type\":\"补填\",\"dateField_repair_submit\":\"2026-09-22\"}");
|
|
|
|
|
+
|
|
|
|
|
+ assertThrows(McException.class, () -> service.startApproval(request));
|
|
|
|
|
+ verify(monthClosingService).isLocked("202609");
|
|
|
|
|
+ verify(monthClosingService, org.mockito.Mockito.never()).isLocked("202608");
|
|
|
|
|
+ verifyNoInteractions(ydClient);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Test
|
|
@Test
|
|
|
void shouldKeepExplicitRepairFillTypeWhenStartingApproval() {
|
|
void shouldKeepExplicitRepairFillTypeWhenStartingApproval() {
|
|
|
YDClient ydClient = mock(YDClient.class);
|
|
YDClient ydClient = mock(YDClient.class);
|
|
@@ -176,15 +231,17 @@ class ReSubmitApprovalServiceTest {
|
|
|
whConf.setApprovalProcessCode("PROCESS-APPROVAL");
|
|
whConf.setApprovalProcessCode("PROCESS-APPROVAL");
|
|
|
whConf.setApprovalOriginatorUserId("system-user");
|
|
whConf.setApprovalOriginatorUserId("system-user");
|
|
|
whConf.setApprovalFillTypeField("radioField_fill_type");
|
|
whConf.setApprovalFillTypeField("radioField_fill_type");
|
|
|
|
|
+ whConf.setApprovalRepairSubmitDateField("dateField_repair_submit");
|
|
|
|
|
|
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ MonthClosingService monthClosingService = attachOpenMonth(service);
|
|
|
|
|
|
|
|
TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
TimeCardApprovalStartRequest request = new TimeCardApprovalStartRequest();
|
|
|
request.setFormUuid("FORM-APPROVAL");
|
|
request.setFormUuid("FORM-APPROVAL");
|
|
|
request.setProcessCode("PROCESS-APPROVAL");
|
|
request.setProcessCode("PROCESS-APPROVAL");
|
|
|
- request.setFormDataJson("{\"radioField_fill_type\":\"补填\"}");
|
|
|
|
|
|
|
+ request.setFormDataJson("{\"textField_mmd2lv0y\":\"202608\",\"radioField_fill_type\":\"补填\",\"dateField_repair_submit\":\"2026-09-22\"}");
|
|
|
|
|
|
|
|
assertTrue(service.startApproval(request));
|
|
assertTrue(service.startApproval(request));
|
|
|
|
|
|
|
@@ -193,6 +250,8 @@ class ReSubmitApprovalServiceTest {
|
|
|
Map started = com.alibaba.fastjson.JSON.parseObject(
|
|
Map started = com.alibaba.fastjson.JSON.parseObject(
|
|
|
captor.getValue().getFormDataJson(), Map.class);
|
|
captor.getValue().getFormDataJson(), Map.class);
|
|
|
assertEquals("补填", started.get("radioField_fill_type"));
|
|
assertEquals("补填", started.get("radioField_fill_type"));
|
|
|
|
|
+ verify(monthClosingService, org.mockito.Mockito.times(2)).isLocked("202609");
|
|
|
|
|
+ verify(monthClosingService, org.mockito.Mockito.never()).isLocked("202608");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
@Test
|
|
@@ -316,8 +375,10 @@ class ReSubmitApprovalServiceTest {
|
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ attachOpenMonth(service);
|
|
|
|
|
|
|
|
Map<String, Object> formData = new HashMap<>();
|
|
Map<String, Object> formData = new HashMap<>();
|
|
|
|
|
+ formData.put("textField_mmd2lv0y", "202609");
|
|
|
List<Map<String, Object>> rows = new ArrayList<>();
|
|
List<Map<String, Object>> rows = new ArrayList<>();
|
|
|
for (int index = 0; index < 450; index++) {
|
|
for (int index = 0; index < 450; index++) {
|
|
|
rows.add(Collections.singletonMap("numberField_mmacxew9", 1));
|
|
rows.add(Collections.singletonMap("numberField_mmacxew9", 1));
|
|
@@ -351,8 +412,10 @@ class ReSubmitApprovalServiceTest {
|
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ attachOpenMonth(service);
|
|
|
|
|
|
|
|
Map<String, Object> formData = new HashMap<>();
|
|
Map<String, Object> formData = new HashMap<>();
|
|
|
|
|
+ formData.put("textField_mmd2lv0y", "202609");
|
|
|
List<Map<String, Object>> rows = new ArrayList<>();
|
|
List<Map<String, Object>> rows = new ArrayList<>();
|
|
|
for (int index = 0; index < 501; index++) {
|
|
for (int index = 0; index < 501; index++) {
|
|
|
Map<String, Object> row = new HashMap<>();
|
|
Map<String, Object> row = new HashMap<>();
|
|
@@ -394,8 +457,10 @@ class ReSubmitApprovalServiceTest {
|
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
ReSubmitApprovalService service = new ReSubmitApprovalService();
|
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
ReflectionTestUtils.setField(service, "ydClient", ydClient);
|
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
ReflectionTestUtils.setField(service, "whConf", whConf);
|
|
|
|
|
+ attachOpenMonth(service);
|
|
|
|
|
|
|
|
Map<String, Object> formData = new HashMap<>();
|
|
Map<String, Object> formData = new HashMap<>();
|
|
|
|
|
+ formData.put("textField_mmd2lv0y", "202609");
|
|
|
List<Map<String, Object>> rows = new ArrayList<>();
|
|
List<Map<String, Object>> rows = new ArrayList<>();
|
|
|
for (int index = 0; index < 501; index++) {
|
|
for (int index = 0; index < 501; index++) {
|
|
|
rows.add(Collections.singletonMap("numberField_mmd1wu9e", 2));
|
|
rows.add(Collections.singletonMap("numberField_mmd1wu9e", 2));
|
|
@@ -505,6 +570,12 @@ class ReSubmitApprovalServiceTest {
|
|
|
assertEquals(DEFAULT_MANAGER_ID, service.resolveProjectManager("pm-left"));
|
|
assertEquals(DEFAULT_MANAGER_ID, service.resolveProjectManager("pm-left"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private static MonthClosingService attachOpenMonth(ReSubmitApprovalService service) {
|
|
|
|
|
+ MonthClosingService monthClosingService = mock(MonthClosingService.class);
|
|
|
|
|
+ ReflectionTestUtils.setField(service, "monthClosingService", monthClosingService);
|
|
|
|
|
+ return monthClosingService;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private ReSubmitApprovalService managerResolutionService(DDClient ddClient,
|
|
private ReSubmitApprovalService managerResolutionService(DDClient ddClient,
|
|
|
DDClient_Contacts contacts,
|
|
DDClient_Contacts contacts,
|
|
|
YDClient ydClient) {
|
|
YDClient ydClient) {
|