| | |
| | | using Autofac.Core; |
| | | using OfficeOpenXml; |
| | | using Spire.Xls; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | | using WIDESEAWCS_Core.BaseServices; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_DTO.BasicInfo; |
| | | using WIDESEAWCS_IBasicInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | |
| | |
| | | { |
| | | private readonly IFormulaService _formulaService; |
| | | private readonly IFormulaDetailService _formulaDetailService; |
| | | private readonly IProcessInfoService _processInfoService; |
| | | private readonly IProcessInfoDetailService _processInfoDetailService; |
| | | |
| | | public ScanStationService(IRepository<Dt_ScanStation> BaseDal, |
| | | |
| | | public ScanStationService(IRepository<Dt_ScanStation> BaseDal, |
| | | IFormulaService formulaService, |
| | | IFormulaDetailService formulaDetailService |
| | | IFormulaDetailService formulaDetailService, |
| | | IProcessInfoService processInfoService, |
| | | IProcessInfoDetailService processInfoDetailService |
| | | ) : base(BaseDal) |
| | | { |
| | | _formulaService = formulaService; |
| | | _formulaDetailService = formulaDetailService; |
| | | _processInfoService = processInfoService; |
| | | _processInfoDetailService = processInfoDetailService; |
| | | } |
| | | |
| | | public IRepository<Dt_ScanStation> Repository => BaseDal; |
| | |
| | | var Error = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolError); |
| | | |
| | | if (Heart && !EMG && OnlineExecuting && !Error) |
| | | { |
| | | { |
| | | device.SetValue(W_PLCDBName.wboolAutoStart, true); |
| | | //æåä¿¡å· |
| | | device.SetValue(W_PLCDBName.wboolAutoPause, false); |
| | |
| | | var Heart = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolHeart); |
| | | var EMG = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolEMG); |
| | | var Error = device.GetValue<R_PLCDBName, bool>(R_PLCDBName.rboolError); |
| | | if(!device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolAutoStart)) |
| | | if (!device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolAutoStart)) |
| | | { |
| | | return WebResponseContent.Instance.Error("è®¾å¤æªå¯å¨"); |
| | | } |
| | |
| | | } |
| | | return WebResponseContent.Instance.Error("æ´æ°é误"); |
| | | } |
| | | catch (Exception ex) |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error("è·åæ°æ®å¤±è´¥"); |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// ä¸è½½æµç¨å¡ |
| | | /// </summary> |
| | | /// <param name="dt_ProcessInfo"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent ExportData(Dt_ScanStation dt_ScanStation) |
| | | { |
| | | |
| | | string fileName = $"{DateTime.Now.ToString("yyyyMMddHHssmm")}.xlsx"; |
| | | string templatePath = $"{AppDomain.CurrentDomain.BaseDirectory}ExprotTemplate\\åçµæºå¼¹æ§æ¯æä¿¡æ¯åæµç¨å¡.xlsx";//模æ¿è·¯å¾ |
| | | string savePath = $"{AppDomain.CurrentDomain.BaseDirectory}Download\\{fileName}";//ä¿åæä»¶è·¯å¾ |
| | | |
| | | using Stream templateStream = new FileStream(templatePath, FileMode.Open); |
| | | using Stream saveStream = new FileStream(savePath, FileMode.Create); |
| | | using ExcelPackage package = new ExcelPackage(saveStream, templateStream); |
| | | ExcelWorksheet worksheet = package.Workbook.Worksheets["æµç¨å¡"]; |
| | | Dt_Formula formula = _formulaService.Repository.QueryFirst(x => x.ProductCode == dt_ScanStation.StationEndProduct); |
| | | List<Dt_FormulaDetail> dt_FormulaDetails = _formulaDetailService.Repository.QueryData(x => x.FormulaId == formula.Id && x.IsScanned == 1).ToList(); |
| | | for (int i = dt_FormulaDetails.Count; i < 10; i++) |
| | | { |
| | | dt_FormulaDetails.Add(new Dt_FormulaDetail()); |
| | | } |
| | | |
| | | worksheet.Cells[3, 5].Value = dt_ScanStation.StationEndProduct;//æåç¼å· |
| | | worksheet.Cells[3, 17].Value = dt_ScanStation.LastProductSn.ObjToInt() - dt_ScanStation.FirstProductSn.ObjToInt() + 1;//æ°é; |
| | | worksheet.Cells[3, 29].Value = dt_ScanStation.FirstProductSn + "-" + dt_ScanStation.LastProductSn;//æµæ°´å· |
| | | worksheet.Cells[4, 5].Value = DateTime.Now.ToString("yyyy/MM/dd");//ç»è£
æ¥æ |
| | | worksheet.Cells[4, 17].Value = dt_ScanStation.AssembleUser;//ç»è£
人å |
| | | |
| | | int row = 7; |
| | | for (int j = 0; j < 5; j++) |
| | | { |
| | | worksheet.Cells[row, 1].Value = dt_FormulaDetails[j].ComponentName; |
| | | worksheet.Cells[row, 5].Value = dt_FormulaDetails[j].ComponentCode; |
| | | worksheet.Cells[row, 12].Value = dt_FormulaDetails[j].SupplierCode; |
| | | |
| | | worksheet.Cells[row, 19].Value = dt_FormulaDetails[j + 5].ComponentName; |
| | | worksheet.Cells[row, 23].Value = dt_FormulaDetails[j + 5].ComponentCode; |
| | | worksheet.Cells[row, 30].Value = dt_FormulaDetails[j + 5].SupplierCode; |
| | | row++; |
| | | } |
| | | |
| | | row = 13; |
| | | for (int j = 0; j < 4; j++) |
| | | { |
| | | worksheet.Cells[row + j, 12].Value = "â æ¯ â¡ å¦"; |
| | | worksheet.Cells[row + j, 30].Value = "â æ¯ â¡ å¦"; |
| | | } |
| | | worksheet.Cells[17, 12].Value = "â æ¯ â¡ å¦"; |
| | | worksheet.Cells[23, 5].Value = "â æ¯ â¡ å¦"; |
| | | |
| | | List<Dt_ProcessInfoDetail> dt_ProcessInfoDetails = _processInfoDetailService.Repository |
| | | .QueryData(x => x.ProductCode == dt_ScanStation.StationEndProduct |
| | | && x.ProductSn.CompareTo(dt_ScanStation.LastProductSn) >= 0 |
| | | && x.ProductSn.CompareTo(dt_ScanStation.LastProductSn) <= 0) |
| | | .OrderBy(x => x.CreateDate) |
| | | .ToList(); |
| | | row = 27; |
| | | ExcelRange baseStyleRow = worksheet.Cells[$"{row}:{row}"]; |
| | | foreach (var item in dt_ProcessInfoDetails) |
| | | { |
| | | if (row > 61) |
| | | { |
| | | var sourceRange = worksheet.Cells[row - 1, 1, row - 1, 36]; |
| | | var targetRange = worksheet.Cells[row, 1, row, 36]; |
| | | |
| | | // 1. å¤å¶åå¹¶è§åï¼åæé»è¾ä¿çï¼ |
| | | this.CopyCellMerge(worksheet, sourceRange, targetRange); |
| | | // 2. å¤å¶æ ·å¼ï¼å
¼å®¹ææEPPlusçæ¬ï¼ |
| | | targetRange.StyleID = sourceRange.StyleID; |
| | | // 3. 忥è¡é« |
| | | worksheet.Row(row).Height = worksheet.Row(row - 1).Height; |
| | | } |
| | | |
| | | worksheet.Cells[row, 1].Value = item.ProductSn; |
| | | worksheet.Cells[row, 7].Value = item.Height2; |
| | | worksheet.Cells[row, 13].Value = item.Height1; |
| | | worksheet.Cells[row, 19].Value = item.PressPressure; |
| | | worksheet.Cells[row, 25].Value = item.ScrewTorque; |
| | | if (item.PressTightenUnfinished == 1) |
| | | { |
| | | worksheet.Cells[row, 31].Value = "åè£
æ§ç´§å¼å¸¸"; |
| | | } |
| | | else if (item.CheckUnfinished == 1) |
| | | { |
| | | worksheet.Cells[row, 31].Value = "æ£æµå¼å¸¸"; |
| | | } |
| | | else |
| | | { |
| | | worksheet.Cells[row, 31].Value = "æ£å¸¸"; |
| | | } |
| | | row++; |
| | | |
| | | } |
| | | //worksheet.DeleteRow(row, worksheet.Dimension.End.Row - row + 1); |
| | | |
| | | package.Save(); |
| | | |
| | | string pdfFileName = $"{DateTime.Now.ToString("yyyyMMddHHssmm")}.pdf"; |
| | | string pdfPath = $"{AppDomain.CurrentDomain.BaseDirectory}Download\\{pdfFileName}"; |
| | | |
| | | Workbook workbook = new Workbook(); |
| | | workbook.LoadFromFile(savePath); |
| | | |
| | | // 转æ¢ç¬¬ä¸ä¸ªå·¥ä½è¡¨å°PDF |
| | | workbook.SaveToFile(pdfPath, FileFormat.PDF); |
| | | return WebResponseContent.Instance.OK(data: new { path = pdfPath, fileName = pdfFileName }); |
| | | |
| | | } |
| | | |
| | | |
| | | // <summary> |
| | | /// èªå®ä¹Excelåå
æ ¼åå¹¶è§åå¤å¶æ¹æ³ï¼å
¼å®¹ä½çæ¬EPPlusï¼ |
| | | /// </summary> |
| | | /// <param name="worksheet">Excelå·¥ä½è¡¨</param> |
| | | /// <param name="sourceRange">æºåå
æ ¼èå´</param> |
| | | /// <param name="targetRange">ç®æ åå
æ ¼èå´</param> |
| | | public void CopyCellMerge(ExcelWorksheet worksheet, ExcelRange sourceRange, ExcelRange targetRange) |
| | | { |
| | | if (sourceRange == null || targetRange == null) return; |
| | | if (sourceRange.Worksheet != worksheet || targetRange.Worksheet != worksheet) return; |
| | | |
| | | // 1. å
å°æºèå´å
çåå¹¶åºåæåå°ä¸´æ¶åè¡¨ä¸ |
| | | var sourceMergeList = new List<string>(); |
| | | foreach (var merge in worksheet.MergedCells) |
| | | { |
| | | var mergeRange = worksheet.Cells[merge]; |
| | | if (mergeRange.Start.Row >= sourceRange.Start.Row && mergeRange.End.Row <= sourceRange.End.Row |
| | | && mergeRange.Start.Column >= sourceRange.Start.Column && mergeRange.End.Column <= sourceRange.End.Column) |
| | | { |
| | | sourceMergeList.Add(merge); |
| | | } |
| | | } |
| | | |
| | | // 2. éå临æ¶å表ï¼å®å
¨å°åå»ºç®æ åå¹¶åºå |
| | | foreach (var merge in sourceMergeList) |
| | | { |
| | | var mergeRange = worksheet.Cells[merge]; |
| | | int rowOffset = targetRange.Start.Row - sourceRange.Start.Row; |
| | | int colOffset = targetRange.Start.Column - sourceRange.Start.Column; |
| | | var targetMergeRange = worksheet.Cells[ |
| | | mergeRange.Start.Row + rowOffset, |
| | | mergeRange.Start.Column + colOffset, |
| | | mergeRange.End.Row + rowOffset, |
| | | mergeRange.End.Column + colOffset |
| | | ]; |
| | | targetMergeRange.Merge = true; |
| | | } |
| | | } |
| | | } |
| | | } |