Parcourir la source

fix(workhours): write required-hours date text

malk il y a 1 semaine
Parent
commit
9ae22d2fe4

+ 3 - 0
mjava-akdsbeisen/src/main/java/com/malk/service/workhours/WorkHoursCalcService.java

@@ -60,6 +60,8 @@ public class WorkHoursCalcService {
     private static final String STATUS_INACTIVE = "离职";
     // prd 应填报人显示名称文本,用于报表按姓名筛选;姓名取自人员档案成员组件显示值
     private static final String REQUIRED_HOURS_EMPLOYEE_NAME = "textField_ms4bzjkm";
+    // prd 应填报日期文本,用于跨表按 yyyyMMdd 精确关联,避免日期组件时区偏移
+    private static final String REQUIRED_HOURS_DATE_TEXT = "textField_mtseezhf";
 
     // prd 外部员工项目参与关系 + 项目经理:项目档案字段
     private static final String PROJECT_SUB_TABLE = "tableField_mkowyn6d";      // 成员子表(人员明细)
@@ -2372,6 +2374,7 @@ public class WorkHoursCalcService {
         JSONObject formData = new JSONObject();
         formData.put("employeeField_mmd8onl4", Arrays.asList(employeeId));
         formData.put("dateField_mmd8onl5", dayTimestamp);
+        formData.put(REQUIRED_HOURS_DATE_TEXT, workDay.format(DateTimeFormatter.BASIC_ISO_DATE));
         formData.put("numberField_mmd8onl6", DAILY_HOURS);
 
         // Manager: 内部=[钉钉直属主管], 外部=当天参与项目的 PM 去重合并

+ 22 - 0
mjava-akdsbeisen/src/test/java/com/malk/service/workhours/WorkHoursCalcServiceTest.java

@@ -1,5 +1,6 @@
 package com.malk.service.workhours;
 
+import com.alibaba.fastjson.JSON;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McException;
@@ -36,6 +37,27 @@ import static org.mockito.Mockito.when;
 
 public class WorkHoursCalcServiceTest {
 
+    @Test
+    public void upsertDailyHoursShouldWriteCompactDateText() {
+        YDClient ydClient = mock(YDClient.class);
+        WorkHoursCalcService service = workHoursService(ydClient);
+        LocalDate workDay = LocalDate.of(2026, 8, 26);
+
+        ReflectionTestUtils.invokeMethod(
+                service,
+                "upsertDailyHours",
+                "employee-1",
+                Collections.emptyList(),
+                workDay,
+                Collections.emptyMap());
+
+        ArgumentCaptor<YDParam> paramCaptor = ArgumentCaptor.forClass(YDParam.class);
+        verify(ydClient).operateData(paramCaptor.capture(), eq(YDConf.FORM_OPERATION.upsert));
+        Map<String, Object> formData = JSON.parseObject(
+                paramCaptor.getValue().getFormDataJson(), Map.class);
+        assertEquals("20260826", formData.get("textField_mtseezhf"));
+    }
+
     @Test
     public void buildCompanyAttributeUpdateShouldNotClearHistoryWhenSourceIsEmpty() {
         Map<String, String> update = WorkHoursCalcService.buildCompanyAttributeUpdate(