qrpa 1.1.36__py3-none-any.whl → 1.1.38__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of qrpa might be problematic. Click here for more details.

@@ -36,12 +36,20 @@ class SheinNewProductAnalysis(Base):
36
36
  skc = Column(String(100), nullable=False, comment='平台SKC')
37
37
  sku_supplier_no = Column(String(100), nullable=True, comment='商家SKC')
38
38
  layer_nm = Column(String(100), nullable=True, comment='商品层级')
39
+
40
+ # 品类信息
41
+ new_cate1_nm = Column(String(200), nullable=True, comment='一级品类名称')
42
+ new_cate2_nm = Column(String(200), nullable=True, comment='二级品类名称')
43
+ new_cate3_nm = Column(String(200), nullable=True, comment='三级品类名称')
44
+ new_cate4_nm = Column(String(200), nullable=True, comment='四级品类名称')
45
+
39
46
  goods_name = Column(String(500), nullable=True, comment='商品标题')
40
47
  img_url = Column(String(500), nullable=True, comment='SKC图片URL')
41
48
 
42
49
  # 状态标识
43
50
  onsale_flag = Column(Integer, nullable=True, default=0, comment='在售标识(0-否,1-是)')
44
51
  sale_flag = Column(Integer, nullable=True, default=0, comment='上架标识(0-否,1-是)')
52
+ new_goods_tag = Column(Integer, nullable=True, comment='新品标签(1-新品爆款,2-新品畅销,3-潜力新品,4-新品)')
45
53
 
46
54
  # 销售数据
47
55
  sale_cnt = Column(Integer, nullable=True, default=0, comment='销量')
@@ -85,6 +93,35 @@ class SheinNewProductAnalysis(Base):
85
93
  def __repr__(self):
86
94
  return f"<SheinNewProductAnalysis(id={self.id}, store_username='{self.store_username}', skc='{self.skc}', stat_date={self.stat_date})>"
87
95
 
96
+ @property
97
+ def new_goods_tag_name(self):
98
+ """
99
+ 获取新品标签的文本描述
100
+
101
+ Returns:
102
+ str: 新品标签文本描述
103
+ """
104
+ return self.get_new_goods_tag_name(self.new_goods_tag)
105
+
106
+ @staticmethod
107
+ def get_new_goods_tag_name(tag):
108
+ """
109
+ 将新品标签代码转换为文本描述
110
+
111
+ Args:
112
+ tag (str): 新品标签代码
113
+
114
+ Returns:
115
+ str: 新品标签文本描述
116
+ """
117
+ tag_map = {
118
+ '1': '新品爆款',
119
+ '2': '新品畅销',
120
+ '3': '潜力新品',
121
+ '4': '新品'
122
+ }
123
+ return tag_map.get(str(tag), '') if tag else ''
124
+
88
125
  class NewProductAnalysisManager:
89
126
  """
90
127
  新品分析数据管理器
@@ -309,10 +346,15 @@ class NewProductAnalysisManager:
309
346
  'skc' : skc,
310
347
  'sku_supplier_no' : item.get('skuSupplierNo'),
311
348
  'layer_nm' : item.get('layerNm'),
349
+ 'new_cate1_nm' : item.get('newCate1Nm'),
350
+ 'new_cate2_nm' : item.get('newCate2Nm'),
351
+ 'new_cate3_nm' : item.get('newCate3Nm'),
352
+ 'new_cate4_nm' : item.get('newCate4Nm'),
312
353
  'goods_name' : item.get('goodsName'),
313
354
  'img_url' : item.get('imgUrl'),
314
355
  'onsale_flag' : int(item.get('onsaleFlag', 0)),
315
356
  'sale_flag' : int(item.get('saleFlag', 0)),
357
+ 'new_goods_tag' : item.get('newGoodsTag'),
316
358
  'sale_cnt' : item.get('saleCnt', 0),
317
359
  'pay_order_cnt' : item.get('payOrderCnt', 0),
318
360
  'goods_uv' : item.get('goodsUv', 0),
@@ -470,22 +512,24 @@ def update_front_price(stat_date, skc, front_price):
470
512
 
471
513
 
472
514
  if __name__ == '__main__':
515
+ database_url = "mysql+pymysql://root:123wyk@127.0.0.1:3306/lz"
516
+
473
517
  # 测试代码
474
- manager = NewProductAnalysisManager()
518
+ manager = NewProductAnalysisManager(database_url)
475
519
 
476
520
  # 创建表
477
521
  manager.create_table()
478
522
 
479
523
  # 读取JSON文件
480
- with open('../../docs/skc_model_GS9740414_2025-10-15.json', 'r', encoding='utf-8') as f:
524
+ with open('../../docs/skc_model_GS9740414_2025-10-22.json', 'r', encoding='utf-8') as f:
481
525
  json_data = json.load(f)
482
526
  count = manager.import_from_json(json_data)
483
527
  print(f"成功导入 {count} 条记录")
484
528
 
485
- with open('../../docs/skc_model_S19118100_2025-10-15.json', 'r', encoding='utf-8') as f:
486
- json_data = json.load(f)
487
- count = manager.import_from_json(json_data)
488
- print(f"成功导入 {count} 条记录")
529
+ # with open('../../docs/skc_model_S19118100_2025-10-15.json', 'r', encoding='utf-8') as f:
530
+ # json_data = json.load(f)
531
+ # count = manager.import_from_json(json_data)
532
+ # print(f"成功导入 {count} 条记录")
489
533
 
490
534
  # 更新前台价格(手动设置,后续导入不会覆盖)
491
535
  # manager.update_front_price('2025-10-15', 'si2409238815318914', 19.99)
@@ -558,8 +558,9 @@ def restore_store(database_url, user_name):
558
558
  if __name__ == '__main__':
559
559
  # 测试代码
560
560
  # 注意:需要提供数据库连接URL
561
- database_url = "mysql+pymysql://root:123wyk@127.0.0.1:3306/lz"
562
-
561
+ #database_url = "mysql+pymysql://root:123wyk@127.0.0.1:3306/lz"
562
+ database_url = "mysql+pymysql://root:123wyk@47.83.212.3:3306/lz"
563
+
563
564
  manager = SheinStoreManager(database_url)
564
565
 
565
566
  # 创建表
qrpa/shein_lib.py CHANGED
@@ -1174,8 +1174,8 @@ class SheinLib:
1174
1174
  detail_file = f'{self.config.auto_dir}/shein/product/product_detail_file.json'
1175
1175
  write_dict_to_file_ex(detail_file, {self.store_username: dict_product_detail}, [self.store_username])
1176
1176
 
1177
- def get_skc_diagnose_list(self, shelf_date_begin, shelf_date_end):
1178
- log(f'获取商品分析列表(最近上架的) {shelf_date_begin} {shelf_date_end} {self.store_name} {self.store_username}')
1177
+ def get_skc_diagnose_list(self, shelf_date_begin="", shelf_date_end=""):
1178
+ log(f'获取商品分析列表(最近上架的或在售的) {shelf_date_begin} {shelf_date_end} {self.store_name} {self.store_username}')
1179
1179
 
1180
1180
  dt_goods = self.get_dt_time_goods()
1181
1181
  if not TimeUtils.is_yesterday_date(dt_goods, "%Y%m%d"):
@@ -1188,17 +1188,18 @@ class SheinLib:
1188
1188
  page_num = 1
1189
1189
  page_size = 100
1190
1190
  payload = {
1191
- "areaCd" : "cn",
1192
- "dt" : dt_goods,
1193
- "countrySite" : [
1191
+ "areaCd" : "cn",
1192
+ "dt" : dt_goods,
1193
+ "countrySite": [
1194
1194
  "shein-all"
1195
1195
  ],
1196
- "startDate" : yesterday,
1197
- "endDate" : yesterday,
1198
- "pageNum" : page_num,
1199
- "pageSize" : page_size,
1200
- "localFrstSaleBeginDate": shelf_date_begin,
1201
- "localFrstSaleEndDate" : shelf_date_end,
1196
+ "startDate" : yesterday,
1197
+ "endDate" : yesterday,
1198
+ "pageNum" : page_num,
1199
+ "pageSize" : page_size,
1200
+ "onsaleFlag" : 1,
1201
+ # "localFrstSaleBeginDate": shelf_date_begin,
1202
+ # "localFrstSaleEndDate" : shelf_date_end,
1202
1203
  }
1203
1204
  response_text = fetch(self.web_page, url, payload)
1204
1205
  error_code = response_text.get('code')
@@ -1224,6 +1225,12 @@ class SheinLib:
1224
1225
 
1225
1226
  # 活动信息
1226
1227
  # AB实验数据
1228
+
1229
+ # 预先过滤掉不需要的商品状态
1230
+ log(f'过滤前商品数量: {len(spu_list)}')
1231
+ exclude_levels = ['退供款', '自主停产', '自主下架']
1232
+ spu_list = [item for item in spu_list if item['layerNm'] not in exclude_levels]
1233
+ log(f'过滤后剩余商品数量: {len(spu_list)}')
1227
1234
 
1228
1235
  for skc_item in spu_list:
1229
1236
  skc = skc_item['skc']
@@ -1262,8 +1269,8 @@ class SheinLib:
1262
1269
  return spu_list
1263
1270
 
1264
1271
  # 获取备货信息列表 最近35天上架的
1265
- def get_latest_shelf_list(self, shelf_date_begin, shelf_date_end):
1266
- log(f'获取备货信息列表(最近上架的) {shelf_date_begin} {shelf_date_end} {self.store_name} {self.store_username}')
1272
+ def get_latest_shelf_list(self, shelf_date_begin="", shelf_date_end=""):
1273
+ log(f'获取备货信息列表(最近上架的或已上架的) {shelf_date_begin} {shelf_date_end} {self.store_name} {self.store_username}')
1267
1274
 
1268
1275
  dict_skc_shelf_date = {}
1269
1276
 
@@ -1280,7 +1287,7 @@ class SheinLib:
1280
1287
  "c7dSaleCntEnd" : "",
1281
1288
  "goodsLevelIdList" : [],
1282
1289
  "supplyStatus" : "",
1283
- "shelfStatus" : "",
1290
+ "shelfStatus" : 1, # 已上架
1284
1291
  "categoryIdList" : [],
1285
1292
  "skcStockBegin" : "",
1286
1293
  "skcStockEnd" : "",
@@ -1336,9 +1343,9 @@ class SheinLib:
1336
1343
 
1337
1344
  time.sleep(0.3)
1338
1345
 
1339
- key = f'{self.store_username}'
1340
- cache_file = f'{self.config.auto_dir}/shein/cache/bak_info_list_{key}_{shelf_date_begin}_{shelf_date_end}.json'
1341
- write_dict_to_file_ex(cache_file, {key: spu_list}, [key])
1346
+ # key = f'{self.store_username}'
1347
+ # cache_file = f'{self.config.auto_dir}/shein/cache/bak_info_list_{key}_{shelf_date_begin}_{shelf_date_end}.json'
1348
+ # write_dict_to_file_ex(cache_file, {key: spu_list}, [key])
1342
1349
 
1343
1350
  for skc_item in spu_list:
1344
1351
  skc = skc_item['skc']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qrpa
3
- Version: 1.1.36
3
+ Version: 1.1.38
4
4
  Summary: qsir's rpa library
5
5
  Author: QSir
6
6
  Author-email: QSir <1171725650@qq.com>
@@ -11,7 +11,7 @@ qrpa/fun_web.py,sha256=9YuVy_wps9Ty_FBZ91W2R0iKgC2IViaJjHbyuUgngGs,11599
11
11
  qrpa/fun_win.py,sha256=vMdVh00dsnVz8Wey4Bq7J3RPZAY8B_bI_IKphOX1cE8,7836
12
12
  qrpa/shein_daily_report_model.py,sha256=O8s9qM45WZRoAgxUFRngvmBrc29v7Uf2ye7K8_bcSRg,12214
13
13
  qrpa/shein_excel.py,sha256=-5fNetkVMixPQPw00K9F4OeJn8LSknaoyRXNqsQw1EA,158107
14
- qrpa/shein_lib.py,sha256=GSHqiCoVgFs3Ri6HT-AxxcJuGTsZ2eRGnGbv2YsF4ho,190827
14
+ qrpa/shein_lib.py,sha256=aJnhaWPZHWKUaAvTy4I3Xrk3sE_mZIslempxLo9mbFI,191182
15
15
  qrpa/shein_mysql.py,sha256=MxbiRSH0gaTtW4ET7lVWRNY4NLOrMLGXO_4STptE1pU,4562
16
16
  qrpa/shein_sqlite.py,sha256=i4xwNf60eoG6wbWM1R2i5pDdVW1ZMy6uy9nB-c2WKzk,5554
17
17
  qrpa/shein_ziniao.py,sha256=YN7g6m84-vyDyePssfR41lqwaROz-km0-rJ8qY-jhy0,21416
@@ -22,12 +22,12 @@ qrpa/time_utils.py,sha256=bOTSi_ewXPCxwgG_ndFGf8dl7S4fvSGT9sQ-90LESuo,31458
22
22
  qrpa/time_utils_example.py,sha256=80zzunKw7F1S8MOwNFmmiCnI8MOYoh4PH-25UrEGuF0,7810
23
23
  qrpa/wxwork.py,sha256=Vy8PGEtlTWt4-1laVhuqpJUGCFH2JymgbjvH00aaBog,10946
24
24
  qrpa/mysql_module/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- qrpa/mysql_module/new_product_analysis_model.py,sha256=nLBxgzcBHofiORETEycWMUliG-9mEErGih9TmBClxkM,18615
25
+ qrpa/mysql_module/new_product_analysis_model.py,sha256=j_9WpGK21XBr_bProhUV6IWaDXWlKg1_jQsImsqK4L8,20272
26
26
  qrpa/mysql_module/shein_ledger_model.py,sha256=KGKfGyzS00rbBZhiZhAzypwYPGs7OdfRLnH2ea36Vm8,18161
27
27
  qrpa/mysql_module/shein_product_model.py,sha256=KiXMjPT93XkANCM53cCFaISja0sTmAWsionFrRy8DQ4,18773
28
28
  qrpa/mysql_module/shein_return_order_model.py,sha256=8xvKhOzpcJS5FHfyA33UednaqRNCyXo3qeXBzwTXeN8,25993
29
- qrpa/mysql_module/shein_store_model.py,sha256=tSXB7w8gmLXQfvuzk3te4OL1Tok-kEgGPYrCutDrzSw,20469
30
- qrpa-1.1.36.dist-info/METADATA,sha256=Xk25QUVlFGW6ET2dpzJB8N9UiPu8BXMxAvZ7MH4kqjU,231
31
- qrpa-1.1.36.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
32
- qrpa-1.1.36.dist-info/top_level.txt,sha256=F6T5igi0fhXDucPPUbmmSC0qFCDEsH5eVijfVF48OFU,5
33
- qrpa-1.1.36.dist-info/RECORD,,
29
+ qrpa/mysql_module/shein_store_model.py,sha256=RTj9cqexewHglHm1JNTe8iU0vJueHBLltdap-gvGxaY,20536
30
+ qrpa-1.1.38.dist-info/METADATA,sha256=B3wqzICn7txanQ9FKndI0ADd4Q254g4KZVUIz3oHVho,231
31
+ qrpa-1.1.38.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
32
+ qrpa-1.1.38.dist-info/top_level.txt,sha256=F6T5igi0fhXDucPPUbmmSC0qFCDEsH5eVijfVF48OFU,5
33
+ qrpa-1.1.38.dist-info/RECORD,,
File without changes