Files
KJD/Work/CollectClass/ProductCheckControl.cs
T
2025-06-29 19:38:31 +08:00

279 lines
12 KiB
C#

using AllBase;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Work.Api;
using Work.ManageClass;
namespace Work.CollectClass
{
public class ProductCheckControl
{
public string Name;
public static int threadCount = 5;
public static bool Running = false;
public static int goodCount = 0;
public static bool isCount = false;
public static int start = 0;
public static int end = 0;
public static string pid = "";
public static List<KeyValueBase> dicShopCount = new List<KeyValueBase>();
public static List<ProductCheckDetail> ShopProductCheckDetailList = new List<ProductCheckDetail>();
public static List<ProductCheckDetail> ShopProductCheckDetailList2 = new List<ProductCheckDetail>();
public static List<ProductStaus> ProductStatusList = new List<ProductStaus>();
public ProductCheckControl(string name)
{
Name = name;
}
public void Get()
{
List<Thread> ts = new List<Thread>();
for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++)
{
var shop = GetShopLoginInfo.Shops[i];
if (!shop.SelectProductCheck || shop.Message == "会话已过期")
continue;
var p = new ProductCheckDetailLogic(Name, shop);
Threadx.ThreadListWait(ref ts, new Thread(p.Get), threadCount);
Thread.Sleep(1000);
}
Threadx.ThreadListWait(ref ts);
}
public void Off()
{
List<Thread> ts = new List<Thread>();
for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++)
{
var shop = GetShopLoginInfo.Shops[i];
if (!shop.SelectProductCheck || shop.Message == "会话已过期")
continue;
var p = new ProductCheckDetailLogic(Name, shop);
Threadx.ThreadListWait(ref ts, new Thread(p.Off), threadCount);
Thread.Sleep(1000);
}
Threadx.ThreadListWait(ref ts);
}
public void Del()
{
List<Thread> ts = new List<Thread>();
for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++)
{
var shop = GetShopLoginInfo.Shops[i];
if (!shop.SelectProductCheck || shop.Message == "会话已过期")
continue;
var p = new ProductCheckDetailLogic(Name, shop);
Threadx.ThreadListWait(ref ts, new Thread(p.Del), threadCount);
Thread.Sleep(1000);
}
Threadx.ThreadListWait(ref ts);
}
}
public class ProductCheckDetailLogic
{
public string Name;
public ShopChatBase Shop;
public int count;
public ProductCheckDetailLogic(string Name, ShopChatBase Shop)
{
this.Name = Name;
this.Shop = Shop;
}
public void Off()
{
var api = new PinduoduoApiGetProduct(Shop);
string html = api.SetOnline(long.Parse(ProductCheckControl.pid), false);
if (!html.Contains("\"is_success\":true"))
{
Thread.Sleep(2000);
html = api.SetOnline(long.Parse(ProductCheckControl.pid), false);
}
ProductStaus status = new ProductStaus();
status.goodId = ProductCheckControl.pid;
if (html.Contains("\"is_success\":true"))
{
status.OffStatus = "下架成功";
ProductCheckControl.ProductStatusList.Add(status);
LogSave.Add(Name, ProductCheckControl.pid + "下架成功");
}
else
{
status.OffStatus = "下架失败";
ProductCheckControl.ProductStatusList.Add(status);
LogSave.Add(Name, ProductCheckControl.pid + "下架失败");
}
}
public void Del()
{
string url = "https://mms.pinduoduo.com/plutus/api/plutus/bin/goods/delete/batch";
string refere = "http://mms.pinduoduo.com/Pdd.html";
string data = "{\"goods_ids\":[" + ProductCheckControl.pid + "],\"mall_id\":" + Shop.MallId + ",\"creator\":\"" + Shop.ShopName + "\",\"creator_id\":" + Shop.ReceiverId + "}";
string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies);
if (html.Contains("商品仍在售"))
{
Off();
html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies);
}
ProductStaus status = new ProductStaus();
status.goodId = ProductCheckControl.pid;
if (html.Contains("\"success\":true"))
{
status.DelStatus = "删除成功";
ProductCheckControl.ProductStatusList.Add(status);
LogSave.Add(Name, ProductCheckControl.pid + "删除成功");
}
else
{
status.DelStatus = "删除失败";
ProductCheckControl.ProductStatusList.Add(status);
LogSave.Add(Name, ProductCheckControl.pid + "删除失败");
}
}
public void Get()
{
GetAllOnlineCount();
int sub = ProductCheckControl.end - ProductCheckControl.start + 1;
string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList";
string refere = "https://mms.pinduoduo.com/Pdd.html";
string data = "{\"order_by\":\"id:asc\",\"is_onsale\":1,\"size\":"+sub+",\"page\":#page#,\"mall_id\":" + Shop.MallId + "}";
string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());
//GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data.Replace("#page#", "1"), Shop.Cookies);
if (string.IsNullOrEmpty(html) || !html.Contains("total"))
{
Thread.Sleep(30 * 1000);
html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());
}
if (string.IsNullOrEmpty(html) || !html.Contains("total"))
{
Thread.Sleep(30 * 1000);
html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());
}
int allCount = BaseRegex.GetIntJson(ref html, "total");
if (allCount< ProductCheckControl.start)
{
LogSave.Add(Name, "当前店铺最大在线商品数量为 " + allCount+",请停止操作下一步按钮");
return;
}
//int page = allCount / 100 + (allCount % 100 > 0 ? 1 : 0);
//if (page > 1000)
//{
// page = 1000;
//}
int i = ProductCheckControl.end / sub;
if (i > 1)
{
html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i).ToString()), CpsSetAllGoods.getAnti0aon());
if (string.IsNullOrEmpty(html) || !html.Contains("total"))
{
Thread.Sleep(30 * 1000);
html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i).ToString()), CpsSetAllGoods.getAnti0aon());
}
if (string.IsNullOrEmpty(html) || !html.Contains("total"))
{
Thread.Sleep(30 * 1000);
html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", (i).ToString()), CpsSetAllGoods.getAnti0aon());
}
}
var m = BaseRegex.GetMatchRegex(ref html, @"\{([\w\W]+?)\},[\w\W]+?\}");
for (int j = 0; m != null && j < m.Count; j++)
{
while (ProductCheckControl.Running)
{
Thread.Sleep(3000);
continue;
}
string list = m[j].Groups[0].Value;
ProductCheckDetail p = new ProductCheckDetail();
p.goodId = BaseRegex.GetStringJson(ref list, "id");
if (string.IsNullOrEmpty(p.goodId))
continue;
p.goodName = BaseRegex.GetStringJson(ref list, "goods_name");
string urlx = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/on_shop/detail";
string datax = "{\"goods_id\":" + p.goodId + "}";
string htmlx = GetPostTaobaoHtml.GetJsonPost(urlx, "", true, datax, Shop.Cookies);
string temp = BaseRegex.GetMatchRegexString(ref htmlx, @"""carousel_gallery"":\[(.*?)\]");
var mc = BaseRegex.GetMatchRegex(ref temp, @"""url"":""([^""]+?)""");
for (int k = 0; k < mc.Count; k++)
{
string imgx = mc[k].Groups[1].Value.Replace("@750w_1l_50Q", "");
if (imgx.Contains("?"))
imgx = imgx.Substring(0, imgx.IndexOf("?"));
p.imgUrlList.Add(imgx);
}
for (int q = 0; q < p.imgUrlList.Count; q++)
{
byte[] img;
try
{
GetPostTaobaoHtml.DownLoadImage(p.imgUrlList[q], out img);
if (img==null)
{
Thread.Sleep(2000);
GetPostTaobaoHtml.DownLoadImage(p.imgUrlList[q], out img);
}
using (Stream stream = new MemoryStream(img))
{
p.imagePdd[q] = Image.FromStream(stream, true);
stream.Close();
stream.Dispose(); //释放占用资源
}
p.imglist.Add(img);
}
catch
{
}
}
System.GC.Collect();//垃圾回收
if (!ProductCheckControl.ShopProductCheckDetailList.Exists(pt => pt != null && pt.goodId == p.goodId))
{
ProductCheckControl.ShopProductCheckDetailList.Add(p);
ProductCheckControl.ShopProductCheckDetailList2.Add(p);
count++;
LogSave.Add(Name, "获取在线产品 " + p.goodId);
}
else
{
}
}
}
public void GetAllOnlineCount()
{
int mallId = Shop.MallId;
string cookies = Shop.Cookies, shopName = Shop.ShopName;
string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList";
string refere = "https://mms.pinduoduo.com/Pdd.html";
string data = "{\"order_by\":\"id:desc\",\"is_onsale\":1,\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}";
string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());
if (string.IsNullOrEmpty(html) || !html.Contains("total"))
{
Thread.Sleep(30 * 1000);
html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, Shop.Cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon());
}
int allCount = BaseRegex.GetIntJson(ref html, "total");
KeyValueBase pair = new KeyValueBase (Shop.ShopName,allCount.ToString());
ProductCheckControl.dicShopCount.Add(pair);
}
}
public class ProductCheckDetail
{
public string goodId = "";
public string goodName = "";
public List<string> imgUrlList = new List<string>();
public List<byte[]> imglist=new List<byte[]>();
public Image[] imagePdd = new Image[10];
}
public class ProductStaus
{
public string goodId = "";
public string OffStatus = "";
public string DelStatus = "";
}
}