From 3ed55b8b2e11a0c93aaab491b5d3b3cd38766c11 Mon Sep 17 00:00:00 2001 From: wet Date: Sun, 26 Jun 2022 15:44:07 +0800 Subject: [PATCH] ISF --- ams/djy.IService/Ams/IAmsService.cs | 4 + ams/djy.IService/Isf/IIsfService.cs | 2 +- ams/djy.Model/Ams/AMS_AddrTemplate.cs | 56 ++++++ ams/djy.Service/Ams/AmsService.cs | 168 +++++++++++++++--- ams/djy.Service/ISF/IsfService.cs | 10 +- .../Controllers/AMS/AmsController.cs | 160 +++++------------ .../Controllers/ISF/IsfController.cs | 4 +- ams/djy.WebApi/logo.png | Bin 0 -> 16034 bytes 8 files changed, 254 insertions(+), 150 deletions(-) create mode 100644 ams/djy.Model/Ams/AMS_AddrTemplate.cs create mode 100644 ams/djy.WebApi/logo.png diff --git a/ams/djy.IService/Ams/IAmsService.cs b/ams/djy.IService/Ams/IAmsService.cs index dd852bd..e8e9e65 100644 --- a/ams/djy.IService/Ams/IAmsService.cs +++ b/ams/djy.IService/Ams/IAmsService.cs @@ -54,6 +54,10 @@ namespace djy.Paas.IService List GetCodeCity(string provinceCode); + + string SaveTemplate(AMS_AddrTemplate dto, string userid); + + List GetTemplate(string companyid, string type,string TemPlateName); byte[] PDF(string GID); } diff --git a/ams/djy.IService/Isf/IIsfService.cs b/ams/djy.IService/Isf/IIsfService.cs index 5dd729a..0784913 100644 --- a/ams/djy.IService/Isf/IIsfService.cs +++ b/ams/djy.IService/Isf/IIsfService.cs @@ -43,7 +43,7 @@ namespace djy.IService.Isf /// 获取模板 /// /// - List GetTemplate(string companyid, string CompanyType, string InFoType); + List GetTemplate(string companyid, string CompanyType, string InFoType,string TemPlateName); /// diff --git a/ams/djy.Model/Ams/AMS_AddrTemplate.cs b/ams/djy.Model/Ams/AMS_AddrTemplate.cs new file mode 100644 index 0000000..d297a8a --- /dev/null +++ b/ams/djy.Model/Ams/AMS_AddrTemplate.cs @@ -0,0 +1,56 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System; +using System.ComponentModel.DataAnnotations; + +namespace djy.Model.Ams +{ + [JsonObject(MemberSerialization.OptIn), Table(Name = "AMS_AddrTemplate", DisableSyncStructure = true)] + public class AMS_AddrTemplate + { + [MaxLength(50)] + public string GID { get; set; } + + [MaxLength(50)] + public string TemPlateName { get; set; } + [MaxLength(50)] + public string Type { get; set; } + + [MaxLength(50)] + public string Name { get; set; } + + [MaxLength(200)] + public string ADDR { get; set; } + + [MaxLength(50)] + public string Country { get; set; } + + [MaxLength(50)] + public string CountryCode { get; set; } + + [MaxLength(50)] + public string City { get; set; } + + + public bool? IsDel { get; set; } + + [MaxLength(50)] + public string UserID { get; set; } + + [MaxLength(50)] + public string UserName { get; set; } + + [MaxLength(50)] + public string CompID { get; set; } + + [MaxLength(100)] + public string CompName { get; set; } + + + public DateTime CreateTime { get; set; } + + + public DateTime? LastUpdate { get; set; } + + } +} diff --git a/ams/djy.Service/Ams/AmsService.cs b/ams/djy.Service/Ams/AmsService.cs index fd57c65..0060b63 100644 --- a/ams/djy.Service/Ams/AmsService.cs +++ b/ams/djy.Service/Ams/AmsService.cs @@ -823,34 +823,102 @@ namespace djy.Service.Ams Document document = new Document(PageSize.A4); //指定字体文件,IDENTITY_H:支持中文 BaseFont customfont = BaseFont.CreateFont(@"C:\Windows\Fonts\MSYH.TTC,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); - var baseFont = new Font(customfont, 12); + var Fonttable = new Font(customfont, 12); + Font font = new Font(customfont, 14); + Font datefont = new Font(customfont, 9); MemoryStream baos = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, baos); document.Open(); - document.NewPage(); - //配置中文 - - //定义标题 - PdfPTable tableRow_1 = new PdfPTable(1); //生成只有一列的行数据 - tableRow_1.DefaultCell.Border = Rectangle.NO_BORDER; //无边框 - tableRow_1.DefaultCell.MinimumHeight = 40f; //高度 - float[] headWidths_1 = new float[] { 500f }; //宽度 - tableRow_1.SetWidths(headWidths_1); - - var Row_1_Cell_1 = new PdfPCell(new Paragraph("AMS", baseFont));//文件名以及标题名称 - Row_1_Cell_1.HorizontalAlignment = Element.ALIGN_CENTER;//居中 - tableRow_1.AddCell(Row_1_Cell_1); - document.Add(tableRow_1); - document.NewPage(); - int total = 2; //总列数 - for (int i = 0; i < 1; i++) - { - PdfPTable tableRow_2 = new PdfPTable(total); - var Row_2_Cell_1 = new PdfPCell(new Paragraph("3333", baseFont)); - tableRow_2.AddCell(Row_2_Cell_1); - document.Add(tableRow_2); - } + ///获取数据源 + var houselist = DbBus.Get(DbList.AMSCenter).Select().Where(x => x.PID == GID).ToList(); + var masterlist = DbBus.Get(DbList.AMSCenter).Select().Where(x => x.GID == GID).ToOne(); + var cARRIERIDList = DbBus.Get(DbList.Common).Select().Where(map => map.Module == "AMS").ToList(); + if (houselist!=null&& masterlist!=null) { + for (int i = 0; i < houselist.Count(); i++) + { + + string heardText = "NIAV" + houselist[i].HBLNo + " ISF INFORMATION"; + Paragraph heardTexts = new Paragraph(heardText, font); + heardTexts.IndentationLeft = 150; + heardTexts.IndentationRight = 130; + document.Add(heardTexts); + document.Add(new Paragraph("\r"));//换行 + PdfPTable table = new PdfPTable(2); //生成只有2列的行数据 + table.DefaultCell.Border = Rectangle.NO_BORDER; //无边框 + table.DefaultCell.MinimumHeight = 40f; //高度 + float[] widths = new float[] { 100f,200f }; //宽度 + table.SetWidths(widths); + + var Row_1 = new PdfPCell(new Paragraph("AMS B/L NO.", Fonttable)); + Row_1.HorizontalAlignment = Element.ALIGN_RIGHT;//靠右 + table.AddCell(Row_1); + + var Row_2 = new PdfPCell(new Paragraph("NIAV"+houselist[i].HBLNo, Fonttable)); + Row_2.HorizontalAlignment = Element.ALIGN_LEFT;//靠左 + table.AddCell(Row_2); + + + var Row_3 = new PdfPCell(new Paragraph("HNL.NO.", Fonttable)); + Row_3.HorizontalAlignment = Element.ALIGN_RIGHT;//靠右 + table.AddCell(Row_3); + + + var Row_4 = new PdfPCell(new Paragraph(houselist[i].HBLNo, Fonttable)); + Row_4.HorizontalAlignment = Element.ALIGN_LEFT;//靠左 + table.AddCell(Row_4); + + var Row_5 = new PdfPCell(new Paragraph("HNL SCAC CODE.", Fonttable)); + Row_5.HorizontalAlignment = Element.ALIGN_RIGHT;//靠右 + table.AddCell(Row_5); + + var Row_6 = new PdfPCell(new Paragraph("NIAV", Fonttable)); + Row_6.HorizontalAlignment = Element.ALIGN_LEFT;//靠左 + table.AddCell(Row_6); + + var Row_7 = new PdfPCell(new Paragraph("MBL NO.", Fonttable)); + Row_7.HorizontalAlignment = Element.ALIGN_RIGHT;//靠右 + table.AddCell(Row_7); + + + var Row_8 = new PdfPCell(new Paragraph(cARRIERIDList.Where(x => x.Code == masterlist.CARRIERID).Select(x => x.MapCode).FirstOrDefault() + masterlist.MBLNO, Fonttable)); + Row_8.HorizontalAlignment = Element.ALIGN_LEFT;//靠左 + table.AddCell(Row_8); + var Row_9= new PdfPCell(new Paragraph("MBL SCAC CODE.", Fonttable)); + Row_9.HorizontalAlignment = Element.ALIGN_RIGHT;//靠右 + table.AddCell(Row_9); + + + var Row_0 = new PdfPCell(new Paragraph(cARRIERIDList.Where(x => x.Code == masterlist.CARRIERID).Select(x => x.MapCode).FirstOrDefault(), Fonttable)); + Row_0.HorizontalAlignment = Element.ALIGN_LEFT;//靠左 + table.AddCell(Row_0); + + document.Add(table); + + + string dateText = "DATE PRINTED:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm"); + Paragraph dateTexts = new Paragraph(dateText, datefont); + dateTexts.IndentationLeft = 380f; + document.Add(dateTexts); + document.Add(new Paragraph("\r"));//换行 + + + + Image image = Image.GetInstance(@"F:\DJY.Ams\djyweb_ams\ams\djy.WebApi\logo.png"); + image.ScalePercent(10f); + //设置图片的宽高 + image.ScaleAbsolute(180f, 66f); + image.Alignment = Element.ALIGN_CENTER; + //设置图片具体位置 PDF左下角为原点 + image.SetAbsolutePosition(400f, 20f);//出现在屏幕左下角 图片左下角做为锚点 + document.Add(image); + + if ((i+1)%4==0) { + document.NewPage(); + } + } + + } document.Close(); writer.Close(); return baos.GetBuffer(); @@ -859,8 +927,58 @@ namespace djy.Service.Ams - + #endregion + + + #region 保存模板 + public string SaveTemplate(AMS_AddrTemplate dto, string userid) + { + string guid = ""; + var user = DbBus.Get(DbList.djydb).Select().Where(w => w.GID == userid).ToOne(); + if (dto.GID.IsNull()) + { + + AMS_AddrTemplate template = dto.MapTo(); + template.CreateTime = DateTime.Now; + template.LastUpdate = DateTime.Now; + template.GID = Guid.NewGuid().ToString("N"); + template.UserID = user.GID; + template.UserName = user.SHOWNAME; + template.CompID = user.CompId; + template.CompName = user.COMNAME; + template.IsDel = false; + DbBus.Get(DbList.AMSCenter).Insert(template).ExecuteAffrows(); + guid = template.GID; + } + return guid; + } + + + + #endregion + #region 获取模板 + + + public List GetTemplate(string companyid, string type, string TemPlateName) + { + try + { + var List = DbBus.Get(DbList.Common).Select(). + Where(x => x.IsDel == false || x.IsDel == null). + WhereIf(companyid != "", x => x.CompID == companyid). + WhereIf(type != "", x => x.Type == type). + WhereIf(TemPlateName != "", x => TemPlateName.Contains(x.TemPlateName)). + ToList(); + return List; + } + catch (Exception e) + { + throw; + } + } + + #endregion } } diff --git a/ams/djy.Service/ISF/IsfService.cs b/ams/djy.Service/ISF/IsfService.cs index 504f633..2c76f4a 100644 --- a/ams/djy.Service/ISF/IsfService.cs +++ b/ams/djy.Service/ISF/IsfService.cs @@ -167,11 +167,17 @@ namespace djy.Service.ISF #region 获取模板 - public List GetTemplate(string companyid, string CompanyType, string InFoType) + public List GetTemplate(string companyid, string CompanyType, string InFoType,string TemPlateName) { try { - var List = DbBus.Get(DbList.Common).Select().WhereIf(companyid != "", x => x.CompID==companyid&& (x.IsDel == false || x.IsDel == null)&&x.CompanyType==CompanyType&&x.InFoType==InFoType).ToList(); + var List = DbBus.Get(DbList.Common).Select(). + Where(x=> x.IsDel == false || x.IsDel == null). + WhereIf(companyid != "", x => x.CompID==companyid). + WhereIf(CompanyType != "", x => x.CompanyType == CompanyType). + WhereIf(InFoType != "", x => x.InFoType == InFoType). + WhereIf(TemPlateName != "", x => TemPlateName.Contains(x.TemPlateName)). + ToList(); return List; } catch (Exception e) diff --git a/ams/djy.WebApi/Controllers/AMS/AmsController.cs b/ams/djy.WebApi/Controllers/AMS/AmsController.cs index ec14814..b823c4f 100644 --- a/ams/djy.WebApi/Controllers/AMS/AmsController.cs +++ b/ams/djy.WebApi/Controllers/AMS/AmsController.cs @@ -336,133 +336,53 @@ namespace djy_AmsApi.Controllers byte[] bytes = ser.PDF(Gid); return File(bytes, "application/octet-stream"); } + #endregion - [HttpGet("ExportPDF1")] - public FileResult ExportSignARPAPdf() + #region 获取模板 + [HttpGet("GetTemplate")] + public Response> GetTemplate(string type, string TemPlateName=null) { - //定义一个Document,并设置页面大小为A4,竖向 - Document doc = new Document(PageSize.A4, 72, 72, 60, 0); - - - MemoryStream baos = new MemoryStream(); - - - PdfWriter writer =PdfWriter.GetInstance(doc, baos); - doc.Open(); - - #region 创建字体 - Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); - - BaseFont baseFT = BaseFont.CreateFont("C:\\Windows\\Fonts\\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//获取系统的字体 - - Font font = new Font(baseFT, 10); //写入一个段落, Paragraph - Font title = new Font(baseFT, 16); - Font bold = new Font(baseFT, 10, 1); //字体加粗 - Font italics = new Font(baseFT, 10, 2); //字体斜体 - Font underline = new Font(baseFT, 10, 4); //下划线 - Font boldAndItalics = new Font(Font.TIMES_ROMAN, 11f, Font.BOLD | Font.ITALIC, BaseColor.Black); - - #endregion - - #region 文本数据 - string heardText = "Restricted Project Information Acknowledgement"; - - string text = "You, the undersigned, are involved in the development of a highly confidential Apple project code-named. The following guidelines are intended to protect the secrecy of the project. Please acknowledge that you have read and agree to follow the guidelines by signing below."; - - List clauseList = new List(true, 20); - clauseList.Add(new ListItem("Only refer to Apple by the code-name provided by your employer.\r\r", font)); - clauseList.Add(new ListItem("Only refer to the project by the code - name provided by your employer.\r\r", font)); - clauseList.Add(new ListItem("Do not disclose any confidential information related to the project or any confidential prototypes, drawings, images, or other materials to anyone other than those that have a need to know in connection with the project and who have been approved by Apple.To determine whether someone has been approved, please contact your project manager.\r\r", font)); - clauseList.Add(new ListItem("Comply with the Apple Security Requirements and any confidentiality agreements related to the project.Ask your project manager if you do not know what these requirements are.\r\r", font)); - clauseList.Add(new ListItem("Your obligation to maintain the confidentiality of the project continues even after your work on the project or your service to your employer has ended.\r\r", font)); - clauseList.Add(new ListItem("Unauthorized use or disclosure of confidential information or prototypes related to the project is a violation of the confidentiality agreement between Apple and your employer and may be a violation of the law.\r\r", font)); - - string agreedText = "Acknowledged and agreed:"; - - string signature = "Signature: ___________________________________\r\r"; - string name = " Name: ___________________________________\r\r"; - string titleDown = " Title: ___________________________________\r\r"; - string companyUs = " Company: Shenzhen INCUBE Automation Co., Ltd.\r\r"; - string companyCh = "深圳市智立方自动化设备有限公司 "; - string date = "\r Date: ___________________________________\r\r"; - - - - PdfPTable tableRow_2 = new PdfPTable(2); - var Row_2_Cell_1 = new PdfPCell(new Phrase("3333", font)); - tableRow_2.AddCell(Row_2_Cell_1); - - - - - #endregion - - - #region 给文本添加字体 - Paragraph heardTexts = new Paragraph(heardText, title); - Paragraph texts = new Paragraph(text, font); - Paragraph agreed = new Paragraph(agreedText, boldAndItalics); - Paragraph signatures = new Paragraph(signature, font); - Paragraph names = new Paragraph(name, font); - Paragraph titleDowns = new Paragraph(titleDown, font); - Paragraph companyUss = new Paragraph(companyUs, font); - Paragraph companyChs = new Paragraph(companyCh, underline); - Paragraph dates = new Paragraph(date, font); - - #endregion - - - #region 缩进 - heardTexts.IndentationLeft = 20; - heardTexts.IndentationRight = 20; - - texts.IndentationLeft = 20; - texts.IndentationRight = 20; - - clauseList.IndentationLeft = 40; - clauseList.IndentationRight = 40; - - agreed.IndentationLeft = 20; - agreed.IndentationRight = 20; - - signatures.IndentationLeft = 70; - names.IndentationLeft = 70; - titleDowns.IndentationLeft = 70; - companyUss.IndentationLeft = 70; - companyChs.IndentationLeft = 130; - dates.IndentationLeft = 70; - #endregion - + var result = new Response>(); + try + { + if (GetLoginCompId == null) + { + result.Code = 401; + result.Message = "登录过期,请重新登录!"; + return result; + } + result.Result = ser.GetTemplate("9f3b3526-4dd4-4997-b974-1f2adb2793c7", type, TemPlateName); + } + catch (Exception ex) + { + result.Code = 500; + result.Message = ex.InnerException?.Message ?? ex.Message; + } - #region 文本添加到PDF - doc.Add(heardTexts); - doc.Add(new Paragraph("\r"));//换行 - doc.Add(texts); - doc.Add(new Paragraph("\r"));//换行 - doc.Add(clauseList); - doc.Add(agreed); - doc.Add(new Paragraph("\r"));//换行 - doc.Add(signatures); - doc.Add(names); - doc.Add(titleDowns); - doc.Add(companyUss); - doc.Add(companyChs); - doc.Add(dates); - doc.Add(new Paragraph("\r"));//换行 - - #endregion - - //关闭document - doc.Close(); - writer.Close(); - return File(baos.GetBuffer(), "application/octet-stream"); + return result; } #endregion + #region 保存模板 + [HttpPost("SaveTemplate")] + public Response SaveTemplate(AMS_AddrTemplate Dto) + { + var result = new Response(); + //if (GetLoginId == null) + //{ + // result.Code = 401; + // result.Message = "登录过期,请重新登录!"; + //} + if (Dto == null) + { + result.Code = 500; + result.Message = "无效数据!"; + } + result.data = ser.SaveTemplate(Dto, "d85fd590-d9f6-4410-93a1-f6fac77b606e"); - - - + return result; + } + #endregion } } diff --git a/ams/djy.WebApi/Controllers/ISF/IsfController.cs b/ams/djy.WebApi/Controllers/ISF/IsfController.cs index 6c18473..d11bc9b 100644 --- a/ams/djy.WebApi/Controllers/ISF/IsfController.cs +++ b/ams/djy.WebApi/Controllers/ISF/IsfController.cs @@ -85,7 +85,7 @@ namespace djy_AmsApi.Controllers.ISF #region 获取模板 [HttpGet("GetTemplate")] - public Response> GetTemplate(string InFoType, string CompanyType) + public Response> GetTemplate(string InFoType, string CompanyType,string TemPlateName=null) { var result = new Response>(); try @@ -96,7 +96,7 @@ namespace djy_AmsApi.Controllers.ISF result.Message = "登录过期,请重新登录!"; return result; } - result.Result = ser.GetTemplate("9f3b3526-4dd4-4997-b974-1f2adb2793c7", CompanyType, InFoType); + result.Result = ser.GetTemplate("9f3b3526-4dd4-4997-b974-1f2adb2793c7", CompanyType, InFoType, TemPlateName); } catch (Exception ex) { diff --git a/ams/djy.WebApi/logo.png b/ams/djy.WebApi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d63efe2aac4ad9c2ca9e440f4e4108d9351a4e37 GIT binary patch literal 16034 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 KZx!N(zyA+q-xeSM literal 0 HcmV?d00001