Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
EMUAFactory
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mayinghao
EMUAFactory
Commits
2b5d9de7
Commit
2b5d9de7
authored
Mar 25, 2026
by
mayinghao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加版本
parent
969fd073
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
78 additions
and
32 deletions
+78
-32
main.py
main.py
+78
-32
No files found.
main.py
View file @
2b5d9de7
...
@@ -24,8 +24,10 @@ from PyQt5.QtGui import QColor
...
@@ -24,8 +24,10 @@ from PyQt5.QtGui import QColor
from
cryptography.fernet
import
Fernet
from
cryptography.fernet
import
Fernet
from
multipleThread.thread_upload
import
Upload_Thread
from
multipleThread.thread_upload
import
Upload_Thread
from
multipleThread.thread_resume
import
Resume_Thread
from
multipleThread.thread_resume
import
Resume_Thread
from
multipleThread.config
import
version
from
multipleThread.config
import
*
from
multipleThread.config
import
*
from
multipleThread.config
import
login_url
,
order_detail_url
,
order_info_url
,
product_manager_url
,
\
product_callback_url
,
fileupload_url
# 命令行查看文件md5
# 命令行查看文件md5
# certutil -hashfile music.mp4 MD5
# certutil -hashfile music.mp4 MD5
...
@@ -34,18 +36,8 @@ from multipleThread.config import *
...
@@ -34,18 +36,8 @@ from multipleThread.config import *
# 当前用户
# 当前用户
user_now
=
''
user_now
=
''
token
=
''
token
=
''
# 工厂上传登录地址
login_url
=
'https://emku.laidecloud.com/console/pc/userLoginByToken.ajax'
# order信息地址
order_info_url
=
"https://emku.laidecloud.com/console/productOrder/experimentOrderList.ajax"
# order detail
order_detail_url
=
"https://emku.laidecloud.com/console/productOrder/uploadorderdetail.ajax"
product_manager_url
=
"https://emku.laidecloud.com/console/goods/goods_list.ajax"
product_callback_url
=
"https://emku.laidecloud.com/console/seller/getFiles.ajax"
#获取上传文件列表
fileupload_url
=
"https://emku.laidecloud.com/console/productOrder/onupload.ajax"
print
(
f
"{fileupload_url} {login_url} {order_detail_url} {order_info_url} {product_manager_url}"
)
# 未完成任务列表
# 未完成任务列表
job_list
=
{}
job_list
=
{}
...
@@ -623,7 +615,6 @@ class DeviceTableModel(QAbstractTableModel):
...
@@ -623,7 +615,6 @@ class DeviceTableModel(QAbstractTableModel):
self
.
endResetModel
()
self
.
endResetModel
()
class
DeviceTableModel_product
(
QAbstractTableModel
):
class
DeviceTableModel_product
(
QAbstractTableModel
):
def
__init__
(
self
,
data
,
headers
,
parent
=
None
):
def
__init__
(
self
,
data
,
headers
,
parent
=
None
):
super
()
.
__init__
(
parent
)
super
()
.
__init__
(
parent
)
...
@@ -671,17 +662,18 @@ class DeviceTableModel_product(QAbstractTableModel):
...
@@ -671,17 +662,18 @@ class DeviceTableModel_product(QAbstractTableModel):
def
filter_data
(
self
,
manufacturer
):
def
filter_data
(
self
,
manufacturer
):
"""根据厂商过滤数据"""
"""根据厂商过滤数据"""
self
.
beginResetModel
()
self
.
beginResetModel
()
if
manufacturer
==
"所有品牌"
:
if
manufacturer
==
"所有品牌"
:
self
.
_filtered_data
=
self
.
_data
.
copy
()
self
.
_filtered_data
=
self
.
_data
.
copy
()
else
:
else
:
self
.
_filtered_data
=
[
device
for
device
in
self
.
_data
if
device
[
3
]
==
manufacturer
]
self
.
_filtered_data
=
[
device
for
device
in
self
.
_data
if
device
[
3
]
==
manufacturer
]
print
(
self
.
_filtered_data
)
self
.
endResetModel
()
self
.
endResetModel
()
@
property
def
filtered_data
(
self
):
return
self
.
_filtered_data
# 导航页
# 导航页
...
@@ -822,6 +814,7 @@ class productInfoWindow(QMainWindow):
...
@@ -822,6 +814,7 @@ class productInfoWindow(QMainWindow):
self
.
send_data
=
0
self
.
send_data
=
0
self
.
uuid_str
=
''
self
.
uuid_str
=
''
self
.
oss_prefix
=
"upload/order/"
self
.
oss_prefix
=
"upload/order/"
self
.
combos
=
[]
# 必须文件夹
# 必须文件夹
...
@@ -841,17 +834,26 @@ class productInfoWindow(QMainWindow):
...
@@ -841,17 +834,26 @@ class productInfoWindow(QMainWindow):
product_info
=
data1
[
"obj"
][
"pList"
][
"result"
]
product_info
=
data1
[
"obj"
][
"pList"
][
"result"
]
# 总订单数量
# 总订单数量
pages
=
data1
[
"obj"
][
"pList"
][
"pages"
]
pages
=
data1
[
"obj"
][
"pList"
][
"pages"
]
order_property
=
[
"id"
,
"goods_name"
,
"en_name"
,
"goods_brand"
,
"gc"
]
order_property
=
[
"id"
,
"goods_name"
,
"en_name"
,
"goods_brand"
,
"gc"
,
"productVersionList"
]
# 处理数据
# 处理数据
result
=
[]
result
=
[]
single_order
=
[]
single_order
=
[]
for
j
in
product_info
:
for
j
in
product_info
:
#print(j["productVersionList"])
for
p
in
order_property
:
for
p
in
order_property
:
version_list
=
{}
if
p
==
"goods_brand"
:
if
p
==
"goods_brand"
:
single_order
.
append
(
j
[
"goods_brand"
][
"name"
])
single_order
.
append
(
j
[
"goods_brand"
][
"name"
])
elif
p
==
"gc"
:
elif
p
==
"gc"
:
single_order
.
append
(
j
[
"gc"
][
"className"
])
single_order
.
append
(
j
[
"gc"
][
"className"
])
elif
p
==
"productVersionList"
:
if
len
(
j
[
"productVersionList"
])
>
0
:
for
z
in
j
[
"productVersionList"
]:
version_list
[
z
[
"version_no"
]]
=
z
[
"id"
]
if
len
(
version_list
)
==
0
:
version_list
[
""
]
=
-
1
single_order
.
append
(
version_list
)
else
:
else
:
single_order
.
append
(
j
[
p
])
single_order
.
append
(
j
[
p
])
result
.
append
(
single_order
)
result
.
append
(
single_order
)
...
@@ -887,7 +889,7 @@ class productInfoWindow(QMainWindow):
...
@@ -887,7 +889,7 @@ class productInfoWindow(QMainWindow):
page_list
=
[
str
(
x
)
for
x
in
range
(
1
,
pages
+
1
)]
page_list
=
[
str
(
x
)
for
x
in
range
(
1
,
pages
+
1
)]
self
.
page_list_combo
.
addItems
(
page_list
)
self
.
page_list_combo
.
addItems
(
page_list
)
self
.
page_list_combo
.
currentTextChanged
.
connect
(
self
.
update_page_info
)
self
.
page_list_combo
.
currentTextChanged
.
connect
(
self
.
update_page_info
)
self
.
headers
=
[
"id"
,
"商品名称"
,
"英文名称"
,
"品牌"
,
"分类名"
,
"上传"
,
"上传"
]
self
.
headers
=
[
"id"
,
"商品名称"
,
"英文名称"
,
"品牌"
,
"分类名"
,
"
版本"
,
"
上传"
,
"上传"
]
self
.
station_code
=
{
1
:
"设计"
,
2
:
"生产"
,
3
:
"售后"
,
4
:
"采购"
,
5
:
"品保"
}
self
.
station_code
=
{
1
:
"设计"
,
2
:
"生产"
,
3
:
"售后"
,
4
:
"采购"
,
5
:
"品保"
}
self
.
order_status_code
=
{
1
:
"进行中"
,
2
:
"已完成"
,
0
:
"未开始"
}
self
.
order_status_code
=
{
1
:
"进行中"
,
2
:
"已完成"
,
0
:
"未开始"
}
# 创建模型和视图
# 创建模型和视图
...
@@ -906,7 +908,6 @@ class productInfoWindow(QMainWindow):
...
@@ -906,7 +908,6 @@ class productInfoWindow(QMainWindow):
for
row
in
range
(
len
(
self
.
devices
)):
for
row
in
range
(
len
(
self
.
devices
)):
self
.
add_operation_buttons
(
row
)
self
.
add_operation_buttons
(
row
)
# 布局
# 布局
self
.
main_layout
.
addWidget
(
self
.
table_view
)
self
.
main_layout
.
addWidget
(
self
.
table_view
)
self
.
status_label
=
QLabel
()
self
.
status_label
=
QLabel
()
...
@@ -953,8 +954,7 @@ class productInfoWindow(QMainWindow):
...
@@ -953,8 +954,7 @@ class productInfoWindow(QMainWindow):
else
:
else
:
self
.
progress_bars
[
value
[
0
]]
.
setValue
(
value
[
1
])
self
.
progress_bars
[
value
[
0
]]
.
setValue
(
value
[
1
])
def
add_progress_bar_and_button
(
self
,
file_path
,
order_id
,
type_info
,
version_id
):
def
add_progress_bar_and_button
(
self
,
file_path
,
order_id
,
type_info
):
# 创建水平布局
# 创建水平布局
widget
=
QWidget
()
widget
=
QWidget
()
...
@@ -982,7 +982,7 @@ class productInfoWindow(QMainWindow):
...
@@ -982,7 +982,7 @@ class productInfoWindow(QMainWindow):
self
.
progress_widgets
.
append
({
"widget"
:
widget
,
"progess_bar"
:
progress_bar
,
"label"
:
status_label
,
"index"
:
current_index
})
self
.
progress_widgets
.
append
({
"widget"
:
widget
,
"progess_bar"
:
progress_bar
,
"label"
:
status_label
,
"index"
:
current_index
})
#self.buttons.append(button)
#self.buttons.append(button)
thread
=
QThread
()
thread
=
QThread
()
upload
=
Upload_Thread
(
self
.
counter
,
order_id
,
type_info
,
token
)
upload
=
Upload_Thread
(
self
.
counter
,
order_id
,
type_info
,
token
,
version_id
)
upload
.
filename
=
file_path
upload
.
filename
=
file_path
upload
.
moveToThread
(
thread
)
upload
.
moveToThread
(
thread
)
upload
.
updateSignal
.
connect
(
self
.
changeProcessbar
)
upload
.
updateSignal
.
connect
(
self
.
changeProcessbar
)
...
@@ -1018,7 +1018,7 @@ class productInfoWindow(QMainWindow):
...
@@ -1018,7 +1018,7 @@ class productInfoWindow(QMainWindow):
self
.
table_filelist
.
setItem
(
row_position
,
2
,
file_type
)
self
.
table_filelist
.
setItem
(
row_position
,
2
,
file_type
)
self
.
table_filelist
.
setItem
(
row_position
,
3
,
create_time
)
self
.
table_filelist
.
setItem
(
row_position
,
3
,
create_time
)
def
upload_file
(
self
,
filename
,
order_id
,
type_info
):
def
upload_file
(
self
,
filename
,
order_id
,
type_info
,
version_id
):
# 显示上传进度条
# 显示上传进度条
self
.
send_data
=
0
self
.
send_data
=
0
key
=
filename
.
split
(
'/'
)[
-
1
]
key
=
filename
.
split
(
'/'
)[
-
1
]
...
@@ -1067,7 +1067,7 @@ class productInfoWindow(QMainWindow):
...
@@ -1067,7 +1067,7 @@ class productInfoWindow(QMainWindow):
bucket
.
complete_multipart_upload
(
oss_key
,
upload_id
,
parts
,
headers
=
headers
)
bucket
.
complete_multipart_upload
(
oss_key
,
upload_id
,
parts
,
headers
=
headers
)
#self.file_label.setText(f"{filename}上传完成")
#self.file_label.setText(f"{filename}上传完成")
datas
=
{
"id"
:
str
(
order_id
),
"name"
:
self
.
uuid_str
+
"."
+
extension
,
"path"
:
name_prefix
,
"info"
:
key
,
"type"
:
type_info
}
datas
=
{
"id"
:
str
(
order_id
),
"name"
:
self
.
uuid_str
+
"."
+
extension
,
"path"
:
name_prefix
,
"info"
:
key
,
"type"
:
type_info
,
"product_version_id"
:
version_id
}
headers
=
{
'token'
:
token
,
headers
=
{
'token'
:
token
,
'User-Agent'
:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
'User-Agent'
:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
if
type_info
>=
12
:
if
type_info
>=
12
:
...
@@ -1076,16 +1076,28 @@ class productInfoWindow(QMainWindow):
...
@@ -1076,16 +1076,28 @@ class productInfoWindow(QMainWindow):
response
=
requests
.
post
(
callback_url
,
data
=
datas
,
headers
=
headers
)
response
=
requests
.
post
(
callback_url
,
data
=
datas
,
headers
=
headers
)
res
=
response
.
json
()
res
=
response
.
json
()
if
res
[
"obj"
]
==
"保存成功"
:
if
res
[
"obj"
]
==
"保存成功"
:
response
=
requests
.
post
(
product_callback_url
,
data
=
{
"id"
:
order_id
},
headers
=
headers
)
if
version_id
==
-
1
:
version_id
=
''
if
datas
[
"product_version_id"
]
==
-
1
:
datas
[
"product_version_id"
]
=
''
response
=
requests
.
post
(
product_callback_url
,
data
=
{
"id"
:
order_id
,
"product_version_id"
:
version_id
},
headers
=
headers
)
data
=
response
.
json
()
data
=
response
.
json
()
time_str
=
time
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
,
time
.
localtime
())
time_str
=
time
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
,
time
.
localtime
())
info_append
=
f
"{time_str} {filename}上传成功
\n
"
info_append
=
f
"{time_str} {filename}上传成功
\n
"
self
.
status_info
+=
info_append
self
.
status_info
+=
info_append
res
=
process_data
(
data
)
res
=
process_data
(
data
)
self
.
update_table_filelist
(
res
,
order_id
)
self
.
update_table_filelist
(
res
,
order_id
)
def
handle_bom
(
self
,
row
,
type_info
):
def
handle_bom
(
self
,
row
,
type_info
):
combo
=
self
.
combos
[
row
]
version_id
=
-
1
if
combo
:
value
=
combo
.
currentText
()
version_id
=
self
.
model
.
filtered_data
[
row
][
-
1
][
value
]
print
(
f
"---->{version_id}"
)
# 上传文件逻辑
# 上传文件逻辑
files
,
_
=
QFileDialog
.
getOpenFileNames
(
files
,
_
=
QFileDialog
.
getOpenFileNames
(
self
,
self
,
...
@@ -1097,9 +1109,9 @@ class productInfoWindow(QMainWindow):
...
@@ -1097,9 +1109,9 @@ class productInfoWindow(QMainWindow):
for
file_path
in
files
:
for
file_path
in
files
:
# 如果小于5M直接上传,大于5M开启线程上传
# 如果小于5M直接上传,大于5M开启线程上传
if
os
.
path
.
getsize
(
file_path
)
<
part_size
:
if
os
.
path
.
getsize
(
file_path
)
<
part_size
:
self
.
upload_file
(
file_path
,
self
.
devices
[
row
][
0
],
type_info
)
self
.
upload_file
(
file_path
,
self
.
model
.
filtered_data
[
row
][
0
],
type_info
,
version_id
)
else
:
else
:
self
.
add_progress_bar_and_button
(
file_path
,
self
.
devices
[
row
][
0
],
type_info
)
self
.
add_progress_bar_and_button
(
file_path
,
self
.
model
.
filtered_data
[
row
][
0
],
type_info
,
version_id
)
# 更新列表信息
# 更新列表信息
def
update_page_info
(
self
,
page_num
):
def
update_page_info
(
self
,
page_num
):
...
@@ -1114,17 +1126,25 @@ class productInfoWindow(QMainWindow):
...
@@ -1114,17 +1126,25 @@ class productInfoWindow(QMainWindow):
product_info
=
data1
[
"obj"
][
"pList"
][
"result"
]
product_info
=
data1
[
"obj"
][
"pList"
][
"result"
]
# 总订单数量
# 总订单数量
list_num
=
200
list_num
=
200
order_property
=
[
"id"
,
"goods_name"
,
"en_name"
,
"goods_brand"
,
"gc"
]
order_property
=
[
"id"
,
"goods_name"
,
"en_name"
,
"goods_brand"
,
"gc"
,
"productVersionList"
]
# 处理数据
# 处理数据
result
=
[]
result
=
[]
single_order
=
[]
single_order
=
[]
for
j
in
product_info
:
for
j
in
product_info
:
for
p
in
order_property
:
for
p
in
order_property
:
version_list
=
{}
if
p
==
"goods_brand"
:
if
p
==
"goods_brand"
:
single_order
.
append
(
j
[
"goods_brand"
][
"name"
])
single_order
.
append
(
j
[
"goods_brand"
][
"name"
])
elif
p
==
"gc"
:
elif
p
==
"gc"
:
single_order
.
append
(
j
[
"gc"
][
"className"
])
single_order
.
append
(
j
[
"gc"
][
"className"
])
elif
p
==
"productVersionList"
:
if
len
(
j
[
"productVersionList"
])
>
0
:
for
z
in
j
[
"productVersionList"
]:
version_list
[
z
[
"version_no"
]]
=
z
[
"id"
]
if
len
(
version_list
)
==
0
:
version_list
[
""
]
=
-
1
single_order
.
append
(
version_list
)
else
:
else
:
single_order
.
append
(
j
[
p
])
single_order
.
append
(
j
[
p
])
result
.
append
(
single_order
)
result
.
append
(
single_order
)
...
@@ -1143,7 +1163,7 @@ class productInfoWindow(QMainWindow):
...
@@ -1143,7 +1163,7 @@ class productInfoWindow(QMainWindow):
self
.
brand_combo
.
clear
()
self
.
brand_combo
.
clear
()
self
.
brand_combo
.
addItems
(
brands
)
self
.
brand_combo
.
addItems
(
brands
)
self
.
brand_combo
.
currentTextChanged
.
connect
(
self
.
filter_devices
)
self
.
brand_combo
.
currentTextChanged
.
connect
(
self
.
filter_devices
)
self
.
combos
.
clear
()
for
row
in
range
(
len
(
self
.
devices
)):
for
row
in
range
(
len
(
self
.
devices
)):
self
.
add_operation_buttons
(
row
)
self
.
add_operation_buttons
(
row
)
...
@@ -1163,11 +1183,37 @@ class productInfoWindow(QMainWindow):
...
@@ -1163,11 +1183,37 @@ class productInfoWindow(QMainWindow):
def
update_operation_buttons
(
self
):
def
update_operation_buttons
(
self
):
"""更新所有行的操作按钮"""
"""更新所有行的操作按钮"""
self
.
combos
.
clear
()
for
row
in
range
(
self
.
model
.
rowCount
()):
for
row
in
range
(
self
.
model
.
rowCount
()):
self
.
add_operation_buttons
(
row
)
self
.
add_operation_buttons
(
row
)
def
on_value_changed
(
self
,
row
,
value
):
print
(
self
.
model
.
filtered_data
[
row
][
-
1
][
value
])
def
add_operation_buttons
(
self
,
row
):
def
add_operation_buttons
(
self
,
row
):
version_list
=
self
.
model
.
_filtered_data
[
row
][
-
1
]
version_keys
=
list
(
version_list
.
keys
())
combo
=
QComboBox
()
combo
.
addItems
(
version_keys
)
combo
.
setStyleSheet
(
"""
QComboBox {
text-align: center;
}
QComboBox QAbstractItemView {
text-align: center;
}
"""
)
combo
.
setCurrentIndex
(
0
)
self
.
combos
.
append
(
combo
)
combo
.
currentTextChanged
.
connect
(
lambda
text
,
r
=
row
:
self
.
on_value_changed
(
r
,
text
))
self
.
table_view
.
setIndexWidget
(
self
.
model
.
index
(
row
,
5
),
combo
)
# 创建操作按钮
# 创建操作按钮
btn_edit
=
QPushButton
(
"生产资料"
)
btn_edit
=
QPushButton
(
"生产资料"
)
btn_edit
.
clicked
.
connect
(
lambda
_
,
r
=
row
:
self
.
handle_bom
(
r
,
12
))
btn_edit
.
clicked
.
connect
(
lambda
_
,
r
=
row
:
self
.
handle_bom
(
r
,
12
))
...
@@ -1187,7 +1233,7 @@ class productInfoWindow(QMainWindow):
...
@@ -1187,7 +1233,7 @@ class productInfoWindow(QMainWindow):
# 将按钮布局添加到表格第5列
# 将按钮布局添加到表格第5列
self
.
table_view
.
setIndexWidget
(
self
.
table_view
.
setIndexWidget
(
self
.
model
.
index
(
row
,
5
),
self
.
model
.
index
(
row
,
6
),
btn_widget
btn_widget
)
)
...
@@ -1205,7 +1251,7 @@ class productInfoWindow(QMainWindow):
...
@@ -1205,7 +1251,7 @@ class productInfoWindow(QMainWindow):
btn_layout2
.
setSpacing
(
5
)
btn_layout2
.
setSpacing
(
5
)
self
.
table_view
.
setIndexWidget
(
self
.
table_view
.
setIndexWidget
(
self
.
model
.
index
(
row
,
6
),
self
.
model
.
index
(
row
,
7
),
btn_widget2
btn_widget2
)
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment