import json import logging from datetime import datetime, timedelta from odoo import http, fields from odoo.http import request, Response _logger = logging.getLogger(__name__) class YuThonPhone(http.Controller): # 登录接口 @http.route('/phone/login/v1', type='http', auth="public", csrf=False, cors='*') def ro_base_user_login_v1(self, **kw): """ 手机端登录 当前未考虑承租方情况 """ _logger.info("-----/phone/login/v1---接口收到响应-------") login = kw.get('login') password = kw.get('password') try: # 验证当前数据库中的用户和密码是否存在,如果存在是当前登录用户 uid = request.session.authenticate(request.env.cr.dbname, login, password) except Exception as e: _logger.info(f"接口登录失败: {e}") # 如果不存在验证其他角色,是否为承租方 # property_tenant_information = request.env['property.tenant.information'].sudo().search([('phone', '=', login)]) # if not property_tenant_information: # return_data = {'data': {}, 'code': 401, 'message': '用户名或密码错误'} # else: # return_data = {'data': {'name': property_tenant_information.name, 'id': property_tenant_information.id, # 'phone': property_tenant_information.phone, # 'access': ['物业账单']}, 'code': 200, 'message': '用户名或密码错误'} # return json.dumps(return_data) user_id = request.env['res.users'].sudo().browse(uid) employee_id = user_id.with_company(user_id.company_id.id).employee_id applet_security_setting_ids = request.env['applet.security'].search( [('employee_id', '=', employee_id.id)]).applet_security_setting_ids access_list = [access.name for access in applet_security_setting_ids] _logger.info(f"当前登录用户{user_id.name},权限组{access_list}---") company_list = [] for company in user_id.company_ids: company_dict = { 'state': 1, 'company_id': company.id, 'company_name': company.name, } company_list.append(company_dict) data = { 'name': employee_id.name, 'id': user_id.id, 'access': access_list, 'phone': employee_id.mobile_phone, 'company_data': company_list, } return json.dumps({'data': data, 'code': 200, 'message': ''}) # 我的 @http.route('/phone/myself', type='http', auth="none", csrf=False, cors='*') def phone_myself(self, **kw): """ 手机端--我的 """ _logger.info("-----/phone/myself---接口收到响应-------") employee_id = request.env['hr.employee'].sudo().search([('user_id.id', '=', kw.get('user_id'))]) data = { 'name': employee_id.name, 'employee_id': employee_id.id, 'company_id': employee_id.company_id.name, # 'image': employee_id.image_128, # 后面改成url 'mobile_phone': employee_id.mobile_phone, 'department_id': employee_id.department_id.name, 'job_id': employee_id.job_id.name, 'entry_date': fields.Date.to_string(employee_id.entry_date) if employee_id.entry_date else '', 'company_old': employee_id.company_old if employee_id.company_old else '', } return json.dumps({'data': data, 'code': 200, 'message': ''}) @http.route('/phone/base', type='http', auth="none", csrf=False, cors='*') def phone_base(self, **kw): company_id = kw.get('company_id') employee_id = request.env['hr.employee'].sudo().search([('user_id.id', '=', kw.get('user_id'))]) @http.route('/phone/base/self', type='http', auth="none", csrf=False, cors='*') def phone_base_self(self, **kw): user_id = request.env['res.users'].sudo().browse(kw.get('employee')) employee_id = user_id.with_company(user_id.company_id.id).employee_id applet_security_setting_ids = request.env['applet.security'].sudo().search([('employee_id', '=', employee_id.id)]).applet_security_setting_ids task_ids = request.env['yuthon.will.task'].sudo().search([('users_ids', 'in', [user_id])]) data = [{ '日程': len(task_ids), }] _logger.info(f'{data}-------------------/phone/base/self------------收到请求') return json.dumps({'data': data, 'code': 200, 'message': ''}) @http.route('/phone/base/test', type='http', auth="none", csrf=False, cors='*') def test_phone_base(self, **kw): data = { 'name': kw.get('name'), 'age': kw.get('age'), 'sex': kw.get('sex'), } return json.dumps({'data': data, 'code': 200, 'message': ''}) # 抽签项目列表接口 @http.route('/phone/lottery/list', type='http', auth="none", csrf=False, cors='*') def phone_lottery_list(self): lottery_records = request.env['phone.lottery'].sudo().search([]) data_list = [] for record in lottery_records: data_list.append({ 'id': record.id, 'name': record.name, }) return json.dumps({'data': data_list, 'code': 200, 'message': ''}) @http.route('/phone/lottery/detail', type='http', auth="none", csrf=False, cors='*') def phone_lottery_detail(self, **kw): lottery_record = request.env['phone.lottery'].sudo().search([('id', '=', kw.get('id'))]) data_list = [] # data_list.append({'emp_sum': len(lottery_record.employee_ids)}) for record in lottery_record.employee_ids: data_list.append({ 'emp_id': record.id, 'name': record.name, 'department_id': record.department_id.name }) return json.dumps({'data': data_list, 'code': 200, 'message': ''}) # 创建抽签结果接口 @http.route('/phone/lottery/result', type='http', auth="none", csrf=False, cors='*') def phone_lottery_result(self, **kw): emp_id = request.env['hr.employee'].sudo().search([('id', '=', int(kw.get('emp_id')))]) lottery_id = request.env['phone.lottery'].sudo().search([('id', '=', int(kw.get('lottery_id')))]) now = datetime.now() utc8 = now + timedelta(hours=8) result_str = f'{emp_id.name}-{emp_id.department_id.name}-{utc8.strftime("%Y-%m-%d %H:%M:%S")}' if outcome := lottery_id.outcome: lottery_id.outcome = f'{outcome}{result_str}\n' else: lottery_id.outcome = f'{result_str}\n' return json.dumps({'code': 200, 'message': 'ok'}) @http.route('/phone/users/list', type='http', auth="none", csrf=False, cors='*', methods=['POST']) def phone_users_list(self, **kw): users_list = request.env['res.users'].sudo().search([]) data = [] for user in users_list: if user.name not in ['Administrator']: data.append({ 'name': user.name or '', 'login': user.login or '', 'password': user.login or '' }) return json.dumps({'data': data, 'code': 500, 'message': '请求成功'})