Files
KJD_WebService/TEMUKJD/WXForms/AdminForms/WXWaybillManageForm.cs
T
2026-04-29 09:53:46 +08:00

387 lines
17 KiB
C#

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<WxOptimizeExpressInfo> lstWxOptimizeExpressInfo = new ConcurrentList<WxOptimizeExpressInfo>();
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<WxOptimizeExpressInfo> GetDeliveryAndWaybill(out int pageCount, out decimal seconds, int page = 1, int pageSize = 200)
{
List<WxOptimizeExpressInfo> list = new List<WxOptimizeExpressInfo >();
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<WxOptimizeExpressInfo>(sProd);
return list;
}
catch (Exception ex)
{
return new List<WxOptimizeExpressInfo>();
}
}
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<DataGridViewRow>().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)
{
}
}
}