387 lines
17 KiB
C#
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)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|