using AllBase; using AllBase.Extension; using AllBase.Model.Result.PDDResult; using AllBase.Model.Result.WXResult; using NaiBa.Util; 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.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using TemuKJD.BaseForms; using TemuKJD.Extension; using Work; namespace TemuKJD.WXForms.AdminForms { public partial class WXWaybillManageForm : BaseForms.BaseGeneralForm { public ConcurrentList lstWxOptimizeExpressInfo = new ConcurrentList(); public WXWaybillManageForm() { InitializeComponent(); } private void WXWaybillManageForm_Load(object sender, EventArgs e) { this.dgvExpress.AddSelectorColumn("colSelect"); } private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) return; string headerText = dgvExpress.Columns[e.ColumnIndex].HeaderText; var dbId = dgvExpress.Rows[e.RowIndex].Cells["colDbId"].Value.ParseToString(); var express = lstWxOptimizeExpressInfo.FirstOrDefault(p => p.id.ToString() == dbId); switch (headerText) { case "删除": if (BaseMsgForm.ShowConfirm("确定删除商品吗?删除后不可恢复!").DialogResult == DialogResult.Cancel) return; //DeleteProduct(dbId); break; case "测试": //this.lblExtCodePrice.Text = "调整货号 " + dgvDbProduct.Rows[e.RowIndex].Cells["col_ext_code"].Value.ParseToString() + " 价格"; //this.lblExtCode.Text = dgvDbProduct.Rows[e.RowIndex].Cells["col_ext_code"].Value.ParseToString(); //this.txtExtCodePrice.Text = dgvDbProduct.Rows[e.RowIndex].Cells["colExtCodePrice"].Value?.ParseToDecimal().ToString(); //this.pnlEditExtCodePrice.Visible = true; //SelectAndSetWaybill //var url = BaseClass.BuildObjString("shop/select_and_set_waybill"); //var data = UserLogin.GetSignaturex() + // "&shop_id=wx01"+ // "&order_id=" + Randomx.GetId(100000,999999); //var html = GetHtml.PostUtf8(url, data); break; case "": dgvExpress.Rows[e.RowIndex].Cells["colSelect"].Value = !(bool)dgvExpress.Rows[e.RowIndex].Cells["colSelect"].Value; break; default: break; } } private void btnSearch_Click(object sender, EventArgs e) { GetDeliveryAndWaybill(); } void GetDeliveryAndWaybill() { if (this.ucSplitPage1.CurrentPage != 1) this.ucSplitPage1.CurrentPage = 1; else GetDeliveryAndWaybill(1); } public void GetDeliveryAndWaybill(int page) { Invoke(new Action(() => { this.pbLoading.Visible = true; this.dgvExpress.Rows.Clear(); lstWxOptimizeExpressInfo.Clear(); })); Task.Run(() => { int pageCount; int pageSize = 100; decimal seconds; Invoke(new Action(() => { pageSize = this.ucSplitPage1.PageSize; })); var list = GetDeliveryAndWaybill(out pageCount, out seconds, page, pageSize); lstWxOptimizeExpressInfo.AddRange(list); this.ucSplitPage1.TotalPage = pageCount; foreach (var express in lstWxOptimizeExpressInfo) { Invoke(new Action(() => { int rowIndex = this.dgvExpress.Rows.Add( false, express.id, express.delivery_id, express.bind_order_id, express.delivery_name, express.waybill_id, (express.waybill_pickup_time?.ToString("yyyy-MM-dd HH:mm")).ParseToString(), express.status == 0 ? "未使用" : "已使用", express.order_id, express.shop_id, express.use_time?.ToString("yyyy-MM-dd HH:mm"), // 使用时间 express.add_time.ToString("yyyy-MM-dd HH:mm"), // 添加时间 "", "测试"); dgvExpress.Rows[rowIndex].Height = 60; })); } Invoke(new Action(() => { this.pbLoading.Visible = false; this.statusBar.lblTaskStatus.Text = "运单号查询完毕"; #if DEBUG this.statusBar.lblTaskStatus.Text += ",耗时:" + seconds; #endif })); }); } public List GetDeliveryAndWaybill(out int pageCount, out decimal seconds, int page = 1, int pageSize = 200) { List list = new List(); pageCount = 1; seconds = 0; var url = BaseClass.BuildObjString("shop/get_waybill"); var data = ""; Invoke(new Action(() => { data = UserLogin.GetSignaturex() + "&page=" + page + "&page_size=" + pageSize; if (!string.IsNullOrEmpty(comboBox1.Text.Trim())) data += "&status=" + (comboBox1.Text.Trim() == "未使用" ? "0" : "1,2"); })); var html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) { Invoke(new Action(() => { BaseMsgForm.ShowError("运单列表获取失败,请重试!" + BaseRegex.GetStringJson(ref html, "msg")); })); return list; } seconds = BaseRegex.GetDecimalJson(ref html, "seconds"); int count = BaseRegex.GetIntJson(ref html, "count"); pageCount = Math.Ceiling(1.0 * count / pageSize).ParseToInt(); pageCount = Math.Max(pageCount, 1); var jArr = JObject.Parse(html)["data"]; if (jArr.Count() == 0) return list; var sProd = JsonHelper.SerializeObject(jArr); try { list = JsonHelper.DeserializeJsonToList(sProd); return list; } catch (Exception ex) { return new List(); } } private void ucSplitPage1_PageChange(object obj) { GetDeliveryAndWaybill(ucSplitPage1.CurrentPage); } bool first = true; private void WXWaybillManageForm_VisibleChanged(object sender, EventArgs e) { if (this.Visible == true && first) { first = false; this.pbLoading.Visible = true; GetDeliveryAndWaybill(ucSplitPage1.CurrentPage); } } private void btnImport_Click(object sender, EventArgs e) { IsOperate = true; ImportExpress(); GetDeliveryAndWaybill(); } public bool IsOperate = false; void ImportExpress() { this.btnImport.Enabled = false; string text = "运单号导入格式:\r\n\r\n1.物流公司名称 运单号码 揽收时间\r\n2.指定定单号 物流公司名称 运单号码 [揽收时间]\r\n\r\n多个运单号请每个新起一行。[]内容非必须"; BaseMsgForm.ShowInfo(text, "", FormLevel.LARGE); OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "文本文件(*.txt)|*.txt"; openFileDialog.RestoreDirectory = true; openFileDialog.FilterIndex = 1; if (openFileDialog.ShowDialog() == DialogResult.OK) { using (StreamReader sr = new StreamReader(openFileDialog.FileName, Work.Api.UploadPinduoduoMain.GetFileEncoding(openFileDialog.FileName))) { string fileName = openFileDialog.FileName; string importStr = sr.ReadToEnd().Trim(); var strArr = importStr.Replace("\r", "").Split('\n'); string errMsg = ""; for (int i = 0; i < strArr.Length; i++) { if (IsOperate == false) break; try { // 通用格式 if (strArr[i].Contains(" ") || strArr[i].Contains("\t")) { WxOptimizeExpressInfo express = null; var ExpressArr = strArr[i].Split(new string[] { " ", "\t" }, StringSplitOptions.RemoveEmptyEntries); if (ExpressArr.Length > 2) { // 三个参数第一个是物流公司名称 var deliveryName = ExpressArr[0]; var deliverId = PddBuyerOrderInfoLite.GetWxExpressNameToWxExpressCode(deliveryName); if (string.IsNullOrEmpty(deliverId)) deliverId = PddBuyerOrderInfoLite.GetPddToWxExpressCompanyCode(deliveryName); // 四个参数或则第一个不是物流公司名称的情况下,第一个是订单号,第二个是物流公司名称 if (string.IsNullOrEmpty(deliverId)) { deliveryName = ExpressArr[1]; deliverId = PddBuyerOrderInfoLite.GetWxExpressNameToWxExpressCode(deliveryName); if (string.IsNullOrEmpty(deliverId)) deliverId = PddBuyerOrderInfoLite.GetPddToWxExpressCompanyCode(deliveryName); if (deliverId.IsNullOrEmpty()) { errMsg += ", 运单信息不完整"; continue; } express = new WxOptimizeExpressInfo(); express.waybill_id = ExpressArr[2]; express.delivery_name = ExpressArr[1]; express.bind_order_id = ExpressArr[0]; express.delivery_id = deliverId; if (ExpressArr.Length > 3) { express.waybill_pickup_time = ExpressArr[3].ParseToNullableDateTime(); if (express.waybill_pickup_time == null) { errMsg += ", 运单" + express.waybill_id + "揽收时间格式不合法"; continue; } } } else { express = new WxOptimizeExpressInfo(); express.waybill_id = ExpressArr[1]; express.delivery_name = ExpressArr[0]; express.delivery_id = deliverId; express.waybill_pickup_time = ExpressArr[2].ParseToNullableDateTime(); if(express.waybill_pickup_time == null) { errMsg += ", 运单" + express.waybill_id + "揽收时间格式不合法"; continue; } } var url = BaseClass.BuildObjString("shop/add_waybill"); var data = ""; Invoke(new Action(() => { data = UserLogin.GetSignaturex() + "&delivery_id=" + express.delivery_id + "&delivery_name=" + express.delivery_name + "&waybill_id=" + express.waybill_id; // 运单揽收时间 和 指定订单编号 必填其一 if (express.waybill_pickup_time != null) data += "&waybill_pickup_time=" + express.waybill_pickup_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); if (!express.bind_order_id.IsNullOrEmpty()) data += "&bind_order_id=" + express.bind_order_id; })); var html = GetHtml.PostUtf8(url, data); if (!html.ParseToString().Contains("运单号已存在") && (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))) html = GetHtml.PostUtf8(url, data); if (!html.Contains("\"code\":200")) { errMsg += ", " + BaseRegex.GetStringJson(ref html, "msg"); if (html.ParseToString().Contains("运单号已存在")) errMsg += " " + express.waybill_id; } } } else { errMsg += ", 运单号信息缺失"; } } catch (Exception ex) { } } if (!string.IsNullOrEmpty(errMsg.Trim(',', ' '))) { BaseMsgForm.ShowError(errMsg.Trim(',', ' '), "", FormLevel.LARGE); } } } IsOperate = false; this.btnImport.Enabled = true; } private void btnDel_Click(object sender, EventArgs e) { if (BaseMsgForm.ShowConfirm("确定删除运单号吗?删除后不可恢复!").DialogResult == DialogResult.Cancel) return; var lstWaybillId = dgvExpress.Rows.Cast().Where(row => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colWaybillId"]?.Value.ToString()).ToList(); var ExpressList = this.lstWxOptimizeExpressInfo.Where(p => lstWaybillId.Contains(p.waybill_id)).ToArray(); this.pbLoading.Visible = true; //this.statusBar.pgbTaskProgress.Maximum = lstWaybillId.Count; //this.statusBar.UpdateProgressBar(0); Task.Run(() => { var url = BaseClass.BuildObjString("shop/del_waybill"); var data = ""; Invoke(new Action(() => { data = UserLogin.GetSignaturex() + "&waybill_ids=" + string.Join(",", lstWaybillId); })); var html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); GetDeliveryAndWaybill(this.ucSplitPage1.CurrentPage); Invoke(new Action(() => { pbLoading.Visible = false; BaseMsgForm.ShowInfo("删除完成!"); })); }); } private void ucSplitPage1_Load(object sender, EventArgs e) { } } }