ht пре 3 недеља
родитељ
комит
1f9f2726c7

Разлика између датотеке није приказан због своје велике величине
+ 176 - 92
README.md


+ 6 - 0
pom.xml

@@ -62,6 +62,12 @@
             <version>8.0.33</version>
             <scope>runtime</scope>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+            <version>19.3.0.0</version>
+            <scope>runtime</scope>
+        </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>

+ 8 - 2
src/main/java/com/malk/minglei/service/impl/yida/MingleiDocumentServiceImpl.java

@@ -51,6 +51,7 @@ public class MingleiDocumentServiceImpl implements MingleiDocumentService {
             SECOND_LEVEL_DEPARTMENT_MANAGER_FIELD_ID,
             THIRD_LEVEL_DEPARTMENT_MANAGER_FIELD_ID,
             FOURTH_LEVEL_DEPARTMENT_MANAGER_FIELD_ID,
+            DEPARTMENT_HEAD_FIELD_ID,
             DEPARTMENT_LEADER_FIELD_ID
     };
     private static final int PRECISE_QUERY_PAGE_SIZE = 100;
@@ -255,12 +256,17 @@ public class MingleiDocumentServiceImpl implements MingleiDocumentService {
      * @return 仅包含一级至四级部门主管和部门分管领导的单层结果
      */
     private Map<String, Object> extractDepartmentManagers(Map<String, Object> queryResult) {
+        // 固定返回字段结构,调用方无需再因审批矩阵未配置对应部门而额外判断字段是否存在。
+        Map<String, Object> result = new LinkedHashMap<String, Object>();
+        for (String fieldId : DEPARTMENT_MANAGER_FIELD_IDS) {
+            result.put(fieldId, null);
+        }
+
         Map formData = firstFormData(queryResult.get("records"));
         if (formData == null) {
-            return Collections.emptyMap();
+            return result;
         }
 
-        Map<String, Object> result = new LinkedHashMap<String, Object>();
         for (String fieldId : DEPARTMENT_MANAGER_FIELD_IDS) {
             result.put(fieldId, firstEmployeeUserId(formData.get(fieldId + "_id")));
         }

+ 7 - 0
src/main/resources/application.yml

@@ -39,6 +39,13 @@ minglei:
       password: ${MINGLEI_EMPLOYEE_ROSTER_DATASOURCE_PASSWORD:Minglei_2026}
       driver-class-name: ${MINGLEI_EMPLOYEE_ROSTER_DATASOURCE_DRIVER_CLASS_NAME:com.mysql.cj.jdbc.Driver}
 
+  dictionary:
+    datasource:
+      url: ${MINGLEI_DICTIONARY_DATASOURCE_URL:jdbc:oracle:thin:@10.0.2.61:1521:topprd}
+      username: ${MINGLEI_DICTIONARY_DATASOURCE_USERNAME:DS_QRY}
+      password: ${MINGLEI_DICTIONARY_DATASOURCE_PASSWORD:dsqry}
+      driver-class-name: ${MINGLEI_DICTIONARY_DATASOURCE_DRIVER_CLASS_NAME:oracle.jdbc.OracleDriver}
+
 logging:
   file:
     path: ${LOGGING_FILE_PATH:logs}

+ 35 - 0
src/test/java/com/malk/minglei/service/impl/yida/MingleiDocumentServiceImplTest.java

@@ -8,10 +8,15 @@ import com.malk.service.dingtalk.DDClient;
 import com.malk.service.dingtalk.DDClient_Contacts;
 import org.junit.jupiter.api.Test;
 
+import java.lang.reflect.Method;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.mockito.BDDMockito.given;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -19,6 +24,36 @@ import static org.mockito.Mockito.verify;
 
 class MingleiDocumentServiceImplTest {
 
+    /**
+     * 验证未命中审批矩阵时仍返回完整负责人字段,调用方可直接读取字段值。
+     */
+    @Test
+    @SuppressWarnings("unchecked")
+    void extractDepartmentManagersReturnsNullFieldsWhenMatrixHasNoMatch() throws Exception {
+        MingleiDocumentServiceImpl service = new MingleiDocumentServiceImpl(
+                mock(YDClient.class),
+                mock(DDClient.class),
+                mock(DDClient_Contacts.class),
+                mock(DDConf.class),
+                new YidaApplicationsProperties(),
+                new ObjectMapper());
+        Map<String, Object> queryResult = new LinkedHashMap<String, Object>();
+        queryResult.put("records", Collections.emptyList());
+
+        Method method = MingleiDocumentServiceImpl.class
+                .getDeclaredMethod("extractDepartmentManagers", Map.class);
+        method.setAccessible(true);
+        Map<String, Object> result = (Map<String, Object>) method.invoke(service, queryResult);
+
+        assertEquals(6, result.size());
+        assertNull(result.get("employeeField_mszdqrl8"));
+        assertNull(result.get("employeeField_mszdqrl9"));
+        assertNull(result.get("employeeField_mszdqrla"));
+        assertNull(result.get("employeeField_mszdqrlb"));
+        assertNull(result.get("employeeField_mualkf6a"));
+        assertNull(result.get("employeeField_mszdqrl3"));
+    }
+
     /**
      * 验证 type 为 0 时会合并当前部门与子部门成员,并保持去重顺序。
      */