FxBaseBarCodeCore.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. using PdfSharp.Drawing;
  2. using PdfSharp.Pdf;
  3. using SixLabors.ImageSharp.Formats.Png;
  4. using SixLabors.ImageSharp.PixelFormats;
  5. using WMS.Info;
  6. using WMS.Util;
  7. using ZXing;
  8. using ZXing.Common;
  9. using ZXing.QrCode;
  10. namespace WMS.Core.ServiceCore.FeiXu
  11. {
  12. public class FxBaseBarCodeCore
  13. {
  14. /// <summary>
  15. /// 获取列表数据
  16. /// <summary>
  17. /// <returns></returns>
  18. public IEnumerable<BASE_BARCODE> GetList(string keyword)
  19. {
  20. try
  21. {
  22. return SysDbCore.GetDbCtx().Queryable<BASE_BARCODE>().WhereIF(!keyword.IsEmpty(), it => it.F_barCode.Contains(keyword)).ToList();
  23. }
  24. catch (Exception ex)
  25. {
  26. throw ex;
  27. }
  28. }
  29. /// <summary>
  30. /// 获取分页数据
  31. /// <summary>
  32. /// <returns></returns>
  33. public IEnumerable<BASE_BARCODE> GetPageList(string queryJson, Pagination pagination)
  34. {
  35. try
  36. {
  37. var db = SysDbCore.GetDbCtx().Queryable<BASE_BARCODE>();
  38. int count = 0;
  39. var queryParam = queryJson.ToJObject();
  40. //单据日期
  41. if (!queryParam["Btime"].IsEmpty() && !queryParam["Etime"].IsEmpty())
  42. {
  43. db.Where(ord => ord.F_addTime >= queryParam["Btime"].ToDate() && ord.F_addTime <= queryParam["Etime"].ToDate());
  44. }
  45. if (!queryParam["keyword"].IsEmpty())
  46. {
  47. string matNo = queryParam["keyword"].ToString();
  48. db.Where(ord => ord.F_barCode.Contains(matNo));
  49. }
  50. if (!queryParam["F_addUserNo"].IsEmpty())
  51. {
  52. string userNo = queryParam["trayNo"].ToString();
  53. db.Where(ord => ord.F_addUserNo.Contains(userNo));
  54. }
  55. if (!queryParam["F_barType"].IsEmpty())
  56. {
  57. int barType = FuncStr.NullToInt(queryParam["F_barType"]);
  58. db.Where(ord => ord.F_barType == barType);
  59. }
  60. List<BASE_BARCODE> list = null;
  61. if (pagination.sord.ToUpper() == "ASC")
  62. {
  63. list = db.OrderBy(pagination.sidx).ToPageList(pagination.page, pagination.rows, ref count);
  64. }
  65. else
  66. {
  67. string orderstr = pagination.sidx + " desc";
  68. list = db.OrderBy(orderstr).ToPageList(pagination.page, pagination.rows, ref count);
  69. }
  70. pagination.records = count;
  71. return list;
  72. }
  73. catch (Exception ex)
  74. {
  75. throw ex;
  76. }
  77. }
  78. public void PrintBarCode(List<BASE_BARCODE> lstBaseCode, LoginUserInfo loginInfo)
  79. {
  80. using (var ctx = SysDbCore.GetDbCtx())
  81. {
  82. lstBaseCode.ForEach(code =>
  83. {
  84. code.F_printNumber += 1;
  85. code.F_printTime = DateTime.Now;
  86. code.F_printUserNo = loginInfo.UserNo;
  87. });
  88. ctx.Updateable(lstBaseCode).UpdateColumns(it => new { it.F_printNumber, it.F_printTime, it.F_printUserNo }).WhereColumns(it => it.F_no).ExecuteCommand();
  89. }
  90. }
  91. public string CreatePrintBarCodePDF(List<BASE_BARCODE> lstBaseCode, string path)
  92. {
  93. int Resolution = 300;//300 dpi high resolution of the barcode image
  94. var ssdocument = new PdfDocument();
  95. //Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document();
  96. foreach (var item in lstBaseCode)
  97. {
  98. var sspage = ssdocument.AddPage();
  99. if (item.F_barType == 1)
  100. {
  101. //BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.Code39Standard, item.F_barCode);
  102. //generator.Parameters.Resolution = Resolution;//set the barcode image resolution
  103. //var ssimage = generator.GenerateBarCodeImage();
  104. //MemoryStream imageStream = new MemoryStream();
  105. //generator.Save(imageStream, BarCodeImageFormat.Png);
  106. //imageStream.Position = 0;
  107. //var ximage = PdfSharp.Drawing.XImage.FromStream(imageStream);
  108. //DrawBarcodeImageFull(sspage, ximage);
  109. var writer = new ZXing.ImageSharp.BarcodeWriter<Rgba32>();
  110. writer.Format = BarcodeFormat.CODE_128;
  111. QrCodeEncodingOptions options = new QrCodeEncodingOptions();
  112. options.DisableECI = true;
  113. //设置内容编码
  114. options.CharacterSet = "UTF-8";
  115. //设置二维码的宽度和高度
  116. options.Width = 750;
  117. options.Height = 400;
  118. //设置二维码的边距,单位不是固定像素
  119. options.Margin = 1;
  120. writer.Options = options;
  121. //var ms = new MemoryStream();
  122. //using (var image = writer.Write(item.F_barCode))
  123. //{
  124. // image.SaveAsJpeg(ms);//保存于流
  125. //}
  126. var imagesharp = writer.WriteAsImageSharp<Rgba32>(item.F_barCode);
  127. var ms = new MemoryStream();
  128. imagesharp.Save(ms, new PngEncoder());
  129. ms.Position = 0;//设置位置
  130. var ximage = PdfSharp.Drawing.XImage.FromStream(ms);
  131. DrawQrCodeImageFull(sspage, ximage);
  132. }
  133. else
  134. {
  135. var writer = new ZXing.ImageSharp.BarcodeWriter<Rgba32>();
  136. writer.Format = BarcodeFormat.QR_CODE;
  137. QrCodeEncodingOptions options = new QrCodeEncodingOptions();
  138. options.DisableECI = true;
  139. //设置内容编码
  140. options.CharacterSet = "UTF-8";
  141. //设置二维码的宽度和高度
  142. options.Width = 500;
  143. options.Height = 500;
  144. //设置二维码的边距,单位不是固定像素
  145. options.Margin = 1;
  146. writer.Options = options;
  147. //var ms = new MemoryStream();
  148. //using (var image = writer.Write(item.F_barCode))
  149. //{
  150. // image.SaveAsJpeg(ms);//保存于流
  151. //}
  152. var imagesharp = writer.WriteAsImageSharp<Rgba32>(item.F_barCode);
  153. var ms = new MemoryStream();
  154. imagesharp.Save(ms, new PngEncoder());
  155. ms.Position = 0;//设置位置
  156. var ximage = PdfSharp.Drawing.XImage.FromStream(ms);
  157. DrawQrCodeImageFull(sspage, ximage);
  158. }
  159. }
  160. var dirPath = $@"DataFiles\{DateTime.Now.Year}\{DateTime.Now.Month}\{DateTime.Now.Day}\";
  161. DirFileUtil.CreateDir(@"wwwroot\"+dirPath);
  162. var filename = $"{DateTime.Now.Ticks}.pdf";
  163. var xxpath = $"{path}wwwroot\\{dirPath}{filename}";
  164. if (System.IO.File.Exists(xxpath))
  165. System.IO.File.Delete(xxpath);
  166. ssdocument.Save(xxpath);
  167. return @"\" + dirPath + filename;
  168. //using (var ctx = SysDbCore.GetDbCtx())
  169. //{
  170. // lstBaseCode.ForEach(code =>
  171. // {
  172. // code.F_printNumber += 1;
  173. // code.F_printTime = DateTime.Now;
  174. // code.F_printUserNo = loginInfo.UserNo;
  175. // });
  176. // ctx.Updateable(lstBaseCode).UpdateColumns(it => new { it.F_printNumber, it.F_printTime, it.F_printUserNo }).WhereColumns(it => it.F_no).ExecuteCommand();
  177. //}
  178. }
  179. public byte[] GenerateBarcode(string text)
  180. {
  181. var writer = new ZXing.ImageSharp.BarcodeWriter<Rgba32>()
  182. {
  183. Format = BarcodeFormat.CODE_128,
  184. Options = new EncodingOptions
  185. {
  186. Height = 500,
  187. Width =500
  188. }
  189. };
  190. var bitmap = writer.Write(text);
  191. using var stream = new MemoryStream();
  192. //bitmap.Save(stream, ImageFormat.Png);
  193. return stream.ToArray();
  194. }
  195. /// <summary>
  196. /// Draws image to pdf page
  197. /// </summary>
  198. /// <param name="image"></param>
  199. private static void DrawBarcodeImageFull(PdfPage page, XImage image)
  200. {
  201. page.Width = image.PixelWidth;
  202. page.Height = image.PixelHeight + 800;
  203. var gfx = XGraphics.FromPdfPage(page);
  204. //System.Drawing.Rectangle imageRect = new System.Drawing.Rectangle(leftBarcodePosition, topBarcodePosition, (image.Width * 72) / Resolution, (image.Height * 72) / Resolution);
  205. gfx.DrawImage(image, (image.PixelWidth - 20) / 3, 20, 300, (image.PixelHeight * 72) / 200);
  206. }
  207. /// <summary>
  208. /// Draws image to pdf page
  209. /// </summary>
  210. /// <param name="image"></param>
  211. private static void DrawQrCodeImageFull(PdfPage page, XImage image)
  212. {
  213. page.Width = image.PixelWidth + 600;
  214. page.Height = image.PixelHeight + 500;
  215. var gfx = XGraphics.FromPdfPage(page);
  216. //System.Drawing.Rectangle imageRect = new System.Drawing.Rectangle(leftBarcodePosition, topBarcodePosition, (image.Width * 72) / Resolution, (image.Height * 72) / Resolution);
  217. gfx.DrawImage(image, (image.PixelWidth - 20), 20, (image.PixelWidth * 72) / 200, (image.PixelHeight * 72) / 200);
  218. }
  219. /// <summary>
  220. /// 生成条码
  221. /// <summary>
  222. /// <returns></returns>
  223. public void generateBarCode(BarCodeRequest req, LoginUserInfo loginInfo)
  224. {
  225. try
  226. {
  227. using (var ctx = SysDbCore.GetDbCtx())
  228. {
  229. List<BASE_BARCODE> lstBarCode = new List<BASE_BARCODE>();
  230. for (int i = req.F_code; i < req.F_maxNum; i++)
  231. {
  232. string barCode = $"{req.F_prefix}{i.ToString().PadLeft(req.F_length - req.F_prefix.Length - req.F_suffix.Length, req.F_replenish)}{req.F_suffix}";
  233. lstBarCode.Add(new BASE_BARCODE
  234. {
  235. F_addTime = DateTime.Now,
  236. F_addUserNo = loginInfo.AppDeviceNo,
  237. F_barCode = barCode,
  238. F_barType = req.F_barType
  239. });
  240. }
  241. ctx.Insertable(lstBarCode).ExecuteCommand();
  242. }
  243. }
  244. catch (Exception ex)
  245. {
  246. throw ex;
  247. }
  248. }
  249. }
  250. }