class PrivateAPIService(BasePrivateApiService):
def execute(self, **kwargs):
begin_date = kwargs.get("begin_date") # 开始时间
begin_date_new = begin_date.replace("-", "")
end_date = kwargs.get("end_date") # 结束时间
end_date_new = end_date.replace("-", "")
sub_org = kwargs.get("sub_org") # 单位
sub_org_industry_level = kwargs.get("sub_org_industry_level") # 新增:单位所属层级
emp_name = kwargs.get("emp_name") # 新增:员工姓名
position_level = kwargs.get("position_level")
highest_education = kwargs.get("highest_education")
is_on_job = kwargs.get("is_on_job")
is_head_emp = kwargs.get("is_head_emp")
is_senior_emp = kwargs.get("is_senior_emp")
is_full_external_director = kwargs.get("is_full_external_director")
is_technology = kwargs.get("is_technology")
national_technology_type = kwargs.get("national_technology_type")
is_directly_research = kwargs.get("is_directly_research")
is_fresh_graduate_career = kwargs.get("is_fresh_graduate_career")
# 构建基本的过滤器 - 只包含必填条件
filter_ = {
"month": {"gte": begin_date_new, "lte": end_date_new},
"depart_id": {"child_include": sub_org}
}
# 添加可选过滤条件 - 确保它们与必填条件组合使用
optional_filters = {
"position_level": position_level,
"highest_education": highest_education,
"is_on_job": is_on_job,
"is_head_emp": is_head_emp,
"is_senior_emp": is_senior_emp,
"is_full_external_director": is_full_external_director,
"is_technology": is_technology,
"national_technology_type": national_technology_type,
"is_directly_research": is_directly_research,
"is_fresh_graduate_career": is_fresh_graduate_career,
"emp_name": emp_name
}
# 只添加非None且非空字符串的过滤条件
for key, value in optional_filters.items():
if value is not None and (not isinstance(value, str) or value.strip() != ""):
filter_[key] = value
# 打印最终使用的过滤器
print("Final filter:", filter_)
# 获取表三的数据【计算发薪次数,构造{"证件号码": "单位名称"}】
report_emp_income_list = ModelUtil.list(
"ReportEmpIncomeInfo",
filter_,
fields_key=[
"id_card",
"sub_org_name",
"emp_name",
"department",
"position_level",
"highest_education",
"is_on_job",
"is_head_emp",
"is_senior_emp",
"is_full_external_director",
"is_technology",
"national_technology_type",
"is_directly_research",
"is_fresh_graduate_career",
"basic_salary",
"achievement_bonus",
"term_incentive_income",
"other_money_income",
"subsidy_income",
"deferred_income",
"one_time_reward",
"tax_before_income",
"long_term_incentive_income",
"total_income"
],
extra_property={"role":"all"}
)
# 打印 ReportEmpIncomeInfo 的 id_card
print("ReportEmpIncomeInfo id_card:", [rep_["id_card"] for rep_ in report_emp_income_list])
id_card_name = collections.defaultdict(str) # {"证件号码": "单位名称"}
id_card_count = {} # {"证件号码": 出现的次数}
for rep_ in report_emp_income_list:
id_card = rep_["id_card"] # 证件号码
if id_card not in id_card_count:
id_card_count[id_card] = 0
id_card_count[id_card] += 1
id_card_name[id_card] = rep_["sub_org_name"]
# 根据是否提供 sub_org_industry_level 来调整查询条件
filter_report_org = {"month": begin_date_new, "depart_id": {"child_include": sub_org}}
if sub_org_industry_level is not None: # 如果提供了单位所属层级,则加入过滤条件
filter_report_org["sub_org_industry_level"] = sub_org_industry_level
# 获取表一的数据
report_list = ModelUtil.list("ReportOrgInfo", filter_report_org,
fields_key=["sub_org_name", "sub_org_industry_level"],
extra_property={"role":"all"})
report_dict = {rep_["sub_org_name"]: rep_["sub_org_industry_level"] for rep_ in report_list} # {"单位名称": "所属层级"}
# 获取人员的数据
emp_list = ModelUtil.list("Employee", filter_report_org,
fields_key=["id", "name", "identity_card"],
extra_property={"role":"all"})
emp_dict = {emp_["identity_card"]: emp_ for emp_ in emp_list} # {"identity_card": 员工信息}
# 月份格式换回筛选器那种中间带-的格式
filter_report_org = {"month": {"gte": begin_date, "lte": end_date}, "depart_id": {"child_include": sub_org}}
# 获取正式的数据
salaryzs_list = ModelUtil.list("salary_base.81", filter_report_org,
fields_key=["employee_id", "n_field74", "n_field75"],
extra_property={"role":"all"}) #
salaryzs_dict = {emp_["employee_id"]: emp_ for emp_ in salaryzs_list} # {"employee_id": 数据}
# 获取领导的数据
salaryld_list = ModelUtil.list("salary_base.163", filter_report_org,
fields_key=["employee_id", "n_field51", "n_field52"],
extra_property={"role":"all"})
salaryld_dict = {emp_["employee_id"]: emp_ for emp_ in salaryld_list} # {"employee_id": 数据}
# 获取总助的数据
salaryzz_list = ModelUtil.list("salary_base.208", filter_report_org,
fields_key=["employee_id", "n_field79", "n_field80"],
extra_property={"role":"all"})
salaryzz_dict = {emp_["employee_id"]: emp_ for emp_ in salaryzz_list} # {"employee_id": 数据}
# 构建用于存储特定字段值的字典
stored_values = {}
# 更新result_list构造逻辑以符合新要求
result_list = [
{
"identity_card": id_key, # 将 id_card 改为 identity_card
"sub_org_name": re.sub(r"\(总部\)|\(本部\)|(总部)|(本部)", "", id_value),
"sub_org_namee": id_value, # 新增字段,包含与 sub_org_name 相同的值
"sub_org_industry_level": report_dict.get(id_value), # 确保包含 sub_org_industry_level
"count_": id_card_count.get(id_key),
"emp_name": rep_.get("emp_name"),
"department": rep_.get("department"),
"position_level": rep_.get("position_level"),
"highest_education": rep_.get("highest_education"),
"is_on_job": rep_.get("is_on_job"),
"is_head_emp": rep_.get("is_head_emp"),
"is_senior_emp": rep_.get("is_senior_emp"),
"is_full_external_director": rep_.get("is_full_external_director"),
"is_technology": rep_.get("is_technology"),
"national_technology_type": rep_.get("national_technology_type"),
"is_directly_research": rep_.get("is_directly_research"),
"is_fresh_graduate_career": rep_.get("is_fresh_graduate_career"),
"basic_salary": rep_.get("basic_salary"),
"achievement_bonus": rep_.get("achievement_bonus"),
"term_incentive_income": rep_.get("term_incentive_income"),
"other_money_income": rep_.get("other_money_income"),
"subsidy_income": rep_.get("subsidy_income"),
"deferred_income": rep_.get("deferred_income"),
"one_time_reward": rep_.get("one_time_reward"),
"tax_before_income": rep_.get("tax_before_income"),
"long_term_incentive_income": rep_.get("long_term_incentive_income"),
"total_income": rep_.get("total_income"),
"id": emp_dict.get(id_key, {}).get("id"), # 加入 Employee 的 id
"name": emp_dict.get(id_key, {}).get("name"), # 加入 Employee 的 name
"salary_063": (
(stored_values.setdefault("salaryzs_063", {}).setdefault(emp_dict.get(id_key, {}).get("id"), salaryzs_dict.get(emp_dict.get(id_key, {}).get("id"), {}).get("n_field74", 0))) +
(stored_values.setdefault("salaryld_063", {}).setdefault(emp_dict.get(id_key, {}).get("id"), salaryld_dict.get(emp_dict.get(id_key, {}).get("id"), {}).get("n_field51", 0))) +
(stored_values.setdefault("salaryzz_068", {}).setdefault(emp_dict.get(id_key, {}).get("id"), salaryzz_dict.get(emp_dict.get(id_key, {}).get("id"), {}).get("n_field79", 0)))
),
"salary_064": (
(stored_values.setdefault("salaryzs_064", {}).setdefault(emp_dict.get(id_key, {}).get("id"), salaryzs_dict.get(emp_dict.get(id_key, {}).get("id"), {}).get("n_field75", 0))) +
(stored_values.setdefault("salaryld_064", {}).setdefault(emp_dict.get(id_key, {}).get("id"), salaryld_dict.get(emp_dict.get(id_key, {}).get("id"), {}).get("n_field52", 0))) +
(stored_values.setdefault("salaryzz_069", {}).setdefault(emp_dict.get(id_key, {}).get("id"), salaryzz_dict.get(emp_dict.get(id_key, {}).get("id"), {}).get("n_field80", 0)))
)
}
for id_key, id_value in id_card_name.items()
for rep_ in report_emp_income_list if rep_["id_card"] == id_key
]
return {"list": result_list, "count": len(result_list)}
代码中实现emp_name过滤生效