using AllBase; using AllBase.Helper; using AllBase.Model.Result; using NaiBa.Util.Extension; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using TemuKJD.Extension; using TemuKJD.BaseForms; using TemuKJD.ToolForms; using Work; using TemuKJD.BLL; using System.Text.RegularExpressions; using TemuKJD.PDDForms.ProductSelectForms; using TemuKJD.WXForms.ShopForms; using AllBase.Model.Result.PDDResult; using AllBase.Model.Param.WXParam; using AllBase.Model.Result.WXResult; using Newtonsoft.Json; using NaiBa.Util; using AllBase.Model.Config; using TemuKJD.BLL.Wx; using AllBase.Model.Data; using NaiBa.CefHelper; using TemuKJD.Helper; using NaiBa.CefHelper.Handler; using CefSharp; using TemuKJD.WXForms.ProductForms; namespace TemuKJD.WXForms.OrderForms { public partial class WXOrderListForm : BaseForm { int PageBegin = 1; int PageEnd = 9999; List lstPrintLog = new List(); bool isOnlineWayBill = false; public CancellationTokenSource cancellationTokenSource { get; set; } = null; public bool IsLoadComplate { get; set; } = false; bool isInit = false; CheckBox chkSelectAll = null; ConcurrentList lstWXConsignmentOrderInfo = new ConcurrentList(); public Dictionary dicCheckedShopId = new Dictionary(); public WXOrderListForm() { InitializeComponent(); } private void UserSelectDbProductForm_Load(object sender, EventArgs e) { dgvOrder.AddMergeColumn(new List() { "colOrderStatus" , "colUpdateStatus" }); dgvOrder.AddMergeColumnHeader(new List() { "colOrderStatus" , "colUpdateStatus" }, "订单状态"); this.splitContainer1.Dock = DockStyle.Fill; pnlEditReceiveInfo.Location = new Point(pnlUpdateNotes.Location.X, pnlUpdateNotes.Location.Y); pnlBuyUrl.Location = new Point(pnlUpdateNotes.Location.X, pnlUpdateNotes.Location.Y); dtpFilterBeginTime.Value = DateTime.Now.AddDays(-1); dtpFilterEndTime.Value = DateTime.Now.Date.AddDays(1).AddSeconds(-1); pbLoading.Visible = true; Task.Run(() => { GetRefreshPrintId(); Invoke(new Action(() => { pbLoading.Visible = false; })); }); dicCheckedShopId = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("wx_checked_shop_dic"); if (dicCheckedShopId == null) dicCheckedShopId = new Dictionary(); chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); dgvShop.Columns["colSelect"].HeaderText = ""; chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; this.dgvOrder.AddSelectorColumn("colCheck"); dgvOrder.AddImgColumn("colProductSkcPic", "colImgUrl"); if (BaseClass.UserAuthority.Contains("在线寄件") || BaseClass.ParentAuthority.Contains("在线寄件")) { this.dgvOrder.Columns["colPrintId"].Visible = true; this.dgvOrder.Columns["colOnlineWaybillOrderId"].Visible = true; this.dgvOrder.Columns["colOnlineWaybill"].Visible = true; this.btnRefreshPrintId.Visible = true; //this.btnBatchOnlieWaybill.Visible = true; //this.btnStopBatchOnlieWaybill.Visible = true; } else { this.dgvOrder.Columns["colPrintId"].Visible = false; this.dgvOrder.Columns["colOnlineWaybillOrderId"].Visible = false; this.dgvOrder.Columns["colOnlineWaybill"].Visible = false; this.btnRefreshPrintId.Visible = false; this.btnBatchOnlieWaybill.Visible = false; this.btnStopBatchOnlieWaybill.Visible = false; } IsLoadComplate = true; } private void chkSelectAll_CheckedChanged(object sender, EventArgs e) { if (!chkSelectAll.Checked) { foreach (DataGridViewRow row in dgvShop.Rows) { row.Cells["colSelect"].Value = false; } } else { //var list = GlobalConfig.ShopLoginList.Where(s => s.LoginStatus == "登录成功").Select(ss => ss.ShopId); foreach (DataGridViewRow row in dgvShop.Rows) { //if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString())) if (row.Visible == true) row.Cells["colSelect"].Value = true; } } foreach (var r in dgvShop.Rows.Cast()) { dicCheckedShopId[r.Cells["colShopId"].Value.ParseToString()] = r.Cells["colSelect"].Value.ParseToBool(); } NaiBa.Util.Helper.ConfigHelper.SaveConfig("wx_checked_shop_dic", dicCheckedShopId); } private void btnRefreshShop_Click(object sender, EventArgs e) { pbLoadingShop.Visible = true; RefreshShopLogin(); pbLoadingShop.Visible = false; } private void UserSelectDbProductForm_VisibleChanged(object sender, EventArgs e) { if (Visible == true) { RefreshShopLogin(); //updateAuthor(); if (!isInit) { } isInit = true; } } private void RefreshShopLogin() { // 店铺Id var selectIds = dgvShop.Rows.Cast().Where(row => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); // 获取被删除的店铺 List dgvRowList = dgvShop.Rows.Cast().Where(row => !GlobalConfig.ShopLoginList.Any(s => s.ShopId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); // 更新被删除的店铺列表 foreach (var row in dgvRowList) { dgvShop.Rows.Remove(row); } // 绑定其他店铺(含新导入的店铺) foreach (ShopLoginInfo shopEntity in GlobalConfig.ShopLoginList) { if (!string.IsNullOrEmpty(shopEntity.ShopId)) BindShop(shopEntity, selectIds); } cmbFilterShopNotes.Items.Clear(); foreach (var note in GlobalConfig.ShopLoginList.Select(s => s.Notes).Where(s => !s.IsNullOrEmpty()).Distinct()) { cmbFilterShopNotes.Items.Add(note); } cmbFilterShopGroup.Items.Clear(); foreach (var group in GlobalConfig.ShopLoginList.Select(s => s.GroupName).Where(s => !s.IsNullOrEmpty()).Distinct()) { cmbFilterShopGroup.Items.Add(group); } cmbFilterOrderShopGroup.Items.Clear(); foreach (var group in GlobalConfig.ShopLoginList.Select(s => s.GroupName).Where(s => !s.IsNullOrEmpty()).Distinct()) { cmbFilterOrderShopGroup.Items.Add(group); } } private void BindShop(ShopLoginInfo shopEntity, List selectShopId = null, string msg = "") { if (shopEntity == null) return; if (shopEntity.is_shop_expire) return; if (selectShopId == null) selectShopId = new List(); bool canUse = shopEntity.LoginStatus == "登录成功"; var rows = dgvShop.Rows.Cast().Where(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopId).ToList(); var day = DateTime.Now.ToString("yyyyMMdd").ParseToInt(); if (rows.Count == 0) { this.dgvShop.Rows.Add( dicCheckedShopId.Keys.Contains(shopEntity.ShopId) && dicCheckedShopId[shopEntity.ShopId] == true, shopEntity.LoginName, shopEntity.ShopId, shopEntity.ShopAccount, shopEntity.Notes, shopEntity.GroupName, "选择商品", canUse ? "在线" : "掉线", GlobalConfig.lstWxShopAuthInfo.FirstOrDefault(sa => sa.ShopId == shopEntity.ShopId)?.ExpiresTime > DateTime.Now.AddMinutes(5) ? "可用" : "过期", canUse, GlobalConfig.dicWxShopUploadInfo.ContainsKey(shopEntity.ShopId) ? GlobalConfig.dicWxShopUploadInfo[shopEntity.ShopId].DicDayUploadCount[day] : 0, GlobalConfig.dicWxShopUploadInfo.ContainsKey(shopEntity.ShopId) ? GlobalConfig.dicWxShopUploadInfo[shopEntity.ShopId].OnSaleCount : 0, shopEntity.AddProductRemaining, msg ); } else { foreach (var row in rows) { row.Cells["colSelect"].Value = !isInit || (selectShopId.Contains(shopEntity.ShopId) && canUse); row.Cells["colShopLoginName"].Value = shopEntity.LoginName; row.Cells["colShopName"].Value = shopEntity.ShopAccount; row.Cells["colShopNotes"].Value = shopEntity.Notes; row.Cells["colGroup"].Value = shopEntity.GroupName; row.Cells["colLoginStatus"].Value = canUse ? "在线" : "掉线"; row.Cells["colLoginStatus"].Style.ForeColor = canUse ? Color.Green : Color.Red; row.Cells["colCanUse"].Value = canUse; row.Cells["colApi"].Value = GlobalConfig.lstWxShopAuthInfo.FirstOrDefault(sa => sa.ShopId == shopEntity.ShopId)?.ExpiresTime > DateTime.Now.AddMinutes(5) ? "可用" : "过期"; row.Cells["colRemaining"].Value = shopEntity.AddProductRemaining; row.Cells["colUploadCount"].Value = GlobalConfig.dicWxShopUploadInfo.ContainsKey(shopEntity.ShopId) ? GlobalConfig.dicWxShopUploadInfo[shopEntity.ShopId].DicDayUploadCount[day] : 0; row.Cells["colOnSaleNum"].Value = GlobalConfig.dicWxShopUploadInfo.ContainsKey(shopEntity.ShopId) ? GlobalConfig.dicWxShopUploadInfo[shopEntity.ShopId].OnSaleCount : 0; row.Cells["colMessage"].Value = msg; } } displayAuthStatus(shopEntity); } void displayAuthStatus(ShopLoginInfo shop) { var rows = this.dgvShop.Rows.Cast().Where(r => r.Cells["colShopId"].Value.ParseToString() == shop?.ShopId); foreach (var row in rows) { bool canUse = row.Cells["colLoginStatus"].Value.ParseToString() == "在线"; (row.Cells["colLoginStatus"] as DataGridViewLinkCell).Style.ForeColor = canUse ? Color.Blue : Color.Red; (row.Cells["colLoginStatus"] as DataGridViewLinkCell).LinkColor = canUse ? Color.Blue : Color.Red; (row.Cells["colLoginStatus"] as DataGridViewLinkCell).ActiveLinkColor = canUse ? Color.LightBlue : Color.OrangeRed; (row.Cells["colLoginStatus"] as DataGridViewLinkCell).VisitedLinkColor = canUse ? Color.DarkBlue : Color.DarkRed; canUse = row.Cells["colApi"].Value.ParseToString() == "可用"; (row.Cells["colApi"] as DataGridViewLinkCell).Style.ForeColor = canUse ? Color.Blue : Color.Red; (row.Cells["colApi"] as DataGridViewLinkCell).LinkColor = canUse ? Color.Blue : Color.Red; (row.Cells["colApi"] as DataGridViewLinkCell).ActiveLinkColor = canUse ? Color.LightBlue : Color.OrangeRed; (row.Cells["colApi"] as DataGridViewLinkCell).VisitedLinkColor = canUse ? Color.DarkBlue : Color.DarkRed; } } private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) return; string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText; string columnName = dgvShop.Columns[e.ColumnIndex].Name; string shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToString(); string shopAccount = dgvShop.Rows[e.RowIndex].Cells["colShopName"].Value.ToString(); var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId.ToString()); var row = dgvShop.Rows[e.RowIndex]; switch (columnName) { case "colSelect": //if (row.Cells["colCanUse"].Value.ParseToBool()) { row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); chkSelectAll.CheckedChanged -= chkSelectAll_CheckedChanged; if (dgvShop.Rows.Cast().All(r => r.Cells["colSelect"].Value.ParseToBool())) chkSelectAll.Checked = true; else chkSelectAll.Checked = false; chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; } //else { //BaseMsgForm.ShowInfo("店铺未登录!"); } dicCheckedShopId[row.Cells["colShopId"].Value.ParseToString()] = row.Cells["colSelect"].Value.ParseToBool(); NaiBa.Util.Helper.ConfigHelper.SaveConfig("wx_checked_shop_dic", dicCheckedShopId); break; case "colLoginStatus": { if (WXShopListForm.Instance == null) WXShopListForm.Instance = new WXShopListForm(); WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop); //shopLoginForm.prodUserSelectForm = this; if (shop.LoginStatus != "登录成功") { shopLoginForm.openType = EnumOpenType.login; shopLoginForm.ShowDialog(); RefreshShopLogin(); } else { shopLoginForm.openType = EnumOpenType.manage; shopLoginForm.WindowState = FormWindowState.Maximized; shopLoginForm.Show(); } } break; case "colApi": { WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop); shopLoginForm.openType = EnumOpenType.manage; shopLoginForm.WindowState = FormWindowState.Maximized; shopLoginForm.InitUrl = "https://store.weixin.qq.com/shop/servicemarket/detail?serviceId=3984039898079707139"; shopLoginForm.Show(); } break; } } private void btnSearch_Click(object sender, EventArgs e) { var lstShopId = dgvShop.Rows.Cast().Where(row => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); if (lstShopId.Count == 0) { BaseMsgForm.ShowInfo("请选择店铺!"); return; } } private void dgvSelectProduct_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) return; string headerText = dgvOrder.Columns[e.ColumnIndex].HeaderText; var shopId = dgvOrder.Rows[e.RowIndex].Cells["colSupplierId"].Value.ParseToString(); var spuId = dgvOrder.Rows[e.RowIndex].Cells["colSpuId"].Value.ParseToString(); var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId); var row = dgvOrder.Rows[e.RowIndex]; var cell = row.Cells[e.ColumnIndex]; var orderId = row.Cells["colOrderId"].Value.ParseToString(); switch (headerText) { case "删除": break; case "登录": { WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop); shopLoginForm.openType = EnumOpenType.login; shopLoginForm.ShowDialog(); RefreshShopLogin(); } break; case "进店": { WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop); WXShopListForm.Instance.CheckShopLogin(new ShopLoginInfo[] { shop }, false); if (shop.LoginStatus == "登录成功") { shopLoginForm.openType = EnumOpenType.manage; shopLoginForm.WindowState = FormWindowState.Maximized; //shopLoginForm.InitUrl = "https://store.weixin.qq.com/shop/home"; shopLoginForm.InitUrl = "https://store.weixin.qq.com/shop/order/list"; shopLoginForm.Show(); } else { shopLoginForm.openType = EnumOpenType.login; shopLoginForm.ShowDialog(); RefreshShopLogin(); } } break; case "图片": { ShowImgForm imgFrom = new ShowImgForm(dgvOrder.Rows[e.RowIndex].Cells["colImgUrl"].Value.ParseToString()); imgFrom.ShowDialog(); break; } case "礼": case "优化": { WXOrderListOptimizeForm form = new WXOrderListOptimizeForm(shop); form.lblOrderId.Text = orderId; form.lblSpuId.Text = row.Cells["colSpuId"].Value.ParseToString(); // goodsId form.lblSkuId.Text = row.Cells["colSkuId"].Value.ParseToString(); // skuId form.txtGoodsName.Text = row.Cells["colProductName"].Value.ParseToString(); // 商品名称 form.txtSkuName.Text = row.Cells["colSkuSpec"].Value.ParseToString(); // sku规格名称 form.txtCurrentPrice.Text = row.Cells["colCurrentPrice"].Value.ParseToString(); // 当前商品价格 form.txtOrderPrice.Text = row.Cells["colSalePrice"].Value.ParseToString(); // 订单价格 form.txtCurrentStock.Text = row.Cells["colCurrentStock"].Value.ParseToString(); // 当前库存; form.numAddPrice.Value = 0; form.ShowDialog(); if (form.EditPriceSuccess == true) { if (form.prodObj != null) { foreach (var rw in this.dgvOrder.Rows.Cast()) { if (rw.Cells["colSpuId"].Value.ParseToString() != spuId) continue; foreach (var sku in form.prodObj["skuList"]) { if (rw.Cells["colSkuId"].Value.ParseToString() == sku["skuId"].ParseToString()) { rw.Cells["colCurrentPrice"].Value = sku["price"].ParseToInt() * 0.01m + form.numAddPrice.Value; break; } } } } } if (form.SendGiftSuccess == true) { foreach (var rw in this.dgvOrder.Rows.Cast()) { if (rw.Cells["colOrderId"].Value.ParseToString() != orderId) continue; rw.Cells["colOpResult"].Value = "礼物单已发送"; } } if (form.ClearStock == true) { foreach (var rw in this.dgvOrder.Rows.Cast()) { if (rw.Cells["colSpuId"].Value.ParseToString() != spuId) continue; if (rw.Cells["colSkuId"].Value.ParseToString() != row.Cells["colSkuId"].Value.ParseToString()) continue; rw.Cells["colOpResult"].Value = "清除库存成功"; rw.Cells["colCurrentStock"].Value = 0; } } if (form.IsDownProd == true) { foreach (var rw in this.dgvOrder.Rows.Cast()) { if (rw.Cells["colSpuId"].Value.ParseToString() != spuId) continue; rw.Cells["colOpResult"].Value = "商品下架成功"; //rw.Cells["colCurrentStock"].Value = 0; } } } break; case "取消优惠": { int onSaleStatusCode = -1; int pageSize = 50; var getProdOnSaleRst = WXClearNoVisit.searchProduct(shop, 1, pageSize, spuId, onSaleStatusCode); Thread.Sleep(Randomx.GetId(50, 100)); if (!getProdOnSaleRst.Contains("\"success\":true")) { ShowShopError(shop, getProdOnSaleRst, true); break; } var prodObjs = JsonHelper.JObjectParse(getProdOnSaleRst)["productList"].FirstOrDefault(); if (prodObjs != null) { var str = JsonHelper.SerializeObject(prodObjs); } var skuId = row.Cells["colSkuId"].Value.ParseToString(); var price = (row.Cells["colCurrentPrice"].Value.ParseToDecimal() * 100).ParseToInt(); var deltaPrice = 0; while (!price.ToString().EndsWith("66")) { deltaPrice++; price++; } JObject changePriceObj = new JObject(); JArray skuArr = new JArray(); foreach (var sku in prodObjs["skuList"]) { JObject obj = new JObject(); obj["spuId"] = spuId; obj["skuId"] = sku["skuId"]; obj["salePrice"] = sku["price"].ParseToInt() + deltaPrice; skuArr.Add(obj); } changePriceObj["skuList"] = skuArr; changePriceObj["uploadSource"] = 6; // string body = @"{""skuList"":[{""spuId"":" + spuId + @",""skuId"":""" + skuId + @""",""salePrice"":" + newPrice + @"}],""uploadSource"":6}"; var rst = WXOrderList.EditPrice(shop, changePriceObj); if (!rst.Contains("\"code\":0")) { var error = BaseRegex.GetStringJsonByRegs(ref rst, rst, "err_msg", "error_msg", "errMsg", "errorMsg"); BaseMsgForm.ShowError("修改优惠商品价格失败 " + error); return; } JObject endActivityObj = new JObject(); endActivityObj["platformActivityId"] = "1016"; JArray arr = new JArray(); foreach (var sku in prodObjs["skuList"]) { JObject obj = new JObject(); obj["productId"] = spuId; obj["skuId"] = sku["skuId"]; arr.Add(obj); } endActivityObj["productList"] = arr; endActivityObj["actionType"] = 1; //{ "platformActivityId":"1016","productList":[{ "productId":"10000879673464","skuId":"15601266074"},{ "productId":"10000879673464","skuId":"15601240593"}],"actionType":1} rst = WXOrderList.cancelActivity(shop, endActivityObj); if (!rst.Contains("\"code\":0")) { var error = BaseRegex.GetStringJsonByRegs(ref rst, rst, "err_msg", "error_msg", "errMsg", "errorMsg"); BaseMsgForm.ShowError("取消优惠失败 " + error); return; } else { foreach (var rw in this.dgvOrder.Rows.Cast()) { if (rw.Cells["colSpuId"].Value.ParseToString() != spuId) continue; rw.Cells["colOpResult"].Value = "取消优惠成功"; foreach (var sku in prodObjs["skuList"]) { if (rw.Cells["colSkuId"].Value.ParseToString() == sku["skuId"].ParseToString()) { rw.Cells["colCurrentPrice"].Value = sku["price"].ParseToInt() * 0.01m + deltaPrice * 0.01m; break; } } } BaseMsgForm.ShowInfo("取消优惠成功"); } } break; case "修改": { pnlUpdateNotes.Visible = true; pnlEditReceiveInfo.Visible = false; pnlBuyUrl.Visible = false; lblShopName.Text = shop.ShopAccount; lblOrderId.Text = orderId; txtNotes.Text = row.Cells["colNotes"].Value.ParseToString(); lblColorTag.Text = row.Cells["colNotesColor"].Value.ParseToString(); ucCheckBox1.CheckBoxCheckColor = Color.Gray; ucCheckBox1.CheckBoxBorderColor = Color.Gray; ucCheckBox2.CheckBoxCheckColor = Color.Red; ucCheckBox2.CheckBoxBorderColor = Color.Red; ucCheckBox3.CheckBoxCheckColor = Color.Orange; ucCheckBox3.CheckBoxBorderColor = Color.Orange; ucCheckBox4.CheckBoxCheckColor = Color.Green; ucCheckBox4.CheckBoxBorderColor = Color.Green; ucCheckBox5.CheckBoxCheckColor = Color.Blue; ucCheckBox5.CheckBoxBorderColor = Color.Blue; ucCheckBox1.Checked = lblColorTag.Text == "0"; ucCheckBox2.Checked = lblColorTag.Text == "1"; ucCheckBox3.Checked = lblColorTag.Text == "2"; ucCheckBox4.Checked = lblColorTag.Text == "3"; ucCheckBox5.Checked = lblColorTag.Text == "4"; } break; case "👁": { //cell.Value = "查询中…"; pbLoading.Visible = true; Task.Run(() => { var rows = dgvOrder.Rows.Cast().Where(r => r.Cells["colOrderId"].Value.ParseToString() == orderId); var currentStatus = UpdateOrderStatus(shop, orderId); Invoke(new Action(() => { foreach (var rw in rows) { rw.Cells["colOrderStatus"].Value = currentStatus; } })); if (currentStatus != "待发货" && currentStatus != "已发货") { Invoke(new Action(() => { pbLoading.Visible = false; })); BaseMsgForm.ShowError("订单状态已变化,请勿拍单"); return; } var deRst = "测试地址写入{\"code\"0}"; deRst = WXOrderList.decryptOrder(shop, orderId); if (deRst.Contains("\"code\":0")) { var url = BaseClass.BuildObjString("shop/wx_add_mdy_order_address"); var data = UserLogin.GetSignaturex(); data += "&shop_id=" + shop.ShopId; data += "&order_id=" + orderId; data += "&order_address=" + GetHtml.UrlEncodeUtf8(deRst); var html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) { var errMsg = BaseRegex.GetStringJsonByRegs(ref html, html, "msg"); Invoke(new Action(() => { foreach (var rw in rows) { rw.Cells["colOpResult"].Value = errMsg; rw.Cells["colReceiveInfo"].Value = GetDecryptOrder(deRst); rw.Cells["colReceiveInfo"].Style.ForeColor = DefaultForeColor; } BaseMsgForm.ShowError("查看地址成功但保存到服务端失败:" + errMsg); })); } else { Invoke(new Action(() => { foreach(var rw in rows) { rw.Cells["colReceiveInfo"].Value = GetDecryptOrder(deRst); rw.Cells["colReceiveInfo"].Style.ForeColor = DefaultForeColor; rw.Cells["colOpResult"].Value = "查看地址成功"; } })); } } else { var error = BaseRegex.GetStringJsonByRegs(ref deRst, deRst, "err_msg", "error_msg", "errMsg", "errorMsg", "msg"); Invoke(new Action(() => { row.Cells["colOpResult"].Value = "查看地址失败:" + error; BaseMsgForm.ShowError("查看地址失败:" + error); })); } //Invoke(new Action(() => { cell.Value = "👁"; })); Invoke(new Action(() => { pbLoading.Visible = false; })); }); } break; case "填": { pnlUpdateNotes.Visible = false; pnlEditReceiveInfo.Visible = true; pnlBuyUrl.Visible = false; lblEditReceiveInfoShopName.Text = shop.ShopAccount; lblEditReceiveInfoShopId.Text = shop.ShopId; lblEditReceiveInfoOrderId.Text = orderId; txtEditReceiveInfoAddress.TextChanged -= txtEditReceiveInfoAddress_TextChanged; txtEditReceiveInfoAddress.Text = ""; // row.Cells["colReceiveInfo"].Value.ParseToString(); txtEditReceiveInfoAddress.TextChanged += txtEditReceiveInfoAddress_TextChanged; txtEditReceiveInfoOldAddress.Text = row.Cells["colReceiveInfo"].Value.ParseToString(); } break; case "编辑": { pnlUpdateNotes.Visible = false; pnlEditReceiveInfo.Visible = false; pnlBuyUrl.Visible = true; lblBuyUrlShopName.Text = shop.ShopAccount; lblBuyUrlShopId.Text = shop.ShopId; lblBuyUrlOrderId.Text = orderId; lblBuyUrlSpuCode.Text = row.Cells["colSpuCode"].Value.ParseToString(); txtBuyUrl.Text = row.Cells["colBuyUrl"].Value.ParseToString(); } break; case "打印": { Task.Run(() => { var rows = dgvOrder.Rows.Cast().Where(r => r.Cells["colOrderId"].Value.ParseToString() == orderId); var currentStatus = UpdateOrderStatus(shop, orderId); Invoke(new Action(() => { foreach (var rw in rows) { rw.Cells["colOrderStatus"].Value = currentStatus; } })); if (currentStatus != "待发货" && currentStatus != "已发货") { BaseMsgForm.ShowError("订单状态已变化,请勿拍单"); return; } GetOnlineWayBill(shop, row); }); } break; case "刷新": { pbLoading.Visible = true; Task.Run(() => { var rows = dgvOrder.Rows.Cast().Where(r => r.Cells["colOrderId"].Value.ParseToString() == orderId); var currentStatus = UpdateOrderStatus(shop, orderId); Invoke(new Action(() => { foreach (var rw in rows) { rw.Cells["colOrderStatus"].Value = currentStatus; rw.Cells["colOpResult"].Value = "订单刷新:" + DateTime.Now.ToString("HH:mm:ss"); } pbLoading.Visible = false; })); if (currentStatus != "待发货" && currentStatus != "已发货") { BaseMsgForm.ShowError("订单状态已变化,请勿拍单"); return; } }); } break; case "": dgvOrder.Rows[e.RowIndex].Cells["colCheck"].Value = !(bool)dgvOrder.Rows[e.RowIndex].Cells["colCheck"].Value; break; default: break; } } void GetOnlineWayBill(ShopLoginInfo shop, DataGridViewRow row) { var orderId = row.Cells["colOrderId"].Value.ParseToString(); //Task.Run(() => //{ while (isOnlineWayBill) Thread.Sleep(150); Invoke(new Action(() => { pbLoading.Visible = true; })); isOnlineWayBill = true; WXPreCreateOrderWaybillOnlineParam preWaybillOnlineparam = new WXPreCreateOrderWaybillOnlineParam(); preWaybillOnlineparam.req.requestContent.Add(new preWaybillOnlineRequestContentParam() { ecOrderList = new List(), uuid = Guid.NewGuid().ParseToString(), }); //#if DEBUG var rst = WXOrderList.searchOnlineWaybill(shop, orderId); if (!rst.Contains("\"code\":0")) { var error = BaseRegex.GetStringJsonByRegs(ref rst, rst, "errMsg", "errorMsg", "err_msg", "error_msg"); //BaseMsgForm.ShowError("打印失败:" + error, "错误", FormLevel.LARGE); Invoke(new Action(() => { row.Cells["colOpResult"].Value = "打印失败:" + error; pbLoading.Visible = false; })); isOnlineWayBill = false; return; } if (rst.Contains("\"orderList\":[]")) { var url = BaseClass.BuildObjString("product/wx_get_random_after_sale_list"); var data = Work.UserLogin.GetSignaturex(); data += "&page_size=1"; var html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); if (html.Contains("\"code\":200") && !html.Contains("\"data\":[]")) { var obj = JsonHelper.JObjectParse(html)["data"].FirstOrDefault()["after_sale_json"]; string addressJson = obj.ParseToString(); var senderInfo = preWaybillOnlineparam.req.requestContent.FirstOrDefault().sender; senderInfo.province = BaseRegex.GetStringJson(ref addressJson, "province_name"); senderInfo.city = BaseRegex.GetStringJson(ref addressJson, "city_name"); senderInfo.county = BaseRegex.GetStringJson(ref addressJson, "county_name"); senderInfo.street = BaseRegex.GetStringJson(ref addressJson, "street_name").ParseToString(); senderInfo.mobile = BaseRegex.GetStringJson(ref addressJson, "tel_number"); senderInfo.name = BaseRegex.GetStringJson(ref addressJson, "user_name"); senderInfo.address = BaseRegex.GetStringJson(ref addressJson, "detail_info"); senderInfo.mobile = WaybillHelper.MobileHead[Randomx.GetId(WaybillHelper.MobileHead.Count)] + Randomx.GetNumber(8); senderInfo.name = WaybillHelper.LastName[Randomx.GetId(WaybillHelper.LastName.Count)] + (Randomx.GetId(2) == 1 ? "先生" : "女士"); } ecOrderParam orderParam = new ecOrderParam(); orderParam.ecOrderId = orderId; var rows = dgvOrder.Rows.Cast().Where(r => r.Cells["colOrderId"].Value.ParseToString() == orderId); foreach (var rw in rows) { orderParam.goodsList.Add(new orderGoodsParam { goodCount = rw.Cells["colCnt"].Value.ParseToInt(), goodName = rw.Cells["colProductName"].Value.ParseToString(), productId = rw.Cells["colSpuId"].Value.ParseToString(), skuId = rw.Cells["colSkuId"].Value.ParseToString(), }); } preWaybillOnlineparam.req.requestContent.FirstOrDefault().ecOrderList.Add(orderParam); var result = WXOrderList.preCreateOrderWaybillOnline(shop, preWaybillOnlineparam); if (result.Contains("账号未开通在线寄件服务")) { //BaseMsgForm.ShowError("账号未开通在线寄件服务"); Invoke(new Action(() => { row.Cells["colOpResult"].Value = "账号未开通在线寄件服务,无法打印"; pbLoading.Visible = false; })); isOnlineWayBill = false; return; } if (result.Contains("订单已分配给供货商,商家无需发货")) { //BaseMsgForm.ShowError("订单已分配给供货商,商家无需发货"); Invoke(new Action(() => { row.Cells["colOpResult"].Value = "订单已分配给供货商,商家无需发货"; pbLoading.Visible = false; })); isOnlineWayBill = false; return; } if (result.Contains("订单商品已全部发货")) { //BaseMsgForm.ShowError("订单商品已全部发货"); Invoke(new Action(() => { row.Cells["colOpResult"].Value = "订单商品已全部发货"; pbLoading.Visible = false; })); isOnlineWayBill = false; return; } if (!result.Contains("\"ret\":0,")) { //BaseMsgForm.ShowError("打印失败:" + result, "错误", FormLevel.LARGE); var error = BaseRegex.GetStringJsonByRegs(ref result, result, "errMsg", "errorMsg", "err_msg", "error_msg"); Invoke(new Action(() => { row.Cells["colOpResult"].Value = "打印失败:" + error; pbLoading.Visible = false; })); isOnlineWayBill = false; return; } List deliverInfoLst = new List(); var jObj = JsonHelper.JObjectParse(result)["list"]; deliverInfoLst = JsonHelper.DeserializeJsonToList(jObj.ParseToString()) .Where(d => d.responseContent.FirstOrDefault()?.deliveryId == "YTO" || d.responseContent.FirstOrDefault()?.deliveryId == "YUNDA" || d.responseContent.FirstOrDefault()?.deliveryId == "ZTO" || d.responseContent.FirstOrDefault()?.deliveryId == "STO").ToList() .Where(d => d.responseContent.FirstOrDefault()?.deliveryErrorMsg == "success").ToList(); var deliverInfo = deliverInfoLst[Randomx.GetId(deliverInfoLst.Count)]; WXCreateOrderWaybillOnlineParam waybillOnlineparam = new WXCreateOrderWaybillOnlineParam(); waybillOnlineparam.requestContent.Add(new WaybillOnlineRequestContentParam() { deliveryId = deliverInfo.responseContent.FirstOrDefault().deliveryId, deliveryInfo = preWaybillOnlineparam.req.requestContent.FirstOrDefault().deliveryInfo, ecOrderList = preWaybillOnlineparam.req.requestContent.FirstOrDefault().ecOrderList, ewaybillOrderId = deliverInfo.responseContent.FirstOrDefault().ewaybillOrderId, extInfo = preWaybillOnlineparam.req.requestContent.FirstOrDefault().extInfo, orderVasList = preWaybillOnlineparam.req.requestContent.FirstOrDefault().orderVasList, sender = preWaybillOnlineparam.req.requestContent.FirstOrDefault().sender, source = preWaybillOnlineparam.req.requestContent.FirstOrDefault().source, uuid = preWaybillOnlineparam.req.requestContent.FirstOrDefault().uuid, }); result = WXOrderList.createOrderWaybillOnline(shop, waybillOnlineparam); if (!result.Contains("\"ret\":0,")) { var error = BaseRegex.GetStringJsonByRegs(ref result, result, "errMsg", "errorMsg", "err_msg", "error_msg"); //BaseMsgForm.ShowError("打印失败:" + error, "错误", FormLevel.LARGE); Invoke(new Action(() => { row.Cells["colOpResult"].Value = "打印失败:" + error; pbLoading.Visible = false; })); isOnlineWayBill = false; return; } else { Invoke(new Action(() => { row.Cells["colOnlineWaybillOrderId"].Value = BaseRegex.GetStringJson(ref result, "ewaybillOrderId"); row.Cells["colOnlineWaybill"].Value = "再次\r\n打印"; ShowDgvRow(row); })); } } Invoke(new Action(() => { if (shop.Chat == null) { shop.Chat = CEFBrowser.CreateChromiumWebBrowser("https://store.weixin.qq.com/shop/waybill/allToAll", false); CustomResourceRequestHandlerLocal resourceRequestHandler = new CustomResourceRequestHandlerLocal(); resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad; shop.Chat.RequestHandler = new CustomRequestHandler(resourceRequestHandler); var lifeSapnHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); shop.Chat.LifeSpanHandler = lifeSapnHandler; shop.Chat.KeyboardHandler = new KeyboardHandler(); shop.Chat.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; shop.Chat.AddressChanged += CefWebBrowser_AddressChanged; shop.Chat.LoadError += CefWebBrowser_LoadError; shop.Chat.Dock = DockStyle.Fill; MainForm.instance.cefPanel.Controls.Add(shop.Chat); } shop.Chat.SendToBack(); //MainForm.instance.cefPanel.BringToFront(); MainForm.instance.cefPanel.SendToBack(); MainForm.instance.cefPanel.Visible = true; })); while (!shop.Chat.IsBrowserInitialized) Thread.Sleep(100); CEFBrowser.DeleteCookie(shop.Chat.GetCookieManager(null)); var cookieLst = JsonHelper.DeserializeJsonToList(shop.Cookies); var t = CEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), shop.Chat.GetCookieManager(null)); shop.Chat.Load("https://store.weixin.qq.com/shop/waybill/allToAll"); var jsStr = @"(function() { const element = document.getElementsByName('waybill')[0]; const shadowRoot = element.shadowRoot; //var aElements = document.getElementsByTagName('a'); //var aElements = shadowRoot.querySelector('micro-app-body').getElementsByClassName('goods_info') var aElements = shadowRoot.querySelector('micro-app-body').getElementsByTagName('a') for (i = 0; i = 0) { var rect = aElement.getBoundingClientRect(); aElement.click(); return rect.left + ',' + rect.top; } } return '0,0'; })();"; var resultStr = ""; for (int i = 0; i < 10; i++) { Thread.Sleep(250); var client = shop.Chat.GetDevToolsClient(); if (client != null) { var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true); result.Wait(5000); resultStr = result.Result.Result.Value.ParseToString(); if (!resultStr.IsNullOrEmpty() && !resultStr.Contains("0,0")) { break; } } } Thread.Sleep(500); jsStr = @"(function() { const element = document.getElementsByName('waybill')[0]; const shadowRoot = element.shadowRoot; var aElements = shadowRoot.querySelector('micro-app-body').getElementsByTagName('tr'); for (i = 0; i = 0) { var chk = aElement.getElementsByClassName('weui-desktop-table_flex')[0].children[0]; var rect = chk.getBoundingClientRect(); chk.click(); return rect.left + ',' + rect.top; } } return '0,0'; })();"; resultStr = ""; for (int i = 0; i < 10; i++) { Thread.Sleep(250); var client = shop.Chat.GetDevToolsClient(); if (client != null) { var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true); result.Wait(5000); resultStr = result.Result.Result.Value.ParseToString(); if (!resultStr.IsNullOrEmpty() && !resultStr.Contains("0,0")) { break; } } } Thread.Sleep(1000); jsStr = @"(function() { const element = document.getElementsByName('waybill')[0]; const shadowRoot = element.shadowRoot; var aElements = shadowRoot.querySelector('micro-app-body').getElementsByTagName('button'); //var aElements = document.getElementsByTagName('button'); for (i = 0; i = 0) { var rect = aElement.getBoundingClientRect(); aElement.click(); return rect.left + ',' + rect.top; } } return '0,0'; })();"; resultStr = ""; int count = 0; for (int i = 0; i < 5; i++) { Thread.Sleep(500); var client = shop.Chat.GetDevToolsClient(); if (client != null) { var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true); result.Wait(5000); resultStr = result.Result.Result.Value.ParseToString(); if (!resultStr.IsNullOrEmpty() && !resultStr.Contains("0,0")) { count++; if (count > 1) break; } } } Thread.Sleep(500); jsStr = @"(function() { const element = document.getElementsByName('waybill')[0]; const shadowRoot = element.shadowRoot; var aElements = shadowRoot.querySelector('micro-app-body').getElementsByTagName('button'); for (i = 0; i = 0) { var rect = aElement.getBoundingClientRect(); if (rect.left > 0) { aElement.click(); return rect.left + ',' + rect.top; } } } return '0,0'; })();"; resultStr = ""; for (int i = 0; i < 5; i++) { Thread.Sleep(500); var client = shop.Chat.GetDevToolsClient(); if (client != null) { var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true); result.Wait(5000); resultStr = result.Result.Result.Value.ParseToString(); if (!resultStr.IsNullOrEmpty() && !resultStr.Contains("0,0")) { break; } } } Thread.Sleep(500); GetRefreshPrintId(); Invoke(new Action(() => { ShowRefreshPrintId(row); })); isOnlineWayBill = false; //#endif Invoke(new Action(() => { pbLoading.Visible = false; })); //}); } private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request) { } private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request) { return false; } private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) { } private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e) { } private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) { } public string GetDecryptOrder(string sourceOrderAddressStr) { //黄颖飞(4559),18466134204-4559,广西壮族自治区柳州市柳南区福柳宏都8-1-701 (拨打请输入分机号4559) var userName = BaseRegex.GetStringJson(ref sourceOrderAddressStr, "userName"); // 黄颖飞 var extension = BaseRegex.GetStringJson(ref sourceOrderAddressStr, "extension"); // 4559 var virtualNumber = BaseRegex.GetStringJson(ref sourceOrderAddressStr, "virtualNumber"); // 18466134204 var provinceName = BaseRegex.GetStringJson(ref sourceOrderAddressStr, "provinceName"); // 广西壮族自治区 var cityName = BaseRegex.GetStringJson(ref sourceOrderAddressStr, "cityName"); // 柳州市 var countyName = BaseRegex.GetStringJson(ref sourceOrderAddressStr, "countyName"); // 柳南区 var detailInfo = BaseRegex.GetStringJson(ref sourceOrderAddressStr, "detailInfo"); // 福柳宏都8-1-701 if (userName.IsNullOrEmpty() || extension.IsNullOrEmpty() || virtualNumber.IsNullOrEmpty() || provinceName.IsNullOrEmpty() || cityName.IsNullOrEmpty() || countyName.IsNullOrEmpty() || detailInfo.IsNullOrEmpty()) { return sourceOrderAddressStr; } //return userName + "(" + extension + ")," + virtualNumber + "-" + extension + "," + provinceName + cityName + countyName + detailInfo + "(拨打请输入分机号" + extension + ")"; return userName + "" + extension + "," + virtualNumber + "-" + extension + "," + provinceName + cityName + countyName + detailInfo + "拨打请输入分机号" + extension + ""; } private void btnStop_Click(object sender, EventArgs e) { if (this.cancellationTokenSource != null) this.cancellationTokenSource.Cancel(); } private void btnSearchProd_Click(object sender, EventArgs e) { var shopIdLst = dgvShop.Rows.Cast().Where(row => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); if (shopIdLst.Count <= 0) { BaseMsgForm.ShowError("未勾选查询店铺!"); return; } btnSearchOrder.Enabled = false; pbLoading.Visible = true; if (cancellationTokenSource != null) cancellationTokenSource.Cancel(); cancellationTokenSource = new CancellationTokenSource(); dgvOrder.Rows.Clear(); Task.Run(() => { GetOrderList(shopIdLst); Invoke(new Action(() => { if (cancellationTokenSource.IsCancellationRequested) { this.statusBar.lblTaskStatus.Text = "订单查询停止"; BaseMsgForm.ShowInfo("订单查询停止"); } else { this.statusBar.lblTaskStatus.Text = "订单查询完毕"; BaseMsgForm.ShowInfo("订单查询完毕"); } pbLoading.Visible = false; btnSearchOrder.Enabled = true; })); }, cancellationTokenSource.Token); } void GetOrderList(List shopIdLst) { List shopLst = GlobalConfig.ShopLoginList.Where(s => shopIdLst.Contains(s.ShopId)).ToList(); Invoke(new Action(() => { this.pbLoading.Visible = true; this.statusBar.lblTaskStatus.Text = "正在查询店铺"; this.statusBar.pgbTaskProgress.Maximum = shopIdLst.Count; this.statusBar.UpdateProgressBar(0); })); foreach (var shop in shopLst) { if (cancellationTokenSource.IsCancellationRequested) break; Invoke(new Action(() => { this.statusBar.UpdateProgressBar(this.statusBar.pgbTaskProgress.Value + 1); })); if (shop.LoginStatus != "登录成功") { continue; } for (int orderStatus = 20; orderStatus <= 30; orderStatus += 10) { int page = PageBegin - 1; int totalPage = 1; int pageSize = 30; while (page < totalPage && page < PageEnd) { page++; if (orderStatus == 20 && !chkWaitSend.Checked) break; if (orderStatus == 30 && !chkHasSend.Checked) break; if (cancellationTokenSource.IsCancellationRequested) break; // 查找订单 pageSize = 30; var result = WXOrderList.orderListSearch(shop, orderStatus, page, pageSize); if (!result.Contains("\"code\":0")) { ShowShopError(shop, result); break; } if (result.Contains("4527181286223364098")) { } totalPage = Math.Ceiling(BaseRegex.GetIntJson(ref result, "totalNum") * 1m / pageSize).ParseToInt(); List orderLst = new List(); try { var jArr = JsonHelper.JObjectParse(result)["orderList"]; orderLst = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(jArr)); } catch (Exception ex) { ShowShopError(shop, ex.Message); break; } Thread.Sleep(Randomx.GetId(200, 1000)); try { Invoke(new Action(() => { this.pbLoading.Visible = true; this.statusBar.lblTaskStatus.Text = "正在查询店铺:" + shop.ShopAccount + " " + page + "/" + Math.Min(PageEnd, totalPage); })); var url = BaseClass.BuildObjString("shop/wx_get_order_address"); var data = UserLogin.GetSignaturex() + "&shop_id=" + shop.ShopId; data += "&order_ids=" + string.Join(",", orderLst.Select(o => o.commonInfo.orderId)); data += "¬_count=true"; var html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); List orderDecryptAddressLst = new List(); if (html.Contains("\"code\":200")) { var jObj = JsonHelper.JObjectParse(html)["data"]; orderDecryptAddressLst = JsonHelper.DeserializeJsonToList(jObj.ParseToString()); } url = BaseClass.BuildObjString("shop/wx_get_buy_url_notes"); data = UserLogin.GetSignaturex() + "&shop_id=" + shop.ShopId; data += "&spu_codes=" + GetHtml.UrlEncodeUtf8(string.Join(",", orderLst.SelectMany(o => o.orderProductInfo.Select(p => p.spuCode)).Distinct())); data += "&main_user_name=" + (BaseClass.GroupId == 3 ? BaseClass.UserName : BaseClass.ParentUserName); data += "¬_count=true"; html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); List buyUrlNotesInfoLst = new List(); if (html.Contains("\"code\":200")) { var jObj = JsonHelper.JObjectParse(html)["data"]; buyUrlNotesInfoLst = JsonHelper.DeserializeJsonToList(jObj.ParseToString()); } // 查找对应商品 string getProdRst = ""; JObject prodObjs = new JObject(); try { if (orderLst.Count > 0) { int onSaleStatusCode = -1; pageSize = 50; string spuIds = GetHtml.UrlEncodeUtf8(string.Join(",", orderLst.SelectMany(o => o.orderProductInfo.Select(p => p.productId)).Distinct())); //getProdRst = WXClearNoVisit.searchProduct(shop, 1, pageSize, spuIds, onSaleStatusCode); getProdRst = WXOrderList.getSkuBySpu(shop, GetHtml.UrlDecode(spuIds)); Thread.Sleep(Randomx.GetId(50, 100)); if (!getProdRst.Contains("\"success\":true") && !getProdRst.Contains("\"code\":0")) { ShowShopError(shop, getProdRst); break; } } prodObjs = JsonHelper.JObjectParse(getProdRst); } catch { } foreach (var order in orderLst) { var orStr = JsonHelper.SerializeObject(order); if (orStr.Contains("4527181286223364098") || orStr.Contains("4527546611026165767")) { } foreach (var orderProd in order.orderProductInfo) { decimal? currentPrice = null; int? currentStock = null; try { //var prod = prodObjs["productList"].FirstOrDefault(p => p["productId"].ParseToString() == orderProd.productId); //if (prod != null) //{ // var prodStr = prod.ParseToString(); // var sku = prod["skuList"].FirstOrDefault(p => p["skuId"].ParseToString() == orderProd.skuId); // if (sku != null) // { // currentPrice = sku["price"].ParseToDecimal() * 0.01m; // } //} var prod = prodObjs["products"].FirstOrDefault(p => p["productKey"]["productId"].ParseToString() == orderProd.productId); if (prod != null) { var prodStr = prod.ParseToString(); var sku = prod["productSkus"].FirstOrDefault(p => p["skuKey"]["skuId"].ParseToString() == orderProd.skuId); if (sku != null) { var skuStr = JsonHelper.SerializeObject(sku); currentPrice = BaseRegex.GetIntJson(ref skuStr, "salePrice") * 0.01m; currentStock = BaseRegex.GetIntJson(ref skuStr, "stockNum"); } } } catch { } var discount = orderProd.salePrice.ParseToInt() * orderProd.productCnt - orderProd.realPrice; var orderAddresss = orderDecryptAddressLst.FirstOrDefault(a => a.order_id == order.commonInfo.orderId); var buyUrlNotes = buyUrlNotesInfoLst.FirstOrDefault(b => b.spu_code == orderProd.spuCode); var DecryptAddress = this.GetDecryptOrder((orderAddresss?.order_address).ParseToString()); Invoke(new Action(() => { var rowIndex = this.dgvOrder.Rows.Add( false, shop.ShopId, shop.ShopAccount, shop.Notes, shop.GroupName, "登录", "进店", order.commonInfo.orderId, order.commonInfo.createTimeStr, order.commonInfo.createTimeStr.ParseToDateTime().ToString("M/d HH:mm"), orderProd.thumbImg, DataGridViewExtension.defaultBitmap, //orderProd.productId + "\r\n" + string.Join("", orderProd.title.Take(30)) + (orderProd.title.Length > 30 ? "…" : "") + // "\r\n-----\r\n" + string.Join(";", orderProd.saleParam), // 商品信息合集 orderProd.productId + "\r\n" + orderProd.title + "\r\n-----\r\n" + string.Join(";", orderProd.saleParam), // 商品信息合集 orderProd.productId, // 商品Id orderProd.title, // 商品名称 orderProd.spuCode, // 商品编码 orderProd.skuId, // skuId string.Join(";", orderProd.saleParam), // sku规格 orderProd.skuCode, // sku编码 "商品编码:\r\n" + orderProd.spuCode + "\r\n" + "规格编码:\r\n" + orderProd.skuCode, // 编码信息合集 orderProd.salePrice.ParseToInt() * 0.01m, orderProd.productCnt, // 商品数量 orderProd.salePrice.ParseToInt() * 0.01m + "\r\nx" + orderProd.productCnt, // 商品单价/数量 orderProd.realPrice * 0.01m + (discount > 0 ? "\r\n优惠\r\n-" + discount * 0.01m : ""), // 商品总价/优惠 discount > 0 ? discount * 0.01m : null, // 商品优惠 currentPrice, currentStock, "礼", "优化", "取消优惠", order.commonInfo.statusStr, // 订单状态 "刷新", buyUrlNotes?.buy_url_notes, // 采购地址 "编辑", string.IsNullOrWhiteSpace(DecryptAddress) ? (order.acceptInfo.addressInfo.userName + " " + order.acceptInfo.addressInfo.telNumber + " " + order.acceptInfo.addressInfo.provinceName + " " + order.acceptInfo.addressInfo.cityName + " " + order.acceptInfo.addressInfo.countyName + " " + order.acceptInfo.addressInfo.detailInfo + " " + " 未查看地址") : DecryptAddress, // 收件地址解密 "👁", "填", "", // 在线寄件打印单号 order.expressData?.type == 3 && order.expressData?.status != 1 ? order.expressData?.jumpPath?.Substring((order.expressData?.jumpPath).ParseToString().IndexOf("ewaybillOrderId=")).Replace("ewaybillOrderId=", "") : "", order.expressData?.type == 3 && order.expressData?.status != 1 ? "再次\r\n打印" : "打印", order.flagInfo.flagNotes, // 卖家备注 order.flagInfo.flagColor, // 卖家备注颜色 "修改\r\n备注", "" ); var row = dgvOrder.Rows[rowIndex]; ShowDgvRow(row, order); ShowRefreshPrintId(row); })); } } } catch (Exception ex) { ShowShopError(shop, ex.Message); } } } } } private void ShowDgvRow(DataGridViewRow row, WxOrderInfoLite order = null) { SizeF textSize1 = TextRenderer.MeasureText(row.Cells["colProdInfo"].Value.ParseToString(), row.Cells["colProdInfo"].Style.Font, new Size(row.Cells["colProdInfo"].ContentBounds.Width, 500), TextFormatFlags.WordBreak); SizeF textSize2 = TextRenderer.MeasureText(row.Cells["colReceiveInfo"].Value.ParseToString(), row.Cells["colReceiveInfo"].Style.Font, new Size(row.Cells["colReceiveInfo"].ContentBounds.Width, 500), TextFormatFlags.WordBreak); row.Height = Math.Max(textSize2.Height, Math.Max(textSize1.Height, 80)).ParseToInt() + 20; if (order != null) { // 根据卖家备注颜色显示文字颜色 row.Cells["colNotes"].Style.ForeColor = DefaultForeColor; if (order.flagInfo.flagColor == 1) row.Cells["colNotes"].Style.ForeColor = Color.Red; if (order.flagInfo.flagColor == 2) row.Cells["colNotes"].Style.ForeColor = Color.Orange; if (order.flagInfo.flagColor == 3) row.Cells["colNotes"].Style.ForeColor = Color.Green; if (order.flagInfo.flagColor == 4) row.Cells["colNotes"].Style.ForeColor = Color.Blue; } if (row.Cells["colReceiveInfo"].Value.ParseToString().Contains("未查看地址")) row.Cells["colReceiveInfo"].Style.ForeColor = Color.DarkGray; if (row.Cells["colOnlineWaybill"].Value.ParseToString() == "再次\r\n打印") { (row.Cells["colOnlineWaybill"] as DataGridViewLinkCell).LinkColor = Color.Red; // Color.Blue (row.Cells["colOnlineWaybill"] as DataGridViewLinkCell).VisitedLinkColor = Color.DarkRed; // Color.FromArgb(255, 128, 0, 128) (row.Cells["colOnlineWaybill"] as DataGridViewLinkCell).ActiveLinkColor = Color.Orange; // Color.Red; } else { (row.Cells["colOnlineWaybill"] as DataGridViewLinkCell).LinkColor = Color.Blue; (row.Cells["colOnlineWaybill"] as DataGridViewLinkCell).VisitedLinkColor = Color.FromArgb(255, 128, 0, 128); (row.Cells["colOnlineWaybill"] as DataGridViewLinkCell).ActiveLinkColor = Color.Red; } } private void btnClearDgv_Click(object sender, EventArgs e) { var rows = this.dgvOrder.Rows.Cast().ToList(); //Cast后Rows做foreach循环时仍会夹花跳过,所以要ToList转一个新的数组。 foreach (var row in rows) { if (row.Cells["colCheck"].Value.ParseToBool() == true) { this.dgvOrder.Rows.Remove(row); } } } private void btnClearFilter_Click(object sender, EventArgs e) { chkHasSend.Checked = true; chkWaitSend.Checked = true; } private void btnFilterShop_Click(object sender, EventArgs e) { string notes = cmbFilterShopNotes.Text.Trim().Trim(';'); if (notes == "全部") notes = ""; List notesLst = notes.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); string group = cmbFilterShopGroup.Text.Trim().Trim(';'); if (group == "全部") group = ""; List groupLst = group.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (DataGridViewRow row in dgvShop.Rows) { if (!row.Cells["colShopName"].Value.ParseToString().Contains(txtFilterShopName.Text.Trim())) { row.Visible = false; row.Cells["colSelect"].Value = false; continue; } if (!string.IsNullOrWhiteSpace(notes) && !notesLst.Contains(row.Cells["colShopNotes"].Value.ParseToString())) { row.Visible = false; row.Cells["colSelect"].Value = false; continue; } if (!string.IsNullOrWhiteSpace(group) && !groupLst.Contains(row.Cells["colGroup"].Value.ParseToString())) { row.Visible = false; row.Cells["colSelect"].Value = false; continue; } row.Visible = true; } } private void btnEmptyShop_Click(object sender, EventArgs e) { txtFilterShopName.Text = ""; cmbFilterShopNotes.Text = "全部"; cmbFilterShopGroup.Text = "全部"; btnFilterShop_Click(null, null); } private void btnReverse_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dgvShop.Rows) { if (row.Visible == true) row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool(); } } private void btnAddSelect_Click(object sender, EventArgs e) { string notes = cmbFilterShopNotes.Text.Trim().Trim(';'); if (notes == "全部") notes = ""; List notesLst = notes.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); string group = cmbFilterShopGroup.Text.Trim().Trim(';'); if (group == "全部") group = ""; List groupLst = group.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (DataGridViewRow row in dgvShop.Rows) { if (row.Visible == false) continue; if (!row.Cells["colShopName"].Value.ParseToString().Contains(txtFilterShopName.Text.Trim())) continue; if (!string.IsNullOrWhiteSpace(notes) && !notesLst.Contains(row.Cells["colShopNotes"].Value.ParseToString())) continue; if (!string.IsNullOrWhiteSpace(group) && !groupLst.Contains(row.Cells["colGroup"].Value.ParseToString())) continue; row.Cells["colSelect"].Value = true; } } private void btnAddUnSelect_Click(object sender, EventArgs e) { string notes = cmbFilterShopNotes.Text.Trim().Trim(';'); if (notes == "全部") notes = ""; List notesLst = notes.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); string group = cmbFilterShopGroup.Text.Trim().Trim(';'); if (group == "全部") group = ""; List groupLst = group.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (DataGridViewRow row in dgvShop.Rows) { if (row.Visible == false) continue; if (!row.Cells["colShopName"].Value.ParseToString().Contains(txtFilterShopName.Text.Trim())) continue; if (!string.IsNullOrWhiteSpace(notes) && !notesLst.Contains(row.Cells["colShopNotes"].Value.ParseToString())) continue; if (!string.IsNullOrWhiteSpace(group) && !groupLst.Contains(row.Cells["colGroup"].Value.ParseToString())) continue; row.Cells["colSelect"].Value = false; } } private void btnSelectOnline_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dgvShop.Rows) { if (row.Visible == true) { if (row.Cells["colLoginStatus"].Value.ParseToString() == "在线") { row.Cells["colSelect"].Value = true; } else { row.Cells["colSelect"].Value = false; } } } } private void btnSelectOffline_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dgvShop.Rows) { if (row.Visible == true) { if (row.Cells["colLoginStatus"].Value.ParseToString() != "在线") { row.Cells["colSelect"].Value = true; } else { row.Cells["colSelect"].Value = false; } } } } private void btnFiltSelect_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dgvOrder.Rows) { // 2,3拼多多 6抖音 if (!row.Cells["colNotes"].Value.ParseToString().StartsWith("2") && !row.Cells["colNotes"].Value.ParseToString().StartsWith("3") && !row.Cells["colNotes"].Value.ParseToString().StartsWith("6")) { row.Cells["colCheck"].Value = false; continue; } // ^\d{6}.*$ string pattern1 = @"^\d{6}-\d{15}.*$"; // 定义正则表达式模式 string pattern2 = @"^\d{19}.*$"; // 定义正则表达式模式 Regex regex1 = new Regex(pattern1); Regex regex2 = new Regex(pattern2); if (!regex1.IsMatch(row.Cells["colNotes"].Value.ParseToString()) && !regex2.IsMatch(row.Cells["colNotes"].Value.ParseToString())) { row.Cells["colCheck"].Value = false; continue; } row.Cells["colCheck"].Value = true; } } void ShowShopError(ShopLoginInfo shop, string operateResult, bool isShowDialog = false) { var error = BaseRegex.GetStringJson(ref operateResult, "msg"); if (string.IsNullOrEmpty(error)) error = BaseRegex.GetStringJson(ref operateResult, "errMsg"); if (string.IsNullOrEmpty(error)) error = BaseRegex.GetStringJson(ref operateResult, "errorMsg"); if (string.IsNullOrEmpty(error)) error = operateResult; WXShopListForm.Instance.CheckShopLogin(new ShopLoginInfo[] { shop }, false); if (shop.LoginStatus != "登录成功") { error = "店铺掉线"; } Invoke(new Action(() => { BindShop(shop, new List { shop.ShopId }, error); })); if (isShowDialog) BaseMsgForm.ShowError(error); } private void ucCheckBox_Click(object sender, EventArgs e) { ucCheckBox1.Checked = false; ucCheckBox2.Checked = false; ucCheckBox3.Checked = false; ucCheckBox4.Checked = false; ucCheckBox5.Checked = false; if (sender is UserComponent.UcCheckBox) { (sender as UserComponent.UcCheckBox).Checked = true; if (sender == ucCheckBox1) lblColorTag.Text = "0"; if (sender == ucCheckBox2) lblColorTag.Text = "1"; if (sender == ucCheckBox3) lblColorTag.Text = "2"; if (sender == ucCheckBox4) lblColorTag.Text = "3"; if (sender == ucCheckBox5) lblColorTag.Text = "4"; } } private void btnNotesCancel_Click(object sender, EventArgs e) { pnlUpdateNotes.Visible = false; } private void btnNotesOK_Click(object sender, EventArgs e) { var orderIds = lblOrderId.Text.Split(';'); Task.Run(() => { foreach (var orderId in orderIds) { var notes = txtNotes.Text.Trim(); var tagColor = lblColorTag.Text.ParseToInt(); var rows = dgvOrder.Rows.Cast().Where(r => r.Cells["colOrderId"].Value.ParseToString() == orderId).ToList(); if (rows.Count == 0) continue; var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == rows[0].Cells["colSupplierId"].Value.ParseToString()); if (shop != null) { var notesRst = WXOrderList.addNotes(shop, orderId, notes, tagColor); if (notesRst.Contains("\"code\":0")) { Invoke(new Action(() => { foreach (var row in rows) { row.Cells["colNotes"].Value = notes; row.Cells["colNotesColor"].Value = tagColor; row.Cells["colOpResult"].Value = "修改备注成功"; row.Cells["colNotes"].Style.ForeColor = DefaultForeColor; if (tagColor == 1) row.Cells["colNotes"].Style.ForeColor = Color.Red; if (tagColor == 2) row.Cells["colNotes"].Style.ForeColor = Color.Orange; if (tagColor == 3) row.Cells["colNotes"].Style.ForeColor = Color.Green; if (tagColor == 4) row.Cells["colNotes"].Style.ForeColor = Color.Blue; } pnlUpdateNotes.Visible = false; })); } else { ShowShopError(shop, notesRst, true); } } } Invoke(new Action(() => { pnlUpdateNotes.Visible = false; })); }); } private void btnEditReceiveInfoCancel_Click(object sender, EventArgs e) { pnlEditReceiveInfo.Visible = false; } private void btnEditReceiveInfoOk_Click(object sender, EventArgs e) { var orderId = lblEditReceiveInfoOrderId.Text; var address = txtEditReceiveInfoAddress.Text.Trim(); var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == lblEditReceiveInfoShopId.Text); var rows = dgvOrder.Rows.Cast().Where(r => r.Cells["colOrderId"].Value.ParseToString() == orderId); var url = BaseClass.BuildObjString("shop/wx_add_mdy_order_address"); var data = UserLogin.GetSignaturex() + "&shop_id=" + shop.ShopId; data += "&order_id=" + orderId; data += "&order_address=" + GetHtml.UrlEncodeUtf8(address); var html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) { var errMsg = BaseRegex.GetStringJson(ref html, "msg"); if (errMsg.IsNullOrEmpty()) errMsg = html; foreach (var row in rows) { row.Cells["colOpResult"].Value = errMsg; } } else { pnlEditReceiveInfo.Visible = false; foreach (var row in rows) { row.Cells["colOpResult"].Value = "填写收货地址成功"; row.Cells["colReceiveInfo"].Value = address; row.Cells["colReceiveInfo"].Style.ForeColor = DefaultForeColor; } if (rows.FirstOrDefault() != null && rows.FirstOrDefault().Cells["colOnlineWaybillOrderId"].Value.ParseToString() != null && (BaseClass.UserAuthority.Contains("在线寄件") || BaseClass.ParentAuthority.Contains("在线寄件"))) { var rst = WXOrderList.searchOnlineWaybill(shop, orderId); if (!rst.Contains("\"code\":0")) { //BaseMsgForm.ShowError("打印失败:" + rst, "错误", FormLevel.LARGE); var error = BaseRegex.GetStringJsonByRegs(ref rst, rst, "errMsg", "errorMsg", "err_msg", "error_msg"); Invoke(new Action(() => { foreach (var row in rows) row.Cells["colOpResult"].Value = "填写收货地址成功, 但查询打印失败:" + error; pbLoading.Visible = false; })); return; } var ewaybillOrderId = BaseRegex.GetStringJson(ref rst, "ewaybillOrderId"); var waybillId = BaseRegex.GetStringJson(ref rst, "waybillId"); if (!ewaybillOrderId.IsNullOrEmpty() && !waybillId.IsNullOrEmpty() && ewaybillOrderId == rows.FirstOrDefault().Cells["colOnlineWaybillOrderId"].Value.ParseToString()) { rst = WXOrderList.cancelOnlineWaybill(shop, ewaybillOrderId, waybillId); if (!rst.Contains("\"code\":0")) { //BaseMsgForm.ShowError("打印失败:" + rst, "错误", FormLevel.LARGE); var error = BaseRegex.GetStringJsonByRegs(ref rst, rst, "errMsg", "errorMsg", "err_msg", "error_msg"); Invoke(new Action(() => { foreach (var row in rows) row.Cells["colOpResult"].Value = "填写收货地址成功, 但取消打印失败:" + error; pbLoading.Visible = false; })); return; } else { Invoke(new Action(() => { foreach (var row in rows) { row.Cells["colOpResult"].Value = "填写收货地址成功, 取消打印成功"; row.Cells["colOnlineWaybill"].Value = "打印"; ShowDgvRow(row); } pbLoading.Visible = false; })); } } } } } private void btnBuyUrlCancel_Click(object sender, EventArgs e) { pnlBuyUrl.Visible = false; } private void btnBuyUrlOk_Click(object sender, EventArgs e) { var orderId = lblBuyUrlOrderId.Text; var buyUrl = txtBuyUrl.Text.Trim(); var spuCode = lblBuyUrlSpuCode.Text; var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == lblEditReceiveInfoShopId.Text); var rows = dgvOrder.Rows.Cast().Where(r => r.Cells["colSpuCode"].Value.ParseToString() == spuCode); var url = BaseClass.BuildObjString("shop/wx_add_mdy_buy_url_notes"); var data = UserLogin.GetSignaturex(); data += "&main_user_name=" + (BaseClass.GroupId == 3 ? BaseClass.UserName : BaseClass.ParentUserName); data += "&spu_code=" + spuCode; data += "&buy_url_notes=" + GetHtml.UrlEncodeUtf8(buyUrl); var html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) { var errMsg = BaseRegex.GetStringJson(ref html, "msg"); if (errMsg.IsNullOrEmpty()) errMsg = html; foreach (var row in rows) { row.Cells["colOpResult"].Value = errMsg; } } else { pnlBuyUrl.Visible = false; foreach (var row in rows) { row.Cells["colOpResult"].Value = "编辑采购地址成功"; row.Cells["colBuyUrl"].Value = buyUrl; } } } private void btnFilterOrder_Click(object sender, EventArgs e) { var filterOrderId = txtFilterOrderId.Text.Trim(); var filterProdInfo = txtFilterOrderProdInfo.Text.Trim(); var filterStatus = cmbFilterOrderStatus.Text.Trim(); var filterNotesNotContainWords = txtFilterNotesNotContainWords.Text.Trim().Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries).ToList(); var filterTitleNotContainWords = txtFilterTitleNotContainWords.Text.Trim().Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries).ToList(); var filterPriceNotContainWords = txtFilterPriceNotContainWords.Text.Trim().Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries).ToList(); string group = cmbFilterOrderShopGroup.Text.Trim().Trim(';'); if (group == "全部") group = ""; List groupLst = group.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (DataGridViewRow row in dgvOrder.Rows) { if (!row.Cells["colSupplierName"].Value.ParseToString().Contains(txtFilterOrderShopName.Text.Trim())) { row.Visible = false; row.Cells["colCheck"].Value = false; continue; } if (!string.IsNullOrWhiteSpace(group) && !groupLst.Contains(row.Cells["colOrderShopGroup"].Value.ParseToString())) { row.Visible = false; row.Cells["colCheck"].Value = false; continue; } string orderId = row.Cells["colOrderId"].Value.ParseToString(); if (!string.IsNullOrEmpty(filterOrderId) && !orderId.Contains(filterOrderId)) { row.Cells["colCheck"].Value = false; row.Visible = false; continue; } string prodInfo = row.Cells["colProdInfo"].Value.ParseToString(); if (!string.IsNullOrEmpty(filterProdInfo) && !prodInfo.Contains(filterProdInfo)) { row.Cells["colCheck"].Value = false; row.Visible = false; continue; } string orderStatus = row.Cells["colOrderStatus"].Value.ParseToString(); if (!string.IsNullOrEmpty(filterStatus) && !orderStatus.Contains(filterStatus)) { row.Cells["colCheck"].Value = false; row.Visible = false; continue; } string orderNotes = row.Cells["colNotes"].Value.ParseToString(); if (filterNotesNotContainWords.Count > 0 && filterNotesNotContainWords.Any(w => orderNotes.Contains(w))) { row.Cells["colCheck"].Value = false; row.Visible = false; continue; } string goodsName = row.Cells["colProductName"].Value.ParseToString(); if (filterTitleNotContainWords.Count > 0 && filterTitleNotContainWords.Any(w => goodsName.Contains(w))) { row.Cells["colCheck"].Value = false; row.Visible = false; continue; } string orderGoodsPrice = row.Cells["colSalePrice"].Value.ParseToString(); if (filterPriceNotContainWords.Count > 0 && filterPriceNotContainWords.Any(w => orderGoodsPrice.ParseToDecimal() == w.ParseToDecimal())) { row.Cells["colCheck"].Value = false; row.Visible = false; continue; } if (chkFilterBeginTime.Checked && row.Cells["colOrderTimeFull"].Value.ParseToString().ParseToDateTime() < dtpFilterBeginTime.Value) { row.Cells["colCheck"].Value = false; row.Visible = false; continue; } if (chkFilterEndTime.Checked && row.Cells["colOrderTimeFull"].Value.ParseToString().ParseToDateTime() > dtpFilterEndTime.Value) { row.Cells["colCheck"].Value = false; row.Visible = false; continue; } row.Visible = true; } } private void btnRestore_Click(object sender, EventArgs e) { txtFilterOrderId.Text = ""; txtFilterOrderProdInfo.Text = ""; cmbFilterOrderStatus.Text = ""; txtFilterNotesNotContainWords.Text = ""; txtFilterTitleNotContainWords.Text = ""; txtFilterOrderShopName.Text = ""; txtFilterPriceNotContainWords.Text = ""; cmbFilterOrderShopGroup.Text = "全部"; chkFilterEndTime.Checked = false; chkFilterBeginTime.Checked = false; dtpFilterBeginTime.Value = DateTime.Now.AddDays(-1); dtpFilterEndTime.Value = DateTime.Now.Date.AddDays(1).AddSeconds(-1); btnFilterOrder_Click(null, null); } private void btnRefreshPrintId_Click(object sender, EventArgs e) { GetRefreshPrintId(); foreach (DataGridViewRow row in dgvOrder.Rows) { ShowRefreshPrintId(row); } } void GetRefreshPrintId() { try { lstPrintLog.Clear(); string logPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "WeChatShopPrintClient\\log"); DirectoryInfo dirInfo = new DirectoryInfo(logPath); // 创建DirectoryInfo对象 FileInfo[] files = dirInfo.GetFiles(); foreach (FileInfo file in files) { if (file.FullName.EndsWith(".log")) { string content = File.ReadAllText(file.FullName); lstPrintLog.Add(content); } } } catch (Exception ex) { BaseMsgForm.ShowError("读取打印单号失败" + ex.Message); } } void ShowRefreshPrintId(DataGridViewRow row) { var waybillOrderId = row.Cells["colOnlineWaybillOrderId"].Value.ParseToString(); if (!waybillOrderId.IsNullOrEmpty()) { foreach (var fileStr in lstPrintLog) { //task 4527181286223364098 var index = fileStr.IndexOf("task " + waybillOrderId); if (index > 50) { var str = fileStr.Substring(index - 50, 50 + ("task " + waybillOrderId).Length); str = str.Replace("task " + waybillOrderId, "").Replace("printPage", "").Replace("requestID", "").Trim(); if (str.ParseToLong() > 0) row.Cells["colPrintId"].Value = str; break; } } } } private void btnBatchOnlieWaybill_Click(object sender, EventArgs e) { var rows = this.dgvOrder.Rows.Cast().Where(r => r.Cells["colCheck"].Value.ParseToBool() == true).ToList(); if (rows.Count == 0) { BaseMsgForm.ShowError("请选择订单"); return; } if (cancellationTokenSource != null) cancellationTokenSource.Cancel(); cancellationTokenSource = new CancellationTokenSource(); Task.Run(() => { foreach (var row in rows) { var shopId = row.Cells["colSupplierId"].Value.ParseToString(); var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId); if (shop != null) { if (cancellationTokenSource.IsCancellationRequested) break; if (!row.Cells["colPrintId"].Value.ParseToString().IsNullOrEmpty()) { row.Cells["colOpResult"].Value = "已打印,跳过"; continue; } GetOnlineWayBill(shop, row); } } Invoke(new Action(() => { if (cancellationTokenSource.IsCancellationRequested) BaseMsgForm.ShowInfo("批量打印终止"); else BaseMsgForm.ShowInfo("批量打印完成"); })); }, cancellationTokenSource.Token); } private void txtEditReceiveInfoAddress_TextChanged(object sender, EventArgs e) { txtEditReceiveInfoAddress.TextChanged -= txtEditReceiveInfoAddress_TextChanged; if (txtEditReceiveInfoAddress.Text.Length > 25 && txtEditReceiveInfoAddress.Text.Substring(0, 25).Contains("*******")) { txtEditReceiveInfoAddress.Text = txtEditReceiveInfoAddress.Text.Substring(0, 25).Replace("*******", WaybillHelper.MobileHead[Randomx.GetId(WaybillHelper.MobileHead.Count)] + Randomx.GetNumber(4)) + txtEditReceiveInfoAddress.Text.Substring(25); } if (txtEditReceiveInfoAddress.Text.Length > 25 && txtEditReceiveInfoAddress.Text.Substring(0, 25).Contains("****")) { txtEditReceiveInfoAddress.Text = txtEditReceiveInfoAddress.Text.Substring(0, 25).Replace("****", Randomx.GetNumber(4)) + txtEditReceiveInfoAddress.Text.Substring(25); } if (txtEditReceiveInfoAddress.Text.Length > 5 && txtEditReceiveInfoAddress.Text.Substring(0, 5).Contains("**")) { txtEditReceiveInfoAddress.Text = txtEditReceiveInfoAddress.Text.Substring(0, 5).Replace("**", "") + txtEditReceiveInfoAddress.Text.Substring(5); } if (txtEditReceiveInfoAddress.Text.Length > 4 && txtEditReceiveInfoAddress.Text.Substring(0, 4).Contains("*")) { txtEditReceiveInfoAddress.Text = txtEditReceiveInfoAddress.Text.Substring(0, 4).Replace("*", "") + txtEditReceiveInfoAddress.Text.Substring(4); } txtEditReceiveInfoAddress.Text = txtEditReceiveInfoAddress.Text.Replace("\r", " ").Replace("\n", " ").Replace(" ", " ").Replace(" ", " ").Replace(" ", " ").Replace(" ", " "); txtEditReceiveInfoAddress.TextChanged += txtEditReceiveInfoAddress_TextChanged; } private void btnStopBatchOnlineWaybill_Click(object sender, EventArgs e) { if (this.cancellationTokenSource != null) this.cancellationTokenSource.Cancel(); isOnlineWayBill = false; } string UpdateOrderStatus(ShopLoginInfo shop, string orderId) { var rst = WXOrderList.orderSearch(shop, orderId); if (!rst.Contains("\"code\":0")) { ShowShopError(shop, rst); return "获取\r\n失败"; } var statusStr = BaseRegex.GetStringJson(ref rst, "statusStr"); if (string.IsNullOrEmpty(statusStr)) statusStr = "不存在"; return statusStr; } private void btnBatchNotes_Click(object sender, EventArgs e) { var rows = dgvOrder.Rows.Cast().Where(r => r.Cells["colCheck"].Value.ParseToBool() == true).ToList(); if (rows.Count == 0) { BaseMsgForm.ShowError("请选择订单"); return; } pnlUpdateNotes.Visible = true; pnlEditReceiveInfo.Visible = false; pnlBuyUrl.Visible = false; lblShopName.Text = string.Join(";", rows.Select(r => r.Cells["colSupplierName"].Value.ParseToString()).Distinct().ToList()); lblOrderId.Text = string.Join(";", rows.Select(r => r.Cells["colOrderId"].Value.ParseToString()).Distinct().ToList()); txtNotes.Text = rows[0].Cells["colNotes"].Value.ParseToString(); lblColorTag.Text = rows[0].Cells["colNotesColor"].Value.ParseToString(); ucCheckBox1.CheckBoxCheckColor = Color.Gray; ucCheckBox1.CheckBoxBorderColor = Color.Gray; ucCheckBox2.CheckBoxCheckColor = Color.Red; ucCheckBox2.CheckBoxBorderColor = Color.Red; ucCheckBox3.CheckBoxCheckColor = Color.Orange; ucCheckBox3.CheckBoxBorderColor = Color.Orange; ucCheckBox4.CheckBoxCheckColor = Color.Green; ucCheckBox4.CheckBoxBorderColor = Color.Green; ucCheckBox5.CheckBoxCheckColor = Color.Blue; ucCheckBox5.CheckBoxBorderColor = Color.Blue; ucCheckBox1.Checked = lblColorTag.Text == "0"; ucCheckBox2.Checked = lblColorTag.Text == "1"; ucCheckBox3.Checked = lblColorTag.Text == "2"; ucCheckBox4.Checked = lblColorTag.Text == "3"; ucCheckBox5.Checked = lblColorTag.Text == "4"; } } public class WXOrderList { /// /// /// /// /// 订单状态 20待发货 30已发货 /// public static string orderListSearch(ShopLoginInfo shop, int orderStatus = 20, int pageNum = 1, int pageSize = 30) { string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/list/cgi/orderSearch?token=&lang=zh_CN"; string body = @"{""isSearch"":false,""pageSize"":" + pageSize + @",""overTime"":0,""pengingShipOneDay"":0,""pengingShipSixHour"":0,""expediteDelivery"":0,""stockoutPunishAlert"":0,""waybillStatus"":0,""pageNum"":" + 1 + @",""onAftersaleOrderExist"":0,""orderStatus"":" + orderStatus + @"}"; if (pageNum > 1) body = @"{""isSearch"":false,""pageSize"":" + pageSize + @",""overTime"":0,""pengingShipOneDay"":0,""pengingShipSixHour"":0,""expediteDelivery"":0,""stockoutPunishAlert"":0,""waybillStatus"":0,""pageNum"":" + 1 + @",""onAftersaleOrderExist"":0,""orderStatus"":" + orderStatus + @",""page"":" + pageNum + @"}"; string refere = "https://store.weixin.qq.com/shop/order/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string orderSearch(ShopLoginInfo shop, string orderId) { string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/list/cgi/orderSearch?token=&lang=zh_CN"; string body = @"{""isSearch"":true,""pageSize"":30,""overTime"":0,""pengingShipOneDay"":0,""pengingShipSixHour"":0,""expediteDelivery"":0,""stockoutPunishAlert"":0, ""waybillStatus"":0,""pageNum"":1,""onAftersaleOrderExist"":0,""orderStatus"":0,""orderId"":""" + orderId + @""", ""orderTime"":{""type"":0,""time"":[null,null]},""telNumber"":"""",""title"":"""",""receiverName"":"""",""finderNickName"":"""", ""merchantNotes"":"""",""merchantNotesTagColor"":0,""waybillId"":"""",""productCode"":"""",""inspectStatus"":"""",""finderWay"":0, ""searchOrderType"":0,""payMethod"":0,""orderChannel"":0,""bulkbuyActivityId"":"""",""deliveryNegotiationFlag"":0,""transactionId"":"""", ""page"":1,""startCreateTime"":null,""endCreateTime"":null}"; string refere = "https://store.weixin.qq.com/shop/order/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string addNotes(ShopLoginInfo shop, string orderId, string notes, int tagColor = 0) { string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/common/cgi/batchMerchantNotes?token=&lang=zh_CN"; string body = @"{""items"":[{""orderId"":""" + orderId + @""",""merchantNotes"":""" + notes + @""",""merchantNotesTagColor"":" + tagColor + @"}]}"; string refere = "https://store.weixin.qq.com/shop/order/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string EditPrice(ShopLoginInfo shop, string spuId, string skuId, int newPrice) { string url = "https://store.weixin.qq.com/shop-faas/mmecnodeproductlist/cgi/goods/listingUpdatePrice?token=&lang=zh_CN"; string body = @"{""skuList"":[{""spuId"":" + spuId + @",""skuId"":""" + skuId + @""",""salePrice"":" + newPrice + @"}],""uploadSource"":6}"; string refere = "https://store.weixin.qq.com/shop/goods/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string EditPrice(ShopLoginInfo shop, JObject priceData) { string url = "https://store.weixin.qq.com/shop-faas/mmecnodeproductlist/cgi/goods/listingUpdatePrice?token=&lang=zh_CN"; //string body = @"{""skuList"":[{""spuId"":" + spuId + @",""skuId"":""" + skuId + @""",""salePrice"":" + newPrice + @"}],""uploadSource"":6}"; string body = JsonHelper.SerializeObject(priceData); string refere = "https://store.weixin.qq.com/shop/goods/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string decryptOrder(ShopLoginInfo shop, string orderId) { string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/common/cgi/decryptOrder?token=&lang=zh_CN"; string body = @"{""id"":""" + orderId + @"""}"; string refere = "https://store.weixin.qq.com/shop/order/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } // 预在线寄件 public static string preCreateOrderWaybillOnline(ShopLoginInfo shop, WXPreCreateOrderWaybillOnlineParam preWaybillOnlineparam) { string url = "https://store.weixin.qq.com/shop-faas/mmecnodewaybill/alltoall/platPreCreateOrder?token=&lang=zh_CN"; //string body = @"{""deliveryIds"":[""JTSD"",""YTO"",""YUNDA"",""ZTO"",""STO"",""JD"",""DBKD"",""CNSD"",""SF""],""req"":{""requestContent"":[{""deliveryId"":"""",""orderType"":1,""ecOrderList"":[{""ecOrderId"":""3736506990289905920"",""goodsList"":[{""goodCount"":1,""goodName"":""【抢限量印签】信任养育:你的孩子本来就很好 白瑞家庭教育作品,千万父母追随,20余年经验沉淀"",""productId"":""10000852376968"",""skuId"":""15057811153""}]}],""sender"":{""name"":""陈图书"",""mobile"":""13023098035"",""province"":""安徽省"",""city"":""合肥市"",""county"":""肥西县"",""street"":"""",""address"":""上派镇中盟电子产业园8栋一单元(东电梯3楼快递指定存放点)"",""lat"":"""",""lng"":""""},""deliveryInfo"":{""appointmentType"":1,""datetime"":""20260521""},""extInfo"":{""packageWeightG"":1000},""uuid"":""37f59ae7-32fb-4e7a-89af-1d228c9d933f"",""orderVasList"":[],""source"":3}]}}"; string body = JsonHelper.SerializeObject(preWaybillOnlineparam); string refere = "https://store.weixin.qq.com/shop/waybill/allToAll"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); //{"ret":0,"list":[{"code":0,"responseContent":[{"retcode":0,"errorMsg":"","deliveryErrorMsg":"success","totalFee":"390","feeDetail":{"totalShippingFee":"390","totalVasFee":0,"otherFee":0,"otherFeeName":""},"predictedArrivedTime":0,"uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"JTSD","orderType":1,"ewaybillOrderId":"4525894130917130247","deliveryResultCode":"0","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":true}],"showInsufficientBalance":true},{"code":0,"responseContent":[{"retcode":0,"errorMsg":"","deliveryErrorMsg":"success","totalFee":"440","feeDetail":{"totalShippingFee":"440","totalVasFee":0,"otherFee":0,"otherFeeName":""},"predictedArrivedTime":0,"uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"YTO","orderType":1,"ewaybillOrderId":"4525894132274036739","deliveryResultCode":"0","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":true}],"showInsufficientBalance":true},{"code":0,"responseContent":[{"retcode":0,"errorMsg":"","deliveryErrorMsg":"success","totalFee":"440","feeDetail":{"totalShippingFee":"440","vasPriceDetail":[{"vasType":"","vasDetail":"","vasPrice":0}],"totalVasFee":0,"otherFee":0,"otherFeeName":""},"predictedArrivedTime":1779537600,"uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"YUNDA","orderType":1,"ewaybillOrderId":"4525894133585330193","deliveryResultCode":"0","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":true}],"showInsufficientBalance":true},{"code":0,"responseContent":[{"retcode":0,"errorMsg":"","deliveryErrorMsg":"成功","totalFee":"499","feeDetail":{"totalShippingFee":"499","totalVasFee":0,"otherFee":0,"otherFeeName":""},"predictedArrivedTime":0,"uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"ZTO","orderType":1,"ewaybillOrderId":"4525894130125225990","deliveryResultCode":"0","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":true}],"showInsufficientBalance":true},{"code":0,"responseContent":[{"retcode":0,"errorMsg":"","deliveryErrorMsg":"success","totalFee":"440","feeDetail":{"totalShippingFee":"440","totalVasFee":0,"otherFee":0,"otherFeeName":""},"predictedArrivedTime":0,"uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"STO","orderType":1,"ewaybillOrderId":"4525894133215215616","deliveryResultCode":"0","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":true}],"showInsufficientBalance":true},{"code":0,"responseContent":[{"retcode":0,"errorMsg":"","deliveryErrorMsg":"成功","totalFee":"600","feeDetail":{"totalShippingFee":"600","totalVasFee":0,"otherFee":0,"otherFeeName":"其他费用"},"predictedArrivedTime":0,"uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"JD","orderType":1,"ewaybillOrderId":"4525894136920145936","deliveryResultCode":"0","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":true}],"showInsufficientBalance":true},{"code":0,"responseContent":[{"retcode":0,"errorMsg":"","deliveryErrorMsg":"success","totalFee":"1100","feeDetail":{"totalShippingFee":"1100","totalVasFee":0,"otherFee":0,"otherFeeName":""},"predictedArrivedTime":1779445800,"uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"DBKD","orderType":1,"ewaybillOrderId":"4525894139054424087","deliveryResultCode":"0","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":true}],"showInsufficientBalance":true},{"code":0,"responseContent":[{"retcode":1000000,"errorMsg":"","deliveryErrorMsg":"获取预估价格失败","uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"CNSD","orderType":1,"deliveryResultCode":"10002","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":false}],"showInsufficientBalance":false},{"code":0,"responseContent":[{"retcode":0,"errorMsg":"","deliveryErrorMsg":"success","totalFee":"1100","feeDetail":{"totalShippingFee":"1100","totalVasFee":0,"otherFee":0,"otherFeeName":""},"predictedArrivedTime":1779530400,"uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","deliveryId":"SF","orderType":231,"ewaybillOrderId":"4525894132961951757","deliveryResultCode":"0","errorType":0,"blockExplainUrl":{},"showInsufficientBalance":true}],"showInsufficientBalance":true}]} return result; } // 设置在线寄件 public static string createOrderWaybillOnline(ShopLoginInfo shop, WXCreateOrderWaybillOnlineParam waybillOnlineparam) { string url = "https://store.weixin.qq.com/shop-faas/mmecnodewaybill/alltoall/platCreateOrder?token=&lang=zh_CN"; //string body = @"{""payMethod"":2,""requestContent"":[{""deliveryId"":""YTO"",""ewaybillOrderId"":""4525894132274036739"",""ecOrderList"":[{""ecOrderId"":""3736528290099110144"",""goodsList"":[{""goodCount"":1,""goodName"":""荣恒教育[青春期男孩要知道的45件事]10-16岁必读告别迷茫与尴尬青春期枕边书送给孩子的成长礼物"",""productId"":""10000826945183"",""skuId"":""14514725990""}]}],""sender"":{""name"":""李"",""mobile"":""17855123321"",""province"":""江苏省"",""city"":""常州市"",""county"":""天宁区"",""street"":"""",""address"":""九洲环宇大酒店(常州青果巷火车站店)201"",""lat"":""31.779615"",""lng"":""119.974997""},""deliveryInfo"":{""appointmentType"":1,""datetime"":""20260522""},""extInfo"":{""packageWeightG"":1000},""remark"":"""",""uuid"":""1ef8b9e2-d68e-4e12-8bda-e188e246d5ae"",""orderVasList"":[],""source"":3}]}"; string body = JsonHelper.SerializeObject(waybillOnlineparam); string refere = "https://store.weixin.qq.com/shop/waybill/allToAll"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); //{"ret":0,"code":0,"responseContent":[{"ewaybillOrderId":"4525894132274036739","retcode":0,"errorMsg":"","deliveryErrorMsg":"success","waybillId":"YT2547223870618","deliveryId":"YTO","uuid":"1ef8b9e2-d68e-4e12-8bda-e188e246d5ae","errorType":0,"deliveryResultCode":"0","blockExplainUrl":{}}],"displayNewuserTips":false,"createSuccTips":"预计 明天上门取件"} return result; } public static string searchOnlineWaybill(ShopLoginInfo shop, string orderId) { string url = "https://store.weixin.qq.com/shop-faas/mmecnodewaybill/alltoall/searchBill?token=&lang=zh_CN"; string body = @"{""createMode"":1,""orderId"":""" + orderId + @""",""cosignmentOrderId"":"""",""goodsTitle"":"""",""receiverPhone"":"""",""receiverName"":"""",""billStatus"":null,""orderStatus"":null,""offset"":0,""limit"":20,""waybillId"":"""",""payMethodList"":[],""platDisplayOrderStatusList"":[],""cosignmentOrderTime"":[],""cosignmentAssignTime"":[],""storeName"":"""",""orderNote"":"""",""deliveryOrderStatusList"":[10,20,40]}"; string refere = "https://store.weixin.qq.com/shop/waybill/allToAll"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string cancelOnlineWaybill(ShopLoginInfo shop, string ewaybillOrderId, string waybillId) { string url = "https://store.weixin.qq.com/shop-faas/mmecnodewaybill/alltoall/platCancelOrder?token=&lang=zh_CN"; string body = @"{""requestContent"":[{""ewaybillOrderId"":""" + ewaybillOrderId + @""",""waybillId"":""" + waybillId + @""",""source"":1,""merchCancelReason"":""临时缺货,库存不足""}]}"; string refere = "https://store.weixin.qq.com/shop/waybill/allToAll"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string cancelActivity(ShopLoginInfo shop, JObject activityData) { string url = "https://store.weixin.qq.com/shop-faas/mmeckolmarketingnode/activity/cgi/updateRequestProductList?token=&lang=zh_CN"; string body = JsonHelper.SerializeObject(activityData); string refere = "https://store.weixin.qq.com/shop/marketingkol/activity/detail?id=1016&curTab=2"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string orderSendOut(ShopLoginInfo shop, string orderId, string waybillId) { string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/ship/cgi/orderSendOut?token=&lang=zh_CN"; string body = @"{""orderId"":""" + orderId + @""",""deliveryProduct"":{""deliveryId"":""OTHER"",""waybillId"":""" + waybillId + @""",""isAllProduct"":true,""deliverType"":1}}"; string refere = "https://store.weixin.qq.com/shop/order/list?type=3"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string updateDeliveryInfo(ShopLoginInfo shop, UpdateDeliverInfoParam param) { string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/ship/cgi/updateDeliveryInfo?token=&lang=zh_CN"; string body = JsonHelper.SerializeObject(param); string refere = "https://store.weixin.qq.com/shop/order/list?type=3"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string initDeliveryInfo(ShopLoginInfo shop, string orderId) { string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/ship/cgi/initShipData?token=&lang=zh_CN"; string body = @"{""id"":""" + orderId + @"""}"; string refere = "https://store.weixin.qq.com/shop/order/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string getSkuBySpu(ShopLoginInfo shop, string spuIds) { string url = "https://store.weixin.qq.com/shop-faas/mmecnodeproductlist/cgi/goods/getStockBySpu?token=&lang=zh_CN"; string body = @"{""productIdList"":[" + spuIds + @"]}"; string refere = "https://store.weixin.qq.com/shop/goods/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } public static string batchUpdateStock(ShopLoginInfo shop, string spuId, string skuId, string num) { string url = "https://store.weixin.qq.com/shop-faas/mmecnodeproductlist/cgi/goods/batchUpdateStock?token=&lang=zh_CN"; string body = @"{""skuList"":[{""spuId"":""" + spuId + @""",""skuId"":""" + skuId + @""",""diffType"":2,""num"":" + num + "}]}"; string refere = "https://store.weixin.qq.com/shop/goods/list"; var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, refere); return result; } } }