Ejemplo n.º 1
0
def get_data_period_with_fio_now(type_mechanism):
    '''get data shift for by type of mechanism with work NOW'''
    if type_mechanism == 'usm':
        data = usm_periods(time_for_shift_usm(*today_shift_date()))
    if type_mechanism == 'kran':
        data = kran_periods(time_for_shift_kran(*today_shift_date()))
    if type_mechanism == 'sennebogen':
        data = sennebogen_periods(
            time_for_shift_sennebogen(*today_shift_date()))
    data_with_fio = add_fio(data, *today_shift_date())
    return jsonify(data_with_fio)
Ejemplo n.º 2
0
def hash_now(type_mechanism):
    date, shift = today_shift_date()
    data = mech_periods(type_mechanism, date, shift)
    data = add_fio(data, date, shift)
    client = MongoClient('mongodb://localhost:27017')
    mongodb = client['HashShift']
    posts = mongodb[type_mechanism]
    # logger.debug(data)
    if data is not None:
        # convert int key to str
        mongo_data = {str(key): value for key, value in data.items()}
        for key, value in data.items():
            mongo_data[str(key)]['data'] = {
                str(k): v
                for k, v in value['data'].items()
            }
        mongo_data['_id'] = "now"
        posts.delete_one({"_id": "now"})
        posts.insert_one(mongo_data)
Ejemplo n.º 3
0
def get_data_period_with_fio2(type_mechanism, date_shift, shift):
    '''get data shift for by type of mechanism'''
    today_date, today_shift = today_shift_date()
    try:
        date = datetime.strptime(date_shift, '%d.%m.%Y').date()
        # convert 1.1.2020 to 01.01.2020
        date_shift = date.strftime("%d.%m.%Y")
    except ValueError:
        return make_response(jsonify({'error': 'Bad format date'}), 400)

    if today_date == date and today_shift == shift:
        mongo_request = mongodb[type_mechanism].find_one({"_id": "now"})
    else:
        mongo_request = mongodb[type_mechanism].find_one(
            {"_id": f"{date_shift}|{shift}"})
    if mongo_request is not None:  # if item alredy exist
        del mongo_request["_id"]
        return jsonify(mongo_request)

    data = mech_periods(type_mechanism, date, shift)
    data = add_fio(data, date, shift)

    # add_to_mongo(data, date, shift)
    if data is not None:
        # convert int key to str
        mongo_data = {str(key): value for key, value in data.items()}
        for key, value in data.items():
            mongo_data[str(key)]['data'] = {
                str(k): v
                for k, v in value['data'].items()
            }
        if today_date == date and today_shift == shift:
            mongo_request = mongodb[type_mechanism].find_one(  # request
                {"_id": "now"})
            if mongo_request is not None:  # if item alredy exist
                del mongo_request["_id"]
                return jsonify(mongo_request)
        else:
            mongo_data['_id'] = f'{date_shift}|{shift}'
            posts = mongodb[type_mechanism]
            posts.insert_one(mongo_data)
    return jsonify(data)
Ejemplo n.º 4
0
def get_per_shift(m_id):
    '''get data for this shift by id mechanism'''
    date_shift, shift = today_shift_date()
    try:
        data_per_shift = db.session.query(Post).filter(
            Post.date_shift == date_shift, Post.shift == shift,
            Post.mechanism_id == m_id).all()
    except Exception as e:
        logger.debug(e)
    try:
        start = db.session.query(Post.timestamp).filter(
            Post.date_shift == date_shift, Post.shift == shift,
            Post.mechanism_id == m_id).first()[0]
        stop = db.session.query(Post.timestamp).filter(
            Post.date_shift == date_shift, Post.shift == shift,
            Post.mechanism_id == m_id).order_by(
                Post.timestamp.desc()).first()[0]
    except TypeError:
        abort(405)
    start += timedelta(hours=HOURS)  # it should be better
    stop += timedelta(hours=HOURS)
    total = round(sum(el.value for el in data_per_shift) / 60, 3)
    data = {'total': total, 'start': start, 'stop': stop}
    return jsonify(data)
Ejemplo n.º 5
0
def time_for_shift_sennebogen(date_shift, shift):
    '''get dict with all minute's values for the period, name and total
    value is lever, value3 is speed roler,
    '''
    # get data from db
    shift = int(shift)
    all_mechs = all_mechanisms_id('sennebogen')
    try:
        cursor = db.session.query(Post).filter(
            Post.date_shift == date_shift, Post.shift == shift,
            Post.mechanism_id.in_(all_mechs)).order_by(
                Post.mechanism_id).all()
    except Exception as e:
        logger.debug(e)
    # create dict all works mechanism in shift
    data_per_shift = {}
    for el in cursor:
        date_t = el.timestamp.replace(second=0, microsecond=0)
        date_t += timedelta(hours=HOURS)
        # date_t = date_t.strftime("%H:%M")
        x = -1 if el.value is None else el.value
        y = -1 if el.value2 is None else el.value2
        if x < 500 and y < 500:  # and change state_mech in function
            # if y < 750: # and change state_mech in function
            value_minute = 0
        else:
            value_minute = 1

        if data_per_shift.get(el.mech.number):
            data_per_shift[
                el.mech.number]['data'][date_t] = value_minute, x, y  # ? x, y
            data_per_shift[el.mech.number]['total_time'] += 1

        else:
            data_per_shift[el.mech.number] = {}
            data_per_shift[el.mech.number]['mechanism'] = el.mech
            data_per_shift[el.mech.number]['total_time'] = 1
            data_per_shift[el.mech.number]['data'] = {}
            data_per_shift[el.mech.number]['data'][date_t] = value_minute, x, y
        data_per_shift[el.mech.number].setdefault('work_time', 0)
        if value_minute != 0:
            data_per_shift[el.mech.number]['work_time'] += 1
    # get start time for this shift
    start = datetime.combine(date_shift, datetime.min.time())
    if shift == 1:
        start = start.replace(hour=8, minute=0, second=0, microsecond=0)
    else:
        start = start.replace(hour=20, minute=0, second=0, microsecond=0)

    if data_per_shift == {}:
        return None
    # create dict with all minutes to now if value is not return (-1) because
    # 0 may exist
    #---------------------------PART2------------------------------  i don't want 2 functions
    time_by_minuts = {}
    # pprint(data_per_shift)
    for key in data_per_shift.keys():
        flag_start = True
        # flag_finish = True
        time_by_minuts[key] = {}
        time_by_minuts[key]['name'] = data_per_shift[key]['mechanism'].name
        time_by_minuts[key]['id'] = data_per_shift[key]['mechanism'].id
        time_by_minuts[key]['number'] = data_per_shift[key]['mechanism'].number
        # translate hours into minutes and round
        time_by_minuts[key]['total_time'] = round(
            data_per_shift[key]['total_time'] / 60, 1)
        time_by_minuts[key]['work_time'] = round(
            data_per_shift[key]['work_time'] / 60, 1)
        time_by_minuts[key]['data'] = {}
        delta_minutes = start
        time_move = 0
        for i in range(1, 60 * 12 + 1):
            date_t = delta_minutes.strftime("%H:%M")
            val_minute = data_per_shift[key]['data'].setdefault(
                delta_minutes, (-1, 0, 0))
            if val_minute[0] != -1:
                time_move += val_minute[0] / 60
            time_by_minuts[key]['data'][i] = {
                'time': date_t,
                'value': val_minute[0],
                'x': val_minute[1],
                'y': val_minute[2],
                'time_move': round(time_move, 2),
            }
            delta_minutes += timedelta(minutes=1)
            today_date, today_shift = today_shift_date()
            if val_minute[0] > 0 and flag_start:
                time_by_minuts[key]['start'] = date_t
                flag_start = False
            if val_minute[0] > 0:
                time_by_minuts[key]['finish'] = date_t
            if delta_minutes >= datetime.now(
            ) and date_shift == today_date and today_shift == shift:
                break
    return time_by_minuts
Ejemplo n.º 6
0
def time_for_shift_kran(date_shift, shift):
    '''get dict with all minute's values for the period, name and total'''
    # get data from db
    shift = int(shift)
    all_mechs = all_mechanisms_id('kran')
    try:
        cursor = db.session.query(Post).filter(Post.date_shift == date_shift, Post.shift ==
                                               shift, Post.mechanism_id.in_(all_mechs)).order_by(Post.mechanism_id).all()
    except Exception as e:
        logger.debug(e)
    # create dict all works mechanism in shift
    data_per_shift = {}
    for el in cursor:
        date_t = el.timestamp.replace(second=0, microsecond=0)
        date_t += timedelta(hours=HOURS)
        if data_per_shift.get(el.mech.number): # if exist
            if el.value == 1 or el.value == 3:  # 123
                data_per_shift[el.mech.number]['total_90'] += 1
            if el.value == 2:
                data_per_shift[el.mech.number]['total_180'] += 1
                try:
                    data_per_shift[el.mech.number]['total_terminals_180'][str(el.terminal)] +=1
                except KeyError:
                    data_per_shift[el.mech.number]['total_terminals_180'][str(el.terminal)] = 1
            data_per_shift[el.mech.number]['data'][date_t] = el.value, el.count, el.terminal
            # pre_value=el.count # if will be problem with GPRS
        else:
            data_per_shift[el.mech.number] = {}
            data_per_shift[el.mech.number]['mechanism'] = el.mech
            data_per_shift[el.mech.number]['total_90'] = 0
            data_per_shift[el.mech.number]['total_180'] = 0
            data_per_shift[el.mech.number]['total_terminals_180'] = {}
            if el.value == 1:
                data_per_shift[el.mech.number]['total_90'] = 1
            if el.value == 2:
                data_per_shift[el.mech.number]['total_180'] = 1
                data_per_shift[el.mech.number]['total_terminals_180'][str(el.terminal)] = 1
            data_per_shift[el.mech.number]['data'] = {}
            data_per_shift[el.mech.number]['data'][date_t] = el.value, el.count, el.terminal
            # pre_value=el.count

    # get start time for this shift
    start = datetime.combine(date_shift, datetime.min.time())
    if shift == 1:
        start = start.replace(hour=8, minute=0, second=0, microsecond=0)
    else:
        start = start.replace(hour=20, minute=0, second=0, microsecond=0)

    if data_per_shift == {}:
        return None
    #---------------------------PART2------------------------------  i don't want 2 functions
    # create dict with all minutes to now if value is not return (-1) because 0 may exist
    time_by_minuts = {}
    for key, value in data_per_shift.items():
        flag_start = True
        time_by_minuts[key] = {}
        time_by_minuts[key]['name'] = data_per_shift[key]['mechanism'].name
        time_by_minuts[key]['number'] = data_per_shift[key]['mechanism'].number
        time_by_minuts[key]['id'] = data_per_shift[key]['mechanism'].id
        time_by_minuts[key]['total_terminals_180'] = data_per_shift[key]['total_terminals_180']
        # translate hours into minutes and round
        time_by_minuts[key]['total_180'] = round(data_per_shift[key]['total_180'], 2)
        time_by_minuts[key]['total_90'] = round(data_per_shift[key]['total_90'], 2)
        time_by_minuts[key]['data'] = {}
        delta_minutes = start
        try:
            last_find_item = db.session.query(Post).filter(Post.mechanism_id==data_per_shift[key]['mechanism'].id).order_by( Post.timestamp.desc()).first()
        except Exception as e:
            logger.debug(e)
        tmp_terminal = last_find_item.terminal
        # time_by_minuts[key]['total_terminals_180'] = {str(tmp_terminal): 0} # str becouse mongo need str key
        for i in range(1, 60 * 12 + 1): # 720 minutes in shift
            date_t = delta_minutes.strftime("%H:%M")
            try:
                val_minute = data_per_shift[key]['data'][delta_minutes][0]
            except KeyError:
                val_minute = -1
            try:
                terminal = data_per_shift[key]['data'][delta_minutes][2]
                tmp_terminal = terminal
            except KeyError: # if item not exist get last found value
                terminal = tmp_terminal
            if val_minute == 4: # show 4 how 0 look get api
                val_minute =0
            time_by_minuts[key]['data'][i] = {
                                            'time': date_t, 
                                            'value': val_minute,
                                            'terminal': terminal
                                            }
            delta_minutes += timedelta(minutes=1)
            today_date, today_shift = today_shift_date()
            if val_minute > 0 and flag_start:
                time_by_minuts[key]['start'] = date_t
                flag_start = False
            if val_minute > 0:
                time_by_minuts[key]['finish'] = date_t
            if delta_minutes >= datetime.now() and date_shift == today_date and today_shift == shift: # if now moment
                break
            time_by_minuts[key]['terminal'] = terminal
        # replace items from -1 to 0 if kran work, show + 4 minuts
        pre_items = -1
        work_count = 0
        last_value = 0
        for number_item, data in time_by_minuts[key]['data'].items():
            if data['value'] == -1 and pre_items != -1 and work_count < 5:
                time_by_minuts[key]['data'][number_item]['value'] = last_value
                work_count += 1
            else:
                last_value = 0
                if data['value'] == 5: # if kran move
                    last_value = 5
                work_count = 0
            pre_items = data['value']

    return time_by_minuts
Ejemplo n.º 7
0
def get_data_period_with_fio_now2(type_mechanism):
    '''get data shift for by type of mechanism with work NOW'''
    data = mech_periods(type_mechanism, *today_shift_date())
    data_with_fio = add_fio(data, *today_shift_date())
    return jsonify(data_with_fio)
Ejemplo n.º 8
0
def time_for_shift_usm(date_shift, shift):
    '''get dict with all minute's values for the period, name and total
    value is lever, value3 is speed roler,
    '''
    # get data from db
    shift = int(shift)
    all_mechs = all_mechanisms_id('usm')
    try:
        cursor = db.session.query(Post).filter(
            Post.date_shift == date_shift, Post.shift == shift,
            Post.mechanism_id.in_(all_mechs)).order_by(
                Post.mechanism_id).all()
    except Exception as e:
        logger.debug(e)
    # create dict all works mechanism in shift
    data_per_shift = {}
    for el in cursor:
        date_t = el.timestamp.replace(second=0, microsecond=0)
        date_t += timedelta(hours=HOURS)
        # date_t = date_t.strftime("%H:%M")
        el.value = -1 if el.value is None else el.value
        el.value3 = 0 if el.value3 is None else el.value3
        val_min = 0 if el.value < 0.1 else el.value
        el.value = 0 if el.value3 < 5 else el.value  # maybe more, value3 is speed rool
        val_min = 0 if el.value3 < 5 else el.value

        if data_per_shift.get(el.mech.number):
            # bad
            data_per_shift[
                el.mech.number]['data'][date_t] = val_min, el.value3, el.value
            data_per_shift[el.mech.number]['time_coal'] += el.value
            data_per_shift[el.mech.number]['total_time'] += 1
        else:
            data_per_shift[el.mech.number] = {}
            data_per_shift[el.mech.number]['mechanism'] = el.mech
            data_per_shift[el.mech.number]['time_coal'] = el.value
            data_per_shift[el.mech.number]['total_time'] = 1
            data_per_shift[el.mech.number]['data'] = {}
            data_per_shift[
                el.mech.number]['data'][date_t] = val_min, el.value3, el.value
        data_per_shift[el.mech.number].setdefault('work_time', 0)
        if el.value > 0:
            data_per_shift[el.mech.number]['work_time'] += 1
    # get start time for this shift
    start = datetime.combine(date_shift, datetime.min.time())
    if shift == 1:
        start = start.replace(hour=8, minute=0, second=0, microsecond=0)
    else:
        start = start.replace(hour=20, minute=0, second=0, microsecond=0)

    if data_per_shift == {}:
        return None
    # create dict with all minutes to now if value is not return (-1) because
    # 0 may exist
    time_by_minuts = {}
    # pprint(data_per_shift)
    for key in data_per_shift.keys():
        flag_start = True
        mech = data_per_shift[key]['mechanism']
        time_by_minuts[key] = {}
        time_by_minuts[key]['name'] = mech.name
        time_by_minuts[key]['id'] = mech.id
        time_by_minuts[key]['number'] = mech.number
        time_by_minuts[key]['tons_in_hour'] = usm_tons_in_hour[mech.number]
        # translate hours into minutes and round
        time_by_minuts[key]['time_coal'] = round(
            data_per_shift[key]['time_coal'] / 60, 2)
        time_by_minuts[key]['total_time'] = round(
            data_per_shift[key]['total_time'] / 60, 1)
        time_by_minuts[key]['work_time'] = round(
            data_per_shift[key]['work_time'] / 60, 1)
        time_by_minuts[key]['data'] = {}
        delta_minutes = start
        try:
            last_find_item = db.session.query(Post).filter(
                Post.mechanism_id == data_per_shift[key]
                ['mechanism'].id).order_by(Post.timestamp.desc()).first()
        except Exception as e:
            logger.debug(e)
        terminal = last_find_item.terminal
        time_coal = 0
        for i in range(1, 60 * 12 + 1):
            date_t = delta_minutes.strftime("%H:%M")
            val_minute = data_per_shift[key]['data'].setdefault(
                delta_minutes, (-1, -1, 0))
            if len(val_minute) < 3:
                print(val_minute)
            time_coal += val_minute[2] / 60
            time_by_minuts[key]['data'][i] = {
                'time': date_t,
                'value': val_minute[0],
                'speed': val_minute[1],
                'time_coal': round(time_coal, 2),
                'terminal': terminal,
            }
            delta_minutes += timedelta(minutes=1)
            today_date, today_shift = today_shift_date()
            if val_minute[0] > 0 and flag_start:
                time_by_minuts[key]['start'] = date_t
                flag_start = False
            if val_minute[0] > 0:
                time_by_minuts[key]['finish'] = date_t
            if delta_minutes >= datetime.now(
            ) and date_shift == today_date and today_shift == shift:
                break
            time_by_minuts[key]['terminal'] = terminal
    return time_by_minuts
Ejemplo n.º 9
0
                values_period = value_min
                pre_time = value_number['time']
                counter += 1
            else:
                step += 1
        new_data[counter] = {
            'time': pre_time,
            'value': values_period,
            'step': step
        }
        mechanisms_data[mech]['data'] = new_data
    return mechanisms_data


def get_values_min(value_number):
    if value_number['value'] >= 0 and value_number['value'] < 0.1:
        if value_number['speed'] <= 5:
            return 0  # yellow
        else:
            return 2  # dark yellow
    elif value_number['value'] >= 0.1:
        return 1  # blue
    else:
        return -1  # red


if __name__ == "__main__":
    from pprint import pprint
    # pprint(time_for_shift_usm(*today_shift_date()))
    pprint(usm_periods(time_for_shift_usm(*today_shift_date())))