Files
gzth/yuthon_wechat/models/wecom_apps.py
T
2024-08-21 22:09:08 +08:00

224 lines
9.0 KiB
Python

import logging
import json
from datetime import datetime, timedelta
from odoo import models, fields
_logger = logging.getLogger(__name__)
class WeComApps(models.Model):
_name = "wecom.apps"
name = fields.Char(string="应用名称")
corpid = fields.Char(string="corpid")
agent_id = fields.Char(string="agent_id")
corpsecret = fields.Char(string="corpsecret")
company_id = fields.Many2one("res.company", string="公司")
access_token = fields.Char(string="access_token", default="1")
token_expiration_time = fields.Datetime(string="Token失效时间")
wx_work_image_path = fields.Char(string="企业微信图片保存地址")
def sync_access_token(self):
"""
获取access_token
:return: access_token
"""
data = {
"corpid": self.corpid,
"corpsecret": self.corpsecret
}
access_token = self.sudo().env['wecom.api'].function_get_access_token(data)
self.access_token = access_token
return access_token
def sync_function_api(self, apps_type, api_function, data):
wecom_app = self.sudo().env["wecom.apps.config"].search([("wecom_apps_type", "=", apps_type)], limit=1).wecom_apps_id
result_data = self.sudo().env['wecom.api'].function_http_request(api_function, data, wecom_app.access_token)
if result_data.get("errcode", 0) in [40014, 42001]:
wecom_app.sync_access_token()
wecom_app = self.sudo().env["wecom.apps.config"].search([("wecom_apps_type", "=", apps_type)],limit=1).wecom_apps_id
result_data = self.sudo().env['wecom.api'].function_http_request(api_function, data, wecom_app.access_token)
return result_data
def sync_department_list(self):
wecom_departments = []
result_data = self.sync_function_api("contacts", "DEPARTMENT_LIST", {})
if result_data["errcode"] == 0:
wecom_departments = result_data.get("department", [])
return True, wecom_departments
return False, result_data
def sync_user_list(self, department_id):
user_list = []
data = {
"department_id": department_id
}
result_data = self.sync_function_api("contacts", "USER_LIST", data)
if result_data["errcode"] == 0:
user_list = result_data.get("userlist", [])
return True, user_list
return False, result_data
def sync_send_message(self, user_id, message):
wecom_app = self.sudo().env["wecom.apps.config"].search([("wecom_apps_type", "=", "message_send")], limit=1).wecom_apps_id
data = {
'touser': user_id,
'msgtype': 'text',
'agentid': wecom_app.agent_id,
'text': {
'content': message
}
}
result_data = self.sync_function_api("message_send", "MESSAGE_SEND", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data
# def sync_user_create(self, user_id=None, name=None, mobile=None, biz_mail=None, department=None):
# data = {}
# if user_id:
# data.update({'userid': user_id})
# if name:
# data.update({'name': name})
# if mobile:
# data.update({'mobile': mobile})
# if biz_mail:
# data.update({'biz_mail': biz_mail})
# if department:
# data.update({'department': [department]})
# result_data = self.sync_function_api("user_create", "USER_CREATE", data)
# if result_data.get("errcode", None) == 0:
# return True, result_data.get("errmsg", "")
# return False, result_data.get("errmsg", "")
def sync_user_update(self, user_id=None, name=None, mobile=None, biz_mail=None, department=None):
data = {}
if user_id:
data.update({'userid': user_id})
if name:
data.update({'name': name})
if mobile:
data.update({'mobile': mobile})
if biz_mail:
data.update({'biz_mail': biz_mail})
if department:
data.update({'department': [department]})
result_data = self.sync_function_api("user_create", "USER_UPDATE", data)
if result_data.get("errcode", None) == 0:
return True, result_data.get("errmsg", "")
if result_data.get("errcode", None) in [60111]:
"""
{'errcode': 60111, 'errmsg': 'invalid string value `test111`. userid not found, hint: [1720622364419201522972678], from ip: 82.156.218.102, more info at https://open.work.weixin.qq.com/devtool/query?e=60111'}
"""
result_data = self.sync_function_api("user_create", "USER_CREATE", data)
if result_data.get("errcode", None) == 0:
return True, result_data.get("errmsg", "")
return False, result_data.get("errmsg", "")
def sync_department_update(self, wecom_department_id=None, name=None, name_en=None, parentid=None):
data = {}
if wecom_department_id:
data.update({'id': wecom_department_id})
if name:
data.update({'name': name})
if name_en:
data.update({'name_en': name_en})
if parentid:
data.update({'parentid': parentid})
if wecom_department_id:
result_data = self.sync_function_api("user_create", "DEPARTMENT_UPDATE", data)
else:
result_data = self.sync_function_api("user_create", "DEPARTMENT_CREATE", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data.get("errmsg", "")
def sync_meeting_create(self, admin_userid, title, meeting_start, meeting_duration, *args, **kwargs):
data = {
"admin_userid": admin_userid,
"title": title,
"meeting_start": meeting_start,
"meeting_duration": meeting_duration,
}
data.update(kwargs)
result_data = self.sync_function_api("meeting", "MEETING_CREATE", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data.get("errmsg", "")
def sync_meeting_update(self, meetingid, *args, **kwargs):
data = {
"admin_userid": meetingid,
}
data.update(kwargs)
result_data = self.sync_function_api("meeting", "MEETING_UPDATE", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data.get("errmsg", "")
def sync_meeting_cancel(self, meetingid, sub_meetingid=None):
data = {
"meetingid": meetingid,
}
if sub_meetingid:
data.update({'sub_meetingid': sub_meetingid})
result_data = self.sync_function_api("meeting", "MEETING_CANCEL", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data.get("errmsg", "")
def sync_meeting_get_info(self, meetingid=None, meeting_code=None):
data = {}
if meetingid:
data.update({'meetingid': meetingid})
if meeting_code:
data.update({'meeting_code': meeting_code})
result_data = self.sync_function_api("meeting", "MEETING_GET_INFO", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data.get("errmsg", "")
def sync_get_realtime_attendee_list(self, meetingid, sub_meetingid=None, cursor=None, limit=None):
data = {
"meetingid": meetingid
}
if sub_meetingid:
data.update({'sub_meetingid': sub_meetingid})
if cursor:
data.update({'cursor': cursor})
if limit:
data.update({'limit': limit})
result_data = self.sync_function_api("meeting", "MEETING_GET_REALTIME_ATTENDEE_LIST", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data.get("errmsg", "")
def sync_get_user_meetingid(self, userid, cursor=None, limit=None, begin_time=None, end_time=None):
data = {
"userid": userid
}
if cursor:
data.update({'cursor': cursor})
if limit:
data.update({'limit': limit})
if begin_time:
data.update({'begin_time': begin_time})
if end_time:
data.update({'end_time': end_time})
result_data = self.sync_function_api("meeting", "MEETING_GET_USER_MEETINGID", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data.get("errmsg", "")
def sync_get_attendee_list(self, meetingid, *args, **kwargs):
data = {
"meetingid": meetingid
}
data.update(kwargs)
result_data = self.sync_function_api("meeting", "GET_ATTENDEE_LIST", data)
if result_data.get("errcode", None) == 0:
return True, result_data
return False, result_data.get("errmsg", "")