|
1 | 1 | import base64 |
2 | 2 | import json |
3 | 3 | import re |
| 4 | +import time |
4 | 5 | from io import BytesIO |
5 | 6 | from itertools import groupby |
6 | 7 | from json.decoder import JSONDecodeError as BaseJSONDecodeError |
@@ -324,7 +325,10 @@ def __request( |
324 | 325 | return self.__request(api_path, rf, headers=headers, need_json=need_json, **kwargs) |
325 | 326 | raise ValueError(f"Error: {resp.text}") |
326 | 327 | if type(res) is dict and res.get("code", "") and res["code"] != "SUCCESS": |
327 | | - raise APIException(detail=f"OA提示: {res['code']}, {res.get('errMsg', '')}") |
| 328 | + error_msg = f"OA提示: {res['code']}, {res.get('errMsg', '')};" |
| 329 | + if api_settings.DEBUG: |
| 330 | + error_msg = f"{error_msg}\n{json.dumps(res)}" |
| 331 | + raise APIException(detail=error_msg) |
328 | 332 | return res |
329 | 333 |
|
330 | 334 | def _get_oa(self, api: str, params: dict = None, headers: dict = None, need_json=True): |
@@ -801,3 +805,68 @@ def recover(self, request_id): |
801 | 805 | resp = self._post_oa(api_path, post_data=post_data) |
802 | 806 | _ = {"code": "SUCCESS", "errMsg": {}} # noqa |
803 | 807 | return resp |
| 808 | + |
| 809 | + def withdraw(self, request_id, remind="0", remark: str = ""): |
| 810 | + """ |
| 811 | + 流程撤回 |
| 812 | + :param request_id: |
| 813 | + :param remind: 是否提醒 0:不提醒 1:提醒 |
| 814 | + :param remark: 备注 |
| 815 | + :return: |
| 816 | + """ |
| 817 | + api_path = "/api/workflow/paService/withdrawRequest" |
| 818 | + post_data = { |
| 819 | + "isremind": remind, # 是否提醒 0:不提醒 1:提醒 |
| 820 | + "remark": remark, |
| 821 | + "requestId": request_id, |
| 822 | + } |
| 823 | + res = self._post_oa(api_path, post_data=post_data) |
| 824 | + return res |
| 825 | + |
| 826 | + def delete(self, request_id): |
| 827 | + """ |
| 828 | + 删除流程 |
| 829 | + -- OA功能实践,退回到创建节点可删除流程 |
| 830 | + -- 注意,需要OA在后台流程配置开启对应功能 |
| 831 | + -- 后端应用中心 > 流程引擎 > 路径管理 > 路径设置 > ${找到相关流程} > 基础设置 > 功能设置 > 退回到创建节点可删除流程 开启 |
| 832 | + :param request_id: |
| 833 | + :return: |
| 834 | + """ |
| 835 | + api_path = "/api/workflow/paService/deleteRequest" |
| 836 | + post_data = {"requestId": request_id} |
| 837 | + res = self._post_oa(api_path, post_data=post_data) |
| 838 | + return res |
| 839 | + |
| 840 | + def get_operate_buttons(self, request_id): |
| 841 | + """ |
| 842 | + 获取用户在当前流程的操作按钮 |
| 843 | + :return: |
| 844 | + """ |
| 845 | + # 1.获取OA loadForm 参数 |
| 846 | + load_form_api = "/api/workflow/reqform/loadForm" |
| 847 | + timestamp = f"{int(time.time() * 1000)}" |
| 848 | + load_form_body = { |
| 849 | + "preloadkey": timestamp, |
| 850 | + "requestid": request_id, |
| 851 | + "timestamp": timestamp, |
| 852 | + } |
| 853 | + load_form_data = self._post_oa(load_form_api, post_data=load_form_body) |
| 854 | + if not load_form_data.get("params", {}).get("verifyRight", False): |
| 855 | + raise APIException("对不起,您没有该流程的相关权限!") |
| 856 | + |
| 857 | + # 2.获取OA流程的菜单按钮 |
| 858 | + secret_data = { |
| 859 | + "signatureSecretKey": load_form_data["params"]["signatureSecretKey"], |
| 860 | + "signatureAttributesStr": load_form_data["params"]["signatureAttributesStr"], |
| 861 | + "requestType": load_form_data["params"]["requestType"], |
| 862 | + } |
| 863 | + right_menu_api = "/api/workflow/reqform/rightMenu" |
| 864 | + right_menu_body = { |
| 865 | + "requestid": request_id, |
| 866 | + **secret_data, |
| 867 | + } |
| 868 | + right_menu_data = self._post_oa(right_menu_api, post_data=right_menu_body) |
| 869 | + if right_menu_data.get("verifyFailMsg"): |
| 870 | + raise APIException(right_menu_data["verifyFailMsg"]) |
| 871 | + |
| 872 | + return right_menu_data |
0 commit comments