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; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using TemuKJD.Extension; using TemuKJD.BaseForms; using TemuKJD.KJDForms.ProductSelectForms; using TemuKJD.KJDForms.ShopForms; using TemuKJD.ToolForms; using Work; using TemuKJD.BLL; namespace TemuKJD.KJDForms.ProductThirdSelectForms { /// /// 库存上传提交商品列表 /// public partial class ProductThirdUserSelectForm : BaseForm { bool isInit = false; CheckBox chkSelectAll = null; List lstTemuDBProductSelect = new List(); public ProductThirdUserSelectForm() { InitializeComponent(); } private void UserSelectThirdProductForm_Load(object sender, EventArgs e) { chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false); dgvShop.Columns["colSelect"].HeaderText = ""; //chkSelectAll.Width = chkSelectAll.Height = 13; chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged; chkSelectAll.Checked = true; this.dgvSelectProduct.AddSelectorColumn("colCheck"); this.ucSplitPage1.PageChange += UcSplitPage1_PageChange; } private void UcSplitPage1_PageChange(object obj) { SearchDbProdSelect(this.ucSplitPage1.CurrentPage); } 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())) row.Cells["colSelect"].Value = true; } } } private void btnRefreshShop_Click(object sender, EventArgs e) { RefreshShop(); } private void UserSelectDbProductForm_VisibleChanged(object sender, EventArgs e) { if (Visible == true) { RefreshShop(); if (dgvSelectProduct.Rows.Count == 0) SearchDbProdSelect(1); } isInit = true; } private void RefreshShop() { // 店铺Id var selectIds = dgvShop.Rows.Cast().Where(row => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); var shopLst = GlobalConfig.ShopLoginList.ToList(); if (!string.IsNullOrWhiteSpace(txtShopId.Text.Trim())) { shopLst = shopLst.Where(s => ("," + txtShopId.Text.Trim() + ",").Contains("," + s.ShopId + ",") || s.ShopId.Contains(txtShopId.Text.Trim())).ToList(); } if (!string.IsNullOrWhiteSpace(txtShopName.Text.Trim())) { shopLst = shopLst.Where(s => ("," + txtShopName.Text.Trim() + ",").Contains("," + s.ShopAccount + ",") || s.ShopAccount.ToLower().Contains(txtShopName.Text.Trim().ToLower())).ToList(); } if (!string.IsNullOrWhiteSpace(txtNotes.Text.Trim())) { shopLst = shopLst.Where(s => ("," + txtNotes.Text.Trim() + ",").Contains("," + s.Notes + ",") || s.Notes.ToLower().Contains(txtNotes.Text.Trim().ToLower())).ToList(); } // 获取被删除的店铺 List dgvRowList = dgvShop.Rows.Cast().Where(row => !shopLst.Any(s => s.ShopId == row.Cells["colShopId"]?.Value?.ToString())).ToList(); // 更新被删除的店铺列表 foreach (var row in dgvRowList) { dgvShop.Rows.Remove(row); } // 绑定其他店铺(含新导入的店铺) foreach (ShopLoginInfo shopEntity in shopLst) { if (!string.IsNullOrEmpty(shopEntity.ShopId)) BindShop(shopEntity, selectIds); } } private void btnEmpty_Click(object sender, EventArgs e) { txtNotes.Text = txtShopId.Text = txtShopName.Text = ""; } private void BindShop(ShopLoginInfo shopEntity, List selectShopId = null) { if (shopEntity == null) return; if (selectShopId == null) selectShopId = new List(); bool canUse = shopEntity.LoginStatus == "登录成功"; canUse = true; // 内部库不需要校验登录状态 var row = dgvShop.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopId); if (row == null) { this.dgvShop.Rows.Add( !isInit || (selectShopId.Contains(shopEntity.ShopId) && canUse), shopEntity.LoginName, shopEntity.ShopId, shopEntity.ShopAccount, shopEntity.Notes, "选择商品", canUse ? "在线" : "掉线", canUse, shopEntity.AddProductRemaining, string.Empty ); } else { 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["colLoginStatus"].Value = canUse ? "在线" : "掉线"; row.Cells["colLoginStatus"].Style.ForeColor = canUse ? Color.Green : Color.Red; row.Cells["colCanUse"].Value = canUse; row.Cells["colRemaining"].Value = shopEntity.AddProductRemaining; } } 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; long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong(); 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("店铺未登录!"); } break; case "colSelectProduct": // 认领商品 //DbProductListForm dbProductForm = new DbProductListForm(shop); //dbProductForm.ShowDialog(); //this.RefreshShop(); 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; } if (this.ucSplitPage1.CurrentPage != 1) this.ucSplitPage1.CurrentPage = 1; else SearchDbProdSelect(1); } public void SearchDbProdSelect(int page) { if (InvokeRequired) { Invoke(new Action(() => { this.pbLoading.Visible = true; this.dgvSelectProduct.Rows.Clear(); lstTemuDBProductSelect.Clear(); })); } else { this.pbLoading.Visible = true; this.dgvSelectProduct.Rows.Clear(); lstTemuDBProductSelect.Clear(); } Task.Run(() => { int pageCount; var list = GetSelectProductList(out pageCount, page, 200); lstTemuDBProductSelect.AddRange(list); this.ucSplitPage1.TotalPage = pageCount; foreach (var prodSelect in lstTemuDBProductSelect) { //Image image = null; //string imgUrl = prodSelect?.main_img?.Replace("https", "http"); //string rst = ""; //if (!string.IsNullOrWhiteSpace(imgUrl)) // image = GetHtml.GetUrlImg(imgUrl, out rst); //if (!string.IsNullOrEmpty(rst)) // BaseMsgForm.ShowError(rst); Invoke(new Action(() => { int rowIndex = this.dgvSelectProduct.Rows.Add( false, prodSelect.id, prodSelect.shop_id, prodSelect.shop_account, "进店", "登录", prodSelect.spu_id, prodSelect.skc_id, prodSelect.main_img, defaultBitmap, prodSelect.product_name, prodSelect.cat_name, prodSelect.ext_code, prodSelect.status, prodSelect.draft_id, prodSelect.notes, (prodSelect.user_notes + " 编辑").Trim(), "删除"); dgvSelectProduct.Rows[rowIndex].Height = 60; })); } Invoke(new Action(() => { ShowDgvImg(); this.pbLoading.Visible = false; })); }); } public List GetSelectProductList(out int pageCount, int page = 1, int pageSize = 50) { var lstShopId = dgvShop.Rows.Cast().Where(row => row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList(); List list = new List(); pageCount = 1; //第三方库存上传 var url = BaseClass.BuildObjString("product_third/get_user_select_product_list"); var data = ""; Invoke(new Action(() => { data = UserLogin.GetSignaturex() + "&page=" + page + "&page_size=" + pageSize + //"&out_product_id=" + dbId + //"&main_user_name=" + shop.UserName + //"&sub_user_name=" + shop.SubUserName + "&search_spu=" + txtSPU.Text + "&search_skc=" + txtSKC.Text + "&search_ext_code=" + txtExtCode.Text + "&search_prod_name=" + txtProdName.Text + "&search_shop_id=" + txtSearchShopId.Text + "&search_shop_account=" + txtSearchShopName.Text + "&search_notes=" + (cmbNotes.Text == "全部" ? "" : cmbNotes.Text) + "&search_user_notes=" + (cmbUserNotes.Text == "全部" ? "" : cmbUserNotes.Text) + "&status=" + (cmbStatus.Text == "全部" ? "" : cmbStatus.Text) + "&shop_ids=\"" + string.Join("\",\"", lstShopId) + "\""; })); 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 new List(); } 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 dgvSelectProduct_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) return; string headerText = dgvSelectProduct.Columns[e.ColumnIndex].HeaderText; var dbId = dgvSelectProduct.Rows[e.RowIndex].Cells["colSelectId"].Value.ParseToString(); var dbProduct = lstTemuDBProductSelect.FirstOrDefault(p => p.id.ToString() == dbId); var shopId = dgvSelectProduct.Rows[e.RowIndex].Cells["colSupplierId"].Value.ParseToString(); var draftId = dgvSelectProduct.Rows[e.RowIndex].Cells["colDraftId"].Value.ParseToString(); var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId); switch (headerText) { case "删除": if (BaseMsgForm.ShowConfirm("确定删除商品吗?删除后不可恢复!").DialogResult == DialogResult.Cancel) return; var rst = DeleteProduct(dbId); if (rst) { SearchDbProdSelect(this.ucSplitPage1.CurrentPage); } break; case "进店": { ShopLoginForm shopLoginForm = new ShopLoginForm(shop); //shopLoginForm.InitUrl = "https://seller.kuajingmaihuo.com/goods/product/draft"; shopLoginForm.InitUrl = "https://agentseller.temu.com/goods/draft"; shopLoginForm.InitUrl = "https://agentseller.temu.com"; shopLoginForm.openType = EnumOpenType.manage; shopLoginForm.WindowState = FormWindowState.Maximized; shopLoginForm.ShowDialog(); } break; case "编辑备注": break; case "草稿箱Id": //if (!string.IsNullOrEmpty(draftId) && shop != null) //{ // ShopLoginForm shopLoginForm = new ShopLoginForm(shop); // shopLoginForm.InitUrl = "https://seller.kuajingmaihuo.com/goods/product-create/product-edit?productDraftId=" + // draftId + "&from=productDraftList"; // shopLoginForm.openType = EnumOpenType.manage; // shopLoginForm.WindowState = FormWindowState.Maximized; // shopLoginForm.ShowDialog(); //} break; case "重上/已买": { DbProductUserSelectEditNotesForm userNotesForm = new DbProductUserSelectEditNotesForm(dbProduct, SetProductSelectType.ThirdProduct); userNotesForm.ShowDialog(); dgvSelectProduct.Rows[e.RowIndex].Cells["colUserNotes"].Value = (dbProduct.user_notes + " 编辑").Trim(); } break; case "图片": ShowImgForm imgFrom = new ShowImgForm(dgvSelectProduct.Rows[e.RowIndex].Cells["colImgUrl"].Value.ParseToString()); imgFrom.ShowDialog(); break; case "": dgvSelectProduct.Rows[e.RowIndex].Cells["colCheck"].Value = !(bool)dgvSelectProduct.Rows[e.RowIndex].Cells["colCheck"].Value; break; default: break; } } private bool DeleteProduct(string dbId) { var url = BaseClass.BuildObjString("product_third/del_select_product"); var data = UserLogin.GetSignaturex() + "&db_id=" + dbId; var dbSelectProduct = lstTemuDBProductSelect.FirstOrDefault(p => p.id.ParseToString() == dbId); data += "&select_add_time=" + dbSelectProduct.add_time.ToString("yyyy-MM-dd HH:mm:ss"); 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")) { BaseMsgForm.ShowError("删除商品失败,请重试!" + BaseRegex.GetStringJson(ref html, "msg")); return false; } return true; } private void btnDelSelect_Click(object sender, EventArgs e) { if (BaseMsgForm.ShowConfirm("确定删除选中商品吗?删除后不可恢复!").DialogResult == DialogResult.Cancel) return; var DbIdLst = dgvSelectProduct.Rows.Cast().Where(row => row.Cells["colCheck"]?.Value.ParseToBool() == true).Select(r => r.Cells["colSelectId"]?.Value.ToString()).ToList(); this.pbLoading.Visible = true; this.statusBar.lblTaskStatus.Text = "正在删除..."; this.statusBar.pgbTaskProgress.Value = 0; this.statusBar.pgbTaskProgress.Maximum = DbIdLst.Count; this.statusBar.pgbTaskProgress.Text = "0" + "/" + DbIdLst.Count; Task.Run(() => { foreach (var dbId in DbIdLst) { try { DeleteProduct(dbId); Thread.Sleep(20); } catch (Exception ex) { Invoke(new Action(() => { BaseMsgForm.ShowInfo(ex.Message); })); } Invoke(new Action(() => { this.statusBar.pgbTaskProgress.Value++; this.statusBar.pgbTaskProgress.Text = this.statusBar.pgbTaskProgress.Value.ToString() + "/" + DbIdLst.Count; })); } Invoke(new Action(() => { this.statusBar.pgbTaskProgress.Value = DbIdLst.Count; this.statusBar.lblTaskStatus.Text = "删除完成"; this.pbLoading.Visible = false; BaseMsgForm.ShowInfo("删除完成!"); SearchDbProdSelect(this.ucSplitPage1.CurrentPage); })); }); } private void pnlEmpty_Click(object sender, EventArgs e) { //this.txtCat.Text = ""; this.txtExtCode.Text = ""; this.txtProdName.Text = ""; this.txtSearchShopId.Text = ""; this.txtSearchShopName.Text = ""; this.txtSKC.Text = ""; this.txtSPU.Text = ""; this.cmbStatus.Text = "待上传"; this.cmbNotes.Text = "全部"; this.cmbUserNotes.Text = "全部"; } Bitmap defaultBitmap = new Bitmap(80, 80); void ShowDgvImg() { Task.Run(() => { foreach (DataGridViewRow row in this.dgvSelectProduct.Rows) { if (row.Index > 0 && row.Cells["colProductSkcPic"].Displayed == false) { try { Invoke(new Action(() => { row.Cells["colProductSkcPic"].Value = defaultBitmap; })); } catch { } continue; } if (row.Cells["colProductSkcPic"].Value != null && row.Cells["colProductSkcPic"].Value != defaultBitmap) continue; Image image = null; string imgUrl = row.Cells["colImgUrl"]?.Value.ParseToString(); string getImgError = ""; if (!string.IsNullOrWhiteSpace(imgUrl)) image = GetHtml.GetUrlImg(imgUrl, out getImgError); if (!string.IsNullOrEmpty(getImgError)) //BaseMsgForm.ShowError("图片加载失败 " + getImgError); image = TemuKJD.Properties.Resources.errpic; try { Invoke(new Action(() => { row.Cells["colProductSkcPic"].Value = image; })); } catch { } } }); } private void dgvSelectProduct_Scroll(object sender, ScrollEventArgs e) { ShowDgvImg(); } } }