Ejemplo n.º 1
0
def schedule_init_commit():
    # print request.json['year'], request.json['month'], request.json['staff']
    year = int(request.json['year'])
    month = int(request.json['month'])

    if month == 1:
        start = datetime.date(year-1, 12, 26)
    else:
        start = datetime.date(year, month-1, 26)
    
    days = rrule(DAILY, dtstart=start, until=datetime.date(year, month, 25)).count()

    #staff [u'1,张三,12-26,1', u'2,李四,12-27,1', u'3,王五,12-28,1', u'4,候六,12-29,1',  u'5,孟七,12-26,2']

    # 排班处理
    separator = ','
    for staff in request.json['staff']:
        day = [0 for i in xrange(1, days+1)] # 数组初值0,代表全月休息

        id, name, start_date, type = staff.split(',')

        if int(type) == 1: # 1轮班,2白班 
            start_date_m, start_date_d = start_date.split('-')

            if month == 1:
                start_day_id = rrule(DAILY, dtstart=start, \
                    until=datetime.date(year-1, int(start_date_m), int(start_date_d))).count()
            else:
                start_day_id = rrule(DAILY, dtstart=start, \
                    until=datetime.date(year, int(start_date_m), int(start_date_d))).count()
        
            # 排班算法,4人2班,对4求余
            '''
            if start_day_id == 1:
                for i in xrange(1, days+1):
                    day[i-1] = (i % 4) if (i % 4) in [1, 2] else 0
            elif start_day_id == 2:
                for i in xrange(1, days+1):
                    day[i-1] = ((i - 1) % 4) if ((i - 1) % 4) in [1, 2] else 0
            elif start_day_id == 3:
                for i in xrange(2, days+1):
                    day[i-1] = ((i - 2) % 4) if ((i - 2) % 4) in [1, 2] else 0
            elif start_day_id == 4:
                day[0] = 2
                for i in xrange(3, days+1):
                    day[i-1] = ((i - 3) % 4) if ((i - 3) % 4) in [1, 2] else 0
            '''

            # 排班算法, 6人2班, 对6求余, 余2晚班, 余4晚班, 余1早班
            if start_day_id == 1:
                for i in xrange(1, days+1):
                    if (i % 6) == 1:
                        day[i-1] = 1
                    if (i % 6) in [2, 4]:
                        day[i-1] = 2
            elif start_day_id == 2:
                for i in xrange(1, days+1):
                    if ((i -1) % 6) == 1:
                        day[i-1] = 1    
                    if ((i -1) % 6) in [2, 4]:
                        day[i-1] = 2  
            elif start_day_id == 3:
                for i in xrange(2, days+1):
                    if ((i -2) % 6) == 1:
                        day[i-1] = 1    
                    if ((i -2) % 6) in [2, 4]:
                        day[i-1] = 2  
            elif start_day_id == 4:
                day[0]=2
                for i in xrange(3, days+1):
                    if ((i -3) % 6) == 1:
                        day[i-1] = 1    
                    if ((i -3) % 6) in [2, 4]:
                        day[i-1] = 2  
            elif start_day_id == 5:
                day[1] = 2
                for i in xrange(4, days+1):
                    if ((i -4) % 6) == 1:
                        day[i-1] = 1    
                    if ((i -4) % 6) in [2, 4]:
                        day[i-1] = 2  
            elif start_day_id == 6:
                day[0], day[2] = 2, 2
                for i in xrange(5, days+1):
                    if ((i -5) % 6) == 1:
                        day[i-1] = 1    
                    if ((i -5) % 6) in [2, 4]:
                        day[i-1] = 2  
        else:
            for i, v in enumerate(rrule(DAILY, dtstart=start, until=datetime.date(year, month, 25))):
                if v.weekday() in [0, 1, 2, 5, 6]:
                    day[i] = 1

        #保存数据库
        schedule = Schedule()
        schedule.name = name    
        schedule.year = year
        schedule.month = month
        schedule.days = days
        schedule.type = type
        schedule.list = separator.join([str(i) for i in day])
        schedule.morning =  0 if len([i for i in day if i == 1]) == 0 else len([i for i in day if i == 1])
        schedule.evening = len([i for i in day if i == 2])
        schedule.rest = 0
        schedule.overtime = 0
        
        schedule.updated_user = current_user.name
        schedule.updated_time = datetime.datetime.now()
        schedule.updated_count = 0

        db.session.add(schedule)
        
    db.session.commit()

    return jsonify(json=True)
Ejemplo n.º 2
0
def schedule_init_commit():
    # print request.json['year'], request.json['month'], request.json['staff']
    year = int(request.json['year'])
    month = int(request.json['month'])

    if month == 1:
        start = datetime.date(year - 1, 12, 26)
    else:
        start = datetime.date(year, month - 1, 26)

    days = rrule(DAILY, dtstart=start, until=datetime.date(year, month,
                                                           25)).count()

    #staff [u'1,张三,12-26,1', u'2,李四,12-27,1', u'3,王五,12-28,1', u'4,候六,12-29,1',  u'5,孟七,12-26,2']

    # 排班处理
    separator = ','
    for staff in request.json['staff']:
        day = [0 for i in xrange(1, days + 1)]  # 数组初值0,代表全月休息

        id, name, start_date, type = staff.split(',')

        if int(type) == 1:  # 1轮班,2白班
            start_date_m, start_date_d = start_date.split('-')

            if month == 1:
                start_day_id = rrule(DAILY, dtstart=start, \
                    until=datetime.date(year-1, int(start_date_m), int(start_date_d))).count()
            else:
                start_day_id = rrule(DAILY, dtstart=start, \
                    until=datetime.date(year, int(start_date_m), int(start_date_d))).count()

            # 排班算法,4人2班,对4求余
            '''
            if start_day_id == 1:
                for i in xrange(1, days+1):
                    day[i-1] = (i % 4) if (i % 4) in [1, 2] else 0
            elif start_day_id == 2:
                for i in xrange(1, days+1):
                    day[i-1] = ((i - 1) % 4) if ((i - 1) % 4) in [1, 2] else 0
            elif start_day_id == 3:
                for i in xrange(2, days+1):
                    day[i-1] = ((i - 2) % 4) if ((i - 2) % 4) in [1, 2] else 0
            elif start_day_id == 4:
                day[0] = 2
                for i in xrange(3, days+1):
                    day[i-1] = ((i - 3) % 4) if ((i - 3) % 4) in [1, 2] else 0
            '''

            # 排班算法, 6人2班, 对6求余, 余2晚班, 余4晚班, 余1早班
            if start_day_id == 1:
                for i in xrange(1, days + 1):
                    if (i % 6) == 1:
                        day[i - 1] = 1
                    if (i % 6) in [2, 4]:
                        day[i - 1] = 2
            elif start_day_id == 2:
                for i in xrange(1, days + 1):
                    if ((i - 1) % 6) == 1:
                        day[i - 1] = 1
                    if ((i - 1) % 6) in [2, 4]:
                        day[i - 1] = 2
            elif start_day_id == 3:
                for i in xrange(2, days + 1):
                    if ((i - 2) % 6) == 1:
                        day[i - 1] = 1
                    if ((i - 2) % 6) in [2, 4]:
                        day[i - 1] = 2
            elif start_day_id == 4:
                day[0] = 2
                for i in xrange(3, days + 1):
                    if ((i - 3) % 6) == 1:
                        day[i - 1] = 1
                    if ((i - 3) % 6) in [2, 4]:
                        day[i - 1] = 2
            elif start_day_id == 5:
                day[1] = 2
                for i in xrange(4, days + 1):
                    if ((i - 4) % 6) == 1:
                        day[i - 1] = 1
                    if ((i - 4) % 6) in [2, 4]:
                        day[i - 1] = 2
            elif start_day_id == 6:
                day[0], day[2] = 2, 2
                for i in xrange(5, days + 1):
                    if ((i - 5) % 6) == 1:
                        day[i - 1] = 1
                    if ((i - 5) % 6) in [2, 4]:
                        day[i - 1] = 2
        else:
            for i, v in enumerate(
                    rrule(DAILY,
                          dtstart=start,
                          until=datetime.date(year, month, 25))):
                if v.weekday() in [0, 1, 2, 5, 6]:
                    day[i] = 1

        #保存数据库
        schedule = Schedule()
        schedule.name = name
        schedule.year = year
        schedule.month = month
        schedule.days = days
        schedule.type = type
        schedule.list = separator.join([str(i) for i in day])
        schedule.morning = 0 if len([i for i in day if i == 1]) == 0 else len(
            [i for i in day if i == 1])
        schedule.evening = len([i for i in day if i == 2])
        schedule.rest = 0
        schedule.overtime = 0

        schedule.updated_user = current_user.name
        schedule.updated_time = datetime.datetime.now()
        schedule.updated_count = 0

        db.session.add(schedule)

    db.session.commit()

    return jsonify(json=True)