# -*- coding: utf-8 -*- import json import math import logging from odoo import http, tools from .tool import MakeResponse _logger = logging.getLogger(__name__) class expertDatabase(http.Controller): @http.route(['/expert_database'], type='http', auth="public", website=True) def list(self, **kw): return http.request.render('tx_cms_upgrade.expertDatabase', {}) @http.route(['/expert_database_data', '/expert_database_data/page/'], type='http', auth="public", website=True) def listData(self, good_id=0, industry_id=0, service_id=0, initial_letter="", page=1, **kw): database_obj = http.request.env["tx.expert.database"].sudo() _post_per_page = 9 page = int(page) goodList = [] serviceList = [] industryList = [] initialLetterList = [{"id": 0, "name": "全部", "active": False if initial_letter else True}] level = {"primary": "初级", "middle": "中级", "senior": "高级"} good_id = int(good_id) service_id = int(service_id) industry_id = int(industry_id) good_ids = database_obj.good_ids.sudo().search([("code", "=", "GF")])._get_dict_values() for index, item in enumerate(good_ids): item["active"] = True if item["id"] == good_id else False goodList.append(item) service_ids = database_obj.service_ids.sudo().search([("code", "=", "GS")])._get_dict_values() for index, item in enumerate(service_ids): item["active"] = True if item["id"] == service_id else False serviceList.append(item) industry_ids = database_obj.industry_ids.sudo().search([("code", "=", "GI")])._get_dict_values() for index, item in enumerate(industry_ids): item["active"] = True if item["id"] == industry_id else False industryList.append(item) domain = [] if industry_id: domain.append(("industry_ids", "in", [industry_id])) if good_id: domain.append(("good_ids", "in", [good_id])) if service_id: domain.append(("service_ids", "in", [service_id])) if initial_letter and initial_letter != "全部": domain.append(("initial_letter", "=", initial_letter)) databaseAll = database_obj.search(domain) letter_list = [] for database in databaseAll: if database.initial_letter not in letter_list: letter_list.append(database.initial_letter) index = 1 for letter in letter_list: initialLetterList.append({ "id": index, "name": letter, "active": True if initial_letter == letter else False}) index += 1 if initialLetterList.__len__() == 1: initialLetterList[0]["active"] = True pager = tools.lazy( lambda: http.request.website.pager(url='/expert_database_data', total=databaseAll.__len__(), page=page, step=_post_per_page, scope=_post_per_page, url_args=kw)) databaseData = databaseAll[(page - 1) * _post_per_page:page * _post_per_page] records = [] for database in databaseData: records.append({ "id": database.id, "imgUrl": http.request.website.image_url(database, 'img'), "name": database.name, "companyName": database.company_name, "briefIntroduction": str(database.brief_introduction), "level": database.level, "serviceIds": [service_id.name for service_id in database.service_ids], "typeIds": [type_id.name for type_id in database.type_ids], "goodIds": [good_id.name for good_id in database.good_ids], "industryIds": [industry_id.name for industry_id in database.industry_ids], }) return MakeResponse.success({ "goodList": goodList, "serviceList": serviceList, "industryList": industryList, "initialLetterList": initialLetterList, "records": records, "good_id": good_id, "service_id": service_id, "industry_id": industry_id, "initial_letter": initial_letter, "pager": pager._value, 'level': level, }) @http.route('/expert_database_details/', type='http', auth="public", website=True) def object(self, obj, **kw): return http.request.render('tx_cms_upgrade.expertDatabaseDetails', { 'object': obj }) # 有数了 -- 专家库 列表 @http.route("/tx_base/api/database/list", methods=['POST'], auth='public', csrf=False, website=True, cors="*") def scenes_list(self, **kw): params = json.loads(http.request.httprequest.data.decode("utf-8")) page_num = params.get("pageNum", 1) page_size = params.get("pageSize", 10) expert_name = params.get("expertName", "") field_type = params.get("fieldType", []) technical_type = params.get("technicalType", []) service_type = params.get("serviceType", []) letters_type = params.get("lettersType", "") model_obj = http.request.env["tx.expert.database"].sudo() records = [] domain = [] if technical_type.__len__(): domain.append(("technical_ids", "in", technical_type)) if field_type.__len__(): domain.append(("good_ids", "in", field_type)) if service_type.__len__(): domain.append(("service_ids", "in", service_type)) if expert_name: domain.append(("name", "like", f"%{expert_name}%")) if letters_type: dict_id = http.request.env["tx.data.dict"].sudo().search([("id", "=", letters_type)]) data_ids = [] letters_domain = [] if dict_id.__len__(): letters_domain.append(("initial_letter", "=", dict_id.name)) data_ids += model_obj.search(domain + letters_domain).ids if data_ids.__len__(): domain.append(("id", "in", data_ids)) else: domain.append(("id", "=", 0)) total = model_obj.search_count(domain) offset = (page_num - 1) * page_size if page_num > 1 else 0 dataAll = model_obj.search(domain, offset, page_size) level = {"primary": "初级工程师", "middle": "中级工程师", "senior": "高级工程师"} for data in dataAll: records.append({ "id": data.id, "expertAvatar": f"""{data.get_base_url()}{http.request.website.image_url(data, 'img')}""", "expertName": f"{data.name}", "expertDescription": data.brief_introduction, "company": data.company_name, "engineerType": level[data.level], "serviceType": ",".join([service_id.name for service_id in data.service_ids]), "expertType": ",".join([type_id.name for type_id in data.type_ids]), "fieldType": ",".join([good_id.name for good_id in data.good_ids]), "industryType": ",".join([industry_id.name for industry_id in data.industry_ids]), }) pages = math.ceil(total / page_size) return MakeResponse.opontekr_success(records, total, pages)