Browse Source

fix: 部门模式传部门ID给支付宝+员工ID给配额同步

alphah 2 tuần trước cách đây
mục cha
commit
ac0a87feb5

+ 41 - 24
backend/app/plugin/module_payment/expense/institution/controller.py

@@ -468,53 +468,70 @@ async def modify_scope_controller(
         raw_new = data.get("add_owner_id_list") or []
         new_employee_ids = set(str(i) for i in raw_new if i is not None and str(i).strip())
 
-    # ====== 3. 计算差异 ======
-    add_ids = list(new_employee_ids - old_employee_ids)
-    delete_ids = list(old_employee_ids - new_employee_ids)
-    # 全体员工(ALL)模式:支付宝端不需要传员工ID列表,但本地配额同步需要
-    send_ids_to_alipay = new_adapter not in ("EMPLOYEE_ALL",)
+    # ====== 3. 计算员工级差异(用于配额联动) ======
+    add_emp_ids = list(new_employee_ids - old_employee_ids)
+    delete_emp_ids = list(old_employee_ids - new_employee_ids)
+
+    # 提取传给支付宝的原始ID(部门模式传部门ID,员工模式传员工ID) ======
+    alipay_add_ids: list[str] = []
+    alipay_delete_ids: list[str] = []
+    if new_adapter == "EMPLOYEE_DEPARTMENT":
+        dept_ids = data.get("add_owner_id_list") or []
+        alipay_add_ids = [str(d) for d in dept_ids if d]
+    elif new_adapter == "EMPLOYEE_SELECT":
+        alipay_add_ids = list(new_employee_ids - old_employee_ids)
+        alipay_delete_ids = list(old_employee_ids - new_employee_ids)
 
     # ====== 4. 调用支付宝 scope.modify ======
-    # 如果适配类型变更,需先单独改类型(不加员工ID),再增删员工
-    if old_adapter != new_adapter:
-        # 第1步:只改适配类型
+    # 部门模式:需一次性传部门ID,不支持分步
+    if new_adapter == "EMPLOYEE_DEPARTMENT":
+        scope_data = {
+            "enterprise_id": enterprise_id,
+            "adapter_type": "EMPLOYEE_DEPARTMENT",
+            "owner_type": data.get("owner_type", "EMPLOYEE"),
+        }
+        if alipay_add_ids:
+            scope_data["add_owner_id_list"] = alipay_add_ids
+        result = await InstitutionScopeService.scope_modify_service(
+            auth=auth, institution_id=institution_id, data=scope_data,
+        )
+    elif old_adapter != new_adapter and new_adapter != "EMPLOYEE_ALL":
+        # SELECT模式 + 适配类型变更:先改类型,再加员工
         await InstitutionScopeService.scope_modify_service(
-            auth=auth,
-            institution_id=institution_id,
+            auth=auth, institution_id=institution_id,
             data={
                 "enterprise_id": enterprise_id,
                 "adapter_type": new_adapter,
                 "owner_type": data.get("owner_type", "EMPLOYEE"),
             },
         )
-        # 第2步:增删员工(ALL模式跳过,支付宝不传员工列表)
-        if send_ids_to_alipay and (add_ids or delete_ids):
+        if alipay_add_ids or alipay_delete_ids:
             scope_data = {
                 "enterprise_id": enterprise_id,
                 "adapter_type": new_adapter,
                 "owner_type": data.get("owner_type", "EMPLOYEE"),
             }
-            if add_ids:
-                scope_data["add_owner_id_list"] = add_ids
-            if delete_ids:
-                scope_data["delete_owner_id_list"] = delete_ids
+            if alipay_add_ids:
+                scope_data["add_owner_id_list"] = alipay_add_ids
+            if alipay_delete_ids:
+                scope_data["delete_owner_id_list"] = alipay_delete_ids
             result = await InstitutionScopeService.scope_modify_service(
                 auth=auth, institution_id=institution_id, data=scope_data,
             )
         else:
             result = {"result": True}
     else:
-        # 适配类型不变,直接增删员工(ALL模式跳过)
-        if send_ids_to_alipay and (add_ids or delete_ids):
+        # ALL模式 或 类型不变
+        if alipay_add_ids or alipay_delete_ids:
             scope_data = {
                 "enterprise_id": enterprise_id,
                 "adapter_type": new_adapter,
                 "owner_type": data.get("owner_type", "EMPLOYEE"),
             }
-            if add_ids:
-                scope_data["add_owner_id_list"] = add_ids
-            if delete_ids:
-                scope_data["delete_owner_id_list"] = delete_ids
+            if alipay_add_ids:
+                scope_data["add_owner_id_list"] = alipay_add_ids
+            if alipay_delete_ids:
+                scope_data["delete_owner_id_list"] = alipay_delete_ids
             result = await InstitutionScopeService.scope_modify_service(
                 auth=auth, institution_id=institution_id, data=scope_data,
             )
@@ -539,8 +556,8 @@ async def modify_scope_controller(
             scope_info = {
                 "adapter_type": new_adapter,
                 "owner_type": "EMPLOYEE",
-                "add_owner_id_list": add_ids,
-                "delete_owner_id_list": delete_ids,
+                "add_owner_id_list": add_emp_ids,
+                "delete_owner_id_list": delete_emp_ids,
             }
             await InstitutionService._sync_modify_quotas_by_scope(
                 auth=auth,