python语言实现半自动排班系统
这里写目录标题
0. 为什么要做这个软件?
相信各位从事人事的dalao们,尤其是门店销售的店长们应该都经历过排班表的痛苦。在网上收集了文本的报班信息(比如说微信聊天)后将其整理为一张表可以说是一个机械重复又费时费力的工作。虽然说可以用共享文档等现有的解决方案,但根据我的了解(以及个人打工经历)大多数店铺采用的还是微信接龙的方式。因此,我设计了一个可以辅助店长们及人事dalao们排班的跨平台软件。
1. 本软件要实现哪些功能?
总目标:将接龙文本制作为排班表格
步骤:
- 识别接龙文本中格式多样的报班时间
- 汇总报班时间,自动得出报班表,并汇总出工时
- 用户对报班表进行修改,最终制作成排班表
- 导出表格
以上的功能需要使用的第三方依赖:pandas(整理数据),wxpython(GUI)
2. 具体功能实现
2.1 识别文本中的格式不一的时间表达方式
没有格式统一这样概念的一般员工们在接龙的时候所使用的报班格式是多种多样的,我在软件设计中看到的就包括但不限于:用小数点作分割符,只写一个月份(2.1-3),不按顺序(2.3 晚,2.1-2.2 通)等非常多让程序员们血压暴涨的格式= =,因此,我们如果要实现一个实用化的系统,第一步便是要做到把这些高血压的情况解决掉。
首先,我们收集报班的时候一般都是确定的时间段的,比如2.16-2.28,这个完全可以在UI中要求用户输入信息。所以我们首先可以通过pandas中的date_range方法实现。
def TimeTranser(StartTimeStr,EndTimeStr):
DatetimeIndex = pd.date_range(StartTimeStr,EndTimeStr,freq='D')
TidyedTimeBox = [DatetimeIndex[0],DatetimeIndex[-1]]
for DateTime in DatetimeIndex:
TidyedTime = "{}.{}".format(DateTime.month,DateTime.day)
TidyedTimeBox.append(TidyedTime)
return TidyedTimeBox
现在,我们已经获得了一个时间的“标准答案”TidyedTimeBox,有了判断标准后就是很简单的文本处理啦~
既然我们设定了这个排班助手软件的应用情景是微信接龙,那么就可以充分利用接龙文本的特征:接龙内容部分每行必定为数字加小数点加空格组成。那么我们就可以用这个性质来判定有效文本的开始位置,这里用FirstInt函数表示。
def FirstInt(line):
LineMess = line.replace('\n','').split('. ')
if((len(LineMess)) == 1):
return False,114514
else:
number = int(LineMess[0])
PersonalMesses = LineMess[1].split(' ')
pre_dels = []
for n,mess in enumerate(PersonalMesses):
if(mess == ''):
pre_dels.append(n)
for i in pre_dels:
del PersonalMesses[i]
return True,number,PersonalMesses
识别完成之后自然就是要将人员的信息进行规范化处理(即将报班分类规整为每个单独的日期),这个步骤实际上是两步,首先分类(早班,晚班,通班等情况),其次规整。分类则以WorkTimeTranslate方法前半部分完成,规整则由TidyTimeStr方法实现:
def WorkTimeTranslate(self):
UsefulData = []
for n in range(len(self.mess)):
if(n == 0):
name = self.mess[n]
else:
UsefulData.append(self.mess[n])
AllPass = self.IsAllPass(UsefulData)
if(AllPass