From ee7ee7a672b4a73cc0a4c2041e67d908f9d49978 Mon Sep 17 00:00:00 2001 From: hehaibing-1996 Date: Mon, 20 Jan 2025 17:45:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IService/IBatchBindMatDetailService.cs | 9 ++ .../Service/BatchBindMatDetailService.cs | 101 +++++++++++++++++- .../MatDetailCurrentInfoImportModel.cs | 17 +++ .../BatchBindMatDetailController.cs | 55 ++++++++++ 货架标准上位机/Fonts/iconfont.ttf | Bin 25020 -> 25456 bytes 货架标准上位机/Models/JsConfig.cs | 30 ++---- .../Resources/物料绑定导入模板.xlsx | Bin 0 -> 10228 bytes 货架标准上位机/Tool/Folder.cs | 6 ++ .../ViewModels/BatchBindMatDetailViewModel.cs | 96 ++++++++++++++++- .../Views/BatchBindMatDetailView.xaml | 22 ++-- 货架标准上位机/货架标准上位机.csproj | 3 + 11 files changed, 310 insertions(+), 29 deletions(-) create mode 100644 WCS.Model/ApiModel/BatchBindMatDetail/MatDetailCurrentInfoImportModel.cs create mode 100644 货架标准上位机/Resources/物料绑定导入模板.xlsx diff --git a/WCS.BLL/Services/IService/IBatchBindMatDetailService.cs b/WCS.BLL/Services/IService/IBatchBindMatDetailService.cs index 9361f42..4a04c1d 100644 --- a/WCS.BLL/Services/IService/IBatchBindMatDetailService.cs +++ b/WCS.BLL/Services/IService/IBatchBindMatDetailService.cs @@ -30,5 +30,14 @@ namespace WCS.BLL.Services.IService /// /// public Task> deleteMatDetailCurrentInfo(DeleteInfosRequest request); + + /// + /// 批量导入物料绑定关系 + /// + /// + /// + /// + /// + public Task>> importMatDetailCurrentInfo(List lists, string userName, string deviceType,string stationCode); } } diff --git a/WCS.BLL/Services/Service/BatchBindMatDetailService.cs b/WCS.BLL/Services/Service/BatchBindMatDetailService.cs index 943d0b9..f17b967 100644 --- a/WCS.BLL/Services/Service/BatchBindMatDetailService.cs +++ b/WCS.BLL/Services/Service/BatchBindMatDetailService.cs @@ -27,7 +27,11 @@ namespace WCS.BLL.Services.Service { public class BatchBindMatDetailService : IBatchBindMatDetailService { - + /// + /// 按照工位号获取绑定明细 + /// + /// + /// public async Task> GetMatDetailCurrentInfosByStationCode(GetMatDetailCurrentInfosByStationCodeRequest request) { try @@ -184,5 +188,100 @@ namespace WCS.BLL.Services.Service return response; } } + + /// + /// 批量导入物料绑定关系 + /// + /// + /// + /// + /// + public async Task>> importMatDetailCurrentInfo(List lists, string userName, string deviceType, string stationCode) + { + #region 校验 + //工位校验 工位是否有货架校验 + var station = await DbHelp.db.Queryable() + .Where(t => t.LocationCode == stationCode || t.IsEnable == true) + .FirstAsync(); + if (station == null) + { + return new ResponseCommon>() + { + Code = 200, + Message = $"导入失败:工位[{stationCode}]不存在或已被禁用!", + Data = null, + }; + } + + //数量、物料编码等必填项的校验 + foreach (var matDetailCurrentInfo in lists) + { + if (matDetailCurrentInfo.数量 == null || matDetailCurrentInfo.数量 <= 0) + { + return new ResponseCommon>() + { + Code = 200, + Message = $"导入失败:数量应该大于0!", + Data = null, + }; + } + if (string.IsNullOrEmpty(matDetailCurrentInfo.物料编码)) + { + return new ResponseCommon>() + { + Code = 200, + Message = $"导入失败:物料编码必填!", + Data = null, + }; + } + } + //单据类型校验 + + //物料编码校验 + + #endregion + + #region 导入数据 + try + { + await DbHelp.db.BeginTranAsync(); + foreach (var mat in lists) + { + var matBaseInfo = new MatBaseInfo() + { + MatCode = mat.物料编码, + MatName = mat.名称, + MatSpec = mat.规格, + MatUnit = mat.单位, + MatCustomer = mat.客户, + ModifyUser = userName, + IsEnable = mat.状态 == "启用" ? true : false, + }; + await DbHelp.db.Insertable(matBaseInfo).ExecuteCommandAsync(); + } + await DbHelp.db.CommitTranAsync(); + return new ResponseCommon>() + { + Code = 200, + Message = "导入数据成功", + Data = null + }; + } + catch (Exception ex) + { + await DbHelp.db.RollbackTranAsync(); + var ErrList = new List + { + ex.Message + }; + return new ResponseCommon>() + { + Code = 200, + Message = "导入失败", + Data = ErrList + }; + } + #endregion + } } } diff --git a/WCS.Model/ApiModel/BatchBindMatDetail/MatDetailCurrentInfoImportModel.cs b/WCS.Model/ApiModel/BatchBindMatDetail/MatDetailCurrentInfoImportModel.cs new file mode 100644 index 0000000..21663bd --- /dev/null +++ b/WCS.Model/ApiModel/BatchBindMatDetail/MatDetailCurrentInfoImportModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WCS.Model.ApiModel.BatchBindMatDetail +{ + public class MatDetailCurrentInfoImportModel + { + public string 单据类型 { get; set; } + public string 单据编号 { get; set; } + public string 物料编码 { get; set; } + public string 物料名称 { get; set; } + public string 物料规格 { get; set; } + public int? 数量 { get; set; } + public string 货架编码 { get; set; } + } +} diff --git a/WCS.WebApi/Controllers/BatchBindMatDetailController.cs b/WCS.WebApi/Controllers/BatchBindMatDetailController.cs index 1c67e97..4ff6aef 100644 --- a/WCS.WebApi/Controllers/BatchBindMatDetailController.cs +++ b/WCS.WebApi/Controllers/BatchBindMatDetailController.cs @@ -1,12 +1,15 @@ using Microsoft.AspNetCore.Mvc; +using MiniExcelLibs; using WCS.BLL.DbModels; using WCS.BLL.Services.IService; +using WCS.BLL.Services.Service; using WCS.DAL.Db; using WCS.DAL.DbModels; using WCS.Model; using WCS.Model.ApiModel; using WCS.Model.ApiModel.BatchBindMatDetail; using WCS.Model.ApiModel.Home; +using WCS.Model.ApiModel.MatBaseInfo; using WCS.Model.ApiModel.PDAMatBind; using WCS.Model.ApiModel.User; using WCS.Model.WebSocketModel; @@ -95,5 +98,57 @@ namespace WCS.WebApi.Controllers return await _batchBindMatDetailService.GetMatDetailCurrentInfosByStationCode(request); } + + [HttpPost("importMatDetailCurrentInfos")] + public async Task importMatDetailCurrentInfos([FromForm] IFormFile excelFile, [FromForm] string userName + , [FromForm] string deviceType, [FromForm] string stationCode) + { + //文件校验 + if (excelFile == null || excelFile.Length == 0) + { + return new ResponseCommon() + { + Code = 201, + Message = "导入失败:文件无有效内容!" + }; + } + //输入数据校验 + if (string.IsNullOrEmpty(userName)) + { + return new ResponseCommon() + { + Code = 201, + Message = "导入失败:参数[用户名]无效,请登录后重试!" + }; + } + if (string.IsNullOrEmpty(deviceType)) + { + return new ResponseCommon() + { + Code = 201, + Message = "导入失败:参数[设备类型]无效!" + }; + } + if (string.IsNullOrEmpty(stationCode)) + { + return new ResponseCommon() + { + Code = 201, + Message = "导入失败:参数[工位]无效,请联系相关人员维护工位编码!" + }; + } + + using (var stream = new MemoryStream()) + { + await excelFile.CopyToAsync(stream); + stream.Position = 0; + var list = MiniExcelLibs.MiniExcel.Query(stream, "物料管理", ExcelType.XLSX).ToList(); + //去除空白行 + list.RemoveAll(x => string.IsNullOrWhiteSpace(x.物料编码)); + + return await _batchBindMatDetailService.importMatDetailCurrentInfo(list, userName, deviceType, stationCode); + } + } + } } diff --git a/货架标准上位机/Fonts/iconfont.ttf b/货架标准上位机/Fonts/iconfont.ttf index 6fd165ec558b769e14a5ce00fb8f571fdce17cd2..546328bc3f16300c2196f75572a0241401aabb00 100644 GIT binary patch delta 2179 zcma)+U2GiH8HV38W3P9{yX)QAKYQ){ckHztn{;ij9pl7yn+6g^grD{X(F7X^Cd46a zZON5@rC`7c5Ct}fs|c4MB#2~zEJRa`1VYM1)Eh34QiN2*&qoLWg$NJ|IPQCL;D)Qt z=s7dz%-{FD-}}w#yXxX;b#znp_~={z0qii~o4WhJ-}b%q=gDUP*ALt>K7H5Zo!$R% z&I0&|RHnJmaJg=b=c}ZBdS-UM{rvj(fVx2158QXhzCIbtjpVva_WbrSGnoucGNQJzqPdGUs+Qb)qCmcq7Ki#dbW{Ae$Bds zI`uYhzaHbLhhG8`l5lOOomMZ`UbXYJ$L&z-h-{VZvP*7|n`Dnn$&5T8kH`@@F8ZFi z>ce;#3qS9VVe#sI6#wrI^q~vaq7xM~qZPeqKooKGAcz3kFo-lfbRdT!68J4j*nlP^ z5kd=dsE4`{zr!%Y-;Q={#AaNFQKWDUwjhhG=tl&<#~8wBM4k#2(2W>2!J%F*G8kd% zLzsXMzd;#w7{Iobi*-R&Jw#RX#sUcs8b%7CxEjU`q2L-u53vo*1Hw9Km=UDjz}z4{ z1G9uQ7?>}FCetu;h-0Wy1PDu{p&XD#1BHPE43r2GGEgiC-K(K&5YIpXA^Kf}QbJ+| ziVD&1C6pJEFi>bn5>-8bnnQHt+P3BpRTw&DK6lEXyWreA2DS^%oi?y>@Ws4=Erc)LHL#iRW>6)p@K z*kHIYX<)12!ju8qn5f?F#H!k^KD3Ti?SI#m>UY&2slVbo({R84cK>B(zdPVAxSuw@ z6z~UL2wV(~1`h=T6vaRKVR3^1A zb+&b(^?ciGx-Y$$mdvf0OWEP<>HK(pI=@`#E*vdB*?xG#>V~g7yE_keu9m9vrL$c- zyOy-%>tZk1Ep!7-r8+wbzF1b}IVSq^4IC?DR;9nvq4d05*`fw`M_R>v#eAV-Ffvf# zYJ&5GxyDsr+@3$-ref}aE2l%A7g8e!+*ryzp_Jvfe)@Ez+p6?bH+vZ`+O&42$@7}5 zN|P7Oc$<6H&UBBcqsN>`%0C%y4Nv)7Jmoy6ls|Fh&C<|NX)F|pgvRtctvNlKxxT`G zJrnuXe!_0#uZS*Zn8o~1rB4-_lun4@4P2v`fUN_JRDa2)82@!9{euG?_Tgyo%8R>Q z<+VDGyR1seb9SrSgWez4o-LNkMeE*Tc|72(J?jJlj&-jS7%!`bg3;Y>D(Wmct67`1-qyaRrMO!PW|rb(9qRtX1~s^Tyn>5 lQ9EkoJx4sXL+ylbcJ7`#rswMS-!u7_xs`YJ{Ae*n{0~oe-k1OY delta 1735 zcma)+T}&KR7>3{3Szwo4*oB?h1$JhC_*oVfDNtxDLa|lBi^jC-h0$0_?GK6kG_@C) zXqReD8dC|nfh(;fcwv;7Mr=|OE^3-IjcIDrw24Mzjhe5tlKK~oX(jj`j^2AF&zw1D z_RRUt`@P@(a=}mD8=3}dq064~` zVNR6X_4e|4iPR5|9+_}%ul)%aE5sQYe{SgOYd_!N`kj0~JvuaT$QUs?_^yiM)Y#DI z{_uRyY2can0nfoh<1dsQX>m?}0qhPlh=n(o>iPy?@VDgYGqF>Hp`Jew@Nxq9Vg8$Q z|MhEk*N%GA=4%}L;8C+|YTZB~Vcb|O@+6E6ch)ChEW=!XYGGf>ZSTNqsPG@fgD8Se zf>JJFNf&mSZeiSPHR=j)n{hs+3SXH|=8r;MlmA|?;Q0D=694Z4TF{95(SS}wQH>mT ztUv@!2r!l!Y(yMk)FXj3EXI>T9m-%Mh!|rwv27xDOA&MGx8$ z!b9jqIs8Z>g)A!3iV_r469-$+k1q7Viw$U_MjhBriHaAEB9D>h25jb2>dw{=2s;G> zhEPcbLx)gZ1rGr+H9QW4Nm1}%kRlC_2r1U^u#gfBj}4*26chlG_wz=m1%x?KP!&i( zLwz6&Q9-33AHX%$5M17brMG!~BWIzXm?T(u#G&DYL{-t3FVEKTC#en5cHOlPy<bLY*`daOky2}k{=*Wy^ zE;piaDeGjXvOg-Xt*w}|rp*LCTbK$s#^%C@fm+|j_KsLdrmnqkJ&?>lZ*{qCnRz=J zH0zB>#Gjmtr*pm5Oej}vTj6-3uE&~jqpNwht0@|@<{R4*@vvpr#^;i~xvE@f#`0%^ z?u^w_YwUAxxSrd#?aW6z;|Zsz()9VPXf`z$F?w_9_^f678iI+M*-V?;wHmXVy0&!M z^GP?@;IrOMWplkzYsN`OBNa}fEi+q_@Km_px>$TG*!P4nP`ElcWnl5}o_n5u0GqdY A82|tP diff --git a/货架标准上位机/Models/JsConfig.cs b/货架标准上位机/Models/JsConfig.cs index 5af90b1..9c46420 100644 --- a/货架标准上位机/Models/JsConfig.cs +++ b/货架标准上位机/Models/JsConfig.cs @@ -32,11 +32,6 @@ namespace 智慧物流软件系统 /// public JsSysConfig Sys { get; set; } - /// - /// 货架类的是否软件启动后自检 - /// - public bool IsBootSelfTest { get; set; } - /// /// 扫码枪Com口列表 /// @@ -53,24 +48,16 @@ namespace 智慧物流软件系统 /// public string LocationCode { get; set; } + + #region 导入相关配置 + //点击导入选择文件时 是否自动加载下载导入模板得路径 + public bool IsLoadingDownloadPath { get; set; } = true; + + public string BatchBindImportTemplatePath { get; set; } = string.Empty; + #endregion + #region 盟讯公司配置 public bool IsMx { get; set; } - /// - ///MX-获取要料单接口地址 - /// - public string GetPickOrderUrl { get; set; } - /// - ///MX-获取要料明细接口地址 - /// - public string RecommendedBarCode { get; set; } - /// - ///MX-首盘发料明细接口地址 - /// - public string FirstSendRecommendedBarCode { get; set; } - /// - ///MX-后续发料明细接口地址 - /// - public string ElectronicSiloPush { get; set; } #endregion #region 金川公司配置 @@ -84,6 +71,7 @@ namespace 智慧物流软件系统 public string RegexMatCode { get; set; } //正则 物料数量 public string RegexMatQty { get; set; } + //正则 物料批次 public string RegexMatBatch { get; set; } #endregion diff --git a/货架标准上位机/Resources/物料绑定导入模板.xlsx b/货架标准上位机/Resources/物料绑定导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..46d190cc500c9e51e63a1cb71645e7e922ebbd31 GIT binary patch literal 10228 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 + /// 下载导入模板 + /// + public ICommand DownloadImportTemplateCommand { get => new DelegateCommand(DownloadImportTemplate); } + public void DownloadImportTemplate() + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Title = "选择保存导入模板路径";//窗口标题 + + saveFileDialog.Filter = "Excel 文件 (*.xlsx)|*.xlsx|All files (*.*)|*.*"; // 设置文件过滤器 + saveFileDialog.ValidateNames = true; + saveFileDialog.FileName = "物料绑定导入模板.xlsx";// 设置默认文件名 + + if (saveFileDialog.ShowDialog() == true) + { + try + { + // 文件保存路径 + var destinationPath = saveFileDialog.FileName; + // 文件源路径 + var sourcePath = Path.Combine(LocalFile.ResourcesDir, "物料绑定导入模板.xlsx"); + + Folder.CopyFile(sourcePath, destinationPath); + if (File.Exists(destinationPath) && LocalFile.Config.IsLoadingDownloadPath) + { + LocalFile.Config.BatchBindImportTemplatePath = destinationPath; + LocalFile.SaveConfig(); + } + Growl.Success("下载成功!"); + } + catch (Exception ex) + { + Growl.Warning($"操作失败:{ex.Message}"); + } + } + } + + public ICommand BtnImportCommand { get => new DelegateCommand(BtnImport); } + public async void BtnImport() + { + try + { + #region 选择需要导入文件的路径 + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Title = "选择模板"; + ofd.Filter = ".xlsx文件(*.xlsx)|*.xlsx"; + ofd.Multiselect = false; + if (!string.IsNullOrEmpty(LocalFile.Config.BatchBindImportTemplatePath)) + { + string pattern = @"^(.*?)\\[^\\]+$"; + + Match match = Regex.Match(LocalFile.Config.BatchBindImportTemplatePath, pattern); + if (match.Success) + { + ofd.InitialDirectory = match.Groups[1].Value; + } + } + + + if (ofd.ShowDialog() != true) + { + return; + } + #endregion + //已经选择文件 调用接口进行导入数据 + string path = ofd.FileName; + + var result = await ApiHelp.PostImportFileAsync>>(path, System.Net.Http.HttpMethod.Post, + LocalFile.Config.ApiIpHost + "matBaseInfo/importMatBaseInfo", LocalStatic.CurrentUser, LocalFile.Config.DeviceType); + if (result.Code == 200) + { + Growl.Success("成功导入!"); + CurrentPage = 0; + } + else + { + if (result.Data != null && result.Data.Count > 0) + HandyControl.Controls.MessageBox.Show(result.Message + "\t\n" + String.Join("\t\n", result.Data)); + else + HandyControl.Controls.MessageBox.Show(result.Message); + } + } + catch (Exception ex) + { + Growl.Error("导入失败:" + ex.Message); + } + } #endregion #region PageOperation 分页操作 diff --git a/货架标准上位机/Views/BatchBindMatDetailView.xaml b/货架标准上位机/Views/BatchBindMatDetailView.xaml index d973c9d..f8619d0 100644 --- a/货架标准上位机/Views/BatchBindMatDetailView.xaml +++ b/货架标准上位机/Views/BatchBindMatDetailView.xaml @@ -111,6 +111,16 @@ Command="{Binding BtnDeleteCommand}" Style="{StaticResource ButtonDanger}"> + + + + + + + Background="CadetBlue"> + Background="OrangeRed"> Never + + PreserveNewest +