From df95bf5827b46558a2937545ec9d729a581d3ccc Mon Sep 17 00:00:00 2001 From: dev02 Date: Wed, 26 Jul 2023 09:54:36 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=BE=8C=E7=AB=AF]=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=8C=AF=E5=87=BA=E6=A2=9D=E4=BB=B6,=20=E8=AA=BF=E6=95=B4join?= =?UTF-8?q?=E5=95=8F=E9=A1=8C=20[=E5=89=8D=E7=AB=AF]=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=99=82=E9=96=93=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/_operation.html | 7 +- .../ApiControllers/OperationController.cs | 350 +++++++++--------- .../excel/operation/保養記錄_2023-07-24.xlsx | Bin 0 -> 4705 bytes .../excel/operation/廠商資料_2023-07-24.xlsx | Bin 0 -> 4652 bytes .../excel/operation/維修_2023-07-24.xlsx | Bin 0 -> 5025 bytes 5 files changed, 184 insertions(+), 173 deletions(-) create mode 100644 FrontendWebApi/wwwroot/excel/operation/保養記錄_2023-07-24.xlsx create mode 100644 FrontendWebApi/wwwroot/excel/operation/廠商資料_2023-07-24.xlsx create mode 100644 FrontendWebApi/wwwroot/excel/operation/維修_2023-07-24.xlsx diff --git a/Frontend/_operation.html b/Frontend/_operation.html index 0e6f5e6..1a87b37 100644 --- a/Frontend/_operation.html +++ b/Frontend/_operation.html @@ -892,6 +892,7 @@ if (dateType == 'tdy') { pageAct.startdate = new Date(displayDate(new Date(new Date().setDate(new Date().getDate())), 'date')); + pageAct.enddate = new Date(displayDate(new Date(new Date().setDate(new Date().getDate() - 1)), 'date')); $('#startdate').val(today); $('#startdate').data('val', today); $('#enddate').val(today); @@ -899,6 +900,7 @@ } else if (dateType == 'ytd') { pageAct.startdate = new Date(displayDate(new Date(new Date().setDate(new Date().getDate() - 1)), 'date')); + pageAct.enddate = new Date(displayDate(new Date(new Date().setDate(new Date().getDate() - 2)), 'date')); $('#startdate').val(ytd); $('#startdate').data('val', ytd); $('#enddate').val(ytd); @@ -916,7 +918,8 @@ $('#startdate').data('val', $('#startdate').val()); $('#enddate').data('val', $('#enddate').val()); } - + console.log("start :" + pageAct.startdate); + console.log("end :" + pageAct.enddate); refTable(); } } @@ -1001,7 +1004,7 @@ function exportExcel(e) { console.log("export", e) let url = baseApiUrl + "/operation/OpeExportExcel"; - + console.log() objSendData.Data = { work_type: pageAct.work_type, startdate: pageAct.startdate == undefined ? null : pageAct.startdate, diff --git a/FrontendWebApi/ApiControllers/OperationController.cs b/FrontendWebApi/ApiControllers/OperationController.cs index 70679ec..6f53423 100644 --- a/FrontendWebApi/ApiControllers/OperationController.cs +++ b/FrontendWebApi/ApiControllers/OperationController.cs @@ -389,184 +389,191 @@ namespace FrontendWebApi.ApiControllers } else if (ee.work_type == 1) { - var sqlString = $@"select opr.*, concat(d.device_floor_tag, ' ', d.device_last_name, ' ', d.device_serial_tag) as device_name, ui.full_name as user_full_name + var sqlString = $@"select opr.*, d.full_name as device_name, ui.full_name as user_full_name from operation_record opr left join device d on opr.fix_do_code = d.device_number and d.deleted = 0 and d.device_area_tag = SUBSTRING_INDEX(opr.fix_do_code, '_', 1) - and d.device_building_tag = SUBSTRING_INDEX(opr.fix_do_code, '_', 2) and d.device_floor_tag = SUBSTRING_INDEX(opr.fix_do_code, '_', 5) + and d.device_building_tag = SUBSTRING_INDEX(SUBSTRING_INDEX(opr.fix_do_code, '_', 2), '_', -1) and d.device_floor_tag = SUBSTRING_INDEX(SUBSTRING_INDEX(opr.fix_do_code, '_', 5), '_', -1) and d.device_system_tag = opr.device_system_category_layer2 and d.device_name_tag = opr.device_system_category_layer3 left join userinfo ui on opr.work_person_id = ui.userinfo_guid - where opr.deleted = 0 and opr.work_type = 1;"; - var sheet = workbook.CreateSheet("廠商資料"); - var operation_record = backendRepository.GetAllAsync(sqlString, null); - List operation_record_file = new List(); - - if (operation_record.Result.Count > 0) - { - foreach (var or in operation_record.Result) - { - sqlString = $@"select * from operation_record_file where record_id = @record_id"; - var param = new { @record_id = or.id }; - operation_record_file = backendRepository.GetAllAsync(sqlString, param).Result; - or.lorf = operation_record_file; - } - - int RowPosition = 0; - #region set cell - IRow row = sheet.CreateRow(RowPosition); - sheet.SetColumnWidth(0, 4 * 160 * 12); - sheet.SetColumnWidth(1, 4 * 160 * 12); - sheet.SetColumnWidth(2, 4 * 160 * 12); - sheet.SetColumnWidth(3, 4 * 160 * 12); - sheet.SetColumnWidth(4, 4 * 160 * 12); - sheet.SetColumnWidth(5, 4 * 160 * 12); - sheet.SetColumnWidth(6, 4 * 160 * 12); - sheet.SetColumnWidth(7, 4 * 160 * 12); - sheet.SetColumnWidth(8, 4 * 160 * 12); - sheet.SetColumnWidth(9, 4 * 160 * 12); - ICell cell = row.CreateCell(0); - cell.SetCellValue("項目"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(1); - cell.SetCellValue("位置"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(2); - cell.SetCellValue("表單號"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(3); - cell.SetCellValue("設備名稱"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(4); - cell.SetCellValue("狀態"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(5); - cell.SetCellValue("處理人員"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(6); - cell.SetCellValue("預計施工時間"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(7); - cell.SetCellValue("檔案上傳"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(8); - cell.SetCellValue("完成時間"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(9); - cell.SetCellValue("建立時間"); - cell.CellStyle = styleLine12; - #endregion - foreach (var or in operation_record.Result) - { - RowPosition += 1; - row = sheet.CreateRow(RowPosition); - for (var i = 0; i < 10; i++) - { - cell = row.CreateCell(i); - if (i == 0) - { - cell.SetCellValue(or.work_type_name); - } - if (i == 1) - { - cell.SetCellValue(or.location); - } - if (i == 2) - { - cell.SetCellValue(or.formId); - } - if (i == 3) - { - cell.SetCellValue(or.device_name); - } - if (i == 4) - { - cell.SetCellValue(or.status_name); - } - if (i == 5) - { - cell.SetCellValue(or.user_full_name); - } - if (i == 6) - { - cell.SetCellValue(or.start_time != null ? ((DateTime)or.start_time).ToString("yyyy/MM/dd HH:mm:dd") : null); - } - if (i == 7) - { - var imageNames = or.lorf.Count > 0 ? or.lorf.Select(x => x.save_file_name).ToList() : null; - if (imageNames != null) - { - //insert image process - var dy1 = 10; - var dx1 = 10; - - //image column - sheet.SetColumnWidth(i, 16 * imageNames.Count * 256); //width: picture width(16:100), image total, per character(256) - foreach (var ins in imageNames) - { - //image initial - var extName = ins.Split('.')[1].ToUpper().Equals("JPG") ? "PNG" : ins.Split('.')[1].ToUpper(); - var fullPath = Path.Combine(operationFileSaveAsPath, ins); - var img = Image.FromFile(fullPath); - - //compress image - decimal sizeRatio = ((decimal)img.Height / img.Width); - int thumbWidth = 100; - int thumbHeight = decimal.ToInt32(sizeRatio * thumbWidth); - var thumbStream = img.GetThumbnailImage(thumbWidth, thumbHeight, () => false, IntPtr.Zero); - var memoryStream = new MemoryStream(); - thumbStream.Save(memoryStream, ImageFormat.Jpeg); - - //setting pictureType enum - int format = 0; - var drawing = (XSSFDrawing)sheet.CreateDrawingPatriarch(); - format = Convert.ToInt32(Enum.Parse(typeof(PictureType), extName)); - - //set picture size and location - if (format != 0) - { - var pictureIds = workbook.AddPicture(memoryStream.ToArray(), format); - XSSFClientAnchor anchor = new XSSFClientAnchor(XSSFShape.EMU_PER_PIXEL * dx1, XSSFShape.EMU_PER_PIXEL * dy1, 0, 0, i, j, 0, 0); - anchor.AnchorType = AnchorType.DontMoveAndResize; - var picture = (XSSFPicture)drawing.CreatePicture(anchor, pictureIds); - var size = picture.GetImageDimension(); - row.HeightInPoints = size.Height; - picture.Resize(); - - //add 105 each new pic - dx1 += 105; - } - } - } - - j++; - } - if (i == 8) - { - cell.SetCellValue(or.finish_time != null ? ((DateTime)or.finish_time).ToString("yyyy/MM/dd HH:mm:dd") : null); - } - if (i == 9) - { - cell.SetCellValue(or.Created_at); - } - - cell.CellStyle = style12; - } - } - } - } - else if (ee.work_type == 2) - { - var sqlString = $@"select opr.*, concat(d.device_floor_tag, ' ', d.device_last_name, ' ', d.device_serial_tag) as device_name, ui.full_name as user_full_name - from operation_record opr - left join device d on opr.fix_do_code = d.device_number and d.deleted = 0 and d.device_area_tag = SUBSTRING_INDEX(opr.fix_do_code, '_', 1) - and d.device_building_tag = SUBSTRING_INDEX(opr.fix_do_code, '_', 2) and d.device_floor_tag = SUBSTRING_INDEX(opr.fix_do_code, '_', 5) - and d.device_system_tag = opr.device_system_category_layer2 and d.device_name_tag = opr.device_system_category_layer3 - left join userinfo ui on opr.work_person_id = ui.userinfo_guid - where opr.deleted = 0 and opr.work_type = 2"; + where opr.deleted = 0 and opr.work_type = 1 and opr.created_at >= '{ee.startdate.ToString().Split("T")[0]}' and opr.created_at <= '{ee.enddate.ToString().Split("T")[0]}';"; var sheet = workbook.CreateSheet("廠商資料"); var operation_record = backendRepository.GetAllAsync(sqlString); List operation_record_file = new List(); - if (operation_record.Result.Count > 0) + if (operation_record.Result != null) + { + if (operation_record.Result.Count > 0) + { + foreach (var or in operation_record.Result) + { + sqlString = $@"select * from operation_record_file where record_id = @record_id"; + var param = new { @record_id = or.id }; + operation_record_file = backendRepository.GetAllAsync(sqlString, param).Result; + or.lorf = operation_record_file; + } + + int RowPosition = 0; + #region set cell + IRow row = sheet.CreateRow(RowPosition); + sheet.SetColumnWidth(0, 4 * 160 * 12); + sheet.SetColumnWidth(1, 4 * 160 * 12); + sheet.SetColumnWidth(2, 4 * 160 * 12); + sheet.SetColumnWidth(3, 4 * 160 * 12); + sheet.SetColumnWidth(4, 4 * 160 * 12); + sheet.SetColumnWidth(5, 4 * 160 * 12); + sheet.SetColumnWidth(6, 4 * 160 * 12); + sheet.SetColumnWidth(7, 4 * 160 * 12); + sheet.SetColumnWidth(8, 4 * 160 * 12); + sheet.SetColumnWidth(9, 4 * 160 * 12); + ICell cell = row.CreateCell(0); + cell.SetCellValue("項目"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(1); + cell.SetCellValue("位置"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(2); + cell.SetCellValue("表單號"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(3); + cell.SetCellValue("設備名稱"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(4); + cell.SetCellValue("狀態"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(5); + cell.SetCellValue("處理人員"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(6); + cell.SetCellValue("預計施工時間"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(7); + cell.SetCellValue("檔案上傳"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(8); + cell.SetCellValue("完成時間"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(9); + cell.SetCellValue("建立時間"); + cell.CellStyle = styleLine12; + #endregion + foreach (var or in operation_record.Result) + { + RowPosition += 1; + row = sheet.CreateRow(RowPosition); + for (var i = 0; i < 10; i++) + { + cell = row.CreateCell(i); + if (i == 0) + { + cell.SetCellValue(or.work_type_name); + } + if (i == 1) + { + cell.SetCellValue(or.location); + } + if (i == 2) + { + cell.SetCellValue(or.formId); + } + if (i == 3) + { + cell.SetCellValue(or.device_name); + } + if (i == 4) + { + cell.SetCellValue(or.status_name); + } + if (i == 5) + { + cell.SetCellValue(or.user_full_name); + } + if (i == 6) + { + cell.SetCellValue(or.start_time != null ? ((DateTime)or.start_time).ToString("yyyy/MM/dd HH:mm:dd") : null); + } + if (i == 7) + { + var imageNames = or.lorf.Count > 0 ? or.lorf.Where(x => x.ori_file_name.Contains("JPG") || x.ori_file_name.Contains("PNG")).Select(x => x.save_file_name).ToList() : null; + if (imageNames != null) + { + //insert image process + var dy1 = 10; + var dx1 = 10; + + //image column + sheet.SetColumnWidth(i, 16 * imageNames.Count * 256); //width: picture width(16:100), image total, per character(256) + foreach (var ins in imageNames) + { + //image initial + var extName = ins.Split('.')[1].ToUpper().Equals("JPG") ? "PNG" : ins.Split('.')[1].ToUpper(); + var fullPath = Path.Combine(operationFileSaveAsPath, ins); + var img = Image.FromFile(fullPath); + + //compress image + decimal sizeRatio = ((decimal)img.Height / img.Width); + int thumbWidth = 100; + int thumbHeight = decimal.ToInt32(sizeRatio * thumbWidth); + var thumbStream = img.GetThumbnailImage(thumbWidth, thumbHeight, () => false, IntPtr.Zero); + var memoryStream = new MemoryStream(); + thumbStream.Save(memoryStream, ImageFormat.Jpeg); + + //setting pictureType enum + int format = 0; + var drawing = (XSSFDrawing)sheet.CreateDrawingPatriarch(); + format = Convert.ToInt32(Enum.Parse(typeof(PictureType), extName)); + + //set picture size and location + if (format != 0) + { + var pictureIds = workbook.AddPicture(memoryStream.ToArray(), format); + XSSFClientAnchor anchor = new XSSFClientAnchor(XSSFShape.EMU_PER_PIXEL * dx1, XSSFShape.EMU_PER_PIXEL * dy1, 0, 0, i, j, 0, 0); + anchor.AnchorType = AnchorType.DontMoveAndResize; + var picture = (XSSFPicture)drawing.CreatePicture(anchor, pictureIds); + var size = picture.GetImageDimension(); + row.HeightInPoints = size.Height; + picture.Resize(); + + //add 105 each new pic + dx1 += 105; + } + } + } + + j++; + } + if (i == 8) + { + cell.SetCellValue(or.finish_time != null ? ((DateTime)or.finish_time).ToString("yyyy/MM/dd HH:mm:dd") : null); + } + if (i == 9) + { + cell.SetCellValue(or.Created_at); + } + + cell.CellStyle = style12; + } + } + } + + } + } + else if (ee.work_type == 2) + { + var sqlString = $@"select opr.*, d.full_name as device_name, ui.full_name as user_full_name + from operation_record opr + left join device d on opr.fix_do_code = d.device_number and d.deleted = 0 and d.device_area_tag = SUBSTRING_INDEX(opr.fix_do_code, '_', 1) + and d.device_building_tag = SUBSTRING_INDEX(SUBSTRING_INDEX(opr.fix_do_code, '_', 2), '_', -1) and d.device_floor_tag = SUBSTRING_INDEX(SUBSTRING_INDEX(opr.fix_do_code, '_', 5), '_', -1) + and d.device_system_tag = opr.device_system_category_layer2 and d.device_name_tag = opr.device_system_category_layer3 + left join userinfo ui on opr.work_person_id = ui.userinfo_guid + where opr.deleted = 0 and opr.work_type = 2 and opr.created_at >= '{ee.startdate.ToString().Split("T")[0]}' and opr.created_at <= '{ee.enddate.ToString().Split("T")[0]}';"; + + var sheet = workbook.CreateSheet("廠商資料"); + var operation_record = backendRepository.GetAllAsync(sqlString); + List operation_record_file = new List(); + + if (operation_record.Result != null) + { + if (operation_record.Result.Count > 0) { foreach (var or in operation_record.Result) { @@ -667,7 +674,7 @@ namespace FrontendWebApi.ApiControllers } if (i == 8)//image { - var imageNames = or.lorf.Count > 0 ? or.lorf.Select(x => x.save_file_name).ToList() : null; + var imageNames = or.lorf.Count > 0 ? or.lorf.Where(x => x.ori_file_name.Contains("JPG") || x.ori_file_name.Contains("PNG")).Select(x => x.save_file_name).ToList() : null; if (imageNames != null) { //insert image process @@ -729,6 +736,7 @@ namespace FrontendWebApi.ApiControllers } } } + } } workbook.Write(fs); diff --git a/FrontendWebApi/wwwroot/excel/operation/保養記錄_2023-07-24.xlsx b/FrontendWebApi/wwwroot/excel/operation/保養記錄_2023-07-24.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..56e0ab784240c15d9b0d7db4f424eac2dd7e2ce2 GIT binary patch literal 4705 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 literal 0 HcmV?d00001 diff --git a/FrontendWebApi/wwwroot/excel/operation/廠商資料_2023-07-24.xlsx b/FrontendWebApi/wwwroot/excel/operation/廠商資料_2023-07-24.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3dad3c88c357f78d6c5526770e57b63cf0ee6e31 GIT binary patch literal 4652 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 literal 0 HcmV?d00001 diff --git a/FrontendWebApi/wwwroot/excel/operation/維修_2023-07-24.xlsx b/FrontendWebApi/wwwroot/excel/operation/維修_2023-07-24.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9f60db5de3e03485d320c497da966126c3827071 GIT binary patch literal 5025 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 C@_V)b literal 0 HcmV?d00001