2022-02-17 16:47:06 +08:00
|
|
|
|
import operator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def social_turnover_salary(param):
|
|
|
|
|
"""
|
|
|
|
|
离职率/人均薪酬水平
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 数据库数据
|
|
|
|
|
Returns:
|
|
|
|
|
result dict 清洗好的数据
|
|
|
|
|
"""
|
|
|
|
|
# Params
|
|
|
|
|
three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False)
|
|
|
|
|
|
|
|
|
|
# Returns
|
|
|
|
|
result = dict()
|
|
|
|
|
|
|
|
|
|
def date_range():
|
|
|
|
|
"""
|
|
|
|
|
评价周期年度区间
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 环境问卷
|
|
|
|
|
Returns:
|
|
|
|
|
result str 区间数据
|
|
|
|
|
"""
|
|
|
|
|
year_begin = three_year_data[0]['年份']
|
|
|
|
|
year_end = three_year_data[2]['年份']
|
|
|
|
|
res = year_begin + '-' + year_end
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
def turnover_ratio(year_param):
|
|
|
|
|
"""
|
|
|
|
|
每年离职比例
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 年度社会问卷数据
|
|
|
|
|
Returns:
|
|
|
|
|
result type 该年度离职比例
|
|
|
|
|
"""
|
|
|
|
|
# 离职率
|
2022-03-08 17:05:26 +08:00
|
|
|
|
total = year_param['员工总数(年底)']
|
2022-02-17 16:47:06 +08:00
|
|
|
|
turnover = year_param['当年离职人数']
|
|
|
|
|
rate = round(turnover / total * 100, 2)
|
|
|
|
|
return str(rate) + '%'
|
|
|
|
|
|
|
|
|
|
def calculate_three_year_data():
|
|
|
|
|
"""
|
|
|
|
|
计算三年数据并转为字符串
|
|
|
|
|
Parameters:
|
|
|
|
|
'-'
|
|
|
|
|
Returns:
|
|
|
|
|
result str 三年数据用顿号隔开
|
|
|
|
|
"""
|
|
|
|
|
res = dict()
|
|
|
|
|
year_turnover = list()
|
|
|
|
|
yart_salary_level = list()
|
|
|
|
|
for item in three_year_data:
|
|
|
|
|
turnover_res = turnover_ratio(item)
|
|
|
|
|
year_turnover.append(turnover_res)
|
|
|
|
|
yart_salary_level.append(item['人均薪酬水平(元/月)'])
|
|
|
|
|
# 列表中元素类型float转str
|
|
|
|
|
yart_salary_level_new = [str(x) for x in yart_salary_level]
|
|
|
|
|
|
|
|
|
|
# Returns-part1
|
|
|
|
|
res['part_01'] = dict()
|
|
|
|
|
res['part_01']['date_range'] = date_range()
|
|
|
|
|
res['part_01']['turnover_ratio'] = '、'.join(year_turnover)
|
|
|
|
|
res['part_01']['year_03'] = three_year_data[2]['年份']
|
|
|
|
|
res['part_01']['industry_indicators'] = None
|
|
|
|
|
res['part_01']['industry_indicators_average'] = None
|
|
|
|
|
res['part_01']['industry_indicators_median'] = None
|
|
|
|
|
res['part_01']['median_comparison'] = None
|
|
|
|
|
|
|
|
|
|
# part2
|
|
|
|
|
res['part_02'] = dict()
|
|
|
|
|
res['part_02']['date_range'] = date_range()
|
|
|
|
|
res['part_02']['salary_level'] = '、'.join(yart_salary_level_new)
|
|
|
|
|
res['part_02']['year_02'] = three_year_data[1]['年份']
|
|
|
|
|
res['part_02']['year_03'] = three_year_data[2]['年份']
|
|
|
|
|
res['part_02']['year01_on_year02'] = round((yart_salary_level[1] / yart_salary_level[0] - 1) * 100, 2)
|
|
|
|
|
res['part_02']['year02_on_year03'] = round((yart_salary_level[2] / yart_salary_level[1] - 1) * 100, 2)
|
|
|
|
|
res['part_02']['industry_indicators'] = None
|
|
|
|
|
res['part_02']['industry_indicators_average'] = None
|
|
|
|
|
res['part_02']['industry_indicators_median'] = None
|
|
|
|
|
res['part_02']['median_comparison'] = None
|
|
|
|
|
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
result['part_01'] = calculate_three_year_data()['part_01']
|
|
|
|
|
result['part_02'] = calculate_three_year_data()['part_02']
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def social_labor_disputes(param):
|
|
|
|
|
"""
|
|
|
|
|
劳动纠纷
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 数据库数据
|
|
|
|
|
Returns:
|
|
|
|
|
result dict 清洗好的数据
|
|
|
|
|
"""
|
|
|
|
|
data = param['社会问卷']
|
|
|
|
|
|
|
|
|
|
# Returns
|
|
|
|
|
result = dict()
|
|
|
|
|
|
|
|
|
|
for item in data['近三年公司数据']:
|
|
|
|
|
if item['劳资纠纷次数'] > 0:
|
|
|
|
|
result['describe'] = '劳动纠纷——公司在近三年出现了劳动纠纷,这影响了公司的社会得分。'
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
result['describe'] = False
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def social_safety_accident(param):
|
|
|
|
|
"""
|
|
|
|
|
安全事故
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 数据库数据
|
|
|
|
|
Returns:
|
|
|
|
|
result dict 清洗好的数据
|
|
|
|
|
"""
|
|
|
|
|
data = param['社会问卷']
|
|
|
|
|
|
|
|
|
|
# Returns
|
|
|
|
|
result = dict()
|
|
|
|
|
|
|
|
|
|
for item in data['近三年公司数据']:
|
|
|
|
|
if item['安全事故发生次数'] > 0:
|
|
|
|
|
result['describe'] = '安全事故——公司在近三年出现了安全事故,这影响了公司的社会得分。。'
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
result['describe'] = False
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def social_training_return(param):
|
|
|
|
|
"""
|
|
|
|
|
提供培训/产品返修、退还、投诉
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 数据库数据
|
|
|
|
|
Returns:
|
|
|
|
|
result dict 清洗好的数据
|
|
|
|
|
"""
|
|
|
|
|
# Params
|
|
|
|
|
three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False)
|
|
|
|
|
|
|
|
|
|
# Returns
|
|
|
|
|
result = dict()
|
|
|
|
|
|
|
|
|
|
def date_range():
|
|
|
|
|
"""
|
|
|
|
|
评价周期年度区间
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 环境问卷
|
|
|
|
|
Returns:
|
|
|
|
|
result str 区间数据
|
|
|
|
|
"""
|
|
|
|
|
year_begin = three_year_data[0]['年份']
|
|
|
|
|
year_end = three_year_data[2]['年份']
|
|
|
|
|
res = year_begin + '-' + year_end
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
def calculate_three_year_data():
|
|
|
|
|
"""
|
|
|
|
|
计算三年数据并转为字符串
|
|
|
|
|
Parameters:
|
|
|
|
|
'-'
|
|
|
|
|
Returns:
|
|
|
|
|
result str 三年数据用顿号隔开
|
|
|
|
|
"""
|
|
|
|
|
res = dict()
|
|
|
|
|
year_training = list()
|
|
|
|
|
year_return = list()
|
|
|
|
|
for item in three_year_data:
|
|
|
|
|
year_training.append(str(item['组织培训次数']))
|
|
|
|
|
year_return.append(str(item['返修、退回、投诉产品对应销售额占全部销售比例(%)']))
|
|
|
|
|
|
|
|
|
|
# Returns-part1
|
|
|
|
|
res['part_01'] = dict()
|
|
|
|
|
res['part_01']['date_range'] = date_range()
|
|
|
|
|
res['part_01']['training_number'] = '、'.join(year_training)
|
|
|
|
|
res['part_01']['year_03'] = three_year_data[2]['年份']
|
|
|
|
|
res['part_01']['industry_indicators'] = None
|
|
|
|
|
|
|
|
|
|
# part2
|
|
|
|
|
res['part_02'] = dict()
|
|
|
|
|
res['part_02']['date_range'] = date_range()
|
|
|
|
|
res['part_02']['salary_level'] = '、'.join(year_return)
|
|
|
|
|
res['part_02']['year_03'] = three_year_data[2]['年份']
|
|
|
|
|
res['part_02']['industry_indicators'] = None
|
|
|
|
|
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
result['part_01'] = calculate_three_year_data()['part_01']
|
|
|
|
|
result['part_02'] = calculate_three_year_data()['part_02']
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def socail_poverty_alleviation(param):
|
|
|
|
|
"""
|
|
|
|
|
扶贫和捐赠
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 数据库数据
|
|
|
|
|
Returns:
|
|
|
|
|
result dict 清洗好的数据
|
|
|
|
|
"""
|
|
|
|
|
data = param['社会问卷']
|
|
|
|
|
|
|
|
|
|
# Returns
|
|
|
|
|
result = dict()
|
|
|
|
|
|
|
|
|
|
for item in data['近三年公司数据']:
|
|
|
|
|
if item['扶贫+捐赠规模(万元)'] > 0:
|
|
|
|
|
result['describe'] = '扶贫和捐赠——公司在近三年有过扶贫、捐赠行为,这提高了公司社会得分。'
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
result['describe'] = False
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def socail_legal_proceedings(param):
|
|
|
|
|
"""
|
|
|
|
|
司法风险
|
|
|
|
|
Parameters:
|
|
|
|
|
param dict 数据库数据
|
|
|
|
|
Returns:
|
|
|
|
|
result dict 清洗好的数据
|
|
|
|
|
"""
|
|
|
|
|
# Parameter
|
|
|
|
|
data = param['风险数据']
|
|
|
|
|
|
|
|
|
|
# Returns
|
|
|
|
|
result = dict()
|
|
|
|
|
|
|
|
|
|
for value in data.values():
|
|
|
|
|
if value > 0:
|
|
|
|
|
result['describe'] = '法律诉讼(作为被告)、被执行人、失信人、行政处罚、税收违法、严重违法、经营异常——经查,公司存在1项或多项的法律诉讼(作为被告)、被执行人、失信人、行政处罚、税收违法、严重违法、经营异常情况,这影响了公司社会分数。'
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
result['describe'] = False
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|