From 73b6acd3752e583bb91e2d72462afc952d0745af Mon Sep 17 00:00:00 2001 From: "qianhao.xu" Date: Wed, 11 Dec 2024 17:24:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MES/Product/ProReportworkController.cs | 2 + .../MES/Product/ProWorkorderController.cs | 20 ++ .../PublishProfiles/FolderProfile.pubxml | 3 +- DOAN.Admin.WebApi/appsettings.Production.json | 4 +- .../Product/IService/IProWorkorderService.cs | 2 + .../MES/Product/ProReportworkService.cs | 6 + .../MES/Product/ProWorkorderService.cs | 321 ++++++++++++------ .../CustomException/CustomException.cs | 1 + Infrastructure/DOAN.Infrastructure.csproj | 3 + Infrastructure/Helper/PrintHelper.cs | 52 +++ 10 files changed, 302 insertions(+), 112 deletions(-) create mode 100644 Infrastructure/Helper/PrintHelper.cs diff --git a/DOAN.Admin.WebApi/Controllers/MES/Product/ProReportworkController.cs b/DOAN.Admin.WebApi/Controllers/MES/Product/ProReportworkController.cs index 20b6acc..4220c92 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/Product/ProReportworkController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/Product/ProReportworkController.cs @@ -103,5 +103,7 @@ namespace DOAN.Admin.WebApi.Controllers return ToResponse(_ProReportworkService.Delete(idArr)); } + + } } \ No newline at end of file diff --git a/DOAN.Admin.WebApi/Controllers/MES/Product/ProWorkorderController.cs b/DOAN.Admin.WebApi/Controllers/MES/Product/ProWorkorderController.cs index 4febbf2..1c0496b 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/Product/ProWorkorderController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/Product/ProWorkorderController.cs @@ -18,6 +18,9 @@ using System; using DOAN.Infrastructure; using DOAN.Model.MES.product.Dto; using Infrastructure.Converter; +using NPOI.HPSF; +using System.IO; +using System.Web; //创建时间:2024-07-16 namespace DOAN.Admin.WebApi.Controllers @@ -379,5 +382,22 @@ namespace DOAN.Admin.WebApi.Controllers return SUCCESS(response); } + + //TODO 打印机打印工单 + [AllowAnonymous] + [HttpGet("print")] + public IActionResult ExportWorkorderPDF(string[] workorderArray) + { + if(workorderArray==null||workorderArray.Length<1) + { + throw new CustomException("workorderArray"); + } + Task<(string, Stream)> conntext = _ProWorkorderService.ExportPDFByQuestPDFDemo(workorderArray); + return File(conntext.Result.Item2, "application/pdf", HttpUtility.UrlEncode(conntext.Result.Item1)); + + } + + + } } diff --git a/DOAN.Admin.WebApi/Properties/PublishProfiles/FolderProfile.pubxml b/DOAN.Admin.WebApi/Properties/PublishProfiles/FolderProfile.pubxml index d541714..7372c62 100644 --- a/DOAN.Admin.WebApi/Properties/PublishProfiles/FolderProfile.pubxml +++ b/DOAN.Admin.WebApi/Properties/PublishProfiles/FolderProfile.pubxml @@ -16,6 +16,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121. net8.0 e5497bb4-b0c1-4794-9fae-163f626ec399 - false + true + win-x64 \ No newline at end of file diff --git a/DOAN.Admin.WebApi/appsettings.Production.json b/DOAN.Admin.WebApi/appsettings.Production.json index 15c623f..00ee5c5 100644 --- a/DOAN.Admin.WebApi/appsettings.Production.json +++ b/DOAN.Admin.WebApi/appsettings.Production.json @@ -2,7 +2,7 @@ "dbConfigs": [ { // 远程测试服务器 - "Conn": "Data Source=139.224.232.211;User ID=root;Password=doantech123;Initial Catalog=bzfm_mes;Port=3308", + "Conn": "Data Source=127.0.0.1;User ID=root;Password=123456;Initial Catalog=bzfm_mes;Port=3306", "DbType": 0, //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4 "ConfigId": "0", //多租户唯一标识 "IsAutoCloseConnection": true @@ -12,7 +12,7 @@ //代码生成数据库配置 "CodeGenDbConfig": { //代码生成连接字符串,注意{dbName}为固定格式,不要填写数据库名 - "Conn": "Data Source=139.224.232.211;User ID=root;Password=doantech123;Initial Catalog={dbName};Port=3308", + "Conn": "Data Source=127.0.0.1;User ID=root;Password=123456;Initial Catalog={dbName};Port=3306", "DbType": 0, "IsAutoCloseConnection": true, "DbName": "bzfm_mes" //代码生成默认连接数据库,Oracle库是实例的名称 diff --git a/DOAN.Service/MES/Product/IService/IProWorkorderService.cs b/DOAN.Service/MES/Product/IService/IProWorkorderService.cs index 4aee5b2..f8bd932 100644 --- a/DOAN.Service/MES/Product/IService/IProWorkorderService.cs +++ b/DOAN.Service/MES/Product/IService/IProWorkorderService.cs @@ -62,5 +62,7 @@ namespace DOAN.Service.MES.product.IService List SearchBOMNum(string workorder_num); int WorkOrderLog(string workorder, string log, string Operator); + + Task<(string, Stream)> ExportPDFByQuestPDFDemo(string[] workorderArray); } } diff --git a/DOAN.Service/MES/Product/ProReportworkService.cs b/DOAN.Service/MES/Product/ProReportworkService.cs index 053f761..60d10fa 100644 --- a/DOAN.Service/MES/Product/ProReportworkService.cs +++ b/DOAN.Service/MES/Product/ProReportworkService.cs @@ -5,6 +5,8 @@ using DOAN.Repository; using DOAN.Service.MES.product.IService; using Infrastructure.Attribute; + + namespace DOAN.Service.MES.product; /// @@ -89,4 +91,8 @@ public class ProReportworkService : BaseService, IProReportwork return predicate; } + + + + } \ No newline at end of file diff --git a/DOAN.Service/MES/Product/ProWorkorderService.cs b/DOAN.Service/MES/Product/ProWorkorderService.cs index 9fce419..5cc56b4 100644 --- a/DOAN.Service/MES/Product/ProWorkorderService.cs +++ b/DOAN.Service/MES/Product/ProWorkorderService.cs @@ -24,20 +24,14 @@ using NPOI.XWPF.UserModel; using NPOI.HSSF.UserModel; using Microsoft.AspNetCore.Components.Forms; using System.Globalization; -using System.ComponentModel; -using NPOI.Util; +using DOAN.Infrastructure.Helper; using DOAN.Model.MES.base_.Dto; -using Aliyun.OSS; -using Mapster; -using Microsoft.AspNetCore.Authentication; -using System.Reflection; - -using Infrastructure; using Infrastructure.Converter; -using Microsoft.Extensions.Logging; -using Microsoft.AspNetCore.Http.HttpResults; -using DOAN.Model.MES.product; +using QuestPDF; +using QuestPDF.Fluent; +using QuestPDF.Infrastructure; + namespace DOAN.Service.MES.product { @@ -62,31 +56,36 @@ namespace DOAN.Service.MES.product } var predicate = Expressionable.Create() - .AndIF(!string.IsNullOrEmpty(parm.productionName), it => it.productionName.Contains(parm.productionName)) - .AndIF(!string.IsNullOrEmpty(parm.productionCode), it => it.productionCode.Contains(parm.productionCode)) - .AndIF(!string.IsNullOrEmpty(parm.RouteCode), it => it.RouteCode == parm.RouteCode) - .AndIF(!string.IsNullOrEmpty(parm.GroupCode), it => it.GroupCode == parm.GroupCode) - .AndIF(parm.WorkorderDate != null && parm.WorkorderDate[0] > DateTime.MinValue, it => it.WorkorderDate >= parm.WorkorderDate[0]) - .AndIF(parm.WorkorderDate != null && parm.WorkorderDate[1] > DateTime.MinValue, it => it.WorkorderDate <= parm.WorkorderDate[1]) + .AndIF(!string.IsNullOrEmpty(parm.productionName), + it => it.productionName.Contains(parm.productionName)) + .AndIF(!string.IsNullOrEmpty(parm.productionCode), + it => it.productionCode.Contains(parm.productionCode)) + .AndIF(!string.IsNullOrEmpty(parm.RouteCode), it => it.RouteCode == parm.RouteCode) + .AndIF(!string.IsNullOrEmpty(parm.GroupCode), it => it.GroupCode == parm.GroupCode) + .AndIF(parm.WorkorderDate != null && parm.WorkorderDate[0] > DateTime.MinValue, + it => it.WorkorderDate >= parm.WorkorderDate[0]) + .AndIF(parm.WorkorderDate != null && parm.WorkorderDate[1] > DateTime.MinValue, + it => it.WorkorderDate <= parm.WorkorderDate[1]) ; var query = Queryable() - .Where(predicate.ToExpression()); + .Where(predicate.ToExpression()); var finalQuery = Context.Queryable(query) - .LeftJoin((q, m) => q.productionCode == m.Code) - .LeftJoin((q, m, m2) => q.productionName == m2.Name) - .LeftJoin((q, m, m2, r) => q.RouteCode == r.Code) - .LeftJoin((q, m, m2, r, g) => q.GroupCode == g.GroupCode) - .LeftJoin((q, m, m2, r, g, u) => q.Unit == u.UnitCode) - .Select((q, m, m2, r, g, u) => new ProWorkorderDto3() - { - IsMatch_material_code = m.Code, - IsMatch_material_name = m2.Name, - IsMatch_line = r.Code, - IsMatch_group = g.GroupCode, - IsMatch_Unit = u.UnitCode, - }, true); + .LeftJoin((q, m) => q.productionCode == m.Code) + .LeftJoin((q, m, m2) => q.productionName == m2.Name) + .LeftJoin((q, m, m2, r) => q.RouteCode == r.Code) + .LeftJoin((q, m, m2, r, g) => q.GroupCode == g.GroupCode) + .LeftJoin((q, m, m2, r, g, u) => q.Unit == u.UnitCode) + .Select((q, m, m2, r, g, u) => new ProWorkorderDto3() + { + IsMatch_material_code = m.Code, + IsMatch_material_name = m2.Name, + IsMatch_line = r.Code, + IsMatch_group = g.GroupCode, + IsMatch_Unit = u.UnitCode, + }, true); - var response = finalQuery.MergeTable().Distinct().OrderBy(it => it.WorkorderDate).ToPage(parm); + var response = finalQuery.MergeTable().Distinct().OrderBy(it => it.WorkorderDate) + .ToPage(parm); //var query = Queryable() // .Where(predicate.ToExpression()); @@ -138,19 +137,23 @@ namespace DOAN.Service.MES.product public PagedInfo GetList_NOCheck(ProWorkorderQueryDto parm) { var predicate = Expressionable.Create() - .AndIF(!string.IsNullOrEmpty(parm.productionName), it => it.productionName.Contains(parm.productionName)) + .AndIF(!string.IsNullOrEmpty(parm.productionName), + it => it.productionName.Contains(parm.productionName)) .AndIF(!string.IsNullOrEmpty(parm.Workorder), it => it.Workorder.Contains(parm.Workorder)) - - .AndIF(!string.IsNullOrEmpty(parm.productionCode), it => it.productionCode.Contains(parm.productionCode)) + + .AndIF(!string.IsNullOrEmpty(parm.productionCode), + it => it.productionCode.Contains(parm.productionCode)) .AndIF(!string.IsNullOrEmpty(parm.RouteCode), it => it.RouteCode == parm.RouteCode) .AndIF(!string.IsNullOrEmpty(parm.GroupCode), it => it.GroupCode == parm.GroupCode) - .AndIF(parm.WorkorderDate != null && parm.WorkorderDate[0] > DateTime.MinValue, it => it.WorkorderDate >= parm.WorkorderDate[0]) - .AndIF(parm.WorkorderDate != null && parm.WorkorderDate[1] > DateTime.MinValue, it => it.WorkorderDate <= parm.WorkorderDate[1]) + .AndIF(parm.WorkorderDate != null && parm.WorkorderDate[0] > DateTime.MinValue, + it => it.WorkorderDate >= parm.WorkorderDate[0]) + .AndIF(parm.WorkorderDate != null && parm.WorkorderDate[1] > DateTime.MinValue, + it => it.WorkorderDate <= parm.WorkorderDate[1]) ; - + var query = Queryable() - .Where(predicate.ToExpression()).ToPage(parm); + .Where(predicate.ToExpression()).ToPage(parm); return query; } @@ -197,7 +200,7 @@ namespace DOAN.Service.MES.product logObj.ChangeTime = DateTime.Now; logObj.Operator = model.CreatedBy; Context.Insertable(logObj).ExecuteCommand();*/ - + var response = Update(model, true); return response; @@ -213,11 +216,12 @@ namespace DOAN.Service.MES.product { DateTime update_time = parm.WorkorderDate.ToLocalTime().Date; - List proWorkorderList = Context.Queryable().Where(it => it.WorkorderDate == update_time) - .Where(it => it.Status == 1) - .OrderBy(it => it.Sort).ToList(); + List proWorkorderList = Context.Queryable() + .Where(it => it.WorkorderDate == update_time) + .Where(it => it.Status == 1) + .OrderBy(it => it.Sort).ToList(); string maxs = Context.Queryable().Where(it => it.WorkorderDate == update_time) - .Where(it => it.Status == 3).Max(it => it.Workorder); + .Where(it => it.Status == 3).Max(it => it.Workorder); if (proWorkorderList != null && proWorkorderList.Count() > 0) @@ -238,6 +242,7 @@ namespace DOAN.Service.MES.product index++; } } + return Context.Updateable(proWorkorderList).ExecuteCommand(); } @@ -253,9 +258,11 @@ namespace DOAN.Service.MES.product { int result = 0; proWorkorder.Id = XueHua; - proWorkorder.WorkorderDate= DOANConvertDate.ConvertLocalDate(proWorkorder.WorkorderDate??DateTime.MinValue); + proWorkorder.WorkorderDate = + DOANConvertDate.ConvertLocalDate(proWorkorder.WorkorderDate ?? DateTime.MinValue); // 获取 产品代号 - List ProductCodeList = Context.Queryable().Where(it => it.DictType == "product_code").ToList(); + List ProductCodeList = + Context.Queryable().Where(it => it.DictType == "product_code").ToList(); DateTime handleDate = proWorkorder.WorkorderDate.Value; //插入工单 if (!string.IsNullOrEmpty(next_id) && next_id != "-1") @@ -264,20 +271,23 @@ namespace DOAN.Service.MES.product UseTran2(() => { ProWorkorder maxs = Context.Queryable().Where(it => it.WorkorderDate == handleDate) - .OrderByDescending(it =>SqlFunc.Right(it.Workorder,3)).First(); + .OrderByDescending(it => SqlFunc.Right(it.Workorder, 3)).First(); int index = 1; if (!string.IsNullOrEmpty(maxs.Workorder)) { index = Convert.ToInt32(maxs.Workorder.Substring(maxs.Workorder.Length - 3)) + 1; } - // proWorkorder.Workorder = "K" + handleDate.ToString("yyyyMMdd") + "_" + proWorkorder.GroupCode + "_" + proWorkorder.RouteCode + "_" + index.ToString("000"); + // proWorkorder.Workorder = "K" + handleDate.ToString("yyyyMMdd") + "_" + proWorkorder.GroupCode + "_" + proWorkorder.RouteCode + "_" + index.ToString("000"); - string nickCode = ProductCodeList.Where(it => it.DictLabel == proWorkorder.productionCode).Select(it => it.DictValue).FirstOrDefault(); - proWorkorder.Workorder = "K" + handleDate.ToString("yyyyMMdd") + "_" + proWorkorder.RouteCode + proWorkorder.GroupCode + "_" + nickCode + "_" + index.ToString("000"); + string nickCode = ProductCodeList.Where(it => it.DictLabel == proWorkorder.productionCode) + .Select(it => it.DictValue).FirstOrDefault(); + proWorkorder.Workorder = "K" + handleDate.ToString("yyyyMMdd") + "_" + proWorkorder.RouteCode + + proWorkorder.GroupCode + "_" + nickCode + "_" + index.ToString("000"); - int sortNum = Context.Queryable().Where(it => it.Id == next_id).Select(it => it.Sort.Value).First(); + int sortNum = Context.Queryable().Where(it => it.Id == next_id) + .Select(it => it.Sort.Value).First(); // 调整序号 Context.Updateable() .Where(it => it.WorkorderDate == handleDate) @@ -296,7 +306,7 @@ namespace DOAN.Service.MES.product logObj.Log = "手动新增"; logObj.ChangeTime = DateTime.Now; logObj.Operator = proWorkorder.CreatedBy; - logObj.ChangeTime= DateTime.Now; + logObj.ChangeTime = DateTime.Now; logObj.CreatedBy = proWorkorder.CreatedBy; UseTran2(() => { @@ -309,10 +319,12 @@ namespace DOAN.Service.MES.product else { // 新增工单 - int sortNum = Context.Queryable().Where(it => it.WorkorderDate == handleDate).Max(it => it.Sort.Value); + int sortNum = Context.Queryable().Where(it => it.WorkorderDate == handleDate) + .Max(it => it.Sort.Value); - ProWorkorder maxWorkorder = Context.Queryable().Where(it => it.WorkorderDate == handleDate) - .OrderByDescending(it =>SqlFunc.Right(it.Workorder,3)).First(); + ProWorkorder maxWorkorder = Context.Queryable() + .Where(it => it.WorkorderDate == handleDate) + .OrderByDescending(it => SqlFunc.Right(it.Workorder, 3)).First(); int index = 0; if (maxWorkorder == null) @@ -328,8 +340,10 @@ namespace DOAN.Service.MES.product } //proWorkorder.Workorder = "H" + handleDate.ToString("yyyyMMdd") + "_" + proWorkorder.GroupCode + "_" + proWorkorder.RouteCode + "_" + index.ToString("000"); - string nickCode = ProductCodeList.Where(it => it.DictLabel == proWorkorder.productionCode).Select(it => it.DictValue).FirstOrDefault(); - proWorkorder.Workorder = "H" + handleDate.ToString("yyyyMMdd") + "_" + proWorkorder.RouteCode + proWorkorder.GroupCode + "_" + nickCode + "_" + index.ToString("000"); + string nickCode = ProductCodeList.Where(it => it.DictLabel == proWorkorder.productionCode) + .Select(it => it.DictValue).FirstOrDefault(); + proWorkorder.Workorder = "H" + handleDate.ToString("yyyyMMdd") + "_" + proWorkorder.RouteCode + + proWorkorder.GroupCode + "_" + nickCode + "_" + index.ToString("000"); proWorkorder.Status = 1; @@ -342,7 +356,7 @@ namespace DOAN.Service.MES.product logObj.Log = "手动新增"; logObj.ChangeTime = DateTime.Now; logObj.Operator = proWorkorder.CreatedBy; - logObj.ChangeTime= DateTime.Now; + logObj.ChangeTime = DateTime.Now; logObj.CreatedBy = proWorkorder.CreatedBy; UseTran2(() => { @@ -370,7 +384,7 @@ namespace DOAN.Service.MES.product int result = 0; ProWorkorder toMove = Context.Queryable().Where(it => it.Id == id).First(); var pervious = Context.Queryable() - .Where(it => it.WorkorderDate == toMove.WorkorderDate); + .Where(it => it.WorkorderDate == toMove.WorkorderDate); //上移动 @@ -389,6 +403,7 @@ namespace DOAN.Service.MES.product pervious = pervious.Where(it => it.Sort >= toMove.Sort).OrderBy(it => it.Sort); } + ProWorkorder exchange = pervious.Skip(1).Take(1).First(); if (exchange != null) { @@ -418,7 +433,8 @@ namespace DOAN.Service.MES.product List workorderList = new(); DateTime dateValue = DateTime.MinValue; // 获取 产品代号 - List ProductCodeList= Context.Queryable().Where(it => it.DictType == "product_code").ToList(); + List ProductCodeList = + Context.Queryable().Where(it => it.DictType == "product_code").ToList(); using (var stream = formFile.OpenReadStream()) { try @@ -433,7 +449,9 @@ namespace DOAN.Service.MES.product // 将单元格的数字值转换为DateTime dateValue = cell.DateCellValue.Value; - #region 读取excel + + #region 读取excel + // 遍历每一行 for (int row = 4; row <= sheet.LastRowNum; row++) { @@ -459,7 +477,7 @@ namespace DOAN.Service.MES.product { continue; } - + //02单位 NPOI.SS.UserModel.ICell currentCell_04 = currentRow.GetCell(2); @@ -590,6 +608,7 @@ namespace DOAN.Service.MES.product } } + //13 线别code NPOI.SS.UserModel.ICell currentCell_20 = currentRow.GetCell(13); @@ -626,7 +645,8 @@ namespace DOAN.Service.MES.product workorder.Priority = 2; } - else if (currentCell_21.StringCellValue == "正常" || string.IsNullOrEmpty(currentCell_11.StringCellValue)) + else if (currentCell_21.StringCellValue == "正常" || + string.IsNullOrEmpty(currentCell_11.StringCellValue)) { workorder.Priority = 1; @@ -657,10 +677,12 @@ namespace DOAN.Service.MES.product workorder.Status = 1; //工单 2024-9-13-组-线-序号 int index = (row - 3); - string nickCode= ProductCodeList.Where(it=>it.DictLabel==workorder.productionCode).Select(it=>it.DictValue).FirstOrDefault(); - workorder.Workorder = dateValue.ToString("yyyyMMdd") + "_" + workorder.RouteCode+ workorder.GroupCode + "_" + nickCode + "_" + index.ToString("000"); + string nickCode = ProductCodeList.Where(it => it.DictLabel == workorder.productionCode) + .Select(it => it.DictValue).FirstOrDefault(); + workorder.Workorder = dateValue.ToString("yyyyMMdd") + "_" + workorder.RouteCode + + workorder.GroupCode + "_" + nickCode + "_" + index.ToString("000"); workorder.Sort = index * 10; - + CultureInfo culture = CultureInfo.CurrentCulture; @@ -669,6 +691,7 @@ namespace DOAN.Service.MES.product } } + #endregion @@ -684,6 +707,7 @@ namespace DOAN.Service.MES.product } + UseTran2(() => { @@ -706,7 +730,8 @@ namespace DOAN.Service.MES.product DateTime dateValue = DateTime.MinValue; // 获取 产品代号 - List ProductCodeList = Context.Queryable().Where(it => it.DictType == "product_code").ToList(); + List ProductCodeList = + Context.Queryable().Where(it => it.DictType == "product_code").ToList(); using (var stream = formFile.OpenReadStream()) { try @@ -730,7 +755,9 @@ namespace DOAN.Service.MES.product if (currentRow != null) // 确保行不为空 { ProWorkorder workorder = new ProWorkorder(); - #region 读取excel + + #region 读取excel + //00主体品名 NPOI.SS.UserModel.ICell currentCell_01 = currentRow.GetCell(0); @@ -881,6 +908,7 @@ namespace DOAN.Service.MES.product } } + //13 线别code NPOI.SS.UserModel.ICell currentCell_20 = currentRow.GetCell(13); @@ -917,7 +945,8 @@ namespace DOAN.Service.MES.product workorder.Priority = 2; } - else if (currentCell_21.StringCellValue == "正常" || string.IsNullOrEmpty(currentCell_11.StringCellValue)) + else if (currentCell_21.StringCellValue == "正常" || + string.IsNullOrEmpty(currentCell_11.StringCellValue)) { workorder.Priority = 1; @@ -941,6 +970,7 @@ namespace DOAN.Service.MES.product //18备注 NPOI.SS.UserModel.ICell currentCell_012 = currentRow.GetCell(18); workorder.Remark01 = currentCell_012?.StringCellValue; + #endregion @@ -960,12 +990,15 @@ namespace DOAN.Service.MES.product int index = (row - 3); int flowNum = index + - Convert.ToInt16(MaxWorkorder.Workorder.Substring(MaxWorkorder.Workorder.Length - 3, 3)); + Convert.ToInt16( + MaxWorkorder.Workorder.Substring(MaxWorkorder.Workorder.Length - 3, 3)); - //workorder.Workorder = dateValue.ToString("yyyyMMdd") + "_" + workorder.GroupCode + "_" + workorder.RouteCode + "_" + flowNum.ToString("000"); + //workorder.Workorder = dateValue.ToString("yyyyMMdd") + "_" + workorder.GroupCode + "_" + workorder.RouteCode + "_" + flowNum.ToString("000"); - string nickCode = ProductCodeList.Where(it => it.DictLabel == workorder.productionCode).Select(it => it.DictValue).FirstOrDefault(); - workorder.Workorder = dateValue.ToString("yyyyMMdd") + "_" + workorder.RouteCode + workorder.GroupCode + "_" + nickCode + "_" + index.ToString("000"); + string nickCode = ProductCodeList.Where(it => it.DictLabel == workorder.productionCode) + .Select(it => it.DictValue).FirstOrDefault(); + workorder.Workorder = dateValue.ToString("yyyyMMdd") + "_" + workorder.RouteCode + + workorder.GroupCode + "_" + nickCode + "_" + index.ToString("000"); workorder.Sort = index * 10 + Convert.ToInt16(MaxWorkorder.Sort); @@ -988,6 +1021,7 @@ namespace DOAN.Service.MES.product } + UseTran2(() => { @@ -1018,12 +1052,12 @@ namespace DOAN.Service.MES.product public List GetMaterialInfo(BaseMaterialListQueryDto5 parm) { var predicate = Expressionable.Create() - .OrIF(!string.IsNullOrEmpty(parm.Name_or_Code), it => it.Name.Contains(parm.Name_or_Code)) - .OrIF(!string.IsNullOrEmpty(parm.Name_or_Code), it => it.Code.Contains(parm.Name_or_Code)) - ; + .OrIF(!string.IsNullOrEmpty(parm.Name_or_Code), it => it.Name.Contains(parm.Name_or_Code)) + .OrIF(!string.IsNullOrEmpty(parm.Name_or_Code), it => it.Code.Contains(parm.Name_or_Code)) + ; return Context.Queryable() - .Where(predicate.ToExpression()).Take(20).ToList(); + .Where(predicate.ToExpression()).Take(20).ToList(); } @@ -1035,16 +1069,16 @@ namespace DOAN.Service.MES.product public List GetCustomInfo(BaseCustomQueryDto2 parm) { var predicate = Expressionable - .Create() - .AndIF( - !string.IsNullOrEmpty(parm.CustomNo), - it => it.CustomNo.Contains(parm.CustomNo) - ) - //.AndIF( - // !string.IsNullOrEmpty(parm.CustomNo), - // it => it.CustomName.Contains(parm.CustomNo) - //) - .And(it => it.Status == 1); + .Create() + .AndIF( + !string.IsNullOrEmpty(parm.CustomNo), + it => it.CustomNo.Contains(parm.CustomNo) + ) + //.AndIF( + // !string.IsNullOrEmpty(parm.CustomNo), + // it => it.CustomName.Contains(parm.CustomNo) + //) + .And(it => it.Status == 1); var response = Context.Queryable() .Where(predicate.ToExpression()) @@ -1120,22 +1154,24 @@ namespace DOAN.Service.MES.product { List workOrderBoms = new List(); List baseMaterialBoms = null; - ProWorkorder proworkorder = Context.Queryable().Where(it => it.Workorder == workorder_num).First(); + ProWorkorder proworkorder = + Context.Queryable().Where(it => it.Workorder == workorder_num).First(); if (proworkorder != null) { - baseMaterialBoms = Context.Queryable().Where(it => it.InvCode == proworkorder.productionCode).ToList(); + baseMaterialBoms = Context.Queryable() + .Where(it => it.InvCode == proworkorder.productionCode).ToList(); if (baseMaterialBoms != null && baseMaterialBoms - .Count() > 0) + .Count() > 0) { foreach (var item in baseMaterialBoms) { WorkOrderBom objectMaterial = new WorkOrderBom(); - objectMaterial.SubInvCode=item.SubInvCode; + objectMaterial.SubInvCode = item.SubInvCode; objectMaterial.SubInvName = item.SubInvName; - objectMaterial.Iusequantity_Single = item.Iusequantity; - float num = float.Parse(item.Iusequantity) * proworkorder.PlanNum.Value; + objectMaterial.Iusequantity_Single = item.Iusequantity; + float num = float.Parse(item.Iusequantity) * proworkorder.PlanNum.Value; objectMaterial.Iusequantity_All = num.ToString(); objectMaterial.BOMVersion = item.BOMVersion; workOrderBoms.Add(objectMaterial); @@ -1169,7 +1205,7 @@ namespace DOAN.Service.MES.product logObj.Log = log; logObj.ChangeTime = DateTime.Now; logObj.Operator = Operator; - logObj.ChangeTime= DateTime.Now; + logObj.ChangeTime = DateTime.Now; logObj.CreatedBy = Operator; @@ -1186,24 +1222,28 @@ namespace DOAN.Service.MES.product { var predicate = Expressionable.Create() - .AndIF(!string.IsNullOrEmpty(query.productionName), it => it.productionName.Contains(query.productionName)) - .AndIF(!string.IsNullOrEmpty(query.productionCode), it => it.productionCode.Contains(query.productionCode)) - .AndIF(!string.IsNullOrEmpty(query.RouteCode), it => it.RouteCode == query.RouteCode) - .AndIF(!string.IsNullOrEmpty(query.GroupCode), it => it.GroupCode == query.GroupCode) - .AndIF(query.WorkorderDate != null && query.WorkorderDate[0] > DateTime.MinValue, it => it.WorkorderDate >= query.WorkorderDate[0]) - .AndIF(query.WorkorderDate != null && query.WorkorderDate[1] > DateTime.MinValue, it => it.WorkorderDate <= query.WorkorderDate[1]) - .AndIF(query.Status>-1,it=>it.Status==query.Status) + .AndIF(!string.IsNullOrEmpty(query.productionName), + it => it.productionName.Contains(query.productionName)) + .AndIF(!string.IsNullOrEmpty(query.productionCode), + it => it.productionCode.Contains(query.productionCode)) + .AndIF(!string.IsNullOrEmpty(query.RouteCode), it => it.RouteCode == query.RouteCode) + .AndIF(!string.IsNullOrEmpty(query.GroupCode), it => it.GroupCode == query.GroupCode) + .AndIF(query.WorkorderDate != null && query.WorkorderDate[0] > DateTime.MinValue, + it => it.WorkorderDate >= query.WorkorderDate[0]) + .AndIF(query.WorkorderDate != null && query.WorkorderDate[1] > DateTime.MinValue, + it => it.WorkorderDate <= query.WorkorderDate[1]) + .AndIF(query.Status > -1, it => it.Status == query.Status) ; var query2 = Queryable() - .Where(predicate.ToExpression()); + .Where(predicate.ToExpression()); return Context.Queryable(query2).LeftJoin((q, r) => q.Workorder == r.FkWorkorder) - .Select((q, r) => new ProWorkorderTranceProgressDto() - { - PlanNum = q.PlanNum, - ActualNum = r.FinishedNum, - }, true).ToPage_NO_Convert(query); + .Select((q, r) => new ProWorkorderTranceProgressDto() + { + PlanNum = q.PlanNum, + ActualNum = r.FinishedNum, + }, true).ToPage_NO_Convert(query); } @@ -1218,7 +1258,8 @@ namespace DOAN.Service.MES.product UseTran2(() => { - int sortNum = Context.Queryable().Where(it => it.Id == next_id).Select(it => it.Sort.Value).First(); + int sortNum = Context.Queryable().Where(it => it.Id == next_id) + .Select(it => it.Sort.Value).First(); Context.Updateable() .Where(it => it.WorkorderDate == proWorkorder.WorkorderDate) .Where(it => it.Sort >= sortNum) @@ -1237,7 +1278,8 @@ namespace DOAN.Service.MES.product { DateTime dateOnly = proWorkorder.WorkorderDate.Value.Date; - int sortNum = Context.Queryable().Where(it => it.WorkorderDate == dateOnly).Max(it => it.Sort.Value); + int sortNum = Context.Queryable().Where(it => it.WorkorderDate == dateOnly) + .Max(it => it.Sort.Value); proWorkorder.Sort = sortNum + 10; @@ -1257,8 +1299,69 @@ namespace DOAN.Service.MES.product } + + public async Task<(string, Stream)> ExportPDFByQuestPDFDemo(string[] workorderArray) + { + + var dataList = Context.Queryable().Where(it => workorderArray.Contains(it.Workorder)) + .ToList(); + if (dataList.Count() == 0) + { + return (null, null); + } + + var ms = new MemoryStream(); + Settings.License = LicenseType.Community; + Settings.CheckIfAllTextGlyphsAreAvailable = false; + var document = QuestPDF.Fluent.Document.Create(container => + { + for (int i = 0; i < dataList.Count(); i++) + { + byte[] imageBytes= PrintHelper.CreateBarCode(dataList[i].Workorder, 30, 30); + container.Page(page => + { + page.Margin(20); + page.Content().Column(column => + { + + column.Item().Table(table => + { + // Define columns + table.ColumnsDefinition(columns => + { + columns.RelativeColumn(); // Column 1 + columns.RelativeColumn(); // Column 2 + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + columns.RelativeColumn(); + }); + table.Cell().Row(1).ColumnSpan(8).Image(imageBytes); + + table.Cell().Row(2).Column(2).Text("编号"); + table.Cell().Row(2).Column(6).Text(dataList[i].Workorder); + table.Cell().Row(3).Column(2).Text("炉号"); + table.Cell().Row(3).Column(6).Text(dataList[i].StoveCode); + table.Cell().Row(4).Column(2).Text("数量"); + table.Cell().Row(4).Column(6).Text(dataList[i].PlanNum); + + }); + }); + }); + } + }); + document.GeneratePdf(ms); + ms.Seek(0, SeekOrigin.Begin); + var fileName = $"工单({DateTime.Now.ToString("yyyyMMdd")}).pdf"; + return new(fileName, ms); + } + } + + } \ No newline at end of file diff --git a/Infrastructure/CustomException/CustomException.cs b/Infrastructure/CustomException/CustomException.cs index 90f4d57..f163b4f 100644 --- a/Infrastructure/CustomException/CustomException.cs +++ b/Infrastructure/CustomException/CustomException.cs @@ -20,6 +20,7 @@ namespace Infrastructure public CustomException(string msg) : base(msg) { + Msg = msg+"为空,检查前端"; } public CustomException(int code, string msg) : base(msg) { diff --git a/Infrastructure/DOAN.Infrastructure.csproj b/Infrastructure/DOAN.Infrastructure.csproj index 95d02c3..2810148 100644 --- a/Infrastructure/DOAN.Infrastructure.csproj +++ b/Infrastructure/DOAN.Infrastructure.csproj @@ -14,6 +14,7 @@ + @@ -21,6 +22,8 @@ + + diff --git a/Infrastructure/Helper/PrintHelper.cs b/Infrastructure/Helper/PrintHelper.cs new file mode 100644 index 0000000..75c3c6f --- /dev/null +++ b/Infrastructure/Helper/PrintHelper.cs @@ -0,0 +1,52 @@ + +using System.Drawing; +using System.Drawing.Imaging; +using System.DrawingCore; +using System.DrawingCore.Imaging; +using ZXing; +using ZXing.Common; + + + +namespace DOAN.Infrastructure.Helper; + +public class PrintHelper +{ + /// + /// 打印条形码 + /// + /// + /// + /// + /// + public static byte[] CreateBarCode(string message, int width, int height) + { + if (string.IsNullOrWhiteSpace(message)) + { + return null; + } + var w = new ZXing.OneD.Code128Writer(); + BitMatrix b = w.encode(message, BarcodeFormat.CODE_128, width, height); + var zzb = new ZXing.ZKWeb.BarcodeWriter(); + zzb.Options = new EncodingOptions() + { + Margin = 3, + PureBarcode = false + }; + + Bitmap b2 = zzb.Write(b); + + + using (var ms = new System.IO.MemoryStream()) + { + b2.Save(ms, ImageFormat.Png); + var bytes = ms.ToArray(); + + return bytes; + } + + + } + + +} \ No newline at end of file