OdooDigitizationService/addons/tx_cms_upgrade/controllers/expert_database.py

185 lines
7.4 KiB
Python

# -*- 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/<int: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/<model("tx.expert.database"):obj>', 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)