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'})
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)
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'})
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})
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})
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('重建软件版本路径关系')
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)