using FrontendWebApi.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using Repository.BackendRepository.Interface; using Repository.FrontendRepository.Interface; using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; namespace FrontendWebApi.ApiControllers { [Route("api/[controller]")] [ApiController] public class OperationController : MyBaseApiController { private readonly IBackendRepository backendRepository; private string operationFileSaveAsPath = ""; public OperationController(IBackendRepository backendRepository) { this.backendRepository = backendRepository; operationFileSaveAsPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "upload", "operation"); } [HttpPost] public async Task>> MaiSysList() { ApiResult> apiResult = new ApiResult>(); List main_system_list = new List(); try { var sqlString = @$"SELECT * FROM variable WHERE system_type = @main_system_type AND deleted = 0 ORDER BY system_priority, created_at desc"; var param = new { @main_system_type = main_system_type }; main_system_list = await backendRepository.GetAllAsync(sqlString, param); apiResult.Code = "0000"; apiResult.Data = main_system_list; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = "系統內部錯誤,請聯絡管理者。"; Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } return apiResult; } [HttpPost] public async Task>> SubSysList(string main_system_tag) { ApiResult> apiResult = new ApiResult>(); List sub_system_list = new List(); try { var sqlString = @$"SELECT v2.* FROM variable v2 JOIN variable v1 ON v2.system_parent_id = v1.id AND v1.system_type = @main_system_type AND v1.deleted = 0 WHERE v2.system_type = @sub_system_type AND v2.deleted = 0 AND v1.system_type = @main_system_tag ORDER BY v2.system_priority, v2.created_at desc"; var param = new { @main_system_type = main_system_type, @sub_system_type = sub_system_type, @main_system_tag = main_system_tag }; sub_system_list = await backendRepository.GetAllAsync(sqlString, param); apiResult.Code = "0000"; apiResult.Data = sub_system_list; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = "系統內部錯誤,請聯絡管理者。"; Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } return apiResult; } /// /// 廠商資料列表(搜寻) /// /// /// public async Task>> OpeFirList(OperationFindList ofl) { ApiResult> apiResult = new ApiResult>(); List opList = new List(); string sWhere = ""; try { if (ofl.start_created_at != null || ofl.end_created_at != null) { sWhere += $@" and (of.created_at >= isnull(@start_created_at, of.created_at) AND of.created_at <= isnull(@end_created_at, of.created_at))"; } else if (ofl.today) { sWhere += $@" and convert(of.created_at, DATE) = convert(NOW(), DATE)"; } else if (ofl.yesterday) { sWhere += $@" and convert(of.created_at, DATE) = convert(ADDDATE(NOW(), -1), DATE)"; } if (ofl.sub_system_tag != null || ofl.main_system_tag != null) { sWhere += $@" and (of.device_system_category_layer2 = isnull(@main_system_tag, device_system_category_layer2) AND of.device_system_category_layer3 = isnull(@sub_system_tag, device_system_category_layer3))"; } var sqlString = @$"select of.*, v2.system_key from operation_firm of left join variable v1 on of.device_system_category_layer2 = v1.system_value and v1.system_type = @main_system_type and v1.delted = 0 left join variable v2 on v1.id = v2.system_parent_id and of.device_system_category_layer3 = v2.system_value and v2.system_type = @sub_system_type and v2.deleted = 0 where of.deleted = 0" + sWhere; var param = new { @sub_system_type = sub_system_type, @start_created_at = ofl.start_created_at, @end_created_at = ofl.end_created_at, @today = ofl.today, @yesterday = ofl.yesterday, @sub_system_tag = ofl.sub_system_tag, @main_system_tag = ofl.main_system_tag }; opList = await backendRepository.GetAllAsync(sqlString, param); apiResult.Code = "0000"; apiResult.Data = opList; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = "系統內部錯誤,請聯絡管理者。"; Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } return apiResult; } /// /// 新增一笔廠商資料 /// /// /// public async Task> SaveOpeFirm(Operation_Firm of) { ApiResult apiResult = new ApiResult(); try { if (of.tax_id_number != null) { var sWhere = "deleted = 0 AND tax_id_number = @tax_id_number"; var ofo = await backendRepository.GetOneAsync("operation_firm", sWhere, new { @tax_id_number = of.tax_id_number }); if (ofo != null) { apiResult.Code = "0002"; apiResult.Data = "已有相同的统一编号"; return apiResult; } } Dictionary operation_firm = new Dictionary() { { "@deleted", 0 }, { "@device_system_category_layer2", of.device_system_category_layer2 }, { "@device_system_category_layer3", of.device_system_category_layer3 }, { "@name", of.name }, { "@contact_person", of.contact_person }, { "@phone", of.phone }, { "@email", of.email }, { "@tax_id_number", of.tax_id_number }, { "@remark", of.remark }, { "@created_by", myUser.userinfo_guid }, { "@created_at", DateTime.Now } }; await backendRepository.AddOneByCustomTable(operation_firm, "operation_firm"); apiResult.Code = "0000"; apiResult.Data = "新增成功"; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = "系統內部錯誤,請聯絡管理者。"; string json = System.Text.Json.JsonSerializer.Serialize(of); Logger.LogError("【" + controllerName + "/" + actionName + "】" + json); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } return apiResult; } /// /// 编辑一笔廠商資料 /// /// /// public async Task> EdtOneOpeFirm(Operation_Firm of) { ApiResult apiResult = new ApiResult(); try { var sWhere = @$"deleted = 0 and id = @id"; var gm = await backendRepository.GetOneAsync("operation_firm", sWhere, new { @id = of.id }); if (gm == null) { apiResult.Code = "0001"; apiResult.Data = "無法找到厂商"; return apiResult; } if (of.tax_id_number != null) { sWhere = "deleted = 0 AND tax_id_number = @tax_id_number and id != @id"; var ofo = await backendRepository.GetOneAsync("operation_firm", sWhere, new { @tax_id_number = of.tax_id_number, @id = of.id }); if (ofo != null) { apiResult.Code = "0002"; apiResult.Data = "已有相同的统一编号"; return apiResult; } } Dictionary operation_firm = new Dictionary() { { "@deleted", of.deleted }, { "@device_system_category_layer2", of.device_system_category_layer2 }, { "@device_system_category_layer3", of.device_system_category_layer3 }, { "@name", of.name }, { "@contact_person", of.contact_person }, { "@phone", of.phone }, { "@email", of.email }, { "@tax_id_number", of.tax_id_number }, { "@remark", of.remark }, { "updated_by", myUser.userinfo_guid }, { "updated_at", DateTime.Now } }; await backendRepository.UpdateOneByCustomTable(operation_firm, "operation_firm", "id = '" + of.id + "'"); apiResult.Code = "0000"; apiResult.Data = "修改成功"; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = "系統內部錯誤,請聯絡管理者。"; string json = System.Text.Json.JsonSerializer.Serialize(of); Logger.LogError("【" + controllerName + "/" + actionName + "】" + json); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } return apiResult; } /// /// 汇出excel /// /// public FileResult ExportExcel() { var workbook = new XSSFWorkbook(); #region excel設定 IFont font12 = workbook.CreateFont(); font12.FontName = "新細明體"; font12.FontHeightInPoints = 12; ICellStyle style12 = workbook.CreateCellStyle(); style12.SetFont(font12); style12.Alignment = HorizontalAlignment.Center; style12.VerticalAlignment = VerticalAlignment.Center; IFont font12Times = workbook.CreateFont(); font12Times.FontName = "Times New Roman"; font12Times.FontHeightInPoints = 12; IFont font18 = workbook.CreateFont(); font18.FontName = "新細明體"; font18.FontHeightInPoints = 18; font18.IsBold = true; ICellStyle styleTitle18 = workbook.CreateCellStyle(); styleTitle18.SetFont(font18); styleTitle18.Alignment = HorizontalAlignment.Center; styleTitle18.VerticalAlignment = VerticalAlignment.Center; ICellStyle styleLeft12 = workbook.CreateCellStyle(); styleLeft12.SetFont(font12); styleLeft12.Alignment = HorizontalAlignment.Left; styleLeft12.VerticalAlignment = VerticalAlignment.Center; ICellStyle styleLine12 = workbook.CreateCellStyle(); styleLine12.SetFont(font12); styleLine12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; styleLine12.VerticalAlignment = VerticalAlignment.Center; styleLine12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; styleLine12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; styleLine12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; styleLine12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; ICellStyle stylein12 = workbook.CreateCellStyle(); stylein12.SetFont(font12Times); stylein12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left; stylein12.VerticalAlignment = VerticalAlignment.Center; stylein12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; stylein12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; stylein12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; stylein12.WrapText = true; #endregion var sqlString = $@"select of.*, v2.system_key from operation_firm of left join variable v1 on of.device_system_category_layer2 = v1.system_value and v1.system_type = @main_system_type and v1.delted = 0 left join variable v2 on v1.id = v2.system_parent_id and of.device_system_category_layer3 = v2.system_value and v2.system_type = @sub_system_type and v2.deleted = 0 where of.deleted = 0"; var sheet = workbook.CreateSheet("廠商資料"); var operation_firm = backendRepository.GetAllAsync(sqlString, null); int RowPosition = 0; IRow row = sheet.CreateRow(RowPosition); sheet.SetColumnWidth(0, 4 * 160 * 12); sheet.SetColumnWidth(1, 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); 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(2); cell.SetCellValue("建立時間"); cell.CellStyle = styleLine12; foreach (var of in operation_firm.Result) { RowPosition += 1; row = sheet.CreateRow(RowPosition); for (var a = 0; a < 8; a++) { cell = row.CreateCell(a); if (a == 0) { cell.SetCellValue(of.system_key); } if (a == 1) { cell.SetCellValue(of.name); } if (a == 2) { cell.SetCellValue(of.contact_person); } if (a == 3) { cell.SetCellValue(of.phone); } if (a == 4) { cell.SetCellValue(of.email); } if (a == 5) { cell.SetCellValue(of.tax_id_number); } if (a == 2) { cell.SetCellValue(of.remark); } if (a == 7) { cell.SetCellValue(of.Created_at); } cell.CellStyle = style12; } } var ms = new NpoiMemoryStream { AllowClose = false }; workbook.Write(ms); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); return File(ms, "application/vnd.ms-excel", "廠商資料.xlsx"); } } }