diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoWei_VerifyReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoWei_VerifyReimbursementServiceImpl.java
index 2aa9c4c7fac0b60858b75edcec7558b4c95443b5..5153921725e3ae2a511334dcb609a31a37c9068e 100644
--- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoWei_VerifyReimbursementServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoWei_VerifyReimbursementServiceImpl.java
@@ -41,6 +41,7 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
 
         log.info(JSONObject.toJSONString(BeanUtil.beanToMap(expenseReimbursementCmd)));
         boolean isMustSelect_SubCommitteeLeader = false;  //鏄惁蹇呭~ 鍒嗙濮旈瀵�
+        boolean isMustSelect_DeputyDirectorOfDepartment = false; //鏄惁蹇呭~ 閮ㄩ棬鍓富浠�
         ReimbursementTypeEnum reimbursementTypeEnum = ReimbursementTypeEnum.getValueByName(expenseReimbursementCmd.getReimbursementType());
         if (ObjectUtils.isEmpty(reimbursementTypeEnum))
             throw ExceptionUtil.getException(null, "鎶ラ攢绫诲瀷閿欒");
@@ -55,6 +56,7 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
                 if (ObjectUtils.isEmpty(fundsTypeEnum))
                     break;
                 boolean isCommunalExpense = FundsTypeEnum.CommunalExpense.equals(fundsTypeEnum);
+                isMustSelect_DeputyDirectorOfDepartment = isCommunalExpense;
                 if (isCommunalExpense) {
                     String eP0_ReimbursementContent = getProjectExtendPropertyValue(instanceId, expenseReimbursementCmd.getFundsProject(), 0);
                     if (ObjectUtils.isEmpty(eP0_ReimbursementContent))
@@ -99,6 +101,10 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
             addSignUserList = expenseReimbursementCmd.getClaimsEndorser().stream().map(s -> UserInfoOut.builder().userNo(s.getClaimsEndorserNo()).userName(s.getClaimsEndorserName()).build()).collect(Collectors.toList());
             checkAddSignerInfo(addSignUserList, AssigneeEnum.SubCommitteeLeader, expenseReimbursementCmd);
         }
+        if (isMustSelect_DeputyDirectorOfDepartment) {
+            addSignUserList = expenseReimbursementCmd.getLeaderEndorser().stream().map(s -> UserInfoOut.builder().userNo(s.getLeaderEndorserNo()).userName(s.getLeaderEndorserName()).build()).collect(Collectors.toList());
+            checkAddSignerInfo(addSignUserList, AssigneeEnum.DeputyDirectorOfDepartment, expenseReimbursementCmd);
+        }
         return "";
     }
 
@@ -116,22 +122,32 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
             //钖祫鏍¢獙鍔犵浜哄繀濉� 澶勭悊閿欒鐮佷负4001
             throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_SAVE_FAILURE, assigneeName + "缂哄皯宸ュ彿鎴栧鍚嶏紒");
         }
-
-        if (assigneeEnum == AssigneeEnum.SubCommitteeLeader) {
-            List<String> userNoList = addSignUserList.stream().map(UserInfoOut::getUserNo).collect(Collectors.toList());
-            for (UserInfoOut user : addSignUserList) {
-                UserInfoQuery query = UserInfoQuery.builder().userNo(user.getUserNo()).pageSize(100).build();
-                query.setInstanceId(instanceId);
-                Pagination<UserInfoOut> userInfoPage = ExternalDataUtil.INSTANCE.getUserInfoPage(query);
-                boolean isContainUser = ObjectUtils.isNotEmpty(userInfoPage.getRecords()) && userInfoPage.getRecords().stream().anyMatch(s -> user.getUserNo().equals(s.getUserNo()));
-                if (isContainUser)
-                    userNoList.remove(user.getUserNo());
+        List<UserInfoOut> userList = null;
+        if (assigneeEnum == AssigneeEnum.DeputyDirectorOfDepartment)
+            userList = ExternalDataUtil.INSTANCE.getUserListInRole(instanceId, assigneeEnum.getName());
+        List<String> userNoList = addSignUserList.stream().map(UserInfoOut::getUserNo).collect(Collectors.toList());
+        for (UserInfoOut user : addSignUserList) {
+            boolean isContainUser = false;
+            switch (assigneeEnum) {
+                case SubCommitteeLeader:
+                    UserInfoQuery query = UserInfoQuery.builder().userNo(user.getUserNo()).pageSize(100).build();
+                    query.setInstanceId(instanceId);
+                    Pagination<UserInfoOut> userInfoPage = ExternalDataUtil.INSTANCE.getUserInfoPage(query);
+                    isContainUser = ObjectUtils.isNotEmpty(userInfoPage.getRecords()) && userInfoPage.getRecords().stream().anyMatch(s -> user.getUserNo().equals(s.getUserNo()));
+                    if (isContainUser)
+                        userNoList.remove(user.getUserNo());
+                    break;
+                case DeputyDirectorOfDepartment:
+                    isContainUser = ObjectUtils.isNotEmpty(userList) && userList.stream().anyMatch(s -> user.getUserNo().equals(s.getUserNo()));
+                    if (isContainUser)
+                        userNoList.remove(user.getUserNo());
+                    break;
             }
-            if (ObjectUtils.isNotEmpty(userNoList))
-                //钖祫鏍¢獙鍔犵浜哄繀濉� 澶勭悊閿欒鐮佷负4001
-                //return PortalResponse.ok(PortalResponseCode.INCOMPLETE_INFO, "闇€瑕佷竴涓�" + assigneeName + "瀹℃壒锛岃閲嶆柊閫夋嫨鍚庢彁浜わ紒");
-                throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_DEL_FAILURE, "閫夋嫨鐨�" + assigneeName + "鑼冨洿涓嶆纭紝璇烽噸鏂伴€夋嫨鍚庢彁浜わ紒");
         }
+        if (ObjectUtils.isNotEmpty(userNoList))
+            //钖祫鏍¢獙鍔犵浜哄繀濉� 澶勭悊閿欒鐮佷负4001
+            //return PortalResponse.ok(PortalResponseCode.INCOMPLETE_INFO, "闇€瑕佷竴涓�" + assigneeName + "瀹℃壒锛岃閲嶆柊閫夋嫨鍚庢彁浜わ紒");
+            throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_DEL_FAILURE, "閫夋嫨鐨�" + assigneeName + "鑼冨洿涓嶆纭紝璇烽噸鏂伴€夋嫨鍚庢彁浜わ紒");
     }
 
 
@@ -242,12 +258,14 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
         }
         return Pagination.fromPage(page);
     }
-    /**缁忚垂绫诲瀷*/
+
+    /**
+     * 缁忚垂绫诲瀷
+     */
     public enum FundsTypeEnum {
         CommunalExpense("鍏敤缁忚垂"),
         RecurringItem("缁忓父鎬ч」鐩�"),
-        OrgDailyOperatingExpense("澶勫鏃ュ父涓氬姟璐�")
-        ;
+        OrgDailyOperatingExpense("澶勫鏃ュ父涓氬姟璐�");
 
 
         /**
@@ -259,8 +277,8 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
             this.name = name;
         }
 
-        public String getName(){
-            return  this.name;
+        public String getName() {
+            return this.name;
         }
 
         /**
@@ -278,7 +296,9 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
         }
     }
 
-    /**鎶ラ攢鍐呭*/
+    /**
+     * 鎶ラ攢鍐呭
+     */
     public enum ReimbursementContentEnum {
         OfficeExpense("鍔炲叕璐�"),
         OfficialVehicle("鍏姟鐢ㄨ溅"),
@@ -287,8 +307,7 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
         ConferenceFee("浼氳璐�"),
         TrainingFee("鍩硅璐�"),
         WelfareExpense_ChildcareOverhead("绂忓埄璐�-鎵樺辜绠$悊璐�"),
-        OfficialReception("鍏姟鎺ュ緟")
-        ;
+        OfficialReception("鍏姟鎺ュ緟");
 
         /**
          * 鏋氫妇灞炴€ц鏄�
@@ -299,8 +318,8 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
             this.name = name;
         }
 
-        public String getName(){
-            return  this.name;
+        public String getName() {
+            return this.name;
         }
 
         /**
@@ -318,10 +337,12 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
         }
     }
 
-    /**鑺傜偣*/
+    /**
+     * 鑺傜偣
+     */
     public enum AssigneeEnum {
-        SubCommitteeLeader("鍒嗙濮旈瀵�", "鍒嗙濮旈瀵煎鏍�")
-        ;
+        SubCommitteeLeader("鍒嗙濮旈瀵�", "鍒嗙濮旈瀵煎鏍�"),
+        DeputyDirectorOfDepartment("閮ㄩ棬鍓富浠�", "閮ㄩ棬鍓富浠诲鏍�");
 
         /**
          * 鏋氫妇灞炴€ц鏄�
@@ -334,12 +355,14 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
             this.nodeName = nodeName;
         }
 
-        public String getName(){
-            return  this.name;
+        public String getName() {
+            return this.name;
         }
-        public String getNodeName(){
-            return  this.nodeName;
+
+        public String getNodeName() {
+            return this.nodeName;
         }
+
         public static AssigneeEnum getValueByNodeName(String nodeName) {
             for (AssigneeEnum anEnum : AssigneeEnum.values()) {
                 if (anEnum.getNodeName().equals(nodeName)) {
@@ -348,6 +371,7 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS
             }
             return null;
         }
+
         public static AssigneeEnum getValueByName(String name) {
             for (AssigneeEnum anEnum : AssigneeEnum.values()) {
                 if (anEnum.getName().equals(name)) {