Example #1
0
def submitError():
    soft_type = request.args.get('type')
    err_id = request.args.get('id')
    # 将用户提交的错误错误路径版本进行标记(torefresh字段写1)
    table_name = 't_' + soft_type
    markToRefresh(table_name, int(err_id))
    # 记录日志
    info_to_record = 'IP: ' + request.remote_addr + '标记' + soft_type + '中id号是:' + err_id + '路径存在问题'
    log.record(info_to_record)
    return jsonify({'status': 'success'})
Example #2
0
def updatePathInfoAutomatically():
    '''
        每天的22点到23点之间启动后台自动数据更新功能
    '''
    log.record('后台脚本程序启动')
    while True:
        now = datetime.datetime.now()
        if now.hour == 22:
            # 首先清理缓存目录
            try:
                if os.path.exists(CACHE_FILE_DIR):
                    for root, dirs, files in os.walk(CACHE_FILE_DIR):
                        for file in files:
                            os.remove(os.path.join(root, file))
                        for dir in dirs:
                            os.rmdir(os.path.join(root, dir))
            except:
                log.record('删除某些缓存文件失败...\n')
            # 将今天用户标记路径有误的版本进行path字段清空,这样后续就会对该版本路径进行重新搜索
            handle_num = handleRefresh()
            log.record('处理了路径标记版本,数量: ' + str(handle_num))
            ver_path_map = mapEmptyPathVersionsPath()
            writeAllPathInfo(ver_path_map)
            info_to_record = '更新数据库path信息\n'
            for ver_type in ver_path_map:
                for ver_id, ver_info in ver_path_map[ver_type].items():
                    info_to_record += ver_info['version']
                    info_to_record += ': '
                    info_to_record += ver_info['path']
                    info_to_record += '\n'
            log.record(info_to_record)
        time.sleep(3600)
Example #3
0
def startUpdate():
    global updaters, ALL_VERS_ID
    soft_type = request.args.get('softType')
    client_ip = request.remote_addr
    record_info = 'IP: ' + client_ip + '更新软件版本'
    record_info += str(updaters[soft_type].vers_ready_to_append)
    log.record(record_info)

    if updaters[soft_type].startUpdate() is False:
        return jsonify({
            'status': 'failure',
            'description': '更新信息已过期或后台繁忙,请重试'
        })
    ALL_VERS_ID = _getAllVersionsId()
    return jsonify({'status': 'success'})
Example #4
0
def createConfigFile():
    '''
        生成配置文件(.zip)
        同样只支持主底板和扩展底板一的编辑,更多的配置请自行特殊制作支持
        必须严格按照网页传输数据进行编程
    '''
    data = request.get_json()
    client_ip = request.remote_addr
    record_info = 'IP: ' + client_ip + '创建配置文件:\n'
    record_info += request.data.decode()
    log.record(record_info)

    # 将post得到的数据整理成规范格式的数据
    board_1_modules_ios = []
    board_1 = data['boardModules1']
    board_1_ios = data['boardModulesIOs1']
    for idx in range(len(board_1)):
        if board_1[idx] != '':
            board_1_modules_ios.append([board_1[idx], board_1_ios[idx]])

    board_2_modules_ios = []
    board_2 = data['boardModules2']
    board_2_ios = data['boardModulesIOs2']
    for idx in range(len(board_2)):
        if board_2[idx] != '':
            board_2_modules_ios.append([board_2[idx], board_2_ios[idx]])

    customer = data['customer']

    # 硬件配置文件
    ce_standard = data['ceStandard']
    varan_conn_module_pos = data['varanConnModulePos']
    e73_safety = data['funcConfig']['3']['status']
    energy_dee = data['funcConfig']['5']['status']
    if e73_safety or data['type'].upper() == 'VE2':
        mold_slider = False
    else:
        mold_slider = data['funcConfig']['6']['status']
    # 功能点为是否更改为可编程输出
    func1_to_progo1 = data['funcConfig']['7']['status']
    func2_to_progo2 = data['funcConfig']['8']['status']

    # 安全继电器文件
    nor_pilz = data['pilzNor']
    e73_pilz = data['pilzE73']
    if not ce_standard or nor_pilz == '其他':
        nor_pilz = None
    if not e73_safety or e73_pilz == '其他':
        e73_pilz = None

    clamp_force = data['clampForce']
    injection = data['injection']

    # 下面开始生成文件路径,创建目录
    imm_type = ''
    zip_file_path = ''
    zip_file_url = ''
    if data['type'].upper() == 'ZES':
        imm_type = 'ZE' + clamp_force + 's-' + injection
    elif data['type'].upper() == 'ZE':
        imm_type = 'ZE' + clamp_force + '-' + injection
    elif data['type'].upper() == 'VE2S':
        imm_type = 'VE' + clamp_force + 'IIs-' + injection
    elif data['type'].upper() == 'VE2':
        imm_type = 'VE' + clamp_force + 'II-' + injection
    if ce_standard:
        dst_file_dir = CACHE_FILE_DIR + data[
            'evaluationNum'] + customer + imm_type + '(CE)/'
        zip_file_path = CACHE_FILE_DIR + data[
            'evaluationNum'] + customer + imm_type + '(CE).zip'
        zip_file_url = URL_DIR + data[
            'evaluationNum'] + customer + imm_type + '(CE).zip'
    else:
        dst_file_dir = CACHE_FILE_DIR + data[
            'evaluationNum'] + customer + imm_type + '/'
        zip_file_path = CACHE_FILE_DIR + data[
            'evaluationNum'] + customer + imm_type + '.zip'
        zip_file_url = URL_DIR + data[
            'evaluationNum'] + customer + imm_type + '.zip'
    if os.path.isdir(dst_file_dir):
        shutil.rmtree(dst_file_dir)
    os.mkdir(dst_file_dir)

    # 功能配置选项,注意key值和configfile.py中FcfFileMaker中属性名字对应
    functions = {}
    # functions['injSig'] = data['funcConfig']['1']['status']
    # functions['chargeSig'] = data['funcConfig']['2']['status']
    func_output1 = data['funcOutput1']
    func_output2 = data['funcOutput2']
    functions['dee'] = data['funcConfig']['5']['status']
    functions['internalHotrunnerNum'] = data['intHotrunnerNum']
    functions['valve'] = data['funcConfig']['101']['status']
    functions['air'] = data['funcConfig']['102']['status']
    functions['core'] = data['funcConfig']['103']['status']
    functions['progio'] = data['funcConfig']['104']['status']

    fcfmaker = FcfFileMaker(imm_type=data['type'],
                            functions=functions,
                            ce_standard=ce_standard,
                            dst_file_dir=dst_file_dir,
                            func_output1=func_output1,
                            func_output2=func_output2)
    if fcfmaker.createFile() != 0:
        return jsonify({'status': 'failure', 'description': '功能配置文件生成失败'})
    sysmaker = SysFileMaker(ce_standard=ce_standard,
                            clamp_force=clamp_force,
                            dst_file_dir=dst_file_dir)
    if sysmaker.createFile() != 0:
        return jsonify({'status': 'failure', 'description': '系统文件生成失败'})
    hkmaker = HkFileMaker(imm_type=data['type'],
                          board_1_modules_ios=board_1_modules_ios,
                          board_2_modules_ios=board_2_modules_ios,
                          dst_file_dir=dst_file_dir,
                          ce_standard=ce_standard,
                          varan_module_pos=varan_conn_module_pos,
                          e73=e73_safety,
                          energy_dee=energy_dee,
                          mold_slider=mold_slider,
                          func1_to_progo1=func1_to_progo1,
                          func2_to_progo2=func2_to_progo2)

    ret_status = hkmaker.createFile()
    if ret_status < 0:
        if ret_status == -1:
            error_description = '标准程序不支持的模块配置'
        elif ret_status == -2:
            error_description = '后台在复制硬件配置文件时候发生了严重错误!请检查后台程序'
        else:
            error_description = '检查到重复配置的IO点'
        return jsonify({
            'status': 'failure',
            'description': '硬件配置文件生成失败:' + error_description
        })
    if ce_standard or e73_safety:
        mpnozmaker = SafetyFileMaker(nor_pilz=nor_pilz,
                                     e73_pilz=e73_pilz,
                                     dst_file_dir=dst_file_dir)
        if mpnozmaker.createFile() != 0:
            return jsonify({
                'status': 'failure',
                'description': '安全继电器(或E73)文件生成失败'
            })
    createZip(dst_file_dir, zip_file_path)

    return jsonify({'status': 'success', 'url': zip_file_url})
Example #5
0
def createIoFile():
    '''
        生成IO表文件(.xlsx)
        目前后台只支持主底板和扩展底板一的编辑
        根据网页POST数据格式,进行数据处理。
        必须严格参照网页传输的数据进行编程
    '''
    # data是一个dict对象
    data = request.get_json()
    client_ip = request.remote_addr
    record_info = 'IP: ' + client_ip + '创建IO表:\n'
    record_info += request.data.decode()
    log.record(record_info)

    # 将post得到的数据整理成规范格式的数据
    board_1_modules_ios = []
    board_1 = data['boardModules1']
    board_1_ios = data['boardModulesIOs1']
    for idx in range(len(board_1)):
        if board_1[idx] != '':
            board_1_modules_ios.append([board_1[idx], board_1_ios[idx]])

    board_2_modules_ios = []
    board_2 = data['boardModules2']
    board_2_ios = data['boardModulesIOs2']
    for idx in range(len(board_2)):
        if board_2[idx] != '':
            board_2_modules_ios.append([board_2[idx], board_2_ios[idx]])

    evaluation_num = data['evaluationNum']
    production_num = data['productionNum']
    type_string = data['immType']
    customer = data['customer']
    safety_standard = data['safetyStandard']
    technical_clause = data['technicalClause']
    dual_inj = data['isDualInj']
    clamp_force = data['clampForce']
    injection = data['injection']
    # 这个是改造后规范显示的immType字符串,json中的immType值不适合取文件名
    imm_type = ''
    # 默认的主底板IO是否修改
    # func1_inj_signal = data['funcConfig']['1']['status']
    # func2_charge_signal = data['funcConfig']['2']['status']
    func_output1 = data['funcOutput1']
    func_output2 = data['funcOutput2']
    e73_safety = data['funcConfig']['3']['status']
    nozzle_to_valve = data['funcConfig']['4']['status']
    if e73_safety or data['type'].upper() == 'VE2':
        # 7号点改可编程输出与E73冲突,且VE2不允许修改7号点
        mold_slider = False
    else:
        mold_slider = data['funcConfig']['6']['status']
    # 能耗模块DEE是否启用
    energy_dee = data['funcConfig']['5']['status']
    # 功能点为是否更改为可编程输出
    func1_to_progo1 = data['funcConfig']['7']['status']
    func2_to_progo2 = data['funcConfig']['8']['status']
    # Varan连接模块如果启用,安装在KEB之后(0)之前(1)
    varan_conn_module_pos = data['varanConnModulePos']
    # 外置热流道是否激活,及组数
    # 注意网页端提交的功能序号可能随功能增加而改变,注意 data['funcConfig']['?']['status]中的序号('?')需要随之更新
    activate_external_hotrunner = data['funcConfig']['99']['status']
    if activate_external_hotrunner:
        external_hotrunner_num = int(data['extHotrunnerNum'])
    else:
        external_hotrunner_num = 0
    psg_hotrunner = data['funcConfig']['98']['status']

    if data['type'].upper() == 'ZES':
        imm_type = 'ZE' + clamp_force + 's-' + injection
    elif data['type'].upper() == 'ZE':
        imm_type = 'ZE' + clamp_force + '-' + injection
    elif data['type'].upper() == 'VE2S':
        imm_type = 'VE' + clamp_force + 'IIs-' + injection
    elif data['type'].upper() == 'VE2':
        imm_type = 'VE' + clamp_force + 'II-' + injection

    io_file_path = CACHE_FILE_DIR + evaluation_num + customer + imm_type + '.xlsx'
    io_url = URL_DIR + evaluation_num + customer + imm_type + '.xlsx'

    print('creating io.xlsx, pls wait....')
    iomaker = IOMaker(imm_type=data['type'],
                      board_1_modules_ios=board_1_modules_ios,
                      board_2_modules_ios=board_2_modules_ios,
                      evaluation_num=evaluation_num,
                      production_num=production_num,
                      type_string=type_string,
                      customer=customer,
                      safety_standard=safety_standard,
                      technical_clause=technical_clause,
                      dual_inj=dual_inj,
                      external_hotrunner_num=external_hotrunner_num,
                      energy_dee=energy_dee,
                      varan_conn_module_pos=varan_conn_module_pos,
                      psg_hotrunner=psg_hotrunner)
    # if func1_inj_signal:
    #     iomaker.func1ToInjSignal()
    # if func2_charge_signal:
    #     iomaker.func2ToChargeSignal()
    if func_output1 != 0:
        iomaker.func1Config(func_output1)
    if func_output2 != 0:
        iomaker.func2Config(func_output2)
    if nozzle_to_valve:
        iomaker.nozzleToValve()
    if e73_safety and data['type'].upper() != 'VE2':
        # VE2的E73需要自己配置
        iomaker.e73Safety()
    if mold_slider:
        iomaker.moldSlider()
    if func1_to_progo1:
        iomaker.func1_to_progo1()
    if func2_to_progo2:
        iomaker.func2_to_progo2()
    iomaker.createFile(io_file_path)

    return jsonify({'status': 'success', 'url': io_url})
Example #6
0
db_cpy_path = os.path.join(os.path.dirname(SOFTWARE_VERSION_INFO_DB_PATH),
                           db_cpy_name)
shutil.copyfile(SOFTWARE_VERSION_INFO_DB_PATH, db_cpy_path)

rebuild_db = input('是否重建数据库?这会清空原先数据库 (y/n)')
remap_path = input('是否搜索源码路径?这可能需要很长时间 (y/n)')

if rebuild_db == 'y':
    print('开始重建数据')
    rebuidSoftDb()
    print('开始导入数据到数据库...')
    updaters = {
        'V01': Updater('t_V01', 'V01'),
        'V02': Updater('t_V02', 'V02'),
        'V03V04': Updater('t_V03V04', 'V03&V04'),
        'V05': Updater('t_V05', 'V05'),
        'T05': Updater('t_T05', 'T05'),
    }
    for ver_type, updater in updaters.items():
        print('获取', ver_type, '待更新数据...')
        updater.getUpdateInfo()
        print('写入', ver_type, '数据...')
        updater.startUpdate()
    print('完成数据导入')
    log.record('重建软件版本数据库')

if remap_path == 'y':
    ver_path_map = mapAllVersionsPath()
    writeAllPathInfo(ver_path_map)
    log.record('重建软件版本路径关系')
Example #7
0
from app.softpathmap import mapEmptyPathVersionsPath, writeAllPathInfo
from app.log import log

print('开始获取path为空的version')
ver_path_map = mapEmptyPathVersionsPath()
writeAllPathInfo(ver_path_map)
info_to_record = '更新数据库path信息:\n'
for ver_type in ver_path_map:
    for ver_id, ver_info in ver_path_map[ver_type].items():
        info_to_record += ver_info['version']
        info_to_record += ': '
        info_to_record += ver_info['path']
        info_to_record += '\n'
log.record(info_to_record)