185 lines
7.4 KiB
Python
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)
|
|
|