diff --git a/config.py b/config.py index d9ceefa..0a9b010 100644 --- a/config.py +++ b/config.py @@ -1,6 +1,8 @@ # -------------------------- 开始:运行模式 ------------------------------- +version = "0.11.251212.1" + from enum import Enum class run_mode(Enum): formal = 1 @@ -25,6 +27,7 @@ redis_config = { url_send_layout = 'https://mp.api.suwa3d.com/api/printTypeSettingOrder/printTypeSettingOrderSuccess' url_get_info_by_printIds = "https://mp.api.suwa3d.com/api/printOrder/getInfoByPrintIds?print_ids=" url_get_oss_suffix_by_orderId = f"https://mp.api.suwa3d.com/api/order/getOssSuffixByOrderId?order_id=" +url_get_info_by_print_batch_id = f"https://mp.api.suwa3d.com/api/printOrder/getInfoByPrintBatchId?batch_id=" # -------------------------- 结束:网络配置 ------------------------------- @@ -48,9 +51,9 @@ small_machine_size = [380, 345, 250] # -------------------------- 开始:测试相关 ------------------------------- # local_data= {'machine_print_counts': 150, 'machine_type': 'big_machine', 'pre_batch_id': 9910032, 'print_machine_id': 14, 'print_orders': [{'counts': 1, 'layout_z': 35.62070959151145, 'model_weight': 41.862, 'order_id': 917900, 'pid': 376666, 'print_id': 126318}, {'counts': 1, 'layout_z': 31.380497732946978, 'model_weight': 35.158, 'order_id': 917810, 'pid': 376562, 'print_id': 126413}, {'counts': 1, 'layout_z': 26.136854969886777, 'model_weight': 21.403, 'order_id': 917820, 'pid': 376572, 'print_id': 126414}, {'counts': 1, 'layout_z': 37.967177899738104, 'model_weight': 30.48, 'order_id': 917922, 'pid': 376684, 'print_id': 126415}, {'counts': 1, 'layout_z': 20.368887098446734, 'model_weight': 13.097, 'order_id': 918228, 'pid': 377198, 'print_id': 126417}, {'counts': 1, 'layout_z': 21.4227336927951, 'model_weight': 15.859, 'order_id': 917576, 'pid': 376345, 'print_id': 126769}, {'counts': 1, 'layout_z': 27.539947066784066, 'model_weight': 25.185, 'order_id': 917811, 'pid': 376564, 'print_id': 126875}, {'counts': 1, 'layout_z': 31.692723822970393, 'model_weight': 32.796, 'order_id': 917821, 'pid': 376592, 'print_id': 126876}, {'counts': 1, 'layout_z': 20.20031720146163, 'model_weight': 8.664, 'order_id': 917822, 'pid': 376602, 'print_id': 126877}, {'counts': 1, 'layout_z': 22.41680629925537, 'model_weight': 15.206, 'order_id': 917827, 'pid': 376616, 'print_id': 126878}, {'counts': 1, 'layout_z': 25.443981671314514, 'model_weight': 11.965, 'order_id': 917879, 'pid': 376635, 'print_id': 126879}, {'counts': 1, 'layout_z': 31.09222672704002, 'model_weight': 20.318, 'order_id': 917902, 'pid': 376667, 'print_id': 126882}, {'counts': 1, 'layout_z': 30.3317820592175, 'model_weight': 32.964, 'order_id': 917903, 'pid': 376668, 'print_id': 126884}, {'counts': 1, 'layout_z': 28.69639626624317, 'model_weight': 27.751, 'order_id': 917904, 'pid': 376669, 'print_id': 126885}, {'counts': 1, 'layout_z': 28.043180029163203, 'model_weight': 19.866, 'order_id': 917917, 'pid': 376677, 'print_id': 126886}, {'counts': 1, 'layout_z': 28.58783468947201, 'model_weight': 25.505, 'order_id': 918196, 'pid': 377126, 'print_id': 126888}, {'counts': 1, 'layout_z': 43.55871899466554, 'model_weight': 63.512, 'order_id': 918201, 'pid': 377131, 'print_id': 126890}, {'counts': 1, 'layout_z': 32.52479624889478, 'model_weight': 22.943, 'order_id': 918203, 'pid': 377133, 'print_id': 126891}, {'counts': 1, 'layout_z': 33.21834123013511, 'model_weight': 42.163, 'order_id': 918206, 'pid': 377139, 'print_id': 126892}, {'counts': 1, 'layout_z': 27.81674335447885, 'model_weight': 15.455, 'order_id': 918207, 'pid': 377141, 'print_id': 126893}, {'counts': 1, 'layout_z': 29.78203639784899, 'model_weight': 29.696, 'order_id': 918231, 'pid': 377201, 'print_id': 126894}, {'counts': 1, 'layout_z': 23.66875736859606, 'model_weight': 13.39, 'order_id': 915637, 'pid': 373135, 'print_id': 126895}, {'counts': 1, 'layout_z': 29.00408914521088, 'model_weight': 19.553, 'order_id': 918246, 'pid': 377209, 'print_id': 126897}, {'counts': 1, 'layout_z': 24.44397251338635, 'model_weight': 15.424, 'order_id': 918325, 'pid': 376974, 'print_id': 126899}, {'counts': 1, 'layout_z': 31.755406379699707, 'model_weight': 31.131, 'order_id': 918492, 'pid': 377584, 'print_id': 126900}, {'counts': 1, 'layout_z': 38.03699946264237, 'model_weight': 47.412, 'order_id': 918493, 'pid': 377587, 'print_id': 126901}, {'counts': 1, 'layout_z': 43.52919799223749, 'model_weight': 37.842, 'order_id': 918494, 'pid': 377589, 'print_id': 126902}, {'counts': 1, 'layout_z': 25.906302369108843, 'model_weight': 18.64, 'order_id': 918495, 'pid': 377590, 'print_id': 126903}, {'counts': 1, 'layout_z': 36.02611978829816, 'model_weight': 43.814, 'order_id': 918496, 'pid': 377591, 'print_id': 126904}, {'counts': 1, 'layout_z': 26.020689766262052, 'model_weight': 18.513, 'order_id': 918497, 'pid': 377594, 'print_id': 126905}, {'counts': 1, 'layout_z': 23.988078117370605, 'model_weight': 15.753, 'order_id': 918498, 'pid': 377596, 'print_id': 126906}, {'counts': 1, 'layout_z': 27.457814063914604, 'model_weight': 23.507, 'order_id': 918500, 'pid': 377601, 'print_id': 126908}, {'counts': 1, 'layout_z': 29.306090320672993, 'model_weight': 25.043, 'order_id': 918501, 'pid': 377605, 'print_id': 126909}, {'counts': 1, 'layout_z': 29.070231478924583, 'model_weight': 25.598, 'order_id': 918504, 'pid': 377606, 'print_id': 126910}, {'counts': 1, 'layout_z': 24.314504768436095, 'model_weight': 18.68, 'order_id': 918555, 'pid': 377684, 'print_id': 126911}, {'counts': 1, 'layout_z': 37.52979171030315, 'model_weight': 53.541, 'order_id': 918558, 'pid': 377689, 'print_id': 126913}, {'counts': 1, 'layout_z': 26.530791960490333, 'model_weight': 15.082, 'order_id': 918560, 'pid': 377702, 'print_id': 126915}, {'counts': 1, 'layout_z': 23.604568481445312, 'model_weight': 21.614, 'order_id': 918583, 'pid': 377748, 'print_id': 126917}, {'counts': 1, 'layout_z': 27.865868478825355, 'model_weight': 22.6, 'order_id': 918636, 'pid': 377819, 'print_id': 126919}, {'counts': 1, 'layout_z': 30.786012113461286, 'model_weight': 25.699, 'order_id': 919105, 'pid': 378621, 'print_id': 126926}, {'counts': 1, 'layout_z': 27.39871813917613, 'model_weight': 20.061, 'order_id': 919106, 'pid': 378638, 'print_id': 126927}, {'counts': 1, 'layout_z': 37.645312213517265, 'model_weight': 42.591, 'order_id': 919018, 'pid': 377979, 'print_id': 126929}, {'counts': 1, 'layout_z': 53.26858516168712, 'model_weight': 130.558, 'order_id': 919110, 'pid': 378650, 'print_id': 126930}, {'counts': 1, 'layout_z': 27.335996763557635, 'model_weight': 19.724, 'order_id': 919024, 'pid': 378409, 'print_id': 126935}, {'counts': 1, 'layout_z': 23.94061705626402, 'model_weight': 15.026, 'order_id': 917479, 'pid': 376087, 'print_id': 126940}, {'counts': 1, 'layout_z': 29.543430158218627, 'model_weight': 19.191, 'order_id': 919012, 'pid': 378375, 'print_id': 126943}, {'counts': 1, 'layout_z': 27.454958866692724, 'model_weight': 22.776, 'order_id': 918499, 'pid': 377599, 'print_id': 126946}, {'counts': 1, 'layout_z': 29.367137022488468, 'model_weight': 22.455, 'order_id': 918559, 'pid': 377700, 'print_id': 126947}, {'counts': 1, 'layout_z': 29.209802512215997, 'model_weight': 22.524, 'order_id': 918569, 'pid': 377740, 'print_id': 126948}, {'counts': 1, 'layout_z': 25.396360323579223, 'model_weight': 20.442, 'order_id': 919228, 'pid': 378700, 'print_id': 126949}, {'counts': 1, 'layout_z': 28.232575120695085, 'model_weight': 24.391, 'order_id': 919229, 'pid': 378701, 'print_id': 126950}, {'counts': 1, 'layout_z': 31.82000351720909, 'model_weight': 35.189, 'order_id': 918580, 'pid': 377743, 'print_id': 126951}, {'counts': 1, 'layout_z': 18.000296592712402, 'model_weight': 5.264, 'order_id': 919230, 'pid': 378702, 'print_id': 126952}, {'counts': 1, 'layout_z': 32.6660716900792, 'model_weight': 21.182, 'order_id': 918581, 'pid': 377744, 'print_id': 126953}, {'counts': 1, 'layout_z': 20.317776580664418, 'model_weight': 6.793, 'order_id': 919231, 'pid': 378703, 'print_id': 126954}, {'counts': 1, 'layout_z': 23.08764836740975, 'model_weight': 12.265, 'order_id': 918582, 'pid': 377745, 'print_id': 126955}, {'counts': 1, 'layout_z': 22.843233481777308, 'model_weight': 12.229, 'order_id': 918783, 'pid': 378073, 'print_id': 126956}, {'counts': 1, 'layout_z': 17.441239242068544, 'model_weight': 4.888, 'order_id': 919233, 'pid': 378705, 'print_id': 126957}, {'counts': 1, 'layout_z': 18.11011046132721, 'model_weight': 5.835, 'order_id': 919234, 'pid': 378706, 'print_id': 126958}, {'counts': 1, 'layout_z': 16.299313366344762, 'model_weight': 4.977, 'order_id': 919232, 'pid': 378704, 'print_id': 126959}, {'counts': 1, 'layout_z': 16.977858537144982, 'model_weight': 4.423, 'order_id': 919235, 'pid': 378707, 'print_id': 126960}, {'counts': 1, 'layout_z': 19.66670311054518, 'model_weight': 6.836, 'order_id': 919236, 'pid': 378708, 'print_id': 126962}, {'counts': 1, 'layout_z': 16.450413533497088, 'model_weight': 4.404, 'order_id': 919237, 'pid': 378709, 'print_id': 126963}, {'counts': 1, 'layout_z': 19.12714231472859, 'model_weight': 6.788, 'order_id': 919238, 'pid': 378711, 'print_id': 126965}, {'counts': 1, 'layout_z': 15.662716096748905, 'model_weight': 5.399, 'order_id': 919239, 'pid': 378712, 'print_id': 126966}, {'counts': 1, 'layout_z': 17.984565068326873, 'model_weight': 5.224, 'order_id': 919240, 'pid': 378713, 'print_id': 126968}, {'counts': 1, 'layout_z': 18.779169416653758, 'model_weight': 6.097, 'order_id': 919243, 'pid': 378715, 'print_id': 126971}, {'counts': 1, 'layout_z': 17.88619578087645, 'model_weight': 6.155, 'order_id': 919244, 'pid': 378716, 'print_id': 126972}, {'counts': 1, 'layout_z': 18.061075125597053, 'model_weight': 6.012, 'order_id': 919245, 'pid': 378717, 'print_id': 126973}, {'counts': 1, 'layout_z': 18.02680370824573, 'model_weight': 5.248, 'order_id': 919246, 'pid': 378718, 'print_id': 126974}, {'counts': 1, 'layout_z': 18.23313922758454, 'model_weight': 4.889, 'order_id': 919247, 'pid': 378719, 'print_id': 126975}, {'counts': 1, 'layout_z': 15.10249208974721, 'model_weight': 4.305, 'order_id': 919248, 'pid': 378720, 'print_id': 126976}, {'counts': 1, 'layout_z': 26.393060472696845, 'model_weight': 18.787, 'order_id': 919249, 'pid': 378721, 'print_id': 126978}, {'counts': 1, 'layout_z': 30.27226940032898, 'model_weight': 20.279, 'order_id': 919250, 'pid': 378722, 'print_id': 126979}, {'counts': 1, 'layout_z': 33.275894165039055, 'model_weight': 30.53, 'order_id': 919026, 'pid': 378415, 'print_id': 126980}, {'counts': 1, 'layout_z': 19.061190510799264, 'model_weight': 7.443, 'order_id': 919251, 'pid': 378723, 'print_id': 126981}, {'counts': 1, 'layout_z': 22.21409211773961, 'model_weight': 7.147, 'order_id': 919252, 'pid': 378724, 'print_id': 126982}, {'counts': 1, 'layout_z': 31.450466048829572, 'model_weight': 30.067, 'order_id': 919030, 'pid': 378420, 'print_id': 126983}, {'counts': 1, 'layout_z': 16.95446233116205, 'model_weight': 5.067, 'order_id': 919253, 'pid': 378725, 'print_id': 126984}, {'counts': 1, 'layout_z': 26.16507487130793, 'model_weight': 18.558, 'order_id': 919031, 'pid': 378425, 'print_id': 126985}, {'counts': 1, 'layout_z': 16.012466453733403, 'model_weight': 6.216, 'order_id': 919255, 'pid': 378727, 'print_id': 126987}, {'counts': 1, 'layout_z': 20.30786979564451, 'model_weight': 7.149, 'order_id': 919256, 'pid': 378728, 'print_id': 126989}, {'counts': 1, 'layout_z': 21.65708123870792, 'model_weight': 8.508, 'order_id': 919257, 'pid': 378729, 'print_id': 126990}, {'counts': 1, 'layout_z': 17.955288402689746, 'model_weight': 6.014, 'order_id': 919258, 'pid': 378730, 'print_id': 126991}, {'counts': 1, 'layout_z': 19.3577859181912, 'model_weight': 7.269, 'order_id': 919259, 'pid': 378731, 'print_id': 126992}, {'counts': 1, 'layout_z': 16.81846154205583, 'model_weight': 4.525, 'order_id': 919260, 'pid': 378732, 'print_id': 126993}, {'counts': 1, 'layout_z': 27.407528874290133, 'model_weight': 20.443, 'order_id': 919261, 'pid': 378733, 'print_id': 126994}, {'counts': 1, 'layout_z': 34.374910104166425, 'model_weight': 24.786, 'order_id': 919263, 'pid': 378737, 'print_id': 126995}, {'counts': 1, 'layout_z': 22.392321514992663, 'model_weight': 13.752, 'order_id': 919264, 'pid': 378738, 'print_id': 126996}, {'counts': 1, 'layout_z': 18.011880302127423, 'model_weight': 5.473, 'order_id': 919265, 'pid': 378739, 'print_id': 126997}, {'counts': 1, 'layout_z': 28.383317524486593, 'model_weight': 21.997, 'order_id': 919266, 'pid': 378743, 'print_id': 126998}, {'counts': 1, 'layout_z': 23.672918816217553, 'model_weight': 16.46, 'order_id': 917480, 'pid': 376067, 'print_id': 126999}, {'counts': 1, 'layout_z': 16.479959151650828, 'model_weight': 5.821, 'order_id': 919267, 'pid': 378744, 'print_id': 127000}, {'counts': 1, 'layout_z': 35.155273295967994, 'model_weight': 48.551, 'order_id': 919268, 'pid': 378745, 'print_id': 127001}, {'counts': 1, 'layout_z': 25.231643428560584, 'model_weight': 19.358, 'order_id': 917478, 'pid': 376098, 'print_id': 127002}, {'counts': 1, 'layout_z': 16.688496289759275, 'model_weight': 5.743, 'order_id': 919269, 'pid': 378746, 'print_id': 127003}, {'counts': 1, 'layout_z': 27.167236561321484, 'model_weight': 21.521, 'order_id': 919270, 'pid': 378747, 'print_id': 127004}, {'counts': 1, 'layout_z': 25.463308095650035, 'model_weight': 10.912, 'order_id': 919271, 'pid': 378748, 'print_id': 127005}, {'counts': 1, 'layout_z': 25.206470863711544, 'model_weight': 10.581, 'order_id': 919272, 'pid': 378749, 'print_id': 127007}, {'counts': 1, 'layout_z': 26.25579441073758, 'model_weight': 13.336, 'order_id': 919273, 'pid': 378750, 'print_id': 127008}, {'counts': 1, 'layout_z': 22.231088289345216, 'model_weight': 12.438, 'order_id': 919014, 'pid': 378382, 'print_id': 127009}, {'counts': 1, 'layout_z': 26.20472244790368, 'model_weight': 14.247, 'order_id': 919274, 'pid': 378751, 'print_id': 127010}, {'counts': 1, 'layout_z': 25.164680222473894, 'model_weight': 15.369, 'order_id': 918502, 'pid': 377099, 'print_id': 127015}, {'counts': 1, 'layout_z': 24.15820278087022, 'model_weight': 16.648, 'order_id': 919219, 'pid': 378697, 'print_id': 127017}, {'counts': 1, 'layout_z': 16.35217992064665, 'model_weight': 5.306, 'order_id': 919182, 'pid': 378518, 'print_id': 127018}, {'counts': 1, 'layout_z': 21.25218355838687, 'model_weight': 10.043, 'order_id': 918230, 'pid': 377200, 'print_id': 127019}, {'counts': 1, 'layout_z': 33.729734231090276, 'model_weight': 49.911, 'order_id': 919276, 'pid': 378776, 'print_id': 127020}, {'counts': 1, 'layout_z': 24.560107711202825, 'model_weight': 8.349, 'order_id': 919282, 'pid': 378798, 'print_id': 127027}, {'counts': 1, 'layout_z': 21.12561534577449, 'model_weight': 7.557, 'order_id': 919287, 'pid': 378803, 'print_id': 127031}, {'counts': 1, 'layout_z': 25.091119425246845, 'model_weight': 14.908, 'order_id': 919292, 'pid': 378808, 'print_id': 127037}, {'counts': 1, 'layout_z': 26.77140074489941, 'model_weight': 21.134, 'order_id': 919293, 'pid': 378809, 'print_id': 127038}, {'counts': 1, 'layout_z': 27.517811122519632, 'model_weight': 20.529, 'order_id': 919294, 'pid': 378810, 'print_id': 127040}, {'counts': 1, 'layout_z': 30.62898230748005, 'model_weight': 22.053, 'order_id': 918507, 'pid': 377607, 'print_id': 127041}, {'counts': 1, 'layout_z': 27.056545744705435, 'model_weight': 20.734, 'order_id': 919295, 'pid': 378811, 'print_id': 127042}, {'counts': 1, 'layout_z': 23.059078062109105, 'model_weight': 13.642, 'order_id': 918508, 'pid': 377610, 'print_id': 127044}, {'counts': 1, 'layout_z': 24.373135283888665, 'model_weight': 18.763, 'order_id': 919297, 'pid': 378814, 'print_id': 127045}, {'counts': 1, 'layout_z': 29.93312254092476, 'model_weight': 28.184, 'order_id': 918556, 'pid': 377685, 'print_id': 127046}, {'counts': 1, 'layout_z': 35.433726822945225, 'model_weight': 46.28, 'order_id': 919298, 'pid': 378815, 'print_id': 127047}, {'counts': 1, 'layout_z': 32.148966009725754, 'model_weight': 43.827, 'order_id': 919299, 'pid': 378816, 'print_id': 127048}, {'counts': 1, 'layout_z': 24.873977270254855, 'model_weight': 17.694, 'order_id': 919300, 'pid': 378817, 'print_id': 127049}, {'counts': 1, 'layout_z': 28.89906702733768, 'model_weight': 19.09, 'order_id': 918568, 'pid': 377739, 'print_id': 127050}, {'counts': 1, 'layout_z': 29.072691539058013, 'model_weight': 24.701, 'order_id': 919301, 'pid': 378818, 'print_id': 127051}, {'counts': 1, 'layout_z': 22.799459457397457, 'model_weight': 17.986, 'order_id': 919302, 'pid': 378819, 'print_id': 127052}, {'counts': 1, 'layout_z': 28.30774288615256, 'model_weight': 23.62, 'order_id': 919303, 'pid': 378820, 'print_id': 127054}, {'counts': 1, 'layout_z': 27.685387987537027, 'model_weight': 18.804, 'order_id': 919304, 'pid': 378821, 'print_id': 127055}, {'counts': 1, 'layout_z': 21.501308067252822, 'model_weight': 7.512, 'order_id': 919305, 'pid': 378822, 'print_id': 127056}, {'counts': 1, 'layout_z': 31.91424955213119, 'model_weight': 37.428, 'order_id': 919307, 'pid': 378823, 'print_id': 127057}, {'counts': 1, 'layout_z': 32.039728096944266, 'model_weight': 35.473, 'order_id': 919308, 'pid': 378824, 'print_id': 127058}, {'counts': 1, 'layout_z': 33.27248765777313, 'model_weight': 37.264, 'order_id': 919309, 'pid': 378825, 'print_id': 127059}, {'counts': 1, 'layout_z': 31.01150813726163, 'model_weight': 27.421, 'order_id': 919310, 'pid': 378826, 'print_id': 127060}, {'counts': 1, 'layout_z': 25.02092682146464, 'model_weight': 16.694, 'order_id': 919311, 'pid': 378827, 'print_id': 127061}, {'counts': 1, 'layout_z': 27.649195956325578, 'model_weight': 20.131, 'order_id': 919314, 'pid': 378831, 'print_id': 127062}, {'counts': 1, 'layout_z': 29.323484806820524, 'model_weight': 23.913, 'order_id': 919313, 'pid': 378830, 'print_id': 127063}, {'counts': 1, 'layout_z': 29.93491564175814, 'model_weight': 27.02, 'order_id': 919312, 'pid': 378829, 'print_id': 127064}, {'counts': 1, 'layout_z': 29.220408560439278, 'model_weight': 25.891, 'order_id': 919316, 'pid': 378834, 'print_id': 127066}, {'counts': 1, 'layout_z': 27.086421547538176, 'model_weight': 21.186, 'order_id': 919317, 'pid': 378835, 'print_id': 127067}, {'counts': 1, 'layout_z': 29.687568424918922, 'model_weight': 22.681, 'order_id': 919318, 'pid': 378836, 'print_id': 127068}, {'counts': 1, 'layout_z': 30.30524230403575, 'model_weight': 26.048, 'order_id': 919319, 'pid': 378837, 'print_id': 127069}, {'counts': 1, 'layout_z': 24.082729373309707, 'model_weight': 18.03, 'order_id': 919322, 'pid': 378840, 'print_id': 127072}, {'counts': 1, 'layout_z': 27.8159610614131, 'model_weight': 21.29, 'order_id': 919321, 'pid': 378839, 'print_id': 127073}, {'counts': 1, 'layout_z': 28.93995122935326, 'model_weight': 21.318, 'order_id': 919326, 'pid': 378844, 'print_id': 127074}, {'counts': 1, 'layout_z': 27.58645357098898, 'model_weight': 23.726, 'order_id': 919324, 'pid': 378842, 'print_id': 127076}, {'counts': 1, 'layout_z': 26.337441702233544, 'model_weight': 23.781, 'order_id': 919329, 'pid': 378847, 'print_id': 127077}, {'counts': 1, 'layout_z': 25.032097288221692, 'model_weight': 17.614, 'order_id': 919328, 'pid': 378846, 'print_id': 127078}, {'counts': 1, 'layout_z': 27.0008910375328, 'model_weight': 20.06, 'order_id': 919327, 'pid': 378845, 'print_id': 127079}, {'counts': 1, 'layout_z': 28.573475817385898, 'model_weight': 22.823, 'order_id': 919334, 'pid': 378852, 'print_id': 127081}, {'counts': 1, 'layout_z': 23.589348437207477, 'model_weight': 19.486, 'order_id': 919335, 'pid': 378853, 'print_id': 127082}, {'counts': 1, 'layout_z': 28.29603645275283, 'model_weight': 20.464, 'order_id': 919330, 'pid': 378848, 'print_id': 127083}, {'counts': 1, 'layout_z': 36.094532611977854, 'model_weight': 19.122, 'order_id': 919333, 'pid': 378851, 'print_id': 127084}, {'counts': 1, 'layout_z': 26.209464742348054, 'model_weight': 20.434, 'order_id': 919331, 'pid': 378849, 'print_id': 127085}]} -# local_data= {"machine_print_counts":50, 'machine_type': 'small_machine',"pre_batch_id":991112,"print_machine_id":22,"print_orders":[{"counts":1,"layout_z":3.543965775898459,"model_weight":12.833,"order_id":857420,"pid":268473,"print_id":85240},{"counts":1,"layout_z":7.798861189952786,"model_weight":13.784,"order_id":875986,"pid":305425,"print_id":88136}]} +local_data= {"machine_print_counts":50, 'machine_type': 'small_machine',"pre_batch_id":991112,"print_machine_id":22,"print_orders":[{"counts":1,"layout_z":3.543965775898459,"model_weight":12.833,"order_id":857420,"pid":268473,"print_id":85240},{"counts":1,"layout_z":7.798861189952786,"model_weight":13.784,"order_id":875986,"pid":305425,"print_id":88136}]} # local_data= {'machine_print_counts': 130, 'machine_type': 'big_machine', 'pre_batch_id': 9910188, 'print_machine_id': 15, 'print_orders': [{'counts': 1, 'layout_z': 32.65071311811036, 'model_weight': 68.084, 'order_id': 926400, 'pid': 389256, 'print_id': 134168}, {'counts': 1, 'layout_z': 31.780598561603746, 'model_weight': 25.511, 'order_id': 926573, 'pid': 389465, 'print_id': 134170}, {'counts': 1, 'layout_z': 5.202356934547428, 'model_weight': 11.705, 'order_id': 925909, 'pid': 388682, 'print_id': 134178}, {'counts': 1, 'layout_z': 5.1447470188140905, 'model_weight': 12.186, 'order_id': 925910, 'pid': 388683, 'print_id': 134179}, {'counts': 1, 'layout_z': 5.013986945152283, 'model_weight': 11.364, 'order_id': 925932, 'pid': 388707, 'print_id': 134180}, {'counts': 1, 'layout_z': 5.020000934600831, 'model_weight': 11.396, 'order_id': 926770, 'pid': 389842, 'print_id': 134183}, {'counts': 1, 'layout_z': 40.05588230441501, 'model_weight': 60.578, 'order_id': 926776, 'pid': 389895, 'print_id': 134185}, {'counts': 1, 'layout_z': 46.23669371110479, 'model_weight': 56.196, 'order_id': 926778, 'pid': 389918, 'print_id': 134186}, {'counts': 1, 'layout_z': 24.822566986083984, 'model_weight': 31.522, 'order_id': 926268, 'pid': 389067, 'print_id': 134211}, {'counts': 1, 'layout_z': 25.085425667575343, 'model_weight': 31.077, 'order_id': 926267, 'pid': 389066, 'print_id': 134212}, {'counts': 1, 'layout_z': 18.154759649173364, 'model_weight': 6.256, 'order_id': 927059, 'pid': 390269, 'print_id': 134216}, {'counts': 1, 'layout_z': 24.2420189021486, 'model_weight': 14.472, 'order_id': 927065, 'pid': 390275, 'print_id': 134220}, {'counts': 1, 'layout_z': 16.757099114319693, 'model_weight': 5.335, 'order_id': 927078, 'pid': 390299, 'print_id': 134226}, {'counts': 1, 'layout_z': 18.796780948141503, 'model_weight': 7.295, 'order_id': 927079, 'pid': 390300, 'print_id': 134228}, {'counts': 1, 'layout_z': 17.920740666248633, 'model_weight': 7.869, 'order_id': 927082, 'pid': 390303, 'print_id': 134229}, {'counts': 1, 'layout_z': 16.320665859825066, 'model_weight': 4.73, 'order_id': 927081, 'pid': 390302, 'print_id': 134230}, {'counts': 1, 'layout_z': 23.250497020255544, 'model_weight': 15.567, 'order_id': 927100, 'pid': 390331, 'print_id': 134242}, {'counts': 1, 'layout_z': 26.276874511435977, 'model_weight': 19.813, 'order_id': 927103, 'pid': 390334, 'print_id': 134246}, {'counts': 1, 'layout_z': 17.08049576865031, 'model_weight': 5.858, 'order_id': 927111, 'pid': 390342, 'print_id': 134254}, {'counts': 1, 'layout_z': 19.196685578562278, 'model_weight': 6.465, 'order_id': 927117, 'pid': 390347, 'print_id': 134261}, {'counts': 1, 'layout_z': 26.507062216602122, 'model_weight': 14.287, 'order_id': 927116, 'pid': 390346, 'print_id': 134262}, {'counts': 1, 'layout_z': 16.440782827635232, 'model_weight': 5.493, 'order_id': 927118, 'pid': 390348, 'print_id': 134263}, {'counts': 1, 'layout_z': 41.42868301509347, 'model_weight': 68.274, 'order_id': 927122, 'pid': 390354, 'print_id': 134264}, {'counts': 1, 'layout_z': 15.705368176518945, 'model_weight': 4.423, 'order_id': 927119, 'pid': 390349, 'print_id': 134265}, {'counts': 1, 'layout_z': 16.363223697461702, 'model_weight': 5.634, 'order_id': 927120, 'pid': 390351, 'print_id': 134266}, {'counts': 1, 'layout_z': 24.653417686230497, 'model_weight': 17.851, 'order_id': 927121, 'pid': 390353, 'print_id': 134267}, {'counts': 1, 'layout_z': 24.327745611835496, 'model_weight': 28.23, 'order_id': 926040, 'pid': 388832, 'print_id': 134268}, {'counts': 1, 'layout_z': 27.301779030909188, 'model_weight': 23.926, 'order_id': 923281, 'pid': 385001, 'print_id': 134269}, {'counts': 1, 'layout_z': 25.869120288866796, 'model_weight': 32.329, 'order_id': 926077, 'pid': 388864, 'print_id': 134270}, {'counts': 1, 'layout_z': 36.37214874852985, 'model_weight': 65.744, 'order_id': 926086, 'pid': 388873, 'print_id': 134271}, {'counts': 1, 'layout_z': 37.44403689090713, 'model_weight': 80.67, 'order_id': 926097, 'pid': 388884, 'print_id': 134273}, {'counts': 1, 'layout_z': 27.890566642299536, 'model_weight': 22.715, 'order_id': 927127, 'pid': 390372, 'print_id': 134274}, {'counts': 1, 'layout_z': 17.392635113631542, 'model_weight': 5.297, 'order_id': 927128, 'pid': 390373, 'print_id': 134275}, {'counts': 1, 'layout_z': 26.139986312446986, 'model_weight': 15.312, 'order_id': 927129, 'pid': 390375, 'print_id': 134276}, {'counts': 1, 'layout_z': 17.491576609126483, 'model_weight': 6.495, 'order_id': 927130, 'pid': 390376, 'print_id': 134277}, {'counts': 1, 'layout_z': 15.57976295844962, 'model_weight': 5.443, 'order_id': 927131, 'pid': 390377, 'print_id': 134278}, {'counts': 1, 'layout_z': 16.006999969482422, 'model_weight': 4.683, 'order_id': 927132, 'pid': 390378, 'print_id': 134279}, {'counts': 1, 'layout_z': 18.770485206437296, 'model_weight': 6.114, 'order_id': 927137, 'pid': 390383, 'print_id': 134280}, {'counts': 1, 'layout_z': 21.480148458997267, 'model_weight': 9.586, 'order_id': 927133, 'pid': 390379, 'print_id': 134281}, {'counts': 1, 'layout_z': 20.59952380589328, 'model_weight': 7.421, 'order_id': 927136, 'pid': 390382, 'print_id': 134282}, {'counts': 1, 'layout_z': 15.365016729011936, 'model_weight': 4.376, 'order_id': 927135, 'pid': 390381, 'print_id': 134283}, {'counts': 1, 'layout_z': 21.48488520504518, 'model_weight': 10.838, 'order_id': 927138, 'pid': 390384, 'print_id': 134284}, {'counts': 1, 'layout_z': 17.422998428344727, 'model_weight': 6.562, 'order_id': 927134, 'pid': 390380, 'print_id': 134285}, {'counts': 1, 'layout_z': 17.269148977521677, 'model_weight': 5.341, 'order_id': 927141, 'pid': 390385, 'print_id': 134286}, {'counts': 1, 'layout_z': 17.616673083977116, 'model_weight': 5.516, 'order_id': 927142, 'pid': 390386, 'print_id': 134287}, {'counts': 1, 'layout_z': 18.469826939143005, 'model_weight': 6.298, 'order_id': 927144, 'pid': 390392, 'print_id': 134288}, {'counts': 1, 'layout_z': 18.852489338496998, 'model_weight': 6.215, 'order_id': 927143, 'pid': 390387, 'print_id': 134289}, {'counts': 1, 'layout_z': 19.560264701204673, 'model_weight': 7.124, 'order_id': 927145, 'pid': 390393, 'print_id': 134290}, {'counts': 1, 'layout_z': 19.987959440586536, 'model_weight': 7.778, 'order_id': 927146, 'pid': 390394, 'print_id': 134291}, {'counts': 1, 'layout_z': 15.902773586657279, 'model_weight': 4.854, 'order_id': 927147, 'pid': 390395, 'print_id': 134292}, {'counts': 1, 'layout_z': 27.755594451741043, 'model_weight': 17.514, 'order_id': 927148, 'pid': 390396, 'print_id': 134293}, {'counts': 1, 'layout_z': 26.844542772232383, 'model_weight': 20.153, 'order_id': 927150, 'pid': 390420, 'print_id': 134294}, {'counts': 1, 'layout_z': 25.773853512225724, 'model_weight': 22.235, 'order_id': 927149, 'pid': 390419, 'print_id': 134295}, {'counts': 1, 'layout_z': 20.20053929935677, 'model_weight': 6.54, 'order_id': 927152, 'pid': 390422, 'print_id': 134296}, {'counts': 1, 'layout_z': 18.71118355252402, 'model_weight': 6.902, 'order_id': 927151, 'pid': 390421, 'print_id': 134297}, {'counts': 1, 'layout_z': 17.059319485613315, 'model_weight': 5.473, 'order_id': 927153, 'pid': 390424, 'print_id': 134298}, {'counts': 1, 'layout_z': 18.05758855324391, 'model_weight': 6.288, 'order_id': 927154, 'pid': 390425, 'print_id': 134299}, {'counts': 1, 'layout_z': 16.603270311053453, 'model_weight': 5.741, 'order_id': 927155, 'pid': 390426, 'print_id': 134300}, {'counts': 1, 'layout_z': 18.950248650739532, 'model_weight': 7.684, 'order_id': 927156, 'pid': 390427, 'print_id': 134301}, {'counts': 1, 'layout_z': 16.934639519262035, 'model_weight': 5.927, 'order_id': 927157, 'pid': 390428, 'print_id': 134302}, {'counts': 1, 'layout_z': 17.13149879583868, 'model_weight': 7.045, 'order_id': 927158, 'pid': 390429, 'print_id': 134303}, {'counts': 1, 'layout_z': 18.393202238584358, 'model_weight': 7.193, 'order_id': 927159, 'pid': 390430, 'print_id': 134304}, {'counts': 1, 'layout_z': 35.9323819932503, 'model_weight': 58.151, 'order_id': 927160, 'pid': 390431, 'print_id': 134305}, {'counts': 1, 'layout_z': 37.75844651686096, 'model_weight': 49.587, 'order_id': 927161, 'pid': 390432, 'print_id': 134306}, {'counts': 1, 'layout_z': 16.874065328823466, 'model_weight': 6.219, 'order_id': 927162, 'pid': 390433, 'print_id': 134307}, {'counts': 1, 'layout_z': 18.414387898564097, 'model_weight': 5.844, 'order_id': 927163, 'pid': 390434, 'print_id': 134308}, {'counts': 1, 'layout_z': 17.905785200652705, 'model_weight': 6.017, 'order_id': 927164, 'pid': 390435, 'print_id': 134309}, {'counts': 1, 'layout_z': 21.346454278195992, 'model_weight': 5.179, 'order_id': 927167, 'pid': 390437, 'print_id': 134310}, {'counts': 1, 'layout_z': 30.66795771415867, 'model_weight': 24.714, 'order_id': 927166, 'pid': 390436, 'print_id': 134311}, {'counts': 1, 'layout_z': 17.432901489473107, 'model_weight': 4.694, 'order_id': 927168, 'pid': 390438, 'print_id': 134312}, {'counts': 1, 'layout_z': 24.550930775969377, 'model_weight': 17.239, 'order_id': 927169, 'pid': 390439, 'print_id': 134313}, {'counts': 1, 'layout_z': 22.537293045981365, 'model_weight': 14.848, 'order_id': 927170, 'pid': 390440, 'print_id': 134314}, {'counts': 1, 'layout_z': 28.220493636017164, 'model_weight': 20.312, 'order_id': 927171, 'pid': 390441, 'print_id': 134315}, {'counts': 1, 'layout_z': 41.750774472474205, 'model_weight': 61.429, 'order_id': 927172, 'pid': 390442, 'print_id': 134316}, {'counts': 1, 'layout_z': 24.23650941926192, 'model_weight': 15.224, 'order_id': 927173, 'pid': 390443, 'print_id': 134317}, {'counts': 1, 'layout_z': 25.89460923764092, 'model_weight': 19.268, 'order_id': 927174, 'pid': 390444, 'print_id': 134318}, {'counts': 1, 'layout_z': 25.238572153876916, 'model_weight': 24.54, 'order_id': 927175, 'pid': 390445, 'print_id': 134319}, {'counts': 1, 'layout_z': 26.873458297847147, 'model_weight': 24.266, 'order_id': 927176, 'pid': 390446, 'print_id': 134320}, {'counts': 1, 'layout_z': 26.089652026840014, 'model_weight': 25.631, 'order_id': 927177, 'pid': 390448, 'print_id': 134321}, {'counts': 1, 'layout_z': 22.624792153887427, 'model_weight': 10.327, 'order_id': 927181, 'pid': 390457, 'print_id': 134322}, {'counts': 1, 'layout_z': 18.669002278439187, 'model_weight': 7.258, 'order_id': 927182, 'pid': 390458, 'print_id': 134323}, {'counts': 1, 'layout_z': 16.194471181984213, 'model_weight': 4.547, 'order_id': 927183, 'pid': 390459, 'print_id': 134324}, {'counts': 1, 'layout_z': 21.323386722151447, 'model_weight': 8.061, 'order_id': 927184, 'pid': 390460, 'print_id': 134325}, {'counts': 1, 'layout_z': 17.550341339464673, 'model_weight': 4.832, 'order_id': 927185, 'pid': 390461, 'print_id': 134326}, {'counts': 1, 'layout_z': 30.371844240544426, 'model_weight': 23.477, 'order_id': 927186, 'pid': 390462, 'print_id': 134327}, {'counts': 1, 'layout_z': 21.037708986250312, 'model_weight': 7.89, 'order_id': 927187, 'pid': 390463, 'print_id': 134328}, {'counts': 1, 'layout_z': 25.843996300785378, 'model_weight': 20.364, 'order_id': 927193, 'pid': 390464, 'print_id': 134332}, {'counts': 1, 'layout_z': 30.84036590137794, 'model_weight': 25.096, 'order_id': 927194, 'pid': 390465, 'print_id': 134333}, {'counts': 1, 'layout_z': 16.537615030190757, 'model_weight': 5.833, 'order_id': 927196, 'pid': 390467, 'print_id': 134334}, {'counts': 1, 'layout_z': 25.506297485165973, 'model_weight': 18.428, 'order_id': 927195, 'pid': 390466, 'print_id': 134335}, {'counts': 1, 'layout_z': 18.405175628468076, 'model_weight': 5.093, 'order_id': 927197, 'pid': 390468, 'print_id': 134336}, {'counts': 1, 'layout_z': 17.521739417936622, 'model_weight': 5.701, 'order_id': 927198, 'pid': 390469, 'print_id': 134337}, {'counts': 1, 'layout_z': 29.079458999050487, 'model_weight': 46.647, 'order_id': 926132, 'pid': 388919, 'print_id': 134338}, {'counts': 1, 'layout_z': 18.959416727392423, 'model_weight': 8.118, 'order_id': 927199, 'pid': 390470, 'print_id': 134339}, {'counts': 1, 'layout_z': 18.35578268103861, 'model_weight': 6.516, 'order_id': 927201, 'pid': 390471, 'print_id': 134340}, {'counts': 1, 'layout_z': 29.848748217734656, 'model_weight': 28.176, 'order_id': 927202, 'pid': 390472, 'print_id': 134341}, {'counts': 1, 'layout_z': 29.01492215681987, 'model_weight': 25.035, 'order_id': 927203, 'pid': 390473, 'print_id': 134342}, {'counts': 1, 'layout_z': 18.707999229431152, 'model_weight': 7.054, 'order_id': 927204, 'pid': 390474, 'print_id': 134343}, {'counts': 1, 'layout_z': 15.296760495863914, 'model_weight': 4.821, 'order_id': 927205, 'pid': 390475, 'print_id': 134344}, {'counts': 1, 'layout_z': 23.799352914697277, 'model_weight': 28.402, 'order_id': 926133, 'pid': 388920, 'print_id': 134345}, {'counts': 1, 'layout_z': 15.731797818452865, 'model_weight': 4.643, 'order_id': 927206, 'pid': 390476, 'print_id': 134346}, {'counts': 1, 'layout_z': 41.52927646544869, 'model_weight': 71.483, 'order_id': 927207, 'pid': 390477, 'print_id': 134347}, {'counts': 1, 'layout_z': 38.912796572468125, 'model_weight': 52.911, 'order_id': 927208, 'pid': 390478, 'print_id': 134348}, {'counts': 1, 'layout_z': 20.210533386684535, 'model_weight': 7.052, 'order_id': 927209, 'pid': 390479, 'print_id': 134349}, {'counts': 1, 'layout_z': 25.121042400893273, 'model_weight': 19.767, 'order_id': 926136, 'pid': 388923, 'print_id': 134350}, {'counts': 1, 'layout_z': 22.556339860084357, 'model_weight': 11.815, 'order_id': 927211, 'pid': 390481, 'print_id': 134351}, {'counts': 1, 'layout_z': 18.46208941910043, 'model_weight': 5.893, 'order_id': 927210, 'pid': 390480, 'print_id': 134352}, {'counts': 1, 'layout_z': 32.68489185465737, 'model_weight': 45.948, 'order_id': 927212, 'pid': 390482, 'print_id': 134353}, {'counts': 1, 'layout_z': 24.92353755904854, 'model_weight': 17.616, 'order_id': 927214, 'pid': 390483, 'print_id': 134354}, {'counts': 1, 'layout_z': 21.95895233294398, 'model_weight': 7.069, 'order_id': 927215, 'pid': 390484, 'print_id': 134355}, {'counts': 1, 'layout_z': 20.092923892436325, 'model_weight': 7.836, 'order_id': 927216, 'pid': 390485, 'print_id': 134356}, {'counts': 1, 'layout_z': 26.52895418595368, 'model_weight': 19.424, 'order_id': 927217, 'pid': 390486, 'print_id': 134357}, {'counts': 1, 'layout_z': 30.77656556343579, 'model_weight': 24.309, 'order_id': 927218, 'pid': 390487, 'print_id': 134358}, {'counts': 1, 'layout_z': 35.55027093112967, 'model_weight': 79.912, 'order_id': 926144, 'pid': 388930, 'print_id': 134359}, {'counts': 1, 'layout_z': 34.666106095305544, 'model_weight': 45.102, 'order_id': 927219, 'pid': 390488, 'print_id': 134360}, {'counts': 1, 'layout_z': 19.70823874073735, 'model_weight': 7.716, 'order_id': 927220, 'pid': 390489, 'print_id': 134361}, {'counts': 1, 'layout_z': 20.494914757611284, 'model_weight': 23.484, 'order_id': 926167, 'pid': 388953, 'print_id': 134362}, {'counts': 1, 'layout_z': 23.325873325059348, 'model_weight': 21.341, 'order_id': 926172, 'pid': 388958, 'print_id': 134363}, {'counts': 1, 'layout_z': 31.17877079215529, 'model_weight': 34.749, 'order_id': 927230, 'pid': 390496, 'print_id': 134364}, {'counts': 1, 'layout_z': 35.113171234632325, 'model_weight': 52.7, 'order_id': 927229, 'pid': 390495, 'print_id': 134365}, {'counts': 1, 'layout_z': 33.07103017293801, 'model_weight': 22.034, 'order_id': 927232, 'pid': 390498, 'print_id': 134366}, {'counts': 1, 'layout_z': 37.581496313110925, 'model_weight': 52.109, 'order_id': 927231, 'pid': 390497, 'print_id': 134367}, {'counts': 1, 'layout_z': 17.542512801134045, 'model_weight': 6.737, 'order_id': 927233, 'pid': 390499, 'print_id': 134368}, {'counts': 1, 'layout_z': 32.368560440954866, 'model_weight': 32.587, 'order_id': 927234, 'pid': 390500, 'print_id': 134369}, {'counts': 1, 'layout_z': 33.806879483311434, 'model_weight': 41.356, 'order_id': 927236, 'pid': 390502, 'print_id': 134370}, {'counts': 1, 'layout_z': 19.460627187140275, 'model_weight': 6.741, 'order_id': 927237, 'pid': 390503, 'print_id': 134371}, {'counts': 1, 'layout_z': 27.412082567923058, 'model_weight': 21.154, 'order_id': 927239, 'pid': 390505, 'print_id': 134372}, {'counts': 1, 'layout_z': 18.139268993783688, 'model_weight': 6.906, 'order_id': 927238, 'pid': 390504, 'print_id': 134373}, {'counts': 1, 'layout_z': 36.699612270516404, 'model_weight': 51.275, 'order_id': 927235, 'pid': 390501, 'print_id': 134374}, {'counts': 1, 'layout_z': 29.11257547114117, 'model_weight': 25.871, 'order_id': 927240, 'pid': 390506, 'print_id': 134375}]} -local_data= {'machine_print_counts': 60, 'machine_type': 'small_machine', 'pre_batch_id': 10284, 'print_machine_id': 1, 'print_orders': [{'counts': 1, 'layout_z': 6.981930971145635, 'model_weight': 26.776, 'order_id': 929174, 'pid': 393697, 'print_id': 138265}, {'counts': 1, 'layout_z': 4.955404043197634, 'model_weight': 9.22, 'order_id': 931997, 'pid': 397013, 'print_id': 138846}, {'counts': 1, 'layout_z': 4.771067023277285, 'model_weight': 11.786, 'order_id': 932000, 'pid': 397016, 'print_id': 138851}, {'counts': 1, 'layout_z': 5.249161005020142, 'model_weight': 10.024, 'order_id': 932003, 'pid': 397019, 'print_id': 138854}, {'counts': 1, 'layout_z': 5.251940011978151, 'model_weight': 10.104, 'order_id': 932005, 'pid': 397021, 'print_id': 138856}, {'counts': 1, 'layout_z': 5.263678073883059, 'model_weight': 10.688, 'order_id': 932009, 'pid': 397025, 'print_id': 138875}, {'counts': 1, 'layout_z': 23.813366889953613, 'model_weight': 24.641, 'order_id': 929102, 'pid': 393961, 'print_id': 139071}, {'counts': 1, 'layout_z': 4.554790019989014, 'model_weight': 11.507, 'order_id': 933586, 'pid': 399522, 'print_id': 140121}, {'counts': 1, 'layout_z': 4.795650005340576, 'model_weight': 11.042, 'order_id': 933568, 'pid': 399331, 'print_id': 140150}, {'counts': 1, 'layout_z': 18.085672736889748, 'model_weight': 7.277, 'order_id': 933876, 'pid': 399901, 'print_id': 140261}, {'counts': 1, 'layout_z': 19.534520236131655, 'model_weight': 6.937, 'order_id': 933878, 'pid': 399903, 'print_id': 140264}, {'counts': 1, 'layout_z': 19.559980709635155, 'model_weight': 7.79, 'order_id': 933877, 'pid': 399902, 'print_id': 140265}, {'counts': 1, 'layout_z': 16.488399505615234, 'model_weight': 5.349, 'order_id': 933882, 'pid': 399907, 'print_id': 140271}, {'counts': 1, 'layout_z': 18.02717763893993, 'model_weight': 5.892, 'order_id': 933885, 'pid': 399910, 'print_id': 140277}, {'counts': 1, 'layout_z': 26.876644549545638, 'model_weight': 21.486, 'order_id': 933886, 'pid': 399911, 'print_id': 140278}, {'counts': 1, 'layout_z': 28.074640440717047, 'model_weight': 16.17, 'order_id': 933887, 'pid': 399912, 'print_id': 140280}, {'counts': 1, 'layout_z': 27.306154248118705, 'model_weight': 20.977, 'order_id': 933889, 'pid': 399927, 'print_id': 140281}, {'counts': 1, 'layout_z': 26.094746051465723, 'model_weight': 34.197, 'order_id': 933888, 'pid': 399926, 'print_id': 140282}, {'counts': 1, 'layout_z': 15.87796963527322, 'model_weight': 4.735, 'order_id': 933892, 'pid': 399930, 'print_id': 140287}, {'counts': 1, 'layout_z': 18.191209446277444, 'model_weight': 5.246, 'order_id': 933893, 'pid': 399931, 'print_id': 140288}, {'counts': 1, 'layout_z': 17.777126572389776, 'model_weight': 6.334, 'order_id': 933894, 'pid': 399932, 'print_id': 140289}, {'counts': 1, 'layout_z': 17.58385879418167, 'model_weight': 5.8, 'order_id': 933895, 'pid': 399933, 'print_id': 140290}, {'counts': 1, 'layout_z': 18.593739251800994, 'model_weight': 6.955, 'order_id': 933897, 'pid': 399935, 'print_id': 140293}, {'counts': 1, 'layout_z': 14.231568581173965, 'model_weight': 3.705, 'order_id': 933898, 'pid': 399936, 'print_id': 140294}, {'counts': 1, 'layout_z': 13.998784146949038, 'model_weight': 3.533, 'order_id': 933899, 'pid': 399937, 'print_id': 140295}, {'counts': 1, 'layout_z': 15.9964307861582, 'model_weight': 4.301, 'order_id': 933901, 'pid': 399939, 'print_id': 140297}, {'counts': 1, 'layout_z': 16.18931739014667, 'model_weight': 5.019, 'order_id': 933903, 'pid': 399941, 'print_id': 140299}, {'counts': 1, 'layout_z': 24.79611153168641, 'model_weight': 20.601, 'order_id': 933905, 'pid': 399943, 'print_id': 140301}, {'counts': 1, 'layout_z': 24.306803898330127, 'model_weight': 16.784, 'order_id': 933906, 'pid': 399944, 'print_id': 140302}, {'counts': 1, 'layout_z': 29.3158714015686, 'model_weight': 19.351, 'order_id': 933907, 'pid': 399945, 'print_id': 140303}, {'counts': 1, 'layout_z': 17.005620048049607, 'model_weight': 5.169, 'order_id': 933910, 'pid': 399948, 'print_id': 140305}, {'counts': 1, 'layout_z': 16.464274211211865, 'model_weight': 4.866, 'order_id': 933909, 'pid': 399947, 'print_id': 140306}, {'counts': 1, 'layout_z': 23.198866489386088, 'model_weight': 10.524, 'order_id': 933911, 'pid': 399949, 'print_id': 140307}, {'counts': 1, 'layout_z': 26.516445616407367, 'model_weight': 23.957, 'order_id': 933912, 'pid': 399950, 'print_id': 140308}, {'counts': 1, 'layout_z': 17.937848519147412, 'model_weight': 5.282, 'order_id': 933914, 'pid': 399952, 'print_id': 140310}, {'counts': 1, 'layout_z': 26.754205819816015, 'model_weight': 20.607, 'order_id': 933921, 'pid': 399957, 'print_id': 140315}, {'counts': 1, 'layout_z': 20.002697843362704, 'model_weight': 7.63, 'order_id': 933924, 'pid': 399960, 'print_id': 140318}, {'counts': 1, 'layout_z': 30.231639651233593, 'model_weight': 24.508, 'order_id': 933925, 'pid': 399961, 'print_id': 140319}, {'counts': 1, 'layout_z': 16.061075531610975, 'model_weight': 4.195, 'order_id': 933928, 'pid': 399964, 'print_id': 140320}, {'counts': 1, 'layout_z': 15.115618198253117, 'model_weight': 3.217, 'order_id': 933929, 'pid': 399965, 'print_id': 140323}, {'counts': 1, 'layout_z': 20.147708222788964, 'model_weight': 7.246, 'order_id': 933960, 'pid': 400001, 'print_id': 140325}, {'counts': 1, 'layout_z': 16.839157818561507, 'model_weight': 5.147, 'order_id': 933962, 'pid': 400003, 'print_id': 140327}, {'counts': 1, 'layout_z': 18.260445870716055, 'model_weight': 5.598, 'order_id': 933963, 'pid': 400004, 'print_id': 140328}, {'counts': 1, 'layout_z': 15.999999046325684, 'model_weight': 4.16, 'order_id': 933964, 'pid': 400005, 'print_id': 140329}, {'counts': 1, 'layout_z': 23.418245000534494, 'model_weight': 15.579, 'order_id': 933967, 'pid': 400008, 'print_id': 140333}, {'counts': 1, 'layout_z': 28.939651438044436, 'model_weight': 31.598, 'order_id': 933970, 'pid': 400024, 'print_id': 140335}, {'counts': 1, 'layout_z': 14.9528131844746, 'model_weight': 3.438, 'order_id': 933972, 'pid': 400026, 'print_id': 140337}, {'counts': 1, 'layout_z': 14.919241260134326, 'model_weight': 4.573, 'order_id': 933974, 'pid': 400028, 'print_id': 140340}, {'counts': 1, 'layout_z': 17.26018167267985, 'model_weight': 5.882, 'order_id': 933975, 'pid': 400029, 'print_id': 140342}, {'counts': 1, 'layout_z': 28.157231966147624, 'model_weight': 25.408, 'order_id': 933976, 'pid': 400030, 'print_id': 140343}, {'counts': 1, 'layout_z': 28.3214832027494, 'model_weight': 21.904, 'order_id': 933977, 'pid': 400031, 'print_id': 140344}, {'counts': 1, 'layout_z': 23.17201737455146, 'model_weight': 14.336, 'order_id': 933979, 'pid': 400033, 'print_id': 140346}, {'counts': 1, 'layout_z': 4.562267065048218, 'model_weight': 12.343, 'order_id': 933577, 'pid': 399494, 'print_id': 140676}, {'counts': 1, 'layout_z': 27.36789647731373, 'model_weight': 28.917, 'order_id': 932799, 'pid': 397657, 'print_id': 141912}, {'counts': 1, 'layout_z': 6.184627175331121, 'model_weight': 23.683, 'order_id': 932029, 'pid': 397140, 'print_id': 141954}, {'counts': 1, 'layout_z': 28.632703110041838, 'model_weight': 29.224, 'order_id': 933097, 'pid': 398980, 'print_id': 142034}, {'counts': 1, 'layout_z': 29.13069982014371, 'model_weight': 38.882, 'order_id': 926254, 'pid': 389047, 'print_id': 142052}, {'counts': 1, 'layout_z': 26.624711034938723, 'model_weight': 20.721, 'order_id': 933136, 'pid': 398998, 'print_id': 142056}, {'counts': 1, 'layout_z': 23.73959009314062, 'model_weight': 30.124, 'order_id': 928988, 'pid': 393851, 'print_id': 142057}, {'counts': 1, 'layout_z': 29.556987644497696, 'model_weight': 23.687, 'order_id': 933093, 'pid': 398975, 'print_id': 142059}]} +# local_data= {'machine_print_counts': 60, 'machine_type': 'small_machine', 'pre_batch_id': 9910284, 'print_machine_id': 1, 'print_orders': [{'counts': 1, 'layout_z': 6.981930971145635, 'model_weight': 26.776, 'order_id': 929174, 'pid': 393697, 'print_id': 138265}, {'counts': 1, 'layout_z': 4.955404043197634, 'model_weight': 9.22, 'order_id': 931997, 'pid': 397013, 'print_id': 138846}, {'counts': 1, 'layout_z': 4.771067023277285, 'model_weight': 11.786, 'order_id': 932000, 'pid': 397016, 'print_id': 138851}, {'counts': 1, 'layout_z': 5.249161005020142, 'model_weight': 10.024, 'order_id': 932003, 'pid': 397019, 'print_id': 138854}, {'counts': 1, 'layout_z': 5.251940011978151, 'model_weight': 10.104, 'order_id': 932005, 'pid': 397021, 'print_id': 138856}, {'counts': 1, 'layout_z': 5.263678073883059, 'model_weight': 10.688, 'order_id': 932009, 'pid': 397025, 'print_id': 138875}, {'counts': 1, 'layout_z': 23.813366889953613, 'model_weight': 24.641, 'order_id': 929102, 'pid': 393961, 'print_id': 139071}, {'counts': 1, 'layout_z': 4.554790019989014, 'model_weight': 11.507, 'order_id': 933586, 'pid': 399522, 'print_id': 140121}, {'counts': 1, 'layout_z': 4.795650005340576, 'model_weight': 11.042, 'order_id': 933568, 'pid': 399331, 'print_id': 140150}, {'counts': 1, 'layout_z': 18.085672736889748, 'model_weight': 7.277, 'order_id': 933876, 'pid': 399901, 'print_id': 140261}, {'counts': 1, 'layout_z': 19.534520236131655, 'model_weight': 6.937, 'order_id': 933878, 'pid': 399903, 'print_id': 140264}, {'counts': 1, 'layout_z': 19.559980709635155, 'model_weight': 7.79, 'order_id': 933877, 'pid': 399902, 'print_id': 140265}, {'counts': 1, 'layout_z': 16.488399505615234, 'model_weight': 5.349, 'order_id': 933882, 'pid': 399907, 'print_id': 140271}, {'counts': 1, 'layout_z': 18.02717763893993, 'model_weight': 5.892, 'order_id': 933885, 'pid': 399910, 'print_id': 140277}, {'counts': 1, 'layout_z': 26.876644549545638, 'model_weight': 21.486, 'order_id': 933886, 'pid': 399911, 'print_id': 140278}, {'counts': 1, 'layout_z': 28.074640440717047, 'model_weight': 16.17, 'order_id': 933887, 'pid': 399912, 'print_id': 140280}, {'counts': 1, 'layout_z': 27.306154248118705, 'model_weight': 20.977, 'order_id': 933889, 'pid': 399927, 'print_id': 140281}, {'counts': 1, 'layout_z': 26.094746051465723, 'model_weight': 34.197, 'order_id': 933888, 'pid': 399926, 'print_id': 140282}, {'counts': 1, 'layout_z': 15.87796963527322, 'model_weight': 4.735, 'order_id': 933892, 'pid': 399930, 'print_id': 140287}, {'counts': 1, 'layout_z': 18.191209446277444, 'model_weight': 5.246, 'order_id': 933893, 'pid': 399931, 'print_id': 140288}, {'counts': 1, 'layout_z': 17.777126572389776, 'model_weight': 6.334, 'order_id': 933894, 'pid': 399932, 'print_id': 140289}, {'counts': 1, 'layout_z': 17.58385879418167, 'model_weight': 5.8, 'order_id': 933895, 'pid': 399933, 'print_id': 140290}, {'counts': 1, 'layout_z': 18.593739251800994, 'model_weight': 6.955, 'order_id': 933897, 'pid': 399935, 'print_id': 140293}, {'counts': 1, 'layout_z': 14.231568581173965, 'model_weight': 3.705, 'order_id': 933898, 'pid': 399936, 'print_id': 140294}, {'counts': 1, 'layout_z': 13.998784146949038, 'model_weight': 3.533, 'order_id': 933899, 'pid': 399937, 'print_id': 140295}, {'counts': 1, 'layout_z': 15.9964307861582, 'model_weight': 4.301, 'order_id': 933901, 'pid': 399939, 'print_id': 140297}, {'counts': 1, 'layout_z': 16.18931739014667, 'model_weight': 5.019, 'order_id': 933903, 'pid': 399941, 'print_id': 140299}, {'counts': 1, 'layout_z': 24.79611153168641, 'model_weight': 20.601, 'order_id': 933905, 'pid': 399943, 'print_id': 140301}, {'counts': 1, 'layout_z': 24.306803898330127, 'model_weight': 16.784, 'order_id': 933906, 'pid': 399944, 'print_id': 140302}, {'counts': 1, 'layout_z': 29.3158714015686, 'model_weight': 19.351, 'order_id': 933907, 'pid': 399945, 'print_id': 140303}, {'counts': 1, 'layout_z': 17.005620048049607, 'model_weight': 5.169, 'order_id': 933910, 'pid': 399948, 'print_id': 140305}, {'counts': 1, 'layout_z': 16.464274211211865, 'model_weight': 4.866, 'order_id': 933909, 'pid': 399947, 'print_id': 140306}, {'counts': 1, 'layout_z': 23.198866489386088, 'model_weight': 10.524, 'order_id': 933911, 'pid': 399949, 'print_id': 140307}, {'counts': 1, 'layout_z': 26.516445616407367, 'model_weight': 23.957, 'order_id': 933912, 'pid': 399950, 'print_id': 140308}, {'counts': 1, 'layout_z': 17.937848519147412, 'model_weight': 5.282, 'order_id': 933914, 'pid': 399952, 'print_id': 140310}, {'counts': 1, 'layout_z': 26.754205819816015, 'model_weight': 20.607, 'order_id': 933921, 'pid': 399957, 'print_id': 140315}, {'counts': 1, 'layout_z': 20.002697843362704, 'model_weight': 7.63, 'order_id': 933924, 'pid': 399960, 'print_id': 140318}, {'counts': 1, 'layout_z': 30.231639651233593, 'model_weight': 24.508, 'order_id': 933925, 'pid': 399961, 'print_id': 140319}, {'counts': 1, 'layout_z': 16.061075531610975, 'model_weight': 4.195, 'order_id': 933928, 'pid': 399964, 'print_id': 140320}, {'counts': 1, 'layout_z': 15.115618198253117, 'model_weight': 3.217, 'order_id': 933929, 'pid': 399965, 'print_id': 140323}, {'counts': 1, 'layout_z': 20.147708222788964, 'model_weight': 7.246, 'order_id': 933960, 'pid': 400001, 'print_id': 140325}, {'counts': 1, 'layout_z': 16.839157818561507, 'model_weight': 5.147, 'order_id': 933962, 'pid': 400003, 'print_id': 140327}, {'counts': 1, 'layout_z': 18.260445870716055, 'model_weight': 5.598, 'order_id': 933963, 'pid': 400004, 'print_id': 140328}, {'counts': 1, 'layout_z': 15.999999046325684, 'model_weight': 4.16, 'order_id': 933964, 'pid': 400005, 'print_id': 140329}, {'counts': 1, 'layout_z': 23.418245000534494, 'model_weight': 15.579, 'order_id': 933967, 'pid': 400008, 'print_id': 140333}, {'counts': 1, 'layout_z': 28.939651438044436, 'model_weight': 31.598, 'order_id': 933970, 'pid': 400024, 'print_id': 140335}, {'counts': 1, 'layout_z': 14.9528131844746, 'model_weight': 3.438, 'order_id': 933972, 'pid': 400026, 'print_id': 140337}, {'counts': 1, 'layout_z': 14.919241260134326, 'model_weight': 4.573, 'order_id': 933974, 'pid': 400028, 'print_id': 140340}, {'counts': 1, 'layout_z': 17.26018167267985, 'model_weight': 5.882, 'order_id': 933975, 'pid': 400029, 'print_id': 140342}, {'counts': 1, 'layout_z': 28.157231966147624, 'model_weight': 25.408, 'order_id': 933976, 'pid': 400030, 'print_id': 140343}, {'counts': 1, 'layout_z': 28.3214832027494, 'model_weight': 21.904, 'order_id': 933977, 'pid': 400031, 'print_id': 140344}, {'counts': 1, 'layout_z': 23.17201737455146, 'model_weight': 14.336, 'order_id': 933979, 'pid': 400033, 'print_id': 140346}, {'counts': 1, 'layout_z': 4.562267065048218, 'model_weight': 12.343, 'order_id': 933577, 'pid': 399494, 'print_id': 140676}, {'counts': 1, 'layout_z': 27.36789647731373, 'model_weight': 28.917, 'order_id': 932799, 'pid': 397657, 'print_id': 141912}, {'counts': 1, 'layout_z': 6.184627175331121, 'model_weight': 23.683, 'order_id': 932029, 'pid': 397140, 'print_id': 141954}, {'counts': 1, 'layout_z': 28.632703110041838, 'model_weight': 29.224, 'order_id': 933097, 'pid': 398980, 'print_id': 142034}, {'counts': 1, 'layout_z': 29.13069982014371, 'model_weight': 38.882, 'order_id': 926254, 'pid': 389047, 'print_id': 142052}, {'counts': 1, 'layout_z': 26.624711034938723, 'model_weight': 20.721, 'order_id': 933136, 'pid': 398998, 'print_id': 142056}, {'counts': 1, 'layout_z': 23.73959009314062, 'model_weight': 30.124, 'order_id': 928988, 'pid': 393851, 'print_id': 142057}, {'counts': 1, 'layout_z': 29.556987644497696, 'model_weight': 23.687, 'order_id': 933093, 'pid': 398975, 'print_id': 142059}]} test_print_max = 0 diff --git a/download_print.py b/download_print.py index 7812383..023fd26 100644 --- a/download_print.py +++ b/download_print.py @@ -1,455 +1,31 @@ -import yaml import oss2 import os from tqdm import tqdm -# from utils.log_utils import log_execution import os from pathlib import Path -import numpy as np -import collections import os import argparse +from dataclasses import dataclass + from config import oss_config from config import print_data_dir from config import url_get_oss_suffix_by_orderId +from config import url_get_info_by_print_batch_id from general import is_use_debug_oss from general import transform_save_bpy +from general import read_models_from_json +from general import is_small_machine from compute_print_net import get_oss_client -class DataTransfer: - ''' - 数据传输类 - ''' - def __init__(self, local_path: str, oss_path: str, oss_client: oss2.Bucket): - ''' - local_path: 本地输出路径 - oss_path: oss路径 - oss_client: oss客户端 - ''' - self.local_path = local_path - self.oss_path = oss_path.lstrip('/') - self.oss_client = oss_client - # self.description = description - - # @log_execution(self.description) - def download_data(self): - """ - 从 OSS 下载数据到本地,保持原有目录结构 - """ - - # 列出所有对象 - objects = [] - prefix = self.oss_path.lstrip('/') # 移除开头的 '/' 以匹配 OSS 格式 - - for obj in oss2.ObjectIterator(self.oss_client, prefix=prefix): - if obj.key != prefix: # 跳过目录本身 - objects.append(obj.key) - - # 下载所有文件,添加进度条 - for obj_key in tqdm(objects, desc="下载进度"): - if obj_key.endswith('/'): - continue - - if "printId" in obj_key: - continue - - # 计算相对路径 - rel_path = obj_key[len(prefix):].lstrip('/') - # 构建本地完整路径 - local_path = os.path.join(self.local_path, rel_path) - - # 创建必要的目录 - os.makedirs(os.path.dirname(local_path), exist_ok=True) - - # 下载文件 - self.oss_client.get_object_to_file(obj_key, local_path) - - print("download_data local_path=" + local_path) - - order_id: str - pid: str - model_height: str - - def download_data_rename_json(self, json_model_info): - """ - 从 OSS 下载数据到本地,保持原有目录结构 - """ - - # 列出所有对象 - objects = [] - prefix = self.oss_path.lstrip('/') # 移除开头的 '/' 以匹配 OSS 格式 - - for obj in oss2.ObjectIterator(self.oss_client, prefix=prefix): - if obj.key != prefix: # 跳过目录本身 - objects.append(obj.key) - - # 下载所有文件,添加进度条 - for obj_key in tqdm(objects, desc="下载进度"): - if obj_key.endswith('/'): - continue - - if "printId" in obj_key: - continue - - # 计算相对路径 - rel_path = obj_key[len(prefix):].lstrip('/') - - file_dir, file_name = os.path.split(rel_path) - file_base, file_ext = os.path.splitext(file_name) - - # 根据文件后缀名进行重命名 - if file_ext.lower() in ['.mtl', '.jpg', '.jpeg', '.png']: - # 对于.mtl和图片文件,在原名前加order_id - new_file_name = f"{json_model_info.order_id}_{file_name}" - # new_file_name = file_name - elif file_ext.lower() == '.obj': - # 对于.obj文件,完全重命名 - new_file_name = f"{json_model_info.obj_name}" - else: - # 其他文件类型保持原名 - new_file_name = file_name - print("new_file_name=", new_file_name) - - # 构建新的相对路径 - if file_dir: # 如果有子目录 - new_rel_path = os.path.join(file_dir, new_file_name) - else: - new_rel_path = new_file_name - - # 构建本地完整路径 - local_path = os.path.join(self.local_path, new_rel_path) - - # 创建必要的目录 - os.makedirs(os.path.dirname(local_path), exist_ok=True) - - # 下载文件 - self.oss_client.get_object_to_file(obj_key, local_path) - - if file_ext == '.obj': # 10MB以上 - try: - # 使用临时文件避免内存问题 [8](@ref) - temp_path = local_path + '.tmp' - with open(local_path, 'r', encoding='utf-8') as f_in, \ - open(temp_path, 'w', encoding='utf-8') as f_out: - - mtllib_modified = False - for line in f_in: - if not mtllib_modified and line.strip().startswith('mtllib '): - parts = line.split(' ', 1) - if len(parts) > 1: - old_mtl_name = parts[1].strip() - new_mtl_name = f"{json_model_info.order_id}_{old_mtl_name}" - f_out.write(f"mtllib {new_mtl_name}\n") - mtllib_modified = True - continue - f_out.write(line) - - os.replace(temp_path, local_path) # 原子性替换 - - except IOError as e: - print(f"处理大文件 {local_path} 时出错: {e}") - if os.path.exists(temp_path): - os.remove(temp_path) - - # 优化后的.obj文件处理逻辑 - if file_ext == '.mtl': - try: - # 使用更高效的文件读取方式 [6,8](@ref) - with open(local_path, 'r', encoding='utf-8') as f: - content = f.read() - - # 使用字符串方法直接查找和替换,避免不必要的循环 [9](@ref) - lines = content.split('\n') - mtllib_modified = False - - for i, line in enumerate(lines): - stripped_line = line.strip() - if not mtllib_modified and stripped_line.startswith('map_Kd '): - # 更高效的分割方式 [9](@ref) - parts = line.split(' ', 1) - if len(parts) > 1: - old_name = parts[1].strip() - new_name = f"{json_model_info.order_id}_{old_name}" - lines[i] = f"map_Kd {new_name}" - mtllib_modified = True - print(f"已更新材质库引用: {old_name} -> {new_name}") - break # 找到第一个后立即退出 - - # 批量写入,减少I/O操作 [6](@ref) - with open(local_path, 'w', encoding='utf-8') as f: - f.write('\n'.join(lines)) - - except IOError as e: - print(f"处理文件 {local_path} 时出错: {e}") - except UnicodeDecodeError as e: - print(f"文件编码错误 {local_path}: {e}") - - print(f"下载文件: {obj_key} -> {local_path}") - - def download_data_rename_batch(self, batch_model_info): - """ - 从 OSS 下载数据到本地,保持原有目录结构 - """ - - # 列出所有对象 - objects = [] - prefix = self.oss_path.lstrip('/') # 移除开头的 '/' 以匹配 OSS 格式 - - prefix_exists = False - - for obj in oss2.ObjectIterator(self.oss_client, prefix=prefix): - prefix_exists = True - if obj.key != prefix: # 跳过目录本身 - objects.append(obj.key) - print(f"obj.key={obj.key}") - - if not prefix_exists: - print(f"前缀 '{prefix}' 下没有找到任何文件或目录。") - return False - else: - print(f"前缀 '{prefix}' 存在,共找到 {len(objects)} 个对象。") - - # 下载所有文件,添加进度条 - for obj_key in tqdm(objects, desc="下载进度"): - if obj_key.endswith('/'): - print("下载 endswith('/'") - continue - - if "printId" in obj_key: - print(f"下载 in obj_key") - continue - - # 计算相对路径 - rel_path = obj_key[len(prefix):].lstrip('/') - - file_dir, file_name = os.path.split(rel_path) - file_base, file_ext = os.path.splitext(file_name) - - # 根据文件后缀名进行重命名 - if file_ext.lower() in ['.mtl', '.jpg', '.jpeg', '.png']: - # 对于.mtl和图片文件,在原名前加order_id - new_file_name = f"{batch_model_info.order_id}_{file_name}" - # new_file_name = file_name - elif file_ext.lower() == '.obj': - # 对于.obj文件,完全重命名 - new_file_name = f"{batch_model_info.order_id}_{batch_model_info.pid}_P{batch_model_info.print_order_id}_{batch_model_info.model_size}{file_ext}" - else: - # 其他文件类型保持原名 - new_file_name = file_name - - # 构建新的相对路径 - if file_dir: # 如果有子目录 - new_rel_path = os.path.join(file_dir, new_file_name) - else: - new_rel_path = new_file_name - - # 构建本地完整路径 - local_path = os.path.join(self.local_path, new_rel_path) - - # 创建必要的目录 - os.makedirs(os.path.dirname(local_path), exist_ok=True) - - # 下载文件 - self.oss_client.get_object_to_file(obj_key, local_path) - - if file_ext == '.obj': # 10MB以上 - try: - # 使用临时文件避免内存问题 [8](@ref) - temp_path = local_path + '.tmp' - with open(local_path, 'r', encoding='utf-8') as f_in, \ - open(temp_path, 'w', encoding='utf-8') as f_out: - - mtllib_modified = False - for line in f_in: - if not mtllib_modified and line.strip().startswith('mtllib '): - parts = line.split(' ', 1) - if len(parts) > 1: - old_mtl_name = parts[1].strip() - new_mtl_name = f"{batch_model_info.order_id}_{old_mtl_name}" - f_out.write(f"mtllib {new_mtl_name}\n") - mtllib_modified = True - print("len(parts) > 1") - continue - f_out.write(line) - - os.replace(temp_path, local_path) # 原子性替换 - - except IOError as e: - print(f"处理大文件 {local_path} 时出错: {e}") - if os.path.exists(temp_path): - os.remove(temp_path) - - # 优化后的.obj文件处理逻辑 - if file_ext == '.mtl': - try: - # 使用更高效的文件读取方式 [6,8](@ref) - with open(local_path, 'r', encoding='utf-8') as f: - content = f.read() - - # 使用字符串方法直接查找和替换,避免不必要的循环 [9](@ref) - lines = content.split('\n') - mtllib_modified = False - - for i, line in enumerate(lines): - stripped_line = line.strip() - if not mtllib_modified and stripped_line.startswith('map_Kd '): - # 更高效的分割方式 [9](@ref) - parts = line.split(' ', 1) - if len(parts) > 1: - old_name = parts[1].strip() - new_name = f"{batch_model_info.order_id}_{old_name}" - lines[i] = f"map_Kd {new_name}" - mtllib_modified = True - print(f"已更新材质库引用: {old_name} -> {new_name}") - break # 找到第一个后立即退出 - - # 批量写入,减少I/O操作 [6](@ref) - with open(local_path, 'w', encoding='utf-8') as f: - f.write('\n'.join(lines)) - - except IOError as e: - print(f"处理文件 {local_path} 时出错: {e}") - except UnicodeDecodeError as e: - print(f"文件编码错误 {local_path}: {e}") - - print(f"下载文件: {obj_key} -> {local_path}") - - return True - - def upload_data(self): - ''' - 上传数据到OSS - ''' - # 检测本地路径是否存在 - if not os.path.exists(self.local_path): - raise FileNotFoundError(f"本地路径不存在: {self.local_path}") - - # 判断本地路径是文件还是目录 - if os.path.isfile(self.local_path): - local_suffix = Path(self.local_path).suffix - oss_suffix = Path(self.oss_path).suffix - - if oss_suffix and oss_suffix != local_suffix: - # 后缀名不一致,上传到指定文件夹下的同名文件 - oss_dir = os.path.dirname(self.oss_path) - oss_target_path = os.path.join(oss_dir, os.path.basename(self.local_path)) - else: - # 后缀名一致,上传到指定OSS路径 - oss_target_path = self.oss_path - - # 上传文件 - self.oss_client.put_object_from_file(oss_target_path, self.local_path) - - print(f"文件已上传到: {oss_target_path}") - - elif os.path.isdir(self.local_path): - oss_suffix = Path(self.oss_path).suffix - if oss_suffix: - raise ValueError("不能将目录上传到具有后缀名的OSS路径。") - - # 遍历本地目录并上传 - for root, dirs, files in os.walk(self.local_path): - for file in files: - local_file_path = os.path.join(root, file) - relative_path = os.path.relpath(local_file_path, self.local_path) - oss_file_path = os.path.join(self.oss_path, relative_path).replace("\\", "/") - - # 创建必要的目录 - oss_dir = os.path.dirname(oss_file_path) - - # 上传文件 - self.oss_client.put_object_from_file(oss_file_path, local_file_path) - print(f"文件已上传到: {oss_file_path}") - else: - raise ValueError(f"无效的本地路径类型: {self.local_path}") +from download_print_out import DataTransfer +from download_print_out import download_data_by_json import requests -import json import shutil - -from dataclasses import dataclass -@dataclass -class JSONModelInfo: - obj_name: str - order_id: str - pid: str - model_height: str - -def read_pids_from_json(pid_file): - """从文件读取所有PID""" - # with open(pid_file, 'r') as f: - # # 过滤掉空行并去除每行首尾的空白字符 - # return [line.strip() for line in f if line.strip()] - - json_path = pid_file - - """ - 加载JSON文件,读取所有模型信息,应用变换后返回模型列表 - """ - # 检查JSON文件是否存在 - if not os.path.exists(json_path): - print(f"错误: JSON文件不存在 - {json_path}") - return [] - - # 读取JSON文件 - try: - with open(json_path, 'r') as f: - data = json.load(f) - except Exception as e: - print(f"读取JSON文件失败: {e}") - return [] - - list_model_info = [] - # 处理每个模型 - for model in data.get('models', []): - obj_name = model.get('file_name', '') - - parts = obj_name.split('_') - - order_id = parts[0] - pid = parts[1] - model_height = parts[3] - - model_info = JSONModelInfo( - obj_name=obj_name, - order_id=order_id, - pid=pid, - model_height=model_height - ) - list_model_info.append(model_info) - - return list_model_info, data - -def download_data_by_json(model_info, workdir, oss_client ): - try: - pid = model_info.pid - model_height = model_info.model_height - target_dir = f"{workdir}" - - url = f"{url_get_oss_suffix_by_orderId}{model_info.order_id}" - res = requests.get(url) - - data = res.json()["data"] - # print("datas=",data) - data = data.replace("/init_obj", "") - - print("target_dir=", target_dir) - # download_textures = DataTransfer(target_dir, f"objs/download/print/{pid}/base/model/{model_height}/", oss_client) - # download_textures = DataTransfer(target_dir, f"objs/download/print/{pid}/base_cartoon/badge/101/3/{model_height}/", oss_client) - download_textures = DataTransfer(target_dir, f"objs/download/print/{pid}/{data}/{model_height}/", oss_client) - - download_textures.download_data_rename_json(model_info) - # 下载后检查目标文件夹是否为空 - if os.path.exists(target_dir) and not os.listdir(target_dir): - shutil.rmtree(target_dir) - print(f"下载后检查发现目标文件夹为空,已删除: {target_dir}") - except Exception as e: - print(f"卡通图片下载失败: {pid}, 错误: {str(e)}") - pass @dataclass class BatchModelInfo: @@ -461,8 +37,8 @@ class BatchModelInfo: count: str def read_paths_from_batch(batch_id): - url = f"https://mp.api.suwa3d.com/api/printOrder/getInfoByPrintBatchId?batch_id={batch_id}" - res = requests.get(url) + + res = requests.get(f"{url_get_info_by_print_batch_id}{batch_id}") datas = res.json()["data"] print("datas=",datas) @@ -528,35 +104,19 @@ def download_datas_by_pre_layout(list_print_model_info, workdir, oss_config): return False return True -def download_transform_save_by_batch(batch_id, workdir, oss_config): - datas, succ = download_datas_by_batch(batch_id, workdir, oss_config) - print("datas=", datas) - layout_data = datas["layout_data"] - - original_obj_pid_dir = workdir - - transform_save_o3d(layout_data, original_obj_pid_dir) - def download_datas_by_json(json_name, workdir, oss_config): oss_client = get_oss_client(oss_config) - #json_path = os.path.join(workdir, "3DPrintLayout.json") json_path = os.path.join(workdir, f"{json_name}.json") - # 读取所有PID - list_model_info, data = read_pids_from_json(json_path) - print(f"从文件读取了 {len(list_model_info)} 个PID") + list_model_info, json_data = read_models_from_json(json_path) + print(f"从文件读取了 {len(list_model_info)} 个model") # 批量下载 for model_info in list_model_info: print(f"开始下载PID: {model_info}") download_data_by_json(model_info, workdir, oss_client) - return data - -def download_transform_save_by_json(json_name, workdir, oss_config): - layout_data = download_datas_by_json(json_name, workdir, oss_config) - original_obj_pid_dir = workdir - transform_save_bpy(layout_data, original_obj_pid_dir) + return json_data def upload_result(base_original_obj_dir, oss_config, batch_id): @@ -580,13 +140,10 @@ def upload_result(base_original_obj_dir, oss_config, batch_id): print(f"失败: {batch_id}, 错误: {str(e)}") pass -import open3d as o3d - if __name__ == "__main__": parser = argparse.ArgumentParser() - is_by_batch = True - is_transform_save = False + is_by_batch = False batch_id = 10118 if is_by_batch: # 通过batch_id下载 @@ -599,11 +156,11 @@ if __name__ == "__main__": workdir = f"{print_data_dir}{batch_id}" + is_transform_save = False + datas, succ = download_datas_by_batch(batch_id, workdir, oss_config) if is_transform_save: - download_transform_save_by_batch(batch_id, workdir, oss_config) - else: - download_datas_by_batch(batch_id, workdir, oss_config) - + layout_data = datas["layout_data"] + transform_save_bpy(layout_data, workdir) else: # 通过Json下载 @@ -617,7 +174,6 @@ if __name__ == "__main__": json_name = batch_id - if is_transform_save: - download_transform_save_by_json(json_name, workdir, oss_config) - else: - download_datas_by_json(json_name, workdir, oss_config) \ No newline at end of file + json_data = download_datas_by_json(json_name, workdir, oss_config) + if is_small_machine(json_data): + transform_save_bpy(json_data, workdir) diff --git a/download_print_out.py b/download_print_out.py index 83f4c28..530fede 100644 --- a/download_print_out.py +++ b/download_print_out.py @@ -5,10 +5,12 @@ import os import numpy as np import os import argparse -import bpy +# import bpy import sys import open3d as o3d +from pathlib import Path + import requests import json import shutil @@ -16,6 +18,7 @@ import shutil from config import url_get_oss_suffix_by_orderId from general import transform_save_bpy +from general import read_models_from_json from compute_print_net import get_oss_client @@ -37,6 +40,46 @@ class DataTransfer: self.local_path = local_path self.oss_path = oss_path.lstrip('/') self.oss_client = oss_client + # self.description = description + + # @log_execution(self.description) + def download_data(self): + """ + 从 OSS 下载数据到本地,保持原有目录结构 + """ + + # 列出所有对象 + objects = [] + prefix = self.oss_path.lstrip('/') # 移除开头的 '/' 以匹配 OSS 格式 + + for obj in oss2.ObjectIterator(self.oss_client, prefix=prefix): + if obj.key != prefix: # 跳过目录本身 + objects.append(obj.key) + + # 下载所有文件,添加进度条 + for obj_key in tqdm(objects, desc="下载进度"): + if obj_key.endswith('/'): + continue + + if "printId" in obj_key: + continue + + # 计算相对路径 + rel_path = obj_key[len(prefix):].lstrip('/') + # 构建本地完整路径 + local_path = os.path.join(self.local_path, rel_path) + + # 创建必要的目录 + os.makedirs(os.path.dirname(local_path), exist_ok=True) + + # 下载文件 + self.oss_client.get_object_to_file(obj_key, local_path) + + print("download_data local_path=" + local_path) + + order_id: str + pid: str + model_height: str def download_data_rename_json(self, json_model_info): """ @@ -154,6 +197,197 @@ class DataTransfer: print(f"下载文件: {obj_key} -> {local_path}") + def download_data_rename_batch(self, batch_model_info): + """ + 从 OSS 下载数据到本地,保持原有目录结构 + """ + + # 列出所有对象 + objects = [] + prefix = self.oss_path.lstrip('/') # 移除开头的 '/' 以匹配 OSS 格式 + + prefix_exists = False + + for obj in oss2.ObjectIterator(self.oss_client, prefix=prefix): + prefix_exists = True + if obj.key != prefix: # 跳过目录本身 + objects.append(obj.key) + print(f"obj.key={obj.key}") + + if not prefix_exists: + print(f"前缀 '{prefix}' 下没有找到任何文件或目录。") + return False + else: + print(f"前缀 '{prefix}' 存在,共找到 {len(objects)} 个对象。") + + # 下载所有文件,添加进度条 + for obj_key in tqdm(objects, desc="下载进度"): + if obj_key.endswith('/'): + print("下载 endswith('/'") + continue + + if "printId" in obj_key: + print(f"下载 in obj_key") + continue + + # 计算相对路径 + rel_path = obj_key[len(prefix):].lstrip('/') + + file_dir, file_name = os.path.split(rel_path) + file_base, file_ext = os.path.splitext(file_name) + + # 根据文件后缀名进行重命名 + if file_ext.lower() in ['.mtl', '.jpg', '.jpeg', '.png']: + # 对于.mtl和图片文件,在原名前加order_id + new_file_name = f"{batch_model_info.order_id}_{file_name}" + # new_file_name = file_name + elif file_ext.lower() == '.obj': + # 对于.obj文件,完全重命名 + new_file_name = f"{batch_model_info.order_id}_{batch_model_info.pid}_P{batch_model_info.print_order_id}_{batch_model_info.model_size}{file_ext}" + else: + # 其他文件类型保持原名 + new_file_name = file_name + + # 构建新的相对路径 + if file_dir: # 如果有子目录 + new_rel_path = os.path.join(file_dir, new_file_name) + else: + new_rel_path = new_file_name + + # 构建本地完整路径 + local_path = os.path.join(self.local_path, new_rel_path) + + # 创建必要的目录 + os.makedirs(os.path.dirname(local_path), exist_ok=True) + + # 下载文件 + self.oss_client.get_object_to_file(obj_key, local_path) + + if file_ext == '.obj': # 10MB以上 + try: + # 使用临时文件避免内存问题 [8](@ref) + temp_path = local_path + '.tmp' + with open(local_path, 'r', encoding='utf-8') as f_in, \ + open(temp_path, 'w', encoding='utf-8') as f_out: + + mtllib_modified = False + for line in f_in: + if not mtllib_modified and line.strip().startswith('mtllib '): + parts = line.split(' ', 1) + if len(parts) > 1: + old_mtl_name = parts[1].strip() + new_mtl_name = f"{batch_model_info.order_id}_{old_mtl_name}" + f_out.write(f"mtllib {new_mtl_name}\n") + mtllib_modified = True + print("len(parts) > 1") + continue + f_out.write(line) + + os.replace(temp_path, local_path) # 原子性替换 + + except IOError as e: + print(f"处理大文件 {local_path} 时出错: {e}") + if os.path.exists(temp_path): + os.remove(temp_path) + + # 优化后的.obj文件处理逻辑 + if file_ext == '.mtl': + try: + # 使用更高效的文件读取方式 [6,8](@ref) + with open(local_path, 'r', encoding='utf-8') as f: + content = f.read() + + # 使用字符串方法直接查找和替换,避免不必要的循环 [9](@ref) + lines = content.split('\n') + mtllib_modified = False + + for i, line in enumerate(lines): + stripped_line = line.strip() + if not mtllib_modified and stripped_line.startswith('map_Kd '): + # 更高效的分割方式 [9](@ref) + parts = line.split(' ', 1) + if len(parts) > 1: + old_name = parts[1].strip() + new_name = f"{batch_model_info.order_id}_{old_name}" + lines[i] = f"map_Kd {new_name}" + mtllib_modified = True + print(f"已更新材质库引用: {old_name} -> {new_name}") + break # 找到第一个后立即退出 + + # 批量写入,减少I/O操作 [6](@ref) + with open(local_path, 'w', encoding='utf-8') as f: + f.write('\n'.join(lines)) + + except IOError as e: + print(f"处理文件 {local_path} 时出错: {e}") + except UnicodeDecodeError as e: + print(f"文件编码错误 {local_path}: {e}") + + print(f"下载文件: {obj_key} -> {local_path}") + + return True + + def download_single_file(self): + """ + 下载单个文件从OSS到本地 + """ + # 确保本地目录存在 + os.makedirs(os.path.dirname(self.local_path), exist_ok=True) + + # 直接下载文件 + try: + self.oss_client.get_object_to_file(self.oss_path, self.local_path) + print(f"文件已下载到: {self.local_path}") + except oss2.exceptions.NoSuchKey: + print(f"OSS文件不存在: {self.oss_path}") + + def upload_data(self): + ''' + 上传数据到OSS + ''' + # 检测本地路径是否存在 + if not os.path.exists(self.local_path): + raise FileNotFoundError(f"本地路径不存在: {self.local_path}") + + # 判断本地路径是文件还是目录 + if os.path.isfile(self.local_path): + local_suffix = Path(self.local_path).suffix + oss_suffix = Path(self.oss_path).suffix + + if oss_suffix and oss_suffix != local_suffix: + # 后缀名不一致,上传到指定文件夹下的同名文件 + oss_dir = os.path.dirname(self.oss_path) + oss_target_path = os.path.join(oss_dir, os.path.basename(self.local_path)) + else: + # 后缀名一致,上传到指定OSS路径 + oss_target_path = self.oss_path + + # 上传文件 + self.oss_client.put_object_from_file(oss_target_path, self.local_path) + + print(f"文件已上传到: {oss_target_path}") + + elif os.path.isdir(self.local_path): + oss_suffix = Path(self.oss_path).suffix + if oss_suffix: + raise ValueError("不能将目录上传到具有后缀名的OSS路径。") + + # 遍历本地目录并上传 + for root, dirs, files in os.walk(self.local_path): + for file in files: + local_file_path = os.path.join(root, file) + relative_path = os.path.relpath(local_file_path, self.local_path) + oss_file_path = os.path.join(self.oss_path, relative_path).replace("\\", "/") + + # 创建必要的目录 + oss_dir = os.path.dirname(oss_file_path) + + # 上传文件 + self.oss_client.put_object_from_file(oss_file_path, local_file_path) + print(f"文件已上传到: {oss_file_path}") + else: + raise ValueError(f"无效的本地路径类型: {self.local_path}") + def get_api(url): try: response = requests.get(url) @@ -166,61 +400,6 @@ def get_api(url): except requests.exceptions.RequestException as e: raise Exception(f"Error fetching URL {url}: {e}") -from dataclasses import dataclass -@dataclass -class JSONModelInfo: - obj_name: str - order_id: str - pid: str - print_order_id: str - model_height: str - -def read_pids_from_json(pid_file): - """从文件读取所有PID""" - - json_path = pid_file - - """ - 加载JSON文件,读取所有模型信息,应用变换后返回模型列表 - """ - # 检查JSON文件是否存在 - if not os.path.exists(json_path): - print(f"错误: JSON文件不存在 - {json_path}") - return [] - - # 读取JSON文件 - try: - with open(json_path, 'r') as f: - data = json.load(f) - except Exception as e: - print(f"读取JSON文件失败: {e}") - return [] - - list_model_info = [] - # 处理每个模型 - for model in data.get('models', []): - obj_name = model.get('file_name', '') - - parts = obj_name.split('_') - - order_id = parts[0] - pid = parts[1] - print_order_id = parts[2] - print_order_id = print_order_id.replace("P", "") - model_height = parts[3] - - model_info = JSONModelInfo( - obj_name=obj_name, - order_id=order_id, - pid=pid, - print_order_id=print_order_id, - model_height=model_height - ) - list_model_info.append(model_info) - print(f"model_info={model_info}") - - return list_model_info, data - def download_data_by_json(model_info, workdir, oss_client ): try: pid = model_info.pid @@ -249,18 +428,17 @@ def download_data_by_json(model_info, workdir, oss_client ): def download_datas_by_json(pid_file, workdir, oss_config): oss_client = get_oss_client(oss_config) - # json_path = os.path.join(workdir, "3DPrintLayout.json") json_path = os.path.join(workdir, f"{pid_file}.json") # 读取所有PID - list_model_info, data = read_pids_from_json(json_path) + list_model_info, json_data = read_models_from_json(json_path) print(f"从文件读取了 {len(list_model_info)} 个PID") # 批量下载 for model_info in list_model_info: print(f"开始下载PID: {model_info}") download_data_by_json(model_info, args.workdir, oss_client) - return data + return json_data if __name__ == "__main__": diff --git a/general.py b/general.py index f10b21a..03fb858 100644 --- a/general.py +++ b/general.py @@ -218,3 +218,69 @@ def is_cross_border_c(x, y, z, mx, my, mz, max_x, max_y, max_z): return False # -------------------------- 结束:碰撞检测和越界 -------------------------- + +# -------------------------- 开始:JSON -------------------------- + +import json +from dataclasses import dataclass + +@dataclass +class JSONModelInfo: + obj_name: str + order_id: str + pid: str + print_order_id: str + model_height: str + +def read_from_json(json_path): + + if not os.path.exists(json_path): + print(f"错误: JSON文件不存在 - {json_path}") + return [] + + try: + with open(json_path, 'r') as f: + json_data = json.load(f) + except Exception as e: + print(f"读取JSON文件失败: {e}") + return [] + + return json_data + +def read_models_from_json(json_path): + + json_data = read_from_json(json_path) + + list_model_info = [] + # 处理每个模型 + for model in json_data.get('models', []): + obj_name = model.get('file_name', '') + + parts = obj_name.split('_') + + order_id = parts[0] + pid = parts[1] + model_height = parts[3] + + model_info = JSONModelInfo( + obj_name=obj_name, + order_id=order_id, + pid=pid, + model_height=model_height + ) + list_model_info.append(model_info) + + return list_model_info, json_data + +def get_summary(json_data): + return json_data.get('summary') + +def get_selected_machine(json_data): + return get_summary(json_data)['selected_machine'] + +def is_small_machine(json_data): + selected_machine = get_selected_machine(json_data) + is_small_machine = True if selected_machine=="小机型" else False + return is_small_machine + +# -------------------------- 结束:JSON -------------------------- diff --git a/test_load_json.py b/test_load_json.py index 0539e5e..0320742 100644 --- a/test_load_json.py +++ b/test_load_json.py @@ -8,6 +8,7 @@ import gc from config import print_data_dir from config import test_print_max +from config import version from general import mesh_transform_by_matrix from general import get_blank_path @@ -425,6 +426,8 @@ def set_orthographic(meshes, width=1920, height=1080, return vis +from PIL import Image, ImageDraw, ImageFont + def render_to_texture(meshes, output_image_path): vis = set_orthographic(meshes) @@ -432,6 +435,49 @@ def render_to_texture(meshes, output_image_path): # 渲染并保存 vis.capture_screen_image(output_image_path, do_render=True) + text = f"v {version}" # 使用PIL添加文字 + try: + image = Image.open(output_image_path) + draw = ImageDraw.Draw(image) + + font = ImageFont.load_default() + + font_families = [ + 'DejaVu Sans', # 许多 Linux 发行版的标准配置[2,5](@ref) + 'Liberation Sans', # 作为 Arial 等字体的开源替代,预装可能性高[1](@ref) + 'Ubuntu', # Ubuntu 系统默认字体之一[3,5](@ref) + 'FreeSans', # 另一个开源无衬线字体 + 'Source Sans Pro' # 一款清晰易读的开源字体 + ] + + for font_family in font_families: + try: + font = ImageFont.truetype(font_family, 30) + break + except IOError: + continue + + bbox = draw.textbbox((0, 0), text, font=font) + text_width = bbox[2] - bbox[0] + text_height = bbox[3] - bbox[1] + + # 设置位置:左下角,左边距50像素,下边距10像素[1,3](@ref) + width, height = image.size + x = 50 # 左边距 + y = height - text_height - 50 # 图片高度减去文字高度再减去10像素边距 + + fill_color = (255, 0, 0) + + # 添加文字 + draw.text((x, y), text, fill=fill_color, font=font) + + # 保存带文字的图片 + image.save(output_image_path) + print(f"带文字的渲染图片已保存到: {output_image_path}") + + except Exception as e: + print(f"添加文字时出错: {e}") + print(f"高级渲染图片已保存到: {output_image_path}") return vis