日常调动审核代码

调动审核规则:

1、调入是否有空编 (分业支相关部门、非分公司和销售中心的部门、分公司、区域销售中心、销售中心本部)

2、基本信息审核

(1)姓名、账号、所在部门室、任职名称 、入司时间
(2) 任职名称的序列(前后是否一致)
(3)职位是否在职位库中
导入需要用的库和表
import pandas as pd 
import numpy as np 
import os 

#最新在岗表、账号信息、用于计算后台人员数的最新在岗表
os.chdir('D:\\重要材料-离职')
df_1=pd.read_excel('20210412 在岗人员基本信息.xlsx',encoding='gbk',usecols=['员工编码','姓名','部门室','职位细分名称','参加地市日期'])
df_count=pd.read_excel('20210412 在岗人员基本信息.xlsx',encoding='gbk',usecols=['员工编码','部门','部门室','是否经理人员','职位细分名称'])
df_2=pd.read_excel('20201224 在岗人员基本信息-所有账号.xlsx',encoding='gbk',usecols=['员工编码','账号'])
编制数只涉及到非经理人员,故保留非经理人员
df_count['是否经理人员']=df_count['是否经理人员'].fillna(0)
df_count['是否经理人员'].value_counts()
导入待审核表
df_3=pd.read_excel('E:\\000师姐工作\\001  人员选拔及调动\\04公司内部调动\\分公司发文调动\\2021年\\盐田分公司\\附件:盐田分公司关于刘庄等2位员工工作职位调整表.xlsx',encoding='gbk')
业支人员对应各部门的员工编号
#客服为1-6个,客响为7-8个,市场部为9-26个,行政为27个
#客服为name_lst[0:6],客响为name_lst[6:8],市场部为name_lst[8:26],行政为name_lst[26:27]
name_lst=['E0021030571','E0021390304','E0021391202','E0021394984','E0021396159','E0021033029','E0021030121','E0021032331','E0021392024','E0021390850','E0021031107','E0021030392','E0021390358','E0021396031','E0021030725','E0021031035','E0021030548','E0021390503','E0021392059','E0021030564','E0021396699','E0021030580','E0021394172','E0021391361','E0021032687','E0021031849','E0021030570']
name_dep_dict={'客户服务中心':name_lst[0:6],'客户响应中心':name_lst[6:8],'市场部':name_lst[8:26],'行政服务中心(安全保卫中心)':name_lst[26:27]}
dep_lst=['市场部','集团客户部','客户服务中心','客户响应中心','行政服务中心(安全保卫中心)']

1、空编计算

(1)调入部门为dep_lst,计算是否有空编
#调入部门为市场部、集团客户部、客户服务中心、客户响应中心、行政,计算实际在岗人数
if df_3['调往部门'][1] in dep_lst:
    if df_3['调往部门'][1]=='集团客户部':
        a=df_count.loc[df_count['员工编码'].isin(name_lst)]['员工编码'].count()  
        b=df_count.loc[(df_count['部门']=='集团客户部')&(df_count['是否经理人员']==0)]['员工编码'].count() 
        a_count=b-a
        print('集团客户部的实际在岗人数为:' +str(b-a)) #集团客户部实际在岗人数,剔除业支人员
    else:
        for i in df_3['调往部门'].unique():
            name_lst=name_dep_dict[i]
            a=df_count.loc[df_count['员工编码'].isin(name_lst)]['员工编码'].count()  
            b=df_count.loc[(df_count['部门']=='%s' %(i))&(df_count['是否经理人员']==0)]['员工编码'].count() 
            a_count=b+a
            print('%s的实际在岗人数为:' %(i)+str(b+a)) #其他部门实际在岗人数,加上业支人员
#计算编制数,并进行比较
a=df_3.loc[0,'调往部门']  
d_count=df_3['员工编号'].count() #d_count为拟调动人数
os.chdir('D:\\linbing\\Desktop')
df_4=pd.read_excel('20201208  各部门(含分公司)编制计划初稿(简).xlsx',encoding='gbk',index_col='部门')
df_4.head(2)
b_count=df_4.loc[a,'算业支后最新编制0311']
if a_count>b_count:
    print('【%s】\n在岗人数为%d.'%(a,a_count))
    print('超过编制数%d.'%(b_count))
    print('【不能调动】')
else:
    print('【%s】在岗人数为%d.'%(a,a_count))
    print('编制数%d.'%(b_count))
    c_count=b_count-a_count
    # print('【可以调动%d人】.'%(c_count))
    if c_count<d_count:
        print('仅能调动%d人。'%(c_count))
    else:
        print('可以调动。')
(2)调入部门为非分公司、非销售中心
a=df_3.loc[0,'调往部门']
#需求部门拟调动人数为d_count
d_count=df_3['员工编号'].count()
a_count=df_count.loc[(df_count['部门']==a)&(df_count['是否经理人员']==0)].count()
a_count
os.chdir('D:\\linbing\\Desktop')
df_4=pd.read_excel('20201208  各部门(含分公司)编制计划初稿(简).xlsx',encoding='gbk',index_col='部门')
df_4.head(2)
b_count=df_4.loc[a,'非经理人员编制']
if a_count[0]>b_count:
    print('【%s】\n在岗人数为%d.'%(a,a_count[0]))
    print('超过编制数%d.'%(b_count))
    print('【不能调动】')
else:
    print('【%s】在岗人数为%d.'%(a,a_count[0]))
    print('编制数%d.'%(b_count))
    c_count=b_count-a_count[0]
    # print('【可以调动%d人】.'%(c_count))
    if c_count<d_count:
        print('仅能调动%d人。'%(c_count))
    else:
        print('可以调动。')

(3)调入部门为分公司
name=['龙岗分公司','宝安分公司','龙华分公司','福田分公司','南山分公司','罗湖分公司','盐田分公司','深汕合作区分公司','前海蛇口自贸区分公司','坪山分公司']
num=[22,22,24,29,27,22,8,4,7,6]#罗湖分公司加两个机动;南山分公司加3个机动。
num_dic=dict(zip(name,num))
for i in range(len(df_3['员工编号'])):
        df_3.loc[i,'xrzmc']=df_3.loc[i,'现任职名称'][0:df_3.loc[i,'现任职名称'].index('(')]
        df_3.loc[i,'rzmc']=df_3.loc[i,'任职名称'][0:df_3.loc[i,'任职名称'].index('(')]
for i in range(len(df_count['员工编码'])):
        df_count.loc[i,'zwxfmc']=df_count.loc[i,'职位细分名称'][0:df_count.loc[i,'职位细分名称'].index('(')]
#对转换前后台人员进行计数
print('转换前后台人员数量是:')
count_pre=(~df_3['xrzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum()
print((~df_3['xrzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum())
#对转换后后台人员进行计数
print('转换后后台人员数量是:')
count_now=(~df_3['rzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum()
print((~df_3['rzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum())

a=df_3.loc[0,'调往部门']
#需求部门拟调动人数为d_count,非经理人员编制数为b_count
d_count=count_now-count_pre
a_count=df_count.loc[(df_count['部门']==a)&(df_count['是否经理人员']==0)&(~df_count['zwxfmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管']))].count()
print('在岗后台人数为%s'%(a_count[0]))
b_count=num_dic[a]
print('%s编制数为%d.'%(a,b_count))
if a_count[0]>b_count and d_count>0:
    print('【%s】\n在岗后台人数为%d.'%(a,a_count[0]))
    print('超过编制数%d.'%(b_count))
    print('【不能调动】')
else:
    print('【%s】在岗人数为%d.'%(a,a_count[0]))
    print('编制数%d.'%(b_count))
    #c_count是空多少个编制
    c_count=b_count-a_count[0]
    # print('【可以调动%d人】.'%(c_count))
    if c_count<d_count:
        print('仅能调动%d人。'%(c_count))
    else:
        print('可以调动。')
(4)调入部门为销售中心(区域)
name=['北区','西区','中区','南区','东区']
num=[25,25,25,35,26]#东区加2个机动。
num_dic=dict(zip(name,num))
#把在岗表中的销售中心的非经理人员提取出来
df_count_temp=df_count.loc[(df_count['部门']=='销售中心') & (df_count['是否经理人员']==0)]
df_count_temp=df_count_temp.reset_index()
for i in range(len(df_count_temp['员工编码'])):
    df_count_temp.loc[i,'调往室']=df_count_temp.loc[i,'部门室'][5:7]
    #把待审核表中的区域名称提取出来
for i in range(len(df_3['员工编号'])):
    df_3.loc[i,'调往室']=df_3.loc[i,'调往室/模块'][0:2]
for i in range(len(df_3['员工编号'])):
        df_3.loc[i,'xrzmc']=df_3.loc[i,'现任职名称'][0:df_3.loc[i,'现任职名称'].index('(')]
        df_3.loc[i,'rzmc']=df_3.loc[i,'任职名称'][0:df_3.loc[i,'任职名称'].index('(')]
for i in range(len(df_count_temp['员工编码'])):
        df_count_temp.loc[i,'zwxfmc']=df_count_temp.loc[i,'职位细分名称'][0:df_count_temp.loc[i,'职位细分名称'].index('(')]
#对转换前后台人员进行计数
print('转换前后台人员数量是:')
count_pre=(~df_3['xrzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum()
print((~df_3['xrzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum())
#对转换后后台人员进行计数
print('转换后后台人员数量是:')
count_now=(~df_3['rzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum()
print((~df_3['rzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum())

a=df_3.loc[0,'调往室']
#需求部门拟调动人数为d_count,非经理人员编制数为b_count
d_count=count_now-count_pre
a_count=df_count_temp.loc[(df_count_temp['调往室']==a)&(~df_count_temp['zwxfmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管']))].count()
print('在岗后台人数为%s'%(a_count[0]))
b_count=num_dic[a]
print('%s编制数为%d.'%(a,b_count))
if a_count[0]>b_count and d_count>0:
    print('【%s】\n在岗后台人数为%d.'%(a,a_count[0]))
    print('超过编制数%d.'%(b_count))
    print('【不能调动】')
else:
    print('【%s】在岗人数为%d.'%(a,a_count[0]))
    print('编制数%d.'%(b_count))
    #c_count是空多少个编制
    c_count=b_count-a_count[0]
    # print('【可以调动%d人】.'%(c_count))
    if c_count<d_count:
        print('仅能调动%d人。'%(c_count))
    else:
        print('可以调动。')
(5)调入部门为销售中心本部
#针对销售中心本部,编制147
#把在岗表中的销售中心的非经理人员提取出来
df_count_temp=df_count.loc[(df_count['部门']=='销售中心') & (df_count['是否经理人员']==0)]
df_count_temp=df_count_temp.reset_index()
for i in range(len(df_count_temp['员工编码'])):
    df_count_temp.loc[i,'调往室']=df_count_temp.loc[i,'部门室'][5:7]
    #把待审核表中的区域名称提取出来
for i in range(len(df_3['员工编号'])):
    df_3.loc[i,'调往室']=df_3.loc[i,'调往室/模块'][0:2]
for i in range(len(df_3['员工编号'])):
        df_3.loc[i,'xrzmc']=df_3.loc[i,'现任职名称'][0:df_3.loc[i,'现任职名称'].index('(')]
        df_3.loc[i,'rzmc']=df_3.loc[i,'任职名称'][0:df_3.loc[i,'任职名称'].index('(')]
for i in range(len(df_count_temp['员工编码'])):
        df_count_temp.loc[i,'zwxfmc']=df_count_temp.loc[i,'职位细分名称'][0:df_count_temp.loc[i,'职位细分名称'].index('(')]
#对转换前后台人员进行计数
print('转换前后台人员数量是:')
count_pre=(~df_3['xrzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum()
print((~df_3['xrzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum())
#对转换后后台人员进行计数
print('转换后后台人员数量是:')
count_now=(~df_3['rzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum()
print((~df_3['rzmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管'])).sum())

a=df_3.loc[0,'调往室']
#需求部门拟调动人数为d_count,非经理人员编制数为b_count
d_count=count_now-count_pre
a_count=df_count_temp.loc[~df_count_temp['调往室'].isin(['北区','西区','中区','南区','东区'])&(~df_count_temp['zwxfmc'].isin(['营业员','营业厅经理','值班经理','网格经理','集团客户经理','集团客户经理主管','社会渠道经理']))].count()
print('在岗后台人数为%s'%(a_count[0]))
b_count=147
print('%s编制数为%d.'%(a,b_count))
if a_count[0]>b_count and d_count>0:
    print('【%s】\n在岗后台人数为%d.'%(a,a_count[0]))
    print('超过编制数%d.'%(b_count))
    print('【不能调动】')
else:
    print('【%s】在岗人数为%d.'%(a,a_count[0]))
    print('编制数%d.'%(b_count))
    #c_count是空多少个编制
    c_count=b_count-a_count[0]
    # print('【可以调动%d人】.'%(c_count))
    if c_count<d_count:
        print('仅能调动%d人。'%(c_count))
    else:
        print('可以调动。')

2、开始审核基本信息

姓名、账号、所在部门室、任职名称 、入司时间是否符合要求
#和在岗表合并
df_test_1=pd.merge(df_3,df_1,how='inner',left_on='员工编号',right_on='员工编码')
df_test_1=pd.merge(df_test_1,df_2,how='inner',left_on='员工编号',right_on='员工编码')

#导入库用于看入司时间是否满一年
import datetime

#生成姓名、账号、所在部门室、任职名称的布尔值
df_test_1['name_test']=(df_test_1['姓名_x']==df_test_1['姓名_y'])
df_test_1['id_test']=(df_test_1['ioffice帐号']==df_test_1['账号'])
df_test_1['depart_test']=(df_test_1['所在部门、室/模块']==df_test_1['部门室'])
df_test_1['rank_test']=(df_test_1['现任职名称']==df_test_1['职位细分名称'])

#核对入司时间
df_test_1['time_test']='符合入司时间要求'
for i in range(len(df_test_1['员工编号'])):
    if (datetime.date(int(df_test_1.loc[i,'参加地市日期'][0:4]),int(df_test_1.loc[i,'参加地市日期'][5:7]),int(df_test_1.loc[i,'参加地市日期'][8:10]))+datetime.timedelta(days=365)).__ge__(datetime.date.today()):
        df_test_1.loc[i,'time_test']='不满足入司时间要求'
#核对入司时间
for i in range(len(df_test_1['员工编号'])):
    if df_test_1.loc[i,'time_test']=='不满足入司时间要求':
        a=df_test_1.loc[i,'序号']
        print('序号%s的入司时间不满足要求。' %(a))

#核对部门室信息
for i in range(len(df_test_1['员工编号'])):
    if df_test_1.loc[i,'depart_test']==False:
        a=df_test_1.loc[i,'序号']
        print('序号%s的部门室错误。' %(a))
        print(df_test_1.loc[i,'部门室'])

#核对账号信息
for i in range(len(df_test_1['员工编号'])):
    if df_test_1.loc[i,'id_test']==False:
        a=df_test_1.loc[i,'序号']
        print('序号%s的id错误。' %(a))
        print(df_test_1.loc[i,'账号'])

#核对姓名信息
for i in range(len(df_test_1['员工编号'])):
    if df_test_1.loc[i,'name_test']==False:
        a=df_test_1.loc[i,'序号']
        print('序号%s的姓名错误。' %(a))
        print(df_test_1.loc[i,'姓名_y'])

#核对职位信息
for i in range(len(df_test_1['员工编号'])):
    if df_test_1.loc[i,'rank_test']==False:
        a=df_test_1.loc[i,'序号']
        print('序号%s的职位名称错误。' %(a))
        print(df_test_1.loc[i,'职位细分名称'])

核对现任职名称和任职名称的序列是否一致(前后是否一致)
for i in range(len(df_test_1['员工编号'])):
    df_test_1.loc[i,'is_same']=(df_test_1.loc[i,'现任职名称'][ df_test_1.loc[i,'现任职名称'].index('(')+1:df_test_1.loc[i,'现任职名称'].index(')')]==df_test_1.loc[i,'任职名称'][ df_test_1.loc[i,'任职名称'].index('(')+1:df_test_1.loc[i,'任职名称'].index(')')])
#核对现任职名称和任职名称信息是否一致
for i in range(len(df_test_1['员工编号'])):
    if df_test_1.loc[i,'is_same']==False:
        a=df_test_1.loc[i,'序号']
        print('序号%s的现任职名称、任职名称不一致。' %(a))

职位名称是否在职位库中
df_position=pd.read_excel('E:\\002  绪晋工作\\2、廉洁风险防控关键职位\\08 2020年关键职位\\附件4:深圳可用的职位名称简版(2020版).xlsx',encoding='gbk')
list_dir=df_position['标准职位名称'].to_list()
df_test_1['是否有该职位名称']=df_test_1.apply(lambda x : '有' if x['任职名称'][0:x['任职名称'].index('(')] in list_dir else '无',axis=1)
print(df_test_1['是否有该职位名称'].value_counts())
print('**************************')
print('以下序号的职位名称没有在标准职位库中')
print(df_test_1.loc[df_test_1['是否有该职位名称']=='无']['序号'])
此代码用于记录日常审核的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值